From f524d63cd93b704744e76f136dcdd311a71001ea Mon Sep 17 00:00:00 2001 From: knicolas22 Date: Thu, 19 Jun 2025 10:00:16 +0200 Subject: [PATCH] First Start First Start base 3.0.1 --- .../workflows/companion-module-checks.yaml | 18 + .gitignore | 1 + .yarn/install-state.gz | Bin 0 -> 163399 bytes .yarnrc.yml | 1 + LICENSE | 21 + README.md | 3 + actions.js | 395 ++ companion/HELP.md | 65 + companion/manifest.json | 33 + configFields.js | 61 + feedbacks.js | 228 + main.js | 390 ++ package-lock.json | 3819 +++++++++++++++++ package.json | 23 + pixap-pixtimerpro.js | 58 + presets.js | 1272 ++++++ test.js | 1226 ++++++ upgrades.js | 13 + variables.js | 37 + yarn.lock | 1958 +++++++++ 20 files changed, 9622 insertions(+) create mode 100644 .github/workflows/companion-module-checks.yaml create mode 100644 .gitignore create mode 100644 .yarn/install-state.gz create mode 100644 .yarnrc.yml create mode 100644 LICENSE create mode 100644 README.md create mode 100644 actions.js create mode 100644 companion/HELP.md create mode 100644 companion/manifest.json create mode 100644 configFields.js create mode 100644 feedbacks.js create mode 100644 main.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 pixap-pixtimerpro.js create mode 100644 presets.js create mode 100644 test.js create mode 100644 upgrades.js create mode 100644 variables.js create mode 100644 yarn.lock diff --git a/.github/workflows/companion-module-checks.yaml b/.github/workflows/companion-module-checks.yaml new file mode 100644 index 0000000..bc8d44e --- /dev/null +++ b/.github/workflows/companion-module-checks.yaml @@ -0,0 +1,18 @@ +name: Companion Module Checks + +on: + push: + +jobs: + check: + name: Check module + + if: ${{ !contains(github.repository, 'companion-module-template-') }} + + permissions: + packages: read + + uses: bitfocus/actions/.github/workflows/module-checks.yaml@main + # with: + # upload-artifact: true # uncomment this to upload the built package as an artifact to this workflow that you can download and share with others + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..002f89c --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/.yarn/install-state.gz b/.yarn/install-state.gz new file mode 100644 index 0000000000000000000000000000000000000000..0f09fc8f2a749a35483481e3fca71086e40b7fae GIT binary patch literal 163399 zcmV)6K*+xziwFP!000003atIh60OOO9)?Mj*_33`mJ}gQNs^sT4E?dZ!X2Rilh{wnjEek)TzDe?900RnE<{U{@4HeFF*dvzy9gx zfARkC>wotzfBoYxfAinpKi+@x3{jx@7Mp&=hyxC zfBpDZ?+?HJ^vlmb{!0JnUw-`kU;p^aAKpLt@xT1XEN!d(~sP5_>;;`E=!O z-}g*S#mG2$)V;@-WS!=h?V0=ajkBm_Pwcwv6K}^9tq^N}H+Zfs=hj)pv9&_)qeupa02U{YO9k!LRj)pZ@lbzy6cI`j7t2-}~`@`J119tzUlp zqkndP{cnHzxqtfkpZ>r9$G`m_{>^{WM#|rz1v7{En&aeVsLK@5wDE zkC|8PUShJTw(cji_t&5QqMIT_dbG%#=8*NJ$Sr%9k#C-J_sZNQ)g?3}x4Sxf^vbYK z-oCod!)sk}z1A9Mi!CR1;S+eJOzSi+U)v+dLyKtq+t)v-+t;iiQpvQpIIQ0(_cOY7 zG4s=)5hr>%d##WyD>m~Px?DM|?04=^RBzUnd*bnux1{xm@2IB3FJe{3_$l)^D_53$ z`}*DNJnCfGdTZSYHm6RFyX{&%+qr7h)Sl_rN5j|CzHf>4k#)}r&EorFy<0~fJ=;vW z*I7N!509^SzRlC`Q9Q9ix6V4*@$KukQY$$go|>L-dDePG?y`;BGCX&>6!n%(H?;EY zHARX;{Pyv+!>M*R$6IYn%Bv5$$BS!PTqU-jTWs6Yd;i^zJ2{7T0AGjS@QJV zZff+lx?gHn*Se3Q-Kum)KDStT&X%0n#p-(fs-88Wx1QxJTe@RjT;5?-%$LK3^0B^- z^0@J?bj}+6`t!$gkf%q3#FMht;nuE<9j-4!x5=gBMtoYM^Vz)jdew`i@3h|51T$k>mv);DML$bd9{8^f1zuMdKNJveGu9kOj7iQLO97R2tPk;!ezlfmn~de-7%HP7}|;=l#_7SUW?I)~Oedsj|q=Y(~|eg5_No$%s` zHyfu()^2)4N0#i!Sh;1*Ivz#Fl-03T_Iqc?q4jW9&poo%lCyg0T6>-88W7k}}W`P0vT`PfA#nNly{bV zv@GX($8NssR7jp#)-%iZb6!$!WV@cBJZci2@_M7j4)ea}ysMYaoV)1RLydcVoN&_a ztXD&5QcjFoIu1>V-n}#L*OmEBb)R*gSZm86dA!YM-^ue#aLv5%MLn!uL9V^DxojjP zB1EHh0{qc`Ky+8c;uYS8*|J~33^xHKk z*AkMGJGJj6-#*^dQS)k8&!!fdm$?)5c@v+>wBwisoO1i)*iw0)J1-JCXRY=%db9D= z#$)SydrlPId-CM*wNUwf=iU7`^~>MrjB+*4?6Ap_ckb5@yNK(Sqi%kLB-X^F?H5NI)85RhbH?!>&h9Pi z&QY&Zuen%nYLL+>G*X?k?Xlf_T$)Z?oMcaqTt-JRbUV2TbBBhRem%zH$nAI>S=Xvv zZcn+?>63WXLnDg_-Pt?zbiL$jL1KF3=&C#Y8O&~|&MfxI!suDLNSt(6i(fuxZ(2vr z!k0wVNx^l$9wT$t@2IyTc{74NNW2N zK3iK=J*P5U`jF@zBXXZ8m6q$Ra><16`@Q4%CyoJKH4?c`wYQyQTU1B3MWo4{TyJ`w z&u4E;>hvP*Go#~m9zuo7L?^rHzNHp+@3NJ0NOxYDUb9EhYj=O&tfi3* zho36+AjIhIZ@#XlV)5jesq&-MTUW2*wzF%?>(R{=*WOUC4%0)kS9k|Mxs0A)+L%`L zzW14Aal13I;H*jU;jf?noJCr;OIU!Ygw;{*%^iGe;_f!CUb{VfG&$JJlQ;KErK@8E zBqC+vGiOF)NKmzdlg#2vCh45iQ{FbGHKi)~)mim-Foxml9M7dEDzD$+;1pJ;W{J_$ zdyMzHobNuS-B;x4ox^fh7eJGYI1(S+NBh}fE0fSCe$)VEJfC^9U1{YAh6&#L)YtbX z8GGzSGsdlNO#9Xc9Fg=#^3EXH9)t zh+HBb*O=F?=1WFtMZQ)X9R4FtPj1HZ(Yy1$*%5l|<+@)tn?0pj_9{+tC@T}%|YrO0+J#1;UlIU(UC`sBimU?Y*^Nqa6o7c`oS1U?GfvK*z6nk84c2RN1 z?=@?G_UrqbfA#+G;~$|>`|Zbn@uzla+?lBKrGpvZscM+lJoN_dLTmQY-dEl|+2>8` zI~J_%F~zD=8rBkfMv{^qAkxuX=h(XQio+uwv&Fg1DLBn>C~4X6P4|D|3~&y~e!jSq z?VRrLLmF~-^zN;Js=P=~$XMF$9k`K#6WEZ39m~C`XU*Ctf%Iv=TS{B#ULZuDauT{< z-gOqoS@+axp1fb9(|S$iwC=vKGCXF4ir2-}?IXn;d&?E#^8>0bGMNJ*!-$8(oJ= zTWV9*L?yHAdv62}ttGvIyUCRk(!9<&uX$Z>VvGTIn3A{BecMi6TIUhkQ_u%{=*3>XR&Z+Ks?U?_N-P??$DjM&LdNGQo+XTvE3DfdX7|k#<3aAFFWRqh+6QTW zhue4$ul3$JKK#P1mN-|~*XZKJ0*?g-nH~M|Du2T!{7e+um9pN z`=?+3_?Pw1fBnl}|4_W-Ql){C1mrkv` zC-#!jb+wgeDb;;4vdpi`i?cQ{ciDRPUb0wpo)0-XkVLg)M~`<8?u{mW4;@w&`q_7i zFbDhjov-Kb{ZIe@AOG+(t^Q^G^-q8DH_~@!to_bAzW04=t)5et!q?skNY1b2yT%G8 z=ft}=?ioTep|^3$3Zp937zJ&=x5yt|)l~OKz276de52o1!EXjDSK7LMr;h*l$M4s_ z{^{pG{(1fK^ZfKr|NP%W82>ry;(y3{T&lUHhHl&tOiYr(z863y%eCey_|GB0Uqd^i zc%7TM%30je!R)~oRp(B3;9lfYq|9KmMdacdxEBDpb@;rgciBrjzn=9Zwvr_%8W-*A zi}OJKMkS(0RJG3GMO#dhdoR{oG<@#!O&`Q5$TQeip8fJ1u~L7GhW))zeUb{F#psStDGRhMcFi@Zx>flDDCMw4WFC%klJ zdz@p{^iqM+UuK;vXq#C`?+F5dNcxy~lTT0h)oDW(6CLWnm z9FlscQp$kKtGX*5f*1P&SY84$6BTk3SVF#+UE}q;p@zQs=sniE8x1?l;je*tKVWs} z>E5#3p5nF%0%LexE#{%SyR}@iUi7H5Ht{wf0d%vLZDQ(Jev=LC)D;l-WsCUe8ZD?J zFz?NtN80C(+)lb=+~s$iT1VfS@?4hG68(HPrLCppd%50w0eRQiw63lSx9DqgvTJdE zPuc3)t$Fd9{WC+}T&KYX=uQ9^4?jN z5Egy7gppD7bR0&3g6y@vRX1S&8{dOdm(7L&{0@XNN-ZI9jAntVw~jeML^`H-8q9SAm+5a9ZuS2O!^483C&8ogWzvRlg-z@syei5^9{5dcRjs%p0>}F6ubAB-R~uj7s`b2 z4-h~F5rpLE(W5>k{91S~wbid>#%McDURgNYcT@9es9jpnK9SSi>rHtNqqT-}e?;k;%GN{aU0^5~YJAq%U$os}zHpYDQ|P4FZY zFDM0DQDgndM+=7Mf53}Rw(>pit#k6z-VqQt3SDYnKR-*YEuY9O-8QFqVNOA74@L_A zi3rD($jb}Hjlp+ zCWO7EoW#5t%Eu)`#kuGW6ZEdSa0wshrpW`RbTy{6xO4X`^*q4`9!y=K?GUqAmIwT~X^W-w>g*f$ zwfhX~UJ#XBJCbrVlZ7ne>-sfS;cq?ZHj}x{t6#0;7huB*x7~6LeC<0pRu}Y4z^Jo2 z;|0b?z1vUNx@D1ZV-Z+qbFf|*iE~5a(hH{{${}I4^u52I-18*_AQtXij54w)K<>a(@%8;F5O>SgHTb-#-UR`mfD~w=ZUXDoeJ;4PCAvTX zJ=Wap1z96o4D@EcNd5Fhc`XmPDz>w{X=(B^mygg%zwa&pLe%f?fa|aHlY^3KwWE&$ z&0Wj+LQMDD3_x#hNY)?m#jrk$o?w^~6jv+hZDw^bGcF#+FVxvQLXhEwBuUsl9RT^{ z$f6D9un~WK|C1kjcYDGoVbfxm1n!3vd0LCCYo_R+0k-3?6QvA3QmB`CUE#UJlD;DS z-F)Y=E*`B%q?#EG3k*7lt&bEW_P9qy`}g?C6{C|)&}W`Eyus81_9!S8rf&fp>ihhX zoQC4HY>Qo!^4fdK%jq&hpZUN+$7InQ6EDtZOM+OJ519#FdjSj;1AeQ<*ZpUO9eV55 zjWolMdM?FC#ys+Q!g0s5^IQVpi901P`Ql@{_I|RZKQ-ii)??!M;sD!pYFS#@MZn_{!h@D%Xg(o5**lm2G=l!lJZak&2f$Jr5ZE_Q(6P&g9)l) z9@kOvyOO;g9X?OownA%~>(jMXhM8URvvq9ohL-s@Z>Wmav)e#-!!8}JJWc|ViUZEA z+n>4a>;7SKu^-_hWA(x*7?2sSj{8L0F=k~a*DLiC{SppM?n|~FdWLxIOeI7vfOywd zSz{aCoEL_|yqMQL3!nUbV8zzZFk~ZN-#>BSQIclfvT<*E5C)QqhrQ|_m})Ovr|V=G2R}bEqdj74ORe>m zT?He4)0i5w^VgsMgXYRuW`_2pQdz}zNUZC0%)l_D@ACBXRG`qtaOTRSeDs?i;_n{l zNfcfE?ZSan`+;*7g{tsT&L3_Zf6)s09j>X1w5?_pA#d=Z%PejsF*< zp$n9F~DM9;3a`1w(x9iM_jLe{+(9r{$a|YNT;9_YvTdE) zok|X5THqa-??t6A)BvfCyop81)U;yuW!*F9ya38mhjd+t)GbB94jhm>c zHHp9+zmqC&Z!?fB;AB8Ykt7;w1KBLF5y;T3WNz7HOV-lhdFE2NnKM8zH%1O$(v+Y*ZGH9|8H@ao?kz7HCTMgjo~wC?e6P9Uh@y`Xn~Uw{5yKv98?=m9!HU`b!&iOhrZ1PL|}Si&B6_+F>t zw^4-AIqtXUK&3tsV|4G@v!BSx-sK88#GUl(O1>QM%5Bh%m5=8vf6ssc*Zw`r{Xh8E zFaP$|zxeTggQ)V~{^U;vs+?7_LYhh;eH$iTQjDVYUUCB-FF(zLirA-If z8^&*-r(?~21L~b2@`vz@Egmj`OM;jPB%UO+T;~?f3E$H12OGX3my_d^S`;3hqj;`cnfb{ zdF~yUO^rhltKh#`Bkn_u`<@s+q8oAuBs)>nPUK|40wvp2dzSP|Ux>JJc6)<_p$-3D zAozpfoOw6kEjz0Zop*4Rz6){7z6a9LC&xShbl(Mu5%BA6N$Y!IeXk*r1>36Bi1uAZ zC_za)Z58F58~T%8%$QFEZ`EXB=G@|tK5MaWI=tTLjra6M`qQef8@1gj431O|y65f- z1v`Z4I$uBkuW_(3v51mId{|HfIfz7r3c?6c1U1_GSv2*KjFU$L$|*@>kJy# zWl(M8*uf||k;M);;0`b6mtgOA2AbF_ypaSE7?N^e9{*n0diMpo&?8-G<9b}o5U97$ z>`w8#IzdkbiDC9~5Uq9M@YAi41#8x<<~YSVG#_u$Bpr+X zz6Q1cOuzL=kW^+@5JqQGks^q&GHA4RX!LSO$&Nw&1dmb_{HvO0#$uPAbM~FsvBh9- zy1~a@%qG)miR2Yao;pGAbTNFMneY2&O4yv>t=kWiFc7VLxAh@2j=6@UCur63YS=T7 zDu7BAMg;Hh6b4?5{GNF#<~ni&sQ|Ug<#nwY2o&l z#keicl%2LI(%Sd}k5+>%01YuiC~*l40{R_(5F0QbuXq)!g3xWhHmIR#Mbv#zXCeS1 zYxQsT@xY()b^qKu54leCARA%_JXG5f?wd<1SE zT<%#7lY5RM4(=50G6iI3Cut7PX4lQ2;HLL{{rW#>TP+ZB&uj4#SP=nmohlwj@5YHd z(Of|R?!8tX5l;4f1A>!6a4A%=+b)jFx>wARyW$@gIsTwL{knS5jexag3}nOi#-6tn zseF`c$KCQEFVVm_3q$TJ=}F&+ytrVu_sETQ9CL;Hg>-M=6brc+4{3Gw0N5#j8M;kS z=^%n8PJTc|Hq?=FzvLq$aYPXF`c@8A064?q9-&j3q& ze)uOEjCYtZdU}eh4{~(vtyHSL;oR^|YcE_uFLd^XnZ5cvfji>7y8xslZHhHp;MI~3 zd6iJQuf<5@IB9L?cD{Cls&g*xRG8p?=N2g0CLmG8?8Zm;;2vC zeXLvS~$BlyN& zp$`yRuT04J7?r%!omwwj_$Etc+u)Pc1^whCfDfR9*f}NZ2lDatV}r zDg`wqa2brWU(cayUcYr}crmcWTDtSKy+|ZW^c-YRmw;qOkgd(l!91qK^iVtAp+YQi zUnCTKLRmQi_5na)#C>N$;xXLB~DMSa3_V4>xx(`#rCPyM5toH9NG6{xX(N7Tg zu~xls6u)^W%gsuV&r+g)*-Eo=h{$m)bBvC#_mO@E)SeJH~b(A0$<$g@57iF zq&TuggXnSd@l(1Acg`TF@eJP$~gU$~s~Zs}v^z~4rIN|?D8cVOzW_28++GYm~E z;pGi7WE@cfsA0?|5@F1^qF)JS&pcb|DnOB28_M5qSSv7FeO(`z()V>g_nwjc)&bOo zuwmfx5T#f!$r|{xPM@_HK@wg!Chob%9?*@CfL)P!h-w}C45pu1{oeEQIFITu3WcKX z8(cA-nP1lj2m#mlY!#6sI}e*PGmw@Gq_?{Pvmlv1;_d8U$7Xqecz`R1w6nq3IGpbDwmvq#li5p3*?@rzLpK2 zCo^*SV3bBc#zmYUK$ z2m3{)Br=WeE(`|miv^Vk&5O)l*QC1aLVRndt1{Pd$0=Zc!Mhby@BDRBcL!_X)0KRz9 zC*Kh&279tl1`=%&XCiY3hEc3dU^`F0#xWZ3Y>YlJkNuFQlz4{L@HHeDt_4tx3Guo% zZesaX>CBmpLeY~WOcuBf3{V*lWdkP~08eb7-daMv%L@_x6$n+Zd*Ek+rW88aM zAed(zZ9B^1$TVlkAtk|0k0wGs!+uJ-CnU?aS69RcppH{^yPkl`g~7~6=Yjn*1)9z2 z5QNM4=WqzkiT%C69eFK?hV>2A7<_rQ{k>ezFMuV;vsTSR0#_+w)ml6dX_%krt65SD zl9iS6ln4wZ!oCo&=7dD})#Y$r%TOdVlzZl`5NwusU*A8cwk71p-E z@kQSo49IGV-fscg2-Mc=3!!`EPB7Lt#*&3N!HpC^_m9f`oW8zc>6&edls={7)l7xh zC-mAaA^V_Bg7+IMecp!Tq&E=%ci|jVx_#p=g(%#h)wb<8YhYHxFKAVIN&WOPZ?mpX(4aHutZE9gU8d{sLbs=TK_|R|J z1|DMH3-rgLZX@&k6Ip--1TrT^YIhY_%Z-tqLyWu{nZ)vU5Jp^dKE(^oy&v70i2cKgu!{=o${;+h5JW<_ zwlhFau8;@f_H|n%T*u1(d>reo)=8bNEEOV(E@F;Bq7x^bUXNZwI#8tF8&m)@EQ>%( zrRy;`cP<}`n7)lI7uYa`41`v%GRc7a8pUldSm*hpRx91K5OtNgqVdr)NC??lI_3dG zFQmTMaf3w($^=;E`!L_eVvatH%`Ow~Va)CIwCDrUJU76ix*U^?TaLjj>;P`zlDXCT zDY@)OHq2DS{K0~ruAi^6FB&?`@N4fBxYkuZK0y9{e&k}NG>^3#-X+_x2O-*(mKRsH z<85RpynhPF`XD*~Y&v2>&l)ijdW<|(_hTU2>`&&bfm8t$e;{icSRmnrMil2QL z)h|w9G#Ku__hYmxEkBSkgPi_;ClW%-6x|sT{O~xy1c%sB_=7$m5MC!jy+CNfIZu-L z$rlGO$on8diC~Rg_7VGqtwB+4uGNNxdJ+qAS%jZ}!BwP2`9*I+-|qzTc%cU*FEw%; z8@&P1uo>cwFM(&{MDVMw8*6`3kVE(!tyzgW%ZR&SLkjvX+eodJ|Wd^ZS4~xdVf|Zb)MDlhkpM#)QGR7d(_Z5qxHLKmhLA(?y2ki+x%eGga#& zd>nPB-aGm2`#fMT3J@JgFoAmWvttpd&^TQESw;5s{a;Ax;9f=^u_IM!Ej#T=Y^H$V z+{}L4at78Z6e+|Xx*+Bp!%PDy#$Yyy3+dYIi>Pothz+r!?T!iZNW)(yS9zU2A=KX+ zSqoIhaa&2S+WjC>#3?i~^+L=%8I??#jf((pj<%fNJw)r*$`Z~6fP zzcZT$`MEhMWBZTmhT!?&-U13w9( z2#~I0NX@2{M0)OlbppHM5_w=Gd(A!SDZlMfG`e1SHRYW3;ppLQj3jh~j4*(-6?qKX zvg!z~+`t%&?MYIE+{QB=gcYpiwpQsH_hD~nv@iKokde9(jDL5x0OtE&U zUeCFx5Bx?jnbF>BV|84B)9a@walHmg1c=u#9WaDb=#efTWcNf@Fcy>?Lwq?_C4C>d zg1GIxP;?9;XXR~}x)J4}*ocB<4IFs79w}nEaNn;7TQvOL^ctV`T(~Dhy$4;$Vj8T+ zd*f;Dju-+lZ1=&YkXQ%-!G4JyU%&oki8U@DE*J#A}Ny&=AiEvv{9#?F?>l`PhU3^DlIu`U%6WVGXZZ5Nr%C${hEWQ#%06mwi32Wg+8JP;SyW;>cF^R>ph3R(#Y}gU92uJ+DBJ% z3=3?bt>VWTTNjn{o-(X0ST`O-|HvFpWYsyg&7F(24SfCkO$;-lh_>J(SbTR+I3y3q zc_N_g$212~1us<tc(7iIFdnvUWj21O4P6 zp8|^zzUDN>KAa-9h1SM;4nkuuia@Zjd=GA=n_~6W0&OgK2p(dx`RTn#%CFc*XE7ZZ zN-Na+-OUKqTE+`dR#lnb71%t10>n%TN%r^JWUM^8@WLN_%L=*2$Imn&APWw5Ep}OR zGnPQcUARb7=2epHdNxA3g(*yqIlRNW$XaEJ) z-95pYB)DmJG{M%f&c+gs)AaP+-s%mI?etz7;^V`DjVy?vSG{QdGZ1KQ_&xn#f?w!d z8(I?RE(GA2njk`EW8(@2jK2#`ui*{r^HQFZEp%$@h*s=TUv%xN06{5D#3U862IZ5N<}-VjNM=2MRrpG6FQ*&fDRc0FZM_)A|h+U$Mlhm#K#J|9jhr^TA?I* zgPtR3=5PmnZ@OQep>7A!JNz8D6_qTA3f5+D@~CZ}7}zr2QD0_}A^~4(avTWBS?mw2>8nAO=XuasOc@Es?ND-`SGVCFZIA zuEMEnhFX;gqtnfSt{0w^m79=FkS@y`dMfNKb=*z6EfHFeY!>;NF56ZPSb+|~JZ(1q zv1r;SDSj5tyHi43cRN0-l8Ye0??#aLAk`52o%#jsPhexnk;smnCGelA_eX$Am-32k zgw@}zGsq(Qo-Q8PzdlQL^n^3kSP>7hvXC0H9ERCQUHGtws03}`(rve3gtvSjW&maP zb|9MzcDOLCdEL4ozq`T9ss;c?9K`rP1abv<*srhFxA#NZJ|n{a{kG@(;D{m_jqVC0 zeqdiJvchpc!4a`LVhwiTxn)lv{eBCa6(=3boZDVQ3&F1LD7XVaaCsu!sG= zm;I(BeQJ;`!xMb-VZl4H%NDl5&w{%?6T5cGAGW|lF)9*6595nNN_JPQwdp*hkLh;8 z2;ErxEpm~r-J$RfY9ZRzU>OnQsDCfVgbKQ#_l>6t{mfoUtM*%lRTNk=g!#8ITb)tB zFMEUt%Y<{mhCMU}`5Xk8v7l5bK-&s`qVCjJfemQ~Os%#ehZrLi$vXY@{iC4i=U~&s zJrr~zZe8r+{9H?)2n|Zk_xKYW{IG(~;e#NoMS;y#{qx26X+~D?OhGKVS0mj27^tqUl4x^ChUCb0jO0>s zO}V7t>BSMkCBi{W1N<9;1WA~gwfJp*Uw75}J`V^hYaMszd;XxFiP36{YIbbm2pK&v zLs^NKwU1RqdMwq`w(QsQVW_IX8pKeVTD`otOwszjy%~u%@4sHbg+M;s)ikke^{~Pn zo<}YRy5YNz?j8gxAzJr`s~a%}?XrwGY@=t?c1NxoTD!N?a$p%M+7PS|__i~t;Yp{$1v~o}MJ^BjUzg`vK;-2gB#nk}7r?o`pcGkO_SXlEzmulP#nhO(gqA_lV zZP2>a8nBovd}k(wakJX&h92#=*7NKS5IvojqT66Kx?i*KKLIMe4_(CpF^UOKs~kSb zEJ(L<8W(&}1@53;?ugkFceG-y>2QAWXtk*$=H?KSpVrge@%IW{Lh=}Ay~TvAHW1V= zp@lN6wqHH9iNKDE{tdJuZ($mpR}+Jt-VD9w%zrsU;o_=z7eXbPF&Oq-&dw{G%|^u9aQ4* zqd+cmyV!~0x3_lNAf4U!y&P0}a~4(%`hf6!3v4$Iie72wzo>TY(qb(qJGhvH*dc@6gBc-2+`cBtnOaSaP4rp>rUuli zvd)*H?8rTY~YI!#;SkTjJc zCz&add8l>UX+xMm;PE}fg_ghHT_>ZF9%YZpB6lb118nd~9l zhw*hA;Ea$9(G4=X*}LC)ytu70TN25Nf+45- zB~1QoojVg<41*u&aQM&&yg3m$&Pn)~U2|j}d#lV_3W@v2F5jW#HVV1(x>DMQm z2eEhq3A7Ia2WIXbTJ_!>2yY-RH7|e@Eiu^B?c{JYq~$0J$2z|j?NZhmc<7jGrU?v7 z>1J9n2yl7`C#tR({yv{C6k!ryPGH3lnHeRUe z&e^kPiMq8{z1#_rz+T{ZJhm?>zL$Bm-E5Cvuh1*T7NYr@ogb(eEUggm4iLCHYvtAw zU1!RErtP|(?`JGdOFN0@mAn){ZV7(Awi!I6VA)F%3~Th!4x*~dCDXc3$7sKP{WkrQ z_S3sc-*v`7-Ecyny7foe@zy>2IEPx`FewAoQiuc#&>OmK-p$MvYA|ktaog^Mh-n+* zDn(Y1H65?+K22vm8tlMxfDixGX#ljdbWn;Jg({2u)zpG9V=2BWMXeV*L-@1y8}U4kNz)k(uyq1^4t?WHm%h=gf*e@Q|2 z#h>KY_8-Ypm_AI5)Q%;B6aZMKcW$yJ3s4;@@E6BVt$Ibbj77kLuGcPwVi8x2>O|kH z4C}@#&rkU+G6$T}Q%*A(!LE1DU8uA!!hqw~3vE~3XW`5+9}%33C9r1g4GUuI{({0Q zF@5yKEk9Ru&f*Xrx&yisa0ZueI%%4443vl`l#%QmScEMQi_2{HiMZjDS~&1sfqx15spGKS``Ye^&5a=n{GKqfy?SjorX1E(48ob}jXOGODobbSM zv=v?Z*&XXSg`DMzor(7K8Lzpq*^5O=r{~7vH(0ta1#@^ z;v4&YeDUXB{EKhC`~5%v>YINZ-+%FEU;I^k|HD_`e)Gkj%m4B17ysxx`|&S-_-Fs_ zpMUH2|8hNk=uFV>-74bTUYyC^8mc)yFXDLDTVR%ujD9O}=~b^}_qvBT_VF6;uV6ROkw8A2ZEdbnb~vik zbK^Z63;vkPindYzSA5-7axGq3VsO#@}9rj!oA^7UdFA*$h8U4PgFGCj~nhG9Jb$7l|m^i;!%9u0ctN zjA5(FHfThH+kq-^E3D>i6dy7Ibn~kS6Siul$Yke4-|)Ygv@z$qvI=^9Nxo zZ$!ZFASLM=4%Pt~Z-N4V*no;pC

&1aGYVLUAvp1JV`;^72lPxm6ya=lXiItDv}9rUBepIVC*ceHdNsDL z=B!kM^OuaySdfcwVjf&W7g&ArAkm6_GBoce6T#+2_Wa0!!Mu(`A785t&}?U~GtRq- zjy8%RMU2tYi#+EodhoGV@o_H!Gns6>gXyFkThD>i1K##L#^#$HV`n{%7d{Hlg(eOO zp{?2up+|DzC5Eg8nN9#sK(W7;xJB7_AwC%p33T@Zy^;HZS6O1q1jx)5^U#y{S6+G$ zz^KyOx4Ks=hmkNk#*Oi+G2}|&Rp13B`u`rsht21#_ftNf@y*#Z4z0}fDV?zI!3h^} zyOS^va)q_S6s!y2(8lmnt7ZyQFSF(hcrG2%>Q?Nj5`ee7-=a^CrrJjM7>erP8JeWu z7Lza7IX-U9>eHfLj(mJBnpz%4X$G3^?AjwxE5C3!QJf*AZoakA3!{O~IllKfh7&Ei zCy69%i^azgQ%cPja5)@B$1PFH1pcjHccF>L_lrxl_o4Tpm8Q^#hwVHl$ALjRlSxKWs*F{8^PmMQ zGvOjL;yev8`gYA)hs_zrlp&{eFrYl7;?7n0Y%w=lnCoF(tQ1y4q5&+)_6`v}OUQoNt6^9)p@aKu*L0;hPJx>W*#0 zE+OFB$R$Cy!jq$k_WbYPfdFON}*v0~{syK7E`( zjgt>&==@$_8enBu1V9*>6NY1ZtZJRs!jPEM_Es*w-L)R635xYj1c`@_1d&j}?tq^* zFMc@?9p*N7pcJQzZ3eG}IXb6>**f6`oDrv0N+ad4^2(js7&dd2=aAWXLipt~yvP$( zS`>!D%To0U2iu|x0{L>3fg8;p0C{5Pz^`>Pbag&5+E%M4iBtNhl?U`B>fUHao;iu? zeA4ILdMD~NVo`gqei0NpcgdPbsFx>wt+$L%EqFe6d1CN;>#fy_Bc}m&Upu9{TznvR z-RD-8PG{T1-#22H(=h^`M52ts<2?WSIR?IwC$?8K+>vznCT{@P+ z#!;qK@Q)A9Izs5M2nCh$VUh4EBDe z7Aizp$|aXc?9TJlY;?!?g${ogD|lybv|u@9J^u&|emjIX3q?&T1_hM2+KK9NR;gZ3 zQM7+nc~EAtd+H?(TxF|Dyrf*MgZ2J#Q-}+8)1TF49{%7&q61Doi1Z+SL)8X~LclF_ zx4iEV12H+1N+@ugnl2sK2ROS%3u2B@I*>qKD#n;)Gq~abJvauhybg11N>~h81lU za2`L_*FD*RPQR?9Pla9y;`_+n^D>KH_Zp>+TgL&$yKJD>_r?Jd2Jk~ zxB8TNN4>CHa~o`3M@zriTXxRqnzsU!)w$)pnG8yLk zx-=50je;-52>T0gJ5VybHOC@*M>Zn8e&aR)Jh(})d08W0beK=EnEeBm3&QdM*DZBd({))4WagqcQ95@;Ie^|bU~~{Wdh`>1 zc)Vb25kTuljCxG9eQdI}9r(n>H(d&Dhb%TWS8mOLN%3xb%#w3>X1XLl)*&Lur!r(+ z&eo;p=)&3rnfRTN7d!T@g5Ud1n4Ns=8{jlZb-}GJ} z>H5x&gPr(@hxx^1$U0|2*RZiK9+}OO8I%Vptbw+Rd%*man2^sU!hk^p;(NVxHl@1gj_GW@`qK^lmr}L<{>5_yk zbjao)VmjRgYisCpBOri zl@6&arE>cpS?=pvaZcA#W!AZ{WL7c&Z09HLpWRE+cP0-y=*iDO?bSFy^{w}6aAq7e z=~|Yxoc{4LdW-Lt9kX7o<7IVX&c(=*-CSGMx0ZL6>0CO1jPV3wgr_KN2VEIW)>N{{pFoa*GQj8J;C(GBl^vg9$n>>uT|5j)@r@&T zEUuML29Mr#5#wZ*bpf#V_73sqT<5uj+<~tds{s&2a}RuR^s%LahjE#>Nju8#z3x1R^M`MDK2!2o8`3((V4s-Q2-=SG8Om1TNR&%aut6sQD3XnJP)U)wucnOu7(X6dDtcz| zr5#Snza!pGOzsdVXO8ZuBq~ zKon};xwTJSD6iG&k+1$v(AUB8sHCMrHSeWP=_y365E_>p8R(xZo842uMD@~?oj zPG7LC%5D3`8W)l*G=f1$%23{e<|^HUEH7Ca0CMn(&YQRaRg`1=vFjbE?DToLk;^z7 za}DQVn60(ovCM)++7gDefn7s0j*`l2N&N9*be9yiK|R zhc{vy^@%+h)z8sW(z*CVrxV|Ixg3zWiD!a0^*W1RbzgIzt*Pkc^MF%e>X}qUR-LB` z1)jr?2eWsPxvoA6m4b{J6-;xhg}=h_nN^tXiIPz#+&a4=1I~A!PwL67kGfI&46aC< z2R7;~;2F5jnm`e|Yl0&7v;y^yiJBk5>&6e&7zaF$wj(qtVS3|sRKJOj{w$~t~MPEN94)htH4C9|{P z*;C@Jq6s)0;T|!EJv= zfIEYy)vVj=R(=gS@b@yRU?9N{41kJ@TvT=kqds*EeAfx}pW4++#TPquv#)CP0`zHV zD&)C`Z>`pAsh6$IYT7Ayj5%Xw^Ye5t&j1QL%J?j_PZRfx1tb-dTH|oG+w=>$;!WbG zQSY)Pv`gA;?y|CZmxYsPi%bzm1=mf_Jn>`nt&i$=pWkM6o8j1lT%jEei%3 zO|{jxkLYz>ft)>1ss%ilV~PRz;b2FLVpzQkB%3i-CG$?c4fbmXZd?awVLtA{6L3X) zyAnPN$=DIxEB@Q)bDsArR=6j9V(86xWPv^yjY1SGAg`UH2}c3OIs8w4Jl~cg03TAf zDJ+l3zR(A2vsSJ%WpG@(ri%lyUPQ_-Y-bdld1n}kk|Qf2J0R#rW%{}`;7gQ>5||rN z%R*njMApKRQ99qO!whQi+dydX9#ReO*KPPK+krxCv!fQH8oNrv(bd@LQNN?gII>Wt zlYFMlTJX}=cWSaX@5Ub&kgdm^;~EnUo5SIL$ORX#cH81s=%dJHzY>>ga1r3}j&wGt zyJ6@74L$W-hx`QJuDV;1zK1uVz=bZaLCSw;N95Fq4W$s^GR?hET(3YlPK(Zuo}LM3 zk?Iq7Qae*AC=j64dmm{ETQ?Iycx|WTIClu%-O!0^I-yCPGArW@CBxi_=yvWAnB@8S zeDSx-&uV!Z_FOlm%&Xp7uH0>TKPs6tmCg)c3(zf^4KQOsw8lC^?{vM1$zvz_r$((4 zX5Zz;y;WH8@yp(G_^^C!F&|SVZWAU)+Q2-`6Wrr#8SM15qmi(FUjZ7u_F-VV`_TFb zv3imKd-*Fl7C*EubjofLi}B>UttEnTUVU)F~v4CE!n z-sE~ZFp@pN2V-JdaM!$0&!*QRg;#7_FN{g1o~;umaQXz_7k90MdIq{PNs1jv|ED&D z#ypzReXr=z?p1ARxAqI~wZ>)|1Z;x>4E~h!a{1R;BXChZ{=#&e+r(hc64lXtw(VY+ zKCUQ)opyG^|0V>!wm83pv_1|=;Z@68#Z?R0eG0n(8F`*m z9xou2dL_%swYD_2%WVkQ;E>{B%mN6#bs))hxXj9!#)zpm>C9xJ3OYt-IaU?ETwALb zI3mWw&(|j6Fjj3r1Cju+)!E8C%P{!amU83M^wrOrCwbthV>=cuu)VKpEQ3Cs8Olqm z&J(2?XH|-wjU!Ow(Wj0NN!5+RTF0>%@7=B0$o9g_FAb&D-CWt)Y`vf?y;`ciAM07d z#yW%+G;dQ*4)#VIAx@mmk@G_3W)(xu<$SW2u($<1P*Fb6ecWh-PE4x=SYdG%5!hp- zLU=?Ei6RU%bFJ;5GC9Os!z^|Si#ig{^z|!eZ)Xgg*PKhnwZLvRFAGT5@rW`G=RJMF zpRbigT`-TNzEW~(d%Z2b6|xo@s?kB%ktQWp(ssv*M*W85d$JIW=ITeEp~Rh=K0BDZ-NXs(q7073 zqe)le)YZhz!wr-aT61Od1m;CN{yih_ZW1FYLaO*ttfl9Vf&IVj|Wy~|) zQ|AHy=03KBAscj=wxC{Y+K|I1ONaJ+p6}y0*Gq0J4&@xe_$g$Xk!Ya>J@Kh9;%0^6 z2X$Pe6TzH#(zmKwS#wBguY(0I1vEAfJ=89j-mO+<^@FgBX;R$;d+ff`7!PQSlvHhI zOQLTJmmgG(ez!%FyEq)3izvcnf!sLc(dsn-WIU92+*OOWQWnrU??YNoh&oL{t*u^q zr6NpEiM`H<=vlHdDCZloC;69lYaMOyWn3GCZNt>XsFd}%Zf%XsH8_6Os2j)})>`(m zvkAFVekIXQYnl);9-|s<9&c8Bx2olAXVHo7jHy+4dl@%U<}|bK_Fh=1bq(h~c1|>O zowH!<6-AKm8RKU=-R~q>fxV}!E`n917N`5L7~q0VuYoKx;_%JMY%)O?P67BdsMbcD z(^%V)b81#lSTR2bnC0hgm}~RAJEe1thmv)12L`w66k1FejNr1}a+vcG)sC_FshSO| z#-cmI=XcLlWsEL97T%F`+fPhBlOH3V5ke$w$FAcTd|6*Jl0N!-KtEw#=|>Gy0kiA{ z>4BSIfMcCI7T+?w_3#uf9@on2zb}}b_RbiwkEri9@0c${U=CzRTh5LN@jYM|)3R~T z6AsdNO^&aT-Hx`(zt5h?82Y+Xy(Z&u|RygHLOu6DQ8$p&t>hj7pW%QzRbpa6i@d+E*V8}wYxnT@G) znPpxWgjL{n1L8+v9pd8(pO~u_0_CoR6_#bdT&(tcNHf(u>72We7PDfZa<e%sng8@ts#&aQ{H%G-Yl#%mIJ{6>OO z>J{V*RlvO{U=*s5-nOF`?oPC_VnXG9NChAp1C~(-Da*WxrLa%C_efdXxf`jFe0$2+ z0(J>CWA08r|DsqNR%K+)89=c4dBO26r|D_J^kEVstjt=1Nyvk)@$Y3~8S@CdSXD+U zOkS89(TmBa3Z2;qbHy4ium1@ZLhO0TD~45J4arJ~(MajCw#FE9qH6cx3E!ABzOacj zRny&)$k3=0*fDQ@gzx6e3y}Hrhy)tild!}4d$K+$P|5^2D%+ffh-R%pz%xnaP1s_W>Quk=rEmz9ED~L4 z58p3k-B^=}ioGynWF$D+3`1YsZPqu&>o}?l)F_Sm%!Z{?y(zJJ+sry#wD7b>zrJkj zH9&)$OO&=YHurdqS7oSO2XM<4>#an%TyjL09AS-_0J0twpJV5^G^>K>Zy~gJ)RQsz zWdt;LK$9(-gj_$29Obsl%C`ikld`zF4yk2Aw+waK-OR*@rZ5)aHbs174ANcHRCH2% zB6r9?t>8A{LEBp2vw*i?YE;nFu7{tTt7awMdyR@cjX~YzJ`%fakcrbQ$@F+boV1XO z!n9iR6utRwQxCTW?1#K(&vnS(&cH6y*$|SZn$?WPNemv5{Kk#v7#PUJcWN=~BS*A0 z50zeFByD*XVAX{?0#gJ7Ha}5w_7!v|_Vw|;lxYNr8toGRW9nOa=S+qLx-2CtOoXl* zRsV>};gCz_EtA}|)<{-b6|E_3QJN-0SR7T|!AI9hBV0^o{IJNGRQq>Sb9qOWYWxmT zO5o~^vq<8;p_r&AoPKZGbQ&p=aSRM=bV1`aq0!A2+m0}E#Vm0Vnyo~TLaK8!b(eM5 zBhrhzNlz{aMo}+b>JvTHF>C_GA84BXR8Hv+T75=qGGq9v3sirO&pfI zfei#C{o?f0HXDD_pymnfC}Z+tN%Wj`Ly^5LnBI5bTmdR2Xdn_4 zbSAvf`TI*vvm}nEbqg8a^(jta!BgtZ9cO!vr%BgRIIB}0S#>D_ zSeiZEkTx=KQfG8TifQ&c@hI~B3}c!@PfUdzRKZ**yGD za;2hfBs&8Kv+>Tw{QX{uQT_a+5gLM z=q;|E#a-nv^?C>Ly|hhHU8w7V0AmHs$78#u*0+^$T37)ZX*Fw32>*~FOl>~r1wa#0 zxd_Hp#g{eP6{4=uTs2rcFx{Xqu4Lfu)U)a+!L4-lo%Qa^{r8+jy`;vV``kyKn=e|$ z1Nmep9@*hjPm|?H%zN}h`nz8?F!#*^N?KEqhG0k!N99PdU<|Sww%Rt;;Od_Hs)Fcq zDtvN2u*xu)EA|@E)7n+zRe0z=_%*e-+SU@$Pg1=tZKV4g%Lc!_7lkbsNg^NwSEzGi z2<^&@`(Q7gh_e7_a_9vJwQ3wjwBzh}?yEXTG9&(AyLj@`s?>&Y45sSnN3o8shEVXv zm^tog>zH7Il|~~*23>rgJ9bV7tzlzSB_5S#fTu&1yHjm4~NPn7AQP3cq_T{VfTtgsUi#a`3X; z>$Y8tI(31Sp%YY%3$-Ze1%7?$^e!t5BKS?H!BF_YTXr~dgThaH;PS3g`rbfkFcCuO z@qRz$MK}K$?Nv0+EK3q&b8T~M@mtgA2Md@fd-!9>vrHJcieKw0xnQG-7$zS1Jk-RgeisilbM%;`m&2+E1_=$pP zc*X%m$bc1ROoQpPhHWP7PV@13B-QxnbhDrZTg5ahm8t zi3(`_wgD?>Q{gLB$PQ1^kC_HI!%MvaD#V+!X zPN;v+^Dc8$dA>M+PO6XjKt-cF@Qkq4LAmxTsX17mL%-$HSXB?lNgsd=dnJ~B9HxPv zGb+$LB0=MzCa4@LYr#Ly!-<(01olIUWZxDr7(-%2ta^1myh2W*nnk*b&lw#i~{5a+q||nI>O#ud#|Lp=YgDyc;GIOX%**> zz0lRe0--Lw{Y{7$^K0C*higUIB9!6zRi=@{?Yqoln+En6{K4teekNC1uO#SDp03TD zb%8-*vB&7hiB2#Q=hptTMa7R@d+0{`J+JymKw}y#=|SLLm!h(ba2@gZb`Snup!?w zhi2ialuchK!OOdcH=ys6*~$yklMb8nMXR{R!qi(yA3ywz%Pr$Zuy>R}>shePohDV8 zphmBiu1~poo=g7t*;D78-V5pL6_rYeTm7^~yD)2~6o#b;)XOdB`Q_4HegVLA^yyi9 zeXiv$-RsI;~>W{*@sHGxORCLjh2iO_6u>b2KM^1ec4-J5g*x0zC}LF=V_ zJx{&faxn@i1uxEvf2xKEpr z{bZ?S`G~Sl+k?+wOg2Sz!Ao(gNeIR^=1h4nU))#Gc!);ohPxEFmvc>!67z}Fz%8B5 zESi#TvLuAH0yd|fGuyn79GS=45}bD{+47XgOKti-#tas|+4thhRWzfYDY>-@B-8aU zdJyFfpC~?B25?{JBpFpWXID&Z6%rRQ#vmWa`^k2+@FzUw_9CdugQiw(ZEvlW?{#?N zuy)`T7?_i7K3L=4OZb9gkbMBB{Rhy}e*m-m2av;m0KfYOP_%yl%lZcprGEg|`3KOI ze*ok72atw;0Ppt)PwW+~?gvoZegI4D2N2DE09Wh>(7k>DW9tWy zu6_V->Id+fegH-32e6EO08!`%aD9FNUFQcdZhio1<_9oaegHY;2QW!~02$;55H)@P z*Ww4zC4KlC72RmQK{eS;I|IxSKefn4avp;UEbS2)U9o zeH)f!Y-Lwo52~;6{{C_jT70iFIC|-NU(p3C?Q#pnQG-F z>UZhyI*%@ZZ|^Qt<@UUX?dOB-eTBA&=JK)C$C znO<$OzeWoJg|3k*HtH`&%NrZq=(m=*QAn9H4B=I{Xgg50Fim3%TR`|WSGpx|QV8N? zQ9Eh@=n`(C5*e^)B*3sLjpHxla zvU)sjlgl=mkV+YPvb5`z$b~Csp;^rjc~zzR$wb;8Tnu8(fL=4poVAc{4R$gQFjMcEJ;ER4e_;dN?qGu?n``~-%5&rPYfpGJIt+>7k^*Mu2+*U(H;K-Z zFt^!Tmcf4^%2H-pJLMi7cDPBuZNh4TooI53dq2YHndWUT6=uD=i@YjLS#<4g;arD& z(o zUcp891LC#}ZbRI`UL(gYPrB$;tFq?mjr1=(*EM?|ja`Y~IV#MG0T}88u<}!FVsK** zdde7-Q?y^cl=+%8XTGUu7+E1#IfROS7&>fE?Pdc+akcaZj@a^ZCL^c~JBlAbzy*2k71t|GHf zXtulWlEnuPyfWjKJ?Ik1lD>Sg(~#2{b?+4y{R*+|i6YJ`{9iI+1xoV^dMgY82&R)- zhR7~lBr2oc%>XZ=nZ9FJolGLsMAft0jqIq6>cZ9({$3l*Sr_^A&UInZlUpGB29Zt# zP)#Y_J^$OFkHUO%biIR{!7(V`#qXN@PRHbNmcqy{K7AIbwqJg;ky>Qmx}-%VfX6d4 zhj!dq`;&f&9hNPzTWeu)aA;I<-_acHRp~bWqd-9Bs9xXGtu$vxL&x7|8kqcqI`8)l zDEQW#xBuf9I}2PX$ObGAdfVF=LNR%e^X_IF`HU)C8y+Is+nwSDGWkxnPI^T4`9v-4 zepHyAm8|?0!bF}VAL{+o;L^9^YY+)~$=jh(^mY$qYoCl6k5c*F3tIlz?Pc$86Ocmh z!Uj|Z+VH9U04dx>UVTUCBX_IHhm6_R(LYavVD;mt#oWE{WXl z1crlQ4=>zVp0+E8=GN|59n@>v`)ypQBynEQzAq1Yn<@oDJus0dZ;2hBbccj|(x5wWLolBhXe~$DKXkR*Et2ydWN4+AETu zIJ<2;Ki+CFsi(F!DpXizfcM-1qqTQrMH^7r2y_fQ8F()r0Bp-3UfK3O;VjeT#7Gqhz^fG zHnwfz^k>pYU$MOofF+Hu!XQA0BqQh%J!U}e1|Z+#iB?df-GGwxpxJdLbQ zF5#(jDY@8!cEzCIp6ciB1GwVYwh>cxr0p()GGlvtgjLv5mG)={r-pl`2*;1zy0FxeRboTAOBbT;V++-poG<}9AT=TR?YU^9q%Slb~dPe<3Kz7 zS=Lbn6@JkvIIS9^1tZ{1!?ZM=xwv;j!&=4NRzT}HP{lUNe zF3J~w@B&Uu`T?llX)x#$-`S1+ih!)Z*mHkf7eSY*I;jiX5A0i}z*EsQ!| z*3Q^1Z}?~LDt$D&#C%x)lBo(ZKA>fI9wpRv zzfq1rf~jV=`KATa>#$-@^2wE*PFhIY1@=E!QfLhduB=FaQ=tf;jOW8;FQT4_Kj5c# z^^1Sv-~RqP`{t`}zxmzozrBC>I(~Ya|K!*Y@eA+oZ~Zd<_51tHcfbGh|FeEs>zDH0 zUse~lhXLp69KwP_($Ef`ZS?U{(C#ckC?COJT#yJZTOk1YZ_WgXqd(vR?Vy1k6g39M z4F2j`aPH6weBJ&seIGP^bp)8_A@&~DmR^|{A~Kj{sz}_+9%ZioulM&)fBg2_uYdT3 zH~6=H9sl?S|JS_1|FV54UzShrFW`-AvMUW7IBWu>M^>v(Y~Z29FR-(e#hR14M2m4w zR!%PbrZwx_WfFKUDhx$lw|neW#i~^h4V=Z9>m8!{1NS(Du~t5Ne=!_E&BY;7c^)$^ zqO66Ilgy&;O*;2%5DL`7fjV!5;Ptik1XgxTB95*L6ft{+ijg(SvmW0rerwzW{y7H_ zY*`Cn5iy;gKb8Nh@4k;8fBY)G|D|{IH-6=Q{*KC*`qMWSH}zUU@aPG?*ToUS_Ig2F zRq5HNs~dH9@4{unoiHW~V7!6i#du9i_PcYW0)NX-@65caz~> z$J25)+Oyr{>^@spjEGSK-3wC(A1WNd7`k1uEoRYCGnT$8oz^)CB`gFi2QOt_tbknx zT&t#rMh$!rm>i%3Av)tI!~U92D6jAPdv}3ITx6u?nE$M3MN}`}wEw zuYUOUn_qZ4f9sd+^S878@$KY0JV{XV8@1=_GmTXg6;CVlP#IuNma|?E8bXe3pbYrj z&3k5b0CViXHvJm<8c`|zpHN=dMs&s~Vf4am=F@>R;jCx>{9(H%)|=|cr zILtAConN=-&vN*pP3KEGVTHc?^v_R4zyIp@U-|Fym%gaK^(*)Jsi^*R&YgSMfnz$E z5;;Do7h8=c#VENfCX;=y<%ZiEg?#|~!Ox>WVP3HjZRTQvOI-l=vf}3i!Sqxt%z2NZ z09if{EB<1XA@}FMqnfy@55mAW_hwmwZ$nZz%gavX-G9U~PZoB*9B*Ht=E zY0wU&7$;xF${O7Lu9LwGmb;4-WluhCwSgvZKA*~GzoXySH{X8si@&44@$2^a`zc?p z_kNn^1ZXwn-2?8Smdk1um?+W&6iwUDK+M=tx002ty)aY0nuX<#a@De@%gQxX1ZOQa z2sl*}(O@(zp$6dhT$Y2DPro@ndq2yw(4x=5)>vp=VfPt=r3k(hBAJQv4cNtLwL5Ff z8cNKu*;qBfq0H-NqFijrg_J4H%6$L}mA>0{mZc!g8h4tB<&xgl=kMp={qA@F+aKZ& zzcgw1tzWpGzoFyH@n!q;OUe(*xVJk02IQnIOFd&XT@dVr=J8XJmJM%k!U@NWMJZ4K z_*@d+$NSk*fYvw+vXfaj zV}L@W?dQY{JwY}zVO!|c$;#^Vi+3Bq3da$KNmRMJz~k8{CVFq0KE^m`%balQ1XqMu zxx=OX{9yF=zWW{1!EgWY<1hV+{>Cre&)?Gi*U#MDNy)ZpEb9xE2f5ccVI$h&Gcs0T z4Am9W*-_U!l+^wikbMPDT*C`kDC13r-~_R@6k<-db_n^-{9}M@#l_^2AQiT(az1-Y zn|4^?wc3iqc2OZ|L(HNB_h=jIje7>V+}^s}75rB}O0lVNLDa(Z{otyUmNiwx*I<3j zh>k?TMyOXoG8RLxz<6oG9{K#N`{NH^e|3Iou<#qdY@eTX*H4F{PTwOSvqH-%S1nDq zYPUVYJ5fA%O!iuM3NiAq!PLDb>K9z%G%|PP*Ni$gG>;;*11IZ1QQFkdpXaT<%}6=k zTA^&ZpU=OcaZ*`|qEjcJU^ep#CZ_pbviKN8bj)>WH#*`g!} zLvBeX8{w^>bQ5xg8v(aC{r$StkhSkF*Y+Prf&XRv@by>U{P@$m`nUhpFHQe`>zD55 z8H2$ zcmC}+`PEhe5z)K=W*lSe`<1E|tTOmqam5H;z^-6=VGQEI{?bbj^*bFS&|1BJHz zDE+Oe*r8z}uf8j?^7%{?ss(gA!aVJLPzOov3{Xn}qu~V3?!!_D?AceC6%@5;&v?_R z5l9dZ99Ed0f4+75$3MNn-+lduzxe8#-~G~s=C^(U|M<@SgHP}5{Icp#Z*5jUrd?Lw z4BI+vB)$Mx-NHmj!?Z2V=xknwRnARZwUVR%GENi30sVXjNIYd(h*)J4%u ze#vZSZvIMgX85$vNB5=4=J!vWva+~)&T<8_xOOF42PQhR+S4AaxSSMAFZd4(Br4kA zN{IJDvS0fXg7s|Rb?jyNLhQNjT(lt#Ak{^|I8RxhkM95J&)?erz<2kzejPs_Li};I z1RQCbltp>|U|!dSL7;#a&{4NQqdQYoCS5=ujgSJ~cCH6_(%2MPH1gR?%GiQE9!_1K zd`=mkLxLe?<{>ojNs1}=0R4QmibBEgg#w4;Ef%eS5+;b2S;%wiU({ zqxEimf|f^JD{j$w7S?Mse1DX zqH~wqqTCn@F1h0(;wmyc+RC0ec1;Aod_czl9q{>PMn`e9zVywym)1bSLMiOjIyo%) zJy5I0(#Os>$`CRsO_rXXEuUl}&f4k9uCmG&>7cMkLD&iE(%c+{r!?`K>5sO9`{=Vb z^dEd@-~SN5vp@X!m*4)<*Yvl3^*%oq|M6Ybd7GQ|!C)kI-&GiN6?9l|+tguwq3FV` z;6||&zfIoK??YH+Vs=B6lBO_~NXByB$%Mz>h;h=G87Unq7E@4y3l00|=d(icN3W9D z9n;96K(&-_X^w;mg-NEv1WjZMv)0w~NI=CvztDgc(mI^TIm41(CA`a)kR8a|11|>X z4A`93WYt!HxHQ;tpHG&4h~NL!FFtmE>(}k`Z|NU5Zs1#Alh{49QR+E>)>v#&$(~gE z*KNedj07Ba$hmw9RT`I5U@Kub;`82M!>oN(DtG;9-OkuL3ILVnB+;UCe6jJaoZd>#y9?6XODgv`sBPI>ceR>e@xhKXo$sWZjm9m%TM5b2CmkSPNIre#WpJ0ZvA#61 zP4g9UFASXnE*TIXJXpznx_J3~fBK{S(wq5Pzi6Monf<5VP@uguJBz{HCav5Eg?HTW zuO*>l0$%sosidcp%?+q)Iue)mCJ~~*<{lA}e!@$I@|1~6nuJXf`h#suLy?8ls@)SK z^XKa}^5ZC%M;>}83${ijcShB}&;s1F!5f^EK5y^^pm}rXlW?=UwvG*Mp(&WY`bIv2 zg;F=rk$c9q10{5{z=T>ZNrQ414CB8MI{P8JB7s&{u#bi`lS2M(ZoU?);e%dD>ajo0d-OUgNG#~3Z__Nlco0qf^%I1?`{ zW*`I~A8#3}UwoiJ;|A*2-&nfcL3B7;O}aF~L#y#m`wE_YSB7v4W7>VKi*|To`eX}} zb2<+B9i=vzeD>RDxi~aFm-W`;KtN}WyXHKV=`C~Px|3x2-$)Yv-JjmnU%I9K#xLB@ zZ>jp_{^K+E&Ks-H=ieK_&;sLs9~0xoxIygos2sNU*dYb(4G$`TUqo4&00}s+(k>os zi9I8x@X$j=bcEs))YVDI{Zl1{UJ{J)^Z8L18YS)Lb5?&6k-!=@yh*)RKqAemr9D`{ zEv(7|>`ZUef|eVsbRbn&K~eOuKtG$%MC{ZUWwkj?5pDx)?2o!p$|2~!(mtQ&|Ly<% z-~Pgz`CGqcKmT^FFXg8}K6KcafK83(mF6e%Z-7E`RO-B5$#nf^yr224U%JnCsO_hli@}scKmzKnrsIHK3aD2VQV<*k|(`GwN2_P~8h-(#-E@GAR^-E>J_%X4z%s2e`}!u8eL5s>eZ6nU0D2j}NI zacK%uSl2+w?t!_*)~HddSqU3Y2;QDa@3~;9X3etOz;jraBeod`;dH)?yBsUn=6B+M zEzwQi1pq@}3koIM6EtX4G^(H9M?c*}fA@X-Mf}q9_qTrae*Ui3zrK$G@orjXww{o$ zsIk+BFEC2I=Zw6|+|d3uR(W@cufSNfW?f^p!o!EF-HRhoW$A1EKis`rkEBU*rgtIE z%npZ3Qp;WJl^}?ME_383b2Aqfg7ilOn7f;I*G`>SRXqp&dg1x9vWbq!BrgLa@P?Q^ zWqpwm;coW6&%+rGFVV%CUkDMa;gPnsOyHh1Sm%4*js>B=tpaFPDd=AjEQt~VEV1D- zuvyy~)l&l4mf5d#;paPOy^-&TCA8Zn)xv7>4n%Lau8^~QCN)B_IfEcx-A* z+p*C<9RK?5X-9m1ihudZ-@g`NdGG_gkFeD5pTM98N*ee=6SEklD`lWBGWaP=y@Bs1VW`DxJ2{#jpURcRU?w#q+4;_?isL<03U28W>ZtsRi}QmDeyk#B8Uu zwk?^rNlCV&LGf#KxrO%qZ7At_VSoDa+C}EkPww^=eYwb-f-;0EqIJkx74J2UfW=6g zER@uo4#$;~Edv!j0RuTzEQ`6V9i5LADuxubCb8<)rViYhv1sySw!^x$YECns(QPE zb!L#?I}zY*(Q_TM&8tG}X-x`^+?vYW1phyi1%3LuevA+P^zDoPF}}Rooq62ssB+rt=fzn2Iil;rX$&Ct@P{7N9qm9~! zqh@4Xyiofb+Fb~fYi2KXW}Mqg%`6Q>76|CPMoHKvtsnyC15Ic;wJX)Ws!%g=+)Amn zSXJd*TFqRvq%Ic6dWEwX7gMcv>D-bu%25h(pbMdjQo2fIZ@$}ZUfqBC694kkyD#x{ zzI^)d^!3}9cOQRvEe!GChj>5r{eH`t3%2oPw3&7JC0XsJX*PDOb%}jMd<> z-6;M?Wh7H2FMOnzF#w~1bf-#kstn>d_ww(OWv3kqm&p2p7GW?!B+ zHo?Z_7F_>j+vq12lPAJXu9n8R0;hyxZih@?|MGGD;oWPuoku^oUk;fPRYrZ@rxIV& zVt}9;ccr|JQ`#adrGQKvrb5fu)8PBp$-J$DdfSrt;%{@~46SV;E!f-lwgY#X{;xIc zW;Lxbqi*OzP$khngqq529L)jTj_SFTmI|oiF4zCplH;D7U{nb~$fdIBtq+EZbw%rW zDdf&7ORh2)hpg-?Rs~(MWqJ2A4?P{N?zuwQ#z2|+M3@M0@OBpb9ynAyefDoZzP3|+ z@WZq%S_xt$vQ3dkyox(F;=Cy!Cv?6-GVADjgtK@g@dJ=eyd*HbmL38OW0K2{AB zS(`($&g>Br)^gq8q(F)}8!Y5FInPr@tvfRB8c;M)%xK$eqyLDQ`s8ZaI8@t5ew$c%?RG@2{SXnL^oGt!Y!*h1-fgb*u$`HSM`h8*Ob8C{Vk!G9=KxM%6%5U;6dQ zDjw-bxh4p=li`yTGZenBaey8y#wD&`rqf zeynkGW?um6P2CKg!qR1uBZ=<0hSo@)2GNVNb*Z0bt@^06LkqB=RwNQU)ZCAzWez0?*l| zRN|%FXt&4?czHhYHuosNhdp3Y;aSDc%+)dL^h+A+t?SR3;CEl$*VmU%;q&$B!@G~~ zKKs|#K7}9s4DToY-@jU|l&x*9?g@nIrUwwm&rB`LjGc150s}TCNZA@0`u4M)?c`dw z3l{L%Q31CdZ89F2b87`C1I|f$%GCQ$L!+YrYsyZ$`^@TmON$kUrU@d;q<8R+=t5J0 zbsHD&D>*kL^|s)QB6%VrOED3~r_5&9aUs{Cfiur*xkC^y>A>q_dlz6A57C1L71t;k zA|+2UfvORV!8CpP>bG~)>lOWfU+>sF`pLaD5#Hz$0Z=5b(9t!EW^de@E5?!Kae9H9C;=Q1fTRrQypvKYVc-p%p6lR*gbmWCD zfPUyiKm=-jRf5#$pe^IiL$Jp-Hyt^0!Ju2mo>?H97@CO~ z9q>e3W?d%_1b`%Shw^EC1{Xq!UiR&Z^*4X<_wV0*eQk>L=m+=K)f8yvt|_D^q;Z*` zjfQ#+$nL!qN_7D21(az65ssovl1d`&2BP}tn!7bbFjwuxXR0MbKLPh%1|emJ)e*E` zu(RcWYT(Omx2w7#x5li6&FEt4hjPQNn&vnO3CfBxm>LyU8uWH+Z&}y4p4tN3oExq1 zfi7YrG3r=+K%S*%hE_&97C!RgfohrD{)e23J7t8vGemWS7%gY)A4t zmsK5gL9o`te!69oUN7SET?bCCI9BEp3&C)eDp5G~>cCygc(wMjGaD9QEJ_>SrWKTU zvD3tRw^g~XbWFYg&?k=01~#MicEE|x3e+R=w&f$!8u*J7f3SU>(SX68pa1dahU$k8KYe`n?JqCkrSJdyPv73XiX(jVa7>} z(GT(#Xjl686Y}y+L0bJ98D-R0gH7o( z_j8UnEvq5?-ffWU3u|p?pB_|b0pdf&Ej>5{?6xx+z^%t|!X=k%9Ou0|kfYnR4TNpP ztXm?t+P9*Tn~Rvo&}C`Zl^NN2>c%%!6T{a$M+st`+Pcum$$+0JTQwQ#%S`8iI$!hg zWfRA0MnkdY#*GJ*y_ZvOsagN&mxbi``t(|=^wH1ocGP4q-Bk!P$40*bkMl|)6SC>$ zl4_dooD@-(a@^zgtn~Yic-lHfBWc?#alP&(MU=tGe~Zl3jL4ZJY6V5oq-6-?w`L5X z1=n4@du^K!CIm9ra_l{7RN}FlFRruq;>3ceZ|5PMckEg%sU4u@-fAgE{&cZ6-Nj2_ zJVNN%gN06AYAB2*W>dMes-w3$=S~TI_brF=?|z7HPv5>ib0S^~xjgvk-G1G^AYC|F z=jPV2NHWmss)25&UiP)+V1hz9vXs&f+7-sF9Tml5N3^lP<1XRTZy|@=bE3dB0`zsV zgT(XKH*Vg6FfX@VdrG(_Z*Q}?Ir_FtSHW1Qjx$T=yo^^j>7Z4-^TO0NubTncvgu=$ zT30DJKs*(@pdiz>r*y``S>IHFZ{U}eT@by10I#czF&ljEXtUpL&wum7`%lwf{d#@$ zgS(+Z2q~BE0}9=zv~47vKv;4BJxt_)ic?{_X3Nb?xAHJfn|XUh(e7zNf&zdo75}3t zc``X&`F@OsVV704o}$>GAbgIL%@;dxN6mFtNA7LZ)hK7v4C?reOya)!NND^>{wC(On=D&XT z!^hXJvX6dlw*#m8^Nb&>ZCyDSj|_Ni2S`d$2se6FRHSb_#|O-L?)Xu2T-{i<)YK0~ zU%TKt#Oa7LrsP!nn0uzE-WpSb28{Zu60NaT$wWC)y8YnIHOVr@_mX>T)~zlzAz35( zjyE_Zp!K5DD}QGv)Gjnwj5tt9nRBT$_`ucyx|dXo_MT+>s8l(0ZpoTdv@CW2Y1MVr z9@FjC=C{oFKlr!xT4w3dkM5T*>G*y6y*x8{>cTHX!dJa( zZO`LSqt%zr$V>w2$}4jXfmOjt4#nW~T{<3*%Y(PE0q1mP-~mBkLID?Nqm0|w_g@V$ z;L*?R_H5LDW;$bo=a;+hN(u<)YJ^E^0kfYVSjm`riOmTC8b~BHPrHn4-AB?g5aCX4 z5-33Xh5X8WCI zrdM2I2De*lWt~3+%iaxy-he zF$ckm?wlZ3;H%5Y(ao(~3+tys2`vLPim{R5mIFDk6_%iZNN*lXYiF~ zeo{$&l$r|5QQ3V;@eLJ+>Wou0tUcVxO>%U%TW+_P3N@@Hx(@2OOS*}IrG!0vk$7GHU!K3kMJ;#jei_3D1>s4{1>xf6~FQ#q-3ejs!bKnq^x zOuyUjzOGMyj4yxr?=Rt{|8TW%;?J)w=^p(QZ^!>HGp6q@wOPdUN=o-6$8eoPuTXDY z3R~QDe7BH1A{U-W-N{NX8*p4La2|8dv9O6QKTSHa_Ei&|&picmYBRkIfh!dj+$|^Z z+obpEX{76$a}mv6yd9B7A?<#?xoeu~SY<3ev6@;F44{+kYJo$4rmvk%=}-w>)`UU4 zoze;@OHpz2wIM)DYJEhRvGK5P%|A~Oe}VgWes%x$`O5k&UR}aI`Z>O}Rrgg^KQWRt zs)faE;!Cr%h$@?;ea^mUU15kk#Zr_xZI#0Ws|%nveAPSSI%rdTrput08ky%@1t@&8%Rc|c>-#tFKAzWnVvl};Z@sc< zT*c3erj`S_@zn&*g{ED}rS~YiuTsjDZN{!xwOO4rTS;>e*cc;H&1=ahXDrs+nn#{T zXly!%AiC9?ES?VC!!|ypl!(gSMuZCzJW65cWk=4&ptk_GBToR$wIyzOtS4u4K1|z* ze4v-_+(4Cr5jZPlPo=lYET`{ny&s-w%Dsc|DVf*`xR+=Bcx6Xw|JEz}tFQ6p)$#D7 zAK_asZAEQK`e|4-#hH8R+4y#h%SW+E)dK(uKq0pXns^x!{FzKGdk^7j!{=IuM+WOP zR^cR+dCN4sjx+O8uGJ(Rku%KrIn-#eC~|o=yczu+(u!3dzozF z+v`i&2S2)BPW&lB=I3J+?P<*Fp&iJlYn!_Jh}>D=SLMxcQn5K#X)~MVb{K8V2B0so z2FviPSuytj#x1)uDx)^vw*^YPXgHZKF#g_dTWfT_kgVQDCzj;}c}3Ighfu@LfS6t6t^;{NP+|8Y`2^NPNsp=lqC{06)n8(kA_n%>)m%vbG^r zH1j2J|C)aI;2-y^m)S=@x*K9}`MISrxmimVCBQ6aL$&C+Q}7BlANW~nX}fu988k1L zf3_ZTF2%@lX*}xXG&eXl3iZmsN{-!IZztAC+|Dwx2e=0l#7U_PR?02^E*S!E@|P?s zAVc%OQ|xmDYPq&CM`=BL2Jx1XTdkFjh1XPyvzji{rz90Er(o6))-Z#`u`=UdM#i7SvG%-bwWQr#N=1bGQuB3@RWS*sI&I86|8%vt0*UvXi3{<<}6wL zN`lusA>$x$6#ArNgN{zgiBov2e#HIc-muUBJnY)?m@{rWa{ojSF}{9#dJk{w>yO{! z-D_{xM?b`y4`IGozfb-BDwW~e?nSkcyS441@HEQw>N%fCyNFxlw!F>WY}wJXAtg{M zE?Q?^I*AQZP^`vPGp~VaK9w^&7TkuZuV&+m2pY0P)H|;jp4%!mV|G4HxtS!Qr+L&? zQ<2lBc5l<$iQdu-#^fihx#Kc(u`94CMx>g|5fiz*C%(Aa0=1s<7U^9w+I!S{scqMN zNT$kd4*c)lefa$8%eQNk_!`0I(NFLG2>kr2nhx2umYLScRAODIW|!Q0wE%0CDxtC{ zdugpY4^^jAb*}2?6s>5DUT72!$#YQ{N=HuMxO@&!)o0awgG3Lg%pR4*mZB%2IRVrXb{GwptM7inVxrK za$tiN-N4LSoo7b6Yv9xpQfli`=kf5X=s&dgj29XS0YRU9yp(ztY>0!od|wTfvVAl% zyQ3T>SduTnb@9nYJ8useIW=5**K}YAW#_dTxr^GL5P z3~qH}oyccenU!b-&HIMo`%Hf2L%2it%szs}FK>y{hBn>4U{EYq_1cs5V#RkPE329% zz+Xv^S@Ced)G28}+Qv?0B}NHDZog2QSDyBWEhmd!eu)vPo(99d+omo$KvK?{7Xoy?^)N zRh-MCAKY8*Dvk1AsTf^7$KB2CkR&^xgWu528~62*^79q1_W zN2^t8-Sy-;vZbA5t=Kt==9UVQcOR-ESb8$#nW;^742qvKwvS!T0FvJjW?taQHtraf zf)irpMezuaF;%NswpYiHYI67w+UCG{ND%eGx6ecnGkQzc|9Pit$P}PTWK_sGt;1_R zeGby`%7DWs$P~yRy^Llny!6|J>py!RMuEHX?6H=1`G$Ax9va7FTUa_{`}cLetkV7@#qJ5 z55&vg=MftW$+D4FLL_-gk3vNAcpkDmEe9kgtx1ME-)FI*ZKhyzqD6!4$|yRTc=9vY zj~-^&+|~}YRF3T9sxG1-HL*Y~;ZTxpbBD=V)^t|!(I*Hyq;e~*Sv~hv+fG1rJ1i~2 zg^;!{PCsC55L`6`e)hi<(SC-*jY- z>Pe;hMs_Be_SR!gNZm?1)fSzx)#10X7aV$2p;n7JAR+6?oMcrq#enIJ}c{pUB2BTwNF9 zMs?^+=Ob$!HBXaK7yrDG*C>?LX2J%&XD`5Lb}w01rtqa@$FVaacDbDdx8A{363|A1 z0;@={gf}#b3vwYV7b^qfns=W}c6V&-h;nSg99}-oRdvcqwHIk9TT_YXEeO{(xD+wZ zC?RyXPL4V1%(I+3dB!*Y?DPF=H=9R4xZ4lj7Xn_3T8T~A%9b}%NK78%I_%S+)eFN= zhyux=I9k#^nZ{p`{t+2Pdo3CYmbceYES-vEsgp_2s!o71!GGvRLb4Hf)jq)N`|Zu< zue}-h=*M|4Q~v&8TyrW_0N+|YRtFn?A|&ACsCzY=7!Njk!jxOlb;S|-?)1W-t@s`~ zsVBNDDT<1=hE*d3Fu}u3Q2A^M)l0v2RaQ$kwx74(uf2<`86xB8mW-tc> z&%gIF|K`H>e}0V>^5`e|%b|b!*Xjll5Uqvm-kR#8u)JR-B&ts)1in@WM^oy+WpJ6D zf`vpx;n{Vfu3PIBr_^SMkr}WZtc(KoOz?P*leDcf8ergQt@Sl>>UX!ESfg?R>^&_> zo44Bu5qf949$?DCySBNm(AqC{Yj7isKBKkc1)pAcq&*t9S+fF4Qab7TO5R=-z@Unq zZeGqQrdj$rw#(g0=U-px&;IuN_t6jWcCPqhYgM>y+iKCm-oQAk#c2trklH>HNtt=* z*<0qY;p#i()vkbZYud8!(dMwgx>sPn8 zL4j?lk^k4s2r`WmZS`2G@3f)^URTpOg>C7$v~C2DwoE`t3H=o3nC>UFhE;ufKW6eX z5b@0d`+vOt`qKyh=s&!glX>(5{lyDyzpw2jgQ|YkFi$;2TC}agXB$kNTyfpjbWBMh zF)ZanZa30dx=S4sN_#5pa4i6MlpA+-(ntKR;ZgGhbhgZXdSjH|96ms5*8QAQ_UcAF z@Ad^QI(JTSxGT(~%0U73+5*N@HEmg-ubrBVa0&H35KW_YP}!V5n+ zz`0DDIj^)B{!Ufjn0uS8LqEu&$ey3`if_Nbzx)f|zQn8Rp$9+Iw_fa-mCK~y{qlBP z2tL|sa@Jv1YpGm-+*T&fGD{#6qjub|UHn&94-I6LXk9@d$j$C>zby1wLjwQPb z$62XkQGij!K7N}!?))p^rk9B@b1TPRs+K)y!#cBoTuPsb?0Fg9;5!wQ38s2((-n9C zI8`HaXngS^2<*8ozAqcI+m2n7t<4BD9tjSVo}TV*#c#tX9{u26UeN#cnc>?1@%;z= zzdnBc@W0jn`~S(mFX{K`fBp2C!kNGSU*=Em-hX@d@xMKvA^-R9fA|0S-OinNCtC02 zYE-GrJ!|(;ECI7iqv_aX(0t7k=I*X#k3&tZ^OZWKCbJZ@)LNo`;hWg-q^(|i^J3is zZvlhzm1CYs9D;w3?Av?vU(c_=qaWODh^qX&BJ4BGU|~b`$t+19*<*NGq3V4t^D&s{ zms#@$dahI@o6aV6j2+~Fw&yd8ojeg&Oz$JP4#E;0^JjsCzD64}<3nM4S=Sn+-zCmt zW%_u7EX~YDAquzyK=>}+bdb(=ltsG6K2l}?L{RRQ>6A!0&p{BlG)BQ)W*}{!8-pyw zw}uR`9M`EeJ5RdknX-y`+V`GVwnzJoY{p|B-2LqGdp2X`byXNbMv}DJS~GS@^+d$! zD;1?^Un&eLqA9?b1}6bet>J;1mqM9=>SA5u?BL2ZN*v1qgtW9~Ilh)hg!s2BeTTh*oX}@l5)2%>R&#sZ=at2<)`@R)vw;MYE%TQZ5 z3sw9uBS6#gWiZNGt&P)3yv+M814)#Yy8t;Fhvi9fX>{o(s)Xir+s>HFx6c`@4o({2 zoO6tnu_9fN2Q+a#pROqdA*@!d^lI?%B;`cfsg!cysqRSP%SvmawnLghn~ZcqmuW%6d|^lpoqrBf}XRNDI!T%G7j^`PAyrA z4k(0PjtPSm$C9-W7pv2hv1ywQq=NYBDoeMpN)(BC1|7x4S74qOsr-T;n2Ff z6*t`xC0A!nxRql_OZ$5Nj>J_*eGQ<)4HghSF@V6T|d4wJtuOzg?s(O z*B@j0#~+@)SAJegWIXr*-Y@RIf2qpEGm$VNPPG$rC}^`?2|CPm=Hw~Y>P|t9{)AnP zWv-uKdX2g{Br83$7tsTVx3pMVwKGPKoKsZzASW>r6yAK5Y#J4-%ivwafM|+zE2Jd0cT+tcF4$X z#D?e4V4n*P_RS0Xt3Unt?$xFJqaWK_ISfPZ;=|{x)(Nab)L>Ktl^3egpwqc?UV9Ur z_2!*EZ@z+eDov^AMpHYRposUCwDZ)gR@eh84Uo&DYl$8`%dzFn2&N@VcY7jqI)plF z(JEGk%21Azfv)ee9a~&4Da@dy)B@^WI-eu0Hyy-6Q0mH@Us~s)d!8??rVt zOL`W<3|q^OfcHqU3t+eg4<(m#S{)Vc`J}`xslm-IIcd&S#;L$QO3PW-nw>@G%g5REv{`BtsUjF6PE6jtR+*_Zy8}xeZ zB3^rp-V^ZSBqc9f*HC@ybY$S&{WH_{tpMDkpWj=z z7_45)aaYW=+6EA2X8<#s+Lp`=@2z^#JzA2~S{>XC`|L?c-IAJ~)^eWAICmvQFwrUp zMaGoft*q4h>AME$2W7vSc9}bSEC2td-QX=t+>ngVB;nkITxAD++;bI@$0H@VRHog(GwidPVF@@LYsTZX{%E` z&J(m$vNFR8RQuDU48ql=1##*$K+sLj?z;G)CV_|%DSVLayoElg66EZ2R-te@&n2Z+ z0>0Wzw2F>_`Br9MeEupEx!%=v>71tk2=AQ&Ob4`HBHL)uB!&skGak5xV0 zzP63}>Ot+tSfQf>tDdJpi%hC#9=!8X7Et_s3crRnfALGNtHp@6>Pb!T;|v|w7&Y<{`$?O>!Y9ETUf=Yryt!47jT^kpFva4W8h%Y zPWm7Q#}RAArU$vS1koUR2nWe$m1>KIjRkFxq)d7ol^ z4NoU~8wDLjD|_V{^m?rk>6dZx?UmIMI`t|wI84k9+h0JOIoGZKM@Ke*aJv7=hU)E+Xw)0*Jc4Q9I-gOFdI(d0*>CgJtukm5N z|5wD~|KP9E_a6NSZ}+PCB`jfQ_aw4YDcRO_0-a;nNth3o7p_;cmeruZc^{}|vg|#L z;B&zgjm!%H+bjjCj5k)sv$obo<;;+av7xZW)Gkd%@5b#jou=m&V?cV3Scz`clnWEn zjeOoMuSzv-2OrApQhkUzBl+WX4!0^bcgfB3C<`}@A&UhC;%*02P||EtYq3-@)jLU< zlJi>pbJs@i-+XO<`zQbU;VJg3-P%V#$hTkNYVAnkg0;eqD>o6LdyF*pyD>FsVOhYzEq zfb`7ZU>~%qoHO{PjivoW9ef?t1)C!k8kjY6oek;NMQ@eXFCtW4MK+O@E@4)&(24KL zdAkEOw4GBeL=)(~4%oo|<}3WW>lOa&U%tM2Tz>SUeDgJKL~$!d6S}es@GU%aURud#B{~dVPi7d~N|xH1QXS{`zQ>_bL0NK0 z?ei|FI%fc$PP1P9VNY(@6HNGDKQ6Eteyg8v!VUZ@t2 zeZ1?kwZR0FQcgzQZz2Hq(xKBX`BwX#5AovrPMXI%YRjY4fjjCtd2UwbvNgK^c%tdJ=VIa2 z#Mdl?coI-|Q=o<&4$T5Mknpx7u!J*XhFi^w(~q8ko^r9U=W#ld_`6cbe_B6&`Sc;4 zzCHJ*{}>-%dvPEA4DT;M&zpeO6W?8e8?o21<5VouqSn*i?ULuMj6&CqvmGv&&Cw1u zqjSKS#Dc6EHtV={z7wma_im-6HC>jS1I<4jNdWS5j|qNo-(wDZiAD6hnWr{FW!<+o zM_DFEKTXk&_~8sHwM- z2fI7cySG%ne~7P7A3p7$-pAAX`17k@u8)3zw=ZmYDf{FTxX{hFrBuC_t)g0InyJf7 zIp@{#9`IJBMM_g=P2+gVsd(M^1&0l02dkiED_9M3wp0@;K{+y&!ED|9Dz9Eo&wH0s z%NZ$dU)aSIaO^fX^BzKKQhTYy8`il_ny29rJ!!RLQ_l>Koc1n|X7ftKTCARf(p4Zu zC*;wyWpYwg7W?V3O$$N6iSjkB!1va^))+4>)^EBMwGG7g8J+HmekX2K({&C&}R=Q(ka($QIOxPB|EEUS?U3KNr*6% ziL$zJT(2pqRANi@jw;V!oO&IR!hIG1h;XXJ&9>D!j+c~18#ZR{HQV4{Op6I}yejx7 zrUZ45nlL>OJpiZ3CLTtmSFj|k+tCR~n=M-!ZpqKe`&NPW>+8e!)vDHmpWE$F@g+@a zy>G(NN_nION%kE5a+o7q>+U%M8vlxV3RlIbjQ5bo$mHN6x`%cqMbb1BjSQVYRNRi1 zrg%NQOt|-bEa)La%3NatkG|dRl)jL4pIWh3 zzIL;D@bkNETE1Lt#@f~JTb$@rN=^^BD@NFFoW*aWtrD%Ff!So33!SkUZCSlCLc3Tg z!J$=mNxjKVqc%BBYaU`KaZ0T5qm$Ud_Nt_83G`dPMY*OINf zCR{^SW-65Q>Zui!M7HNf7r{Jdv zO8(1JeEIU}%j;X&$3D*6C`JAL<}F?ZL$Iqd&xUZGK-Glr*kSsY;G9L{= zvsi3PvfA`>&C(;)GJOhJVcV-R!7#5=@Gwo{x_z(Sl;-MC&LD^o%|Q-|{$A3wf&Ab#}Yd#ky@zc~68)swxNk0yg(!M3BWD|N%t ztCcRTT_Dc_Od(12HGEvlF-=92XT+?{q+`*@M|o1oQ|?t}O0#2T|#_I-OY}yx%V{;25bt0(ONGi9Fhhv5XzM9Ly{cQ!6&6mi%CmfE9H4g z%hKlBaP+#g-a5(S)JCDjv5-xV+n4okKfL1(`$j?b(a-MI{*ZrPp0~29vtKuRotYFBt}P8*Y;Zd~QGQP08*bbzE4+c-~{oh<7)n$ewUxuz>gl*BleZd6BwD(@`E zY|%^|IR(|4(7RjCC}fi;u}%2H$%=COfLX|!uxyl)w&XcFGQ`$m3OIePUF+CMWa@=c zo#jHkyR{+7^DHb+4E<3JG|5~R=pk;)Ywa2%mfRkQfBP{$J^9zad|a=ci68vvZa;qe z_ld+=Y0su}r)rr&NIuQ3R#}zUquS98(8`=!eAz2jN})cEg3TzhCZCKmmjR`n&9w{@ zpZwFFJND5t_nhbrwmAasa4Tl(a2?($ftg+>H&*<5cX55*!@dcn zc=Xe|{q%it$PT77W7`acSeWOW=`zD@Egev|q6#ZDY^D*bjw`#dH|mXEHARv_&q6k) zjcInk73~R@%no5sszuVIQ8`I4B-&o8ewE$Y?ZWP_hxzsB2Y356%|E-8`1hTQsov@+ z+zz&7rdnM&T=ZV%tUAzBqyEGf!;sGBD2v(p6$C6B@cAa%iMY@7n#!5<;5`AN=OmC# zb@)YUmY#H5+)19}th2i%&Gg+ojgsd`1Wt|?%AXtRZ%tBc_&BYkU7Z8b9CTc5z+GZB z-%8Bc#!>`WEGc80smc@{7c=k7ZhP9WX*u=m8I$yF;Pk(I3zl(DFRbd%?|=H?RsF-G zALB2-S#dspzwGdDHbsLPO;TPE3`R={<%!mb9?r)ijy3R4Syrj1>$N_UASxsyFR!E| z3$+Pmm^nAt3tE~f`WQd;;!8FfX9R0v@A`8u@71rLe)_UrJqADe0p5=hzuTX|w=$^i)Pf>6&C^Ai(J|yFisY-5 z4qkutZn@?)3Fq|HXJeK^Q@DX?-!(O_7KJ|mDV}|D5>ANjC)^#TwswtGs@!?) zB1#iP^h{iPs1<4ObZVWDtWI(!fUBI7kkDWDK5IluX&YKp8z?Dz<$NWz0~B^IW9wK$ zQ}i$+88L~}d+N0}(obYPwffIszBf5BfA{a?#UK4V-$cYDODRLsP9^y6skwXEM6eG_ z5}U`;oQ?_Q)P|;Q)^VOc>r|CBlJ>Yc9go2#DVT9+$BlTm)A`ML_i;b{^xB;G(GTt|g8+&tc~1I7yPVYg zN{e=?{>G4p-7fxW%V|3Muvxla)RAaFpylU42cQx!i}NmiBeUp??i^XhBKX= zq0<-kxv1%OqNrdnyv82BxWpyBYGgu1;u3_810#i#@sFOP9z^fq@99veWF3wX!JAz_4d=U957Nt`dAKD_d(KKkk1x9h&Ys)xi4 z7-W`ySZhUVA3N1{t^(-@>*G{!wu>a9kU7|g%(aXA@fw~-Yt&D&luC+-gDQc^v$JPn zTO?zB9P0&ke&(}BPl=Q4_TzX+o4Ll|8o!QVh_k-e$|Lp!M|kn`8KRRfnYEX60Q2Wg zO0&1z%?7v}u#^I$QTrZy&An{Mh)ODV2&_d#QCe|^TydwCPW>6c_wxYprKf&vbzXZ} zAN=^Y`hy?aThM{3#04tb+A@rxD)FF2WV2VuMJ9w0oK$b-Vd-Y7^aVq{NQ~c2^BMNt~6){}?0kE3{o4!ta;@oJJNZ8N+12g%)X*?GKBpoq(l|)_hpb z$PKz@n=7_UU~!aOnz>k6%Z%*QoG1kaheZ|3I|H*?xH+m7^q+oZEw@?8smESt<3Pw| zMY=utrowh2a<{gDFsmTA3x}yYb=w{Pm~L*eJg~ef|=cl>O=JUp~Bl_wf&3 zpU!*#;nlF|V;|_7avtNpSaJI$?~8OTuFG6;P2+Vct>&I}@s*N`-vEpt+Vh9j)4wk_0m=jLIf+uWg(5+A3*Dp4;jmlIyFtP7mmCu-bi! zhuu<}{^8x%r_b;G-N&a-^S{S>Eol1a2YCN=``nG?w~V6iK$b_AWbaLrWsknYSb9wq zx{C_NW#eelyml4P$No{nrdr3*_^coaIMsPcpd4k z>pbV&yAAMUOE-pgc9^jgcuG4fLCb?CZ3Ghfl^gOg^-6T=awa&;;ELz0F>o^{%O1Jq zR>nFuM=4u<^;u5N%SQHb_zn}Wl($!%-~55Q>!@sBTBUPzBwIy(DtflLq#=tHHjdCuAr_WL?rBM<&gjS-A!D+%-S<`V^Cnq2L+50&f zz2YB?q%G~@y^nlbog9NFRTU_HSeE2;HS*a5)T`aZ$k2N~fFflF(YbGIYkSZ!dtVvwz! zF0+;(w630QksUsYxhN3mV|VpL(~)k-^< zX^sejKcv}SSRx25b?T-3y#1bDF^S`k?wFpua6fyX^uzp?d#M8z@manK`WT#a(I&Ce zhnoT5hq6Rpjicjuh4Po7T3BWMAjJ+Y3uJuVJ6(Aj7)WNw>B6JZvq8e5Xc6}gkj+}s zq+rzCd>4@bJ%4M=8ahi0`JX=B=Uxr@FKHw7@L22`{EtWX&&ji+8Kc()mbNyX83NCy(_L?*TWCqzE57gZ%_3v@l^lM7s>>} zt*A9&rSM@#8TbMT?(ngU$!Y0QmyOIWKF}JAYy_N-1`1VfOfun^*-n@ARcNDGJWm~b zFVNBFhS*lGxs~UXGldB-yk9qo;MuG9;DMINHQek6SKGX!jk5?2frT4a0?sp3X&3G< zPosoivD&fLJkJ>o_p11KLUardIz}nfwJ`)=y8MJA+~dUyDuuo>X2%M?x+0t=KYr+Js-wOpS_wl?_v6ufH_>PcV4mw zc3x<+mVE?B7N>n_)H@SmQT1X>PC4N?tO2gsA)k&1zYH5M%66?FXLPl zv-QP9=i=+3v#fQsCr96t@vk=+I)uICJea-=ZHOadt{&hG?};CHM1ap?3%@gw=BJMt zUmo8;J$vcy18iTfizogGaqqgUuW)OAoihrNFnB@yst=$Uq!)~^t;0dMh(qDxvEUVJH z775D38jdzV5Sx)z8#5-A@fwW5g0&F?h|#t& zwl)WA>-M_%xA?uaf62$s^x127FEsp`^xsnkCeNsOY3rQu{dszut??4RTAS9Q;zWzFiiO*id`x3|3R3a%N$N~aF0Iw0ae8imx zs4U1KlrA>I-7_>@ipIPzXKKl%p%}NwXjbsEU86;xO4HC7#+YiXJ+Xx)EvHbLFEip` z?!tGs6Xw^j#IDUTNy@tZY zDd>*{UEO;O9(mm*{%y~yRhZHZ_<(3IGA-6{<92*At2u65fO%)%0Gp9zdJpGuc9-2D z!mCn6K@G;CzA^cvmBUVh7%&FLL`QQ%BF9oRloVl_yN7xW?DAjVetKAKe)i(M7Hz6P z(PeFd;w28OtY%HtYteu&nN?U0CVQhh@MtfP-5k)u`7STt}MSX-r9&}u|e z`$YDqv1Xfrn|#P+a7X}WC;zKLLAXR4|NgT=x!FB(t6wua{iZpvd8U>=Pug) zRPH5UdWf$qG>RpZO959gO>lt#@hcxV@!3GHq#_Fcu`Ho3&9)6rym`uUr?#f6^I4aa z1lzySn=auYJO?2PizY8>;^?ofjjNu!^NhlW8b}@OrZYwb2oY*%qj7B!C^&(r;y$rI z)NE9SjM?CHWVwZK%oMGsOLI?+$|XZB8xh{o5~} z^3A)qpC6u5pS*hCp6Y-4^HXiD(IS0`t6?O+#No!f{3CXmIQK?|)#9316HnwbQ~I&N zzFTEjABhSg&#^B474WPKvboHi<&iQ(YHaJc62Ag}(DoAU1Ei`Uqmbiv)fJT41S{|?E}zLaun&VBl#r5=EAkl^YE;h&VgQG(n&b-{(RN@$$rGN~f8 zcl1R;>e|Z5NEsJ3-t*?+{^xv`@%iJ2_W%)GsGqlA9)=O0yo%o*^6$SsUP<(8m*F$%YSet2F1fbVY%F%pp{$Hic?tx1M6;t3IaB$0UIaxP^r}zH=X9F z=Axh&pzaKXdY}R>iB_I`*VM7u8-kjr1M9NzQtiv>RKO=Qs2{Q*H$H&XO;DPULWs1} z4mwsvr*`*Ag$wyAK{YjiTxU#1N1sB4=4mlFsJJek${+#Eh`fCh|Lyw^C*OR`cWIv< zhW?+ue78BL_5KkMv}D+!YcdPwRKD7;Jd@hJxQuk-Ch z{U5*lbg&ox_t3S+gS%(1vpZB2khJpeRJ~>uh3BZ)^bRw+>Kp+cTz&70a|}PaHKxfFrxjoBk@<#7|zr zTTp!aVSn|nXv0Bb_2~miveR2J2s+M~pG?Kob_2J`>_VC2>?8SSn5xWW#5FQiz?;M1A(@w@rA(c#sG1tU$;T*Ue%nn5QdY@+l zT?2s#h6{7<#$(n&%f3MG=wNL3nTL0Slkdz4!W48CQ9`SGquaUcZiss6nmCn&fRa*} zv_X8+=RP|+_(zJtwD;bow6Pp0J!q~^mz|a8L>}G44HvSCY5RhS(4f76t-duRd0A;C z)@h|ZIba&|2hBdPai&>hls8xuiowD#J4nYt%S}F-}R+JHIwlJrzyjn*&{>` zn1g5^;v#2FP|dEE5TG3+hhjQ>&fb<1_-DFkC^%paYD;+uh>grk6DUt@rGSj$n|H5D zf=(*NVAkv%pJJpOme7%vPOwUKG~%X91#VV*4i3d4F$gNsz*rMSU(IXp9VouSz{6Dt zD9FZ$7c1vYaQ0tN+if9c_|k6AvG&J*d326_@}m9xVd@Y2+f9=sOm2X=k}B6G?S)UC zjU==UDRE6+0m_$=BSYV!X2Ijgd^Ru-P>52 zpny;};kek;nStr9vbGOMm^BhqBxpyWfu;XpQS$G9`uG7k(>Dkezm11{f+sKOYh6jP z(FM+>(%9f8=^m)P^gS{Dz4b&am)sHB{<<$^7gKk-owmpX^krg{FI}SU}vwFoT zrxJ7#6&Vthc7;)q65OD>(p-dVptNfw&<>h1{hbW+`lJ54&!6JM`+EC_ zSJ5KRUeVW{^d|0o>#i7Gw_i7}HbyW>iy=P8zN|IiJGRmJm~qmOHn~?R4@Wtlkl)bL zeF|U^+k^%J45dWZNKSW>cKp8J3zQf!mU|z!n<@MtwFyo7BwRk2Rs^N+#z9@t%V~_M zWJ#a+n$J#q6|aUHMatZYtxXJKzJ#jCrp#HOaxemC*SBW$>V9fA^6w{ zmnZ$pqXxjUm+gMg&R=D)$mn#CHZ*0!w57(wWe6CZ0$)3iaW-OB-J|X^dJ(M2+p*^`#1M8jOO$*NrFaNvKH^b#4o|eoXaOjTFC#7s7(hg zak&FelzsaA24KvGLfGdn-M#1RWh6UgvVkcICL9`lO9{PeVN7(%Y7h!)j2k!@!_kD< znX)2%Y^Sz)_3BBk3EJUVU137sD|NOoa4+Dwh5BdkSh=}(7-)b3ZFlY@o6%-As2LL_ zIny(9dqYx4DR*BcSK<>@sOU{6%vo(8M0aJSthHqW+Yw{|&v|3izrmE1bgv)=LWpNe zy0$Uvpz&zHey7}J|KEOk?SVdf;qHe!FIN+YS#$WTP!M^se<=@)q9Og*OX;9Dbntqi z>~TQI#ci~rxR#^YCXf?yc;T25sH{|PoqQ37OAPWEYDfn;mo0_Kn(ReIqqSSmKY{V6 zri5!_G;2206%7(*0!9bW;ik3bTy6vZP2oH~m4_+`tc?Wo4&H16xbIZyZS*D5<}n<9 zpfEp^fNxtpMpQzcv34T;c>5jw@$LJ!uZbp~y>vf+r2Bh6r;AC)Lg=glcN~eX?G8Y5 z*fn4jP9b=~4cOl_hkJ-eEle_p4&IF$j#nejxz30+NqRF_O;e~=0OM*HxnUnMKxFYi zBCFkj;D0SH!e_7B?G=-JJ?a1#hD{)7bn{%$YSgcBcZ1(1IlWI}oW44u=0gp()`fKg z%UYI$l3)m3^{cB*h44lySS-xA0Yck%UO-Bz>j0vY_Ze*hOh4uceoSIb14S-KuHCcaR*vu^ zg|`SwBgo9n4XAY;AXuT^+W_WBM`ZzjKyL7#?rc}hoZ0bqG+&rtt&Ung_~++N^K0GV z@4}TgUW`EShVJOSV_UQbYD+k!ZfrR`;W0t2AKYFWvKvPO5DVjTs|i}X1bT%$6$wAt zDoSlw33<~ArP)9SV=I9}_?`6g+dqDMd;XAr%6IR+jdfmh96#DmKfQhbX#4x@mHhcw zr(v)3qOHTh7|IcpE764Th1vutt}v*b?kP>@FvK;FJSd6%M?*ij7ter6IRsdhjP%E4*LlaE z=BLkZ{`BGFKR{Ow==}WQX+X+7sxKppT%YnyQfc?b?L2qojuYqenJLrqm?Nj}gQB9w{ zdas4TyO%*vSe>Ct%sc&}IY}3y$k^wK!;7JDLe+YTpYD zM2?Maubl=*8z*3sVG|zB+0*RcnPKjE8z7b=@cLSDT-m)j2Pl>Rm@>xeauVVEwMe90 zQR-MhGfrZx9Rx%cjy+>gfhl@g%Tn-m#^M7T{RRk%&HR>S^cjY_*y;MN4-?TryhJ zgOTZ2ggLj9m}gH2aIG7#q-UX!3KhQGy>!>vqR9piTgR3Cs-Vd5EDcf%NO} z=mS_JG-3yG+#_bS&RaI+xFEl*sEG$}HKbsuZK4zm$NGdDw@i4P(d=A_wGJl><>-Q> zvA6Gl>Bo=uAHMb_aiqO`D-Q>C&t1>gx{@e)+45cooMfMcM3>QGrreic0#-z2+GP{yaN09a(^DHP1+8~TDIs2*P2;Lx#$>8|<9?dQLKo0)6!BUSg4m+`g7JDOLdEwdvq^66MBJnanNjyF+M z>!)xRzzV%)gaEKI1GU@cJyr#xDB%98`@$Nk!Ndv(f{;%j8Hibr?%P!~nzX`_xxfhutM?p>!TC@hO%$;*al|aD z4`jx3vzN!gjjZdifb&E^fknW|4$Ii|%fG*W@#S+pdbZDA!`Gf|n{>cj@3BaFk*qT? zKtz!~XzYRhm*Q?~z}sV6JJ=kc*sWHxPE0^EY!91x!1owOjH3zu{s1ae$Ayf7iHLEN zMIfcGxjcN`?v{U5jpt{t-EErf8w`jEoDD})8h^_kIdUUwA2o3S1SXc|pbcxune*y8 z^)qabkv--FM$2&)K~7~RurCXPZt&|ly7DeM``~nmOSL7PQZi_;fDv>1eO)NdRW3*v z1~k>2D}sR~rm8x)f18Uq+MIK*i8d;yZ@)Yl)4{_OgD$ER04F^peF=^}779fruV-g{Ogz zgoXRa#x*R=$94OtqqkYdLhvg)@cJSIf7-~kaOUkrs#~_4-EgXnYbS$W>R6be2{TAu zhX@yWR?tvwTf0`^mTT3~zUx{#zyx+1x<+FGrp4|2^6u(4*E9Y@K6<{-UdPv-?-5^3 zMxGO_2@-3FanRprK@LVp8d?-n^;HDQ@7PI?GSp=Le{cvLJjQzQ|G0fyR5)x zctFB3m$w2vnsf-Nm0CyYc7G*czi`tS3!LiZ@C`CjtjkD-^ehxH;eNw60VqEBg1J#p z*i{g4L~bS~X1u6iJfYJ)rnPRlB$q?cQlnGh&l8B{@8-wP8210;`F?nK#r*7beC_$# z8R%>xBM2-v*rAO2#hME}WKC&BF6H99+isVT*;nu6@VM?hWkvDSizhg(YYOZY6WR($ zHn82pE*|nS0Qn6Vd|)@=#nRjRtJM!u5ZDg`2{2DB-(9cM!0HH&19d#S<_K@ST9-Wy z$Zy60XX6SXI?JV6rRejh2acMmLy$wYGmzwv*$bEa?Zw^zm&;x@`!7D<-(Ao5B3D29 zHGcL|zV?Wdaj6SrmTZ#_f+&=%jfP5P2B4!V;glD=Q>xoO*L-#OIjs$mlK|RxZ1H0E znX%3ozQmiIh8#kR%DvoRdBbE}CA0w!S$@0al5NSpa7$s{gr*mtW-AEqk?pC3NsXRqaJ&v>}#*u@7?q)oL43rsj;UkesyJHhXs@VtS9gO8$?UUsl3 zuuA8mc_I2)Th|$weDGLWc?7cRZW|5632~wCpksEp!vrwzsMWv5s@}7g@Bx?cLa*33 z1P!(?KA5Q%I`wVOQ>`qTlbleVGD|0eN!xr}as>i@$AQjS=BX|@NG&F9fyQ{Y`Fza?dJP?FSx4mNS(b;wbhz05Y)lJF5(4sKxBsoV6 z*g?+lb43F&O#{NCUsryBAOcsbi;1CKd?B zFZVGU2F^_f=`ud*g*$eyXP+|1}oeE%{tD)Vx8}crQ zo53+t+)uhPL&tzA4Pu)cR}Q?dz>m&g)Qr}eSF&a0Iz2%jL;Ty8WRC1>>h^txF~j}K z%LEsRev1KXtE}$^Z`CCQSp_#>aY5_M+X^Y`?L;Fb|_iy{ej&j}{nI zXr)dlMXD6x&on9+ECw7`APcO-#Y*ENV=pZ5LVgHG2~8?L3@MI#@7NpyePkf^ueE#l z5L~8hwi@fU@5A2541}60w4u}^1LH6Tm2DQlE>Hu4S>X6_A`_(1+Zf~`)MP5m-}@M> z(F4D*u~_-)w~D4iow4#X>T_u5vf4s+a04L6Z;3Pi^N$ZBj!#~*pM5X;cbX=?(Feco zTPs^n6|x+{>$QqEY^)kY_btGx~< zlzgb0VUMs}g|>lQHtrIRD^k2CS?FvYz##JVn$)qZ@WC#DzCjLx=nZ>g!Tnn3Xf?*V z&W(iW%+v&h3#`q=DPSE$wY?_hE3hNNYhSy{bDuMDJ)n0Q=-GMi&_n---MPcebJ_ z;(P4_ab_#VKif%C(@sdBZGzCQ^X;!Eb)3-&^YNpgbMwTc930aaD}{&7cKR`k(~(4! zwMS;6Ndvcs*V)+3%7Mij#gdV!)1Wn)Ytw;y)bRC2ft6s{X8fpvpf;r6em#GapTgeR zL*DqaSMFW_{qn-qX~#RrVl@VC+!IW9rhZTo-?RqO0JH<;&&v?#C-+izUSXT|tdJ`U z3N|I9LF03QV+pie#|CYOW133cPU~hoBt{dnR-t)Y3sFUi&2zSnS;%r`_`&3$--axlpVkrKohm#K*>w+{-fH9LFc2OaU}~ESkSsb zb-ONTYM8Z7HPG%lHaj8i=TM|W z3vJ%*cWD9A)v*3P&x~cz!|p`65Opjgx#GgDV+?<`EenUy1d_XK zc8>DpJaU8v2l5H5)Hm#Tv}e+3XxOgI^?EDsci)WOUp~HlbT)nRI^O=ge*4zKAlLT= zHPk^ph%nw@=*RbQT+m62%>#crUdJ}{A(0(5-T^EqcbyYB(~6<}>}l-Nd1FX%#YdsL z9_L&!_%-U_76oVWeYW2{Uu;T|*>i<&Rh>`MahB2!R%Ae_5Ma8TCD!2~?59G3kdM?s zEP5_st9S59QAuruUcjEs))}i-tAr#D`0IdD1+gPy@(wo0>(BS^KYjS}G4ejr94p&UPmen_0QwAd*Fsn z*!J9gLMpb<E>Kb*M>=9+$`2;Y|0&WC1RZtH_oWYxYfm z2qi7)IWN#~EbBe?Ufq@_xU-BZxy~z22RFeAmC4K2=nX^uiPU-ewEy9w{yN8d1nqn7 zLcaQh^U`?wU=SqQ5KlQf+T5xKC(7MB7-i?28M3MGaVJ6Odk__ zm+T7yZqR)gFP>}1Dsj1pd`3gRa#1=g?02Z+qO{oH`{){L2(}UU{0>J`WRwaQ%04fm zXqQpzASvE5dQ@gzC;f#+rcj6fWW?4p?5sSo+BVeZN)T*a++pv{b@l7_V!lOu{r<=N z_=kK0ErZY^NPY_dAn1fge2ABw61iE2MpR+>k-!q+(2z>YqcJQbQX z9#@l;_w2awM$2*NG_^1;L);{DqdN+)5$bAl>f*Xw+@rMJ-dYI241sX@Y;BMS+O#wQ z7zaBzs~6^|7{pBiuLV2h7|Gcu_B5rfQE_lI{7(Y)Nbub@26-NSs;>g_5yQK!OaSDK z5pcq^wQg@M{_eZf{kpn%cysaG^?U95f59j>6Zfv%ZMV8SZfM+WoGZEcZYZSUc1$*s zUuDoCQHQV<@N9v`VuPr1G45Fd(=Kb!-%3N#PC7c?-c*5zH%K_)M53eX4#>9;XF%r| zbmn0PMgZ4ujN#N+YU5n()zh=BO(0q}z?=_ew|HHhYSJs944F1pt;y3DxyIIF;Fl&G zy&LDH_#W3!*A>R#554Ov{ec3L9Qu64>^~uZl^T!K9$qW38Kmw2n4wLq^6m~IO z*+lS+k!vC;b)CdFcZ|%!0|lDY>d-GQ990qtpFW_((uErc!Vd{;Xq~gI;$1M>AZS^7 z(bO=p@I~V;bBsh%Oo*|hR`wCFLIMfTA%M3d&J~66^Xa=?;6lBQIf=?_pLt1(V0lF! z%w#+G?5LCP#Pt;Z9ros>SE_Yup2d3tX@5#?U&enEAAbDN-k*o_^k*;KtxKSP`^sJt zP_o|kIj6!f*F~EV?EZEATpTepa1y|5l(#1tVRPD{fQ2Bb&*^-wW5%rB7xsYz%sCmD zXQ6bIYcD|z@AO()NN0{|s2JbwmyF#fpzFZ#r2y3pFiCef8cMINmk*i)lOGPWT*)KL~iP;iGdYv;(Cl&68(6adsIhZX#NYxTK{2SHNZ9 zoJXggHP)-Aj>(dXPKHH-w`|Jh0-#~q-3p&gXgWL%u<3mp zEgqDf;3FQDn8$-K&lyN1A;n31OwC@kwoPXYuO+nOzX>VrLBMEHpMeoi_B%3t}KV$+%eF&2cDu_M~p z7UV|=CIA)(UXM(fpydET=9|HcEPU*;S)wV1|K-`eVEi4WPE%G|SIDvG;$8tU5P{25 z&?Dje9kFkBP&lsSC}^%VBgw__7Lx_|&Thfz=y}gYV|Gw9MJFJai!|5eu#%oz=d48G zuMhkRrXkvPbe55_NLlig#zpK6-H*gHxSIGayzh6Iw~v*E3WF6xXFoAX>ENFTsLjz3;+aC}VUIoSrO}r&2Qv(@xUpD+^b9Q$o?0@^%|>`m5^@+aEp8C$HP> zm-HL_tBu9zTqCFv-Btj|PfdNfNg!=&YuMOgC1f%eoiMAxze z7>ABy;l^nWTw8})hMO>xZ7Cuf_4!F0$W>+|+Xf(^eWedn1)b7|L(PcqYj zw4}l!yBCQt=3C6I4z`_eLv}o|0M(G&E@Yy3Eo6hFF=T{f+7p9qQA6?=-D6JuRQxh-*L^;?zaN6o^ zf|9rJgOP)4?!j&_fY!cv>@iTGSaX5Tf9MRJw$=tD+F5j~Vrn+g2}BsJGy3>@-{t*t zV8r6V2(EE9PEf8)bZSj^LYU=vTr81|v$&ym=+dy?khNCzuQZVrWp@2+4n(lQXCXY$J3Cered9(P|W z*6FU3XDmfHd#y4a0Z#N#Sv@lg5gzpwGx68(g&HE-+2{6>aKVslK>iDgi`9Es8K{

vgL$43P}Q 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 literal 0 HcmV?d00001 diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 0000000..3186f3f --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0f6be20 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Bitfocus AS - Open Source + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..8e8335d --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# companion-module-pixap-pixtimerpro + +See [HELP.md](./companion/HELP.md) and [LICENSE](./LICENSE) \ No newline at end of file diff --git a/actions.js b/actions.js new file mode 100644 index 0000000..f2f6353 --- /dev/null +++ b/actions.js @@ -0,0 +1,395 @@ +const { Regex } = require('@companion-module/base') +module.exports = { + getActions() { + const actions = {} + + let CHOICES_TIMER_PRESETS = [] + Object.keys(this.pixtimerdata.presets).forEach((key) => { + // console.log(key, this.pixtimerdata.presets[key]) + CHOICES_TIMER_PRESETS.push({ + label: this.pixtimerdata.presets[key].name, + id: this.pixtimerdata.presets[key].id, + sort: this.pixtimerdata.presets[key].id, + }) + }) + + let CHOICES_MESSAGE_PRESETS = [] + Object.keys(this.pixtimerdata.messages).forEach((key) => { + // console.log(key, this.pixtimerdata.messages[key]) + CHOICES_MESSAGE_PRESETS.push({ + label: this.pixtimerdata.messages[key].name, + id: this.pixtimerdata.messages[key].id, + sort: this.pixtimerdata.messages[key].id, + }) + }) + + // BLACKOUT + let CHOICES_BLACKOUT = [] + Object.keys(this.pixtimerdata.blackoutArray).forEach((key) => { + CHOICES_BLACKOUT.push({ + label: this.pixtimerdata.blackoutArray[key].name, + id: this.pixtimerdata.blackoutArray[key].id, + sort: this.pixtimerdata.blackoutArray[key].id, + }) + }) + + // PBP GOTO + let CHOICES_PBP_GOTO = [] + Object.keys(this.pixtimerdata.gotoArray).forEach((key) => { + CHOICES_PBP_GOTO.push({ + label: this.pixtimerdata.gotoArray[key].name, + id: this.pixtimerdata.gotoArray[key].id, + sort: this.pixtimerdata.gotoArray[key].id, + }) + }) + + // TIMER + actions['recall_timer_preset'] = { + name: 'Recall timer preset', + options: [ + { + id: 'recall_timer_preset', + type: 'dropdown', + label: 'Cue', + minChoicesForSearch: 5, + choices: CHOICES_TIMER_PRESETS.sort((a, b) => a.sort - b.sort), + default: '0', + }, + ], + callback: async (event) => { + this.log('info', 'Recall timer preset >>>', event.options.recall_timer_preset) + await this.sendCommand('PST ' + event.options.recall_timer_preset) + }, + } + actions['speaker_timer_play'] = { + name: 'Speaker Timer Play', + options: [], + callback: async (event) => { + this.log('info', 'Timer speaker play !') + await this.sendCommand('PST PLAY') + }, + } + actions['speaker_timer_pause'] = { + name: 'Speaker Timer Pause', + options: [], + callback: async (event) => { + this.log('info', 'Timer speaker Pause !') + await this.sendCommand('PST BREAK') + }, + } + actions['speaker_timer_stop'] = { + name: 'Speaker Timer Stop', + options: [], + callback: async (event) => { + this.log('info', 'Timer speaker stop !') + await this.sendCommand('PST STOP') + }, + } + actions['speaker_timer_flash'] = { + name: 'Speaker Timer Flash', + options: [], + callback: async (event) => { + this.log('info', 'Timer speaker Flash !') + await this.sendCommand('PST FLASH') + }, + } + actions['session_timer_play'] = { + name: 'Session Timer Play', + options: [], + callback: async (event) => { + this.log('info', 'Timer session play !') + await this.sendCommand('PSTS PLAY') + }, + } + actions['session_timer_pause'] = { + name: 'Session Timer Pause', + options: [], + callback: async (event) => { + this.log('info', 'Timer session Pause !') + await this.sendCommand('PSTS BREAK') + }, + } + actions['session_timer_stop'] = { + name: 'Session Timer Stop', + options: [], + callback: async (event) => { + this.log('info', 'Timer session stop !') + await this.sendCommand('PSTS STOP') + }, + } + actions['session_timer_flash'] = { + name: 'Session Timer Flash', + options: [], + callback: async (event) => { + this.log('info', 'Timer session flash !') + await this.sendCommand('PSTS FLASH') + }, + } + actions['all_timer_play'] = { + name: 'All Timer Play', + options: [], + callback: async (event) => { + this.log('info', 'Timer all play !') + await this.sendCommand('PSTA PLAY') + }, + } + actions['all_timer_pause'] = { + name: 'All Timer Pause', + options: [], + callback: async (event) => { + this.log('info', 'Timer all Pause !') + await this.sendCommand('PSTA BREAK') + }, + } + actions['all_timer_stop'] = { + name: 'All Timer Stop', + options: [], + callback: async (event) => { + this.log('info', 'Timer all stop !') + await this.sendCommand('PSTA STOP') + }, + } + // MESSAGE + actions['recall_message_preset'] = { + name: 'Recall message preset', + options: [ + { + id: 'recall_message_preset', + type: 'dropdown', + label: 'Cue', + minChoicesForSearch: 5, + choices: CHOICES_MESSAGE_PRESETS.sort((a, b) => a.sort - b.sort), + default: '0', + }, + ], + callback: async (event) => { + //this.log('info', 'Recall messsage preset >>>', event.options.recall_message_preset) + await this.sendCommand('PSTM ' + event.options.recall_message_preset) + }, + } + actions['message_show'] = { + name: 'Message show', + options: [], + callback: async (event) => { + //this.log('info', `Message show >>> ${this.pixtimerdata.states.messageShow}`) + if (this.pixtimerdata.states.messageShow === 0) { + await this.sendCommand('PSTM SHOW') + } else { + await this.sendCommand('PSTM HIDE') + } + }, + } + + // BLACKOUT + actions['blackout'] = { + name: 'Blackout', + options: [], + callback: async (event) => { + //this.log('info', `ACTIONS Black show >>> ${this.pixtimerdata.states.blackout}`) + if (this.pixtimerdata.states.blackout === 0) { + await this.sendCommand('BLACK SHOW') + } else { + await this.sendCommand('BLACK HIDE') + } + }, + } + + // SPEAKER AJUSTE TIME + actions['speaker_adjust_time'] = { + name: 'Adjust Speaker Timer', + options: [ + { + type: 'textinput', + label: 'Time in second', + id: 'time', + regex: this.REGEX_SIGNED_NUMBER, + }, + ], + callback: async (event) => { + //this.log('info', 'Adjust Speaker Timer !') + await this.sendCommand('ADJT ' + event.options.time) + }, + }; + + // TIMER CLOCK + actions['timer_clock'] = { + name: 'Switch Timer clock', + options: [], + callback: async (event) => { + //this.log('info', 'Switch Timer & clock !') + await this.sendCommand('SWTC') + }, + } + + // EXTERNAL TIMER + actions['external_timer_Play'] = { + name: 'External Timer and Play', + options: [ + { + type: 'textinput', + label: 'External Timer and Play', + id: 'time', + default: " 00:00:00", + regex: "/^(0*[0-9]|1[0-9]|2[0-4]):(0*[0-9]|[1-5][0-9]|60):(0*[0-9]|[1-5][0-9]|60)$/", + required: true, + } + ], + callback: async (event) => { + //this.log('info', 'External Timer and Play !') + await this.sendCommand('CTD ' + event.options.time + " PLAY") + }, + } + actions['external_timer'] = { + name: 'External Timer', + options: [ + { + type: 'textinput', + label: 'External Timer', + id: 'time', + default: " 00:00:00", + regex: "/^(0*[0-9]|1[0-9]|2[0-4]):(0*[0-9]|[1-5][0-9]|60):(0*[0-9]|[1-5][0-9]|60)$/", + required: true, + } + ], + callback: async (event) => { + //this.log('info', 'External Timer !') + await this.sendCommand('CTD ' + event.options.time) + }, + } + actions['external_play'] = { + name: 'External Play', + options: [], + callback: async (event) => { + this.log('info', 'External Play !') + await this.sendCommand('CTD PLAY' ) + }, + } + actions['external_stop'] = { + name: 'External Stop', + options: [], + callback: async (event) => { + this.log('info', 'External Stop !') + await this.sendCommand('CTD STOP') + }, + } + + // NDI + actions['ndi_startStop'] = { + name: 'NDI start & stop', + options: [], + callback: async (event) => { + this.log('info', 'NDI start & stop !') + await this.sendCommand('NDI ED') + }, + } + + // PBP+ + actions['pbp_main_enable'] = { + name: 'PlaybackPro main enable', + options: [], + callback: async (event) => { + this.log('info', 'PlaybackPro main enable !') + await this.sendCommand('PBPM ED') + }, + } + actions['pbp_backup_enable'] = { + name: 'PlaybackPro backup enable', + options: [], + callback: async (event) => { + this.log('info', 'PlaybackPro backup enable !') + await this.sendCommand('PBPB ED') + }, + } + actions['pbp_master_take'] = { + name: 'PlaybackPro master take', + options: [], + callback: async (event) => { + this.log('info', 'PlaybackPro master take !') + await this.sendCommand('PBPG TAKE') + }, + } + actions['pbp_master_endall'] = { + name: 'PlaybackPro master endall', + options: [], + callback: async (event) => { + this.log('info', 'PlaybackPro master endall !') + await this.sendCommand('PBPG ENDALL') + }, + } + actions['pbp_master_previous'] = { + name: 'PlaybackPro master previous', + options: [], + callback: async (event) => { + this.log('info', 'PlaybackPro master previous !') + await this.sendCommand('PBPG PREVC') + }, + } + actions['pbp_master_next'] = { + name: 'PlaybackPro master next', + options: [], + callback: async (event) => { + this.log('info', 'PlaybackPro master next !') + await this.sendCommand('PBPG NEXTC') + }, + } + actions['pbp_master_play'] = { + name: 'PlaybackPro master play', + options: [], + callback: async (event) => { + this.log('info', 'PlaybackPro master play !') + await this.sendCommand('PBPG PLAY') + }, + } + actions['pbp_master_pause'] = { + name: 'PlaybackPro master pause', + options: [], + callback: async (event) => { + this.log('info', 'PlaybackPro master pause !') + await this.sendCommand('PBPG PAUSE') + }, + } + actions['pbp_master_goto10'] = { + name: 'PlaybackPro master goto 10', + options: [], + callback: async (event) => { + this.log('info', 'PlaybackPro master goto 10 !') + await this.sendCommand('PBPG GOTO 10') + }, + } + actions['pbp_master_goto20'] = { + name: 'PlaybackPro master goto 20', + options: [], + callback: async (event) => { + this.log('info', 'PlaybackPro master goto 20 !') + await this.sendCommand('PBPG GOTO 20') + }, + } + actions['pbp_master_goto30'] = { + name: 'PlaybackPro master goto 30', + options: [], + callback: async (event) => { + this.log('info', 'PlaybackPro master goto 30 !') + await this.sendCommand('PBPG GOTO 30') + }, + } + actions['pbp_master_goto'] = { + name: 'PlaybackPro master goto', + options: [ + { + id: 'pbp_master_goto', + type: 'dropdown', + label: 'Goto', + minChoicesForSearch: 5, + choices: CHOICES_PBP_GOTO.sort((a, b) => a.sort - b.sort), + default: '0', + }, + ], + callback: async (event) => { + this.log('info', 'PlaybackPro master goto 30 !') + await this.sendCommand('PBPG GOTO ' + event.options.pbp_master_goto) + }, + } + + return actions + }, +} diff --git a/companion/HELP.md b/companion/HELP.md new file mode 100644 index 0000000..6cd4f42 --- /dev/null +++ b/companion/HELP.md @@ -0,0 +1,65 @@ +# piXap piXtimer Pro + +Controls piXap piXtimer Pro +Version control 3.0.2 + +## Configuration +* piXtimer Pro Version 1.9.9 at least +* Type in the IP address of the device. +* The default Port is 9756. + +## Actions 1.10 +* Speaker Flash +* Session Flash + +## Presets 1.10 +* Speaker Flash +* Session Flash + +## Actions 1.9.9 +* Recall timer preset +* Timer speaker play/pause/stop +* Timer session play/pause/stop +* Timer all play/pause/stop +* Recall message preset +* Message show/hide +* Black show/hide +* Set Countdown video time and play +* Set Countdown video time +* Countdown video play/stop +* Adjust speaker timer time +* Switch to Timer & clock +* NDI Enable Disable +* PlaybackPro main enable & disable +* PlaybackPro backup enable & disable +* PlaybackPro general take +* PlaybackPro general end all +* PlaybackPro general previous clip +* PlaybackPro general next clip +* PlaybackPro general play +* PlaybackPro general pause +* PlaybackPro general goto 10 20 30 + +## Presets 1.9.9 +* Recall timer preset +* Timer speaker play/pause/stop +* Timer session play/pause/stop +* Timer all play/pause/stop +* Recall message preset +* Message show/hide +* Black show/hide +* Set Countdown video time and play +* Set Countdown video time +* Countdown video play/stop +* Adjust speaker timer time +* Switch to Timer & clock +* NDI Enable Disable +* PlaybackPro main enable & disable +* PlaybackPro backup enable & disable +* PlaybackPro general take +* PlaybackPro general end all +* PlaybackPro general previous clip +* PlaybackPro general next clip +* PlaybackPro general play +* PlaybackPro general pause +* PlaybackPro general goto 10 20 30 \ No newline at end of file diff --git a/companion/manifest.json b/companion/manifest.json new file mode 100644 index 0000000..4a1d43a --- /dev/null +++ b/companion/manifest.json @@ -0,0 +1,33 @@ +{ + "id": "pixap-pixtimerpro", + "name": "pixap-pixtimerpro", + "shortname": "piXtimer Pro", + "description": "piXtimer Pro plugin for Companion", + "version": "3.0.1", + "license": "MIT", + "repository": "git+https://github.com/bitfocus/companion-module-pixap-pixtimerpro.git", + "bugs": "https://github.com/bitfocus/companion-module-pixap-pixtimerpro/issues", + "maintainers": [ + { + "name": "Nicolas Keesst", + "email": "nkeesst@pixap.fr" + } + ], + "runtime": { + "type": "node22", + "api": "nodejs-ipc", + "apiVersion": "0.0.0", + "entrypoint": "../main.js" + }, + "legacyIds": [ + "pixtimerpro" + ], + "manufacturer": "piXap", + "products": [ + "piXtimer Pro" + ], + "keywords": [ + "Software", + "Timing" + ] +} \ No newline at end of file diff --git a/configFields.js b/configFields.js new file mode 100644 index 0000000..bc81307 --- /dev/null +++ b/configFields.js @@ -0,0 +1,61 @@ +const { Regex } = require('@companion-module/base') +module.exports = { + getConfigFields() { + return [ + { + id: 'info', + type: 'static-text', + width: 12, + label: 'Control Information', + value: + 'This module controls an piXtimer Pro. Product', + }, + { + type: 'textinput', + id: 'host', + label: 'Target IP', + width: 8, + regex: Regex.IP, + }, + { + type: 'textinput', + id: 'port', + label: 'Control Port', + width: 4, + regex: Regex.PORT, + min: 1, + max: 65535, + default: '9756', + }, + { + id: 'timerPortInfo', + type: 'static-text', + width: 11, + label: 'Timer Port Information', + value: 'Before activating this option, check if you have the Dungle connected to piXtimer Pro !', + }, + { + type: 'static-text', + id: 'io', + width: 7, + }, + { + type: 'checkbox', + id: 'enableTimerPort', + label: 'Enable', + width: 1, + default: false, + }, + { + type: 'textinput', + id: 'portTimer', + label: 'Timer Port', + width: 4, + regex: Regex.PORT, + min: 1, + max: 65535, + default: '9758', + }, + ] + }, +} diff --git a/feedbacks.js b/feedbacks.js new file mode 100644 index 0000000..3dcd87c --- /dev/null +++ b/feedbacks.js @@ -0,0 +1,228 @@ +const { combineRgb } = require('@companion-module/base') + +module.exports = async function (self) { + self.setFeedbackDefinitions({ + speaker_play_status: { + name: 'Speaker change style based on Stop/Play/Pause status', + type: 'boolean', + label: 'Speaker Stop/Play/Pause status', + defaultStyle: { + bgcolor: combineRgb(255, 0, 0), + color: combineRgb(255, 255, 255), + }, + options: [ + { + id: 'speaker_play', + type: 'dropdown', + label: 'Status', + default: 0, + choices: [ + { id: 0, label: 'Stop' }, + { id: 1, label: 'Playing' }, + { id: 2, label: 'Paused' }, + ], + }, + ], + callback: (feedback) => { + //console.log('FEEDBACK | SPEAKER PLAY STATUS >>>', feedback.options.speaker_play) + if (self.pixtimerdata.states.speakerPlaying === feedback.options.speaker_play) { + return true + } + }, + }, + session_play_status: { + name: 'Session change style based on Stop/Play/Pause status', + type: 'boolean', + label: 'Session Stop/Play/Pause status', + defaultStyle: { + bgcolor: combineRgb(255, 0, 0), + color: combineRgb(255, 255, 255), + }, + options: [ + { + id: 'session_play', + type: 'dropdown', + label: 'Status', + default: 0, + choices: [ + { id: 0, label: 'Stop' }, + { id: 1, label: 'Playing' }, + { id: 2, label: 'Paused' }, + ], + }, + ], + callback: (feedback) => { + //console.log('FEEDBACK | SESSION PLAY STATUS >>>', feedback.options.session_play) + if (self.pixtimerdata.states.sessionPlaying === feedback.options.session_play) { + return true + } + }, + }, + all_play_status: { + name: 'All change style based on Stop/Play/Pause status', + type: 'boolean', + label: 'All Stop/Play/Pause status', + defaultStyle: { + bgcolor: combineRgb(255, 0, 0), + color: combineRgb(255, 255, 255), + }, + options: [ + { + id: 'all_play', + type: 'dropdown', + label: 'Status', + default: 0, + choices: [ + { id: 0, label: 'Stop' }, + { id: 1, label: 'Playing' }, + { id: 2, label: 'Paused' }, + ], + }, + ], + callback: (feedback) => { + //console.log('FEEDBACK | ALL PLAY STATUS >>>', feedback.options.all_play) + if (self.pixtimerdata.states.allPlaying === feedback.options.all_play) { + return true + } + }, + }, + current_speaker: { + name: 'Current Speaker ID Change', + type: 'boolean', + label: 'Current Speaker ID Change', + defaultStyle: { + bgcolor: combineRgb(255, 0, 0), + color: combineRgb(255, 255, 255), + }, + options: [ + { + id: 'current_speaker', + type: 'number', + label: 'ID', + default: 0, + }, + ], + callback: (feedback) => { + //console.log('FEEDBACK | Current Speaker ID Change >>>', feedback.options.current_speaker) + if (self.pixtimerdata.states.currentSpeaker === feedback.options.current_speaker) { + return true + } + }, + }, + current_session: { + name: 'Current Session ID Change', + type: 'boolean', + label: 'Current Session ID Change', + defaultStyle: { + bgcolor: combineRgb(255, 0, 0), + color: combineRgb(255, 255, 255), + }, + options: [ + { + id: 'current_session', + type: 'number', + label: 'ID', + default: 0, + }, + ], + callback: (feedback) => { + //console.log('FEEDBACK | Current Session ID Change >>>', feedback.options.current_session) + if (self.pixtimerdata.states.currentSession === feedback.options.current_session) { + return true + } + }, + }, + blackout: { + name: 'Blackout Show/Hide', + type: 'boolean', + label: 'Blackout Show/Hide', + defaultStyle: { + bgcolor: combineRgb(255, 0, 0), + color: combineRgb(255, 255, 255), + }, + options: [ + { + id: 'blackout', + type: 'number', + label: 'Status', + default: 0, + }, + ], + callback: (feedback) => { + //console.log('FEEDBACK | Blackout Change >>>', feedback.options.blackout) + if (self.pixtimerdata.states.blackout === feedback.options.blackout) { + return true + } + }, + }, + message_show: { + name: 'Message Show/Hide', + type: 'boolean', + label: 'Message Show/Hide', + defaultStyle: { + bgcolor: combineRgb(255, 0, 0), + color: combineRgb(255, 255, 255), + }, + options: [ + { + id: 'message_show', + type: 'number', + label: 'Status', + default: 0, + }, + ], + callback: (feedback) => { + //console.log('FEEDBACK | MESSAGE SHOW Change >>>', feedback.options.message_show) + if (self.pixtimerdata.states.messageShow === feedback.options.message_show) { + return true + } + }, + }, + switch_timer_clock: { + name: 'Switch Timer Clock', + type: 'boolean', + label: 'Switch Timer Clock', + defaultStyle: { + bgcolor: combineRgb(255, 0, 0), + color: combineRgb(255, 255, 255), + }, + options: [ + { + id: 'switch_timer_clock', + type: 'number', + label: 'Status', + default: 0, + }, + ], + callback: (feedback) => { + //console.log('FEEDBACK | MESSAGE SHOW Change >>>', feedback.options.message_show) + if (self.pixtimerdata.states.switchTimerClock === feedback.options.switch_timer_clock) { + return true + } + }, + }, + ndi_start: { + name: 'NDI Start', + type: 'boolean', + label: 'NDI Start', + defaultStyle: { + bgcolor: combineRgb(255, 0, 0), + color: combineRgb(255, 255, 255), + }, + options: [ + { + id: 'ndi_start', + type: 'number', + label: 'Status', + default: 0, + }, + ], + callback: (feedback) => { + //console.log('FEEDBACK | NDI START >>>', feedback.options.ndi_start) + if (self.pixtimerdata.states.ndiStart === feedback.options.ndi_start) { + return true + } + }, + }, + }) +} diff --git a/main.js b/main.js new file mode 100644 index 0000000..b5b414d --- /dev/null +++ b/main.js @@ -0,0 +1,390 @@ +const { InstanceBase, Regex, runEntrypoint, InstanceStatus, TCPHelper, combineRgb } = require('@companion-module/base') +const configFields = require('./configFields') +const presets = require('./presets') +const actions = require('./actions') +const pixtimerpro = require('./pixap-pixtimerpro') +const UpgradeScripts = require('./upgrades') +const UpdateFeedbacks = require('./feedbacks') +const UpdateVariableDefinitions = require('./variables') + +class PixtimerProInstance extends InstanceBase { + constructor(internal) { + super(internal) + Object.assign(this, { + ...configFields, + ...presets, + ...actions, + ...pixtimerpro, + }) + + this.adjustArray = [1, 5, 10, 20, 30] + } + + async init(config) { + this.config = config + this.pixtimerdata = { + presets: [], + messages: [], + gotoArray: [ + { id: 10, name: 'Goto 10' }, + { id: 20, name: 'Goto 20' }, + { id: 30, name: 'Goto 30' }, + ], + blackoutArray: [ + { id: 'toogle', name: 'Toogle' }, + { id: 'show', name: 'Show' }, + { id: 'hide', name: 'Hide' }, + ], + states: {}, + } + + this.updateStatus(InstanceStatus.Ok) + this.updateFeedbacks() // export feedbacks + this.updateVariableDefinitions() // export variable definitions + + this.init_tcp() + this.refreshTcpTimer() + + this.setVariableValues({ speaker_timer: '00:00:00' }) + this.setVariableValues({ speaker_timer_ms: '00:00' }) + this.setVariableValues({ speaker_timer_h: '00' }) + this.setVariableValues({ speaker_timer_m: '00' }) + this.setVariableValues({ speaker_timer_s: '00' }) + + this.setVariableValues({ session_timer: '00:00:00' }) + this.setVariableValues({ session_timer_ms: '00:00' }) + this.setVariableValues({ session_timer_h: '00' }) + this.setVariableValues({ session_timer_m: '00' }) + this.setVariableValues({ session_timer_s: '00' }) + + this.setVariableValues({ external_timer: '00:00:00' }) + this.setVariableValues({ external_timer_ms: '00:00' }) + this.setVariableValues({ external_timer_h: '00' }) + this.setVariableValues({ external_timer_m: '00' }) + this.setVariableValues({ external_timer_s: '00' }) + } + + refreshTcpTimer() { + if (!this.config.enableTimerPort) { + if (this.socketTimer !== undefined) { + this.socketTimer.destroy() + delete this.socketTimer + } + } else this.init_tcp_timer() + } + + // When module gets deleted + async destroy() { + this.socket.destroy() + this.socketTimer.destroy() + this.log('info', 'destroy', this.id) + } + + async configUpdated(config) { + let resetConnection = false + let resetConnectionTimer = false + + if (this.config.host != config.host) { + resetConnection = true + } + + if (this.config.enableTimerPort) { + resetConnectionTimer = true + } else { + resetConnectionTimer = true + } + + this.config = config + if (resetConnection || !this.socket) { + this.init_tcp() + } + if (resetConnectionTimer || !this.socketTimer) { + this.refreshTcpTimer() + } + this.setActionDefinitions(this.getActions()) + this.setPresetDefinitions(this.getPresets()) + } + + async sendCommand(cmd) { + if (cmd) { + this.log('debug', `sending ${cmd} to ${this.config.host}`) + await this.socket.send(cmd) + } + } + + updateFeedbacks() { + UpdateFeedbacks(this) + } + + updateVariableDefinitions() { + UpdateVariableDefinitions(this) + } + + init_tcp() { + this.log('info', `PIXTIMER PRO | INIT TCP CONTROL >>> ${this.config.host} ${this.config.port}`) + + if (this.socket !== undefined) { + this.socket.destroy() + delete this.socket + } + + if (this.config.port === undefined) { + this.config.port = 9756 + } + + if (this.config.host) { + //!= undefined + this.log('info', `TCP CONTROL | Opening connection to ${this.config.host}:${this.config.port}`) + + this.socket = new TCPHelper(this.config.host, this.config.port, { reconnect: true }) + + this.socket.on('status_change', (status, message) => { + this.updateStatus(status, message) + //this.log('info', `TCP CONTROL | Status update >>> ${status} | ${message}`) + }) + + this.socket.on('error', (err) => { + this.updateStatus(InstanceStatus.UnknownError, err.message) + this.log('error', 'TCP CONTROL | Network error: ' + err.message) + }) + + let receivebuffer = '' + this.socket.on('connect', () => { + this.updateStatus(InstanceStatus.Ok) + //this.log('info', 'Connected') + + receivebuffer = '' + + this.socket.send('NC\n').catch((e) => { + this.log('error', `TCP CONTROL | Socket error: ${e}`) + }) + }) + + this.socket.on('data', (chunk) => { + let i = 0 + let line = '' + let offset = 0 + receivebuffer += chunk.toString() + while ((i = receivebuffer.indexOf('\n', offset)) !== -1) { + line = receivebuffer.slice(offset, i) + //this.log('info', 'RECEIVE DATA LINE >>> ' + line.toString()) + offset = i + 1 + this.socket.emit('receiveline', line) + } + receivebuffer = receivebuffer.slice(offset) + //this.log('info', 'RECEIVE DATA >>> ' + receivebuffer.toString()) + }) + + this.socket.on('receiveline', (data) => { + //const info = data.toString().split("/") + this.log('warn', `TCP CONTROL | RECEIVE LINE >>> ${data.toString()}`) + + // TIMER LIST + if (data.toString().slice(0, 5) === 'timer') { + this.pixtimerdata.presets = this.getTimerPresetList(data) + this.setActionDefinitions(this.getActions()) + this.setPresetDefinitions(this.getPresets()) + } + + // MESSAGE LIST + if (data.toString().slice(0, 7) === 'message') { + this.pixtimerdata.messages = this.getMessagePresetList(data) + this.setActionDefinitions(this.getActions()) + this.setPresetDefinitions(this.getPresets()) + } + + if (data.toString().slice(0, 3) === 'pts') { + // CURRENT PRESET SESSION + //this.log('info', `TCP CONTROL | RECEIVE LINE | CURRENT SESSION PRESET >>> ${data.toString().slice(4)}`) + this.pixtimerdata.states.currentSession = parseInt(data.toString().slice(4)) + this.setVariableValues({ session_current: this.pixtimerdata.states.currentSession }) + this.checkFeedbacks('current_session') + } else if (data.toString().slice(0, 2) === 'pt') { + // CURRENT PRESET SPEAKER + //this.log('info', `TCP CONTROL | RECEIVE LINE | CURRENT SPEAKER PRESET >>> ${data.toString().slice(3)}`) + this.pixtimerdata.states.currentSpeaker = parseInt(data.toString().slice(3)) + this.setVariableValues({ speaker_current: this.pixtimerdata.states.currentSpeaker }) + this.checkFeedbacks('current_speaker') + } + + // MESSAGE SHOW + if (data.toString().slice(0, 3) === 'cmv') { + //this.log('info', `TCP CONTROL | RECEIVE LINE | MESSAGE SHOW >>> ${data.toString().slice(4)}`) + this.pixtimerdata.states.messageShow = parseInt(data.toString().slice(4)) + this.setVariableValues({ message_show: this.pixtimerdata.states.messageShow }) + this.checkFeedbacks('message_show') + } + + // SWITCH TIMER CLOCK + if (data.toString().slice(0, 4) === 'SWTC') { + //this.log('error', `TCP CONTROL | RECEIVE LINE | SWITCH TIMER CLOCK >>> ${data.toString().slice(5)}`) + this.pixtimerdata.states.switchTimerClock = parseInt(data.toString().slice(5)) + this.setVariableValues({ switch_timer_clock: this.pixtimerdata.states.switchTimerClock }) + this.checkFeedbacks('switch_timer_clock') + } + + // SPEAKER PLAY + if (data.toString().slice(0, 4) === 'play') { + //this.log('error', `TCP CONTROL | RECEIVE LINE | SPEAKER PLAY STATUS >>> ${data.toString().slice(5)}`) + this.pixtimerdata.states.speakerPlaying = parseInt(data.toString().slice(5)) + this.setVariableValues({ speaker_play_status: this.pixtimerdata.states.speakerPlaying }) + this.checkFeedbacks('speaker_play_status') + } + + // SESSION PLAY + if (data.toString().slice(0, 5) === 'splay') { + //this.log('error', `TCP CONTROL | RECEIVE LINE | SPEAKER PLAY STATUS >>> ${data.toString().slice(6)}`) + this.pixtimerdata.states.sessionPlaying = parseInt(data.toString().slice(6)) + this.setVariableValues({ session_play_status: this.pixtimerdata.states.sessionPlaying }) + this.checkFeedbacks('session_play_status') + } else if (data.toString().slice(0, 5) === 'black') { + this.log('error', `TCP CONTROL | RECEIVE LINE | BLACKOUT STATUS >>> ${data.toString().slice(6)}`) + if (data.toString().slice(6) === "false") { + this.pixtimerdata.states.blackout = 0 + } else if (data.toString().slice(6) === "true") { + this.pixtimerdata.states.blackout = 1 + } else this.pixtimerdata.states.blackout = parseInt(data.toString().slice(6)) + this.setVariableValues({ blackout: this.pixtimerdata.states.blackout }) + this.checkFeedbacks('blackout') + } + + // NDI + if (data.toString().slice(0, 5) === 'NDIST') { + //this.log('error', `TCP CONTROL | RECEIVE LINE | NDI STATUS >>> ${data.toString().slice(6)}`) + this.pixtimerdata.states.ndiStart = parseInt(data.toString().slice(6)) + this.setVariableValues({ ndi_start: this.pixtimerdata.states.ndiStart }) + this.checkFeedbacks('ndi_start') + } + + // ALL PLAYING + if (this.pixtimerdata.states.speakerPlaying === 1 && this.pixtimerdata.states.sessionPlaying === 1) { + this.pixtimerdata.states.allPlaying = 1 + } else if (this.pixtimerdata.states.speakerPlaying === 2 && this.pixtimerdata.states.sessionPlaying === 2) { + this.pixtimerdata.states.allPlaying = 2 + } else { + this.pixtimerdata.states.allPlaying = 0 + } + this.setVariableValues({ all_play_status: this.pixtimerdata.states.allPlaying }) + this.checkFeedbacks('all_play_status') + + if (data.toString().slice(0, 2) === 'pn') { + // PROJECT NAME + //this.log('info', `TCP CONTROL | RECEIVE LINE | PROJECT NAME >>> ${data.toString().slice(3)}`) + this.pixtimerdata.states.projectName = data.toString().slice(3) + this.setVariableValues({ project_name: this.pixtimerdata.states.projectName }) + //this.checkFeedbacks('current_speaker') + } + }) + } + } + + // TCP TIMER + init_tcp_timer() { + this.log('info', `PIXTIMER PRO | INIT TCP TIMER >>> ${this.config.host} ${this.config.portTimer}`) + + if (this.socketTimer !== undefined) { + this.socketTimer.destroy() + delete this.socketTimer + } + + if (this.config.portTimer === undefined) { + this.config.portTimer = 9758 + } + + if (this.config.host) { + //!= undefined + this.log('info', `TCP TIMER | Opening timer connection to ${this.config.host}:${this.config.portTimer}`) + + this.socketTimer = new TCPHelper(this.config.host, this.config.portTimer, { reconnect: true }) + + this.socketTimer.on('status_change', (status, message) => { + this.updateStatus(status, message) + //this.log('info', `TCP CONTROL | Status update >>> ${status} | ${message}`) + }) + + this.socketTimer.on('error', (err) => { + this.updateStatus(InstanceStatus.UnknownError, err.message) + this.log('error', `TCP TIMER | Network error >>> ${err.message} | Please Check Dungle`) + }) + + let receivebuffer = '' + this.socketTimer.on('connect', () => { + this.updateStatus(InstanceStatus.Ok) + //this.log('info', 'TCP TIMER | TIMER Connected') + + receivebuffer = '' + + this.socketTimer.send('NC\n').catch((e) => { + this.log('error', `TCP TIMER | Socket error: ${e}`) + }) + + this.setVariableValues({ external_timer: 'STOP' }) + this.setVariableValues({ external_timer_ms: 'STOP' }) + this.setVariableValues({ external_timer_h: 'STOP' }) + this.setVariableValues({ external_timer_m: 'STOP' }) + this.setVariableValues({ external_timer_s: 'STOP' }) + }) + + this.socketTimer.on('data', (chunk) => { + let i = 0 + let line = '' + let offset = 0 + receivebuffer += chunk.toString() + while ((i = receivebuffer.indexOf('\n', offset)) !== -1) { + line = receivebuffer.slice(offset, i) + //this.log('info', 'TCP TIMER | RECEIVE TIMER DATA LINE >>> ' + line.toString()) + offset = i + 1 + this.socketTimer.emit('receiveTimerline', line) + } + receivebuffer = receivebuffer.slice(offset) + //this.log('info', 'TCP TIMER | RECEIVE TIMER DATA >>> ' + receivebuffer.toString()) + }) + + this.socketTimer.on('receiveTimerline', (data) => { + //const info = data.toString().split("/") + //this.log('warn', `TCP TIMER | RECEIVE TIMER LINE >>> ${data.toString()}`) + if (data.toString().slice(0, 1) === 'H') { + this.log('warn', `RECEIVE TIMER LINE >>> ${data.toString().slice(2)}`) + let speakerTimerArray = data.toString().slice(2).split(':') + this.setVariableValues({ speaker_timer: data.toString().slice(2) }) + this.setVariableValues({ speaker_timer_ms: `${speakerTimerArray[1]}:${speakerTimerArray[2]}` }) + this.setVariableValues({ speaker_timer_h: speakerTimerArray[0] }) + this.setVariableValues({ speaker_timer_m: speakerTimerArray[1] }) + this.setVariableValues({ speaker_timer_s: speakerTimerArray[2] }) + } + + if (data.toString().slice(0, 1) === 'S') { + //this.log('warn', `TCP TIMER | RECEIVE TIMER LINE >>> ${data.toString().slice(2)}`) + let sessionTimerArray = data.toString().slice(2).split(':') + this.setVariableValues({ session_timer: data.toString().slice(2) }) + this.setVariableValues({ session_timer_ms: `${sessionTimerArray[1]}:${sessionTimerArray[2]}` }) + this.setVariableValues({ session_timer_h: sessionTimerArray[0] }) + this.setVariableValues({ session_timer_m: sessionTimerArray[1] }) + this.setVariableValues({ session_timer_s: sessionTimerArray[2] }) + } + + if (data.toString().slice(0, 1) === 'V') { + //this.log('warn', `TCP TIMER | RECEIVE EXTERNAL TIMER LINE >>> ${data.toString()}`) // || data.toString().slice(2) === "STOP" + let externalTimerArray = data.toString().slice(2).split(':') + if (data.toString().slice(2) === 'stop') { + this.setVariableValues({ external_timer: 'STOP' }) + this.setVariableValues({ external_timer_ms: 'STOP' }) + this.setVariableValues({ external_timer_h: 'STOP' }) + this.setVariableValues({ external_timer_m: 'STOP' }) + this.setVariableValues({ external_timer_s: 'STOP' }) + } else { + this.setVariableValues({ + external_timer: `${externalTimerArray[0]}:${externalTimerArray[1]}:${externalTimerArray[2]}`, + }) + this.setVariableValues({ external_timer_ms: `${externalTimerArray[1]}:${externalTimerArray[2]}` }) + this.setVariableValues({ external_timer_h: externalTimerArray[0] }) + this.setVariableValues({ external_timer_m: externalTimerArray[1] }) + this.setVariableValues({ external_timer_s: externalTimerArray[2] }) + } + } + }) + } + } +} + +runEntrypoint(PixtimerProInstance, UpgradeScripts) diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..44fb4b2 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3819 @@ +{ + "name": "pixtimerPro", + "version": "3.0.2", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "pixtimerPro", + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "@companion-module/base": "~1.4.0" + }, + "devDependencies": { + "@companion-module/tools": "^1.3.2" + } + }, + "node_modules/@companion-module/base": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@companion-module/base/-/base-1.4.1.tgz", + "integrity": "sha512-xg5OX33ptfFsV/drfeNTHID7hp9f2cdp8V+7Pj8uartdNstCr28W3bAy8xRz+XRFKxQVkJcL2LqrkYZ8GGfetw==", + "dependencies": { + "@sentry/node": "^7.36.0", + "@sentry/tracing": "^7.36.0", + "ajv": "^8.12.0", + "debounce-fn": "github:julusian/debounce-fn#4.0.0-maxWaithack.0", + "ejson": "^2.2.3", + "eventemitter3": "^4.0.7", + "nanoid": "^3.3.4", + "p-queue": "^6.6.2", + "p-timeout": "^4.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": "^18.12" + } + }, + "node_modules/@companion-module/tools": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@companion-module/tools/-/tools-1.3.2.tgz", + "integrity": "sha512-5Ou/8a2tEbLlq9ousC9DsPffdt/eOK39gqllJiEmiu7xumltfPZT5GXLrgWKPKHBkZmwHj1FJw/9OgXyecAxuw==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "^5.59.9", + "@typescript-eslint/parser": "^5.59.9", + "eslint": "^8.42.0", + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-n": "^16.0.0", + "eslint-plugin-prettier": "^4.2.1", + "find-up": "^6.3.0", + "parse-author": "^2.0.0", + "prettier": "^2.8.8", + "tar": "^6.1.15", + "webpack": "^5.86.0", + "webpack-cli": "^5.1.4", + "zx": "^7.2.2" + }, + "bin": { + "companion-generate-manifest": "scripts/generate-manifest.js", + "companion-module-build": "scripts/build.js", + "companion-module-check": "scripts/check.js" + }, + "engines": { + "node": "^18.12" + }, + "peerDependencies": { + "@companion-module/base": "^1.4.1" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.5.2", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/@eslint/js": { + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz", + "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@sentry-internal/tracing": { + "version": "7.50.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.50.0.tgz", + "integrity": "sha512-4TQ4vN0aMBWsUXfJWk2xbe4x7fKfwCXgXKTtHC/ocwwKM+0EefV5Iw9YFG8IrIQN4vMtuRzktqcs9q0/Sbv7tg==", + "dependencies": { + "@sentry/core": "7.50.0", + "@sentry/types": "7.50.0", + "@sentry/utils": "7.50.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry-internal/tracing/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/core": { + "version": "7.50.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.50.0.tgz", + "integrity": "sha512-6oD1a3fYs4aiNK7tuJSd88LHjYJAetd7ZK/AfJniU7zWKj4jxIYfO8nhm0qdnhEDs81RcweVDmPhWm3Kwrzzsg==", + "dependencies": { + "@sentry/types": "7.50.0", + "@sentry/utils": "7.50.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/integrations": { + "version": "7.119.2", + "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.119.2.tgz", + "integrity": "sha512-dCuXKvbUE3gXVVa696SYMjlhSP6CxpMH/gl4Jk26naEB8Xjsn98z/hqEoXLg6Nab73rjR9c/9AdKqBbwVMHyrQ==", + "dependencies": { + "@sentry/core": "7.119.2", + "@sentry/types": "7.119.2", + "@sentry/utils": "7.119.2", + "localforage": "^1.8.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/integrations/node_modules/@sentry/core": { + "version": "7.119.2", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.119.2.tgz", + "integrity": "sha512-hQr3d2yWq/2lMvoyBPOwXw1IHqTrCjOsU1vYKhAa6w9vGbJZFGhKGGE2KEi/92c3gqGn+gW/PC7cV6waCTDuVA==", + "dependencies": { + "@sentry/types": "7.119.2", + "@sentry/utils": "7.119.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/integrations/node_modules/@sentry/types": { + "version": "7.119.2", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.119.2.tgz", + "integrity": "sha512-ydq1tWsdG7QW+yFaTp0gFaowMLNVikIqM70wxWNK+u98QzKnVY/3XTixxNLsUtnAB4Y+isAzFhrc6Vb5GFdFeg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/integrations/node_modules/@sentry/utils": { + "version": "7.119.2", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.119.2.tgz", + "integrity": "sha512-TLdUCvcNgzKP0r9YD7tgCL1PEUp42TObISridsPJ5rhpVGQJvpr+Six0zIkfDUxerLYWZoK8QMm9KgFlPLNQzA==", + "dependencies": { + "@sentry/types": "7.119.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/node": { + "version": "7.119.2", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.119.2.tgz", + "integrity": "sha512-TPNnqxh+Myooe4jTyRiXrzrM2SH08R4+nrmBls4T7lKp2E5R/3mDSe/YTn5rRcUt1k1hPx1NgO/taG0DoS5cXA==", + "dependencies": { + "@sentry-internal/tracing": "7.119.2", + "@sentry/core": "7.119.2", + "@sentry/integrations": "7.119.2", + "@sentry/types": "7.119.2", + "@sentry/utils": "7.119.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/node/node_modules/@sentry-internal/tracing": { + "version": "7.119.2", + "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.119.2.tgz", + "integrity": "sha512-V2W+STWrafyGJhQv3ulMFXYDwWHiU6wHQAQBShsHVACiFaDrJ2kPRet38FKv4dMLlLlP2xN+ss2e5zv3tYlTiQ==", + "dependencies": { + "@sentry/core": "7.119.2", + "@sentry/types": "7.119.2", + "@sentry/utils": "7.119.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/node/node_modules/@sentry/core": { + "version": "7.119.2", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.119.2.tgz", + "integrity": "sha512-hQr3d2yWq/2lMvoyBPOwXw1IHqTrCjOsU1vYKhAa6w9vGbJZFGhKGGE2KEi/92c3gqGn+gW/PC7cV6waCTDuVA==", + "dependencies": { + "@sentry/types": "7.119.2", + "@sentry/utils": "7.119.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/node/node_modules/@sentry/types": { + "version": "7.119.2", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.119.2.tgz", + "integrity": "sha512-ydq1tWsdG7QW+yFaTp0gFaowMLNVikIqM70wxWNK+u98QzKnVY/3XTixxNLsUtnAB4Y+isAzFhrc6Vb5GFdFeg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/node/node_modules/@sentry/utils": { + "version": "7.119.2", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.119.2.tgz", + "integrity": "sha512-TLdUCvcNgzKP0r9YD7tgCL1PEUp42TObISridsPJ5rhpVGQJvpr+Six0zIkfDUxerLYWZoK8QMm9KgFlPLNQzA==", + "dependencies": { + "@sentry/types": "7.119.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/tracing": { + "version": "7.50.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.50.0.tgz", + "integrity": "sha512-avbIgDA/Bktci5OeWb5T6JCS5edWHeket92KeFNpMH79NfF46csA5yBgM+q0X9/R4swZd5fuTQwh4y6BHA4lEQ==", + "dependencies": { + "@sentry-internal/tracing": "7.50.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/types": { + "version": "7.50.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.50.0.tgz", + "integrity": "sha512-Zo9vyI98QNeYT0K0y57Rb4JRWDaPEgmp+QkQ4CRQZFUTWetO5fvPZ4Gb/R7TW16LajuHZlbJBHmvmNj2pkL2kw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/utils": { + "version": "7.50.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.50.0.tgz", + "integrity": "sha512-iyPwwC6fwJsiPhH27ZbIiSsY5RaccHBqADS2zEjgKYhmP4P9WGgHRDrvLEnkOjqQyKNb6c0yfmv83n0uxYnolw==", + "dependencies": { + "@sentry/types": "7.50.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/utils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/fs-extra": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.1.tgz", + "integrity": "sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==", + "dev": true, + "dependencies": { + "@types/jsonfile": "*", + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "node_modules/@types/jsonfile": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.1.tgz", + "integrity": "sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.16.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.3.tgz", + "integrity": "sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==", + "dev": true + }, + "node_modules/@types/ps-tree": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/ps-tree/-/ps-tree-1.1.2.tgz", + "integrity": "sha512-ZREFYlpUmPQJ0esjxoG1fMvB2HNaD3z+mjqdSosZvd3RalncI9NEur73P8ZJz4YQdL64CmV1w0RuqoRUlhQRBw==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true + }, + "node_modules/@types/which": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/which/-/which-3.0.0.tgz", + "integrity": "sha512-ASCxdbsrwNfSMXALlC3Decif9rwDMu+80KGp5zI2RLRotfMsTv7fHL8W8VDp24wymzDyIFudhUeSCugrgRFfHQ==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.1.tgz", + "integrity": "sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.60.1", + "@typescript-eslint/type-utils": "5.60.1", + "@typescript-eslint/utils": "5.60.1", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.60.1.tgz", + "integrity": "sha512-pHWlc3alg2oSMGwsU/Is8hbm3XFbcrb6P5wIxcQW9NsYBfnrubl/GhVVD/Jm/t8HXhA2WncoIRfBtnCgRGV96Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.60.1", + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/typescript-estree": "5.60.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz", + "integrity": "sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/visitor-keys": "5.60.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.60.1.tgz", + "integrity": "sha512-vN6UztYqIu05nu7JqwQGzQKUJctzs3/Hg7E2Yx8rz9J+4LgtIDFWjjl1gm3pycH0P3mHAcEUBd23LVgfrsTR8A==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.60.1", + "@typescript-eslint/utils": "5.60.1", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.1.tgz", + "integrity": "sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz", + "integrity": "sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/visitor-keys": "5.60.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.60.1.tgz", + "integrity": "sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.60.1", + "@typescript-eslint/types": "5.60.1", + "@typescript-eslint/typescript-estree": "5.60.1", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz", + "integrity": "sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.60.1", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", + "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/author-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/author-regex/-/author-regex-1.0.0.tgz", + "integrity": "sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001655", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz", + "integrity": "sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", + "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/debounce-fn": { + "version": "4.0.0-maxWaithack.0", + "resolved": "git+ssh://git@github.com/julusian/debounce-fn.git#3ca54d1526c19f541fe6f103abbceda31554caa9", + "license": "MIT", + "dependencies": { + "mimic-fn": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "node_modules/ejson": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/ejson/-/ejson-2.2.3.tgz", + "integrity": "sha512-hsFvJp6OpGxFRQfBR3PSxFpaPALdHDY+SB3TRbMpLWNhvu8GzLiZutof5+/DFd2QekZo3KyXau75ngdJqQUSrw==" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz", + "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/envinfo": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", + "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz", + "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.43.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", + "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-es-x": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.1.0.tgz", + "integrity": "sha512-AhiaF31syh4CCQ+C5ccJA0VG6+kJK8+5mXKKE7Qs1xcPRg02CDPOj3mWlQxuWS/AYtg7kxrDNgW9YW3vc0Q+Mw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.5.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": ">=8" + } + }, + "node_modules/eslint-plugin-n": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.0.1.tgz", + "integrity": "sha512-CDmHegJN0OF3L5cz5tATH84RPQm9kG+Yx39wIqIwPR2C0uhBGMWfbbOtetR83PQjjidA5aXMu+LEFw1jaSwvTA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "builtins": "^5.0.1", + "eslint-plugin-es-x": "^7.1.0", + "ignore": "^5.2.4", + "is-core-module": "^2.12.1", + "minimatch": "^3.1.2", + "resolve": "^1.22.2", + "semver": "^7.5.3" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", + "dev": true, + "dependencies": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/fx": { + "version": "27.0.0", + "resolved": "https://registry.npmjs.org/fx/-/fx-27.0.0.tgz", + "integrity": "sha512-am6jTZW1vTfdc42QH63qqtN5QoNb7JiD+DH40SokzVKSofKCcqSAq1V6ASCR/d3R2YyLFD68h6nWaSVt/BZqDA==", + "dev": true, + "bin": { + "fx": "index.js" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/is-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/localforage": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", + "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", + "dependencies": { + "lie": "3.1.1" + } + }, + "node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz", + "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==", + "dev": true, + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue/node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-timeout": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-4.1.0.tgz", + "integrity": "sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-author": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-author/-/parse-author-2.0.0.tgz", + "integrity": "sha512-yx5DfvkN8JsHL2xk2Os9oTia467qnvRgey4ahSm2X8epehBLx/gWLcy5KI+Y36ful5DzGbCS6RazqZGgy1gHNw==", + "dev": true, + "dependencies": { + "author-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "dev": true, + "dependencies": { + "through": "~2.3" + } + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/ps-tree": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", + "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", + "dev": true, + "dependencies": { + "event-stream": "=3.3.4" + }, + "bin": { + "ps-tree": "bin/ps-tree.js" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dev": true, + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", + "dev": true, + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", + "dev": true, + "dependencies": { + "duplexer": "~0.1.1" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser": { + "version": "5.31.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz", + "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", + "dev": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/webpack": { + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpod": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/webpod/-/webpod-0.0.2.tgz", + "integrity": "sha512-cSwwQIeg8v4i3p4ajHhwgR7N6VyxAf+KYSSsY6Pd3aETE+xEU4vbitz7qQkB0I321xnhDdgtxuiSfk5r/FVtjg==", + "dev": true, + "bin": { + "webpod": "dist/index.js" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/word-wrap": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", + "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", + "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zx": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/zx/-/zx-7.2.2.tgz", + "integrity": "sha512-50Gjicd6ijTt7Zcz5fNX+rHrmE0uVqC+X6lYKhf2Cu8wIxDpNIzXwTmzchNdW+JY3LFsRcU43B1lHE4HBMmKgQ==", + "dev": true, + "dependencies": { + "@types/fs-extra": "^11.0.1", + "@types/minimist": "^1.2.2", + "@types/node": "^18.16.3", + "@types/ps-tree": "^1.1.2", + "@types/which": "^3.0.0", + "chalk": "^5.2.0", + "fs-extra": "^11.1.1", + "fx": "*", + "globby": "^13.1.4", + "minimist": "^1.2.8", + "node-fetch": "3.3.1", + "ps-tree": "^1.2.0", + "webpod": "^0", + "which": "^3.0.0", + "yaml": "^2.2.2" + }, + "bin": { + "zx": "build/cli.js" + }, + "engines": { + "node": ">= 16.0.0" + } + }, + "node_modules/zx/node_modules/chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/zx/node_modules/globby": { + "version": "13.1.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.4.tgz", + "integrity": "sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zx/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zx/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..45af76f --- /dev/null +++ b/package.json @@ -0,0 +1,23 @@ +{ + "name": "pixtimerPro", + "version": "3.0.2", + "main": "main.js", + "scripts": { + "format": "prettier -w .", + "package": "companion-module-build" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/bitfocus/companion-module-pixap-pixtimerpro.git" + }, + "dependencies": { + "@companion-module/base": "~1.11.3" + }, + "devDependencies": { + "@companion-module/tools": "^2.3.0", + "prettier": "^3.5.3" + }, + "prettier": "@companion-module/tools/.prettierrc.json", + "packageManager": "yarn@4.9.1" +} diff --git a/pixap-pixtimerpro.js b/pixap-pixtimerpro.js new file mode 100644 index 0000000..25e326f --- /dev/null +++ b/pixap-pixtimerpro.js @@ -0,0 +1,58 @@ +module.exports = { + getTimerPresetList(data){ + let timers = data.toString().slice(6).split('/') + let lp = [] + //this.log('info', 'RECEIVE TIMERS >>> ' + timers) + for (let i = 0; i < timers.length; i++) { + let p = timers[i].split(':') + //this.log('info', `Timer >>> ${p[0].toString()} ${p[1].toString()} ${p[2].toString()} ${p[3].toString()}`) + let ps = {} + ps.id = parseInt(p[0]) + ps.color = this.hexToRgb(p[1]) + ps.name = p[2] + ps.speaker = parseInt(p[3]) + //this.log('info', `GET TIMER PRESET LIST >>> ${JSON. stringify(ps)}`) + lp.push(ps) + } + //this.log('info', `GET TIMER PRESET LIST >>> ${JSON. stringify(lp)}`) + return lp + }, + + getMessagePresetList(data){ + let messages = data.toString().slice(8).split('/') + let lm = [] + //this.log('info', 'RECEIVE TIMERS >>> ' + timers) + for (let i = 0; i < messages.length; i++) { + let p = messages[i].split(':') + //this.log('info', `Timer >>> ${p[0].toString()} ${p[1].toString()} ${p[2].toString()} ${p[3].toString()}`) + let pm = {} + pm.id = parseInt(p[0]) + pm.color = this.hexToRgb(p[1]) + pm.name = p[2] + //this.log('info', `GET MESSAGE PRESET LIST >>> ${JSON. stringify(pm)}`) + lm.push(pm) + } + //this.log('info', `GET TIMER PRESET LIST >>> ${JSON. stringify(lm)}`) + return lm + }, + + hexToRgb(hex) { + // Vérifier si l'entrée est une chaîne de caractères valide + if (typeof hex !== 'string' || !/^#?[0-9A-Fa-f]{6}$/.test(hex)) { + return null; + } + + // Retirer le préfixe "#" si présent + if (hex.startsWith('#')) { + hex = hex.slice(1); + } + + // Convertir la chaîne hexadécimale en nombres entiers RGB + const r = parseInt(hex.slice(0, 2), 16); + const g = parseInt(hex.slice(2, 4), 16); + const b = parseInt(hex.slice(4, 6), 16); + + // Retourner la valeur RGB sous forme d'objet + return [ r, g, b ]; + } +} \ No newline at end of file diff --git a/presets.js b/presets.js new file mode 100644 index 0000000..886de68 --- /dev/null +++ b/presets.js @@ -0,0 +1,1272 @@ +const { combineRgb } = require('@companion-module/base') +module.exports = { + getPresets() { + const presets = {} + + const colorWhite = [255, 255, 255] + const colorBlack = [0, 0, 0] + const colorRed = [242, 13, 13] + const colorGreen = [58, 213, 61] + const colorBlue = [0, 0, 200] + const colorOrange = [255, 85, 0] + const colorpixBlue = [48, 132, 208] + const colorWarning = [242, 175, 13] + const colorInfo = [23, 162, 184] + + // TIMERS + // lOAD PRESET TIMER FROM PIXTIMER PRO + Object.keys(this.pixtimerdata.presets).forEach((key) => { + //this.log('debug', `PRESET | Cue >>> ${this.pixtimerdata.presets[key].name}_${key}`) + const rgb = this.pixtimerdata.presets[key].color + presets[`${this.pixtimerdata.presets[key].name}`] = { + type: 'button', + category: 'Timer Presets', + style: { + text: this.pixtimerdata.presets[key].name, + size: '14', + color: combineRgb(255, 255, 255), + bgcolor: combineRgb(rgb[0], rgb[1], rgb[2]), + png64: this.pixtimerdata.presets[key].speaker ? ICON_SESSION_SMALL : ICON_SPEAKER_SMALL, + pngalignment: 'left:bottom', + }, + steps: [ + { + down: [ + { + actionId: 'recall_timer_preset', + options: { + recall_timer_preset: this.pixtimerdata.presets[key].id, + }, + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'current_speaker', + options: { + current_speaker: this.pixtimerdata.presets[key].id, + }, + style: { + bgcolor: combineRgb(colorRed[0], colorRed[1], colorRed[2]), + }, + }, + { + feedbackId: 'current_session', + options: { + current_session: this.pixtimerdata.presets[key].id, + }, + style: { + bgcolor: combineRgb(colorOrange[0], colorOrange[1], colorOrange[2]), + }, + }, + ], + } + }) + + // SPEAKER PLAY PAUSE STOP + presets['Speaker Play'] = { + type: 'button', + category: 'General', + style: { + text: '', + png64: ICON_PLAY_SPEAKER, + pngalignment: 'center:center', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [ + { + actionId: 'speaker_timer_play', + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'speaker_play_status', + options: { + speaker_play: 1, + }, + style: { + bgcolor: combineRgb(colorGreen[0], colorGreen[1], colorRed[2]), + }, + }, + ], + } + presets['Speaker Pause'] = { + type: 'button', + category: 'General', + style: { + text: '', + png64: ICON_PAUSE_SPEAKER, + pngalignment: 'center:center', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [ + { + actionId: 'speaker_timer_pause', + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'speaker_play_status', + options: { + speaker_play: 2, + }, + style: { + bgcolor: combineRgb(colorWarning[0], colorWarning[1], colorWarning[2]), + }, + }, + ], + } + presets['Speaker Stop'] = { + type: 'button', + category: 'General', + style: { + text: '', + png64: ICON_STOP_SPEAKER, + pngalignment: 'center:center', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [ + { + actionId: 'speaker_timer_stop', + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'speaker_play_status', + options: { + speaker_play: 0, + }, + style: { + bgcolor: combineRgb(colorRed[0], colorRed[1], colorRed[2]), + }, + }, + ], + } + + presets['Speaker Flash'] = { + type: 'button', + category: 'Effect', + style: { + text: 'Speaker Flash', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorpixBlue[0], colorpixBlue[1], colorpixBlue[2]), + }, + steps: [ + { + down: [ + { + actionId: 'speaker_timer_flash', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + + // SESSION PLAY PAUSE STOP + presets['Session Play'] = { + type: 'button', + category: 'General', + style: { + text: '', + png64: ICON_PLAY_SESSION, + pngalignment: 'center:center', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [ + { + actionId: 'session_timer_play', + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'session_play_status', + options: { + session_play: 1, + }, + style: { + bgcolor: combineRgb(colorGreen[0], colorGreen[1], colorRed[2]), + }, + }, + ], + } + presets['Session Pause'] = { + type: 'button', + category: 'General', + style: { + text: '', + png64: ICON_PAUSE_SESSION, + pngalignment: 'center:center', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [ + { + actionId: 'session_timer_pause', + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'session_play_status', + options: { + session_play: 2, + }, + style: { + bgcolor: combineRgb(colorWarning[0], colorWarning[1], colorWarning[2]), + }, + }, + ], + } + presets['Session Stop'] = { + type: 'button', + category: 'General', + style: { + text: '', + png64: ICON_STOP_SESSION, + pngalignment: 'center:center', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [ + { + actionId: 'session_timer_stop', + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'session_play_status', + options: { + session_play: 0, + }, + style: { + bgcolor: combineRgb(colorRed[0], colorRed[1], colorRed[2]), + }, + }, + ], + } + + presets['Session Flash'] = { + type: 'button', + category: 'Effect', + style: { + text: 'Session Flash', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorpixBlue[0], colorpixBlue[1], colorpixBlue[2]), + }, + steps: [ + { + down: [ + { + actionId: 'session_timer_flash', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + + // ALL PLAY PAUSE STOP + presets['ALL Play'] = { + type: 'button', + category: 'General', + style: { + text: '', + png64: ICON_PLAY_ALL, + pngalignment: 'center:center', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [ + { + actionId: 'all_timer_play', + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'all_play_status', + options: { + all_play: 1, + }, + style: { + bgcolor: combineRgb(colorGreen[0], colorGreen[1], colorRed[2]), + }, + }, + ], + } + presets['ALL Pause'] = { + type: 'button', + category: 'General', + style: { + text: '', + png64: ICON_PAUSE_ALL, + pngalignment: 'center:center', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [ + { + actionId: 'all_timer_pause', + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'all_play_status', + options: { + all_play: 2, + }, + style: { + bgcolor: combineRgb(colorWarning[0], colorWarning[1], colorWarning[2]), + }, + }, + ], + } + presets['ALL Stop'] = { + type: 'button', + category: 'General', + style: { + text: '', + png64: ICON_STOP_ALL, + pngalignment: 'center:center', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [ + { + actionId: 'all_timer_stop', + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'all_play_status', + options: { + all_play: 0, + }, + style: { + bgcolor: combineRgb(colorRed[0], colorRed[1], colorRed[2]), + }, + }, + ], + } + + // MESSAGES + // lOAD PRESET MESSAGE FROM PIXTIMER PRO + Object.keys(this.pixtimerdata.messages).forEach((key) => { + let rgb = this.pixtimerdata.messages[key].color + if (rgb === null) rgb = [0, 0, 0] + presets[`${this.pixtimerdata.messages[key].name}`] = { + type: 'button', + category: 'Message Presets', + style: { + text: this.pixtimerdata.messages[key].name, + size: '14', + color: combineRgb(255, 255, 255), + bgcolor: combineRgb(rgb[0], rgb[1], rgb[2]), + }, + steps: [ + { + down: [ + { + actionId: 'recall_message_preset', + options: { + recall_message_preset: this.pixtimerdata.messages[key].id, + }, + }, + ], + up: [], + }, + ], + feedbacks: [], + } + }) + presets['Message Show'] = { + type: 'button', + category: 'General', + style: { + text: 'Show Message', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorGreen[0], colorGreen[1], colorGreen[2]), + }, + steps: [ + { + down: [ + { + actionId: 'message_show', + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'message_show', + options: { + message_show: 0, + }, + style: { + bgcolor: combineRgb(colorGreen[0], colorGreen[1], colorRed[2]), + }, + }, + { + feedbackId: 'message_show', + options: { + message_show: 1, + }, + style: { + bgcolor: combineRgb(colorRed[0], colorRed[1], colorRed[2]), + }, + }, + ], + } + + // BLACKOUT + presets['Blackout'] = { + type: 'button', + category: 'General', + style: { + text: 'Blackout', + size: '14', + color: combineRgb(255, 255, 255), + bgcolor: combineRgb(colorGreen[0], colorGreen[1], colorGreen[2]), + }, + steps: [ + { + down: [ + { + actionId: 'blackout', + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'blackout', + options: { + blackout: 0, + }, + style: { + bgcolor: combineRgb(colorGreen[0], colorGreen[1], colorRed[2]), + }, + }, + { + feedbackId: 'blackout', + options: { + blackout: 1, + }, + style: { + bgcolor: combineRgb(colorRed[0], colorRed[1], colorRed[2]), + }, + }, + ], + } + + // ADJUST TIME + for (let ajt = 0; ajt < this.adjustArray.length; ajt++) { + var t = this.adjustArray[ajt] + //this.log('debug', `PRESETS | ADJUSTE TIME >>> ${this.adjustArray[ajt] * 60}`) + presets[`Adjust Speaker Timer ${this.adjustArray[ajt] * 60}`] = { + type: 'button', + category: 'Adjust Timer', + style: { + text: `Speaker\n+${t}`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorInfo[0], colorInfo[1], colorInfo[2]), + }, + steps: [ + { + down: [ + { + actionId: 'speaker_adjust_time', + options: { + time: '' + t * 60, + }, + }, + ], + up: [], + }, + ], + feedbacks: [], + } + } + + for (let ajtn = 0; ajtn < this.adjustArray.length; ajtn++) { + var t = this.adjustArray[ajtn] + //this.log('debug', `PRESETS | ADJUSTE TIME >>> -${this.adjustArray[ajtn] * 60}`) + presets[`Adjust Speaker Timer -${this.adjustArray[ajtn] * 60}`] = { + type: 'button', + category: 'Adjust Timer', + style: { + text: `Speaker\n-${t}`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorInfo[0], colorInfo[1], colorInfo[2]), + }, + steps: [ + { + down: [ + { + actionId: 'speaker_adjust_time', + options: { + time: '-' + t * 60, + }, + }, + ], + up: [], + }, + ], + feedbacks: [], + } + } + + // TIMER CLOCK + presets['Switch Timer Clock'] = { + type: 'button', + category: 'General', + style: { + text: 'Switch Timer', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorpixBlue[0], colorpixBlue[1], colorpixBlue[2]), + }, + steps: [ + { + down: [ + { + actionId: 'timer_clock', + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'switch_timer_clock', + options: { + switch_timer_clock: 0, + }, + style: { + text: 'Switch Timer', + bgcolor: combineRgb(colorpixBlue[0], colorpixBlue[1], colorpixBlue[2]), + }, + }, + { + feedbackId: 'switch_timer_clock', + options: { + switch_timer_clock: 1, + }, + style: { + text: 'Switch Clock', + bgcolor: combineRgb(colorOrange[0], colorOrange[1], colorOrange[2]), + }, + }, + ], + } + + // EXTERNAL TIMER + presets['External Timer and Play'] = { + type: 'button', + category: 'External Timer', + style: { + text: 'External Timer', + size: '14', + png64: ICON_PLAY, + pngalignment: 'center:center', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [ + { + actionId: 'external_timer_Play', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + presets['External Timer Play'] = { + type: 'button', + category: 'External Timer', + style: { + text: 'External Timer', + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorInfo[0], colorInfo[1], colorInfo[2]), + }, + steps: [ + { + down: [ + { + actionId: 'external_timer', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + presets['External Stop'] = { + type: 'button', + category: 'External Timer', + style: { + text: 'External', + size: '14', + png64: ICON_STOP, + pngalignment: 'center:center', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [ + { + actionId: 'external_stop', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + presets['External Play'] = { + type: 'button', + category: 'External Timer', + style: { + text: 'External', + size: '14', + png64: ICON_PLAY, + pngalignment: 'center:center', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [ + { + actionId: 'external_play', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + + // VARIABLE SPEAKER + presets['Speaker Variable'] = { + type: 'button', + category: 'Variable', + style: { + text: `Speaker\n$(piXtimer_Pro:speaker_timer)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + presets['Speaker Variable MS'] = { + type: 'button', + category: 'Variable', + style: { + text: `Speaker\nm:s\n$(piXtimer_Pro:speaker_timer_ms)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + presets['Speaker Variable Hour'] = { + type: 'button', + category: 'Variable', + style: { + text: `Speaker\nHour\n$(piXtimer_Pro:speaker_timer_h)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + presets['Speaker Variable Minute'] = { + type: 'button', + category: 'Variable', + style: { + text: `Speaker\nMinute\n$(piXtimer_Pro:speaker_timer_m)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + presets['Speaker Variable Second'] = { + type: 'button', + category: 'Variable', + style: { + text: `Speaker\nSecond\n$(piXtimer_Pro:speaker_timer_s)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + + // VARIABLE SESSION + presets['Session Variable'] = { + type: 'button', + category: 'Variable', + style: { + text: `Session\n$(piXtimer_Pro:session_timer)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + presets['Session Variable MS'] = { + type: 'button', + category: 'Variable', + style: { + text: `Session\nm:s\n$(piXtimer_Pro:session_timer_ms)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + presets['Session Variable Hour'] = { + type: 'button', + category: 'Variable', + style: { + text: `Session\nHour\n$(piXtimer_Pro:session_timer_h)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + presets['Session Variable Minute'] = { + type: 'button', + category: 'Variable', + style: { + text: `Session\nMinute\n$(piXtimer_Pro:session_timer_m)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + presets['Session Variable Second'] = { + type: 'button', + category: 'Variable', + style: { + text: `Session\nSecond\n$(piXtimer_Pro:session_timer_s)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + + // VARIABLE EXTERNAL + presets['External Variable'] = { + type: 'button', + category: 'Variable', + style: { + text: `External\n$(piXtimer_Pro:external_timer)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + presets['External Variable MS'] = { + type: 'button', + category: 'Variable', + style: { + text: `External\nm:s\n$(piXtimer_Pro:external_timer_ms)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + presets['External Variable Hour'] = { + type: 'button', + category: 'Variable', + style: { + text: `External\nHour\n$(piXtimer_Pro:external_timer_h)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + presets['External Variable Minute'] = { + type: 'button', + category: 'Variable', + style: { + text: `External\nMinute\n$(piXtimer_Pro:external_timer_m)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + presets['External Variable Second'] = { + type: 'button', + category: 'Variable', + style: { + text: `External\nSecond\n$(piXtimer_Pro:external_timer_s)`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + }, + steps: [ + { + down: [], + up: [], + }, + ], + feedbacks: [], + } + + // NDI + presets['NDI start stop'] = { + type: 'button', + category: 'NDI', + style: { + text: `NDI start & stop`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorRed[0], colorRed[1], colorRed[2]), + }, + steps: [ + { + down: [ + { + actionId: 'ndi_startStop', + }, + ], + up: [], + }, + ], + feedbacks: [ + { + feedbackId: 'ndi_start', + options: { + ndi_start: 0, + }, + style: { + bgcolor: combineRgb(colorGreen[0], colorGreen[1], colorRed[2]), + }, + }, + { + feedbackId: 'ndi_start', + options: { + ndi_start: 1, + }, + style: { + bgcolor: combineRgb(colorRed[0], colorRed[1], colorRed[2]), + }, + }, + ], + } + + // PBP+ + presets['PlaybackPro main enable'] = { + type: 'button', + category: 'PBP +', + style: { + text: `PBP\nMain\nenable`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorInfo[0], colorInfo[1], colorInfo[2]), + }, + steps: [ + { + down: [ + { + actionId: 'pbp_main_enable', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + presets['PlaybackPro backup enable'] = { + type: 'button', + category: 'PBP +', + style: { + text: `PBP\nBackup\nenable`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorInfo[0], colorInfo[1], colorInfo[2]), + }, + steps: [ + { + down: [ + { + actionId: 'pbp_backup_enable', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + presets['PlaybackPro master take'] = { + type: 'button', + category: 'PBP +', + style: { + text: `PBP\nMaster\nTake`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorGreen[0], colorGreen[1], colorGreen[2]), + }, + steps: [ + { + down: [ + { + actionId: 'pbp_master_take', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + presets['PlaybackPro master endall'] = { + type: 'button', + category: 'PBP +', + style: { + text: `PBP\nMaster\nEndAll`, + size: '14', + color: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + bgcolor: combineRgb(colorRed[0], colorRed[1], colorRed[2]), + }, + steps: [ + { + down: [ + { + actionId: 'pbp_master_endall', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + presets['PlaybackPro master previous'] = { + type: 'button', + category: 'PBP +', + style: { + text: `PBP\nMaster\nPrevious`, + size: '14', + color: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + bgcolor: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + }, + steps: [ + { + down: [ + { + actionId: 'pbp_master_previous', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + presets['PlaybackPro master next'] = { + type: 'button', + category: 'PBP +', + style: { + text: `PBP\nMaster\nNext`, + size: '14', + color: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + bgcolor: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + }, + steps: [ + { + down: [ + { + actionId: 'pbp_master_next', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + presets['PlaybackPro master play'] = { + type: 'button', + category: 'PBP +', + style: { + text: `PBP\nMaster\nPlay`, + size: '14', + color: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + bgcolor: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + }, + steps: [ + { + down: [ + { + actionId: 'pbp_master_play', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + presets['PlaybackPro master pause'] = { + type: 'button', + category: 'PBP +', + style: { + text: `PBP\nMaster\nPause`, + size: '14', + color: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + bgcolor: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + }, + steps: [ + { + down: [ + { + actionId: 'pbp_master_pause', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + Object.keys(this.pixtimerdata.gotoArray).forEach((key) => { + let rgb = this.pixtimerdata.gotoArray[key].color + if (rgb === null) rgb = [0, 0, 0] + presets[`${this.pixtimerdata.gotoArray[key].name}`] = { + type: 'button', + category: 'PBP +', + style: { + text: `PBP Master ${this.pixtimerdata.gotoArray[key].name}`, + size: '14', + color: combineRgb(colorBlack[0], colorBlack[1], colorBlack[2]), + bgcolor: combineRgb(colorWhite[0], colorWhite[1], colorWhite[2]), + }, + steps: [ + { + down: [ + { + actionId: 'pbp_master_goto', + options: { + pbp_master_goto: this.pixtimerdata.gotoArray[key].id, + }, + }, + ], + up: [], + }, + ], + feedbacks: [], + } + }) + + return presets + }, +} + +// SPEAKER +const ICON_SPEAKER_SMALL = + 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kc8rRFEUxz8zjPFjNIqFhcVLWM1ojBIpZSSUpDHKr83Mm19qZrzem0myVbaKEhu/FvwFbJW1UkRKtqyJDdNz3oyaSebe7jmf+73nnO49F+yhlJo2qn2QzmT14FhAmZtfUJwvOKihTuxgWDW04enpSSqOz3tslr/1WrUqx/07GqIxQwVbrfCQqulZ4XHhydWsZvGOcIuaDEeFz4Q9ulxQ+M7SI0V+tThR5G+L9VBwBOxNwkqijCNlrCb1tLC8nI50Kqf+3sd6iSuWmZ0R3y6rDYMgYwRQmGCUEfroYUBsH178dMuOCvm+Qv4UK5KritVYQ2eZBEmyeETNSfWY+LjoMZkp1qz+/+2rEe/1F6u7AuB4Ns33TnBuQ37LNL+OTDN/DFVPcJkp5a8cQv+H6FslreMA3BtwflXSIrtwsQmtj1pYDxekKln2eBzeTqFxHppvoH6x2LPfc04eILQuX3UNe/vQJfHupR8yb2fOfsfNDAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAQdJREFUeJzt1jFOAkEUh/FPQQoSTqAkNlYWHoBQiiaUXsNzcAxbSxoTC47gAeigIGhhgaGjAQtnGwjZZV0cWL9f8pqdl8n/zW4yC5IkSZIkSZIkSZIkSZIkSZIkroE+8BGqH579C/fAAlit1QK4i5jrTzSAdzaHT2oaekqrw/bhk7qNlu4XTjP2XRXUc3CyHsCwoJ6jVQfGbP/8R6Gn1NrAnM3h52HtKFV26D0HnoAqUAM+gRfgMewzKTzdgbgAnvl52zOgBzyE6gFfYW0AXMaJuF+vpF+BSb0BZ3Fi7kcTWJL9AFZAK0rSnNKuwS5wsuOeNzmzRJF2ALUce1bzBIkl64+QJJXSN710Tbr3AWT/AAAAAElFTkSuQmCC' + +// SESSION +const ICON_SESSION_SMALL = + 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kc8rRFEUxz8zjPFjNIqFhcVLWM1ojBIpZSSUpDHKr83Mm19qZrzem0myVbaKEhu/FvwFbJW1UkRKtqyJDdNz3oyaSebe7jmf+73nnO49F+yhlJo2qn2QzmT14FhAmZtfUJwvOKihTuxgWDW04enpSSqOz3tslr/1WrUqx/07GqIxQwVbrfCQqulZ4XHhydWsZvGOcIuaDEeFz4Q9ulxQ+M7SI0V+tThR5G+L9VBwBOxNwkqijCNlrCb1tLC8nI50Kqf+3sd6iSuWmZ0R3y6rDYMgYwRQmGCUEfroYUBsH178dMuOCvm+Qv4UK5KritVYQ2eZBEmyeETNSfWY+LjoMZkp1qz+/+2rEe/1F6u7AuB4Ns33TnBuQ37LNL+OTDN/DFVPcJkp5a8cQv+H6FslreMA3BtwflXSIrtwsQmtj1pYDxekKln2eBzeTqFxHppvoH6x2LPfc04eILQuX3UNe/vQJfHupR8yb2fOfsfNDAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAXNJREFUeJzt171qFFEYBuAnGnIBoqCgTRrxpxEbQfzLJWwjKeMtaKdNOmst7dKJCGkUFOwsFYukshHZJCiWUYu1iMUcSNydWdjNOlnj+8BhmHe/gW/OmTm7S0RERERERERERERERERERERERERERESYwRLelbFUsv/Gdez0jWsH2lHLVgxOwMqBdrRPR0asX6/J1ibRyDSaw210MFuy49iwu/obJVNqOuWauVY73YemDewkPpQj1Y1exiJOoVvyM9jEU7zH6ZJ/waVy/Cc9MPiu38WPmvw77tXk91vvegxNe8CFmuw8tmvybZyryS+O29Q0WDC4ondqsmGf3Wq96zEcbci/qd7fE/iMh3iFeZztq32DR/iIY/ha6l+iN/mW/74bqk2uh+dYxS9s4SZ+2l3lLq7iU6lZLdf0VBNxpd3WJ+Ot5kf9GZ7sOX+M10PqX7Tc+0Q03cyO6ltgec/5sj+fiLox1Ub9JXjo/viMOgEREYfKb5UCeijzUtIlAAAAAElFTkSuQmCC' + +// PLAY +const ICON_PLAY = + 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kd8rg1EYxz82i5i24sKFiyVcbZrJ4kbZ0ihJM2W42V77ofbj7X0nya1yu6LEjV8X/AXcKtdKESm55Zq4Yb2ed1NbsnM65/mc73mep+c8ByyRjJLVG72QzRW0cCjgmo8uuJpesMl0MsBQTNHVsZmZKeqOz3saTHvrMXPV9/t3tC4ndAUamoVHFVUrCE8IT60VVJN3hDuUdGxZ+EzYrUmBwnemHq/wq8mpCn+brEXCQbA4hV2pGo7XsJLWssLycnqymVXltx7zJfZEbm5WbLesLnTChAjgYpJxgvilKyOy+/Hgo19O1In3luOnyUusIrvKOhorpEhTwC3qqmRPiE2KnpCZYd3s/9++6slBXyW7PQC2Z8N474WmbSgVDePryDBKx2B9gstcNT5/CMMfoherWs8BODbh/KqqxXfhYgs6H9WYFitLVlmWZBLeTqEtCu030LJY6dnvPScPENmQr7qGvX3oE3/H0g+TSWf6w6FYwwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAc1JREFUeJztmr1KxEAQgD9/wFZQEG0E24CInQtrYXFoI4o+grXv4CtYaOEjiI2dghYeBm2FbbSy0kew8afQBbE5d7JJNnvztZfZyXw3BJIZUBRFURRFURRlGBmpeoBxdhrYAGaBJ+CuLPovVc9tCrEA4+wUcAzsAKN/fr4EDsqiX1a4t0YQCTDOTgJXwPKAS5MX8fef+y8nDC4eoAfcGmcvjLNGmKtWgjvAODsDvArzJdcRkg5Yq5AvuY6QCCgi5E1GhETAWMT8rYuQPgRj05qIVAR4GheRmgBPYyJSFeCpXUTqAjy1ieiKAE90EV0T4PktYqnKQV0V4OkBd8bZLekBXRcAMAGcGWc3JcE5CIDvOg6Ns8Evd7kIAJgHFkODchIAsBoakJuAYHITcBMakJOAZ+AhNCgXAR/Afln0P0MDcxDwBmyXRf9cEtx1AZfAirR4gPGIN9Mk0b4ud01A9M/qXRFQ2zwhdQG1D1JSFdDYBCk1AY2PzlIR0NrMUCLgPWL+1oelEgEuQt7WC/dIBFxXyJdM4R7phsgpsBsQklzhHulDcA9YIIMVmapLUkd8d8JwLUn95mdNbh2YAx6B+y6tySmKoiiKoiiKMpx8ATwInxTdIq2hAAAAAElFTkSuQmCC' + +// STOP +const ICON_STOP = + 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kd8rg1EYxz82i5i24sKFiyVcbZrJ4kbZ0ihJM2W42V77ofbj7X0nya1yu6LEjV8X/AXcKtdKESm55Zq4Yb2ed1NbsnM65/mc73mep+c8ByyRjJLVG72QzRW0cCjgmo8uuJpesMl0MsBQTNHVsZmZKeqOz3saTHvrMXPV9/t3tC4ndAUamoVHFVUrCE8IT60VVJN3hDuUdGxZ+EzYrUmBwnemHq/wq8mpCn+brEXCQbA4hV2pGo7XsJLWssLycnqymVXltx7zJfZEbm5WbLesLnTChAjgYpJxgvilKyOy+/Hgo19O1In3luOnyUusIrvKOhorpEhTwC3qqmRPiE2KnpCZYd3s/9++6slBXyW7PQC2Z8N474WmbSgVDePryDBKx2B9gstcNT5/CMMfoherWs8BODbh/KqqxXfhYgs6H9WYFitLVlmWZBLeTqEtCu030LJY6dnvPScPENmQr7qGvX3oE3/H0g+TSWf6w6FYwwAAAAlwSFlzAAALEwAACxMBAJqcGAAAATJJREFUeJzt2jGKwlAUheF/nDrBbvaRStBVCAPWAVfl7EBchF0qtzGt+NoRLKL9vcHxRD1fnScnv2L1wMzMzMze00f2wKmqPoEWWAENML33qKQjcAC2wKYu5Zw5nApwqqovYAfMM+ceqAOWdSm/0QPhANdvfs94X/6mAxbRX8Ik8cEt4395gBmwjj6cCbDKb5H5jj6YCdAMGKIS3poJoP63zwhvzQR4SQ6gHqDmAOoBag6gHqDmAOoBag6gHqDmAOoBag6gHqDmAOoBag6gHqDmAOoBag6gHqDmAOoBag6gHqDmAOoBag6gHqCWCXD8txX3F96aCXAYMEQlvDUTYDtgiEp4aybAD/0VtLHrgE304XCAupQ/YMm4I9wuSoZviw69Krumv4r29FdlzczMzOxdXQBM6C5uVSFtIAAAAABJRU5ErkJggg==' + +// SPEAKER +const ICON_PLAY_SPEAKER = + 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kd8rg1EYxz82i5i24sKFiyVcbZrJ4kbZ0ihJM2W42V77ofbj7X0nya1yu6LEjV8X/AXcKtdKESm55Zq4Yb2ed1NbsnM65/mc73mep+c8ByyRjJLVG72QzRW0cCjgmo8uuJpesMl0MsBQTNHVsZmZKeqOz3saTHvrMXPV9/t3tC4ndAUamoVHFVUrCE8IT60VVJN3hDuUdGxZ+EzYrUmBwnemHq/wq8mpCn+brEXCQbA4hV2pGo7XsJLWssLycnqymVXltx7zJfZEbm5WbLesLnTChAjgYpJxgvilKyOy+/Hgo19O1In3luOnyUusIrvKOhorpEhTwC3qqmRPiE2KnpCZYd3s/9++6slBXyW7PQC2Z8N474WmbSgVDePryDBKx2B9gstcNT5/CMMfoherWs8BODbh/KqqxXfhYgs6H9WYFitLVlmWZBLeTqEtCu030LJY6dnvPScPENmQr7qGvX3oE3/H0g+TSWf6w6FYwwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAv5JREFUeJztml1LFFEch58dVytENBV0kxC2IGMrJCppZAyilrrpTaMvEHTXdwj6BF3URZ8googuioRecGkxukljLkryZb0wlQiVSN3ZmS50Q61ld86cMzvleS5nzv/85jx7ZnZnzwGNRqPRaDQajUazHYkF7cC0rVbgPJAAxoDhbCozE7TfsBAWYNpWC3AP6AeMLacHgVvZVCYb4NpCQUiAaVtNwEvgaJmmkRex9ZOrlPuUHzxAGnhr2tYL07ZMwSyl+J4Bpm21AV8F8yI3I0RmwOkAeZGbESICUhJyIyNCRECNxPyqixB9CMqmaiKiIqBI6CKiJqBIaCKiKqCIchGhCXAXOnAmenEmenEXOvyWKxMRl9nZ3/CcneQ/XMOZPrY5eO97arsfEIuv+OkuDaRN25L2g0r5DMiPDPwxeABn+jj5kaui3W6cEd1Brk+pAHepHSfXU/K8k+vBXWoPEpEGhk3buiTagVoB3zultCnDDuCRaVsXRIrV3gIxt4I2BRlJBnDHtC3fL3dKBdQ0T1bQZkpWXCdwxG+RUgGx+nniyaGS5+PJIWL18zIj+/wWKP8arDv0BGIezpdTm4P3vaEu9VR1fFmUCnAXE+Q/XsFoyrHr7G3chQQARuMMTu4EK8M3qO16htEyLiuy9HQrgTIBzngfq6P94BkU5rrIj53BaJgFwF1qA2/t7ivMHaDu8GPi+18HjZwCRv0WqXkGeAb5T+nfgywecxcTuIuJzceBVfsi3s+mIIkucDObynh+C5UIKMwexFturLzArcH9lhSNWwYuZ1MZoQeKEgHej1b/NSsNIlGDwEnRwUMI3wKKkPYypESA0TxFbddz3zUVIP1vdTUCdk9i7J6U2aWy9YSo3wLKF1KiKiC0FaSoCQh96SwqAqq2ZigiQMoL/DpVXywVEWBLyK36wIuICHgVIC8yAy8iukPkITDgoyRyAy8i+hC8DiT5D7bIBN0kdZe1mbC9NkltZH2b3DlgD/AZePcvbZPTaDQajUaj0Wg025NfyFIR+WHx3JgAAAAASUVORK5CYII=' + +const ICON_PAUSE_SPEAKER = + 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kd8rg1EYxz/baGJCXLhwsWSuNs3U4kaZNGpJM2W42V77ofbj7X0nya1yu6LEjV8X/AXcKtdKESm55Zq4Yb2e11ZbsnM65/mc73mep+c8B6yRjJLVG7yQzRW0cDDgnI8uOO0vNMrsoAlXTNHVsZmZEHXH5z0W0956zFz1/f4dLcsJXQFLk/CoomoF4Unh0FpBNXlHuEtJx5aFz4TdmhQofGfq8TK/mpwq87fJWiQ8DtZ2YWeqhuM1rKS1rLC8nL5sZlWp1GO+xJHIzc2K7ZXVg06YIAGcTDHBOH4GGZHdjwcfA3KiTrz3N36avMQqsquso7FCijQF3KKuSvaE2KToCZkZ1s3+/+2rnhzylbM7AtD4bBjvLrBvQ6loGF9HhlE6BtsTXOaq8flDGP4QvVjV+g6gbRPOr6pafBcutqD7UY1psV/JJsuaTMLbKbRGofMGmhfLPavcc/IAkQ35qmvY24d+8W9b+gEYQ2fCbyeEygAAAAlwSFlzAAALEwAACxMBAJqcGAAAA3JJREFUeJztmt1LU2Ecxz++NFDcJE0I1CwhTbNaBKZmEIi3wYS6qS6qK1PJLgqCQAVvJSyT7kqTArvYHyDSqy8RlCaoKWjmLgrTakNjObcudiJXmzvP2XwO5POBXWzP73m+3/PdOc+2sx8oFAqFQqFQKLYmCUYnup3WBKASOA5YwpT4gWlg0ObwzMWgcQKoALaFKVkDpjSNeSMawgG4ndYU4AJwCSjWOe0R0GBzeBZ1aqQBF4FaoFDHlADQDTTaHJ5vOj0BggG4ndZ0oB84IjJPYwYoszk8C1E0MoEnwAEDGpNAuUgIiYICbRg7eIB8oENHXQfGDh5gH3BTZILuM8DttOYCcyJzIlBoc3imImjsJXhNx0IAyNO7J4icARXEfvAAxzYYq4zD+gkEvepCJIACcS/C68jQCEEkgCQDRkTXkaERgugm+N+hAjDbgNmoAMw2YDZbPoBks4TtrSOHgDLt6fDIDfuoGT6kB7C4mmGxt77oAc6sf93eOtKz5Du5mJH8Vaof6ZdAk6ulir8OXuNs03xLlWw/UgOY8+bxbsVeEml8dOVwyZw3T6YluQGM/4h+/2RCR008kRpAEmvRaxKi18QTqQHsTx2PWlOcEr0mnkgNINviojTt1dtI46Vpw2+yLS6Zlkz4FMhpfgrcCjPU3pTT8kyyHbkBzHrzqZ+94wCWgSLglPYoApbrZjtrxlaM3g40hrQvQs6lGto/XcYfSNwNXAeuARPa8D4g+YN3D3WzndTvvM3pzF4pvqScAWuBJB4snMMfCJFLAkq0R8gbcfdzLQurWTKsyQng9XIpX3w7dNf7AsmMrRzcREd/kBKAy5stPGfJt30TnPyL+jksQ6Q4dZzzWfcA+PgzZ7D/e3VfuLqq9L7qXRZXxe85MpATQMr4+m94A20NV5vD1T13WlMR+FMjHmz5S0AFYLYBs1EBmG3AbFQAArXxulWz0ToyNEIQCSDWzg0960zHSeO93kKRAAYJtp/EysAGYy/jsH4AGNJbrDsAreem24ijdfRG6g/SNKaAxzFqdIn0DIpugo0EW9GMMAPU66ir02qNMAlcEZkgFIDWf1cOdCF2OTwESqP1CGoaC8BRgs2VegkA9xHsEYTYWmVzCYZRSPieHD/BDW8ohlbZPE2jgPBv1hrBDW/IaKusQqFQKBQKhWKr8gvpIuCz758RhwAAAABJRU5ErkJggg==' + +const ICON_STOP_SPEAKER = + 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kd8rg1EYxz82i5i24sKFiyVcbZrJ4kbZ0ihJM2W42V77ofbj7X0nya1yu6LEjV8X/AXcKtdKESm55Zq4Yb2ed1NbsnM65/mc73mep+c8ByyRjJLVG72QzRW0cCjgmo8uuJpesMl0MsBQTNHVsZmZKeqOz3saTHvrMXPV9/t3tC4ndAUamoVHFVUrCE8IT60VVJN3hDuUdGxZ+EzYrUmBwnemHq/wq8mpCn+brEXCQbA4hV2pGo7XsJLWssLycnqymVXltx7zJfZEbm5WbLesLnTChAjgYpJxgvilKyOy+/Hgo19O1In3luOnyUusIrvKOhorpEhTwC3qqmRPiE2KnpCZYd3s/9++6slBXyW7PQC2Z8N474WmbSgVDePryDBKx2B9gstcNT5/CMMfoherWs8BODbh/KqqxXfhYgs6H9WYFitLVlmWZBLeTqEtCu030LJY6dnvPScPENmQr7qGvX3oE3/H0g+TSWf6w6FYwwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAo5JREFUeJztmtFLU1Ecxz9ug8DaMJaFLhgNIZrawx4iqJdAhj42VHxV8MEKDP+PglFUYNRzTesxW5D0IAysvQwngVjGcJSS4qUeYs4elkUM2TlznnPL3+fx3t/Z73s+uzuXHQ4IgiAIgiAIh5Mm3QFbfr8XGAGGgBjQ0uhQmmwCWSAFTAYcZ1tnsJaALb//FDANXNIZZ5AMkAg4TlF1gLKAX9/8G9w7+V0ywGXVJ8Gj8cEjuH/yABeBUdViHQFD+lmsMaBaqCMgVkcQWyhn1RFge7XXQTmrjoD/EhFgO4BtRIDtALYRAbYD2MZnq/HSyQ7y7Z0ARFcX6PiyZCWHcQHfjhzldnyCV9H4X9fjC2km0rdo/vHdaB7jP4Fkz3jV5AHSnXGSPTdNxzErYCUYZqarb8/7L7r7WAmGDSYyLCDfHq1Zs9hWu6aRGBXgLdfeo1CpaSRGBXSu5mvWRIu1axqJUQGhjQJXs8/2vJ/IThPaKBhMZOEtcG32Hv3vpqqu979NMTZ733QcrU3Rnf02+9Aa4e6V65z9/J7e3AzLrREAImvLvOzqZbHtHMNzj+gu5PbbioDjKM3NmIDnsQTJnnHKTZWHzrNTJrz+EYBPwTDbHu/v2huv7zA4/3Q/7dwlYNvjZWBsivVjJ5TqfeUSTx4M0uqs1dtSWYCRNWD+zAXlyQOUPD5yp88fYKI/GBFQaAlpj/nafPwAklQjf4dNNIkW8wzPPdYeYwKjr0GTuGoRdDMiwHYA24gA2wFsIwJsB7CNjoDNA0vReJSz6gjI1hHEFspZdQSk6ghiC+WsOgIeUjmC5nYywKRqsbKAgOOUgATulrB7UFJ5b73eo7KjVI6i/fNHZQVBEARBEITDyk8sk6BRRC6O6gAAAABJRU5ErkJggg==' + +// SESSION +const ICON_PLAY_SESSION = + 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kd8rg1EYxz82i5i24sKFiyVcbZrJ4kbZ0ihJM2W42V77ofbj7X0nya1yu6LEjV8X/AXcKtdKESm55Zq4Yb2ed1NbsnM65/mc73mep+c8ByyRjJLVG72QzRW0cCjgmo8uuJpesMl0MsBQTNHVsZmZKeqOz3saTHvrMXPV9/t3tC4ndAUamoVHFVUrCE8IT60VVJN3hDuUdGxZ+EzYrUmBwnemHq/wq8mpCn+brEXCQbA4hV2pGo7XsJLWssLycnqymVXltx7zJfZEbm5WbLesLnTChAjgYpJxgvilKyOy+/Hgo19O1In3luOnyUusIrvKOhorpEhTwC3qqmRPiE2KnpCZYd3s/9++6slBXyW7PQC2Z8N474WmbSgVDePryDBKx2B9gstcNT5/CMMfoherWs8BODbh/KqqxXfhYgs6H9WYFitLVlmWZBLeTqEtCu030LJY6dnvPScPENmQr7qGvX3oE3/H0g+TSWf6w6FYwwAAAAlwSFlzAAALEwAACxMBAJqcGAAAA8FJREFUeJztmk1sG0UYhp/ZtRuIG/JDSCBCMs2lQW4RokWhK20QICI4gKjIoTcuqEeOvffIFQk4tDeOCJBAArUSICXgGIlDG7EVNGqKm1YktRRRqU0be384pLajrI2zs+P1QuY5eWe+n5nX3856PQMajUaj0Wg0Go1mPyLiBrAcexR4E3gKWAZKxcLCX3HjJoW0AJZjPw58CrwLGLu6LwJni4WFYoyxJYKUAJZjDwHfAy90ME29ELu/ub1yjs6TB5gFfrYc+4Ll2JZkrq4SuQIsxx4H1iTzpa4iZCrg1Rj5UlcRMgIUFORNjRAyApgK8/dcCNlFUDU9EyItAtRJXIi0CVAnMSHSKkCdrguRnACBgbd2BG/tCASR03ZNiIzKYO0Iqjke/HiGYHMEANG/wSOvfIg4sBk11Cwwazm2sh9UiVSAW55uTB4g2BzBu/FSnJA7K+L5OIESESC483Sozf873CbBLFCyHPsd2QBdEkCw8zXDzC+GLMxnFtvaR6QP+MJy7LdlnNWuAYHAXZnBvW6D8MhMzpM5VMQcKZM9+iVeebvszXwJc7gMCNzrFu7KDAQGmUM/kZmcBxFEzWwAH1mO/U2xsBDJWakA3u0pqktzjevqpVMYByts/foeQe1RMhOXAahdeQt3+TX6jn1G9dKppv3SHGJgHXPsd5n0eeA54HIUJ6W3gFs+EW5bfREMD7ws7upx3NXj4GXB8Lb7dtv/GY4RgZmoDkoFMIZWQ23i4G2C+4Oh9uD+EGJgPRxjOByjmygVIJNfRPRvNK5FroI5eKu1cSAwB28hcpWmff8GmXwpzhDmozqoWwN8E+/mMcyJJYxcBQjw747j3x2jb/o8W6XTTVvh02d9jH9vDPPJKxgD6xAI/HujuOVpspPzYNaijqAMLEV1UiZA9beTuNdebtl34OhXGEM3G89+c+wP/MoUtauvtw7mZ8gevhAlvQ98EPUJAApvAe9GeEGrU7s2gznuNJMOl1sugHXaCdmGB8DJYmHh6yhOjbHIOLUiqPW379t6DIS/s4WgmvsX+4G9pr0InJCdPCT0MtQFlL0MKRMgO/Vd+07DwxhZITv18HJ0mazhgR/570Xlf6urE+DZbzvamE8st/y8B7q2n5D2W6DrGylpFSCxHaS0CZD41llaBOjZnqGMAJ7C/D3fLJURwOls0pGeT7yOjAA/xMiXmonXkT0h8jkw19GwSeomXkd2EXwfmOR/cEQm7iGpT9iuhP11SGonD4/JvQFMAFeBX/5Lx+Q0Go1Go9FoNBrN/uQfju9WEOUnnvYAAAAASUVORK5CYII=' + +const ICON_PAUSE_SESSION = + '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' + +const ICON_STOP_SESSION = + 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kd8rg1EYxz82i5i24sKFiyVcbZrJ4kbZ0ihJM2W42V77ofbj7X0nya1yu6LEjV8X/AXcKtdKESm55Zq4Yb2ed1NbsnM65/mc73mep+c8ByyRjJLVG72QzRW0cCjgmo8uuJpesMl0MsBQTNHVsZmZKeqOz3saTHvrMXPV9/t3tC4ndAUamoVHFVUrCE8IT60VVJN3hDuUdGxZ+EzYrUmBwnemHq/wq8mpCn+brEXCQbA4hV2pGo7XsJLWssLycnqymVXltx7zJfZEbm5WbLesLnTChAjgYpJxgvilKyOy+/Hgo19O1In3luOnyUusIrvKOhorpEhTwC3qqmRPiE2KnpCZYd3s/9++6slBXyW7PQC2Z8N474WmbSgVDePryDBKx2B9gstcNT5/CMMfoherWs8BODbh/KqqxXfhYgs6H9WYFitLVlmWZBLeTqEtCu030LJY6dnvPScPENmQr7qGvX3oE3/H0g+TSWf6w6FYwwAAAAlwSFlzAAALEwAACxMBAJqcGAAAA2xJREFUeJztmltIFFEYx38zblnUrqWUS0rYzVAxSiuMgqKHIrYi1y4+RNHFp4KIeqqHIIKehKDoJaEIgq4alUUGUQ/VEmYhIZTd87J2U3d6qNzd6WFzM0ZjzrLjsTy/t/nmO+f8z3/P+XZmOKBQKBQKhUKhGJ5oog1CbncKsBUoB4qAcckWJUgX0ABcAE54DCMi0ljIgJDbnQlcAhaKtBtEAoDfYxjtdhvYNuDXL3+XoTv5XgLAIrsrQRfoeCtDf/IAJUCF3WQRA8rFtUhjnd1EEQOKEhAiC9taRQyQXe1FsK1VxID/EmWAbAGyUQbIFiAbZYBsAbJxyRo4qukEppYAUPIqgG5GpeiQYkBodBrbN1cRTPMC4O0OUnVqG55voUHXImUL3ChcEZ88QDDNy43CFTKkyDGgeeIMaywzV4KSQTLARMPs8+nB11hryfE1Xhsw30kcrQFRTaemqJSaOaW4ohH8DdWsenKFvLYmdt4+yvVCHxCbfH5bEyYaV2evprrIT0RPYc3jGkobahwtkCJfhEzRzh9Omc/e9ZV/xI6c3cXBVQf4mjqWxc/vAHA3dwmebyH21x5i94Yjf+RXnt/DvNcPRYfGYxi25uboCqidtdISqytYzohIDz9cI7mVv+y3kGiYuvzllvxrs3wJGWAXR2tAbsczS2zyl3d8dE+wxD+4JzL581tLfGbQ2kcycdQAX2Mt3u5g/Dqrs4VpHS/QTOtuMjWN6R9ektXZEo95u4P9Fsxk4lgNCOsuLs9ZQ/u4SWR3vkczTd5m5JDV1Yq3q519ZYfjuboZpfLcHlrSs3mTkRNbCRq0js8m4+sn/I+qSQ1/Fxlefg04vnQHF4vX9ntvx+1jzOhopjkz9jww90099TnFnCnZ2G9+jz6CTQ9OO6LTsS1ws8Ba0HqpLi5jwcv78eu89ibq/pJ/qbgsqdr64pgBxij3gPe+jElH71MHNBNCoz0D5neOSU+qtr6o12GnOt5y7+SA91IiYQpbn6IRWwWz3z3BFekhkjL4L6eOPgnKxO6/wLDfAsoA2QJkowyQLUA2ygDZAmQjYkCXYyqSj22tIgY0JCBEFra1ihhwIQEhsrCtVcSAKmJH0IY6AeCE3WTbBngMIwz4Gdom9B6UtH1aNNGjshXEjqL980dlFQqFQqFQKBTDlZ9DNfNgD0hjngAAAABJRU5ErkJggg==' + +// ALL +const ICON_PLAY_ALL = + 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kd8rg1EYxz82i5i24sKFiyVcbZrJ4kbZ0ihJM2W42V77ofbj7X0nya1yu6LEjV8X/AXcKtdKESm55Zq4Yb2ed1NbsnM65/mc73mep+c8ByyRjJLVG72QzRW0cCjgmo8uuJpesMl0MsBQTNHVsZmZKeqOz3saTHvrMXPV9/t3tC4ndAUamoVHFVUrCE8IT60VVJN3hDuUdGxZ+EzYrUmBwnemHq/wq8mpCn+brEXCQbA4hV2pGo7XsJLWssLycnqymVXltx7zJfZEbm5WbLesLnTChAjgYpJxgvilKyOy+/Hgo19O1In3luOnyUusIrvKOhorpEhTwC3qqmRPiE2KnpCZYd3s/9++6slBXyW7PQC2Z8N474WmbSgVDePryDBKx2B9gstcNT5/CMMfoherWs8BODbh/KqqxXfhYgs6H9WYFitLVlmWZBLeTqEtCu030LJY6dnvPScPENmQr7qGvX3oE3/H0g+TSWf6w6FYwwAAAAlwSFlzAAALEwAACxMBAJqcGAAAA8BJREFUeJztms1vG0UYh5/9cD5QkgItadPGCaUSoFoK0AIpWxYkDgEuCIlKiDtHxJUz/wIHOPAPIBUu3IgECCyspCgIEItQAcVOC0lJUFETmg/v7HAwXjsfxt7ZXXtL5jn53Z33fWd+no/dnQGNRqPRaDQajUZzGDHiBnA89xjwIjAG/AzMlQrF5bhxu4WyAI7nHgXeA14BzD23Z4G3S4ViKUbduoKSAI7n3g18CpxrUzTzQuz95zrlfdo3HmAG+Mrx3E8cz3UUc6VK5B7geO5xYEUxX+Z6hEoPeC5Gvsz1CBUBCgnkzYwQKgJYCebvuRCqk2DS9EyIrAhQp+tCZE2AOl0Twk4zeB0p+qj++BrI2qpr9G+Qe+jDTlxngBnHc1NbPrsigLgxTfWXx3dds04uYA4vdhoiNSG6MgT88hP7r1WeVgmV+NBIXYDg9hjixul91/3yFFL0q4ZtFuLROPVLXQBxrfFPm4PrGEgAZHUAsfxU3PAzwJzjuS+rBkhVAClN/MXHQts+cwXzeCW0/cUnk0jTD3zkeO5LKs6pChCsniPYHA5ta3wOe2IhtMVanmB9MolUJvCO47mRX+5SFcCvTIe/rdElzMEVrBPzGNZOo8ySm1S6SWAqqlNqAsjtexC/PRjadv4bAAx7Eyv/U3jdLz8SZzLcyzNRHVITwL9+ESlr4Q3TxxqbD+/Z+Svhb7kzgFi+kFY12pLKg5CU4JfPh7Z57zLB36easm5j5LaQ1QEA/PI09vgXSaT+MqpDKgIEf50luHUstMVaHvH5Gy3Li9U8wcYk5lClZZkOqADfR3VKZQj4lejru+KTYZ0AeLNUKMqojon3AOnfhVg6G9rmkVXMoZsHlg1uniC4PQLUJsPcw5d3rRAdsgW8WioUP1apb+ICiN8dpOgL7f7zH2AeuXpgWf/6s2x/fQkAuTOIWLmAfSrSMJ4F3ioVit+q1jfxIeCXG2995sgaxsjBjQewxuYxcttNvtMty+5hFrhYKhSfj9N4SLgHBOv3I/5szPb2xHcY//FsZlhb2BM/UP21tmKIPyYINvKYQ9dauST+OpyoAHLzKLkzjUdda7x9Pe3Tu5c/uXkf7BfgzvggYo0uYI0utC/YhDm8SN9Uyw8jqW+kdOWLkAJd20HKmgBd3zrLigA92zNUEUAkmL/nm6UqAngJ5O15w+uoCPBZjHyZaXgd1RMil4FLEVwy1/A6qpPg68AD/A+OyMQ9JPUutZ5wuA5JNfPvMbkXgJPAVWD+Tjomp9FoNBqNRqPRaA4n/wCClVL5E8+zsQAAAABJRU5ErkJggg==' + +const ICON_PAUSE_ALL = + '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' + +const ICON_STOP_ALL = + 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABgWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kd8rg1EYxz82i5i24sKFiyVcbZrJ4kbZ0ihJM2W42V77ofbj7X0nya1yu6LEjV8X/AXcKtdKESm55Zq4Yb2ed1NbsnM65/mc73mep+c8ByyRjJLVG72QzRW0cCjgmo8uuJpesMl0MsBQTNHVsZmZKeqOz3saTHvrMXPV9/t3tC4ndAUamoVHFVUrCE8IT60VVJN3hDuUdGxZ+EzYrUmBwnemHq/wq8mpCn+brEXCQbA4hV2pGo7XsJLWssLycnqymVXltx7zJfZEbm5WbLesLnTChAjgYpJxgvilKyOy+/Hgo19O1In3luOnyUusIrvKOhorpEhTwC3qqmRPiE2KnpCZYd3s/9++6slBXyW7PQC2Z8N474WmbSgVDePryDBKx2B9gstcNT5/CMMfoherWs8BODbh/KqqxXfhYgs6H9WYFitLVlmWZBLeTqEtCu030LJY6dnvPScPENmQr7qGvX3oE3/H0g+TSWf6w6FYwwAAAAlwSFlzAAALEwAACxMBAJqcGAAAA0JJREFUeJztml1IVEEYhh9/ckNxM7FMS400zUhcS9J+zSwosTJB8K4f8r6LiC677L7LoqvoRlLsn0hDTDTJLYswTMkykjUt21NZa7VdWCOh0pnFM7PlPFfzzfm+nfe8e87M7jBgMBgMBoPBYJifRMgW+OPjo4CjQA2wHkiYa1GSjAFeoA4457as7zLFUgb44+OTgcvAFpk6hXQAVW7LGrJbYNuAX998C+F787/pALbafRIiJT74KOF/8wDFQK3dZBkDauS1aKPabqKMAetDEKIL21plDNA928tgW6uMAf8lxgDdAnRjDNAtQDfz3oBoHYNOuNxcLD9F8Ncv8cXjHzh464wOKXoM8Hr2cyF72x99RT3NpL7sVK5Fyytwa03ptL6m/AoNSjQYMJKax51l2dP6GzKLCCxcpFqOegNa8veJ9srPY0QGgwC8jYmly1OpWo5aA35ELaAha7OIa57dpXS4T8TXc3eqlAMoNuBpXgUvY6ce802Pb7K7t1XELUtXMZReqFKSWgNury0T7Z2+PhJ9PRR2X8X9LSD6mz37Zip1DGUGWIkrubF8nYh3Pb8HgOvTCBWvHon++lXFTLjcqmSpM6DNc4BAZBQAcd8nKOy+Kq6V9jSJ9rArlq4CdZOhEgOCEZE05mwXceHoIL6UXAZWlzCwugRXYJykwLi4rnIylNkVDoY6SH9OGYcrT0vV1F06zrLBrlCHxG1Ztu5NyRPQlLdHukbVZOj4f4EvcUtozJjao/SMDZH+cWTG3CeJabyIndzOq88sptrlZsFXv6P6HDegs+AA/ugYEZ9oOktGX+uMue2bDnFy+zEAfK44vJ79FN2/6Kg+x1+BGzk7RDvP7yO9v23W3A2PrpAw8XWqNrds1ty5wlED3mRspC0pQ8Tlfe1EBH/Mmh8z/p7KgQcibk7OwreiwEmJzr4C7xJSONJ7T8Rbuq/9tWavt4GI4NSCM5qYRvLrh47oA0XLoA7CahkMZ4wBugXoxhigW4BujAESuWOOqZh7bGuVMcAbghBd2NYqY0BdCEJ0YVurjAHnmTyCFu50AOfsJts2wG1Z34AqwtuE3wclbZ8WDfWobC2TR9H++aOyBoPBYDAYDIb5yk/uoc1SY6poZgAAAABJRU5ErkJggg==' diff --git a/test.js b/test.js new file mode 100644 index 0000000..169e53d --- /dev/null +++ b/test.js @@ -0,0 +1,1226 @@ +const EventMaster = require('barco-eventmaster') +// const upgradeScripts = require('./upgrades') +const _ = require('lodash') +const { InstanceBase, InstanceStatus, Regex, combineRgb, runEntrypoint } = require('@companion-module/base') + +class BarcoInstance extends InstanceBase { + /** + * Create an instance of the module + * + * @param {EventEmitter} system - the brains of the operation + * @param {string} id - the instance ID + * @param {Object} config - saved user configuration parameters + * @since 1.0.0 + */ + constructor(internal) { + super(internal) + } + + GetUpgradeScripts() { + return [upgradeScripts] + } + + async init(config) { + this.config = config + this.eventmasterData = { + presets: { 0: { id: 0, Name: 'no presets loaded yet' } }, + sources: { 0: { id: 0, Name: 'no sources loaded yet', SrcType: 0 } }, + cues: { 0: { id: 0, Name: 'no cues loaded yet' } }, + auxDestinations: { 0: { id: 0, Name: 'no auxes loaded yet' } }, + screenDestinations: { 0: { id: 0, Name: 'no destinations loaded yet' } }, + } + this.CHOICES_FREEZE = [ + { label: 'Freeze', id: '1' }, + { label: 'Unfreeze', id: '0' }, + ] + this.CHOICES_TESTPATTERN = [ + { label: 'Off', id: '0' }, + { label: 'Horizontal Ramp', id: '1' }, + { label: 'Vertical Ramp', id: '2' }, + { label: '100% Color Bars', id: '3' }, + { label: '16x16 grid', id: '4' }, + { label: '32x32 grid', id: '5' }, + { label: 'Burst', id: '6' }, + { label: '75% Color Bars', id: '7' }, + { label: '50% Gray', id: '8' }, + { label: 'Horizontal steps', id: '9' }, + { label: 'Vertical steps', id: '10' }, + { label: 'White', id: '11' }, + { label: 'Black', id: '12' }, + { label: 'SMPTE Bars', id: '13' }, + { label: 'H Alignment', id: '14' }, + { label: 'V Alignment', id: '15' }, + { label: 'HV Alignment', id: '16' }, + { label: 'Circle Alignment', id: '17' }, + { label: 'Red', id: '18' }, + { label: 'Green', id: '19' }, + { label: 'Blue', id: '20' }, + ] + + this.updateStatus(InstanceStatus.UnknownWarning) + this.connection() + + this.log(`debug`, 'creating eventmaster') + } + + async configUpdated(config) { + this.config = config + this.getAllDataFromEventmaster().then(() => { + this.setActionDefinitions(this.getActions()) + this.setPresetDefinitions(this.getPresets()) + }) + } + + /** + * Connection + */ + connection() { + if (this.eventmaster === undefined && this.config !== undefined) { + this.eventmaster = new EventMaster(this.config.host) + this.updateStatus(InstanceStatus.Ok) + this.getAllDataFromEventmaster().then(() => { + this.setActionDefinitions(this.getActions()) + this.setPresetDefinitions(this.getPresets()) + }) + if (this.retry_interval) clearInterval(this.retry_interval) + } else { + this.retry_interval = setInterval(() => { + if (this.eventmaster === undefined && this.config !== undefined) { + this.eventmaster = new EventMaster(this.config.host) + this.updateStatus(InstanceStatus.Ok) + this.getAllDataFromEventmaster().then(() => { + this.setActionDefinitions(this.getActions()) + this.setPresetDefinitions(this.getPresets()) + }) + clearInterval(this.retry_interval) + } + }, 15000) + } + } + + /** + * Return config fields for web config + * @returns config fields for web config + */ + getConfigFields() { + return [ + { + type: 'static-text', + id: 'info', + width: 12, + label: 'Information', + value: + 'This module uses the official EventMaster JSON API. If the status is OK, it ONLY means that the IP configured answers on icmp ping. The module will update presets and actions every 15 seconds ', + }, + { + type: 'textinput', + id: 'host', + label: 'Target IP', + width: 6, + default: '192.168.0.175', + regex: Regex.IP, + }, + { + type: 'dropdown', + id: 'usermode', + label: 'Multiuser Mode', + width: 6, + default: 'userSingle', + choices: [ + { id: 'userSingle', label: 'Single User' }, + { id: 'operator', label: 'Multiuser Normal Operator' }, + { id: 'super_user', label: 'Multiuser Super Operator ' }, + ], + }, + { + type: 'textinput', + id: 'superPassword', + label: 'Multiuser Super Operator Password', + width: 6, + default: '', + }, + { + type: 'textinput', + id: 'operatorId', + label: 'Multiuser Operator Id (number)', + width: 6, + default: '0', + }, + ] + } + + /** + * When module gets deleted + */ + async destroy() { + if (this.retry_interval) clearInterval(this.retry_interval) + delete this.eventmaster + this.log(`debug`, 'destroy') + } + + /** + * Converting a data array into an object + * @param {*} array + * @param {*} key + * @returns Object + */ + convertArrayToObject = (array, key) => { + const initialValue = {} + return array.reduce((obj, item) => { + return { + ...obj, + [item[key]]: item, + } + }, initialValue) + } + + /** + * Load all needed data from Eventmaster + */ + // Presets + async getPresetsFromEventmaster() { + if (this.eventmaster !== undefined) { + // List of presets + const Presets = new Promise((resolve, reject) => { + this.eventmaster + .listPresets(-1, -1, (obj, res) => { + if (res !== undefined) { + this.eventmasterData.presets = this.convertArrayToObject(res, 'id') + } + resolve() + }) + .on('error', (err) => { + reject(err) + }) + }) + await Presets.catch((err) => { + this.log('error', 'EventMaster Presets Error: ' + err) + }) + } + } + // Sources + async getSourcesFromEventmaster() { + if (this.eventmaster !== undefined) { + // List of sources + const Sources = new Promise((resolve, reject) => { + this.eventmaster + .listSources(0, (obj, res) => { + if (res !== undefined) { + this.eventmasterData.sources = this.convertArrayToObject(res, 'id') + } + resolve() + }) + .on('error', (err) => { + reject(err) + }) + }) + await Sources.catch((err) => { + this.log('error', 'EventMaster Sources Error: ' + err) + }) + } + } + // Cues + async getCuesFromEventmaster() { + if (this.eventmaster !== undefined) { + // List of Cues + const Cues = new Promise((resolve, reject) => { + this.eventmaster + .listCues(0, (obj, res) => { + if (res !== undefined) { + this.eventmasterData.cues = this.convertArrayToObject(res, 'id') + } + resolve() + }) + .on('error', (err) => { + reject(err) + }) + }) + await Cues.catch((err) => { + this.log('error', 'EventMaster Cues Error: ' + err) + }) + } + } + // Destination + async getDestinationsFromEventmaster() { + if (this.eventmaster !== undefined) { + // List of destinations + const Destinations = new Promise((resolve, reject) => { + this.eventmaster + .listDestinations(0, (obj, res) => { + if (res !== undefined) { + this.eventmasterData.screenDestinations = this.convertArrayToObject(res.ScreenDestination, 'id') + this.eventmasterData.auxes = this.convertArrayToObject(res.AuxDestination, 'id') + } + resolve() + }) + .on('error', (err) => { + reject(err) + }) + }) + + await Destinations.catch((err) => { + this.log('error', 'EventMaster Destinations Error: ' + err) + }) + } + } + async getAllDataFromEventmaster() { + await this.getPresetsFromEventmaster().catch((err) => { + this.log('error', err) + }) + await this.getSourcesFromEventmaster().catch((err) => { + this.log('error', err) + }) + await this.getCuesFromEventmaster().catch((err) => { + this.log('error', err) + }) + await this.getDestinationsFromEventmaster().catch((err) => { + this.log('error', err) + }) + } + /** + * Get all the actions + * @returns actions + */ + getActions() { + // Needed for user level stuff + const user = this.config.usermode + const password = this.config.superPassword + const id = this.config.operatorId + // this.log('debug'`${user}, ${password}, ${id}`) + const actions = {} // main array + + // Load all preset data + let CHOICES_PRESETS = [] + Object.keys(this.eventmasterData.presets).forEach((key) => { + // console.log(key, this.eventmasterData.presets[key]) + CHOICES_PRESETS.push({ + label: this.eventmasterData.presets[key].presetSno + ' ' + _.unescape(this.eventmasterData.presets[key].Name), + id: this.eventmasterData.presets[key].id, + sort: this.eventmasterData.presets[key].presetSno, + }) + }) + let CHOICES_SOURCES = [] + Object.keys(this.eventmasterData.sources).forEach((key) => { + // console.log(key, this.eventmasterData.presets[key]) + CHOICES_SOURCES.push({ + label: this.eventmasterData.sources[key].Name, + id: this.eventmasterData.sources[key].id, + InputCfgIndex: this.eventmasterData.sources[key].InputCfgIndex, + SrcType: this.eventmasterData.sources[key].SrcType, + StillIndex: this.eventmasterData.sources[key].StillIndex, + }) + }) + let CHOICES_CUES = [] + Object.keys(this.eventmasterData.cues).forEach((key) => { + // console.log(key, this.eventmasterData.presets[key]) + CHOICES_CUES.push({ + label: this.eventmasterData.cues[key].Name, + id: this.eventmasterData.cues[key].id, + }) + }) + + let CHOICES_SCREENDESTINATIONS = [] + Object.keys(this.eventmasterData.screenDestinations).forEach((key) => { + // console.log(key, this.eventmasterData.presets[key]) + CHOICES_SCREENDESTINATIONS.push({ + label: this.eventmasterData.screenDestinations[key].Name, + id: this.eventmasterData.screenDestinations[key].id, + }) + }) + + let CHOICES_AUXDESTINATIONS = [] + Object.keys(this.eventmasterData.auxDestinations).forEach((key) => { + // console.log(key, this.eventmasterData.presets[key]) + CHOICES_AUXDESTINATIONS.push({ + label: this.eventmasterData.auxDestinations[key].Name, + id: this.eventmasterData.auxDestinations[key].id, + }) + }) + + actions['preset_in_pvw'] = { + name: 'Preset in PVW', + options: [ + { + type: 'dropdown', + label: 'Preset', + id: 'preset_in_pvw', + minChoicesForSearch: 5, + choices: CHOICES_PRESETS.sort((a, b) => a.sort - b.sort), + default: '0', + }, + ], + callback: (action) => { + this.log('info', 'Recall to PVW id:' + action.options.preset_in_pvw) + + if (this.eventmaster !== undefined) { + if (user == 'operator') { + this.eventmaster + .activatePresetById(parseInt(action.options.preset_in_pvw), 0, user, id, (obj, res) => { + this.log('debug', 'recall preset pvw response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } else if (user == 'super_user') { + this.eventmaster + .activatePresetById(parseInt(action.options.preset_in_pvw), 0, user, password, (obj, res) => { + this.log('debug', 'recall preset pvw response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } else { + this.eventmaster + .activatePresetById(parseInt(action.options.preset_in_pvw), 0, user, (obj, res) => { + this.log('debug', 'recall preset pvw response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + } + }, + } + actions['preset_in_pgm'] = { + name: 'Preset in PGM', + options: [ + { + type: 'dropdown', + label: 'Preset', + id: 'preset_in_pgm', + minChoicesForSearch: 5, + choices: CHOICES_PRESETS.sort((a, b) => a.sort - b.sort), + default: '0', + }, + ], + callback: (action) => { + this.log('info', 'Recall to PGM id:' + action.options.preset_in_pgm) + + if (this.eventmaster !== undefined) { + if (user == 'operator') { + this.eventmaster + .activatePresetById(parseInt(action.options.preset_in_pgm), 1, user, id, (obj, res) => { + this.log('debug', 'recall preset pgm response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } else if (user == 'super_user') { + this.eventmaster + .activatePresetById(parseInt(action.options.preset_in_pgm), 1, user, password, (obj, res) => { + this.log('debug', 'recall preset pgm response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } else { + this.eventmaster + .activatePresetById(parseInt(action.options.preset_in_pgm), 1, user, null, (obj, res) => { + this.log('debug', 'recall preset pgm response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + } + }, + } + + actions['trans_all'] = { + name: 'Take/Trans Active', + options: [], + callback: () => { + this.log('info', 'Trans/Take All') + if (this.eventmaster !== undefined) { + if (user == 'operator') { + this.eventmaster + .allTrans(user, id, (obj, res) => { + this.log('debug', 'trans all response: ' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } else if (user == 'super_user') { + this.eventmaster + .allTrans(user, password, (obj, res) => { + this.log('debug', 'trans all response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } else { + this.eventmaster + .allTrans(user, (obj, res) => { + this.log('debug', 'trans all response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + } + }, + } + actions['cut_all'] = { + name: 'Cut Active', + options: [], + callback: () => { + this.log('info', 'Cut All') + + if (this.eventmaster !== undefined) { + if (user == 'operator') { + this.eventmaster + .cut(user, id, (obj, res) => { + this.log('debug', 'cut all response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } else if (user == 'super_user') { + this.eventmaster + .cut(user, password, (obj, res) => { + this.log('debug', 'cut all response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } else { + this.eventmaster + .cut(user, (obj, res) => { + this.log('debug', 'cut all response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + } + }, + } + actions['recall_next'] = { + name: 'Recall Next Preset', + options: [], + callback: () => { + this.log('info', 'recall_next') + + if (this.eventmaster !== undefined) { + this.eventmaster + .recallNextPreset((obj, res) => { + this.log('debug', 'recall next response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + }, + } + actions['frzSource'] = { + name: 'Freeze/Unfreeze Source', + options: [ + { + type: 'dropdown', + label: 'freeze/unfreeze', + id: 'frzType', + choices: this.CHOICES_FREEZE, + default: '1', + }, + { + type: 'dropdown', + label: 'Source', + id: 'frzSource', + minChoicesForSearch: 5, + choices: CHOICES_SOURCES, + default: '0', + }, + ], + callback: (action) => { + this.log('info', '(un)freeze') + + if (this.eventmaster !== undefined) { + this.eventmaster + .freezeDestSource( + 0, + parseInt(action.options.frzSource), + 0, + parseInt(action.options.frzType), + (obj, res) => { + this.log('debug', '(un)freeze all response' + res) + } + ) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + }, + } + actions['frzScreenDest'] = { + name: 'Freeze/Unfreeze Screen Destination', + options: [ + { + type: 'dropdown', + label: 'freeze/unfreeze', + id: 'frzType', + choices: this.CHOICES_FREEZE, + default: '1', + }, + { + type: 'dropdown', + label: 'Screen Destination', + id: 'frzDest', + choices: CHOICES_SCREENDESTINATIONS, + default: '0', + }, + ], + callback: (action) => { + this.log('info', '(un)freeze Screen Destination') + + if (this.eventmaster !== undefined) { + this.eventmaster + .freezeDestSource(2, parseInt(action.options.frzDest), 0, parseInt(action.options.frzType), (obj, res) => { + this.log('debug', 'freeze all response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + }, + } + actions['frzAuxDest'] = { + name: 'Freeze/Unfreeze Aux Destination', + options: [ + { + type: 'dropdown', + label: 'freeze/unfreeze', + id: 'frzType', + choices: this.CHOICES_FREEZE, + default: '1', + }, + { + type: 'dropdown', + label: 'Aux Destination', + id: 'frzDest', + choices: CHOICES_AUXDESTINATIONS, + default: '0', + }, + ], + callback: (action) => { + this.log('info', '(un)freeze Aux Destination') + + if (this.eventmaster !== undefined) { + this.eventmaster + .freezeDestSource(3, parseInt(action.options.frzDest), 0, parseInt(action.options.frzType), (obj, res) => { + this.log('debug', 'freeze all response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + }, + } + + actions['play_cue'] = { + name: 'Play cue', + options: [ + { + type: 'dropdown', + label: 'cue', + id: 'cueNumber', + minChoicesForSearch: 5, + choices: CHOICES_CUES, + default: '0', + }, + ], + callback: (action) => { + this.log('info', 'play_cue:' + action.options.cueNumber) + + if (this.eventmaster !== undefined) { + this.eventmaster + .activateCueById(parseInt(action.options.cueNumber), 0, (obj, res) => { + this.log('debug', 'activateCue response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + }, + } + actions['stop_cue'] = { + name: 'Stop cue', + options: [ + { + type: 'dropdown', + label: 'cue', + id: 'cueNumber', + minChoicesForSearch: 5, + choices: CHOICES_CUES, + default: '0', + }, + ], + callback: (action) => { + this.log('info', 'stop_cue:' + action.options.cueNumber) + + if (this.eventmaster !== undefined) { + this.eventmaster + .activateCueById(parseInt(action.options.cueNumber), 2, (obj, res) => { + this.log('debug', 'activateCue response' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + }, + } + actions['change_aux'] = { + name: 'Change aux on destination', + options: [ + { + type: 'dropdown', + label: 'Source', + id: 'source', + minChoicesForSearch: 5, + choices: CHOICES_SOURCES, + default: '0', + }, + { + type: 'dropdown', + label: 'Destination', + id: 'auxDestination', + choices: CHOICES_AUXDESTINATIONS, + default: '0', + }, + ], + callback: (action) => { + this.log('info', `change_aux, source: ${action.options.source} destination ${action.options.auxDestination}`) + + if (this.eventmaster !== undefined) { + this.eventmaster + .changeAuxContent( + parseInt(action.options.auxDestination), + -1, + parseInt(action.options.source), + (obj, res) => { + this.log('debug', 'changeAuxContent response' + res) + } + ) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + }, + } + actions['armUnarmDestination'] = { + name: 'arm screen destinations', + options: [ + { + type: 'dropdown', + label: 'arm/un-arm', + id: 'armUnarm', + choices: [ + { label: 'arm', id: 1 }, + { label: 'disarm', id: 0 }, + ], + default: '1', + }, + { + type: 'dropdown', + label: 'destination', + id: 'screenDestinations', + choices: CHOICES_SCREENDESTINATIONS, + default: '0', + }, + ], + callback: (action) => { + this.log( + 'info', + `armUnarmDestination, arm/unarm ${action.options.armUnarm}, destination ${action.options.screenDestinations}` + ) + if (this.eventmaster !== undefined) { + this.eventmaster + .armUnarmDestination( + parseInt(action.options.armUnarm), + { id: action.options.screenDestinations }, + null, + (obj, res) => { + this.log('debug', 'armUnarmDestination response' + res) + } + ) + .on('error', (err) => { + this.log('error', 'Eventmaster Error: ' + err) + }) + } + }, + } + actions['armUnarmAuxDestination'] = { + name: 'arm aux destinations', + options: [ + { + type: 'dropdown', + label: 'arm/un-arm', + id: 'armUnarm', + choices: [ + { label: 'arm', id: 1 }, + { label: 'disarm', id: 0 }, + ], + default: '1', + }, + { + type: 'dropdown', + label: 'destination', + id: 'auxDestinations', + choices: CHOICES_AUXDESTINATIONS, + default: '0', + }, + ], + callback: (action) => { + this.log( + 'info', + `armUnarmAuxDestination, arm/unarm ${action.options.armUnarm}, destination ${action.options.auxDestinations}` + ) + if (this.eventmaster !== undefined) { + this.eventmaster + .armUnarmDestination( + parseInt(action.options.armUnarm), + null, + { id: action.options.auxDestinations }, + (obj, res) => { + this.log('debug', 'armUnarmAuxDestination response' + res) + } + ) + .on('error', (err) => { + this.log('error', 'Eventmaster Error: ' + err) + }) + } + }, + } + actions['subscribe'] = { + label: 'subscribe to SourceChanged', + options: [ + { + type: 'textinput', + label: 'IP to send JSON to', + id: 'ip', + regex: this.REGEX_IP, + }, + { + type: 'textinput', + label: 'Portnumber', + id: 'port', + }, + ], + callback: (action) => { + this.log('info', `subscribe to localhost`) + + if (this.eventmaster !== undefined) { + this.eventmaster + .subscribe( + action.options.ip, + action.options.port, + ['SourceChanged', 'BGSourceChanged', 'ScreenDestChanged', 'AUXDestChanged'], + (obj, res) => { + this.log('debug', 'subscribe response' + res) + } + ) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + }, + } + actions['unsubscribe'] = { + label: 'unsubscribe to SourceChanged', + options: [ + { + type: 'textinput', + label: 'IP to send JSON to', + id: 'ip', + regex: this.REGEX_IP, + }, + { + type: 'textinput', + label: 'Portnumber', + id: 'port', + }, + ], + callback: (action) => { + this.log('info', `unsubscribe`) + + if (this.eventmaster !== undefined) { + this.eventmaster + .unsubscribe( + action.options.ip, + action.options.port, + ['SourceChanged', 'BGSourceChanged', 'ScreenDestChanged', 'AUXDestChanged'], + (obj, res) => { + this.log('debug', 'unsubscribe response' + res) + } + ) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + }, + } + actions['testpattern_on_AUX'] = { + name: 'Set testpattern for AUX', + options: [ + { + type: 'dropdown', + label: 'aux destination', + id: 'auxDestination', + choices: CHOICES_AUXDESTINATIONS, + }, + { + type: 'dropdown', + label: 'Type number', + id: 'testPattern', + choices: this.CHOICES_TESTPATTERN, + }, + ], + callback: (action) => { + this.log( + 'info', + `change_testAuxPattern, id: ${action.options.testPattern} destination ${action.options.auxDestination}` + ) + + if (this.eventmaster !== undefined) { + this.eventmaster + .changeAuxContentTestPattern( + parseInt(action.options.auxDestination), + parseInt(action.options.testPattern), + (obj, res) => { + debug('changeAuxContentTestPattern response' + res) + } + ) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + }, + } + actions['testpattern_on_SCREEN'] = { + name: 'Set testpattern for screen destinations', + options: [ + { + type: 'dropdown', + label: 'destination', + id: 'screenDestination', + choices: CHOICES_SCREENDESTINATIONS, + }, + { + type: 'dropdown', + label: 'Type number', + id: 'testPattern', + choices: this.CHOICES_TESTPATTERN, + }, + ], + callback: (action) => { + this.log( + 'info', + `change_testPattern, id: ${action.options.testPattern} destination ${action.options.screenDestination}` + ) + + if (this.eventmaster !== undefined) { + this.eventmaster + .changeContentTestPattern( + parseInt(action.options.screenDestination), + parseInt(action.options.testPattern), + (obj, res) => { + debug('changeAuxContentTestPattern response' + res) + } + ) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + }, + } + actions['activateSourceMainBackup'] = { + name: 'Configure Main/Backup', + options: [ + { + type: 'dropdown', + label: 'Source', + id: 'source', + choices: CHOICES_SOURCES, + default: '0', + }, + { + type: 'dropdown', + label: 'Backup 1', + id: 'backup1', + choices: CHOICES_SOURCES, + default: '0', + }, + { + type: 'dropdown', + label: 'Backup 2', + id: 'backup2', + choices: CHOICES_SOURCES, + default: '0', + }, + { + type: 'dropdown', + label: 'Backup 3', + id: 'backup3', + choices: CHOICES_SOURCES, + default: '0', + }, + { + type: 'dropdown', + label: 'Backup state', + id: 'BackUpState', + choices: [ + { id: '-1', label: 'Primary' }, + { id: '0', label: 'Backup 1' }, + { id: '1', label: 'Backup 2' }, + { id: '2', label: 'Backup 3' }, + ], + default: '-1', + }, + ], + callback: (action) => { + let source = parseInt(action.options.source) + let backup1 = parseInt(action.options.backup1) + let backup2 = parseInt(action.options.backup2) + let backup3 = parseInt(action.options.backup3) + let BackUpState = parseInt(action.options.BackUpState) + let backup1_ScrType = 0 + let backup2_ScrType = 0 + let backup3_ScrType = 0 + let source_InputCfgIndex = 0 + let backup1_InputCfgIndex = 0 + let backup2_InputCfgIndex = 0 + let backup3_InputCfgIndex = 0 + console.log(CHOICES_SOURCES) + CHOICES_SOURCES.forEach((iterator) => { + if (source === iterator.id) { + source_InputCfgIndex = iterator.InputCfgIndex + } + if (backup1 === iterator.id) { + backup1_ScrType = iterator.SrcType + if (backup1_ScrType === 1) { + backup1_InputCfgIndex = iterator.StillIndex + } else { + backup1_InputCfgIndex = iterator.InputCfgIndex + } + } + if (backup2 === iterator.id) { + backup2_ScrType = iterator.SrcType + if (backup2_ScrType === 1) { + backup2_InputCfgIndex = iterator.StillIndex + } else { + backup2_InputCfgIndex = iterator.InputCfgIndex + } + } + if (backup3 === iterator.id) { + backup3_ScrType = iterator.SrcType + if (backup3_ScrType === 1) { + backup3_InputCfgIndex = iterator.StillIndex + } else { + backup3_InputCfgIndex = iterator.InputCfgIndex + } + } + }) + if (this.eventmaster !== undefined) { + this.log( + 'debug', + `activateSourceMainBackup: Source:${source_InputCfgIndex}, BU1Type:${backup1_ScrType}, BU1${backup1_InputCfgIndex} BU2Type:${backup2_ScrType}, BU2${backup2_InputCfgIndex}, BU3Type:${backup3_ScrType}, BU3${backup3_InputCfgIndex}, State:${BackUpState}` + ) + this.eventmaster + .activateSourceMainBackup( + source, + backup1_ScrType, + backup1, + backup2_ScrType, + backup2, + backup3_ScrType, + backup3, + BackUpState, + (obj, res) => { + debug('activateSourceMainBackup response' + res) + } + ) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + }, + } + actions['destinationGroup'] = { + name: 'Activate Destination Group (Count from 0)', + options: [ + { + type: 'textinput', + label: 'id of destination', + id: 'id', + default: '0', + }, + ], + callback: (action) => { + this.log('info', `destinationGroup: ${action.options.id}`) + if (this.eventmaster !== undefined) { + this.eventmaster + .activateDestGroup(parseInt(action.options.id), (obj, res) => { + this.log('debug', 'activateDestGroup response ' + res) + }) + .on('error', (err) => { + this.log('error', 'EventMaster Error: ' + err) + }) + } + }, + } + return actions + } + /** + * Get all the presets + * @returns presets + */ + getPresets() { + const presets = {} // main array + + presets['Take'] = { + type: 'button', + category: 'Basics', + style: { + text: 'Take', + size: '14', + color: combineRgb(0, 0, 0), + bgcolor: combineRgb(255, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: 'trans_all', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + presets['Cut'] = { + type: 'button', + category: 'Basics', + style: { + text: 'Cut', + size: '14', + color: combineRgb(0, 0, 0), + bgcolor: combineRgb(255, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: 'cut_all', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + presets['Recall_next'] = { + type: 'button', + category: 'Basics', + style: { + text: 'Recall next', + size: '14', + color: combineRgb(0, 0, 0), + bgcolor: combineRgb(235, 0, 0), + }, + steps: [ + { + down: [ + { + actionId: 'recall_next', + }, + ], + up: [], + }, + ], + feedbacks: [], + } + //Load presets from eventmaster into presets from companion + Object.keys(this.eventmasterData.presets).forEach((key) => { + presets[`PVW_${this.eventmasterData.presets[key].id}`] = { + type: 'button', + category: 'Presets to PVW', + style: { + text: this.eventmasterData.presets[key].presetSno + ' ' + _.unescape(this.eventmasterData.presets[key].Name), + size: '14', + color: combineRgb(0, 0, 0), + bgcolor: combineRgb(235, 235, 235), + }, + steps: [ + { + down: [ + { + actionId: 'preset_in_pvw', + options: { + preset_in_pvw: this.eventmasterData.presets[key].id, + }, + }, + ], + up: [], + }, + ], + feedbacks: [], + } + presets[`PGM_${this.eventmasterData.presets[key].id}`] = { + type: 'button', + category: 'Presets to PGM', + style: { + text: this.eventmasterData.presets[key].presetSno + ' ' + _.unescape(this.eventmasterData.presets[key].Name), + size: '14', + color: combineRgb(255, 0, 0), + bgcolor: combineRgb(235, 235, 235), + }, + steps: [ + { + down: [ + { + actionId: 'preset_in_pgm', + options: { + preset_in_pgm: this.eventmasterData.presets[key].id, + }, + }, + ], + up: [], + }, + ], + feedbacks: [], + } + }) + + Object.keys(this.eventmasterData.cues).forEach((key) => { + this.log('debug', `Cue_${this.eventmasterData.cues[key].Name}_${key}`) + presets[`Cue_${this.eventmasterData.cues[key].id}`] = { + type: 'button', + category: 'Cues', + style: { + text: this.eventmasterData.cues[key].Name, + size: '14', + color: combineRgb(0, 0, 0), + bgcolor: combineRgb(66, 244, 226), + }, + steps: [ + { + down: [ + { + actionId: 'play_cue', + options: { + cueNumber: this.eventmasterData.cues[key].id, + }, + }, + ], + up: [], + }, + ], + feedbacks: [], + } + }) + + return presets + } +} + +runEntrypoint(BarcoInstance, []) \ No newline at end of file diff --git a/upgrades.js b/upgrades.js new file mode 100644 index 0000000..2445f97 --- /dev/null +++ b/upgrades.js @@ -0,0 +1,13 @@ +module.exports = [ + /* + * Place your upgrade scripts here + * Remember that once it has been added it cannot be removed! + */ + function (context, props) { + return { + updatedConfig: null, + updatedActions: [], + updatedFeedbacks: [], + } + }, +] diff --git a/variables.js b/variables.js new file mode 100644 index 0000000..2497d0d --- /dev/null +++ b/variables.js @@ -0,0 +1,37 @@ +module.exports = async function (self) { + self.setVariableDefinitions([ + { variableId: 'project_name', name: "Project Name"}, + + { variableId: 'speaker_play_status', name: "Speaker Play Status"}, + { variableId: 'speaker_current', name: "Speaker Current Preset"}, + { variableId: 'speaker_timer', name: "Speaker Timer H:M:S"}, + { variableId: 'speaker_timer_ms', name: "Speaker Timer M:S"}, + { variableId: 'speaker_timer_h', name: "Speaker Timer hour"}, + { variableId: 'speaker_timer_m', name: "Speaker Timer minute"}, + { variableId: 'speaker_timer_s', name: "Speaker Timer second"}, + + { variableId: 'session_play_status', name: "Session Play Status"}, + { variableId: 'session_current', name: "Session Current Preset"}, + { variableId: 'session_timer', name: 'Session Timer H:M:S' }, + { variableId: 'session_timer_ms', name: "Session Timer M:S"}, + { variableId: 'session_timer_h', name: "Session Timer hour"}, + { variableId: 'session_timer_m', name: "Session Timer minute"}, + { variableId: 'session_timer_s', name: "Session Timer second"}, + + { variableId: 'all_play_status', name: "All Play Status"}, + + { variableId: 'external_timer', name: "External Timer H:M:S"}, + { variableId: 'external_timer_ms', name: "External Timer M:S"}, + { variableId: 'external_timer_h', name: "External Timer hour"}, + { variableId: 'external_timer_m', name: "External Timer minute"}, + { variableId: 'external_timer_s', name: "External Timer second"}, + + { variableId: 'blackout', name: "Blackout"}, + + { variableId: 'message_show', name: "Message Show/Hide"}, + + { variableId: 'switch_timer_clock', name: "Switch Timer Clock"}, + + { variableId: 'ndi_start', name: "NDI Start/Stop"}, + ]) +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..b05c620 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,1958 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@companion-module/base@npm:~1.11.3": + version: 1.11.3 + resolution: "@companion-module/base@npm:1.11.3" + dependencies: + ajv: "npm:^8.17.1" + colord: "npm:^2.9.3" + ejson: "npm:^2.2.3" + eventemitter3: "npm:^5.0.1" + mimic-fn: "npm:^3.1.0" + nanoid: "npm:^3.3.8" + p-queue: "npm:^6.6.2" + p-timeout: "npm:^4.1.0" + tslib: "npm:^2.8.1" + checksum: 10c0/19acbc544de97ed8f02abf03e1d657085e51f0e92363456a84bdc1975723ba1bdfc0e943ff17444cb4e6a2b588abb794a9c5b48efb4d784be32784362e7c4efd + languageName: node + linkType: hard + +"@companion-module/tools@npm:^2.3.0": + version: 2.3.0 + resolution: "@companion-module/tools@npm:2.3.0" + dependencies: + "@eslint/js": "npm:^9.19.0" + eslint-config-prettier: "npm:^10.0.1" + eslint-plugin-n: "npm:^17.15.1" + eslint-plugin-prettier: "npm:^5.2.3" + find-up: "npm:^7.0.0" + parse-author: "npm:^2.0.0" + semver: "npm:^7.7.1" + tar: "npm:^7.4.3" + webpack: "npm:^5.97.1" + webpack-cli: "npm:^6.0.1" + zx: "npm:^8.3.2" + peerDependencies: + "@companion-module/base": ^1.11.0 + eslint: ^9.0.0 + prettier: ^3.0.0 + typescript-eslint: ^8.2.0 + peerDependenciesMeta: + eslint: + optional: true + prettier: + optional: true + typescript-eslint: + optional: true + bin: + companion-generate-manifest: scripts/generate-manifest.js + companion-module-build: scripts/build.js + companion-module-check: scripts/check.js + checksum: 10c0/49baa2415a62e9763d8d185d3d944a68cbfb5e41f2d382a0d8e0cd69902ccc4a80a92783a0ab95c9b5fbc0ca4464c028423bb5fc3347149cd1bae1ab6bf4b10c + languageName: node + linkType: hard + +"@discoveryjs/json-ext@npm:^0.6.1": + version: 0.6.3 + resolution: "@discoveryjs/json-ext@npm:0.6.3" + checksum: 10c0/778a9f9d5c3696da3c1f9fa4186613db95a1090abbfb6c2601430645c0d0158cd5e4ba4f32c05904e2dd2747d57710f6aab22bd2f8aa3c4e8feab9b247c65d85 + languageName: node + linkType: hard + +"@eslint-community/eslint-utils@npm:^4.1.2": + version: 4.4.0 + resolution: "@eslint-community/eslint-utils@npm:4.4.0" + dependencies: + eslint-visitor-keys: "npm:^3.3.0" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: 10c0/7e559c4ce59cd3a06b1b5a517b593912e680a7f981ae7affab0d01d709e99cd5647019be8fafa38c350305bc32f1f7d42c7073edde2ab536c745e365f37b607e + languageName: node + linkType: hard + +"@eslint-community/eslint-utils@npm:^4.5.0, @eslint-community/eslint-utils@npm:^4.7.0": + version: 4.7.0 + resolution: "@eslint-community/eslint-utils@npm:4.7.0" + dependencies: + eslint-visitor-keys: "npm:^3.4.3" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: 10c0/c0f4f2bd73b7b7a9de74b716a664873d08ab71ab439e51befe77d61915af41a81ecec93b408778b3a7856185244c34c2c8ee28912072ec14def84ba2dec70adf + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.11.0": + version: 4.12.1 + resolution: "@eslint-community/regexpp@npm:4.12.1" + checksum: 10c0/a03d98c246bcb9109aec2c08e4d10c8d010256538dcb3f56610191607214523d4fb1b00aa81df830b6dffb74c5fa0be03642513a289c567949d3e550ca11cdf6 + languageName: node + linkType: hard + +"@eslint/js@npm:^9.19.0": + version: 9.29.0 + resolution: "@eslint/js@npm:9.29.0" + checksum: 10c0/d0ccf37063fa27a3fae9347cb044f84ca10b5a2fa19ffb2b3fedf3b96843ac1ff359ea9f0ab0e80f2f16fda4cb0dc61ea0fed0375090f050fe0a029e7d6de3a3 + languageName: node + linkType: hard + +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: "npm:^7.0.4" + checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.0": + version: 0.3.3 + resolution: "@jridgewell/gen-mapping@npm:0.3.3" + dependencies: + "@jridgewell/set-array": "npm:^1.0.1" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + "@jridgewell/trace-mapping": "npm:^0.3.9" + checksum: 10c0/376fc11cf5a967318ba3ddd9d8e91be528eab6af66810a713c49b0c3f8dc67e9949452c51c38ab1b19aa618fb5e8594da5a249977e26b1e7fea1ee5a1fcacc74 + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:3.1.0": + version: 3.1.0 + resolution: "@jridgewell/resolve-uri@npm:3.1.0" + checksum: 10c0/78055e2526108331126366572045355051a930f017d1904a4f753d3f4acee8d92a14854948095626f6163cffc24ea4e3efa30637417bb866b84743dec7ef6fd9 + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.0.1": + version: 1.1.2 + resolution: "@jridgewell/set-array@npm:1.1.2" + checksum: 10c0/bc7ab4c4c00470de4e7562ecac3c0c84f53e7ee8a711e546d67c47da7febe7c45cd67d4d84ee3c9b2c05ae8e872656cdded8a707a283d30bd54fbc65aef821ab + languageName: node + linkType: hard + +"@jridgewell/source-map@npm:^0.3.3": + version: 0.3.3 + resolution: "@jridgewell/source-map@npm:0.3.3" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.0" + "@jridgewell/trace-mapping": "npm:^0.3.9" + checksum: 10c0/f341e3ed1e9dfe5ae95201e9e820bee7c0518f20f2831b9964ce6c4bfe59477fb7e3257a45fac193cb4aea0019f0a4f8ed68abb12fd3956610317946f7341e3f + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:1.4.14": + version: 1.4.14 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" + checksum: 10c0/3fbaff1387c1338b097eeb6ff92890d7838f7de0dde259e4983763b44540bfd5ca6a1f7644dc8ad003a57f7e80670d5b96a8402f1386ba9aee074743ae9bad51 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10": + version: 1.4.15 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" + checksum: 10c0/0c6b5ae663087558039052a626d2d7ed5208da36cfd707dcc5cea4a07cfc918248403dcb5989a8f7afaf245ce0573b7cc6fd94c4a30453bd10e44d9363940ba5 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.14": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.25": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 10c0/3d1ce6ebc69df9682a5a8896b414c6537e428a1d68b02fcc8363b04284a8ca0df04d0ee3013132252ab14f2527bc13bea6526a912ecb5658f0e39fd2860b4df4 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.18 + resolution: "@jridgewell/trace-mapping@npm:0.3.18" + dependencies: + "@jridgewell/resolve-uri": "npm:3.1.0" + "@jridgewell/sourcemap-codec": "npm:1.4.14" + checksum: 10c0/e5045775f076022b6c7cc64a7b55742faa5442301cb3389fd0e6712fafc46a2bb13c68fa1ffaf7b8bb665a91196f050b4115885fc802094ebc06a1cf665935ac + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 + languageName: node + linkType: hard + +"@pkgr/core@npm:^0.2.4": + version: 0.2.7 + resolution: "@pkgr/core@npm:0.2.7" + checksum: 10c0/951f5ebf2feb6e9dbc202d937f1a364d60f2bf0e3e53594251bcc1d9d2ed0df0a919c49ba162a9499fce73cf46ebe4d7959a8dfbac03511dbe79b69f5fedb804 + languageName: node + linkType: hard + +"@types/eslint-scope@npm:^3.7.7": + version: 3.7.7 + resolution: "@types/eslint-scope@npm:3.7.7" + dependencies: + "@types/eslint": "npm:*" + "@types/estree": "npm:*" + checksum: 10c0/a0ecbdf2f03912679440550817ff77ef39a30fa8bfdacaf6372b88b1f931828aec392f52283240f0d648cf3055c5ddc564544a626bcf245f3d09fcb099ebe3cc + languageName: node + linkType: hard + +"@types/eslint@npm:*": + version: 9.6.1 + resolution: "@types/eslint@npm:9.6.1" + dependencies: + "@types/estree": "npm:*" + "@types/json-schema": "npm:*" + checksum: 10c0/69ba24fee600d1e4c5abe0df086c1a4d798abf13792d8cfab912d76817fe1a894359a1518557d21237fbaf6eda93c5ab9309143dee4c59ef54336d1b3570420e + languageName: node + linkType: hard + +"@types/estree@npm:*, @types/estree@npm:^1.0.6": + version: 1.0.8 + resolution: "@types/estree@npm:1.0.8" + checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5 + languageName: node + linkType: hard + +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.15": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db + languageName: node + linkType: hard + +"@types/json-schema@npm:^7.0.9": + version: 7.0.12 + resolution: "@types/json-schema@npm:7.0.12" + checksum: 10c0/2c39946ae321fe42d085c61a85872a81bbee70f9b2054ad344e8811dfc478fdbaf1ebf5f2989bb87c895ba2dfc3b1dcba85db11e467bbcdc023708814207791c + languageName: node + linkType: hard + +"@types/node@npm:*": + version: 20.2.5 + resolution: "@types/node@npm:20.2.5" + checksum: 10c0/1c3db8a4ceb5e5d12e7cb140e37c14a16ce013084c6d65579b91cefbe0ecaca57d85093d968172b11c3d1d95bcbc5d972b08aa3dc3935206fb39bc6c10751102 + languageName: node + linkType: hard + +"@typescript-eslint/project-service@npm:8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/project-service@npm:8.34.1" + dependencies: + "@typescript-eslint/tsconfig-utils": "npm:^8.34.1" + "@typescript-eslint/types": "npm:^8.34.1" + debug: "npm:^4.3.4" + peerDependencies: + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/9333a890625f6777054db17a6b299281ae7502bb7615261d15b885a75b8cf65fc91591389c93b37ecd14b651d8e94851dac8718e5dcc8ed0600533535dae855c + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/scope-manager@npm:8.34.1" + dependencies: + "@typescript-eslint/types": "npm:8.34.1" + "@typescript-eslint/visitor-keys": "npm:8.34.1" + checksum: 10c0/2af608fa3900f4726322e33bf4f3a376fdace3ac0f310cf7d9256bbc2905c3896138176a47dd195d2c2229f27fe43f5deb4bc7729db2eb18389926dedea78077 + languageName: node + linkType: hard + +"@typescript-eslint/tsconfig-utils@npm:8.34.1, @typescript-eslint/tsconfig-utils@npm:^8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/tsconfig-utils@npm:8.34.1" + peerDependencies: + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/8d1ead8b7c279b48e2ed96f083ec119a9aeea1ca9cdd40576ec271b996b9fd8cfa0ddb0aafbb4e14bc27fc62c69c5be66d39b1de68eab9ddd7f1861da267423d + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:8.34.1, @typescript-eslint/types@npm:^8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/types@npm:8.34.1" + checksum: 10c0/db1b3dce6a70b28ddb13c76fbb5983240d9395656df5f7cbd99bfd9905e39c0dab2132870f01dbc406b48739c437f7d344a879a824cedaba81b91a53110dc23a + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/typescript-estree@npm:8.34.1" + dependencies: + "@typescript-eslint/project-service": "npm:8.34.1" + "@typescript-eslint/tsconfig-utils": "npm:8.34.1" + "@typescript-eslint/types": "npm:8.34.1" + "@typescript-eslint/visitor-keys": "npm:8.34.1" + debug: "npm:^4.3.4" + fast-glob: "npm:^3.3.2" + is-glob: "npm:^4.0.3" + minimatch: "npm:^9.0.4" + semver: "npm:^7.6.0" + ts-api-utils: "npm:^2.1.0" + peerDependencies: + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/4ee7249db91b9840361f34f80b7b6d646a3af159c7298d79a33d8a11c98792fd3a395343e5e17e0fa29529e8f0113bac8baadcef90d1e140bd736a48f0485042 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:^8.26.1": + version: 8.34.1 + resolution: "@typescript-eslint/utils@npm:8.34.1" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.7.0" + "@typescript-eslint/scope-manager": "npm:8.34.1" + "@typescript-eslint/types": "npm:8.34.1" + "@typescript-eslint/typescript-estree": "npm:8.34.1" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/e3085877f7940c02a37653e6bc52ac6cde115e755b1f788fe4331202f371b3421cc4d0878c7d3eb054e14e9b3a064496a707a73eac471cb2b73593b9e9d4b998 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/visitor-keys@npm:8.34.1" + dependencies: + "@typescript-eslint/types": "npm:8.34.1" + eslint-visitor-keys: "npm:^4.2.1" + checksum: 10c0/0e5a9b3d93905d16d3cf8cb5fb346dcc6f760482eb7d0ac209aefc09a32f78ef28a687634df6ad08e81fb3e1083e8805f34472de6bbc501c0105ad654d518f40 + languageName: node + linkType: hard + +"@webassemblyjs/ast@npm:1.14.1, @webassemblyjs/ast@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/ast@npm:1.14.1" + dependencies: + "@webassemblyjs/helper-numbers": "npm:1.13.2" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + checksum: 10c0/67a59be8ed50ddd33fbb2e09daa5193ac215bf7f40a9371be9a0d9797a114d0d1196316d2f3943efdb923a3d809175e1563a3cb80c814fb8edccd1e77494972b + languageName: node + linkType: hard + +"@webassemblyjs/floating-point-hex-parser@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.13.2" + checksum: 10c0/0e88bdb8b50507d9938be64df0867f00396b55eba9df7d3546eb5dc0ca64d62e06f8d881ec4a6153f2127d0f4c11d102b6e7d17aec2f26bb5ff95a5e60652412 + languageName: node + linkType: hard + +"@webassemblyjs/helper-api-error@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-api-error@npm:1.13.2" + checksum: 10c0/31be497f996ed30aae4c08cac3cce50c8dcd5b29660383c0155fce1753804fc55d47fcba74e10141c7dd2899033164e117b3bcfcda23a6b043e4ded4f1003dfb + languageName: node + linkType: hard + +"@webassemblyjs/helper-buffer@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/helper-buffer@npm:1.14.1" + checksum: 10c0/0d54105dc373c0fe6287f1091e41e3a02e36cdc05e8cf8533cdc16c59ff05a646355415893449d3768cda588af451c274f13263300a251dc11a575bc4c9bd210 + languageName: node + linkType: hard + +"@webassemblyjs/helper-numbers@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-numbers@npm:1.13.2" + dependencies: + "@webassemblyjs/floating-point-hex-parser": "npm:1.13.2" + "@webassemblyjs/helper-api-error": "npm:1.13.2" + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/9c46852f31b234a8fb5a5a9d3f027bc542392a0d4de32f1a9c0075d5e8684aa073cb5929b56df565500b3f9cc0a2ab983b650314295b9bf208d1a1651bfc825a + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-bytecode@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.13.2" + checksum: 10c0/c4355d14f369b30cf3cbdd3acfafc7d0488e086be6d578e3c9780bd1b512932352246be96e034e2a7fcfba4f540ec813352f312bfcbbfe5bcfbf694f82ccc682 + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-section@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/helper-wasm-section@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + checksum: 10c0/1f9b33731c3c6dbac3a9c483269562fa00d1b6a4e7133217f40e83e975e636fd0f8736e53abd9a47b06b66082ecc976c7384391ab0a68e12d509ea4e4b948d64 + languageName: node + linkType: hard + +"@webassemblyjs/ieee754@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/ieee754@npm:1.13.2" + dependencies: + "@xtuc/ieee754": "npm:^1.2.0" + checksum: 10c0/2e732ca78c6fbae3c9b112f4915d85caecdab285c0b337954b180460290ccd0fb00d2b1dc4bb69df3504abead5191e0d28d0d17dfd6c9d2f30acac8c4961c8a7 + languageName: node + linkType: hard + +"@webassemblyjs/leb128@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/leb128@npm:1.13.2" + dependencies: + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/dad5ef9e383c8ab523ce432dfd80098384bf01c45f70eb179d594f85ce5db2f80fa8c9cba03adafd85684e6d6310f0d3969a882538975989919329ac4c984659 + languageName: node + linkType: hard + +"@webassemblyjs/utf8@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/utf8@npm:1.13.2" + checksum: 10c0/d3fac9130b0e3e5a1a7f2886124a278e9323827c87a2b971e6d0da22a2ba1278ac9f66a4f2e363ecd9fac8da42e6941b22df061a119e5c0335f81006de9ee799 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-edit@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-edit@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/helper-wasm-section": "npm:1.14.1" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + "@webassemblyjs/wasm-opt": "npm:1.14.1" + "@webassemblyjs/wasm-parser": "npm:1.14.1" + "@webassemblyjs/wast-printer": "npm:1.14.1" + checksum: 10c0/5ac4781086a2ca4b320bdbfd965a209655fe8a208ca38d89197148f8597e587c9a2c94fb6bd6f1a7dbd4527c49c6844fcdc2af981f8d793a97bf63a016aa86d2 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-gen@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-gen@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/ieee754": "npm:1.13.2" + "@webassemblyjs/leb128": "npm:1.13.2" + "@webassemblyjs/utf8": "npm:1.13.2" + checksum: 10c0/d678810d7f3f8fecb2e2bdadfb9afad2ec1d2bc79f59e4711ab49c81cec578371e22732d4966f59067abe5fba8e9c54923b57060a729d28d408e608beef67b10 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-opt@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-opt@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + "@webassemblyjs/wasm-parser": "npm:1.14.1" + checksum: 10c0/515bfb15277ee99ba6b11d2232ddbf22aed32aad6d0956fe8a0a0a004a1b5a3a277a71d9a3a38365d0538ac40d1b7b7243b1a244ad6cd6dece1c1bb2eb5de7ee + languageName: node + linkType: hard + +"@webassemblyjs/wasm-parser@npm:1.14.1, @webassemblyjs/wasm-parser@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-parser@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-api-error": "npm:1.13.2" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/ieee754": "npm:1.13.2" + "@webassemblyjs/leb128": "npm:1.13.2" + "@webassemblyjs/utf8": "npm:1.13.2" + checksum: 10c0/95427b9e5addbd0f647939bd28e3e06b8deefdbdadcf892385b5edc70091bf9b92fa5faac3fce8333554437c5d85835afef8c8a7d9d27ab6ba01ffab954db8c6 + languageName: node + linkType: hard + +"@webassemblyjs/wast-printer@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wast-printer@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/8d7768608996a052545251e896eac079c98e0401842af8dd4de78fba8d90bd505efb6c537e909cd6dae96e09db3fa2e765a6f26492553a675da56e2db51f9d24 + languageName: node + linkType: hard + +"@webpack-cli/configtest@npm:^3.0.1": + version: 3.0.1 + resolution: "@webpack-cli/configtest@npm:3.0.1" + peerDependencies: + webpack: ^5.82.0 + webpack-cli: 6.x.x + checksum: 10c0/edd24ecfc429298fe86446f7d7daedfe82d72e7f6236c81420605484fdadade5d59c6bcef3d76bd724e11d9727f74e75de183223ae62d3a568b2d54199688cbe + languageName: node + linkType: hard + +"@webpack-cli/info@npm:^3.0.1": + version: 3.0.1 + resolution: "@webpack-cli/info@npm:3.0.1" + peerDependencies: + webpack: ^5.82.0 + webpack-cli: 6.x.x + checksum: 10c0/b23b94e7dc8c93e79248f20d5f1bd0fbb7b9ba4b012803e2fdc5440b8f2ee1f3eca7f4933bbca346c8168673bf572b1858169a3cb2c17d9b8bcd833d480c2170 + languageName: node + linkType: hard + +"@webpack-cli/serve@npm:^3.0.1": + version: 3.0.1 + resolution: "@webpack-cli/serve@npm:3.0.1" + peerDependencies: + webpack: ^5.82.0 + webpack-cli: 6.x.x + peerDependenciesMeta: + webpack-dev-server: + optional: true + checksum: 10c0/65245e45bfa35e11a5b30631b99cfed0c1b39b2cc8320fa2d2a4185264535618827d349ec032c58af4201d6236cbc43bec894fcb840fdd06314611537a80e210 + languageName: node + linkType: hard + +"@xtuc/ieee754@npm:^1.2.0": + version: 1.2.0 + resolution: "@xtuc/ieee754@npm:1.2.0" + checksum: 10c0/a8565d29d135039bd99ae4b2220d3e167d22cf53f867e491ed479b3f84f895742d0097f935b19aab90265a23d5d46711e4204f14c479ae3637fbf06c4666882f + languageName: node + linkType: hard + +"@xtuc/long@npm:4.2.2": + version: 4.2.2 + resolution: "@xtuc/long@npm:4.2.2" + checksum: 10c0/8582cbc69c79ad2d31568c412129bf23d2b1210a1dfb60c82d5a1df93334da4ee51f3057051658569e2c196d8dc33bc05ae6b974a711d0d16e801e1d0647ccd1 + languageName: node + linkType: hard + +"acorn@npm:^8.14.0": + version: 8.15.0 + resolution: "acorn@npm:8.15.0" + bin: + acorn: bin/acorn + checksum: 10c0/dec73ff59b7d6628a01eebaece7f2bdb8bb62b9b5926dcad0f8931f2b8b79c2be21f6c68ac095592adb5adb15831a3635d9343e6a91d028bbe85d564875ec3ec + languageName: node + linkType: hard + +"ajv-formats@npm:^2.1.1": + version: 2.1.1 + resolution: "ajv-formats@npm:2.1.1" + dependencies: + ajv: "npm:^8.0.0" + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 10c0/e43ba22e91b6a48d96224b83d260d3a3a561b42d391f8d3c6d2c1559f9aa5b253bfb306bc94bbeca1d967c014e15a6efe9a207309e95b3eaae07fcbcdc2af662 + languageName: node + linkType: hard + +"ajv-keywords@npm:^5.1.0": + version: 5.1.0 + resolution: "ajv-keywords@npm:5.1.0" + dependencies: + fast-deep-equal: "npm:^3.1.3" + peerDependencies: + ajv: ^8.8.2 + checksum: 10c0/18bec51f0171b83123ba1d8883c126e60c6f420cef885250898bf77a8d3e65e3bfb9e8564f497e30bdbe762a83e0d144a36931328616a973ee669dc74d4a9590 + languageName: node + linkType: hard + +"ajv@npm:^8.0.0, ajv@npm:^8.17.1, ajv@npm:^8.9.0": + version: 8.17.1 + resolution: "ajv@npm:8.17.1" + dependencies: + fast-deep-equal: "npm:^3.1.3" + fast-uri: "npm:^3.0.1" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + checksum: 10c0/ec3ba10a573c6b60f94639ffc53526275917a2df6810e4ab5a6b959d87459f9ef3f00d5e7865b82677cb7d21590355b34da14d1d0b9c32d75f95a187e76fff35 + languageName: node + linkType: hard + +"author-regex@npm:^1.0.0": + version: 1.0.0 + resolution: "author-regex@npm:1.0.0" + checksum: 10c0/3f3a5ad6660be010bd5b979fac180f435bd9615e81db2b1cdac081eb3f639461f6c3927ced956e377a5c91cc789e3de3a3e900e296c1423971043c8fd8be0b73 + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.2 + resolution: "brace-expansion@npm:2.0.2" + dependencies: + balanced-match: "npm:^1.0.0" + checksum: 10c0/6d117a4c793488af86b83172deb6af143e94c17bc53b0b3cec259733923b4ca84679d506ac261f4ba3c7ed37c46018e2ff442f9ce453af8643ecd64f4a54e6cf + languageName: node + linkType: hard + +"braces@npm:^3.0.3": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: "npm:^7.1.1" + checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 + languageName: node + linkType: hard + +"browserslist@npm:^4.24.0": + version: 4.25.0 + resolution: "browserslist@npm:4.25.0" + dependencies: + caniuse-lite: "npm:^1.0.30001718" + electron-to-chromium: "npm:^1.5.160" + node-releases: "npm:^2.0.19" + update-browserslist-db: "npm:^1.1.3" + bin: + browserslist: cli.js + checksum: 10c0/cc16c55b4468b18684a0e1ca303592b38635b1155d6724f172407192737a2f405b8030d87a05813729592793445b3d15e737b0055f901cdecccb29b1e580a1c5 + languageName: node + linkType: hard + +"buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 10c0/124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34 + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001718": + version: 1.0.30001723 + resolution: "caniuse-lite@npm:1.0.30001723" + checksum: 10c0/e019503061759b96017c4d27ddd7ca1b48533eabcd0431b51d2e3156f99f6b031075e46c279c0db63424cdfc874bba992caec2db51b922a0f945e686246886f6 + languageName: node + linkType: hard + +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 + languageName: node + linkType: hard + +"chrome-trace-event@npm:^1.0.2": + version: 1.0.3 + resolution: "chrome-trace-event@npm:1.0.3" + checksum: 10c0/080ce2d20c2b9e0f8461a380e9585686caa768b1c834a464470c9dc74cda07f27611c7b727a2cd768a9cecd033297fdec4ce01f1e58b62227882c1059dec321c + languageName: node + linkType: hard + +"clone-deep@npm:^4.0.1": + version: 4.0.1 + resolution: "clone-deep@npm:4.0.1" + dependencies: + is-plain-object: "npm:^2.0.4" + kind-of: "npm:^6.0.2" + shallow-clone: "npm:^3.0.0" + checksum: 10c0/637753615aa24adf0f2d505947a1bb75e63964309034a1cf56ba4b1f30af155201edd38d26ffe26911adaae267a3c138b344a4947d39f5fc1b6d6108125aa758 + languageName: node + linkType: hard + +"colord@npm:^2.9.3": + version: 2.9.3 + resolution: "colord@npm:2.9.3" + checksum: 10c0/9699e956894d8996b28c686afe8988720785f476f59335c80ce852ded76ab3ebe252703aec53d9bef54f6219aea6b960fb3d9a8300058a1d0c0d4026460cd110 + languageName: node + linkType: hard + +"colorette@npm:^2.0.14": + version: 2.0.20 + resolution: "colorette@npm:2.0.20" + checksum: 10c0/e94116ff33b0ff56f3b83b9ace895e5bf87c2a7a47b3401b8c3f3226e050d5ef76cf4072fb3325f9dc24d1698f9b730baf4e05eeaf861d74a1883073f4c98a40 + languageName: node + linkType: hard + +"commander@npm:^12.1.0": + version: 12.1.0 + resolution: "commander@npm:12.1.0" + checksum: 10c0/6e1996680c083b3b897bfc1cfe1c58dfbcd9842fd43e1aaf8a795fbc237f65efcc860a3ef457b318e73f29a4f4a28f6403c3d653d021d960e4632dd45bde54a9 + languageName: node + linkType: hard + +"commander@npm:^2.20.0": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: 10c0/74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.3": + version: 7.0.5 + resolution: "cross-spawn@npm:7.0.5" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/aa82ce7ac0814a27e6f2b738c5a7cf1fa21a3558a1e42df449fc96541ba3ba731e4d3ecffa4435348808a86212f287c6f20a1ee551ef1ff95d01cfec5f434944 + languageName: node + linkType: hard + +"debug@npm:^4.3.4": + version: 4.3.4 + resolution: "debug@npm:4.3.4" + dependencies: + ms: "npm:2.1.2" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/cedbec45298dd5c501d01b92b119cd3faebe5438c3917ff11ae1bff86a6c722930ac9c8659792824013168ba6db7c4668225d845c633fbdafbbf902a6389f736 + languageName: node + linkType: hard + +"ejson@npm:^2.2.3": + version: 2.2.3 + resolution: "ejson@npm:2.2.3" + checksum: 10c0/648ea347f5e57441b7b9341adc6de244445b6da1d0e7747ea7a083f906299b92e4c44fc29e6de0b240d8fa4a73159e85f9367780d7af2ecbc50aae8a4e4961ae + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.5.160": + version: 1.5.170 + resolution: "electron-to-chromium@npm:1.5.170" + checksum: 10c0/138c6d293b310729f7550f6d36ae4b2bdd0453220e8b11d8780395cf38c9ae816b1f30a3978d790f1951cfa89e7c7911af4a779094c33ae167c89c7ba6751834 + languageName: node + linkType: hard + +"enhanced-resolve@npm:^5.17.1": + version: 5.17.1 + resolution: "enhanced-resolve@npm:5.17.1" + dependencies: + graceful-fs: "npm:^4.2.4" + tapable: "npm:^2.2.0" + checksum: 10c0/81a0515675eca17efdba2cf5bad87abc91a528fc1191aad50e275e74f045b41506167d420099022da7181c8d787170ea41e4a11a0b10b7a16f6237daecb15370 + languageName: node + linkType: hard + +"envinfo@npm:^7.14.0": + version: 7.14.0 + resolution: "envinfo@npm:7.14.0" + bin: + envinfo: dist/cli.js + checksum: 10c0/059a031eee101e056bd9cc5cbfe25c2fab433fe1780e86cf0a82d24a000c6931e327da6a8ffb3dce528a24f83f256e7efc0b36813113eff8fdc6839018efe327 + languageName: node + linkType: hard + +"es-module-lexer@npm:^1.2.1": + version: 1.2.1 + resolution: "es-module-lexer@npm:1.2.1" + checksum: 10c0/6e0a9095e0abe38f480e0f366cdeca19db64d85a533da9332739a64d70e97a61e68c1f98a2396468ae6229245b8e5edcb1e48c4d3615ae4da9052a1bdc2367e2 + languageName: node + linkType: hard + +"escalade@npm:^3.2.0": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 + languageName: node + linkType: hard + +"eslint-compat-utils@npm:^0.5.1": + version: 0.5.1 + resolution: "eslint-compat-utils@npm:0.5.1" + dependencies: + semver: "npm:^7.5.4" + peerDependencies: + eslint: ">=6.0.0" + checksum: 10c0/325e815205fab70ebcd379f6d4b5d44c7d791bb8dfe0c9888233f30ebabd9418422595b53a781b946c768d9244d858540e5e6129a6b3dd6d606f467d599edc6c + languageName: node + linkType: hard + +"eslint-config-prettier@npm:^10.0.1": + version: 10.1.5 + resolution: "eslint-config-prettier@npm:10.1.5" + peerDependencies: + eslint: ">=7.0.0" + bin: + eslint-config-prettier: bin/cli.js + checksum: 10c0/5486255428e4577e8064b40f27db299faf7312b8e43d7b4bc913a6426e6c0f5950cd519cad81ae24e9aecb4002c502bc665c02e3b52efde57af2debcf27dd6e0 + languageName: node + linkType: hard + +"eslint-plugin-es-x@npm:^7.8.0": + version: 7.8.0 + resolution: "eslint-plugin-es-x@npm:7.8.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.1.2" + "@eslint-community/regexpp": "npm:^4.11.0" + eslint-compat-utils: "npm:^0.5.1" + peerDependencies: + eslint: ">=8" + checksum: 10c0/002fda8c029bc5da41e24e7ac11654062831d675fc4f5f20d0de460e24bf1e05cd559000678ef3e46c48641190f4fc07ae3d57aa5e8b085ef5f67e5f63742614 + languageName: node + linkType: hard + +"eslint-plugin-n@npm:^17.15.1": + version: 17.20.0 + resolution: "eslint-plugin-n@npm:17.20.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.5.0" + "@typescript-eslint/utils": "npm:^8.26.1" + enhanced-resolve: "npm:^5.17.1" + eslint-plugin-es-x: "npm:^7.8.0" + get-tsconfig: "npm:^4.8.1" + globals: "npm:^15.11.0" + ignore: "npm:^5.3.2" + minimatch: "npm:^9.0.5" + semver: "npm:^7.6.3" + ts-declaration-location: "npm:^1.0.6" + peerDependencies: + eslint: ">=8.23.0" + checksum: 10c0/7820cda10c71e3d2c6a8f15b4e1cbd757364181236e31facca43216d31f5968b643854228373865adc11ce47d44ddfb078b9d8709cf7276ccbd3017b64daf792 + languageName: node + linkType: hard + +"eslint-plugin-prettier@npm:^5.2.3": + version: 5.5.0 + resolution: "eslint-plugin-prettier@npm:5.5.0" + dependencies: + prettier-linter-helpers: "npm:^1.0.0" + synckit: "npm:^0.11.7" + peerDependencies: + "@types/eslint": ">=8.0.0" + eslint: ">=8.0.0" + eslint-config-prettier: ">= 7.0.0 <10.0.0 || >=10.1.0" + prettier: ">=3.0.0" + peerDependenciesMeta: + "@types/eslint": + optional: true + eslint-config-prettier: + optional: true + checksum: 10c0/d739940d5f5ea9b4c3a52836b24907b273a46909cdd1def5526f8934e54082fe5aac13512eb2c27d538ca79e16916ca54c651e3372aa53b7d4297afb4c156d47 + languageName: node + linkType: hard + +"eslint-scope@npm:5.1.1": + version: 5.1.1 + resolution: "eslint-scope@npm:5.1.1" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^4.1.1" + checksum: 10c0/d30ef9dc1c1cbdece34db1539a4933fe3f9b14e1ffb27ecc85987902ee663ad7c9473bbd49a9a03195a373741e62e2f807c4938992e019b511993d163450e70a + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.3.0": + version: 3.4.1 + resolution: "eslint-visitor-keys@npm:3.4.1" + checksum: 10c0/b4ebd35aed5426cd81b1fb92487825f1acf47a31e91d76597a3ee0664d69627140c4dafaf9b319cfeb1f48c1113a393e21a734c669e6565a72e6fcc311bd9911 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^4.2.1": + version: 4.2.1 + resolution: "eslint-visitor-keys@npm:4.2.1" + checksum: 10c0/fcd43999199d6740db26c58dbe0c2594623e31ca307e616ac05153c9272f12f1364f5a0b1917a8e962268fdecc6f3622c1c2908b4fcc2e047a106fe6de69dc43 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: "npm:^5.2.0" + checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 + languageName: node + linkType: hard + +"estraverse@npm:^4.1.1": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: 10c0/9cb46463ef8a8a4905d3708a652d60122a0c20bb58dec7e0e12ab0e7235123d74214fc0141d743c381813e1b992767e2708194f6f6e0f9fd00c1b4e0887b8b6d + languageName: node + linkType: hard + +"estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 + languageName: node + linkType: hard + +"eventemitter3@npm:^4.0.4": + version: 4.0.7 + resolution: "eventemitter3@npm:4.0.7" + checksum: 10c0/5f6d97cbcbac47be798e6355e3a7639a84ee1f7d9b199a07017f1d2f1e2fe236004d14fa5dfaeba661f94ea57805385e326236a6debbc7145c8877fbc0297c6b + languageName: node + linkType: hard + +"eventemitter3@npm:^5.0.1": + version: 5.0.1 + resolution: "eventemitter3@npm:5.0.1" + checksum: 10c0/4ba5c00c506e6c786b4d6262cfbce90ddc14c10d4667e5c83ae993c9de88aa856033994dd2b35b83e8dc1170e224e66a319fa80adc4c32adcd2379bbc75da814 + languageName: node + linkType: hard + +"events@npm:^3.2.0": + version: 3.3.0 + resolution: "events@npm:3.3.0" + checksum: 10c0/d6b6f2adbccbcda74ddbab52ed07db727ef52e31a61ed26db9feb7dc62af7fc8e060defa65e5f8af9449b86b52cc1a1f6a79f2eafcf4e62add2b7a1fa4a432f6 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 + languageName: node + linkType: hard + +"fast-diff@npm:^1.1.2": + version: 1.3.0 + resolution: "fast-diff@npm:1.3.0" + checksum: 10c0/5c19af237edb5d5effda008c891a18a585f74bf12953be57923f17a3a4d0979565fc64dbc73b9e20926b9d895f5b690c618cbb969af0cf022e3222471220ad29 + languageName: node + linkType: hard + +"fast-glob@npm:^3.3.2": + version: 3.3.3 + resolution: "fast-glob@npm:3.3.3" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.8" + checksum: 10c0/f6aaa141d0d3384cf73cbcdfc52f475ed293f6d5b65bfc5def368b09163a9f7e5ec2b3014d80f733c405f58e470ee0cc451c2937685045cddcdeaa24199c43fe + languageName: node + linkType: hard + +"fast-uri@npm:^3.0.1": + version: 3.0.6 + resolution: "fast-uri@npm:3.0.6" + checksum: 10c0/74a513c2af0584448aee71ce56005185f81239eab7a2343110e5bad50c39ad4fb19c5a6f99783ead1cac7ccaf3461a6034fda89fffa2b30b6d99b9f21c2f9d29 + languageName: node + linkType: hard + +"fastest-levenshtein@npm:^1.0.12": + version: 1.0.16 + resolution: "fastest-levenshtein@npm:1.0.16" + checksum: 10c0/7e3d8ae812a7f4fdf8cad18e9cde436a39addf266a5986f653ea0d81e0de0900f50c0f27c6d5aff3f686bcb48acbd45be115ae2216f36a6a13a7dbbf5cad878b + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.15.0 + resolution: "fastq@npm:1.15.0" + dependencies: + reusify: "npm:^1.0.4" + checksum: 10c0/5ce4f83afa5f88c9379e67906b4d31bc7694a30826d6cc8d0f0473c966929017fda65c2174b0ec89f064ede6ace6c67f8a4fe04cef42119b6a55b0d465554c24 + languageName: node + linkType: hard + +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 + languageName: node + linkType: hard + +"find-up@npm:^4.0.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: "npm:^5.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/0406ee89ebeefa2d507feb07ec366bebd8a6167ae74aa4e34fb4c4abd06cf782a3ce26ae4194d70706f72182841733f00551c209fe575cb00bd92104056e78c1 + languageName: node + linkType: hard + +"find-up@npm:^7.0.0": + version: 7.0.0 + resolution: "find-up@npm:7.0.0" + dependencies: + locate-path: "npm:^7.2.0" + path-exists: "npm:^5.0.0" + unicorn-magic: "npm:^0.1.0" + checksum: 10c0/e6ee3e6154560bc0ab3bc3b7d1348b31513f9bdf49a5dd2e952495427d559fa48cdf33953e85a309a323898b43fa1bfbc8b80c880dfc16068384783034030008 + languageName: node + linkType: hard + +"flat@npm:^5.0.2": + version: 5.0.2 + resolution: "flat@npm:5.0.2" + bin: + flat: cli.js + checksum: 10c0/f178b13482f0cd80c7fede05f4d10585b1f2fdebf26e12edc138e32d3150c6ea6482b7f12813a1091143bad52bb6d3596bca51a162257a21163c0ff438baa5fe + languageName: node + linkType: hard + +"function-bind@npm:^1.1.1": + version: 1.1.1 + resolution: "function-bind@npm:1.1.1" + checksum: 10c0/60b74b2407e1942e1ed7f8c284f8ef714d0689dcfce5319985a5b7da3fc727f40b4a59ec72dc55aa83365ad7b8fa4fac3a30d93c850a2b452f29ae03dbc10a1e + languageName: node + linkType: hard + +"get-tsconfig@npm:^4.8.1": + version: 4.10.1 + resolution: "get-tsconfig@npm:4.10.1" + dependencies: + resolve-pkg-maps: "npm:^1.0.0" + checksum: 10c0/7f8e3dabc6a49b747920a800fb88e1952fef871cdf51b79e98db48275a5de6cdaf499c55ee67df5fa6fe7ce65f0063e26de0f2e53049b408c585aa74d39ffa21 + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: "npm:^4.0.1" + checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee + languageName: node + linkType: hard + +"glob-to-regexp@npm:^0.4.1": + version: 0.4.1 + resolution: "glob-to-regexp@npm:0.4.1" + checksum: 10c0/0486925072d7a916f052842772b61c3e86247f0a80cc0deb9b5a3e8a1a9faad5b04fb6f58986a09f34d3e96cd2a22a24b7e9882fb1cf904c31e9a310de96c429 + languageName: node + linkType: hard + +"globals@npm:^15.11.0": + version: 15.15.0 + resolution: "globals@npm:15.15.0" + checksum: 10c0/f9ae80996392ca71316495a39bec88ac43ae3525a438b5626cd9d5ce9d5500d0a98a266409605f8cd7241c7acf57c354a48111ea02a767ba4f374b806d6861fe + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 + languageName: node + linkType: hard + +"has@npm:^1.0.3": + version: 1.0.3 + resolution: "has@npm:1.0.3" + dependencies: + function-bind: "npm:^1.1.1" + checksum: 10c0/e1da0d2bd109f116b632f27782cf23182b42f14972ca9540e4c5aa7e52647407a0a4a76937334fddcb56befe94a3494825ec22b19b51f5e5507c3153fd1a5e1b + languageName: node + linkType: hard + +"ignore@npm:^5.3.2": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 + languageName: node + linkType: hard + +"import-local@npm:^3.0.2": + version: 3.1.0 + resolution: "import-local@npm:3.1.0" + dependencies: + pkg-dir: "npm:^4.2.0" + resolve-cwd: "npm:^3.0.0" + bin: + import-local-fixture: fixtures/cli.js + checksum: 10c0/c67ecea72f775fe8684ca3d057e54bdb2ae28c14bf261d2607c269c18ea0da7b730924c06262eca9aed4b8ab31e31d65bc60b50e7296c85908a56e2f7d41ecd2 + languageName: node + linkType: hard + +"interpret@npm:^3.1.1": + version: 3.1.1 + resolution: "interpret@npm:3.1.1" + checksum: 10c0/6f3c4d0aa6ec1b43a8862375588a249e3c917739895cbe67fe12f0a76260ea632af51e8e2431b50fbcd0145356dc28ca147be08dbe6a523739fd55c0f91dc2a5 + languageName: node + linkType: hard + +"is-core-module@npm:^2.11.0": + version: 2.12.1 + resolution: "is-core-module@npm:2.12.1" + dependencies: + has: "npm:^1.0.3" + checksum: 10c0/ff1d0dfc0b7851310d289398e416eb92ae8a9ac7ea8b8b9737fa8c0725f5a78c5f3db6edd4dff38c9ed731f3aaa1f6410a320233fcb52a2c8f1cf58eebf10a4b + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 + languageName: node + linkType: hard + +"is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 + languageName: node + linkType: hard + +"is-plain-object@npm:^2.0.4": + version: 2.0.4 + resolution: "is-plain-object@npm:2.0.4" + dependencies: + isobject: "npm:^3.0.1" + checksum: 10c0/f050fdd5203d9c81e8c4df1b3ff461c4bc64e8b5ca383bcdde46131361d0a678e80bcf00b5257646f6c636197629644d53bd8e2375aea633de09a82d57e942f4 + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + +"isobject@npm:^3.0.1": + version: 3.0.1 + resolution: "isobject@npm:3.0.1" + checksum: 10c0/03344f5064a82f099a0cd1a8a407f4c0d20b7b8485e8e816c39f249e9416b06c322e8dec5b842b6bb8a06de0af9cb48e7bc1b5352f0fadc2f0abac033db3d4db + languageName: node + linkType: hard + +"jest-worker@npm:^27.4.5": + version: 27.5.1 + resolution: "jest-worker@npm:27.5.1" + dependencies: + "@types/node": "npm:*" + merge-stream: "npm:^2.0.0" + supports-color: "npm:^8.0.0" + checksum: 10c0/8c4737ffd03887b3c6768e4cc3ca0269c0336c1e4b1b120943958ddb035ed2a0fc6acab6dc99631720a3720af4e708ff84fb45382ad1e83c27946adf3623969b + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^2.3.1": + version: 2.3.1 + resolution: "json-parse-even-better-errors@npm:2.3.1" + checksum: 10c0/140932564c8f0b88455432e0f33c4cb4086b8868e37524e07e723f4eaedb9425bdc2bafd71bd1d9765bd15fd1e2d126972bc83990f55c467168c228c24d665f3 + languageName: node + linkType: hard + +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 10c0/71e30015d7f3d6dc1c316d6298047c8ef98a06d31ad064919976583eb61e1018a60a0067338f0f79cabc00d84af3fcc489bd48ce8a46ea165d9541ba17fb30c6 + languageName: node + linkType: hard + +"kind-of@npm:^6.0.2": + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 10c0/61cdff9623dabf3568b6445e93e31376bee1cdb93f8ba7033d86022c2a9b1791a1d9510e026e6465ebd701a6dd2f7b0808483ad8838341ac52f003f512e0b4c4 + languageName: node + linkType: hard + +"loader-runner@npm:^4.2.0": + version: 4.3.0 + resolution: "loader-runner@npm:4.3.0" + checksum: 10c0/a44d78aae0907a72f73966fe8b82d1439c8c485238bd5a864b1b9a2a3257832effa858790241e6b37876b5446a78889adf2fcc8dd897ce54c089ecc0a0ce0bf0 + languageName: node + linkType: hard + +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: "npm:^4.1.0" + checksum: 10c0/33a1c5247e87e022f9713e6213a744557a3e9ec32c5d0b5efb10aa3a38177615bf90221a5592674857039c1a0fd2063b82f285702d37b792d973e9e72ace6c59 + languageName: node + linkType: hard + +"locate-path@npm:^7.2.0": + version: 7.2.0 + resolution: "locate-path@npm:7.2.0" + dependencies: + p-locate: "npm:^6.0.0" + checksum: 10c0/139e8a7fe11cfbd7f20db03923cacfa5db9e14fa14887ea121345597472b4a63c1a42a8a5187defeeff6acf98fd568da7382aa39682d38f0af27433953a97751 + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 10c0/867fdbb30a6d58b011449b8885601ec1690c3e41c759ecd5a9d609094f7aed0096c37823ff4a7190ef0b8f22cc86beb7049196ff68c016e3b3c671d0dac91ce5 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb + languageName: node + linkType: hard + +"micromatch@npm:^4.0.8": + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" + dependencies: + braces: "npm:^3.0.3" + picomatch: "npm:^2.3.1" + checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa + languageName: node + linkType: hard + +"mime-types@npm:^2.1.27": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: "npm:1.52.0" + checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 + languageName: node + linkType: hard + +"mimic-fn@npm:^3.1.0": + version: 3.1.0 + resolution: "mimic-fn@npm:3.1.0" + checksum: 10c0/a07cdd8ed6490c2dff5b11f889b245d9556b80f5a653a552a651d17cff5a2d156e632d235106c2369f00cccef4071704589574cf3601bc1b1400a1f620dff067 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.4, minimatch@npm:^9.0.5": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed + languageName: node + linkType: hard + +"minipass@npm:^7.0.4, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 + languageName: node + linkType: hard + +"minizlib@npm:^3.0.1": + version: 3.0.2 + resolution: "minizlib@npm:3.0.2" + dependencies: + minipass: "npm:^7.1.2" + checksum: 10c0/9f3bd35e41d40d02469cb30470c55ccc21cae0db40e08d1d0b1dff01cc8cc89a6f78e9c5d2b7c844e485ec0a8abc2238111213fdc5b2038e6d1012eacf316f78 + languageName: node + linkType: hard + +"mkdirp@npm:^3.0.1": + version: 3.0.1 + resolution: "mkdirp@npm:3.0.1" + bin: + mkdirp: dist/cjs/src/bin.js + checksum: 10c0/9f2b975e9246351f5e3a40dcfac99fcd0baa31fbfab615fe059fb11e51f10e4803c63de1f384c54d656e4db31d000e4767e9ef076a22e12a641357602e31d57d + languageName: node + linkType: hard + +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 10c0/a437714e2f90dbf881b5191d35a6db792efbca5badf112f87b9e1c712aace4b4b9b742dd6537f3edf90fd6f684de897cec230abde57e87883766712ddda297cc + languageName: node + linkType: hard + +"nanoid@npm:^3.3.8": + version: 3.3.11 + resolution: "nanoid@npm:3.3.11" + bin: + nanoid: bin/nanoid.cjs + checksum: 10c0/40e7f70b3d15f725ca072dfc4f74e81fcf1fbb02e491cf58ac0c79093adc9b0a73b152bcde57df4b79cd097e13023d7504acb38404a4da7bc1cd8e887b82fe0b + languageName: node + linkType: hard + +"neo-async@npm:^2.6.2": + version: 2.6.2 + resolution: "neo-async@npm:2.6.2" + checksum: 10c0/c2f5a604a54a8ec5438a342e1f356dff4bc33ccccdb6dc668d94fe8e5eccfc9d2c2eea6064b0967a767ba63b33763f51ccf2cd2441b461a7322656c1f06b3f5d + languageName: node + linkType: hard + +"node-releases@npm:^2.0.19": + version: 2.0.19 + resolution: "node-releases@npm:2.0.19" + checksum: 10c0/52a0dbd25ccf545892670d1551690fe0facb6a471e15f2cfa1b20142a5b255b3aa254af5f59d6ecb69c2bec7390bc643c43aa63b13bf5e64b6075952e716b1aa + languageName: node + linkType: hard + +"p-finally@npm:^1.0.0": + version: 1.0.0 + resolution: "p-finally@npm:1.0.0" + checksum: 10c0/6b8552339a71fe7bd424d01d8451eea92d379a711fc62f6b2fe64cad8a472c7259a236c9a22b4733abca0b5666ad503cb497792a0478c5af31ded793d00937e7 + languageName: node + linkType: hard + +"p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: "npm:^2.0.0" + checksum: 10c0/8da01ac53efe6a627080fafc127c873da40c18d87b3f5d5492d465bb85ec7207e153948df6b9cbaeb130be70152f874229b8242ee2be84c0794082510af97f12 + languageName: node + linkType: hard + +"p-limit@npm:^4.0.0": + version: 4.0.0 + resolution: "p-limit@npm:4.0.0" + dependencies: + yocto-queue: "npm:^1.0.0" + checksum: 10c0/a56af34a77f8df2ff61ddfb29431044557fcbcb7642d5a3233143ebba805fc7306ac1d448de724352861cb99de934bc9ab74f0d16fe6a5460bdbdf938de875ad + languageName: node + linkType: hard + +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: "npm:^2.2.0" + checksum: 10c0/1b476ad69ad7f6059744f343b26d51ce091508935c1dbb80c4e0a2f397ffce0ca3a1f9f5cd3c7ce19d7929a09719d5c65fe70d8ee289c3f267cd36f2881813e9 + languageName: node + linkType: hard + +"p-locate@npm:^6.0.0": + version: 6.0.0 + resolution: "p-locate@npm:6.0.0" + dependencies: + p-limit: "npm:^4.0.0" + checksum: 10c0/d72fa2f41adce59c198270aa4d3c832536c87a1806e0f69dffb7c1a7ca998fb053915ca833d90f166a8c082d3859eabfed95f01698a3214c20df6bb8de046312 + languageName: node + linkType: hard + +"p-queue@npm:^6.6.2": + version: 6.6.2 + resolution: "p-queue@npm:6.6.2" + dependencies: + eventemitter3: "npm:^4.0.4" + p-timeout: "npm:^3.2.0" + checksum: 10c0/5739ecf5806bbeadf8e463793d5e3004d08bb3f6177bd1a44a005da8fd81bb90f80e4633e1fb6f1dfd35ee663a5c0229abe26aebb36f547ad5a858347c7b0d3e + languageName: node + linkType: hard + +"p-timeout@npm:^3.2.0": + version: 3.2.0 + resolution: "p-timeout@npm:3.2.0" + dependencies: + p-finally: "npm:^1.0.0" + checksum: 10c0/524b393711a6ba8e1d48137c5924749f29c93d70b671e6db761afa784726572ca06149c715632da8f70c090073afb2af1c05730303f915604fd38ee207b70a61 + languageName: node + linkType: hard + +"p-timeout@npm:^4.1.0": + version: 4.1.0 + resolution: "p-timeout@npm:4.1.0" + checksum: 10c0/25aaf13ae9ebfff4ab45591f6647f3bee1ecede073c367175fb0157c27efb170cfb51259a4d2e9118d2ca595453bc885f086ad0ca7476d1c26cee3d13a7c9f6d + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: 10c0/c36c19907734c904b16994e6535b02c36c2224d433e01a2f1ab777237f4d86e6289fd5fd464850491e940379d4606ed850c03e0f9ab600b0ebddb511312e177f + languageName: node + linkType: hard + +"parse-author@npm:^2.0.0": + version: 2.0.0 + resolution: "parse-author@npm:2.0.0" + dependencies: + author-regex: "npm:^1.0.0" + checksum: 10c0/8b4c19523588a4271c89f64e8167be7c80b4765059c865d38a996c37d080c7e5123e3e2d07d47290891628ad27f4dfb692e3b61156c52fcc0af6cdce3ed57afd + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b + languageName: node + linkType: hard + +"path-exists@npm:^5.0.0": + version: 5.0.0 + resolution: "path-exists@npm:5.0.0" + checksum: 10c0/b170f3060b31604cde93eefdb7392b89d832dfbc1bed717c9718cbe0f230c1669b7e75f87e19901da2250b84d092989a0f9e44d2ef41deb09aa3ad28e691a40a + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c + languageName: node + linkType: hard + +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 + languageName: node + linkType: hard + +"picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 + languageName: node + linkType: hard + +"picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be + languageName: node + linkType: hard + +"picomatch@npm:^4.0.2": + version: 4.0.2 + resolution: "picomatch@npm:4.0.2" + checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc + languageName: node + linkType: hard + +"pixtimerPro@workspace:.": + version: 0.0.0-use.local + resolution: "pixtimerPro@workspace:." + dependencies: + "@companion-module/base": "npm:~1.11.3" + "@companion-module/tools": "npm:^2.3.0" + prettier: "npm:^3.5.3" + languageName: unknown + linkType: soft + +"pkg-dir@npm:^4.2.0": + version: 4.2.0 + resolution: "pkg-dir@npm:4.2.0" + dependencies: + find-up: "npm:^4.0.0" + checksum: 10c0/c56bda7769e04907a88423feb320babaed0711af8c436ce3e56763ab1021ba107c7b0cafb11cde7529f669cfc22bffcaebffb573645cbd63842ea9fb17cd7728 + languageName: node + linkType: hard + +"prettier-linter-helpers@npm:^1.0.0": + version: 1.0.0 + resolution: "prettier-linter-helpers@npm:1.0.0" + dependencies: + fast-diff: "npm:^1.1.2" + checksum: 10c0/81e0027d731b7b3697ccd2129470ed9913ecb111e4ec175a12f0fcfab0096516373bf0af2fef132af50cafb0a905b74ff57996d615f59512bb9ac7378fcc64ab + languageName: node + linkType: hard + +"prettier@npm:^3.5.3": + version: 3.5.3 + resolution: "prettier@npm:3.5.3" + bin: + prettier: bin/prettier.cjs + checksum: 10c0/3880cb90b9dc0635819ab52ff571518c35bd7f15a6e80a2054c05dbc8a3aa6e74f135519e91197de63705bcb38388ded7e7230e2178432a1468005406238b877 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 + languageName: node + linkType: hard + +"randombytes@npm:^2.1.0": + version: 2.1.0 + resolution: "randombytes@npm:2.1.0" + dependencies: + safe-buffer: "npm:^5.1.0" + checksum: 10c0/50395efda7a8c94f5dffab564f9ff89736064d32addf0cc7e8bf5e4166f09f8ded7a0849ca6c2d2a59478f7d90f78f20d8048bca3cdf8be09d8e8a10790388f3 + languageName: node + linkType: hard + +"rechoir@npm:^0.8.0": + version: 0.8.0 + resolution: "rechoir@npm:0.8.0" + dependencies: + resolve: "npm:^1.20.0" + checksum: 10c0/1a30074124a22abbd5d44d802dac26407fa72a0a95f162aa5504ba8246bc5452f8b1a027b154d9bdbabcd8764920ff9333d934c46a8f17479c8912e92332f3ff + languageName: node + linkType: hard + +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: 10c0/aaa267e0c5b022fc5fd4eef49d8285086b15f2a1c54b28240fdf03599cbd9c26049fee3eab894f2e1f6ca65e513b030a7c264201e3f005601e80c49fb2937ce2 + languageName: node + linkType: hard + +"resolve-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-cwd@npm:3.0.0" + dependencies: + resolve-from: "npm:^5.0.0" + checksum: 10c0/e608a3ebd15356264653c32d7ecbc8fd702f94c6703ea4ac2fb81d9c359180cba0ae2e6b71faa446631ed6145454d5a56b227efc33a2d40638ac13f8beb20ee4 + languageName: node + linkType: hard + +"resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 10c0/b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 + languageName: node + linkType: hard + +"resolve-pkg-maps@npm:^1.0.0": + version: 1.0.0 + resolution: "resolve-pkg-maps@npm:1.0.0" + checksum: 10c0/fb8f7bbe2ca281a73b7ef423a1cbc786fb244bd7a95cbe5c3fba25b27d327150beca8ba02f622baea65919a57e061eb5005204daa5f93ed590d9b77463a567ab + languageName: node + linkType: hard + +"resolve@npm:^1.20.0": + version: 1.22.2 + resolution: "resolve@npm:1.22.2" + dependencies: + is-core-module: "npm:^2.11.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/f9f424a8117d1c68371b4fbc64e6ac045115a3beacc4bd3617b751f7624b69ad40c47dc995585c7f13d4a09723a8f167847defb7d39fad70b0d43bbba05ff851 + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A^1.20.0#optional!builtin": + version: 1.22.2 + resolution: "resolve@patch:resolve@npm%3A1.22.2#optional!builtin::version=1.22.2&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.11.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/dcf068c4391941734efda06b6f778c013fd349cd4340f126de17c265a7b006c67de7e80e7aa06ecd29f3922e49f5561622b9faf98531f16aa9a896d22148c661 + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: 10c0/c19ef26e4e188f408922c46f7ff480d38e8dfc55d448310dfb518736b23ed2c4f547fb64a6ed5bdba92cd7e7ddc889d36ff78f794816d5e71498d645ef476107 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: "npm:^1.2.2" + checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 + languageName: node + linkType: hard + +"safe-buffer@npm:^5.1.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 + languageName: node + linkType: hard + +"schema-utils@npm:^4.3.0, schema-utils@npm:^4.3.2": + version: 4.3.2 + resolution: "schema-utils@npm:4.3.2" + dependencies: + "@types/json-schema": "npm:^7.0.9" + ajv: "npm:^8.9.0" + ajv-formats: "npm:^2.1.1" + ajv-keywords: "npm:^5.1.0" + checksum: 10c0/981632f9bf59f35b15a9bcdac671dd183f4946fe4b055ae71a301e66a9797b95e5dd450de581eb6cca56fb6583ce8f24d67b2d9f8e1b2936612209697f6c277e + languageName: node + linkType: hard + +"semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.3, semver@npm:^7.7.1": + version: 7.7.2 + resolution: "semver@npm:7.7.2" + bin: + semver: bin/semver.js + checksum: 10c0/aca305edfbf2383c22571cb7714f48cadc7ac95371b4b52362fb8eeffdfbc0de0669368b82b2b15978f8848f01d7114da65697e56cd8c37b0dab8c58e543f9ea + languageName: node + linkType: hard + +"serialize-javascript@npm:^6.0.2": + version: 6.0.2 + resolution: "serialize-javascript@npm:6.0.2" + dependencies: + randombytes: "npm:^2.1.0" + checksum: 10c0/2dd09ef4b65a1289ba24a788b1423a035581bef60817bea1f01eda8e3bda623f86357665fe7ac1b50f6d4f583f97db9615b3f07b2a2e8cbcb75033965f771dd2 + languageName: node + linkType: hard + +"shallow-clone@npm:^3.0.0": + version: 3.0.1 + resolution: "shallow-clone@npm:3.0.1" + dependencies: + kind-of: "npm:^6.0.2" + checksum: 10c0/7bab09613a1b9f480c85a9823aebec533015579fa055ba6634aa56ba1f984380670eaf33b8217502931872aa1401c9fcadaa15f9f604d631536df475b05bcf1e + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: "npm:^3.0.0" + checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 + languageName: node + linkType: hard + +"source-map-support@npm:~0.5.20": + version: 0.5.21 + resolution: "source-map-support@npm:0.5.21" + dependencies: + buffer-from: "npm:^1.0.0" + source-map: "npm:^0.6.0" + checksum: 10c0/9ee09942f415e0f721d6daad3917ec1516af746a8120bba7bb56278707a37f1eb8642bde456e98454b8a885023af81a16e646869975f06afc1a711fb90484e7d + languageName: node + linkType: hard + +"source-map@npm:^0.6.0": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 + languageName: node + linkType: hard + +"supports-color@npm:^8.0.0": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/ea1d3c275dd604c974670f63943ed9bd83623edc102430c05adb8efc56ba492746b6e95386e7831b872ec3807fd89dd8eb43f735195f37b5ec343e4234cc7e89 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 + languageName: node + linkType: hard + +"synckit@npm:^0.11.7": + version: 0.11.8 + resolution: "synckit@npm:0.11.8" + dependencies: + "@pkgr/core": "npm:^0.2.4" + checksum: 10c0/a1de5131ee527512afcaafceb2399b2f3e63678e56b831e1cb2dc7019c972a8b654703a3b94ef4166868f87eb984ea252b467c9d9e486b018ec2e6a55c24dfd8 + languageName: node + linkType: hard + +"tapable@npm:^2.1.1, tapable@npm:^2.2.0": + version: 2.2.1 + resolution: "tapable@npm:2.2.1" + checksum: 10c0/bc40e6efe1e554d075469cedaba69a30eeb373552aaf41caeaaa45bf56ffacc2674261b106245bd566b35d8f3329b52d838e851ee0a852120acae26e622925c9 + languageName: node + linkType: hard + +"tar@npm:^7.4.3": + version: 7.4.3 + resolution: "tar@npm:7.4.3" + dependencies: + "@isaacs/fs-minipass": "npm:^4.0.0" + chownr: "npm:^3.0.0" + minipass: "npm:^7.1.2" + minizlib: "npm:^3.0.1" + mkdirp: "npm:^3.0.1" + yallist: "npm:^5.0.0" + checksum: 10c0/d4679609bb2a9b48eeaf84632b6d844128d2412b95b6de07d53d8ee8baf4ca0857c9331dfa510390a0727b550fd543d4d1a10995ad86cdf078423fbb8d99831d + languageName: node + linkType: hard + +"terser-webpack-plugin@npm:^5.3.11": + version: 5.3.14 + resolution: "terser-webpack-plugin@npm:5.3.14" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.25" + jest-worker: "npm:^27.4.5" + schema-utils: "npm:^4.3.0" + serialize-javascript: "npm:^6.0.2" + terser: "npm:^5.31.1" + peerDependencies: + webpack: ^5.1.0 + peerDependenciesMeta: + "@swc/core": + optional: true + esbuild: + optional: true + uglify-js: + optional: true + checksum: 10c0/9b060947241af43bd6fd728456f60e646186aef492163672a35ad49be6fbc7f63b54a7356c3f6ff40a8f83f00a977edc26f044b8e106cc611c053c8c0eaf8569 + languageName: node + linkType: hard + +"terser@npm:^5.31.1": + version: 5.43.0 + resolution: "terser@npm:5.43.0" + dependencies: + "@jridgewell/source-map": "npm:^0.3.3" + acorn: "npm:^8.14.0" + commander: "npm:^2.20.0" + source-map-support: "npm:~0.5.20" + bin: + terser: bin/terser + checksum: 10c0/9bc6ef2ad20a6f12328b28b4a75f58095ba726a586f22036a27899178eebb7640a281559546a9efddb31a7020287996006d18897b2bd254398b8c3a1cf24969b + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: "npm:^7.0.0" + checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 + languageName: node + linkType: hard + +"ts-api-utils@npm:^2.1.0": + version: 2.1.0 + resolution: "ts-api-utils@npm:2.1.0" + peerDependencies: + typescript: ">=4.8.4" + checksum: 10c0/9806a38adea2db0f6aa217ccc6bc9c391ddba338a9fe3080676d0d50ed806d305bb90e8cef0276e793d28c8a929f400abb184ddd7ff83a416959c0f4d2ce754f + languageName: node + linkType: hard + +"ts-declaration-location@npm:^1.0.6": + version: 1.0.7 + resolution: "ts-declaration-location@npm:1.0.7" + dependencies: + picomatch: "npm:^4.0.2" + peerDependencies: + typescript: ">=4.0.0" + checksum: 10c0/b579b7630907052cc174b051dffdb169424824d887d8fb5abdc61e7ab0eede348c2b71c998727b9e4b314c0436f5003a15bb7eedb1c851afe96e12499f159630 + languageName: node + linkType: hard + +"tslib@npm:^2.8.1": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 + languageName: node + linkType: hard + +"unicorn-magic@npm:^0.1.0": + version: 0.1.0 + resolution: "unicorn-magic@npm:0.1.0" + checksum: 10c0/e4ed0de05b0a05e735c7d8a2930881e5efcfc3ec897204d5d33e7e6247f4c31eac92e383a15d9a6bccb7319b4271ee4bea946e211bf14951fec6ff2cbbb66a92 + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.1.3": + version: 1.1.3 + resolution: "update-browserslist-db@npm:1.1.3" + dependencies: + escalade: "npm:^3.2.0" + picocolors: "npm:^1.1.1" + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 10c0/682e8ecbf9de474a626f6462aa85927936cdd256fe584c6df2508b0df9f7362c44c957e9970df55dfe44d3623807d26316ea2c7d26b80bb76a16c56c37233c32 + languageName: node + linkType: hard + +"watchpack@npm:^2.4.1": + version: 2.4.2 + resolution: "watchpack@npm:2.4.2" + dependencies: + glob-to-regexp: "npm:^0.4.1" + graceful-fs: "npm:^4.1.2" + checksum: 10c0/ec60a5f0e9efaeca0102fd9126346b3b2d523e01c34030d3fddf5813a7125765121ebdc2552981136dcd2c852deb1af0b39340f2fcc235f292db5399d0283577 + languageName: node + linkType: hard + +"webpack-cli@npm:^6.0.1": + version: 6.0.1 + resolution: "webpack-cli@npm:6.0.1" + dependencies: + "@discoveryjs/json-ext": "npm:^0.6.1" + "@webpack-cli/configtest": "npm:^3.0.1" + "@webpack-cli/info": "npm:^3.0.1" + "@webpack-cli/serve": "npm:^3.0.1" + colorette: "npm:^2.0.14" + commander: "npm:^12.1.0" + cross-spawn: "npm:^7.0.3" + envinfo: "npm:^7.14.0" + fastest-levenshtein: "npm:^1.0.12" + import-local: "npm:^3.0.2" + interpret: "npm:^3.1.1" + rechoir: "npm:^0.8.0" + webpack-merge: "npm:^6.0.1" + peerDependencies: + webpack: ^5.82.0 + peerDependenciesMeta: + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + bin: + webpack-cli: ./bin/cli.js + checksum: 10c0/2aaca78e277427f03f528602abd707d224696048fb46286ea636c7975592409c4381ca94d68bbbb3900f195ca97f256e619583e8feb34a80da531461323bf3e2 + languageName: node + linkType: hard + +"webpack-merge@npm:^6.0.1": + version: 6.0.1 + resolution: "webpack-merge@npm:6.0.1" + dependencies: + clone-deep: "npm:^4.0.1" + flat: "npm:^5.0.2" + wildcard: "npm:^2.0.1" + checksum: 10c0/bf1429567858b353641801b8a2696ca0aac270fc8c55d4de8a7b586fe07d27fdcfc83099a98ab47e6162383db8dd63bb8cc25b1beb2ec82150422eec843b0dc0 + languageName: node + linkType: hard + +"webpack-sources@npm:^3.2.3": + version: 3.2.3 + resolution: "webpack-sources@npm:3.2.3" + checksum: 10c0/2ef63d77c4fad39de4a6db17323d75eb92897b32674e97d76f0a1e87c003882fc038571266ad0ef581ac734cbe20952912aaa26155f1905e96ce251adbb1eb4e + languageName: node + linkType: hard + +"webpack@npm:^5.97.1": + version: 5.99.9 + resolution: "webpack@npm:5.99.9" + dependencies: + "@types/eslint-scope": "npm:^3.7.7" + "@types/estree": "npm:^1.0.6" + "@types/json-schema": "npm:^7.0.15" + "@webassemblyjs/ast": "npm:^1.14.1" + "@webassemblyjs/wasm-edit": "npm:^1.14.1" + "@webassemblyjs/wasm-parser": "npm:^1.14.1" + acorn: "npm:^8.14.0" + browserslist: "npm:^4.24.0" + chrome-trace-event: "npm:^1.0.2" + enhanced-resolve: "npm:^5.17.1" + es-module-lexer: "npm:^1.2.1" + eslint-scope: "npm:5.1.1" + events: "npm:^3.2.0" + glob-to-regexp: "npm:^0.4.1" + graceful-fs: "npm:^4.2.11" + json-parse-even-better-errors: "npm:^2.3.1" + loader-runner: "npm:^4.2.0" + mime-types: "npm:^2.1.27" + neo-async: "npm:^2.6.2" + schema-utils: "npm:^4.3.2" + tapable: "npm:^2.1.1" + terser-webpack-plugin: "npm:^5.3.11" + watchpack: "npm:^2.4.1" + webpack-sources: "npm:^3.2.3" + peerDependenciesMeta: + webpack-cli: + optional: true + bin: + webpack: bin/webpack.js + checksum: 10c0/34ec3f19b50bccaf27929e5e5b901b25047f2d414acba7d0967dc98eb4f404d107fb1a4b63095edbca2b006ff5815f1720b131e10b20664b074dfc86b7ffa717 + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f + languageName: node + linkType: hard + +"wildcard@npm:^2.0.1": + version: 2.0.1 + resolution: "wildcard@npm:2.0.1" + checksum: 10c0/08f70cd97dd9a20aea280847a1fe8148e17cae7d231640e41eb26d2388697cbe65b67fd9e68715251c39b080c5ae4f76d71a9a69fa101d897273efdfb1b58bf7 + languageName: node + linkType: hard + +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 + languageName: node + linkType: hard + +"yocto-queue@npm:^1.0.0": + version: 1.0.0 + resolution: "yocto-queue@npm:1.0.0" + checksum: 10c0/856117aa15cf5103d2a2fb173f0ab4acb12b4b4d0ed3ab249fdbbf612e55d1cadfd27a6110940e24746fb0a78cf640b522cc8bca76f30a3b00b66e90cf82abe0 + languageName: node + linkType: hard + +"zx@npm:^8.3.2": + version: 8.5.5 + resolution: "zx@npm:8.5.5" + bin: + zx: build/cli.js + checksum: 10c0/9c69e5a75b49b796211812625564980d0a86079a11011b397c4c77d256e3fe0a76b5ec7134db4d598e156f84e07981d8692544715feb8ff77adfae60faa356fc + languageName: node + linkType: hard