iobroker.admin 7.4.4 → 7.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -8
- package/adminWww/asset-manifest.json +37 -37
- package/adminWww/index.html +1 -1
- package/adminWww/static/js/1737.08641cc2.chunk.js +3 -0
- package/adminWww/static/js/1737.08641cc2.chunk.js.map +1 -0
- package/adminWww/static/js/1892.3c30ecff.chunk.js.map +1 -1
- package/adminWww/static/js/{288.20da45b9.chunk.js → 288.23e8413f.chunk.js} +2 -2
- package/adminWww/static/js/288.23e8413f.chunk.js.map +1 -0
- package/adminWww/static/js/2930.8e88fcf2.chunk.js.LICENSE.txt +1 -1
- package/adminWww/static/js/2930.8e88fcf2.chunk.js.map +1 -1
- package/adminWww/static/js/3363.a4c36649.chunk.js.map +1 -1
- package/adminWww/static/js/3834.d81ffc60.chunk.js +2 -0
- package/adminWww/static/js/3834.d81ffc60.chunk.js.map +1 -0
- package/adminWww/static/js/4289.cbde8e52.chunk.js +2 -0
- package/adminWww/static/js/4289.cbde8e52.chunk.js.map +1 -0
- package/adminWww/static/js/471.8a82d825.chunk.js.map +1 -1
- package/adminWww/static/js/4720.6112531a.chunk.js +2 -0
- package/adminWww/static/js/4720.6112531a.chunk.js.map +1 -0
- package/adminWww/static/js/5503.a4ce73d8.chunk.js +3 -0
- package/adminWww/static/js/5503.a4ce73d8.chunk.js.map +1 -0
- package/adminWww/static/js/5687.d7fa0a4e.chunk.js +2 -0
- package/adminWww/static/js/5687.d7fa0a4e.chunk.js.map +1 -0
- package/adminWww/static/js/{6361.48a28196.chunk.js → 6361.ec86271d.chunk.js} +2 -2
- package/adminWww/static/js/6361.ec86271d.chunk.js.map +1 -0
- package/adminWww/static/js/6603.ee9b0df5.chunk.js +3 -0
- package/adminWww/static/js/6603.ee9b0df5.chunk.js.map +1 -0
- package/adminWww/static/js/6853.ff130602.chunk.js +2 -0
- package/adminWww/static/js/6853.ff130602.chunk.js.map +1 -0
- package/adminWww/static/js/7137.7b5ca6b5.chunk.js.map +1 -1
- package/adminWww/static/js/7424.223daaa3.chunk.js +2 -0
- package/adminWww/static/js/7424.223daaa3.chunk.js.map +1 -0
- package/adminWww/static/js/{8144.ae502bba.chunk.js → 8144.5989b02c.chunk.js} +3 -3
- package/adminWww/static/js/8144.5989b02c.chunk.js.map +1 -0
- package/adminWww/static/js/8387.2cb15163.chunk.js.map +1 -1
- package/adminWww/static/js/9072.4505ce12.chunk.js +2 -0
- package/adminWww/static/js/9072.4505ce12.chunk.js.map +1 -0
- package/adminWww/static/js/9086.a4fdc813.chunk.js +2 -0
- package/adminWww/static/js/9086.a4fdc813.chunk.js.map +1 -0
- package/adminWww/static/js/9228.cf388444.chunk.js +3 -0
- package/adminWww/static/js/9228.cf388444.chunk.js.map +1 -0
- package/adminWww/static/js/9701.2178b9bd.chunk.js +2 -0
- package/adminWww/static/js/9701.2178b9bd.chunk.js.map +1 -0
- package/adminWww/static/js/9731.b09a7023.chunk.js +3 -0
- package/adminWww/static/js/{9731.f67b583c.chunk.js.LICENSE.txt → 9731.b09a7023.chunk.js.LICENSE.txt} +1 -1
- package/adminWww/static/js/9731.b09a7023.chunk.js.map +1 -0
- package/adminWww/static/js/main.a833ed54.js +2 -0
- package/adminWww/static/js/main.a833ed54.js.map +1 -0
- package/build-backend/main.js +1 -1
- package/build-backend/main.js.map +1 -1
- package/io-package.json +27 -27
- package/package.json +5 -5
- package/adminWww/static/js/288.20da45b9.chunk.js.map +0 -1
- package/adminWww/static/js/38.e125c16b.chunk.js +0 -3
- package/adminWww/static/js/38.e125c16b.chunk.js.map +0 -1
- package/adminWww/static/js/3834.2e04eb51.chunk.js +0 -2
- package/adminWww/static/js/3834.2e04eb51.chunk.js.map +0 -1
- package/adminWww/static/js/4289.e9a5790f.chunk.js +0 -2
- package/adminWww/static/js/4289.e9a5790f.chunk.js.map +0 -1
- package/adminWww/static/js/4720.4bbc23ec.chunk.js +0 -2
- package/adminWww/static/js/4720.4bbc23ec.chunk.js.map +0 -1
- package/adminWww/static/js/5503.751d48e4.chunk.js +0 -3
- package/adminWww/static/js/5503.751d48e4.chunk.js.map +0 -1
- package/adminWww/static/js/5687.c249e41f.chunk.js +0 -2
- package/adminWww/static/js/5687.c249e41f.chunk.js.map +0 -1
- package/adminWww/static/js/6361.48a28196.chunk.js.map +0 -1
- package/adminWww/static/js/6603.614b4df4.chunk.js +0 -3
- package/adminWww/static/js/6603.614b4df4.chunk.js.map +0 -1
- package/adminWww/static/js/6853.f9170a75.chunk.js +0 -2
- package/adminWww/static/js/6853.f9170a75.chunk.js.map +0 -1
- package/adminWww/static/js/7424.98e61818.chunk.js +0 -2
- package/adminWww/static/js/7424.98e61818.chunk.js.map +0 -1
- package/adminWww/static/js/7863.92e61020.chunk.js +0 -2
- package/adminWww/static/js/7863.92e61020.chunk.js.map +0 -1
- package/adminWww/static/js/8144.ae502bba.chunk.js.map +0 -1
- package/adminWww/static/js/9072.4eaaedc2.chunk.js +0 -2
- package/adminWww/static/js/9072.4eaaedc2.chunk.js.map +0 -1
- package/adminWww/static/js/9228.3ce3911c.chunk.js +0 -3
- package/adminWww/static/js/9228.3ce3911c.chunk.js.map +0 -1
- package/adminWww/static/js/9701.b2813984.chunk.js +0 -2
- package/adminWww/static/js/9701.b2813984.chunk.js.map +0 -1
- package/adminWww/static/js/9731.f67b583c.chunk.js +0 -3
- package/adminWww/static/js/9731.f67b583c.chunk.js.map +0 -1
- package/adminWww/static/js/main.11639e29.js +0 -2
- package/adminWww/static/js/main.11639e29.js.map +0 -1
- /package/adminWww/static/js/{38.e125c16b.chunk.js.LICENSE.txt → 1737.08641cc2.chunk.js.LICENSE.txt} +0 -0
- /package/adminWww/static/js/{5503.751d48e4.chunk.js.LICENSE.txt → 5503.a4ce73d8.chunk.js.LICENSE.txt} +0 -0
- /package/adminWww/static/js/{6603.614b4df4.chunk.js.LICENSE.txt → 6603.ee9b0df5.chunk.js.LICENSE.txt} +0 -0
- /package/adminWww/static/js/{8144.ae502bba.chunk.js.LICENSE.txt → 8144.5989b02c.chunk.js.LICENSE.txt} +0 -0
- /package/adminWww/static/js/{9228.3ce3911c.chunk.js.LICENSE.txt → 9228.cf388444.chunk.js.LICENSE.txt} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"static/js/288.20da45b9.chunk.js","mappings":"gIA0De,MAAMA,EAiBPC,WAAAA,CAAYC,EAAyBC,EAAcC,GAAkC,KAhB5EF,YAAM,OAENG,SAAoD,GAAG,KAElEC,QAAuE,KAAK,KAE1EC,eAAS,OAETC,QAAuD,KAAK,KAErDL,UAAI,OAEFC,gBAAU,OAErBK,aAAuB,EAAM,KA4BrCC,oBAAsB,CAACC,EAAwBC,KAI3C,GAHAC,KAAKL,QAAUK,KAAKL,SAAW,CAAC,EAG5BK,KAAKC,cAAcH,EAAIC,GAAM,CAC7B,IAAIG,EACAC,EACJ,GAAIJ,EAIA,GAHwB,YAApBC,KAAKT,YAAgD,aAApBS,KAAKT,YACtCa,EAAAA,EAAWC,WAAWN,GAEtBC,KAAKL,QAAQG,GAAK,CAClB,GAAIQ,KAAKC,UAAUP,KAAKL,QAAQG,MAASQ,KAAKC,UAAUR,GAKpD,OAJAG,EAAO,UACPF,KAAKL,QAAQG,GAAMC,CAK3B,MACIG,EAAO,MACPF,KAAKL,QAAQG,GAAMC,MAEpB,KAAIC,KAAKL,QAAQG,GAMpB,OALAI,EAAO,UACPC,EAASH,KAAKL,QAAQG,UACfE,KAAKL,QAAQG,EAIxB,CAEAE,KAAKJ,aAAc,EAEnBI,KAAKQ,eAAeV,EAAIC,GAExBC,KAAKR,SAASiB,SAAQC,GAClBA,EAAG,CACC,CACIZ,KACAC,MACAG,OACAC,aAIhB,GACF,KAmCFQ,kBAAqBC,IACbA,IAAgBZ,KAAKN,WACrBM,KAAKN,WAAY,EAEbM,KAAKR,SAASqB,QACdb,KAAKX,OACAyB,gBAAgBd,KAAKV,KAAI,GAAAyB,OAAMf,KAAKV,KAAI,MAAO,IAAKU,KAAKH,qBACzDmB,MAAK,KAEGhB,KAAKiB,YAAW,GAAMD,MAAKrB,IACxBA,GACAuB,OAAOC,KAAKxB,GAASc,SAAQX,GACzBE,KAAKH,oBAAoBC,EAA0BH,EAAQG,KAEnE,GACF,IAELsB,OAAMC,GAAKC,OAAOC,MAAM,+BAADR,OAAgCf,KAAKV,KAAI,OAAAyB,OAAMM,MAE/ErB,KAAKwB,uBAAsB,KACnBZ,GAAeZ,KAAKN,YAC5BM,KAAKN,WAAY,EACjBM,KAAKwB,uBAAsB,GAC/B,EAlIAxB,KAAKX,OAASA,EACdW,KAAKV,KAAOA,EACZU,KAAKT,WAAaA,EAElBF,EAAOoC,0BAA0BzB,KAAKW,mBAEtCX,KAAKN,UAAYM,KAAKX,OAAOuB,cACzBZ,KAAKN,WACLM,KAAKW,mBAAkB,EAE/B,CAEUV,aAAAA,CAAcH,EAAYC,GAChC,OAAOD,EAAG4B,WAAW,GAADX,OAAIf,KAAKV,KAAI,SAAUS,GAAOA,EAAIG,OAASF,KAAKT,WACxE,CAGUiB,cAAAA,CAAemB,EAAaC,GAClC,CAGJC,aAAAA,GACI,OAAO7B,KAAKJ,WAChB,CAmDAqB,UAAAA,CAAWa,GAIP,OAHAA,EAASA,GAAU9B,KAAKJ,YACxBI,KAAKJ,aAAc,GAEdkC,GAAU9B,KAAKP,mBAAmBsC,UAIvC/B,KAAKP,QAAUO,KAAKX,OACf2C,oBACGhC,KAAKT,WACLS,KAAKV,KAAI,GAAAyB,OAAMf,KAAKV,KAAI,KAAM,GAC9BU,KAAKV,KAAI,GAAAyB,OAAMf,KAAKV,KAAI,WAAY,UAEvC0B,MAAKrB,IACFK,KAAKL,QAAUA,EACS,YAApBK,KAAKT,YAAgD,aAApBS,KAAKT,YACtC2B,OAAOC,KAAKnB,KAAKL,SAASc,SAAQX,GAAMM,EAAAA,EAAWC,WAAWL,KAAKL,QAAQG,MAGxEE,KAAKL,WAEfyB,OAAOC,IACJC,OAAOC,MAAM,8BAADR,OAA+Bf,KAAKT,WAAU,iBAAAwB,OAAgBf,KAAKV,KAAI,OAAAyB,OAAMM,IAClF,SAnBJrB,KAAKP,OAuBpB,CAGU+B,qBAAAA,CAAsBS,GAA8B,CA4B9DC,eAAAA,CAAgBxB,EAAyCyB,GAChDnC,KAAKR,SAAS4C,SAAS1B,KACxBV,KAAKR,SAAS6C,KAAK3B,GAEU,IAAzBV,KAAKR,SAASqB,QAAgBb,KAAKN,WACnCM,KAAKX,OACAyB,gBAAgBd,KAAKV,KAAI,GAAAyB,OAAMf,KAAKV,KAAI,MAAO,IAAKU,KAAKH,qBACzDmB,MAAK,KACGmB,GAEInC,KAAKiB,YAAW,GAAMD,MAAKrB,IACxBA,GACAuB,OAAOC,KAAKxB,GAASc,SAAQX,GACzBE,KAAKH,oBAAoBC,EAA0BH,EAAQG,KAEnE,GAER,IAEHsB,OAAMC,GAAKC,OAAOC,MAAM,gCAADR,OAAiCf,KAAKV,KAAI,OAAAyB,OAAMM,MAGxF,CAEAiB,iBAAAA,CAAkB5B,GACd,MAAM6B,EAAMvC,KAAKR,SAASgD,QAAQ9B,IACrB,IAAT6B,IACAvC,KAAKR,SAASiD,OAAOF,EAAK,IACrBvC,KAAKR,SAASqB,QAAUb,KAAKN,WAC9BM,KAAKX,OACAqD,kBAAkB1C,KAAKV,KAAI,GAAAyB,OAAMf,KAAKV,KAAI,MAAO,IAAKU,KAAKH,qBAC3DuB,OAAMC,GAAKC,OAAOC,MAAM,oCAADR,OAAqCf,KAAKV,KAAI,OAAAyB,OAAMM,MAG5F,CAEAsB,OAAAA,GACI3C,KAAKR,SAASiB,SAAQC,GAAMV,KAAKsC,kBAAkB5B,KACnDV,KAAKX,OAAOuD,4BAA4B5C,KAAKW,kBACjD,E,sJC3OG,MAAMkC,GAAiBC,EAAAA,EAAAA,eAAyB,CACnDC,YAAa,EACbC,eAAgB,EAEhBC,MAAO,KACPC,WAAY,KACZC,UAAW,OAGR,SAASC,EAAsBC,GAAwE,IAAvE,SAAEC,GAAqDD,EAC1F,MAAOE,EAAcC,IAAYC,EAAAA,EAAAA,UAAoB,CACjDV,YAAa,EACbC,eAAgB,EAEhBC,MAAO,KACPC,WAAY,KACZC,UAAW,OAGTO,GAAkBC,EAAAA,EAAAA,UACpB,IAAO5D,IACHyD,GAASI,GAEL1C,OAAOC,KAAKyC,GAAW/C,SAAWK,OAAOC,KAAKpB,GAAKc,QAAMgD,EAAAA,EAAAA,GAAA,GAC9C9D,IACL8D,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACKD,GAAc7D,IAC5B,GAEL,CAACyD,IAoCL,OAjCAM,EAAAA,EAAAA,YAAU,KACN,GAAIP,EAAaN,MAAO,CACpB,MAAMc,EAAsBR,EAAaL,WAAW,iBAAiBc,QACrE,IAAIC,EAAQ,EACZV,EAAaN,MAAMxC,SAAQyD,IACnB9D,EAAAA,EAAW+D,gBAAgBD,EAAQE,OAAOC,iBAAkBN,IAC5DE,GACJ,IAEJP,EAAgB,CAAEX,YAAakB,GACnC,CAEA,GAAIV,EAAaJ,UAAW,CACxB,IAAIc,EAAQ,EACZ/C,OAAOC,KAAKoC,EAAaJ,WAAW1C,SAAQyD,IACxC,MAAMI,EAAaf,EAAaJ,UAAUe,GACpCK,EAAUhB,EAAaL,WAAWgB,GAExB,kBAAZA,GACY,UAAZA,GACU,OAAVI,QAAU,IAAVA,GAAAA,EAAYN,SACL,OAAPO,QAAO,IAAPA,GAAAA,EAASP,SACTM,EAAWE,gBAAkBD,EAAQP,SACrC5D,EAAAA,EAAW+D,gBAAgBG,EAAWN,QAASO,EAAQP,UAEvDC,GACJ,IAGJP,EAAgB,CAAEV,eAAgBiB,GACtC,IACD,CAACP,EAAiBH,EAAaN,MAAOM,EAAaJ,UAAWI,EAAaL,cAEvEuB,EAAAA,EAAAA,KAAC5B,EAAe6B,SAAQ,CAACC,MAAOpB,EAAaD,SAAEA,GAC1D,C,4HC3DA,MAAMsB,EAA8B,CAChCC,QAAS,CACLC,SAAU,WAEVC,QAAS,QACTC,MAAO,QAMXC,QAAS,CACLH,SAAU,WACVI,eAAgB,gBAChBH,QAAS,OACTC,MAAO,OACPG,WAAY,SACZC,QAAS,GACT,uCAAwC,CACpCC,SAAU,SAGlBC,UAAW,CACPC,MAAO,iBACPT,SAAU,WACVU,IAAK,EACLC,MAAO,GACP,uCAAwC,CACpCC,SAAU,UAGlBC,cAAe,CACXC,WAAY,YACZF,SAAU,GACVG,GAAI,OACJC,GAAI,OACJd,MAAO,OACPD,QAAS,QACTgB,WAAY,WACZ,uCAAwC,CACpCL,SAAU,QACVG,GAAI,KAyEhB,MAAMG,UAA4BC,EAAAA,UAG9B7G,WAAAA,CAAY8G,GACRC,MAAMD,GAAO,KAHTE,UAAoB,EAAE,KAmD9BC,eAAiB,CAACvG,EAAYwG,KAC1B,GAAIxG,IAAE,GAAAiB,OAAQf,KAAKkG,MAAMK,WAAU,WAAYD,GAAStG,KAAKsG,MAAME,UAAYF,EAAMG,IAAK,CACtF,GAAIH,EAAMG,IAAK,CACX,GAAIzG,KAAKoG,WAAaM,KAAKC,MAAQ3G,KAAKoG,UAAY,IAEhD,OAEJpG,KAAKoG,UAAYM,KAAKC,KAC1B,CACA3G,KAAKwD,SAAS,CAAEgD,QAASF,EAAMG,MAAO,IAAMzG,KAAK4G,UACrD,GAxDA5G,KAAKsG,MAAQ,CACTE,OAAO,EACPK,KAAM,CAAC,EACPC,OAAQ,KACRC,WAAY,EAEpB,CAEA,uBAAMC,GAAoC,IAADC,EAAAC,EACrC,GAAkC,QAAlCD,EAAIjH,KAAKkG,MAAMrB,QAAQsC,mBAAW,IAAAF,GAAO,QAAPC,EAA9BD,EAAgCG,aAAK,IAAAF,GAArCA,EAAuCG,aAAc,CAErD,MAAMb,QAAcxG,KAAKkG,MAAM7G,OAAOiI,SAAS,GAADvG,OAAIf,KAAKkG,MAAMK,WAAU,WACvEvG,KAAKoG,UAAiB,OAALI,QAAK,IAALA,GAAAA,EAAOC,IAAMC,KAAKC,MAAQ,EAC3C3G,KAAKwD,SAAS,CAAEgD,QAAc,OAALA,QAAK,IAALA,IAAAA,EAAOC,OAAO,IAAMzG,KAAK4G,iBAC5C5G,KAAKkG,MAAM7G,OAAOkI,eAAe,GAADxG,OAAIf,KAAKkG,MAAMK,WAAU,UAAUvG,KAAKqG,eAClF,CACJ,CAEAO,MAAAA,GAAgB,IAADY,EAAAC,EACX,GAAIzH,KAAKsG,MAAME,OAAuC,QAAlCgB,EAAIxH,KAAKkG,MAAMrB,QAAQsC,mBAAW,IAAAK,GAAO,QAAPC,EAA9BD,EAAgCJ,aAAK,IAAAK,GAArCA,EAAuCJ,aAAc,CAAC,IAADK,EAAAC,EACzE,MAAMN,EAAmC/G,KAAKsH,MAC1CtH,KAAKC,UAAwC,QAA/BmH,EAAC1H,KAAKkG,MAAMrB,QAAQsC,mBAAW,IAAAO,GAAO,QAAPC,EAA9BD,EAAgCN,aAAK,IAAAO,OAAP,EAA9BA,EAAuCN,eAGtDA,EAAaQ,uBACNR,EAAaQ,eAGnB7H,KAAKkG,MAAM7G,OACXyI,OACG9H,KAAKkG,MAAMK,WAAWwB,QAAQ,kBAAmB,IACjD,8BACAV,GAEHrG,MAAMgH,IACCA,GACAhI,KAAKwD,SAAS,CACVsD,OAAQkB,EAAOlB,OACfD,KAAMmB,EAAOnB,MAAQ7G,KAAKsG,MAAMO,KAChCE,WAAY/G,KAAKsG,MAAMS,WAAa,GAE5C,GAEZ,CACJ,CAeAkB,eAAAA,GACI,IAAKjI,KAAKsG,MAAMQ,SAAW9G,KAAKsG,MAAMO,OAAS7G,KAAKsG,MAAME,MAAO,CAAC,IAAD0B,EAAAC,EAC7D,MAAMd,EAA6E,QAAjCa,EAAGlI,KAAKkG,MAAMrB,QAAQsC,mBAAW,IAAAe,GAAO,QAAPC,EAA9BD,EAAgCd,aAAK,IAAAe,OAAP,EAA9BA,EAAuCd,aAC5F,GAAIA,EAAc,CACd,IAAKrH,KAAKsG,MAAME,MAAO,CACnB,MAAMqB,EAA0DR,EAAaQ,eAC7E,GAAIA,EAAgB,CAChB,MAAMO,EACwB,kBAAnBP,EACDA,EACAA,EAAe7H,KAAKkG,MAAM7G,OAAOgJ,aAAeR,EAAeS,GAEzE,OAAO7D,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CAACC,GAAI5D,EAAOK,QAAQ3B,SAAEmF,EAAAA,MAAMC,gBAAgBN,IAC3D,CACA,OAAO3D,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAAArF,SAAEsF,EAAAA,KAAKC,EAAE,0BAC/B,CACA,OAAOpE,EAAAA,EAAAA,KAACqE,EAAAA,eAAc,GAC1B,CAEA,OAAO,IACX,CAEA,MAAO,CAAC,CAAGC,EAAaC,GAAYhJ,KAAKkG,MAAMK,WAAW0C,MAAM,KAEhE,OACIC,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAA7F,SAAA,CACKtD,KAAKsG,MAAM8C,QAAS3E,EAAAA,EAAAA,KAAA,OAAK4E,MAAO,CAAE9D,MAAO,OAAQjC,SAAEtD,KAAKsG,MAAM8C,SAC/D3E,EAAAA,EAAAA,KAAC6E,EAAAA,oBAAmB,CAChBD,MAAO,CAAErE,MAAO,QAChB+B,WAAY/G,KAAKsG,MAAMS,WACvB1H,OAAQW,KAAKkG,MAAM7G,OACnB0J,YAAaA,EACbC,SAAUO,SAASP,EAAU,IAC7BlC,OAAQ9G,KAAKsG,MAAMQ,OACnBD,KAAM7G,KAAKsG,MAAMO,KACjB2C,QAAUJ,GAAoBpJ,KAAKwD,SAAS,CAAE4F,UAC9CK,SAAW5C,GAA8B7G,KAAKwD,SAAS,CAAEqD,SACzD6C,iBAAmBC,IACXA,EAAQ7C,QACR9G,KAAKwD,SAAS,CACVsD,OAAQ6C,EAAQ7C,OAChBD,KAAM8C,EAAQ9C,MAAQ7G,KAAKsG,MAAMO,QAIjB,YAApB8C,EAAQA,SAAyBA,EAAQC,UACzC5J,KAAK4G,SAEe,SAApB+C,EAAQA,SACR3J,KAAKkG,MAAM2D,OAAOF,EACtB,EAEJG,UAAQ,EACRC,UAAW/J,KAAKkG,MAAM6D,UACtBC,UAAWhK,KAAKkG,MAAM8D,UACtBC,MAAOjK,KAAKkG,MAAM+D,MAClBC,aAAclK,KAAKkG,MAAMgE,aACzBC,WAAYnK,KAAKkG,MAAMiE,eAIvC,CAEAC,mBAAAA,GACI,OAAOpK,KAAKkG,MAAMrB,QAAQA,SACtBJ,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CAACC,GAAI5D,EAAOe,cAAcrC,SAAEmF,EAAAA,MAAMC,gBAAgB1I,KAAKkG,MAAMrB,QAAQA,WACzE,IACR,CAEAwF,MAAAA,GACI,OACInB,EAAAA,EAAAA,MAACP,EAAAA,WAAU,CACP2B,UAAU,MACV9B,GAAI5D,EAAOC,QAAQvB,SAAA,EAEnBmB,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CAACC,GAAI5D,EAAOU,UAAUhC,SAAE,IAAIoD,KAAK1G,KAAKkG,MAAMrB,QAAQ0F,IAAIC,mBAC3DxK,KAAKoK,sBACLpK,KAAKiI,oBAGlB,EAGJ,U,wBC9OMrD,EAA8B,CAChCtF,KAAO2K,IAAe,CAClBQ,gBAAiBR,EAAMS,QAAQC,WAAWC,MAC1C5F,MAAO,OACP6F,OAAQ,OACR9F,QAAS,OACT+F,aAAc,MACdC,cAAe,WAEnBH,MAAO,CACHI,SAAU,IACVhG,MAAO,QAEXiG,KAAM,CACFlG,QAAS,QAEbmG,eAAgB,CACZC,SAAU,UAEdC,aAAc,CACVC,UAAW,QAEfC,OAAQ,CACJP,cAAe,UAEnBQ,WAAatB,IAAe,CACxBuB,WAAY,OACZ9F,SAAU,GACVH,MAA8B,SAAvB0E,EAAMS,QAAQe,KAAkB,OAAS,SAEpDC,sBAAwBzB,IAAe,CACnC0B,OAAQ,SACRpG,MAA8B,SAAvB0E,EAAMS,QAAQe,KAAkB,OAAS,SAEpDG,OAAQ,CACJC,WAAY,EACZC,cAAe,EACfhH,SAAU,SACViH,OAAQ,EAERC,OAAQ,GAEZC,KAAM,CACFjH,MAAO,GACP6F,OAAQ,GACRc,OAAQ,SACRO,GAAI,OACJpH,SAAU,WACV,UAAW,CACPqH,QAAS,KACTrH,SAAU,WACVkH,OAAQ,EACRxG,IAAK,EACL4G,KAAM,EACNpH,MAAO,OACP6F,OAAQ,OACRF,WAAY,8CACZ0B,eAAgB,QAChB5B,gBAAiB,SAGzB6B,QAAS,CACLvH,QAAS,OACTI,WAAY,SACZgG,SAAU,SACVnG,MAAO,QAEXuH,WAAY,CACRxH,QAAS,OACTI,WAAY,UAEhBqH,aAAc,CACVC,EAAG,MACH,uCAAwC,CACpCA,EAAG,QAGXC,UAAW,CACP3G,WAAY,SACZoF,SAAU,SACVwB,aAAc,WACd,uCAAwC,CACpCjH,SAAU,UAGlByG,QAAS,CACLhB,SAAU,UAEdyB,YAAa,CACTC,EAAG,MACH,uCAAwC,CACpCnH,SAAU,WAYtB,SAASoH,EAAMzJ,GAA8D,IAA7D,SAAE0J,EAAQ,OAAEC,GAAiC3J,EAAtB6C,GAAK+G,EAAAA,EAAAA,GAAA5J,EAAA6J,GACxC,MAAiB,WAAbH,GAEItI,EAAAA,EAAAA,KAAC0I,EAAAA,eAAQtJ,EAAAA,EAAAA,GAAA,CACL0B,MAAOyH,EAAS,UAAY,aACxB9G,IAKC,SAAb6G,GAEItI,EAAAA,EAAAA,KAAC2I,EAAAA,MAAQvJ,EAAAA,EAAAA,GAAA,CACL0B,MAAM,QACFW,KAMZzB,EAAAA,EAAAA,KAAC4I,EAAAA,SAAWxJ,EAAAA,EAAAA,GAAA,CACRwF,MAAO,CAAE9D,MAAO,YACZW,GAGhB,CAgBA,MAAMoH,EAAWC,IAAA,IAAC,SAAEjK,EAAQ,MAAEkK,EAAK,MAAEC,EAAK,MAAEpE,GAAwBkE,EAAA,OAChE9I,EAAAA,EAAAA,KAAA,OACIiJ,KAAK,WACL5N,GAAE,6BAAAiB,OAA+ByM,GACjC,0CAAAzM,OAAyCyM,GACzCnE,MAAOA,EAAM/F,UAEbmB,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CAACC,GAAIiF,EAAMnK,UACXmB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAAC2B,UAAU,MAAKhH,SAAEA,OAE/B,EAiFV,MA2SA,EA3S4BqK,IAWmB,IAXlB,cACzBC,EAAa,QACbC,EAAO,YACPC,EAAW,WACX3D,EAAU,UACVH,EAAS,UACT+D,EAAS,UACThE,EAAS,MACTE,EAAK,aACLC,EAAY,OACZ7K,GACwBsO,EACxB,MAAOK,EAAOC,IAAYxK,EAAAA,EAAAA,UAAS,KAC5ByK,EAAUC,IAAe1K,EAAAA,EAAAA,UAAmB,KAC5C2K,EAAUC,IAAe5K,EAAAA,EAAAA,UAAS,KAClC6K,EAAcC,IAAmB9K,EAAAA,EAAAA,WAAS,IAC1C+K,EAAUC,IAAehL,EAAAA,EAAAA,UAA2B,CAAC,GAQtDiL,EAAyBC,GAAsB,CAACC,EAAiBC,IACnER,EAAYQ,EAAaF,EAAY,IAEnCG,EAAsB,SAAd9E,EAER+E,IAAiC7N,OAAO8N,OAAOjB,GAAWkB,MAC5DjG,GAAqC,yBAAzBA,EAAS5E,OAAO8K,QAGhCpL,EAAAA,EAAAA,YAAU,KACN,MAAMqL,EAA8B,CAAC,EACrC,IAAIC,EAAW,GAEf,IAAK,MAAOC,EAAMC,KAAgBpO,OAAOqO,QAAQ3B,GAC7C,IAAK,MAAO4B,EAAOC,KAAiBvO,OAAOqO,QAAQD,EAAYtH,QAC3D,GAAc,WAAVwH,EAIJ,IAAK,MAAOE,EAAUC,KAAoBzO,OAAOqO,QAAQE,EAAaG,YAClET,EAAUK,GAASL,EAAUK,IAAU,CAAC,EACxCL,EAAUK,GAAOE,IAAS7L,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAQ8L,GAAe,IAAEN,SAU/D,GALAnO,OAAOC,KAAKgO,GAAWU,KAAIL,GACvBtO,OAAOC,KAAKgO,EAAUK,IAAQK,KAAIX,GAASE,EAAWA,GAAQ,GAAArO,OAAOyO,EAAK,MAAAzO,OAAKmO,OAI/ElB,EAAO,CACP,MAAOwB,EAAON,GAAQlB,EAAM/E,MAAM,MAClC,GAAKkG,EAAUK,IAER,IAAKL,EAAUK,GAAON,GAAO,CAEhC,MAAMY,EAAM5O,OAAOC,KAAKgO,EAAUK,IAAQ,GAEtCvB,EADA6B,EACS,GAAD/O,OAAIyO,EAAK,MAAAzO,OAAK+O,GAEbV,EAEjB,OATInB,EAASmB,EAUjB,MACInB,EAASmB,GAEbX,EAAYU,EAAU,GACvB,CAACpB,EAAWH,EAAeI,IAE9B,MAAO+B,EAAcC,GAAehC,EAAM/E,MAAM,MAC1CgH,EACFF,GAAgBC,EAAcxB,EAASuB,GAAcC,GAAe,KAExE,OACI9G,EAAAA,EAAAA,MAACgH,EAAAA,OAAM,CACHrC,QAASA,IAAMA,IACfsC,MAAM,EACN3H,GAAI,CAAE,qBAAsB5D,EAAOgG,OAAQtH,SAAA,EAE3C4F,EAAAA,EAAAA,MAAA,MAAIG,MAAOzE,EAAO2H,WAAWjJ,SAAA,EACzBmB,EAAAA,EAAAA,KAAC0I,EAAAA,cAAQ,CACL3E,GAAI,CAAEjD,MAAO,gBACb8D,MAAO,CACH3D,SAAU,GACV0K,WAAY,GACZC,YAAa,MAGpBzH,EAAAA,KAAKC,EAAE,iBAENkG,EAUE,MATAtK,EAAAA,EAAAA,KAAC6L,EAAAA,QAAO,CACJ9H,GAAI,CAAE1D,SAAU,WAAYW,MAAO,GAAIF,MAAO,gBAC9CgL,MAAO3H,EAAAA,KAAKC,EACR,8GAEJ2H,UAAW,CAAEC,OAAQ,CAAEjI,GAAI,CAAEkI,cAAe,UAAapN,UAEzDmB,EAAAA,EAAAA,KAAC2I,EAAAA,KAAQ,UAIrB3I,EAAAA,EAAAA,KAACkM,EAAAA,cAAa,CACVtH,OAAKxF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAOe,EAAOqG,MAASrG,EAAOsG,gBACnC0F,UAAQ,EAAAtN,UAER4F,EAAAA,EAAAA,MAACX,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,EAAOtF,KAAKgE,SAAA,EAEhBmB,EAAAA,EAAAA,KAACoM,EAAAA,OAAM,CACH/L,SAAS,SACTS,MAAM,UAASjC,UAEfmB,EAAAA,EAAAA,KAACqM,EAAAA,KAAI,CACDnM,MAAOqJ,EACPvE,SAvGHsH,CAACnC,EAA8BoC,KAChDzC,GAAgB,GAChBN,EAAS+C,GACT3C,EAAY,GAAG,EAqGK4C,QAAQ,aACRC,eAAa,EACbC,eAAgBrC,EAAQ,UAAY,YACpCsC,UAAWtC,EAAQ,UAAY,YAAYxL,SAE1CpC,OAAOC,KAAKqN,GAAUqB,KAAIL,GACvBtO,OAAOC,KAAKqN,EAASgB,IAAQK,KAAI,CAACX,EAAMmC,KACpC,MAAMpB,EAAQzB,EAASgB,GAAON,GACxBY,EAAG,GAAA/O,OAAMyO,EAAK,MAAAzO,OAAKmO,GAEzB,OACIzK,EAAAA,EAAAA,KAAC6M,EAAAA,KAAGzN,EAAAA,EAAAA,GAAA,CACAqK,SAAUA,EAAS9L,SAAS0N,GAE5BnL,MAAOmL,EACPyB,MAAK,GAAAxQ,OAAKkP,EAAMf,KAAKtG,EAAAA,KAAK4I,gBAC1BC,MACIhN,EAAAA,EAAAA,KAACqI,EAAM,CACHC,SAAUkD,EAAMlD,SAChBC,OAAQ8B,KArPjD,CACHhP,GAAG,wBAADiB,OAFSyM,EAyPuC6D,GAtPlD,gBAAgB,6BAADtQ,OAA+ByM,KA6OLsC,GAhPjD,IAAmBtC,CA0PuB,UAMrByC,GACG/G,EAAAA,EAAAA,MAACoE,EAAQ,CACLG,MAAO7I,EAAO4H,aAEdnD,OAAKxF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAOe,EAAOwG,cAAY,IAAE7F,MAAOuJ,EAAQ,aAAU4C,IAC1DlE,MAAOQ,EAAM1K,SAAA,EAEbmB,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,EAAO2G,WACXlC,MAAO,CAAEmC,WAAY,QAASlI,SAE7B2M,EAAMf,KAAKtG,EAAAA,KAAK4I,kBAErB/M,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,EAAO8G,sBAAsBpI,SAEhC2M,EAAM0B,YAAY/I,EAAAA,KAAK4I,kBAE5B/M,EAAAA,EAAAA,KAAA,OAAAnB,SACK2M,EAAMlC,UACD7M,OAAOC,KAAK8O,EAAMlC,WAAW8B,KAAI+B,IAAa,IAADC,EAAAC,EACzC,MAAMC,EAAM,GAAAhR,OAAMiN,EAAK,MAAAjN,OAAK6Q,GACxBtD,IACAI,EAAsBqD,EAAtBrD,CAA8B,IAAI,GAClCH,GAAgB,IAGpB,MAAMyD,EAAkBjE,GAAaA,EAAU6D,GAC/C,IAAIH,EAAO,mBAKX,OAJmB,OAAfO,QAAe,IAAfA,GAAuB,QAARH,EAAfG,EAAiB5N,cAAM,IAAAyN,GAAvBA,EAAyBJ,MAAuB,OAAfO,QAAe,IAAfA,GAAuB,QAARF,EAAfE,EAAiB5N,cAAM,IAAA0N,GAAvBA,EAAyB5C,OAC1DuC,EAAI,WAAA1Q,OAAciR,EAAgB5N,OAAO8K,KAAI,KAAAnO,OAAIiR,EAAgB5N,OAAOqN,QAIxEvI,EAAAA,EAAAA,MAAC+I,EAAAA,UAAS,CACN5I,MAAOyF,OAAQ4C,EAAY,CAAEjH,gBAAiB,aAE9C2D,SAAUA,IAAa2D,EACvBtI,SAAUiF,EAAsBqD,GAAQzO,SAAA,EAExCmB,EAAAA,EAAAA,KAACyN,EAAAA,iBAAgB,CACbC,YAAY1N,EAAAA,EAAAA,KAAC2N,EAAAA,WAAc,IAC3B5J,GAAI,CACA,iCAAkC5D,EAAOuH,SAE7C,gBAAc,mBACdrM,GAAG,kBAAiBwD,UAEpB4F,EAAAA,EAAAA,MAACP,EAAAA,WAAU,CAACU,MAAOzE,EAAO0H,QAAQhJ,SAAA,EAC9BmB,EAAAA,EAAAA,KAAC4N,EAAAA,UAAS,CACN7J,GAAI5D,EAAOqH,KACX3B,UAAU,MACVgI,MAAOb,KAEXhN,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,EAAO8H,UAAUpJ,SAEpBsO,EAAS7J,QAAQ,qBAAsB,YAIpDtD,EAAAA,EAAAA,KAAC8N,EAAAA,iBAAgB,CAAClJ,MAAOzE,EAAO0G,OAAOhI,SAClC2M,EAAMlC,UAAU6D,GAAUpD,SAASqB,KAAI,CAAC2C,EAAKC,KAC1ChO,EAAAA,EAAAA,KAACuB,EAAmB,CAEhBnB,QAAS2N,EACTrI,WAAYA,EAEZ5D,WAAYqL,EACZvS,OAAQA,EACR2K,UAAWA,EACXD,UAAWA,EACXE,MAAOA,EACPC,aAAcA,EAEdL,OAAS6I,GAtRvE,SAAgBA,EAAqCnM,EAAoBsH,GACrE,IAAI8E,EACAC,EAAM,GACLF,EAAYE,IAGNF,EAAYE,IAAIC,WAAWnR,WAAW,MAGtCgR,EAAYE,IAAIC,WAAWnR,WAAW,MAF7CiR,EAASD,EAAYC,QAAU,QAC/BC,EAAMF,EAAYE,KAIXF,EAAYE,IAAIlR,WAAW,YAAcgR,EAAYE,IAAIlR,WAAW,aAC3EiR,EAASD,EAAYC,QAAU,SAC/BC,EAAMF,EAAYE,MAElBA,EAAG,yBAAA7R,OAA4BwF,EAAU,KAAAxF,OAAI2R,EAAYE,KACzDD,EAASD,EAAYC,QAAU,UAb/BC,EAAG,yBAAA7R,OAA4BwF,GAC/BoM,EAASD,EAAYC,QAAU,SAcpB,UAAXA,GAEAG,YACKC,IACOA,EAAKrR,WAAW,KAChBJ,OAAO0R,SAASC,KAAOF,EAChBA,EAAKrR,WAAW,KACvBkR,EAAG,GAAA7R,OAAMO,OAAO0R,SAASE,SAAQ,KAAAnS,OAAIO,OAAO0R,SAAS3D,MAAItO,OAAG6R,IACrDG,EAAKrR,WAAW,YAAcqR,EAAKrR,WAAW,eACrDJ,OAAO0R,SAASG,KAAOJ,EAC3B,GAEJ,IACAH,GAGAF,EAAYU,OAA4B,oBAAZvF,GAC5BA,MAGA+E,EAAIlR,WAAW,KACfkR,EAAG,GAAA7R,OAAMO,OAAO0R,SAASE,SAAQ,KAAAnS,OAAIO,OAAO0R,SAAS3D,MAAItO,OAAGO,OAAO0R,SAASK,UAAQtS,OAAG6R,GAChFA,EAAIlR,WAAW,OACtBkR,EAAG,GAAA7R,OAAMO,OAAO0R,SAASE,SAAQ,KAAAnS,OAAIO,OAAO0R,SAAS3D,MAAItO,OAAG6R,IAGhEtR,OAAO6O,KAAKyC,EAAKD,GAEzB,CAwOkE9I,CAAO6I,EAAad,EAAU/D,IAZ7B4E,SA7BZV,EA8CG,IAGpB,SACJ,YAAAhR,OArFWiP,IAuFrB,WAGZ9G,EAAAA,EAAAA,MAACoK,EAAAA,cAAa,CAAAhQ,SAAA,CACTyM,GAAgBC,GACbvL,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHtC,QAAQ,YACRuC,UAA0D,IAA/CtS,OAAOC,KAAKqN,EAASuB,IAAelP,OAC/CqN,SAAUA,EAAS9L,SAAS4N,GAC5B3G,MAAO6E,EAAS9L,SAAS4N,GAAe,CAAEvF,gBAAiB,eAAaiH,EACxElJ,GAAI5D,EAAOgI,YACX6G,QAASA,KACL3F,EAAYU,EAASuB,GAAcC,GAAaX,KAAMW,GACtD7B,EAAY,IAAID,EAAU8B,GAAa,EAE3CzK,MAAsD,IAA/CrE,OAAOC,KAAKqN,EAASuB,IAAelP,OAAe,UAAY,OACtE6S,WAAWjP,EAAAA,EAAAA,KAACkP,EAAAA,MAAS,IAAIrQ,SAExBsF,EAAAA,KAAKC,EAAE,iBAEZ,KACHkH,GAAgBC,GAA8D,IAA/C9O,OAAOC,KAAKqN,EAASuB,IAAelP,SAChE4D,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHtC,QAAQ,YACR/C,SAAUA,EAAS9L,SAAS4N,GAC5BxH,GAAI5D,EAAOgI,YACXvD,MAAO6E,EAAS9L,SAAS4N,GAAe,CAAEvF,gBAAiB,eAAaiH,EACxE+B,QAASA,KACLtF,EAAY,IAAID,EAAU8B,IAC1BlC,EAAYU,EAASuB,GAAcC,GAAaX,KAAMW,GACtDnC,GAAS,EAEb6F,WACIxK,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAA7F,SAAA,EACImB,EAAAA,EAAAA,KAACkP,EAAAA,MAAS,KACVlP,EAAAA,EAAAA,KAACmP,EAAAA,MAAS,OAGlBrO,MAAM,UAASjC,SAEdsF,EAAAA,KAAKC,EAAE,0BAGhBpE,EAAAA,EAAAA,KAAA,OAAK4E,MAAO,CAAEwK,SAAU,MACxBpP,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHzT,GAAG,6BACHmR,QAAQ,YACRwC,QAASA,IAAM5F,IACf6F,WAAWjP,EAAAA,EAAAA,KAACmP,EAAAA,MAAS,IACrBrO,MAAM,OAAMjC,SAEXsF,EAAAA,KAAKC,EAAE,gBAGX,E,eC5iBjB,MAAMjE,EAA8B,CAChCkP,YAAc7J,IAAe,CACzBnF,SAAU,WACVW,MAAO,EACPD,IAAK,EACLD,MAAO0E,EAAMS,QAAQqJ,KAAK,OAE9BC,aAAc,CACVjP,QAAS,QAEbkP,WAAY,CACRpJ,OAAQ,sBA4BhB,MAAMqJ,UAAsBjO,EAAAA,UACxB7G,WAAAA,CAAY8G,GACRC,MAAMD,GAENlG,KAAKsG,MAAQ,CACT6N,aAAc,GACdC,SAAS,EACTC,aAGU,UAFH/S,OAAegT,eAA6BhT,OAAOiT,cAAcC,QAChE,8BAGhB,CAEAnK,MAAAA,GACI,OACInB,EAAAA,EAAAA,MAACgH,EAAAA,OAAM,CACHuE,OAAO,QACPC,WAAS,EACTlM,GAAI,CACA,mBAAqBxI,KAAKkG,MAAMyO,aAAgCjD,EAAtB9M,EAAOoP,aACjD,qBAAsBpP,EAAOqP,YAEjCpG,QAAS7N,KAAKkG,MAAM0O,aAAe5U,KAAKkG,MAAM2H,QAAU7N,KAAKkG,MAAM2O,eACnE1E,MAAM,EACNnF,SAAS,KAAI1H,SAAA,EAEb4F,EAAAA,EAAAA,MAAC4L,EAAAA,YAAW,CAAAxR,SAAA,CACPtD,KAAKsG,MAAM6N,cAAgBnU,KAAKkG,MAAM2C,EAAE,oBACzCpE,EAAAA,EAAAA,KAACsQ,EAAAA,WAAU,CACPC,KAAK,QACLxM,GAAI5D,EAAOkP,YACXL,QAASzT,KAAKkG,MAAM2H,QACpBK,SAAUlO,KAAKkG,MAAM0O,aAAatR,UAElCmB,EAAAA,EAAAA,KAACmP,EAAAA,MAAS,UAGlBnP,EAAAA,EAAAA,KAACkM,EAAAA,cAAa,CACVC,UAAQ,EACRvH,MAAO,CAAEwB,OAAQ,QAASvH,UAE1BmB,EAAAA,EAAAA,KAACwQ,EAAAA,EAAO,CACJC,WAAS,EAETC,MAAOnV,KAAKkG,MAAMiP,MAClB9F,KAAMrP,KAAKkG,MAAMmJ,KACjBhQ,OAAQW,KAAKkG,MAAM7G,OACnBwJ,EAAG7I,KAAKkG,MAAM2C,EACd+L,aAAc5U,KAAKkG,MAAM0O,aACzBQ,aAAcpV,KAAKkG,MAAMkP,aACzBC,UAAWA,KACPrV,KAAKwD,SAAS,CAAE4Q,SAAS,IACzBpU,KAAKkG,MAAMmP,WAAW,EAE1BC,UAAWtV,KAAKkG,MAAMoP,UACtBC,SAAUvV,KAAKkG,MAAMqP,SACrBC,IAAKxV,KAAKkG,MAAMsP,IAChBC,WAAYA,IAAMzV,KAAKsG,MAAM+N,cAAgBrU,KAAKkG,MAAM2H,UACxD6H,oBAAsBC,GAAqB3V,KAAKkG,MAAMwP,oBAAoBC,IAftE,cAkBZzM,EAAAA,EAAAA,MAACoK,EAAAA,cAAa,CAACjK,MAAO,CAAEnE,eAAgB,iBAAkB5B,SAAA,EACtDmB,EAAAA,EAAAA,KAACmR,EAAAA,iBAAgB,CACbvM,MAAO,CAAE+G,WAAY,IACrByF,SACIpR,EAAAA,EAAAA,KAACqR,EAAAA,SAAQ,CACL5H,SAAUlO,KAAKkG,MAAM0O,aACrBmB,QAAS/V,KAAKsG,MAAM+N,aACpB5K,SAAUpI,IACNrB,KAAKwD,SAAS,CAAE6Q,aAAchT,EAAEsR,OAAOoD,WACpCzU,OAAegT,eAA6BhT,OAAOiT,cAAcyB,QAChE,6BACA3U,EAAEsR,OAAOoD,QAAU,OAAS,QAC/B,IAIbxE,MAAOvR,KAAKkG,MAAM2C,EAAE,qBAExBK,EAAAA,EAAAA,MAAA,OAAA5F,SAAA,EACImB,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHtC,QAAQ,YACRuC,WAAS,EACTtF,SAAUlO,KAAKkG,MAAM0O,aACrBnB,QAASzT,KAAKkG,MAAM2O,eACpBnB,WAAWjP,EAAAA,EAAAA,KAACwR,EAAAA,cAAiB,IAC7B1Q,MAAM,UACN8D,MAAO,CACHgH,YAAa,GACf/M,SAEDtD,KAAKkG,MAAMgQ,aAAelW,KAAKkG,MAAM2C,EAAE,oBAE5CpE,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHtC,QAAQ,YACR/C,UAAWlO,KAAKkG,MAAM0O,aACtBnB,QAASzT,KAAKkG,MAAM2H,QACpBtI,MAAM,OACN8D,MAAO,CACHoB,gBAAiBzK,KAAKsG,MAAM8N,QAAU,eAAY1C,EAClDnM,MAAOvF,KAAKsG,MAAM8N,QAAU,YAAS1C,GAEzCgC,WAAWjP,EAAAA,EAAAA,KAACmP,EAAAA,MAAS,IAAItQ,SAExBtD,KAAKkG,MAAM2C,EAAE,mBAMtC,EAGJ,U,2DCzKA,MAAMsN,E,MAAUC,GAAAA,UAAW,CAACC,EAASC,IAASD,EAAQC,IAAO,KAEvDC,EAAWA,CAACzW,EAAY0W,KAC1B,MAAMC,EAAOD,EAAMvH,MAAKyH,GAAKA,EAAExH,OAASpP,IACxC,MAAO,CACH2W,OACAjJ,MAAOgJ,EAAMhU,QAAQiU,GACxB,ECJC7R,EAA8B,CAChC+R,OAAQ,QAuGZ,EApFoBtT,IAckB,IAdjB,QACjBuT,EAAO,WACPC,EAAU,QACVC,EAAO,SACPC,EAAQ,QACRC,EAAO,aACPC,EAAY,WACZC,EAAU,IACVC,EAAG,KACHb,EAAI,QACJD,EAAO,IACP1U,EAAG,SACH2B,EAAQ,KACR4L,GACe7L,EACf,MAAM+T,GAAMC,EAAAA,EAAAA,QAAO,QACZ,UAAEC,GAAaC,IAAQC,EAAAA,EAAAA,GAAQ,CAClCC,OAAQ,MACRC,QAAQC,IACG,CACHL,UAAWK,EAAQC,iBAI3BC,KAAAA,CAAKtK,EAAqBoK,GAAU,IAADG,EAAA,IAA3BnW,IAAKoW,GAAWxK,EACpB,IAAK6J,EAAIY,QACL,OAEJ,MAAQxK,MAAOyK,GAAqB1B,EAAS5U,EAAK2U,GAC5C4B,EAA+B,QAAdJ,EAAGV,EAAIY,eAAO,IAAAF,OAAA,EAAXA,EAAaK,wBACjCC,GAAgBF,EAAkBnM,OAASmM,EAAkB1S,KAAO,EAEpE6S,EADeV,EAAQW,kBACKC,EAAIL,EAAkB1S,ID7CnDgT,EACb1Y,EACA2Y,EACAnC,EACAD,EACAgC,EACAD,KAEA,MAAM,KAAE3B,EAAI,MAAEjJ,GAAU+I,EAASzW,EAAIwW,GACrC,GAAI9I,IAAUiL,KAGVjL,EAAQiL,GAAWJ,EAAeD,MAGlC5K,EAAQiL,GAAWJ,EAAeD,IAGlC3B,GAAQjJ,IAAUiL,EAAS,CAC3B,MAAMC,EAAWpY,KAAKsH,MAAMtH,KAAKC,UAAU+V,IAC3CoC,EAASjW,OAAO+K,EAAO,GACvBkL,EAASjW,OAAOgW,EAAS,EAAGhC,GAC5BN,EAAQE,EAASqC,EACrB,GCuBQF,CAAST,EAAWE,EAAkB3B,EAAMD,EAASgC,EAAcD,EACvE,MAGG,WAAEO,GAAcC,EAAMC,IAAWC,EAAAA,EAAAA,GAAQ,CAC5C5Y,KAAM,MACN6Y,MAAIlV,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACAlC,IAAKwV,EAAIjI,MACNiI,GAAG,IACNL,UACAC,WACAC,UACAC,eACAC,eAEJN,QAASA,IAAMA,EACfoC,IAAKA,IAAMnC,IACXa,QAASC,IAAO,CAAOgB,WAAYhB,EAAQgB,kBAG/C7U,EAAAA,EAAAA,YAAU,KACN+U,GAAQI,EAAAA,EAAAA,KAAiB,CAAEC,sBAAsB,GAAO,GAEzD,IACH,MAAM9T,EAAUuT,EAAa,EAAI,EAGjC,OAFAC,EAAKrB,EAAKH,KAGN3S,EAAAA,EAAAA,KAAA,OACI2S,IAAKA,EACL/N,OAAKxF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAOe,GAAM,IAAEQ,YACpB,kBAAiBkS,EAAUhU,UAE3BmB,EAAAA,EAAAA,KAAA,KACIvE,KAAK,MACL,kBAAiBoX,EACjB7D,QAAS0F,GAASA,EAAMC,iBACxBjG,KAAI,KAAApS,OAAOmO,GACX7F,OAAKxF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACEe,GAAM,IACTQ,UACAG,MAAO,UACP8T,eAAgB,SAClB/V,SAEDA,KAEH,E,eC/Fd,MAAMsB,EAA8B,CAChCmS,SAAW9M,IAAe,CACtBU,WAAYV,EAAMS,QAAQ4O,QAAQC,KAClChU,MAA8B,UAAvB0E,EAAMS,QAAQe,KAAmB,QAAUrL,EAAAA,EAAWoZ,YAAYvP,EAAMS,QAAQ4O,QAAQC,MAAM,GACrG,UAAW,CACP5O,WAAYV,EAAMS,QAAQ4O,QAAQC,KAClChU,MAA8B,UAAvB0E,EAAMS,QAAQe,KAAmB,QAAUrL,EAAAA,EAAWoZ,YAAYvP,EAAMS,QAAQ4O,QAAQC,MAAM,GACrG,kBAAmB,CACfhU,MAC2B,UAAvB0E,EAAMS,QAAQe,KAAmB,QAAUrL,EAAAA,EAAWoZ,YAAYvP,EAAMS,QAAQ4O,QAAQC,MAAM,OAI9GE,aAAexP,IAAe,CAC1B1E,MAA8B,UAAvB0E,EAAMS,QAAQe,KAAmB,QAAUrL,EAAAA,EAAWoZ,YAAYvP,EAAMS,QAAQ4O,QAAQC,MAAM,KAEzGG,aAAc,CACVC,GAAI,QAERC,OAAQ,CACJvU,SAAU,SACVwF,OAAQ,IAEZgP,KAAM,CACFpP,gB,SAAiBqP,EAAM,OAuH/B,EAjGoB5T,IAChB,MAAM,WACFgR,EAAU,aACVD,EAAY,QACZD,EAAO,KACPvF,EAAI,QACJgC,EAAO,SACPsD,EAAQ,KACR3O,EAAI,aACJ2R,EAAY,QACZpF,EAAO,MACPpP,EAAK,aACLyU,EAAY,uBACZC,EAAsB,qBACtBC,EAAoB,MACpB7Q,GACAnD,EAEJ,IAAIiG,EAAU/D,EAAOA,EAAKL,QAAQ,OAAQ,KAAO,GAQjD,OANgB,oBAAZoE,GAEmB,mBAAZA,KADPA,EAAU,kBAMVjD,EAAAA,EAAAA,MAAA,OAAKG,OAAKxF,EAAAA,EAAAA,GAAA,CAAIkB,QAAS,OAAQI,WAAY,UAAckE,GAAS,CAAC,GAAK/F,SAAA,GACjEyW,IAAgBtV,EAAAA,EAAAA,KAAC0V,EAAAA,WAAU,MAC3BJ,IACCtV,EAAAA,EAAAA,KAACqR,EAAAA,SAAQ,CACLC,QAASpB,EACTlB,QAASA,IAAMuG,GAAa,OAGjCD,IACCtV,EAAAA,EAAAA,KAAC2V,EAAAA,YAAW,CACRzV,MAAOY,EACP8U,cAAY,EACZ5Q,SAAU9E,GAASqV,GAAa,EAAOrV,GAAS,SAGxDF,EAAAA,EAAAA,KAAC6V,EAAAA,eAAc,CACX9R,GAAIC,EAAAA,MAAM8R,SAASrU,EAAM+D,MAAO8M,GAAYnS,EAAOmS,SAAUC,GAAWpS,EAAO8U,cAC/EjG,QAASA,EAAQnQ,UAEjBmB,EAAAA,EAAAA,KAAC6L,EAAAA,QAAO,CACJC,MAAOyG,EAAU7K,EAAU,GAC3BqE,UAAW,CAAEC,OAAQ,CAAEjI,GAAI,CAAEkI,cAAe,UAAapN,UAEzD4F,EAAAA,EAAAA,MAACsR,EAAAA,MAAK,CACFC,WAAS,EACTC,QAAS,EACTvV,WAAW,SACXkE,MAAOzE,EAAOgV,OAAOtW,SAAA,EAErBmB,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAAAlX,UACFmB,EAAAA,EAAAA,KAACkW,EAAAA,aAAY,CACTtR,MAAO,CAAEuR,SAAU,EAAGrV,SACtBiD,GAAIuO,EAAWnS,EAAO6U,kBAAe/H,EAAUpO,UAE/CmB,EAAAA,EAAAA,KAACoW,EAAAA,MAAK,CACF5D,aAAcA,GAAgB,EAC9B1R,OAAuB,SAAf2R,EAAwB,UAAYA,IAAe,UAC3D1O,GAAmB,SAAf0O,EAAwB,CAAE,oBAAqBtS,EAAOiV,WAASnI,EAAUpO,SAE5EmO,SAIXuF,IACEvS,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAAAlX,UACFmB,EAAAA,EAAAA,KAACqW,EAAAA,aAAY,CAACzR,MAAO,CAAE9D,SAAQjC,UAC3BmB,EAAAA,EAAAA,KAACoW,EAAAA,MAAK,CACF5D,aAAcgD,GAA0B,EACxC1U,OAC8B,SAAzB2U,EAAkC,UAAYA,IAC/C,UAEJ1R,GAC6B,SAAzB0R,EACM,CAAE,oBAAqBtV,EAAOiV,WAC9BnI,EACTpO,SAEA6I,iBAQ3B,EC5IR4O,EAAmC,CACrCjW,SAAU,QACV4L,cAAe,OACf1E,OAAQ,IACRI,KAAM,EACN5G,IAAK,EACLR,MAAO,OACP6F,OAAQ,QASZ,SAASmQ,EACLC,EACAC,EACAC,GAEA,IAAKF,IAAkBC,EACnB,MAAO,CACHnW,QAAS,QAGjB,IAAI,EAAEqW,EAAC,EAAE7C,GAAM2C,EACXC,IACAC,GAAKH,EAAcG,EACnB7C,GAAK0C,EAAc1C,GAClB6C,EAAG7C,GApBZ,SAAoB6C,EAAW7C,GAG3B,MAAO,CAF+B,GAArB8C,KAAKC,MAAMF,EAAI,IACM,GAArBC,KAAKC,MAAM/C,EAAI,IAEpC,CAgBiBgD,CAAWH,EAAG7C,GACvB6C,GAAKH,EAAcG,EACnB7C,GAAK0C,EAAc1C,GAEvB,MAAMiD,EAAS,aAAAza,OAAgBqa,EAAC,QAAAra,OAAOwX,EAAC,OACxC,MAAO,CACHiD,YACAC,gBAAiBD,EAEzB,CAEA,MAAM5W,EAA8B,CAChCtF,KAAO2K,IAAe,CAClBU,WAAYV,EAAMS,QAAQC,WAAW+Q,WA0D7C,SAtDA,SAAyBxV,GACrB,MAAM,SACFyV,EAAQ,WACRhD,EAAU,KACVI,EAAI,cACJkC,EAAa,cACbC,IAEAU,EAAAA,EAAAA,IAAajE,IAAO,CACpBoB,KAAMpB,EAAQnD,UACdmH,SAAUhE,EAAQkE,cAClBZ,cAAetD,EAAQmE,+BACvBZ,cAAevD,EAAQoE,wBACvBpD,WAAYhB,EAAQgB,iBA8BxB,OAAKA,GAKDlU,EAAAA,EAAAA,KAAA,OAAK4E,MAAO0R,EAAYzX,UACpBmB,EAAAA,EAAAA,KAAA,OAAK4E,MAAO2R,EAAcC,EAAeC,GAAe5X,SA/B3C,QAAbqY,GAEIlX,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,EAAOtF,KACX+J,MAAO,CAAErE,MAAO,KAAM1B,UAEtBmB,EAAAA,EAAAA,KAACuX,EAAU,CAEPrH,QAASoE,EAAKpE,QACdqF,aAAcA,KAAgB,EAC9BhD,QAAS+B,EAAK/B,QACdvF,KAAMsH,EAAKjC,QACX1O,KAAM2Q,EAAKxI,MACXwG,SAAUgC,EAAKhC,SACfE,aAAc8B,EAAK9B,aACnBC,WAAY6B,EAAK7B,WACjBjN,MAAO/D,EAAM+D,OATR8O,EAAK7J,QAcnB,SAIA,IAQf,ECpGA,IAAI+M,GAQJ,MAuDA,GAvDqB5Y,IAAsE,IAArE,aAAE0W,EAAY,QAAEtG,EAAO,KAAEuB,GAAyB3R,EACpE,MAAO6Y,EAAUC,GAAeC,IAAAA,SAAe,OACxCjM,EAAMkM,GAAWD,IAAAA,UAAe,IAChCE,EAAWC,GAAgBH,IAAAA,SAA+B,MAEjE,OACIlT,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAA7F,SAAA,EACImB,EAAAA,EAAAA,KAACsQ,EAAAA,WAAU,CACPC,KAAMA,GAAQ,QACd3L,MAAO0Q,EAAe,CAAExU,MAAO,OAAU,KACzCkO,QAAS+I,IACL/I,IACKsG,GAODsC,GAAQ,GACRI,aAAaR,MAPbE,EAAYK,EAAGE,eACfL,GAAQM,GAAsB,UAAdL,IAA0BK,IAC1CJ,EAAa,SAEbN,GAAQnJ,YAAW,IAAMuJ,GAAQ,IAAQ,KAI7C,EAEJ9L,MAAO3H,EAAAA,KAAKC,EAAE,kBAAkBvF,UAEhCmB,EAAAA,EAAAA,KAACmY,EAAAA,KAAQ,OAEbnY,EAAAA,EAAAA,KAACoY,EAAAA,OAAM,CACHxT,MAAO,CAAE2C,OAAQ,MACjBmE,KAAMA,EACN+L,SAAUA,EACVI,UAAWA,EACXQ,YAAU,EAAAxZ,SAETiK,IAAA,IAAC,gBAAEwP,GAAiBxP,EAAA,OACjB9I,EAAAA,EAAAA,KAACuY,EAAAA,MAAInZ,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACGkZ,GAAe,IACnBE,QAAS,IAAI3Z,UAEbmB,EAAAA,EAAAA,KAACyY,EAAAA,MAAK,CAAA5Z,UACFmB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACPU,MAAO,CACH8T,QAAS,IACX7Z,SAEDsF,EAAAA,KAAKC,EAAE,sDAGb,MAGhB,ECrBEuU,GAAoB,IAEpBC,GAAoB,IAMjC,MAAMzY,GAA8B,CAChCtF,KAAO2K,IAAe,CAClBqT,WAAY,EACZR,WAAY7S,EAAMsT,YAAYC,OAAO,QAAS,CAC1CC,OAAQxT,EAAMsT,YAAYE,OAAOC,QACjCC,SAAU1T,EAAMsT,YAAYI,SAASC,iBAEzC7Y,QAAS,OACTgG,cAAe,WAEnB8S,cAAe,CACX7Y,MAAOoY,IAEXU,cAAe,CACX9Y,MAAOqY,IAEXU,iBAAkB,CACd/Y,MAxB4B,IA0BhC4F,MAAO,CACH5F,MAAO,UACPgZ,UAAW,UAEfC,OAAShU,IAAepG,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACpBkB,QAAS,OACTgG,cAAe,MACf5F,WAAY,SACZgY,QAAS,eACNlT,EAAMiU,OAAOC,SAAO,IACvBjZ,eAAgB,WAChBJ,SAAU,SACVU,IAAK,EACLwG,OAAQ,EACRrB,WAAYV,EAAMS,QAAQC,WAAW+Q,UAEzC0C,cAAe,CACXjB,QAAS,GAEbkB,aAAc,CACVnZ,eAAgB,iBAEpBoZ,KAAM,CACFzS,WAAY,EACZZ,KAAM,YAEVwG,KAAM,CACFzM,MAAO,GACP6F,OAAQ,IAEZ0T,SAAU,CACNvZ,MAAO,GACP6F,OAAQ,IAEZ2T,YAAa,CACTxZ,MAAO,OACPD,QAAS,OAGT0Z,UAAW,EACXC,aAAc,GAElBC,iBAAkB,CACdvZ,QAAS,EACT0X,WAAY,gBAEhB8B,cAAe,CACXxZ,QAAS,GAEbyZ,aAAe5U,IAAe,CAC1BvE,SAAU,GACVH,MAA8B,SAAvB0E,EAAMS,QAAQe,KAAkB,YAAc,YACrDqT,UAAW,SACXjZ,GAAI,QAERkZ,WAAY,CACRja,SAAU,SACViH,OAAQ,EACRtG,MAAO,EACPT,MAAO,cACPoL,WAAY,OACZqO,UAAW,OACX3B,WAAY,iBAIPkC,GACD,EADCA,GAED,EAFCA,GAGA,EAGPC,GAAqG,CACvG,YAAa,CAAEC,MAAO,EAAGzN,MAAMhN,EAAAA,EAAAA,KAAC0a,EAAAA,KAAQ,KACxC,WAAY,CAAED,MAAO,EAAGzN,MAAMhN,EAAAA,EAAAA,KAAC2I,EAAAA,KAAQ,IAAKiC,MAAM,GAClD,eAAgB,CAAE6P,MAAO,GAAIzN,MAAMhN,EAAAA,EAAAA,KAAC2a,EAAAA,MAAS,IAAK/P,MAAM,GACxD,gBAAiB,CAAE6P,MAAO,GAAIzN,MAAMhN,EAAAA,EAAAA,KAAC4a,EAAAA,UAAa,IAAKhQ,MAAM,GAC7D,cAAe,CAAE6P,MAAO,GAAIzN,MAAMhN,EAAAA,EAAAA,KAAC6a,EAAAA,SAAY,KAC/C,YAAa,CAAEJ,MAAO,GAAIzN,MAAMhN,EAAAA,EAAAA,KAAC8a,EAAAA,SAAY,KAC7C,cAAe,CAAEL,MAAO,GAAIzN,MAAMhN,EAAAA,EAAAA,KAAC+a,EAAAA,IAAO,IAAKnQ,MAAM,GACrD,WAAY,CAAE6P,MAAO,GAAIzN,MAAMhN,EAAAA,EAAAA,KAACgb,EAAAA,aAAgB,IAAKpQ,MAAM,GAC3D,aAAc,CAAE6P,MAAO,GAAIzN,MAAMhN,EAAAA,EAAAA,KAACib,EAAAA,cAAiB,KACnD,aAAc,CAAER,MAAO,GAAIzN,MAAMhN,EAAAA,EAAAA,KAACkb,EAAAA,QAAW,KAC7C,YAAa,CAAET,MAAO,GAAIzN,MAAMhN,EAAAA,EAAAA,KAACmb,EAAAA,cAAiB,KAClD,iBAAkB,CAAEV,MAAO,IAC3B,qBAAsB,CAAEA,MAAO,GAAIlW,SAAU,GAC7C,qBAAsB,CAAEkW,MAAO,GAAIlW,SAAU,GAC7C,qBAAsB,CAAEkW,MAAO,GAAIlW,SAAU,GAC7C,iBAAkB,CAAEkW,MAAO,GAAIlW,SAAU,GACzC,iBAAkB,CAAEkW,MAAO,GAAIlW,SAAU,GACzC,iBAAkB,CAAEkW,MAAO,GAAIlW,SAAU,GACzC,qBAAsB,CAAEkW,MAAO,GAAIlW,SAAU,GAC7C,qBAAsB,CAAEkW,MAAO,GAAIlW,SAAU,GAC7C,qBAAsB,CAAEkW,MAAO,GAAIlW,SAAU,GAC7C,cAAe,CAAEkW,MAAO,GAAIlW,SAAU,GACtC,kBAAmB,CAAEkW,MAAO,GAAIlW,SAAU,GAC1C,kBAAmB,CAAEkW,MAAO,GAAIlW,SAAU,GAC1C,kBAAmB,CAAEkW,MAAO,GAAIlW,SAAU,GAC1C,YAAa,CAAEkW,MAAO,IAAKzN,MAAMhN,EAAAA,EAAAA,KAACob,EAAAA,QAAW,KAC7C,YAAa,CAAEX,MAAO,IAAKzN,MAAMhN,EAAAA,EAAAA,KAACqb,EAAAA,SAAS,MAkD/C,MAAMC,WAAe9Z,EAAAA,UAKjB7G,WAAAA,CAAY8G,GACRC,MAAMD,GAAO,KALT8Z,2BAAqB,OAEZC,mBAAa,OA0E9BC,uBAAyB,IAAqBlgB,KAAKmgB,SAAQ,GAAM,KAgBjEC,uBAAyB,IACrBpgB,KAAKkG,MAAMma,YACNC,mBACAtf,MAAK4M,GAAiB5N,KAAKugB,iBAAiB3S,KAC5CxM,OAAMgI,GAAS9H,OAAOC,MAAM,6BAADR,OAA8BqI,MAAU,KAE5EoX,gBAAmBC,IACfzgB,KAAKwD,SAAS,CAAEid,aAAY,EAC9B,KAEFC,kBAAqBC,IACjB3gB,KAAKwD,SAAS,CAAEmd,eAAc,EAChC,KAEFJ,iBAAoB3S,IAChB,IAAKA,EACD,OAGJ,MAAM3J,EAA4B,CAAE2c,QAAS,EAAGC,MAAO,GAEvD3f,OAAOC,KAAKyM,GAAenN,SAAQ4O,IAAS,IAADyR,EAAAC,EACvC,GAAwB,QAApBD,EAAClT,EAAcyB,UAAK,IAAAyR,GAAQ,QAARC,EAAnBD,EAAqB9Y,cAAM,IAAA+Y,GAA3BA,EAA6BC,QAI9B9f,OAAOC,KAAKyM,EAAcyB,GAAMrH,OAAOgZ,OAAOpR,YAAY/O,OAAQ,CAClE,MAAMd,EAAM6N,EAAcyB,GAAMrH,OAAOgZ,OAAOpR,WAE9C,IAAK,MAAMF,KAAYxO,OAAO8N,OAAOjP,GACjCmB,OAAOC,KAAKuO,EAAS3B,WAAWtN,SAAQ,IACd,UAAtBiP,EAAS3C,SAAuB9I,EAAM2c,UAAY3c,EAAM4c,SAGpE,KAGJ7gB,KAAKwD,SAAS,CAAEyd,kBAAmBhd,GAAQ,EAC7C,KAsQFid,qBAAuBC,MAAO9P,EAAc+P,EAAwBC,KAChE,MAAM,KAAE/K,GAAStW,KAAKsG,OAChB,OAAEjH,GAAWW,KAAKkG,MAClBob,EAAsBhhB,KAAKsH,MAAMtH,KAAKC,UAAU+V,IAClD8K,IACAE,EAAQjQ,GAAKsD,SAAW2M,EAAQjQ,GAAKsD,cAExBjD,IAAb2P,IACiB,OAAbA,SACOC,EAAQjQ,GAAK9L,MAEpB+b,EAAQjQ,GAAK9L,MAAQ8b,GAG7B,MAAME,QAAmBvhB,KAAKkG,MAAM7G,OAAOmiB,iBAAgB,GAG3D,GAFAD,EAAWnd,OAAOqd,YAAcH,EAAQzR,KAAIxM,IAAA,IAAC,KAAE6L,EAAI,QAAEyF,EAAO,MAAEpP,GAAOlC,EAAA,MAAM,CAAE6L,OAAMyF,UAASpP,QAAO,IAE/F6b,QAA6B1P,IAAb2P,EAChBrhB,KAAKwD,SAAS,CAAE8S,KAAMgL,IAAW,IAC7BjiB,EAAOqiB,gBAAgBH,GAAYngB,OAAMC,GAAKC,OAAOC,MAAM,6BAADR,OAA8BM,aAG5F,UACUhC,EAAOqiB,gBAAgBH,EACjC,CAAE,MAAOlgB,GACLC,OAAOC,MAAM,6BAADR,OAA8BM,GAC9C,CACJ,EACF,KAoGFsgB,MACIxK,IAOA,OAAQA,EAAIjI,MACR,IAAK,WAAY,CACb,MAAM,UAAEuR,EAAS,YAAEE,GAAgB3gB,KAAKsG,MACxC,MAAO,CAAE6F,QAASsU,GAAaE,GAAe,EAAGpb,MAAOkb,EAAY,QAAU,OAClF,CAEA,IAAK,eACD,MAAO,CAAEtU,QAASnM,KAAKsG,MAAMtD,gBAAkB,EAAGuC,MAAO,WAE7D,IAAK,YACD,MAAO,CACH4G,QAASnM,KAAKsG,MAAMvD,aAAe,EACnCwC,MAAO,UACPqc,kBAAmB5hB,KAAKsG,MAAM2a,kBAAkBL,QAAU5gB,KAAKsG,MAAM2a,kBAAkBJ,MACvFgB,gBAAiB7hB,KAAKsG,MAAM2a,kBAAkBL,QAAU,EAAI,QAAU,aAG9E,QACI,MAAO,CACHzU,QAAS,EACT5G,MAAO,GACPqc,kBAAmB,EACnBC,gBAAiB,IAE7B,EAjiBA7hB,KAAKsG,MAAQ,CACTgQ,KAAM,GACNmK,UAAW,EACXE,YAAa,EACbM,kBAAmB,CAAEJ,MAAO,EAAGD,QAAS,GACxC7d,YAAagd,GAAO+B,qBAAqB9hB,KAAKkG,MAAMjD,MAAOjD,KAAKkG,MAAMhD,YACtEF,eAAgB+c,GAAOgC,wBAAwB/hB,KAAKkG,MAAM/C,UAAWnD,KAAKkG,MAAMhD,aAGpFlD,KAAKigB,cAAgB7D,IAAAA,YAErBpc,KAAKmgB,UAAU/e,OAAMC,GAAKC,OAAOC,MAAM,oBAADR,OAAqBM,KAC/D,CAEA,+BAAO2gB,CAAyB9b,EAAoBI,GAChD,MAAMvD,EAAcgd,GAAO+B,qBAAqB5b,EAAMjD,MAAOiD,EAAMhD,YAC7DF,EAAiB+c,GAAOgC,wBAAwB7b,EAAM/C,UAAW+C,EAAMhD,YAC7E,OAAIH,IAAgBuD,EAAMvD,aAAeC,IAAmBsD,EAAMtD,eACvD,CAAED,cAAaC,kBAEnB,IACX,CAEA,2BAAO8e,CACH7e,EACAC,GAEA,GAAID,GAASC,EAAY,CAAC,IAAD+e,EACrB,MAAMle,GAAiD,QAA3Bke,EAAA/e,EAAW,wBAAgB,IAAA+e,OAAA,EAA3BA,EAA6Bje,UAAW,GACpE,IAAIC,EAAQ,EAMZ,OALAhB,EAAMxC,SAAQyD,IACN9D,EAAAA,EAAW+D,gBAAgBD,EAAQE,OAAOC,iBAAkBN,IAC5DE,GACJ,IAEGA,CACX,CACA,OAAO,CACX,CAEA,8BAAO8d,CACH5e,EACAD,GAEA,GAAIC,EAAW,CACX,IAAIc,EAAQ,EAmBZ,OAjBA/C,OAAOC,KAAKgC,GACP+e,OACAzhB,SAAQyD,IACL,MAAMI,EAAanB,EAAUe,GACvBK,EAAUrB,GAAcA,EAAWgB,GAEzB,kBAAZA,GACY,UAAZA,GACU,OAAVI,QAAU,IAAVA,GAAAA,EAAYN,SACL,OAAPO,QAAO,IAAPA,GAAAA,EAASP,SACTM,EAAWE,gBAAkBD,EAAQP,SACrC5D,EAAAA,EAAW+D,gBAAgBG,EAAWN,QAASO,EAAQP,UAEvDC,GACJ,IAGDA,CACX,CACA,OAAO,CACX,CAIA+C,iBAAAA,GACIhH,KAAKkG,MAAMic,gBAAgBjgB,gBAAgBlC,KAAKkgB,wBAAwB,GAEnElgB,KAAKogB,yBAAyBpf,MAAK,KACpChB,KAAKkG,MAAMma,YAAY+B,4BAA4BpiB,KAAKogB,wBAEnDpgB,KAAKggB,wBACNhgB,KAAKggB,uBAAwB,EAC7BhgB,KAAKkG,MAAMmc,WAAWC,0BAA0BtiB,KAAKwgB,iBACrDxgB,KAAKkG,MAAMmc,WAAWE,4BAA4BviB,KAAK0gB,mBAC3D,GAER,CA0CA8B,oBAAAA,GACIxiB,KAAKkG,MAAMic,gBAAgB7f,kBAAkBtC,KAAKkgB,wBAClDlgB,KAAKkG,MAAMma,YAAYoC,8BAA8BziB,KAAKogB,wBAEtDpgB,KAAKggB,wBACLhgB,KAAKggB,uBAAwB,EAC7BhgB,KAAKkG,MAAMmc,WAAWK,4BAA4B1iB,KAAKwgB,iBACvDxgB,KAAKkG,MAAMmc,WAAWM,8BAA8B3iB,KAAK0gB,mBAEjE,CAEAkC,kBAAAA,IACS5iB,KAAK6iB,eAAiB7iB,KAAKkG,MAAMI,QAAU0Y,IAAiBhf,KAAKkG,MAAM6T,cACxEjH,YAAW,IAAM9S,KAAKkG,MAAM4c,iBAAgB,IAEpD,CAEA,aAAM3C,CAAQre,GACV,IACI,MACMiM,QADmB/N,KAAKkG,MAAM7G,OAAO0jB,oBAAoBjhB,GAEzDkhB,EAA0B,GAC5BjV,GACA7M,OAAOC,KAAK4M,GAAWtN,SAAQX,IAC3B,MAAMkJ,EAAW+E,EAAUjO,GAE3B,GAAa,OAARkJ,QAAQ,IAARA,IAAAA,EAAUia,SACX,OAGJ,IAAI9L,EAAG,OAAApW,OAAUjB,EAAGiI,QAAQ,kBAAmB,IAAIA,QAAQ,SAAU,KAErE,MAAMmb,EAAYla,EAASia,SAASC,UACpC,IAAIC,EAaA5S,EAZJ,IAAK2S,EAAW,CACZ,MAAMrW,EAAI/M,EAAGsjB,MAAM,YACfvW,IACAsW,EAAU5Z,SAASsD,EAAE,GAAI,IACzBsK,GAAG,IAAApW,OAAQoiB,GAEnB,CAEA,GAAIH,EAAY/T,MAAK8J,GAAQA,EAAK7J,OAASiI,IACvC,OAMiD,IAADkM,EADhDra,EAASia,SAAS/T,KAGVqB,EAF8B,kBAA3BvH,EAASia,SAAS/T,KACrBlG,EAASia,SAAS/T,MAAQlG,EAASia,SAAS/T,KAAKlP,KAAKkG,MAAMod,MACpDta,EAASia,SAAS/T,KAAKlP,KAAKkG,MAAMod,MACb,QAA1BD,EAAIra,EAASia,SAAS/T,YAAI,IAAAmU,GAAtBA,EAAwB/a,GACvBtI,KAAKkG,MAAM2C,EAAEG,EAASia,SAAS/T,KAAK5G,IAEpCtI,KAAKkG,MAAM2C,EAAEG,EAASkG,MAG1BlP,KAAKkG,MAAM2C,EAAEG,EAASia,SAAS/T,MAG3CqB,EAAQvQ,KAAKkG,MAAM2C,EAAEG,EAASkG,MAGlC,IAAInP,EAEAA,EADAkf,GAAS9H,IACNtT,EAAAA,EAAAA,GAAA,CAAKqL,KAAMiI,GAAQ8H,GAAS9H,IAEzB,CACFjI,KAAMiI,EACN+H,WAAmCxN,IAA5B1I,EAASia,SAAS/D,MAAsBlW,EAASia,SAAS/D,MAAQ,IACzEzN,KAAMzI,EAASia,SAASxR,MAI3B1R,EAAI0R,KAGe,kBAAb1R,EAAI0R,MACV1R,EAAI0R,KAAK/P,WAAW,eACpB3B,EAAI0R,KAAKrP,SAAS,OAEnBrC,EAAI0R,KAAI,WAAA1Q,OAAciI,EAASkG,KAAI,KAAAnO,OAAIhB,EAAI0R,OAN3C1R,EAAI0R,KAAI,WAAA1Q,OAAciI,EAASkG,KAAI,KAAAnO,OAAIiI,EAASyI,MASpD1R,EAAIwQ,MAAQA,EAEP2S,GAEGC,IACApjB,EAAIwQ,OAAK,IAAAxP,OAAQoiB,IAGzBH,EAAY3gB,KAAKtC,EAAI,IAI7B,MAAMwjB,EAAe,CACjB,YACA,eACA,gBACA,WACA,YACA,cACA,YACA,YACA,aAKJ,IAAIjN,EAFapV,OAAOC,KAAK8d,IAAUuE,QAAOtU,GAAQqU,EAAanhB,SAAS8M,KAE5CW,KAAIX,IAChC,MAAMnP,GAAa8D,EAAAA,EAAAA,GAAA,CAAKqL,QAAS+P,GAAS/P,IAja1D,IAAiBuU,EA2aD,OATA1jB,EAAIwQ,MAAQ3H,EAAAA,KAAKC,GAlahB4a,EAoaOvU,EACKnH,QAAQ,OAAQ,IAChBA,QAAQ,KAAM,IACdA,QAAQ,UAAW,QAtajC2b,UAAU,EAAG,GAAGC,cAAgBF,EAAIC,UAAU,GAAGE,eAyahD7jB,EAAI4U,SAAU,EACP5U,CAAG,IAIduW,EAAOA,EAAKvV,OAAOiiB,GAEnB1M,EAAOA,EAAKkN,QAAOzjB,GAAOA,IAC1BuW,EAAK7V,SAAQV,GAAQA,EAAI4U,SAAU,IAEnC2B,EAAK4L,MAAK,CAAC2B,EAAGC,IACND,EAAE3E,OAAS4E,EAAE5E,MACN2E,EAAE3E,MAAQ4E,EAAE5E,MAEnB2E,EAAE3E,OACM,EAER4E,EAAE5E,MACK,EAEJ2E,EAAE3U,KAAO4U,EAAE5U,MAAQ,EAAI2U,EAAE3U,KAAO4U,EAAE5U,KAAO,EAAI,IAInDlP,KAAKkG,MAAM7G,OAAO0kB,yBAAyB/iB,MAAKgjB,IACjD,MAAMvC,EACFuC,EAAa5f,OAAOqd,aAAe,GAEvCnL,EAAK7V,SAAQ0W,IACT,MAAM8M,EAAKxC,EAAYxS,MAAKuN,GAAMA,EAAGtN,OAASiI,EAAIjI,OAC9C+U,IACA9M,EAAIxC,QAAUsP,EAAGtP,QACjBwC,EAAI5R,MAAQ0e,EAAG1e,MACnB,IAGJ,MAAMsK,EAA8B,CAAC,EACrC4R,EAAYhhB,SAAQ,CAACsY,EAAMtG,IAAO5C,EAAIkJ,EAAK7J,MAAQuD,IAEnD6D,EAAK4L,MAAK,CAAC2B,EAAGC,KACV,MAAMI,EAAKrU,EAAIgU,EAAE3U,MACXiV,EAAKtU,EAAIiU,EAAE5U,MACjB,YAAWwC,IAAPwS,QAA2BxS,IAAPyS,EACbD,EAAKC,EAEZD,GACQ,EAERC,EACO,EAEJ,CAAC,IAGZnkB,KAAKwD,SAAS,CAAE8S,SAAQ,KACpB,MAAM8N,EAAiB9N,EAAKzG,KAAItC,IAAA,IAAC,KAAE2B,EAAI,QAAEyF,EAAO,MAAEpP,GAAOgI,EAAA,MAAM,CAAE2B,OAAMyF,UAASpP,QAAO,IAEnFjF,KAAKC,UAAU6jB,KAAoB9jB,KAAKC,UAAUkhB,IAC7CzhB,KAAKkG,MAAM7G,OAAOmiB,iBAAgB,GAAMxgB,MAAKqjB,IAC9CA,EAAcjgB,OAAOqd,YAAcA,EAE5BzhB,KAAKkG,MAAM7G,OACbqiB,gBAAgB2C,GAChBjjB,OAAMC,GAAKC,OAAOC,MAAM,6BAADR,OAA8BM,QAElE,GACF,GAEV,CAAE,MAAO+H,GACL9H,OAAOC,MAAM,yBAADR,OAA0BqI,GAC1C,CACJ,CAEAkb,SAAAA,GACI,MAAM,MAAEhe,EAAK,iBAAEie,GAAqBvkB,KAAKkG,MAEzC,OACIgD,EAAAA,EAAAA,MAACX,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAIC,EAAAA,MAAM8R,SACNva,KAAKkG,MAAM+D,MACXrF,GAAOqZ,OACPje,KAAKkG,MAAMI,QAAU0Y,IAAiBhf,KAAKkG,MAAMse,UAAY5f,GAAOyZ,cACnEre,KAAK6iB,eAAiB7iB,KAAKkG,MAAMI,QAAU0Y,IAAiBpa,GAAOwZ,eACtE9a,SAAA,EAEF4F,EAAAA,EAAAA,MAAA,OACIG,OAAKxF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACEe,GAAO4Z,aACP5Z,GAAO+Z,kBACI,IAAVrY,EAAc1B,GAAOga,cAAgB,CAAE7Z,QAAS,SACtDzB,SAAA,EAEFmB,EAAAA,EAAAA,KAAA,KACI0O,KAAK,SACLM,QAAS0F,GAASA,EAAMC,iBACxB/P,MAAO,CAAE9D,MAAO,UAAW8T,eAAgB,QAAS/V,SAEnDtD,KAAKkG,MAAMue,eAAehT,MACvBhN,EAAAA,EAAAA,KAAA,OAAK4E,MAAO,CAAEwB,OAAQ,GAAI7F,MAAO,IAAK0f,WAAY,QAASphB,UACvDmB,EAAAA,EAAAA,KAAA,OACIkgB,IAAK3kB,KAAKkG,MAAMue,eAAehT,KAC/BmT,IAAI,OACJvb,MAAO,CAAE2B,SAAU,OAAQ6Z,UAAW,OAAQC,cAAe,eAIrErgB,EAAAA,EAAAA,KAACsgB,EAAAA,OAAM,CACHtR,QAASA,IAAM8Q,EAAiB,QAChClb,MAAOzE,GAAO2Z,SACdqG,IAAI,WACJD,IAAI,wBAId3kB,KAAKkG,MAAMue,eAAehT,MAAQzR,KAAKkG,MAAM8e,eAC3C9b,EAAAA,EAAAA,MAACP,EAAAA,WAAU,CAACH,GAAI5D,GAAOia,aAAavb,SAAA,CAAC,IAAEtD,KAAKkG,MAAM8e,oBAG1DvgB,EAAAA,EAAAA,KAACsQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,KACDzT,KAAK6iB,eAAiB7iB,KAAKkG,MAAMI,QAAU0Y,GAC3Chf,KAAKkG,MAAM+e,cAAcjG,IAEzBhf,KAAKkG,MAAM+e,cAAcjG,GAC7B,EACF1b,UAEFmB,EAAAA,EAAAA,KAACygB,EAAAA,YAAe,QAIhC,CAEArC,WAAAA,GACI,MAA4B,OAArB7iB,KAAKkG,MAAMlB,OAAuC,OAArBhF,KAAKkG,MAAMlB,KACnD,CAgCAmgB,kBAAAA,GACI,MAAM,KAAE7O,EAAI,UAAEmK,EAAS,YAAEE,GAAgB3gB,KAAKsG,OACxC,WAAE8e,EAAU,MAAE9e,EAAK,iBAAEie,GAAqBvkB,KAAKkG,MAE/CjD,EAA6C,CAAC,EAGpD,OAFAjD,KAAKkG,MAAMjD,MAAMxC,SAAQ4O,GAASpM,EAAMoM,EAAK1N,KAAO0N,IAE7CiH,EAAKzG,KAAI,CAACsH,EAAK9F,KAAS,IAADgU,EAAAC,EAAAC,EAAAC,EAC1B,OAAKxlB,KAAKkG,MAAM6T,cAAiB5C,EAAIxC,QAIjC3U,KAAKkG,MAAMue,eAAerd,MAAMqe,OAA2D,IAAnDzlB,KAAKkG,MAAMue,eAAerd,MAAMqe,KAAKtO,EAAIjI,MAC1E,MAIPzK,EAAAA,EAAAA,KAACihB,EAAW,CAER9O,QAAS5W,KAAKkG,MAAM6T,aACpB7K,KAAMiI,EAAIjI,KACV4H,QACsB,QAAlBuO,EAAApG,GAAS9H,EAAIjI,aAAK,IAAAmW,GAAlBA,EAAoB5T,KAChBwN,GAAS9H,EAAIjI,MAAMuC,MAEnBhN,EAAAA,EAAAA,KAACkhB,EAAAA,KAAI,CACDtc,MAAOzE,GAAO6M,KACdkT,IAAKxN,EAAI1F,OAIrB9P,IAAKwV,EAAIjI,KACT6H,SAAUqO,IAAejO,EAAIjI,KAC7BiI,IAAKA,EACLH,SAAUhX,KAAK6iB,eAAiBvc,IAAU0Y,GAC1C/H,aAAcwJ,GAAaE,GAAe,EAC1CzJ,WAAYuJ,EAAY,QAAUE,EAAc,OAAS,GACzDrK,KAAMA,EACNO,WAAYA,IAAM7W,KAAKkhB,uBACvB7K,QAAUuP,GAAuB5lB,KAAKwD,SAAS,CAAE8S,KAAMsP,IAAUtiB,UAEjEmB,EAAAA,EAAAA,KAACuX,EAAU,CAEPjC,aAAc/Z,KAAKkG,MAAM6T,aACzBpF,QAASwC,EAAIxC,QACbpP,MAAO4R,EAAI5R,MACXyU,aAAcA,CAACoH,EAAc7b,IAAUvF,KAAKkhB,qBAAqB7P,EAAK+P,EAAc7b,GACpFyR,SAAUhX,KAAK6iB,eAAiBvc,IAAU0Y,GAC1CvL,QAASpS,IACDA,EAAEwkB,SAAWxkB,EAAEykB,UACVC,EAAAA,EAAAA,SACD/lB,KAAKkG,MAAMic,gBACXhL,EAAIjI,KACJlP,KAAKkG,MAAM8f,SACX/iB,EACAjD,KAAKkG,MAAM+f,cACXjmB,KAAKkG,MAAM8D,WACbhJ,MAAKmS,IACCA,GACA+S,QAAQC,IAAIhT,GAEZ7R,OACK6O,KAAK,GAADpP,OACEO,OAAO0R,SAASE,SAAQ,MAAAnS,OAAKO,OAAO0R,SAAS3D,KAAI,KAAAtO,OAAIoS,GACxDgE,EAAIjI,MAEPkX,SAEL7B,EAAiBpN,EAAIjI,KACzB,IAGJqV,EAAiBpN,EAAIjI,KACzB,EAEJuC,KACsB,QAAlB6T,EAAArG,GAAS9H,EAAIjI,aAAK,IAAAoW,GAAlBA,EAAoB7T,KAChBwN,GAAS9H,EAAIjI,MAAMuC,MAEnBhN,EAAAA,EAAAA,KAACkhB,EAAAA,KAAI,CACDhB,IAAKxN,EAAI1F,KACTpI,MAAOzE,GAAO6M,OAI1BrJ,KAAM+O,EAAI5G,MACVwG,SAAUqO,IAAejO,EAAIjI,KAC7B+H,aAAcjX,KAAK2hB,MAAMxK,GAAKhL,QAC9B+K,WAAYlX,KAAK2hB,MAAMxK,GAAK5R,MAC5B0U,uBAAuC,QAAjBsL,EAAEvlB,KAAK2hB,MAAMxK,UAAI,IAAAoO,OAAA,EAAfA,EAAiB3D,kBACzC1H,qBAAqC,QAAjBsL,EAAExlB,KAAK2hB,MAAMxK,UAAI,IAAAqO,OAAA,EAAfA,EAAiB3D,gBACvC5X,MAAOjK,KAAKkG,MAAM+D,OAjDbkN,EAAIjI,OAxBRiI,EAAIjI,MATN,IAoFO,GAG1B,CAqCA7E,MAAAA,GACI,OAAIrK,KAAK6iB,eAED3Z,EAAAA,EAAAA,MAACmd,EAAAA,gBAAe,CACZ7d,GAAIC,EAAAA,MAAM8R,SAASva,KAAKkG,MAAM+D,MAAOrF,GAAOtF,KAAM,CAAE,6BAA8BsF,GAAOgG,QACzF0b,OAAO,OACPnW,KAAMnQ,KAAKkG,MAAMI,QAAU0Y,GAC3BnR,QAASA,IAAM7N,KAAKkG,MAAM+e,cAAcjG,IACxCuH,OAAQA,IAAMvmB,KAAKkG,MAAM+e,cAAcjG,IAAoB1b,SAAA,EAE3DmB,EAAAA,EAAAA,KAAC+hB,GAAe,CAACvc,MAAOjK,KAAKkG,MAAM+D,QAElCjK,KAAKskB,aAEN7f,EAAAA,EAAAA,KAACgiB,EAAAA,KAAI,CAAAnjB,SAAEtD,KAAKmlB,uBACXnlB,KAAKkG,MAAMse,WACR/f,EAAAA,EAAAA,KAACuX,EAAU,CACP/R,MAAOjK,KAAKkG,MAAM+D,MAClB+M,SAAUhX,KAAK6iB,eAAiB7iB,KAAKkG,MAAMI,QAAU0Y,GACrDvL,QAASzT,KAAKkG,MAAMwgB,SACpBte,KAAMpI,KAAKkG,MAAM2C,EAAE,UACnB4I,MAAMhN,EAAAA,EAAAA,KAACkiB,EAAAA,WAAU,OAG0B,IAAlD3mB,KAAKkG,MAAMue,eAAerd,MAAMqe,KAAKmB,UAAsB5mB,KAAKkG,MAAMI,QAAU0Y,KAC7Eva,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOma,WAAWzb,UAC1BmB,EAAAA,EAAAA,KAACoiB,GAAY,CACT9M,aAAc/Z,KAAKkG,MAAM6T,aACzBtG,QAASA,IAAMzT,KAAKkG,MAAM4c,iBAAiB9iB,KAAKkG,MAAM6T,sBAS1E7Q,EAAAA,EAAAA,MAAC4d,EAAAA,OAAc,CACXte,GAAIC,EAAAA,MAAM8R,SACNva,KAAKkG,MAAM+D,MACXrF,GAAOtF,KACPU,KAAKkG,MAAMI,QAAU0Y,GACfpa,GAAOmZ,iBACP/d,KAAKkG,MAAM6T,aACTnV,GAAOkZ,cACPlZ,GAAOiZ,cACf,CACI,qBAAsBjZ,GAAOgG,QAGrCqG,QAAQ,aACRqV,OAAO,OACPnW,KAAMnQ,KAAKkG,MAAMI,QAAU0Y,GAC3B+H,aAAcA,IAAM/mB,KAAKigB,cAAcjI,UAAYhY,KAAKigB,cAAcjI,QAAQ3O,MAAMjE,QAAU,KAC9F4hB,aAAcA,IAAMhnB,KAAKigB,cAAcjI,UAAYhY,KAAKigB,cAAcjI,QAAQ3O,MAAMjE,QAAU,KAAK9B,SAAA,EAEnGmB,EAAAA,EAAAA,KAAC+hB,GAAe,CAACvc,MAAOjK,KAAKkG,MAAM+D,QAClCjK,KAAKskB,aACN7f,EAAAA,EAAAA,KAACgiB,EAAAA,KAAI,CAACpd,MAAOzE,GAAO0Z,KAAKhb,SAAEtD,KAAKmlB,uBAC/BnlB,KAAKkG,MAAMse,WACR/f,EAAAA,EAAAA,KAACuX,EAAU,CACP/R,MAAOjK,KAAKkG,MAAM+D,MAClBZ,MAAO,CAAEiU,WAAY,GACrBtG,SAAUhX,KAAK6iB,eAAiB7iB,KAAKkG,MAAMI,QAAU0Y,GACrDvL,QAASzT,KAAKkG,MAAMwgB,SACpBte,KAAMpI,KAAKkG,MAAM2C,EAAE,UACnB4I,MAAMhN,EAAAA,EAAAA,KAACkiB,EAAAA,WAAU,OAG0B,IAAlD3mB,KAAKkG,MAAMue,eAAerd,MAAMqe,KAAKmB,UAAsB5mB,KAAKkG,MAAMI,QAAU0Y,KAC7Eva,EAAAA,EAAAA,KAAA,OACI4E,OAAKxF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAOe,GAAOma,YAAU,IAAE3Z,QAAS,IACxCgS,IAAKpX,KAAKigB,cAAc3c,UAExBmB,EAAAA,EAAAA,KAACoiB,GAAY,CACT7R,KAAK,QACL+E,aAAc/Z,KAAKkG,MAAM6T,aACzBtG,QAASA,IAAMzT,KAAKkG,MAAM4c,iBAAiB9iB,KAAKkG,MAAM6T,oBAM9E,EAGJgG,GAAOkH,YAAcpkB,EACrB,UAAeqkB,EAAAA,EAAAA,YAAf,CAA2BnH,IC71BrBnb,GAA8C,CAChDtF,KAAM,CACF8M,KAAM,EACN5G,IAAK,EACLR,MAAO,OACP6F,OAAQ,OACR/F,SAAU,QACV6F,WAAY,oBACZqB,OAAQ,KAEZmb,WAAY,CACR/a,KAAM,MACN5G,IAAK,MACLR,MAAO,MACP6F,OAAQ,MACR/F,SAAU,YAEdsiB,QAAS,CACLC,UAAW,iDAEfC,KAAM,CACFC,gBAAiB,IACjBC,iBAAkB,EAClBC,gBAAiB,SACjBJ,UAAW,uFAwEnB,SApEA,WACI,OACIne,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAOtF,KAAKgE,SAAA,EACpBmB,EAAAA,EAAAA,KAAA,SAAAnB,SAAA,maAAAvC,OAjCG,IAsDwB,gEAAAA,OAGN2mB,MAAU,yGAAA3mB,OAzD5B,IA6DwB,yPAc3B0D,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOuiB,WAAW7jB,UAC1BmB,EAAAA,EAAAA,KAAA,OACI4E,MAAOzE,GAAOwiB,QACdpiB,MAAM,OACN6F,OAAO,OACP8c,QAAQ,YACRC,MAAM,6BAA4BtkB,UAElCmB,EAAAA,EAAAA,KAAA,UACI4E,MAAOzE,GAAO0iB,KACdO,KAAK,OACLC,YAAY,IACZC,cAAc,QACdC,GAAG,KACHC,GAAG,KACHC,EAAE,aAM1B,ECtFMtjB,GAA8B,CAChCgG,MAAO,CACHC,OAAQ,OACRga,UAAW,OACX7Z,SAAU,OACVG,SAAU,UAEdoF,MAAQtG,IAAe,CACnB1E,MAAO0E,EAAMS,QAAQyd,UAAU5O,OAEnC6O,KAAM,CACFvd,OAAO,eAAD9J,OAAiBsnB,GAAkB,OACzCld,SAAU,QAEdmd,MAAO,CACHtjB,MAAO,IACP0Z,aAAc,IAElB6J,KAAM,CACF1U,SAAU,GAEdsK,QAAS,CACLtT,OAxBe,GAyBf6Z,WAAW,GAAD3jB,OAzBK,GAyBc,QAgBrC,MAAMynB,WAA0BviB,EAAAA,UAG5B7G,WAAAA,CAAY8G,GACRC,MAAMD,GAAO,KAHAuiB,cAAQ,EAKrBzoB,KAAKsG,MAAQ,CACToiB,SAAU,GACVC,eAAgB,GAChBC,eAAe,EACfC,qBAAqB,GAGzB7oB,KAAKyoB,UAAWK,EAAAA,EAAAA,YACpB,CAEA9hB,iBAAAA,GAA2B,IAAD+hB,EACD,QAArBA,EAAA/oB,KAAKyoB,SAASzQ,eAAO,IAAA+Q,GAArBA,EAAuB3C,OAC3B,CAEA/b,MAAAA,GACI,OACInB,EAAAA,EAAAA,MAACgU,EAAAA,MAAK,CAAC7T,MAAOzE,GAAOgG,MAAMtH,SAAA,EACvBmB,EAAAA,EAAAA,KAAA,QACI4E,MAAOzE,GAAOwjB,KACdY,YAAU,EACVC,aAAa,MAAK3lB,UAElB4F,EAAAA,EAAAA,MAACsR,EAAAA,MAAK,CACFC,WAAS,EACTyO,UAAU,SAAQ5lB,SAAA,EAElBmB,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAAAlX,UACFmB,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,KACV9B,GAAI5D,GAAO2L,MAAMjN,SAEhBtD,KAAKkG,MAAM2C,EAAE,gDAGtBpE,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAAAlX,UACFmB,EAAAA,EAAAA,KAAC0kB,EAAAA,UAAS,CACNlY,QAAQ,WACR/C,UAAQ,EACR7E,MAAOzE,GAAO0jB,MACd/W,MAAOvR,KAAKkG,MAAM2C,EAAE,sBACpBlE,MAAM,QACN6L,UAAW,CACP8X,MAAO,CAAEc,UAAU,IAEvBC,WAAYrpB,KAAKkG,MAAM2C,EAAE,6CAGjCpE,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAAAlX,UACFmB,EAAAA,EAAAA,KAAC0kB,EAAAA,UAAS,CACNlY,QAAQ,WACRT,UAAW,CACP8X,MAAO,CACHW,aAAc,gBAElBK,UAAW,CACPL,aAAc,QAGtBM,UAAWloB,IACP,GAAc,UAAVA,EAAEyO,KAAmB9P,KAAKsG,MAAMoiB,WAAa1oB,KAAKsG,MAAMsiB,cAAe,CACvE,MAAMpM,EAAKlb,OAAOkoB,SAASC,eAAe,kBACtCjN,GACAA,EAAG4J,OAEX,GAEJ6C,aAAa,MACb5f,MAAOzE,GAAO0jB,MACdlR,IAAKpX,KAAKyoB,SACVlX,MAAOvR,KAAKkG,MAAM2C,EAAE,0BACpB3I,KAAK,WACLyE,MAAO3E,KAAKsG,MAAMoiB,SAClBtf,QAASpJ,KAAKsG,MAAMsiB,cACpBnf,SAAUpI,IACN,MAAMunB,EAAgBxoB,EAAAA,EAAWspB,cAAcroB,EAAEsR,OAAOhO,OAClDkkB,EAAsBzoB,EAAAA,EAAWspB,cACnCroB,EAAEsR,OAAOhO,MACT3E,KAAKsG,MAAMqiB,gBAEf3oB,KAAKwD,SAAS,CACVklB,SAAUrnB,EAAEsR,OAAOhO,MACnBikB,gBAAeA,GAAgB5oB,KAAKkG,MAAM2C,EAAE+f,GAC5CC,sBAAqBA,GACf7oB,KAAKkG,MAAM2C,EAAEggB,IAErB,EAENQ,WAAYrpB,KAAKkG,MAAM2C,EACnB,mGAIZpE,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAAAlX,UACFmB,EAAAA,EAAAA,KAAC0kB,EAAAA,UAAS,CACNlY,QAAQ,WACRT,UAAW,CACP8X,MAAO,CACHW,aAAc,gBAElBK,UAAW,CACPL,aAAc,MACdnpB,GAAI,mBAGZypB,UAAWloB,IAEO,UAAVA,EAAEyO,MACF9P,KAAKsG,MAAMoiB,UACV1oB,KAAKsG,MAAMsiB,eACX5oB,KAAKsG,MAAMuiB,qBAEZ7oB,KAAKkG,MAAMyjB,OAAO3pB,KAAKsG,MAAMoiB,SACjC,EAEJO,aAAa,MACb5f,MAAOzE,GAAO0jB,MACd/W,MAAOvR,KAAKkG,MAAM2C,EAAE,iCACpBlE,MAAO3E,KAAKsG,MAAMqiB,eAClBzoB,KAAK,WACLkJ,QAASpJ,KAAKsG,MAAMuiB,oBACpBpf,SAAUpI,IACN,MAAMwnB,EAAsBzoB,EAAAA,EAAWspB,cACnC1pB,KAAKsG,MAAMoiB,SACXrnB,EAAEsR,OAAOhO,OAEb3E,KAAKwD,SAAS,CACVmlB,eAAgBtnB,EAAEsR,OAAOhO,MACzBkkB,sBAAqBA,GACf7oB,KAAKkG,MAAM2C,EAAEggB,IAErB,EAENQ,WAAYrpB,KAAKsG,MAAMuiB,qBAAuB,aAK9D3f,EAAAA,EAAAA,MAAC0gB,EAAAA,QAAO,CAACvgB,MAAOzE,GAAOuZ,QAAQ7a,SAAA,EAC3BmB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO2jB,QACnB9jB,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHhO,MAAM,UACN0L,QAAQ,YACRwC,QAASA,IAAMzT,KAAKkG,MAAMyjB,OAAO3pB,KAAKsG,MAAMoiB,UAC5Cxa,UACKlO,KAAKsG,MAAMqiB,kBAAoB3oB,KAAKsG,MAAMuiB,uBAAyB7oB,KAAKsG,MAAMsiB,cAEnFlV,WAAWjP,EAAAA,EAAAA,KAAColB,EAAAA,MAAS,IAAIvmB,SAExBtD,KAAKkG,MAAM2C,EAAE,qCAKlC,EAGJ,UAAeqe,EAAAA,EAAAA,YAAf,CAA2BsB,I,gBCrN3B,MAqGA,GArGoD,CAChDlgB,GACI,qlCAQJwhB,GACI,6pCAQJC,GACI,kqNAQJ9F,GACI,mtCAQJ+F,GACI,2kCAQJC,GACI,8kCAQJC,GACI,4kCAQJC,GACI,isCAQJxQ,GACI,4kCAQJyQ,GACI,onCAQJ,QACI,ghDC9DFxlB,GAA8B,CAChCgG,MAAO,CACHC,OAAQ,OACRga,UAAW,OACX7Z,SAAU,OACVG,SAAU,UAEdkf,QAAS,CACLxf,OAAO,eAAD9J,OAVS,GAUsB,OACrCiE,MAAO,OACPmG,SAAU,SACVgS,QAAS,GACTmN,UAAW,UAEfC,eAAgB,CACZ3P,SAAU,IACVvK,YAAa,IAEjBma,WAAY,CACRxlB,MAAO,OACP6F,OAAO,eAAD9J,OAAiB,IAAO,OAC9BoK,SAAU,QAEdod,KAAM,CACF1U,SAAU,GAEd4W,WAAY,CACRhM,UAAW,GACXlZ,MAAO,WAEXmlB,cAAe,CACX3lB,QAAS,gBAEb4lB,eAAgB,CACZL,UAAW,OACXla,WAAY,IAEhBwa,YAAa,CACTxa,WAAY,GAEhB+N,QAAS,CACLtT,OA3Ce,GA4Cf6Z,WAAW,GAAD3jB,OA5CK,GA4Cc,OAEjC8pB,eAAgB,CACZ7lB,MAAO,OACPgG,SAAU,IACVsf,UAAW,OACX3e,OAAQ,QAEZmf,YAAa,CACTpM,aAAc,KAqBtB,MAAMqM,WAAyB9kB,EAAAA,UAG3B7G,WAAAA,CAAY8G,GACRC,MAAMD,GAAO,KAHAuiB,cAAQ,EAKrBzoB,KAAKsG,MAAQ,CACT0kB,oBAAoB,EACpB1H,KAAMtjB,KAAKkG,MAAMod,MAAQ1a,EAAAA,KAAK4I,cAC9ByZ,UAAU,EACVC,SAAU,KACVC,YAAY,EACZC,sBAAsB,GAG1BprB,KAAKyoB,UAAWK,EAAAA,EAAAA,YACpB,CAEA9hB,iBAAAA,GAA2B,IAAD+hB,EACD,QAArBA,EAAA/oB,KAAKyoB,SAASzQ,eAAO,IAAA+Q,GAArBA,EAAuB3C,OAC3B,CAEA,oBAAMiF,GAEF,MAAMriB,QAAiBhJ,KAAKkG,MAAM7G,OAAOisB,qBAEnCC,QAA2CvrB,KAAKkG,MAAM7G,OAAOmsB,UAAU,kBAADzqB,OACtDiI,IAGhBkiB,QAAiBlrB,KAAKkG,MAAM7G,OAAOosB,YAAYF,EAASnnB,OAAOiL,KAAM,YAE3ErP,KAAKwD,SAAS,CAAE0nB,WAAUC,YAAY,GAC1C,CAEAO,sBAAAA,GACI,OAAK1rB,KAAKsG,MAAM8kB,sBAIZliB,EAAAA,EAAAA,MAACgH,EAAAA,OAAM,CACHC,MAAM,EACNnF,SAAS,KACT0J,WAAS,EACTlM,GAAI,CAAE,qBAAsB,CAAEqc,UAAW,oBAAqBha,OAAQ,sBACtEgD,QAASA,IAAM7N,KAAKwD,SAAS,CAAE4nB,sBAAsB,IAAS9nB,SAAA,EAE9DmB,EAAAA,EAAAA,KAACqQ,EAAAA,YAAW,CAAAxR,SAAEtD,KAAKkG,MAAM2C,EAAE,iBAC3BK,EAAAA,EAAAA,MAACyH,EAAAA,cAAa,CAAArN,SAAA,CACTtD,KAAKsG,MAAM6kB,aAAc1mB,EAAAA,EAAAA,KAACqE,EAAAA,eAAc,IACxC9I,KAAKsG,MAAM6kB,aAAc1mB,EAAAA,EAAAA,KAAA,OAAAnB,SAAMtD,KAAKkG,MAAM2C,EAAE,yBAC3C7I,KAAKsG,MAAM6kB,aACT1mB,EAAAA,EAAAA,KAAA,OAAK4E,MAAO,CAAE3D,SAAU,GAAIgZ,aAAc,GAAIpb,SACzCtD,KAAKkG,MAAM2C,EACR,oIAIV7I,KAAKsG,MAAM6kB,aACT1mB,EAAAA,EAAAA,KAACknB,GAAAA,EAAM,CACHtiB,MAAO,CAAEwB,OAAQ,qBACjB+gB,eAAa,EACb5hB,UAAWhK,KAAKkG,MAAM8D,UACtBrF,MAAOrE,KAAKC,UAAUP,KAAKsG,MAAM4kB,SAAU,KAAM,SAI7DzmB,EAAAA,EAAAA,KAAC6O,EAAAA,cAAa,CAAAhQ,UACVmB,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHtC,QAAQ,YACRwC,QAASA,IAAMzT,KAAKwD,SAAS,CAAE4nB,sBAAsB,IACrD7lB,MAAM,UACNiO,WAAS,EACTE,WAAWjP,EAAAA,EAAAA,KAAConB,EAAAA,MAAK,IAAIvoB,SAEpBsF,EAAAA,KAAKC,EAAE,gBAtCb,IA2Cf,CAEAijB,cAAAA,GACI,OAAK9rB,KAAKsG,MAAM2kB,UAIZ/hB,EAAAA,EAAAA,MAACgH,EAAAA,OAAM,CACHC,MAAM,EACNtC,QAASA,IAAM7N,KAAKwD,SAAS,CAAEynB,UAAU,IAAS3nB,SAAA,EAElDmB,EAAAA,EAAAA,KAACqQ,EAAAA,YAAW,CAAAxR,SAAEtD,KAAKkG,MAAM2C,EAAE,cAC3BpE,EAAAA,EAAAA,KAACkM,EAAAA,cAAa,CAAArN,UACV4F,EAAAA,EAAAA,MAAC6iB,EAAAA,kBAAiB,CAACjsB,GAAG,2BAA0BwD,SAAA,EAC5CmB,EAAAA,EAAAA,KAAA,QACIiJ,KAAK,MACL,aAAW,UAASpK,SACvB,iBAEO,IACPtD,KAAKkG,MAAM2C,EAAE,yCAGtBpE,EAAAA,EAAAA,KAAC6O,EAAAA,cAAa,CAAAhQ,UACVmB,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHtC,QAAQ,YACRwC,QAASA,IAAMzT,KAAKwD,SAAS,CAAEynB,UAAU,IACzC1lB,MAAM,UACNmO,WAAWjP,EAAAA,EAAAA,KAAColB,EAAAA,MAAS,IAAIvmB,SAExBsF,EAAAA,KAAKC,EAAE,qBA1Bb,IA+Bf,CAEA,wBAAOmjB,GACH,MACMC,GADOC,GAAatjB,EAAAA,KAAK4I,gBAAkB0a,GAAa5jB,IAC3CW,MAAM,MACzB,OACIxE,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOimB,eAAevnB,SAC7B2oB,EAAMpc,KAAI,CAACsc,EAAM1Z,KACdhO,EAAAA,EAAAA,KAAA,OACI4E,MAAOzE,GAAOkmB,YAAYxnB,SAGzB6oB,GAFI1Z,MAOzB,CAEApI,MAAAA,GACI,OACInB,EAAAA,EAAAA,MAACgU,EAAAA,MAAK,CAAC7T,MAAOzE,GAAOgG,MAAMtH,SAAA,EACvB4F,EAAAA,EAAAA,MAACsR,EAAAA,MAAK,CACFC,WAAS,EACTpR,MAAOzE,GAAOylB,QACdnB,UAAU,SAAQ5lB,SAAA,EAElB4F,EAAAA,EAAAA,MAACsR,EAAAA,MAAK,CAAAlX,SAAA,EACF4F,EAAAA,EAAAA,MAACkjB,EAAAA,YAAW,CACRnb,QAAQ,WACR5H,MAAOzE,GAAO2lB,eAAejnB,SAAA,EAE7B4F,EAAAA,EAAAA,MAACmjB,EAAAA,WAAU,CAAA/oB,SAAA,EACPmB,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAS,IACTtsB,KAAKkG,MAAM2C,EAAE,gBAElBK,EAAAA,EAAAA,MAACqjB,EAAAA,OAAM,CACHtb,QAAQ,WACRtM,MAAOiE,EAAAA,KAAK4I,cACZ/H,SAAUpI,IACNuH,EAAAA,KAAK4jB,YAAYnrB,EAAEsR,OAAOhO,OAC1B3E,KAAKwD,SAAS,CAAE8f,KAAMjiB,EAAEsR,OAAOhO,OAA8B,EAC/DrB,SAAA,EAEFmB,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,KAAIrB,SAAC,aACrBmB,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,KAAIrB,SAAC,aACrBmB,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,KAAIrB,SAAC,gDACrBmB,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,KAAIrB,SAAC,eACrBmB,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,KAAIrB,SAAC,gBACrBmB,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,KAAIrB,SAAC,iBACrBmB,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,KAAIrB,SAAC,cACrBmB,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,KAAIrB,SAAC,aACrBmB,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,KAAIrB,SAAC,YACrBmB,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,KAAIrB,SAAC,kEACrBmB,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAC,oCAGhC4F,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAO8lB,cAAcpnB,SAAA,EAC7BmB,EAAAA,EAAAA,KAACmR,EAAAA,iBAAgB,CACbvM,MAAOzE,GAAO6lB,WACd5U,SACIpR,EAAAA,EAAAA,KAACqR,EAAAA,SAAQ,CACLsB,IAAKpX,KAAKyoB,SACV1S,QAAS/V,KAAKsG,MAAM0kB,mBACpBvhB,SAAUpI,GAAKrB,KAAKwD,SAAS,CAAEwnB,mBAAoB3pB,EAAEsR,OAAOoD,YAGpExE,MAAOvR,KAAKkG,MAAM2C,EAAE,2DAExBK,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAO+lB,eAAernB,SAAA,CAC7BtD,KAAKkG,MAAM2C,EAAE,6CACdpE,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHtC,QAAQ,WACR5H,MAAO,CAAE+G,WAAY,IACrBqD,QAASA,IACLzT,KAAKwD,SAAS,CAAE4nB,sBAAsB,EAAMD,YAAY,IAAQ,IAC5DnrB,KAAKqrB,mBAEZ/nB,SAEAtD,KAAKkG,MAAM2C,EAAE,yCAK9BpE,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAAAlX,UACFmB,EAAAA,EAAAA,KAAA,MAAAnB,SAAKtD,KAAKkG,MAAM2C,EAAE,sBAEtBpE,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAACnR,MAAOzE,GAAO4lB,WAAWlnB,SAAEynB,GAAiBiB,0BAEvD9iB,EAAAA,EAAAA,MAAC0gB,EAAAA,QAAO,CAACvgB,MAAOzE,GAAOuZ,QAAQ7a,SAAA,EAC3BmB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO2jB,QACnB9jB,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHtC,QAAQ,YACR1L,MAAM,OACNkO,QAASA,IAAMzT,KAAKwD,SAAS,CAAEynB,UAAU,IACzCvX,WAAWjP,EAAAA,EAAAA,KAACioB,EAAAA,MAAU,IAAIppB,SAEzBtD,KAAKkG,MAAM2C,EAAE,gBAElBpE,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHtC,QAAQ,YACR1L,MAAM,UACN8D,MAAOzE,GAAOgmB,YACd1c,UAAWlO,KAAKsG,MAAM0kB,mBACtBvX,QAASA,IAAMzT,KAAKkG,MAAMyjB,OAAO,CAAErG,KAAMtjB,KAAKsG,MAAMgd,OACpD5P,WAAWjP,EAAAA,EAAAA,KAAColB,EAAAA,MAAS,IAAIvmB,SAExBtD,KAAKkG,MAAM2C,EAAE,YAElBpE,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO2jB,UAEtBvoB,KAAK8rB,iBACL9rB,KAAK0rB,2BAGlB,EAGJ,UAAexE,EAAAA,EAAAA,YAAf,CAA2B6D,I,2HCxO3B,MACA,GAAe,IAA0B,6D,+DC7EzC,MAAM4B,GAA0DzmB,IAC5D,MAAM2J,GAAM+c,EAAAA,GAAAA,MAIZ,OAHI1mB,EAAM2mB,QACN3mB,EAAM2mB,OAAOhd,GAEV,IAAI,EAITid,GAAiB,IAEjBloB,GAA8B,CAChCgG,MAAO,CACHC,OAAQ,OACRga,UAAW,OACX7Z,SAAU,OACVG,SAAU,UAEdoF,MAAQtG,IAAe,CACnB1E,MAAO0E,EAAMS,QAAQyd,UAAU5O,OAEnCwT,SAAU,CACNliB,OAAO,eAAD9J,OAdS,GAcsB,OACrCoK,SAAU,QAEdod,KAAM,CACF1U,SAAU,GAEdmZ,QAAS,CACLniB,OAAQ,OACR7F,MAAM,eAADjE,OAAiB+rB,IAAmB,OACzC3hB,SAAU,UAEd0E,IAAK,CACDhF,OAAQ,OACR7F,MAAO,OACPmG,SAAU,UAEd8hB,YAAa,CACTjoB,MAAO8nB,GACPpO,aAAc,GAElBwO,mBAAoB,CAChBloB,MAAO8nB,IACPpO,aAAc,GAElByO,aAAc,CACVnoB,MAAO8nB,IACPzc,YAAa,EACbD,WAAY,EACZka,UAAW,OACXzf,OAAQ,OACRM,SAAU,QAEdgT,QAAS,CACLtT,OA/Ce,GAgDf6Z,WAAW,GAAD3jB,OAhDK,GAgDc,OAEjCqsB,aAAc,CACVpoB,MAAO,OACP6F,OAAQ,sBAIVwiB,GAA4C,CAC9C,CACIvtB,GAAI,SACJyQ,MAAO,UAEX,CACIzQ,GAAI,IACJyQ,MAAO,KAEX,CACIzQ,GAAI,SACJyQ,MAAO,UAEX,CACIzQ,GAAI,SACJyQ,MAAO,UAEX,CACIzQ,GAAI,MACJyQ,MAAO,QAoCf,MAAM+c,WAA0BrnB,EAAAA,UAgB5B7G,WAAAA,CAAY8G,GACRC,MAAMD,GAhBV,KAOQqnB,YAAM,OAEN1d,SAAG,OAEH2d,eAAS,OAETC,kBAAY,OAyDpBC,MAAS7d,IACL,IAAK7P,KAAK6P,KAAO7P,KAAK6P,MAAQA,EAAK,CAC/B7P,KAAK6P,IAAMA,EACX,MAAM8d,EAAsB,CACxBC,gBAAmClc,IAAxB1R,KAAKsG,MAAMunB,SAA0B7tB,KAAKsG,MAAMunB,SAA6B,OAAS,EACjGD,gBAAoClc,IAAzB1R,KAAKsG,MAAMwnB,UAA2B9tB,KAAKsG,MAAMwnB,UAA8B,OAAS,GAGvG9tB,KAAKutB,OAAS,IAAIQ,GAAAA,OAAOJ,EAAQ,CAC7BK,WAAW,EACXzd,MAAO3H,EAAAA,KAAKC,EAAE,qBACd+b,IAAKhc,EAAAA,KAAKC,EAAE,qBACZolB,aAAa,IAEZC,MAAMre,GACNse,UAAU,qCACVC,GAAG,CAAEC,QAAUC,GAAsBtuB,KAAKuuB,gBAAgBD,IACnE,GACF,KAEFC,gBAAmBD,IAEftuB,KAAKwD,SAAS,CAAEqqB,SAAUS,EAAI3b,OAAO6b,QAAQC,IAAKX,UAAWQ,EAAI3b,OAAO6b,QAAQE,KAAM,EACxF,KAsBFC,iBAAmB,CAACL,EAAoCxuB,KACpD,MAAM6E,EAAQ2pB,EAAI3b,OAAOhO,MACd,aAAP7E,EACAE,KAAKwD,SAAS,CAAEqqB,SAAUlpB,IAE1B3E,KAAKwD,SAAS,CAAEsqB,UAAWnpB,IAG/B3E,KAAK4uB,mBAAmB,EAC1B,KA2BFC,gBAAkB,CAACP,EAAoCxuB,KACxC,SAAPA,EACAE,KAAKwD,SAAS,CAAEsrB,KAAMR,EAAI3b,OAAOhO,QACnB,YAAP7E,EACPE,KAAKwD,SAAS,CAAEurB,QAAST,EAAI3b,OAAOhO,QAEpC3E,KAAKwD,SAAS,CAAEwrB,QAASV,EAAI3b,OAAOhO,QAGxC3E,KAAKivB,mBAAmB,EA9IxBjvB,KAAKsG,MAAQ,CACT4oB,SAAU,QACVC,SAAU,SACVhlB,WAAY,aACZD,cAAc,EACd8kB,QAAS,GACTF,KAAM,GACNC,QAAS,GACTjB,UAAW,EACXD,SAAU,EACVuB,eAAgB,SAChBC,KAAM,GAEd,CAEAC,aAAAA,CAAcxqB,GACV9E,KAAKwD,SACD,CACIqqB,SAAUD,WAAW9oB,EAASyqB,OAAO1B,SAAS2B,QAAQ,IACtD1B,UAAWF,WAAW9oB,EAASyqB,OAAOzB,UAAU0B,QAAQ,MAE5D,IAAMxvB,KAAK4uB,qBAEnB,CAEAa,qBAAAA,IACQnuB,OAAOouB,UAAUC,aAAiB3vB,KAAKsG,MAAMwnB,WAAc9tB,KAAKsG,MAAMunB,SAGtE7tB,KAAK4uB,oBAFLttB,OAAOouB,UAAUC,YAAYC,oBAAmB9qB,GAAY9E,KAAKsvB,cAAcxqB,IAIvF,CAEA,uBAAMkC,GACF,MAAMgd,QAAqBhkB,KAAKkG,MAAM7G,OAAO0kB,wBAAuB,GACpE/jB,KAAKwD,SACD,CACI0rB,SAAUlL,EAAa5f,OAAO8qB,SAC9BC,SAAUnL,EAAa5f,OAAO+qB,SAC9BhlB,WAAY6Z,EAAa5f,OAAO+F,WAChCD,aAAc8Z,EAAa5f,OAAO8F,aAClC8kB,QAAShL,EAAa5f,OAAO4qB,QAC7BF,KAAM9K,EAAa5f,OAAO0qB,KAC1BC,QAAS,GACTjB,UAAW9J,EAAa5f,OAAO0pB,UAC/BD,SAAU7J,EAAa5f,OAAOypB,SAC9BuB,eAAgBpL,EAAa5f,OAAOgrB,gBAAkB,WAE1D,IAAMpvB,KAAKyvB,yBAEnB,CA2BAb,iBAAAA,CAAkBiB,GACV7vB,KAAKytB,cACLhR,aAAazc,KAAKytB,cAEtBztB,KAAKytB,aAAe3a,YAChB,KACI9S,KAAKytB,aAAe,KACpBztB,KAAK6P,IAAIigB,MAAM,CACXlC,WAAW5tB,KAAKsG,MAAMunB,UACtBD,WAAW5tB,KAAKsG,MAAMwnB,aAE1B9tB,KAAKutB,OAAOwC,UAAU,CAClBnC,WAAW5tB,KAAKsG,MAAMunB,UACtBD,WAAW5tB,KAAKsG,MAAMwnB,YACxB,GAEN+B,EAAS,EAAI,IAErB,CAaAZ,iBAAAA,GACQjvB,KAAKwtB,WACL/Q,aAAazc,KAAKwtB,WAGtBxtB,KAAKwtB,UAAY1a,YAAW,KACxB9S,KAAKwtB,UAAY,MACA,IAAIwC,GAAAA,uBAGhBC,OAAO,CAAEC,MAAM,GAADnvB,OAAKf,KAAKsG,MAAM0oB,QAAO,KAAAjuB,OAAIf,KAAKsG,MAAMwoB,KAAI,MAAA/tB,OAAKf,KAAKsG,MAAMyoB,WACxE/tB,MAAKmvB,IACEA,EAAQ,IACRrd,YACI,IACI9S,KAAKwD,SAAS,CAAEqqB,SAAUsC,EAAQ,GAAG5X,EAAGuV,UAAWqC,EAAQ,GAAG/U,EAAGiU,KAAM,KAAM,IACzErvB,KAAK4uB,mBAAkB,MAE/B,KAER,GACF,GACP,IACP,CAcAvkB,MAAAA,GACI,MAAMsjB,EAAsB,CACxBC,gBAAoClc,IAAzB1R,KAAKsG,MAAMwnB,UAA2B9tB,KAAKsG,MAAMwnB,UAA8B,OAAS,EACnGF,gBAAoClc,IAAzB1R,KAAKsG,MAAMwnB,UAA2B9tB,KAAKsG,MAAMwnB,UAA8B,OAAS,IAGjG,KAAEuB,GAASrvB,KAAKsG,MAEtB,OACI4C,EAAAA,EAAAA,MAACgU,EAAAA,MAAK,CAAC7T,MAAOzE,GAAOgG,MAAMtH,SAAA,EACvB4F,EAAAA,EAAAA,MAACsR,EAAAA,MAAK,CACFC,WAAS,EACTyO,UAAU,SACV7f,MAAOzE,GAAOmoB,SAASzpB,SAAA,EAEvBmB,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAACnR,MAAOzE,GAAOuoB,aAAa7pB,UAC9B4F,EAAAA,EAAAA,MAACsR,EAAAA,MAAK,CACFC,WAAS,EACTyO,UAAU,SACV7f,MAAO,CAAErE,MAAO,qBAAsB1B,SAAA,EAEtCmB,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAAAlX,UACFmB,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,KACV9B,GAAI5D,GAAO2L,MAAMjN,SAEhBtD,KAAKkG,MAAM2C,EAAE,gCAGtBK,EAAAA,EAAAA,MAACsR,EAAAA,MAAK,CACFC,WAAS,EACTyO,UAAU,SACV7f,MAAOzE,GAAOwoB,aAAa9pB,SAAA,EAE3BmB,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAACnR,MAAO,CAAEihB,UAAW,QAAShnB,UAChC4F,EAAAA,EAAAA,MAACkjB,EAAAA,YAAW,CACRnb,QAAQ,WACR5H,MAAOzE,GAAOqoB,YAAY3pB,SAAA,EAE1BmB,EAAAA,EAAAA,KAAC4nB,EAAAA,WAAU,CAAA/oB,SAAEtD,KAAKkG,MAAM2C,EAAE,uBAC1BK,EAAAA,EAAAA,MAACqjB,EAAAA,OAAM,CACHtb,QAAQ,WACRtM,MAAO3E,KAAKsG,MAAM4oB,SAClBzlB,SAAUpI,GAAKrB,KAAKwD,SAAS,CAAE0rB,SAAU7tB,EAAEsR,OAAOhO,QAAwBrB,SAAA,EAE1EmB,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAIrB,SAAC,WACrBmB,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAIrB,SAAC,mBAIjCmB,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAAAlX,UACFmB,EAAAA,EAAAA,KAAC2rB,EAAAA,aAAY,CACTC,UAAQ,EACRC,QAASjD,GACTkD,WAAYvwB,KAAKsG,MAAM6oB,SACvB1lB,SAAUA,CAACmF,EAAQoC,IACfhR,KAAKwD,SAAS,CAAE2rB,SAAUne,EAAWA,EAASlR,GAAK,KAEvD0wB,cAAeA,CAAC5hB,EAAQugB,IAAanvB,KAAKwD,SAAS,CAAE2rB,aACrDsB,eAAiBC,GAA0CA,EAAOngB,MAClEogB,aAAcA,CAACzqB,EAAOwqB,KAClBjsB,EAAAA,EAAAA,KAAA,MAAAZ,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAQqC,GAAK,IAAA5C,SAAGotB,EAAOngB,SAE3BqgB,YAAaC,IACTpsB,EAAAA,EAAAA,KAAC0kB,EAAAA,WAAStlB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACFgtB,GAAM,IACV5f,QAAQ,WACRM,MAAOvR,KAAKkG,MAAM2C,EAAE,oBAKpCpE,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAACnR,MAAO,CAAEihB,UAAW,QAAShnB,UAChC4F,EAAAA,EAAAA,MAACkjB,EAAAA,YAAW,CACRnb,QAAQ,WACR5H,MAAOzE,GAAOqoB,YAAY3pB,SAAA,EAE1BmB,EAAAA,EAAAA,KAAC4nB,EAAAA,WAAU,CAAA/oB,SAAEtD,KAAKkG,MAAM2C,EAAE,kBAC1BK,EAAAA,EAAAA,MAACqjB,EAAAA,OAAM,CACHtb,QAAQ,WACRtM,MAAO3E,KAAKsG,MAAM6D,WAClBV,SAAUpI,GAAKrB,KAAKwD,SAAS,CAAE2G,WAAY9I,EAAEsR,OAAOhO,QAASrB,SAAA,EAE7DmB,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,aAAYrB,SAAC,gBAC7BmB,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,aAAYrB,SAAC,gBAC7BmB,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,aAAYrB,SAAC,wBAIzCmB,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAACnR,MAAO,CAAEihB,UAAW,QAAShnB,UAChC4F,EAAAA,EAAAA,MAACkjB,EAAAA,YAAW,CACRnb,QAAQ,WACR5H,MAAOzE,GAAOqoB,YAAY3pB,SAAA,EAE1BmB,EAAAA,EAAAA,KAAC4nB,EAAAA,WAAU,CAAA/oB,SAAEtD,KAAKkG,MAAM2C,EAAE,oBAC1BK,EAAAA,EAAAA,MAACqjB,EAAAA,OAAM,CACHtb,QAAQ,WACRtM,MAAO3E,KAAKsG,MAAM4D,aAAe,OAAS,QAC1CT,SAAUpI,GAAKrB,KAAKwD,SAAS,CAAE0G,aAAiC,SAAnB7I,EAAEsR,OAAOhO,QAAoBrB,SAAA,EAE1E4F,EAAAA,EAAAA,MAACujB,EAAAA,SAAQ,CAAC9nB,MAAM,OAAMrB,SAAA,CACjBtD,KAAKkG,MAAM2C,EAAE,UACdpE,EAAAA,EAAAA,KAAA,QAAM4E,MAAO,CAAE+G,WAAY,GAAI9M,SAAC,eAEpC4F,EAAAA,EAAAA,MAACujB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAA,CAClBtD,KAAKkG,MAAM2C,EAAE,UACdpE,EAAAA,EAAAA,KAAA,QAAM4E,MAAO,CAAE+G,WAAY,GAAI9M,SAAC,uBAKhDmB,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAACnR,MAAO,CAAEihB,UAAW,QAAShnB,UAChC4F,EAAAA,EAAAA,MAACkjB,EAAAA,YAAW,CACRnb,QAAQ,WACR5H,MAAOzE,GAAOqoB,YAAY3pB,SAAA,EAE1BmB,EAAAA,EAAAA,KAAC4nB,EAAAA,WAAU,CAAA/oB,SAAEtD,KAAKkG,MAAM2C,EAAE,cAC1BK,EAAAA,EAAAA,MAACqjB,EAAAA,OAAM,CACHtb,QAAQ,WACRtM,MAAO3E,KAAKsG,MAAM0oB,SAAW,GAC7BvlB,SAAUpI,GAAKrB,KAAK6uB,gBAAgBxtB,EAAG,WAAWiC,SAAA,EAElDmB,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,GAAErB,SAAEtD,KAAKkG,MAAM2C,EAAE,4BACjCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,cAAarB,SAAEtD,KAAKkG,MAAM2C,EAAE,kBAC5CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,qBAAoBrB,SAC/BtD,KAAKkG,MAAM2C,EAAE,yBAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,cAAarB,SAAEtD,KAAKkG,MAAM2C,EAAE,kBAC5CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,iBAAgBrB,SAAEtD,KAAKkG,MAAM2C,EAAE,qBAC/CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,gBAAerB,SAAEtD,KAAKkG,MAAM2C,EAAE,oBAC9CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,YAEtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,cAAarB,SAAEtD,KAAKkG,MAAM2C,EAAE,kBAC5CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,iBAAgBrB,SAAEtD,KAAKkG,MAAM2C,EAAE,qBAC/CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,WAAUrB,SAAEtD,KAAKkG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,aAAYrB,SAAEtD,KAAKkG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,sBAAqBrB,SAChCtD,KAAKkG,MAAM2C,EAAE,0BAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,YAAWrB,SAAEtD,KAAKkG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,YAAWrB,SAAEtD,KAAKkG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,aAAYrB,SAAEtD,KAAKkG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,aAAYrB,SAAEtD,KAAKkG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,WAAUrB,SAAEtD,KAAKkG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,yBAAwBrB,SACnCtD,KAAKkG,MAAM2C,EAAE,6BAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,WAAUrB,SAAEtD,KAAKkG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,gBAAerB,SAAEtD,KAAKkG,MAAM2C,EAAE,oBAC9CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,iCAAgCrB,SAC3CtD,KAAKkG,MAAM2C,EAAE,qCAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,oBAAmBrB,SAC9BtD,KAAKkG,MAAM2C,EAAE,wBAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,WAAUrB,SAAEtD,KAAKkG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,eAAcrB,SAAEtD,KAAKkG,MAAM2C,EAAE,mBAC7CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,WAAUrB,SAAEtD,KAAKkG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,WAAUrB,SAAEtD,KAAKkG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,aAAYrB,SAAEtD,KAAKkG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,iBAAgBrB,SAAEtD,KAAKkG,MAAM2C,EAAE,qBAC/CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,2BAA0BrB,SACrCtD,KAAKkG,MAAM2C,EAAE,+BAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,OAAMrB,SAAEtD,KAAKkG,MAAM2C,EAAE,WACrCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,mBAAkBrB,SAC7BtD,KAAKkG,MAAM2C,EAAE,uBAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,gBAAerB,SAAEtD,KAAKkG,MAAM2C,EAAE,oBAC9CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,WAAUrB,SAAEtD,KAAKkG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,eAAcrB,SAAEtD,KAAKkG,MAAM2C,EAAE,mBAC7CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,aAAYrB,SAAEtD,KAAKkG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,OAAMrB,SAAEtD,KAAKkG,MAAM2C,EAAE,WACrCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,iBAAgBrB,SAAEtD,KAAKkG,MAAM2C,EAAE,qBAC/CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,WAAUrB,SAAEtD,KAAKkG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,WAAUrB,SAAEtD,KAAKkG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,qBAAoBrB,SAC/BtD,KAAKkG,MAAM2C,EAAE,yBAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,aAAYrB,SAAEtD,KAAKkG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,cAAarB,SAAEtD,KAAKkG,MAAM2C,EAAE,kBAC5CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,oBAAmBrB,SAC9BtD,KAAKkG,MAAM2C,EAAE,wBAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,WAAUrB,SAAEtD,KAAKkG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,8BAA6BrB,SACxCtD,KAAKkG,MAAM2C,EAAE,kCAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,gBAAerB,SAAEtD,KAAKkG,MAAM2C,EAAE,oBAC9CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,OAAMrB,SAAEtD,KAAKkG,MAAM2C,EAAE,WACrCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,gBAAerB,SAAEtD,KAAKkG,MAAM2C,EAAE,oBAC9CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,mBAAkBrB,SAC7BtD,KAAKkG,MAAM2C,EAAE,uBAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,8BAA6BrB,SACxCtD,KAAKkG,MAAM2C,EAAE,kCAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,YAAWrB,SAAEtD,KAAKkG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,WAAUrB,SAAEtD,KAAKkG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,YAAWrB,SAAEtD,KAAKkG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,aAAYrB,SAAEtD,KAAKkG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,OAAMrB,SAAEtD,KAAKkG,MAAM2C,EAAE,WACrCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,YAAWrB,SAAEtD,KAAKkG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,gBAAerB,SAAEtD,KAAKkG,MAAM2C,EAAE,oBAC9CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,8BAA6BrB,SACxCtD,KAAKkG,MAAM2C,EAAE,kCAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,WAAUrB,SAAEtD,KAAKkG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,YAAWrB,SAAEtD,KAAKkG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,cAAarB,SAAEtD,KAAKkG,MAAM2C,EAAE,kBAC5CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,YAAWrB,SAAEtD,KAAKkG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,OAAMrB,SAAEtD,KAAKkG,MAAM2C,EAAE,WACrCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,OAAMrB,SAAEtD,KAAKkG,MAAM2C,EAAE,WACrCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,cAAarB,SAAEtD,KAAKkG,MAAM2C,EAAE,kBAC5CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,aAAYrB,SAAEtD,KAAKkG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,WAAUrB,SAAEtD,KAAKkG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,aAAYrB,SAAEtD,KAAKkG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,mCAAkCrB,SAC7CtD,KAAKkG,MAAM2C,EAAE,uCAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,yBAAwBrB,SACnCtD,KAAKkG,MAAM2C,EAAE,6BAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,gBAAerB,SAAEtD,KAAKkG,MAAM2C,EAAE,oBAC9CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,YAAWrB,SAAEtD,KAAKkG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,aAAYrB,SAAEtD,KAAKkG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,YAAWrB,SAAEtD,KAAKkG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,aAAYrB,SAAEtD,KAAKkG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,WAAUrB,SAAEtD,KAAKkG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,WAAUrB,SAAEtD,KAAKkG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,OAAMrB,SAAEtD,KAAKkG,MAAM2C,EAAE,WACrCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,mBAAkBrB,SAC7BtD,KAAKkG,MAAM2C,EAAE,uBAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,aAAYrB,SAAEtD,KAAKkG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,aAAYrB,SAAEtD,KAAKkG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,YAAWrB,SAAEtD,KAAKkG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,aAAYrB,SAAEtD,KAAKkG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,WAAUrB,SAAEtD,KAAKkG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,aAAYrB,SAAEtD,KAAKkG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,aAAYrB,SAAEtD,KAAKkG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,aAAYrB,SAAEtD,KAAKkG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,uBAAsBrB,SACjCtD,KAAKkG,MAAM2C,EAAE,2BAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,gBAAerB,SAAEtD,KAAKkG,MAAM2C,EAAE,oBAC9CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,cAAarB,SAAEtD,KAAKkG,MAAM2C,EAAE,kBAC5CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,YAAWrB,SAAEtD,KAAKkG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,OAAMrB,SAAEtD,KAAKkG,MAAM2C,EAAE,WACrCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,iBAAgBrB,SAAEtD,KAAKkG,MAAM2C,EAAE,qBAC/CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,2BAA0BrB,SACrCtD,KAAKkG,MAAM2C,EAAE,+BAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,OAAMrB,SAAEtD,KAAKkG,MAAM2C,EAAE,WACrCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,WAAUrB,SAAEtD,KAAKkG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,YAAWrB,SAAEtD,KAAKkG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,mBAAkBrB,SAC7BtD,KAAKkG,MAAM2C,EAAE,uBAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,WAAUrB,SAAEtD,KAAKkG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,OAAMrB,SAAEtD,KAAKkG,MAAM2C,EAAE,WACrCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,cAAarB,SAAEtD,KAAKkG,MAAM2C,EAAE,kBAC5CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,WAAUrB,SAAEtD,KAAKkG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,WAAUrB,SAAEtD,KAAKkG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,cAAarB,SAAEtD,KAAKkG,MAAM2C,EAAE,kBAC5CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,wBAAuBrB,SAClCtD,KAAKkG,MAAM2C,EAAE,4BAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,cAAarB,SAAEtD,KAAKkG,MAAM2C,EAAE,kBAC5CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,mCAAkCrB,SAC7CtD,KAAKkG,MAAM2C,EAAE,uCAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,aAAYrB,SAAEtD,KAAKkG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,wBAAuBrB,SAClCtD,KAAKkG,MAAM2C,EAAE,4BAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,eAAcrB,SAAEtD,KAAKkG,MAAM2C,EAAE,mBAC7CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,aAAYrB,SAAEtD,KAAKkG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,eAAcrB,SAAEtD,KAAKkG,MAAM2C,EAAE,mBAC7CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,YAAWrB,SAAEtD,KAAKkG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,WAAUrB,SAAEtD,KAAKkG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,WAAUrB,SAAEtD,KAAKkG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,kBAAiBrB,SAC5BtD,KAAKkG,MAAM2C,EAAE,sBAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,eAAcrB,SAAEtD,KAAKkG,MAAM2C,EAAE,mBAC7CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,uCAAsCrB,SACjDtD,KAAKkG,MAAM2C,EAAE,2CAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,YAAWrB,SAAEtD,KAAKkG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,aAAYrB,SAAEtD,KAAKkG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,0BAAyBrB,SACpCtD,KAAKkG,MAAM2C,EAAE,8BAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,WAAUrB,SAAEtD,KAAKkG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,iCAAgCrB,SAC3CtD,KAAKkG,MAAM2C,EAAE,qCAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,YAAWrB,SAAEtD,KAAKkG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,uBAAsBrB,SACjCtD,KAAKkG,MAAM2C,EAAE,2BAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,aAAYrB,SAAEtD,KAAKkG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,WAAUrB,SAAEtD,KAAKkG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,WAAUrB,SAAEtD,KAAKkG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,OAAMrB,SAAEtD,KAAKkG,MAAM2C,EAAE,WACrCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,sBAAqBrB,SAChCtD,KAAKkG,MAAM2C,EAAE,0BAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,eAAcrB,SAAEtD,KAAKkG,MAAM2C,EAAE,mBAC7CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,2BAA0BrB,SACrCtD,KAAKkG,MAAM2C,EAAE,+BAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,uBAAsBrB,SACjCtD,KAAKkG,MAAM2C,EAAE,2BAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,uCAAsCrB,SACjDtD,KAAKkG,MAAM2C,EAAE,2CAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,aAAYrB,SAAEtD,KAAKkG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,qBAAoBrB,SAC/BtD,KAAKkG,MAAM2C,EAAE,yBAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,YAAWrB,SAAEtD,KAAKkG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,UAASrB,SAAEtD,KAAKkG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,2BAA0BrB,SACrCtD,KAAKkG,MAAM2C,EAAE,+BAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,wBAAuBrB,SAClCtD,KAAKkG,MAAM2C,EAAE,4BAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,4BAA2BrB,SACtCtD,KAAKkG,MAAM2C,EAAE,gCAElBpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,iBAAgBrB,SAAEtD,KAAKkG,MAAM2C,EAAE,qBAC/CpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,WAAUrB,SAAEtD,KAAKkG,MAAM2C,EAAE,uBAIrDpE,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAAAlX,UACFmB,EAAAA,EAAAA,KAAC0kB,EAAAA,UAAS,CACNlY,QAAQ,WACRM,MAAOvR,KAAKkG,MAAM2C,EAAE,QACpBQ,MAAOzE,GAAOqoB,YACdtoB,MAAO3E,KAAKsG,MAAMwoB,KAClBrlB,SAAUpI,GAAKrB,KAAK6uB,gBAAgBxtB,EAAG,QACvCmP,UAAW,CACP8X,MAAO,CACHwI,aAAc9wB,KAAKsG,MAAMwoB,MACrBrqB,EAAAA,EAAAA,KAACssB,EAAAA,eAAc,CAACjsB,SAAS,MAAKxB,UAC1BmB,EAAAA,EAAAA,KAACsQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMzT,KAAKwD,SAAS,CAAEsrB,KAAM,KAAMxrB,UAE3CmB,EAAAA,EAAAA,KAACmP,EAAAA,MAAS,QAGlB,YAKpB1K,EAAAA,EAAAA,MAACsR,EAAAA,MAAK,CAAAlX,SAAA,EACFmB,EAAAA,EAAAA,KAAC0kB,EAAAA,UAAS,CACNlY,QAAQ,WACRM,MAAOvR,KAAKkG,MAAM2C,EAAE,WACpBQ,MAAOzE,GAAOsoB,mBACdvoB,MAAO3E,KAAKsG,MAAMyoB,QAClBtlB,SAAUpI,GAAKrB,KAAK6uB,gBAAgBxtB,EAAG,WACvCgoB,WAAYrpB,KAAKkG,MAAM2C,EAAE,oCACzB2H,UAAW,CACP8X,MAAO,CACHwI,aAAc9wB,KAAKsG,MAAMyoB,SACrBtqB,EAAAA,EAAAA,KAACssB,EAAAA,eAAc,CAACjsB,SAAS,MAAKxB,UAC1BmB,EAAAA,EAAAA,KAACsQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMzT,KAAKwD,SAAS,CAAEurB,QAAS,KAAMzrB,UAE9CmB,EAAAA,EAAAA,KAACmP,EAAAA,MAAS,QAGlB,UAIhBnP,EAAAA,EAAAA,KAACusB,EAAAA,IAAG,CACAhc,KAAK,QACLvB,QAASA,IAAMzT,KAAKivB,oBAAoB3rB,UAExCmB,EAAAA,EAAAA,KAACwsB,EAAAA,SAAQ,UAGjBxsB,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAAAlX,UACFmB,EAAAA,EAAAA,KAAC0kB,EAAAA,UAAS,CACNlY,QAAQ,WACRM,MAAOvR,KAAKkG,MAAM2C,EAAE,aACpBQ,MAAOzE,GAAOqoB,YACdtoB,MAAO3E,KAAKsG,MAAMwnB,UAClBrkB,SAAUpI,GAAKrB,KAAK2uB,iBAAiBttB,EAAG,aACxCmP,UAAW,CACP8X,MAAO,CACHwI,aAAc9wB,KAAKsG,MAAMwnB,WACrBrpB,EAAAA,EAAAA,KAACssB,EAAAA,eAAc,CAACjsB,SAAS,MAAKxB,UAC1BmB,EAAAA,EAAAA,KAACsQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMzT,KAAKwD,SAAS,CAAEsqB,UAAW,KAAMxqB,UAEhDmB,EAAAA,EAAAA,KAACmP,EAAAA,MAAS,QAGlB,YAKpBnP,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAAAlX,UACFmB,EAAAA,EAAAA,KAAC0kB,EAAAA,UAAS,CACNlY,QAAQ,WACRM,MAAOvR,KAAKkG,MAAM2C,EAAE,YACpBQ,MAAOzE,GAAOqoB,YACdtoB,MAAO3E,KAAKsG,MAAMunB,SAClBpkB,SAAUpI,GAAKrB,KAAK2uB,iBAAiBttB,EAAG,YACxCmP,UAAW,CACP8X,MAAO,CACHwI,aAAc9wB,KAAKsG,MAAMunB,UACrBppB,EAAAA,EAAAA,KAACssB,EAAAA,eAAc,CAACjsB,SAAS,MAAKxB,UAC1BmB,EAAAA,EAAAA,KAACsQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMzT,KAAKwD,SAAS,CAAEqqB,SAAU,KAAMvqB,UAE/CmB,EAAAA,EAAAA,KAACmP,EAAAA,MAAS,QAGlB,YAKpBnP,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAACnR,MAAO,CAAEihB,UAAW,QAAShnB,UAChC4F,EAAAA,EAAAA,MAACkjB,EAAAA,YAAW,CACRnb,QAAQ,WACR5H,MAAOzE,GAAOqoB,YAAY3pB,SAAA,EAE1BmB,EAAAA,EAAAA,KAAC4nB,EAAAA,WAAU,CAAA/oB,SAAEtD,KAAKkG,MAAM2C,EAAE,uBAC1BK,EAAAA,EAAAA,MAACqjB,EAAAA,OAAM,CACHtb,QAAQ,WACRtM,MAAO3E,KAAKsG,MAAM8oB,eAClB3lB,SAAUpI,GACNrB,KAAKwD,SAAS,CAAE4rB,eAAgB/tB,EAAEsR,OAAOhO,QAC5CrB,SAAA,EAEDmB,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,SAAQrB,SAAEtD,KAAKkG,MAAM2C,EAAE,6BAO/DpE,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAACnR,MAAOzE,GAAOooB,QAAQ1pB,UACzB4F,EAAAA,EAAAA,MAACgoB,GAAAA,EAAY,CACT7nB,MAAOzE,GAAOiL,IACd8d,OAAQA,EACR0B,KAAMA,EACN8B,QAAS,GACTC,oBAAkB,EAClBC,aAAW,EACXC,iBAAe,EACfC,iBAAe,EACfC,UAAQ,EAERC,cAAe,IAAKnuB,SAAA,EAEpBmB,EAAAA,EAAAA,KAACitB,GAAAA,EAAS,CAAC9e,IAAI,8CACfnO,EAAAA,EAAAA,KAACkoB,GAAc,CAACE,OAAQhd,GAAO7P,KAAK0tB,MAAM7d,cAItD3G,EAAAA,EAAAA,MAAC0gB,EAAAA,QAAO,CAACvgB,MAAOzE,GAAOuZ,QAAQ7a,SAAA,EAC3BmB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO2jB,QACnB9jB,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHtC,QAAQ,YACR1L,MAAM,UACNkO,QAASA,IACLzT,KAAKkG,MAAMyjB,OAAO,CACduF,SAAUlvB,KAAKsG,MAAM4oB,SACrBC,SAAUnvB,KAAKsG,MAAM6oB,SACrBhlB,WAAYnK,KAAKsG,MAAM6D,WACvBD,aAAclK,KAAKsG,MAAM4D,aACzB6kB,QAAS/uB,KAAKsG,MAAMyoB,QACpBK,eAAgBpvB,KAAKsG,MAAM8oB,eAC3BJ,QAAShvB,KAAKsG,MAAM0oB,QACpBF,KAAM9uB,KAAKsG,MAAMwoB,KACjBhB,UAAWF,WAAW5tB,KAAKsG,MAAMwnB,WACjCD,SAAUD,WAAW5tB,KAAKsG,MAAMunB,YAGxCna,WAAWjP,EAAAA,EAAAA,KAAColB,EAAAA,MAAS,IAAIvmB,SAExBtD,KAAKkG,MAAM2C,EAAE,WAElBpE,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO2jB,YAInC,EAGJ,UAAerB,EAAAA,EAAAA,YAAf,CAA2BoG,ICh4BrB1oB,GAA8B,CAChCgG,MAAO,CACHC,OAAQ,OACRga,UAAW,OACX7Z,SAAU,OACVG,SAAU,UAEdoF,MAAQtG,IAAe,CACnB1E,MAAO0E,EAAMS,QAAQyd,UAAU5O,OAEnC6O,KAAM,CACFvd,OAAO,eAAD9J,OAAiBsnB,GAAkB,OACzCld,SAAU,QAEdmd,MAAO,CACHtjB,MAAO,IACPslB,UAAW,QAEfqH,UAAW,CACP3sB,MAAO,IACP2G,OAAQ,OACR+S,aAAc,IAElB6J,KAAM,CACF1U,SAAU,GAEdsK,QAAS,CACLtT,OA7Be,GA8Bf6Z,WAAW,GAAD3jB,OA9BK,GA8Bc,QAgBrC,MAAM6wB,WAAyB3rB,EAAAA,UAC3B7G,WAAAA,CAAY8G,GACRC,MAAMD,GAENlG,KAAKsG,MAAQ,CACTurB,OAAQ7xB,KAAKkG,MAAM2rB,KACnBC,SAAU9xB,KAAKkG,MAAM4rB,OAE7B,CAEAznB,MAAAA,GACI,OACInB,EAAAA,EAAAA,MAACgU,EAAAA,MAAK,CAAC7T,MAAOzE,GAAOgG,MAAMtH,SAAA,EACvBmB,EAAAA,EAAAA,KAAA,QACI4E,MAAOzE,GAAOwjB,KACdY,YAAU,EACVC,aAAa,MAAK3lB,UAElB4F,EAAAA,EAAAA,MAACsR,EAAAA,MAAK,CACFC,WAAS,EACTyO,UAAU,SAAQ5lB,SAAA,EAElBmB,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAAAlX,UACFmB,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,KACV9B,GAAI5D,GAAO2L,MAAMjN,SAEhBtD,KAAKkG,MAAM2C,EAAE,8DAGtBpE,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAACnR,MAAOzE,GAAO+sB,UAAUruB,UAC3B4F,EAAAA,EAAAA,MAAC6oB,EAAAA,UAAS,CAAAzuB,SAAA,EACNmB,EAAAA,EAAAA,KAACmR,EAAAA,iBAAgB,CACbvM,MAAOzE,GAAO0jB,MACdzS,SACIpR,EAAAA,EAAAA,KAACqR,EAAAA,SAAQ,CACLC,QAAS/V,KAAKsG,MAAMurB,KACpBpoB,SAAUA,IAAMzJ,KAAKwD,SAAS,CAAEquB,MAAO7xB,KAAKsG,MAAMurB,SAG1DtgB,MAAOvR,KAAKkG,MAAM2C,EAAE,8BAExBpE,EAAAA,EAAAA,KAACutB,EAAAA,eAAc,CAAA1uB,SACVtD,KAAKkG,MAAM2C,EACR,sHAKhBpE,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAAAlX,UACF4F,EAAAA,EAAAA,MAACkjB,EAAAA,YAAW,CACRnb,QAAQ,WACR5H,MAAOzE,GAAO0jB,MAAMhlB,SAAA,EAEpBmB,EAAAA,EAAAA,KAAC4nB,EAAAA,WAAU,CAAA/oB,SAAEtD,KAAKkG,MAAM2C,EAAE,mBAC1BK,EAAAA,EAAAA,MAACqjB,EAAAA,OAAM,CACHtb,QAAQ,WACRtM,MAAO3E,KAAKsG,MAAMwrB,OAAS,OAAS,QACpCroB,SAAUpI,GAAKrB,KAAKwD,SAAS,CAAEsuB,OAA2B,SAAnBzwB,EAAEsR,OAAOhO,QAAoBrB,SAAA,EAEpEmB,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,QAAOrB,SAAEtD,KAAKkG,MAAM2C,EAAE,aACtCpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAAC9nB,MAAM,OAAMrB,SAAEtD,KAAKkG,MAAM2C,EAAE,sCAEzCpE,EAAAA,EAAAA,KAACutB,EAAAA,eAAc,CAAA1uB,SACVtD,KAAKsG,MAAMwrB,OACN9xB,KAAKkG,MAAM2C,EACP,iHAEJ7I,KAAKkG,MAAM2C,EAAE,+DAMvCK,EAAAA,EAAAA,MAAC0gB,EAAAA,QAAO,CAACvgB,MAAOzE,GAAOuZ,QAAQ7a,SAAA,EAC3BmB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO2jB,QACnB9jB,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHhO,MAAM,UACN0L,QAAQ,YACRwC,QAASA,IAAMzT,KAAKkG,MAAMyjB,OAAO,CAAEkI,KAAM7xB,KAAKsG,MAAMurB,KAAMC,OAAQ9xB,KAAKsG,MAAMwrB,SAC7Epe,WAAWjP,EAAAA,EAAAA,KAAColB,EAAAA,MAAS,IAAIvmB,SAExBtD,KAAKkG,MAAM2C,EAAE,gBAKlC,EAGJ,UAAeqe,EAAAA,EAAAA,YAAf,CAA2B0K,ICpJrBhtB,GAA8B,CAChCgG,MAAO,CACHC,OAAQ,OACRga,UAAW,OACX7Z,SAAU,OACVG,SAAU,UAEdoF,MAAQtG,IAAe,CACnB1E,MAAO0E,EAAMS,QAAQyd,UAAU5O,OAEnC6O,KAAM,CACFvd,OAAO,eAAD9J,OAAiBsnB,GAAkB,OACzCld,SAAU,QAEdmd,MAAO,CACHtjB,MAAO,IACP0Z,aAAc,IAElB6J,KAAM,CACF1U,SAAU,GAEdsK,QAAS,CACLtT,OAxBe,GAyBf6Z,WAAW,GAAD3jB,OAzBK,GAyBc,OAEjCqH,KAAM,CACF1C,SAAU,IAGd0D,MAAO,CACH1D,SAAU,GACVH,MAAO,WAEXqb,QAAS,CACLlb,SAAU,GACVH,MAAO,WAEX0sB,YAAa,CACTvsB,SAAU,GACVH,MAAO,WAEXqG,OAAQ,CACJyE,YAAa,KAgBrB,MAAM6hB,WAA6BjsB,EAAAA,UAG/B7G,WAAAA,CAAY8G,GACRC,MAAMD,GAAO,KAHAuiB,cAAQ,EAKrBzoB,KAAKyoB,UAAWK,EAAAA,EAAAA,YACpB,CAEA9hB,iBAAAA,GAA2B,IAAD+hB,EACD,QAArBA,EAAA/oB,KAAKyoB,SAASzQ,eAAO,IAAA+Q,GAArBA,EAAuB3C,OAC3B,CAEA/b,MAAAA,GACI,OACInB,EAAAA,EAAAA,MAACgU,EAAAA,MAAK,CAAC7T,MAAOzE,GAAOgG,MAAMtH,SAAA,EACvBmB,EAAAA,EAAAA,KAAA,QACI4E,MAAOzE,GAAOwjB,KACdY,YAAU,EACVC,aAAa,MAAK3lB,UAElB4F,EAAAA,EAAAA,MAACsR,EAAAA,MAAK,CACFC,WAAS,EACTyO,UAAU,SAAQ5lB,SAAA,EAElBmB,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAAAlX,UACFmB,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,KACV9B,GAAI5D,GAAO2L,MAAMjN,SAEhBtD,KAAKkG,MAAM2C,EAAE,oDAGtBK,EAAAA,EAAAA,MAACsR,EAAAA,MAAK,CAAAlX,SAAA,CACAtD,KAAKkG,MAAM2rB,KAAoE,MAA7DptB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOwE,MAAM9F,SAAEtD,KAAKkG,MAAM2C,EAAE,cAC3D7I,KAAKkG,MAAM2rB,OAAS7xB,KAAKkG,MAAM4rB,QAC5BrtB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOgc,QAAQtd,SAAEtD,KAAKkG,MAAM2C,EAAE,eAC1C,KACH7I,KAAKkG,MAAM2rB,MAAQ7xB,KAAKkG,MAAM4rB,QAC3BrtB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOqtB,YAAY3uB,SAAEtD,KAAKkG,MAAM2C,EAAE,iBAC9C,MAEJpE,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOwD,KAAK9E,SACnBtD,KAAKkG,MAAM2C,EACR,0GAIZpE,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAACnR,MAAO,CAAEoV,UAAW,IAAKnb,UAC5BmB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOwD,KAAK9E,SACnBtD,KAAKkG,MAAM2C,EACR,oFAIZK,EAAAA,EAAAA,MAACsR,EAAAA,MAAK,CAACnR,MAAO,CAAEoV,UAAW,IAAKnb,SAAA,EAC5BmB,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHlK,MAAOzE,GAAOgH,OACdrG,MAAM,YACN0L,QAAQ,YACRwC,QAASA,IAAMnS,OAAO6O,KAAK,uBAAwB,QACnDuD,WAAWjP,EAAAA,EAAAA,KAAC0tB,EAAAA,SAAY,IAAI7uB,SAC/B,kBAGDmB,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHhO,MAAM,YACN0L,QAAQ,YACRwC,QAASA,IAAMnS,OAAO6O,KAAK,uBAAwB,QACnDuD,WAAWjP,EAAAA,EAAAA,KAAC2tB,EAAAA,OAAS,IAAI9uB,SAC5B,0BAMb4F,EAAAA,EAAAA,MAAC0gB,EAAAA,QAAO,CAACvgB,MAAOzE,GAAOuZ,QAAQ7a,SAAA,EAC3BmB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO2jB,QACnB9jB,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHhO,MAAM,UACN0L,QAAQ,YACRwC,QAASA,IAAMzT,KAAKkG,MAAMyjB,SAC1BjW,WAAWjP,EAAAA,EAAAA,KAAColB,EAAAA,MAAS,IAAIvmB,SAExBtD,KAAKkG,MAAM2C,EAAE,qBAKlC,EAGJ,UAAeqe,EAAAA,EAAAA,YAAf,CAA2BgL,ICtHZ,MAAMG,WAA0BjW,IAAAA,UAI3Chd,WAAAA,CAAY8G,GACRC,MAAMD,GAJkB,KACXmiB,eAAiB,GAK9BroB,KAAKsG,MAAQ,CACTpD,WAAY,CAAC,EACbovB,iBAAkB,GAE1B,CAKA,uBAAMtrB,GACF,IACI,MAAM9D,QAAmBlD,KAAKkG,MAAM7G,OAAOkzB,cAAcvyB,KAAKkG,MAAMmJ,KAAM,CACtEmjB,KAAMxyB,KAAKkG,MAAM7G,OAAO2kB,aAAa5f,OAAOquB,aAGhDzyB,KAAKwD,SAAS,CAAEN,cACpB,CAAE,MAAO7B,GACL6kB,QAAQ9c,MAAM,8BAADrI,OAA+BM,EAAEwD,SAClD,CACJ,CAKA,YAAM8kB,GACF,MAAM,iBAAE2I,GAAqBtyB,KAAKsG,MAElCtG,KAAKkG,MAAMyjB,SAGX,IAAK,MAAMplB,KAAW+tB,QACZ,IAAIvwB,SAAc2wB,IACpB1yB,KAAKkG,MAAMysB,eAAe,OAAD5xB,OAAQwD,GAAWvE,KAAKkG,MAAMmJ,KAAMqjB,EAAQ,GAGjF,CAOAE,sBAAAA,CAAuBtC,GACnB,MAAM,KAAEphB,EAAI,YAAEyC,GAAgB2e,EAExB/rB,EAAUvE,KAAKsG,MAAMpD,WAAWgM,GAEtC,IAAK3K,EACD,OAAO,KAGX,MAAM+e,EAAOtjB,KAAKkG,MAAM7G,OAAOgJ,WAEzBkI,EAAQhM,EAAQsuB,UAAUvP,IAAS/e,EAAQsuB,UAAUvqB,GAE3D,OACI7D,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CAACC,GAAI,CAAEzD,QAAS,OAAQI,WAAY,cAAe7B,UACnD4F,EAAAA,EAAAA,MAAC+I,EAAAA,UAAS,CACN5I,MAAO,CACHypB,YAAa,qBACbC,YAAa,MACbC,YAAa,QACbhuB,MAAO,QACT1B,SAAA,EAEFmB,EAAAA,EAAAA,KAACyN,EAAAA,iBAAgB,CACb7I,MAAO,CACHoB,gBAAiB,eACjBe,WAAY,OACZX,OAAQ,IAEZsH,YAAY1N,EAAAA,EAAAA,KAAC2N,EAAAA,WAAc,IAC3B,gBAAc,iBACdtS,GAAG,gBAAewD,UAElB4F,EAAAA,EAAAA,MAACX,EAAAA,IAAG,CAACc,MAAO,CAAEtE,QAAS,OAAQI,WAAY,SAAU8tB,IAAK,GAAI3vB,SAAA,EAC1DmB,EAAAA,EAAAA,KAACqR,EAAAA,SAAQ,CACLtN,GAAI,CAAEjD,MAAO,eAAgB,gBAAiB,CAAEA,MAAO,iBACvDkO,QAASpS,GAAKA,EAAE6xB,kBAChBzpB,SAAUA,KACN,MAAM,iBAAE6oB,GAAqBtyB,KAAKsG,MAElC,GAAIgsB,EAAiBlwB,SAAS8M,GAAO,CACjC,MAAMmC,EAAMihB,EAAiB9vB,QAAQ0M,GACrCojB,EAAiB7vB,OAAO4O,EAAK,EACjC,MACIihB,EAAiBjwB,KAAK6M,GAG1BlP,KAAKwD,SAAS,CAAE8uB,oBAAmB,KAG3C7tB,EAAAA,EAAAA,KAAA,OACImgB,IAAKrU,EACLoU,IAAKpgB,EAAQ4uB,QACb9pB,MAAO,CAAErE,MAAO,GAAI6F,OAAQ,MAE/B0F,QAGT9L,EAAAA,EAAAA,KAAC8N,EAAAA,iBAAgB,CACblJ,MAAO,CACHoB,gBAAiB,oBACjB1E,WAAY,WACZL,SAAU,GACV4kB,UAAW,QACbhnB,UAEFmB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAAArF,SAAEqO,UAKjC,CAKAyhB,aAAAA,GACI,OACIlqB,EAAAA,EAAAA,MAACX,EAAAA,IAAG,CAACC,GAAI,CAAEzD,QAAS,OAAQkuB,IAAK,EAAGloB,cAAe,UAAWzH,SAAA,EAC1DmB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAACH,GAAI,CAAEqD,WAAY,GAAIvI,SAAEsF,EAAAA,KAAKC,EAAE,yCAC3CpE,EAAAA,EAAAA,KAAA,MAAAnB,SAAKsF,EAAAA,KAAKC,EAAE,YACZpE,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAAArF,SAAEsF,EAAAA,KAAKC,EAAE,2BACnB7I,KAAK4yB,uBAAuB,CACzB1jB,KAAM,MACNyC,YAAa/I,EAAAA,KAAKC,EAAE,4BAEvB7I,KAAK4yB,uBAAuB,CAAE1jB,KAAM,QAASyC,YAAa/I,EAAAA,KAAKC,EAAE,+BAElEpE,EAAAA,EAAAA,KAAA,MAAAnB,SAAKsF,EAAAA,KAAKC,EAAE,YACZpE,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAAArF,SAAEsF,EAAAA,KAAKC,EAAE,2BACnB7I,KAAK4yB,uBAAuB,CACzB1jB,KAAM,aACNyC,YAAa/I,EAAAA,KAAKC,EAAE,mCAEvB7I,KAAK4yB,uBAAuB,CAAE1jB,KAAM,SAAUyC,YAAa/I,EAAAA,KAAKC,EAAE,gCAEnEpE,EAAAA,EAAAA,KAAA,MAAAnB,SAAKsF,EAAAA,KAAKC,EAAE,oBACZpE,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAAArF,SAAEsF,EAAAA,KAAKC,EAAE,mCACnB7I,KAAK4yB,uBAAuB,CACzB1jB,KAAM,uBACNyC,YAAa/I,EAAAA,KAAKC,EAAE,6CAEvB7I,KAAK4yB,uBAAuB,CAAE1jB,KAAM,WAAYyC,YAAa/I,EAAAA,KAAKC,EAAE,iCACpE7I,KAAK4yB,uBAAuB,CAAE1jB,KAAM,QAASyC,YAAa/I,EAAAA,KAAKC,EAAE,8BACjE7I,KAAK4yB,uBAAuB,CAAE1jB,KAAM,WAAYyC,YAAa/I,EAAAA,KAAKC,EAAE,iCACpE7I,KAAK4yB,uBAAuB,CACzB1jB,KAAM,aACNyC,YAAa/I,EAAAA,KAAKC,EAAE,oCAGxBpE,EAAAA,EAAAA,KAAA,MAAAnB,SAAKsF,EAAAA,KAAKC,EAAE,mBACZpE,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAAArF,SAAEsF,EAAAA,KAAKC,EAAE,6BACnB7I,KAAK4yB,uBAAuB,CAAE1jB,KAAM,UAAWyC,YAAa/I,EAAAA,KAAKC,EAAE,gCACnE7I,KAAK4yB,uBAAuB,CAAE1jB,KAAM,MAAOyC,YAAa/I,EAAAA,KAAKC,EAAE,6BAEhEpE,EAAAA,EAAAA,KAAA,MAAAnB,SAAKsF,EAAAA,KAAKC,EAAE,cACZpE,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAAArF,SAAEsF,EAAAA,KAAKC,EAAE,6BACnB7I,KAAK4yB,uBAAuB,CACzB1jB,KAAM,qBACNyC,YAAa/I,EAAAA,KAAKC,EAAE,4CAGxBpE,EAAAA,EAAAA,KAAA,MAAAnB,SAAKsF,EAAAA,KAAKC,EAAE,oBACZpE,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAAArF,SAAEsF,EAAAA,KAAKC,EAAE,mCACnB7I,KAAK4yB,uBAAuB,CAAE1jB,KAAM,QAASyC,YAAa/I,EAAAA,KAAKC,EAAE,gCAG9E,CAKAwB,MAAAA,GACI,MAAMgpB,EAAqBnyB,OAAOC,KAAKnB,KAAKsG,MAAMpD,YAAYrC,OAAS,EAEvE,OACIqI,EAAAA,EAAAA,MAACgU,EAAAA,MAAK,CACF1U,GAAI,CACAqC,OAAQ,OACRga,UAAW,OACX7Z,SAAU,OACVG,SAAU,SACVpG,QAAS,OACTgG,cAAe,SACf5F,WAAY,UACd7B,SAAA,EAEFmB,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACAC,GAAI,CACAqC,OAAO,eAAD9J,OAAiBf,KAAKqoB,eAAc,OAC1CrjB,MAAO,MACPgG,SAAU,QACVG,SAAU,OACV,qBAAsB,OACtB,kBAAmB,OACnB,uBAAwB,CACpBpG,QAAS,SAEfzB,SAED+vB,EAAqBrzB,KAAKozB,iBAAkB3uB,EAAAA,EAAAA,KAACqE,EAAAA,eAAc,OAEhEI,EAAAA,EAAAA,MAAC0gB,EAAAA,QAAO,CACJphB,GAAI,CACAqC,OAAQ7K,KAAKqoB,eACb3D,WAAW,GAAD3jB,OAAKf,KAAKqoB,eAAc,MAClCrjB,MAAO,QACT1B,SAAA,EAEFmB,EAAAA,EAAAA,KAAA,OAAK4E,MAAO,CAAEwK,SAAU,MACxBpP,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHhO,MAAM,UACN0L,QAAQ,YACRwC,QAASA,IAAMzT,KAAK2pB,SACpBjW,UAAW1T,KAAKsG,MAAMgsB,iBAAiBzxB,QAAS4D,EAAAA,EAAAA,KAAColB,EAAAA,MAAS,KAAMplB,EAAAA,EAAAA,KAAC6uB,EAAAA,aAAQ,IAAIhwB,SAE5EtD,KAAKsG,MAAMgsB,iBAAiBzxB,OAAS+H,EAAAA,KAAKC,EAAE,6BAA+BD,EAAAA,KAAKC,EAAE,eAKvG,ECpPJ,MAEMjE,GAA8C,CAChD2uB,OAAQ,CACJ1oB,OAAQ,OACRga,UAAW,OACX7Z,SAAU,QAEdJ,MAAO,CACH5F,MAAO,OACP6F,OAAQ,OACRM,SAAU,UAEdgB,QAAS,CACLme,UAAW,UAEfkJ,SAAU,CACNxuB,MAAO,OACPmG,SAAU,SACVN,OAAQ,qBAEZ4oB,yBAA0B,CACtB5oB,OAAO,eAAD9J,OAtBS,GAsBsB,OACrCiE,MAAO,OACPmG,SAAU,QAEduoB,iBAAkB,CACdC,gBAAgB,OAAD5yB,OAAS6yB,GAAiB,KACzCC,iBAAkB,YAClBxnB,eAAgB,QAChBynB,mBAAoB,UAExBC,kBAAmB,CACfJ,gBAAgB,OAAD5yB,OAASizB,GAAkB,KAC1CH,iBAAkB,YAClBxnB,eAAgB,QAChBynB,mBAAoB,UAExBvL,KAAM,CACF1U,SAAU,GAEdogB,SAAU,CACN7jB,WAAY,GAEhB+N,QAAS,CACLtT,OA7Ce,IA+CnBqpB,KAAM,CACFlvB,MAAO,GACP6F,OAAQ,GACRC,aAAc,MACdH,WAAY,QACZ0F,YAAa,EACbyU,cAAe,UAEnBqP,YAAa,CACTC,MAAO,QACPrvB,QAAS,eACT0Z,WAAY,EACZpO,YAAa,GAGjBgkB,UAAW,CACP3uB,SAAU,GACV+Y,UAAW,GACXlZ,MAAO,UACPiG,WAAY,QAEhB8oB,cAAe,CACXtvB,MAAO,MAsBf,MAAMuvB,WAAqBtuB,EAAAA,UAGvB7G,WAAAA,CAAY8G,GACRC,MAAMD,GAAO,KAHT+f,cAA+C,KAKnDjmB,KAAKsG,MAAQ,CACTkuB,WAAY,EACZ3C,MAAM,EACNC,QAAQ,EAEhB,CAEA9qB,iBAAAA,GACShH,KAAKkG,MAAM7G,OAAOisB,qBAAqBtqB,MAAMyzB,GAC9Cz0B,KAAKkG,MAAM7G,OAAOmsB,UAAU,kBAADzqB,OAAmB0zB,IAAazzB,MAAKjB,IAC5DC,KAAKimB,cAAgBlmB,EACrBC,KAAKwD,SAAS,CAAEquB,KAAM9xB,EAAI20B,OAAO7C,KAAMC,OAAQ/xB,EAAI20B,OAAO5C,QAAS,KAG/E,CAEA6C,aAAAA,GAEI,OACIzrB,EAAAA,EAAAA,MAAA,OAAKG,OAAKxF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAOe,GAAOgG,OAAUhG,GAAOmvB,mBAAoBzwB,SAAA,EACzDmB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO6uB,4BACnBvqB,EAAAA,EAAAA,MAAC0gB,EAAAA,QAAO,CAACvgB,MAAOzE,GAAOuZ,QAAQ7a,SAAA,EAC3BmB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO2jB,QACnBrf,EAAAA,EAAAA,MAACqK,EAAAA,OAAM,CACHtC,QAAQ,YACR1L,MAAM,UACNkO,QAASA,IACLzT,KAAKkG,MAAM7G,OAAO0kB,wBAAuB,GAAM/iB,MAAKjB,GAChDC,KAAKwD,SAAS,CACVgxB,WAAYx0B,KAAKsG,MAAMkuB,WAAa,GAAKz0B,EAAIqE,OAAOwwB,iBAAmB,OAGlFtxB,SAAA,CAEAsF,EAAAA,KAAKC,EAAE,gBAAgB,KAACpE,EAAAA,EAAAA,KAACowB,EAAAA,UAAa,CAACxrB,MAAOzE,GAAOqvB,eAE1DxvB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO2jB,YAInC,CAEAuM,aAAAA,GACI,OACIrwB,EAAAA,EAAAA,KAACsmB,GAAgB,CACbliB,EAAGD,EAAAA,KAAKC,EACRxJ,OAAQW,KAAKkG,MAAM7G,OACnB0K,UAAW/J,KAAKkG,MAAM6D,UACtBC,UAAWhK,KAAKkG,MAAM8D,UACtB2f,OAAQxI,UACJ,MAAMphB,QAAYC,KAAKkG,MAAM7G,OAAOmiB,iBAAgB,GACpDzhB,EAAIqE,OAAOwwB,kBAAmB,EAClB,OAARrJ,QAAQ,IAARA,GAAAA,EAAUjI,OACVvjB,EAAIqE,OAAO2wB,SAAWxJ,EAASjI,WACzBtjB,KAAKkG,MAAM7G,OAAOqiB,gBAAgB3hB,IAE5CC,KAAKwD,SAAS,CAAEgxB,WAAYx0B,KAAKsG,MAAMkuB,WAAa,GAAI,GAIxE,CAEAQ,cAAAA,GACI,OACIvwB,EAAAA,EAAAA,KAAC+jB,GAAiB,CACd3f,EAAGD,EAAAA,KAAKC,EACRxJ,OAAQW,KAAKkG,MAAM7G,OACnB0K,UAAW/J,KAAKkG,MAAM6D,UACtB4f,OAASsL,GACLj1B,KAAKkG,MAAM7G,OACN61B,eAAe,QAASD,GACxBj0B,MAAK,IAAMhB,KAAKwD,SAAS,CAAEgxB,WAAYx0B,KAAKsG,MAAMkuB,WAAa,OAIpF,CAEAW,cAAAA,GACI,OACI1wB,EAAAA,EAAAA,KAAC6oB,GAAiB,CACdzkB,EAAGD,EAAAA,KAAKC,EACRxJ,OAAQW,KAAKkG,MAAM7G,OACnB0K,UAAW/J,KAAKkG,MAAM6D,UACtB4f,OAAS4B,GAYLvrB,KAAKkG,MAAM7G,OACNmiB,iBAAgB,GAChBxgB,MAAKjB,IACFmB,OAAOk0B,OAAOr1B,EAAIqE,OAAQmnB,GACnBvrB,KAAKkG,MAAM7G,OAAOqiB,gBAAgB3hB,MAE5CiB,MAAK,IAAMhB,KAAKwD,SAAS,CAAEgxB,WAAYx0B,KAAKsG,MAAMkuB,WAAa,OAIpF,CAEAa,oBAAAA,GACI,OACI5wB,EAAAA,EAAAA,KAACmtB,GAAgB,CACb/oB,EAAGD,EAAAA,KAAKC,EACRgpB,KAAM7xB,KAAKsG,MAAMurB,KACjBC,OAAQ9xB,KAAKsG,MAAMwrB,OACnBzyB,OAAQW,KAAKkG,MAAM7G,OACnB0K,UAAW/J,KAAKkG,MAAM6D,UACtB4f,OAAS4B,GACLvrB,KAAKwD,SAAS+nB,GAAU,IAAMvrB,KAAKwD,SAAS,CAAEgxB,WAAYx0B,KAAKsG,MAAMkuB,WAAa,OAIlG,CAEAc,oBAAAA,GACI,OACI7wB,EAAAA,EAAAA,KAACytB,GAAoB,CACjBrpB,EAAGD,EAAAA,KAAKC,EACRxJ,OAAQW,KAAKkG,MAAM7G,OACnB0K,UAAW/J,KAAKkG,MAAM6D,UACtB8nB,KAAM7xB,KAAKsG,MAAMurB,KACjBC,OAAQ9xB,KAAKsG,MAAMwrB,OACnBnI,OAAQA,IAAM3pB,KAAKwD,SAAS,CAAEgxB,WAAYx0B,KAAKsG,MAAMkuB,WAAa,KAG9E,CAKAe,cAAAA,GACI,OACI9wB,EAAAA,EAAAA,KAAC4tB,GAAiB,CACdhjB,KAAMrP,KAAKkG,MAAMmJ,KACjBhQ,OAAQW,KAAKkG,MAAM7G,OACnBszB,eAAgB3yB,KAAKkG,MAAMysB,eAC3BhJ,OAAQA,IAAM3pB,KAAKwD,SAAS,CAAEgxB,WAAYx0B,KAAKsG,MAAMkuB,WAAa,KAG9E,CAEA,aAAM3mB,GAEF,MAAM2nB,QAAkBx1B,KAAKkG,MAAM7G,OAAOiI,SAAS,oCAEnD,GAAItH,KAAKimB,cAAe,CACpB,IAAIwP,EACAC,EACJ,GACI11B,KAAKimB,cAAcyO,OAAO5C,SAAW9xB,KAAKsG,MAAMwrB,QAChD9xB,KAAKimB,cAAcyO,OAAO7C,OAAS7xB,KAAKsG,MAAMurB,KAChD,CACE,GACI7xB,KAAKsG,MAAMwrB,UACT9xB,KAAKimB,cAAcyO,OAAOe,YAAgBz1B,KAAKimB,cAAcyO,OAAOgB,aAGtE,IACI,MAAMC,QAAc31B,KAAKkG,MAAM7G,OAAOu2B,kBACtCH,EAAaE,GAASA,EAAM1mB,MAAKyH,GAAgB,WAAXA,EAAExW,OACxCw1B,EAAcC,GAASA,EAAM1mB,MAAKyH,GAAgB,YAAXA,EAAExW,MAC7C,CAAE,MAAOmB,GACLC,OAAOC,MAAM,6BAADR,OAA8BM,GAC9C,CAIJ,GAFArB,KAAKimB,cAAcyO,OAAO7C,KAAO7xB,KAAKsG,MAAMurB,KAExC7xB,KAAKsG,MAAMwrB,OAAQ,CACnB,IACM9xB,KAAKimB,cAAcyO,OAAOe,aAAcA,IACxCz1B,KAAKimB,cAAcyO,OAAOgB,cAAeA,EAY3C,OAVAp0B,OAAOC,MAAMqH,EAAAA,KAAKC,EAAE,2DACpB7I,KAAKimB,cAAcyO,OAAO5C,QAAS,QAE7B9xB,KAAKkG,MAAM7G,OAAOw2B,UAAU71B,KAAKimB,cAActkB,IAAK3B,KAAKimB,eAC/DnT,YACI,IACKxR,OAAO0R,SAASG,KAAI,UAAApS,OAAaO,OAAO0R,SAAS3D,KAAI,kBAAAtO,OAA0B,OAATy0B,QAAS,IAATA,GAAAA,EAAW/uB,IAAM,aAAe,KAC3G,UAEJzG,KAAKkG,MAAM2H,UAGf7N,KAAKimB,cAAcyO,OAAO5C,OAAS9xB,KAAKsG,MAAMwrB,OAC9C9xB,KAAKimB,cAAcyO,OAAOe,WAAaz1B,KAAKimB,cAAcyO,OAAOe,YAAcA,EAAWvmB,KAC1FlP,KAAKimB,cAAcyO,OAAOgB,YAAc11B,KAAKimB,cAAcyO,OAAOgB,aAAeA,EAAYxmB,IACjG,CAKA,IAAI4mB,QAHE91B,KAAKkG,MAAM7G,OAAOw2B,UAAU71B,KAAKimB,cAActkB,IAAK3B,KAAKimB,eAK3D6P,EADA91B,KAAKimB,cAAcyO,OAAO5C,OAClB,WAAA/wB,OAAcO,OAAO0R,SAAS3D,KAAI,kBAAAtO,OAA0B,OAATy0B,QAAS,IAATA,GAAAA,EAAW/uB,IAAM,aAAe,IAEnF,UAAA1F,OAAaO,OAAO0R,SAAS3D,KAAI,kBAAAtO,OAA0B,OAATy0B,QAAS,IAATA,GAAAA,EAAW/uB,IAAM,aAAe,IAG9FzG,KAAKkG,MAAM2H,QAAQioB,EACvB,MACIC,EAAAA,OAAOC,WAAW,eAAyB,OAATR,QAAS,IAATA,GAAAA,EAAW/uB,IAAM,iBAAciL,GACjE1R,KAAKkG,MAAM2H,SAEnB,MACIkoB,EAAAA,OAAOC,WAAW,eAAyB,OAATR,QAAS,IAATA,GAAAA,EAAW/uB,IAAM,iBAAciL,GACjE1R,KAAKkG,MAAM2H,SAEnB,CAEAooB,YAAAA,GAEI,OACI/sB,EAAAA,EAAAA,MAAA,OAAKG,OAAKxF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAOe,GAAOgG,OAAUhG,GAAO8uB,kBAAmBpwB,SAAA,EACxD4F,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAO6uB,yBAAyBnwB,SAAA,EACxCmB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOyvB,UAAU/wB,SAAEsF,EAAAA,KAAKC,EAAE,yCACtCpE,EAAAA,EAAAA,KAAA,OACIkgB,IAAKuR,GACLtR,IAAI,WACJvb,MAAOzE,GAAO0vB,oBAGtBprB,EAAAA,EAAAA,MAAC0gB,EAAAA,QAAO,CAACvgB,MAAOzE,GAAOuZ,QAAQ7a,SAAA,EAC3BmB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO2jB,QACnB9jB,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHtC,QAAQ,YACR1L,MAAM,UACNkO,QAASA,IAAMzT,KAAK6N,UACpB6F,WAAWjP,EAAAA,EAAAA,KAACkP,EAAAA,MAAS,IAAIrQ,SAExBsF,EAAAA,KAAKC,EAAE,aAEZpE,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO2jB,YAInC,CAEAle,MAAAA,GACI,OACInB,EAAAA,EAAAA,MAACgH,EAAAA,OAAM,CACH7G,MAAOzE,GAAO2uB,OACdpjB,MAAM,EACNtC,QAASA,OAIT6G,WAAS,EACTyhB,YAAU,EACV,kBAAgB,sBAAqB7yB,SAAA,EAErC4F,EAAAA,EAAAA,MAAC4L,EAAAA,YAAW,CAAChV,GAAG,sBAAqBwD,SAAA,EACjCmB,EAAAA,EAAAA,KAAA,OACIkgB,I,6oTACAtb,MAAOzE,GAAOsvB,KACdtP,IAAI,SAEPhc,EAAAA,KAAKC,EAAE,0BAA2B,KACnCpE,EAAAA,EAAAA,KAAC2xB,EAAAA,gBAAe,CACZ/sB,MAAOzE,GAAOuvB,YACdtrB,EAAGD,EAAAA,KAAKC,EACRwtB,YAAar2B,KAAKkG,MAAMmwB,YACxBtsB,UAAW/J,KAAKkG,MAAM6D,UACtBiL,KAAK,cAGb9L,EAAAA,EAAAA,MAACyH,EAAAA,cAAa,CAACtH,MAAOzE,GAAOuH,QAAQ7I,SAAA,EACjCmB,EAAAA,EAAAA,KAACoM,EAAAA,OAAM,CAAC/L,SAAS,SAAQxB,UACrBmB,EAAAA,EAAAA,KAACmlB,EAAAA,QAAO,CAAAtmB,UACJ4F,EAAAA,EAAAA,MAACotB,EAAAA,QAAO,CAAC9B,WAAYx0B,KAAKsG,MAAMkuB,WAAWlxB,SAAA,EACvCmB,EAAAA,EAAAA,KAAC8xB,EAAAA,KAAI,CAAAjzB,UACDmB,EAAAA,EAAAA,KAAC+xB,EAAAA,UAAS,CAAAlzB,SAAEsF,EAAAA,KAAKC,EAAE,gBAEvBpE,EAAAA,EAAAA,KAAC8xB,EAAAA,KAAI,CAAAjzB,UACDmB,EAAAA,EAAAA,KAAC+xB,EAAAA,UAAS,CAAAlzB,SAAEsF,EAAAA,KAAKC,EAAE,0BAEvBpE,EAAAA,EAAAA,KAAC8xB,EAAAA,KAAI,CAAAjzB,UACDmB,EAAAA,EAAAA,KAAC+xB,EAAAA,UAAS,CAAAlzB,SAAEsF,EAAAA,KAAKC,EAAE,iBAEvBpE,EAAAA,EAAAA,KAAC8xB,EAAAA,KAAI,CAAAjzB,UACDmB,EAAAA,EAAAA,KAAC+xB,EAAAA,UAAS,CAAAlzB,SAAEsF,EAAAA,KAAKC,EAAE,uBAEvBpE,EAAAA,EAAAA,KAAC8xB,EAAAA,KAAI,CAAAjzB,UACDmB,EAAAA,EAAAA,KAAC+xB,EAAAA,UAAS,CAAAlzB,SAAEsF,EAAAA,KAAKC,EAAE,wBAEvBpE,EAAAA,EAAAA,KAAC8xB,EAAAA,KAAI,CAAAjzB,UACDmB,EAAAA,EAAAA,KAAC+xB,EAAAA,UAAS,CAAAlzB,SAAEsF,EAAAA,KAAKC,EAAE,iBAEvBpE,EAAAA,EAAAA,KAAC8xB,EAAAA,KAAI,CAAAjzB,UACDmB,EAAAA,EAAAA,KAAC+xB,EAAAA,UAAS,CAAAlzB,SAAEsF,EAAAA,KAAKC,EAAE,iBAEvBpE,EAAAA,EAAAA,KAAC8xB,EAAAA,KAAI,CAAAjzB,UACDmB,EAAAA,EAAAA,KAAC+xB,EAAAA,UAAS,CAAAlzB,SAAEsF,EAAAA,KAAKC,EAAE,qBAKR,IAA1B7I,KAAKsG,MAAMkuB,YAAmB/vB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO4uB,SAASlwB,SAAEtD,KAAK20B,kBAAyB,KAChE,IAA1B30B,KAAKsG,MAAMkuB,YAAmB/vB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO4uB,SAASlwB,SAAEtD,KAAK80B,kBAAyB,KAChE,IAA1B90B,KAAKsG,MAAMkuB,YAAmB/vB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO4uB,SAASlwB,SAAEtD,KAAKg1B,mBAA0B,KACjE,IAA1Bh1B,KAAKsG,MAAMkuB,YACR/vB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO4uB,SAASlwB,SAAEtD,KAAKq1B,yBACnC,KACuB,IAA1Br1B,KAAKsG,MAAMkuB,YACR/vB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO4uB,SAASlwB,SAAEtD,KAAKs1B,yBACnC,KACuB,IAA1Bt1B,KAAKsG,MAAMkuB,YAAmB/vB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO4uB,SAASlwB,SAAEtD,KAAKm1B,mBAA0B,KACjE,IAA1Bn1B,KAAKsG,MAAMkuB,YAAmB/vB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO4uB,SAASlwB,SAAEtD,KAAKu1B,mBAA0B,KACjE,IAA1Bv1B,KAAKsG,MAAMkuB,YAAmB/vB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO4uB,SAASlwB,SAAEtD,KAAKi2B,iBAAwB,UAI1G,EAGJ,UAAe/O,EAAAA,EAAAA,YAAf,CAA2BqN,I,61QCta3B,MAAekC,WAA2Era,IAAAA,WAK1F,YCDMxX,GAA8C,CAChD4uB,SAAU,CACNxuB,MAAO,OACP6F,OAAQ,QACRM,SAAU,OACV6S,UAAW,SACXb,QAAS,IAGbuZ,YAAa,CACTrmB,YAAa,EACbuK,SAAU,QAEd+b,YAAa,CACTlY,UAAW,IAEf5O,IAAK,CACD/E,aAAc,IAIhB6hB,GAA0DzmB,IAC5D,MAAM2J,GAAM+c,EAAAA,GAAAA,MAIZ,OAHI1mB,EAAM2mB,QACN3mB,EAAM2mB,OAAOhd,GAEV,IAAI,EAgvBf,UAAeqX,EAAAA,EAAAA,YAAf,CAltBA,cAAiCuP,GAC7Br3B,WAAAA,CAAY8G,GACRC,MAAMD,GAAO,KAQjBqnB,YAAM,OAEN1d,SAAG,OAEH2d,eAAS,OAETC,kBAAY,OAyLZC,MAAS7d,IACL,IAAI7P,KAAKkG,MAAM0wB,UAGV52B,KAAK6P,KAAO7P,KAAK6P,MAAQA,GAAK,CAC/B7P,KAAK6P,IAAMA,EACX,MAAM8d,EAAsB,CACxBC,gBACwClc,IAApC1R,KAAKkG,MAAMW,KAAKzC,OAAOypB,SAChB7tB,KAAKkG,MAAMW,KAAKzC,OAAOypB,SACxB,OACL,EACLD,gBACyClc,IAArC1R,KAAKkG,MAAMW,KAAKzC,OAAO0pB,UAChB9tB,KAAKkG,MAAMW,KAAKzC,OAAO0pB,UACxB,OACL,GAGT9tB,KAAKutB,OAAS,IAAIQ,GAAAA,OAAOJ,EAAQ,CAC7BK,WAAW,EACXzd,MAAO3H,EAAAA,KAAKC,EAAE,qBACd+b,IAAKhc,EAAAA,KAAKC,EAAE,qBACZolB,aAAa,IAEZC,MAAMre,GACNse,UAAU,qCACVC,GAAG,CAAEC,QAAUC,GAAsBtuB,KAAKuuB,gBAAgBD,IACnE,GACF,KAmLFuI,YAAc,KACV,MAAMC,EAAQC,GAAUlnB,KAAI,CAACmnB,EAAMxpB,KAC/B/I,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CACL9nB,MAAOqyB,EAAK9nB,KAAK5L,SAGhBtD,KAAKkG,MAAM2C,EAAEmuB,EAAK9nB,OAFd1B,KAMb,OACItE,EAAAA,EAAAA,MAACkjB,EAAAA,YAAW,CACR/iB,MAAOzE,GAAO8xB,YACdzlB,QAAQ,WAAU3N,SAAA,EAElBmB,EAAAA,EAAAA,KAAC4nB,EAAAA,WAAU,CACP4K,QAAM,EACNn3B,GAAG,gBAAewD,SAEjBtD,KAAKkG,MAAM2C,EAAE,eAElBpE,EAAAA,EAAAA,KAAC8nB,EAAAA,OAAM,CACHre,SAAUlO,KAAKkG,MAAM0wB,OACrB3lB,QAAQ,WACR5H,MAAOzE,GAAO8xB,YACd52B,GAAG,UACH6E,MAAO3E,KAAKkG,MAAMW,KAAKzC,OAAO4qB,QAC9BvlB,SAAUzJ,KAAKk3B,oBACfC,cAAY,EAAA7zB,SAEXwzB,MAEK,EAEpB,KAEFI,oBAAuB5I,IACnB,MAAM3pB,EAAQ2pB,EAAI3b,OAAOhO,MAEzB3E,KAAKo3B,SADM,UACOzyB,EAAM,EAC1B,KAEF0yB,aAAe,CAAC/I,EAAoCxuB,KAChD,MAAM6E,EAAQ2pB,EAAI3b,OAAOhO,MACzB3E,KAAKs3B,cAAc3yB,EAAO7E,GAEf,cAAPA,GAA6B,aAAPA,IAClBE,KAAKytB,cACLhR,aAAazc,KAAKytB,cAEtBztB,KAAKytB,aAAe3a,YAAW,KAC3B9S,KAAKytB,aAAe,KACpBztB,KAAK6P,IAAIigB,MAAM,CACXlC,WAAW5tB,KAAKkG,MAAMW,KAAKzC,OAAOypB,UAClCD,WAAW5tB,KAAKkG,MAAMW,KAAKzC,OAAO0pB,aAEtC9tB,KAAKutB,OAAOwC,UAAU,CAClBnC,WAAW5tB,KAAKkG,MAAMW,KAAKzC,OAAOypB,UAClCD,WAAW5tB,KAAKkG,MAAMW,KAAKzC,OAAO0pB,YACpC,GACH,KACP,EACF,KAEFwJ,cAAgB,CAAC3yB,EAAY7E,EAAYY,IAA0BV,KAAKo3B,SAASt3B,EAAI6E,EAAOjE,GAAI,KAEhG62B,aAAgBjJ,IACZtuB,KAAKq3B,aAAa/I,EAAK,QAEnBtuB,KAAKwtB,WACL/Q,aAAazc,KAAKwtB,WAGtBxtB,KAAKwtB,UAAY1a,YAAW,KACxB9S,KAAKwtB,UAAY,MACA,IAAIwC,GAAAA,uBAEPC,OAAO,CAAEC,MAAO5B,EAAI3b,OAAOhO,QAAS3D,MAAKmvB,IAC/CA,EAAQ,IACRrd,YACI,IACI9S,KAAKs3B,cAAcnH,EAAQ,GAAG5X,EAAG,YAAY,IACzCvY,KAAKs3B,cAAcnH,EAAQ,GAAG/U,EAAG,aAAa,IAC1Cpb,KAAKs3B,cAAc,GAAI,QAAQ,KAC3Bt3B,KAAK6P,IAAIigB,MAAM,CAACK,EAAQ,GAAG5X,EAAG4X,EAAQ,GAAG/U,IACzCpb,KAAKutB,OAAOwC,UAAU,CAACI,EAAQ,GAAG5X,EAAG4X,EAAQ,GAAG/U,GAAG,SAInE,KAER,GACF,GACH,IAAI,EACT,KAEFrK,aAAe,CAACud,EAAoCkJ,KAChD,MAAM7yB,EAAQ2pB,EAAI3b,OAAOhO,MACnB7E,EAAKE,KAAKy3B,cAAcD,GAAU13B,GAG7B,eAAPA,GACC6E,EAAMif,cAAcliB,WAAW,WAC/BiD,EAAMif,cAAcxhB,SAAS,WAI9BpC,KAAKo3B,SAASt3B,EAAI6E,GAFlB3E,KAAKwD,SAAS,CAAEk0B,SAAS,EAAMC,aAAchzB,GAGjD,EACF,KAEFyyB,SAAW,CAACloB,EAAcvK,EAAYjE,KAClC,MAAMk3B,EAAUx3B,EAAAA,EAAWy3B,MAAM73B,KAAKkG,MAAMW,MAC3C+wB,EAAQxzB,OAA+B8K,GAAQvK,EAChD3E,KAAKkG,MAAMuD,SAASmuB,EAAS,MAAM,IAAMl3B,GAAMA,KAAK,EACtD,KAEF6tB,gBAAmBD,IAEf,IAAKtuB,KAAKkG,MAAM0wB,OAAQ,CACpB,MAAMkB,EAAKx3B,KAAKsH,MAAMtH,KAAKC,UAAU+tB,EAAI3b,OAAO6b,UAChDxuB,KAAKo3B,SAAS,WAAYU,EAAGrJ,KAAK,IAAMzuB,KAAKo3B,SAAS,YAAaU,EAAGpJ,MAC1E,GAhhBA1uB,KAAKsG,MAAQ,CACT+oB,KAAM,GACNqI,SAAS,EACTC,aAAc,GAEtB,CAUAF,WAAAA,GACI,MAAO,CACH,CACI33B,GAAI,WACJyQ,MAAO,mBACPwnB,WAAW,EACX/oB,OAAQ,CACJ,CACIlP,GAAI,KACJyQ,MAAO,WAEX,CACIzQ,GAAI,KACJyQ,MAAO,WAEX,CACIzQ,GAAI,KACJyQ,MAAO,8CAEX,CACIzQ,GAAI,KACJyQ,MAAO,sEAEX,CACIzQ,GAAI,KACJyQ,MAAO,aAEX,CACIzQ,GAAI,KACJyQ,MAAO,cAEX,CACIzQ,GAAI,KACJyQ,MAAO,eAEX,CACIzQ,GAAI,KACJyQ,MAAO,YAEX,CACIzQ,GAAI,KACJyQ,MAAO,WAEX,CACIzQ,GAAI,KACJyQ,MAAO,UAEX,CACIzQ,GAAI,QACJyQ,MAAO,8BAInB,CACIzQ,GAAI,WACJyQ,MAAO,oBACPwnB,WAAW,EACX/oB,OAAQ,CACJ,CACIlP,GAAI,QACJyQ,MAAO,SAEX,CACIzQ,GAAI,QACJyQ,MAAO,WAInB,CACIzQ,GAAI,WACJyQ,MAAO,gBACPwnB,WAAW,EACXC,WAAW,EACXC,cAAc,EACdjpB,OAAQ,CACJ,CACIlP,GAAI,SACJyQ,MAAO,UAEX,CACIzQ,GAAI,IACJyQ,MAAO,KAEX,CACIzQ,GAAI,SACJyQ,MAAO,UAEX,CACIzQ,GAAI,SACJyQ,MAAO,UAEX,CACIzQ,GAAI,MACJyQ,MAAO,SAInB,CACIzQ,GAAI,aACJyQ,MAAO,cACPwnB,WAAW,EACX/oB,OAAQ,CACJ,CACIlP,GAAI,aACJyQ,MAAO,cAEX,CACIzQ,GAAI,aACJyQ,MAAO,cAEX,CACIzQ,GAAI,aACJyQ,MAAO,gBAInB,CACIzQ,GAAI,eACJyQ,MAAO,qBACPwnB,WAAW,EACX/oB,OAAQ,CACJ,CACIlP,IAAI,EACJyQ,MAAO,SAEX,CACIzQ,IAAI,EACJyQ,MAAO,WAInB,CACIzQ,GAAI,iBACJyQ,MAAO,kBACPvB,OAAQ,CACJ,CAAElP,GAAI,GAAIyQ,MAAOvQ,KAAKkG,MAAM2C,EAAE,YAC3B7I,KAAKkG,MAAMgyB,UAAUroB,KAAIsoB,IAAO,CAC/Br4B,GAAIq4B,EACJ5nB,MAAO4nB,QAInB,CACIr4B,GAAI,aACJyQ,MAAO,qBACPwnB,WAAW,EACX/oB,OAAQ5O,EAAAA,EAAWg4B,UAAUp4B,KAAKkG,MAAMmyB,QAAQ3D,OAAO4D,cAAc,CAACC,EAAOrpB,KAAI,CAC7EpP,GAAIoP,EACJqB,MAAOrB,OAGf,CACIpP,GAAI,aACJyQ,MAAO,cACPvB,OAAQ,CACJ,CAAElP,IAAI,EAAMyQ,MAAO,MACnB,CAAEzQ,IAAI,EAAOyQ,MAAO,mBAG5B,CACIzQ,GAAI,kBACJyQ,MAAO,oBACPioB,KAAM,oBACNT,WAAW,EACX/oB,OAAQ,CACJ,CAAElP,GAAI,QAASyQ,MAAO,SACtB,CAAEzQ,GAAI,OAAQyQ,MAAO,QACrB,CAAEzQ,GAAI,OAAQyQ,MAAO,QACrB,CAAEzQ,GAAI,QAASyQ,MAAO,WAG9B,CACIzQ,GAAI,iBACJyQ,MAAO,oBACPwnB,WAAW,EACX/oB,OAAQ,CACJ,CAAElP,GAAI,SAAUyQ,MAAO,UACvB,CAAEzQ,GAAI,SAAUyQ,MAAO,YAIvC,CAiCAkoB,SAAAA,CAAUp3B,EAAYoR,GAClB,IAAI9N,EAAS3E,KAAKkG,MAAMW,KAAKzC,OAA+B/C,EAAEvB,IAM9D,GAJa,oBAATuB,EAAEvB,IAA6B6E,IAC/BA,EAAQ,QAGC,eAATtD,EAAEvB,IAAuBE,KAAKkG,MAAMwyB,cACpC,OAAO,KAIX,GAAI14B,KAAKkG,MAAMue,eAAerd,MAAMmkB,WAA+D,IAAnDvrB,KAAKkG,MAAMue,eAAerd,MAAMmkB,SAASlqB,EAAEvB,IACvF,OAAO,KAGX,GAAIuB,EAAE42B,cAAgB52B,EAAE2N,OACpB,OACIvK,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CACFxF,KAAM,CAAE2jB,GAAI,EAAGC,GAAI,IAAKt1B,UAGxBmB,EAAAA,EAAAA,KAAC2rB,EAAAA,aAAY,CAETC,UAAQ,EACRniB,SAAUlO,KAAKkG,MAAM0wB,OACrBtG,QAASjvB,EAAE2N,OACXuhB,WAAY5rB,EAAMkO,WAClBpJ,SAAUA,CAACovB,EAAM7nB,KACb,MAAMlR,EAAKE,KAAKy3B,cAAchlB,GAAG3S,GACT,kBAAbkR,EAIXhR,KAAKo3B,SAASt3B,EAAIkR,EAAWA,EAASlR,GAAK,IAHvCE,KAAKo3B,SAASt3B,EAAIkR,EAGwB,EAElDwf,cAAeA,CAAC5hB,EAAQoC,KACpB,MAAMlR,EAAKE,KAAKy3B,cAAchlB,GAAG3S,GACjCE,KAAKo3B,SAASt3B,EAAIkR,EAAS,EAE/Byf,eAAgBC,GACU,kBAAXA,EACAA,EAEPrvB,EAAE02B,UACK/3B,KAAKkG,MAAM2C,EAAE6nB,EAAOngB,OAASmgB,EAAO5wB,GAAG+S,YAE3C6d,EAAOngB,OAASmgB,EAAO5wB,GAAG+S,WAErC8d,aAAcA,CAACzqB,EAAOwqB,KAClBjsB,EAAAA,EAAAA,KAAA,MAAAZ,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAQqC,GAAK,IAAA5C,SACRjC,EAAE02B,UACG/3B,KAAKkG,MAAM2C,EAAE6nB,EAAOngB,OAASmgB,EAAO5wB,GAAG+S,YACvC6d,EAAOngB,OAASmgB,EAAO5wB,MAGrC8wB,YAAaC,IACTpsB,EAAAA,EAAAA,KAAC0kB,EAAAA,WAAStlB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACFgtB,GAAM,IACV5f,QAAQ,WACRM,MAAOvR,KAAKkG,MAAM2C,EAAExH,EAAEkP,aAxC7BkC,GAiDjB,GAAIpR,EAAE22B,WAAarzB,IAAUtD,EAAE2N,OAAOC,MAAK+nB,GAAQA,EAAKl3B,KAAO6E,IAC3D,OACIF,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CACFxF,KAAM,CAAE2jB,GAAI,EAAGC,GAAI,IAAKt1B,UAGxB4F,EAAAA,EAAAA,MAACkjB,EAAAA,YAAW,CACR/iB,MAAOzE,GAAO8xB,YACdzlB,QAAQ,WAAU3N,SAAA,EAElBmB,EAAAA,EAAAA,KAAC4nB,EAAAA,WAAU,CACP4K,QAAM,EACNn3B,GAAE,GAAAiB,OAAKM,EAAEvB,GAAE,UAASwD,SAEnBtD,KAAKkG,MAAM2C,EAAExH,EAAEkP,UAEpB9L,EAAAA,EAAAA,KAAC0kB,EAAAA,UAAS,CACNjb,SAAUlO,KAAKkG,MAAM0wB,OACrB3lB,QAAQ,WACRnR,GAAIuB,EAAEvB,GACN6E,MAAOA,EAAMkO,WACbpJ,SAAU6kB,GAAOtuB,KAAK+Q,aAAaud,EAAK7b,GACxC4W,WAAYhoB,EAAEm3B,KAAOx4B,KAAKkG,MAAM2C,EAAExH,EAAEm3B,MAAQ,GAC5ChoB,UAAW,CACPsoB,WAAY,CACR7B,QAAQ,GAEZ3O,MAAO,CACHc,UAAU,EACV0H,aAAcnsB,EAAMkO,YAChBpO,EAAAA,EAAAA,KAACssB,EAAAA,eAAc,CAACjsB,SAAS,MAAKxB,UAC1BmB,EAAAA,EAAAA,KAACsQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMzT,KAAK+Q,aAAa,CAAE4B,OAAQ,CAAEhO,MAAO,KAAQ8N,GAAGnP,UAE/DmB,EAAAA,EAAAA,KAACmP,EAAAA,MAAS,QAGlB,aAlCfnB,GA2CjB,MAAMqkB,EAAQz1B,EAAE2N,OAAOa,KAAI,CAACmnB,EAAMxpB,KAC9B/I,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CACL9nB,MAAOqyB,EAAKl3B,GAAawD,SAGxBjC,EAAE02B,UAAY/3B,KAAKkG,MAAM2C,EAAEmuB,EAAKzmB,OAASymB,EAAKl3B,GAAG+S,YAAcmkB,EAAKzmB,OAASymB,EAAKl3B,IAF9E0N,KAMb,OACI/I,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CACFxF,KAAM,CAAE2jB,GAAI,EAAGC,GAAI,IAAKt1B,UAGxB4F,EAAAA,EAAAA,MAACkjB,EAAAA,YAAW,CACR/iB,MAAOzE,GAAO8xB,YACdzlB,QAAQ,WAAU3N,SAAA,EAElBmB,EAAAA,EAAAA,KAAC4nB,EAAAA,WAAU,CACP4K,QAAM,EACNn3B,GAAE,GAAAiB,OAAKM,EAAEvB,GAAE,UAASwD,SAEnBtD,KAAKkG,MAAM2C,EAAExH,EAAEkP,UAEpB9L,EAAAA,EAAAA,KAAC8nB,EAAAA,OAAM,CACHre,SAAUlO,KAAKkG,MAAM0wB,OACrB3lB,QAAQ,WACR5H,MAAOzE,GAAO8xB,YACd52B,GAAIuB,EAAEvB,GACN6E,WAAiB+M,IAAV/M,GAA8BA,EACrC8E,SAAU6kB,GAAOtuB,KAAK+Q,aAAaud,EAAK7b,GACxC0kB,cAAY,EAAA7zB,SAEXwzB,IAEJz1B,EAAEm3B,MAAO/zB,EAAAA,EAAAA,KAACutB,EAAAA,eAAc,CAAA1uB,SAAEtD,KAAKkG,MAAM2C,EAAExH,EAAEm3B,QAA0B,SAvBnE/lB,EA2BjB,CAEAsmB,mBAAAA,GACI,OAAI/4B,KAAKsG,MAAMoxB,SAEPjzB,EAAAA,EAAAA,KAACu0B,EAAAA,cAAa,CACV5wB,KAAMpI,KAAKkG,MAAM2C,EAAE,uBACnBgF,QAAS7F,IACL,MAAMrD,EAAQ3E,KAAKsG,MAAMqxB,aACzB33B,KAAKwD,SAAS,CAAEk0B,SAAS,EAAOC,aAAc,OAAQ,KAC9C3vB,GACAhI,KAAKo3B,SAAS,aAAczyB,EAChC,GACF,IAMX,IACX,CA+HA0F,MAAAA,GACI,MAAM4uB,EAAYj5B,KAAKy3B,cAAc5nB,KAAI,CAACxO,EAAGoR,IAAMzS,KAAKy4B,UAAUp3B,EAAGoR,KAE/Dkb,EAAsB,CACxBC,gBACwClc,IAApC1R,KAAKkG,MAAMW,KAAKzC,OAAOypB,SAChB7tB,KAAKkG,MAAMW,KAAKzC,OAAOypB,SACxB,OACL,EACLD,gBACyClc,IAArC1R,KAAKkG,MAAMW,KAAKzC,OAAO0pB,UAChB9tB,KAAKkG,MAAMW,KAAKzC,OAAO0pB,UACxB,OACL,IAGH,KAAEuB,GAASrvB,KAAKsG,MAEtB,OACI4C,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAO4uB,SAASlwB,SAAA,CACvBtD,KAAK+4B,uBACN7vB,EAAAA,EAAAA,MAACsR,EAAAA,MAAK,CACFC,WAAS,EACTC,QAAS,EAAEpX,SAAA,EAEXmB,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAACxF,KAAM,CAAEkkB,GAAI,EAAGC,GAAI,IAAK71B,UAC3B4F,EAAAA,EAAAA,MAACsR,EAAAA,MAAK,CACFC,WAAS,EACTC,QAAS,EAAEpX,SAAA,EAEXmB,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAACxF,KAAM,CAAE4jB,GAAI,IAAKt1B,UACpBmB,EAAAA,EAAAA,KAAC0kB,EAAAA,UAAS,CACNjb,SAAUlO,KAAKkG,MAAM0wB,OACrBliB,WAAS,EACTzD,QAAQ,WACRnR,GAAG,WACHyR,MAAOvR,KAAKkG,MAAM2C,EAAE,aACpBlE,MAAO3E,KAAKkG,MAAMW,KAAKzC,OAAOg1B,UAAY,GAC1C3vB,SAAUpI,GAAKrB,KAAKo3B,SAAS,WAAY/1B,EAAEsR,OAAOhO,OAClD0kB,WAAYrpB,KAAKkG,MAAM2C,EACnB,sFAEJ2H,UAAW,CACP8X,MAAO,CACHwI,aAAc9wB,KAAKkG,MAAMW,KAAKzC,OAAOg1B,UACjC30B,EAAAA,EAAAA,KAACssB,EAAAA,eAAc,CAACjsB,SAAS,MAAKxB,UAC1BmB,EAAAA,EAAAA,KAACsQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMzT,KAAKo3B,SAAS,WAAY,IAAI9zB,UAE7CmB,EAAAA,EAAAA,KAACmP,EAAAA,MAAS,QAGlB,WAKnBqlB,QAGTx0B,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAACxF,KAAM,CAAEkkB,GAAI,EAAGC,GAAI,IAAK71B,UAC3B4F,EAAAA,EAAAA,MAACgoB,GAAAA,EAAY,CACT7nB,MAAOzE,GAAOiL,IACd8d,OAAQA,EACR0B,KAAMA,EACN8B,QAAS,GACTC,oBAAqBpxB,KAAKkG,MAAM0wB,OAChCvF,aAAcrxB,KAAKkG,MAAM0wB,OACzBtF,iBAAkBtxB,KAAKkG,MAAM0wB,OAC7BrF,iBAAkBvxB,KAAKkG,MAAM0wB,OAC7BpF,UAAWxxB,KAAKkG,MAAM0wB,OAEtBnF,cAAe,IAAKnuB,SAAA,EAEpBmB,EAAAA,EAAAA,KAACitB,GAAAA,EAAS,CAAC9e,IAAI,8CACfnO,EAAAA,EAAAA,KAACkoB,GAAc,CAACE,OAAQhd,GAAO7P,KAAK0tB,MAAM7d,cAItD3G,EAAAA,EAAAA,MAACsR,EAAAA,MAAK,CACFC,WAAS,EACTC,QAAS,EAAEpX,SAAA,EAEXmB,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAACxF,KAAM,CAAE2jB,GAAI,EAAGC,GAAI,GAAIO,GAAI,GAAI71B,SAAEtD,KAAK62B,iBAC7CpyB,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAACxF,KAAM,CAAE2jB,GAAI,EAAGC,GAAI,GAAIO,GAAI,GAAI71B,UAClC4F,EAAAA,EAAAA,MAACkjB,EAAAA,YAAW,CACR/iB,MAAOzE,GAAO8xB,YACdzlB,QAAQ,WAAU3N,SAAA,EAElBmB,EAAAA,EAAAA,KAAC4nB,EAAAA,WAAU,CACP4K,QAAM,EACNn3B,GAAG,aAAYwD,SAEdtD,KAAKkG,MAAM2C,EAAE,YAElBpE,EAAAA,EAAAA,KAAC0kB,EAAAA,UAAS,CACNjb,SAAUlO,KAAKkG,MAAM0wB,OACrB3lB,QAAQ,WACRnR,GAAG,OACHyR,MAAOvR,KAAKkG,MAAM2C,EAAE,SACpBlE,MAAO3E,KAAKkG,MAAMW,KAAKzC,OAAO0qB,KAC9BrlB,SAAU6kB,GAAOtuB,KAAKu3B,aAAajJ,GACnC9d,UAAW,CACPsoB,WAAY,CACR7B,QAAQ,GAEZ3O,MAAO,CACHc,UAAU,EACV0H,aAAc9wB,KAAKkG,MAAMW,KAAKzC,OAAO0qB,MACjCrqB,EAAAA,EAAAA,KAACssB,EAAAA,eAAc,CAACjsB,SAAS,MAAKxB,UAC1BmB,EAAAA,EAAAA,KAACsQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMzT,KAAKu3B,aAAa,CAAE5kB,OAAQ,CAAEhO,MAAO,MAAQrB,UAE5DmB,EAAAA,EAAAA,KAACmP,EAAAA,MAAS,QAGlB,eAMxBnP,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAACxF,KAAM,CAAE2jB,GAAI,EAAGC,GAAI,GAAIO,GAAI,GAAI71B,UAClC4F,EAAAA,EAAAA,MAACkjB,EAAAA,YAAW,CACR/iB,MAAOzE,GAAO8xB,YACdzlB,QAAQ,WAAU3N,SAAA,EAElBmB,EAAAA,EAAAA,KAAC4nB,EAAAA,WAAU,CACP4K,QAAM,EACNn3B,GAAG,iBAAgBwD,SAElBtD,KAAKkG,MAAM2C,EAAE,gBAElBpE,EAAAA,EAAAA,KAAC0kB,EAAAA,UAAS,CACNjb,SAAUlO,KAAKkG,MAAM0wB,OACrB3lB,QAAQ,WACRnR,GAAG,WACHyR,MAAOvR,KAAKkG,MAAM2C,EAAE,aACpBlE,MAAO3E,KAAKkG,MAAMW,KAAKzC,OAAOypB,UAAY,EAC1Crd,UAAW,CACPsoB,WAAY,CACR7B,QAAQ,GAEZ3O,MAAO,CACHc,UAAU,IAGlB3f,SAAU6kB,GAAOtuB,KAAKq3B,aAAa/I,EAAK,oBAIpD7pB,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAACxF,KAAM,CAAE2jB,GAAI,EAAGC,GAAI,GAAIO,GAAI,GAAI71B,UAClC4F,EAAAA,EAAAA,MAACkjB,EAAAA,YAAW,CACR/iB,MAAOzE,GAAO8xB,YACdzlB,QAAQ,WAAU3N,SAAA,EAElBmB,EAAAA,EAAAA,KAAC4nB,EAAAA,WAAU,CACP4K,QAAM,EACNn3B,GAAG,kBAAiBwD,SAEnBtD,KAAKkG,MAAM2C,EAAE,iBAElBpE,EAAAA,EAAAA,KAAC0kB,EAAAA,UAAS,CACNjb,SAAUlO,KAAKkG,MAAM0wB,OACrB3lB,QAAQ,WACRnR,GAAG,YACHyR,MAAOvR,KAAKkG,MAAM2C,EAAE,cACpBlE,MAAO3E,KAAKkG,MAAMW,KAAKzC,OAAO0pB,WAAa,EAC3Ctd,UAAW,CACPsoB,WAAY,CACR7B,QAAQ,GAEZ3O,MAAO,CACHc,UAAU,IAGlB3f,SAAU6kB,GAAOtuB,KAAKq3B,aAAa/I,EAAK,yBAOpE,I,oDC/vBJ,MAAM1pB,GAA8B,CAChC4uB,SAAU,CACNxuB,MAAO,OACP6F,OAAQ,QACRM,SAAU,OACV6S,UAAW,SACXb,QAAS,IAGbkc,MAAO,CACHt0B,QAAS,OACTgG,cAAe,SACf/F,MAAO,QAEXs0B,YAAa,CACTxtB,cAAe,GACf/G,QAAS,QAEbw0B,iBAAkB,CACdv0B,MAAO,OACPyF,gBAAiB,cACjB2F,WAAY,GACZopB,OAAQ,OACRz0B,QAAS,OACTI,WAAY,UAEhBs0B,WAAY,CACRz0B,MAAO,IAEX00B,aAAc,CACV10B,MAAO,KAEX20B,aAAc,CACV30B,MAAO,IAEX40B,oBAAqB,CACjB50B,MAAO,IACPslB,UAAW,UAEfuP,aAAc,CACV70B,MAAO,IAEX80B,QAAS,CACL90B,MAAO,KAEXsjB,MAAO,CACHtjB,MAAO,QAEX+0B,cAAe,CACX,qBAAsB,CAClBP,OAAQ,oBACR1uB,aAAc,IAGtBkvB,UAAW,CACP3pB,YAAa,EACbrL,MAAO,GACP6F,OAAQ,IAEZovB,QAAS,CACLvpB,cAAe,SASvB,SAASwpB,GAAYC,GACjB,OAAO/5B,EAAAA,EAAWg4B,UAAU+B,GAAO,CAAC3H,EAAMtjB,KAAI,CAC1CqB,MAAOrB,EACPkrB,KAAM5H,EAAK4H,QAEnB,CAEA,SAASC,GAAYC,GACjB,MAAMtyB,EAAqB,CAAC,EAC5B,IAAK,MAAM+Q,KAAQuhB,EAEftyB,EAAO+Q,EAAKxI,OAAS,CAAE6pB,KAAMrhB,EAAKqhB,MAGtC,OAAOpyB,CACX,CAEA,MAAMmS,IAAaogB,EAAAA,GAAAA,IAAe,KAAM91B,EAAAA,EAAAA,KAAC+1B,EAAAA,KAAc,CAACnxB,MAAO,CAAEoV,UAAW,EAAGpO,YAAa,EAAGsG,OAAQ,cA0BjG8jB,IAAeC,EAAAA,GAAAA,KAAkCr3B,IAAA,IAAC,MAAEsB,GAAuBtB,EAAA,OAAKsB,CAAK,IACrFg2B,IAAeC,EAAAA,GAAAA,KAAgCrtB,IAAA,IAAC,MAAE5I,GAAuB4I,EAAA,OAAK5I,CAAK,IAmkBzF,UAAeuiB,EAAAA,EAAAA,YAAf,CAjkBA,cAAiCuP,GAC7Br3B,WAAAA,CAAY8G,GACRC,MAAMD,GAAO,KAsDjB20B,MAAQ,KACJ,MAAMjD,EAAUx3B,EAAAA,EAAWy3B,MAAM73B,KAAKkG,MAAMW,MACtCyzB,EAAQJ,GAAYtC,EAAQlD,OAAO4D,cACzCgC,EAAMj4B,KAAK,CACPkO,MAAO,KACP6pB,KAAM,KAEVxC,EAAQlD,OAAO4D,aAAe+B,GAAYC,GAC1Ct6B,KAAKkG,MAAMuD,SAASmuB,EAAQ,EAC9B,KAEFkD,UAAY,KACR,MAAMlD,EAAUx3B,EAAAA,EAAWy3B,MAAM73B,KAAKkG,MAAMW,MAC5C+wB,EAAQlD,OAAO4D,aAAe,CAE1ByC,OAAQ,CACJX,KAAM,kDAGVY,KAAM,CACFZ,KAAM,0DAId,MAAMa,EAAY/5B,OAAOC,KAAKnB,KAAKkG,MAAMW,KAAK6tB,OAAO4D,cAAcrpB,MAC/DC,GAAQlP,KAAKkG,MAAMW,KAAK6tB,OAAO4D,aAAappB,GAAMkrB,OAASxC,EAAQlD,OAAO4D,aAAayC,OAAOX,OAE9Fa,IACIrD,EAAQlD,OAAO4D,aAAayC,OAAOG,OACnCtD,EAAQlD,OAAO4D,aAAayC,OAAOG,KAAOl7B,KAAKkG,MAAMW,KAAK6tB,OAAO4D,aAAa2C,GAAWC,MAEzFtD,EAAQlD,OAAO4D,aAAayC,OAAO9nB,OACnC2kB,EAAQlD,OAAO4D,aAAayC,OAAO9nB,KAAOjT,KAAKkG,MAAMW,KAAK6tB,OAAO4D,aAAa2C,GAAWhoB,MAEzF2kB,EAAQlD,OAAO4D,aAAayC,OAAOI,OACnCvD,EAAQlD,OAAO4D,aAAayC,OAAOI,KAAOn7B,KAAKkG,MAAMW,KAAK6tB,OAAO4D,aAAa2C,GAAWE,OAGjG,MAAMC,EAAUl6B,OAAOC,KAAKnB,KAAKkG,MAAMW,KAAK6tB,OAAO4D,cAAcrpB,MAC7DC,GAAQlP,KAAKkG,MAAMW,KAAK6tB,OAAO4D,aAAappB,GAAMkrB,OAASxC,EAAQlD,OAAO4D,aAAa0C,KAAKZ,OAE5FgB,IACIxD,EAAQlD,OAAO4D,aAAa0C,KAAKE,OACjCtD,EAAQlD,OAAO4D,aAAa0C,KAAKE,KAAOl7B,KAAKkG,MAAMW,KAAK6tB,OAAO4D,aAAa8C,GAASF,MAErFtD,EAAQlD,OAAO4D,aAAa0C,KAAK/nB,OACjC2kB,EAAQlD,OAAO4D,aAAa0C,KAAK/nB,KAAOjT,KAAKkG,MAAMW,KAAK6tB,OAAO4D,aAAa8C,GAASnoB,MAErF2kB,EAAQlD,OAAO4D,aAAa0C,KAAKG,OACjCvD,EAAQlD,OAAO4D,aAAa0C,KAAKG,KAAOn7B,KAAKkG,MAAMW,KAAK6tB,OAAO4D,aAAa8C,GAASD,OAI7F,MAAME,EAAwFj7B,EAAAA,EAAWy3B,MACrG73B,KAAKkG,MAAMmyB,SAEf,OAAKr4B,KAAKkG,MAAMwyB,eAKhB2C,EAAUj3B,OAAOquB,WAAa,CAAC,UAC/B4I,EAAUj3B,OAAOk3B,mBAAqB,CAAEhD,aAAc,CAAC,EAAGiD,cAAe,QAEzEv7B,KAAKkG,MAAMuD,SAASmuB,EAASyD,GACtB,OARHA,EAAUj3B,OAAOquB,WAAa,cAC9BzyB,KAAKkG,MAAMuD,SAASmuB,EAASyD,GAOtB,EACb,KAEFG,qBAAuB,CACnBC,EACA7D,EACA8D,EACAC,KAEA,MAAMN,EAAYj7B,EAAAA,EAAWy3B,MAAM73B,KAAKkG,MAAMmyB,SAC9C,IAAKr4B,KAAKkG,MAAMwyB,cAEZ,OADA2C,EAAUj3B,OAAOquB,WAAagJ,EACvBJ,EAGX,GADAzD,EAAUA,GAAWx3B,EAAAA,EAAWy3B,MAAM73B,KAAKkG,MAAMW,WAChC6K,IAAbgqB,GAAiE,kBAAhCL,EAAUj3B,OAAOquB,WAAyB,CAC3E,MAAMlwB,EAAM84B,EAAUj3B,OAAOquB,WAAWjwB,QAAQk5B,IACnC,IAATn5B,IACA84B,EAAUj3B,OAAOquB,WAAWlwB,GAAOo5B,EAE3C,CAMA,GAJ2C,kBAAhCN,EAAUj3B,OAAOquB,YAA2B4I,EAAUj3B,OAAOquB,aACpE4I,EAAUj3B,OAAOquB,WAAa,CAAC4I,EAAUj3B,OAAOquB,aAEpD4I,EAAUj3B,OAAOquB,WAAa4I,EAAUj3B,OAAOquB,YAAc,GAClB,kBAAhC4I,EAAUj3B,OAAOquB,aACnB4I,EAAUj3B,OAAOquB,WAAWrwB,SAASq5B,GAAU,CAEhD,MAAM3E,EAAQoD,GAAYtC,EAAQlD,OAAO4D,cACzC+C,EAAUj3B,OAAOquB,WAAWvQ,MAAK,CAAC2B,EAAGC,IAClBgT,EAAM8E,WAAU7iB,GAAQA,EAAKxI,QAAUsT,IACvCiT,EAAM8E,WAAU7iB,GAAQA,EAAKxI,QAAUuT,KAG9D,CAGJ,OAAOuX,CAAS,EAClB,KAEFQ,UAAYluB,IAA2E,IAA1E,SAAEmuB,EAAQ,SAAEC,GAAkDpuB,EACvEuY,QAAQC,IAAI2V,EAAUC,GACtB,MAAMnE,EAAUx3B,EAAAA,EAAWy3B,MAAM73B,KAAKkG,MAAMW,MACtCiwB,EAAQoD,GAAYtC,EAAQlD,OAAO4D,cACnCvf,EAAO+d,EAAMgF,GACnBhF,EAAMr0B,OAAOq5B,EAAU,GACvBhF,EAAMr0B,OAAOs5B,EAAU,EAAGhjB,GAC1B6e,EAAQlD,OAAO4D,aAAe+B,GAAYvD,GAE1C,MAAMuE,EAAYj7B,EAAAA,EAAWy3B,MAAM73B,KAAKkG,MAAMmyB,SAEH,kBAAhCgD,EAAUj3B,OAAOquB,aACxB4I,EAAUj3B,OAAOquB,WAAa,CAAC4I,EAAUj3B,OAAOquB,aAIpD4I,EAAUj3B,OAAOquB,WAAWvQ,MAAK,CAAC2B,EAAGC,IAClBgT,EAAM8E,WAAU3X,GAAMA,EAAG1T,QAAUsT,IACnCiT,EAAM8E,WAAU3X,GAAMA,EAAG1T,QAAUuT,MAItD9jB,KAAKkG,MAAMuD,SAASmuB,EAASyD,EAAU,EArLvC,MAAMlB,GAC8C,kBAAzCn6B,KAAKkG,MAAMmyB,QAAQj0B,OAAOquB,WAC3B,CAACzyB,KAAKkG,MAAMmyB,QAAQj0B,OAAOquB,YAC3BzyB,KAAKkG,MAAMmyB,QAAQj0B,OAAOquB,YAClCjP,QAAO0E,GAAKA,IAEdloB,KAAKsG,MAAQ,CACT8C,OAAQ+wB,EAAMt5B,OACd62B,SAAS,EACTC,aAAc,KAEtB,CAEAqE,cAAAA,CAAer3B,EAAY7E,EAAYoP,GACnC,MAAM0oB,EAAUx3B,EAAAA,EAAWy3B,MAAM73B,KAAKkG,MAAMW,MACtCyzB,EAAQJ,GAAYtC,EAAQlD,OAAO4D,cACnCvf,EAAOuhB,EAAMrrB,MAAK/K,GAAWA,EAAQqM,QAAUzQ,IAC/C47B,EAAW3iB,EAAKxI,MAItB,IAAI8qB,EAHJtiB,EAAK7J,GAAQvK,EACbizB,EAAQlD,OAAO4D,aAAe+B,GAAYC,IAIY,kBAAzCt6B,KAAKkG,MAAMmyB,QAAQj0B,OAAOquB,YAC/BzyB,KAAKkG,MAAMmyB,QAAQj0B,OAAOquB,aAAe3yB,GACQ,kBAAzCE,KAAKkG,MAAMmyB,QAAQj0B,OAAOquB,YAC9BzyB,KAAKkG,MAAMmyB,QAAQj0B,OAAOquB,WAAWrwB,SAAStC,KAC7C,UAAToP,IAEAmsB,EAAYr7B,KAAKw7B,qBAAqB72B,EAAOizB,EAAS8D,EAAU/2B,IAGpE3E,KAAKkG,MAAMuD,SAASmuB,EAASyD,EACjC,CAEAY,QAAAA,CAASn8B,GACL,MAAM83B,EAAUx3B,EAAAA,EAAWy3B,MAAM73B,KAAKkG,MAAMW,MACtCyzB,EAAQJ,GAAYtC,EAAQlD,OAAO4D,cACnC9qB,EAAQ8sB,EAAMsB,WAAU13B,GAAWA,EAAQqM,QAAUzQ,IAC3Dw6B,EAAM73B,OAAO+K,EAAO,GACpBoqB,EAAQlD,OAAO4D,aAAe+B,GAAYC,GACtCt6B,KAAKkG,MAAMmyB,QAAQj0B,OAAOquB,aAAe3yB,EACrCoB,OAAOC,KAAKy2B,EAAQlD,OAAO4D,cAAcz3B,OAEzCb,KAAKkG,MAAMuD,SAASmuB,EAAS53B,KAAKw7B,qBAAqBt6B,OAAOC,KAAKy2B,EAAQlD,OAAO4D,cAAc,KAEhGt4B,KAAKkG,MAAMuD,SAASmuB,EAAS53B,KAAKw7B,qBAAqB,KAG3Dx7B,KAAKkG,MAAMuD,SAASmuB,EAE5B,CAqIAsE,kBAAAA,CACItE,EACAxuB,EACA+yB,GAEIA,EACAn8B,KAAKwD,SAAS,CAAEk0B,SAAS,EAAMC,aAAc,CAAEC,UAASxuB,WAExDpJ,KAAKwD,SAAS,CAAE4F,UAAS,IAAMpJ,KAAKkG,MAAMuD,SAAS,KAAMmuB,IAEjE,CAEAmB,mBAAAA,GACI,OAAI/4B,KAAKsG,MAAMoxB,SAEPjzB,EAAAA,EAAAA,KAACu0B,EAAAA,cAAa,CACV5wB,KAAMpI,KAAKkG,MAAM2C,EAAE,uBACnBgF,QAAS7F,IACL,MAAMrD,EAAQ3E,KAAKsG,MAAMqxB,aACzB33B,KAAKwD,SAAS,CAAEk0B,SAAS,EAAOC,aAAc,OAAQ,KAC9C3vB,GACAhI,KAAKwD,SAAS,CAAE4F,MAAOzE,EAAMyE,QAAS,IAAMpJ,KAAKkG,MAAMuD,SAAS,KAAM9E,EAAMizB,UAChF,GACF,IAKX,IACX,CAEAwE,kBAAAA,CAAmBrjB,EAA+BvL,GAAmC,IAAD6uB,EAAAC,EAAAC,EAChF,MAAMC,GACDzjB,EAAKxI,OACNwI,EAAKxI,MAAMksB,cAAgB1jB,EAAKxI,OAC/BwI,EAAKxI,MAAM1P,OAAS,KAAOkY,EAAKxI,MAAM6S,MAAM,SAE3Cpb,GACFkB,EAAAA,EAAAA,MAACwzB,EAAAA,SAAQ,CAACC,UAAU,YAAWr5B,SAAA,EAC3BmB,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CACNvzB,MAAOzE,GAAO60B,WACdkD,UAAU,aACVpsB,MAAOvQ,KAAKkG,MAAM2C,EAAE,4BAA4BvF,UAEhDmB,EAAAA,EAAAA,KAAC0V,GAAU,OAEfjR,EAAAA,EAAAA,MAAC0zB,EAAAA,UAAS,CACNvzB,MAAOzE,GAAO80B,aACdiD,UAAU,aAAYr5B,SAAA,CAErBkK,EAAQ,EACRxN,KAAKkG,MAAMwyB,eACRj0B,EAAAA,EAAAA,KAACqR,EAAAA,SAAQ,CACL5H,UAC4D,IAAxDlO,KAAKkG,MAAMue,eAAerd,MAAMmkB,SAASkH,YAAwBzyB,KAAKkG,MAAM0wB,OAEhFpuB,GAAIxI,KAAKsG,MAAM8C,MAAQxE,GAAOm1B,mBAAgBroB,EAC9CnB,MAAOvQ,KAAKsG,MAAM8C,MAAQR,EAAAA,KAAKC,EAAE,sCAAwC,GACzEkN,QACoD,kBAAzC/V,KAAKkG,MAAMmyB,QAAQj0B,OAAOquB,WAC3BzyB,KAAKkG,MAAMmyB,QAAQj0B,OAAOquB,aAAe1Z,EAAKxI,MAC9CvQ,KAAKkG,MAAMmyB,QAAQj0B,OAAOquB,WAAWrwB,SAAS2W,EAAKxI,OAE7D9G,SAAUA,KACN,IAAI0yB,GAAc,EAClB,MAAMvE,EAAUx3B,EAAAA,EAAWy3B,MAAM73B,KAAKkG,MAAMmyB,SACH,kBAA9BT,EAAQxzB,OAAOquB,aACtBmF,EAAQxzB,OAAOquB,WAAa,CAACmF,EAAQxzB,OAAOquB,aAEhD,IAAIlwB,EAAMq1B,EAAQxzB,OAAOquB,WAAWjwB,QAAQuW,EAAKxI,OACjD,IAAa,IAAThO,EAAY,CACZq1B,EAAQxzB,OAAOquB,WAAWpwB,KAAK0W,EAAKxI,OAGpC,MAAMssB,EAAM3C,GAAYl6B,KAAKkG,MAAMW,KAAK6tB,OAAO4D,cAC/CV,EAAQxzB,OAAOquB,WAAWvQ,MAAK,CAAC2B,EAAGC,IAChB+Y,EAAIjB,WAAU3X,GAAMA,EAAG1T,QAAUsT,IACjCgZ,EAAIjB,WAAU3X,GAAMA,EAAG1T,QAAUuT,MAIpDqY,EAAcpjB,EAAKxI,MAAMqT,cAAcliB,WAAW,OACtD,MACIk2B,EAAQxzB,OAAOquB,WAAWhwB,OAAOF,EAAK,GAItCwW,EAAKxI,MAAMqT,cAAcliB,WAAW,SACpCk2B,EAAQxzB,OAAOquB,WAAWxjB,MAAKiZ,GAAKA,EAAEtE,cAAcliB,WAAW,aAE/Da,EAAMq1B,EAAQxzB,OAAOquB,WAAWmJ,WAAU1T,GACtCA,EAAEtE,cAAcliB,WAAW,YAE/Bk2B,EAAQxzB,OAAOquB,WAAWhwB,OAAOF,EAAK,IAEtCwW,EAAKxI,MAAMqT,cAAcliB,WAAW,WACpCk2B,EAAQxzB,OAAOquB,WAAWxjB,MAAKiZ,GAAKA,EAAEtE,cAAcliB,WAAW,YAE/Da,EAAMq1B,EAAQxzB,OAAOquB,WAAWmJ,WAAU1T,GAAKA,EAAEtE,cAAcliB,WAAW,UAC1Ek2B,EAAQxzB,OAAOquB,WAAWhwB,OAAOF,EAAK,IAG1C,MAAMu6B,GAAUlF,EAAQxzB,OAAOquB,WAAW5xB,OAC1Cb,KAAKk8B,mBAAmBtE,EAASkF,EAAQX,EAAY,IAG7D,SAER13B,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CACNvzB,MAAOzE,GAAO+0B,aACdgD,UAAU,aAAYr5B,UAEtBmB,EAAAA,EAAAA,KAAC6L,EAAAA,QAAO,CACJC,MAAO3H,EAAAA,KAAKC,EACR,qFAEJ2H,UAAW,CAAEC,OAAQ,CAAEjI,GAAI,CAAEkI,cAAe,UAAapN,UAEzDmB,EAAAA,EAAAA,KAAA,QAAAnB,UACImB,EAAAA,EAAAA,KAACqR,EAAAA,SAAQ,CACL5H,UAAQ,EACR6H,QAAwC,QAAjCsmB,EAAEr8B,KAAKkG,MAAM62B,SAAShkB,EAAKxI,cAAM,IAAA8rB,OAAA,EAA/BA,EAAiCtB,OAC1CiC,eAAgBh9B,KAAKkG,MAAM62B,SAAShkB,EAAKxI,gBAKzD9L,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CACNvzB,MAAOzE,GAAOg1B,oBACd+C,UAAU,aAAYr5B,UAEtBmB,EAAAA,EAAAA,KAAC6L,EAAAA,QAAO,CACJC,MAAO3H,EAAAA,KAAKC,EAAE,wDACd2H,UAAW,CAAEC,OAAQ,CAAEjI,GAAI,CAAEkI,cAAe,UAAapN,UAEzDmB,EAAAA,EAAAA,KAAA,QAAAnB,UACImB,EAAAA,EAAAA,KAACqR,EAAAA,SAAQ,CACL5H,SAAUlO,KAAKkG,MAAM0wB,OACrB7gB,QAAkC,QAA3BumB,EAAEt8B,KAAKkG,MAAMmyB,QAAQj0B,cAAM,IAAAk4B,GAAoB,QAApBC,EAAzBD,EAA2BhB,0BAAkB,IAAAiB,OAApB,EAAzBA,EAA+CjE,aAAavf,EAAKxI,OAC1E9G,SAAUpI,IACN,MAAM47B,EAAY78B,EAAAA,EAAWy3B,MAAM73B,KAAKkG,MAAMmyB,SAEzC4E,EAAU74B,OAAOk3B,qBAClB2B,EAAU74B,OAAOk3B,mBAAqB,CAClChD,aAAc,CAAC,EACfiD,cAAe,SAIvB0B,EAAU74B,OAAOk3B,mBAAmBhD,aAAavf,EAAKxI,OAASlP,EAAEsR,OAAOoD,QAExE/V,KAAKkG,MAAMuD,SAASzJ,KAAKkG,MAAMW,KAAMo2B,EAAU,WAMnEx4B,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CACNvzB,MAAOzE,GAAOk1B,QACd6C,UAAU,aAAYr5B,UAEtBmB,EAAAA,EAAAA,KAAC0kB,EAAAA,UAAS,CACNlY,QAAQ,WACR/C,SAAUlO,KAAKkG,MAAM0wB,OACrBjyB,MAAOoU,EAAKxI,MACZlH,MAAOzE,GAAO0jB,MACdqU,UAAU,cACVlzB,SAAU6kB,GAAOtuB,KAAKg8B,eAAe1N,EAAI3b,OAAOhO,MAAOoU,EAAKxI,MAAO,SACnEC,UAAW,CACPsoB,WAAY,CACR7B,QAAQ,GAEZ3O,MAAO,CACHwI,aAAc/X,EAAKxI,OACf9L,EAAAA,EAAAA,KAACssB,EAAAA,eAAc,CAACjsB,SAAS,MAAKxB,UAC1BmB,EAAAA,EAAAA,KAACsQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMzT,KAAKg8B,eAAe,GAAIjjB,EAAKxI,MAAO,SAASjN,UAE5DmB,EAAAA,EAAAA,KAACmP,EAAAA,MAAS,QAGlB,OAGZxK,MAAOozB,EACPnT,WAAYmT,EAAY5zB,EAAAA,KAAKC,EAAE,qBAAkB6I,OAGzDjN,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAACD,UAAU,uBAAsBr5B,UACvCmB,EAAAA,EAAAA,KAAC0kB,EAAAA,UAAS,CACNjb,SAAUlO,KAAKkG,MAAM0wB,OACrB3lB,QAAQ,WACRnR,GAAE,WAAAiB,OAAayM,GACf7I,MAAOoU,EAAKqhB,KACZ/wB,MAAOzE,GAAO0jB,MACdqU,UAAU,cACVlzB,SAAU6kB,GAAOtuB,KAAKg8B,eAAe1N,EAAI3b,OAAOhO,MAAOoU,EAAKxI,MAAO,QACnEC,UAAW,CACPsoB,WAAY,CACR7B,QAAQ,GAEZ3O,MAAO,CACHc,UAAU,EACV0H,aAAc/X,EAAKqhB,MACf31B,EAAAA,EAAAA,KAACssB,EAAAA,eAAc,CAACjsB,SAAS,MAAKxB,UAC1BmB,EAAAA,EAAAA,KAACsQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMzT,KAAKg8B,eAAe,GAAIjjB,EAAKxI,MAAO,QAAQjN,UAE3DmB,EAAAA,EAAAA,KAACmP,EAAAA,MAAS,QAGlB,YAKpBnP,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CACNvzB,MAAOzE,GAAOi1B,aACd8C,UAAU,aAAYr5B,UAEtBmB,EAAAA,EAAAA,KAACusB,EAAAA,IAAG,CACA9iB,SAAUlO,KAAKkG,MAAM0wB,OACrB5hB,KAAK,QACLzP,MAAM,YACN,aAAW,MACXkO,QAASA,IAAMzT,KAAKi8B,SAASljB,EAAKxI,OAAOjN,UAEzCmB,EAAAA,EAAAA,KAACy4B,EAAAA,OAAU,WAM3B,OACIz4B,EAAAA,EAAAA,KAACk2B,GAAY,CAETntB,MAAOA,EACP7I,MAAOqD,GAFFwF,EAKjB,CAEA2vB,kBAAAA,CAAmBrG,GACf,MAAM9uB,GACFkB,EAAAA,EAAAA,MAACk0B,EAAAA,MAAK,CAAC/zB,MAAOzE,GAAOy0B,MAAM/1B,SAAA,EACvBmB,EAAAA,EAAAA,KAAC44B,EAAAA,UAAS,CAAA/5B,UACN4F,EAAAA,EAAAA,MAACwzB,EAAAA,SAAQ,CAACC,UAAU,YAAWr5B,SAAA,EAC3BmB,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CACNvzB,MAAOzE,GAAO60B,WACdkD,UAAU,gBAEdl4B,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CACNvzB,MAAOzE,GAAO80B,aACdiD,UAAU,aAAYr5B,SAErBtD,KAAKkG,MAAMwyB,cAAgB9vB,EAAAA,KAAKC,EAAE,UAAY,MAEnDpE,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CACNvzB,MAAOzE,GAAO+0B,aACdgD,UAAU,aAAYr5B,SAErBsF,EAAAA,KAAKC,EAAE,aAEZpE,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CACNvzB,MAAOzE,GAAOg1B,oBACd+C,UAAU,aAAYr5B,SAErBsF,EAAAA,KAAKC,EAAE,mBAEZpE,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CACNvzB,MAAOzE,GAAOk1B,QACd6C,UAAU,aAAYr5B,SAErBtD,KAAKkG,MAAM2C,EAAE,WAElBpE,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAACD,UAAU,uBAAsBr5B,SAAEtD,KAAKkG,MAAM2C,EAAE,WAC1DpE,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CACNvzB,MAAOzE,GAAOi1B,aACd8C,UAAU,aAAYr5B,SAErB,YAIbmB,EAAAA,EAAAA,KAAC64B,EAAAA,UAAS,CAAAh6B,SAAEwzB,EAAMjnB,KAAI,CAACkJ,EAAMvL,IAAUxN,KAAKo8B,mBAAmBrjB,EAAMvL,UAI7E,OACI/I,EAAAA,EAAAA,KAACg2B,GAAY,CACT8C,YAAY,iBACZC,eAAa,EACbC,SAAS,IACT5B,UAAW77B,KAAK67B,UAChBl3B,MAAOqD,GAGnB,CAKA01B,uBAAAA,GAA8C,IAADC,EAAAC,EACzC,MAAMC,GAC0C,QAA5CF,EAAA39B,KAAKkG,MAAMmyB,QAAQj0B,OAAOk3B,0BAAkB,IAAAqC,OAAA,EAA5CA,EAA8CpC,gBAAiB,OAC7DuC,GAA6D,QAA5CF,EAAA59B,KAAKkG,MAAMmyB,QAAQj0B,OAAOk3B,0BAAkB,IAAAsC,OAAA,EAA5CA,EAA8CtF,eAAgB,CAAC,EAEtF,OACIpvB,EAAAA,EAAAA,MAAA,OAAKG,MAAO,CAAEtE,QAAS,OAAQqL,WAAY,GAAIrF,cAAe,UAAWzH,SAAA,EACrE4F,EAAAA,EAAAA,MAAA,OAAKG,MAAO,CAAEtE,QAAS,OAAQI,WAAY,UAAW7B,SAAA,EAClDmB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAAArF,SACNsF,EAAAA,KAAKC,EAAE,uEAEZpE,EAAAA,EAAAA,KAAC8nB,EAAAA,OAAM,CACHtb,QAAQ,WACRzI,GAAI,CAAE4H,WAAY,EAAGsO,aAAc,GACnC/Z,MAAOk5B,EACPp0B,SAAUpI,IACN,MAAM47B,EAAY78B,EAAAA,EAAWy3B,MAAM73B,KAAKkG,MAAMmyB,SAEzC4E,EAAU74B,OAAOk3B,qBAClB2B,EAAU74B,OAAOk3B,mBAAqB,CAAEhD,aAAc,CAAC,EAAGiD,cAAe,SAG7E0B,EAAU74B,OAAOk3B,mBAAmBC,cAAgBl6B,EAAEsR,OAAOhO,MAE7D3E,KAAKkG,MAAMuD,SAASzJ,KAAKkG,MAAMW,KAAMo2B,EAAU,EACjD35B,SAEDy6B,GAAAA,GAAsBluB,KAAI6gB,IACvBjsB,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CACL9nB,MAAO+rB,EAAOptB,SAGb06B,GAAAA,GAA6BtN,IAFzBA,WAOrBjsB,EAAAA,EAAAA,KAACw5B,GAAAA,EAAS,CAACt5B,SAAUm5B,EAAe9C,OAAQ8C,EAAe,mBAAgC,SAAXD,EAAkBv6B,UAC9FmB,EAAAA,EAAAA,KAACy5B,GAAAA,QAAO,CAACh+B,KAAK,UAASoD,SAAEsF,EAAAA,KAAKC,EAAE,yBAEpCpE,EAAAA,EAAAA,KAACw5B,GAAAA,EAAS,CAACt5B,MAAkB,UAAXk5B,EAAmBv6B,UACjCmB,EAAAA,EAAAA,KAACy5B,GAAAA,QAAO,CAACh+B,KAAK,UAASoD,SAClBsF,EAAAA,KAAKC,EACF,sHAMxB,CAEAwB,MAAAA,GACI,MAAMysB,EAAQoD,GAAYl6B,KAAKkG,MAAMW,KAAK6tB,OAAO4D,cAEjD,OACIpvB,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAO4uB,SAASlwB,SAAA,CACvBtD,KAAK+4B,uBACN7vB,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAO00B,YAAYh2B,SAAA,EAC3BmB,EAAAA,EAAAA,KAACusB,EAAAA,IAAG,CACAhc,KAAK,QACLzP,MAAM,UACN2I,SAAUlO,KAAKkG,MAAM0wB,OACrB,aAAW,MACXnjB,QAASzT,KAAK66B,MACdxxB,MAAOzE,GAAOo1B,UACdzpB,MAAOvQ,KAAKkG,MAAM2C,EAAE,uCAAuCvF,UAE3DmB,EAAAA,EAAAA,KAAC05B,EAAAA,IAAO,OAEZ15B,EAAAA,EAAAA,KAACusB,EAAAA,IAAG,CACAhc,KAAK,QACL9G,SAAUlO,KAAKkG,MAAM0wB,OACrBnjB,QAASzT,KAAK86B,UACdzxB,MAAOzE,GAAOo1B,UACdzpB,MAAOvQ,KAAKkG,MAAM2C,EAAE,sCAAsCvF,UAE1DmB,EAAAA,EAAAA,KAAC25B,EAAAA,sBAAW,MAEfp+B,KAAK09B,8BAEVj5B,EAAAA,EAAAA,KAAC45B,EAAAA,eAAc,CAAA/6B,SAAEtD,KAAKm9B,mBAAmBrG,OAGrD,IC5sBElyB,GAA8C,CAChD4uB,SAAU,CACNxuB,MAAO,OACP6F,OAAQ,QACRM,SAAU,OACV6S,UAAW,SACXb,QAAS,IAGbkc,MAAO,CACHt0B,QAAS,OACTgG,cAAe,SACf/F,MAAO,QAEXsjB,MAAO,CACHtjB,MAAO,IACPqL,YAAa,IAEjBzE,OAAQ,CACJ6S,UAAW,IAEf6f,UAAW,CACP/4B,MAAO,SAEXg5B,SAAU,CACNh5B,MAAO,QAEXi5B,UAAW,CACPx5B,MAAO,KAEXy5B,UAAW,CACPz5B,MAAO,IACPslB,UAAW,SAEfoU,UAAW,CACP15B,MAAO,KAEX25B,WAAY,CACR35B,MAAO,KAEX45B,aAAc,CACV55B,MAAO,IAEX65B,YAAa,CACT75B,MAAO,KAEX85B,SAAU,CACN3zB,SAAU,OACVN,OAAQ,qBAEZk0B,gBAAiB,CACb/5B,MAAO,KAEXg6B,UAAW,CACPt5B,SAAU,GACVN,QAAS,GACT65B,UAAW,WA2PnB,UAAe/X,EAAAA,EAAAA,YAAf,CArNA,cAA6BuP,GACzBr3B,WAAAA,CAAY8G,GACRC,MAAMD,GAAO,KAUjBg5B,kBAAoB,CAACp/B,EAAYC,KAClB,oBAAPD,KACAC,EAAMA,GAAQ,CAAC,GACX20B,OAAS30B,EAAI20B,QAAU,CAAC,EAC5B30B,EAAI20B,OAAOyK,SAAWp/B,EAAI20B,OAAOyK,UAAY,GAGzC7+B,KAAKC,UAAUR,EAAI20B,OAAOyK,YAAc7+B,KAAKC,UAAUP,KAAKsG,MAAM64B,WAClE79B,OAAOC,MAAMvB,KAAKkG,MAAM2C,EAAE,6BAC1B7I,KAAKwD,SAAS,CAAE27B,SAAUp/B,EAAI20B,OAAOyK,YAErC79B,OAAOC,MAAMvB,KAAKkG,MAAM2C,EAAE,8BAElC,EArBA7I,KAAKsG,MAAQ,CACT84B,KAAM,GACNjU,YAAY,EACZgU,SAAUn/B,KAAKkG,MAAMW,KAAK6tB,OAAOyK,UAAY,GAGrD,CAkBAn4B,iBAAAA,GACShH,KAAKkG,MAAM7G,OAAOmsB,UAAU,oBAAoBxqB,MAAKjB,IACtDC,KAAKkG,MAAM7G,OACNyB,gBAAgB,kBAAmBd,KAAKk/B,mBACxC99B,OAAMC,GAAKC,OAAOC,MAAM,wCAADR,OAAyCM,MACrErB,KAAKwD,SAAS,CAAE47B,KAAMr/B,EAAI20B,OAAO0K,MAAO,GAEhD,CAEA5c,oBAAAA,GACSxiB,KAAKkG,MAAM7G,OAAOqD,kBAAkB,kBAAmB1C,KAAKk/B,kBACrE,CAEA9H,QAAAA,CAASloB,EAA4BvK,GACjC,MAAMizB,EAAyBnvB,EAAAA,MAAMovB,MAAM73B,KAAKkG,MAAMW,MACtD+wB,EAAQlD,OAAOxlB,GAAQvK,EACvB3E,KAAKkG,MAAMuD,SAASmuB,EACxB,CAEA,qBAAMyH,GACFr/B,KAAKwD,SAAS,CAAE2nB,YAAY,IAC5B,IACI,IAAIzC,EAAW1oB,KAAKkG,MAAMW,KAAK6tB,OAAOhM,SAEtC,GAAiB,sBAAbA,EAAkC,CAClC,MAAM3oB,QAAYC,KAAKkG,MAAM7G,OAAOmsB,UAAU,mBAG1C9C,EADA3oB,EAAI20B,OAAO4K,QAAUt/B,KAAKkG,MAAMW,KAAK6tB,OAAO4K,YAC3Bt/B,KAAKkG,MAAM7G,OAAOkgC,QAAQx/B,EAAI20B,OAAOhM,UAE3C,IAEnB,CAEA,MAAMyW,QAAiBn/B,KAAKkG,MAAM7G,OAAOmgC,eACrC9W,EAAW1oB,KAAKkG,MAAMW,KAAK6tB,OAAO4K,MAAQ,KAC1C5W,GAGa,OAAbyW,QAAkCztB,IAAbytB,GACjBzW,GACApnB,OAAOC,MACHvB,KAAKkG,MAAM2C,EAAE,mFAIrB7I,KAAKwD,SAAS,CAAE27B,WAAUhU,YAAY,KAEtCnrB,KAAKwD,SAAS,CAAE2nB,YAAY,GAEpC,CAAE,MAAO/hB,GACLpJ,KAAKwD,SAAS,CAAE2nB,YAAY,IACd,oBAAV/hB,EACA9H,OAAOC,MAAMvB,KAAKkG,MAAM2C,EAAE,qCACT,4BAAVO,EACP9H,OAAOC,MAAMvB,KAAKkG,MAAM2C,EAAE,6BAA8B7I,KAAKkG,MAAM2C,EAAE,6BAErEvH,OAAOC,MAAMvB,KAAKkG,MAAM2C,EAAE,6BAA8BO,GAEhE,CACJ,CAEAq2B,cAAAA,GACI,OACIh7B,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOk6B,SAASx7B,UACxBmB,EAAAA,EAAAA,KAAC45B,EAAAA,eAAc,CAAA/6B,UACX4F,EAAAA,EAAAA,MAACk0B,EAAAA,MAAK,CACFsC,cAAY,EACZ1qB,KAAK,QAAO1R,SAAA,EAEZmB,EAAAA,EAAAA,KAAC44B,EAAAA,UAAS,CAAA/5B,UACN4F,EAAAA,EAAAA,MAACwzB,EAAAA,SAAQ,CAAAp5B,SAAA,EACLmB,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAACvzB,MAAOzE,GAAO45B,UAAUl7B,SAAEtD,KAAKkG,MAAM2C,EAAE,cAClDpE,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAACvzB,MAAOzE,GAAO65B,UAAUn7B,SAAEtD,KAAKkG,MAAM2C,EAAE,iBAClDpE,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAACvzB,MAAOzE,GAAO85B,UAAUp7B,SAAEtD,KAAKkG,MAAM2C,EAAE,WAClDpE,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAACvzB,MAAOzE,GAAO+5B,WAAWr7B,SAAEtD,KAAKkG,MAAM2C,EAAE,iBACnDpE,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAACvzB,MAAOzE,GAAOg6B,aAAat7B,SAAEtD,KAAKkG,MAAM2C,EAAE,QACrDpE,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAACvzB,MAAOzE,GAAOi6B,YAAYv7B,SAAEtD,KAAKkG,MAAM2C,EAAE,cACpDpE,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAACvzB,MAAOzE,GAAOm6B,gBAAgBz7B,SAAEtD,KAAKkG,MAAM2C,EAAE,0BAGhEpE,EAAAA,EAAAA,KAAC64B,EAAAA,UAAS,CAAAh6B,SACLtD,KAAKsG,MAAM64B,UACRn/B,KAAKsG,MAAM64B,SAAStvB,KAAI8vB,IACpBz2B,EAAAA,EAAAA,MAACwzB,EAAAA,SAAQ,CAAAp5B,SAAA,EACL4F,EAAAA,EAAAA,MAAC0zB,EAAAA,UAAS,CAACvzB,MAAOzE,GAAO45B,UAAUl7B,SAAA,EAC/BmB,EAAAA,EAAAA,KAAA,OAAAnB,SAAMq8B,EAAQC,WACdn7B,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOo6B,UAAU17B,SAAEq8B,EAAQ7/B,SAE3C2E,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAACvzB,MAAOzE,GAAO65B,UAAUn7B,SAC9B,IAAIoD,KAAKi5B,EAAQxE,MAAM0E,wBAE5Bp7B,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CACNvzB,OAAKxF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACEe,GAAO85B,WACNiB,EAAQP,MAAQp/B,KAAKsG,MAAM84B,OAASO,EAAQP,KAC1Cx6B,GAAO05B,UACPqB,EAAQP,KACNx6B,GAAO25B,cACP7sB,GACVpO,SAEDq8B,EAAQP,MAAQ,MAErB36B,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAACvzB,MAAOzE,GAAO+5B,WAAWr7B,SACT,wBAAtBq8B,EAAQG,UAAsC,GAAKH,EAAQG,WAAa,MAE7Er7B,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAACvzB,MAAOzE,GAAOg6B,aAAat7B,SAAEq8B,EAAQ37B,SAAW,MAC3DS,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAACvzB,MAAOzE,GAAOi6B,YAAYv7B,SAAEq8B,EAAQI,QAAU,MACzDt7B,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAACvzB,MAAOzE,GAAOm6B,gBAAgBz7B,SAChB,SAApBq8B,EAAQK,QACiB,qBAApBL,EAAQK,QACJ,SACAL,EAAQK,QACZ,QA9BCL,EAAQ7/B,cAuCvD,CAEAuK,MAAAA,GACI,OACInB,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAO4uB,SAASlwB,SAAA,EACxBmB,EAAAA,EAAAA,KAAC0kB,EAAAA,UAAS,CACNlY,QAAQ,WACR5H,MAAOzE,GAAO0jB,MACdpa,SAAUlO,KAAKkG,MAAM0wB,QAAU52B,KAAKsG,MAAM6kB,WAC1CxmB,MAAO3E,KAAKkG,MAAMW,KAAK6tB,OAAO4K,MAC9BjW,WAAYrpB,KAAKkG,MAAM2C,EAAE,2BACzB0I,MAAOvR,KAAKkG,MAAM2C,EAAE,eACpBY,SAAUpI,GAAKrB,KAAKo3B,SAAS,QAAS/1B,EAAEsR,OAAOhO,OAC/C6L,UAAW,CACP8X,MAAO,CACHW,aAAc,gBAElBK,UAAW,CACPL,aAAc,WAI1BxkB,EAAAA,EAAAA,KAAC0kB,EAAAA,UAAS,CACNlY,QAAQ,WACR/C,SAAUlO,KAAKkG,MAAM0wB,QAAU52B,KAAKsG,MAAM6kB,WAC1C9hB,MAAOzE,GAAO0jB,MACdpoB,KAAK,WACLyE,MAAO3E,KAAKkG,MAAMW,KAAK6tB,OAAOhM,SAC9BW,WAAYrpB,KAAKkG,MAAM2C,EAAE,2BACzB0I,MAAOvR,KAAKkG,MAAM2C,EAAE,YACpBY,SAAUpI,GAAKrB,KAAKo3B,SAAS,WAAY/1B,EAAEsR,OAAOhO,OAClD6L,UAAW,CACP8X,MAAO,CACHW,aAAc,gBAElBK,UAAW,CACPL,aAAc,WAI1BxkB,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHtC,QAAQ,YACRyC,WAAWjP,EAAAA,EAAAA,KAACw7B,EAAAA,QAAW,IACvB/xB,SACIlO,KAAKsG,MAAM6kB,YACXnrB,KAAKkG,MAAM0wB,SACV52B,KAAKkG,MAAMmJ,OACXrP,KAAKkG,MAAMW,KAAK6tB,OAAOhM,WACvB1oB,KAAKkG,MAAMW,KAAK6tB,OAAO4K,MAE5B7rB,QAASA,IAAMzT,KAAKq/B,kBACpBh2B,MAAOzE,GAAOgH,OACdrG,MAAM,OAAMjC,SAEXtD,KAAKkG,MAAM2C,EAAE,WAEjB7I,KAAKy/B,mBAGlB,I,2BChSJ,MAAM76B,GAA8C,CAChD4uB,SAAU,CACNxuB,MAAO,OACP6F,OAAQ,QACRM,SAAU,OACV6S,UAAW,SACXb,QAAS,GACTrY,SAAU,YAEdo7B,eAAgB,CACZl0B,OAAQ,KAEZqtB,MAAO,CACHt0B,QAAS,OACTgG,cAAe,SACf/F,MAAO,QAEXs0B,YAAa,CACTxtB,cAAe,GACf/G,QAAS,QAEbw0B,iBAAkB,CACdv0B,MAAO,OACPyF,gBAAiB,cACjB2F,WAAY,GACZopB,OAAQ,OACRz0B,QAAS,OACTI,WAAY,UAEhBg7B,UAAW,CACPn7B,MAAO,KAEX80B,QAAS,CACL90B,MAAO,KAEXsjB,MAAO,CACHtjB,MAAO,SAwBf,MAAMo7B,WAA2B3J,GAC7Br3B,WAAAA,CAAY8G,GACRC,MAAMD,GAAO,KAqPjBmxB,aAAe,CAAC1yB,EAAe7E,EAAYoP,KACvC,MAAM0oB,EAAUx3B,EAAAA,EAAWy3B,MAAM73B,KAAKkG,MAAMW,MACtCyzB,EAAQ8F,GAAmBC,YAAYzI,EAAQlD,OAAO4L,cAC5DhG,EAAMrrB,MAAK/K,GAAWA,EAAQqM,QAAUzQ,IAAIoP,GAAQvK,EACpDizB,EAAQlD,OAAO4L,aAAeF,GAAmBG,YAAYjG,GAC7Dt6B,KAAKkG,MAAMuD,SAASmuB,EAAQ,EAC9B,KAEFqE,SAAYn8B,IACR,MAAM83B,EAAUx3B,EAAAA,EAAWy3B,MAAM73B,KAAKkG,MAAMW,MACtCyzB,EAAQ8F,GAAmBC,YAAYzI,EAAQlD,OAAO4L,cACtD9yB,EAAQ8sB,EAAMsB,WAAU13B,GAAWA,EAAQqM,QAAUzQ,IAC3Dw6B,EAAM73B,OAAO+K,EAAO,GACpBoqB,EAAQlD,OAAO4L,aAAeF,GAAmBG,YAAYjG,GAC7Dt6B,KAAKkG,MAAMuD,SAASmuB,EAAQ,EAC9B,KAEFiD,MAAQ,CAACtqB,EAAgB1J,KACrB,MAAM+wB,EAAUx3B,EAAAA,EAAWy3B,MAAM73B,KAAKkG,MAAMW,MACtCyzB,EAAQ8F,GAAmBC,YAAYzI,EAAQlD,OAAO4L,cACtDE,EAAWxgC,KAAKkG,MAAM2C,EAAE,eAC9B,IAAK0H,EACD,IAAK,IAAIkC,EAAI,GAAKA,IACd,IAAK6nB,EAAMrrB,MAAK8J,GAAQA,EAAKxI,QAAK,GAAAxP,OAAQy/B,EAAQ,KAAAz/B,OAAI0R,KAAM,CACxDlC,EAAK,GAAAxP,OAAMy/B,EAAQ,KAAAz/B,OAAI0R,GACvB,KACJ,CAIR6nB,EAAMj4B,KAAK,CACPkO,MAAOA,GAAS,KAChB1J,KAAMA,GAAQ,KAElB+wB,EAAQlD,OAAO4L,aAAeF,GAAmBG,YAAYjG,GAC7Dt6B,KAAKkG,MAAMuD,SAASmuB,EAAQ,EAtR5B53B,KAAKsG,MAAQ,CACTm6B,SAAS,EAEjB,CAEA,kBAAOJ,CAAY1K,GACf,OAAOv1B,EAAAA,EAAWg4B,UAAUzC,GAAO,CAAC+K,EAAMxxB,KAAY,CAClDqB,MAAOrB,EACPrI,KAAM65B,KAEd,CAEA,kBAAOH,CAAYjG,GACf,MAAMtyB,EAAiC,CAAC,EAKxC,OAJAsyB,EAAM75B,SAAQY,IACV2G,EAAO3G,EAAEkP,OAASlP,EAAEwF,IAAI,IAGrBmB,CACX,CAEA,iBAAO24B,CAAWzxB,GAGd,OAFAA,EAAOA,EAAK0U,eAEHxhB,SAAS,WAAa8M,EAAK9M,SAAS,QAClC,SAEP8M,EAAK9M,SAAS,SAAW8M,EAAK9M,SAAS,OAChC,UAEP8M,EAAK9M,SAAS,UAAY8M,EAAK9M,SAAS,MACjC,UAEJ,EACX,CAEAiI,MAAAA,GACI,MAEMu2B,EAFMR,GAAmBC,YAAYrgC,KAAKkG,MAAMW,KAAK6tB,OAAO4L,cAEjDzwB,KAAI,CAACxO,EAAGoR,KACrB,MAAMvS,EAAOkgC,GAAmBO,WAAWt/B,EAAEkP,OAE7C,OACIrH,EAAAA,EAAAA,MAACwzB,EAAAA,SAAQ,CAELC,UAAU,YAAWr5B,SAAA,EAErBmB,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CACNvzB,MAAOzE,GAAOu7B,UACdxD,UAAU,aAAYr5B,SAErBmP,EAAI,KAEThO,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CACNvzB,MAAOzE,GAAOk1B,QACd6C,UAAU,aAAYr5B,UAEtBmB,EAAAA,EAAAA,KAAC0kB,EAAAA,UAAS,CACNjb,SAAUlO,KAAKkG,MAAM0wB,OACrB3lB,QAAQ,WACRtM,MAAOtD,EAAEkP,MACTlH,MAAOzE,GAAO0jB,MACdqU,UAAU,cACVlzB,SAAU6kB,GAAOtuB,KAAKq3B,aAAa/I,EAAI3b,OAAOhO,MAAOtD,EAAEkP,MAAO,SAC9DnH,OAAQlJ,EACRmpB,WACInpB,GACA0I,EAAAA,KAAKC,EACD,6FAGR2H,UAAW,CACPsoB,WAAY,CACR7B,QAAQ,GAEZ3O,MAAO,CACHc,UAAU,EACV0H,aAAczvB,EAAEkP,OACZ9L,EAAAA,EAAAA,KAACssB,EAAAA,eAAc,CAACjsB,SAAS,MAAKxB,UAC1BmB,EAAAA,EAAAA,KAACsQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMzT,KAAKq3B,aAAa,GAAIh2B,EAAEkP,MAAO,SAASjN,UAEvDmB,EAAAA,EAAAA,KAACmP,EAAAA,MAAS,QAGlB,YAKpBnP,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAACD,UAAU,uBAAsBr5B,UACvCmB,EAAAA,EAAAA,KAAC0kB,EAAAA,UAAS,CACNjb,SAAUlO,KAAKkG,MAAM0wB,OACrB3lB,QAAQ,WACRnR,GAAE,WAAAiB,OAAa0R,GACf9N,MAAOtD,EAAEwF,KACTwC,MAAOzE,GAAO0jB,MACdqU,UAAU,cACVlzB,SAAU6kB,IACN,IAAI3pB,EAAQ2pB,EAAI3b,OAAOhO,MAAMoD,QAAQ,MAAO,IAAIA,QAAQ,MAAO,IAC/D,GAAIpD,EAAMjD,WAAW,MAAO,CACxB,MAAMm/B,EAAQl8B,EAAMsE,MAAM,SAC1B43B,EAAM,GAAKA,EAAM,GAAG94B,QAAQ,MAAO,IACnCpD,EAAK,QAAA5D,OAAW8/B,EAAM,GAAE,aAAA9/B,OAAY8/B,EAAM,GAAE,aAAA9/B,OAAY8/B,EAAM,GAAE,QACpE,CAEA7gC,KAAKq3B,aAAa1yB,EAAOtD,EAAEkP,MAAO,OAAO,EAE7CC,UAAW,CACPsoB,WAAY,CACR7B,QAAQ,GAEZ3O,MAAO,CACHc,UAAU,EACV0H,aAAczvB,EAAEwF,MACZpC,EAAAA,EAAAA,KAACssB,EAAAA,eAAc,CAACjsB,SAAS,MAAKxB,UAC1BmB,EAAAA,EAAAA,KAACsQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMzT,KAAKq3B,aAAa,GAAIh2B,EAAEkP,MAAO,QAAQjN,UAEtDmB,EAAAA,EAAAA,KAACmP,EAAAA,MAAS,QAGlB,YAKpBnP,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CACNvzB,MAAOzE,GAAOu7B,UACdxD,UAAU,aAAYr5B,UAEtBmB,EAAAA,EAAAA,KAACusB,EAAAA,IAAG,CACA9iB,SAAUlO,KAAKkG,MAAM0wB,OACrB5hB,KAAK,QACLzP,MAAM,YACN,aAAW,MACXkO,QAASA,IAAMzT,KAAKi8B,SAAS56B,EAAEkP,OAAOjN,UAEtCmB,EAAAA,EAAAA,KAACy4B,EAAAA,OAAU,UAhGdzqB,EAmGE,IAGnB,OACIvJ,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAO4uB,SAASlwB,SAAA,EACxBmB,EAAAA,EAAAA,KAACq8B,KAAQ,CAACC,SAAO,EAAAz9B,SACZD,IAAA,IAAC,aAAE29B,EAAY,cAAEC,EAAa,cAAEC,EAAa,eAAEC,GAAgB99B,EAAA,OAC5DoB,EAAAA,EAAAA,KAAA,OAAAZ,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACQm9B,EAAa,CACbrE,UAAW38B,KAAKsG,MAAMm6B,QAAU,0BAA4B,iBAC5DW,YAAaA,IAAMphC,KAAKwD,SAAS,CAAEi9B,SAAS,IAC5CY,YAAaA,IAAMrhC,KAAKwD,SAAS,CAAEi9B,SAAS,IAC5Ca,OAAQA,KACJ,IAAIthC,KAAKkG,MAAM0wB,OAAf,CAIA,GAAIuK,EAAetgC,OAAQ,CACvB,MAAM2R,EAAgB,GACtB2uB,EAAe1gC,SAAQY,IACnB,MAAMwL,EAAC,GAAA9L,OAAMM,EAAEkgC,KAAKryB,KAAI,MAClBsyB,EAAe,GACrBngC,EAAEogC,OAAOhhC,SAAQihC,GAAMF,EAAGn/B,KAAKq/B,EAAG78B,WAClC2N,EAAInQ,KAAKwK,EAAI20B,EAAGG,KAAK,KAAK,IAG9BpgC,MAAMiR,EAAImvB,KAAK,MACnB,CAEIT,EAAcrgC,OACdqgC,EAAczgC,SAAQ8gC,IAClB,MAAMK,EAAS,IAAIC,WACnBD,EAAOE,OAASzgC,GAAKrB,KAAK66B,MAAM0G,EAAKryB,KAAM7N,EAAEsR,OAAO3K,QACpD45B,EAAOG,WAAWR,EAAK,IAEnBJ,EAAetgC,QACvBU,MAAMvB,KAAKkG,MAAM2C,EAAE,oBAGvB7I,KAAKwD,SAAS,CAAEi9B,SAAS,GAvBzB,CAuBiC,KAEvC,IAAAn9B,UAEFmB,EAAAA,EAAAA,KAAA,SAAAZ,EAAAA,EAAAA,GAAA,GAAWo9B,QACT,KAGd/3B,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAO00B,YAAYh2B,SAAA,EAC3BmB,EAAAA,EAAAA,KAACusB,EAAAA,IAAG,CACA9iB,SAAUlO,KAAKkG,MAAM0wB,OACrB5hB,KAAK,QACL2nB,UAAU,aACVp3B,MAAM,UACN,aAAW,MACXkO,QAASA,IAAMzT,KAAK66B,QAAQv3B,UAE5BmB,EAAAA,EAAAA,KAAC05B,EAAAA,IAAO,OAEZ15B,EAAAA,EAAAA,KAACyY,EAAAA,MAAK,CACFjM,QAAQ,WACR5H,MAAOzE,GAAO20B,iBAAiBj2B,SAE9BtD,KAAKkG,MAAM2C,EAAE,oBAGtBpE,EAAAA,EAAAA,KAAC45B,EAAAA,eAAc,CAACh1B,MAAOzE,GAAOs7B,eAAe58B,UACzC4F,EAAAA,EAAAA,MAACk0B,EAAAA,MAAK,CACF/zB,MAAOzE,GAAOy0B,MACd,aAAW,mBAAkB/1B,SAAA,EAE7BmB,EAAAA,EAAAA,KAAC44B,EAAAA,UAAS,CAAA/5B,UACN4F,EAAAA,EAAAA,MAACwzB,EAAAA,SAAQ,CAACC,UAAU,YAAWr5B,SAAA,EAC3BmB,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CACNvzB,MAAOzE,GAAOu7B,UACdxD,UAAU,aAAYr5B,SAErB,OAELmB,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CACNvzB,MAAOzE,GAAOk1B,QACd6C,UAAU,aAAYr5B,SAErBtD,KAAKkG,MAAM2C,EAAE,WAElBpE,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAACD,UAAU,uBAAsBr5B,SAAEtD,KAAKkG,MAAM2C,EAAE,kBAC1DpE,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CACNvzB,MAAOzE,GAAOu7B,UACdxD,UAAU,aAAYr5B,SAErB,YAIbmB,EAAAA,EAAAA,KAAC64B,EAAAA,UAAS,CAAAh6B,SAAEs9B,WAKhC,EAyCJ,UAAe1Z,EAAAA,EAAAA,YAAf,CAA2BkZ,IC1WrBx7B,GAA8B,CAChC4uB,SAAU,CACNxuB,MAAO,OACP6F,OAAQ,QACRM,SAAU,OACV6S,UAAW,SACXb,QAAS,IAGbmc,YAAa,CACTxtB,cAAe,GACf/G,QAAS,QAEbw0B,iBAAmBtvB,IAAe,CAC9BjF,MAAO,OACPyF,gBAAiB,cACjB2F,WAAY,GACZopB,OAAQ,OACRz0B,QAAS,OACTI,WAAY,SACZ,MAAO,CACH68B,YAAa,EACbz8B,MAA8B,SAAvB0E,EAAMS,QAAQe,KAAkB,OAAS,UAGxDirB,YAAa,CACT/qB,OAAQ,EACRiP,SAAU,SAkKlB,UAAesM,EAAAA,EAAAA,YAAf,CAvJA,cAAwBuP,GACpBpsB,MAAAA,GACI,MAAM,KAAExD,GAAS7G,KAAKkG,OAChB,YAAE+7B,GAAgBp7B,EAAK6tB,QAAU,CAAC,EACxC,OACIxrB,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAO4uB,SAASlwB,SAAA,EACxBmB,EAAAA,EAAAA,KAAA,OACI4E,MAAO,CACHrE,MAAO,OAEPmG,SAAU,OACV6S,UAAW,SACXb,QAAS,GACTzX,SAAU,GACVH,MAAO,WACTjC,SAEDtD,KAAKkG,MAAM2C,EAAE,gEAElBpE,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO00B,YAAYh2B,UAC3BmB,EAAAA,EAAAA,KAACyY,EAAAA,MAAK,CACFjM,QAAQ,WACRzI,GAAI5D,GAAO20B,iBACX2I,wBAAyB,CAAEC,OAAQniC,KAAKkG,MAAM2C,EAAE,0BAGxDK,EAAAA,EAAAA,MAACsR,EAAAA,MAAK,CACFC,WAAS,EACTC,QAAS,EAAEpX,SAAA,EAEXmB,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAACxF,KAAM,CAAEmkB,GAAI,EAAGP,GAAI,IAAKt1B,UAC3BmB,EAAAA,EAAAA,KAAC2nB,EAAAA,YAAW,CACRnb,QAAQ,WACR5H,MAAOzE,GAAO8xB,YAAYpzB,UAE1BmB,EAAAA,EAAAA,KAAC0kB,EAAAA,UAAS,CACNlY,QAAQ,WACRnR,GAAG,QACHoO,SAAUlO,KAAKkG,MAAM0wB,OACrBrlB,MAAOvR,KAAKkG,MAAM2C,EAAE,sBACpBlE,OAAkB,OAAXs9B,QAAW,IAAXA,OAAW,EAAXA,EAAaG,QAAS,GAC7B34B,SAAU6kB,GAAOtuB,KAAKq3B,aAAa/I,EAAK,SACxC9d,UAAW,CACPsoB,WAAY,CACR7B,QAAQ,GAEZ3O,MAAO,CACHc,UAAU,EACV0H,aAAyB,OAAXmR,QAAW,IAAXA,GAAAA,EAAaG,OACvB39B,EAAAA,EAAAA,KAACssB,EAAAA,eAAc,CAACjsB,SAAS,MAAKxB,UAC1BmB,EAAAA,EAAAA,KAACsQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IACLzT,KAAKq3B,aAAa,CAAE1kB,OAAQ,CAAEhO,MAAO,KAAQ,SAChDrB,UAEDmB,EAAAA,EAAAA,KAACmP,EAAAA,MAAS,QAGlB,cAMxBnP,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAACxF,KAAM,CAAEmkB,GAAI,EAAGP,GAAI,IAAKt1B,UAC3BmB,EAAAA,EAAAA,KAAC2nB,EAAAA,YAAW,CACRnb,QAAQ,WACR5H,MAAOzE,GAAO8xB,YAAYpzB,UAE1BmB,EAAAA,EAAAA,KAAC0kB,EAAAA,UAAS,CACNjb,SAAUlO,KAAKkG,MAAM0wB,OACrB3lB,QAAQ,WACRnR,GAAG,UACHyR,MAAOvR,KAAKkG,MAAM2C,EAAE,YACpBlE,OAAkB,OAAXs9B,QAAW,IAAXA,OAAW,EAAXA,EAAaI,UAAW,GAC/B54B,SAAU6kB,GAAOtuB,KAAKq3B,aAAa/I,EAAK,WACxC9d,UAAW,CACPsoB,WAAY,CACR7B,QAAQ,GAEZ3O,MAAO,CACHc,UAAU,EACV0H,aAAyB,OAAXmR,QAAW,IAAXA,GAAAA,EAAaI,SACvB59B,EAAAA,EAAAA,KAACssB,EAAAA,eAAc,CAACjsB,SAAS,MAAKxB,UAC1BmB,EAAAA,EAAAA,KAACsQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IACLzT,KAAKq3B,aAAa,CAAE1kB,OAAQ,CAAEhO,MAAO,KAAQ,WAChDrB,UAEDmB,EAAAA,EAAAA,KAACmP,EAAAA,MAAS,QAGlB,cAMxBnP,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAACxF,KAAM,CAAEmkB,GAAI,EAAGP,GAAI,IAAKt1B,UAC3BmB,EAAAA,EAAAA,KAAC2nB,EAAAA,YAAW,CACRnb,QAAQ,WACR5H,MAAOzE,GAAO8xB,YAAYpzB,UAE1BmB,EAAAA,EAAAA,KAAC0kB,EAAAA,UAAS,CACNlY,QAAQ,WACRnR,GAAG,OACHoO,SAAUlO,KAAKkG,MAAM0wB,OACrBrlB,MAAOvR,KAAKkG,MAAM2C,EAAE,oBACpBlE,OAAkB,OAAXs9B,QAAW,IAAXA,OAAW,EAAXA,EAAa3a,OAAQ,GAC5B7d,SAAU6kB,GAAOtuB,KAAKq3B,aAAa/I,EAAK,QACxC9d,UAAW,CACPsoB,WAAY,CACR7B,QAAQ,GAEZ3O,MAAO,CACHc,UAAU,EACV0H,aAAyB,OAAXmR,QAAW,IAAXA,GAAAA,EAAa3a,MACvB7iB,EAAAA,EAAAA,KAACssB,EAAAA,eAAc,CAACjsB,SAAS,MAAKxB,UAC1BmB,EAAAA,EAAAA,KAACsQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMzT,KAAKq3B,aAAa,CAAE1kB,OAAQ,CAAEhO,MAAO,KAAQ,QAAQrB,UAEpEmB,EAAAA,EAAAA,KAACmP,EAAAA,MAAS,QAGlB,kBASxC,CAEAyjB,YAAAA,CAAa/I,EAAoCxuB,GAC7C,MAAM6E,EAAQ2pB,EAAI3b,OAAOhO,MACzB3E,KAAKo3B,SAASt3B,EAAI6E,EACtB,CAEAyyB,QAAAA,CAASloB,EAAoCvK,GACzC,MAAMizB,EAAUx3B,EAAAA,EAAWy3B,MAAM73B,KAAKkG,MAAMW,MAC5C+wB,EAAQlD,OAAOuN,YAAcrK,EAAQlD,OAAOuN,aAAe,CAAC,EAC5DrK,EAAQlD,OAAOuN,YAAY/yB,GAAQvK,EACnC3E,KAAKkG,MAAMuD,SAASmuB,EACxB,IC7KEhzB,GAA8C,CAChD4uB,SAAU,CACNxuB,MAAO,OACP6F,OAAQ,QACRM,SAAU,OACV6S,UAAW,SACXb,QAAS,IAGbmc,YAAa,CACTxtB,cAAe,GACf/G,QAAS,QAEb2xB,YAAa,CACT/qB,OAAQ,EACRiP,SAAU,QAEd0nB,UAAW,CACPhY,UAAW,SACXkP,OAAQ,iBACRwI,YAAa,EACbO,aAAc,IA0BtB,MAAMC,WAAkB/L,GAOpB,eAAOgM,GACH,MAAO,CACH,CACIviC,KAAM,SACNqQ,MAAO,iBAEX,CACIrQ,KAAM,QACNqQ,MAAO,iBAEX,CACIrQ,KAAM,OACNqQ,MAAO,eAGnB,CAEAmyB,SAAAA,CAAUxiC,GACN,MAAMyiC,EAAM3iC,KAAKkG,MAAMW,KAAKzC,OAAOw+B,cAAc1iC,GACjD,OAAOsiC,GAAUK,SAAShzB,KAAIizB,GAAYA,EAASjzB,KAAIkzB,GAAOJ,EAAMI,KACxE,CAEAC,QAAAA,CAASC,GACL,MACMC,EADSljC,KAAK0iC,UAAUO,GACJpzB,KAAI,CAACmnB,EAAMxpB,KACjCtE,EAAAA,EAAAA,MAACi6B,EAAAA,SAAQ,CAAA7/B,SAAA,EACLmB,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAACvzB,MAAOzE,GAAO09B,UAAUh/B,UAC/BmB,EAAAA,EAAAA,KAACqR,EAAAA,SAAQ,CACL5H,SAAUlO,KAAKkG,MAAM0wB,OACrB7gB,UAAWihB,EAAK,GAChBzxB,MAAM,UACNkE,SAAUA,IAAMzJ,KAAKojC,YAAYH,EAAOz1B,EAAO,QAGvD/I,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAACvzB,MAAOzE,GAAO09B,UAAUh/B,UAC/BmB,EAAAA,EAAAA,KAACqR,EAAAA,SAAQ,CACL5H,SAAUlO,KAAKkG,MAAM0wB,OACrB7gB,UAAWihB,EAAK,GAChBzxB,MAAM,UACNkE,SAAUA,IAAMzJ,KAAKojC,YAAYH,EAAOz1B,EAAO,SAd5CA,KAoBnB,OACI/I,EAAAA,EAAAA,KAAC45B,EAAAA,eAAc,CAAA/6B,UACX4F,EAAAA,EAAAA,MAACk0B,EAAAA,MAAK,CACF/zB,MAAOzE,GAAOy0B,MACd,aAAW,mBAAkB/1B,SAAA,EAE7BmB,EAAAA,EAAAA,KAAC44B,EAAAA,UAAS,CAAA/5B,UACN4F,EAAAA,EAAAA,MAACwzB,EAAAA,SAAQ,CAAAp5B,SAAA,EACLmB,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CACNyG,QAAS,EACTh6B,MAAOzE,GAAO09B,UAAUh/B,SAEvBtD,KAAKkG,MAAM2C,EAAE,YAElBpE,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CACNyG,QAAS,EACTh6B,MAAOzE,GAAO09B,UAAUh/B,SAEvBtD,KAAKkG,MAAM2C,EAAE,YAElBpE,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CACNyG,QAAS,EACTh6B,MAAOzE,GAAO09B,UAAUh/B,SAEvBtD,KAAKkG,MAAM2C,EAAE,oBAI1BK,EAAAA,EAAAA,MAACo0B,EAAAA,UAAS,CAAAh6B,SAAA,EACN4F,EAAAA,EAAAA,MAACwzB,EAAAA,SAAQ,CAAAp5B,SAAA,EACLmB,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAACvzB,MAAOzE,GAAO09B,UAAUh/B,SAAEtD,KAAKkG,MAAM2C,EAAE,WAClDpE,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAACvzB,MAAOzE,GAAO09B,UAAUh/B,SAAEtD,KAAKkG,MAAM2C,EAAE,YAClDpE,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAACvzB,MAAOzE,GAAO09B,UAAUh/B,SAAEtD,KAAKkG,MAAM2C,EAAE,WAClDpE,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAACvzB,MAAOzE,GAAO09B,UAAUh/B,SAAEtD,KAAKkG,MAAM2C,EAAE,YAClDpE,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAACvzB,MAAOzE,GAAO09B,UAAUh/B,SAAEtD,KAAKkG,MAAM2C,EAAE,WAClDpE,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAACvzB,MAAOzE,GAAO09B,UAAUh/B,SAAEtD,KAAKkG,MAAM2C,EAAE,eAEtDpE,EAAAA,EAAAA,KAACi4B,EAAAA,SAAQ,CAAAp5B,SAAE4/B,WAK/B,CAEA9L,QAAAA,CAASloB,EAAuBvK,GAC5B,MAAMizB,EAAUx3B,EAAAA,EAAWy3B,MAAM73B,KAAKkG,MAAMW,MAC/B,UAATqI,EACA0oB,EAAQxzB,OAAOw+B,cAAcK,MAAQt+B,EACrB,eAATuK,IACP0oB,EAAQxzB,OAAOw+B,cAAcU,WAAa3+B,GAE9C3E,KAAKkG,MAAMuD,SAASmuB,EACxB,CAEAwL,WAAAA,CAAYG,EAA4BC,EAAiBC,GACrD,MAAM7L,EAAUx3B,EAAAA,EAAWy3B,MAAM73B,KAAKkG,MAAMW,MAC5C+wB,EAAQxzB,OAAOw+B,cAAcW,IAAcf,GAAUK,SAASW,GAASC,GACvEzjC,KAAKkG,MAAMuD,SAASmuB,EACxB,CAEAvtB,MAAAA,GACI,MAAMiZ,EAAO1a,EAAAA,KAAK4I,cACZkyB,EAAQ1jC,KAAKkG,MAAMw9B,MAAM7zB,KAAI,CAACmnB,EAAMxpB,KACtC/I,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CACL9nB,MAAOqyB,EAAKr1B,IAAI2B,SAGa,kBAArB0zB,EAAK5yB,OAAO8K,KACd8nB,EAAK5yB,OAAO8K,KAAKoU,IAAS0T,EAAK5yB,OAAO8K,KAAK5G,GAC3C0uB,EAAK5yB,OAAO8K,MAJb1B,KAQPm2B,EAAS3jC,KAAKkG,MAAMy9B,OAAO9zB,KAAI,CAACmnB,EAAMxpB,KACxC/I,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CACL9nB,MAAOqyB,EAAKr1B,IAAI2B,SAGa,kBAArB0zB,EAAK5yB,OAAO8K,KACd8nB,EAAK5yB,OAAO8K,KAAKoU,IAAS0T,EAAK5yB,OAAO8K,KAAK5G,GAC3C0uB,EAAK5yB,OAAO8K,MAJb1B,KAQPo2B,EAAepB,GAAUC,WAAW5yB,KAAI,CAAC6xB,EAAImC,KAC/C36B,EAAAA,EAAAA,MAACsR,EAAAA,MAAK,CACFxF,KAAM,CAAEkkB,GAAI,EAAGN,GAAI,GAAIO,GAAI,GAAI71B,SAAA,EAG/BmB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACPsI,QAAQ,KACR3G,UAAU,MAAKhH,SAEdtD,KAAKkG,MAAM2C,EAAE64B,EAAGnxB,SAEpBvQ,KAAKgjC,SAAStB,EAAGxhC,QARb2jC,KAYb,OACI36B,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAO4uB,SAASlwB,SAAA,EACxBmB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACPsI,QAAQ,KACR3G,UAAU,MAAKhH,SAEdtD,KAAKkG,MAAM2C,EAAE,0BAElBK,EAAAA,EAAAA,MAACsR,EAAAA,MAAK,CACFC,WAAS,EACTC,QAAS,EAAEpX,SAAA,EAEXmB,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAACxF,KAAM,CAAEkkB,GAAI,EAAGN,GAAI,GAAIO,GAAI,GAAI71B,UAClC4F,EAAAA,EAAAA,MAACkjB,EAAAA,YAAW,CACRnb,QAAQ,WACR5H,MAAOzE,GAAO8xB,YAAYpzB,SAAA,EAE1BmB,EAAAA,EAAAA,KAAC4nB,EAAAA,WAAU,CACP4K,QAAM,EACNn3B,GAAG,cAAawD,SAEftD,KAAKkG,MAAM2C,EAAE,iBAElBpE,EAAAA,EAAAA,KAAC8nB,EAAAA,OAAM,CACHre,SAAUlO,KAAKkG,MAAM0wB,OACrB3lB,QAAQ,WACR5H,MAAOzE,GAAO8xB,YACd52B,GAAG,QACH6E,MAAO3E,KAAKkG,MAAMW,KAAKzC,OAAOw+B,cAAcK,MAC5Cx5B,SAAU6kB,GAAOtuB,KAAKo3B,SAAS,QAAS9I,EAAI3b,OAAOhO,OACnDwyB,cAAY,EACZ2M,WAAY,CAAE,aAAc,SAAUxgC,SAErCogC,UAIbj/B,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAACxF,KAAM,CAAEkkB,GAAI,EAAGN,GAAI,GAAIO,GAAI,GAAI71B,UAClC4F,EAAAA,EAAAA,MAACkjB,EAAAA,YAAW,CACRnb,QAAQ,WACR5H,MAAOzE,GAAO8xB,YAAYpzB,SAAA,EAE1BmB,EAAAA,EAAAA,KAAC4nB,EAAAA,WAAU,CACP4K,QAAM,EACNn3B,GAAG,mBAAkBwD,SAEpBtD,KAAKkG,MAAM2C,EAAE,kBAElBpE,EAAAA,EAAAA,KAAC8nB,EAAAA,OAAM,CACHre,SAAUlO,KAAKkG,MAAM0wB,OACrB3lB,QAAQ,WACR5H,MAAOzE,GAAO8xB,YACd52B,GAAG,aACH6E,MAAO3E,KAAKkG,MAAMW,KAAKzC,OAAOw+B,cAAcU,WAC5C75B,SAAU6kB,GAAOtuB,KAAKo3B,SAAS,aAAc9I,EAAI3b,OAAOhO,OACxDwyB,cAAY,EACZ2M,WAAY,CAAE,aAAc,cAAexgC,SAE1CqgC,aAKjBl/B,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CACFC,WAAS,EACTC,QAAS,EAAEpX,SAEVsgC,MAIjB,EA9NEpB,GACaK,SAA+B,CAC1C,CAAC,KAAO,KACR,CAAC,GAAM,IACP,CAAC,EAAK,IA6Nd,UAAe3b,EAAAA,EAAAA,YAAf,CAA2Bsb,I,gBCnR1BlhC,OAAeyiC,IAAIC,OAAOC,IAAI,WAAY,cAE3C,MAAMr/B,GAA8C,CAChD4uB,SAAU,CACNxuB,MAAO,OACP6F,OAAQ,QACRM,SAAU,OACVgS,QAAS,IAGb+mB,KAAM,CACF/mB,QAAS,GACT1S,gBAAiB05B,GAAAA,EAAS,KAC1B5+B,MAAO,OACP4F,SAAU,OACVF,KAAM,QAEVm5B,SAAU,CACNjnB,QAAS,IAEbuZ,YAAa,CACT/qB,OAAQ,EACRiP,SAAU,QAEd2e,iBAAkB,CACdv0B,MAAO,OACPyF,gBAAiB,cACjB+uB,OAAQ,OACRruB,SAAU,QAEdwrB,YAAa,CACTlY,UAAW,KAcnB,MAAM4lB,WAAyB5N,GAAgDr3B,WAAAA,GAAA,SAAAklC,WAAA,KAoE3EC,iBAAoB5/B,IAChB3E,KAAKo3B,SAAS,OAAQzyB,GAClB3E,KAAKkG,MAAMs+B,QACXxkC,KAAKkG,MAAMs+B,OAAO7/B,EACtB,CACF,CAxEF,eAAO89B,GACH,MAAO,CACH,CACI3iC,GAAI,OACJyQ,MAAO,QAEX,CACIzQ,GAAI,SACJyQ,MAAO,UAEX,CACIzQ,GAAI,UACJyQ,MAAO,WAEX,CACIzQ,GAAI,WACJyQ,MAAO,YAGnB,CAEAk0B,gBAAAA,GACI,MAAM,OAAErgC,GAAWpE,KAAKkG,MAAMW,KAExBiwB,EAAQuN,GAAiB5B,WAAW5yB,KAAI,CAACmnB,EAAMxpB,KACjD/I,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CACL9nB,MAAOqyB,EAAKzmB,MAAMjN,SAGjBtD,KAAKkG,MAAM2C,EAAEmuB,EAAKzmB,QAFd/C,KAMb,OACItE,EAAAA,EAAAA,MAACkjB,EAAAA,YAAW,CACRnb,QAAQ,WACR5H,MAAOzE,GAAO8xB,YAAYpzB,SAAA,EAE1BmB,EAAAA,EAAAA,KAAC4nB,EAAAA,WAAU,CACP4K,QAAM,EACNn3B,GAAG,mBAAkBwD,SAEpBtD,KAAKkG,MAAM2C,EAAE,iBAElBpE,EAAAA,EAAAA,KAAC8nB,EAAAA,OAAM,CACHre,SAAUlO,KAAKkG,MAAM0wB,OACrB3lB,QAAQ,WACR5H,MAAOzE,GAAO8xB,YACd52B,GAAG,aACH6E,MAAOP,EAAOsgC,KACdvN,cAAY,EACZ1tB,SAAWpI,GACPrB,KAAKukC,iBAAiBljC,EAAEsR,OAAOhO,OAClCrB,SAEAwzB,MAIjB,CAEAM,QAAAA,CAASloB,EAAcvK,GACnB,MAAMizB,EAAUx3B,EAAAA,EAAWy3B,MAAM73B,KAAKkG,MAAMW,MAC3C+wB,EAAQxzB,OAA+B8K,GAAQvK,EAChD3E,KAAKkG,MAAMuD,SAASmuB,EACxB,CASAvtB,MAAAA,GACI,OACI5F,EAAAA,EAAAA,KAAA,OAAK4E,OAAKxF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAOe,GAAO4uB,UAAQ,IAAE3oB,OAAQ,SAASvH,UAC/C4F,EAAAA,EAAAA,MAACsR,EAAAA,MAAK,CACFC,WAAS,EACTC,QAAS,EACTiiB,UAAU,gBACVtzB,MAAO,CAAEwB,OAAQ,QAASvH,SAAA,EAE1B4F,EAAAA,EAAAA,MAACsR,EAAAA,MAAK,CACFxF,KAAM,CAAEkkB,GAAI,EAAGC,GAAI,EAAGP,GAAI,IAC1BvvB,MAAO,CAAEtE,QAAS,OAAQgG,cAAe,UAAWzH,SAAA,EAEpD4F,EAAAA,EAAAA,MAACy7B,EAAAA,KAAI,CAACt7B,MAAOzE,GAAOs/B,KAAK5gC,SAAA,EACrBmB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACPi8B,cAAY,EACZ3zB,QAAQ,KACR3G,UAAU,MAAKhH,SAEdtD,KAAKkG,MAAM2C,EAAE,YAElBpE,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACPsI,QAAQ,QACR3G,UAAU,MACV43B,wBAAyB,CAAEC,OAAQniC,KAAKkG,MAAM2C,EAAE,mBAGvD7I,KAAKykC,mBACLzkC,KAAKkG,MAAMmyB,SACR5zB,EAAAA,EAAAA,KAACyY,EAAAA,MAAK,CACFjM,QAAQ,WACR5H,MAAOzE,GAAO20B,iBAAiBj2B,UAE/BmB,EAAAA,EAAAA,KAAA,MAAAnB,SACKpC,OAAOC,KAAKnB,KAAKkG,MAAMmyB,SAASxoB,KAAIC,IACjCrL,EAAAA,EAAAA,KAAA,MAAAnB,SAAewM,GAANA,SAIrB,SAER5G,EAAAA,EAAAA,MAACsR,EAAAA,MAAK,CACFxF,KAAM,CAAEkkB,GAAI,EAAGC,GAAI,EAAGP,GAAI,IAC1B+D,UAAU,gBACVtzB,MAAO,CAAEwB,OAAQ,OAAQ9F,QAAS,OAAQgG,cAAe,UAAWzH,SAAA,EAEpEmB,EAAAA,EAAAA,KAACyY,EAAAA,MAAK,CAAC7T,MAAOzE,GAAOw/B,SAAS9gC,UAC1BmB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACPi8B,cAAY,EACZ3zB,QAAQ,KACR3G,UAAU,MAAKhH,SAEdtD,KAAKkG,MAAM2C,EAAE,mBAGtBpE,EAAAA,EAAAA,KAACknB,GAAAA,EAAM,CACHC,eAAa,EACb5hB,UAAWhK,KAAKkG,MAAM8D,UACtBrF,MAAOrE,KAAKC,UAAUP,KAAKkG,MAAMmyB,QAAS,KAAM,YAMxE,EAGJ,UAAenR,EAAAA,EAAAA,YAAf,CAA2Bmd,ICpKrBQ,GAAgB,oBAEhBjgC,GAA8B,CAChC4uB,SAAWvpB,IAAe,CACtBjF,MAAO,OACP6F,OAAO,eAAD9J,OAAiBkJ,EAAMiU,OAAOC,QAAQ2mB,UAAS,OACrD35B,SAAU,WAEdgM,IAAK,CAED,EAEJ4tB,YAAa,CACThgC,QAAS,OACTI,WAAY,SACZD,eAAgB,gBAChBiY,QAAS,cAEboW,OAAQ,CACJvuB,MAAO,OACP6F,OAAQ,OACRG,SAAU,QAEdmB,QAAS,CACLgR,QAAS,gBAEbpG,SAAW9M,IAAe,CACtB1E,MAA8B,SAAvB0E,EAAMS,QAAQe,KAAkB,kBAAoB,qBAkDnE,MAAMu5B,WAA6B/+B,EAAAA,UAS/B7G,WAAAA,CAAY8G,GACRC,MAAMD,GAAO,KATjB++B,0BAAoB,OAEpBC,oBAAc,OAEdC,0BAAoB,OAEpBC,sBAAgB,OAuShBC,iBAAoBnlC,IACXF,KAAKkG,MAAM7G,OAAOosB,YAAYzrB,KAAKkG,MAAMo/B,YAAaplC,GAAMc,MAAKkqB,GAClElrB,KAAKwD,SAAS,CACV0nB,WACAlH,cAAYngB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACL7D,KAAKsG,MAAM0d,cAAY,IAC1B5f,QAAMP,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACC7D,KAAKsG,MAAM0d,aAAa5f,QAAM,IACjCsgC,KAAMxkC,SAIrB,EA/SDF,KAAKsG,MAAQ,CACTi/B,SAAS,EACTC,aAAa,EACbxhB,aAAc,KACdyhB,mBAAoB,KACpBC,mBAAoB,KACpBC,eAAgB,KAChBjN,eAAe,EACfkN,gBAAgB,EAChBv2B,KAAM,GACN0tB,SAAU,CAAC,GAEf/8B,KAAKy3B,cAA0Cr2B,OAAMC,GAAKC,OAAOC,MAAM,yBAADR,OAA0BM,KACpG,CAEA,uBAAM2F,GACF,MAAM0xB,QAAsB14B,KAAKkG,MAAM7G,OAAOwmC,sBAAsB,yBAC9DD,QAAuB5lC,KAAKkG,MAAM7G,OAAOwmC,sBAAsB,8BAC/DpR,QAAkBz0B,KAAKkG,MAAM7G,OAAOisB,qBACpCvrB,QAAaC,KAAKkG,MAAM7G,OAAOmsB,UAAU,kBAADzqB,OACxB0zB,IAEtBz0B,KAAKwD,SAAS,CAAE6L,KAAMtP,EAAIqE,OAAOiL,KAAMqpB,gBAAekN,kBAC1D,CAEA,iBAAMnO,GACF,MAAMqO,EAA+C,CAAEP,SAAS,GAChE,IACI,IAAIG,QAA2B1lC,KAAKkG,MAAM7G,OAAOmsB,UAAU,uBAC3Dka,EAAqBtlC,EAAAA,EAAWy3B,MAAM6N,GACtCA,EAAsBA,GAAsB,CAAC,EAC7CA,EAAmBhR,OAAUgR,EAAmBhR,QAAU,CAAC,EAC3DgR,EAAmBhR,OAAO4D,aAAeoN,EAAmBhR,OAAO4D,cAAgB,CAAC,EACpFwN,EAAS/I,SAAW,CAAC,EAErB77B,OAAOC,KAAKukC,EAAmBhR,OAAO4D,cAAc73B,SAAQ+xB,IACpDkT,EAAmBhR,OAAO4D,aAAa9F,KACnCkT,EAAmBhR,OAAO4D,aAAa9F,GAAM0I,OAC7C4K,EAAS/I,SAASvK,GAAQkT,EAAmBhR,OAAO4D,aAAa9F,GAAM0I,KAAK6K,iBACrEL,EAAmBhR,OAAO4D,aAAa9F,GAAM0I,MAEpDwK,EAAmBhR,OAAO4D,aAAa9F,GAAMvf,aACtCyyB,EAAmBhR,OAAO4D,aAAa9F,GAAMvf,KAEpDyyB,EAAmBhR,OAAO4D,aAAa9F,GAAM2I,aACtCuK,EAAmBhR,OAAO4D,aAAa9F,GAAM2I,KAE5D,IAGJn7B,KAAKmlC,qBAAuB7kC,KAAKC,UAAUmlC,GAC3CI,EAASJ,mBAAqBA,EAC9B,MAAM1hB,QAAqBhkB,KAAKkG,MAAM7G,OAAOmiB,iBAAgB,GAC7DxhB,KAAKklC,eAAiB5kC,KAAKC,UAAUyjB,GAAgB,CAAC,GACtD8hB,EAAS9hB,aAAeA,GAAiB,CAAC,EAC1CA,EAAa5f,OAAS4f,EAAa5f,QAAW,CAAC,EAC/C4f,EAAa0Q,OAAS1Q,EAAa0Q,QAAW,CAAC,EAE/C1Q,EAAa5f,OAAOw+B,cAAgB5e,EAAa5f,OAAOw+B,eAAiB,CACrEoD,OAAQ,KACR1/B,MAAO,KACPi7B,KAAM,KACN0B,MAAO,oBACPK,WAAY,8BAGhBtf,EAAa5f,OAAOgrB,eAAiBpL,EAAa5f,OAAOgrB,gBAAkB,SAE3E0W,EAAS5a,eAAiBlrB,KAAKkG,MAAM7G,OAAOosB,YAAYzrB,KAAKkG,MAAMo/B,YAAathB,EAAa5f,OAAOsgC,MACpGoB,EAASpC,YAAc1jC,KAAKkG,MAAM7G,OAAO4mC,WACzCH,EAASnC,aAAe3jC,KAAKkG,MAAM7G,OAAO6mC,YAC1C,MAAMn4B,QAAkB/N,KAAKkG,MAAM7G,OAAO8mC,qBAAoB,GAC9DL,EAAS5N,UAAYh3B,OAAO8N,OAAOjB,GAC9ByV,QAAOxa,GAAYA,EAAS5E,OAAOgiC,aACnCv2B,KAAI7G,IACD,MAAMlJ,EAAKkJ,EAASrH,IAAIsH,MAAM,KAC9B,MAAM,GAANlI,OAAUjB,EAAGA,EAAGe,OAAS,GAAE,KAAAE,OAAIjB,EAAGA,EAAGe,OAAS,GAAE,IAGxD,MAAM4kC,QAA2BzlC,KAAKkG,MAAM7G,OAAOmsB,UAAU,uBAC7DxrB,KAAKilC,qBAAuB3kC,KAAKC,UAAUklC,GAC3CK,EAASL,mBAAqBA,EAC9B,IAAIE,QAAwC3lC,KAAKkG,MAAM7G,OAAOmsB,UAAU,mBACxEma,EACIA,GACC,CACGvhC,OAAQ,CACJ8K,KAAM,8BAEVwlB,OAAQ,CACJ4K,MAAO,GACP5W,SAAU,GACVyW,SAAU,IAEdj/B,KAAM,UAEVylC,EAAejR,OAAOhM,WACtBid,EAAejR,OAAOhM,SAAWmc,IAGrC7kC,KAAKolC,iBAAmB9kC,KAAKC,UAAU,CACnC++B,MAAOqG,EAAejR,OAAO4K,MAC7B5W,SAAUid,EAAejR,OAAOhM,WAEpCod,EAASH,eAAiBA,EAC1B3lC,KAAKwD,SAASsiC,EAClB,CAAE,MAAOzkC,GACLC,OAAOC,MAAM,yBAADR,OAA0BM,GAC1C,CACJ,CAEA03B,mBAAAA,GACI,OAAI/4B,KAAKsG,MAAMk/B,aAEP/gC,EAAAA,EAAAA,KAACu0B,EAAAA,cAAa,CACV5wB,KAAMpI,KAAKkG,MAAM2C,EAAE,4BACnBgF,QAAS7F,GAAUhI,KAAKwD,SAAS,CAAEgiC,aAAa,IAAS,IAAMx9B,GAAUhI,KAAKkG,MAAM2H,cAIzF,IACX,CAEAw4B,MAAAA,GACI,IAAIC,GAAc,EAClBtmC,KAAKwD,SAAS,CAAEozB,QAAQ,IAAQzV,UAC5B,IACI,IAAI6C,QAAqBhkB,KAAKkG,MAAM7G,OAAOmiB,iBAAgB,GAC3DwC,EAAeA,GAAiB,CAAC,EAC7B1jB,KAAKC,UAAUyjB,EAAa5f,UAAY9D,KAAKC,UAAUP,KAAKsG,MAAM0d,aAAa5f,eACzEpE,KAAKkG,MAAM7G,OAAOqiB,gBAAgB1hB,KAAKsG,MAAM0d,oBAEjDhkB,KAAKkG,MAAM7G,OAAOw2B,UAAU,sBAAuB71B,KAAKsG,MAAMm/B,oBAEpE,IAAIC,QAA2B1lC,KAAKkG,MAAM7G,OAAOmsB,UAAU,uBAC3Dka,EAAqBA,GAAuB,CAAC,EAC7CA,EAAmBhR,OAASgR,EAAmBhR,QAAW,CAAC,EAC3DgR,EAAmBhR,OAAO4D,aAAeoN,EAAmBhR,OAAO4D,cAAgB,CAAC,EACpF,MAAMmD,EAAUn7B,KAAKsH,MAAMtH,KAAKC,UAAUP,KAAKsG,MAAMo/B,mBAAmBhR,OAAO4D,eAG/Ep3B,OAAOC,KAAKs6B,GAASh7B,SAAQ+xB,IACrBkT,EAAmBhR,OAAO4D,aAAa9F,KACnCkT,EAAmBhR,OAAO4D,aAAa9F,GAAM0I,OAC7CO,EAAQjJ,GAAM0I,KAAOwK,EAAmBhR,OAAO4D,aAAa9F,GAAM0I,MAElEwK,EAAmBhR,OAAO4D,aAAa9F,GAAMvf,OAC7CwoB,EAAQjJ,GAAMvf,KAAOyyB,EAAmBhR,OAAO4D,aAAa9F,GAAMvf,MAElEyyB,EAAmBhR,OAAO4D,aAAa9F,GAAM2I,OAC7CM,EAAQjJ,GAAM2I,KAAOuK,EAAmBhR,OAAO4D,aAAa9F,GAAM2I,MAE1E,IAEA76B,KAAKC,UAAUP,KAAKsG,MAAMo/B,mBAAmBhR,OAAO4D,gBAAkBh4B,KAAKC,UAAUk7B,KACrFiK,EAAmBhR,OAAO4D,aAAemD,EACzC6K,GAAc,QACRtmC,KAAKkG,MAAM7G,OAAOw2B,UAAU,sBAAuB6P,IAG7D,IAAIC,QAAwB3lC,KAAKkG,MAAM7G,OAAOmsB,UAAU,mBACxDma,EAAiBA,GAAmB,CAAC,EACrCA,EAAezlC,KAAOylC,EAAezlC,MAAQ,SAC7CylC,EAAez2B,KAAOy2B,EAAez2B,MAAQ,6BAC7Cy2B,EAAevhC,OAASuhC,EAAevhC,QAAW,CAAC,EACnDuhC,EAAejR,OAASiR,EAAejR,QAAW,CAAC,EACnDiR,EAAejR,OAAOyK,SAAWwG,EAAejR,OAAOyK,UAAY,GACnEwG,EAAejR,OAAOhM,SAAWid,EAAejR,OAAOhM,UAAY,GACnEid,EAAejR,OAAO4K,MAAQqG,EAAejR,OAAO4K,OAAS,GAE7D,MAAMiH,EAAkBZ,EAAejR,OAAOhM,SAAWmc,GAAgB,GAEzE,GACI7kC,KAAKsG,MAAMq/B,eAAejR,OAAOhM,WAAa6d,GAC9CZ,EAAejR,OAAO4K,QAAUt/B,KAAKsG,MAAMq/B,eAAejR,OAAO4K,MACnE,CAGE,GAFAqG,EAAejR,OAAO4K,MAAQt/B,KAAKsG,MAAMq/B,eAAejR,OAAO4K,MAG3Dt/B,KAAKsG,MAAMq/B,eAAejR,OAAOhM,WAAamc,IAC9C7kC,KAAKsG,MAAMq/B,eAAejR,OAAOhM,SAGjC,IACIid,EAAejR,OAAOhM,eAAiB1oB,KAAKkG,MAAM7G,OAAOmnC,QACrDxmC,KAAKsG,MAAMq/B,eAAejR,OAAOhM,SAEzC,CAAE,MAAOtf,GACL9H,OAAOC,MAAMvB,KAAKkG,MAAM2C,EAAE,6BAA8BO,GAC5D,MACQpJ,KAAKsG,MAAMq/B,eAAejR,OAAOhM,WACzCid,EAAejR,OAAOhM,SAAW,IAErC,UACU1oB,KAAKkG,MAAM7G,OAAOw2B,UAAU,kBAAmB8P,SAC/C3lC,KAAKkG,MAAM7G,OAAOmgC,eAAe,KAAM,KACjD,CAAE,MAAOp2B,GACL9H,OAAOC,MAAMvB,KAAKkG,MAAM2C,EAAE,6BAA8BO,GAC5D,CACJ,CAGA7H,MAAMvB,KAAKkG,MAAM2C,EAAE,mBACnB7I,KAAKkG,MAAM2H,QAAQy4B,GACftmC,KAAKsG,MAAM0d,aAAa5f,OAAOqiC,aAAenmC,KAAKsH,MAAM5H,KAAKklC,gBAAgB9gC,OAAOqiC,YACrFzmC,KAAKkG,MAAMwgC,eAAe1mC,KAAKsG,MAAM0d,aAAa5f,OAAOqiC,YAGzDzmC,KAAKsG,MAAM0d,aAAa5f,OAAO2wB,WAAaz0B,KAAKsH,MAAM5H,KAAKklC,gBAAgB9gC,OAAO2wB,UACnFz0B,KAAKC,UAAUP,KAAKsG,MAAM0d,aAAa5f,OAAOquB,cAC1CnyB,KAAKC,UAAUD,KAAKsH,MAAM5H,KAAKklC,gBAAgB9gC,OAAOquB,aAE1DnxB,OAAO0R,SAAS2zB,SAEpB3mC,KAAKwD,SAAS,CAAEozB,QAAQ,GAC5B,CAAE,MAAOv1B,GACLC,OAAOC,MAAM,qCAADR,OAAsCM,GACtD,IAER,CAEA8e,OAAAA,GACI,MAAO,CACH,CACIrgB,GAAI,EACJyQ,MAAO,kBACPjG,UAAWs8B,GACX//B,KAAM,eACNqI,KAAM,YACNmpB,QAAS,qBACTmM,OAAQ,MAEZ,CACI1kC,GAAI,EACJyQ,MAAO,eACPjG,UAAWu8B,GACXhgC,KAAM,qBACNqI,KAAM,kBACNmpB,QAAS,eACTmM,OAAQ,KACRnlC,OAAQW,KAAKkG,MAAM7G,QAEvB,CACIS,GAAI,EACJyQ,MAAO,WACPjG,UAAWw8B,GACXjgC,KAAM,iBACNqI,KAAM,cACNmpB,QAAS,KACTmM,OAAQ,KACRnlC,OAAQW,KAAKkG,MAAM7G,QAEvB,CACIS,GAAI,EACJyQ,MAAO,eACPjG,UAAW81B,GACXv5B,KAAM,qBACNqI,KAAM,kBACNmpB,QAAS,KACTmM,OAAQ,MAEZ,CACI1kC,GAAI,EACJyQ,MAAO,oBACPjG,UAAWy8B,GACXlgC,KAAM,qBACNqI,KAAM,iBACNmpB,QAAS,KACTmM,OAAQ,MAEZ,CACI1kC,GAAI,EACJyQ,MAAO,cACPjG,UAAWk4B,GACX37B,KAAM,eACNqI,KAAM,gBACNmpB,QAAS,KACTmM,OAAQ,MAEZ,CACI1kC,GAAI,EACJyQ,MAAO,aACPjG,UAAW+5B,GACXx9B,KAAM,eACNwxB,QAAS,WACTnpB,KAAM,gBACNs1B,OAAQtkC,GAAQF,KAAKqlC,iBAAiBnlC,IAGlD,CAiBA8mC,gBAAAA,CAAiBC,GACb,GAAIjnC,KAAKsG,MAAMi/B,QACX,OAAO9gC,EAAAA,EAAAA,KAACqE,EAAAA,eAAc,IAG1B,MAAMqO,EAAM8vB,EAASh4B,MAAKpG,GAAKA,EAAEqG,OAASlP,KAAKkG,MAAMkf,WAAWtlB,MAAOmnC,EAAS,GAE1EC,EAAuD/vB,EAAI7M,WAC3D,OAAEq5B,EAAM,MAAED,EAAK,UAAExL,GAAcl4B,KAAKsG,MAC1C,OACI7B,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,GAAO4uB,SAASlwB,UAEpBmB,EAAAA,EAAAA,KAACyiC,EAAW,CACRziB,eAAgBzkB,KAAKkG,MAAMue,eAC3Bhb,SAAUA,CAAC5C,EAAWwxB,EAAc33B,IAChCV,KAAKmnC,aAAahwB,EAAItQ,KAAMA,EAAMsQ,EAAIkhB,QAASA,EAAS33B,GAE5DmG,KAAM7G,KAAKsG,MAAM6Q,EAAItQ,MACrBwxB,QAASr4B,KAAKsG,MAAM6Q,EAAIkhB,SACxBmM,OAAQrtB,EAAIqtB,OACZd,MAAOA,EACPC,OAAQA,EACRjL,cAAe14B,KAAKsG,MAAMoyB,cAC1BjG,WAAYzyB,KAAKsG,MAAM0d,aAAa5f,OAAOquB,WAC3CsK,SAAU/8B,KAAKsG,MAAMy2B,SACrB7E,UAAWA,EACXnuB,UAAW/J,KAAKkG,MAAM6D,UACtBC,UAAWhK,KAAKkG,MAAM8D,UACtBqF,KAAMrP,KAAKsG,MAAM+I,KACjBxG,EAAG7I,KAAKkG,MAAM2C,EACdxJ,OAAQW,KAAKkG,MAAM7G,OACnBu3B,OAAQ52B,KAAKsG,MAAMswB,UAInC,CAMAuQ,YAAAA,CAAarnC,EAAS+G,EAAWugC,EAAY/O,EAAc33B,GACvD,GAAImG,GAAQwxB,EAAS,CACjB,MAAM/xB,GAAgCzC,EAAAA,EAAAA,GAAA,GAAQ7D,KAAKsG,OAC/CO,IACCP,EAAcxG,GAAM+G,GAErBwxB,IACC/xB,EAAc8gC,GAAS/O,GAE5Br4B,KAAKwD,SAAS8C,GAAO,IAAM5F,GAAMA,KACrC,CACJ,CAEA,kBAAO2mC,CAAYxgC,GAA8D,IAADygC,EAC5E,GAAS,OAAJzgC,QAAI,IAAJA,GAAY,QAARygC,EAAJzgC,EAAM6tB,cAAM,IAAA4S,IAAZA,EAAchP,aACf,OAAO,EAKX,YAAsB5mB,IAHHxQ,OAAOC,KAAK0F,EAAK6tB,OAAO4D,cAAcrpB,MAAMa,IACnDA,GAAOA,EAAI2sB,cAAgB3sB,GAAQA,EAAIjP,OAAS,KAAOiP,EAAIsT,MAAM,UAGjF,CAEA/Y,MAAAA,GACI,MAAMk9B,IACFjnC,KAAKC,UAAUP,KAAKsG,MAAMo/B,sBAAwB1lC,KAAKmlC,sBACvD7kC,KAAKC,UAAUP,KAAKsG,MAAM0d,gBAAkBhkB,KAAKklC,gBACjD5kC,KAAKC,UAAUP,KAAKsG,MAAMm/B,sBAAwBzlC,KAAKilC,sBACvD3kC,KAAKC,UAAU,CACX++B,MAAOt/B,KAAKsG,MAAMq/B,eAAejR,OAAO4K,MACxC5W,SAAU1oB,KAAKsG,MAAMq/B,eAAejR,OAAOhM,aACxC1oB,KAAKolC,kBAGhB,IAAIoC,GAAW,EACkB,oBAA7BxnC,KAAKkG,MAAMkf,WAAWtlB,KACtB0nC,EAAWxC,GAAqBqC,YAAYrnC,KAAKsG,MAAMo/B,qBAG3D,MAAMuB,EAAWjnC,KAAKmgB,UAAUqD,QAAOrM,MAC9BnX,KAAKsG,MAAMs/B,gBAA+B,gBAAbzuB,EAAIjI,QAGwB,IAAvDlP,KAAKkG,MAAMue,eAAerd,MAAMmkB,SAASpU,EAAIjI,QAGxDgX,QAAQC,IAAI,cAADplB,OAAeymC,IAC1B,MAAMlxB,EAAO2wB,EAASp3B,KAAIsH,IACtB1S,EAAAA,EAAAA,KAAC6M,EAAAA,IAAG,CAEAC,MAAOvR,KAAKkG,MAAM2C,EAAEsO,EAAI5G,OACxB5L,MAAOwS,EAAIjI,KACXhB,SAAUs5B,GAAYrwB,EAAIjI,QAAUlP,KAAKkG,MAAMkf,WAAWtlB,IAAM,aAChE0I,GAAI,CAAE,iBAAkB5D,GAAOmS,WAJ1BI,EAAI5G,SAQjB,OACIrH,EAAAA,EAAAA,MAACgH,EAAAA,OAAM,CACH1H,GAAI,CACA,mBAAoB5D,GAAO2uB,OAC3B,qBAAsB,CAClB1oB,OAAQ,oBACR7F,MAAO,oBACPgG,SAAU,sBAGlBmF,MAAM,EACNtC,QAASA,CAAC45B,EAAIC,KACK,kBAAXA,GAAyC,kBAAXA,IAC1BH,EACAvnC,KAAKwD,SAAS,CAAEgiC,aAAa,IAE7BxlC,KAAKkG,MAAM2H,UAEnB,EAEJ6G,WAAS,EACTyhB,YAAY,EACZ,kBAAgB,+BAA8B7yB,SAAA,EAE9C4F,EAAAA,EAAAA,MAACyH,EAAAA,cAAa,CAACtH,MAAOzE,GAAOuH,QAAQ7I,SAAA,EACjCmB,EAAAA,EAAAA,KAACoM,EAAAA,OAAM,CACH/L,SAAS,SACTS,MAAM,UAASjC,UAEf4F,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAOmgC,YAAYzhC,SAAA,CACL,OAArBtD,KAAKkG,MAAMlB,OAAuC,OAArBhF,KAAKkG,MAAMlB,QACrCP,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAACg0B,UAAU,aAAYr5B,SAAEtD,KAAKkG,MAAM2C,EAAE,oBAErDpE,EAAAA,EAAAA,KAACqM,EAAAA,KAAI,CACDzH,MAAOzE,GAAOuS,IACdhG,eAAe,YACfxM,MAAO3E,KAAKkG,MAAMkf,WAAWtlB,IAAM,YACnC2J,SAAUA,CAACmF,EAAQ+4B,IAAmB3C,GAAqB4C,aAAaD,GACxE12B,QAAQ,aACRC,cAAc,OAAM5N,SAEnBgT,KAEL7R,EAAAA,EAAAA,KAACsQ,EAAAA,WAAU,CACPC,KAAK,QACL9G,SAAUlO,KAAKsG,MAAMswB,OACrBiR,KAAK,QACLtiC,MAAM,UACNkO,QAASA,IAAO8zB,EAAUvnC,KAAKwD,SAAS,CAAEgiC,aAAa,IAAUxlC,KAAKkG,MAAM2H,UAC5E,aAAW,QAAOvK,UAElBmB,EAAAA,EAAAA,KAACmP,EAAAA,MAAS,WAIrB5T,KAAKgnC,iBAAiBC,GACtBjnC,KAAK+4B,0BAEV7vB,EAAAA,EAAAA,MAACoK,EAAAA,cAAa,CAAAhQ,SAAA,EACVmB,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHtC,QAAQ,YACR/C,UAAWq5B,GAAWvnC,KAAKsG,MAAMswB,QAAU4Q,EAC3C/zB,QAASA,IAAMzT,KAAKqmC,SACpB9gC,MAAM,UACNmO,WAAWjP,EAAAA,EAAAA,KAACkP,EAAAA,MAAS,IAAIrQ,SAExBtD,KAAKkG,MAAM2C,EAAE,mBAElBpE,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHtC,QAAQ,YACR/C,SAAUlO,KAAKsG,MAAMswB,OACrBnjB,QAASA,IAAO8zB,EAAUvnC,KAAKwD,SAAS,CAAEgiC,aAAa,IAAUxlC,KAAKkG,MAAM2H,UAC5E6F,WAAWjP,EAAAA,EAAAA,KAACmP,EAAAA,MAAS,IACrBrO,MAAM,OAAMjC,SAEXikC,EAAUvnC,KAAKkG,MAAM2C,EAAE,UAAY7I,KAAKkG,MAAM2C,EAAE,gBAKrE,EAjfEm8B,GAoWK4C,aAAgBD,IACnB5R,EAAAA,OAAOC,WAAW,KAAM,SAAU2R,EAAO,EA+IjD,UAAezgB,EAAAA,EAAAA,YAAf,CAA2B8d,ICzlBrBpgC,GAA8B,CAChCtF,KAAM,CACF6d,QAAS,GACTxR,OAAQ,OACR5G,QAAS,OACT8F,OAAQ,OACR1F,WAAY,SACZ2F,aAAc,EACd5F,eAAgB,UAEpB0F,MAAQX,IAAe,CACnBQ,gBAAiBR,EAAMS,QAAQC,WAAWC,OAASX,EAAMS,QAAQC,WAAWC,MAAM/J,OAAS,EAAI,IAAM,MACrG4L,EAAG,OACHpB,UAAW,OACXtG,QAAS,OACTgG,cAAe,SACfF,OAAQ,OACRga,UAAW,IACX7Z,SAAU,IACV88B,UArBU,iGAuBdC,OAAQ,CACJp8B,OAAQ,EACRlB,gBAAiB,OACjBzF,MAAO,IACP6F,OAAQ,KAEZm9B,UAAW,CACPhjC,MAAO,mBACP6F,OAAQ,mBACRsS,QAAS,GAEbiL,KAAM,CACFpjB,MAAO,OACPyZ,UAAW,GAEfwpB,OAAQ,CACJt8B,OAAQ,GAEZpK,MAAO,CACHkd,UAAW,GACXhU,gBAAiB,UACjB0S,QAAS,EACT5X,MAAO,OACPuF,aAAc,EACdpF,SAAU,IAEdwiC,aAAc,CACVC,cAAe,WAEnB1pB,UAAW,CACPA,UAAW,QAEf2pB,SAAU,CACN9d,UAAW,WAyBnB,MAAM+d,WAAcpiC,EAAAA,UAGhB7G,WAAAA,CAAY8G,GACRC,MAAMD,GAAO,KAHAoiC,aAAO,EAKpBtoC,KAAKsG,MAAQ,CACTiiC,WAAW,GAGfvoC,KAAKsoC,QAAUlsB,IAAAA,YAGf,MAAMosB,EAAOlnC,OAAOkoB,SAASgf,KAC7BA,EAAKn/B,MAAMoB,gBAAkBnJ,OAAOmnC,qBACpCD,EAAKn/B,MAAMsqB,gBAAkBryB,OAAOonC,qBACpCF,EAAKn/B,MAAMgD,eAAiB,OAChC,CAEAhC,MAAAA,GACI,MAAMs+B,EAAM,GAAA5nC,OAA+B,SAAzBO,OAAO0R,SAAS41B,KAAe,GAAA7nC,OAAMO,OAAO0R,SAASE,SAAQ,MAAAnS,OAAKO,OAAO0R,SAASgT,SAAQ,UAAW,GAAE,UAAAjlB,OAAkC,SAAzBO,OAAO0R,SAAS41B,KAAkB,OAAS,GAAE,SAAA7nC,OAAQO,OAAO0R,SAASC,MAEjMmnB,EACF94B,OAAOunC,WAAkC,kBAArBvnC,OAAOunC,UAAgCvnC,OAAOunC,UAAY,4BAC5EC,EACFxnC,OAAOynC,YAAoC,mBAAtBznC,OAAOynC,WAAkCznC,OAAOynC,WAAa,qBAEjE,SAAjBznC,OAAOg+B,QAGPh+B,OAAO0R,SAASG,KAAI,GAAApS,OAAMO,OAAO0R,SAASE,SAAQ,MAAAnS,OAAKO,OAAO0R,SAAS3D,MAAItO,OAAGO,OAAO0R,SAASK,WAElG,MAAMhK,EACD/H,OAAOmnC,sBAAwD,YAAhCnnC,OAAOmnC,sBAAuCnnC,OAAOonC,qBAC/E,CAAE/9B,WAAY,aACd,CAAC,EAEX,OACIlG,EAAAA,EAAAA,KAACyY,EAAAA,MAAK,CACF5S,UAAU,OACVjB,OAAKxF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAOe,GAAOtF,MAAS+J,GAAQ/F,UAEpC4F,EAAAA,EAAAA,MAACgU,EAAAA,MAAK,CAAC1U,GAAI5D,GAAOgG,MAAMtH,SAAA,EACpB4F,EAAAA,EAAAA,MAACsR,EAAAA,MAAK,CACFC,WAAS,EACTyO,UAAU,SACV/jB,WAAW,SAAQ7B,SAAA,CAElBhC,OAAO0nC,WAAkC,kBAArB1nC,OAAO0nC,WACxBvkC,EAAAA,EAAAA,KAAA,OACI4E,MAAO,CACHwB,OAAQ,GACR7F,MAAO,IACP0f,WAAY,OACZ/Z,WAAY,QACZG,aAAc,EACdqS,QAAS,GACX7Z,UAEFmB,EAAAA,EAAAA,KAAA,OACIkgB,IAAKrjB,OAAO0nC,UACZpkB,IAAI,OACJvb,MAAO,CAAE2B,SAAU,OAAQ6Z,UAAW,YAIrB,UAAzBvjB,OAAO2nC,gBACHxkC,EAAAA,EAAAA,KAACsgB,EAAAA,OAAM,CACH1b,MAAOzE,GAAOmjC,OACdpjB,IAAI,eACJnc,GAAI,CAAE,mBAAoB5D,GAAOojC,cAI7CvjC,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACP2B,UAAU,KACV2G,QAAQ,KAAI3N,SAEXhC,OAAO4nC,YAAoC,mBAAtB5nC,OAAO4nC,WACvB5nC,OAAO4nC,WACPlpC,KAAKkG,MAAM2C,EAAE,gBAEtBvH,OAAO0R,SAASid,OAAO7tB,SAAS,WAC7BqC,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOrD,MAAM+B,SAAEtD,KAAKkG,MAAM2C,EAAE,oBAE5CK,EAAAA,EAAAA,MAAA,QACIkO,IAAKpX,KAAKsoC,QACVj/B,MAAOzE,GAAOwjB,KACdugB,OAAQA,EACRQ,OAAO,OAAM7lC,SAAA,EAEbmB,EAAAA,EAAAA,KAAC0kB,EAAAA,UAAS,CACNlY,QAAQ,WACRtF,OAAO,SACPuC,SAAUlO,KAAKsG,MAAMiiC,UACrBa,UAAQ,EACR10B,WAAS,EACTM,KAAK,QACLlV,GAAG,WACHyR,MAAOvR,KAAKkG,MAAM2C,EAAE,cACpBqG,KAAK,WACL+Z,aAAa,WACbzV,WAAS,KAEb/O,EAAAA,EAAAA,KAAC0kB,EAAAA,UAAS,CACNlY,QAAQ,WACRtF,OAAO,SACPuC,SAAUlO,KAAKsG,MAAMiiC,UACrBa,UAAQ,EACR10B,WAAS,EACTM,KAAK,QACL9F,KAAK,WACLqC,MAAOvR,KAAKkG,MAAM2C,EAAE,iBACpB3I,KAAK,WACLJ,GAAG,WACHmpB,aAAa,sBAEjBxkB,EAAAA,EAAAA,KAACmR,EAAAA,iBAAgB,CACbC,SACIpR,EAAAA,EAAAA,KAACqR,EAAAA,SAAQ,CACLhW,GAAG,eACHoP,KAAK,eACLvK,MAAM,KACNY,MAAM,UACN2I,SAAUlO,KAAKsG,MAAMiiC,YAG7Bh3B,MAAOvR,KAAKkG,MAAM2C,EAAE,qBAExBpE,EAAAA,EAAAA,KAAA,SACI3E,GAAG,SACHI,KAAK,SACLgP,KAAK,SACLvK,MAAOrD,OAAO0R,SAASK,SAAW/R,OAAO0R,SAASid,OAAOloB,QAAQ,SAAU,OAG3EtD,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHrT,KAAK,SACLgO,SAAUlO,KAAKsG,MAAMiiC,UACrB90B,QAASA,KACLzT,KAAKsoC,QAAQtwB,QAAQiwB,SAErBn1B,YAAW,IAAM9S,KAAKwD,SAAS,CAAE+kC,WAAW,KAAS,GAAG,EAE5D7zB,WAAS,EACTzD,QAAQ,YACR1L,MAAM,UACN8D,MAAOzE,GAAOqjC,OAAO3kC,SAEpBtD,KAAKsG,MAAMiiC,WAAY9jC,EAAAA,EAAAA,KAAC4kC,EAAAA,iBAAgB,CAACr0B,KAAM,KAAShV,KAAKkG,MAAM2C,EAAE,kBAKtFpE,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CAACc,MAAOzE,GAAO6Z,UAAUnb,UACzB4F,EAAAA,EAAAA,MAACP,EAAAA,WAAU,CACPsI,QAAQ,QACR1L,MAAM,gBACN+jC,MAAM,SAAQhmC,SAAA,CAEbhC,OAAOunC,WAAkC,kBAArBvnC,OAAOunC,WACxBpkC,EAAAA,EAAAA,KAAC8kC,EAAAA,KAAI,CACDlgC,MAAOzE,GAAOsjC,aACd3iC,MAAM,UACN4N,KAAMinB,EACNoP,IAAI,sBACJ72B,OAAO,SAAQrP,SAEdwlC,IAEL,KACFxnC,OAAOunC,WAAkC,kBAArBvnC,OAAOunC,UAAwC,KAARC,EAC3DxnC,OAAOunC,WAAkC,kBAArBvnC,OAAOunC,UAUzB,MATApkC,EAAAA,EAAAA,KAAC8kC,EAAAA,KAAI,CACDlgC,MAAOzE,GAAOsjC,aACd3iC,MAAM,UACN4N,KAAMinB,EACNoP,IAAI,sBACJ72B,OAAO,SAAQrP,SAClB,sBAS7B,EAGJ,UAAe4jB,EAAAA,EAAAA,YAAf,CAA2BmhB,I,gBC/Q3B,MAAMzjC,GAA8B,CAChCtF,KAAO2K,IAAe,CAClBQ,gBAAiBR,EAAMS,QAAQC,WAAWC,MAC1C5F,MAAO,OACP6F,OAAQ,OACR9F,QAAS,OACT+F,aAAc,EACdpF,SAAU,GACVE,WAAY,+CAEhBgF,MAAO,CACHI,SAAU,KAEdE,eAAgB,CACZnG,QAAS,QAEb0kC,IAAK,CACDt+B,SAAU,OACVQ,OAAQ,IAEZvD,KAAM,CACF1C,SAAU,IAEdgkC,SAAU,CACNhkC,SAAU,GACV8F,WAAY,QAEhBm+B,SAAU,CACN3kC,MAAO,SA6Hf,GApH0D3B,IAGf,IAHgB,WACvDojC,EAAU,QACV54B,GACoBxK,EACpB,MAAOumC,EAAWC,IAAgBpmC,EAAAA,EAAAA,WAAS,GAE3C,OACIyF,EAAAA,EAAAA,MAACgH,EAAAA,OAAM,CACHrC,QAASA,IAAMA,IACfsC,MAAM,EACN3H,GAAI,CAAE,qBAAsB5D,GAAOgG,OAAQtH,SAAA,EAE3C4F,EAAAA,EAAAA,MAAC4L,EAAAA,YAAW,CAAAxR,SAAA,EACRmB,EAAAA,EAAAA,KAACqlC,EAAAA,WAAU,CAACzgC,MAAO,CAAEgH,YAAa,KACjCzH,EAAAA,KAAKC,EAAE,mBAEZpE,EAAAA,EAAAA,KAACkM,EAAAA,cAAa,CACVtH,MAAOzE,GAAOsG,eACd0F,UAAQ,EAAAtN,UAER4F,EAAAA,EAAAA,MAACsR,EAAAA,MAAK,CAACC,WAAS,EAAAnX,SAAA,EACZmB,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAACnR,MAAOzE,GAAO+kC,SAASrmC,UAC1BmB,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,GAAOtF,KAAKgE,UAEhB4F,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAO6kC,IAAInmC,SAAA,EACnBmB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACPU,MAAOzE,GAAOwD,KACd6I,QAAQ,QACR3G,UAAU,IAAGhH,SAEZmjC,EACK79B,EAAAA,KAAKC,EACD,6EAEJD,EAAAA,KAAKC,EACD,0EAGZ49B,EAQE,MAPAhiC,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACPU,MAAOzE,GAAO8kC,SACdz4B,QAAQ,QACR3G,UAAU,IAAGhH,SAEZsF,EAAAA,KAAKC,EAAE,0EAGd49B,EAQE,MAPAhiC,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACPU,MAAOzE,GAAO8kC,SACdz4B,QAAQ,QACR3G,UAAU,IAAGhH,SAEZsF,EAAAA,KAAKC,EAAE,oDAGhBpE,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACPU,MAAOzE,GAAOwD,KACd6I,QAAQ,QACR3G,UAAU,IAAGhH,SAEZsF,EAAAA,KAAKC,EACF,wFAGPD,EAAAA,KAAKC,EAAE,qBACRpE,EAAAA,EAAAA,KAACsQ,EAAAA,WAAU,CACPxP,MAAM,UACNyP,KAAK,QACLvB,QAASA,IAAM5F,EAAQ,gBAAgBvK,UAEvCmB,EAAAA,EAAAA,KAACslC,EAAAA,MAAS,cAK1BtlC,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAAAlX,UACFmB,EAAAA,EAAAA,KAACmR,EAAAA,iBAAgB,CACbC,SACIpR,EAAAA,EAAAA,KAACqR,EAAAA,SAAQ,CACLhW,GAAG,0BACHiW,QAAS6zB,EACTngC,SAAUpI,GAAKwoC,EAAaxoC,EAAEsR,OAAOoD,WAG7CxE,MAAO3I,EAAAA,KAAKC,EAAE,sEAK9BpE,EAAAA,EAAAA,KAAC6O,EAAAA,cAAa,CAAAhQ,UACVmB,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHzT,GAAG,wBACHmR,QAAQ,YACRuC,WAAS,EACTC,QAASA,KACDm2B,IACGtoC,OAAe0oC,iBAA+B1oC,OAAO2oC,gBAAgBj0B,QACpE,4BACA,QAGRnI,GAAQ,EAAK,EAEjBtI,MAAM,UACNmO,WAAWjP,EAAAA,EAAAA,KAACkP,EAAAA,MAAS,IAAIrQ,SAExBsF,EAAAA,KAAKC,EAAE,YAGX,E,gGCpIXjE,GAA8B,CAChCtF,KAAO2K,IAAe,CAClBQ,gBAAiBR,EAAMS,QAAQC,WAAWC,MAC1C5F,MAAO,OACP6F,OAAQ,OACR9F,QAAS,OACT+F,aAAc,MACdC,cAAe,WAEnBH,MAAO,CACHI,SAAU,IACVhG,MAAO,QAEXiG,KAAM,CACFlG,QAAS,QAEbmG,eAAgB,CACZC,SAAU,UAEdC,aAAc,CACVC,UAAW,QAEfxG,QAAS,CACLK,eAAgB,gBAChBH,QAAS,OACTC,MAAO,OACPG,WAAY,SACZ,uCAAwC,CACpCE,SAAU,SAGlBiG,OAAQ,CACJP,cAAe,UAEnBQ,WAAatB,IAAe,CACxBuB,WAAY,OACZ9F,SAAU,GACVH,MAA8B,SAAvB0E,EAAMS,QAAQe,KAAkB,OAAS,SAEpDC,sBAAwBzB,IAAe,CACnC0B,OAAQ,SACRpG,MAA8B,SAAvB0E,EAAMS,QAAQe,KAAkB,OAAS,SAEpDy+B,OAAQ,CACJ3kC,MAAO,SACP,uCAAwC,CACpCG,SAAU,UAGlBkG,OAAQ,CACJC,WAAY,GACZC,cAAe,EACfhH,SAAU,SACViH,OAAQ,EACRpB,WAAY,QACZqB,OAAQ,GAEZm+B,SAAU,CACNvkC,WAAY,YACZF,SAAU,GACVG,GAAI,OACJE,WAAY,WACZ,uCAAwC,CACpCL,SAAU,QACV0K,WAAY,IAGpBnE,KAAM,CACFjH,MAAO,GACP6F,OAAQ,GACRqB,GAAI,OACJP,OAAQ,SACR7G,SAAU,WACV,UAAW,CACPqH,QAAS,KACTrH,SAAU,WACVkH,OAAQ,EACRxG,IAAK,EACL4G,KAAM,EACNpH,MAAO,OACP6F,OAAQ,OACRF,WAAY,8CACZ0B,eAAgB,QAChB5B,gBAAiB,SAGzB6B,QAAS,CACLvH,QAAS,OACTI,WAAY,SACZgG,SAAU,UAEdoB,WAAY,CACRxH,QAAS,OACTI,WAAY,UAEhBqH,aAAc,CACVb,OAAQ,EACRc,EAAG,OACH,uCAAwC,CACpCA,EAAG,SAGXC,UAAW,CACP3G,WAAY,SACZoF,SAAU,SACVwB,aAAc,WACd,uCAAwC,CACpCjH,SAAU,UAGlByG,QAAS,CACLhB,SAAU,UAEdyB,YAAa,CACTjB,OAAQ,MACR,uCAAwC,CACpCjG,SAAU,WAehBoH,GAASzJ,IAA+D,IAA9D,KAAE6L,EAAI,SAAEnC,GAAmC1J,EAAtB6C,GAAK+G,EAAAA,EAAAA,GAAA5J,EAAA6J,IACtC,OAAQgC,GACJ,IAAK,cACD,OACIzK,EAAAA,EAAAA,KAAC2lC,EAAAA,QAAUvmC,EAAAA,EAAAA,GAAA,CACPwF,MAAO,CAAE9D,MAAO,YACZW,IAGhB,IAAK,YACD,OACIzB,EAAAA,EAAAA,KAAC4lC,EAAAA,QAAUxmC,EAAAA,EAAAA,GAAA,CACPwF,MAAO,CAAE9D,MAAO,YACZW,IAGhB,IAAK,aACD,OACIzB,EAAAA,EAAAA,KAAC6lC,EAAAA,cAAgBzmC,EAAAA,EAAAA,GAAA,CACbwF,MAAO,CAAE9D,MAAO,YACZW,IAGhB,IAAK,cACD,OACIzB,EAAAA,EAAAA,KAAC8lC,EAAAA,uBAAyB1mC,EAAAA,EAAAA,GAAA,CACtBwF,MAAO,CAAE9D,MAAO,YACZW,IAGhB,IAAK,eACD,OACIzB,EAAAA,EAAAA,KAAC+lC,EAAAA,oBAAsB3mC,EAAAA,EAAAA,GAAA,CACnBwF,MAAO,CAAE9D,MAAO,YACZW,IAGhB,IAAK,wBACD,OACIzB,EAAAA,EAAAA,KAACgmC,EAAAA,QAAU5mC,EAAAA,EAAAA,GAAA,CACPwF,MAAO,CAAE9D,MAAO,YACZW,IAGhB,IAAK,mBACD,OACIzB,EAAAA,EAAAA,KAACimC,EAAAA,gBAAkB7mC,EAAAA,EAAAA,GAAA,CACfwF,MAAO,CAAE9D,MAAO,YACZW,IAGhB,IAAK,UACD,OACIzB,EAAAA,EAAAA,KAAC0I,EAAAA,eAAQtJ,EAAAA,EAAAA,GAAA,CACL2E,GAAI,CACA9C,SAAU,GACV0K,WAAY,EACZC,YAAa,IAEbnK,IAIhB,QACI,MAAiB,WAAb6G,GAEItI,EAAAA,EAAAA,KAAC0I,EAAAA,eAAQtJ,EAAAA,EAAAA,GAAA,CACL0B,MAAM,WACFW,IAKC,SAAb6G,GAEItI,EAAAA,EAAAA,KAAC2I,EAAAA,MAAQvJ,EAAAA,EAAAA,GAAA,CACL0B,MAAM,QACFW,KAMZzB,EAAAA,EAAAA,KAAC4I,EAAAA,SAAWxJ,EAAAA,EAAAA,GAAA,CACRwF,MAAO,CAAE9D,MAAO,YACZW,IAGpB,EAkBJ,MAAMoH,GAAWC,IAAA,IAAC,SAAEjK,EAAQ,MAAEqB,EAAK,MAAE6I,EAAK,SAAEm9B,EAAQ,MAAEl9B,GAAkCF,EAAxBsT,GAAK5T,EAAAA,EAAAA,GAAAM,EAAAq9B,IAAA,OACjEnmC,EAAAA,EAAAA,KAAA,OAAAZ,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACI6J,KAAK,WACLm9B,OAAQlmC,IAAU6I,EAClB1N,GAAE,6BAAAiB,OAA+ByM,GACjC,0CAAAzM,OAAyCyM,GACzCnE,MAAOshC,GACH9pB,GAAK,IAAAvd,SAERqB,IAAU6I,IACP/I,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CAACc,MAAOoE,EAAMnK,UACdmB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAAC2B,UAAU,MAAKhH,SAAEA,QAGnC,EAyPV,GA/N0BqK,IAOoB,IAPnB,SACvBa,EAAQ,QACRX,EAAO,YACPC,EAAW,WACX3D,EAAU,UACVH,EAAS,UACT+D,GACuBJ,EACvB,MAAOhJ,EAAOmmC,IAAYrnC,EAAAA,EAAAA,UAAS,IAC5ByK,EAAUC,IAAe1K,EAAAA,EAAAA,UAAmB,KAC5C2K,EAAUC,IAAe5K,EAAAA,EAAAA,UAAS,KAClC6K,EAAcC,IAAmB9K,EAAAA,EAAAA,WAAS,GAQ3CiL,EACDV,GACD,CAACY,EAAiBC,IACdR,EAAYQ,EAAab,EAAQ,IAEnC+8B,EAAqB,SAAd/gC,EAEb,OACId,EAAAA,EAAAA,MAACgH,EAAAA,OAAM,CACHrC,QAASA,IAAMA,IACfsC,MAAM,EACN3H,GAAI,CAAE,qBAAsB5D,GAAOgG,OAAQtH,SAAA,EAE3C4F,EAAAA,EAAAA,MAAA,MAAIG,MAAOzE,GAAO2H,WAAWjJ,SAAA,EACzBmB,EAAAA,EAAAA,KAACqI,GAAM,CAACoC,KAAK,YACZtG,EAAAA,KAAKC,EAAE,mCAEZpE,EAAAA,EAAAA,KAACkM,EAAAA,cAAa,CACVtH,OAAKxF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAOe,GAAOqG,MAASrG,GAAOsG,gBACnC0F,UAAQ,EAAAtN,UAER4F,EAAAA,EAAAA,MAACX,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,GAAOtF,KAAKgE,SAAA,EAEhBmB,EAAAA,EAAAA,KAACoM,EAAAA,OAAM,CACH/L,SAAS,SACTS,MAAM,UAASjC,UAEfmB,EAAAA,EAAAA,KAACqM,EAAAA,KAAI,CACDnM,MAAOA,EACP8E,SArCHsH,CAACoI,EAAgBnI,KAClCzC,GAAgB,GAChBu8B,EAAS95B,GACT3C,EAAY,GAAG,EAmCK4C,QAAQ,aACRC,eAAa,EACbC,eAAgB45B,EAAO,UAAY,YACnC35B,UAAU,UAAS9N,SAElBpC,OAAOqO,QAAQf,GAAUqB,KAAI,CAAAm7B,EAAgB35B,KAAG,IAAjBnC,EAAMe,GAAM+6B,EAAA,OACxCvmC,EAAAA,EAAAA,KAAC6M,EAAAA,KAAGzN,EAAAA,EAAAA,GAAA,CACAwF,MAAO0hC,EAAO,CAAExlC,MAAO,SAAY,CAAEA,MAAO,SAC5C2I,SAAUA,EAAS9L,SAAS8M,GAE5BqC,MAAOtB,EAAMf,KAAKtG,EAAAA,KAAK4I,eACvBC,MACIhN,EAAAA,EAAAA,KAACqI,GAAM,CACHoC,KAAMA,EACNnC,SAAUkD,EAAMlD,YAvHjD,CACHjN,GAAG,wBAADiB,OAFSyM,EA2H+B6D,GAxH1C,gBAAgB,6BAADtQ,OAA+ByM,KAgHb0B,GAnHzC,IAAmB1B,CA4He,QAIbtM,OAAOC,KAAKqN,GAAUqB,KAAI,CAACX,EAAMmC,KAC9B5M,EAAAA,EAAAA,KAAC6I,GAAQ,CACLG,MAAO7I,GAAO4H,aAEdm+B,UAAQ9mC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAOe,GAAOwG,cAAY,IAAE7F,MAAOwlC,EAAO,aAAUr5B,IAC5D/M,MAAOA,EACP6I,MAAO6D,EAAI/N,UAEX4F,EAAAA,EAAAA,MAAA,OAAA5F,SAAA,EACImB,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,GAAO2G,WACXlC,MAAO,CAAEmC,WAAY,QAASlI,SAE7BkL,EAASU,GAAMA,KAAKtG,EAAAA,KAAK4I,kBAE9B/M,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,GAAO8G,sBAAsBpI,SAEhCkL,EAASU,GAAMyC,YAAY/I,EAAAA,KAAK4I,kBAErC/M,EAAAA,EAAAA,KAAA,OAAAnB,SACKkL,EAASU,GAAMnB,UACV7M,OAAOC,KAAKqN,EAASU,GAAMnB,WAAW8B,KAAI+B,IAAa,IAADC,EAAAC,EAClD,MAAMtE,EAAQtM,OAAOC,KAAKqN,GAAUhM,QAAQ0M,GAExCZ,GAAgB3J,IAAU6I,IAC1BkB,EAAsB,GAAD3N,OAAImO,EAAI,KAAAnO,OAAI6Q,GAAjClD,CAA6C,IAAI,GACjDH,GAAgB,IAGpB,MAAMyD,EAAkBjE,GAAaA,EAAU6D,GAC/C,IAAIH,EAAO,mBAIX,OAHmB,OAAfO,QAAe,IAAfA,GAAuB,QAARH,EAAfG,EAAiB5N,cAAM,IAAAyN,GAAvBA,EAAyBJ,MAAuB,OAAfO,QAAe,IAAfA,GAAuB,QAARF,EAAfE,EAAiB5N,cAAM,IAAA0N,GAAvBA,EAAyB5C,OAC1DuC,EAAI,WAAA1Q,OAAciR,EAAgB5N,OAAO8K,KAAI,KAAAnO,OAAIiR,EAAgB5N,OAAOqN,QAGxEvI,EAAAA,EAAAA,MAAC+I,EAAAA,UAAS,CACN5I,MAAO0hC,OAAOr5B,EAAY,CAAE/G,WAAY,aAExCyD,SAAUA,IAAQ,GAAArN,OAAQmO,EAAI,KAAAnO,OAAI6Q,GAClCnI,SAAUiF,EAAsB,GAAD3N,OAAImO,EAAI,KAAAnO,OAAI6Q,IAAYtO,SAAA,EAEvDmB,EAAAA,EAAAA,KAACyN,EAAAA,iBAAgB,CACbC,YAAY1N,EAAAA,EAAAA,KAAC2N,EAAAA,WAAc,IAC3B5J,GAAI,CAAE,iCAAkC5D,GAAOuH,SAC/C,gBAAc,mBACdrM,GAAG,kBAAiBwD,UAEpB4F,EAAAA,EAAAA,MAACP,EAAAA,WAAU,CAACU,MAAOzE,GAAO0H,QAAQhJ,SAAA,EAC9BmB,EAAAA,EAAAA,KAAC4N,EAAAA,UAAS,CACN7J,GAAI5D,GAAOqH,KACX3B,UAAU,MACVgI,MAAOb,KAEXhN,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,GAAO8H,UAAUpJ,SAEpBsO,EAAS7J,QAAQ,qBAAsB,YAIpDtD,EAAAA,EAAAA,KAAC8N,EAAAA,iBAAgB,CAAClJ,MAAOzE,GAAO0G,OAAOhI,SAClCkL,EAASU,GAAMnB,UAAU6D,GAAUpD,SAASqB,KAAI2C,IAC7CtJ,EAAAA,EAAAA,MAACP,EAAAA,WAAU,CAEP2B,UAAU,MACV9B,GAAI5D,GAAOC,QAAQvB,SAAA,EAEnBmB,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,GAAOulC,SAAS7mC,SAEnBmF,EAAAA,MAAMC,gBAAgB8J,EAAI3N,YAE/BJ,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,GAAOslC,OAAO5mC,SAEjBmF,EAAAA,MAAMwiC,WAAW,IAAIvkC,KAAK8L,EAAIjI,IAAKJ,OAdnCqI,EAAIjI,UA3BhBqH,EA8CG,IAGpB,QAEV1I,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAOgH,OAAOtI,SAAA,EACtBmB,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHtC,QAAQ,YACRuC,UAA4C,IAAjCtS,OAAOC,KAAKqN,GAAU3N,OACjCqN,SAAUA,EAAS9L,SAAS8M,GAC5B7F,MAAO6E,EAAS9L,SAAS8M,GAAQ,CAAEvE,WAAY,eAAa+G,EAC5DlJ,GAAI5D,GAAOgI,YACX6G,QAASA,KACL3F,EAAYoB,GACZf,EAAY,IAAID,EAAUgB,GAAM,EAEpC3J,MAAwC,IAAjCrE,OAAOC,KAAKqN,GAAU3N,OAAe,UAAY,OACxD6S,WAAWjP,EAAAA,EAAAA,KAACkP,EAAAA,MAAS,IAAIrQ,SAExBsF,EAAAA,KAAKC,EAAE,iBAEsB,IAAjC3H,OAAOC,KAAKqN,GAAU3N,SACnB4D,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHtC,QAAQ,YACR/C,SAAUA,EAAS9L,SAAS8M,GAC5B1G,GAAI5D,GAAOgI,YACXvD,MAAO6E,EAAS9L,SAAS8M,GAAQ,CAAEvE,WAAY,eAAa+G,EAC5D+B,QAASA,KACLtF,EAAY,IAAID,EAAUgB,IAC1BpB,EAAYoB,GACZrB,GAAS,EAEb6F,WACIxK,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAA7F,SAAA,EACImB,EAAAA,EAAAA,KAACkP,EAAAA,MAAS,KACVlP,EAAAA,EAAAA,KAACmP,EAAAA,MAAS,OAGlBrO,MAAM,UAASjC,SAEdsF,EAAAA,KAAKC,EAAE,gCAIlB,YAAA9H,OA/HWmO,YAoIjCzK,EAAAA,EAAAA,KAAC6O,EAAAA,cAAa,CAAAhQ,UACVmB,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHzT,GAAG,yBACHmR,QAAQ,YACRwC,QAASA,IAAM5F,IACf6F,WAAWjP,EAAAA,EAAAA,KAACmP,EAAAA,MAAS,IACrBrO,MAAM,OAAMjC,SAEXsF,EAAAA,KAAKC,EAAE,YAGX,ECrgBF,MAAMqiC,GAmCjB9rC,WAAAA,CAAYC,EAAyB8rC,GAAmB,KAlCvC9rC,YAAM,OAENG,cAAQ,OAEjBC,aAAO,OAEPC,eAAS,OAET0rC,UAAI,OAEJC,aAAO,OAEPC,wBAAkB,OAElBC,0BAAoB,OAEpBC,iBAAW,OAEXC,mBAAa,OAEbhK,YAAM,OAENiK,cAAQ,OAERpG,iBAAW,OAEF6F,aAAO,OAEPQ,cAAQ,OAEjBC,gBAAU,OAEVC,aAAO,OA2EfC,WAAc3f,IACV,MAAMnkB,EAAShI,KAAK+rC,aAAa5f,GAEvB,OAANnkB,QAAM,IAANA,GAAAA,EAAQgkC,UACRhsC,KAAKqrC,QAAUrrC,KAAKqrC,SAAW,GAC/BrrC,KAAKqrC,QAAQhpC,KAAK2F,EAAOgkC,SAEpBhsC,KAAK4rC,aACN5rC,KAAK4rC,WAAa94B,YAAW,KACzB9S,KAAK4rC,WAAa,KAClB,MAAMP,EAAUrrC,KAAKqrC,QACrBrrC,KAAKqrC,QAAU,KAEfrrC,KAAKR,SAASiB,SAAQwrC,GAAWA,GAAWA,EAAQZ,EAAS/qC,KAAKC,UAAU4rB,GAAMtrB,OAAS,KAAI,GAChG,MAGHmH,EAAOkkC,QACyB,UAA5BlkC,EAAOgkC,QAAQj/B,UAAwB/M,KAAKwrC,aAC5CxrC,KAAKyhC,SACLzhC,KAAKsrC,mBAAmB7qC,SAAQwrC,GAAWA,GAAWA,EAAQjsC,KAAKyhC,WAChC,SAA5Bz5B,EAAOgkC,QAAQj/B,UAAuB/M,KAAKyrC,gBAClDzrC,KAAK0rC,WACL1rC,KAAKurC,qBAAqB9qC,SAAQwrC,GAAWA,GAAWA,EAAQjsC,KAAK0rC,cAGjF,EACF,KAEF/qC,kBAAqBC,IACbA,IAAgBZ,KAAKN,WACrBM,KAAKN,WAAY,EACZM,KAAKmsC,SAAQ,KACVvrC,GAAeZ,KAAKN,YAC5BM,KAAKN,WAAY,EACrB,EA3GAM,KAAKX,OAASA,EACdW,KAAKR,SAAW,GAChBQ,KAAKP,QAAU,KAEfO,KAAKsrC,mBAAqB,GAC1BtrC,KAAKurC,qBAAuB,GAC5BvrC,KAAKwrC,aAAc,EACnBxrC,KAAKyrC,eAAgB,EACrBzrC,KAAKyhC,OAAS,EACdzhC,KAAK0rC,SAAW,EAChB1rC,KAAKslC,YAAc,GACnBtlC,KAAKN,UAAYM,KAAKX,OAAOuB,cAC7BZ,KAAKmrC,QAAUA,GAAW,IAC1BnrC,KAAKorC,KAAO,KACZprC,KAAK2rC,SACDjc,UAAU0c,QACV1c,UAAU0c,OAAOhqC,SAAS,UAC1BstB,UAAU2c,YACT3c,UAAU2c,UAAUjqC,SAAS,WAC7BstB,UAAU2c,UAAUjqC,SAAS,SAElC/C,EAAOitC,mBAAmBtsC,KAAK8rC,YAC/BzsC,EAAOoC,0BAA0BzB,KAAKW,kBAC1C,CAEA4rC,cAAAA,CAAejH,GACPA,IAAgBtlC,KAAKslC,cACrBtlC,KAAKslC,YAAcA,EACdtlC,KAAKmsC,SAAQ,GAE1B,CAEAK,iBAAAA,CAAkBC,GACd,GAAIzsC,KAAKwrC,cAAgBiB,IACrBzsC,KAAKwrC,YAAciB,GACdzsC,KAAKwrC,aAAa,CACnB,MAAM/J,EAASzhC,KAAKyhC,OACpBzhC,KAAKyhC,OAAS,EACVA,GACAzhC,KAAKsrC,mBAAmB7qC,SAAQwrC,GAAWA,GAAWA,EAAQxK,IAEtE,CAER,CAEAiL,mBAAAA,CAAoBD,GAChB,GAAIzsC,KAAKyrC,gBAAkBgB,IACvBzsC,KAAKyrC,cAAgBgB,GAChBzsC,KAAKyrC,eAAe,CACrB,MAAMC,EAAW1rC,KAAK0rC,SACtB1rC,KAAK0rC,SAAW,EACZA,GACA1rC,KAAKurC,qBAAqB9qC,SAAQwrC,GAAWA,GAAWA,EAAQP,IAExE,CAER,CAEAiB,WAAAA,GACQ3sC,KAAKyhC,SACLzhC,KAAKyhC,OAAS,EACdzhC,KAAKsrC,mBAAmB7qC,SAAQwrC,GAAWA,GAAWA,EAAQjsC,KAAKyhC,UAE3E,CAEAmL,aAAAA,GACQ5sC,KAAK0rC,WACL1rC,KAAK0rC,SAAW,EAChB1rC,KAAKurC,qBAAqB9qC,SAAQwrC,GAAWA,GAAWA,EAAQjsC,KAAK0rC,YAE7E,CAwCAxpC,eAAAA,CAAgBxB,GACPV,KAAKR,SAAS4C,SAAS1B,IACxBV,KAAKR,SAAS6C,KAAK3B,EAE3B,CAEA4B,iBAAAA,CAAkB5B,GACd,MAAM6B,EAAMvC,KAAKR,SAASgD,QAAQ9B,IAErB,IAAT6B,GACAvC,KAAKR,SAASiD,OAAOF,EAAK,EAElC,CAEA+f,yBAAAA,CAA0B5hB,GACjBV,KAAKsrC,mBAAmBlpC,SAAS1B,IAClCV,KAAKsrC,mBAAmBjpC,KAAK3B,EAErC,CAEAgiB,2BAAAA,CAA4BhiB,GACxB,MAAM6B,EAAMvC,KAAKsrC,mBAAmB9oC,QAAQ9B,IAE/B,IAAT6B,GACAvC,KAAKsrC,mBAAmB7oC,OAAOF,EAAK,EAE5C,CAEAggB,2BAAAA,CAA4B7hB,GACnBV,KAAKurC,qBAAqBnpC,SAAS1B,IACpCV,KAAKurC,qBAAqBlpC,KAAK3B,EAEvC,CAEAiiB,6BAAAA,CAA8BjiB,GAC1B,MAAM6B,EAAMvC,KAAKurC,qBAAqB/oC,QAAQ9B,IAEjC,IAAT6B,GACAvC,KAAKurC,qBAAqB9oC,OAAOF,EAAK,EAE9C,CAEAwpC,YAAAA,CAAa5f,EAAwB0gB,GAEjC,IAAK7sC,KAAKorC,KACN,OAAO,KAEX,IAAKjf,EACD,OAAO,KAUX,IAAI6f,EACAE,GAAQ,EACZ,MAAMrrC,EAASb,KAAKorC,KAAKvqC,OAGzB,GAFAgsC,EAAUA,GAAYhsC,GAAUb,KAAKorC,KAAKprC,KAAKorC,KAAKvqC,OAAS,GAAGiP,KAAQ,EAEpD,kBAATqc,EACP6f,EAAU7f,EACN0gB,GAAWA,GAAWb,EAAQzhC,GAC9ByhC,EAAQl8B,IAAM+8B,EAAU,EAExBb,EAAQl8B,IAAMk8B,EAAQzhC,OAEvB,CAEH,MAAM4wB,EAAOhP,EAAK/I,MAAM,+CAExB,GAAI+X,GAAQA,EAAKt6B,OAAS,EAAG,CACzB,IAAI0J,EAEJ,GAAIvK,KAAK2rC,SAAU,CAEf,MAAMmB,EAAK3gB,EAAK/I,MAAM,6DACtB7Y,EAAK,IAAI7D,KACL6C,SAASujC,EAAG,GAAI,IAChBvjC,SAASujC,EAAG,GAAI,IAAM,EACtBvjC,SAASujC,EAAG,GAAI,IAChBvjC,SAASujC,EAAG,GAAI,IAChBvjC,SAASujC,EAAG,GAAI,IAChBvjC,SAASujC,EAAG,GAAI,IAChBvjC,SAASujC,EAAG,GAAI,KAClBC,SACN,KAAO,CACH,MAAMD,EAAK3R,EAAK,GAAGlyB,MAAM,KACzBsB,EAAK,IAAI7D,KAAK,GAAD3F,OAAI+rC,EAAG,GAAE,KAAA/rC,OAAI+rC,EAAG,KAAMC,SACvC,CACA,IAAIj9B,EAAMvF,EAENsiC,GAAWA,GAAWtiC,IACtBuF,EAAM+8B,EAAU,GAIpB,MAAMG,EAAO7gB,EAAK/I,MAAM,iCAExB4oB,EAAU,CACNl8B,MACAk9B,KAAMA,EAAOA,EAAK,GAAGjlC,QAAQ,SAAU,IAAM,GAC7ClD,QAASsnB,EAAKljB,MAAM,YAAY,GAChC8D,SAAUof,EAAK/I,MAAM,qCAAqC,GAAGrb,QAAQ,SAAU,IAC/EwC,KAER,MACI2hC,GAAQ,EAEJrrC,IACAmrC,EAAUhsC,KAAKorC,KAAKvqC,EAAS,GACzBmrC,IAC+B,kBAApBA,EAAQnnC,QACfmnC,EAAQnnC,QAAUzE,EAAAA,EAAW6sC,kBAAkBjB,EAAQnnC,QAAQqoC,SAAW/gB,GAE1E6f,EAAQnnC,SAAWsnB,GAKvC,CAEA,IAAK6f,EACD,OAAO,KAOX,GAJ+B,kBAApBA,EAAQnnC,UACfmnC,EAAQnnC,QAAUzE,EAAAA,EAAW6sC,kBAAkBjB,EAAQnnC,UAGvDqnC,EAAO,CAEP,GAAIrrC,GAAUb,KAAKorC,KAAKvqC,EAAS,GAAGiP,IAAMk8B,EAAQl8B,IAAK,CACnD,IAAI2C,EAEJ,IAAKA,EAAI5R,EAAS,EAAG4R,GAAK,KAClBzS,KAAKorC,KAAK34B,GAAG3C,IAAMk8B,EAAQl8B,KADN2C,MAKlB,IAAPA,EACAzS,KAAKorC,KAAK+B,QAAQnB,GAElBhsC,KAAKorC,KAAK3oC,OAAOgQ,EAAI,EAAG,EAAGu5B,EAEnC,MACIhsC,KAAKorC,KAAK/oC,KAAK2pC,GAGfnrC,EAAS,IAAMb,KAAKmrC,SACpBnrC,KAAKorC,KAAKgC,OAElB,CAEA,MAAO,CAAEpB,UAASE,QACtB,CAEAC,OAAAA,CAAQrqC,GACJ,IAAK9B,KAAKslC,YACN,OAAOvjC,QAAQ2wB,QAAQ,CAAE0Y,KAAM,GAAIS,QAAS,IAGhD,IAAK/pC,GAAU9B,KAAKP,mBAAmBsC,QACnC,OAAO/B,KAAKP,QAGhB,MAAM4tC,EAAYrtC,KAAKyhC,OACjB6L,EAActtC,KAAK0rC,SA+DzB,OA9DA1rC,KAAKyhC,OAAS,EACdzhC,KAAK0rC,SAAW,EAEhB1rC,KAAKP,QAAUO,KAAKX,OACf8sC,QAAQnsC,KAAKslC,YAAa,KAC1BtkC,MAAKirB,IAAU,IAADshB,EAEX,GAA0B,oBAArBthB,QAA2Dva,KAAZ,OAALua,QAAK,IAALA,OAAK,EAALA,EAAO7iB,OAKlD,OAJApJ,KAAKorC,KAAO,GAEZ9pC,OAAOC,MAAM,kCAEN,CAAE6pC,KAAMprC,KAAKorC,KAAMS,QAAS,GAGvC,MAAM2B,EAA4BvhB,EAASA,EAAmBwhB,MAAQ,KACtE,IAOIZ,EAPAhB,EAAU,EAuCd,MArC0B,kBAAf2B,IACP3B,EAAUtiC,SAASikC,EAAY,KAGnCxtC,KAAKorC,KAAO,GAGXnf,EAAmBxrB,SAAQ0rB,IACxB,MAAMnkB,EAAShI,KAAK+rC,aAAa5f,EAAM0gB,GAC7B,OAAN7kC,QAAM,IAANA,GAAAA,EAAQgkC,UACRa,EAAU7kC,EAAOgkC,QAAQl8B,IACrB9H,EAAOkkC,OAAqC,UAA5BlkC,EAAOgkC,QAAQj/B,UAAwB/M,KAAKwrC,aAC5DxrC,KAAKyhC,SAGLz5B,EAAOkkC,OAAqC,SAA5BlkC,EAAOgkC,QAAQj/B,UAAuB/M,KAAKyrC,eAC3DzrC,KAAK0rC,WAEb,IAGS,QAAT6B,EAAAvtC,KAAKorC,YAAI,IAAAmC,GAATA,EAAW1sC,QAAUb,KAAKorC,KAAK,GAAG7gC,IAClCvK,KAAKorC,KAAKlpB,MAAK,CAAC2B,EAAGC,IAAOD,EAAEtZ,GAAKuZ,EAAEvZ,GAAK,EAAIsZ,EAAEtZ,GAAKuZ,EAAEvZ,IAAM,EAAI,IAGnEvK,KAAK6rC,QAAUA,EAGf7rC,KAAKR,SAASiB,SAAQC,GAAMA,GAAMA,EAAGV,KAAKorC,KAAMS,KAE5CwB,IAAcrtC,KAAKyhC,QACnBzhC,KAAKsrC,mBAAmB7qC,SAAQwrC,GAAWA,GAAWA,EAAQjsC,KAAKyhC,UAEnE6L,IAAgBttC,KAAK0rC,UACrB1rC,KAAKurC,qBAAqB9qC,SAAQwrC,GAAWA,GAAWA,EAAQjsC,KAAK0rC,YAGlE,CAAEN,KAAMprC,KAAKorC,KAAMS,UAAS,IAEtCzqC,OAAOC,IACJC,OAAOC,MAAM,oBAADR,OAAqBM,IAC1B,CAAE+pC,KAAMprC,KAAKorC,KAAMS,QAAS,MAGpC7rC,KAAKP,OAChB,CAEAiuC,UAAAA,GACI1tC,KAAKorC,KAAO,GACZprC,KAAK6rC,QAAU,EAEX7rC,KAAKyhC,SACLzhC,KAAKyhC,OAAS,EACdzhC,KAAKsrC,mBAAmB7qC,SAAQwrC,GAAWA,GAAWA,EAAQjsC,KAAKyhC,WAGnEzhC,KAAK0rC,WACL1rC,KAAK0rC,SAAW,EAChB1rC,KAAKurC,qBAAqB9qC,SAAQwrC,GAAWA,GAAWA,EAAQjsC,KAAK0rC,YAE7E,E,gBCnZW,MAAMiC,WAAwBxuC,GAAAA,EACzCC,WAAAA,CAAYC,GACR8G,MAAM9G,EAAQ,iBAAkB,WACpC,ECMW,MAAMuuC,WAAoBzuC,GAAAA,EAarCC,WAAAA,CAAYC,GACR8G,MAAM9G,EAAQ,cAAe,QAAQ,KAbxBwuC,cAAkE,GAAG,KAErEC,sBAAyF,GAAG,KAE5FC,YAAuC,CAAC,EAAE,KAE1CC,qBAA2F,CAAC,EAAE,KAEvGC,kBAA0D,KAAK,KAE/DC,iBAAW,OAUnBC,mBAAqB,CAACruC,EAAYwG,KAE9B,GAAIxG,EAAG4B,WAAW,iBAAmB5B,EAAGsuC,SAAS,UAAW,CACxD,IAAIluC,EAEJ,GADAJ,EAAKA,EAAGiI,QAAQ,WAAY,IACxBzB,EACA,QAA6BoL,IAAzB1R,KAAK+tC,YAAYjuC,GAAmB,CACpC,KAAME,KAAK+tC,YAAYjuC,OAAe,OAALwG,QAAK,IAALA,IAAAA,EAAOG,KAKpC,OAJAvG,EAAO,UACPF,KAAK+tC,YAAYjuC,KAAa,OAALwG,QAAK,IAALA,IAAAA,EAAOG,IAKxC,MACIvG,EAAO,MACPF,KAAK+tC,YAAYjuC,KAAa,OAALwG,QAAK,IAALA,IAAAA,EAAOG,SAEjC,KAAIzG,KAAK+tC,YAAYjuC,GAKxB,OAJAI,EAAO,iBACAF,KAAK+tC,YAAYjuC,EAI5B,CACAE,KAAK6tC,cAAcptC,SACfC,GACIA,GACAA,EAAG,CACC,CACIZ,GAAIA,EACJ0G,MAAOxG,KAAK+tC,YAAYjuC,GACxBI,WAIpB,GACF,KAgCFmuC,sBAAyBvuC,IACrB,MAAMuP,EAAOvP,EAAGiI,QAAQ,uBAAwB,MAG3C/H,KAAKkuC,aAAexnC,KAAKC,MAAQ3G,KAAKkuC,YAAc,OACjDluC,KAAKiuC,mBACLxxB,aAAazc,KAAKiuC,mBAGtBjuC,KAAKiuC,kBAAoBn7B,YACrBw7B,IACItuC,KAAKiuC,kBAAoB,KACzBjuC,KAAKguC,qBAAqBM,GAAStuC,KAAKuuC,2BAA2BD,GAAO,GAErEtuC,KAAKguC,qBAAqBM,GAAOttC,MAClC4M,GAAiBA,GAAiB5N,KAAK8tC,sBAAsBrtC,SAAQC,GAAMA,EAAGkN,MACjF,GAEL,IACAyB,GAER,EAhGArP,KAAK6tC,cAAgB,GACrB7tC,KAAK8tC,sBAAwB,GAC7B9tC,KAAKguC,qBAAuB,CAAC,EAC7BhuC,KAAK+tC,YAAc,CAAC,CACxB,CAyCAvsC,qBAAAA,CAAsBZ,GACdA,EACIZ,KAAK6tC,cAAchtC,QACdb,KAAKX,OAAOkI,eAAe,sBAAuBvH,KAAKmuC,oBAGhEjtC,OAAOC,KAAKnB,KAAK+tC,aAAattC,SAASX,GAAgBE,KAAK+tC,YAAYjuC,IAAM,GAEtF,CAEA0uC,oBAAAA,CAAqB9tC,GACZV,KAAK6tC,cAAczrC,SAAS1B,KAC7BV,KAAK6tC,cAAcxrC,KAAK3B,GAEU,IAA9BV,KAAK6tC,cAAchtC,QAAgBb,KAAKN,WACnCM,KAAKX,OAAOkI,eAAe,sBAAuBvH,KAAKmuC,oBAGxE,CAEAM,sBAAAA,CAAuB/tC,GACnB,MAAM6B,EAAMvC,KAAK6tC,cAAcrrC,QAAQ9B,IAC1B,IAAT6B,IACAvC,KAAK6tC,cAAcprC,OAAOF,EAAK,IAC1BvC,KAAK6tC,cAAchtC,QAAUb,KAAKN,WACnCM,KAAKX,OAAOqvC,iBAAiB,sBAAuB1uC,KAAKmuC,oBAGrE,CA0BAI,0BAAAA,CAA2BI,EAAgB7sC,GACvC,OAAKA,GAAU9B,KAAKguC,qBAAqBW,aAAmB5sC,UAI5D/B,KAAKguC,qBAAqBW,GAAU3uC,KAAKX,OACpCiI,SAAS,GAADvG,OAAI4tC,EAAM,WAClB3tC,MAAMsF,GACM,OAALA,QAAK,IAALA,GAAAA,EAAOG,IACAzG,KAAKX,OACPihB,iBAAiBquB,EAAQ,IACzB3tC,MAAM4M,IAAiC,CAAQ,CAAC+gC,GAAS/gC,GAAiB,SAC1ExM,OAAOC,IACJ6kB,QAAQrM,KAAK,mCAAD9Y,OAAoC4tC,EAAM,OAAA5tC,OAAMM,IACrD,CAAE,CAACstC,GAAS,SAGxB5sC,QAAQ2wB,QAAQ,CAAE,CAACic,GAAS,UAfhC3uC,KAAKguC,qBAAqBW,EAmBzC,CAEA,sBAAMruB,CAAiBquB,EAAiB7sC,GACpC,GAAI6sC,EACA,OAAO3uC,KAAKuuC,2BAA2BI,EAAQ7sC,GAInD,MACM8sC,SADc5uC,KAAKX,OAAOwvC,gBAAgB/sC,IACzB+N,KAAIR,GAAQrP,KAAKuuC,2BAA2Bl/B,EAAK1N,IAAKG,KACvEgtC,QAAiB/sC,QAAQgtC,IAAIH,GAC7B5mC,EAAoD,CAAC,EAE3D,OADA8mC,EAASruC,SAAQynB,GAAKhnB,OAAOk0B,OAAOptB,EAAQkgB,KACrClgB,CACX,CAEAoa,2BAAAA,CAA4B1hB,GACnBV,KAAK8tC,sBAAsB1rC,SAAS1B,KACrCV,KAAK8tC,sBAAsBzrC,KAAK3B,GAEU,IAAtCV,KAAK8tC,sBAAsBjtC,QAAgBb,KAAKN,YAChDM,KAAKkuC,YAAcxnC,KAAKC,MACnB3G,KAAKX,OAAOkI,eAAe,gCAAiCvH,KAAKquC,wBAGlF,CAEA5rB,6BAAAA,CAA8B/hB,GAC1B,MAAM6B,EAAMvC,KAAK8tC,sBAAsBtrC,QAAQ9B,IAElC,IAAT6B,IACAvC,KAAK8tC,sBAAsBrrC,OAAOF,EAAK,IAClCvC,KAAK8tC,sBAAsBjtC,QAAUb,KAAKN,WAC3CM,KAAKX,OAAOqvC,iBAAiB,gCAAiC1uC,KAAKquC,uBAG/E,ECpLW,MAAMW,WAAuB7vC,GAAAA,EAKxCC,WAAAA,CAAYC,GACR8G,MAAM9G,EAAQ,iBAAkB,WAAW,KAL9B4vC,wBAAkB,OAE3BC,eAAS,OAgBjBC,kBAAoB,KACZnvC,KAAKkvC,WACLzyB,aAAazc,KAAKkvC,WAEtBlvC,KAAKkvC,UAAYp8B,YAAW,KACxB9S,KAAKkvC,UAAY,KACjBlvC,KAAKivC,mBAAmBxuC,SAAQC,GAAMA,KAAK,GAC5C,IAAI,EAnBPV,KAAKivC,mBAAqB,EAC9B,CAEUhvC,aAAAA,CAAcH,EAAYC,GAChC,OAAOD,EAAGsjB,MAAM,+BAAiCrjB,GAAOA,EAAIG,OAASF,KAAKT,WAC9E,CAEUiB,cAAAA,CAAemB,EAAaC,GAClC5B,KAAKX,OAAO+vC,wBACZpvC,KAAKX,OAAOgwC,uBAAuB,GACvC,CAYAC,yBAAAA,CAA0B5uC,GACjBV,KAAKivC,mBAAmB7sC,SAAS1B,KAClCV,KAAKivC,mBAAmB5sC,KAAK3B,GAEU,IAAnCV,KAAKivC,mBAAmBpuC,QAAgBb,KAAKN,WAC7CM,KAAKX,OACAyB,gBAAgB,sBAAuBd,KAAKmvC,mBAC5C/tC,OAAMC,GAAKC,OAAOC,MAAM,+BAADR,OAAgCM,MAGxE,CAEAkuC,2BAAAA,CAA4B7uC,GACxB,MAAM6B,EAAMvC,KAAKivC,mBAAmBzsC,QAAQ9B,IAC/B,IAAT6B,GACAvC,KAAKivC,mBAAmBxsC,OAAOF,EAAK,IAGnCvC,KAAKivC,mBAAmBpuC,QAAUb,KAAKN,WACxCM,KAAKX,OACAqD,kBAAkB,sBAAuB1C,KAAKmvC,mBAC9C/tC,OAAMC,GAAKC,OAAOC,MAAM,iCAADR,OAAkCM,KAEtE,EC/CW,MAAMmuC,GAWjBpwC,WAAAA,CAAYC,GAA0B,KAVrBA,YAAM,OAENG,cAAQ,OAEjBC,aAAO,OAEPC,eAAS,OAETC,aAAO,OAcfE,oBAAsB,CAACC,EAAYC,KAG/B,IAAII,EACAD,EAHJF,KAAKL,QAAUK,KAAKL,SAAW,CAAC,EAK5BI,GACiB,aAAbA,EAAIG,MAAoC,YAAbH,EAAIG,MAC/BE,EAAAA,EAAWC,WAAWN,GAGtBC,KAAKL,QAAQG,IACbK,EAASH,KAAKL,QAAQG,GAClBQ,KAAKC,UAAUP,KAAKL,QAAQG,MAASQ,KAAKC,UAAUR,IACpDG,EAAO,UACPF,KAAKL,QAAQG,GAAMC,GAGnBG,EAAO,YAGXA,EAAO,MACPF,KAAKL,QAAQG,GAAMC,IAEhBC,KAAKL,QAAQG,IACpBK,EAASH,KAAKL,QAAQG,GACtBI,EAAO,iBACAF,KAAKL,QAAQG,IAGpBI,EAAO,UAGXF,KAAKR,SAASiB,SAAQC,GAClBA,EAAG,CACC,CACIZ,KACAC,MACAG,OACAC,aAGX,EACH,KAmBFQ,kBAAqBC,IACbA,IAAgBZ,KAAKN,WACrBM,KAAKN,WAAY,EAEbM,KAAKR,SAASqB,SACdb,KAAKX,OACAyB,gBAAgB,IAAKd,KAAKH,qBAC1BuB,OAAOC,GAAWC,OAAOC,MAAM,gCAADR,OAAiCM,MAE/DrB,KAAKiB,YAAW,GAAMD,MACvBrB,GAAWA,GAAWuB,OAAOC,KAAKxB,GAASc,SAAQX,GAAME,KAAKH,oBAAoBC,EAAIH,EAAQG,WAG9Fc,GAAeZ,KAAKN,YAC5BM,KAAKN,WAAY,EACrB,EAxFAM,KAAKX,OAASA,EACdW,KAAKR,SAAW,GAChBQ,KAAKP,QAAU,KAEfJ,EAAOoC,0BAA0BzB,KAAKW,mBAEtCX,KAAKN,UAAYM,KAAKX,OAAOuB,cAE7BZ,KAAKL,QAAU,IACnB,CAgDAsB,UAAAA,CAAWa,GACP,OAAKA,GAAU9B,KAAKP,mBAAmBsC,UAIvC/B,KAAKP,QAAUO,KAAKX,OACf4B,WAAWa,GAAQ,GACnBd,MAAMrB,IACHK,KAAKL,QAAUA,EACRK,KAAKL,WAEfyB,OAAOC,GAAWC,OAAOC,MAAM,uBAADR,OAAwBM,OAThDrB,KAAKP,OAYpB,CAoBAyC,eAAAA,CAAgBxB,GACPV,KAAKR,SAAS4C,SAAS1B,KACxBV,KAAKR,SAAS6C,KAAK3B,GAEU,IAAzBV,KAAKR,SAASqB,QAAgBb,KAAKN,WACnCM,KAAKX,OACAyB,gBAAgB,IAAKd,KAAKH,qBAC1BuB,OAAOC,GAAWC,OAAOC,MAAM,+BAADR,OAAgCM,MAG/E,CAEAiB,iBAAAA,CAAkB5B,EAAqC+uC,GACnD,MAAMltC,EAAMvC,KAAKR,SAASgD,QAAQ9B,IACrB,IAAT6B,GACAvC,KAAKR,SAASiD,OAAOF,EAAK,GAGzBvC,KAAKR,SAASqB,SAAUb,KAAKN,WAAc+vC,GAC5CzvC,KAAKX,OACAqD,kBAAkB,IAAK1C,KAAKH,qBAC5BuB,OAAOC,GAAWC,OAAOC,MAAM,iCAADR,OAAkCM,KAE7E,E,uEChIEuD,GAA8C,CAChDtF,KAAM,CAEF0F,MAAO,OACP6F,OAAQ,OACR9F,QAAS,OACT+F,aAAc,EACdC,cAAe,UAEnBH,MAAO,CACHI,SAAU,IACVhG,MAAO,OACP6f,UAAW,IACXha,OAAQ,qBAEZI,KAAM,CACFlG,QAAS,QAEbmG,eAAgB,CACZC,SAAU,UAEdmB,QAAS,CACLvH,QAAS,OACTI,WAAY,UAEhBuqC,YAAa,CACTjlC,gBAAiB,UACjB0S,QAAS,GACTzX,SAAU,IAEdiqC,WAAY,CACR3qC,MAAO,OACP0Z,aAAc,KAYhBpR,GAAoCjK,IAA0D,IAAzD,SAAEC,EAAQ,MAAEqB,EAAK,MAAE6I,EAAK,MAAE+C,EAAK,OAAEq/B,GAAkBvsC,EAAP6C,GAAK+G,EAAAA,EAAAA,GAAA5J,EAAA6J,IACxF,OAAI0iC,GACOnrC,EAAAA,EAAAA,KAAA,OAAAZ,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAASqC,GAAK,IAAA5C,SAAGqB,IAAU6I,GAASlK,MAI3CmB,EAAAA,EAAAA,KAAA,OAAAZ,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAASqC,GAAK,IAAA5C,SACTqB,IAAU6I,IACPtE,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAA7F,SAAA,EACImB,EAAAA,EAAAA,KAACoM,EAAAA,OAAM,CACH/L,SAAS,SACTS,MAAM,UAASjC,UAEfmB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO8qC,YAAYpsC,SAAEiN,OAErC9L,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CAACkE,EAAG,EAAEnJ,UACNmB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAAC2B,UAAU,MAAKhH,SAAEA,WAIvC,EAMRusC,GAA6C,CAC/CnnB,SAAU,WACVonB,SAAU,WACVC,OAAQ,SACR3V,KAAM,aACN4V,QAAS,aACT5nC,KAAM,OACN8G,KAAM,aACNqB,MAAO,cA8DX,SAAS0/B,GAAelwC,EAA0BunB,EAAgB3iB,GAC9D,MAAMurC,EAAO5oB,EAAK6lB,UACb7lB,EAAKzmB,QAGNd,EAAImwC,GAAQnwC,EAAImwC,IAAS,CAAC,EAC1BD,GAAelwC,EAAImwC,GAAO5oB,EAAM3iB,IAHhC5E,EAAImwC,GAAQvrC,CAKpB,CAEA,SAASwrC,GAAcpwC,EAA0BunB,EAAc3iB,GAG3DsrC,GAAelwC,EAFGunB,EAAKre,MAAM,KAEEtE,EACnC,CA4BA,MA0KA,GA1KgE4I,IAQzD,IAR0D,MAC7DtD,EAAK,UACLD,EAAS,UACTD,EAAS,OACT1K,EAAM,YACN+wC,EAAW,QACXviC,EAAO,aACPmW,GACHzW,EACG,MAAOnE,EAAOinC,IAAY5sC,EAAAA,EAAAA,UAAiC,CAAC,IAErDqD,EAAQwpC,IAAa7sC,EAAAA,EAAAA,UAAwE,CAChGvD,KAAM,QACN42B,MAAO,CAAC,KAGLyZ,EAAYC,IAAiB/sC,EAAAA,EAAAA,UAAoD,CAAC,GAiDzF,OA/CAK,EAAAA,EAAAA,YAAU,KAAO,IAAD2sC,EAAAC,EACZ,MAAMC,EAEF,CAAC,EACCC,EAEF,CAAC,EACU,OAAXR,QAAW,IAAXA,GAAoB,QAATK,EAAXL,EAAaJ,eAAO,IAAAS,GAApBA,EAAsBI,KAAOC,MAAMC,QAAmB,OAAXX,QAAW,IAAXA,GAAoB,QAATM,EAAXN,EAAaJ,eAAO,IAAAU,OAAT,EAAXA,EAAsBG,OACjET,EAAYJ,QAAQa,IAAIpwC,SAAQ,CAAC2H,EAAciJ,IAAiBs/B,EAAUt/B,GAAO,CAAEnR,KAAM,SAAUkI,UAEnGgoC,EAAYJ,QAAQgB,OAAOvwC,SAAQ,CAAC+b,EAAInL,KACpCs/B,EAAUt/B,EAAM,IAAExN,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACX2Y,GAAE,IACLtc,KAAM2vC,GAAMrzB,EAAGtc,MACfqR,MAAOiL,EAAGjM,MACVnI,KAAMoU,EAAGy0B,IAAMz0B,EAAGy0B,IAAIp+B,WAAa,GACnCM,KAAMqJ,EAAGy0B,IAAMz0B,EAAGy0B,IAAIp+B,WAAa,GACnC8lB,GAAI,EACJuY,SAAS,IAGG,SAAZ10B,EAAGtc,OACHywC,EAAUt/B,EAAM,GAAGzF,QAAS,EAC5B+kC,EAAUt/B,EAAM,GAAGJ,QAAU,YAC7B0/B,EAAUt/B,EAAM,GAAG8B,KAAOqJ,EAAGy0B,IAAMz0B,EAAGy0B,IAAIp+B,WAAa,GACvD89B,EAAUt/B,EAAM,GAAGjJ,KAAOoU,EAAGjM,MAC7BogC,EAAUt/B,EAAM,GAAGI,KACf,krCAGQ,aAAZ+K,EAAGtc,OACHywC,EAAUt/B,EAAM,GAAG8/B,QAAS,QAGjBz/B,IAAX8K,EAAGy0B,MACHL,EAASv/B,EAAM,GAAK,IAGR,aAAZmL,EAAGtc,OACH0wC,EAASv/B,EAAM,IAAK,EACxB,IAEJm/B,EAAcI,GACdN,EAAU,CAAEpwC,KAAM,QAAS42B,MAAO6Z,IACtC,GACD,CAACP,KAGAlnC,EAAAA,EAAAA,MAACgH,EAAAA,OAAM,CACHrC,QAASA,EACTsC,MAAM,EACN3H,GAAI,CAAE,qBAAsB5D,GAAOgG,OAAQtH,SAAA,EAE3C4F,EAAAA,EAAAA,MAAA,MAAIG,MAAOzE,GAAO0H,QAAQhJ,SAAA,EACtBmB,EAAAA,EAAAA,KAAC2sC,EAAAA,SAAY,CACT/nC,MAAO,CACH9D,MAAO,kBACPG,SAAU,GACV0K,WAAY,GACZC,YAAa,MAGpBzH,EAAAA,KAAKC,EAAE,6BAA8BunC,EAAYzuC,IAAIoG,QAAQ,kBAAmB,SAErFtD,EAAAA,EAAAA,KAACkM,EAAAA,cAAa,CACVtH,OAAKxF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAOe,GAAOqG,MAASrG,GAAOsG,gBACnC0F,UAAQ,EAAAtN,UAERmB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOtF,KAAKgE,UACpBmB,EAAAA,EAAAA,KAAC6I,GAAQ,CACL3I,MAAO,EACP6I,MAAO,EACPoiC,QAAM,EACNr/B,MAAO3H,EAAAA,KAAKC,EAAE,QAAQvF,UAEtBmB,EAAAA,EAAAA,KAACyY,EAAAA,MAAK,CAAC7T,MAAOzE,GAAO+qC,WAAWrsC,UAC5BmB,EAAAA,EAAAA,KAAC4sC,EAAAA,YAAW,CACRC,SAAU,CACNjyC,SACA2K,YACAC,QACAC,cAAc,EACdlB,SAAU,EACVmB,WAAY,aACZvK,YAAaA,OACb2xC,iBAAkBA,OAClBxoC,YAAa,QACbyoC,WAAYznC,EACZia,gBAEJnd,KAAM0pC,EACNxmC,UAAWA,EACXN,SAAU+mC,EACVhnC,QAASA,CAAC0mC,EAAcpT,IACpBuT,GAAQxsC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EAAIuF,GAAK,IAAE,CAAC8mC,GAAOpT,KAEjCh2B,OAAQA,EAERN,OAAK,EACL+gC,SAAS,EACTkK,aAAclB,EACdnsC,OAAQ,CAAC,aAM7B8E,EAAAA,EAAAA,MAACoK,EAAAA,cAAa,CAAAhQ,SAAA,EACVmB,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHzT,GAAG,4BACHmR,QAAQ,YACRuC,WAAS,EACTtF,WAAYhN,OAAOC,KAAKiI,GAAO6F,MAAKihC,GAAQ9mC,EAAM8mC,KAClDz8B,QAASA,KACL,MAAM1T,EAAuC,CAAE20B,OAAQ,CAAC,GACxD,IAAIgd,GAAM,EACVxwC,OAAOC,KAAK2F,EAAOgwB,OAAOr2B,SAASqP,IAC3BhJ,EAAOgwB,MAAMhnB,GAAKs5B,SACbmH,EAAWzgC,IAAmC,aAA3BhJ,EAAOgwB,MAAMhnB,GAAK5P,KAItCiwC,GAAcpwC,EAAK+G,EAAOgwB,MAAMhnB,GAAKZ,KAAMqhC,EAAWzgC,KAHtD4hC,GAAM,EACNnwC,MAAM,WAADR,OAAY+F,EAAOgwB,MAAMhnB,GAAKyB,SAIhCzK,EAAOgwB,MAAMhnB,GAAKZ,OACzBwiC,GAAM,EACNvB,GAAcpwC,EAAK+G,EAAOgwB,MAAMhnB,GAAKZ,KAAMqhC,EAAWzgC,IAC1D,IAEC4hC,GACD7jC,EAAQ9N,EACZ,EAEJwF,MAAM,UACNmO,WAAWjP,EAAAA,EAAAA,KAACkP,EAAAA,MAAS,IAAIrQ,SAExBsF,EAAAA,KAAKC,EAAE,YAEZpE,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHzT,GAAG,4BACHmR,QAAQ,YACRwC,QAASA,IAAM5F,IACftI,MAAM,OACNmO,WAAWjP,EAAAA,EAAAA,KAACmP,EAAAA,MAAS,IAAItQ,SAExBsF,EAAAA,KAAKC,EAAE,gBAGX,ECpWF,SAAS8oC,GAAcC,EAAmB9hC,GACrD,MAAMjJ,GAAQvF,OAAOgT,eAAiBhT,OAAOiT,cAAcC,QAAQ1E,GACnE,GAAIjJ,EACA,IACI+qC,EAAetxC,KAAKsH,MAAMf,EAC9B,CAAE,MAAAgrC,GACE,CAIR,MAAOvrC,EAAO9C,IAAYC,EAAAA,EAAAA,UAASmuC,GAOnC,MAAO,CAACtrC,EALiB0K,KACpB1P,OAAOgT,eAAiBhT,OAAOiT,cAAcyB,QAAQlG,EAAKxP,KAAKC,UAAUyQ,IAC1ExN,EAASwN,EAAS,KAGa1P,OAAOgT,eAAiBhT,OAAOiT,cAAcC,QAAQ1E,GAC5F,C,mFCyCMlL,GAA8B,CAChCtF,KAAM,CAEF0F,MAAO,OACP6F,OAAQ,OACR9F,QAAS,OACT+F,aAAc,EACdC,cAAe,UAEnBH,MAAO,CACHI,SAAU,IACVhG,MAAO,OACP6f,UAAW,IACXha,OAAQ,qBAEZI,KAAM,CACFlG,QAAS,QAEbmG,eAAgB,CACZC,SAAU,UAEdC,aAAc,CACVC,UAAW,QAEfE,WAAY,CACRC,WAAY,OACZ9F,SAAU,IAEdgG,sBAAuB,CACnBC,OAAQ,UAEZW,QAAS,CACLvH,QAAS,OACTI,WAAY,UAEhBuqC,YAAa,CACTjlC,gBAAiB,UACjB0S,QAAS,GACTzX,SAAU,IAEdosC,uBAAwB,CACpBrlC,EAAG,MACH/G,SAAU,GACVX,QAAS,OACT8H,EAAG,MACH2sB,OAAQ,sBACR1uB,aAAc,MACd3F,WAAY,SACZ2X,WAAY,6BAEhBi1B,YAAa,CACTtnC,gBAAiB,YACjB+uB,OAAQ,qBAEZwY,QAAS,CACLr7B,OAAQ,WAEZkB,MAAO,CACH,UAAW,CACPpN,gBAAiB,cAGzBwnC,eAAgB,CACZ7sC,QAAS,GACTG,MAAO,WAEX2sC,aAAc,CACV9sC,QAAS,GACTG,MAAO,WAEX4sC,SAAU,CACNntC,MAAO,KAEXq0B,MAAO,CAGH,EAEJsW,WAAY,CACR3qC,MAAO,OACP0Z,aAAc,IAElB0zB,cAAe,CACXrtC,QAAS,OACT4G,OAAQ,GACR8S,UAAW,GAEf4zB,UAAW,CACPttC,QAAS,OAETI,WAAY,SACZO,SAAU,GACV0K,WAAY,EACZ7K,MAAO,UAEX6K,WAAY,CACRA,WAAY,IAEhBkiC,QAAS,CACLn1B,QAAS,EACTxS,WAAY,WAEhB4nC,aAAc,CACVvtC,MAAO,GACP6F,OAAQ,GACRc,OAAQ,GAEZpF,WAAY,CACR6J,WAAY,IAEhBoiC,gBAAiB,CACbztC,QAAS,OACTI,WAAY,WAuBpB,SAASmI,GAAQjK,GAUsB,IAVrB,MACdgG,EAAK,SACL/F,EAAQ,MACRqB,EAAK,MACL6I,EAAK,MACL+C,EAAK,OACLq/B,EAAM,UACN6C,EAAS,MACT3jC,GAEYzL,EADT6C,GAAK+G,EAAAA,EAAAA,GAAA5J,EAAA6J,IAER,OAAI0iC,GACOnrC,EAAAA,EAAAA,KAAA,OAAAZ,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAASqC,GAAK,IAAA5C,SAAGqB,IAAU6I,GAASlK,KAE3CqB,IAAU6I,GAENtE,EAAAA,EAAAA,MAAA,OAAArF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACQqC,GAAK,IACTmD,MAAOA,EAAM/F,SAAA,EAEbmB,EAAAA,EAAAA,KAACoM,EAAAA,OAAM,CACH/L,SAAS,SACTS,MAAM,UAASjC,UAEfmB,EAAAA,EAAAA,KAAA,OAAK4E,OAAKxF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAOe,GAAO8qC,aAAW,IAAEnqC,MAAQuJ,OAAkB4C,EAAV,UAAsBpO,SAAEiN,OAEjF9L,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACAc,MAAOopC,EAAY,CAAE5nC,OAAQ,0BAAwB6G,EACrDjF,EAAG,EAAEnJ,UAELmB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACPU,MAAOopC,EAAY,CAAE5nC,OAAQ,aAAW6G,EACxCpH,UAAU,MAAKhH,SAEdA,UAMd,IACX,CAEA,MAAMovC,GAAY,CACd,CACI5yC,GAAI,WACJ6yC,SAAS,EACTC,gBAAgB,EAChBrhC,MAAO,YAEX,CACIzR,GAAI,OACJ6yC,SAAS,EACTC,gBAAgB,EAChBrhC,MAAO,QAEX,CACIzR,GAAI,cACJ6yC,SAAS,EACTC,gBAAgB,EAChBrhC,MAAO,eAEX,CACIzR,GAAI,SACJ6yC,SAAS,EACTC,gBAAgB,EAChBrhC,MAAO,WAUf,SAASshC,GAAkB3sC,GACvB,MAAM,YAAE4sC,EAAW,SAAEC,EAAQ,iBAAEC,GAAqB9sC,EAEpD,OACIzB,EAAAA,EAAAA,KAAC44B,EAAAA,UAAS,CAAA/5B,UACN4F,EAAAA,EAAAA,MAACwzB,EAAAA,SAAQ,CAAAp5B,SAAA,EACLmB,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAACzf,QAAQ,WAAU7Z,UACzBmB,EAAAA,EAAAA,KAACqR,EAAAA,SAAQ,CACLknB,cAAe8V,EAAc,GAAKA,EAAcC,EAChDh9B,QAASg9B,EAAW,GAAKD,IAAgBC,EACzCtpC,SAAW0P,GAA6B65B,EAAiB75B,GACzD2qB,WAAY,CAAE,aAAc,2BAGnC4O,GAAU7iC,KAAIojC,IACXxuC,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAEN0M,MAAO2J,EAASN,QAAU,QAAU,OACpCx1B,QAAS81B,EAASL,eAAiB,OAAS,SAAStvC,UAErDmB,EAAAA,EAAAA,KAACyuC,EAAAA,eAAc,CAAA5vC,SAAE2vC,EAAS1hC,SAJrB0hC,EAASnzC,UAUtC,CAEA,SAASqzC,GAAanD,GAClB,IAAKA,EACD,MAAO,MAEX,GAAuB,kBAAZA,EACP,OAAOA,EAEX,IAAI5nC,EAAO,GAkDX,OAhDI4nC,EAAQa,MACRzoC,GAAQQ,EAAAA,KAAKC,EAAE,OACXioC,MAAMC,QAAQf,EAAQa,MAAQb,EAAQa,IAAIhwC,QAC1CuH,GAAQ,KACJ4nC,EAAQa,IAAIhwC,QAAU,EACtBuH,GAAQ4nC,EAAQa,IAAIlP,KAAK,MAEzBv5B,GAAQQ,EAAAA,KAAKC,EAAE,aAAcmnC,EAAQa,IAAIhwC,SAEf,kBAAhBmvC,EAAQa,KAA2C,kBAAhBb,EAAQa,MACzDzoC,GAAQ,KACRA,GAAQ4nC,EAAQa,MAIpBb,EAAQzI,UACRn/B,IAASA,EAAO,KAAO,IAAMQ,EAAAA,KAAKC,EAAE,WAChCioC,MAAMC,QAAQf,EAAQzI,UAAYyI,EAAQzI,QAAQ1mC,QAClDuH,GAAQ,KACJ4nC,EAAQzI,QAAQ1mC,QAAU,EAC1BuH,GAAQ4nC,EAAQzI,QAAQ5F,KAAK,MAE7Bv5B,GAAQQ,EAAAA,KAAKC,EAAE,aAAcmnC,EAAQzI,QAAQ1mC,SAEf,kBAApBmvC,EAAQzI,SAAmD,kBAApByI,EAAQzI,UAC7Dn/B,GAAQ,KACRA,GAAQ4nC,EAAQzI,UAIpByI,EAAQoD,WACRhrC,IAASA,EAAO,KAAO,IAAMQ,EAAAA,KAAKC,EAAE,YAChCioC,MAAMC,QAAQf,EAAQoD,WAAapD,EAAQoD,SAASvyC,QACpDuH,GAAQ,KACJ4nC,EAAQoD,SAASvyC,QAAU,EAC3BuH,GAAQ4nC,EAAQoD,SAASzR,KAAK,MAE9Bv5B,GAAQQ,EAAAA,KAAKC,EAAE,aAAcmnC,EAAQoD,SAASvyC,SAEf,kBAArBmvC,EAAQoD,UAAqD,kBAArBpD,EAAQoD,WAC9DhrC,GAAQ,KACRA,GAAQ4nC,EAAQoD,WAIpBpD,EAAQ5nC,OACRA,IAASA,EAAO,KAAO,IAAM4nC,EAAQ5nC,MAElCA,CACX,CAm3BA,SAn2BA,SAAwBmF,GAYe,IAAD8lC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,IAZb,UACrB3pC,EAAS,UACTD,EAAS,OACT1K,EAAM,WACN8K,EAAU,YACVm7B,EAAW,gBACXsO,EAAe,WACf1wC,EAAU,MACVD,EAAK,QACL4K,EAAO,MACP5D,EAAK,aACL+Z,GACmBzW,EACnB,MAAOsmC,EAAMC,IAAWrwC,EAAAA,EAAAA,UAAiB,IAClCswC,EAAaC,IAAkBvwC,EAAAA,EAAAA,UAClC,CAAC,IAEEwwC,EAAiBC,IAAsBzwC,EAAAA,EAAAA,UAAkC,CAAC,IAC1E0wC,EAAgBC,IAAqB3wC,EAAAA,EAAAA,WAAkB,IACvD4wC,EAAeC,IAAoB7wC,EAAAA,EAAAA,UAAiC,OAE3EK,EAAAA,EAAAA,YAAU,MACNqd,iBACI,MAAMozB,QAAuFl1C,EAAOyI,OAChG,6BACA,cACA,MAEE0sC,EAAuC,CAAC,EACxCC,GACCnzC,OAAegT,eAA6BhT,OAAOiT,cAAcC,QAChE,+BACC,KACT,IAAIkgC,EACJ,GAAID,EACA,IACIC,EAAgBp0C,KAAKsH,MAAM6sC,EAC/B,CAAE,MAAA5C,GACE6C,EAAgB,IACpB,CAGJxzC,OAAOC,KAAKozC,GAAY9zC,SAAQqP,IAExB0kC,EAAY1kC,GADZ4kC,EACmBA,EAAc5kC,GAEN,WAARA,CACvB,IAGJokC,EAAmBM,GACnBR,EAAeO,EACnB,EAEKI,GAAYvzC,OAAMC,GAAK6kB,QAAQrM,KAAK,4BAAD9Y,OAA6BM,KAAK,GAC3E,CAAChC,KAEJyE,EAAAA,EAAAA,YAAU,MACNqd,iBACI,MAAMyzB,QAAsBv1C,EAAOmsB,UAAU,yBACvB9Z,IAAlBkjC,GACAN,EAAiBM,EAEzB,EAEAC,GAAczzC,OAAMC,GAAK6kB,QAAQrM,KAAK,iCAAD9Y,OAAkCM,KAAK,GAC7E,CAAChC,IAEJ,MAAOy1C,EAAYC,IAAiBtxC,EAAAA,EAAAA,UAAkC,CAAC,IAChEuxC,EAAkBC,IAAuBxxC,EAAAA,EAAAA,WAAS,IAClDyxC,EAAeC,IAAoB1xC,EAAAA,EAAAA,UAAiC,CAAC,IAE5EK,EAAAA,EAAAA,YAAU,KACNb,EAAMxC,SAAQ0gB,UAAqC,IAA9B,IAAExf,GAAsBgM,EACzC,MAAMynC,QAAmB/1C,EAAOiI,SAAS,GAADvG,OAAIY,EAAG,WAE/CozC,GAAcp4B,IAAI9Y,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACX8Y,GAAI,IACP,CAAChb,MAAOyzC,GAAiC,OAAnBA,EAAW3uC,QAAyB2uC,EAAW3uC,OACtE,IAGHvF,OAAOC,KAAK2zC,GAAYtxB,QAAO1T,GAAOglC,EAAWhlC,KAAMjP,OAAS,GAChEo0C,GAAoB,EACxB,GACD,CAAChyC,EAAO5D,EAAQy1C,IAEnB,MAAOO,EAAcC,IAAmB7xC,EAAAA,EAAAA,UAAS,IAC1C8xC,EAAiBC,IAAsB/xC,EAAAA,EAAAA,UAAS,IAChDgyC,EAAgBC,IAAqBjyC,EAAAA,EAAAA,UAAS,IAC9CkyC,EAAaC,IAAkBnyC,EAAAA,EAAAA,WAAS,IACxCoyC,EAAkBC,IAAuBryC,EAAAA,EAAAA,UAAS,IAClDsT,EAAUg/B,KAAetyC,EAAAA,EAAAA,UAAmB,KAC5CuyC,GAAiBC,KAAsBxyC,EAAAA,EAAAA,WAAS,IAChDyyC,GAAgBC,KAAqB1yC,EAAAA,EAAAA,UAAS,IAC9C2yC,GAAeC,KAAoB5yC,EAAAA,EAAAA,UAA8C,CAAC,IAClF6yC,GAASC,KAAc9yC,EAAAA,EAAAA,UAAS,YAChC+yC,GAAWC,IAAgB9E,IAAc,EAAM,wBAC/C+E,GAASC,IAAchF,IAAc,EAAM,sBAC3CiF,GAAmBC,KAAwBpzC,EAAAA,EAAAA,UAA4D,OACvGqzC,GAAkBC,KAAuBtzC,EAAAA,EAAAA,UAA4D,MAEtGqL,GAAsB,SAAd9E,GAEPgtC,GAAuBC,KAA4BxzC,EAAAA,EAAAA,UAA0C,CAAEixB,OAAQ,CAAC,KAExG0W,GAAM8L,KAAWzzC,EAAAA,EAAAA,UAA8B,CAAC,IAChD0zC,GAAeC,KAAoB3zC,EAAAA,EAAAA,WAAS,IAC5C4zC,GAAiBC,KAAsB7zC,EAAAA,EAAAA,UAAS,GAEjD8zC,GAAiBA,CAACroC,EAAcvK,KAClC,GAAKA,EAGL,OAAQuK,GACJ,IAAK,2BACDomC,EAAgB3wC,EAAM8B,KACtB,MACJ,IAAK,8BACD+uC,EAAmB7wC,EAAM8B,KACzB,MACJ,IAAK,6BACDivC,EAAkB/wC,EAAM8B,KACxB,MACJ,IAAK,0BACDmvC,EAAejxC,EAAM8B,KACrB,MACJ,IAAK,+BACDqvC,EAAoBnxC,EAAM8B,KAIlC,EAEE+wC,GAA2BA,CAAC13C,EAAYC,KACrCA,GAGM,qBAAPD,GACAw0C,EAAiBv0C,EACrB,GAEJ+D,EAAAA,EAAAA,YAAU,KACDzE,EAAOyB,gBAAgB,mBAAoB02C,IAC3Cn4C,EAAOkI,eAAe,2BAA4BgwC,IAClDl4C,EAAOkI,eAAe,8BAA+BgwC,IACrDl4C,EAAOkI,eAAe,6BAA8BgwC,IACpDl4C,EAAOkI,eAAe,0BAA2BgwC,IACjDl4C,EAAOkI,eAAe,+BAAgCgwC,IAEpD,KACEl4C,EAAOqD,kBAAkB,mBAAoB80C,IAC7Cn4C,EAAOqvC,iBAAiB,2BAA4B6I,IACpDl4C,EAAOqvC,iBAAiB,8BAA+B6I,IACvDl4C,EAAOqvC,iBAAiB,6BAA8B6I,IACtDl4C,EAAOqvC,iBAAiB,0BAA2B6I,IACnDl4C,EAAOqvC,iBAAiB,+BAAgC6I,GAAe,IAEjF,CAACl4C,IAEJ,MAIMo4C,GAAeA,CAAC33C,EAAY+G,IAC9BxH,EAAOo4C,aAAa33C,EAAI+G,GAAMzF,OAAOgI,GAAe9H,OAAOC,MAAM6H,KA0C/DsuC,GAAwBA,CAACC,EAAiBj3C,KAA0B,IAADk3C,EAAAC,EACrE,MAAMC,EAAqD,OAAbzD,QAAa,IAAbA,GAAqB,QAARuD,EAAbvD,EAAe3f,cAAM,IAAAkjB,OAAR,EAAbA,EAAuBG,aAAa9oC,MAC9E+oC,GAAMA,EAAGr2C,MAAQg2C,IAEf53C,EAAgC+3C,EAAcx3C,KAAKsH,MAAMtH,KAAKC,UAAUu3C,IAAgB,KAC9F,IAAInY,GAAU,EAgBA,IAADsY,GAfN,OAAHl4C,QAAG,IAAHA,GAAY,QAAT83C,EAAH93C,EAAKiwC,eAAO,IAAA6H,GAAZA,EAAclY,SAAmC,QAAxB5/B,EAAIiwC,QAAQrQ,UACrCA,GAAU,EACL5/B,EAAIqE,OAAO8zC,aACZn4C,EAAIqE,OAAO8zC,WAAU,uDAAAn3C,OAA0DhB,EAAIqE,OAAO8K,KAAI,oBAE9FnP,EAAIqE,OAAO8zC,YAA+C,kBAA1Bn4C,EAAIqE,OAAO8zC,aAC3Cn4C,EAAIqE,OAAO8zC,WAAan4C,EAAIqE,OAAO8zC,WAAWtvC,EAAAA,KAAK4I,gBAAkBzR,EAAIqE,OAAO8zC,WAAW5vC,IAE1FvI,EAAIqE,OAAO8zC,WAAsB91C,SAAS,gBAC3CrC,EAAIqE,OAAO8zC,WAAcn4C,EAAIqE,OAAO8zC,WAC/BnwC,QAAQ,aAAc,6BACtBA,QAAQ,SAAU,OAI3B43B,GACe,QAAfsY,EAAIl4C,EAAIiwC,eAAO,IAAAiI,GAAXA,EAAajH,OACb+F,GAAoB,CAAEr2C,KAAIX,QAE1BW,IAGJm2C,GAAqB,CAAEn2C,KAAIX,OAC/B,EAGEo4C,GAAmBA,CAACr4C,EAAY4nC,KAClC,MAAMl6B,EAAQuJ,EAASvU,QAAQ1C,GAAM,EACrCu2C,IAAiB+B,IAAMv0C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAUu0C,GAAM,IAAE,CAAC5qC,GAAQ,YAE9Ck6B,GACAwP,IAAQmB,IAAMx0C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAUw0C,GAAM,IAAE,CAACthC,EAASvJ,EAAQ,IAAK,CAAC5E,EAAAA,KAAKC,EAAE6+B,QAG/D3wB,EAASlW,OAAS2M,EAClBsF,YACI,IACI4kC,GAAsB3gC,EAASvJ,IAAQ,KACnC2oC,GAAkB3oC,EAAQ,GAC1B+oC,GAAW,WACXN,IAAmB,EAAK,KAEhC,KAGJmB,IAAiB,EACrB,EAGEkB,GAAexB,IACjBryC,EAAAA,EAAAA,KAAC8zC,GAAmB,CAChBl5C,OAAQA,EACR4K,MAAOA,EACPD,UAAWA,EACXD,UAAWA,EACXqmC,YAAa0G,GAAiB/2C,IAC9BikB,aAAcA,EACdnW,QAASgjB,IACL,MAAM,GAAEnwB,GAAOo2C,IACT,IAAE/2C,GAAQ+2C,GAChBC,GAAoB,MAEhBlmB,GACAomB,GAAyBpmB,GACzBnwB,KAEAy3C,GAAiBp4C,EAAI4B,IAAK,uCAC9B,IAGR,KAkBE62C,GAAgB5B,IAClBnyC,EAAAA,EAAAA,KAACg0C,GAAAA,EAAa,CACVC,YAAa9B,GAAkB72C,IAAIiwC,QAAQrQ,QAC3C/sB,IAAKgkC,GAAkB72C,IAAIqE,OAAO8zC,WAClCrqC,QAAS7F,IAAW,IAAD2wC,EACf,MAAM,GAAEj4C,EAAE,IAAEX,GAAQ62C,GACpBC,GAAqB,MAChB7uC,EAGiB,QAAf2wC,EAAI54C,EAAIiwC,eAAO,IAAA2I,GAAXA,EAAa3H,OACpB+F,GAAoB,CAAEr2C,KAAIX,QAE1BW,IAJAy3C,GAAiBp4C,EAAI4B,IAAK,8BAK9B,IAGR,KAEJ,OACIuH,EAAAA,EAAAA,MAAC0vC,EAAAA,EAAa,CAAC3uC,MAAOA,EAAM3G,SAAA,CACvBk1C,GACAF,IACDpvC,EAAAA,EAAAA,MAACgH,EAAAA,OAAM,CACHrC,QAASA,CAACsL,EAAOuuB,KACE,kBAAXA,GAAyC,kBAAXA,GAC9B75B,GACJ,EAEJsC,MAAM,EACN3H,GAAI,CAAE,qBAAsB5D,GAAOgG,OAAQtH,SAAA,EAE3C4F,EAAAA,EAAAA,MAAA,MAAIG,MAAOzE,GAAO0H,QAAQhJ,SAAA,EACtBmB,EAAAA,EAAAA,KAACo0C,EAAAA,WAAc,CACXxvC,MAAO,CACH9D,MAAO,kBACPG,SAAU,GACV0K,WAAY,GACZC,YAAa,MAGpBzH,EAAAA,KAAKC,EAAE,iCAEZpE,EAAAA,EAAAA,KAAC6xB,EAAAA,QAAO,CACJjtB,MAAOzE,GAAO0tC,QACdwG,kBAAgB,EAChBtkB,WAAYqf,EAAKvwC,SAlPnB,CAAC,iBAAkB,mBAAoB,wBAoP9BuM,KAAI0B,IACP9M,EAAAA,EAAAA,KAAC8xB,EAAAA,KAAI,CAAAjzB,UACDmB,EAAAA,EAAAA,KAAC+xB,EAAAA,UAAS,CAAAlzB,SAAEsF,EAAAA,KAAKC,EAAE0I,MADZA,QAKnB9M,EAAAA,EAAAA,KAACkM,EAAAA,cAAa,CACVtH,OAAKxF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAOe,GAAOqG,MAASrG,GAAOsG,gBACnC0F,UAAQ,EAAAtN,UAER4F,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAOtF,KAAKgE,SAAA,EACpBmB,EAAAA,EAAAA,KAAC6I,GAAQ,CACLjE,OAAKxF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAOe,GAAOwG,cAAY,IAAE7F,MAAOuJ,GAAQ,aAAU4C,IAC1D/M,MAAOkvC,EACPrmC,MAAO,EACPsB,MAAOA,GACPyB,MAAO3H,EAAAA,KAAKC,EAAE,iCAAiCvF,SAE7C6wC,EAqCEwB,IACIzsC,EAAAA,EAAAA,MAAA,OAAA5F,SAAA,CACKiyC,GAAmB,GAAE,qBAAAx0C,OACK80C,EAAgB,yBAAA90C,OACjBw0C,EAAe,KACxCpB,IACG1vC,EAAAA,EAAAA,KAACqE,EAAAA,eAAc,CACXmI,QAAQ,cACRtM,MAAO4wC,GAAmB,GAAKM,EAAmBN,IAGzDA,GAAmB,GAAE,GAAAx0C,OACb00C,EAAc,wBAAA10C,OACds0C,EAAY,wBAjD7BnsC,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAA7F,SAAA,CACK,KACDmB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO2G,WAAWjI,SAAEsF,EAAAA,KAAKC,EAAE,qBACzB,OAAbwrC,QAAa,IAAbA,GAAqB,QAARhB,EAAbgB,EAAe3f,cAAM,IAAA2e,OAAR,EAAbA,EAAuB0F,YACpBt0C,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO8G,sBAAsBpI,SACpCsF,EAAAA,KAAKC,EACF,kBACAJ,EAAAA,MAAMwiC,WAAW,IAAIvkC,KAAK2tC,EAAc3f,OAAOqkB,UAAW5uC,OAItE1F,EAAAA,EAAAA,KAAA,OAAK4E,OAAKxF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAOe,GAAO8qC,aAAW,IAAEnqC,MAAQuJ,QAAkB4C,EAAV,UAAsBpO,SACtEsF,EAAAA,KAAKC,EAAE,4BAEX3H,OAAOC,KAAK4yC,GAAalkC,KAAIC,IAC1B5G,EAAAA,EAAAA,MAAA,OAAA5F,SAAA,EACImB,EAAAA,EAAAA,KAACqR,EAAAA,SAAQ,CACLC,QAASk+B,EAAgBnkC,GACzB5B,SAAUimC,EACV1qC,SAAUA,CAAC2M,EAAGzR,KACV,MAAMq0C,EAAqB14C,KAAKsH,MAC5BtH,KAAKC,UAAU0zC,IAEnB+E,EAAmBlpC,GAAOnL,GACxBrD,OAAegT,eAAiBhT,OAAOiT,cAAcyB,QACnD,6BACA1V,KAAKC,UAAUy4C,IAEnB9E,EAAmB8E,EAAmB,IAG7ClpC,IAhBKA,WAuC1B5G,EAAAA,EAAAA,MAACoE,GAAQ,CACLjE,MAAOzE,GAAOwG,aACdzG,MAAOkvC,EACPrmC,MAAO,EACP+C,MACiB,OAAb8jC,QAAa,IAAbA,GAAqB,QAARf,EAAbe,EAAe3f,cAAM,IAAA4e,GAArBA,EAAuByF,SACjBnwC,EAAAA,KAAKC,EACD,mDACAJ,EAAAA,MAAMwiC,WAAW,IAAIvkC,KAAK2tC,EAAc3f,OAAOqkB,UAAW5uC,IAE9DvB,EAAAA,KAAKC,EAAE,kCAChBvF,SAAA,EAED4F,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAOwtC,cAAc9uC,SAAA,EAC7B4F,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAOytC,UAAU/uC,SAAA,EACzBmB,EAAAA,EAAAA,KAAA,OAAK4E,MAAQqtC,QAA+BhlC,EAArB,CAAEnM,MAAO,SAAsBjC,SACjDsF,EAAAA,KAAKC,EAAE,mBAEZpE,EAAAA,EAAAA,KAACw0C,EAAAA,OAAM,CACHljC,QAAS2gC,GACTjtC,SAAUpI,GAAKs1C,GAAWt1C,EAAEsR,OAAOoD,SACnCxQ,MAAM,aAEVd,EAAAA,EAAAA,KAAA,OAAK4E,MAAOqtC,GAAU,CAAEnxC,MAAO,cAAYmM,EAAUpO,SAAEsF,EAAAA,KAAKC,EAAE,sBAElEK,EAAAA,EAAAA,MAAA,OAAKG,OAAKxF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAOe,GAAOytC,WAAcztC,GAAOwL,YAAa9M,SAAA,EACtDmB,EAAAA,EAAAA,KAAA,OAAK4E,MAAQmtC,QAAiC9kC,EAArB,CAAEnM,MAAO,SAAsBjC,SACnDsF,EAAAA,KAAKC,EAAE,qBAEZpE,EAAAA,EAAAA,KAACw0C,EAAAA,OAAM,CACHljC,QAASygC,GACT/sC,SAAUpI,GAAKo1C,GAAap1C,EAAEsR,OAAOoD,SACrCxQ,MAAM,aAEVd,EAAAA,EAAAA,KAAA,OAAK4E,MAAOmtC,GAAY,CAAEjxC,MAAO,cAAYmM,EAAUpO,SAClDsF,EAAAA,KAAKC,EAAE,2BAIpBpE,EAAAA,EAAAA,KAACyY,EAAAA,MAAK,CAAC7T,MAAOzE,GAAO+qC,WAAWrsC,UAC5BmB,EAAAA,EAAAA,KAAC45B,EAAAA,eAAc,CAAA/6B,UACX4F,EAAAA,EAAAA,MAACk0B,EAAAA,MAAK,CACF/zB,MAAOzE,GAAOy0B,MACdrkB,KAAK,QAAO1R,SAAA,EAEZmB,EAAAA,EAAAA,KAACouC,GAAiB,CACdC,YAAa/7B,EAASlW,OACtBmyC,iBAlSV75B,IAC1B,GAAIA,EAAMxG,OAAOoD,QAAjB,CAA2B,IAADmjC,EAAAC,EACtB,MAAMC,EAA2B,OAAb/E,QAAa,IAAbA,GAAqB,QAAR6E,EAAb7E,EAAe3f,cAAM,IAAAwkB,GAAc,QAAdC,EAArBD,EAAuBnB,oBAAY,IAAAoB,OAAtB,EAAbA,EAAqCtpC,KAAIwpC,GAAKA,EAAE13C,MACpEo0C,GAAYqD,EAEhB,MACArD,GAAY,GAAG,EA6RqBhD,UAAuB,OAAbsB,QAAa,IAAbA,GAAqB,QAARd,EAAbc,EAAe3f,cAAM,IAAA6e,GAAc,QAAdC,EAArBD,EAAuBwE,oBAAY,IAAAvE,OAAtB,EAAbA,EAAqC3yC,SAAU,KAE7D4D,EAAAA,EAAAA,KAAC64B,EAAAA,UAAS,CAAAh6B,SACQ,OAAb+wC,QAAa,IAAbA,GAAqB,QAARZ,EAAbY,EAAe3f,cAAM,IAAA+e,GAAc,QAAdC,EAArBD,EAAuBsE,oBAAY,IAAArE,OAAtB,EAAbA,EACKlwB,QAAQhH,IACW,IAAD88B,EAGFC,EAHd,OAAK/C,KAGAE,MACS,OAAFl6B,QAAE,IAAFA,GAAW,QAAT+8B,EAAF/8B,EAAIwzB,eAAO,IAAAuJ,GAAXA,EAAaC,OAHH,QAAXF,EAAC98B,EAAGwzB,eAAO,IAAAsJ,GAAVA,EAAYG,OAKb,IAEd5pC,KAAI,CAAC9P,EAAUsR,KAAW,IAAAqoC,EAAAC,EAAAC,EAvSnD1qC,EAAc2tB,EAuSqC,OACvB3zB,EAAAA,EAAAA,MAACwzB,EAAAA,SAAQ,CACL7kB,OAAK,EACLnK,KAAK,WAELqJ,SAAqB,QAAb2iC,EAAE35C,EAAIiwC,eAAO,IAAA0J,OAAA,EAAXA,EAAaD,OAAOn2C,SAAA,EAE9BmB,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAACzf,QAAQ,WAAU7Z,UACzBmB,EAAAA,EAAAA,KAACqR,EAAAA,SAAQ,CACLC,SAhTxC7G,EAgT4DnP,EAAI4B,IAhTlDk7B,EAgTuD9lB,EAhT5B8lB,EAAIz6B,SAAS8M,IAiTduE,QAASpS,GA/SjDw4C,EAACjrC,EAAaM,EAAc2tB,EAAeid,KAC3D,MAAMC,EAAgBld,EAAIr6B,QAAQ0M,GAClC,IAAIkqC,EAAwB,IAEL,IAAnBW,EACAX,EAAcA,EAAYr4C,OAAO87B,EAAK3tB,GACb,IAAlB6qC,EACPX,EAAcA,EAAYr4C,OAAO87B,EAAImd,MAAM,IACpCD,IAAkBld,EAAIh8B,OAAS,EACtCu4C,EAAcA,EAAYr4C,OAAO87B,EAAImd,MAAM,GAAI,IACxCD,EAAgB,IACvBX,EAAcA,EAAYr4C,OAAO87B,EAAImd,MAAM,EAAGD,GAAgBld,EAAImd,MAAMD,EAAgB,KAG5FD,EAAKV,EAAY,EAkS2CS,CAAYx4C,EAAGtB,EAAI4B,IAAKoV,EAAUg/B,SAI9CtxC,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CACNtyB,UAAU,KACVkF,MAAM,MACN2N,QAAQ,OAAM7Z,UAEd4F,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAO4tC,gBAAgBlvC,SAAA,EAC/BmB,EAAAA,EAAAA,KAACsgB,EAAAA,OAAM,CACH9T,QAAQ,SACR2T,IAAK7kB,EAAI4B,IAAIoG,QAAQ,kBAAmB,IACxC4c,IAAgC,QAA7Bg1B,EAAEz2C,EAAWnD,EAAIqE,OAAO8K,aAAK,IAAAyqC,OAAA,EAA3BA,EAA6BloC,KAClCpI,MAAOzE,GAAO2tC,gBAElB9tC,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO2B,WAAWjD,SACzBvD,EAAI4B,IAAIoG,QAAQ,kBAAmB,YAIhDtD,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAAC0M,MAAM,OAAMhmC,SAClB0xC,GACGvwC,EAAAA,EAAAA,KAACw1C,EAAAA,eAAc,CACXvlC,WAAS,EACT4O,KAAM1a,EAAAA,KAAK4I,cACX8M,KAAMrb,EACN4F,EAAGD,EAAAA,KAAKC,EACRlE,MAAOuwC,EAAcn1C,EAAI4B,MAAQ2jC,EACjCt7B,UAAWA,EACXP,SAAUhD,GACN0uC,GAAgBtxC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EACXqxC,GAAa,IAChB,CAACn1C,EAAI4B,KAAM8E,OAKvB,OAGRhC,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CAAC0M,MAAM,OAAMhmC,SAAE6vC,GAAapzC,EAAIiwC,YAC1CvrC,EAAAA,EAAAA,KAACm4B,EAAAA,UAAS,CACN0M,MAAM,QACNnsB,QAAQ,WAAU7Z,UAElBmB,EAAAA,EAAAA,KAACqR,EAAAA,SAAQ,CACLC,UAAc,OAAHhW,QAAG,IAAHA,GAAY,QAAT65C,EAAH75C,EAAKiwC,eAAO,IAAA4J,IAAZA,EAAcJ,KACzB/lC,QAASA,KACL,MAAMskC,EAAez3C,KAAKsH,MACtBtH,KAAKC,UACY,OAAb8zC,QAAa,IAAbA,OAAa,EAAbA,EAAe3f,OAAOqjB,eAI9BA,EAAa1mC,GAAK2+B,SAAOnsC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAClBk0C,EAAa1mC,GAAK2+B,SAAO,IAC5BwJ,KAAMzB,EAAa1mC,GAAK2+B,QAAQwJ,MAG/B/B,GAAa,mBAAoB,CAClC/iB,OAAQ,CAAEqjB,iBACZ,QArETh4C,EAAI4B,IAyEF,iBAOvC8C,EAAAA,EAAAA,KAAC6I,GAAQ,CACL3I,MAAOkvC,EACPrmC,MAAO,EACPnE,OAAKxF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAOe,GAAOwG,cAAY,IAAEP,OAAQ,SACzC4nC,WAAS,EACTliC,MAAO3H,EAAAA,KAAKC,EAAE,oBAAoBvF,UAElC4F,EAAAA,EAAAA,MAAA,OAAKG,MAAO,CAAEtE,QAAS,OAAQ8F,OAAQ,QAASvH,SAAA,EAC5CmB,EAAAA,EAAAA,KAAA,OAAAnB,SACKyT,EAASlH,KAAI,CAAC2M,EAAInL,KAAG,IAAA6oC,EAAA,OAClBhxC,EAAAA,EAAAA,MAACX,EAAAA,IAAG,CACA+B,UAAU,MAEVmJ,QAAS0jC,GAAgB,IAAMG,GAAmBjmC,QAAOK,EACzDlJ,IAAE3E,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACKe,GAAOktC,wBACNqF,GAAgBvyC,GAAOotC,aAAUtgC,GACjCylC,GAAgBvyC,GAAOiT,WAAQnG,GAC/BylC,IAAiBE,KAAoBhmC,EACnCzM,GAAOmtC,iBACPrgC,GACRpO,SAAA,EAEFmB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOutC,SAAS7uC,UACxB4F,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAO4tC,gBAAgBlvC,SAAA,EAC/BmB,EAAAA,EAAAA,KAACsgB,EAAAA,OAAM,CACH9T,QAAQ,SACR2T,IAAKpI,EAAGzU,QAAQ,kBAAmB,IACnC4c,IAC+D,QAD5Du1B,EACCh3C,EAAWsZ,EAAGzU,QAAQ,kBAAmB,IAAIkB,MAAM,KAAK,WAAG,IAAAixC,OAAA,EAA3DA,EACMzoC,KAEVpI,MAAOzE,GAAO2tC,gBAElB9tC,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO2B,WAAWjD,SACzBkZ,EAAGzU,QAAQ,kBAAmB,WAI1CmuC,KAAmB7kC,EAAM,IAAM+kC,GAAc/kC,EAAM,KAChD5M,EAAAA,EAAAA,KAAC4kC,EAAAA,iBAAgB,CAACr0B,KAAM,KAEA,UAA3BohC,GAAc/kC,EAAM,IACjB5M,EAAAA,EAAAA,KAAC01C,EAAAA,cAAiB,CAAC9wC,MAAOzE,GAAOstC,eACN,YAA3BkE,GAAc/kC,EAAM,IACpB5M,EAAAA,EAAAA,KAAC21C,EAAAA,mBAAsB,CAAC/wC,MAAOzE,GAAOqtC,iBACtC,OAlCCz1B,EAmCH,MAGb05B,KAAmBF,IAAmBmB,MACnC1yC,EAAAA,EAAAA,KAAA,OAAK4E,MAAO,CAAE8B,SAAU,SAAUnG,MAAO,sBAAuB1B,UAC5DmB,EAAAA,EAAAA,KAACwQ,EAAAA,EAAO,CACJC,WAAS,EAETC,OAAK,EACL9F,KAAMi2B,EACN+U,SACIlD,GAAgB/L,GAAKr0B,EAASsgC,MAAqB,CAAC,WAAa,KAErEiD,aAAcnD,GACd93C,OAAQA,EACRwJ,EAAGD,EAAAA,KAAKC,EACR2M,IACI2hC,GACM,GAAE,GAAAp2C,OACCu1C,GAAO,KAAAv1C,OACNgW,EAASm/B,GAAiB,GACrBnuC,QAAQ,kBAAmB,IAC3BkB,MAAM,KAAK,IAG9BwM,WAAYA,CAACW,EAAGmkC,KACZ,IAAI1zC,EAAOvG,KAAKsH,MACZtH,KAAKC,UACY,OAAb8zC,QAAa,IAAbA,OAAa,EAAbA,EAAe3f,OAAOqjB,aAAa9oC,MAC9BlP,GAAaA,EAAI4B,MAAQoV,EAASm/B,GAAiB,cAIzDrvC,EAAKmpC,QAEZ,IAAIwK,EAAY3zC,EAAKlF,IAAIsH,MAAM,KAC/BuxC,EAAU/M,MACV+M,EAAYA,EAAU7Y,KAAK,KACtBtiC,EAAOmsB,UAAUgvB,GAAWx5C,MAAMjB,IACnC8G,GAAIhD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAQ9D,GAAQ8G,GACpBA,EAAKzC,OAASlD,OAAOk0B,OAAOr1B,EAAIqE,OAAQyC,EAAKzC,QAC7CyC,EAAK6tB,OAASxzB,OAAOk0B,OAAOr1B,EAAI20B,OAAQ7tB,EAAK6tB,QAC7C7tB,EAAK3G,KAAO,WAGR0zC,IACA/sC,EAAKzC,OAAOq2C,SAAW7G,GAE3B/sC,EAAKzC,OAAOq2C,SAAW5zC,EAAKzC,OAAOq2C,UAAY,OAG3CzD,GAAsBtiB,QACtBxzB,OAAOC,KAAK61C,GAAsBtiB,QAAQ7zB,SAE1CK,OAAOk0B,OAAOvuB,EAAK6tB,OAAQsiB,GAAsBtiB,QACjDuiB,GAAyB,CAAEviB,OAAQ,CAAC,KAEpCsgB,GAAoBE,EAAcruC,EAAKlF,OACvCkF,EAAKzC,OAAOiL,KAAO6lC,EAAcruC,EAAKlF,MAIrC81C,GAAa5wC,EAAKlF,IAAKkF,GAAM7F,MAAK,KACnC,GAAIk1C,GAAiBn/B,EAASlW,OAE1B62C,GAAsB3gC,EAASm/B,KAAiB,KAC5CC,GAAkBD,GAAiB,GACnCK,GAAW,UAAU,IAEzBW,IAAOrzC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EACFunC,IAAI,IACP,CAACr0B,EAASm/B,GAAiB,IAAKqE,KAEpClE,IAAgBxyC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EACXuyC,IAAa,IAChB,CAACF,IAAiB,iBAEnB,CACHgB,IAAOrzC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EACFunC,IAAI,IACP,CAACr0B,EAASm/B,GAAiB,IAAKqE,KAEpClE,IAAgBxyC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EACXuyC,IAAa,IAChB,CAACF,IAAiB,aAEtBoB,GAAmBpB,GAAiB,GACpC,MAAMtB,EAAgBt0C,KAAKsH,MACvBtH,KAAKC,UAAU8zC,IAEfO,IACAA,EAAclgB,OAAOqjB,aACjBnD,EAAclgB,OAAOqjB,aAAav0B,QAC9BwnB,IAA+B,IAA9B,IAAErpC,GAAsBqpC,EACrB,MAAM/7B,EAAO8H,EAAS9H,MAClBuN,GAAMA,IAAO7a,IAEjB,OAAKsN,GAMK,YAFNmnC,GACIr/B,EAASvU,QAAQyM,GAAQ,EACd,IAI1B5P,EAAOw2B,UACR,mBACA+e,IAGRwC,IAAiB,GACjB91C,OAAOC,MAAMqH,EAAAA,KAAKC,EAAE,YACxB,IACF,GACJ,EAENwM,UAAWA,CAACmH,EAAIk+B,KACZ,GAAW,KAAPl+B,GAAyB,YAAZ85B,GAIjB,GAAIv/B,EAASlW,OAASq1C,IAA8B,WAAZI,GACpCoB,GAAsB3gC,EAASm/B,KAAiB,IAC5CC,GAAkBD,GAAiB,KAEvCG,IAAgBxyC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EAAIuyC,IAAa,IAAE,CAACF,IAAiB,eACpD,CACH,GAAIn/B,EAASlW,OAASq1C,GAClBG,IAAgBxyC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EACXuyC,IAAa,IAChB,CAACF,IAAiB,WAEtBwB,GAAsB3gC,EAASm/B,KAAiB,IAC5CC,GAAkBD,GAAiB,KAEvCK,GAAW,WACXW,IAAOrzC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EAAIunC,IAAI,IAAE,CAACr0B,EAASm/B,GAAiB,IAAKwE,SAChD,CACHrE,IAAgBxyC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EACXuyC,IAAa,IAChB,CAACF,IAAiB,WAEtBgB,IAAOrzC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EAAIunC,IAAI,IAAE,CAACr0B,EAASm/B,GAAiB,IAAKwE,KACnDtD,IAAiB,GACjBE,GAAmBpB,GAAiB,GACpC,MAAMtB,EAAgBt0C,KAAKsH,MAAMtH,KAAKC,UAAU8zC,IAC5CO,IACAA,EAAclgB,OAAOqjB,aACjBnD,EAAclgB,OAAOqjB,aAAav0B,QAC9Bm3B,IAA+B,IAA9B,IAAEh5C,GAAsBg5C,EACrB,MAAM1rC,EAAO8H,EAAS9H,MAAK2rC,GAAOA,IAAQj5C,IAC1C,OAAKsN,GAMK,YAFNmnC,GACIr/B,EAASvU,QAAQyM,GAAQ,EACd,IAI1B5P,EAAOw2B,UAAU,mBAAoB+e,GAElD,CACAtzC,OAAOC,MAAM,SAADR,OAAUgW,EAASm/B,GAAiB,IACpD,MA/CIK,GAAW,SA+Cf,GACF,GAAAx1C,OAjKMm1C,GAAc,KAAAn1C,OAAIu1C,kBAyKtDptC,EAAAA,EAAAA,MAACoK,EAAAA,cAAa,CAAAhQ,SAAA,CACTuwC,EAAO,GAAc,IAATA,IACTpvC,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHtC,QAAQ,YACR/C,SAAmB,IAAT2lC,EACVpgC,QAASA,KACQ,IAATogC,IA9f5BkC,GAAY,IACZE,IAAmB,GACnBmB,IAAiB,GACjBjB,GAAkB,GAClBI,GAAW,WACXF,GAAiB,CAAC,IAjIOvC,EAAQD,EAAO,EA6nBN,EAEdtuC,MAAM,OACNmO,WAAWjP,EAAAA,EAAAA,KAACo2C,EAAAA,eAAkB,IAAIv3C,SAEjCsF,EAAAA,KAAKC,EAAE,UAGN,IAATgrC,IACGpvC,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHtC,QAAQ,YACRuC,WAAS,EACTtF,SAAUimC,EACV1gC,QAroBA0N,UACpBizB,GAAkB,GAClB,MAAM0G,EAAY55C,OAAOC,KAAK8yC,GAAiBzwB,QAAO1T,GAAOmkC,EAAgBnkC,KACvEykC,QAAmBl1C,EAAOyI,OAAO,6BAA8B,SAAUgzC,GAC/E1G,GAAkB,GACdG,EAAWnrC,MACX9H,OAAOC,MAAMgzC,EAAWnrC,OAExB0qC,EAAQ,EACZ,EA6nBoBvuC,MAAM,UACNmO,WAAWjP,EAAAA,EAAAA,KAACs2C,EAAAA,OAAU,IAAIz3C,SAEzBsF,EAAAA,KAAKC,EAAE,cAGN,IAATgrC,GAAuB,IAATA,IACXpvC,EAAAA,EAAAA,KAAC6L,EAAAA,QAAO,CACJE,UAAW,CAAEC,OAAQ,CAAEjI,GAAI,CAAEkI,cAAe,UAC5CH,MACa,IAATsjC,EACMjrC,EAAAA,KAAKC,EAAE,mEACP,GACTvF,UAEDmB,EAAAA,EAAAA,KAAA,QAAM4E,MAAO,CAAE+G,WAAY,GAAI9M,UAC3BmB,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHtC,QAAQ,YACR/C,UACKmmC,KACa,OAAbA,QAAa,IAAbA,GAAqB,QAARV,EAAbU,EAAe3f,cAAM,IAAAif,GAArBA,EAAuBoF,WACf,IAATlF,GACAM,GACU,IAATN,IAAe98B,EAASlW,OAE7B4S,QAASA,KAtqBdqgC,EAAQD,EAAO,GAwqBO,IAATA,GAjiBpC6D,GAAsB3gC,EAAS,IAAI,KAC/Bo/B,GAAkB,GAClBF,IAAmB,EAAK,GAiiBI,EAEJ1wC,MAAgB,IAATsuC,EAAa,UAAY,OAChCngC,UAAoB,IAATmgC,GAAapvC,EAAAA,EAAAA,KAACu2C,EAAAA,WAAc,KAAMv2C,EAAAA,EAAAA,KAACw2C,EAAAA,aAAgB,IAAI33C,SAEjEsF,EAAAA,KAAKC,EAAW,IAATgrC,EAAa,mBAAqB,wBAK1DpvC,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHtC,QAAQ,YACR/C,SAAUimC,EACV1gC,QAASA,IAAM5F,IACftI,MAAgB,IAATsuC,EAAa,UAAY,OAChCngC,WAAWjP,EAAAA,EAAAA,KAACmP,EAAAA,MAAS,IAAItQ,SAExBsF,EAAAA,KAAKC,EAAW,IAATgrC,EAAa,SAAW,mBAMxD,E,0mx2CCtmCMqH,GAAW9+B,IAAAA,MAAW,IAAM,6EAC5B++B,GAAY/+B,IAAAA,MAAW,IAAM,sFAC7Bg/B,GAAQh/B,IAAAA,MAAW,IAAM,kCACzBi/B,GAAOj/B,IAAAA,MAAW,IAAM,0DACxBk/B,GAAQl/B,IAAAA,MAAW,IAAM,qEACzBm/B,GAAUn/B,IAAAA,MAAW,IAAM,6EAC3Bo/B,GAAQp/B,IAAAA,MAAW,IAAM,kCACzBq/B,GAAQr/B,IAAAA,MAAW,IAAM,oEACzBs/B,GAAYt/B,IAAAA,MAAW,IAAM,0CAC7Bu/B,GAAQv/B,IAAAA,MAAW,IAAM,6EACzBw/B,GAAWx/B,IAAAA,MAAW,IAAM,2DAkB5B8T,GAA6B,CAAC,GAEnC5uB,OAAO0R,SAASid,QAAU,IACtBloB,QAAQ,MAAO,IACfkB,MAAM,KACNxI,SAAQyvC,IACL,MAAMrP,EAAQqP,EAAKjnC,MAAM,KACpB43B,EAAM,KAGV3Q,GAA2C2Q,EAAM,SACjCnvB,IAAbmvB,EAAM,IAA0Bgb,mBAAmBhb,EAAM,IAAG,IAGxE,MAAMj8B,GAA8B,CAChCtF,KAAM,CACFyF,QAAS,OACT8F,OAAQ,QAEZixC,OAAS7xC,IAAe,CACpB6S,WAAY7S,EAAMsT,YAAYC,OAAO,CAAC,SAAU,SAAU,CACtDC,OAAQxT,EAAMsT,YAAYE,OAAOs+B,MACjCp+B,SAAU1T,EAAMsT,YAAYI,SAASq+B,kBAG7CC,UAAW,CACPxxC,gBAAiB,WAErByxC,YAAcjyC,IAAe,CACzBjF,MAAM,eAADjE,OAAiBqc,GAAiB,OACvCvX,GAAIuX,KACJN,WAAY7S,EAAMsT,YAAYC,OAAO,CAAC,SAAU,SAAU,CACtDC,OAAQxT,EAAMsT,YAAYE,OAAOC,QACjCC,SAAU1T,EAAMsT,YAAYI,SAASC,mBAG7Cu+B,gBAAkBlyC,IAAe,CAC7BjF,MAAM,eAADjE,OAAiBsc,GAAiB,OACvCxX,GAAIwX,MACJP,WAAY7S,EAAMsT,YAAYC,OAAO,CAAC,SAAU,SAAU,CACtDC,OAAQxT,EAAMsT,YAAYE,OAAOC,QACjCC,SAAU1T,EAAMsT,YAAYI,SAASC,mBAG7Cw+B,mBAAqBnyC,IAAe,CAChCjF,MAAM,eAADjE,O/B3IuB,G+B2Ic,OAC1C8E,GAAIw2C,KACJv/B,WAAY7S,EAAMsT,YAAYC,OAAO,CAAC,SAAU,SAAU,CACtDC,OAAQxT,EAAMsT,YAAYE,OAAOC,QACjCC,SAAU1T,EAAMsT,YAAYI,SAASC,mBAG7C0+B,WAAY,CACRjsC,YAAa,IAEjBksC,KAAM,CACFx3C,QAAS,QAEboH,QAAUlC,IAAe,IAAAuyC,EAAAC,EAAAC,EAAA,MAAM,CAC3B7oC,SAAU,EACVsJ,QAAS,EACTL,WAAY7S,EAAMsT,YAAYC,OAAO,SAAU,CAC3CC,OAAQxT,EAAMsT,YAAYE,OAAOs+B,MACjCp+B,SAAU1T,EAAMsT,YAAYI,SAASq+B,gBAEzC3wC,UAAW,OACXsxC,GAAG,GAAD57C,OAAyB,QAAzBy7C,EAAKvyC,EAAMiU,OAAOC,eAAO,IAAAq+B,OAAA,EAApBA,EAAsB1X,UAAS,MACtC,sDAAuD,CAEnD6X,GAA+E,QAA3EF,EAAAxyC,EAAMiU,OAAOC,QAAQ,8DAAsD,IAAAs+B,GAA3EA,EAA6E3X,UAC3E,GAAA/jC,OACGkJ,EAAMiU,OAAOC,QAAQ,uDAAuD2mB,UAAS,WACxFpzB,GAEV,2BAA4B,CAExBirC,GAAoD,QAAhDD,EAAAzyC,EAAMiU,OAAOC,QAAQ,mCAA2B,IAAAu+B,GAAhDA,EAAkD5X,UAChD,GAAA/jC,OACGkJ,EAAMiU,OAAOC,QAAQ,4BAA4B2mB,UAAS,WAC7DpzB,GAEb,EACDkrC,cAAe,CACX/2C,IAAI,MAERg3C,kBAAmB,CACfh3C,IAAI,OAERi3C,qBAAsB,CAClBj3C,IAAI,MAERk3C,aAAe9yC,IAAe,CAC1B6S,WAAY7S,EAAMsT,YAAYC,OAAO,SAAU,CAC3CC,OAAQxT,EAAMsT,YAAYE,OAAOC,QACjCC,SAAU1T,EAAMsT,YAAYI,SAASC,iBAEzC/X,GAAI,IAERm3C,WAAY,CACRh4C,MAAO,GACP6F,OAAQ,IAGZoyC,iBAAkB,CACd,EAEJC,mBAAoB,CAChB33C,MAAO,OAEX43C,WAAY,CAAC,EACbC,YAAa,CACT3yC,gBAAiB,WAErB4yC,cAAe,CACX5yC,gBAAiB,WAErBkU,iBAAkB,CACdvZ,QAAS,EACTgL,WAAY,EACZ0M,WAAY,eACZ9X,MAAO,WAEX4Z,cAAe,CACXxZ,QAAS,GAEboQ,IAAK,CACD6R,UAAW,yCACXjiB,QAAS,IAEbk4C,SAAU,CACN/3C,MAAO,UACP8hB,UAAW,4CAEf/R,UAAYrL,IAAe,CACvB1E,MAA8B,UAAvB0E,EAAMS,QAAQe,KAAmB,UAAY,UACpD4b,UAAW,6CAEfk2B,eAAgB,CACZx4C,QAAS,OACTsL,YAAa,OACbhF,UAAW,OACXlG,WAAY,UAGhB0O,SAAU,CACNA,SAAU,GAEd2pC,UAAW,CACP94B,WAAY,OACZ3f,QAAS,gBAEb04C,SAAU,CACN3yC,aAAc,EACd9F,MAAO,GACP6F,OAAQ,GACRia,cAAe,SACf1U,WAAY,GACZC,YAAa,IAEjBqtC,SAAU,CACN54B,cAAe,SACfpf,SAAU,GACVsF,SAAU,IACVqF,YAAa,GACbtK,WAAY,SACZoF,SAAU,SACVwB,aAAc,WACd5H,QAAS,gBAEb44C,eAAiB1zC,IAAe,CAC5Ba,aAAc,EACdL,gBAAwC,SAAvBR,EAAMS,QAAQe,KAAkB,OAAS,OAC1DgB,EAAG,KAEPoS,aAAc,CACVnZ,SAAU,IAEdk4C,YAAa,CACT74C,QAAS,OACTgG,cAAe,SACfsF,YAAa,IAEjBwtC,YAAa,CACTlB,GAAI,OACJzwC,GAAI,QAERktB,SAAU,CACN1U,WAAY,OACZhf,SAAU,GACV0K,WAAY,GACZC,YAAa,GACbtL,QAAS,eACT+f,cAAe,UAEnBmV,QAAS,CACLvpB,cAAe,SAmBjBotC,GAAiD,CACnDn8C,IAAK,GACLzB,KAAM,QACNkE,OAAQ,CACJ8K,KAAM,iBACNhP,KAAM,UACN69C,MAAM,EACNC,OAAO,EACPtwC,KAAM,SAEVgnB,OAAQ,CACJngB,aAAc,CAAC,EACf01B,eAAgB,CAAC,IAwHzB,MAAMgU,WAAYloB,EAAAA,OAgDd32B,WAAAA,CAAY8G,GACRC,MAAMD,GAAO,KAhDAg4C,kBAAY,EAEe,KAC3BC,yBAAmC,IAAI,KAEhDC,gBAA4C,KAAK,KAExCC,aAAO,OAEPC,gBAAU,OAEnBC,YAA6B,KAAK,KAElCC,cAAwB,EAAE,KAE1BC,SAAiD,KAAK,KAEtDC,oBAA4D,KAAK,KAExDC,yBAAmB,OAEnBC,WAAqBh2C,EAAAA,KAAKC,EAAE,uBAAwB,MAAM,KAEnE4b,oBAAc,OAEdpC,gBAAU,OAEVF,qBAAe,OAEf9B,iBAAW,OAEXw+B,oBAAc,OAEdC,mBAAa,OAEbC,iBAAW,OAEXC,kBAA0D,KAAK,KAE/DC,iBAAW,OAEX5/C,YAAM,OAEN4mB,cAAwB,GAAG,KAE3Bi5B,aAAuB,EAAE,KA+NjCC,oBAAuBjwC,GAAsBlP,KAAK++C,YAAYrqB,OAAOngB,aAAarF,GAAM,KAExFkwC,oBAAsB,CAAClwC,EAAcvK,KACjC,GAAc,OAAVA,EACAA,EAAQ,YACL,QAAc+M,IAAV/M,EAEP,YADA3E,KAAKq/C,uBAAuBnwC,GAGhClP,KAAK++C,YAAYrqB,OAAOngB,aAAarF,GAAQvK,EAAMkO,WAEnD7S,KAAKs/C,kBAAkB,EACzB,KAEFD,uBAA0BnwC,IAClBhO,OAAOq+C,UAAUC,eAAeC,KAAKz/C,KAAK++C,YAAYrqB,OAAOngB,aAAcrF,YACpElP,KAAK++C,YAAYrqB,OAAOngB,aAAarF,GAC5ClP,KAAKs/C,mBACT,EACF,KAEFI,sBAAyBxwC,GAAsBlP,KAAK++C,YAAYrqB,OAAOuV,eAAe/6B,GAAM,KAE5FywC,sBAAwB,CAACzwC,EAAcvK,KACnC,GAAc,OAAVA,EACAA,EAAQ,YACL,QAAc+M,IAAV/M,EAEP,YADA3E,KAAK4/C,yBAAyB1wC,GAGlClP,KAAK++C,YAAYrqB,OAAOuV,eAAe/6B,GAAQvK,EAAMkO,WACrD7S,KAAKs/C,kBAAkB,EACzB,KAEFM,yBAA4B1wC,IACpBhO,OAAOq+C,UAAUC,eAAeC,KAAKz/C,KAAK++C,YAAYrqB,OAAOuV,eAAgB/6B,YACtElP,KAAK++C,YAAYrqB,OAAOuV,eAAe/6B,GAC9ClP,KAAKs/C,mBACT,EACF,KAYFO,kBAAoB,MACfv+C,OAAOgT,eAAiBhT,OAAOiT,cAAcyB,QAC1C,oBACAhW,KAAKsG,MAAMw5C,cAAgB,QAAU,QAEzC9/C,KAAKwD,SAAS,CAAEs8C,eAAgB9/C,KAAKsG,MAAMw5C,eAAgB,EAC7D,KAodFC,YAAeC,IACX,MAAM/8C,EAAuB3C,KAAKsH,MAAMtH,KAAKC,UAAUP,KAAKsG,MAAMrD,QAElE+8C,EAAOv/C,SAAS0Y,IACZ,MAAM8mC,EAAch9C,EAAMgM,MAAKI,GAAQA,EAAK1N,MAAQwX,EAAMrZ,KAC1D,GAAImgD,EAAa,CACb,MAAMzyC,EAAQvK,EAAMT,QAAQy9C,GACxB9mC,EAAMpZ,IAENkD,EAAMuK,GAAS2L,EAAMpZ,IAGrBkD,EAAMR,OAAO+K,EAAO,EAE5B,MAEIvK,EAAMZ,KAAK8W,EAAMpZ,IACrB,IAGJC,KAAKwD,SAAS,CAAEP,SAAQ,EAC1B,KAEFksC,kBAAoB,KACXnvC,KAAKkgD,yBAAyBlgD,KAAKsG,MAAMg/B,YAAa,MAAM,GAAMtkC,MAAK,IAAMklB,QAAQC,IAAI,kBAAiB,EACjH,KAEFg6B,sBAAyBH,IAGrB,MAAM78C,EAAkC7C,KAAKsH,MAAMtH,KAAKC,UAAUP,KAAKsG,MAAMnD,YAC7E,IAAIokC,GAAU,EACdyY,EAAOv/C,SAAQ0Y,IACX,MACM5U,EADQ4U,EAAMrZ,GAAGmJ,MAAM,KACP,GACH,YAAfkQ,EAAMjZ,MAAuBiZ,EAAMpZ,IAK5BoD,EAAUoB,GACjBrD,OAAOC,KAAKgC,EAAUoB,IAAU9D,SAAQyvC,IAE/B/sC,EAAUoB,GAAiC2rC,KAC3C/2B,EAAMpZ,IAAIqE,OAA+B8rC,KAEzC/sC,EAAUoB,GAAiC2rC,GAAS/2B,EAAMpZ,IAAIqE,OAC3D8rC,GAEJ3I,GAAU,EACd,KAGJpkC,EAAUoB,GAAW,CAAEP,QAASmV,EAAMpZ,IAAIqE,OAAOJ,SACjDujC,GAAU,GAlBNpkC,EAAUoB,KACVgjC,GAAU,SACHpkC,EAAUoB,GAiBzB,IAGAgjC,GACAvnC,KAAKwD,SAAS,CAAEL,aACpB,EACF,KAkGFi9C,iBAAmB,CAACC,EAAe17C,OACpB,OAALA,QAAK,IAALA,IAAAA,EAAO8B,OAAQzG,KAAKsG,MAAMg6C,gBAC5BtgD,KAAKwD,SAAS,CAAE88C,iBAAuB,OAAL37C,QAAK,IAALA,IAAAA,EAAO8B,MAC7C,EACF,KAEF85C,kBAAoB,KAChB97C,EAAAA,EAAAA,KAAC+7C,GAAe,CACZx2C,UAAWhK,KAAKsG,MAAM0D,UACtBD,UAAW/J,KAAKsG,MAAMyD,UACtBE,MAAOjK,KAAKsG,MAAM2D,MAClB5K,OAAQW,KAAKX,OACb2kB,aAAchkB,KAAKsG,MAAM0d,aAAa5f,OACtC+F,WAAYnK,KAAKsG,MAAM0d,aAAa5f,OAAO+F,WAC3Cm7B,YAAatlC,KAAKsG,MAAMg/B,YACxBsO,gBAAiB5zC,KAAKsG,MAAM0d,aAAa5f,OAAOwvC,gBAChD1wC,WAAYlD,KAAKsG,MAAMpD,WACvBD,MAAOjD,KAAKsG,MAAMrD,MAClB4K,QAASA,IAAMkoB,EAAAA,OAAOC,WAAW,QA6DoC,KAC7EyqB,uBAAyBt/B,UACrB,MAAMu/B,EAAsC,CACxC9/B,QAAS,EACTC,MAAO,GAIX,IAAKjT,EAED,YADA5N,KAAKwD,SAAS,CAAEk9C,kBAAiB9yC,cAAe,CAAC,IAIrD,IAAK,MAAM0B,KAAepO,OAAO8N,OAAOpB,GACpC,GAAgB,OAAX0B,QAAW,IAAXA,GAAAA,EAAatH,OAGlB,IAAK,MAAOwH,EAAOC,KAAiBvO,OAAOqO,QAAQD,EAAYtH,QAC3D,GAAc,WAAVwH,EAIJ,IAAK,MAAMG,KAAmBzO,OAAO8N,OAAOS,EAAaG,YACrD,IAAK,MAAM+wC,KAAmBz/C,OAAO8N,OAAOW,EAAgB5B,WAAY,CAEpE2yC,EAD+C,UAA7B/wC,EAAgB5C,SACN,UAAY,UAAY4zC,EAAgBnyC,SAAS3N,MACjF,CAKZ,MAAMkN,QAAkB/N,KAAKmiB,gBAAgBlhB,aAE7CjB,KAAKwD,SAAS,CAAEk9C,kBAAiB9yC,cAAe,CAAEA,gBAAeG,cAAc,EAGnF,KAMA6yC,oBAAsBz/B,MAClBvT,EACAyB,KAEA,IAAKzB,IAAkBA,EAAcyB,KAAUzB,EAAcyB,GAAMrH,OAC/D,OAGJ,MAAMA,EAAS4F,EAAcyB,GAAMrH,OAEzB,OAANA,QAAM,IAANA,GAAAA,EAAQgZ,QAAU9f,OAAOC,KAAK6G,EAAOgZ,OAAOpR,YAAY/O,cAClDb,KAAKmiB,gBAAgBlhB,aAAaD,MAAK+M,GACzC/N,KAAKwD,SAAS,CACVq9C,gBAAiB,CACbxxC,OACAtB,YACA/F,aAIhB,EAGJ,KAGA84C,OAAS3/B,MAAOxf,EAAao/C,KACzB,IACI,IAAK/gD,KAAKsG,MAAM0d,aAAa5f,OAAOwwB,iBAChC,OAGJ,MAAMosB,QAAmBhhD,KAAKX,OAAOiI,SAAS,SAADvG,OAAUf,KAAKk/C,aAAY,qBACxE,GAAY,OAAR6B,QAAQ,IAARA,GAAAA,EAAUt6C,IAAK,CAAC,IAADw6C,EACf,IAAIC,EAAO,KACX,IACIA,EAAO5gD,KAAKsH,MAAMm5C,EAASt6C,IAC/B,CAAE,MAAAorC,GACE3rB,QAAQ9c,MAAM,sBAADrI,OAAuBggD,EAASt6C,KACjD,CAEA,GAAQ,QAAJw6C,EAAAC,SAAI,IAAAD,GAAJA,EAAMpgD,QAAUqgD,EAAK,GAAGphD,MAAiB,OAAVkhD,QAAU,IAAVA,OAAU,EAAVA,EAAYv6C,KAAK,CAChD,MAAM24B,QAAqBp/B,KAAKX,OAAO8hD,UACjCC,QAmBWphD,KAAKX,OAAOgiD,YAAYrhD,KAAKsG,MAAMg/B,aAAalkC,OAAM,IAAY,OAE7E2M,QAA8D/N,KAAKX,OACpE0jB,sBACA3hB,OAAM,IAAY,OAEjBkgD,SAA+BthD,KAAKX,OAAOosB,YAAYzrB,KAAKsG,MAAMg/B,YAAa,WAChFic,YAEC5hD,QAAgBK,KAAK8+C,cAAc79C,YAAW,GAC9CugD,EAAYtgD,OAAOC,KAAKxB,GAAW,CAAC,GAAGkB,OAEvC4gD,GAAYC,EAAAA,GAAAA,GAAcR,EAAgB,OAAVF,QAAU,IAAVA,OAAU,EAAVA,EAAYv6C,IAAe,CAC7D6c,KAAM1a,EAAAA,KAAK4I,cACXmwC,SAAU3hD,KAAKsG,MAAMq7C,SACrB5zC,UAAWA,GAAa,CAAC,EACzB6zC,YAAaR,GAAOA,EAAK,YAAoB,IAC7CS,WAAYT,GAAOA,EAAKU,KAAa,IACrCC,GAAIX,GAAOA,EAAKW,IAAY,IAC5BtvB,WAAYzyB,KAAKsG,MAAM0d,aAAa5f,OAAOquB,WAC3C2M,OACAkiB,gBACAE,cAGS,OAATC,QAAS,IAATA,GAAAA,EAAW5gD,QACXb,KAAKwD,SAAS,CACVw+C,SAAU,CACNP,YACAT,WAAsB,OAAVA,QAAU,IAAVA,OAAU,EAAVA,EAAYv6C,MAIxC,CACJ,CACJ,CAAE,MAAOpF,GACL6kB,QAAQ9c,MAAM,2BAADrI,OAA4BM,EAAE4gD,QAC3CjiD,KAAKkiD,UAAU,2BAADnhD,OAA4BM,EAAE4gD,OAAS,QACzD,GACF,KA2FFE,kBAAqB7c,IAA+B,IAAD8c,EAChC,QAAfA,EAAApiD,KAAKqiB,kBAAU,IAAA+/B,GAAfA,EAAiB7V,eAAejH,EAAY,EAGhD,KAGA+c,cAAgB,KACZriD,KAAKwD,SAAS,CAAE4hB,WAAY2Q,EAAAA,OAAOusB,gBAAiB,IAAMtiD,KAAKuiD,sBAAqB,EAyDxD,KAChClsB,YAAemsB,IACX,MAAMz4C,EAAY/J,KAAKsG,MAAMyD,UAEvB04C,EAAeD,GAAoB/5C,EAAAA,MAAM4tB,YAAYtsB,GAErDE,EAAQg0C,GAAIyE,YAAYD,GAE9BziD,KAAKwD,SACD,CACIyG,QACAF,UAAW04C,EACXz4C,UAAWi0C,GAAI0E,aAAa14C,KAEhC,KAAO,IAAD24C,EAAAC,EACkB,QAApBD,EAAA5iD,KAAKo+C,uBAAe,IAAAwE,GAAe,QAAfC,EAApBD,EAAsBE,qBAAa,IAAAD,GAAnCA,EAAqCE,YAAY,cAAe,IAAI,GAE3E,EACH,KA8WFx+B,iBAAmB,CAACpN,EAAa6rC,EAAiBC,KAC1C9rC,IACInX,KAAKsG,MAAM48C,WACXntB,EAAAA,OAAOC,WAAW7e,EAAK6rC,EAAQC,GAE/BjjD,KAAKwD,SAAS,CAAE4hB,WAAY2Q,EAAAA,OAAOusB,iBAEnCtiD,KAAKwD,SAAS,CACV2/C,qBAAqB,EACrBC,iBAAkB,CAAEjsC,MAAK6rC,SAAQC,YAKpB,OAArBjjD,KAAKkG,MAAMlB,OAAuC,OAArBhF,KAAKkG,MAAMlB,OACxChF,KAAKqjD,kBAAkBC,IAG3BnsC,EAAMA,GAAQnX,KAAKsG,MAAM8e,YAAcplB,KAAKsG,MAAM8e,WAAWjO,KAAQ,GAErEnX,KAAKujD,SAASpsC,EAAIpP,QAAQ,OAAQ,IAAI,EAppDtC,IACIzG,OAAOC,MAAQsD,IACPA,GAAWA,EAAQgO,WAAW+Q,cAAcxhB,SAAS,UACrD8jB,QAAQ9c,MAAMvE,GACd7E,KAAKkiD,UAAUr9C,EAAQgO,WAAY,WAEnCqT,QAAQC,IAAIthB,GACZ7E,KAAKkiD,UAAUr9C,EAAQgO,WAAY,QACvC,CAER,CAAE,MAAA2wC,GACE,CAIJxjD,KAAKk+C,aAAeuF,EAAAA,WAEpB,MAAMvF,EAAmE,CACrE51C,GAAIo7C,GACJ55B,GAAI65B,GACJ55B,GAAI65B,GACJ35B,GAAI45B,GACJ35B,GAAI45B,GACJ95B,GAAI+5B,GACJ9/B,GAAI+/B,GACJ75B,GAAI85B,GACJtqC,GAAIuqC,GACJ95B,GAAI+5B,GACJ,QAASC,IAIbljD,OAAOC,KAAK+8C,GAAcz9C,SAAS6iB,GAC/BpiB,OAAOk0B,OAAOp1B,KAAKk+C,aAAa56B,GAAO46B,EAAa56B,MAIxD1a,EAAAA,KAAKy7C,gBAAgBrkD,KAAKk+C,cAC1Bt1C,EAAAA,KAAK4jB,aACAlrB,OAAOouB,UAAUqF,UAAYzzB,OAAOouB,UAAU40B,cAAgB,MAC1D5gC,UAAU,EAAG,GACbE,eAGT5jB,KAAKq+C,QAAUjiC,IAAAA,YACfpc,KAAKs+C,WAAaliC,IAAAA,YAClBpc,KAAKykB,eAAiB,CAClBrd,MAAO,CACHqe,KAAM,CAAC,EACP8F,SAAU,CAAC,EACXo2B,SAAU,CAAC,EACXriB,MAAO,CAAC,IAIhB,MAAMilB,EAAejjD,OAAOijD,aAG5B,GAFAvkD,KAAK2+C,qBAAuB4F,GAAiC,qBAAjBA,GAAwD,OAAjBA,EAE9Er0B,GAAMoP,MAuHJ,CACH,MAAMr1B,EAAQg0C,GAAIyE,cAClB1iD,KAAKsG,MAAQ,CACTg5B,OAAO,EACPr1B,QACAF,UAAWk0C,GAAIuG,aAAav6C,GAC5BD,UAAWi0C,GAAI0E,aAAa14C,GAEpC,KA/HkB,CACd,MAAMw6C,GAAkBnjD,OAAOgT,eAAiBhT,OAAOiT,cAAcC,QAAQ,mBAC7E,IAAIkwC,EAEAA,EADAD,EACcl7C,SAASk7C,EAAgB,IAEJ,OAArBzkD,KAAKkG,MAAMlB,MAAkBs+C,GAA6BA,GAG5E,MAAMr5C,EAAQg0C,GAAIyE,cAGlBxhD,OAAOyjD,eAAerjD,OAAQ,iBAAkB,CAC5CsjD,IAAKA,IAAM5kD,KAAKsG,MAAMu+C,eACtB5gB,IAAK4gB,IACD,MAAM3B,GAAa2B,EACf3B,IAAcljD,KAAKsG,MAAM48C,WACzBljD,KAAKwD,SAAS,CAAE0/C,aACpB,EAEJ4B,cAAc,IAGlB9kD,KAAKsG,MAAQ,CACT5G,WAAW,EACX0oC,SAAU,EACVjzB,OAAO,EACPmO,KAAM,KAEN0C,SAAU1kB,OAAO0R,SAASgT,SAE1BygB,YAAY,EAEZxjC,MAAO,GACPqiC,YAAa,GACbyf,gBAAiB,GACjBC,QAAS,GACT5/B,WAAY2Q,EAAAA,OAAOusB,cACnBt+B,aAAc,KACdihC,KAAM,KAEN/hD,WAAY,CAAC,EACbC,UAAW,CAAC,EAEZ+hD,gBAAgB,EAChB5uC,KAAM,KACN0tB,OAAQ,CAAC,EAETmhB,cAAc,EAEdl7C,QACAF,UAAWk0C,GAAIuG,aAAav6C,GAC5BD,UAAWi0C,GAAI0E,aAAa14C,GAE5B1I,OAAO,EACP6jD,UAAW,OACXC,aAAc,GACdX,cACA3qC,cAAc,EAEd5C,IAAK,KACL+rC,WAAW,EACXC,qBAAqB,EACrBC,iBAAkB,KAElBkC,oBAAoB,EACpBC,qBAAqB,EACrBC,sBAAsB,EAEtBhwC,IAAK,KACLiwC,WAAW,EACXC,YAAa,KACbtwC,cAAc,EACduwC,gBAAgB,EAEhBC,QAAQ,EACRtwC,WAAW,EAEXgrC,gBAAgB,EAEhBuF,cAAeC,GAAAA,EAAiCC,mBAChDC,2BAA2B,EAG3BC,mBAAmB,EAEnBjhC,aAAc,GAEdkhC,oBAAqB,EAErBpG,cAA8F,WAA9Ex+C,OAAOgT,eAAiBhT,OAAOiT,cAAcC,QAAQ,qBAErE2xC,mBAAmB,EACnBC,eAAgB,EAEhBC,aAAc,GACdC,kBAAmB,EAEnBC,qBAAsB,EAEtBC,UAAU,EAEVC,qBAAqB,EAErB74C,cAAe,CAAC,EAEhB8yC,gBAAiB,CACb9/B,QAAS,EACTC,MAAO,GAGXgkC,gBAAgB,EAChBvlB,OAAO,EACPuhB,gBAAiB,KACjBc,SAAU,CAAC,GAEf3hD,KAAKqiB,WAAa,KAClBriB,KAAKmiB,gBAAkB,KACvBniB,KAAKqgB,YAAc,IACvB,CASJ,CAEA,+BAAOqmC,CAAyBt9C,GAI5B,MAAO,CAAEu9C,eAAgBv9C,EAC7B,CAEAw9C,iBAAAA,CAAkBx9C,GACdpJ,KAAKwD,SAAS,CAAEmjD,eAAgBv9C,GACpC,CAEAy9C,cAAAA,CAAeC,GACPA,IAAmB9mD,KAAKsG,MAAMi/C,qBAC9BvlD,KAAKwD,SAAS,CAAE+hD,oBAAqBuB,GAE7C,CAGAC,oBAAAA,CAAqBxhD,GACjB,IAAKA,EACD,OAAO,EAEX,MAAMyhD,EAAgBv+C,EAAAA,MAAM+Q,YAAYjU,GAAO,GAC/C,MAAsB,YAAlByhD,GAAwD,SAAzBhnD,KAAKsG,MAAM0D,WAIrB,YAAlBg9C,GAAwD,UAAzBhnD,KAAKsG,MAAM0D,SACrD,CA2CAs1C,gBAAAA,GACQt/C,KAAKg/C,mBACLviC,aAAazc,KAAKg/C,mBAEtBh/C,KAAKg/C,kBAAoBlsC,YAAWqO,UAChCnhB,KAAKg/C,kBAAoB,WACnBh/C,KAAKX,OAAOw2B,UAAU,kBAAD90B,OAAmBf,KAAKimB,cAAa,gBAAgBjmB,KAAK++C,YAAY,GAClG,IACP,CAUA,oBAAMkI,GAAiC,IAADC,EAClC,IAAInnD,EAqBAuG,EAnBJ,GAAKtG,KAAKimB,cAAV,CAIA,IACIlmB,QAAYC,KAAKX,OAAOmsB,UAAU,kBAADzqB,OAAmBf,KAAKimB,cAAa,gBAC1E,CAAE,MAAO5kB,GACL6kB,QAAQrM,KAAK,iCAAD9Y,OAAkCf,KAAKimB,cAAa,mBAAAllB,OAAkBM,EAAEwD,SACxF,CAEA,IAAK9E,EAAK,CACNA,EAAMO,KAAKsH,MAAMtH,KAAKC,UAAUu9C,KAChC,UACU99C,KAAKX,OAAOw2B,UAAU,kBAAD90B,OAAmBf,KAAKimB,cAAa,gBAAgBlmB,EACpF,CAAE,MAAOsB,GACL6kB,QAAQrM,KAAK,oCAAD9Y,OAAqCf,KAAKimB,cAAa,mBAAAllB,OAAkBM,GACzF,CACJ,CAGA,IACIiF,QAActG,KAAKX,OAAOiI,SAAS,kBAADvG,OAAmBf,KAAKimB,cAAa,gBAC3E,CAAE,MAAAkhC,GACE7gD,EAAQ,CAAEG,KAAK,EACnB,CACA,GAAS,QAATygD,EAAI5gD,SAAK,IAAA4gD,GAALA,EAAOzgD,IAAK,CACZzG,KAAK++C,YAAch/C,EACnBC,KAAK++C,YAAYrqB,OAAS10B,KAAK++C,YAAYrqB,QAAU,CAAEngB,aAAc,CAAC,EAAG01B,eAAgB,CAAC,GACrFjqC,KAAK++C,YAAYrqB,OAAOngB,eACzBvU,KAAK++C,YAAYrqB,OAAS,CAAEngB,aAAcvU,KAAK++C,YAAYrqB,OAAQuV,eAAgB,CAAC,IAIxF3oC,OAAOgT,cAAgB,CACnBE,QAASxU,KAAKm/C,oBACdnpC,QAAShW,KAAKo/C,oBACdgI,WAAYpnD,KAAKq/C,wBAGrB/9C,OAAO0oC,gBAAkB,CACrBx1B,QAASxU,KAAK0/C,sBACd1pC,QAAShW,KAAK2/C,sBACdyH,WAAYpnD,KAAK4/C,0BAIrB,MAAM6E,GAAkBnjD,OAAOgT,eAAiBhT,OAAOiT,cAAcC,QAAQ,mBAC7E,IAAIkwC,EAEAA,EADAD,EACcl7C,SAASk7C,EAAgB,IAEJ,OAArBzkD,KAAKkG,MAAMlB,MAAkBs+C,GAA6BA,GAE5E,MAAMxD,EAC6E,WAA9Ex+C,OAAOgT,eAAiBhT,OAAOiT,cAAcC,QAAQ,qBAE1DxU,KAAKwD,SAAS,CAAEu7C,aAAa,EAAM2F,cAAa5E,kBAAiB,KACzDr3C,EAAAA,MAAM+7C,iBAAmBxkD,KAAKsG,MAAM2D,MAAMiF,MAC1ClP,KAAKq2B,YAAY5tB,EAAAA,MAAM+7C,eAC3B,GAER,MAAWxkD,KAAKsG,MAAMy4C,cAClBz9C,OAAOgT,cAAgB,KACvBhT,OAAO0oC,gBAAkB,KAEzBhqC,KAAKwD,SAAS,CAAEu7C,aAAa,IA/DjC,CAiEJ,CAEAsI,iBAAAA,CAAkBC,EAAkBC,GAC5BD,IAAYtnD,KAAK++C,YACZ/+C,KAAKX,OAAOmsB,UAAU,kBAADzqB,OAAmBf,KAAKimB,cAAa,iBAAgBjlB,MAAKmgB,UAChFnhB,KAAK++C,YAAch/C,GAAOO,KAAKsH,MAAMtH,KAAKC,UAAUu9C,MAEhDyJ,GAAgBvnD,KAAK++C,YAAYrqB,QAAWxzB,OAAOC,KAAKnB,KAAK++C,YAAYrqB,QAAQ7zB,cAiC3Eb,KAAKX,OAAOmE,SAAS,kBAADzC,OAAmBf,KAAKimB,cAAa,gBAAgB,CAC3Exf,KAAK,EACL+yC,KAAK,IAETl4C,OAAO0R,SAAS2zB,WApChB3mC,KAAK++C,YAAYrqB,OAAS,CAAEngB,aAAc,CAAC,EAAG01B,eAAgB,CAAC,GAC/D/oC,OAAOC,KAAKG,OAAOiT,cAAc9T,SAAQyO,IAExB,YAATA,GACS,YAATA,GACS,eAATA,GACS,UAATA,GACS,QAATA,GACS,WAATA,IAEAlP,KAAK++C,YAAYrqB,OAAOngB,aAAarF,GAAQ5N,OAAOiT,aAAaC,QAAQtF,GAC7E,IAGJhO,OAAOC,KAAKG,OAAO2oC,gBAAgBxpC,SAAQyO,IAE1B,YAATA,GACS,YAATA,GACS,eAATA,GACS,UAATA,GACS,QAATA,GACS,WAATA,IAEAlP,KAAK++C,YAAYrqB,OAAOuV,eAAe/6B,GAAQ5N,OAAO2oC,eAAez1B,QAAQtF,GACjF,UAEElP,KAAKX,OAAOw2B,UAAU,kBAAD90B,OAAmBf,KAAKimB,cAAa,gBAAgBjmB,KAAK++C,mBAC/E/+C,KAAKX,OAAOmE,SAAS,kBAADzC,OAAmBf,KAAKimB,cAAa,gBAAgB,CAC3Exf,KAAK,EACL+yC,KAAK,WAUPx5C,KAAKinD,gBAAgB,KAEvBK,GAAWtnD,KAAK++C,aACnB/+C,KAAKX,OAAOmsB,UAAU,kBAADzqB,OAAmBf,KAAKimB,cAAa,iBAAgBjlB,MAAKmgB,UAChF,IAAKphB,EACD,UAEUC,KAAKX,OAAOw2B,UAAU,kBAAD90B,OACLf,KAAKimB,cAAa,gBACpC63B,GAER,CAAE,MAAOz8C,GACL6kB,QAAQ9c,MAAM,gCAADrI,OAAiCf,KAAKimB,cAAa,mBAAAllB,OAAkBM,GACtF,CAEJC,OAAOgT,cAAgB,KACvBhT,OAAO0oC,gBAAkB,KAGzB9oC,OAAOC,KAAKG,OAAOiT,cAAc9T,SAAQqP,GAAOxO,OAAOiT,aAAa6yC,WAAWt3C,KAC/E5O,OAAOC,KAAKG,OAAO2oC,gBAAgBxpC,SAAQqP,GAAOxO,OAAO2oC,eAAemd,WAAWt3C,KAEnF5O,OAAOC,KAAKnB,KAAK++C,YAAYrqB,OAAOngB,cAAc9T,SAAQyO,GACtD5N,OAAOiT,aAAayB,QAAQ9G,EAAMlP,KAAK++C,YAAYrqB,OAAOngB,aAAarF,MAE3EhO,OAAOC,KAAKnB,KAAK++C,YAAYrqB,OAAOuV,gBAAgBxpC,SAAQyO,GACxD5N,OAAO2oC,eAAej0B,QAAQ9G,EAAMlP,KAAK++C,YAAYrqB,OAAOuV,eAAe/6B,MAG/ElP,KAAK++C,YAAc,KAEnB,UACU/+C,KAAKX,OAAOmE,SAAS,kBAADzC,OAAmBf,KAAKimB,cAAa,gBAAgB,CAC3Exf,KAAK,EACL+yC,KAAK,GAEb,CAAE,MAAOn4C,GACLC,OAAOC,MAAM,4BAADR,OAA6BM,GAC7C,CACArB,KAAKwD,SAAS,CAAEu7C,aAAa,GAAQ,GAGjD,CAEA/3C,iBAAAA,GACShH,KAAKsG,MAAMg5B,QACZh+B,OAAOkmD,iBAAiB,aAAcxnD,KAAKqiD,eAAe,GAErDriD,KAAKsG,MAAM8e,WAAWjO,IAGvBnX,KAAKujD,SAASvjD,KAAKsG,MAAM8e,WAAWjO,IAAIpP,QAAQ,OAAQ,KAFxD/H,KAAKukB,iBAAiB,aAK1BvkB,KAAKX,OAAS,IAAIooD,EAAAA,GAAW,CACzBv0C,SAAU5R,OAAO0R,SAASE,SAC1B7D,KAAM/N,OAAO0R,SAASgT,SAEtB9W,KAAM,QACNw4C,YAAY,EACZ9e,KAAMqV,GAAI0J,UACVC,eAAgB,CAAC,oBACjBC,kBAAkB,EAClBC,WAAY1f,IACJA,IAAa2f,EAAAA,GAASC,WACtBhoD,KAAKwD,SAAS,CACV9D,WAAW,IAER0oC,IAAa2f,EAAAA,GAASE,MAE7BjoD,KAAKX,OACA6oD,aACAlnD,MAAKmgB,UACF+E,QAAQC,IAAI,mBAADplB,OACYf,KAAKsG,MAAM0e,aAAY,mBAAAjkB,OAAkBonD,EAAYnkD,UAExEhE,KAAKsG,MAAM0e,cAAgBhlB,KAAKsG,MAAM0e,eAAiBmjC,EAAYnkD,UACnE1C,OAAOC,MAAM,8CACbuR,YAAW,IAAMxR,OAAO0R,SAAS2zB,UAAU,MAE1C3mC,KAAKimB,gBACNjmB,KAAKimB,oBAAsBjmB,KAAKX,OAAOisB,4BAIrCtrB,KAAKinD,iBAEX,MAAMnhB,EAA8B,CAChCpmC,WAAW,EACX0oC,SAAU,IACVpjB,aAAcmjC,EAAYnkD,SAG9B,GAAIhE,KAAKsG,MAAMkP,KAAOxV,KAAKsG,MAAMkP,IAAI4N,MAAM,sBAEvC0iB,EAAS6f,gBAAiB,EAC1B7f,EAASogB,oBAAsBlmD,KAAKsG,MAAM4/C,oBAAsB,EAEhElmD,KAAKooD,gBAAe,KAChBpoD,KAAKwD,SAASsiC,GACdxkC,OAAO0R,SAAS2zB,QAAQ,QAEzB,CACH,IAAK,IAAD0hB,EACA,MAAMC,QAAiBtoD,KAAKX,OAAOmsB,UAAU,kBAADzqB,OACtBf,KAAKimB,gBAGf,OAARqiC,QAAQ,IAARA,GAAgB,QAARD,EAARC,EAAU5zB,cAAM,IAAA2zB,GAAhBA,EAAkBtzB,SACduzB,EAAS5zB,OAAOK,WAAansB,EAAAA,KAAK4I,gBAClC0U,QAAQC,IAAI,uBAADplB,OAAwBunD,EAAS5zB,OAAOK,WACnDnsB,EAAAA,KAAK4jB,YAAY87B,EAAS5zB,OAAOK,UAC7B/0B,KAAKi/C,YACL39C,OAAO0R,SAAS2zB,SAEhB3mC,KAAKi/C,aAAc,GAGpBj/C,KAAKX,OAAOgJ,aAAeO,EAAAA,KAAK4I,gBACvC0U,QAAQC,IAAI,uBAADplB,OAAwBf,KAAKX,OAAOgJ,aAC/CO,EAAAA,KAAK4jB,YAAYxsB,KAAKX,OAAOgJ,YACzBrI,KAAKi/C,YACL39C,OAAO0R,SAAS2zB,SAEhB3mC,KAAKi/C,aAAc,EAG/B,CAAE,MAAO59C,GACL6kB,QAAQ9c,MAAM,+BAADrI,OAAgCM,GACjD,CAEArB,KAAKwD,SAASsiC,EAClB,KAEH1kC,OAAMswC,IACHxrB,QAAQ9c,MAAM,wBAADrI,OAAyB2wC,IAC1B,8BAARA,IACA6W,aAAY,KACJvoD,KAAKsG,MAAM8/C,eAAiB,EAC5BpmD,KAAKwD,SAAS,CAAE4iD,eAAgBpmD,KAAKsG,MAAM8/C,eAAiB,IAE5D9kD,OAAO0R,SAAS2zB,QACpB,GACD,KAEH3mC,KAAKwD,SAAS,CACV2iD,mBAAmB,EACnBC,eAAgB,KAExB,IAGRpmD,KAAKwD,SAAS,CACV9D,WAAW,EACX0oC,SAAU/sB,KAAKC,MAAOysC,EAAAA,GAASE,MAAQ7f,EAAY,MAE3D,EAEJogB,QAASrnC,UAAa,IAADsnC,EAEjBzoD,KAAKykB,gBAAc5gB,EAAAA,EAAAA,GAAA,CACfuD,MAAO,CACHqe,KAAM,CAAC,EACP8F,SAAU,CAAC,EACXo2B,SAAU,CAAC,EACXriB,MAAO,CAAC,IAEsB,QADjCmpB,EACEzoD,KAAKX,OAAO2kB,aAAa0Q,cAAM,IAAA+zB,OAAA,EAA/BA,EAAiCrc,QAExCpsC,KAAKykB,eAAerd,MAAMqe,KAAOzlB,KAAKykB,eAAerd,MAAMqe,MAAQ,CAAC,EACpEzlB,KAAKykB,eAAerd,MAAMmkB,SAAWvrB,KAAKykB,eAAerd,MAAMmkB,UAAY,CAAC,EAC5EvrB,KAAKykB,eAAerd,MAAMu6C,SAAW3hD,KAAKykB,eAAerd,MAAMu6C,UAAY,CAAC,EAC5E3hD,KAAKykB,eAAerd,MAAMk4B,MAAQt/B,KAAKykB,eAAerd,MAAMk4B,OAAS,CAAC,EAEtE,IAAK,IAADopB,EAAAC,EACK3oD,KAAKimB,gBACNjmB,KAAKimB,oBAAsBjmB,KAAKX,OAAOisB,sBAEtCtrB,KAAKimB,eACNC,QAAQ9c,MAAM,+BAElB,MAAMk/C,QAAiBtoD,KAAKX,OAAOmsB,UAAU,kBAADzqB,OAAmBf,KAAKimB,gBAExD,OAARqiC,QAAQ,IAARA,GAAgB,QAARI,EAARJ,EAAU5zB,cAAM,IAAAg0B,GAAhBA,EAAkB3zB,SAClBnsB,EAAAA,KAAK4jB,YAAY87B,EAAS5zB,OAAOK,UAEjCnsB,EAAAA,KAAK4jB,YAAYxsB,KAAKX,OAAOgJ,YAGjCrI,KAAKi/C,aAAc,EACnB,MAAM2J,QAAiB5oD,KAAKX,OAAOwpD,sBAInC,SAFM7oD,KAAKinD,iBAEP2B,EAAU,CACV,MAAM5kB,QAAehkC,KAAKX,OAAOypD,cAOjC,YANA9oD,KAAKwD,SAAS,CACV8f,KAAMtjB,KAAKX,OAAOgJ,WAClB8M,OAAO,EACP4zC,gBAAgB,EAChBC,gBAAiBhlB,EAAOilB,SAGhC,CAGAjpD,KAAKqiB,WAAariB,KAAKqiB,YAAc,IAAI6oB,GAAWlrC,KAAKX,OAAQ,KACjEW,KAAKmiB,gBAAkBniB,KAAKmiB,iBAAmB,IAAIwrB,GAAgB3tC,KAAKX,QACxEW,KAAKqgB,YAAcrgB,KAAKqgB,aAAe,IAAIutB,GAAY5tC,KAAKX,QAC5DW,KAAK6+C,eAAiB7+C,KAAK6+C,gBAAkB,IAAI7P,GAAehvC,KAAKX,QACrEW,KAAK8+C,cAAgB9+C,KAAK8+C,eAAiB,IAAItP,GAAcxvC,KAAKX,QAElE,MAAMymC,EAA8B,CAChCxiB,KAAMtjB,KAAKX,OAAOgJ,WAClB8M,OAAO,GAGX,IACI2wB,EAAS9hB,mBAAqBhkB,KAAKX,OAAO0kB,yBAC1C+hB,EAAS8f,QAAU9f,EAAS9hB,aAAa5f,OAAOwwB,uBAC1C50B,KAAKkpD,gBAAgBpjB,SACrB9lC,KAAKkgD,yBAAyBpa,EAASR,YAAaQ,EAAS7iC,MACvE,CAAE,MAAO5B,GACL6kB,QAAQC,IAAI,kCAADplB,OAAmCM,EAAE4gD,OACpD,CAEAjiD,KAAK6+C,eAAevP,0BAA0BtvC,KAAKmvC,mBACnDnvC,KAAK6+C,eAAe38C,gBAAgBlC,KAAKmgD,uBACzCngD,KAAKqgB,YAAYne,gBAAgBlC,KAAK+/C,aACtC//C,KAAKqgB,YAAY+B,4BAA4BpiB,KAAKygD,wBAElD,MAAM0I,GAAoB7nD,OAAO0oC,iBAAmB1oC,OAAO2oC,gBAAgBz1B,QACvE,kBAOJ,GALAsxB,EAASW,WAAa0iB,EACK,SAArBA,IACErjB,EAAS9hB,aAAa5f,OAAOqiC,WAGjCzmC,KAAKX,OAAOmlB,UAA2C,QAAnCmkC,EAAI3oD,KAAKX,OAAO2kB,aAAa0Q,cAAM,IAAAi0B,GAA/BA,EAAiCvc,OACzD,IAAK,IAADgd,EACA,MAAMnE,QAAajlD,KAAKX,OAAOgqD,iBAEzBC,QAAgBtpD,KAAKX,OAAOmsB,UAAU,eAADzqB,OAAgBkkD,IAEzC,QAAlBmE,EAAIE,EAAQ50B,cAAM,IAAA00B,GAAdA,EAAgBhd,QAChBlrC,OAAOk0B,OAAOp1B,KAAKykB,eAAgB6kC,EAAQ50B,OAAO0X,QAGlDpsC,KAAKX,OAAOmlB,WACZxkB,KAAKwD,SAAS,CACVyhD,KAAM,CACFnlD,GAAIwpD,EAAQ3nD,IACZuN,KAAMzG,EAAAA,MAAM8gD,qBAAqBD,EAAStpD,KAAKX,OAAOgJ,YACtD9C,MAAO+jD,EAAQllD,OAAOmB,MACtBkM,KAAM63C,EAAQllD,OAAOqN,KACrB+3C,iBAAkBxpD,KAAK+mD,qBAAqBuC,EAAQllD,OAAOmB,UAK9DvF,KAAKypD,eAElB,CAAE,MAAOpoD,GACL6kB,QAAQ9c,MAAM,qCAADrI,OAAsCM,EAAEwR,WAAU,MAAA9R,OAAKM,EAAE4gD,QACtEjiD,KAAKkiD,UAAU7gD,EAAEwR,WAAY,QACjC,CAGJ7S,KAAKwD,SAASsiC,GAAsB,IAAM9lC,KAAKuiD,uBAE1CviD,KAAKX,OAAOkI,eAAe,mCAAoCvH,KAAKogD,kBAGzEttC,YAAW,IAAM9S,KAAKmiD,kBAAkBniD,KAAKsG,MAAMg/B,cAAc,KAEjExyB,YACI,IACI9S,KAAK0pD,mBAAmB1oD,MAAKgI,IACzBhJ,KAAKk/C,aAAel2C,EACfhJ,KAAKX,OAAOkI,eAAe,SAADxG,OAAUiI,EAAQ,kBAAkBhJ,KAAK8gD,OAAO,KAEvF,KAGJhuC,YAAWqO,UACP,MAAMvT,QAAsB5N,KAAKqgB,YAAYC,iBAAiBwlB,EAASR,mBACjEtlC,KAAKygD,uBAAuB7yC,EAAc,GACjD,IACP,CAAE,MAAOvM,GACL6kB,QAAQ9c,MAAM,qBAADrI,OAAsBM,EAAE4gD,QACrCjiD,KAAKkiD,UAAU,qBAADnhD,OAAsBM,EAAE4gD,OAAS,QACnD,GAEJz4C,QAAUJ,IAEN,IAAIugD,EADJzjC,QAAQ9c,MAAMA,GAGVugD,EADAvgD,aAAiBwgD,OACNxgD,EAAMvE,SAENuE,EAAMyJ,WAEJ,8BAAb82C,EACK3pD,KAAKsG,MAAM6/C,oBACZnmD,KAAKkiD,UAAUt5C,EAAAA,KAAKC,EAAE8gD,GAAW,SACjCpB,aAAY,KACJvoD,KAAKsG,MAAM8/C,eAAiB,EAC5BpmD,KAAKwD,SAAS,CAAE4iD,eAAgBpmD,KAAKsG,MAAM8/C,eAAiB,IAE5D9kD,OAAO0R,SAAS2zB,QACpB,GACD,KAEH3mC,KAAKwD,SAAS,CACV2iD,mBAAmB,EACnBC,eAAgB,MAIxBpmD,KAAKkiD,UAAUyH,EAAU,QAC7B,IAIhB,CAEAnnC,oBAAAA,GAA8B,IAADqnC,EAAAC,EAAAC,EAAAC,EACzB1oD,OAAO2oD,oBAAoB,aAAcjqD,KAAKqiD,eAAe,GAClD,QAAXwH,EAAA7pD,KAAKX,cAAM,IAAAwqD,GAAXA,EAAanb,iBAAiB,mCAAoC1uC,KAAKogD,kBAEpD,QAAnB0J,EAAA9pD,KAAK6+C,sBAAc,IAAAiL,GAAnBA,EAAqBva,4BAA4BvvC,KAAKmvC,mBACnC,QAAnB4a,EAAA/pD,KAAK6+C,sBAAc,IAAAkL,GAAnBA,EAAqBznD,kBAAkBtC,KAAKmgD,uBAC5B,QAAhB6J,EAAAhqD,KAAKqgB,mBAAW,IAAA2pC,GAAhBA,EAAkB1nD,kBAAkBtC,KAAK+/C,aAErC//C,KAAKy+C,WACLhiC,aAAazc,KAAKy+C,UAClBz+C,KAAKy+C,SAAW,MAEhBz+C,KAAK0+C,sBACLwL,cAAclqD,KAAK0+C,qBACnB1+C,KAAK0+C,oBAAsB,MAG3Bp9C,OAAOgT,gBACPhT,OAAOgT,cAAgB,KACvBhT,OAAO0oC,gBAAkB,KAEjC,CAiEA,qBAAMkf,CAAgBpjB,GAGlB,GAFAA,EAAS7iC,YAAcjD,KAAKX,OAAOwvC,mBAE9B7uC,KAAKsG,MAAMg/B,YAAa,CACzB,MAAMA,GAAehkC,OAAOgT,eAAiBhT,OAAOiT,cAAcC,QAAQ,mBAEpE21C,EAAWrkB,EAAS7iC,MAAMgM,MAAKI,GAAQA,EAAK1N,MAAQ2jC,IAE5B,IAAD8kB,EAGtBC,EAHP,GAAI/kB,GAAe6kB,EACfrkB,EAASR,YAAc6kB,EAASxoD,IAChCmkC,EAASif,iBAAiC,QAAfqF,EAAAD,EAAS/lD,cAAM,IAAAgmD,OAAA,EAAfA,EAAiBl7C,OAAQi7C,EAASxoD,IAAIoG,QAAQ,eAAgB,SAEzF+9B,EAASR,YAAcQ,EAAS7iC,MAAM,GAAGtB,IACzCmkC,EAASif,iBACmB,QAAxBsF,EAAAvkB,EAAS7iC,MAAM,GAAGmB,cAAM,IAAAimD,OAAA,EAAxBA,EAA0Bn7C,OAAQ42B,EAAS7iC,MAAM,GAAGtB,IAAIoG,QAAQ,eAAgB,GAE5F,CAKA,IAAIvB,EAHJs/B,EAASkf,QAAUlf,EAASR,YAI5B,IACI9+B,QAAcxG,KAAKX,OAAOiI,SAAS,GAADvG,OAAI+kC,EAASR,YAAW,UAC9D,CAAE,MAAOjkC,GACLmF,EAAQ,KACR0f,QAAQrM,KAAK,oBAAD9Y,OAAqB+kC,EAASR,YAAW,YAAAvkC,OAAWM,GACpE,CAEA,IAAKmF,IAAUA,EAAMC,IAEjB,IAAK,IAAI6jD,EAAI,EAAGA,EAAIxkB,EAAS7iC,MAAMpC,OAAQypD,IACvC9jD,QAAcxG,KAAKX,OAAOiI,SAAS,GAADvG,OAAI+kC,EAAS7iC,MAAMqnD,GAAG3oD,IAAG,WACvD6E,GAASA,EAAMC,MACfq/B,EAASR,YAAcQ,EAAS7iC,MAAMqnD,GAAG3oD,IACzCmkC,EAASif,gBAAkBjf,EAAS7iC,MAAMqnD,GAAGlmD,OAAO8K,KAIpE,CAEAq7C,cAAAA,GACI,MAAM5jD,EAAMD,KAAKC,MACjB3G,KAAKu+C,YAAcv+C,KAAKu+C,YAAc,EAAIv+C,KAAKu+C,aAAe53C,EAAM3G,KAAKw+C,eAAiB,IAAQ,EAElG,MAAMrjB,EAAO1yB,EAAAA,MAAM+hD,WAAWxqD,KAAKu+C,aAC/Bv+C,KAAKq+C,QAAQrmC,UACbhY,KAAKq+C,QAAQrmC,QAAQzH,MAAQvQ,KAAK4+C,WAAW72C,QAAQ,KAAMozB,IAE3Dn7B,KAAKu+C,YAAcv+C,KAAKm+C,0BAA4Bn+C,KAAKs+C,WAAWtmC,SACpEhY,KAAKs+C,WAAWtmC,QAAQyyC,UAAYtvB,EAE/Bn7B,KAAKsG,MAAM2/C,mBACZjmD,KAAKwD,SAAS,CAAEyiD,mBAAmB,KAEhCjmD,KAAKsG,MAAM2/C,oBAClBjmD,KAAKs+C,WAAWtmC,QAAQyyC,UAAYzqD,KAAKsG,MAAM2+C,KAAK/1C,KACpDlP,KAAKwD,SAAS,CAAEyiD,mBAAmB,KAGnCjmD,KAAKu+C,aAAe,IACpBj9C,OAAOC,MAAM,mBAEbuR,YAAW,IAAMxR,OAAO0R,SAAS2zB,UAAU,MAG/C3mC,KAAKw+C,cAAgB73C,CACzB,CAKA,kBAAM8iD,GACEzpD,KAAKy+C,WACLhiC,aAAazc,KAAKy+C,UAClBz+C,KAAKy+C,SAAW,MAGpB,IACI,MAAM53C,QAAa7G,KAAKX,OAAOqrD,oBAE3B7jD,IACK7G,KAAK0+C,sBACN1+C,KAAK0+C,oBAAsB6J,aAAY,IAAMvoD,KAAKuqD,kBAAkB,MAExEvqD,KAAKu+C,YAAc13C,EAAK03C,YACxBv+C,KAAKw+C,cAAgB93C,KAAKC,MAC1B3G,KAAKuqD,iBAEb,CAAE,MAAOlpD,GACLC,OAAOC,MAAM,oBAADR,OAAqBM,IAEjCyR,YAAW,IAAMxR,OAAO0R,SAAS2zB,UAAU,IAC/C,CACJ,CAwBA,sBAAM+iB,GAEF,IAAK,IAAI1gD,EAAW,EAAGA,EADN,IAC2BA,IACxC,IACI,MAAM2hD,QAAmB3qD,KAAKX,OAAOiI,SAAS,wBAADvG,OAAyBiI,EAAQ,WAC9E,GAAc,OAAV2hD,QAAU,IAAVA,GAAAA,EAAYlkD,IACZ,OAAOuC,CAEf,CAAE,MAAO3H,GACL6kB,QAAQ9c,MAAM,8BAADrI,OAA+BM,EAAE4gD,QAC9CjiD,KAAKkiD,UAAU,8BAADnhD,OAA+BM,EAAE4gD,OAAS,QAC5D,CAEJ,OAAO,CACX,CAKA2I,yBAAAA,GAAiD,IAADC,EAAAC,EAC5C,OAAK9qD,KAAKsG,MAAMmgD,qBAKZhiD,EAAAA,EAAAA,KAACsmD,EAAmB,CAChBn9C,eAAuC,QAAxBi9C,EAAA7qD,KAAKsG,MAAMsH,qBAAa,IAAAi9C,OAAA,EAAxBA,EAA0Bj9C,gBAAiB,CAAC,EAC3DG,WAAmC,QAAxB+8C,EAAA9qD,KAAKsG,MAAMsH,qBAAa,IAAAk9C,OAAA,EAAxBA,EAA0B/8C,YAAa,CAAC,EACnDF,QAASA,IAAM7N,KAAKwD,SAAS,CAAEijD,qBAAqB,IACpD34C,YAAaA,CAACuB,EAAMH,IAASlP,KAAKX,OAAO2rD,mBAAmB37C,EAAMH,GAClE/E,WAAYnK,KAAKsG,MAAM0d,aAAa5f,OAAO+F,WAC3CD,aAAclK,KAAKsG,MAAM0d,aAAa5f,OAAO8F,aAC7CF,UAAWhK,KAAKsG,MAAM0D,UACtBD,UAAW/J,KAAKsG,MAAMyD,UACtBE,MAAOjK,KAAKsG,MAAM2D,MAClB5K,OAAQW,KAAKX,SAdV,IAiBf,CAEA4rD,uBAAAA,GACI,OAAKjrD,KAAKsG,MAAMu6C,iBAKZp8C,EAAAA,EAAAA,KAACymD,GAAiB,CACdn9C,UAAW/N,KAAKsG,MAAMu6C,gBAAgB9yC,UACtCS,SAAUxO,KAAKsG,MAAMu6C,gBAAgB74C,OAAOgZ,OAAOpR,WACnDzF,WAAYnK,KAAKsG,MAAM0d,aAAa5f,OAAO+F,WAC3CH,UAAWhK,KAAKsG,MAAM0D,UACtB8D,YAAaoB,GAAQlP,KAAKX,OAAO2rD,mBAAmBhrD,KAAKsG,MAAMu6C,gBAAgBxxC,KAAMH,GACrFrB,QAASA,IAAM7N,KAAKwD,SAAS,CAAEq9C,gBAAiB,SAV7C,IAaf,CAmJAsK,gBAAAA,GACI,OAAKnrD,KAAKsG,MAAM07C,UAIZv9C,EAAAA,EAAAA,KAAC2mD,GAAAA,EAAe,CACZC,QAASrrD,KAAKsG,MAAM07C,SAASP,UAC7BzpC,QAAShY,KAAKsG,MAAM07C,SAAShB,WAC7BsK,gBAAiBnqC,UACTrhB,SACME,KAAKX,OAAOmE,SAAS,SAADzC,OAAUf,KAAKk/C,aAAY,oBAAoB,CACrEz4C,IAAK3G,EACL05C,KAAK,IAGbx5C,KAAKwD,SAAS,CAAEw+C,SAAU,MAAO,IAblC,IAiBf,CAEAuJ,2BAAAA,GACI,OAAKvrD,KAAKsG,MAAM0/C,2BAKZvhD,EAAAA,EAAAA,KAAC+mD,GAAAA,EAA2B,CACxB3F,cAAe7lD,KAAKsG,MAAMu/C,cAC1Bh9C,EAAGD,EAAAA,KAAKC,EACRgF,QAASg4C,IACDA,EACA7lD,KAAKwD,SAAS,CAAEwiD,2BAA2B,EAAOH,kBAAiB,IAC/D7lD,KAAKkgD,yBAAyBlgD,KAAKsG,MAAMg/B,eAG7CtlC,KAAKwD,SAAS,CAAEwiD,2BAA2B,GAC/C,IAdD,IAkBf,CAEA,8BAAM9F,CAAyB5a,EAAqBriC,EAA8BnB,GAC9EmB,EAAQA,GAASjD,KAAKsG,MAAMrD,MAE5B,MAAMC,QAAsClD,KAAKX,OAC5CosD,qBAAqBnmB,EAAaxjC,EAAQ9B,KAAKsG,MAAMu/C,eACrDzkD,OAAOC,IACJC,OAAOC,MAAM,gCAADR,OAAiCM,IACxCA,EAAYwR,WAAWzQ,SAAS,YACjCpC,KAAKwD,SAAS,CAAEwiD,2BAA2B,IAExC,CAAC,KAGV7iD,QAAwCnD,KAAKX,OAC9CqsD,oBAAoBpmB,EAAaxjC,EAAQ9B,KAAKsG,MAAMu/C,eACpDzkD,OAAOC,IACJC,OAAOC,MAAM,wBAADR,OAAyBM,IACjCA,EAAEwR,WAAWzQ,SAAS,YACtBpC,KAAKwD,SAAS,CAAEwiD,2BAA2B,IAExC,CAAC,KAGVrE,QAAqD3hD,KAAKX,OAC3DssD,mBAAmB7pD,GACnBV,OAAOC,IACJC,OAAOC,MAAM,yBAADR,OAA0BM,IAC/B,CAAC,KAGZ8B,GAAaw+C,GACbzgD,OAAOC,KAAKwgD,GAAUlhD,SAAQX,IACtBqD,EAAUrD,IAAO6hD,EAAS7hD,GAAI8rD,KAC9BzoD,EAAUrD,GAAI0E,cAAgBm9C,EAAS7hD,GAAI8rD,GAC/C,IAIR5rD,KAAKwD,SAAS,CACVN,aACAC,YACAF,QACA0+C,YAER,CAgBA,cAAOgG,GACH,IAAI/e,EAAOr/B,SAASjI,OAAO0R,SAAS41B,KAAM,IAE1C,GAAIijB,OAAOC,MAAMljB,GACb,OAAQqV,GAAI8N,eACR,IAAK,SACDnjB,EAAO,IACP,MACJ,IAAK,QACDA,EAAO,GAWnB,OAJKA,GAAiB,MAATA,IACTA,EAAO,MAGJA,CACX,CAKA,kBAAemjB,GACX,OAAOzqD,OAAO0R,SAASE,QAC3B,CAKA,kBAAewvC,CAAYxzC,GACvB,OAAO88C,EAAAA,EAAAA,OAAMvjD,EAAAA,MAAM+7C,aAAat1C,GACpC,CAKA,mBAAes1C,CAAav6C,GACxB,OAAOA,EAAMiF,IACjB,CAKA,mBAAeyzC,CAAa14C,GACxB,OAAOA,EAAMS,QAAQe,IACzB,CAsBA82C,kBAAAA,GACIviD,KAAKujD,SAASvjD,KAAKsG,MAAM8e,WAAWjO,IAAIpP,QAAQ,OAAQ,IAC5D,CAEAw7C,QAAAA,CAAShzC,GACLiZ,SAASjZ,MAAK,GAAAxP,OAAMwP,EAAK,OAAAxP,OAAMf,KAAKsG,MAAMy+C,iBAAmB,WACjE,CAEAkH,aAAAA,GACI,GAAIjsD,KAAKsG,OAAStG,KAAKsG,MAAM8e,YAAcplB,KAAKsG,MAAM8e,WAAWjO,IAAK,CAClE,GAAkC,iBAA9BnX,KAAKsG,MAAM8e,WAAWjO,IAAwB,CAC9C,MAAM+0C,EAA6B,OAArBlsD,KAAKkG,MAAMlB,OAAuC,OAArBhF,KAAKkG,MAAMlB,MAChDmnD,GAAUD,GAASlsD,KAAKsG,MAAMo+C,cAAgBpB,GAC9C8I,EAASF,GAASlsD,KAAKsG,MAAMo+C,cAAgBpB,GAEnD,OACI7+C,EAAAA,EAAAA,KAAC4nD,EAAAA,SAAQ,CAACC,UAAU7nD,EAAAA,EAAAA,KAAC8nD,GAAU,IAAIjpD,UAC/BmB,EAAAA,EAAAA,KAACy2C,GAAQ,CACLjxC,MAAOjK,KAAKsG,MAAM2D,MAClBuiD,cAAexsD,KAAKsG,MAAMigD,qBAE1BL,oBAAqBlmD,KAAKsG,MAAM4/C,oBAChCrH,eAAgB7+C,KAAK6+C,eACrB18B,gBAAiBniB,KAAKmiB,gBACtBnY,UAAWhK,KAAKsG,MAAM0D,UACtBga,aAAchkB,KAAKsG,MAAM0d,aACzB3kB,OAAQW,KAAKX,OACbotD,UAAWzsD,KAAKsG,MAAM0+C,QACtB3kC,YAAargB,KAAKqgB,YAClBilB,YAAatlC,KAAKsG,MAAMg/B,YACxBnwB,MAAOnV,KAAKsG,MAAM6O,MAClBtM,EAAGD,EAAAA,KAAKC,EACRya,KAAM1a,EAAAA,KAAK4I,cACXi1B,WAAYzmC,KAAKsG,MAAMmgC,WACvB9T,eAAgBA,CAACnd,EAAanG,EAAekG,IACzCvV,KAAK2yB,eAAend,EAAKnG,EAAMkG,GAEnCowC,eAAgB3lD,KAAKsG,MAAMq/C,eAC3BjwC,oBAAqBiwC,GAAkB3lD,KAAKwD,SAAS,CAAEmiD,mBACvD+G,WAAYP,EACZQ,WAAYP,EACZ3nC,eAAgBzkB,KAAKykB,eACrBo7B,kBAAmB7/C,KAAK6/C,kBACxBC,cAAe9/C,KAAKsG,MAAMw5C,cAC1B75B,cAAejmB,KAAKimB,cACpB2mC,oBAAqB5sD,KAAKsG,MAAM0e,aAChC6nC,WAAYrG,GAAYxmD,KAAKwD,SAAS,CAAEgjD,cA1BpC,aA8BpB,CACA,GAAkC,kBAA9BxmD,KAAKsG,MAAM8e,WAAWjO,IACtB,OACI1S,EAAAA,EAAAA,KAAC4nD,EAAAA,SAAQ,CAACC,UAAU7nD,EAAAA,EAAAA,KAAC8nD,GAAU,IAAIjpD,UAC/BmB,EAAAA,EAAAA,KAAC02C,GAAS,CAEN2R,YACI9sD,KAAKsG,MAAMo+C,cAAgBpB,GACrB,EACAtjD,KAAKsG,MAAMo+C,cAAgBpB,GACzBtjD,KAAKsG,MAAMyT,aACPsD,GACAD,G/B7zDR,G+Bg0DR/d,OAAQW,KAAKX,OACb8iB,gBAAiBniB,KAAKmiB,gBACtBmB,KAAM1a,EAAAA,KAAK4I,cACXwU,SAAUhmB,KAAKsG,MAAM0f,SACrBC,cAAejmB,KAAKimB,cACpB/iB,WAAYlD,KAAKsG,MAAMpD,WACvBD,MAAOjD,KAAKsG,MAAMrD,MAClB8G,UAAW/J,KAAKsG,MAAMyD,UACtBC,UAAWhK,KAAKsG,MAAM0D,UACtBC,MAAOjK,KAAKsG,MAAM2D,MAClBw8B,WAAYzmC,KAAKsG,MAAMmgC,WACvBnB,YAAatlC,KAAKsG,MAAMg/B,YACxByf,gBAAiB/kD,KAAKsG,MAAMy+C,gBAC5Bl8C,EAAGD,EAAAA,KAAKC,EACRsB,WAAYnK,KAAKsG,MAAM0d,aAAa5f,OAAO+F,WAC3CD,aAAclK,KAAKsG,MAAM0d,aAAa5f,OAAO8F,aAC7ClF,MAAOhF,KAAKkG,MAAMlB,MAClB+nD,aAAepoD,GAAmB3E,KAAKkjD,UAAUv+C,GACjDguB,eAAgBA,CAACnd,EAAanG,EAAekG,IACzCvV,KAAK2yB,eAAend,EAAKnG,EAAMkG,GAEnCy3C,oBAAqBhtD,KAAKsG,MAAM8O,cAAgBpV,KAAKsG,MAAMgP,UAC3D23C,oBAAsB71C,GAA4BpX,KAAKo+C,gBAAkBhnC,EACzE81C,sBAAwB91C,IAChBpX,KAAKo+C,kBAAoBhnC,IACzBpX,KAAKo+C,gBAAkB,KAC3B,EAEJ75B,iBAAkBvkB,KAAKukB,kBAtCnB,eA2CpB,GAAkC,cAA9BvkB,KAAKsG,MAAM8e,WAAWjO,IACtB,OACI1S,EAAAA,EAAAA,KAAC4nD,EAAAA,SAAQ,CAACC,UAAU7nD,EAAAA,EAAAA,KAAC8nD,GAAU,IAAIjpD,UAC/BmB,EAAAA,EAAAA,KAAC22C,GAAK,CAEFp1B,SAAUhmB,KAAKsG,MAAM0f,SACrBC,cAAejmB,KAAKimB,cACpB9D,gBAAiBniB,KAAKmiB,gBACtB9B,YAAargB,KAAKqgB,YAClB6hC,UAAWA,CAACr9C,EAAiB3E,IACzBF,KAAKkiD,UAAUr9C,EAAS3E,GAE5Bb,OAAQW,KAAKX,OACbwJ,EAAGD,EAAAA,KAAKC,EACRya,KAAM1a,EAAAA,KAAK4I,cACXvH,MAAOjK,KAAKsG,MAAM2D,OAXd,WAgBpB,GAAkC,aAA9BjK,KAAKsG,MAAM8e,WAAWjO,IACtB,OACI1S,EAAAA,EAAAA,KAAC4nD,EAAAA,SAAQ,CAACC,UAAU7nD,EAAAA,EAAAA,KAAC8nD,GAAU,IAAIjpD,UAC/BmB,EAAAA,EAAAA,KAAC42C,GAAI,CAEDxyC,EAAGD,EAAAA,KAAKC,EACR7D,MAAOhF,KAAKkG,MAAMlB,MAClBse,KAAMtjB,KAAKsG,MAAMgd,KACjBjkB,OAAQW,KAAKX,OACb2K,UAAWhK,KAAKsG,MAAM0D,UACtBC,MAAOjK,KAAKsG,MAAM2D,MAClBkL,MAAOnV,KAAKsG,MAAM6O,MAClBkN,WAAYriB,KAAKqiB,WACjBokB,WAAYzmC,KAAKsG,MAAMmgC,WACvBnB,YAAatlC,KAAKsG,MAAMg/B,YACxBjlB,YAAargB,KAAKqgB,YAClB8sC,YAAaA,IAAMntD,KAAKotD,kBAZpB,UAiBpB,GAAkC,cAA9BptD,KAAKsG,MAAM8e,WAAWjO,IACtB,OACI1S,EAAAA,EAAAA,KAAC4nD,EAAAA,SAAQ,CAACC,UAAU7nD,EAAAA,EAAAA,KAAC8nD,GAAU,IAAIjpD,UAC/BmB,EAAAA,EAAAA,KAAC62C,GAAK,CAEFnmC,MAAOnV,KAAKsG,MAAM6O,MAClBtM,EAAGD,EAAAA,KAAKC,EACR49B,WAAYzmC,KAAKsG,MAAMmgC,WACvBnjB,KAAM1a,EAAAA,KAAK4I,cACXnS,OAAQW,KAAKX,OACb2K,UAAWhK,KAAKsG,MAAM0D,UACtBC,MAAOjK,KAAKsG,MAAM2D,OAPd,WAYpB,GAAkC,cAA9BjK,KAAKsG,MAAM8e,WAAWjO,IACtB,OACI1S,EAAAA,EAAAA,KAAC4nD,EAAAA,SAAQ,CAACC,UAAU7nD,EAAAA,EAAAA,KAAC8nD,GAAU,IAAIjpD,UAC/BmB,EAAAA,EAAAA,KAAC+2C,GAAK,CAEFrmC,MAAOnV,KAAKsG,MAAM6O,MAClBtM,EAAGD,EAAAA,KAAKC,EACR49B,WAAYzmC,KAAKsG,MAAMmgC,WACvBnjB,KAAM1a,EAAAA,KAAK4I,cACXnS,OAAQW,KAAKX,OACb2K,UAAWhK,KAAKsG,MAAM0D,UACtBC,MAAOjK,KAAKsG,MAAM2D,OAPd,WAYpB,GAAkC,cAA9BjK,KAAKsG,MAAM8e,WAAWjO,IACtB,OACI1S,EAAAA,EAAAA,KAAC4nD,EAAAA,SAAQ,CAACC,UAAU7nD,EAAAA,EAAAA,KAAC8nD,GAAU,IAAIjpD,UAC/BmB,EAAAA,EAAAA,KAACg3C,GAAK,CAEF5yC,EAAGD,EAAAA,KAAKC,EACRya,KAAM1a,EAAAA,KAAK4I,cACXnS,OAAQW,KAAKX,OACb2K,UAAWhK,KAAKsG,MAAM0D,UACtBC,MAAOjK,KAAKsG,MAAM2D,OALd,WAUpB,GAAkC,gBAA9BjK,KAAKsG,MAAM8e,WAAWjO,IACtB,OACI1S,EAAAA,EAAAA,KAAC4nD,EAAAA,SAAQ,CACLC,UAAU7nD,EAAAA,EAAAA,KAAC8nD,GAAU,IAAIjpD,UAGzBmB,EAAAA,EAAAA,KAAC82C,GAAO,CACJ1yC,EAAGD,EAAAA,KAAKC,EACRoB,MAAOjK,KAAKsG,MAAM2D,MAClBF,UAAW/J,KAAKsG,MAAMyD,UACtBC,UAAWhK,KAAKsG,MAAM0D,UACtBy8B,WAAYzmC,KAAKsG,MAAMmgC,WACvBqY,cAAe9+C,KAAK8+C,cACpBx7B,KAAM1a,EAAAA,KAAK4I,cACXnS,OAAQW,KAAKX,OACb8K,WAAYnK,KAAKsG,MAAM0d,aAAa5f,OAAO+F,WAC3CD,aAAclK,KAAKsG,MAAM0d,aAAa5f,OAAO8F,gBAZ7C,WAiBhB,GAAkC,cAA9BlK,KAAKsG,MAAM8e,WAAWjO,IACtB,OACI1S,EAAAA,EAAAA,KAAC4nD,EAAAA,SAAQ,CAACC,UAAU7nD,EAAAA,EAAAA,KAAC8nD,GAAU,IAAIjpD,UAC/BmB,EAAAA,EAAAA,KAACk3C,GAAK,CACFt8C,OAAQW,KAAKX,OACbikB,KAAM1a,EAAAA,KAAK4I,cACX6O,YAAargB,KAAKqgB,YAClBw/B,kBAAmB7/C,KAAK6/C,kBACxBC,cAAe9/C,KAAKsG,MAAMw5C,cAC1B91C,UAAWhK,KAAKsG,MAAM0D,UACtBC,MAAOjK,KAAKsG,MAAM2D,MAClBw8B,WAAYzmC,KAAKsG,MAAMmgC,WACvB59B,EAAGD,EAAAA,KAAKC,EACRwkD,SAAUt3B,EAAAA,OAAOC,WACjBsP,YAAatlC,KAAKsG,MAAMg/B,YACxB3S,eAAgBA,CAACnd,EAAanG,EAAekG,IACzCvV,KAAK2yB,eAAend,EAAKnG,EAAMkG,GAEnCyO,aAAchkB,KAAKsG,MAAM0d,aACzB48B,oBAAqB5gD,KAAK4gD,oBAC1B36B,cAAejmB,KAAKimB,cACpB4mC,WAAarG,GAAsBxmD,KAAKwD,SAAS,CAAEgjD,aACnDrkC,gBAAiBniB,KAAKmiB,oBAMtC,GADUniB,KAAKsG,MAAM8e,WAAWjO,IAAIiM,MAAM,yBAGtC,OACI3e,EAAAA,EAAAA,KAAC4nD,EAAAA,SAAQ,CAACC,UAAU7nD,EAAAA,EAAAA,KAAC8nD,GAAU,IAAIjpD,UAC/BmB,EAAAA,EAAAA,KAACi3C,GAAS,CAEN7yC,EAAGD,EAAAA,KAAKC,EACRmd,SAAUhmB,KAAKsG,MAAM0f,SACrBC,cAAejmB,KAAKimB,cACpBhjB,MAAOjD,KAAKsG,MAAMrD,MAClBkf,gBAAiBniB,KAAKmiB,gBACtBhL,IAAKnX,KAAKsG,MAAM8e,WAAWjO,IAC3BpN,UAAW/J,KAAKsG,MAAMyD,UACtB08B,WAAYzmC,KAAKsG,MAAMmgC,WACvBnjB,KAAM1a,EAAAA,KAAK4I,cACXy7C,oBAAsB71C,GAA4BpX,KAAKo+C,gBAAkBhnC,EACzE81C,sBAAwB91C,IAChBpX,KAAKo+C,kBAAoBhnC,IACzBpX,KAAKo+C,gBAAkB,KAC3B,GAdCp+C,KAAKsG,MAAM8e,WAAWjO,MAoB/C,CAEA,OAAO,IACX,CAEAi2C,cAAAA,GACIptD,KAAKqiB,WAAWsqB,cAChB3sC,KAAKqiB,WAAWuqB,eACpB,CAEA0gB,gBAAAA,GACI,GAAIttD,KAAKsG,OAAStG,KAAKsG,MAAM8e,YAAcplB,KAAKsG,MAAM8e,WAAWmO,OAAQ,CACrE,GAAqC,WAAjCvzB,KAAKsG,MAAM8e,WAAWmO,OACtB,OAAOvzB,KAAKutD,0BAEhB,GAAqC,cAAjCvtD,KAAKsG,MAAM8e,WAAWmO,OACtB,OAAOvzB,KAAKugD,mBAEpB,CAEA,OAAO,IACX,CAEAgN,uBAAAA,GACI,OACI9oD,EAAAA,EAAAA,KAACugC,GAAoB,CACjBvgB,eAAgBzkB,KAAKykB,eACrBzf,MAAOhF,KAAKkG,MAAMlB,MAClBsgC,YAAatlC,KAAKsG,MAAMg/B,YACxBv7B,UAAW/J,KAAKsG,MAAMyD,UACtBC,UAAWhK,KAAKsG,MAAM0D,UACtBC,MAAOjK,KAAKsG,MAAM2D,MAElB4D,QAASsT,UACL4U,EAAAA,OAAOC,WAAW,MAElB,MAAMhS,QAAqBhkB,KAAKX,OAAOmsB,UAAU,iBAE7C8a,EACAtmC,KAAKwD,SAAS,CAAE+iD,qBAAsBvmD,KAAKsG,MAAMigD,qBAAuB,EAAGviC,iBAE3EhkB,KAAKwD,SAAS,CAAEwgB,gBACpB,EAEJV,KAAMtjB,KAAKsG,MAAMgd,KACjBjkB,OAAQW,KAAKX,OACb+lB,WAAYplB,KAAKsG,MAAM8e,WACvBshB,eAAiB/hC,KACZrD,OAAO0oC,iBAAmB1oC,OAAO2oC,gBAAgBmd,WAAW,kBAC7D,MAAMpjC,EAAe1jB,KAAKsH,MAAMtH,KAAKC,UAAUP,KAAKsG,MAAM0d,eAC1DA,EAAa5f,OAAOqiC,WAAa9hC,EACjC3E,KAAKwD,SAAS,CAAEijC,WAAY9hC,EAAOqf,gBAAe,EAEtDnb,EAAGD,EAAAA,KAAKC,GArBJ,iBAwBhB,CAEA2kD,gBAAAA,CAAiBr0C,EAAgBuuB,GACd,cAAXA,GAIJ1nC,KAAKwD,SAAS,CAAEjC,OAAO,GAC3B,CAEA2gD,SAAAA,CAAUmD,EAA8BD,GAIpC,IAAIqI,EAHc,UAAdrI,GAAuC,YAAdA,GAAyC,SAAdA,GAAsC,YAAdA,IAC5EA,EAAY,QAKRqI,EAFoB,kBAAjBpI,EACHA,aAAwBuE,MACNvE,EAAaxgD,SAAWwgD,EAAaxyC,WAC/B,OAAjBwyC,QAA0C3zC,IAAjB2zC,EACd,OAECA,EAAuBxyC,WAG5BwyC,EAGtBrlD,KAAKwD,SAAS,CACVjC,OAAO,EACP6jD,YACAC,aAAcoI,GAEtB,CAEApK,iBAAAA,CAAkB/8C,IACbhF,OAAOgT,eAAiBhT,OAAOiT,cAAcyB,QAAQ,kBAAmB1P,EAAMuM,YAC/E7S,KAAKwD,SAAS,CACVkhD,YAAap+C,GAErB,CAEA,aAAOonD,GAC0B,SAAzBpsD,OAAO0R,SAAS41B,KAChBtnC,OAAO0R,SAASG,KAAI,GAAApS,OAAMO,OAAO0R,SAASE,SAAQ,MAAAnS,OAAKO,OAAO0R,SAASgT,SAAQ,oBAE/E1kB,OAAO0R,SAASG,KAAI,mBAAApS,OAAsBO,OAAO0R,SAASK,SAElE,CAyBA6vC,SAAAA,CAAUv+C,GACN3E,KAAKwD,SAAS,CACV0/C,UAAWv+C,GAEnB,CAEAgpD,wBAAAA,GACI3tD,KAAKwD,SAAS,CAAE2/C,qBAAqB,GACzC,CAEAyK,oBAAAA,GACI5tD,KAAKwD,SACD,CACI2/C,qBAAqB,EACrBD,WAAW,IAEf,SAAA2K,EAAAC,EAAAC,EAAA,OACI/tD,KAAKukB,iBAC0B,QADVspC,EACjB7tD,KAAKsG,MAAM88C,wBAAgB,IAAAyK,OAAA,EAA3BA,EAA6B12C,IACF,QADK22C,EAChC9tD,KAAKsG,MAAM88C,wBAAgB,IAAA0K,OAAA,EAA3BA,EAA6B9K,OACF,QADQ+K,EACnC/tD,KAAKsG,MAAM88C,wBAAgB,IAAA2K,OAAA,EAA3BA,EAA6B9K,MAChC,GAEb,CAEAtwB,cAAAA,CAAend,EAAanG,EAAekG,GACnB,mBAATlG,IACPkG,EAAWlG,EACXA,EAAO,MAGPrP,KAAKsG,MAAMgP,WAAatV,KAAKsG,MAAM8O,aACnCpV,KAAKwD,SACD,CACIgS,IAAK,KACLiwC,WAAW,EACXrwC,cAAc,EACdE,WAAW,EACXC,SAAU,KACVmwC,YAAa,OAEjB,IACI1lD,KAAKwD,SAAS,CACVgS,MACAiwC,WAAW,EACXlwC,gBAKhB2Q,QAAQC,IAAI,YAADplB,OAAayU,IAExBxV,KAAKwD,SAAS,CACVgS,MACAiwC,WAAW,EACXlwC,WACAmwC,YAAar2C,GAAQrP,KAAKsG,MAAMg/B,cAExC,CAEA8iB,cAAAA,CAAe1nD,GACXV,KAAKwD,SACD,CACIgS,IAAK,KACLiwC,WAAW,EACXrwC,cAAc,EACdE,WAAW,EACXC,SAAU,KACVmwC,YAAa,OAEjB,IAAMhlD,GAAMA,KAEpB,CAEAstD,kBAAAA,GACI,OAAIhuD,KAAKsG,MAAMs/C,QAEPnhD,EAAAA,EAAAA,KAAC8vB,GAAY,CACT5B,eAAgBA,CAACnd,EAAanG,EAAekG,IACzCvV,KAAK2yB,eAAend,EAAKnG,EAAMkG,GAEnClG,KAAMrP,KAAKsG,MAAMg/B,YACjBjmC,OAAQW,KAAKX,OACb0K,UAAW/J,KAAKsG,MAAMyD,UACtBC,UAAWhK,KAAKsG,MAAM0D,UACtBqsB,YAAar2B,KAAKq2B,YAClB/S,KAAM1a,EAAAA,KAAK4I,cACX3D,QAAUioB,IACN91B,KAAKwD,SAAS,CAAEoiD,QAAQ,EAAOS,aAAcvwB,EAAUwwB,kBAAmB,KAAM,KACxEtmD,KAAKsG,MAAM+/C,cACXkC,aAAY,KACJvoD,KAAKsG,MAAMggD,kBAAoB,EAC/BtmD,KAAKwD,SAAS,CAAE8iD,kBAAmBtmD,KAAKsG,MAAMggD,kBAAoB,IAElEhlD,OAAO0R,SAASG,KAAOnT,KAAKsG,MAAM+/C,YACtC,GACD,IACP,GACF,IAKX,IACX,CAEA4H,kBAAAA,GACkC,IAADC,EAA7B,OAAIluD,KAAKsG,MAAM+/C,cAEPn9C,EAAAA,EAAAA,MAACgH,EAAAA,OAAM,CACHC,MAAM,EACNtC,QAASA,OAEPvK,SAAA,EAEFmB,EAAAA,EAAAA,KAACqQ,EAAAA,YAAW,CAAAxR,SAAEsF,EAAAA,KAAKC,EAAE,mCACrBpE,EAAAA,EAAAA,KAACkM,EAAAA,cAAa,CAAArN,UACVmB,EAAAA,EAAAA,KAACsnB,EAAAA,kBAAiB,CAAAzoB,SACbsF,EAAAA,KAAKC,EAAE,2BAA4B7I,KAAKsG,MAAMggD,wBAGvDp9C,EAAAA,EAAAA,MAACoK,EAAAA,cAAa,CAAAhQ,SAAA,CACThC,OAAO6sD,SACP7sD,OAAO8sD,OAAS9sD,OAAO+sD,OAEvB/sD,OAAOkoB,SAASulB,KAAsB,QAAnBmf,EAAI5sD,OAAOgtD,gBAAQ,IAAAJ,GAAfA,EAAiBK,aACrC9pD,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHE,QAASA,KACL,GAAInS,OAAO6sD,QAEP7sD,OAAO6sD,QAAQK,SAAS,iBAAkBxuD,KAAKsG,MAAM+/C,aAAc,SAChE,GAAI/kD,OAAO8sD,OAAS9sD,OAAO+sD,MAAO,CAErC,MAAMr3B,EAAOxN,SAASilC,cAAc,KACpCz3B,EAAK03B,aAAa,OAAQ1uD,KAAKsG,MAAM+/C,cACrCrvB,EAAK03B,aAAa,QAAS,kBAC3B13B,EAAK03B,aAAa,MAAO,WACzB13B,EAAK23B,OACT,MAAWnlC,SAASulB,KAGhBztC,OAAOgtD,SAASC,YAAYvuD,KAAKsG,MAAM+/C,aAAc,iBACzD,EACF/iD,SAEDsF,EAAAA,KAAKC,EAAE,oBAEZ,KACH7I,KAAKsG,MAAMggD,mBACR7hD,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHtC,QAAQ,YACRwC,QAASA,IAAOnS,OAAO0R,SAASG,KAAOnT,KAAKsG,MAAM+/C,aAAc/iD,SAE/DsF,EAAAA,KAAKC,EAAE,qBAEZ,WAKb,IACX,CAEA+lD,mBAAAA,GACI,OAAO5uD,KAAKsG,MAAMkP,KACd/Q,EAAAA,EAAAA,KAACyP,EAAa,CACVwB,oBAAsBiwC,GAA4B3lD,KAAKwD,SAAS,CAAEmiD,mBAClE93C,QAASA,IAAM7N,KAAKooD,gBAAe,IAAMpoD,KAAKwD,SAAS,CAAEmiD,gBAAgB,MACzEhxC,QAAS3U,KAAKsG,MAAMm/C,UACpBlwC,SAAUvV,KAAKsG,MAAMiP,SACrBV,eAAgBA,IAAM7U,KAAKwD,SAAS,CAAEiiD,WAAW,IACjDjwC,IAAKxV,KAAKsG,MAAMkP,IAChBH,UAAWA,IAAMrV,KAAKwD,SAAS,CAAE4R,cAAc,IAC/CE,UAAWA,IAAMtV,KAAKwD,SAAS,CAAE8R,WAAW,IAC5CV,aAAc5U,KAAKsG,MAAM8O,cAAgBpV,KAAKsG,MAAMgP,UACpDF,aAAcpV,KAAKsG,MAAM8O,aACzB/V,OAAQW,KAAKX,OACbgQ,KAAMrP,KAAKsG,MAAMo/C,aAAe1lD,KAAKsG,MAAMg/B,YAC3CnwB,MAAOnV,KAAKsG,MAAM6O,MAClBtM,EAAGD,EAAAA,KAAKC,IAEZ,IACR,CAEAgmD,gBAAAA,GACoF,IAADC,EAA/E,OAAI9uD,KAAKsG,MAAM2+C,MAA6B,OAArBjlD,KAAKkG,MAAMlB,OAAuC,OAArBhF,KAAKkG,MAAMlB,OAEvDkE,EAAAA,EAAAA,MAAA,OAAA5F,SAAA,CACKtD,KAAKsG,MAAM0d,aAAa5f,OAAOg1B,UAC5B30B,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOw0B,SAAS91B,SAAEtD,KAAKsG,MAAM0d,aAAa5f,OAAOg1B,WAC7D,MAEJlwB,EAAAA,EAAAA,MAACX,EAAAA,IAAG,CACA+B,UAAU,MACViG,MAAOvQ,KAAKsG,MAAM2+C,KAAKnlD,GACvB0I,IAAE3E,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACKe,GAAO44C,WACNx9C,KAAKsG,MAAM2+C,KAAKuE,iBAAmB5kD,GAAO+4C,oBAAiBjsC,GAEnE0F,IAAKpX,KAAKq+C,QAAQ/6C,SAAA,CAEjBtD,KAAKsG,MAAM2+C,KAAKxzC,MACbhN,EAAAA,EAAAA,KAACkhB,EAAAA,KAAI,CACDhB,IAAK3kB,KAAKsG,MAAM2+C,KAAKxzC,KACrBpI,MAAOzE,GAAO64C,YAGlBh5C,EAAAA,EAAAA,KAACsqD,EAAAA,OAAQ,CAAC1lD,MAAOzE,GAAO64C,YAE5Bh5C,EAAAA,EAAAA,KAAA,OACI2S,IAAKpX,KAAKs+C,WACVj1C,OAAKxF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACEe,GAAO84C,UAAQ,IAClBn4C,MAAOvF,KAAKsG,MAAM2/C,kBAAoB,QAAwB,QAAf6I,EAAA9uD,KAAKsG,MAAM2+C,YAAI,IAAA6J,OAAA,EAAfA,EAAiBvpD,aAASmM,IAC3EpO,SAEDtD,KAAKsG,MAAM2+C,KAAK/1C,OAGpBlP,KAAKsG,MAAM2/C,mBACRxhD,EAAAA,EAAAA,KAACsQ,EAAAA,WAAU,CACPtB,QAAS0N,gBACCnhB,KAAKX,OAAOqrD,0BACZ1qD,KAAKypD,cAAc,EAC3BnmD,UAEFmB,EAAAA,EAAAA,KAAC2lC,EAAAA,OAAU,MAEf,WAKK,OAArBpqC,KAAKkG,MAAMlB,OAAuC,OAArBhF,KAAKkG,MAAMlB,OAAkBhF,KAAKsG,MAAM0d,aAAa5f,OAAOg1B,UAClF30B,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOw0B,SAAS91B,SAAEtD,KAAKsG,MAAM0d,aAAa5f,OAAOg1B,WAEjE,IACX,CAEA41B,mBAAAA,GACI,OACIvqD,EAAAA,EAAAA,KAACwqD,EAAAA,SAAQ,CACL5lD,MAAOzE,GAAO,SAAD7D,OAAUf,KAAKsG,MAAM8+C,YAClCj1C,KAAMnQ,KAAKsG,MAAM/E,MACjB2tD,iBAAkB,IAClBrhD,QAASA,IAAM7N,KAAKwtD,mBACpB3oD,QAAS7E,KAAKsG,MAAM++C,cAGhC,CAEAtsB,mBAAAA,GAUI,OAAO/4B,KAAKsG,MAAM68C,qBACd1+C,EAAAA,EAAAA,KAACu0B,EAAAA,cAAa,CACVzoB,MAAO3H,EAAAA,KAAKC,EAAE,kBACdT,KAAMQ,EAAAA,KAAKC,EAAE,sCACbsmD,GAAIvmD,EAAAA,KAAKC,EAAE,MACXumD,OAAQxmD,EAAAA,KAAKC,EAAE,UACfgF,QAAUwhD,GAAoBA,EAAQrvD,KAAK4tD,uBAAyB5tD,KAAK2tD,6BAE7E,IACR,CAEA2B,kBAAAA,GACI,OAAKtvD,KAAKsG,MAAMipD,kBAIZ9qD,EAAAA,EAAAA,KAAC+qD,GAAgB,CACb3hD,QAAS7F,IACL,GAAe,iBAAXA,EACA+tB,EAAAA,OAAOC,WAAW,KAAM,eACrB,GAAIhuB,EAAQ,CAAC,IAADynD,EAAAC,GACdpuD,OAAO0oC,iBAAmB1oC,OAAO2oC,gBAAgBj0B,QAC9C,iBACAhW,KAAKsG,MAAMmgC,WAAa,QAAU,QAElB,QAApBgpB,EAAAzvD,KAAKo+C,uBAAe,IAAAqR,GAAe,QAAfC,EAApBD,EAAsB3M,qBAAa,IAAA4M,GAAnCA,EAAqC3M,YAAY,mBAAoB,KACrE/iD,KAAKwD,SAAS,CAAE+rD,kBAAkB,EAAO9oB,YAAazmC,KAAKsG,MAAMmgC,YACrE,MAAWzmC,KAAKsG,MAAMipD,kBAClBvvD,KAAKwD,SAAS,CAAE+rD,kBAAkB,GACtC,EAEJ9oB,WAAYzmC,KAAKsG,MAAMmgC,aAlBpB,IAqBf,CAEAkpB,qBAAAA,GACI,OAAO3vD,KAAKsG,MAAMspD,iBACd1mD,EAAAA,EAAAA,MAAC2mD,EAAAA,KAAI,CACD3zC,SAAUlc,KAAKsG,MAAMspD,gBACrBz/C,MAAM,EACNtC,QAASA,IAAM7N,KAAKwD,SAAS,CAAEosD,gBAAiB,OAAQtsD,SAAA,EAExDmB,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CACLhZ,QAASA,KACLzT,KAAKwD,SAAS,CAAEosD,gBAAiB,OACjC5vD,KAAKqnD,mBAAkB,EAAK,EAC9B/jD,SAEDsF,EAAAA,KAAKC,EAAE,qCAEZpE,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CACLhZ,QAASA,KACLzT,KAAKwD,SAAS,CAAEosD,gBAAiB,OACjC5vD,KAAKqnD,mBAAkB,GAAM,EAAK,EACpC/jD,SAEDsF,EAAAA,KAAKC,EAAE,mCAEZK,EAAAA,EAAAA,MAACujB,EAAAA,SAAQ,CAAChZ,QAASA,IAAMzT,KAAKwD,SAAS,CAAEosD,gBAAiB,OAAQtsD,SAAA,EAC9DmB,EAAAA,EAAAA,KAACkW,EAAAA,aAAY,CAAArX,UACTmB,EAAAA,EAAAA,KAACgmC,EAAAA,MAAU,CAAC/kC,SAAS,aAEzBjB,EAAAA,EAAAA,KAACqW,EAAAA,aAAY,CAAAxX,SAAEsF,EAAAA,KAAKC,EAAE,kBAG9B,IACR,CAEAinD,aAAAA,CAAc5D,GACV,MAAM/C,GAAoB7nD,OAAO0oC,iBAAmB1oC,OAAO2oC,gBAAgBz1B,QAAQ,kBAC7Eu7C,GACD5G,GAA0C,SAArBA,MAAmCnpD,KAAKsG,MAAM0d,aAAa5f,OAAOqiC,WAEtFupB,EAAiBvnD,EAAAA,MAAM8R,SAASva,KAAKsG,MAAM2D,MAAOrF,GAAO0Q,WACzD26C,EAAkBjwD,KAAKsG,MAAMo6C,gBAAgB9/B,QAAU5gB,KAAKsG,MAAMo6C,gBAAgB7/B,MAExF,OACI3X,EAAAA,EAAAA,MAAC0gB,EAAAA,QAAO,CAAAtmB,SAAA,EACJmB,EAAAA,EAAAA,KAACsQ,EAAAA,WAAU,CACPC,KAAK,QACL6yB,KAAK,QACLx+B,OAAKxF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACEe,GAAO03C,YACL4P,GAASlsD,KAAKsG,MAAMo+C,cAAgBpB,QAAoC5xC,EAAd9M,GAAO23C,MAE1E9oC,QAASA,IAAMzT,KAAKqjD,kBAAkBC,IAA0BhgD,UAEhEmB,EAAAA,EAAAA,KAACyrD,EAAAA,KAAQ,OAEbhnD,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAO24C,eAAej6C,SAAA,EAC9BmB,EAAAA,EAAAA,KAAC6L,EAAAA,QAAO,CACJC,MAAO3H,EAAAA,KAAKC,EAAE,iBACd2H,UAAW,CAAEC,OAAQ,CAAEjI,GAAI5D,GAAOq1B,UAAY32B,UAE9CmB,EAAAA,EAAAA,KAACsQ,EAAAA,WAAU,CACPC,KAAK,QACLm7C,eAAgBF,EAChB5mD,MAAO,CAAEjE,QAAS6qD,EAAkB,EAAI,IACxCx8C,QAASw8C,EAAkB,IAAMjwD,KAAKwD,SAAS,CAAEijD,qBAAqB,IAAU,KAAKnjD,UAErFmB,EAAAA,EAAAA,KAACoW,EAAAA,MAAK,CACF5D,aAAcjX,KAAKsG,MAAMo6C,gBAAgB7/B,MAAQ7gB,KAAKsG,MAAMo6C,gBAAgB9/B,QAC5Erb,MAAOvF,KAAKsG,MAAMo6C,gBAAgB9/B,QAAU,EAAI,QAAU,YAC1DwvC,IAAK,GAAG9sD,UAERmB,EAAAA,EAAAA,KAAC4rD,EAAAA,cAAiB,WAI9B5rD,EAAAA,EAAAA,KAACw5B,GAAAA,EAAS,CACN/uB,KAAK,yBACL80B,OAAQhkC,KAAKykB,eAAenhB,SAE3BtD,KAAKsG,MAAMg6C,iBACR77C,EAAAA,EAAAA,KAAC6L,EAAAA,QAAO,CACJC,MAAO3H,EAAAA,KAAKC,EAAE,qBACd2H,UAAW,CAAEC,OAAQ,CAAEjI,GAAI5D,GAAOq1B,UAAY32B,UAE9CmB,EAAAA,EAAAA,KAACsQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMsiB,EAAAA,OAAOC,WAAW,KAAM,aAAa1yB,UAEpDmB,EAAAA,EAAAA,KAACo0C,EAAAA,WAAc,WAK/Bp0C,EAAAA,EAAAA,KAACw5B,GAAAA,EAAS,CACN/uB,KAAK,8BACL80B,OAAQhkC,KAAKykB,eAAenhB,UAE5BmB,EAAAA,EAAAA,KAAC6L,EAAAA,QAAO,CACJC,MAAO3H,EAAAA,KAAKC,EAAE,mBACd2H,UAAW,CAAEC,OAAQ,CAAEjI,GAAI5D,GAAOq1B,UAAY32B,UAE9CmB,EAAAA,EAAAA,KAACsQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMsiB,EAAAA,OAAOC,WAAW,KAAM,UAAU1yB,UAEjDmB,EAAAA,EAAAA,KAACslC,EAAAA,MAAS,UAIrB/pC,KAAK2+C,qBACFl6C,EAAAA,EAAAA,KAACw5B,GAAAA,EAAS,CACN/uB,KAAK,2BACL80B,OAAQhkC,KAAKykB,eAAenhB,UAE5BmB,EAAAA,EAAAA,KAAC2xB,EAAAA,gBAAe,CACZphB,KAAK,QACLqhB,YAAar2B,KAAKq2B,YAClBtsB,UAAW/J,KAAKsG,MAAMyD,UACtBlB,EAAGD,EAAAA,KAAKC,MAGhB,MACJpE,EAAAA,EAAAA,KAACw5B,GAAAA,EAAS,CACN/uB,KAAK,0BACL80B,OAAQhkC,KAAKykB,eAAenhB,UAE5BmB,EAAAA,EAAAA,KAAC6L,EAAAA,QAAO,CACJC,MAAK,GAAAxP,OAAK6H,EAAAA,KAAKC,EAAE,sBAAqB,KAAA9H,OAClCgvD,EAAsB,GAAE,KAAAhvD,OAAQ6H,EAAAA,KAAKC,EAAE,gCAA+B,MAE1E2H,UAAW,CAAEC,OAAQ,CAAEjI,GAAI5D,GAAOq1B,UAAY32B,UAE9CmB,EAAAA,EAAAA,KAACoW,EAAAA,MAAK,CACFtV,MAAM,YACN0L,QAAQ,MACRzI,GAAI,CAAE,oBAAqB5D,GAAOi5C,aAClCyS,UAAWP,EAAoBzsD,UAE/BmB,EAAAA,EAAAA,KAACsQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,KACwE,IAAD88C,EAAAC,EAA5E,KAAMxwD,KAAKsG,MAAM0d,aAAa5f,OAAOqiC,cAAgBzmC,KAAKsG,MAAMmgC,YAC3DnlC,OAAO0oC,iBAAmB1oC,OAAO2oC,gBAAgBj0B,QAC9C,iBACAhW,KAAKsG,MAAMmgC,WAAa,QAAU,QAEtCzmC,KAAKwD,SAAS,CAAEijC,YAAazmC,KAAKsG,MAAMmgC,aACpB,QAApB8pB,EAAAvwD,KAAKo+C,uBAAe,IAAAmS,GAAe,QAAfC,EAApBD,EAAsBzN,qBAAa,IAAA0N,GAAnCA,EAAqCzN,YAAY,mBAAoB,UAClE,GAGG,UAFLzhD,OAAO0oC,iBAAmB1oC,OAAO2oC,gBAAgBz1B,QAC9C,6BAEN,CAAC,IAADi8C,EAAAC,GACGpvD,OAAO0oC,iBAAmB1oC,OAAO2oC,gBAAgBj0B,QAC9C,iBACAhW,KAAKsG,MAAMmgC,WAAa,QAAU,QAEtCzmC,KAAKwD,SAAS,CAAEijC,YAAazmC,KAAKsG,MAAMmgC,aACpB,QAApBgqB,EAAAzwD,KAAKo+C,uBAAe,IAAAqS,GAAe,QAAfC,EAApBD,EAAsB3N,qBAAa,IAAA4N,GAAnCA,EAAqC3N,YAAY,mBAAoB,IACzE,MACI/iD,KAAKwD,SAAS,CAAE+rD,kBAAkB,GACtC,EAEJlmD,MAAO,CACH9D,MAAOvF,KAAKsG,MAAMmgC,WAAazmC,KAAKsG,MAAM2D,MAAMS,QAAQimD,YAASj/C,GAErEnM,MAAM,UAASjC,UAEfmB,EAAAA,EAAAA,KAACqlC,EAAAA,WAEG,CACAzgC,OAAKxF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACEe,GAAOo4C,YACNh9C,KAAKsG,MAAMmgC,WAAa7hC,GAAOq4C,sBAAmBvrC,aAO7E1R,KAAKsG,MAAMmgC,YACRhiC,EAAAA,EAAAA,KAAC6L,EAAAA,QAAO,CACJC,MAAO3H,EAAAA,KAAKC,EAAE,iEACd2H,UAAW,CAAEC,OAAQ,CAAEjI,GAAI5D,GAAOq1B,UAAY32B,UAE9CmB,EAAAA,EAAAA,KAACsQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASpS,GACLrB,KAAKsG,MAAMy4C,YACL/+C,KAAKqnD,mBAAkB,GACvBrnD,KAAKwD,SAAS,CAAEosD,gBAAiBvuD,EAAEsR,SAE7CtJ,MAAO,CACH9D,MAAOvF,KAAKsG,MAAMy4C,YAAc/+C,KAAKsG,MAAM2D,MAAMS,QAAQimD,YAASj/C,GACpEpO,SAEDtD,KAAKsG,MAAMy4C,aAAct6C,EAAAA,EAAAA,KAACmsD,EAAAA,UAAQ,KAAMnsD,EAAAA,EAAAA,KAACosD,EAAAA,aAAgB,QAGlE,MACJpsD,EAAAA,EAAAA,KAACw5B,GAAAA,EAAS,CACN/uB,KAAK,4BACL80B,OAAQhkC,KAAKykB,eAAenhB,UAE5BmB,EAAAA,EAAAA,KAACqsD,GAAAA,EAAa,CACV72B,QACkC,kBAA9Bj6B,KAAKsG,MAAM8e,WAAWjO,KACQ,iBAA9BnX,KAAKsG,MAAM8e,WAAWjO,KACQ,aAA9BnX,KAAKsG,MAAM8e,WAAWjO,IAChBvO,EAAAA,KAAKC,EAAE,iEACP6I,EAEV1H,UAAWhK,KAAKsG,MAAM0D,UACtBy8B,WAAYzmC,KAAKsG,MAAMmgC,WACvBpnC,OAAQW,KAAKX,OACbghB,YAAargB,KAAKqgB,YAClBilB,YAAatlC,KAAKsG,MAAMg/B,YACxBiH,eAAgBA,CAACwkB,EAAU1hD,KACvBrP,KAAKwD,SACD,CACIuhD,gBAAiBgM,EACjBzrB,YAAaj2B,IAEjB8R,UACInhB,KAAKmiD,kBAAkB9yC,IACtB/N,OAAOgT,eAAiBhT,OAAOiT,cAAcyB,QAAQ,kBAAmB3G,SACnErP,KAAKkgD,yBAAyB7wC,EAAMrP,KAAKsG,MAAMrD,OAErD,MAAM2K,QAAsB5N,KAAKqgB,YAAYC,iBAAiBjR,SACxDrP,KAAKygD,uBAAuB7yC,EAAc,GAEvD,EAELM,SACkC,kBAA9BlO,KAAKsG,MAAM8e,WAAWjO,KACQ,iBAA9BnX,KAAKsG,MAAM8e,WAAWjO,KACQ,aAA9BnX,KAAKsG,MAAM8e,WAAWjO,SAIlC1S,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOiP,WAClB7T,KAAKsG,MAAMkP,MAAQxV,KAAKsG,MAAMm/C,YAC3BhhD,EAAAA,EAAAA,KAACsQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMzT,KAAKwD,SAAS,CAAEiiD,WAAW,IAAQniD,UAElDmB,EAAAA,EAAAA,KAACusD,EAAAA,oBAAuB,CACpB3nD,MACIrJ,KAAKsG,MAAM8O,aACLxQ,GAAO04C,SACPt9C,KAAKsG,MAAMgP,UACT06C,EACAprD,GAAO4Q,WAOlCxV,KAAK6uD,mBAEL7uD,KAAKsG,MAAMo+C,cAAgBpB,KACvBtjD,KAAKsG,MAAMmgC,YACZnlC,OAAO2vD,WAAa,MAChB/nD,EAAAA,EAAAA,MAACgoD,EAAAA,MAAI,CACDz2C,WAAS,EACTpR,OAAKxF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACG7D,KAAKsG,MAAMo+C,cAAgBpB,GAAsB1+C,GAAOga,mBAAgBlN,GACzE9M,GAAO+Z,kBAEdjE,QAAS,EACTvV,WAAW,SAAQ7B,SAAA,GAEhBtD,KAAKsG,MAAM2+C,MAA6B,OAArBjlD,KAAKkG,MAAMlB,OAAuC,OAArBhF,KAAKkG,MAAMlB,SAC1DkE,EAAAA,EAAAA,MAACX,EAAAA,IAAG,CACA+B,UAAU,MACVjB,MAAOzE,GAAOg5C,YACdp1C,GAAI,CAAEzD,QAAS,CAAEo0B,GAAI,eAAgBP,GAAI,SAAWt1B,SAAA,EAEpDmB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAAArF,SAAC,WACVtD,KAAKykB,eAAehT,MAAQzR,KAAKsG,MAAM0e,eACrC9b,EAAAA,EAAAA,MAACP,EAAAA,WAAU,CACPU,OAAKxF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACEe,GAAOia,cAAY,IACtBtZ,MAAgC,SAAzBvF,KAAKsG,MAAM0D,UAAuB,YAAc,cACzD1G,SAAA,CACL,IACKtD,KAAKsG,MAAM0e,oBAK7BvgB,EAAAA,EAAAA,KAACysD,EAAAA,MAAI,CAAA5tD,UACDmB,EAAAA,EAAAA,KAAA,KACI0O,KAAK,SACLM,QAAS0F,GAASA,EAAMC,iBACxB/P,MAAO,CAAE9D,MAAO,UAAW8T,eAAgB,QAAS/V,SAEnDtD,KAAKykB,eAAehT,MACjBhN,EAAAA,EAAAA,KAAA,OACI4E,MAAO,CACHwB,OAAQ,GACR7F,MAAO,IACP0f,WAAY,OACZ/Z,WAAY,QACZG,aAAc,EACdqS,QAAS,GACX7Z,UAEFmB,EAAAA,EAAAA,KAAA,OACIkgB,IAAK3kB,KAAKykB,eAAehT,KACzBmT,IAAI,OACJvb,MAAO,CAAE2B,SAAU,OAAQ6Z,UAAW,aAI9CpgB,EAAAA,EAAAA,KAACsgB,EAAAA,OAAM,CACHtR,QAASA,IAAMzT,KAAKukB,iBAAiB,QACrClb,MAC6B,YAAzBrJ,KAAKsG,MAAMyD,WAAoD,SAAzB/J,KAAKsG,MAAMyD,UAC3CnF,GAAOq3C,eACPvqC,EAEVkT,IAAI,WACJD,IAAI,8BAS5C,CAEAwsC,iBAAAA,GACI,MAAMtsD,EAAU7E,KAAKsG,MAAMqgD,eAAe9hD,QACpCo9C,EAAQjiD,KAAKsG,MAAMqgD,eAAe1E,MAExC,OACI/4C,EAAAA,EAAAA,MAAA,OACIG,MAAO,CACHihB,UAAW,SACX5kB,SAAU,GACV+Y,UAAW,GACX5T,OAAQ,oBACRM,SAAU,QACZ7H,SAAA,EAEFmB,EAAAA,EAAAA,KAAA,MAAI4E,MAAO,CAAE9D,MAAO,QAASjC,SAAC,kBAAkB,4FAC0C,KAC1FmB,EAAAA,EAAAA,KAAA,KACI0O,KAAK,oDACLR,OAAO,SACP62B,IAAI,aAAYlmC,SACnB,YAGDmB,EAAAA,EAAAA,KAAA,SAAM,qEAENA,EAAAA,EAAAA,KAAA,SAAM,yBACeA,EAAAA,EAAAA,KAAA,UACrBA,EAAAA,EAAAA,KAAA,OACIkgB,IAAI,uBACJC,IAAI,WAERngB,EAAAA,EAAAA,KAAA,SAAM,qCAC6B,KACnCA,EAAAA,EAAAA,KAAA,QACI4E,MAAO,CACH9D,MAAO,OACPK,WAAY,YACZF,SAAU,IACZpC,SACL,2CAEO,IAAI,iCAEZmB,EAAAA,EAAAA,KAAA,SAAM,sLAGNA,EAAAA,EAAAA,KAAA,OAAK4E,MAAO,CAAE9D,MAAO,OAAQG,SAAU,GAAI+Y,UAAW,IAAKnb,SAAEuB,KAC7DJ,EAAAA,EAAAA,KAAA,OACI4E,MAAO,CACH9D,MAAO,OACPG,SAAU,GACVE,WAAY,YACZ0kB,UAAW,OACX7L,UAAW,GACXtB,QAAS,IACX7Z,UAEA2+C,GAAS,IACNpvC,WACA5J,MAAM,MACN4G,KAAI,CAACsc,EAAc1Z,KAChBvJ,EAAAA,EAAAA,MAAA,OAAA5F,SAAA,CACK6oB,GACD1nB,EAAAA,EAAAA,KAAA,WAFMgO,SAQlC,CAEA2+C,cAAAA,GAA+B,IAADC,EAAAC,EAC1B,OACI7sD,EAAAA,EAAAA,KAAC8sD,EAAAA,EAAoB,CAACC,aAAW,EAAAluD,UAC7BmB,EAAAA,EAAAA,KAACm0C,EAAAA,EAAa,CAAC3uC,MAAOjK,KAAKsG,MAAM2D,MAAM3G,UACnC4F,EAAAA,EAAAA,MAAA,OAAKG,MAAO,CAAEwB,OAAQ,QAASvH,SAAA,EACzBtD,KAAKsG,MAAM5G,YAAa+E,EAAAA,EAAAA,KAAC8nD,GAAU,KACrC9nD,EAAAA,EAAAA,KAAC4nD,EAAAA,SAAQ,CAACC,UAAU7nD,EAAAA,EAAAA,KAAC8nD,GAAU,IAAIjpD,UAC/BmB,EAAAA,EAAAA,KAACm3C,GAAQ,CACLyR,SAAUt3B,EAAAA,OAAOC,WACjBssB,YAAavsB,EAAAA,OAAOusB,YACpBtvC,SAAUhT,KAAKsG,MAAM8e,WACrBiR,YAAar2B,KAAKq2B,YAClBtsB,UAAW/J,KAAKsG,MAAMyD,UACtBC,UAAWhK,KAAKsG,MAAM0D,UACtBC,MAAOjK,KAAKsG,MAAM2D,MAClBjF,MAAOhF,KAAKkG,MAAMlB,MAClBihB,cAAejmB,KAAKimB,cACpBgjC,QAASjpD,KAAKsG,MAAM0iD,gBACpB3pD,OAAQW,KAAKX,OACb0tD,aAAcpoD,GAAS3E,KAAKkjD,UAAUv+C,GACtCuF,aAAqC,QAAzBmnD,EAAErxD,KAAKsG,MAAM0d,oBAAY,IAAAqtC,OAAA,EAAvBA,EAAyBjtD,OAAO8F,aAC9CC,WAAmC,QAAzBmnD,EAAEtxD,KAAKsG,MAAM0d,oBAAY,IAAAstC,OAAA,EAAvBA,EAAyBltD,OAAO+F,WAC5CtB,EAAGD,EAAAA,KAAKC,EACRya,KAAM1a,EAAAA,KAAK4I,cACXy7C,oBAAqB71C,GAAQpX,KAAKo+C,gBAAkBhnC,EACpD81C,sBAAuB91C,IACfpX,KAAKo+C,kBAAoBhnC,IACzBpX,KAAKo+C,gBAAkB,KAC3B,EAEJ75B,iBAAkBvkB,KAAKukB,2BAOnD,CAEAla,MAAAA,GACI,MAAM6hD,EAA6B,OAArBlsD,KAAKkG,MAAMlB,OAAuC,OAArBhF,KAAKkG,MAAMlB,MAEtD,OAAIhF,KAAKsG,MAAM6/C,mBAEP1hD,EAAAA,EAAAA,KAAC8sD,EAAAA,EAAoB,CAACC,aAAW,EAAAluD,UAC7B4F,EAAAA,EAAAA,MAAC0vC,EAAAA,EAAa,CAAC3uC,MAAOjK,KAAKsG,MAAM2D,MAAM3G,SAAA,EACnCmB,EAAAA,EAAAA,KAAA,OACI4E,MAAO,CACHrE,MAAO,OACP6F,OAAQ,OACRyf,UAAW,SACXvlB,QAAS,OACTI,WAAY,SACZD,eAAgB,SAChBuF,gBAA0C,SAAzBzK,KAAKsG,MAAM0D,UAAuB,UAAY,UAC/DzE,MAAgC,SAAzBvF,KAAKsG,MAAM0D,UAAuB,UAAY,WACvD1G,UAEF4F,EAAAA,EAAAA,MAAA,OAAKG,MAAO,CAAErE,MAAO,IAAK6F,OAAQ,KAAMvH,SAAA,EACpCmB,EAAAA,EAAAA,KAAC4kC,EAAAA,iBAAgB,KACjBngC,EAAAA,EAAAA,MAAA,OAAKG,MAAO,CAAE3D,SAAU,IAAKpC,SAAA,CACxBsF,EAAAA,KAAKC,EAAE,yCAA0C,KAClDpE,EAAAA,EAAAA,KAAA,QAAM4E,MAAO,CAAE3D,SAAU,IAAKpC,SAAEtD,KAAKsG,MAAM8/C,yBAItDpmD,KAAKgvD,2BAMlBhvD,KAAKsG,MAAMqgD,eACJ3mD,KAAKmxD,oBAGZnxD,KAAKsG,MAAMg5B,OAEP76B,EAAAA,EAAAA,KAAC8sD,EAAAA,EAAoB,CAACC,aAAW,EAAAluD,UAC7B4F,EAAAA,EAAAA,MAAC0vC,EAAAA,EAAa,CAAC3uC,MAAOjK,KAAKsG,MAAM2D,MAAM3G,SAAA,EACnCmB,EAAAA,EAAAA,KAAC4jC,GAAK,CAACx/B,EAAGD,EAAAA,KAAKC,IACd7I,KAAKgvD,2BAKjBhvD,KAAKsG,MAAM6O,OAAUnV,KAAKsG,MAAMkgD,SAoBjCxmD,KAAKsG,MAAMyiD,gBAAgD,SAA9B/oD,KAAKsG,MAAM8e,WAAWjO,IAC5CnX,KAAKoxD,kBAIZ3sD,EAAAA,EAAAA,KAAC8sD,EAAAA,EAAoB,CAACC,aAAW,EAAAluD,UAC7B4F,EAAAA,EAAAA,MAAC0vC,EAAAA,EAAa,CAAC3uC,MAAOjK,KAAKsG,MAAM2D,MAAM3G,SAAA,EACnCmB,EAAAA,EAAAA,KAAA,SAAAnB,SAAA,6vBAuBA4F,EAAAA,EAAAA,MAACgU,EAAAA,MAAK,CACFu0C,UAAW,EACXpoD,MAAOzE,GAAOtF,KAAKgE,SAAA,EAEnBmB,EAAAA,EAAAA,KAACoM,EAAAA,OAAM,CACHtL,MAAM,UACNT,SAAS,QACT0D,GAAIC,EAAAA,MAAM8R,SACNva,KAAKsG,MAAM2D,MACXrF,GAAOk3C,QACNoQ,GACGlsD,KAAKsG,MAAMo+C,cAAgBpB,KAC1BtjD,KAAKsG,MAAMyT,cACZnV,GAAOs3C,aACVgQ,GACGlsD,KAAKsG,MAAMo+C,cAAgBpB,IAC3BtjD,KAAKsG,MAAMyT,cACXnV,GAAOu3C,iBACV+P,GAASlsD,KAAKsG,MAAMo+C,cAAgBpB,IAAwB1+C,GAAOw3C,oBACtE94C,SAEDtD,KAAK8vD,cAAc5D,MAExBznD,EAAAA,EAAAA,KAACitD,EAAAA,EAAW,CAACC,QAAUzF,EAAuB0F,EAAAA,GAAfC,EAAAA,GAA4BvuD,UACvDmB,EAAAA,EAAAA,KAACsb,GAAM,CACH0E,eAAgBzkB,KAAKykB,eACrBne,MAAOtG,KAAKsG,MAAMo+C,YAClB3qC,aAAc/Z,KAAKsG,MAAMyT,aACzB+I,gBAAkB/I,GAA0B/Z,KAAKwD,SAAS,CAAEuW,iBAC5DiK,aAAchkB,KAAKsG,MAAM0d,aACzBO,iBAAkBvkB,KAAKukB,iBACvBU,cAAgB3e,GAAqBtG,KAAKqjD,kBAAkB/8C,GAC5DogB,SAAUA,IAAMu3B,GAAIyP,SACpBtoC,WAAYplB,KAAKsG,MAAM8e,YAAcplB,KAAKsG,MAAM8e,WAAWjO,IAC3DgL,gBAAiBniB,KAAKmiB,gBACtB9B,YAAargB,KAAKqgB,YAClBgC,WAAYriB,KAAKqiB,WACjByvC,YAAalpD,EAAAA,KAAKC,EAAE,UACpB2b,SAAUxkB,KAAKX,OAAOmlB,SACtBQ,aAAchlB,KAAKsG,MAAM0e,aACzBnc,EAAGD,EAAAA,KAAKC,EACRya,KAAM1a,EAAAA,KAAK4I,cACXnS,OAAQW,KAAKX,OACbonC,WAAYzmC,KAAKsG,MAAMmgC,WACvBtxB,MAAOnV,KAAKsG,MAAM6O,MAClBpL,UAAW/J,KAAKsG,MAAMyD,UACtBC,UAAWhK,KAAKsG,MAAM0D,UACtBgc,SAAUhmB,KAAKsG,MAAM0f,SACrBC,cAAejmB,KAAKimB,cACpBhjB,MAAOjD,KAAKsG,MAAMrD,MAClBC,WAAYlD,KAAKsG,MAAMpD,WACvBC,UAAWnD,KAAKsG,MAAMnD,UACtB8G,MAAOjK,KAAKsG,MAAM2D,WAG1BxF,EAAAA,EAAAA,KAACyY,EAAAA,MAAK,CACFu0C,UAAW,EACXM,QAAM,EACNjyD,GAAG,YACH0I,GAAIC,EAAAA,MAAM8R,SACNva,KAAKsG,MAAM2D,MACXrF,GAAOuH,SACN+/C,GACGlsD,KAAKsG,MAAMo+C,cAAgBpB,KAC1BtjD,KAAKsG,MAAMyT,cACZnV,GAAOg4C,eACVsP,GACGlsD,KAAKsG,MAAMo+C,cAAgBpB,IAC3BtjD,KAAKsG,MAAMyT,cACXnV,GAAOi4C,mBACVqP,GAASlsD,KAAKsG,MAAMo+C,cAAgBpB,IAAuB1+C,GAAOk4C,sBAClEoP,GAASlsD,KAAKsG,MAAMo+C,cAAgBpB,IAAuB1+C,GAAOm4C,cACrEz5C,SAEDtD,KAAKisD,kBAETjsD,KAAKgvD,yBAEThvD,KAAKsvD,qBACLtvD,KAAKstD,mBACLttD,KAAK+4B,sBACL/4B,KAAK4uD,sBACL5uD,KAAKguD,qBACLhuD,KAAKiuD,qBACLjuD,KAAKurD,8BACLvrD,KAAKmrD,mBACLnrD,KAAKirD,0BACLjrD,KAAK4qD,4BACJ5qD,KAAKsG,MAAM5G,WAAcM,KAAKsG,MAAMggD,mBAAsBtmD,KAAKsG,MAAMkgD,SAEnE,MADA/hD,EAAAA,EAAAA,KAAC8nD,GAAU,IAEdvsD,KAAK2vD,8BA3IVlrD,EAAAA,EAAAA,KAAC8sD,EAAAA,EAAoB,CAACC,aAAW,EAAAluD,UAC7B4F,EAAAA,EAAAA,MAAC0vC,EAAAA,EAAa,CAAC3uC,MAAOjK,KAAKsG,MAAM2D,MAAM3G,SAAA,CACV,OAAxBhC,OAAOijD,cAAwB9/C,EAAAA,EAAAA,KAACutD,EAAAA,SAAQ,CAAChoD,UAAWhK,KAAKsG,MAAM0D,YAAgB,KACvD,OAAxB1I,OAAOijD,cAAwB9/C,EAAAA,EAAAA,KAACwtD,EAAAA,SAAQ,CAACjoD,UAAWhK,KAAKsG,MAAM0D,YAAgB,KAC/E1I,OAAOijD,cACgB,OAAxBjjD,OAAOijD,cACiB,OAAxBjjD,OAAOijD,cACiB,qBAAxBjjD,OAAOijD,cACH9/C,EAAAA,EAAAA,KAACytD,EAAAA,aAAY,CAACloD,UAAWhK,KAAKsG,MAAM0D,YACpC,KACF1I,OAAOijD,cAAwC,qBAAxBjjD,OAAOijD,aAE5B,MADA9/C,EAAAA,EAAAA,KAAC0tD,EAAAA,OAAM,CAACnoD,UAAWhK,KAAKsG,MAAM0D,YAEjChK,KAAKgvD,0BAkI1B,EAGJ,UAAe9nC,EAAAA,EAAAA,YAAf,CAA2B+2B,ICtkG3B38C,OAAOyH,YAAc,QAErBmd,QAAQC,IAAI,YAADplB,OAAaO,OAAOyH,YAAW,KAAAhI,OAAIiD,IAE9C,MAAMouD,GAAiB,CACnB,iBACA,cACA,gBAGEC,GAAe,CACjB,cACA,gBACA,WACA,mBACA,iBACA,gBACA,oBACA,gBACA,iBACA,oBACA,cACA,6BACA,0DACA,gCACA,0BACA,gCACA,iBAIE/wD,OAAOgxD,sBAAwD,6BAAhChxD,OAAOgxD,sBACf,SAAzBhxD,OAAO0R,SAAS41B,MAiBhBtnC,OAAOixD,QAAU,CAACp5C,EAAuBq5C,EAAiBC,EAAiBC,EAAgBtpD,MAClFA,GAAS+P,IACV/P,EAAQ+P,GAEZ,MAAMw5C,EAAUvpD,EAAMyJ,WACtB,GAAqB,kBAAVzJ,GAAsBupD,GAAWP,GAAenjD,MAAK5N,GAAKsxD,EAAQvwD,SAASf,KAAK,CACvF,MAAMwD,EAAUuE,EAAMvE,QAChBo9C,EAAQ74C,EAAM64C,MAKpB,OAJA/7B,QAAQ9c,MAAM,uCACd8c,QAAQ9c,MAAMvE,GACdqhB,QAAQ9c,MAAM9I,KAAKC,UAAU0hD,EAAO,KAAM,SAC1C3gD,OAAO0R,SAAS2zB,QAEpB,CACA,GAAqB,kBAAVv9B,EAAoB,CAC3B,GAAIipD,GAAapjD,MAAK5N,GAAM+H,EAA4BhH,SAASf,KAE7D,YADA6kB,QAAQ9c,MAAM,iBAADrI,OAAkBqI,IAGnC,MAAM,IAAIwgD,MAAMxgD,EACpB,CACA,MAAMA,CAAK,EAEf9H,OAAOsxD,qBAAwBz5C,IAE3B,MAAMw5C,EAAUx5C,EAAMtG,WACtB,GAAqB,kBAAVsG,GAAsBw5C,GAAWP,GAAenjD,MAAK5N,GAAKsxD,EAAQvwD,SAASf,KAGlF,OAFA6kB,QAAQ9c,MAAM,uCAADrI,OAAwCoY,EAAMuuB,cAC3DpmC,OAAO0R,SAAS2zB,SAGpB,MAAIxtB,aAAiBywC,MACXzwC,EAGA,IAAIywC,MAAMzwC,EAAMtG,WAC1B,GAnDJggD,EAAAA,GAAY,CACRC,IAAK,kEACLC,QAAQ,YAADhyD,OAAcO,OAAOyH,YAAW,KAAAhI,OAAIiD,GAC3CgvD,aAAc,CAACH,EAAAA,KACfI,UAAAA,CAAW95C,GAEP,GAAS,OAALA,QAAK,IAALA,GAAAA,EAAOtU,SAAWutD,GAAenjD,MAAK7F,GAAS+P,EAAMtU,QAAQzC,SAASgH,KACtE9H,OAAO0R,SAAS2zB,cACb,GAAS,OAALxtB,QAAK,IAALA,GAAAA,EAAOtU,SAAWwtD,GAAapjD,MAAK7F,GAAS+P,EAAMtU,QAAQzC,SAASgH,KAC3E,OAAO,KAEX,OAAO+P,CACX,IA2CR,MAAMsB,GAAY+O,SAASC,eAAe,SAC7BypC,EAAAA,EAAAA,GAAWz4C,IAEnBpQ,QACD5F,EAAAA,EAAAA,KAAC0uD,EAAAA,qBAAoB,CAACC,YAAaC,EAAAA,EAAe/vD,UAC9CmB,EAAAA,EAAAA,KAACrB,EAAsB,CAAAE,UACnBmB,EAAAA,EAAAA,KAACw5C,GAAG,Q,wICxGhB,MAAMr5C,EAA8C,CAChDuhB,IAAK,CACDtb,OAAQ,IACR7F,MAAO,IACPmY,QAAS,EACT9R,UAAW,QAEfioD,aAAc,CACVzoD,OAAQ,OACR7F,MAAO,mBACPoL,WAAY,EACZ+M,QAAS,EACT9R,UAAW,QAEfjC,MAAO,CACH7D,MAAOguD,EAAAA,EAAI,MAEfnS,KAAM,CACF77C,MAAOiuD,EAAAA,EAAK,MAEhB35C,KAAM,CACFtU,MAAOuU,EAAAA,EAAM,OAkCrB,MAAM7E,UAAgBhP,EAAAA,UAOlB7G,WAAAA,CAAY8G,GACRC,MAAMD,GAAO,KAPAutD,YAAM,OAINC,YAAM,EAKnB1zD,KAAKsG,MAAQ,CACT6f,IAAK,CAAC,cAADplB,OAAemF,EAAMsP,KAAO,KACjCm+C,MAAM,EACNvD,IAAK,KACLzrD,MAAO,KAEPivD,aAAa,EACbC,SAAS,GAGb7zD,KAAKyzD,OAASr3C,IAAAA,YAEdpc,KAAK0zD,OAAS,IAAII,OAAO7+C,EAAQ8+C,QAAQpyB,KAAK,KAAM,IACxD,CAEA36B,iBAAAA,GACQhH,KAAKkG,MAAMiP,OAASnV,KAAKkG,MAAMsP,MAC/B0Q,QAAQC,IAAI,YAADplB,OAAaf,KAAKkG,MAAMsP,MACnCxV,KAAK2yB,iBAQb,CAEA/P,kBAAAA,GAA4B,IAADoxC,GAClBh0D,KAAKsG,MAAMqtD,MAAQ3zD,KAAKkG,MAAMiP,OAASnV,KAAKkG,MAAMsP,KACnDxV,KAAK2yB,iBAEL3yB,KAAKkG,MAAMm0C,UAAY/5C,KAAKC,UAAUP,KAAKkG,MAAMm0C,YAAc/5C,KAAKC,UAAUP,KAAKsG,MAAM6f,MACzFnmB,KAAKwD,SAAS,CAAE2iB,IAAKnmB,KAAKkG,MAAMm0C,WAEjB,QAAnB2Z,EAAAh0D,KAAKyzD,OAAOz7C,eAAO,IAAAg8C,GAAnBA,EAAqBC,gBACzB,CAEAthC,cAAAA,GACI3yB,KAAKwD,SAAS,CAAEmwD,MAAM,IAAQ,IAAM3zD,KAAKkG,MAAMwP,qBAAuB1V,KAAKkG,MAAMwP,qBAAoB,KAErG1V,KAAKkG,MAAM7G,OAAO60D,yBAAyBl0D,KAAKm0D,iBAAiBC,KAAKp0D,OACtEA,KAAKkG,MAAM7G,OAAOg1D,yBAAyBr0D,KAAKs0D,iBAAiBF,KAAKp0D,OACtEA,KAAKkG,MAAM7G,OAAOk1D,uBAAuBv0D,KAAKw0D,eAAeJ,KAAKp0D,OAElE,MAAMy0D,EAAcp5C,KAAKq5C,MAAsB,UAAhBr5C,KAAKs5C,UAAwB,EAE5D30D,KAAKwD,SAAS,CAAEixD,gBAEhBz0D,KAAKkG,MAAM7G,OACNu1D,QACG50D,KAAKkG,MAAMmJ,KAAK3N,WAAW,gBAAkB1B,KAAKkG,MAAMmJ,KAAI,eAAAtO,OAAkBf,KAAKkG,MAAMmJ,MACzFrP,KAAKkG,MAAMsP,IACXi/C,GAEHrzD,OAAMgI,GAAS8c,QAAQC,IAAI/c,IACpC,CAEA+qD,gBAAAA,CAAiBr0D,EAAYsI,GACzB,GAAIpI,KAAKsG,MAAMmuD,aAAez0D,KAAKsG,MAAMmuD,cAAgB30D,EAAI,CACzD,MAAMqmB,EAAMnmB,KAAKsG,MAAM6f,IAAI6zB,QAC3B7zB,EAAI9jB,KAAK+F,GAET,MAAMysD,EAASzsD,EAAKgb,MAAM,oBACpB0xC,EAAYD,EAAqD,KAA5CzsD,EAAKgb,MAAM,+BAChC2xC,EAAUD,EAAqD,KAA1C1sD,EAAKgb,MAAM,6BAEtC,IAAIgtC,EAAMpwD,KAAKsG,MAAM8pD,IACjBzrD,EAAQ,KAGRkwD,GACAzE,EAAMA,GAAO7mD,SAASsrD,EAAO,GAAI,IACjClwD,EAAQ4E,SAASsrD,EAAO,GAAI,MACrBC,GAIAC,KADP3E,EAAM,MAOVpwD,KAAKwD,SAAS,CACV2iB,MACAiqC,MACAzrD,UAIJuhB,QAAQC,IAAI,YAChB,CACJ,CAEAmuC,gBAAAA,CAAiBx0D,EAAYsI,GACzB,GAAIpI,KAAKsG,MAAMmuD,aAAez0D,KAAKsG,MAAMmuD,cAAgB30D,EAAI,CACzD,MAAMqmB,EAAMnmB,KAAKsG,MAAM6f,IAAI6zB,QAC3B7zB,EAAI9jB,KAAK+F,GAETpI,KAAKwD,SAAS,CAAE2iB,QAEhBD,QAAQC,IAAI,aACZD,QAAQC,IAAIrmB,GACZomB,QAAQC,IAAI/d,EAChB,CACJ,CAEAosD,cAAAA,CAAe10D,EAAYk1D,GACvB,GAAIh1D,KAAKsG,MAAMmuD,aAAez0D,KAAKsG,MAAMmuD,cAAgB30D,EAAI,CACzD,MAAMqmB,EAAMnmB,KAAKsG,MAAM6f,IAAI6zB,QAC3B,IACK14C,OAAOkoB,SAASqhB,QACJ,IAAbmqB,GACA7uC,EAAItlB,QACJslB,EAAIA,EAAItlB,OAAS,GAAGutC,SAAS,YAC7BpuC,KAAKkG,MAAMqP,SACb,CACE,MACMhR,EADS4hB,EAAIA,EAAItlB,OAAS,GAAGoI,MAAM,KAClBgG,MAAKuN,GAAMA,EAAG9a,WAAW,YAC5C6C,GAEAuO,YACImiD,IACSj1D,KAAKkG,MAAM7G,OAAOmsB,UAAUypC,GAAUj0D,MAAKjB,IAAQ,IAADm1D,EAAAC,EACnD/0D,EAAAA,EAAWC,WAAWN,GAClBA,GAAuC,UAAtB,QAAVm1D,EAAAn1D,EAAIqE,cAAM,IAAA8wD,GAAS,QAATC,EAAVD,EAAYE,eAAO,IAAAD,OAAT,EAAVA,EAAqBnxB,SAC5BjO,EAAAA,OAAOC,WAAW,gBAAiB,SAAUi/B,EACjD,GACF,GAEN,IACA1wD,EAGZ,CACA4hB,EAAI9jB,KAAK,GAADtB,OAAiB,IAAbi0D,EAAiB,UAAY,GAAE,6BAAAj0D,OAA4Bi0D,IAEvEh1D,KAAKwD,SAAS,CAAE2iB,MAAK0tC,SAAS,IAAQ,KAC9B7zD,KAAKkG,MAAMwP,qBACX1V,KAAKkG,MAAMwP,qBAAoB,GAElB,IAAbs/C,GAAkBh1D,KAAKsG,MAAM6f,IAAInmB,KAAKsG,MAAM6f,IAAItlB,OAAS,GAAG+iB,cAAcxhB,SAAS,SAC/EpC,KAAKkG,MAAMmP,WACXrV,KAAKkG,MAAMmP,UAAU2/C,EAAUh1D,KAAKsG,MAAM6f,MAG1CnmB,KAAKkG,MAAMoP,WACXtV,KAAKkG,MAAMoP,YAEftV,KAAKkG,MAAMuP,WAAWu/C,EAAUh1D,KAAKsG,MAAM6f,MAE/CD,QAAQC,IAAI,WACZD,QAAQC,IAAIrmB,GACZomB,QAAQC,IAAI6uC,GAEuB,oBAAxBh1D,KAAKkG,MAAMqP,UAClBvV,KAAKkG,MAAMqP,SAASy/C,EACxB,GAER,CACJ,CAEAK,QAAAA,CAASjtD,EAAcktD,GAKnB,GAJIA,IACAltD,EAAOA,EAAKsb,UAAU,EAAG4xC,KAGK,IAA9BltD,EAAK6nB,OAAOjwB,KAAK0zD,QAAgB,CACjC,MAAM1rD,EAAS,GAEf,KAAOI,EAAK6nB,OAAOjwB,KAAK0zD,SAAW,GAAG,CAClC,MAAOtwC,GAAShb,EAAKgb,MAAMpjB,KAAK0zD,QAC1BnxD,EAAM6F,EAAK6nB,OAAOjwB,KAAK0zD,QAE7B,GAAInxD,EAAM,EAAG,CACT,MAAMgzD,EAAOntD,EAAKsb,UAAU,EAAGnhB,GACzBsC,EAAUzE,EAAAA,EAAW6sC,kBAAkBsoB,GAC7CvtD,EAAO3F,MACHoC,EAAAA,EAAAA,KAAA,QAAAnB,SACwB,kBAAZuB,EACFA,EAAQg8B,MAAMhxB,KAAI,CAACkJ,EAAMtG,KACrBhO,EAAAA,EAAAA,KAAA,QAEI4E,MAAO0P,EAAK1P,MAAM/F,SAEjByV,EAAK3Q,MAHDqK,KAMb5N,GAVCmD,EAAOnH,SAatBuH,EAAOA,EAAKL,QAAQwtD,EAAM,GAC9B,CAEA,MAAMA,EAAOntD,EAAKsb,UAAU,EAAGN,EAAMviB,QACrC,GAAI00D,EAAM,CACN,MAAM1wD,EAAUzE,EAAAA,EAAW6sC,kBAAkBsoB,GAC7CvtD,EAAO3F,MACHoC,EAAAA,EAAAA,KAAA,QAEI4E,MAAOzE,EAAOwe,EAAMQ,eAAetgB,SAEf,kBAAZuB,EACFA,EAAQg8B,MAAMhxB,KAAI,CAACkJ,EAAMtG,KACrBhO,EAAAA,EAAAA,KAAA,QAEI4E,MAAO0P,EAAK1P,MAAM/F,SAEjByV,EAAK3Q,MAHDqK,KAMb5N,GAZDmD,EAAOnH,SAepBuH,EAAOA,EAAKL,QAAQwtD,EAAM,GAC9B,CACJ,CAEA,GAAIntD,EAAM,CACN,MAAMvD,EAAUzE,EAAAA,EAAW6sC,kBAAkB7kC,GAC7CJ,EAAO3F,MACHoC,EAAAA,EAAAA,KAAA,QAAAnB,SACwB,kBAAZuB,EACDA,EAA0Eg8B,MAAMhxB,KAC7E,CAACkJ,EAAMtG,KACHhO,EAAAA,EAAAA,KAAA,QAEI4E,MAAO0P,EAAK1P,MAAM/F,SAEjByV,EAAK3Q,MAHDqK,KAOjB5N,GAZCmD,EAAOnH,QAe1B,CAEA,OAAOmH,CACX,CAEA,OAAOI,CACX,CAEAotD,MAAAA,GACI,OAAOx1D,KAAKsG,MAAM6f,IAAItW,KAAI,CAAClL,EAAO6I,KAC9B/I,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACPyO,IAAK5J,IAAUxN,KAAKsG,MAAM6f,IAAItlB,OAAS,EAAIb,KAAKyzD,YAAS/hD,EAEzDpH,UAAU,IACV2G,QAAQ,QAAO3N,SAEdtD,KAAKq1D,SAAS1wD,IAJV6I,IAOjB,CAEAnD,MAAAA,GACI,OACInB,EAAAA,EAAAA,MAACsR,EAAAA,MAAK,CACFnR,MAAOrJ,KAAKkG,MAAMgP,UAAY,CAAErK,OAAQ,OAAQ7F,MAAO,QAAW,CAAC,EACnEyV,WAAS,EACTyO,UAAU,SACVxO,QAAS1a,KAAKkG,MAAMgP,UAAY,EAAI,EAAE5R,SAAA,MAEVoO,IAA3B1R,KAAKkG,MAAMo0C,cAAwD,IAA3Bt6C,KAAKkG,MAAMo0C,aAChD71C,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAAAlX,UACAtD,KAAKsG,MAAMutD,UACTpvD,EAAAA,EAAAA,KAACqE,EAAAA,eAAc,CACXO,MAAOrJ,KAAKkG,MAAMkP,aAAe,CAAE3K,gBAAiB,WAAc,KAClEwG,QAASjR,KAAKkG,MAAM0O,aAAe,cAAgB,gBACnDjQ,MACI3E,KAAKsG,MAAM8pD,KAAOpwD,KAAKsG,MAAM3B,MACvB,IAAM0W,KAAKC,MAAOtb,KAAKsG,MAAM3B,MAAQ3E,KAAKsG,MAAM8pD,IAAO,KACvDpwD,KAAKkG,MAAMkP,aACT,EACA,QAKxB,MACJlM,EAAAA,EAAAA,MAAA,OACIG,MAAO,CACHrE,MAAO,OACPD,QAAS,OACTI,WAAY,SACZD,eAAgBlF,KAAKkG,MAAM0O,aAAe,gBAAkB,YAC9DtR,SAAA,EAEFmB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACPU,MACIrJ,KAAKkG,MAAM0O,aACL,CACI5P,MAAO,qBACPmG,SAAU,SACVwB,aAAc,WACd5G,WAAY,UAEhB,CAAEhB,QAAS,QAErBuF,UAAU,MAAKhH,SAEdtD,KAAKq1D,SAASr1D,KAAKsG,MAAM6f,IAAInmB,KAAKsG,MAAM6f,IAAItlB,OAAS,WAE9B6Q,IAA3B1R,KAAKkG,MAAMo0C,cAAwD,IAA3Bt6C,KAAKkG,MAAMo0C,aAChD71C,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACP2B,UAAU,MACVjB,MAAO,CAAErE,MAAO,KAAM1B,UAEtB4F,EAAAA,EAAAA,MAACsR,EAAAA,MAAK,CACFlQ,UAAU,QACVmQ,WAAS,EACTtV,WAAW,SACXuV,QAAS,EAAEpX,SAAA,EAEXmB,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAAAlX,SAAEtD,KAAKkG,MAAM2C,EAAE,WACrBpE,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAAAlX,UACFmB,EAAAA,EAAAA,KAACw0C,EAAAA,OAAM,CACHljC,QAAS/V,KAAKsG,MAAMstD,YACpBnqD,SAAU0P,GAASnZ,KAAKwD,SAAS,CAAEowD,YAAaz6C,EAAMxG,OAAOoD,UAC7DxQ,MAAM,eAGdd,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAAAlX,SAAEtD,KAAKkG,MAAM2C,EAAE,eAG7B,SAERpE,EAAAA,EAAAA,KAAC+V,EAAAA,MAAK,CAACnR,MAAOrJ,KAAKkG,MAAMgP,UAAY,CAAErK,OAAQ,oBAAqB7F,MAAO,QAAW,CAAC,EAAE1B,SACpFtD,KAAKsG,MAAMstD,cACRnvD,EAAAA,EAAAA,KAACyY,EAAAA,MAAK,CAAC7T,MAAOrJ,KAAKkG,MAAMgP,UAAYtQ,EAAO0uD,aAAe1uD,EAAOuhB,IAAI7iB,SAAEtD,KAAKw1D,eAKjG,EA3VEvgD,EAGa8+C,QAAU,CAAC,QAAS,OAAQ,QA2V/C,S,gMChYA,MAAMpoC,UAAe1lB,EAAAA,UACjBoE,MAAAA,GACI,OACI5F,EAAAA,EAAAA,KAACgxD,IAAS,CACNpsD,OAAKxF,EAAAA,EAAAA,GAAA,CACD21B,OAAQ,YACR1G,YAAa9yB,KAAKkG,MAAMkD,MAAQ,MAAQ,YACxC07B,UAAW,KACR9kC,KAAKkG,MAAMmD,OAElBoC,KAAMzL,KAAKkG,MAAMuF,MAAQ,OACzBzG,MAAM,OACN6F,OAAO,OACP6qD,gBAAiB11D,KAAKkG,MAAM0lB,cAC5B+pC,WAAY31D,KAAKkG,MAAM0lB,cACvBgqC,oBAAqB51D,KAAKkG,MAAM0lB,cAChCgmB,aAAc5xC,KAAKkG,MAAM0rC,aACzB3nC,MAAgC,SAAzBjK,KAAKkG,MAAM8D,UAAuB,kBAAoB,SAC7DrF,MAAO3E,KAAKkG,MAAMvB,MAClBykB,UAAWppB,KAAKkG,MAAMuD,SACtBA,SAAUuH,GAAYhR,KAAKkG,MAAMuD,SAASuH,GAC1C9B,KAAMlP,KAAKkG,MAAMgJ,MAAQ,oBACzBxJ,SAAU1F,KAAKkG,MAAMR,UAAY,GACjCmwD,WAAY,CACRC,2BAA2B,EAC3BC,0BAA0B,EAC1BC,gBAAgB,EAEhBC,gBAAiBj2D,KAAKkG,MAAM0lB,cAC5BsqC,QAASl2D,KAAKkG,MAAM0lB,cAAgB,OAAIla,GAE5CykD,YAAa,CAAEC,iBAAiB,IAG5C,EAGJ,S,8FC3DA,MAAMxxD,EAA8B,CAChCyxD,OAAQ,CACJ,cAAe,CACXlqD,QAAS,KACTrH,SAAU,WACVkH,OAAQ,EACRxG,IAAK,EACL4G,KAAM,EACNpH,MAAO,OACP6F,OAAQ,OACRF,WAAY,8CACZ0B,eAAgB,QAChB5B,gBAAiB,QAErB,cAAe,CACX0B,QAAS,KACTrH,SAAU,WACVkH,OAAQ,EACRxG,IAAK,EACL4G,KAAM,EACNpH,MAAO,OACP6F,OAAQ,OACRF,WAAY,8CACZ0B,eAAgB,QAChB5B,gBAAiB,QAErB,uCAAwC,CACpC,YAAa,CACT4F,YAAa,KAIzBimD,IAAK,CACDtxD,MAAO,GACP6F,OAAQ,GACRc,OAAQ,SACR7G,SAAU,WACVuL,YAAa,GACbvF,aAAc,EACdH,WAAY,UACZwS,QAAS,GAEbo5C,SAAU,CACNnxD,QAAS,IAEbwG,OAAQ,CACJZ,SAAU,KAEdkE,KAAM,CACFnJ,WAAY,SACZoF,SAAU,SACVwB,aAAc,WACd,uCAAwC,CACpC5H,QAAS,SAGjBC,MAAO,CACHA,MAAO,OACP,uCAAwC,CACpCA,MAAO,SAGfwxD,SAAU,CACNxxD,MAAO,GACPD,QAAS,gBAEbk1B,QAAS,CACLvpB,cAAe,SAqBvB,MAAMogD,UAAsB7qD,EAAAA,UACxB7G,WAAAA,CAAY8G,GACRC,MAAMD,GAAO,KA2DjBG,eAAkB25C,IACd,MAAMx5C,EAAiClG,KAAKsH,MAAMtH,KAAKC,UAAUP,KAAKsG,MAAME,QAC5E,IAAI+gC,GAAU,EACdyY,EAAOv/C,SAAQ0Y,IACQ,YAAfA,EAAMjZ,UACkBwR,IAApBlL,EAAM2S,EAAMrZ,aACL0G,EAAM2S,EAAMrZ,IACnBynC,GAAU,KAEL/gC,EAAM2S,EAAMrZ,QAAUqZ,EAAM3S,QACrCA,EAAM2S,EAAMrZ,IAAMqZ,EAAM3S,MACxB+gC,GAAU,EACd,IAGAA,GACAvnC,KAAKwD,SAAS,CAAEgD,UAAS,KACrB,IAAKA,EAAMxG,KAAKkG,MAAMo/B,aAAc,CAChC,MAAMmxB,EAAYv1D,OAAOC,KAAKqF,GAAOyI,MAAKnP,GAAM0G,EAAM1G,KACtD,GAAI22D,EAAW,CACX,MAAM12D,EAAMC,KAAKsG,MAAMrD,MAAMgM,MAAK+oC,GAAMA,EAAGr2C,MAAQ80D,IACzC,IAADvB,EAAT,GAAIn1D,EACAC,KAAKkG,MAAMqmC,gBACG,QAAV2oB,EAAAn1D,EAAIqE,cAAM,IAAA8wD,OAAA,EAAVA,EAAYhmD,OAAQunD,EAAU1uD,QAAQ,eAAgB,IACtD0uD,QAGJz2D,KAAKkG,MAAMqmC,eAAekqB,EAAU1uD,QAAQ,eAAgB,IAAK0uD,EAEzE,CACJ,IAER,EACF,KAEFC,oBAAuB1W,IACnB,MAAM/8C,EAAuB3C,KAAKsH,MAAMtH,KAAKC,UAAUP,KAAKsG,MAAMrD,QAC5DuD,EAAiClG,KAAKsH,MAAMtH,KAAKC,UAAUP,KAAKsG,MAAME,QAC5E,IAAI+gC,GAAU,EAETxlC,QAAQgtC,IACTiR,EAAOnwC,KAAIsR,UACP,MAAM9R,EAAOpM,EAAMgM,MAAKgV,GAAMA,EAAGtiB,MAAQwX,EAAMrZ,KAE/C,GAAmB,YAAfqZ,EAAMjZ,MAAuBiZ,EAAMpZ,IAShC,GAAIsP,EAAM,CAAC,IAADsnD,EAAAC,EAAAC,EACoCC,EAIEC,EAIFC,EARjD,GAAI3nD,EAAKjL,OAAO8K,QAAyB,QAArBynD,EAAKx9C,EAAMpZ,IAAIqE,cAAM,IAAAuyD,OAAA,EAAhBA,EAAkBznD,MACvCG,EAAKjL,OAAO8K,MAAuB,QAAhB4nD,EAAA39C,EAAMpZ,IAAIqE,cAAM,IAAA0yD,OAAA,EAAhBA,EAAkB5nD,OAAQ,GAC7Cq4B,GAAU,EAEd,GAAIl4B,EAAKjL,OAAOmB,SAA0B,QAArBqxD,EAAKz9C,EAAMpZ,IAAIqE,cAAM,IAAAwyD,OAAA,EAAhBA,EAAkBrxD,OACxC8J,EAAKjL,OAAOmB,OAAwB,QAAhBwxD,EAAA59C,EAAMpZ,IAAIqE,cAAM,IAAA2yD,OAAA,EAAhBA,EAAkBxxD,QAAS,GAC/CgiC,GAAU,EAEd,GAAIl4B,EAAKjL,OAAOqN,QAAyB,QAArBolD,EAAK19C,EAAMpZ,IAAIqE,cAAM,IAAAyyD,OAAA,EAAhBA,EAAkBplD,MACvCpC,EAAKjL,OAAOqN,MAAuB,QAAhBulD,EAAA79C,EAAMpZ,IAAIqE,cAAM,IAAA4yD,OAAA,EAAhBA,EAAkBvlD,OAAQ,GAC7C81B,GAAU,CAElB,KAAO,CAAC,IAAD0vB,EAAAC,EAAAC,EAEH5vB,GAAU,EACVtkC,EAAMZ,KAAK,CACPV,IAAKwX,EAAMrZ,GACXsE,OAAQ,CACJ8K,MAAsB,QAAhB+nD,EAAA99C,EAAMpZ,IAAIqE,cAAM,IAAA6yD,OAAA,EAAhBA,EAAkB/nD,OAAQ,GAChC3J,OAAuB,QAAhB2xD,EAAA/9C,EAAMpZ,IAAIqE,cAAM,IAAA8yD,OAAA,EAAhBA,EAAkB3xD,QAAS,GAClCkM,MAAsB,QAAhB0lD,EAAAh+C,EAAMpZ,IAAIqE,cAAM,IAAA+yD,OAAA,EAAhBA,EAAkB1lD,OAAQ,GAChCpN,iBAAkB,WAEtBqwB,OAAQ,CACJ0iC,SAAU,CACNC,kBAAmB,CAAC,MAKhC,MAAM/wD,QAActG,KAAKkG,MAAM7G,OAAOiI,SAAS,GAADvG,OAAIoY,EAAMrZ,GAAE,WAC1D0G,EAAM2S,EAAMrZ,MAAa,OAALwG,QAAK,IAALA,IAAAA,EAAOG,IAC/B,MAzCI,GAAI4I,EAAM,CACN,MAAM9M,EAAMU,EAAMT,QAAQ6M,IACb,IAAT9M,WACOiE,EAAM2S,EAAMrZ,IACnBmD,EAAMR,OAAOF,GACbglC,GAAU,EAElB,CAkCJ,KAENvmC,MAAK,KACCumC,GACAvnC,KAAKwD,SAAS,CAAEP,QAAOuD,UAAS,KAC5B,IAAKA,EAAMxG,KAAKkG,MAAMo/B,aAAc,CAChC,MAAMmxB,EAAYv1D,OAAOC,KAAKqF,GAAOyI,MAAKnP,GAAM0G,EAAM1G,KACtD,GAAI22D,EAAW,CACX,MAAM12D,EAAMC,KAAKsG,MAAMrD,MAAMgM,MAAK+oC,GAAMA,EAAGr2C,MAAQ80D,IACzC,IAADa,EAAT,GAAIv3D,EACAC,KAAKkG,MAAMqmC,gBACG,QAAV+qB,EAAAv3D,EAAIqE,cAAM,IAAAkzD,OAAA,EAAVA,EAAYpoD,OAAQunD,EAAU1uD,QAAQ,eAAgB,IACtD0uD,QAGJz2D,KAAKkG,MAAMqmC,eAAekqB,EAAU1uD,QAAQ,eAAgB,IAAK0uD,EAEzE,CACJ,IAER,GACF,EApKFz2D,KAAKsG,MAAQ,CACT4V,SAAU,KACV1V,MAAO,CAAC,EACRvD,MAAO,GAEf,CAEA+D,iBAAAA,GACIhH,KAAKkG,MAAM7G,OACNwvC,iBAAgB,GAChB7tC,MAAMiC,IACHjD,KAAKwD,SAAS,CAAEP,UAASke,UAErB,MAAM3a,EAAiC,CAAC,EACxC,IAAK,IAAI8jD,EAAI,EAAGA,EAAIrnD,EAAMpC,OAAQypD,IAAK,CACnC,MAAMhkD,QAActG,KAAKkG,MAAM7G,OAAOiI,SAAS,GAADvG,OAAIkC,EAAMqnD,GAAG3oD,IAAG,WAE1D6E,EAAMvD,EAAMqnD,GAAG3oD,OADf2E,KACwBA,EAAMG,GAItC,CAGA,IAAKD,EAAMxG,KAAKkG,MAAMo/B,aAAc,CAChC,MAAMmxB,EAAYv1D,OAAOC,KAAKqF,GAAOyI,MAAKnP,GAAM0G,EAAM1G,KAClD22D,GACA3jD,YAAW,KACP,MAAM/S,EAAMC,KAAKsG,MAAMrD,MAAMgM,MAAK+oC,GAAMA,EAAGr2C,MAAQ80D,IACzC,IAADc,EAALx3D,EACAC,KAAKkG,MAAMqmC,gBACG,QAAVgrB,EAAAx3D,EAAIqE,cAAM,IAAAmzD,OAAA,EAAVA,EAAYroD,OAAQunD,EAAU1uD,QAAQ,eAAgB,IACtD0uD,GAGJz2D,KAAKkG,MAAMqmC,eAAekqB,EAAU1uD,QAAQ,eAAgB,IAAK0uD,EACrE,GACD,IAEX,CAEAz2D,KAAKwD,SAAS,CAAEgD,UAAS,KACrBxG,KAAKkG,MAAMma,YAAYne,gBAAgBlC,KAAK02D,qBAC5C12D,KAAKkG,MAAMma,YAAYmuB,qBAAqBxuC,KAAKqG,eAAe,GAClE,GACJ,IAELjF,OAAOC,IACJC,OAAOC,MAAM,qBAADR,OAAsBM,GAAI,GAElD,CAEAmhB,oBAAAA,GACIxiB,KAAKkG,MAAMma,YAAY/d,kBAAkBtC,KAAK02D,qBAC9C12D,KAAKkG,MAAMma,YAAYouB,uBAAuBzuC,KAAKqG,eACvD,CAgHAgE,MAAAA,GAA8B,IAADmtD,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACzB,IAAKj4D,KAAKkG,MAAMugC,YAAczmC,KAAKsG,MAAMrD,MAAMpC,OAAS,EACpD,OAAO,KAEX,IAAIq3D,EAOJ,OANIl4D,KAAKsG,MAAMrD,MAAMpC,SACjBq3D,EAAkBl4D,KAAKsG,MAAMrD,MAAMgM,MAC/BI,GAAQA,EAAK1N,MAAQ3B,KAAKkG,MAAMo/B,aAAej2B,EAAK1N,MAAG,eAAAZ,OAAoBf,KAAKkG,MAAMo/B,iBAK1Fp8B,EAAAA,EAAAA,MAACX,EAAAA,IAAG,CAAAjF,SAAA,EACAmB,EAAAA,EAAAA,KAAC6L,EAAAA,QAAO,CACJC,MAAOvQ,KAAKkG,MAAM+zB,SAAWrxB,EAAAA,KAAKC,EAAE,uBACpC2H,UAAW,CAAEC,OAAQ,CAAEjI,GAAI5D,EAAOq1B,UAAY32B,UAE9CmB,EAAAA,EAAAA,KAAA,QAAAnB,UACImB,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHhO,MAAgC,SAAzBvF,KAAKkG,MAAM8D,UAAuB,UAAY,YACrDX,OAAKxF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACEe,EAAOgH,QAAM,IAChBjB,YAA2B,QAAf6sD,EAAAU,SAAe,IAAAV,GAAQ,QAARC,EAAfD,EAAiBpzD,cAAM,IAAAqzD,OAAR,EAAfA,EAAyBlyD,QAAS,OAC9CutB,YAA4B,QAAf4kC,EAAAQ,SAAe,IAAAR,GAAQ,QAARC,EAAfD,EAAiBtzD,cAAM,IAAAuzD,GAAvBA,EAAyBpyD,MAChCkD,EAAAA,MAAM+Q,YAAY0+C,EAAgB9zD,OAAOmB,OAAO,GAChD,SAEV0L,QAASjR,KAAKkG,MAAMgI,UAAYlO,KAAKsG,MAAMrD,MAAMpC,OAAS,EAAI,OAAS,WACvEqN,WAAYlO,KAAKkG,MAAMgI,UAAYlO,KAAKsG,MAAMrD,MAAMpC,OAAS,EAC7D,gBAAc,OACd4S,QAASpS,GAAKrB,KAAKwD,SAAS,CAAE0Y,SAAU7a,EAAEqb,gBAAiBpZ,UAE3D4F,EAAAA,EAAAA,MAACX,EAAAA,IAAG,CACA+B,UAAU,MACV9B,IAAE3E,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACKe,EAAOI,OACLhF,KAAKsG,MAAME,MAAMxG,KAAKkG,MAAMo/B,kBAAiC5zB,EAAlB9M,EAAO2xD,UACpD3xD,EAAOyxD,QAEdhtD,MAAO,CACHtE,QAAS,OACTQ,MAAsB,QAAfqyD,EAAAM,SAAe,IAAAN,GAAQ,QAARC,EAAfD,EAAiBxzD,cAAM,IAAAyzD,GAAvBA,EAAyBtyD,MAC1BkD,EAAAA,MAAM+Q,YAAY0+C,EAAgB9zD,OAAOmB,OAAO,GAChD,OACNJ,WAAY,UACd7B,SAAA,EAEFmB,EAAAA,EAAAA,KAACkhB,EAAAA,KAAI,CACDtc,MAAOzE,EAAO0xD,IACd3xC,KAAoB,QAAfmzC,EAAAI,SAAe,IAAAJ,GAAQ,QAARC,EAAfD,EAAiB1zD,cAAM,IAAA2zD,OAAR,EAAfA,EAAyBtmD,OAAQ,sBAE1ChN,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,EAAOsK,KAAK5L,SAEA,QAFA00D,EAEfE,SAAe,IAAAF,GAAQ,QAARC,EAAfD,EAAiB5zD,cAAM,IAAA6zD,OAAR,EAAfA,EAAyB/oD,iBAM9CzK,EAAAA,EAAAA,KAACorD,EAAAA,KAAI,CACD3zC,SAAUlc,KAAKsG,MAAM4V,SACrBi8C,aAAW,EACXhoD,OAAQnQ,KAAKsG,MAAM4V,SACnBrO,QAASA,IAAM7N,KAAKwD,SAAS,CAAE0Y,SAAU,OAAQ5Y,SAEhDtD,KAAKsG,MAAMrD,MAAM4M,KAAI,CAAAxM,EAAyCgO,KAAG,IAA3C,IAAE1P,EAAKyC,QAAQ,KAAE8K,EAAI,KAAEuC,EAAI,MAAElM,IAASlC,EAAA,OACzDoB,EAAAA,EAAAA,KAACgoB,EAAAA,SAAQ,CAGLve,UAAWlO,KAAKsG,MAAME,MAAM7E,GAC5BoV,SAAUpV,IAAQ3B,KAAKkG,MAAMo/B,YAC7Bj8B,MAAO,CAAEsB,WAAYpF,GAAS,WAC9BkO,QAASA,KACDzT,KAAKkG,MAAMo/B,cAAgBtlC,KAAKsG,MAAMrD,MAAMoO,GAAK1P,KACjD3B,KAAKkG,MAAMqmC,eACPvsC,KAAKsG,MAAMrD,MAAMoO,GAAKjN,OAAO8K,KAC7BlP,KAAKsG,MAAMrD,MAAMoO,GAAK1P,KAG9B3B,KAAKwD,SAAS,CAAE0Y,SAAU,MAAO,EACnC5Y,UAEF4F,EAAAA,EAAAA,MAACX,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,EAAOyxD,OACXhtD,MAAO,CACHtE,QAAS,OACTQ,MAAQA,GAASkD,EAAAA,MAAM+Q,YAAYjU,GAAO,IAAU,UACpDJ,WAAY,UACd7B,SAAA,EAEFmB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,EAAO4xD,SAASlzD,SAAE3B,IAAQ3B,KAAKkG,MAAMo/B,YAAc,SAAM,MACrE7gC,EAAAA,EAAAA,KAACkhB,EAAAA,KAAI,CACDtc,MAAOzE,EAAO0xD,IACd3xC,IAAKlT,GAAQ,qBAEhBvC,MA7BAvN,EA+BE,QAK/B,EAGJ,S,kBCtXA,SAASy2D,EAAQr4D,EAAuBmwC,GACpC,IAAKnwC,EACD,OAAO,KAES,kBAATmwC,IACPA,EAAOA,EAAKjnC,MAAM,MAEtB,MACMxC,EAAM1G,EADAmwC,EAAK9C,SAEjB,OAAK8C,EAAKrvC,OAGS,kBAAR4F,EACA2xD,EAAQ3xD,EAAKypC,GAEjB,KALIzpC,CAMf,C,iBAwBA,QAfA,SAAmBP,GACf,MAAM,OAAE89B,EAAM,SAAE1gC,EAAQ,KAAE4L,EAAI,MAAEvK,GAAUuB,EAE1C,YAAcwL,IAAV/M,GACiB,IAAVA,EAAkB,KAAQrB,EAEhC0gC,GAGyB,IAA1Bo0B,EAAQp0B,EAAQ90B,GACT5L,EAEJ,KALIA,CAMf,C,kHC/BA,MAAMsB,EAA8B,CAChCtF,KAAM,CACFmL,gBAAiB,mBACjBzF,MAAO,OACP6F,OAAQ,OACR9F,QAAS,OACT,cAAe,CACX4G,OAAQ,EACRc,EAAG,OACHzH,MAAO,OACP6F,OAAQ,OACRM,SAAU,SAGlBP,MAAO,CACHI,SAAU,KAEdE,eAAgB,CACZnG,QAAS,OACToG,SAAU,UAEds+B,IAAK,CACDt+B,SAAU,OACVpF,WAAY,WACZ4F,OAAQ,EACRwR,QAAS,GACTnY,MAAO,QAEXqzD,QAAS,CACL5tD,gBAAiB,eACjBlF,MAAO,uBACPuF,aAAc,MACd6O,GAAI,EACJ2+C,GAAI,EACJC,GAAI,OAERC,QAAS,CACL/tD,gBAAiB,iBACjBlF,MAAO,yBACPuF,aAAc,MACd6O,GAAI,EACJ2+C,GAAI,EACJC,GAAI,QA+MZ,QAlMA,SAAsBl1D,GAAkE,IAAjE,IAAEuP,EAAG,QAAE/E,EAAO,YAAE6qC,GAAiCr1C,EACpE,MAAO+E,EAAMqwD,IAAWh1D,EAAAA,EAAAA,UAAS,KAC1B8hC,EAASmzB,IAAcj1D,EAAAA,EAAAA,WAAS,IAChCk1D,EAAUC,IAAen1D,EAAAA,EAAAA,WAAS,GACnCo1D,EAASz8C,IAAAA,OAA6B,MACtC08C,EAAS18C,IAAAA,OAA6B,MACtC28C,EAAe38C,IAAAA,YAAgE1K,GAwFrF,IAAIvF,EAmDJ,OAzIArI,EAAAA,EAAAA,YAAU,KACN40D,GAAW,GACXD,EAAQ,IACR,IAAI1lD,EAAOH,EACPG,EAAKrR,WAAW,yBAChBqR,EAAOA,EAAKhL,QAAQ,sBAAuB,sCAAsCA,QAAQ,SAAU,MAGvGixD,MAAMjmD,GACD/R,MAAKwb,GAAMA,EAAGpU,SACdpH,MAAMi4D,IACHR,EAAQQ,GACRP,GAAW,EAAM,IAEpBt3D,OAAM,IAAYs3D,GAAW,IAAO,GAC1C,CAAC9lD,KAEJ9O,EAAAA,EAAAA,YAAU,KACN,MAAMo1D,EAAkBA,KAAgB,IAADC,EACnC,MAAMC,EAAmD,QAAjBD,EAAGL,EAAO9gD,eAAO,IAAAmhD,OAAA,EAAdA,EAAgBE,cAAc,aACzE,QAAID,IAEIA,EAAYE,cAAgBF,EAAYG,eAIxCR,EAAa/gD,UACbkyC,cAAc6O,EAAa/gD,SAC3B+gD,EAAa/gD,QAAU,MAE3BohD,EAAYI,SAAYrgD,IACpB,MAAMsgD,EAAsBtgD,EAAMxG,OAE5B+mD,EAAYD,EAAIE,UAAYF,EAAIF,cAAgBE,EAAIH,aAAe,IACpEX,GAAYe,GACbd,EAAYc,EAChB,IAbO,EAiBH,EA4BhB,OAzBKn0B,GAAWn9B,IACRA,EAAK1G,WAAW,KACXw3D,MACDH,EAAa/gD,QAAU+gD,EAAa/gD,SAAWuwC,aAAY,IAAM2Q,KAAmB,MAEjFL,EAAO7gD,QAEV6gD,EAAO7gD,QAAQshD,aAAe,IAAMT,EAAO7gD,QAAQuhD,cACnDX,GAAY,GAIhB9lD,YAAW,KACH+lD,EAAO7gD,QAEH6gD,EAAO7gD,QAAQshD,aAAe,IAAMT,EAAO7gD,QAAQuhD,cACnDX,GAAY,GAGhBA,GAAY,EAChB,GACD,MAIJ,KACCG,EAAa/gD,UACbkyC,cAAc6O,EAAa/gD,SAC3B+gD,EAAa/gD,QAAU,MAI3B,MAAM4hD,EAAiCf,EAAO7gD,QAE9C,GAAI4hD,EAAS,CACT,MAAMC,EAAsCD,EAAQP,cAAc,aAC9DQ,IACAA,EAAaL,SAAW,KAEhC,EACH,GACF,CAACj0B,EAASozB,EAAUvwD,KAGlBm9B,GAAWn9B,IAER+D,EADA/D,EAAK1G,WAAW,MAEZ+C,EAAAA,EAAAA,KAACq1D,EAAAA,EAAQ,CACLn9B,UAAU,WACVo9B,WAAY,CACRC,GAAIC,IACAx1D,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,KACV9B,GAAI5D,EAAOyzD,QAAQ/0D,SAElB22D,EAAQ32D,WAGjB42D,GAAIC,IACA11D,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,KACV9B,GAAI5D,EAAO4zD,QAAQl1D,SAElB62D,EAAQ72D,YAGnBA,SAED8E,KAKL3D,EAAAA,EAAAA,KAAA,OACI4E,MAAOzE,EAAO6kC,IACdryB,IAAKyhD,EACLuB,SAAUA,KACN,GAAIvB,EAAO7gD,QAAS,CAEhB,MAAM0hD,EACFb,EAAO7gD,QAAQ2hD,UAAYd,EAAO7gD,QAAQuhD,cAC1CV,EAAO7gD,QAAQshD,aAAe,IAC7BX,GAAYe,GACbd,EAAYc,EAEpB,GACFp2D,SAED8E,MAObc,EAAAA,EAAAA,MAACgH,EAAAA,OAAM,CACHrC,QAASA,IAAMA,IACfsC,MAAM,EACNnF,SAAS,KACT0J,WAAS,EACTlM,GAAI,CAAE,qBAAsB5D,EAAOgG,OAAQtH,SAAA,EAE3C4F,EAAAA,EAAAA,MAAC4L,EAAAA,YAAW,CAAAxR,SAAA,CACPsF,EAAAA,KAAKC,EAAE,qBAAqB,KAACpE,EAAAA,EAAAA,KAAA,QAAM4E,MAAO,CAAE+G,WAAY,GAAI5E,WAAY,QAASlI,SAAEo1C,QAExFj0C,EAAAA,EAAAA,KAACkM,EAAAA,cAAa,CACVtH,MAAOzE,EAAOsG,eACd0F,UAAQ,EAAAtN,UAERmB,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,EAAOtF,KACX8X,IAAK0hD,EAAOx1D,SAEXiiC,GAAU9gC,EAAAA,EAAAA,KAACqE,EAAAA,eAAc,IAAMqD,OAGxCjD,EAAAA,EAAAA,MAACoK,EAAAA,cAAa,CAAAhQ,SAAA,EACVmB,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHzT,GAAG,wBACHmR,QAAQ,YACR/C,SAAUq3B,IAAYozB,EACtBnlD,WAAS,EACTC,QAASA,IAAM5F,GAAQ,GACvB6F,UAAWilD,GAAWl0D,EAAAA,EAAAA,KAAColB,EAAAA,MAAS,KAAMplB,EAAAA,EAAAA,KAAC41D,EAAAA,cAAiB,IACxD90D,MAAM,UAASjC,SAEbq1D,EAAkD/vD,EAAAA,KAAKC,EAAE,UAA9CD,EAAAA,KAAKC,EAAE,iCAExBpE,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHzT,GAAG,uBACHmR,QAAQ,YACRwC,QAASA,IAAM5F,IACf6F,WAAWjP,EAAAA,EAAAA,KAAC61D,EAAAA,MAAS,IACrB/0D,MAAM,OAAMjC,SAEXsF,EAAAA,KAAKC,EAAE,gBAK5B,C,y2CC/OA,MAAMjE,OAA8B,CAChCtF,KAAO2K,IAAe,CAClBQ,gBAAiBR,EAAMS,QAAQC,WAAWC,MAC1C5F,MAAO,OACP6F,OAAQ,OACR9F,QAAS,OACT+F,aAAc,QAElBF,MAAO,CACHI,SAAU,IACVhG,MAAO,QAEXkG,eAAgB,CACZnG,QAAS,QAEb0kC,IAAK,CACDt+B,SAAU,OACV0B,EAAG,OACH,MAAO,CACHnH,SAAU,KAGlB60D,UAAW,CACP90D,MAAO,GACPD,IAAK,GACLV,SAAU,WACVC,QAAS,OACTI,WAAY,SACZI,MAAO,UAEX+wD,IAAK,CACD,2BAA4B,CACxBlmD,WAAY,GACZpL,MAAO,GACP6F,OAAQ,GACRc,OAAQ,SACR7G,SAAU,WACV,UAAW,CACPqH,QAAS,KACTrH,SAAU,WACVkH,OAAQ,EACRxG,IAAK,EACL4G,KAAM,EACNpH,MAAO,OACP6F,OAAQ,OACRF,WAAY,8CACZ0B,eAAgB,QAChB5B,gBAAiB,UAI7BwB,KAAM,CACFjH,MAAO,GACP6F,OAAQ,GACRgC,EAAG,SACH/B,aAAc,MACdhG,SAAU,WACV,UAAW,CACPqH,QAAS,KACTrH,SAAU,WACVkH,OAAQ,EACRxG,IAAK,EACL4G,KAAM,EACNpH,MAAO,OACP6F,OAAQ,OACRF,WAAY,8CACZ0B,eAAgB,QAChB5B,gBAAiB,SAGzB2vB,KAAM,CACFzuB,OAAQ,WAIVmB,OAASzJ,IAA8C,IAA7C,KAAE6L,GAAwB7L,EACtC,OAAQ6L,GACJ,IAAK,UACD,OACIzK,EAAAA,+CAAAA,KAAC4I,iDAAAA,QAAW,CACRsvB,UAAU,wBACVtzB,MAAO,CAAE9D,MAAO,aAG5B,IAAK,OAcL,QACI,OACId,EAAAA,+CAAAA,KAAC2I,iDAAAA,KAAQ,CACLuvB,UAAU,wBACVtzB,MAAO,CAAE9D,MAAO,aAX5B,IAAK,SACD,OACId,EAAAA,+CAAAA,KAACgmC,iDAAAA,OAAU,CACP9N,UAAU,wBACVtzB,MAAO,CAAE9D,MAAO,aAUhC,EAGJ,SAASi1D,YAAYzxD,EAAqBgF,GACtC,QAAS7M,OAAOC,KAAK4M,GAChByV,QAAO1jB,GAAMA,EAAG4B,WAAW,kBAADX,OAAmBgI,EAAW,QACxDkG,MAAKnP,GAAMiO,EAAUjO,GAAIwnD,SAClC,CAEA,SAASmT,gBAAgBC,EAAmBr2D,GACxC,GAAIq2D,EAAUh5D,WAAW,UAAW,CAEhC,OAAO2C,IADMq2D,EAAUh3C,UAAU,EAAGg3C,EAAU75D,OAAS,GAAG85D,MAE9D,CACA,GAAID,EAAUh5D,WAAW,WAAag5D,EAAUh5D,WAAW,WAAY,CACnE,MAAMk5D,EAAOF,EAAUh3C,UAAU,EAAGg3C,EAAU75D,OAAS,GAAG85D,OAC1D,IACI,OAAOE,8CAAAA,GAAUD,EAAMv2D,EAC3B,CAAE,MAAAwtC,GACE,OAAO,CACX,CACJ,CACA,GAAI6oB,EAAUh5D,WAAW,WAAY,CACjC,MAAMk5D,EAAOF,EAAUh3C,UAAU,EAAGg3C,EAAU75D,OAAS,GAAG85D,OAC1D,IACI,OAAOE,8CAAAA,GAAUx2D,EAAkBu2D,EACvC,CAAE,MAAApX,GACE,OAAO,CACX,CACJ,CACA,GAAIkX,EAAUh5D,WAAW,WAAY,CACjC,MAAMo5D,EAAQJ,EAAUh3C,UAAU,EAAGg3C,EAAUl4D,QAAQ,MAAMm4D,OACvDI,EAAQL,EAAUh3C,UAAUg3C,EAAUl4D,QAAQ,KAAO,EAAGk4D,EAAU75D,OAAS,GAAG85D,OACpF,IACI,OAAOE,8CAAAA,IAAWx2D,EAAkBy2D,IAAUD,8CAAAA,IAAWx2D,EAAkB02D,EAC/E,CAAE,MAAA5T,GACE,OAAO,CACX,CACJ,CACA,OAAO,CACX,CA4DO,MAAMzF,cAAgBA,CAAClzC,SAAqBwsD,cAAuBC,WACtE,MAAMC,eAAgC,GAEtC,IACI,MAAMC,MAAQz0D,KAAKC,MACnB,IAAK,MAAM9B,WAAW2J,SAAU,CAC5B,IAAK3J,QACD,SAGJ,GAAIA,QAAQ/E,KAAOk7D,cACf,MAEJ,IAAII,QAAS,EAEb,GAAIA,QAAUv2D,QAAQ,eAAiB,IAAI6B,KAAK7B,QAAQ,eAAekoC,UAAYouB,MAC/EC,QAAS,OACN,GAAIA,QAAUv2D,QAAQ,aAAe,IAAI6B,KAAK7B,QAAQ,aAAakoC,UAAYouB,MAClFC,QAAS,OACN,GAAIA,QAAUv2D,QAAQw2D,YAAcn6D,OAAOC,KAAK0D,QAAQw2D,YAAYx6D,OAAS,EAAG,CACnF,IAAIy6D,GAAgB,EACU,SAA1Bz2D,QAAQw2D,WAAWE,KACnBD,GAAgB,GAEpB,MAAM3Z,EAAWzgD,OAAOC,KAAK0D,QAAQw2D,YAAY73C,QAAO1T,GAAe,OAARA,IAC/D,IAAI0rD,GAAkB,EACtB,IAAK,IAAI33C,EAAI,EAAGA,EAAI89B,EAAS9gD,OAAQgjB,IAAK,CACtC,MAAMtf,EAAU02D,QAAQtZ,SAASA,EAAS99B,IACpC62C,EAAY71D,QAAQw2D,WAAW1Z,EAAS99B,IAc9C,GAbI62C,IACKn2D,GAAyB,eAAdm2D,EAELn2D,GAAyB,eAAdm2D,EAClBc,GAAkB,EACXj3D,GAAyB,WAAdm2D,EAClBc,EAAkBhB,YAAY7Y,EAAS99B,GAAIo3C,QAAQltD,WAC5CxJ,GAAyB,YAAdm2D,EAClBc,GAAmBhB,YAAY7Y,EAAS99B,GAAIo3C,QAAQltD,WAC7CxJ,IACPi3D,EAAkBf,gBAAgBC,EAAWn2D,EAAQk3D,IARrDD,GAAkB,GAWtBF,IAAkBE,EAClB,MACG,IAAKF,GAAiBE,EACzB,KAER,CACAJ,OAASI,CACb,CAEIJ,QAAUv2D,QAAQ,iBAAmBo2D,QAAQrZ,cAC7CwZ,OAASX,gBAAgB51D,QAAQ,gBAAiBo2D,QAAQrZ,cAE1DwZ,QAAUv2D,QAAQ,gBAAkBo2D,QAAQpZ,aAC5CuZ,OAASX,gBAAgB51D,QAAQ,eAAgBo2D,QAAQpZ,aAEzDuZ,QAAUv2D,QAAQk9C,IAAMkZ,QAAQlZ,KAChCqZ,OAASH,QAAQlZ,KAAOl9C,QAAQk9C,IAEhCqZ,QAAUv2D,QAAQ2tB,OAGd4oC,OADAtqB,MAAMC,QAAQkqB,QAAQxoC,YACbwoC,QAAQxoC,WAAWrwB,SAASyC,QAAQ2tB,MAEpCyoC,QAAQxoC,aAAe5tB,QAAQ2tB,MAG5C4oC,QAAUv2D,QAAQu6B,OAEdg8B,OADAtqB,MAAMC,QAAQlsC,QAAQu6B,MACb67B,QAAQ77B,MAAQv6B,QAAQu6B,KAAKnwB,MAAKmwB,GAAQ67B,QAAQ77B,OAASA,OAExD67B,QAAQ77B,MAAQ67B,QAAQ77B,OAASv6B,QAAQu6B,OAIzDg8B,QAAUv2D,QAAQ,uBAElBu2D,OAASM,KAAK,GAAD36D,OAAIk6D,QAAQzZ,UAAS,KAAAzgD,OAAI8D,QAAQ,wBAG9Cu2D,QAAUv2D,QAAQ,qBACbA,QAAQ,mBAAmBzC,SAAS64D,QAAQ3Z,iBAC7C8Z,QAAS,IAIbA,QACAF,eAAe74D,KAAK,CAChBvC,GAAI+E,QAAQ/E,GACZyQ,MAAO1L,QAAQ0L,MAAM0qD,QAAQ33C,OAASze,QAAQ0L,MAAMjI,GACpD6D,QAAStH,QAAQsH,QAAQ8uD,QAAQ33C,OAASze,QAAQsH,QAAQ7D,GAC1DqzD,MAAO92D,QAAQ82D,MACfC,QAAS/2D,QAAQ+2D,QACjBxhC,KAAMv1B,QAAQu1B,KACdyhC,UACiC,kBAAtBh3D,QAAQg3D,UACTh3D,QAAQg3D,UAAUZ,QAAQ33C,OAASze,QAAQg3D,UAAUvzD,GACrDzD,QAAQg3D,UAClBvF,IAAKzxD,QAAQyxD,KAGzB,CACJ,CAAE,MAAAwF,UACE,CAGJ,OAAOZ,cAAc,EAGzB,SAAS9P,gBAAe79C,GAQP,IAADwuD,EAAAC,EAAA,IARS,QACrB3Q,EAAO,QACPrzC,EAAO,gBACPszC,GAKH/9C,EACG,MAAOzN,EAAIm8D,IAASx4D,EAAAA,mCAAAA,UAASuU,IACtBkkD,EAAMC,IAAW14D,EAAAA,mCAAAA,WAAS,IAC1B24D,EAAUC,IAAe54D,EAAAA,mCAAAA,UAAS,IAEzCK,EAAAA,mCAAAA,YAAU,KACN,MAAMiV,EAAOsyC,EAAQp8C,MAAKuN,GAAMA,EAAG1c,KAAOA,IAC1C,GAAIiZ,EAAM,CACN,MAAMvL,EAAQ69C,EAAQ7oD,QAAQuW,GAC9B,GAAIvL,EAAQ,EAAI69C,EAAQxqD,OAAQ,CAC5B,MAAMy7D,EAAQjR,EAAQ79C,EAAQ,GAAG1N,GAC7Bw8D,IACAL,EAAMK,GACND,EAAY7uD,EAAQ,GAE5B,MACI89C,GAER,MACI2Q,EAAM5Q,EAAQ,GAAGvrD,GACrB,GAED,CAACo8D,IAEJ,MAAMruD,EAAUA,KAEZsuD,GAASD,GACT5Q,EAAgBxrD,EAAG,EAGjBwjB,EAAO1a,wDAAAA,KAAK4I,cACZrF,EAAUk/C,EAAQ+Q,GAAUjwD,QAAQpE,QAAQ,cAAe,SAC3DwI,EAAQ86C,EAAQ+Q,GAAU7rD,MAE1B6pB,EAAOixB,EAAQ+Q,GAAUhiC,KACzByhC,EAAYxQ,EAAQ+Q,GAAUP,UACpC,OACI3yD,EAAAA,+CAAAA,MAACgH,2CAAAA,OAAM,CACHrC,QAASA,EACTsC,MAAM,EACN3H,GAAI,CAAE,qBAAsB5D,OAAOgG,OAAQtH,SAAA,EAE3C4F,EAAAA,+CAAAA,MAACX,2CAAAA,IAAG,CACA+B,UAAU,MACV9B,IAAE3E,EAAAA,+JAAAA,IAAAA,EAAAA,+JAAAA,GAAA,GAAOe,OAAO21D,WAAc31D,OAAO0xD,KAAMhzD,SAAA,CAE1C,IAAIoD,KAAK2kD,EAAQ+Q,GAAUR,SAAS/7B,mBAAmBvc,IACxD7e,EAAAA,+CAAAA,KAACqI,OAAM,CAACoC,KAAMm8C,EAAQ+Q,GAAUT,YAEpCl3D,EAAAA,+CAAAA,KAACqQ,2CAAAA,YAAW,CAAAxR,SAAEsF,wDAAAA,KAAKC,EAAE,4BACrBpE,EAAAA,+CAAAA,KAACqQ,2CAAAA,YAAW,CAAAxR,SAAEiN,KACd9L,EAAAA,+CAAAA,KAACkM,2CAAAA,cAAa,CACVtH,MAAOzE,OAAOsG,eACd0F,UAAQ,EAAAtN,UAERmB,EAAAA,+CAAAA,KAAC8D,2CAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,OAAOtF,KAAKgE,UAEhB4F,EAAAA,+CAAAA,MAACX,2CAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,OAAO6kC,IAAInmC,SAAA,EAEG,QAAjBy4D,EAAA1Q,EAAQ+Q,UAAS,IAAAL,OAAA,EAAjBA,EAAmBzF,OAChB7xD,EAAAA,+CAAAA,KAAC4N,2CAAAA,UAAS,CACN7J,GAAI5D,OAAOqH,KACX3B,UAAU,MACVgI,MAAO+4C,EAAQ+Q,GAAU9F,OAGjC7xD,EAAAA,+CAAAA,KAACkE,2CAAAA,WAAU,CACPsI,QAAQ,QACR3G,UAAU,IAAGhH,SAEZmF,wDAAAA,MAAMC,gBAAgByD,EAAQpE,QAAQ,MAAO,cAEhC,QAAjBi0D,EAAA3Q,EAAQ+Q,UAAS,IAAAJ,OAAA,EAAjBA,EAAmB5hC,QAChB31B,EAAAA,+CAAAA,KAAC8O,2CAAAA,OAAM,CACHtC,QAAQ,YACR5H,MAAOzE,OAAOw1B,KACd3mB,QAASA,IAAMnS,OAAO6O,KAAKk7C,EAAQ+Q,GAAUhiC,KAAM,UACnD70B,MAAM,UAASjC,SAEdu4D,GAAajzD,wDAAAA,KAAKC,EAAE,kBAMzCK,EAAAA,+CAAAA,MAACoK,2CAAAA,cAAa,CAAAhQ,SAAA,CACT82B,GACG31B,EAAAA,+CAAAA,KAAC8O,2CAAAA,OAAM,CACHzT,GAAG,8BACHmR,QAAQ,YACRwC,QAASA,KACL,MAAM8oD,EAAQj7D,OAAO6O,KAAKiqB,EAAM,UAC3B,OAALmiC,QAAK,IAALA,GAAAA,EAAOn2C,OAAO,EAElB7gB,MAAM,YACNmO,WAAWjP,EAAAA,+CAAAA,KAAC+3D,iDAAAA,OAAS,IAAIl5D,SAExBu4D,GAAajzD,wDAAAA,KAAKC,EAAE,oBAEzB,MACJpE,EAAAA,+CAAAA,KAAC8O,2CAAAA,OAAM,CACHzT,GAAG,gCACHmR,QAAQ,YACRuC,WAAS,EACTC,QAAS5F,EACTtI,MAAM,UACNmO,WAAWjP,EAAAA,+CAAAA,KAACkP,iDAAAA,MAAS,IAAIrQ,SAExBsF,wDAAAA,KAAKC,EAAE,sBAK5B,CAEA,gD,iHClcA,MAAMjE,EAA8C,CAChD63D,YAAa,CACT12D,WAAY,UAEhBuiB,MAAO,CACH1N,SAAU,MAcX,MAAMkrC,UAAyC7/C,EAAAA,UAMlD7G,WAAAA,CAAY8G,GACRC,MAAMD,GAAO,KAHAw2D,YAAM,EAKnB18D,KAAKsG,MAAQ,CACTq2D,eAAgBthD,KAAKC,OAChBpV,EAAM2/C,eAAiBC,EAAiCC,oBAAsB,MAIvF/lD,KAAK08D,OAASp7D,OAAO2vD,WAAa2L,EAAAA,CACtC,CAEA,uBAAO7W,GACH,OACIx8C,UAAWjI,OAAegT,eAAiBhT,OAAOiT,cAAcC,QAAQ,qBAAsB,MAC7FqoD,EAAAA,gBAAgBC,UAAY,IAAS,KAE9C,CAEA,wBAAOC,CAAkBlX,GACrB,OAAIA,GACSvkD,OAAegT,eAAiBhT,OAAOiT,cAAcyB,QAC1D,oBACA6vC,EAAchzC,aAGbvR,OAAegT,eAAiBhT,OAAOiT,cAAc6yC,WAAW,oBAC7E,CAEA/8C,MAAAA,GACI,OACInB,EAAAA,EAAAA,MAACgH,EAAAA,OAAM,CACHC,MAAM,EACNnF,SAAS,KACT6C,QAASA,IAAM7N,KAAKkG,MAAM2H,UAAUvK,SAAA,EAEpCmB,EAAAA,EAAAA,KAACqQ,EAAAA,YAAW,CAAAxR,SAAEtD,KAAKkG,MAAM2C,EAAE,gCAC3BK,EAAAA,EAAAA,MAACyH,EAAAA,cAAa,CAAArN,SAAA,EACVmB,EAAAA,EAAAA,KAACsnB,EAAAA,kBAAiB,CAAAzoB,SACbtD,KAAKkG,MAAM2C,EAAE,qFAElBpE,EAAAA,EAAAA,KAAC0kB,EAAAA,UAAS,CACNlY,QAAQ,WACR5H,MAAOzE,EAAO0jB,MACd/W,MAAOvR,KAAKkG,MAAM2C,EAAE,gBACpBlE,MAAO3E,KAAKsG,MAAMq2D,eAClBlzD,SAAUpI,GAAKrB,KAAKwD,SAAS,CAAEm5D,eAAgBt7D,EAAEsR,OAAOhO,QACxDzE,KAAK,SACLsQ,UAAW,CAAE8Y,UAAW,CAAE0zC,IAAK,EAAG5M,IAAK,MACvC/mC,WAAYrpB,KAAKkG,MAAM2C,EAAE,oBAGjCK,EAAAA,EAAAA,MAACoK,EAAAA,cAAa,CAAAhQ,SAAA,EACVmB,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHzT,GAAG,gCACH68B,UAAU,yBACVtzB,MAAOzE,EAAO63D,YACdxrD,QAAQ,YACRwC,QAASA,KACLqyC,EAAiCiX,kBAAkB,KACnD/8D,KAAKkG,MAAM2H,QAAQ,IAAM,EAE7B6F,WAAWjP,EAAAA,EAAAA,KAACw4D,EAAAA,WAAQ,IACpB13D,MAAM,OAAMjC,SAEXtD,KAAK08D,OAAS18D,KAAKkG,MAAM2C,EAAE,YAAc7I,KAAKkG,MAAM2C,EAAE,8BAE3DpE,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHzT,GAAG,4BACH68B,UAAU,qBACV1rB,QAAQ,YACRuC,WAAS,EACTjO,MAAM,UACN2I,UAAW3E,SAASvJ,KAAKsG,MAAMq2D,eAA0B,IACzDlpD,QAASA,KACL,MAAMoyC,EAAoE,IAApDt8C,SAASvJ,KAAKsG,MAAMq2D,eAA0B,IACpE7W,EAAiCiX,kBAAkBlX,GACnD7lD,KAAKkG,MAAM2H,QAAQg4C,EAAc,EAErCnyC,WAAWjP,EAAAA,EAAAA,KAACkP,EAAAA,MAAS,IAAIrQ,SAExBtD,KAAK08D,OAAS,KAAO18D,KAAKkG,MAAM2C,EAAE,YAEvCpE,EAAAA,EAAAA,KAAC8O,EAAAA,OAAM,CACHzT,GAAG,+BACH68B,UAAU,yBACV1rB,QAAQ,YACRwC,QAASA,IAAMzT,KAAKkG,MAAM2H,UAC1BtI,MAAM,OACNmO,WAAWjP,EAAAA,EAAAA,KAACmP,EAAAA,MAAS,IAAItQ,SAExBtD,KAAK08D,OAAS,KAAO18D,KAAKkG,MAAM2C,EAAE,iBAKvD,EAGJ,S,sEC5HA,MAYMq0D,EAAgC,CAClC,GAAI,CAAE33D,MAAO,SACb,GAAI,CAAEA,MAAO,OACb,GAAI,CAAEA,MAAO,SACb,GAAI,CAAEA,MAAO,UACb,GAAI,CAAEA,MAAO,QACb,GAAI,CAAEA,MAAO,UACb,GAAI,CAAEA,MAAO,QACb,GAAI,CAAEA,MAAO,SAEb,GAAI,CAAEA,MAAO,QACb,GAAI,CAAEA,MAAO,YACb,GAAI,CAAEA,MAAO,cACb,GAAI,CAAEA,MAAO,eACb,GAAI,CAAEA,MAAO,aACb,GAAI,CAAEA,MAAO,eACb,GAAI,CAAEA,MAAO,aACb,GAAI,CAAEA,MAAO,SAEb,GAAI,CAAEkF,gBAAiB,SACvB,GAAI,CAAEA,gBAAiB,OACvB,GAAI,CAAEA,gBAAiB,SACvB,GAAI,CAAEA,gBAAiB,UACvB,GAAI,CAAEA,gBAAiB,QACvB,GAAI,CAAEA,gBAAiB,UACvB,GAAI,CAAEA,gBAAiB,QACvB,GAAI,CAAEA,gBAAiB,SAEvB,IAAK,CAAEA,gBAAiB,QACxB,IAAK,CAAEA,gBAAiB,YACxB,IAAK,CAAEA,gBAAiB,cACxB,IAAK,CAAEA,gBAAiB,eACxB,IAAK,CAAEA,gBAAiB,aACxB,IAAK,CAAEA,gBAAiB,eACxB,IAAK,CAAEA,gBAAiB,aACxB,IAAK,CAAEA,gBAAiB,UAG5B,MAAMrK,EAMF,gBAAO+8D,CAAyCp9D,GAC5C,OAAOO,KAAKsH,MAAMtH,KAAKC,UAAUR,GACrC,CAOA,gBAAOq9D,CAAUC,GACb,MAAMC,EAAKjiD,KAAKq5C,MAAO2I,EAAK,WAA2B,IAAM,GAC7DA,GAAS,WACT,MAAME,EAAKliD,KAAKq5C,MAAO2I,EAAK,QAAoB,IAAM,GACtD,IAAIj1D,EAAO,GAQX,OALIA,GADAk1D,EAAK,EACD,GAAAv8D,OAAOu8D,EAAE,OAET,GAAAv8D,OAAOw8D,EAAE,OAGVn1D,CACX,CAEA,oBAAOo1D,GACH,MAAO,iBAAkBl8D,QAAUA,OAAOouB,UAAU+tC,eAAiB,GAAKn8D,OAAOouB,UAAUguC,iBAAmB,CAClH,CAEA,kBAAOC,CAAYC,GACf,MAAM,GAAN78D,OAAU68D,EAAG,OACjB,CAEA,kBAAOC,CAAYR,GACf,GAAIhiD,KAAKyiD,IAAIT,GAAS,KAClB,MAAM,GAANt8D,OAAUs8D,EAAK,MAGnB,MAAMU,EAAQ,CAAC,KAAM,KAAM,MAE3B,IAAIC,GAAK,EAET,GACIX,GAAS,OACPW,QACG3iD,KAAKyiD,IAAIT,IAAU,MAAQW,EAAID,EAAMl9D,OAAS,GAEvD,MAAM,GAANE,OAAUs8D,EAAM7tC,QAAQ,GAAE,KAAAzuB,OAAIg9D,EAAMC,GACxC,CAEA,uBAAOC,CAAiBC,GACpB,MAAM37D,EAAM27D,EAASC,YAAY,KACjC,OAAa,IAAT57D,EACO27D,EAASx6C,UAAUnhB,EAAM,GAAGqhB,cAEhC,IACX,CAGA,kBAAOpK,CAAY4kD,EAAaC,GAC5B,QAAY3sD,IAAR0sD,GAA6B,OAARA,GAAwB,KAARA,GAA6B,kBAARA,EAC1D,MAAO,GASX,GAPyB,IAArBA,EAAI57D,QAAQ,OACZ47D,EAAMA,EAAIpkB,MAAM,IAGD,IAAfokB,EAAIv9D,SACJu9D,EAAMA,EAAI,GAAKA,EAAI,GAAKA,EAAI,GAAKA,EAAI,GAAKA,EAAI,GAAKA,EAAI,IAExC,IAAfA,EAAIv9D,OACJ,MAAM,IAAI+oD,MAAM,sBAEpB,MAAM1hC,EAAI3e,SAAS60D,EAAIpkB,MAAM,EAAG,GAAI,IAC9BskB,EAAI/0D,SAAS60D,EAAIpkB,MAAM,EAAG,GAAI,IAC9Bl2B,EAAIva,SAAS60D,EAAIpkB,MAAM,EAAG,GAAI,IAEpC,GAAIqkB,EAEA,MAAW,KAAJn2C,EAAgB,KAAJo2C,EAAgB,KAAJx6C,EAAY,IAAM,UAAY,UAGjE,MAAMy6C,GAAU,IAAMr2C,GAAGrV,SAAS,IAC5B2rD,GAAU,IAAMF,GAAGzrD,SAAS,IAC5B4rD,GAAU,IAAM36C,GAAGjR,SAAS,IAElC,MAAM,IAAN9R,OAAWw9D,EAAOG,SAAS,EAAG,MAAI39D,OAAGy9D,EAAOE,SAAS,EAAG,MAAI39D,OAAG09D,EAAOC,SAAS,EAAG,KACtF,CAQA,oBAAOC,CAAcC,EAAiB/1D,GAClC,MAAMg2D,EAAOxjD,KAAKq5C,MAAMkK,EAAO,OAC/B,IAAIE,EACAC,EACAC,EAEJJ,GAAW,MACX,MAAMK,EAAQ5jD,KAAKq5C,MAAMkK,EAAU,MAG/BI,EADAC,EAAQ,GACA,IAAAl+D,OAAOk+D,GAEJA,EAAMpsD,WAErB+rD,GAAW,KACX,MAAMM,EAAU7jD,KAAKq5C,MAAMkK,EAAU,IAEjCE,EADAI,EAAU,GACA,IAAAn+D,OAAOm+D,GAEJA,EAAQrsD,WAGzB+rD,GAAW,GAGPG,GAFJH,EAAUvjD,KAAKq5C,MAAMkK,IACP,GACA,IAAA79D,OAAO69D,GAEJA,EAAQ/rD,WAGzB,IAAIzK,EAAO,GAMX,OALIy2D,IACAz2D,GAAI,GAAArH,OAAO89D,EAAI,KAAA99D,OAAI8H,EAAE,iBAAgB,MAEzCT,GAAI,GAAArH,OAAOi+D,EAAQ,KAAAj+D,OAAI+9D,EAAU,KAAA/9D,OAAIg+D,GAE9B32D,CACX,CAEA,gBAAOgwB,CACH4N,EACAzwB,GAEA,MAAMvN,EAAmB,GACzB,IAAK,MAAM8H,KAAOk2B,EACdh+B,EAAO3F,KAAKkT,EAASywB,EAAOl2B,GAAMA,IAEtC,OAAO9H,CACX,CAEA,iBAAO3H,CAAWN,GACd,GAAO,OAAHA,QAAG,IAAHA,GAAAA,EAAKqE,OACL,GAAKrE,EAAIqE,OAAOgxD,QAoCT,CACH,IAAI7tB,GAAU,EACVxnC,EAAIqE,OAAO+6D,gBAAkBp/D,EAAIqE,OAAO6e,SACT,gBAA3BljB,EAAIqE,OAAOgxD,QAAQj+C,MACnBpX,EAAIqE,OAAOgxD,QAAQj+C,IAAM,cACzBowB,GAAU,GAEPxnC,EAAIqE,OAAO6e,UACa,SAA3BljB,EAAIqE,OAAOgxD,QAAQj+C,KAA6C,gBAA3BpX,EAAIqE,OAAOgxD,QAAQj+C,MACxDpX,EAAIqE,OAAOgxD,QAAQj+C,IAAM,OACzBowB,GAAU,IAIdxnC,EAAIqE,OAAOg7D,YAAcr/D,EAAIqE,OAAOi7D,iBACF,SAA9Bt/D,EAAIqE,OAAOgxD,QAAQxlB,SACnB7vC,EAAIqE,OAAOgxD,QAAQxlB,OAAS,OAC5BrI,GAAU,GAIdxnC,EAAIqE,OAAOk7D,SACuB,SAA9Bv/D,EAAIqE,OAAOgxD,QAAQpxB,SACnBjkC,EAAIqE,OAAOgxD,QAAQpxB,OAAS,OAC5BuD,GAAU,GAEPxnC,EAAIqE,OAAOm7D,YACgB,SAA9Bx/D,EAAIqE,OAAOgxD,QAAQpxB,SACnBjkC,EAAIqE,OAAOgxD,QAAQpxB,OAAS,OAC5BuD,GAAU,GAEdxnC,EAAIqE,OAAOgxD,QAAQpxB,OAAS,QACrBjkC,EAAIqE,OAAOo7D,YACgB,gBAA9Bz/D,EAAIqE,OAAOgxD,QAAQpxB,SACdjkC,EAAIqE,OAAOgxD,QAAQpxB,SACpBjkC,EAAIqE,OAAOgxD,QAAQpxB,OAAS,cAC5BuD,GAAU,IAGVxnC,EAAIqE,OAAOgxD,QAAQpxB,SAC3BjkC,EAAIqE,OAAOgxD,QAAQpxB,OAAS,OAC5BuD,GAAU,GAEVA,GACArhB,QAAQrM,KAAK,kBAAD9Y,OACUhB,EAAI4B,IAAIoG,QAAQ,SAAU,IAAG,qBAAAhH,OAAoBT,KAAKC,UAAUR,EAAIqE,OAAOgxD,UAGzG,MAnFQr1D,EAAIqE,OAAOk7D,UACXv/D,EAAIqE,OAAOgxD,QAAUr1D,EAAIqE,OAAOgxD,SAAW,CAAC,EAC5Cr1D,EAAIqE,OAAOgxD,QAAQpxB,OAAS,QACrBjkC,EAAIqE,OAAOm7D,YAClBx/D,EAAIqE,OAAOgxD,QAAUr1D,EAAIqE,OAAOgxD,SAAW,CAAC,EAC5Cr1D,EAAIqE,OAAOgxD,QAAQpxB,OAAS,QACrBjkC,EAAIqE,OAAOo7D,aAClBz/D,EAAIqE,OAAOgxD,QAAUr1D,EAAIqE,OAAOgxD,SAAW,CAAC,EAC5Cr1D,EAAIqE,OAAOgxD,QAAQpxB,OAAS,gBAE5BjkC,EAAIqE,OAAOgxD,QAAUr1D,EAAIqE,OAAOgxD,SAAW,CAAC,EAC5Cr1D,EAAIqE,OAAOgxD,QAAQpxB,OAAS,SAG5BjkC,EAAIqE,OAAOg7D,YAGJr/D,EAAIqE,OAAOi7D,kBAFlBt/D,EAAIqE,OAAOgxD,QAAUr1D,EAAIqE,OAAOgxD,SAAW,CAAC,EAC5Cr1D,EAAIqE,OAAOgxD,QAAQxlB,OAAS,QAM5B7vC,EAAIqE,OAAO+6D,gBAAkBp/D,EAAIqE,OAAO6e,UACxCljB,EAAIqE,OAAOgxD,QAAUr1D,EAAIqE,OAAOgxD,SAAW,CAAC,EAC5Cr1D,EAAIqE,OAAOgxD,QAAQj+C,IAAM,eAClBpX,EAAIqE,OAAO6e,WAClBljB,EAAIqE,OAAOgxD,QAAUr1D,EAAIqE,OAAOgxD,SAAW,CAAC,EAC5Cr1D,EAAIqE,OAAOgxD,QAAQj+C,IAAM,QAGzBpX,EAAIqE,OAAOgxD,SACXlvC,QAAQrM,KAAK,kBAAD9Y,OACUhB,EAAI4B,IAAIoG,QAAQ,SAAU,IAAG,qBAAAhH,OAAoBT,KAAKC,UAAUR,EAAIqE,OAAOgxD,UAqDjH,CAEA,wBAAOnoB,CAAkB7kC,GACrB,GAAIA,IAASA,EAAKhG,SAAS,UAAcgG,EAAKhG,SAAS,UAAa,CAEhE,IAAIyK,EAAIzE,EAAKgb,MAAM,kBACnB,GAAIvW,EAAG,CACH,MAAMqgC,EAAW9kC,EACXJ,EAAS,GACf,IAAIqB,EAAe,CAAC,EACpB,IAAK,IAAIoJ,EAAI,EAAGA,EAAI5F,EAAEhM,OAAQ4R,IAAK,CAC/B,MAAMlQ,EAAM6F,EAAK5F,QAAQqK,EAAE4F,IACvBlQ,GACAyF,EAAO3F,KAAK,CAAE+F,KAAMA,EAAKsb,UAAU,EAAGnhB,GAAM8G,OAAKxF,EAAAA,EAAAA,GAAA,GAAOwF,KAE5D,MAAMo2D,EAAOl2D,SAASsD,EAAE4F,GAAGiR,UAAU,GAAI,IACrCw5C,EAAOuC,GACPv+D,OAAOk0B,OAAO/rB,EAAO6zD,EAAOuC,IAhT3B,KAiT2BA,SACrBp2D,EAAM9D,MAjTT,KAkT2Bk6D,SACxBp2D,EAAMoB,gBAjTb,KAkT2Bg1D,SACpBp2D,EAAMmC,WApTnB,IAqT2Bi0D,EACrBp2D,EAAMmC,WAAa,OAzTxB,IA0T2Bi0D,IACtBp2D,EAAQ,CAAC,GAEbjB,EAAOA,EAAKsb,UAAU7W,EAAE4F,GAAG5R,OAAS0B,EACxC,CAKA,OAJI6F,GACAJ,EAAO3F,KAAK,CAAE+F,OAAMiB,OAAKxF,EAAAA,EAAAA,GAAA,GAAOwF,KAG7B,CAAE6jC,WAAUrM,MAAO74B,EAC9B,CACA,OAAOI,CACX,CACA,OAAOA,CACX,CAcA,oBAAOshB,CAAchB,EAAkBC,GAGnC,OADAA,EAAiBA,GAAkB,IADnCD,EAAWA,GAAY,KAInBC,GACAD,IAAatoB,EAAWs/D,cACxB/2C,IAAmBvoB,EAAWs/D,aAE1Bh3C,EAAS7nB,OAAS,IAAM6nB,EAAStF,MAAM,QAAUsF,EAAStF,MAAM,WAAasF,EAAStF,MAAM,SACrFhjB,EAAWu/D,sBAElBj3C,IAAaC,GACNvoB,EAAWw/D,yBAItBl3C,GAAYA,IAAatoB,EAAWs/D,cAChCh3C,EAAS7nB,OAAS,IAAM6nB,EAAStF,MAAM,QAAUsF,EAAStF,MAAM,WAAasF,EAAStF,MAAM,WACrFhjB,EAAWu/D,sBAItBh3C,GAAkBA,IAAmBvoB,EAAWs/D,cAE5C/2C,EAAe9nB,OAAS,IACvB8nB,EAAevF,MAAM,QACrBuF,EAAevF,MAAM,WACrBuF,EAAevF,MAAM,WAEfhjB,EAAWu/D,sBAItBj3C,IAAatoB,EAAWs/D,cAAgB/2C,IAAmBvoB,EAAWs/D,cAGnEt/D,EAAWy/D,oBACtB,CASA,4BAAOC,CAAsBxvC,GACzB,MAAM,YAAEvnB,GAAgBunB,EACxB,IAAI,KAAEhN,GAASgN,EAMf,OAJKlwB,EAAW2/D,wBAAwB39D,SAASkhB,KAC7CA,EAAO,MAGL,6BAANviB,OAAoCuiB,EAAI,kCAAAviB,OAAiCgI,EAAW,aACxF,CAEA,sBAAO5E,CAAgB67D,EAAoBC,GACvC,IACI,OAA6C,IAAtCpF,IAAAA,GAAUoF,EAAYD,EACjC,CAAE,MAAAnuB,GAEE,OADA3rB,QAAQrM,KAAK,8BAAD9Y,OAA+Bk/D,EAAU,WAAAl/D,OAAUi/D,EAAU,OAClE,CACX,CACJ,CAEA,cAAOE,CAAQC,EAAmC78C,GAC9C,MAAoB,kBAAT68C,EACFA,GAGGA,EAAK78C,IAAS68C,EAAK73D,IAAM,IAAIuK,WAF1B,GAKRstD,EAAOA,EAAKttD,WAAa,EACpC,CAEA,YAAOglB,CAAS93B,GACZ,OAAOO,KAAKsH,MAAMtH,KAAKC,UAAUR,GACrC,EApXEK,EAwRKu/D,sBACH,6FAzRFv/D,EA2RKw/D,yBAA2B,6CA3RhCx/D,EA6RKy/D,qBAAuB,gCA7R5Bz/D,EA+RKs/D,aAAe,cA/RpBt/D,EAkSK2/D,wBAAgD,CAAC,KAAM,KAAM,KAAM,SAqF9E,S,qEChbO,MAAMnD,EAAe,IAM5B,MAAMwD,UAAmFn6D,EAAAA,UAA0B7G,WAAAA,GAAA,SAAAklC,WAAA,KACvG+7B,6BAAuB,OAEvBC,eAAgD,KAAK,KA0B7DC,WAAa,KACLvgE,KAAKsgE,gBACL7jD,aAAazc,KAAKsgE,gBAEtBtgE,KAAKsgE,eAAiBxtD,YAAW,KAC7B9S,KAAKsgE,eAAiB,KAClBtgE,KAAKsG,MAAMo2D,SAAW0D,EAAaI,YACnCxgE,KAAKwD,SAAS,CAAEk5D,OAAQ0D,EAAaI,YACzC,GACD,IAAI,CACT,CAlCF,eAAOA,GACH,OAAOl/D,OAAO2vD,WAAa2L,CAC/B,CAEA51D,iBAAAA,GACQhH,KAAKsG,MAAMo2D,SAAW0D,EAAaI,YACnCxgE,KAAKwD,SAAS,CAAEk5D,OAAQ0D,EAAaI,aAEpCxgE,KAAKqgE,0BACNrgE,KAAKqgE,yBAA0B,EAC/B/+D,OAAOkmD,iBAAiB,SAAUxnD,KAAKugE,YAAY,GAE3D,CAEA/9C,oBAAAA,GACQxiB,KAAKsgE,iBACL7jD,aAAazc,KAAKsgE,gBAClBtgE,KAAKsgE,eAAiB,MAEtBtgE,KAAKqgE,yBACL/+D,OAAO2oD,oBAAoB,SAAUjqD,KAAKugE,YAAY,EAE9D,CAeAE,cAAAA,CAAehvD,EAAmBrJ,EAAcs4D,GAC5C,OAAIjvD,GAAQrJ,EACJpI,KAAKsG,MAAMo2D,OACPgE,GAEIx3D,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAA7F,SAAA,CACKmO,EAAK,MAAIivD,KAIfjvD,GAGPvI,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAA7F,SAAA,CACKmO,GACDhN,EAAAA,EAAAA,KAAA,QAAM4E,MAAO,CAAE+G,WAAY,GAAI9M,SAAE8E,OAIzCqJ,IAGArJ,GAGG,KACX,EAGJ,S,+DC9EO,MAAMu4D,EAA2B,8EAG3B5iC,EAAsD,CAAC,OAAQ,QAAS,QAAS,SAGjFC,EAA2E,CACpF4iC,KAAM,OACNC,MAAO,QACPC,MAAO,gBACPC,MAAO,wBAGX,SAASC,EAAOC,GACZ,OAAOA,EAAGh4D,MAAM,KAAKi4D,QAAO,CAACC,EAAOC,KAAWD,GAAS,GAAK53D,SAAS63D,EAAO,KAAK,KAAO,CAC7F,CAmFA,SAASC,EACLvpB,EACAn4C,EACAsD,EACAq+D,EACAr7C,GACO,IAADs7C,EAAAC,EACN,IAAK1pB,IAAgBA,EAAY1zC,OAC7B,OAAO,KAGX,IAAI4hB,EAEJ,MAAMymC,EAAsD,QAA7C8U,EAAG5hE,EAAQ,kBAADoB,OAAmBklB,WAAgB,IAAAs7C,GAAQ,QAARC,EAA1CD,EAA4Cn9D,cAAM,IAAAo9D,OAAR,EAA1CA,EAAoDnyD,KACtE,GAAIyoC,EAAY1zC,OAAOiL,OAASo9C,EAAW,CAEvC,MAAMp9C,EAAOpM,EAAM,eAADlC,OAAgB+2C,EAAY1zC,OAAOiL,OACrD,IAAIA,EAUA,OADA6W,QAAQrM,KAAK,oBAAD9Y,OAAqB+2C,EAAY1zC,OAAOiL,KAAI,SAAAtO,OAAQ+2C,EAAYn2C,MACrE,KAVD,CACN,MAAMs/D,EAnGlB,SAAkClhE,EAA0B0hE,GAAiC,IAADC,EAAAC,EACxF,MAAMtK,EAAuB,OAAHt3D,QAAG,IAAHA,GAAW,QAAR2hE,EAAH3hE,EAAK20B,cAAM,IAAAgtC,GAAU,QAAVC,EAAXD,EAAatK,gBAAQ,IAAAuK,OAAlB,EAAHA,EAAuBtK,kBACjD,IAAKA,EACD,OAAO,KAGX,IAAIuK,EACJ,IAAK,MAAMC,KAAoB3gE,OAAO8N,OAAOqoD,GACzC,GAAKwK,EAGL,IAAK,IAAIpvD,EAAI,EAAGA,EAAIovD,EAAiBhhE,OAAQ4R,IAAK,CAC9C,MAAMwuD,EAAKY,EAAiBpvD,GAC5B,GAAIwuD,EAAGa,SACH,OAEJ,GAAIL,EAAQr/D,SAAS,MAAsB,SAAd6+D,EAAGc,OAC5B,OAEJ,GAAIN,EAAQr/D,SAAS,OAASq/D,EAAQr+C,MAAM,WAA2B,SAAd69C,EAAGc,OACxD,OAEY,cAAZN,GAAuC,cAAZA,GAA2BA,EAAQr+C,MAAM,WAItD,SAAd69C,EAAGc,QACHN,EAAQr/D,SAAS,OAChB4+D,EAAOS,GAAWT,EAAOC,EAAGe,SAAehB,EAAOC,EAAGlyC,SAAWiyC,EAAOC,EAAGe,UAJ3EJ,EAASX,EAAGlyC,OAUpB,CAGJ,IAAK6yC,EACD,IAAK,MAAMC,KAAoB3gE,OAAO8N,OAAOqoD,GACzC,GAAKwK,EAGL,IAAK,IAAIpvD,EAAI,EAAGA,EAAIovD,EAAiBhhE,OAAQ4R,IAAK,CAC9C,MAAMwuD,EAAKY,EAAiBpvD,GAC5B,GAAIwuD,EAAGa,SACH,OAEJ,GAAIL,EAAQr/D,SAAS,MAAsB,SAAd6+D,EAAGc,OAC5B,OAEJ,GAAIN,EAAQr/D,SAAS,OAASq/D,EAAQr+C,MAAM,WAA2B,SAAd69C,EAAGc,OACxD,OAEY,cAAZN,GAAuC,cAAZA,GAA2BA,EAAQr+C,MAAM,UAEpEw+C,EAASX,EAAGlyC,OAIpB,CAIR,IAAK6yC,EACD,IAAK,MAAMC,KAAoB3gE,OAAO8N,OAAOqoD,GACzC,GAAKwK,EAGL,IAAK,IAAIpvD,EAAI,EAAGA,EAAIovD,EAAiBhhE,OAAQ4R,IAAK,CAC9C,MAAMwuD,EAAKY,EAAiBpvD,GAC5B,GAAIwuD,EAAGa,SACH,OAEJF,EAASX,EAAGlyC,OAChB,CAIR,OAAO6yC,CACX,CAoBuBK,CAAyB5yD,EAAMiyD,GAC1C,IAAIL,EAIA,OADA/6C,QAAQrM,KAAK,mCAAD9Y,OAAoC+2C,EAAY1zC,OAAOiL,KAAI,SAAAtO,OAAQ+2C,EAAYn2C,MACpF,KAHPqkB,EAAWi7C,CAKnB,CAIJ,MACIj7C,EAAWs7C,EAGf,OAAOt7C,CACX,CAGA,SAASk8C,EACL9nC,EACAz6B,EACAwiE,EACAjyB,EACAkyB,EACAn/D,EACA+iB,EACAC,GAEa,aAATiqB,IACAA,EAAO,UAGX,IACI,MAAMlK,EAASrmC,EAAQ,kBAADoB,OAAmBohE,IAEzC,GAAI/nC,GAAQ4L,EACR,GAAa,WAATkK,EACA9V,EAAOA,EAAKryB,QAAQ,IAADhH,OAAKqhE,EAAW,KAAKp8B,EAAOtR,OAAOwb,GAAQ,QAAU,YACrE,CACH,IAAIvrC,EAAQqhC,EAAOtR,OAAOwb,GAU1B,GARc,qBAATA,GAAwC,SAATA,GAAsBvrC,GAAmB,MAAVA,IAE3DA,GADyB,IAAzBqhC,EAAOtR,OAAO5C,OACN,IAEA,IAIH,SAAToe,GAA4B,OAATA,EAAe,CAClC,IAAI+wB,EAAKj7B,EAAOtR,OAAO0/B,MAAQpuB,EAAOtR,OAAOusC,GAClC,YAAPA,IACAA,EAAKI,EAAYr7B,EAAQrmC,EAASsD,EAAO+iB,EAAUC,IAKnDmU,EAHCA,EAAKh4B,SAAS,IAADrB,OAAKqhE,EAAW,MAGvBhoC,EAAKryB,QAAQ,IAADhH,OAAKqhE,EAAW,KAAKnB,GAAM,IAFvC7mC,EAAKryB,QAAQ,WAADhH,OAAYqhE,EAAW,KAAKnB,GAAM,GAI7D,MAGI7mC,EAHQA,EAAKh4B,SAAS,IAADrB,OAAKqhE,EAAW,MAG9BhoC,EAAKryB,QAAQ,IAADhH,OAAKqhE,EAAW,KAAKz9D,GAFjCy1B,EAAKryB,QAAQ,WAADhH,OAAYqhE,EAAW,KAAKz9D,EAIvD,MAEAuhB,QAAQC,IAAI,mBAADplB,OAAoBmvC,IAC/B9V,EAAOA,EAAKryB,QAAQ,IAADhH,OAAKqhE,EAAW,KAAK,GAEhD,CAAE,MAAOh5D,GACL8c,QAAQC,IAAI/c,EAChB,CACA,OAAOgxB,CACX,CAsBO,SAASioC,EACZjoC,EACA71B,EACAyE,EACAiyD,GAWA,MAAMqH,EAIA,GACN,IAAI15B,EAEJ,GAAIxO,EAAM,CACN,MAAM0d,EAAcmjB,EAAQltD,UAAU,kBAADhN,OAAmBwD,EAAO,KAAAxD,OAAIiI,IAC7D0rB,GAAoB,OAAXojB,QAAW,IAAXA,OAAW,EAAXA,EAAapjB,SAAU,CAAC,EAEjC6tC,EAAenoC,EAAKhX,MAAM,YAEhC,GAAIm/C,EACA,IAAK,IAAI91D,EAAI,EAAGA,EAAI81D,EAAa1hE,OAAQ4L,IAAK,CAC1C,IAAI21D,EAAcG,EAAa91D,GAE/B,GAAoB,SAAhB21D,EAAwB,CACxB,IAAInB,EAAcvsC,EAAO0/B,MAAQ1/B,EAAOusC,GACnCA,GAAa,YAAPA,IAEPA,EAAKI,EACDvpB,EACAmjB,EAAQltD,UACRktD,EAAQh4D,MACRg4D,EAAQj1C,SACRi1C,EAAQh1C,gBAIZq8C,EAAMzhE,OACNyhE,EAAM7hE,SAAQsY,GAASA,EAAKnG,IAAMmG,EAAKnG,IAAI7K,QAAQ,OAAQk5D,KAE3D7mC,EAAOA,EAAKryB,QAAQ,OAAQk5D,GAAM,GAE1C,MAAO,GAAoB,eAAhBmB,EAA8B,CACrC,MAAMI,OAAkD9wD,IAAlBgjB,EAAO5C,OAAuB4C,EAAOxhB,SAAWwhB,EAAO5C,OAC7F,IAAI5e,EAEAA,GADgB,IAAhBsvD,GAAwC,SAAhBA,EACb,SACY,IAAhBA,GAAyC,UAAhBA,GAA4BA,EAGjDA,EAAY3vD,WAAW9K,QAAQ,KAAM,IAFrC,OAKXu6D,EAAMzhE,OACNyhE,EAAM7hE,SAAQsY,GAASA,EAAKnG,IAAMmG,EAAKnG,IAAI7K,QAAQ,aAAcmL,KAEjEknB,EAAOA,EAAKryB,QAAQ,aAAcmL,EAE1C,MAAO,GAAoB,QAAhBkvD,EAAuB,CAC9B,MAAMI,OAAkD9wD,IAAlBgjB,EAAO5C,OAAuB4C,EAAOxhB,SAAWwhB,EAAO5C,OAC7F,IAAI5e,EAEAA,GADgB,IAAhBsvD,GAAwC,SAAhBA,EACb,KACY,IAAhBA,GAAyC,UAAhBA,GAA4BA,EAGjDA,EAAY3vD,WAAW9K,QAAQ,KAAM,IAFrC,GAKXu6D,EAAMzhE,OACNyhE,EAAM7hE,SAAQsY,GAASA,EAAKnG,IAAMmG,EAAKnG,IAAI7K,QAAQ,MAAOmL,KAE1DknB,EAAOA,EAAKryB,QAAQ,MAAOmL,EAEnC,MAAO,GAAoB,eAAhBkvD,EACPhoC,EAAOA,EAAKryB,QAAQ,aAAciB,EAAS6J,YACvCyvD,EAAMzhE,OACNyhE,EAAM7hE,SAAQsY,GAASA,EAAKnG,IAAMmG,EAAKnG,IAAI7K,QAAQ,aAAciB,EAAS6J,cAE1EunB,EAAOA,EAAKryB,QAAQ,aAAciB,EAAS6J,iBAW/C,GAPAuvD,EAAcA,EAAYr6D,QAAQ,KAAM,IAEpCq6D,EAAY1gE,WAAW,aACvB0gE,EAAcA,EAAY1+C,UAAU,IAInC0+C,EAAYhgE,SAAS,KA8BnB,CACH,MAAO+/D,EAAiBjyB,GAAQkyB,EAAYn5D,MAAM,KAGlD,GAAKk5D,EAAgB/+C,MAAM,aAuEpB,CAAC,IAADq/C,EAAAC,EACHtoC,EAAO8nC,EACH9nC,EACA6gC,EAAQltD,UACRo0D,EACAjyB,EACAkyB,EACAnH,EAAQh4D,MACRg4D,EAAQj1C,SACRi1C,EAAQh1C,eAGZ2iB,EAA6D,QAAzD65B,EAAGxH,EAAQltD,UAAU,kBAADhN,OAAmBohE,WAAkB,IAAAM,GAAQ,QAARC,EAAtDD,EAAwD/tC,cAAM,IAAAguC,OAAR,EAAtDA,EAAgE95B,IAC3E,KApFyC,CAErC,IAAI+5B,EACAp+D,IAAY49D,EAEZQ,EAAM,CAAC,GAAD5hE,OAAIwD,EAAO,KAAAxD,OAAIiI,KAErB25D,EAAMzhE,OAAOC,KAAK85D,EAAQltD,WACrByV,QACG1jB,GACIA,EAAG4B,WAAW,kBAADX,OAAmBohE,EAAe,OAC/ClH,EAAQltD,UAAUjO,GAAIsE,OAAOkjD,UAEpCz3C,KAAI/P,GAAMA,EAAG4jB,UAAU,MAGvBi/C,EAAI9hE,SACL8hE,EAAMzhE,OAAOC,KAAK85D,EAAQltD,WACrByV,QAAO1jB,GAAMA,EAAG4B,WAAW,kBAADX,OAAmBohE,EAAe,QAC5DtyD,KAAI/P,GAAMA,EAAG4jB,UAAU,QAIpC,IAAK,MAAM5jB,KAAM6iE,EACb,GAAIL,EAAMzhE,OAAQ,CACd,MAAMkY,EAAOupD,EAAMrzD,MAAKpG,GAAKA,EAAEG,WAAalJ,IAC5C,GAAIiZ,EACAA,EAAKnG,IAAMsvD,EACPnpD,EAAKnG,IACLqoD,EAAQltD,UACRjO,EACAowC,EACAkyB,EACAnH,EAAQh4D,MACRg4D,EAAQj1C,SACRi1C,EAAQh1C,mBAET,CAAC,IAAD28C,EAAAC,EAEH,MAAMC,EAAQZ,EACV9nC,EACA6gC,EAAQltD,UACRjO,EACAowC,EACAkyB,EACAnH,EAAQh4D,MACRg4D,EAAQj1C,SACRi1C,EAAQh1C,eAEN88C,EAAyD,QAA5CH,EAAG3H,EAAQltD,UAAU,kBAADhN,OAAmBjB,WAAK,IAAA8iE,GAAQ,QAARC,EAAzCD,EAA2CluC,cAAM,IAAAmuC,OAAR,EAAzCA,EAChBj6B,KAEN05B,EAAMjgE,KAAK,CAAEuQ,IAAKkwD,EAAOl6B,KAAMm6B,EAAO/5D,SAAUlJ,GACpD,CACJ,KAAO,CAAC,IAADkjE,EAAAC,EACH,MAAMH,EAAQZ,EACV9nC,EACA6gC,EAAQltD,UACRjO,EACAowC,EACAkyB,EACAnH,EAAQh4D,MACRg4D,EAAQj1C,SACRi1C,EAAQh1C,eAGN88C,EAAyD,QAA5CC,EAAG/H,EAAQltD,UAAU,kBAADhN,OAAmBjB,WAAK,IAAAkjE,GAAQ,QAARC,EAAzCD,EAA2CtuC,cAAM,IAAAuuC,OAAR,EAAzCA,EAChBr6B,KACN05B,EAAMjgE,KAAK,CAAEuQ,IAAKkwD,EAAOl6B,KAAMm6B,EAAO/5D,SAAUlJ,GACpD,CAER,CAcJ,KAvHgC,CAE5B,MAAMqiE,EAAe,GAAAphE,OAAMwD,EAAO,KAAAxD,OAAIiI,GAe9B,IAADk6D,EAAAC,EAdP,GAAIb,EAAMzhE,OACNyhE,EAAM7hE,SACFsY,GACKA,EAAKnG,IAAMsvD,EACRnpD,EAAKnG,IACLqoD,EAAQltD,UACRo0D,EACAC,EACAA,EACAnH,EAAQh4D,MACRg4D,EAAQj1C,SACRi1C,EAAQh1C,sBAIpBmU,EAAO8nC,EACH9nC,EACA6gC,EAAQltD,UACRo0D,EACAC,EACAA,EACAnH,EAAQh4D,MACRg4D,EAAQj1C,SACRi1C,EAAQh1C,eAEZ2iB,EAA6D,QAAzDs6B,EAAGjI,EAAQltD,UAAU,kBAADhN,OAAmBohE,WAAkB,IAAAe,GAAQ,QAARC,EAAtDD,EAAwDxuC,cAAM,IAAAyuC,OAAR,EAAtDA,EAAgEv6B,IAE/E,CA2FR,CAER,CAEA,OAAI05B,EAAMzhE,OACCyhE,EAEJ,CAAC,CAAE1vD,IAAKwnB,EAAMwO,QACzB,C,oIC/aA,MAAMhkC,EAA8C,CAChDtF,KAAM,CAEFyF,QAAS,QACTqH,KAAM,EACN5G,IAAK,EACLR,MAAO,OACP6F,OAAQ,OAERtF,MAAO,QACPuF,aAAc,EACdg9B,UACI,wGACJtO,OAAQ,mBAITrY,eAAe4E,EAClB5D,EACAhL,EACA6O,EACA/iB,EACAgjB,EACAjc,GAEA,MAAM+D,QAAkBoU,EAAgBlhB,aACxC,IAAIsD,EAAU4S,EAAIpP,QAAQ,QAAS,IACnC,MAAM8E,EAAItI,EAAQ6e,MAAM,WAClBD,EAAyBtW,EAAItD,SAASsD,EAAE,GAAI,IAAM,KACxD,IAAI7D,EACJ,GAAI+E,EACA,GAAgB,OAAZoV,EAAkB,CAClB5e,EAAUA,EAAQwD,QAAQ,UAAW,IACrC,MAAMmH,EAAI,kBAAAnO,OAAqBwD,EAAO,KAAAxD,OAAIoiB,GAC1Cna,EAAW9H,OAAOC,KAAK4M,GAAWkB,MAAKnP,GAAMA,IAAOoP,GACxD,KAAO,CACH,MAAMA,EAAI,kBAAAnO,OAAqBwD,EAAO,KAEtCyE,EAAW+E,GAAa7M,OAAOC,KAAK4M,GAAWkB,MAAKnP,GAAMA,EAAG4B,WAAWwN,IAC5E,CAIJ,GAFAlG,EAAW+E,GAAaA,EAAU/E,GAClC5I,EAAAA,EAAWC,WAAW2I,IACjBA,IAAaA,EAAS5E,SAAW4E,EAAS5E,OAAO6e,SAGlD,OAFAiD,QAAQ9c,MAAM,wBAADrI,OAAyBoW,IAE/B,GAIX,IAAIhE,EAAOnK,EAAS5E,OAAO6e,SAASmX,KACxB,IAADgpC,EAANjwD,IAEGA,EADiC,iBAAV,QAAvBiwD,EAAAp6D,EAAS5E,OAAOgxD,eAAO,IAAAgO,OAAA,EAAvBA,EAAyBjsD,KACrB,WAAApW,OAAcwD,EAAO,eAAAxD,OAA0B,OAAZoiB,QAAgCzR,IAAZyR,EAAqB,IAAApiB,OAAOoiB,GAAY,IAE/F,WAAApiB,OAAcwD,EAAO,aAAAxD,OAAwB,OAAZoiB,QAAgCzR,IAAZyR,EAAqB,IAAApiB,OAAOoiB,GAAY,KAMzG,GAHKna,EAAS5E,OAAO6e,SAASC,WAAyB,OAAZC,QAAgCzR,IAAZyR,IAC3DhQ,GAAI,GAAApS,OAAOoS,EAAK/Q,SAAS,KAAO,IAAM,IAAG,aAAArB,OAAYoiB,IAErDhQ,EAAK/Q,SAAS,KAAM,CAAC,IAADihE,EACpB,IAAIC,EAGAA,EADY,OAAZngD,EACW5Z,SAASP,EAASrH,IAAIsH,MAAM,KAAKwkC,MAAO,IAExCtqB,EAIf,MAAMogD,GAAQlB,EAAAA,EAAAA,IAAYlvD,EAAM5O,EAAS++D,EAAU,CAC/Ct9C,WAEAjY,UAAWA,EACX9K,QACAgjB,kBAGJ9S,EAAOowD,EAAgB,QAAXF,EAAGE,EAAM,UAAE,IAAAF,OAAA,EAARA,EAAUzwD,IAAM,EACnC,CAGA,OADAO,GAAI,GAAApS,OAAOoS,EAAK/Q,SAAS,KAAO,IAAM,IAAG,iBAAArB,OAA4B,OAAZoiB,QAAgCzR,IAAZyR,EAAqB,IAAApiB,OAAOoiB,GAAY,GAAE,WAAApiB,OAAUiJ,GAC1HmJ,CACX,CAiBA,MAAMuoC,UAAkBz1C,EAAAA,UAKpB7G,WAAAA,CAAY8G,GACRC,MAAMD,GAAO,KALTs9D,UAAsC,KAAK,KAE3CC,YAAsB,EA4D9B,KACAC,UAAavqD,IACT,GAAIA,EAAMwqD,SAAWriE,OAAO0R,SAAS2wD,OAGrC,GAAmB,UAAfxqD,EAAMtS,MAAsC,UAAlBsS,EAAMtU,QAChCkxB,EAAAA,OAAOC,WAAW,sBACf,GAAmB,WAAf7c,EAAMtS,MAAuC,WAAlBsS,EAAMtU,QAExCqhB,QAAQrM,KAAK,wEACV,GAAmB,aAAfV,EAAMtS,MAAyC,aAAlBsS,EAAMtU,QAE1CqhB,QAAQrM,KAAK,0EACV,GACoB,kBAAfV,EAAMtS,MAAqBsS,EAAMtS,KAAKnF,WAAW,UAC/B,kBAAlByX,EAAMtU,SAAwBsU,EAAMtU,QAAQnD,WAAW,SACjE,CACE,MAAO,CAAEkR,IAAQuG,EAAMtS,MAAQsS,EAAMtU,SAASoE,MAAM,MAC7CkO,EAAK6rC,EAAQ4gB,GAAahxD,EAAI3J,MAAM,KAC3C8sB,EAAAA,OAAOC,WAAW7e,EAAK6rC,EAAQ4gB,EACnC,GA5EA5jE,KAAKsG,MAAQ,CACT6M,KAAM,IAGV,MAAMlQ,EAA6C,CAAC,EACpD,IAAK,MAAMoM,KAAQnJ,EAAMjD,MACrBA,EAAMoM,EAAK1N,KAAO0N,EAGjB0W,EACD/lB,KAAKkG,MAAMic,gBACXniB,KAAKkG,MAAMiR,IACXnX,KAAKkG,MAAM8f,SACX/iB,EACAjD,KAAKkG,MAAM+f,cACXjmB,KAAKkG,MAAM6D,WACb/I,MAAKmS,IACHnT,KAAKwD,SAAS,CAAE2P,QAAO,GAM/B,CAEAqP,oBAAAA,GACQxiB,KAAKyjE,aACLzjE,KAAKkG,MAAMgnD,sBAAsBltD,KAAKwjE,WACtCxjE,KAAKyjE,YAAa,IAErBniE,OAAO2oD,qBAAuB3oD,OAAOuiE,aAClCviE,OAAO2oD,oBAAsB,UAAY,YACzCjqD,KAAK0jE,WACL,EAER,CAEA18D,iBAAAA,GAA2B,IAAD88D,GACjB9jE,KAAKyjE,YAA4B,QAAlBK,EAAI9jE,KAAKwjE,iBAAS,IAAAM,GAAdA,EAAgBhhB,gBACpC9iD,KAAKyjE,YAAa,EAClBzjE,KAAKkG,MAAM+mD,oBAAoBjtD,KAAKwjE,aAEvCliE,OAAOkmD,kBAAoBlmD,OAAOyiE,aAC/BziE,OAAOkmD,iBAAmB,UAAY,YACtCxnD,KAAK0jE,WACL,EAER,CAEA9gD,kBAAAA,GAAgE,IAADohD,GACtDhkE,KAAKyjE,YAA4B,QAAlBO,EAAIhkE,KAAKwjE,iBAAS,IAAAQ,GAAdA,EAAgBlhB,gBACpC9iD,KAAKyjE,YAAa,EAClBzjE,KAAKkG,MAAM+mD,oBAAoBjtD,KAAKwjE,WAE5C,CAyBAn5D,MAAAA,GACI,OAAKrK,KAAKsG,MAAM6M,MAKZ1O,EAAAA,EAAAA,KAAA,UACI2S,IAAKoF,GAAOxc,KAAKwjE,UAAYhnD,EAC7BjM,MAAOvQ,KAAKkG,MAAMiR,IAClB9N,MAAOzE,EAAOtF,KACdqlB,IAAK3kB,KAAKsG,MAAM6M,KAChB3J,QAASnI,IACJA,EAAEsR,OAA6B4/C,QAAU,KAC1CvyD,KAAKwD,SAAS,CAAE2P,KAAMnT,KAAKsG,MAAM6M,KAAKpL,QAAQ,aAAc,aAAc,KAX3EtD,EAAAA,EAAAA,KAACqE,EAAAA,eAAc,GAe9B,EAGJ,SAAeoe,EAAAA,EAAAA,YAAf,CAA2Bw0B,E","sources":["Workers/GenericWorker.tsx","components/ContextWrapper.tsx","components/NotificationMessage.tsx","dialogs/NotificationsDialog.tsx","dialogs/CommandDialog.tsx","helpers/cardSort.tsx","components/DragWrapper.tsx","components/DrawerItem.tsx","components/CustomDragLayer.tsx","components/CustomPopper.tsx","components/Drawer.tsx","components/Connecting.tsx","components/Wizard/WizardPasswordTab.tsx","components/LicenseTexts.tsx","components/Wizard/WizardLicenseTab.tsx","assets/longLogo.svg","components/Wizard/WizardSettingsTab.tsx","components/Wizard/WizardAuthSSLTab.tsx","components/Wizard/WizardPortForwarding.tsx","components/Wizard/WizardAdaptersTab.tsx","dialogs/WizardDialog.tsx","dialogs/SystemSettingsTabs/BaseSystemSettingsDialog.tsx","dialogs/SystemSettingsTabs/MainSettingsDialog.tsx","dialogs/SystemSettingsTabs/RepositoriesDialog.tsx","dialogs/SystemSettingsTabs/LicensesDialog.tsx","dialogs/SystemSettingsTabs/CertificatesDialog.tsx","dialogs/SystemSettingsTabs/SSLDialog.tsx","dialogs/SystemSettingsTabs/ACLDialog.tsx","dialogs/SystemSettingsTabs/StatisticsDialog.tsx","dialogs/SystemSettingsDialog.tsx","login/Login.tsx","dialogs/ExpertModeDialog.tsx","dialogs/HostWarningDialog.tsx","Workers/LogsWorker.tsx","Workers/InstancesWorker.tsx","Workers/HostsWorker.tsx","Workers/AdaptersWorker.tsx","Workers/ObjectsWorker.tsx","dialogs/GenerateInputsModal.tsx","helpers/hooks/useStateLocal.tsx","dialogs/DiscoveryDialog.tsx","App.tsx","bootstrap.tsx","components/Command.tsx","components/Editor.tsx","components/HostSelectors.tsx","components/IsVisible.tsx","dialogs/LicenseDialog.tsx","dialogs/NewsAdminDialog.tsx","dialogs/SlowConnectionWarningDialog.tsx","helpers/AdminUtils.tsx","helpers/MobileDialog.tsx","helpers/utils.ts","tabs/CustomTab.tsx"],"sourcesContent":["import type { AdminConnection } from '@iobroker/adapter-react-v5';\nimport AdminUtils from '@/helpers/AdminUtils';\n\nexport type EventType = 'new' | 'changed' | 'deleted';\n\nexport type GetObjectFromType<T extends ioBroker.ObjectType> = T extends 'host'\n ? ioBroker.HostObject\n : T extends 'adapter'\n ? ioBroker.AdapterObject\n : T extends 'instance'\n ? ioBroker.InstanceObject\n : T extends 'meta'\n ? ioBroker.MetaObject\n : T extends 'device'\n ? ioBroker.DeviceObject\n : T extends 'channel'\n ? ioBroker.ChannelObject\n : T extends 'state'\n ? ioBroker.StateObject\n : T extends 'folder'\n ? ioBroker.FolderObject\n : T extends 'enum'\n ? ioBroker.EnumObject\n : T extends 'script'\n ? ioBroker.ScriptObject\n : T extends 'group'\n ? ioBroker.GroupObject\n : T extends 'user'\n ? ioBroker.UserObject\n : T extends 'chart'\n ? ioBroker.ChartObject\n : T extends 'schedule'\n ? ioBroker.ScheduleObject\n : ioBroker.Object;\n\ntype GetRootFromType<T extends ioBroker.ObjectType> = T extends 'host'\n ? `system.host.${string}`\n : T extends 'adapter'\n ? `system.adapter.${string}` | `system.host.${string}.adapter.${string}`\n : T extends 'instance'\n ? `system.adapter.${string}.${number}`\n : T extends 'enum'\n ? `system.enum.${string}`\n : T extends 'script'\n ? `script.js.${string}`\n : T extends 'group'\n ? `system.group.${string}`\n : T extends 'user'\n ? `system.user.${string}`\n : string;\n\nexport type GenericEvent<T extends ioBroker.ObjectType> = {\n id: GetRootFromType<T>;\n obj?: GetObjectFromType<T>;\n type: EventType;\n oldObj?: GetObjectFromType<T>;\n};\n\nexport default class GenericWorker<T extends ioBroker.ObjectType> {\n protected readonly socket: AdminConnection;\n\n protected readonly handlers: ((events: GenericEvent<T>[]) => void)[] = [];\n\n private promise: Promise<null | Record<string, GetObjectFromType<T>>> | null = null;\n\n protected connected: boolean;\n\n protected objects: Record<string, GetObjectFromType<T>> | null = null;\n\n private readonly root: string;\n\n protected readonly objectType: ioBroker.ObjectType;\n\n private forceUpdate: boolean = false;\n\n protected constructor(socket: AdminConnection, root: string, objectType: ioBroker.ObjectType) {\n this.socket = socket;\n this.root = root;\n this.objectType = objectType;\n\n socket.registerConnectionHandler(this.connectionHandler);\n\n this.connected = this.socket.isConnected();\n if (this.connected) {\n this.connectionHandler(true);\n }\n }\n\n protected checkObjectId(id: string, obj: GetObjectFromType<T> | null | undefined): boolean {\n return id.startsWith(`${this.root}.`) && (!obj || obj.type === this.objectType);\n }\n\n // eslint-disable-next-line class-methods-use-this\n protected postProcessing(_id: string, _obj: GetObjectFromType<T> | null | undefined): void {\n // can be overridden in the child class\n }\n\n isForceUpdate(): boolean {\n return this.forceUpdate;\n }\n\n objectChangeHandler = (id: GetRootFromType<T>, obj: GetObjectFromType<T> | null | undefined): void => {\n this.objects = this.objects || {};\n\n // if our object\n if (this.checkObjectId(id, obj)) {\n let type: EventType;\n let oldObj: GetObjectFromType<T> | undefined;\n if (obj) {\n if (this.objectType === 'adapter' || this.objectType === 'instance') {\n AdminUtils.fixAdminUI(obj);\n }\n if (this.objects[id]) {\n if (JSON.stringify(this.objects[id]) !== JSON.stringify(obj)) {\n type = 'changed';\n this.objects[id] = obj;\n } else {\n // no changes\n return;\n }\n } else {\n type = 'new';\n this.objects[id] = obj;\n }\n } else if (this.objects[id]) {\n type = 'deleted';\n oldObj = this.objects[id];\n delete this.objects[id];\n } else {\n // deleted unknown object\n return;\n }\n\n this.forceUpdate = true;\n\n this.postProcessing(id, obj);\n\n this.handlers.forEach(cb =>\n cb([\n {\n id,\n obj,\n type,\n oldObj,\n },\n ]),\n );\n }\n };\n\n getObjects(update?: boolean): Promise<null | Record<string, GetObjectFromType<T>>> {\n update = update || this.forceUpdate;\n this.forceUpdate = false;\n\n if (!update && this.promise instanceof Promise) {\n return this.promise;\n }\n\n this.promise = this.socket\n .getObjectViewSystem(\n this.objectType,\n this.root ? `${this.root}.` : '',\n this.root ? `${this.root}.\\u9999` : '\\u9999',\n )\n .then(objects => {\n this.objects = objects as Record<string, GetObjectFromType<T>>;\n if (this.objectType === 'adapter' || this.objectType === 'instance') {\n Object.keys(this.objects).forEach(id => AdminUtils.fixAdminUI(this.objects[id]));\n }\n\n return this.objects;\n })\n .catch((e: unknown): null => {\n window.alert(`Cannot get objects of type ${this.objectType}, with root \"${this.root}\": ${e as Error}`);\n return null;\n });\n\n return this.promise;\n }\n\n // eslint-disable-next-line class-methods-use-this\n protected connectionPostHandler(_isConnected: boolean): void {}\n\n connectionHandler = (isConnected: boolean): void => {\n if (isConnected && !this.connected) {\n this.connected = true;\n\n if (this.handlers.length) {\n this.socket\n .subscribeObject(this.root ? `${this.root}.*` : '*', this.objectChangeHandler)\n .then(() => {\n // read all hosts anew and inform about it\n void this.getObjects(true).then(objects => {\n if (objects) {\n Object.keys(objects).forEach(id =>\n this.objectChangeHandler(id as GetRootFromType<T>, objects[id]),\n );\n }\n });\n })\n .catch(e => window.alert(`Cannot subscribe on object \"${this.root}\": ${e}`));\n }\n this.connectionPostHandler(true);\n } else if (!isConnected && this.connected) {\n this.connected = false;\n this.connectionPostHandler(false);\n }\n };\n\n registerHandler(cb: (events: GenericEvent<T>[]) => void, doNotRequestObjects?: boolean): void {\n if (!this.handlers.includes(cb)) {\n this.handlers.push(cb);\n\n if (this.handlers.length === 1 && this.connected) {\n this.socket\n .subscribeObject(this.root ? `${this.root}.*` : '*', this.objectChangeHandler)\n .then(() => {\n if (!doNotRequestObjects) {\n // read all hosts anew and inform about it\n void this.getObjects(true).then(objects => {\n if (objects) {\n Object.keys(objects).forEach(id =>\n this.objectChangeHandler(id as GetRootFromType<T>, objects[id]),\n );\n }\n });\n }\n })\n .catch(e => window.alert(`Cannot subscribe on objects \"${this.root}\": ${e}`));\n }\n }\n }\n\n unregisterHandler(cb: (events: GenericEvent<T>[]) => void): void {\n const pos = this.handlers.indexOf(cb);\n if (pos !== -1) {\n this.handlers.splice(pos, 1);\n if (!this.handlers.length && this.connected) {\n this.socket\n .unsubscribeObject(this.root ? `${this.root}.*` : '*', this.objectChangeHandler)\n .catch(e => window.alert(`Cannot unsubscribe from objects \"${this.root}\": ${e}`));\n }\n }\n }\n\n destroy(): void {\n this.handlers.forEach(cb => this.unregisterHandler(cb));\n this.socket.unregisterConnectionHandler(this.connectionHandler);\n }\n}\n","import React, { createContext, useEffect, useMemo, useState, type JSX } from 'react';\n\nimport AdminUtils from '@/helpers/AdminUtils';\n\ntype MyContext = {\n hostsUpdate: number;\n adaptersUpdate: number;\n\n hosts: ioBroker.HostObject[] | null;\n repository: { [adapterName: string]: { icon: string; version: string } } | null;\n installed: { [adapterName: string]: { version: string; ignoreVersion?: string } } | null;\n};\n\nexport const ContextWrapper = createContext<MyContext>({\n hostsUpdate: 0,\n adaptersUpdate: 0,\n\n hosts: null,\n repository: null,\n installed: null,\n});\n\nexport function ContextWrapperProvider({ children }: { children: JSX.Element[] | JSX.Element }): JSX.Element {\n const [stateContext, setState] = useState<MyContext>({\n hostsUpdate: 0,\n adaptersUpdate: 0,\n\n hosts: null,\n repository: null,\n installed: null,\n });\n\n const setStateContext = useMemo(\n () => (obj: any) => {\n setState(prevState =>\n // If a full object is passed, replace it\n Object.keys(prevState).length === Object.keys(obj).length\n ? { ...obj }\n : // else merge the new object with the old one\n { ...prevState, ...obj },\n );\n },\n [setState],\n );\n\n useEffect(() => {\n if (stateContext.hosts) {\n const jsControllerVersion = stateContext.repository['js-controller'].version;\n let count = 0;\n stateContext.hosts.forEach(element => {\n if (AdminUtils.updateAvailable(element.common.installedVersion, jsControllerVersion)) {\n count++;\n }\n });\n setStateContext({ hostsUpdate: count });\n }\n\n if (stateContext.installed) {\n let count = 0;\n Object.keys(stateContext.installed).forEach(element => {\n const _installed = stateContext.installed[element];\n const adapter = stateContext.repository[element];\n if (\n element !== 'js-controller' &&\n element !== 'hosts' &&\n _installed?.version &&\n adapter?.version &&\n _installed.ignoreVersion !== adapter.version &&\n AdminUtils.updateAvailable(_installed.version, adapter.version)\n ) {\n count++;\n }\n });\n\n setStateContext({ adaptersUpdate: count });\n }\n }, [setStateContext, stateContext.hosts, stateContext.installed, stateContext.repository]);\n\n return <ContextWrapper.Provider value={stateContext}>{children}</ContextWrapper.Provider>;\n}\n","import React, { Component, type JSX } from 'react';\n\nimport { Box, LinearProgress, Typography } from '@mui/material';\n\nimport {\n type AdminConnection,\n I18n,\n type IobTheme,\n type ThemeName,\n type ThemeType,\n Utils,\n} from '@iobroker/adapter-react-v5';\nimport {\n type BackEndCommand,\n type BackEndCommandOpenLink,\n type ConfigItemPanel,\n ConfigItemTabs,\n JsonConfigComponent,\n} from '@iobroker/json-config';\n\nconst styles: Record<string, any> = {\n message: {\n position: 'relative',\n // justifyContent: 'space-between',\n display: 'block',\n width: '100%',\n // alignItems: 'center',\n // '@media screen and (max-width: 550px)': {\n // flexWrap: 'wrap',\n // },\n },\n offline: {\n position: 'relative',\n justifyContent: 'space-between',\n display: 'flex',\n width: '100%',\n alignItems: 'center',\n opacity: 0.7,\n '@media screen and (max-width: 550px)': {\n flexWrap: 'wrap',\n },\n },\n timestamp: {\n color: 'text.secondary',\n position: 'absolute',\n top: 5,\n right: 25,\n '@media screen and (max-width: 550px)': {\n fontSize: '2.9vw',\n },\n },\n simpleMessage: {\n fontFamily: 'monospace',\n fontSize: 14,\n ml: '20px',\n mb: '10px',\n width: '100%',\n display: 'block',\n whiteSpace: 'pre-wrap',\n '@media screen and (max-width: 550px)': {\n fontSize: '2.9vw',\n ml: 0,\n },\n },\n};\n\nexport interface InstanceMessage {\n messages: {\n message: string;\n ts: number;\n }[];\n}\n/** Possible message severities */\nexport type Severity = 'notify' | 'info' | 'alert';\n\nexport interface Message {\n name: ioBroker.Translated;\n severity: Severity;\n description: ioBroker.Translated;\n /** Show button, that leads to this link */\n link?: {\n /**\n * - empty - URL = http://IP:8081/#tab-instances/config/system.adapter.ADAPTER.N\n * - `simpleText` - URL = http://IP:8081/#tab-instances/config/system.adapter.ADAPTER.N/<>simpleText>\n * - `#url` - URL = http://IP:8081/#url\n * - `http[s]://...` - URL = http[s]://...\n */\n url?: string;\n /** Button text. Default is \"open\" */\n text?: ioBroker.Translated;\n /** Target */\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n target?: '_blank' | '_self' | string;\n /** base64 icon */\n icon?: string;\n /** CSS style of the button */\n style?: Record<string, string>;\n /** Button style. Default is `contained` */\n variant?: 'outlined' | 'text' | 'contained';\n };\n instances: Record<string, InstanceMessage>;\n}\n\n/* TODO: Replace it later with ioBroker.NotificationAction */\n/** Structure for notification actions */\ninterface NotificationAction {\n /** This message will be shown if instance is offline */\n offlineMessage?: ioBroker.StringOrTranslated;\n /** any other data required for instance to show the dynamic GUI in the notification */\n [other: string]: any;\n}\n\ninterface NotificationMessageProps {\n // entry: Message;\n instanceId: string;\n message: { message: string; ts: number; contextData?: NotificationAction };\n // onClose: () => void;\n onLink: (linkCommand: BackEndCommandOpenLink) => void;\n dateFormat: string;\n socket: AdminConnection;\n themeType: ThemeType;\n themeName: ThemeName;\n theme: IobTheme;\n isFloatComma: boolean;\n}\n\ninterface NotificationMessageState {\n alive: boolean;\n data: Record<string, any> | null;\n schema: ConfigItemPanel | ConfigItemTabs | null;\n error?: boolean;\n updateData: number;\n}\n\nclass NotificationMessage extends Component<NotificationMessageProps, NotificationMessageState> {\n private lastAlive: number = 0;\n\n constructor(props: NotificationMessageProps) {\n super(props);\n\n this.state = {\n alive: false,\n data: {},\n schema: null,\n updateData: 0,\n };\n }\n\n async componentDidMount(): Promise<void> {\n if (this.props.message.contextData?.admin?.notification) {\n // request GUI for this notification\n const alive = await this.props.socket.getState(`${this.props.instanceId}.alive`);\n this.lastAlive = alive?.val ? Date.now() : 0;\n this.setState({ alive: !!alive?.val }, () => this.getGui());\n await this.props.socket.subscribeState(`${this.props.instanceId}.alive`, this.onAliveChanged);\n }\n }\n\n getGui(): void {\n if (this.state.alive && this.props.message.contextData?.admin?.notification) {\n const notification: NotificationAction = JSON.parse(\n JSON.stringify(this.props.message.contextData?.admin?.notification),\n );\n /** remove the offline message from contextData */\n if (notification.offlineMessage) {\n delete notification.offlineMessage;\n }\n // request GUI for this notification\n void this.props.socket\n .sendTo(\n this.props.instanceId.replace('system.adapter.', ''),\n 'admin:getNotificationSchema',\n notification,\n )\n .then((result: { data: Record<string, any> | null; schema: ConfigItemPanel | null }) => {\n if (result) {\n this.setState({\n schema: result.schema,\n data: result.data || this.state.data,\n updateData: this.state.updateData + 1,\n });\n }\n });\n }\n }\n\n onAliveChanged = (id: string, state: ioBroker.State): void => {\n if (id === `${this.props.instanceId}.alive` && state && this.state.alive !== !!state.val) {\n if (state.val) {\n if (this.lastAlive && Date.now() - this.lastAlive < 500) {\n // ignore too fast changes\n return;\n }\n this.lastAlive = Date.now();\n }\n this.setState({ alive: !!state.val }, () => this.getGui());\n }\n };\n\n renderCustomGui(): JSX.Element | null {\n if (!this.state.schema || !this.state.data || !this.state.alive) {\n const notification: NotificationAction | undefined = this.props.message.contextData?.admin?.notification;\n if (notification) {\n if (!this.state.alive) {\n const offlineMessage: ioBroker.StringOrTranslated | undefined = notification.offlineMessage;\n if (offlineMessage) {\n const text =\n typeof offlineMessage === 'string'\n ? offlineMessage\n : offlineMessage[this.props.socket.systemLang] || offlineMessage.en;\n\n return <Box sx={styles.offline}>{Utils.renderTextWithA(text)}</Box>;\n }\n return <Typography>{I18n.t('Instance is not alive')}</Typography>;\n }\n return <LinearProgress />;\n }\n\n return null;\n }\n\n const [, , adapterName, instance] = this.props.instanceId.split('.');\n\n return (\n <>\n {this.state.error && <div style={{ color: 'red' }}>{this.state.error}</div>}\n <JsonConfigComponent\n style={{ width: '100%' }}\n updateData={this.state.updateData}\n socket={this.props.socket}\n adapterName={adapterName}\n instance={parseInt(instance, 10)}\n schema={this.state.schema}\n data={this.state.data}\n onError={(error?: boolean) => this.setState({ error })}\n onChange={(data: Record<string, any>) => this.setState({ data })}\n onBackEndCommand={(command?: BackEndCommand) => {\n if (command.schema) {\n this.setState({\n schema: command.schema,\n data: command.data || this.state.data,\n });\n }\n\n if (command.command === 'refresh' || command.refresh) {\n this.getGui();\n }\n if (command.command === 'link') {\n this.props.onLink(command);\n }\n }}\n embedded\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n theme={this.props.theme}\n isFloatComma={this.props.isFloatComma}\n dateFormat={this.props.dateFormat}\n />\n </>\n );\n }\n\n renderSimpleMessage(): JSX.Element | null {\n return this.props.message.message ? (\n <Box sx={styles.simpleMessage}>{Utils.renderTextWithA(this.props.message.message)}</Box>\n ) : null;\n }\n\n render(): JSX.Element {\n return (\n <Typography\n component=\"div\"\n sx={styles.message}\n >\n <Box sx={styles.timestamp}>{new Date(this.props.message.ts).toLocaleString()}</Box>\n {this.renderSimpleMessage()}\n {this.renderCustomGui()}\n </Typography>\n );\n }\n}\n\nexport default NotificationMessage;\n","import React, { useState, type JSX, useEffect } from 'react';\n\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n Accordion,\n AccordionDetails,\n AccordionSummary,\n AppBar,\n Box,\n CardMedia,\n Tab,\n Tabs,\n Typography,\n Tooltip,\n} from '@mui/material';\n\nimport {\n Warning as WarningIcon,\n Notifications as BellIcon,\n Info as InfoIcon,\n ExpandMore as ExpandMoreIcon,\n Check as CheckIcon,\n Close as CloseIcon,\n} from '@mui/icons-material';\n\nimport { I18n, type ThemeType, type IobTheme, type AdminConnection, type ThemeName } from '@iobroker/adapter-react-v5';\n\nimport NotificationMessage, { type Message, type Severity } from '../components/NotificationMessage';\nimport type { BackEndCommandGeneric } from '#JC/types';\n\nexport interface BackEndCommandOpenLink extends BackEndCommandGeneric {\n command: 'link';\n /** Link url. Could be relative ('#blabla') or absolute ('https://blabla') */\n url: string;\n /** Target of the link. Default is `_self` for relative and '_blank' for absolute links */\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n target?: '_self' | '_blank' | string;\n /** If GUI should be closed after the link was opened (Only for target='_self') */\n close?: boolean;\n}\n\nconst styles: Record<string, any> = {\n root: (theme: IobTheme) => ({\n backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: 'auto',\n display: 'flex',\n borderRadius: '4px',\n flexDirection: 'column',\n }),\n paper: {\n maxWidth: 1000,\n width: '100%',\n },\n flex: {\n display: 'flex',\n },\n overflowHidden: {\n overflow: 'hidden',\n },\n overflowAuto: {\n overflowY: 'auto',\n },\n column: {\n flexDirection: 'column',\n },\n headerText: (theme: IobTheme) => ({\n fontWeight: 'bold',\n fontSize: 20,\n color: theme.palette.mode === 'dark' ? '#DDD' : '#111',\n }),\n descriptionHeaderText: (theme: IobTheme) => ({\n margin: '18px 0',\n color: theme.palette.mode === 'dark' ? '#CCC' : '#222',\n }),\n button: {\n paddingTop: 5,\n paddingBottom: 5,\n position: 'sticky',\n bottom: 0,\n // background: 'white',\n zIndex: 3,\n },\n img2: {\n width: 25,\n height: 25,\n margin: 'auto 0',\n mr: '10px',\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n },\n },\n heading: {\n display: 'flex',\n alignItems: 'center',\n overflow: 'hidden',\n width: '100%',\n },\n headingTop: {\n display: 'flex',\n alignItems: 'center',\n },\n classNameBox: {\n p: '8px',\n '@media screen and (max-width: 550px)': {\n p: '4px',\n },\n },\n textStyle: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n '@media screen and (max-width: 550px)': {\n fontSize: '2.9vw',\n },\n },\n content: {\n overflow: 'hidden',\n },\n buttonStyle: {\n m: '3px',\n '@media screen and (max-width: 550px)': {\n fontSize: '2.9vw',\n },\n },\n};\n\ninterface StatusOptions {\n /** Severity of the message */\n severity?: Severity;\n /** If dark mode enabled */\n isDark: boolean;\n}\n\nfunction Status({ severity, isDark, ...props }: StatusOptions): JSX.Element {\n if (severity === 'notify') {\n return (\n <BellIcon\n color={isDark ? 'primary' : 'secondary'}\n {...props}\n />\n );\n }\n\n if (severity === 'info') {\n return (\n <InfoIcon\n color=\"info\"\n {...props}\n />\n );\n }\n\n return (\n <WarningIcon\n style={{ color: '#ffca00' }}\n {...props}\n />\n );\n}\n\nfunction a11yProps(index: number): { id: string; 'aria-controls': string } {\n return {\n id: `scrollable-force-tab-${index}`,\n 'aria-controls': `scrollable-force-tabpanel-${index}`,\n };\n}\n\ninterface TabPanelOptions {\n index: string;\n style: React.CSSProperties;\n sxBox: Record<string, any>;\n children: JSX.Element[];\n}\n\nconst TabPanel = ({ children, index, sxBox, style }: TabPanelOptions): JSX.Element => (\n <div\n role=\"tabpanel\"\n id={`scrollable-force-tabpanel-${index}`}\n aria-labelledby={`scrollable-force-tab-${index}`}\n style={style}\n >\n <Box sx={sxBox}>\n <Typography component=\"div\">{children}</Typography>\n </Box>\n </div>\n);\n\ninterface NotificationDialogOptions {\n notifications: {\n [host: string]: {\n result: {\n [scope: string]: {\n categories: {\n [category: string]: Message;\n };\n description: ioBroker.Translated;\n name: ioBroker.Translated;\n };\n };\n };\n };\n onClose: () => void;\n ackCallback: (host: string, name: string) => void;\n dateFormat: string;\n isFloatComma: boolean;\n themeType: ThemeType;\n themeName: ThemeName;\n theme: IobTheme;\n instances: Record<string, ioBroker.InstanceObject>;\n socket: AdminConnection;\n}\n\ninterface MessagesPerScope {\n [scope: string]: Record<string, Message & { host: string }>;\n}\n\nfunction onLink(linkCommand: BackEndCommandOpenLink, instanceId: string, onClose: () => void): void {\n let target;\n let url = '';\n if (!linkCommand.url) {\n url = `#tab-instances/config/${instanceId}`;\n target = linkCommand.target || '_self';\n } else if (linkCommand.url.toString().startsWith('#')) {\n target = linkCommand.target || '_self';\n url = linkCommand.url;\n } else if (linkCommand.url.toString().startsWith('/')) {\n target = linkCommand.target || '_self';\n url = linkCommand.url;\n } else if (linkCommand.url.startsWith('http://') || linkCommand.url.startsWith('https://')) {\n target = linkCommand.target || '_blank';\n url = linkCommand.url;\n } else {\n url = `#tab-instances/config/${instanceId}/${linkCommand.url}`;\n target = linkCommand.target || '_self';\n }\n if (target === '_self') {\n // close dialog\n setTimeout(\n (_url: string) => {\n if (_url.startsWith('#')) {\n window.location.hash = _url;\n } else if (_url.startsWith('/')) {\n url = `${window.location.protocol}:${window.location.host}${url}`;\n } else if (_url.startsWith('http://') || _url.startsWith('https://')) {\n window.location.href = _url;\n }\n },\n 100,\n url,\n );\n\n if (linkCommand.close && typeof onClose === 'function') {\n onClose();\n }\n } else {\n if (url.startsWith('#')) {\n url = `${window.location.protocol}:${window.location.host}${window.location.pathname}${url}`;\n } else if (url.startsWith('/')) {\n url = `${window.location.protocol}:${window.location.host}${url}`;\n }\n\n window.open(url, target);\n }\n}\n\nconst NotificationsDialog = ({\n notifications,\n onClose,\n ackCallback,\n dateFormat,\n themeType,\n instances,\n themeName,\n theme,\n isFloatComma,\n socket,\n}: NotificationDialogOptions): JSX.Element => {\n const [panel, setPanel] = useState('');\n const [disabled, setDisabled] = useState<string[]>([]);\n const [expanded, setExpanded] = useState('');\n const [autoCollapse, setAutoCollapse] = useState(true);\n const [messages, setMessages] = useState<MessagesPerScope>({});\n\n const handleChange = (_event: React.SyntheticEvent, newValue: string): void => {\n setAutoCollapse(true);\n setPanel(newValue);\n setExpanded('');\n };\n\n const handleChangeAccordion = (panelName: string) => (_event: unknown, isExpanded: boolean) =>\n setExpanded(isExpanded ? panelName : '');\n\n const black = themeType === 'dark';\n\n const notificationManagerInstalled = !!Object.values(instances).find(\n instance => instance.common.name === 'notification-manager',\n );\n\n useEffect(() => {\n const _messages: MessagesPerScope = {};\n let firstKey = '';\n\n for (const [host, hostDetails] of Object.entries(notifications)) {\n for (const [scope, scopeDetails] of Object.entries(hostDetails.result)) {\n if (scope === 'system') {\n continue;\n }\n\n for (const [category, categoryDetails] of Object.entries(scopeDetails.categories)) {\n _messages[scope] = _messages[scope] || {};\n _messages[scope][category] = { ...categoryDetails, host };\n }\n }\n }\n\n Object.keys(_messages).map(scope =>\n Object.keys(_messages[scope]).map(name => (firstKey = firstKey || `${scope}--${name}`)),\n );\n\n // if a panel does not exist, set it to the first one\n if (panel) {\n const [scope, name] = panel.split('--');\n if (!_messages[scope]) {\n setPanel(firstKey);\n } else if (!_messages[scope][name]) {\n // take the first message in this scope\n const key = Object.keys(_messages[scope])[0];\n if (key) {\n setPanel(`${scope}--${key}`);\n } else {\n setPanel(firstKey);\n }\n }\n } else {\n setPanel(firstKey);\n }\n setMessages(_messages);\n }, [instances, notifications, panel]);\n\n const [currentScope, currentName] = panel.split('--');\n const entry: (Message & { host: string }) | null =\n currentScope && currentName ? messages[currentScope][currentName] : null;\n\n return (\n <Dialog\n onClose={() => onClose()}\n open={!0}\n sx={{ '& .MuiDialog-paper': styles.paper }}\n >\n <h2 style={styles.headingTop}>\n <BellIcon\n sx={{ color: 'primary.main' }}\n style={{\n fontSize: 36,\n marginLeft: 25,\n marginRight: 10,\n }}\n />\n {I18n.t('Notifications')}\n\n {!notificationManagerInstalled ? (\n <Tooltip\n sx={{ position: 'absolute', right: 24, color: 'text.primary' }}\n title={I18n.t(\n 'Tip: Use the \"notification-manager\" adapter to receive notifications automatically via messaging adapters.',\n )}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <InfoIcon />\n </Tooltip>\n ) : null}\n </h2>\n <DialogContent\n style={{ ...styles.flex, ...styles.overflowHidden }}\n dividers\n >\n <Box\n component=\"div\"\n sx={styles.root}\n >\n <AppBar\n position=\"static\"\n color=\"default\"\n >\n <Tabs\n value={panel}\n onChange={handleChange}\n variant=\"scrollable\"\n scrollButtons\n indicatorColor={black ? 'primary' : 'secondary'}\n textColor={black ? 'primary' : 'secondary'}\n >\n {Object.keys(messages).map(scope =>\n Object.keys(messages[scope]).map((name, idx) => {\n const entry = messages[scope][name];\n const key = `${scope}--${name}`;\n\n return (\n <Tab\n disabled={disabled.includes(key)}\n key={key}\n value={key}\n label={`${entry.name[I18n.getLanguage()]}`}\n icon={\n <Status\n severity={entry.severity}\n isDark={black}\n />\n }\n {...a11yProps(idx)}\n />\n );\n }),\n )}\n </Tabs>\n </AppBar>\n {entry ? (\n <TabPanel\n sxBox={styles.classNameBox}\n key={`tabPanel-${currentName}`}\n style={{ ...styles.overflowAuto, color: black ? 'black' : undefined }}\n index={panel}\n >\n <Box\n component=\"div\"\n sx={styles.headerText}\n style={{ fontWeight: 'bold' }}\n >\n {entry.name[I18n.getLanguage()]}\n </Box>\n <Box\n component=\"div\"\n sx={styles.descriptionHeaderText}\n >\n {entry.description[I18n.getLanguage()]}\n </Box>\n <div>\n {entry.instances\n ? Object.keys(entry.instances).map(nameInst => {\n const accKey = `${panel}--${nameInst}`;\n if (autoCollapse) {\n handleChangeAccordion(accKey)('', true);\n setAutoCollapse(false);\n }\n\n const currentInstance = instances && instances[nameInst];\n let icon = 'img/no-image.png';\n if (currentInstance?.common?.icon && currentInstance?.common?.name) {\n icon = `adapter/${currentInstance.common.name}/${currentInstance.common.icon}`;\n }\n\n return (\n <Accordion\n style={black ? undefined : { backgroundColor: '#c0c0c052' }}\n key={accKey}\n expanded={expanded === accKey}\n onChange={handleChangeAccordion(accKey)}\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n sx={{\n '& .MuiAccordionSummary-content': styles.content,\n }}\n aria-controls=\"panel1bh-content\"\n id=\"panel1bh-header\"\n >\n <Typography style={styles.heading}>\n <CardMedia\n sx={styles.img2}\n component=\"img\"\n image={icon}\n />\n <Box\n component=\"div\"\n sx={styles.textStyle}\n >\n {nameInst.replace(/^system\\.adapter\\./, '')}\n </Box>\n </Typography>\n </AccordionSummary>\n <AccordionDetails style={styles.column}>\n {entry.instances[nameInst].messages.map((msg, i) => (\n <NotificationMessage\n key={i}\n message={msg}\n dateFormat={dateFormat}\n // entry={entry}\n instanceId={nameInst}\n socket={socket}\n themeType={themeType}\n themeName={themeName}\n theme={theme}\n isFloatComma={isFloatComma}\n // onClose={onClose}\n onLink={(linkCommand: BackEndCommandOpenLink) =>\n onLink(linkCommand, nameInst, onClose)\n }\n />\n ))}\n </AccordionDetails>\n </Accordion>\n );\n })\n : null}\n </div>\n </TabPanel>\n ) : null}\n </Box>\n </DialogContent>\n <DialogActions>\n {currentScope && currentName ? (\n <Button\n variant=\"contained\"\n autoFocus={Object.keys(messages[currentScope]).length !== 1}\n disabled={disabled.includes(currentName)}\n style={disabled.includes(currentName) ? { backgroundColor: 'silver' } : undefined}\n sx={styles.buttonStyle}\n onClick={() => {\n ackCallback(messages[currentScope][currentName].host, currentName);\n setDisabled([...disabled, currentName]);\n }}\n color={Object.keys(messages[currentScope]).length !== 1 ? 'primary' : 'grey'}\n startIcon={<CheckIcon />}\n >\n {I18n.t('Acknowledge')}\n </Button>\n ) : null}\n {currentScope && currentName && Object.keys(messages[currentScope]).length === 1 && (\n <Button\n variant=\"contained\"\n disabled={disabled.includes(currentName)}\n sx={styles.buttonStyle}\n style={disabled.includes(currentName) ? { backgroundColor: 'silver' } : undefined}\n onClick={() => {\n setDisabled([...disabled, currentName]);\n ackCallback(messages[currentScope][currentName].host, currentName);\n onClose();\n }}\n startIcon={\n <>\n <CheckIcon />\n <CloseIcon />\n </>\n }\n color=\"primary\"\n >\n {I18n.t('Acknowledge & close')}\n </Button>\n )}\n <div style={{ flexGrow: 1 }} />\n <Button\n id=\"notifications-dialog-close\"\n variant=\"contained\"\n onClick={() => onClose()}\n startIcon={<CloseIcon />}\n color=\"grey\"\n >\n {I18n.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default NotificationsDialog;\n","import React, { Component, type JSX } from 'react';\n\nimport {\n Button,\n Checkbox,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n FormControlLabel,\n IconButton,\n} from '@mui/material';\n\nimport { Close as CloseIcon, OpenInBrowser as OpenInBrowserIcon } from '@mui/icons-material';\n\nimport type { IobTheme, Translate, AdminConnection } from '@iobroker/adapter-react-v5';\nimport Command from '../components/Command';\n\nconst styles: Record<string, any> = {\n closeButton: (theme: IobTheme) => ({\n position: 'absolute',\n right: 8,\n top: 8,\n color: theme.palette.grey[500],\n }),\n hiddenDialog: {\n display: 'none',\n },\n dialogRoot: {\n height: 'calc(100% - 64px)',\n },\n};\n\ninterface CommandDialogProps {\n t: Translate;\n confirmText?: string;\n onClose: () => void;\n callback: () => void;\n onInBackground: () => void;\n visible: boolean;\n ready: boolean;\n onSetCommandRunning: (running: boolean) => void;\n cmd: string;\n errorFunc: () => void;\n performed: () => void;\n inBackground: boolean;\n commandError: boolean;\n socket: AdminConnection;\n host: string;\n}\n\ninterface CommandDialogState {\n progressText: string;\n closeOnReady: boolean;\n isError: boolean;\n}\n\nclass CommandDialog extends Component<CommandDialogProps, CommandDialogState> {\n constructor(props: CommandDialogProps) {\n super(props);\n\n this.state = {\n progressText: '',\n isError: false,\n closeOnReady:\n (((window as any)._localStorage as Storage) || window.localStorage).getItem(\n 'CommandDialog.closeOnReady',\n ) === 'true',\n };\n }\n\n render(): JSX.Element {\n return (\n <Dialog\n scroll=\"paper\"\n fullWidth\n sx={{\n '&.MuiDialog-root': !this.props.visible ? styles.hiddenDialog : undefined,\n '& .MuiDialog-paper': styles.dialogRoot,\n }}\n onClose={this.props.inBackground ? this.props.onClose : this.props.onInBackground}\n open={!0}\n maxWidth=\"md\"\n >\n <DialogTitle>\n {this.state.progressText || this.props.t('Running command')}\n <IconButton\n size=\"large\"\n sx={styles.closeButton}\n onClick={this.props.onClose}\n disabled={this.props.inBackground}\n >\n <CloseIcon />\n </IconButton>\n </DialogTitle>\n <DialogContent\n dividers\n style={{ height: '100%' }}\n >\n <Command\n noSpacing\n key=\"command\"\n ready={this.props.ready}\n host={this.props.host}\n socket={this.props.socket}\n t={this.props.t}\n inBackground={this.props.inBackground}\n commandError={this.props.commandError}\n errorFunc={() => {\n this.setState({ isError: true });\n this.props.errorFunc();\n }}\n performed={this.props.performed}\n callback={this.props.callback}\n cmd={this.props.cmd}\n onFinished={() => this.state.closeOnReady && this.props.onClose()}\n onSetCommandRunning={(running: boolean) => this.props.onSetCommandRunning(running)}\n />\n </DialogContent>\n <DialogActions style={{ justifyContent: 'space-between' }}>\n <FormControlLabel\n style={{ marginLeft: 16 }}\n control={\n <Checkbox\n disabled={this.props.inBackground}\n checked={this.state.closeOnReady}\n onChange={e => {\n this.setState({ closeOnReady: e.target.checked });\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'CommandDialog.closeOnReady',\n e.target.checked ? 'true' : 'false',\n );\n }}\n />\n }\n label={this.props.t('close on ready')}\n />\n <div>\n <Button\n variant=\"contained\"\n autoFocus\n disabled={this.props.inBackground}\n onClick={this.props.onInBackground}\n startIcon={<OpenInBrowserIcon />}\n color=\"primary\"\n style={{\n marginRight: 8,\n }}\n >\n {this.props.confirmText || this.props.t('In background')}\n </Button>\n <Button\n variant=\"contained\"\n disabled={!this.props.inBackground}\n onClick={this.props.onClose}\n color=\"grey\"\n style={{\n backgroundColor: this.state.isError ? '#834141' : undefined,\n color: this.state.isError ? '#fff' : undefined,\n }}\n startIcon={<CloseIcon />}\n >\n {this.props.t('Close')}\n </Button>\n </div>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default CommandDialog;\n","import _ from 'lodash';\n\nconst funcSet = _.throttle((setTabs, tabs) => setTabs(tabs), 200);\n\nconst findCard = (id: string, cards: { name: string }[]): { card: { name: string }; index: number } => {\n const card = cards.find(c => c.name === id);\n return {\n card,\n index: cards.indexOf(card),\n };\n};\n\nconst moveCard = (\n id: string,\n atIndex: number, // index of the card being dragged\n tabs: { name: string }[],\n setTabs: (newTabs: { name: string }[]) => void,\n hoverClientY: number,\n hoverMiddleY: number,\n): void => {\n const { card, index } = findCard(id, tabs);\n if (index === atIndex) {\n return;\n }\n if (index < atIndex && hoverClientY < hoverMiddleY) {\n return;\n }\n if (index > atIndex && hoverClientY > hoverMiddleY) {\n return;\n }\n if (card && index !== atIndex) {\n const copyCard = JSON.parse(JSON.stringify(tabs));\n copyCard.splice(index, 1);\n copyCard.splice(atIndex, 0, card);\n funcSet(setTabs, copyCard);\n }\n};\n\nexport { moveCard, findCard };\n","import React, { useEffect, useRef, type JSX } from 'react';\nimport { useDrag, useDrop } from 'react-dnd';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { findCard, moveCard } from '@/helpers/cardSort';\n\nconst styles: React.CSSProperties = {\n cursor: 'move',\n};\n\ninterface DragWrapperProps {\n canDrag: boolean;\n setEndDrag: () => void;\n iconJSX: JSX.Element;\n selected: boolean;\n compact: boolean;\n badgeContent: number;\n badgeColor: string;\n tab: { name: string };\n tabs: { name: string }[];\n setTabs: (newTabs: { name: string }[]) => void;\n _id: string;\n children: any;\n name: string;\n}\n\nconst DragWrapper = ({\n canDrag,\n setEndDrag,\n iconJSX,\n selected,\n compact,\n badgeContent,\n badgeColor,\n tab,\n tabs,\n setTabs,\n _id,\n children,\n name,\n}: DragWrapperProps): JSX.Element => {\n const ref = useRef(null);\n const [{ handlerId }, drop] = useDrop({\n accept: 'box',\n collect(monitor) {\n return {\n handlerId: monitor.getHandlerId(),\n };\n },\n // canDrop: () => false,\n hover({ _id: draggedId }, monitor) {\n if (!ref.current) {\n return;\n }\n const { index: overIndexActions } = findCard(_id, tabs);\n const hoverBoundingRect = ref.current?.getBoundingClientRect();\n const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\n const clientOffset = monitor.getClientOffset();\n const hoverClientY = clientOffset.y - hoverBoundingRect.top;\n moveCard(draggedId, overIndexActions, tabs, setTabs, hoverClientY, hoverMiddleY);\n },\n });\n\n const [{ isDragging }, drag, preview] = useDrag({\n type: 'box',\n item: {\n _id: tab.name,\n ...tab,\n iconJSX,\n selected,\n compact,\n badgeContent,\n badgeColor,\n },\n canDrag: () => canDrag,\n end: () => setEndDrag(),\n collect: monitor => ({ isDragging: monitor.isDragging() }),\n });\n\n useEffect(() => {\n preview(getEmptyImage(), { captureDraggingState: true });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n const opacity = isDragging ? 0 : 1;\n drag(drop(ref));\n\n return (\n <div\n ref={ref}\n style={{ ...styles, opacity }}\n data-handler-id={handlerId}\n >\n <a\n type=\"box\"\n data-handler-id={handlerId}\n onClick={event => event.preventDefault()}\n href={`/#${name}`}\n style={{\n ...styles,\n opacity,\n color: 'inherit',\n textDecoration: 'none',\n }}\n >\n {children}\n </a>\n </div>\n );\n};\n\nexport default DragWrapper;\n","import React, { type JSX } from 'react';\n\nimport { Badge, Grid2, ListItemButton, ListItemIcon, ListItemText, Tooltip, Checkbox } from '@mui/material';\nimport { DragHandle } from '@mui/icons-material';\n\nimport { amber } from '@mui/material/colors';\n\nimport { Utils, ColorPicker, type IobTheme } from '@iobroker/adapter-react-v5';\nimport AdminUtils from '../helpers/AdminUtils';\n\nconst styles: Record<string, any> = {\n selected: (theme: IobTheme) => ({\n background: theme.palette.primary.main,\n color: theme.palette.mode === 'light' ? 'white' : AdminUtils.invertColor(theme.palette.primary.main, true),\n '&:hover': {\n background: theme.palette.primary.main,\n color: theme.palette.mode === 'light' ? 'white' : AdminUtils.invertColor(theme.palette.primary.main, true),\n '& $selectedIcon': {\n color:\n theme.palette.mode === 'light' ? 'white' : AdminUtils.invertColor(theme.palette.primary.main, true),\n },\n },\n }),\n selectedIcon: (theme: IobTheme) => ({\n color: theme.palette.mode === 'light' ? 'white' : AdminUtils.invertColor(theme.palette.primary.main, true),\n }),\n compactBadge: {\n pl: '12px',\n },\n noWrap: {\n flexWrap: 'nowrap',\n height: 40,\n },\n warn: {\n backgroundColor: amber[500],\n },\n};\n\ninterface DrawerItemProps {\n badgeColor?: 'error' | 'warn' | 'primary' | '';\n badgeContent?: number;\n compact?: boolean;\n icon: JSX.Element;\n onClick?: (e?: React.MouseEvent) => void;\n selected?: boolean;\n text: string;\n editMenuList?: boolean;\n visible?: boolean;\n color?: string;\n editListFunc?: (visible: boolean, color?: string | null) => void;\n badgeAdditionalContent?: number;\n badgeAdditionalColor?: 'error' | '' | 'warn' | 'secondary';\n style?: Record<string, any>;\n theme: IobTheme;\n}\n\nconst DrawerItem = (props: DrawerItemProps): JSX.Element => {\n const {\n badgeColor,\n badgeContent,\n compact,\n icon,\n onClick,\n selected,\n text,\n editMenuList,\n visible,\n color,\n editListFunc,\n badgeAdditionalContent,\n badgeAdditionalColor,\n style,\n } = props;\n\n let content = text ? text.replace('>', '>') : '';\n\n if (content === 'Text->Kommandos') {\n content = 'Text→Cmd';\n } else if (content === 'Text->Commands') {\n content = 'Text→Cmd';\n }\n\n return (\n <div style={{ display: 'flex', alignItems: 'center', ...(style || {}) }}>\n {!!editMenuList && <DragHandle />}\n {!!editMenuList && (\n <Checkbox\n checked={visible}\n onClick={() => editListFunc(true)}\n />\n )}\n {!!editMenuList && (\n <ColorPicker\n value={color}\n noInputField\n onChange={value => editListFunc(false, value || null)}\n />\n )}\n <ListItemButton\n sx={Utils.getStyle(props.theme, selected && styles.selected, compact && styles.compactBadge)}\n onClick={onClick}\n >\n <Tooltip\n title={compact ? content : ''}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <Grid2\n container\n spacing={1}\n alignItems=\"center\"\n style={styles.noWrap}\n >\n <Grid2>\n <ListItemIcon\n style={{ minWidth: 0, color }}\n sx={selected ? styles.selectedIcon : undefined}\n >\n <Badge\n badgeContent={badgeContent || 0}\n color={(badgeColor === 'warn' ? 'default' : badgeColor) || 'primary'}\n sx={badgeColor === 'warn' ? { '& .MuiBadge-badge': styles.warn } : undefined}\n >\n {icon}\n </Badge>\n </ListItemIcon>\n </Grid2>\n {!compact && (\n <Grid2>\n <ListItemText style={{ color }}>\n <Badge\n badgeContent={badgeAdditionalContent || 0}\n color={\n (badgeAdditionalColor === 'warn' ? 'default' : badgeAdditionalColor) ||\n 'primary'\n }\n sx={\n badgeAdditionalColor === 'warn'\n ? { '& .MuiBadge-badge': styles.warn }\n : undefined\n }\n >\n {content}\n </Badge>\n </ListItemText>\n </Grid2>\n )}\n </Grid2>\n </Tooltip>\n </ListItemButton>\n </div>\n );\n};\n\nexport default DrawerItem;\n","import React, { type JSX } from 'react';\nimport { useDragLayer } from 'react-dnd';\n\nimport { Box } from '@mui/material';\n\nimport type { IobTheme } from '@iobroker/adapter-react-v5';\n\nimport DrawerItem from './DrawerItem';\n\nconst layerStyles: React.CSSProperties = {\n position: 'fixed',\n pointerEvents: 'none',\n zIndex: 100,\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n};\n\nfunction snapToGrid(x: number, y: number): [number, number] {\n const snappedX = Math.round(x / 32) * 32;\n const snappedY = Math.round(y / 32) * 32;\n return [snappedX, snappedY];\n}\n\nfunction getItemStyles(\n initialOffset: { x: number; y: number },\n currentOffset: { x: number; y: number },\n isSnapToGrid?: boolean,\n): React.CSSProperties {\n if (!initialOffset || !currentOffset) {\n return {\n display: 'none',\n };\n }\n let { x, y } = currentOffset;\n if (isSnapToGrid) {\n x -= initialOffset.x;\n y -= initialOffset.y;\n [x, y] = snapToGrid(x, y);\n x += initialOffset.x;\n y += initialOffset.y;\n }\n const transform = `translate(${x}px, ${y}px)`;\n return {\n transform,\n WebkitTransform: transform,\n };\n}\n\nconst styles: Record<string, any> = {\n root: (theme: IobTheme) => ({\n background: theme.palette.background.default,\n }),\n};\n\nfunction CustomDragLayer(props: { theme: IobTheme }): JSX.Element {\n const {\n itemType,\n isDragging,\n item,\n initialOffset,\n currentOffset,\n // targetIds\n } = useDragLayer(monitor => ({\n item: monitor.getItem(),\n itemType: monitor.getItemType(),\n initialOffset: monitor.getInitialSourceClientOffset(),\n currentOffset: monitor.getSourceClientOffset(),\n isDragging: monitor.isDragging(),\n // targetIds: monitor.getTargetIds(),\n }));\n\n function renderItem(): JSX.Element | null {\n if (itemType === 'box') {\n return (\n <Box\n component=\"div\"\n sx={styles.root}\n style={{ width: 179 }}\n >\n <DrawerItem\n key={item.name}\n visible={item.visible}\n editListFunc={() => undefined}\n compact={item.compact}\n icon={item.iconJSX}\n text={item.title}\n selected={item.selected}\n badgeContent={item.badgeContent}\n badgeColor={item.badgeColor}\n theme={props.theme}\n />\n </Box>\n );\n }\n return null;\n }\n\n if (!isDragging) {\n return null;\n }\n\n return (\n <div style={layerStyles}>\n <div style={getItemStyles(initialOffset, currentOffset)}>{renderItem()}</div>\n </div>\n );\n}\n\nexport default CustomDragLayer;\n","import React, { type JSX } from 'react';\n\nimport { Popper, Typography, Fade, Paper, IconButton } from '@mui/material';\n\nimport { Edit as EditIcon } from '@mui/icons-material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nlet timer: ReturnType<typeof setTimeout>;\n\ninterface CustomPopperProps {\n editMenuList: boolean;\n onClick: () => void;\n size?: 'small' | 'medium' | 'large';\n}\n\nconst CustomPopper = ({ editMenuList, onClick, size }: CustomPopperProps): JSX.Element => {\n const [anchorEl, setAnchorEl] = React.useState(null);\n const [open, setOpen] = React.useState(false);\n const [placement, setPlacement] = React.useState<'right' | null>(null);\n\n return (\n <>\n <IconButton\n size={size || 'large'}\n style={editMenuList ? { color: 'red' } : null}\n onClick={el => {\n onClick();\n if (!editMenuList) {\n setAnchorEl(el.currentTarget);\n setOpen(prev => placement !== 'right' || !prev);\n setPlacement('right');\n\n timer = setTimeout(() => setOpen(false), 3000);\n } else {\n setOpen(false);\n clearTimeout(timer);\n }\n }}\n title={I18n.t('show/hide item')}\n >\n <EditIcon />\n </IconButton>\n <Popper\n style={{ zIndex: 2222 }}\n open={open}\n anchorEl={anchorEl}\n placement={placement}\n transition\n >\n {({ TransitionProps }) => (\n <Fade\n {...TransitionProps}\n timeout={350}\n >\n <Paper>\n <Typography\n style={{\n padding: 16,\n }}\n >\n {I18n.t('You can drag and drop list items for reorder')}\n </Typography>\n </Paper>\n </Fade>\n )}\n </Popper>\n </>\n );\n};\n\nexport default CustomPopper;\n","import React, { Component, type RefObject, type JSX } from 'react';\n\nimport { Avatar, Drawer as MaterialDrawer, IconButton, List, Typography, SwipeableDrawer, Box } from '@mui/material';\n\nimport {\n ChevronLeft as ChevronLeftIcon,\n Apps as AppsIcon,\n Info as InfoIcon,\n Store as StoreIcon,\n Subtitles as SubtitlesIcon,\n ViewList as ViewListIcon,\n ArtTrack as ArtTrackIcon,\n Dvr as DvrIcon,\n ViewHeadline as ViewHeadlineIcon,\n Subscriptions as SubscriptionsIcon,\n FlashOn as FlashOnIcon,\n PersonOutline as PersonOutlineIcon,\n Storage as StorageIcon,\n FileCopy as FilesIcon,\n} from '@mui/icons-material';\n\nimport {\n Utils,\n I18n,\n Icon,\n withWidth,\n IconLogout as LogoutIcon,\n type AdminConnection,\n type IobTheme,\n type ThemeType,\n type Translate,\n} from '@iobroker/adapter-react-v5';\n\nimport { getHref } from '@/tabs/CustomTab';\nimport AdminUtils from '@/helpers/AdminUtils';\nimport type InstancesWorker from '@/Workers/InstancesWorker';\nimport type HostsWorker from '@/Workers/HostsWorker';\nimport { type NotificationAnswer } from '@/Workers/HostsWorker';\nimport type LogsWorker from '@/Workers/LogsWorker';\nimport type { NotificationsCount } from '@/types';\nimport DragWrapper from './DragWrapper';\nimport CustomDragLayer from './CustomDragLayer';\nimport { ContextWrapper } from './ContextWrapper';\nimport CustomPopper from './CustomPopper';\nimport DrawerItem from './DrawerItem';\n\nexport const DRAWER_FULL_WIDTH = 180;\nexport const DRAWER_COMPACT_WIDTH = 50;\nexport const DRAWER_EDIT_WIDTH = 250;\n\nfunction ucFirst(str: string): string {\n return str.substring(0, 1).toUpperCase() + str.substring(1).toLowerCase();\n}\n\nconst styles: Record<string, any> = {\n root: (theme: IobTheme) => ({\n flexShrink: 0,\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n display: 'flex',\n flexDirection: 'column',\n }),\n rootFullWidth: {\n width: DRAWER_FULL_WIDTH,\n },\n rootEditWidth: {\n width: DRAWER_EDIT_WIDTH,\n },\n rootCompactWidth: {\n width: DRAWER_COMPACT_WIDTH,\n },\n paper: {\n width: 'inherit',\n overflowX: 'hidden',\n },\n header: (theme: IobTheme) => ({\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n padding: '0 8px 0 8px',\n ...theme.mixins.toolbar,\n justifyContent: 'flex-end',\n position: 'sticky',\n top: 0,\n zIndex: 2,\n background: theme.palette.background.default,\n }),\n headerCompact: {\n padding: 0,\n },\n headerLogout: {\n justifyContent: 'space-between',\n },\n list: {\n paddingTop: 0,\n flex: '1 0 auto',\n },\n icon: {\n width: 20,\n height: 20,\n },\n logoSize: {\n width: 50,\n height: 50,\n },\n avatarBlock: {\n width: '100%',\n display: 'flex',\n // justifyContent: 'center',\n // marginLeft: 48,\n marginTop: 5,\n marginBottom: 5,\n },\n avatarNotVisible: {\n opacity: 0,\n transition: 'opacity 0.3s',\n },\n avatarVisible: {\n opacity: 1,\n },\n styleVersion: (theme: IobTheme) => ({\n fontSize: 10,\n color: theme.palette.mode === 'dark' ? '#ffffff5e' : '#0000005e',\n alignSelf: 'center',\n ml: '5px',\n }),\n editButton: {\n position: 'sticky',\n bottom: 0,\n right: 0,\n width: 'fit-content',\n marginLeft: 'auto',\n marginTop: 'auto',\n transition: 'opacity 0.5s',\n },\n};\n\nexport const STATES = {\n opened: 0,\n closed: 1,\n compact: 2,\n};\n\nconst tabsInfo: Record<string, { order: number; icon?: JSX.Element; host?: boolean; instance?: number }> = {\n 'tab-intro': { order: 1, icon: <AppsIcon /> },\n 'tab-info': { order: 5, icon: <InfoIcon />, host: true },\n 'tab-adapters': { order: 10, icon: <StoreIcon />, host: true },\n 'tab-instances': { order: 15, icon: <SubtitlesIcon />, host: true },\n 'tab-objects': { order: 20, icon: <ViewListIcon /> },\n 'tab-enums': { order: 25, icon: <ArtTrackIcon /> },\n 'tab-devices': { order: 27, icon: <DvrIcon />, host: true },\n 'tab-logs': { order: 30, icon: <ViewHeadlineIcon />, host: true },\n 'tab-scenes': { order: 35, icon: <SubscriptionsIcon /> },\n 'tab-events': { order: 40, icon: <FlashOnIcon /> },\n 'tab-users': { order: 45, icon: <PersonOutlineIcon /> },\n 'tab-javascript': { order: 50 },\n 'tab-text2command-0': { order: 55, instance: 0 },\n 'tab-text2command-1': { order: 56, instance: 1 },\n 'tab-text2command-2': { order: 57, instance: 2 },\n 'tab-node-red-0': { order: 60, instance: 0 },\n 'tab-node-red-1': { order: 61, instance: 1 },\n 'tab-node-red-2': { order: 62, instance: 2 },\n 'tab-fullcalendar-0': { order: 65, instance: 0 },\n 'tab-fullcalendar-1': { order: 66, instance: 1 },\n 'tab-fullcalendar-2': { order: 67, instance: 2 },\n 'tab-echarts': { order: 70, instance: 2 },\n 'tab-eventlist-0': { order: 80, instance: 0 },\n 'tab-eventlist-1': { order: 81, instance: 1 },\n 'tab-eventlist-2': { order: 82, instance: 2 },\n 'tab-hosts': { order: 100, icon: <StorageIcon /> },\n 'tab-files': { order: 110, icon: <FilesIcon /> },\n};\n\ninterface AdminTab {\n name: string;\n order: number;\n icon?: string | JSX.Element;\n title?: string;\n visible?: boolean;\n color?: string;\n}\n\ninterface DrawerProps {\n t: Translate;\n lang: ioBroker.Languages;\n state: 0 | 1 | 2;\n adminGuiConfig: Record<string, any>;\n onStateChange: (state: 0 | 1 | 2) => void;\n onLogout: () => void;\n isSecure: boolean;\n currentTab: string;\n themeType: ThemeType;\n socket: AdminConnection;\n versionAdmin: string;\n handleNavigation: (tab: string) => void;\n editMenuList: boolean;\n setEditMenuList: (editMenuList: boolean) => void;\n\n instancesWorker: InstancesWorker;\n hostsWorker: HostsWorker;\n logsWorker: LogsWorker;\n\n hostname: string;\n adminInstance: string;\n installed: Record<string, { version: string; ignoreVersion?: string }>;\n hosts: ioBroker.HostObject[];\n repository: Record<string, { icon: string; version: string }>;\n width: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n theme: IobTheme;\n}\n\ninterface DrawerState {\n tabs: AdminTab[];\n logErrors: number;\n logWarnings: number;\n hostNotifications: NotificationsCount;\n hostsUpdate: number;\n adaptersUpdate: number;\n}\n\nclass Drawer extends Component<DrawerProps, DrawerState> {\n private logsHandlerRegistered: boolean;\n\n private readonly refEditButton: RefObject<HTMLDivElement>;\n\n constructor(props: DrawerProps) {\n super(props);\n\n this.state = {\n tabs: [],\n logErrors: 0,\n logWarnings: 0,\n hostNotifications: { other: 0, warning: 0 },\n hostsUpdate: Drawer.calculateHostUpdates(this.props.hosts, this.props.repository),\n adaptersUpdate: Drawer.calculateAdapterUpdates(this.props.installed, this.props.repository),\n };\n\n this.refEditButton = React.createRef();\n\n this.getTabs().catch(e => window.alert(`Cannot get tabs: ${e}`));\n }\n\n static getDerivedStateFromProps(props: DrawerProps, state: DrawerState): Partial<DrawerState> | null {\n const hostsUpdate = Drawer.calculateHostUpdates(props.hosts, props.repository);\n const adaptersUpdate = Drawer.calculateAdapterUpdates(props.installed, props.repository);\n if (hostsUpdate !== state.hostsUpdate || adaptersUpdate !== state.adaptersUpdate) {\n return { hostsUpdate, adaptersUpdate };\n }\n return null;\n }\n\n static calculateHostUpdates(\n hosts: ioBroker.HostObject[],\n repository: Record<string, { icon: string; version: string }>,\n ): number {\n if (hosts && repository) {\n const jsControllerVersion = repository['js-controller']?.version || '';\n let count = 0;\n hosts.forEach(element => {\n if (AdminUtils.updateAvailable(element.common.installedVersion, jsControllerVersion)) {\n count++;\n }\n });\n return count;\n }\n return 0;\n }\n\n static calculateAdapterUpdates(\n installed: Record<string, { version: string; ignoreVersion?: string }>,\n repository: Record<string, { icon: string; version: string }>,\n ): number {\n if (installed) {\n let count = 0;\n\n Object.keys(installed)\n .sort()\n .forEach(element => {\n const _installed = installed[element];\n const adapter = repository && repository[element];\n if (\n element !== 'js-controller' &&\n element !== 'hosts' &&\n _installed?.version &&\n adapter?.version &&\n _installed.ignoreVersion !== adapter.version &&\n AdminUtils.updateAvailable(_installed.version, adapter.version)\n ) {\n count++;\n }\n });\n\n return count;\n }\n return 0;\n }\n\n instanceChangedHandler = (): Promise<void> => this.getTabs(true);\n\n componentDidMount(): void {\n this.props.instancesWorker.registerHandler(this.instanceChangedHandler, true);\n\n void this.onNotificationsHandler().then(() => {\n this.props.hostsWorker.registerNotificationHandler(this.onNotificationsHandler);\n\n if (!this.logsHandlerRegistered) {\n this.logsHandlerRegistered = true;\n this.props.logsWorker.registerErrorCountHandler(this.onErrorsUpdates);\n this.props.logsWorker.registerWarningCountHandler(this.onWarningsUpdates);\n }\n });\n }\n\n onNotificationsHandler = (): Promise<void> =>\n this.props.hostsWorker\n .getNotifications()\n .then(notifications => this.calculateWarning(notifications))\n .catch(error => window.alert(`Cannot get notifications: ${error}`));\n\n onErrorsUpdates = (logErrors: number): void => {\n this.setState({ logErrors });\n };\n\n onWarningsUpdates = (logWarnings: number): void => {\n this.setState({ logWarnings });\n };\n\n calculateWarning = (notifications: Record<string, NotificationAnswer | null>): void => {\n if (!notifications) {\n return;\n }\n\n const count: NotificationsCount = { warning: 0, other: 0 };\n\n Object.keys(notifications).forEach(host => {\n if (!notifications[host]?.result?.system) {\n return;\n }\n\n if (Object.keys(notifications[host].result.system.categories).length) {\n const obj = notifications[host].result.system.categories;\n\n for (const category of Object.values(obj)) {\n Object.keys(category.instances).forEach(() =>\n category.severity === 'alert' ? count.warning++ : count.other++,\n );\n }\n }\n });\n\n this.setState({ hostNotifications: count });\n };\n\n componentWillUnmount(): void {\n this.props.instancesWorker.unregisterHandler(this.instanceChangedHandler);\n this.props.hostsWorker.unregisterNotificationHandler(this.onNotificationsHandler);\n\n if (this.logsHandlerRegistered) {\n this.logsHandlerRegistered = false;\n this.props.logsWorker.unregisterErrorCountHandler(this.onErrorsUpdates);\n this.props.logsWorker.unregisterWarningCountHandler(this.onWarningsUpdates);\n }\n }\n\n componentDidUpdate(): void {\n if (!this.isSwipeable() && this.props.state !== STATES.opened && this.props.editMenuList) {\n setTimeout(() => this.props.setEditMenuList(false));\n }\n }\n\n async getTabs(update?: boolean): Promise<void> {\n try {\n const _instances = await this.props.socket.getCompactInstances(update);\n const instances = _instances as any as Record<string, ioBroker.AdapterCommon>;\n const dynamicTabs: AdminTab[] = [];\n if (instances) {\n Object.keys(instances).forEach(id => {\n const instance = instances[id];\n\n if (!instance?.adminTab) {\n return;\n }\n\n let tab = `tab-${id.replace('system.adapter.', '').replace(/\\.\\d+$/, '')}`;\n\n const singleton = instance.adminTab.singleton;\n let instNum;\n if (!singleton) {\n const m = id.match(/\\.(\\d+)$/);\n if (m) {\n instNum = parseInt(m[1], 10);\n tab += `-${instNum}`;\n }\n }\n\n if (dynamicTabs.find(item => item.name === tab)) {\n return;\n }\n\n let title;\n\n if (instance.adminTab.name) {\n if (typeof instance.adminTab.name === 'object') {\n if (instance.adminTab.name && instance.adminTab.name[this.props.lang]) {\n title = instance.adminTab.name[this.props.lang];\n } else if (instance.adminTab.name?.en) {\n title = this.props.t(instance.adminTab.name.en);\n } else {\n title = this.props.t(instance.name);\n }\n } else {\n title = this.props.t(instance.adminTab.name);\n }\n } else {\n title = this.props.t(instance.name);\n }\n\n let obj: AdminTab;\n if (tabsInfo[tab]) {\n obj = { name: tab, ...tabsInfo[tab] };\n } else {\n obj = {\n name: tab,\n order: instance.adminTab.order !== undefined ? instance.adminTab.order : 200,\n icon: instance.adminTab.icon,\n };\n }\n\n if (!obj.icon) {\n obj.icon = `adapter/${instance.name}/${instance.icon}`;\n } else if (\n typeof obj.icon !== 'object' &&\n !obj.icon.startsWith('data:image') &&\n !obj.icon.includes('/')\n ) {\n obj.icon = `adapter/${instance.name}/${obj.icon}`;\n }\n\n obj.title = title;\n\n if (!singleton) {\n // obj.instance = instance;\n if (instNum) {\n obj.title += ` ${instNum}`;\n }\n }\n dynamicTabs.push(obj);\n });\n }\n\n const READY_TO_USE = [\n 'tab-intro',\n 'tab-adapters',\n 'tab-instances',\n 'tab-logs',\n 'tab-files',\n 'tab-objects',\n 'tab-hosts',\n 'tab-users',\n 'tab-enums',\n ];\n // DEV ONLY\n const tabNames = Object.keys(tabsInfo).filter(name => READY_TO_USE.includes(name));\n\n let tabs: AdminTab[] = tabNames.map(name => {\n const obj: AdminTab = { name, ...tabsInfo[name] };\n obj.title = I18n.t(\n ucFirst(\n name\n .replace('tab-', '')\n .replace('-0', '')\n .replace(/-(\\d+)$/, ' $1'),\n ),\n );\n obj.visible = true;\n return obj;\n });\n\n // add dynamic tabs\n tabs = tabs.concat(dynamicTabs);\n\n tabs = tabs.filter(obj => obj);\n tabs.forEach(obj => (obj.visible = true));\n\n tabs.sort((a, b) => {\n if (a.order && b.order) {\n return a.order - b.order;\n }\n if (a.order) {\n return -1;\n }\n if (b.order) {\n return 1;\n }\n return a.name > b.name ? -1 : a.name > b.name ? 1 : 0;\n });\n\n // Convert\n void this.props.socket.getCompactSystemConfig().then(systemConfig => {\n const tabsVisible: { name: string; visible: boolean; color?: string }[] =\n systemConfig.common.tabsVisible || [];\n\n tabs.forEach(tab => {\n const it = tabsVisible.find(el => el.name === tab.name);\n if (it) {\n tab.visible = it.visible;\n tab.color = it.color;\n }\n });\n\n const map: Record<string, number> = {};\n tabsVisible.forEach((item, i) => (map[item.name] = i));\n\n tabs.sort((a, b) => {\n const aa = map[a.name];\n const bb = map[b.name];\n if (aa !== undefined && bb !== undefined) {\n return aa - bb;\n }\n if (aa) {\n return -1;\n }\n if (bb) {\n return 1;\n }\n return 0;\n });\n\n this.setState({ tabs }, () => {\n const newTabsVisible = tabs.map(({ name, visible, color }) => ({ name, visible, color }));\n\n if (JSON.stringify(newTabsVisible) !== JSON.stringify(tabsVisible)) {\n void this.props.socket.getSystemConfig(true).then(_systemConfig => {\n _systemConfig.common.tabsVisible = tabsVisible;\n\n return this.props.socket\n .setSystemConfig(_systemConfig)\n .catch(e => window.alert(`Cannot set system config: ${e}`));\n });\n }\n });\n });\n } catch (error) {\n window.alert(`Cannot get instances: ${error}`);\n }\n }\n\n getHeader(): JSX.Element {\n const { state, handleNavigation } = this.props;\n\n return (\n <Box\n component=\"div\"\n sx={Utils.getStyle(\n this.props.theme,\n styles.header,\n this.props.state === STATES.opened && this.props.isSecure && styles.headerLogout,\n !this.isSwipeable() && this.props.state !== STATES.opened && styles.headerCompact,\n )}\n >\n <div\n style={{\n ...styles.avatarBlock,\n ...styles.avatarNotVisible,\n ...(state === 0 ? styles.avatarVisible : { display: 'none' }),\n }}\n >\n <a\n href=\"/#easy\"\n onClick={event => event.preventDefault()}\n style={{ color: 'inherit', textDecoration: 'none' }}\n >\n {this.props.adminGuiConfig.icon ? (\n <div style={{ height: 50, width: 102, lineHeight: '50px' }}>\n <img\n src={this.props.adminGuiConfig.icon}\n alt=\"logo\"\n style={{ maxWidth: '100%', maxHeight: '100%', verticalAlign: 'middle' }}\n />\n </div>\n ) : (\n <Avatar\n onClick={() => handleNavigation('easy')}\n style={styles.logoSize}\n alt=\"ioBroker\"\n src=\"img/no-image.png\"\n />\n )}\n </a>\n {!this.props.adminGuiConfig.icon && this.props.versionAdmin && (\n <Typography sx={styles.styleVersion}>v{this.props.versionAdmin}</Typography>\n )}\n </div>\n <IconButton\n size=\"large\"\n onClick={() => {\n if (this.isSwipeable() || this.props.state === STATES.compact) {\n this.props.onStateChange(STATES.closed as 1);\n } else {\n this.props.onStateChange(STATES.compact as 2);\n }\n }}\n >\n <ChevronLeftIcon />\n </IconButton>\n </Box>\n );\n }\n\n isSwipeable(): boolean {\n return this.props.width === 'xs' || this.props.width === 'sm';\n }\n\n tabsEditSystemConfig = async (idx?: number, isVisibility?: boolean, newColor?: string): Promise<void> => {\n const { tabs } = this.state;\n const { socket } = this.props;\n const newTabs: AdminTab[] = JSON.parse(JSON.stringify(tabs)) as AdminTab[];\n if (isVisibility) {\n newTabs[idx].visible = !newTabs[idx].visible;\n }\n if (newColor !== undefined) {\n if (newColor === null) {\n delete newTabs[idx].color;\n } else {\n newTabs[idx].color = newColor;\n }\n }\n const newObjCopy = await this.props.socket.getSystemConfig(true);\n newObjCopy.common.tabsVisible = newTabs.map(({ name, visible, color }) => ({ name, visible, color }));\n\n if (isVisibility || newColor !== undefined) {\n this.setState({ tabs: newTabs }, () =>\n socket.setSystemConfig(newObjCopy).catch(e => window.alert(`Cannot set system config: ${e}`)),\n );\n } else {\n try {\n await socket.setSystemConfig(newObjCopy);\n } catch (e) {\n window.alert(`Cannot set system config: ${e}`);\n }\n }\n };\n\n getNavigationItems(): JSX.Element[] {\n const { tabs, logErrors, logWarnings } = this.state;\n const { currentTab, state, handleNavigation } = this.props;\n\n const hosts: Record<string, ioBroker.HostObject> = {};\n this.props.hosts.forEach(host => (hosts[host._id] = host));\n\n return tabs.map((tab, idx) => {\n if (!this.props.editMenuList && !tab.visible) {\n return null;\n }\n\n if (this.props.adminGuiConfig.admin.menu && this.props.adminGuiConfig.admin.menu[tab.name] === false) {\n return null;\n }\n\n return (\n <DragWrapper\n key={tab.name}\n canDrag={this.props.editMenuList}\n name={tab.name}\n iconJSX={\n tabsInfo[tab.name]?.icon ? (\n tabsInfo[tab.name].icon\n ) : (\n <Icon\n style={styles.icon}\n src={tab.icon}\n />\n )\n }\n _id={tab.name}\n selected={currentTab === tab.name}\n tab={tab}\n compact={!this.isSwipeable() && state !== STATES.opened}\n badgeContent={logErrors || logWarnings || 0}\n badgeColor={logErrors ? 'error' : logWarnings ? 'warn' : ''}\n tabs={tabs}\n setEndDrag={() => this.tabsEditSystemConfig()}\n setTabs={(newObj: AdminTab[]) => this.setState({ tabs: newObj })}\n >\n <DrawerItem\n key={tab.name}\n editMenuList={this.props.editMenuList}\n visible={tab.visible}\n color={tab.color}\n editListFunc={(isVisibility, color) => this.tabsEditSystemConfig(idx, isVisibility, color)}\n compact={!this.isSwipeable() && state !== STATES.opened}\n onClick={e => {\n if (e.ctrlKey || e.shiftKey) {\n void getHref(\n this.props.instancesWorker,\n tab.name,\n this.props.hostname,\n hosts,\n this.props.adminInstance,\n this.props.themeType,\n ).then(href => {\n if (href) {\n console.log(href);\n // Open in new tab\n window\n .open(\n `${window.location.protocol}//${window.location.host}/${href}`,\n tab.name,\n )\n .focus();\n } else {\n handleNavigation(tab.name);\n }\n });\n } else {\n handleNavigation(tab.name);\n }\n }}\n icon={\n tabsInfo[tab.name]?.icon ? (\n tabsInfo[tab.name].icon\n ) : (\n <Icon\n src={tab.icon}\n style={styles.icon}\n />\n )\n }\n text={tab.title}\n selected={currentTab === tab.name}\n badgeContent={this.badge(tab).content}\n badgeColor={this.badge(tab).color}\n badgeAdditionalContent={this.badge(tab)?.additionalContent}\n badgeAdditionalColor={this.badge(tab)?.additionalColor}\n theme={this.props.theme}\n />\n </DragWrapper>\n );\n });\n }\n\n badge = (\n tab: AdminTab,\n ): {\n content: number;\n color: 'error' | 'warn' | 'primary' | '';\n additionalContent?: number;\n additionalColor?: 'error' | 'secondary' | '';\n } => {\n switch (tab.name) {\n case 'tab-logs': {\n const { logErrors, logWarnings } = this.state;\n return { content: logErrors || logWarnings || 0, color: logErrors ? 'error' : 'warn' };\n }\n\n case 'tab-adapters':\n return { content: this.state.adaptersUpdate || 0, color: 'primary' };\n\n case 'tab-hosts':\n return {\n content: this.state.hostsUpdate || 0,\n color: 'primary',\n additionalContent: this.state.hostNotifications.warning + this.state.hostNotifications.other,\n additionalColor: this.state.hostNotifications.warning > 0 ? 'error' : 'secondary',\n };\n\n default:\n return {\n content: 0,\n color: '',\n additionalContent: 0,\n additionalColor: '',\n };\n }\n };\n\n render(): JSX.Element {\n if (this.isSwipeable()) {\n return (\n <SwipeableDrawer\n sx={Utils.getStyle(this.props.theme, styles.root, { '&.MuiSwipeableDrawer-paper': styles.paper })}\n anchor=\"left\"\n open={this.props.state !== STATES.closed}\n onClose={() => this.props.onStateChange(STATES.closed as 1)}\n onOpen={() => this.props.onStateChange(STATES.opened as 0)}\n >\n <CustomDragLayer theme={this.props.theme} />\n\n {this.getHeader()}\n\n <List>{this.getNavigationItems()}</List>\n {this.props.isSecure && (\n <DrawerItem\n theme={this.props.theme}\n compact={!this.isSwipeable() && this.props.state !== STATES.opened}\n onClick={this.props.onLogout}\n text={this.props.t('Logout')}\n icon={<LogoutIcon />}\n />\n )}\n {this.props.adminGuiConfig.admin.menu.editable !== false && this.props.state === STATES.opened && (\n <div style={styles.editButton}>\n <CustomPopper\n editMenuList={this.props.editMenuList}\n onClick={() => this.props.setEditMenuList(!this.props.editMenuList)}\n />\n </div>\n )}\n </SwipeableDrawer>\n );\n }\n\n return (\n <MaterialDrawer\n sx={Utils.getStyle(\n this.props.theme,\n styles.root,\n this.props.state !== STATES.opened\n ? styles.rootCompactWidth\n : this.props.editMenuList\n ? styles.rootEditWidth\n : styles.rootFullWidth,\n {\n '& .MuiDrawer-paper': styles.paper,\n },\n )}\n variant=\"persistent\"\n anchor=\"left\"\n open={this.props.state !== STATES.closed}\n onMouseEnter={() => this.refEditButton.current && (this.refEditButton.current.style.opacity = '1')}\n onMouseLeave={() => this.refEditButton.current && (this.refEditButton.current.style.opacity = '0')}\n >\n <CustomDragLayer theme={this.props.theme} />\n {this.getHeader()}\n <List style={styles.list}>{this.getNavigationItems()}</List>\n {this.props.isSecure && (\n <DrawerItem\n theme={this.props.theme}\n style={{ flexShrink: 0 }}\n compact={!this.isSwipeable() && this.props.state !== STATES.opened}\n onClick={this.props.onLogout}\n text={this.props.t('Logout')}\n icon={<LogoutIcon />}\n />\n )}\n {this.props.adminGuiConfig.admin.menu.editable !== false && this.props.state === STATES.opened && (\n <div\n style={{ ...styles.editButton, opacity: 0 }}\n ref={this.refEditButton}\n >\n <CustomPopper\n size=\"small\"\n editMenuList={this.props.editMenuList}\n onClick={() => this.props.setEditMenuList(!this.props.editMenuList)}\n />\n </div>\n )}\n </MaterialDrawer>\n );\n }\n}\n\nDrawer.contextType = ContextWrapper;\nexport default withWidth()(Drawer);\n","import React, { type JSX } from 'react';\n\nconst offset = 187;\n\nconst styles: Record<string, React.CSSProperties> = {\n root: {\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n position: 'fixed',\n background: 'rgba(0, 0, 0, .3)',\n zIndex: 20000,\n },\n connecting: {\n left: '40%',\n top: '40%',\n width: '20%',\n height: '20%',\n position: 'absolute',\n },\n spinner: {\n animation: 'admin-connecting-rotator 1.4s linear infinite',\n },\n path: {\n strokeDasharray: 187,\n strokeDashoffset: 0,\n transformOrigin: 'center',\n animation: 'admin-connecting-dash 1.4s ease-in-out infinite, $colors 5.6s ease-in-out infinite',\n },\n};\n\nfunction Connecting(): JSX.Element {\n return (\n <div style={styles.root}>\n <style>\n {`\n' @keyframes admin-connecting-colors {\n 0% {\n stroke: #4285F4;\n }\n 25% {\n stroke: #DE3E35;\n }\n 50% {\n stroke: #F7C223;\n }\n 75% {\n stroke: #1B9A59;\n }\n 100% {\n stroke: #4285F4;\n }\n }\n @keyframes admin-connecting-dash {\n 0% {\n stroke-dashoffset: ${offset};\n }\n 50% {\n stroke-dashoffset: ${offset / 4};\n transform: rotate(135deg);\n }\n 100% {\n stroke-dashoffset: ${offset};\n transform: 'rotate(450deg);\n }\n }\n @keyframes admin-connecting-rotator {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(270deg);\n }\n }\n`}\n </style>\n <div style={styles.connecting}>\n <svg\n style={styles.spinner}\n width=\"100%\"\n height=\"100%\"\n viewBox=\"0 0 66 66\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n style={styles.path}\n fill=\"none\"\n strokeWidth=\"6\"\n strokeLinecap=\"round\"\n cx=\"33\"\n cy=\"33\"\n r=\"30\"\n />\n </svg>\n </div>\n </div>\n );\n}\n\nexport default Connecting;\n","import React, { createRef, Component, type JSX } from 'react';\n\nimport { TextField, Grid2, Toolbar, Button, Paper, Box } from '@mui/material';\n\nimport { Check as IconCheck } from '@mui/icons-material';\n\nimport { type IobTheme, type Translate, withWidth } from '@iobroker/adapter-react-v5';\n\nimport AdminUtils from '../../helpers/AdminUtils';\n\nconst TOOLBAR_HEIGHT = 64;\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n },\n title: (theme: IobTheme) => ({\n color: theme.palette.secondary.main,\n }),\n form: {\n height: `calc(100% - ${TOOLBAR_HEIGHT + 8}px)`,\n overflow: 'auto',\n },\n input: {\n width: 400,\n marginBottom: 16,\n },\n grow: {\n flexGrow: 1,\n },\n toolbar: {\n height: TOOLBAR_HEIGHT,\n lineHeight: `${TOOLBAR_HEIGHT}px`,\n },\n};\n\ninterface WizardPasswordTabProps {\n t: Translate;\n onDone: (password: string) => void;\n}\n\ninterface WizardPasswordTabState {\n password: string;\n passwordRepeat: string;\n errorPassword: boolean | string;\n errorPasswordRepeat: boolean | string;\n}\n\nclass WizardPasswordTab extends Component<WizardPasswordTabProps, WizardPasswordTabState> {\n private readonly focusRef: React.RefObject<HTMLInputElement>;\n\n constructor(props: WizardPasswordTabProps) {\n super(props);\n\n this.state = {\n password: '',\n passwordRepeat: '',\n errorPassword: true,\n errorPasswordRepeat: false,\n };\n\n this.focusRef = createRef();\n }\n\n componentDidMount(): void {\n this.focusRef.current?.focus();\n }\n\n render(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n <form\n style={styles.form}\n noValidate\n autoComplete=\"off\"\n >\n <Grid2\n container\n direction=\"column\"\n >\n <Grid2>\n <Box\n component=\"h2\"\n sx={styles.title}\n >\n {this.props.t('You must set the administrator password')}\n </Box>\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n disabled\n style={styles.input}\n label={this.props.t('Administrator name')}\n value=\"admin\"\n slotProps={{\n input: { readOnly: true },\n }}\n helperText={this.props.t('Administrator name cannot be changed')}\n />\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n slotProps={{\n input: {\n autoComplete: 'new-password',\n },\n htmlInput: {\n autoComplete: 'off',\n },\n }}\n onKeyDown={e => {\n if (e.key === 'Enter' && this.state.password && !this.state.errorPassword) {\n const el = window.document.getElementById('admin_password');\n if (el) {\n el.focus();\n }\n }\n }}\n autoComplete=\"off\"\n style={styles.input}\n ref={this.focusRef}\n label={this.props.t('Administrator password')}\n type=\"password\"\n value={this.state.password}\n error={!!this.state.errorPassword}\n onChange={e => {\n const errorPassword = AdminUtils.checkPassword(e.target.value);\n const errorPasswordRepeat = AdminUtils.checkPassword(\n e.target.value,\n this.state.passwordRepeat,\n );\n this.setState({\n password: e.target.value,\n errorPassword: errorPassword ? this.props.t(errorPassword) : false,\n errorPasswordRepeat: errorPasswordRepeat\n ? this.props.t(errorPasswordRepeat)\n : false,\n });\n }}\n helperText={this.props.t(\n 'Password must be at least 8 characters long and have numbers, upper and lower case letters',\n )}\n />\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n slotProps={{\n input: {\n autoComplete: 'new-password',\n },\n htmlInput: {\n autoComplete: 'off',\n id: 'admin_password',\n },\n }}\n onKeyDown={e => {\n if (\n e.key === 'Enter' &&\n this.state.password &&\n !this.state.errorPassword &&\n !this.state.errorPasswordRepeat\n ) {\n this.props.onDone(this.state.password);\n }\n }}\n autoComplete=\"off\"\n style={styles.input}\n label={this.props.t('Repeat administrator password')}\n value={this.state.passwordRepeat}\n type=\"password\"\n error={!!this.state.errorPasswordRepeat}\n onChange={e => {\n const errorPasswordRepeat = AdminUtils.checkPassword(\n this.state.password,\n e.target.value,\n );\n this.setState({\n passwordRepeat: e.target.value,\n errorPasswordRepeat: errorPasswordRepeat\n ? this.props.t(errorPasswordRepeat)\n : false,\n });\n }}\n helperText={this.state.errorPasswordRepeat || ''}\n />\n </Grid2>\n </Grid2>\n </form>\n <Toolbar style={styles.toolbar}>\n <div style={styles.grow} />\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={() => this.props.onDone(this.state.password)}\n disabled={\n !this.state.passwordRepeat || !!this.state.errorPasswordRepeat || !!this.state.errorPassword\n }\n startIcon={<IconCheck />}\n >\n {this.props.t('Set administrator password')}\n </Button>\n </Toolbar>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(WizardPasswordTab);\n","const license: Record<ioBroker.Languages, string> = {\n en:\n 'The MIT License (MIT)\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n '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:\\n' +\n 'The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n' +\n '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.\\n',\n\n de:\n 'MIT-Lizenz (MIT)\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Hiermit wird unentgeltlich jeder Person, die eine Kopie der Software und der zugehörigen Dokumentationen (die \"Software\") erhält, die Erlaubnis erteilt, sie uneingeschränkt zu benutzen, inklusive und ohne Ausnahme dem Recht, sie zu verwenden, kopieren, ändern, fusionieren, verlegen, verbreiten, unterlizenzieren und/oder zu verkaufen, und Personen, die diese Software erhalten, diese Rechte zu geben, unter den folgenden Bedingungen:\\n' +\n 'Der obige Urheberrechtsvermerk und dieser Erlaubnisvermerk sind in allen Kopien oder Teilkopien der Software beizulegen.\\n' +\n 'DIE SOFTWARE WIRD OHNE JEDE AUSDRÜCKLICHE ODER IMPLIZIERTE GARANTIE BEREITGESTELLT, EINSCHLIESSLICH DER GARANTIE ZUR BENUTZUNG FÜR DEN VORGESEHENEN ODER EINEM BESTIMMTEN ZWECK SOWIE JEGLICHER RECHTSVERLETZUNG, JEDOCH NICHT DARAUF BESCHRÄNKT. IN KEINEM FALL SIND DIE AUTOREN ODER COPYRIGHTINHABER FÜR JEGLICHEN SCHADEN ODER SONSTIGE ANSPRÜCHE HAFTBAR ZU MACHEN, OB INFOLGE DER ERFÜLLUNG EINES VERTRAGES, EINES DELIKTES ODER ANDERS IM ZUSAMMENHANG MIT DER SOFTWARE ODER SONSTIGER VERWENDUNG DER SOFTWARE ENTSTANDEN.',\n\n ru:\n 'Лицензия MIT\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:\\n' +\n 'Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.\\n' +\n 'ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.',\n\n it:\n 'Licenza MIT\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Si concede gratuitamente l\\'autorizzazione, a chiunque ottenga una copia di questo software e dei file di documentazione associati (il \"Software\"), di dare opera al Software senza restrizioni, compresi senza limitazione i diritti di utilizzare, copiare, modificare, unire, pubblicare, distribuire, concedere in sublicenza ovvero vendere copie del Software, e di consentire alle persone a cui il Software è fornito di fare altrettanto, posto che siano rispettate le seguenti condizioni:\\n' +\n \"l'avviso di copyright unitamente a questo avviso di licenza devono essere sempre inclusi in tutte le copie o parti sostanziali del Software.\\n\" +\n 'IL SOFTWARE VIENE FORNITO \"COSÌ COM\\'È\" SENZA GARANZIE DI ALCUN TIPO, ESPLICITE O IMPLICITE, COMPRESE, MA NON SOLO, LE GARANZIE DI COMMERCIABILITÀ, IDONEITÀ AD UN PARTICOLARE SCOPO E NON VIOLAZIONE DI DIRITTI ALTRUI. IN NESSUN CASO GLI AUTORI DEL SOFTWARE O I TITOLARI DEL COPYRIGHT POTRANNO ESSERE RITENUTI RESPONSABILI DI RECLAMI, DANNI O ALTRE RESPONSABILITÀ, DERIVANTI DA O COLLEGATI A CONTRATTO, ILLECITO CIVILE O IN ALTRA RELAZIONE CON IL SOFTWARE O CON IL SUO UTILIZZO O CON ALTRE OPERAZIONI DEL SOFTWARE.',\n\n fr:\n 'Licence MIT\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n '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:\\n' +\n 'The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n' +\n '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.\\n',\n\n pt:\n 'Licença MIT\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n '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:\\n' +\n 'The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n' +\n '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.\\n',\n\n nl:\n 'MIT-licentie\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n '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:\\n' +\n 'The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n' +\n '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.\\n',\n\n es:\n 'Licencia MIT\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Se concede permiso, de forma gratuita, a cualquier persona que obtenga una copia de este software y de los archivos de documentación asociados (el \"Software\"), para utilizar el Software sin restricción, incluyendo sin limitación los derechos a usar, copiar, modificar, fusionar, publicar, distribuir, sublicenciar, y/o vender copias del Software, y a permitir a las personas a las que se les proporcione el Software a hacer lo mismo, sujeto a las siguientes condiciones:\\n' +\n 'El aviso de copyright anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.\\n' +\n 'EL SOFTWARE SE PROPORCIONA \"TAL CUAL\", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO PERO NO LIMITADO A GARANTÍAS DE COMERCIALIZACIÓN, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DEL COPYRIGHT SERÁN RESPONSABLES DE NINGUNA RECLAMACIÓN, DAÑOS U OTRAS RESPONSABILIDADES, YA SEA EN UNA ACCIÓN DE CONTRATO, AGRAVIO O CUALQUIER OTRO MOTIVO, QUE SURJA DE O EN CONEXIÓN CON EL SOFTWARE O EL USO U OTRO TIPO DE ACCIONES EN EL SOFTWARE.',\n\n pl:\n 'Licencja MIT\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n '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:\\n' +\n 'The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n' +\n '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.\\n',\n\n uk:\n 'Ліцензія MIT\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n '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:\\n' +\n 'The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n' +\n '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.\\n',\n\n 'zh-cn':\n 'MIT许可证\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n '特此向任何得到本软件副本或相关文档的人授权:被授权人有权使用、复制、修改、 合并、出版、发布、散布、再授权和/或贩售软件及软件的副本,及授予被供应人 同等权利,只需服从以下义务:\\n' +\n '在软件和软件的所有副本中都必须包含以上版权声明和本许可声明。\\n' +\n '该软件是\"按原样\"提供的,没有任何形式的明示或暗示,包括但不限于为特定目的和 不侵权的适销性和适用性的保证担保。在任何情况下,作者或版权持有人,都无权要求 任何索赔,或有关损害赔偿的其他责任。无论在本软件的使用上或其他买卖交易中, 是否涉及合同,侵权或其他行为。\\n',\n};\n\nexport default license;\n","import React, { createRef, Component, type JSX } from 'react';\n\nimport {\n Toolbar,\n MenuItem,\n Grid2,\n Select,\n FormControlLabel,\n Checkbox,\n Button,\n FormControl,\n InputLabel,\n Paper,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n LinearProgress,\n} from '@mui/material';\n\nimport { Language as IconWorld, Close as IconCancel, Check as IconCheck, Close } from '@mui/icons-material';\n\nimport { type AdminConnection, I18n, type ThemeType, type Translate, withWidth } from '@iobroker/adapter-react-v5';\n\nimport Editor from '@/components/Editor';\nimport LicenseTexts from '../LicenseTexts';\n\nconst TOOLBAR_HEIGHT = 64;\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n },\n gridDiv: {\n height: `calc(100% - ${TOOLBAR_HEIGHT}px)`,\n width: '100%',\n overflow: 'hidden',\n padding: 16,\n textAlign: 'center',\n },\n languageSelect: {\n minWidth: 200,\n marginRight: 24,\n },\n licenseDiv: {\n width: '100%',\n height: `calc(100% - ${65 + 88}px)`,\n overflow: 'auto',\n },\n grow: {\n flexGrow: 1,\n },\n statAccept: {\n marginTop: 10,\n color: '#ff636e',\n },\n statAcceptDiv: {\n display: 'inline-block',\n },\n statAcceptNote: {\n textAlign: 'left',\n marginLeft: 32,\n },\n greenButton: {\n marginLeft: 8,\n },\n toolbar: {\n height: TOOLBAR_HEIGHT,\n lineHeight: `${TOOLBAR_HEIGHT}px`,\n },\n licenseTextDiv: {\n width: '100%',\n maxWidth: 600,\n textAlign: 'left',\n margin: 'auto',\n },\n licenseText: {\n marginBottom: 15,\n },\n};\n\ninterface WizardLicenseTabProps {\n t: Translate;\n onDone: (config: { lang: ioBroker.Languages }) => void;\n lang?: ioBroker.Languages;\n socket: AdminConnection;\n themeType: ThemeType;\n}\n\ninterface WizardLicenseTabState {\n statisticsAccepted: boolean;\n lang: ioBroker.Languages;\n notAgree: boolean;\n showStatisticsDialog: boolean;\n requesting: boolean;\n diagData: Record<string, any> | null;\n}\n\nclass WizardLicenseTab extends Component<WizardLicenseTabProps, WizardLicenseTabState> {\n private readonly focusRef: React.RefObject<HTMLButtonElement>;\n\n constructor(props: WizardLicenseTabProps) {\n super(props);\n\n this.state = {\n statisticsAccepted: false,\n lang: this.props.lang || I18n.getLanguage(),\n notAgree: false,\n diagData: null,\n requesting: false,\n showStatisticsDialog: false,\n };\n\n this.focusRef = createRef();\n }\n\n componentDidMount(): void {\n this.focusRef.current?.focus();\n }\n\n async readStatistics(): Promise<void> {\n // Get current host\n const instance = await this.props.socket.getCurrentInstance();\n // read settings of current instance\n const settings: ioBroker.InstanceObject = (await this.props.socket.getObject(\n `system.adapter.${instance}`,\n )) as any as ioBroker.InstanceObject;\n\n const diagData = await this.props.socket.getDiagData(settings.common.host, 'extended');\n\n this.setState({ diagData, requesting: false });\n }\n\n renderStatisticsDialog(): JSX.Element | null {\n if (!this.state.showStatisticsDialog) {\n return null;\n }\n return (\n <Dialog\n open={!0}\n maxWidth=\"lg\"\n fullWidth\n sx={{ '& .MuiDialog-paper': { maxHeight: 'calc(100% - 96px)', height: 'calc(100% - 96px)' } }}\n onClose={() => this.setState({ showStatisticsDialog: false })}\n >\n <DialogTitle>{this.props.t('Sent data:')}</DialogTitle>\n <DialogContent>\n {this.state.requesting && <LinearProgress />}\n {this.state.requesting && <div>{this.props.t('Requesting data...')}</div>}\n {!this.state.requesting && (\n <div style={{ fontSize: 14, marginBottom: 8 }}>\n {this.props.t(\n 'The sent data will only be processed by ioBroker GmbH for statistical purposes and will not be shared with any third parties.',\n )}\n </div>\n )}\n {!this.state.requesting && (\n <Editor\n style={{ height: 'calc(100% - 41px)' }}\n editValueMode\n themeType={this.props.themeType}\n value={JSON.stringify(this.state.diagData, null, 2)}\n />\n )}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n onClick={() => this.setState({ showStatisticsDialog: false })}\n color=\"primary\"\n autoFocus\n startIcon={<Close />}\n >\n {I18n.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n renderNotAgree(): JSX.Element | null {\n if (!this.state.notAgree) {\n return null;\n }\n return (\n <Dialog\n open={!0}\n onClose={() => this.setState({ notAgree: false })}\n >\n <DialogTitle>{this.props.t('Message')}</DialogTitle>\n <DialogContent>\n <DialogContentText id=\"alert-dialog-description\">\n <span\n role=\"img\"\n aria-label=\"unhappy\"\n >\n 😒\n </span>{' '}\n {this.props.t('Sorry, you cannot use ioBroker.')}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n onClick={() => this.setState({ notAgree: false })}\n color=\"primary\"\n startIcon={<IconCheck />}\n >\n {I18n.t('Understand')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n static renderLicenseText(): JSX.Element {\n const text = LicenseTexts[I18n.getLanguage()] || LicenseTexts.en;\n const lines = text.split('\\n');\n return (\n <div style={styles.licenseTextDiv}>\n {lines.map((line, i) => (\n <div\n style={styles.licenseText}\n key={i}\n >\n {line}\n </div>\n ))}\n </div>\n );\n }\n\n render(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n <Grid2\n container\n style={styles.gridDiv}\n direction=\"column\"\n >\n <Grid2>\n <FormControl\n variant=\"standard\"\n style={styles.languageSelect}\n >\n <InputLabel>\n <IconWorld />\n {this.props.t('Language')}\n </InputLabel>\n <Select\n variant=\"standard\"\n value={I18n.getLanguage()}\n onChange={e => {\n I18n.setLanguage(e.target.value as ioBroker.Languages);\n this.setState({ lang: e.target.value as ioBroker.Languages });\n }}\n >\n <MenuItem value=\"en\">English</MenuItem>\n <MenuItem value=\"de\">Deutsch</MenuItem>\n <MenuItem value=\"ru\">русский</MenuItem>\n <MenuItem value=\"pt\">Portugues</MenuItem>\n <MenuItem value=\"nl\">Nederlands</MenuItem>\n <MenuItem value=\"fr\">français</MenuItem>\n <MenuItem value=\"it\">Italiano</MenuItem>\n <MenuItem value=\"es\">Espanol</MenuItem>\n <MenuItem value=\"pl\">Polski</MenuItem>\n <MenuItem value=\"uk\">Українська</MenuItem>\n <MenuItem value=\"zh-cn\">简体中文</MenuItem>\n </Select>\n </FormControl>\n <div style={styles.statAcceptDiv}>\n <FormControlLabel\n style={styles.statAccept}\n control={\n <Checkbox\n ref={this.focusRef}\n checked={this.state.statisticsAccepted}\n onChange={e => this.setState({ statisticsAccepted: e.target.checked })}\n />\n }\n label={this.props.t('I agree with the collection of anonymous statistics.')}\n />\n <div style={styles.statAcceptNote}>\n {this.props.t('(This can be disabled later in settings)')}\n <Button\n variant=\"outlined\"\n style={{ marginLeft: 16 }}\n onClick={() =>\n this.setState({ showStatisticsDialog: true, requesting: true }, () =>\n this.readStatistics(),\n )\n }\n >\n {this.props.t('Show sent statistics data')}\n </Button>\n </div>\n </div>\n </Grid2>\n <Grid2>\n <h1>{this.props.t('License terms')}</h1>\n </Grid2>\n <Grid2 style={styles.licenseDiv}>{WizardLicenseTab.renderLicenseText()}</Grid2>\n </Grid2>\n <Toolbar style={styles.toolbar}>\n <div style={styles.grow} />\n <Button\n variant=\"contained\"\n color=\"grey\"\n onClick={() => this.setState({ notAgree: true })}\n startIcon={<IconCancel />}\n >\n {this.props.t('Not agree')}\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n style={styles.greenButton}\n disabled={!this.state.statisticsAccepted}\n onClick={() => this.props.onDone({ lang: this.state.lang })}\n startIcon={<IconCheck />}\n >\n {this.props.t('Agree')}\n </Button>\n <div style={styles.grow} />\n </Toolbar>\n {this.renderNotAgree()}\n {this.renderStatisticsDialog()}\n </Paper>\n );\n }\n}\n\nexport default withWidth()(WizardLicenseTab);\n","var _style, _g, _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _g2, _path9, _path10;\nconst _excluded = [\"title\", \"titleId\"];\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }\nimport * as React from \"react\";\nfunction SvgLongLogo(_ref, svgRef) {\n let {\n title,\n titleId\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 550 370\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _style || (_style = /*#__PURE__*/React.createElement(\"style\", {\n type: \"text/css\"\n }, \"\\n\\t.st0{fill:#144578;}\\n\\t.st1{fill:#3499CC;}\\n\")), _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M293.2,244.1h-2.4v-3.2h-8.3v3.2h-2.4v-6.5c0-1,0.2-1.8,0.5-2.6s0.8-1.5,1.4-2.1c0.6-0.6,1.3-1,2.1-1.3 c0.8-0.3,1.7-0.5,2.6-0.5h5.3c0.2,0,0.3,0,0.5,0.1c0.1,0.1,0.3,0.1,0.4,0.3c0.1,0.1,0.2,0.2,0.3,0.4c0.1,0.1,0.1,0.3,0.1,0.5V244.1 z M282.6,238.5h8.3v-5.1h-4.1c-0.1,0-0.2,0-0.5,0c-0.2,0-0.5,0.1-0.8,0.2c-0.3,0.1-0.6,0.2-1,0.4s-0.7,0.4-0.9,0.7 s-0.5,0.7-0.7,1.2s-0.3,1-0.3,1.7V238.5z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M306.4,242.9c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.1,0.3-0.3,0.4c-0.1,0.1-0.2,0.2-0.4,0.3 c-0.1,0.1-0.3,0.1-0.5,0.1h-5.3c-0.3,0-0.6,0-0.9-0.1c-0.3-0.1-0.7-0.2-1-0.3s-0.6-0.3-0.9-0.6c-0.3-0.2-0.6-0.5-0.8-0.8 c-0.2-0.3-0.4-0.7-0.5-1.1c-0.1-0.4-0.2-0.9-0.2-1.4v-5.4h2.4v5.4c0,0.3,0.1,0.6,0.2,0.8c0.1,0.2,0.3,0.5,0.4,0.6s0.4,0.3,0.6,0.4 s0.5,0.1,0.8,0.1h4.1v-7.5h2.4V242.9z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M317.5,236.6h-4.1v7.5H311v-7.5H308v-2.4h3.1v-3.2h2.4v3.2h4.1V236.6z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M329.7,240.8c0,0.4-0.1,0.8-0.2,1.1c-0.1,0.3-0.2,0.6-0.4,0.9c-0.2,0.2-0.4,0.5-0.6,0.6 c-0.2,0.2-0.5,0.3-0.7,0.4c-0.2,0.1-0.5,0.2-0.7,0.2s-0.5,0.1-0.7,0.1h-4.3c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6 c-0.3-0.3-0.6-0.6-0.8-1s-0.3-0.9-0.3-1.5v-3.2c0-0.6,0.1-1.1,0.3-1.5s0.5-0.8,0.8-1c0.3-0.3,0.7-0.5,1.1-0.6 c0.4-0.1,0.7-0.2,1.1-0.2h4.3c0.6,0,1.1,0.1,1.5,0.3c0.4,0.2,0.8,0.5,1,0.8c0.3,0.3,0.5,0.7,0.6,1.1c0.1,0.4,0.2,0.7,0.2,1.1V240.8 z M327.4,237.6c0-0.3-0.1-0.6-0.2-0.7c-0.2-0.2-0.4-0.2-0.7-0.2h-4.2c-0.3,0-0.6,0.1-0.7,0.2c-0.2,0.2-0.2,0.4-0.2,0.7v3.2 c0,0.3,0.1,0.5,0.2,0.7c0.2,0.2,0.4,0.2,0.7,0.2h4.2c0.3,0,0.6-0.1,0.7-0.2c0.2-0.2,0.2-0.4,0.2-0.7V237.6z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M340.5,244.1h-2.4v-6.5c0-0.3-0.1-0.5-0.2-0.7c-0.2-0.2-0.4-0.2-0.7-0.2h-3.1v7.5h-2.4v-8.6 c0-0.2,0-0.3,0.1-0.5c0.1-0.1,0.1-0.3,0.3-0.4c0.1-0.1,0.2-0.2,0.4-0.2s0.3-0.1,0.5-0.1h4.3c0.3,0,0.7,0.1,1.1,0.2 c0.4,0.1,0.7,0.3,1.1,0.6v-0.7h3.2c0.2,0,0.5,0,0.7,0.1c0.2,0.1,0.5,0.1,0.7,0.2c0.2,0.1,0.5,0.3,0.7,0.4c0.2,0.2,0.4,0.4,0.6,0.6 c0.2,0.2,0.3,0.5,0.4,0.8c0.1,0.3,0.2,0.7,0.2,1.1v6.5h-2.4v-6.5c0-0.3-0.1-0.5-0.2-0.7c-0.2-0.2-0.4-0.2-0.7-0.2h-2.1 c0.1,0.3,0.1,0.6,0.1,0.9V244.1z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M358.1,240.8c0,0.3-0.1,0.7-0.2,1.1c-0.1,0.4-0.3,0.7-0.6,1.1c-0.3,0.3-0.6,0.6-1,0.8 c-0.4,0.2-0.9,0.3-1.5,0.3h-4.3c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6c-0.3-0.3-0.6-0.6-0.8-1c-0.2-0.4-0.3-0.9-0.3-1.5 c0-0.3,0.1-0.7,0.2-1.1c0.1-0.4,0.3-0.7,0.6-1.1c0.3-0.3,0.6-0.6,1-0.8c0.4-0.2,0.9-0.3,1.5-0.3h4.3v2.3h-4.3 c-0.3,0-0.6,0.1-0.7,0.3c-0.2,0.2-0.3,0.4-0.3,0.7c0,0.3,0.1,0.5,0.3,0.7c0.2,0.2,0.4,0.3,0.7,0.3h4.2c0.3,0,0.6-0.1,0.7-0.3 c0.2-0.2,0.3-0.4,0.3-0.7v-3.3c0-0.3-0.1-0.6-0.3-0.7c-0.2-0.2-0.4-0.3-0.7-0.3h-5.2v-2.2h5.2c0.3,0,0.7,0.1,1.1,0.2 c0.4,0.1,0.7,0.3,1.1,0.6c0.3,0.3,0.6,0.6,0.8,1c0.2,0.4,0.3,0.9,0.3,1.5V240.8z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M369,236.6h-4.1v7.5h-2.4v-7.5h-3.1v-2.4h3.1v-3.2h2.4v3.2h4.1V236.6z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M381.1,237.5c0,0.3-0.1,0.7-0.2,1.1c-0.1,0.4-0.3,0.7-0.6,1.1c-0.3,0.3-0.6,0.6-1,0.8 c-0.4,0.2-0.9,0.3-1.5,0.3h-4.3v-2.2h4.3c0.3,0,0.6-0.1,0.7-0.3s0.3-0.4,0.3-0.7c0-0.3-0.1-0.6-0.3-0.7c-0.2-0.2-0.4-0.3-0.7-0.3 h-4.3c-0.3,0-0.6,0.1-0.7,0.3c-0.2,0.2-0.3,0.4-0.3,0.7v3.3c0,0.3,0.1,0.6,0.3,0.7c0.2,0.2,0.4,0.3,0.7,0.3h4.2v2.3h-4.3 c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6c-0.3-0.3-0.6-0.6-0.8-1c-0.2-0.4-0.3-0.9-0.3-1.5v-3.3c0-0.3,0.1-0.7,0.2-1.1 c0.1-0.4,0.3-0.7,0.6-1.1c0.3-0.3,0.6-0.6,1-0.8c0.4-0.2,0.9-0.3,1.5-0.3h4.3c0.3,0,0.7,0.1,1.1,0.2c0.4,0.1,0.7,0.3,1.1,0.6 c0.3,0.3,0.6,0.6,0.8,1C381,236.4,381.1,236.9,381.1,237.5z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M396.2,244.1H392c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6c-0.3-0.3-0.6-0.6-0.8-1s-0.3-0.9-0.3-1.5 v-6.5h2.4v6.5c0,0.3,0.1,0.5,0.2,0.7c0.2,0.2,0.4,0.2,0.7,0.2h4.2V244.1z M399.5,245c0,0.4-0.1,0.8-0.2,1.1 c-0.1,0.3-0.2,0.6-0.4,0.9c-0.2,0.2-0.4,0.5-0.6,0.6c-0.2,0.2-0.5,0.3-0.7,0.4s-0.5,0.2-0.7,0.2c-0.2,0.1-0.5,0.1-0.7,0.1H392V246 h4.3c0.3,0,0.6-0.1,0.7-0.2c0.2-0.2,0.2-0.4,0.2-0.7v-10.8h2.4V245z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M412.5,240.8c0,0.4-0.1,0.8-0.2,1.1c-0.1,0.3-0.2,0.6-0.4,0.9c-0.2,0.2-0.4,0.5-0.6,0.6 c-0.2,0.2-0.5,0.3-0.7,0.4c-0.2,0.1-0.5,0.2-0.7,0.2s-0.5,0.1-0.7,0.1h-4.3c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6 c-0.3-0.3-0.6-0.6-0.8-1s-0.3-0.9-0.3-1.5v-3.2c0-0.6,0.1-1.1,0.3-1.5s0.5-0.8,0.8-1c0.3-0.3,0.7-0.5,1.1-0.6 c0.4-0.1,0.7-0.2,1.1-0.2h4.3c0.6,0,1.1,0.1,1.5,0.3c0.4,0.2,0.8,0.5,1,0.8c0.3,0.3,0.5,0.7,0.6,1.1c0.1,0.4,0.2,0.7,0.2,1.1V240.8 z M410.1,237.6c0-0.3-0.1-0.6-0.2-0.7c-0.2-0.2-0.4-0.2-0.7-0.2h-4.2c-0.3,0-0.6,0.1-0.7,0.2c-0.2,0.2-0.2,0.4-0.2,0.7v3.2 c0,0.3,0.1,0.5,0.2,0.7c0.2,0.2,0.4,0.2,0.7,0.2h4.2c0.3,0,0.6-0.1,0.7-0.2c0.2-0.2,0.2-0.4,0.2-0.7V237.6z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M425.2,242.9c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.1,0.3-0.3,0.4c-0.1,0.1-0.2,0.2-0.4,0.3 c-0.1,0.1-0.3,0.1-0.5,0.1h-5.3c-0.3,0-0.6,0-0.9-0.1c-0.3-0.1-0.7-0.2-1-0.3s-0.6-0.3-0.9-0.6c-0.3-0.2-0.6-0.5-0.8-0.8 c-0.2-0.3-0.4-0.7-0.5-1.1c-0.1-0.4-0.2-0.9-0.2-1.4v-5.4h2.4v5.4c0,0.3,0.1,0.6,0.2,0.8c0.1,0.2,0.3,0.5,0.4,0.6s0.4,0.3,0.6,0.4 s0.5,0.1,0.8,0.1h4.1v-7.5h2.4V242.9z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M436,236.6h-5.3c-0.3,0-0.6,0.1-0.7,0.2c-0.2,0.2-0.2,0.4-0.2,0.7v6.5h-2.4v-6.5c0-0.4,0.1-0.8,0.2-1.1 c0.1-0.3,0.2-0.6,0.4-0.8c0.2-0.2,0.4-0.5,0.6-0.6c0.2-0.2,0.5-0.3,0.7-0.4c0.2-0.1,0.5-0.2,0.7-0.2c0.3-0.1,0.5-0.1,0.7-0.1h5.3 V236.6z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M447.8,244.1h-1.1c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6c-0.3-0.3-0.6-0.6-0.8-1s-0.3-0.9-0.3-1.5 v-10.7h2.4v10.7c0,0.3,0.1,0.5,0.3,0.7c0.2,0.2,0.4,0.3,0.7,0.3h1.1V244.1z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M451.7,232.2h-2.4v-2.1h2.4V232.2z M451.7,244.1h-2.4v-9.8h2.4V244.1z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M462.6,232.4h-5.3c-0.3,0-0.6,0.1-0.7,0.2c-0.2,0.2-0.2,0.4-0.2,0.7v10.8H454v-10.8c0-0.4,0.1-0.8,0.2-1.1 c0.1-0.3,0.2-0.6,0.4-0.8c0.2-0.2,0.4-0.5,0.6-0.6c0.2-0.2,0.5-0.3,0.7-0.4c0.2-0.1,0.5-0.2,0.7-0.2c0.2-0.1,0.5-0.1,0.7-0.1h5.3 V232.4z M462.6,236.6h-5.3v-2.4h5.3V236.6z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M474.7,237.5c0,0.3-0.1,0.7-0.2,1.1c-0.1,0.4-0.3,0.7-0.6,1.1c-0.3,0.3-0.6,0.6-1,0.8 c-0.4,0.2-0.9,0.3-1.5,0.3h-4.3v-2.2h4.3c0.3,0,0.6-0.1,0.7-0.3s0.3-0.4,0.3-0.7c0-0.3-0.1-0.6-0.3-0.7c-0.2-0.2-0.4-0.3-0.7-0.3 h-4.3c-0.3,0-0.6,0.1-0.7,0.3c-0.2,0.2-0.3,0.4-0.3,0.7v3.3c0,0.3,0.1,0.6,0.3,0.7c0.2,0.2,0.4,0.3,0.7,0.3h4.2v2.3h-4.3 c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6c-0.3-0.3-0.6-0.6-0.8-1c-0.2-0.4-0.3-0.9-0.3-1.5v-3.3c0-0.3,0.1-0.7,0.2-1.1 c0.1-0.4,0.3-0.7,0.6-1.1c0.3-0.3,0.6-0.6,1-0.8c0.4-0.2,0.9-0.3,1.5-0.3h4.3c0.3,0,0.7,0.1,1.1,0.2c0.4,0.1,0.7,0.3,1.1,0.6 c0.3,0.3,0.6,0.6,0.8,1C474.6,236.4,474.7,236.9,474.7,237.5z\"\n }))), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M221.6,211.5c0,1.3-0.2,2.6-0.6,4c-0.4,1.4-1.1,2.8-2.1,4c-1,1.2-2.3,2.3-3.8,3.1c-1.6,0.8-3.5,1.2-5.8,1.2 h-38.6c-0.7,0-1.4-0.1-2-0.4c-0.6-0.3-1.2-0.6-1.6-1.1c-0.5-0.5-0.8-1-1.1-1.6c-0.3-0.6-0.4-1.3-0.4-2v-45.9c0-0.7,0.1-1.4,0.4-2 c0.3-0.6,0.6-1.2,1.1-1.6c0.5-0.5,1-0.8,1.6-1.1c0.6-0.3,1.3-0.4,2-0.4h34c1.3,0,2.6,0.2,4,0.7c1.4,0.4,2.8,1.2,4,2.1 c1.2,1,2.3,2.3,3.1,3.8c0.8,1.6,1.2,3.5,1.2,5.8v1.9c0,1.8-0.3,3.7-0.9,5.8c-0.6,2.1-1.6,4-2.9,5.9c1.1,0.7,2.2,1.6,3.2,2.5 c1,1,1.9,2.1,2.6,3.4c0.8,1.3,1.4,2.8,1.8,4.4c0.4,1.6,0.7,3.5,0.7,5.4V211.5z M211.4,209.5c0-1.3-0.2-2.5-0.6-3.6 c-0.4-1.1-1-2-1.8-2.7c-0.8-0.8-1.7-1.3-2.7-1.7c-1.1-0.4-2.3-0.6-3.6-0.6h-22.9v-10.3h18.4c1.3,0,2.5-0.2,3.6-0.6 c1.1-0.4,2-1,2.7-1.7c0.8-0.8,1.3-1.7,1.7-2.7c0.4-1.1,0.6-2.3,0.6-3.6V180c0-1.5-0.7-2.2-2.1-2.2h-29v35.8h33.6c0.2,0,0.4,0,0.7,0 c0.3,0,0.5-0.1,0.7-0.2c0.2-0.1,0.4-0.4,0.5-0.7c0.2-0.3,0.2-0.7,0.2-1.3V209.5z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M266.9,191.7H244c-1.4,0-2.4,0.3-3.1,1c-0.7,0.7-1.1,1.7-1.1,3v28.1h-10.2v-28.1c0-1.7,0.2-3.3,0.7-4.7 c0.4-1.4,1-2.6,1.8-3.7c0.7-1.1,1.6-2,2.6-2.7c1-0.7,2-1.4,3-1.8c1.1-0.5,2.1-0.8,3.2-1c1.1-0.2,2.1-0.3,3-0.3h23V191.7z\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M320.1,209.5c0,1.7-0.2,3.3-0.7,4.7c-0.4,1.4-1,2.6-1.8,3.7c-0.7,1.1-1.6,2-2.5,2.7c-1,0.7-2,1.4-3,1.8 c-1.1,0.5-2.1,0.8-3.2,1c-1.1,0.2-2.1,0.3-3.1,0.3h-18.4c-1.4,0-2.9-0.2-4.6-0.7c-1.7-0.5-3.2-1.3-4.6-2.4c-1.4-1.1-2.6-2.6-3.6-4.4 c-1-1.8-1.4-4-1.4-6.7v-13.8c0-2.6,0.5-4.8,1.4-6.6c1-1.8,2.1-3.3,3.6-4.4c1.4-1.1,3-2,4.6-2.4c1.7-0.5,3.2-0.7,4.6-0.7h18.4 c2.6,0,4.8,0.5,6.7,1.4c1.8,0.9,3.3,2.1,4.4,3.5c1.1,1.4,1.9,3,2.4,4.6c0.5,1.7,0.8,3.2,0.8,4.7V209.5z M310,195.8 c0-1.4-0.4-2.5-1.1-3.1c-0.7-0.7-1.7-1-3.1-1h-18.3c-1.4,0-2.4,0.3-3.1,1c-0.7,0.7-1.1,1.7-1.1,3v13.8c0,1.3,0.4,2.3,1.1,3.1 c0.7,0.7,1.7,1.1,3.1,1.1h18.3c1.4,0,2.4-0.4,3.1-1.1c0.7-0.7,1-1.7,1-3.1V195.8z\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M339.8,167.6h-10.2v2.5c3.4,0,6.8-0.1,10.2-0.2V167.6z\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M329.6,170.1v53.7h10.2v-54.3C336.4,169.7,333,170,329.6,170.1z\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M379.1,181.4h-16.3l-18.6,15c-0.6,0.4-1,1-1.4,1.6c-0.3,0.6-0.5,1.3-0.6,2.1c-0.1,1.6,0.5,2.9,1.6,3.9 l20.5,19.8h14.7l-24-23.1L379.1,181.4z\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M429.6,195.5c0,1.4-0.2,2.9-0.7,4.6c-0.5,1.6-1.3,3.1-2.4,4.5c-1.1,1.4-2.6,2.6-4.3,3.5c-1.8,0.9-4,1.4-6.5,1.4 h-18.4v-9.7h18.4c1.4,0,2.5-0.4,3.2-1.3c0.8-0.8,1.1-1.9,1.1-3.2c0-1.3-0.4-2.4-1.3-3.1c-0.8-0.8-1.9-1.1-3.1-1.1h-18.4 c-1.4,0-2.5,0.4-3.2,1.3c-0.8,0.8-1.1,1.9-1.1,3.2v14.2c0,1.4,0.4,2.4,1.3,3.2s1.9,1.1,3.2,1.1h18.3v9.7h-18.4 c-1.4,0-2.9-0.2-4.6-0.7c-1.6-0.5-3.1-1.3-4.5-2.4c-1.4-1.1-2.6-2.6-3.5-4.3c-0.9-1.8-1.4-4-1.4-6.5v-14.3c0-1.4,0.2-2.9,0.7-4.6 c0.5-1.6,1.3-3.1,2.4-4.5c1.1-1.4,2.6-2.6,4.3-3.5c1.8-0.9,4-1.4,6.5-1.4h18.4c1.4,0,2.9,0.2,4.6,0.7c1.6,0.5,3.1,1.3,4.5,2.4 c1.4,1.1,2.6,2.6,3.5,4.3C429.2,190.8,429.6,192.9,429.6,195.5z\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M474.1,191.7h-22.9c-1.4,0-2.4,0.3-3.1,1c-0.7,0.7-1.1,1.7-1.1,3v28.1h-10.2v-28.1c0-1.7,0.2-3.3,0.7-4.7 c0.4-1.4,1-2.6,1.8-3.7c0.7-1.1,1.6-2,2.6-2.7s2-1.4,3-1.8c1.1-0.5,2.1-0.8,3.2-1c1.1-0.2,2.1-0.3,3-0.3h23V191.7z\"\n })), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M126.3,168.8l0,10.8c11.4,3.5,18.9,13.9,18.9,26.4c0,15.4-12.6,27.9-28.1,27.9S89.1,221.4,89.1,206 c0-12.5,7.5-22.8,18.9-26.4v-10.8c-16.9,3.8-28.7,18.9-28.7,37.1c0,21.1,16.9,38.3,37.9,38.3S155,227.1,155,206 C155,187.8,143.2,172.6,126.3,168.8z\"\n }))), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M117.2,178.1c1.9,0,3.8,0.2,5.7,0.6v-10.3c-1.9-0.3-3.8-0.4-5.7-0.4s-3.8,0.1-5.7,0.4v10.3 C113.3,178.3,115.2,178.1,117.2,178.1z\"\n })), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M112,182c1.4-0.3,3.2-0.5,5.3-0.5c2.1,0,4,0.2,5.4,0.5c0,15.9,0,31.9,0,47.8c-3.6,0.8-7.1,0.8-10.7,0 C112,214,112,198,112,182z\"\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgLongLogo);\nexport default __webpack_public_path__ + \"static/media/longLogo.d88c527f6b93b57693fe78d036047c6b.svg\";\nexport { ForwardRef as ReactComponent };","import React, { Component, type JSX } from 'react';\n\nimport { MapContainer, TileLayer, useMap } from 'react-leaflet';\nimport { Marker } from 'leaflet';\nimport type { DragEndEvent, LatLngTuple, Map } from 'leaflet';\nimport { OpenStreetMapProvider } from 'leaflet-geosearch';\n\nimport {\n Grid2,\n Toolbar,\n InputLabel,\n MenuItem,\n FormControl,\n Select,\n TextField,\n Fab,\n Button,\n Paper,\n InputAdornment,\n IconButton,\n Autocomplete,\n Box,\n} from '@mui/material';\n\nimport { Close as CloseIcon, Check as IconCheck, GpsFixed } from '@mui/icons-material';\n\nimport { type AdminConnection, I18n, type IobTheme, type Translate, withWidth } from '@iobroker/adapter-react-v5';\n\nconst MyMapComponent: React.FC<{ addMap: (map: any) => any }> = props => {\n const map = useMap();\n if (props.addMap) {\n props.addMap(map);\n }\n return null;\n};\n\nconst TOOLBAR_HEIGHT = 64;\nconst SETTINGS_WIDTH = 300;\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n },\n title: (theme: IobTheme) => ({\n color: theme.palette.secondary.main,\n }),\n mainGrid: {\n height: `calc(100% - ${TOOLBAR_HEIGHT}px)`,\n overflow: 'auto',\n },\n grow: {\n flexGrow: 1,\n },\n mapGrid: {\n height: '100%',\n width: `calc(100% - ${SETTINGS_WIDTH + 32}px)`,\n overflow: 'hidden',\n },\n map: {\n height: '100%',\n width: '100%',\n overflow: 'hidden',\n },\n controlItem: {\n width: SETTINGS_WIDTH,\n marginBottom: 8,\n },\n controlItemAddress: {\n width: SETTINGS_WIDTH - 40,\n marginBottom: 8,\n },\n gridSettings: {\n width: SETTINGS_WIDTH + 16,\n marginRight: 8,\n marginLeft: 8,\n textAlign: 'left',\n height: '100%',\n overflow: 'auto',\n },\n toolbar: {\n height: TOOLBAR_HEIGHT,\n lineHeight: `${TOOLBAR_HEIGHT}px`,\n },\n settingsGrid: {\n width: '100%',\n height: 'calc(100% - 54px)',\n },\n};\n\nconst CURRENCY: { id: string; title: string }[] = [\n {\n id: '€',\n title: '€',\n },\n {\n id: '$',\n title: '$',\n },\n {\n id: '₽',\n title: '₽',\n },\n {\n id: '₤',\n title: '₤',\n },\n {\n id: 'CHF',\n title: 'CHF',\n },\n];\n\ninterface WizardSettingsTabProps {\n t: Translate;\n socket: AdminConnection;\n theme: IobTheme;\n onDone: (settings: {\n tempUnit: '°C' | '°F';\n currency: string;\n dateFormat: string;\n isFloatComma: boolean;\n country: string;\n city: string;\n address: string;\n longitude: number;\n latitude: number;\n firstDayOfWeek: 'sunday' | 'monday';\n }) => void;\n}\n\ninterface WizardSettingsTabState {\n tempUnit: '°C' | '°F';\n currency: string;\n dateFormat: string;\n isFloatComma: boolean;\n country: string;\n city: string;\n address: string;\n longitude: number | string;\n latitude: number | string;\n firstDayOfWeek: 'sunday' | 'monday';\n zoom: number;\n}\n\nclass WizardSettingsTab extends Component<WizardSettingsTabProps, WizardSettingsTabState> {\n /*private OSM: {\n markerSource?: VectorSource;\n markerStyle?: Style;\n oMap?: Map;\n marker?: Feature;\n } | null = null;*/\n\n private marker: Marker;\n\n private map: Map;\n\n private cityTimer: ReturnType<typeof setTimeout>;\n\n private latLongTimer: ReturnType<typeof setTimeout>;\n\n constructor(props: WizardSettingsTabProps) {\n super(props);\n\n this.state = {\n tempUnit: '°C',\n currency: '€',\n dateFormat: 'DD.MM.YYYY',\n isFloatComma: true,\n country: '',\n city: '',\n address: '',\n longitude: 0,\n latitude: 0,\n firstDayOfWeek: 'monday',\n zoom: 14,\n };\n }\n\n positionReady(position: { coords: { latitude: number; longitude: number } }): void {\n this.setState(\n {\n latitude: parseFloat(position.coords.latitude.toFixed(8)),\n longitude: parseFloat(position.coords.longitude.toFixed(8)),\n },\n () => this.changeMapPosition(),\n );\n }\n\n getBrowserCoordinates(): void {\n if (window.navigator.geolocation && (!this.state.longitude || !this.state.latitude)) {\n window.navigator.geolocation.getCurrentPosition(position => this.positionReady(position));\n } else {\n this.changeMapPosition();\n }\n }\n\n async componentDidMount(): Promise<void> {\n const systemConfig = await this.props.socket.getCompactSystemConfig(true);\n this.setState(\n {\n tempUnit: systemConfig.common.tempUnit,\n currency: systemConfig.common.currency,\n dateFormat: systemConfig.common.dateFormat,\n isFloatComma: systemConfig.common.isFloatComma,\n country: systemConfig.common.country,\n city: systemConfig.common.city,\n address: '',\n longitude: systemConfig.common.longitude,\n latitude: systemConfig.common.latitude,\n firstDayOfWeek: systemConfig.common.firstDayOfWeek || 'monday',\n },\n () => this.getBrowserCoordinates(),\n );\n }\n\n onMap = (map: Map): void => {\n if (!this.map || this.map !== map) {\n this.map = map;\n const center: LatLngTuple = [\n parseFloat(this.state.latitude !== undefined ? (this.state.latitude as any as string) : '50') || 0,\n parseFloat(this.state.longitude !== undefined ? (this.state.longitude as any as string) : '10') || 0,\n ];\n\n this.marker = new Marker(center, {\n draggable: true,\n title: I18n.t('Resource location'),\n alt: I18n.t('Resource Location'),\n riseOnHover: true,\n })\n .addTo(map)\n .bindPopup('Popup for any custom information.')\n .on({ dragend: (evt: DragEndEvent) => this.onMarkerDragend(evt) });\n }\n };\n\n onMarkerDragend = (evt: DragEndEvent): void => {\n // ignore changes during saving\n this.setState({ latitude: evt.target._latlng.lat, longitude: evt.target._latlng.lng });\n };\n\n changeMapPosition(noWait?: boolean): void {\n if (this.latLongTimer) {\n clearTimeout(this.latLongTimer);\n }\n this.latLongTimer = setTimeout(\n () => {\n this.latLongTimer = null;\n this.map.flyTo([\n parseFloat(this.state.latitude as any as string),\n parseFloat(this.state.longitude as any as string),\n ]);\n this.marker.setLatLng([\n parseFloat(this.state.latitude as any as string),\n parseFloat(this.state.longitude as any as string),\n ]);\n },\n noWait ? 0 : 500,\n );\n }\n\n onChangePosition = (evt: { target: { value: string } }, id: string): void => {\n const value = evt.target.value;\n if (id === 'latitude') {\n this.setState({ latitude: value });\n } else {\n this.setState({ longitude: value });\n }\n\n this.changeMapPosition();\n };\n\n addressToPosition(): void {\n if (this.cityTimer) {\n clearTimeout(this.cityTimer);\n }\n\n this.cityTimer = setTimeout(() => {\n this.cityTimer = null;\n const provider = new OpenStreetMapProvider();\n\n void provider\n .search({ query: `${this.state.country} ${this.state.city}, ${this.state.address}` })\n .then(results => {\n if (results[0]) {\n setTimeout(\n () =>\n this.setState({ latitude: results[0].y, longitude: results[0].x, zoom: 23 }, () =>\n this.changeMapPosition(true),\n ),\n 1200,\n );\n }\n });\n }, 500);\n }\n\n onChangeAddress = (evt: { target: { value: string } }, id: 'city' | 'address' | 'country'): void => {\n if (id === 'city') {\n this.setState({ city: evt.target.value });\n } else if (id === 'address') {\n this.setState({ address: evt.target.value });\n } else {\n this.setState({ country: evt.target.value });\n }\n\n this.addressToPosition();\n };\n\n render(): JSX.Element {\n const center: LatLngTuple = [\n parseFloat(this.state.longitude !== undefined ? (this.state.longitude as any as string) : '50') || 0,\n parseFloat(this.state.longitude !== undefined ? (this.state.longitude as any as string) : '10') || 0,\n ];\n\n const { zoom } = this.state;\n\n return (\n <Paper style={styles.paper}>\n <Grid2\n container\n direction=\"column\"\n style={styles.mainGrid}\n >\n <Grid2 style={styles.gridSettings}>\n <Grid2\n container\n direction=\"column\"\n style={{ width: 'calc(100% - 16px)' }}\n >\n <Grid2>\n <Box\n component=\"h2\"\n sx={styles.title}\n >\n {this.props.t('Important main settings')}\n </Box>\n </Grid2>\n <Grid2\n container\n direction=\"column\"\n style={styles.settingsGrid}\n >\n <Grid2 style={{ textAlign: 'left' }}>\n <FormControl\n variant=\"standard\"\n style={styles.controlItem}\n >\n <InputLabel>{this.props.t('Temperature unit')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.tempUnit}\n onChange={e => this.setState({ tempUnit: e.target.value as '°C' | '°F' })}\n >\n <MenuItem value=\"°C\">°C</MenuItem>\n <MenuItem value=\"°F\">°F</MenuItem>\n </Select>\n </FormControl>\n </Grid2>\n <Grid2>\n <Autocomplete\n freeSolo\n options={CURRENCY}\n inputValue={this.state.currency}\n onChange={(_event, newValue: { id: string; title: string }) =>\n this.setState({ currency: newValue ? newValue.id : '' })\n }\n onInputChange={(_event, currency) => this.setState({ currency })}\n getOptionLabel={(option: { id: string; title: string }) => option.title}\n renderOption={(props, option: { id: string; title: string }) => (\n <li {...props}>{option.title}</li>\n )}\n renderInput={params => (\n <TextField\n {...params}\n variant=\"standard\"\n label={this.props.t('Currency')}\n />\n )}\n />\n </Grid2>\n <Grid2 style={{ textAlign: 'left' }}>\n <FormControl\n variant=\"standard\"\n style={styles.controlItem}\n >\n <InputLabel>{this.props.t('Date format')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.dateFormat}\n onChange={e => this.setState({ dateFormat: e.target.value })}\n >\n <MenuItem value=\"DD.MM.YYYY\">DD.MM.YYYY</MenuItem>\n <MenuItem value=\"YYYY.MM.DD\">YYYY.MM.DD</MenuItem>\n <MenuItem value=\"MM/DD/YYYY\">MM/DD/YYYY</MenuItem>\n </Select>\n </FormControl>\n </Grid2>\n <Grid2 style={{ textAlign: 'left' }}>\n <FormControl\n variant=\"standard\"\n style={styles.controlItem}\n >\n <InputLabel>{this.props.t('Float divider')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.isFloatComma ? 'true' : 'false'}\n onChange={e => this.setState({ isFloatComma: e.target.value === 'true' })}\n >\n <MenuItem value=\"true\">\n {this.props.t('comma')}\n <span style={{ marginLeft: 5 }}>- 3,14</span>\n </MenuItem>\n <MenuItem value=\"false\">\n {this.props.t('point')}\n <span style={{ marginLeft: 5 }}>- 3.14</span>\n </MenuItem>\n </Select>\n </FormControl>\n </Grid2>\n <Grid2 style={{ textAlign: 'left' }}>\n <FormControl\n variant=\"standard\"\n style={styles.controlItem}\n >\n <InputLabel>{this.props.t('Country')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.country || ''}\n onChange={e => this.onChangeAddress(e, 'country')}\n >\n <MenuItem value=\"\">{this.props.t('Please select country')}</MenuItem>\n <MenuItem value=\"Germany\">{this.props.t('Germany')}</MenuItem>\n <MenuItem value=\"Austria\">{this.props.t('Austria')}</MenuItem>\n <MenuItem value=\"Switzerland\">{this.props.t('Switzerland')}</MenuItem>\n <MenuItem value=\"Russian Federation\">\n {this.props.t('Russian Federation')}\n </MenuItem>\n <MenuItem value=\"France\">{this.props.t('France')}</MenuItem>\n <MenuItem value=\"Netherlands\">{this.props.t('Netherlands')}</MenuItem>\n <MenuItem value=\"Italy\">{this.props.t('Italy')}</MenuItem>\n <MenuItem value=\"United Kingdom\">{this.props.t('United Kingdom')}</MenuItem>\n <MenuItem value=\"United States\">{this.props.t('United States')}</MenuItem>\n <MenuItem value=\"China\">{this.props.t('China')}</MenuItem>\n\n <MenuItem value=\"Afghanistan\">{this.props.t('Afghanistan')}</MenuItem>\n <MenuItem value=\"Albania\">{this.props.t('Albania')}</MenuItem>\n <MenuItem value=\"Algeria\">{this.props.t('Algeria')}</MenuItem>\n <MenuItem value=\"American Samoa\">{this.props.t('American Samoa')}</MenuItem>\n <MenuItem value=\"Andorra\">{this.props.t('Andorra')}</MenuItem>\n <MenuItem value=\"Angola\">{this.props.t('Angola')}</MenuItem>\n <MenuItem value=\"Anguilla\">{this.props.t('Anguilla')}</MenuItem>\n <MenuItem value=\"Antarctica\">{this.props.t('Antarctica')}</MenuItem>\n <MenuItem value=\"Antigua and Barbuda\">\n {this.props.t('Antigua and Barbuda')}\n </MenuItem>\n <MenuItem value=\"Argentina\">{this.props.t('Argentina')}</MenuItem>\n <MenuItem value=\"Armenia\">{this.props.t('Armenia')}</MenuItem>\n <MenuItem value=\"Aruba\">{this.props.t('Aruba')}</MenuItem>\n <MenuItem value=\"Australia\">{this.props.t('Australia')}</MenuItem>\n <MenuItem value=\"Azerbaijan\">{this.props.t('Azerbaijan')}</MenuItem>\n <MenuItem value=\"Bahamas\">{this.props.t('Bahamas')}</MenuItem>\n <MenuItem value=\"Bahrain\">{this.props.t('Bahrain')}</MenuItem>\n <MenuItem value=\"Bangladesh\">{this.props.t('Bangladesh')}</MenuItem>\n <MenuItem value=\"Barbados\">{this.props.t('Barbados')}</MenuItem>\n <MenuItem value=\"Belarus\">{this.props.t('Belarus')}</MenuItem>\n <MenuItem value=\"Belgium\">{this.props.t('Belgium')}</MenuItem>\n <MenuItem value=\"Belize\">{this.props.t('Belize')}</MenuItem>\n <MenuItem value=\"Benin\">{this.props.t('Benin')}</MenuItem>\n <MenuItem value=\"Bermuda\">{this.props.t('Bermuda')}</MenuItem>\n <MenuItem value=\"Bhutan\">{this.props.t('Bhutan')}</MenuItem>\n <MenuItem value=\"Bolivia\">{this.props.t('Bolivia')}</MenuItem>\n <MenuItem value=\"Bosnia and Herzegovina\">\n {this.props.t('Bosnia and Herzegovina')}\n </MenuItem>\n <MenuItem value=\"Botswana\">{this.props.t('Botswana')}</MenuItem>\n <MenuItem value=\"Bouvet Island\">{this.props.t('Bouvet Island')}</MenuItem>\n <MenuItem value=\"Brazil\">{this.props.t('Brazil')}</MenuItem>\n <MenuItem value=\"British Indian Ocean Territory\">\n {this.props.t('British Indian Ocean Territory')}\n </MenuItem>\n <MenuItem value=\"Brunei Darussalam\">\n {this.props.t('Brunei Darussalam')}\n </MenuItem>\n <MenuItem value=\"Bulgaria\">{this.props.t('Bulgaria')}</MenuItem>\n <MenuItem value=\"Burkina Faso\">{this.props.t('Burkina Faso')}</MenuItem>\n <MenuItem value=\"Burundi\">{this.props.t('Burundi')}</MenuItem>\n <MenuItem value=\"Cambodia\">{this.props.t('Cambodia')}</MenuItem>\n <MenuItem value=\"Cameroon\">{this.props.t('Cameroon')}</MenuItem>\n <MenuItem value=\"Canada\">{this.props.t('Canada')}</MenuItem>\n <MenuItem value=\"Cape Verde\">{this.props.t('Cape Verde')}</MenuItem>\n <MenuItem value=\"Cayman Islands\">{this.props.t('Cayman Islands')}</MenuItem>\n <MenuItem value=\"Central African Republic\">\n {this.props.t('Central African Republic')}\n </MenuItem>\n <MenuItem value=\"Chad\">{this.props.t('Chad')}</MenuItem>\n <MenuItem value=\"Chile\">{this.props.t('Chile')}</MenuItem>\n <MenuItem value=\"Christmas Island\">\n {this.props.t('Christmas Island')}\n </MenuItem>\n <MenuItem value=\"Cocos Islands\">{this.props.t('Cocos Islands')}</MenuItem>\n <MenuItem value=\"Colombia\">{this.props.t('Colombia')}</MenuItem>\n <MenuItem value=\"Comoros\">{this.props.t('Comoros')}</MenuItem>\n <MenuItem value=\"Congo\">{this.props.t('Congo')}</MenuItem>\n <MenuItem value=\"Cook Islands\">{this.props.t('Cook Islands')}</MenuItem>\n <MenuItem value=\"Costa Rica\">{this.props.t('Costa Rica')}</MenuItem>\n <MenuItem value=\"Croatia\">{this.props.t('Croatia')}</MenuItem>\n <MenuItem value=\"Cuba\">{this.props.t('Cuba')}</MenuItem>\n <MenuItem value=\"Cyprus\">{this.props.t('Cyprus')}</MenuItem>\n <MenuItem value=\"Czech Republic\">{this.props.t('Czech Republic')}</MenuItem>\n <MenuItem value=\"Denmark\">{this.props.t('Denmark')}</MenuItem>\n <MenuItem value=\"Djibouti\">{this.props.t('Djibouti')}</MenuItem>\n <MenuItem value=\"Dominica\">{this.props.t('Dominica')}</MenuItem>\n <MenuItem value=\"Dominican Republic\">\n {this.props.t('Dominican Republic')}\n </MenuItem>\n <MenuItem value=\"East Timor\">{this.props.t('East Timor')}</MenuItem>\n <MenuItem value=\"Ecuador\">{this.props.t('Ecuador')}</MenuItem>\n <MenuItem value=\"Egypt\">{this.props.t('Egypt')}</MenuItem>\n <MenuItem value=\"El Salvador\">{this.props.t('El Salvador')}</MenuItem>\n <MenuItem value=\"Equatorial Guinea\">\n {this.props.t('Equatorial Guinea')}\n </MenuItem>\n <MenuItem value=\"Eritrea\">{this.props.t('Eritrea')}</MenuItem>\n <MenuItem value=\"Estonia\">{this.props.t('Estonia')}</MenuItem>\n <MenuItem value=\"Ethiopia\">{this.props.t('Ethiopia')}</MenuItem>\n <MenuItem value=\"Falkland Islands (Malvinas)\">\n {this.props.t('Falkland Islands (Malvinas)')}\n </MenuItem>\n <MenuItem value=\"Faroe Islands\">{this.props.t('Faroe Islands')}</MenuItem>\n <MenuItem value=\"Fiji\">{this.props.t('Fiji')}</MenuItem>\n <MenuItem value=\"Finland\">{this.props.t('Finland')}</MenuItem>\n <MenuItem value=\"French Guiana\">{this.props.t('French Guiana')}</MenuItem>\n <MenuItem value=\"French Polynesia\">\n {this.props.t('French Polynesia')}\n </MenuItem>\n <MenuItem value=\"French Southern Territories\">\n {this.props.t('French Southern Territories')}\n </MenuItem>\n <MenuItem value=\"Gabon\">{this.props.t('Gabon')}</MenuItem>\n <MenuItem value=\"Gambia\">{this.props.t('Gambia')}</MenuItem>\n <MenuItem value=\"Georgia\">{this.props.t('Georgia')}</MenuItem>\n <MenuItem value=\"Ghana\">{this.props.t('Ghana')}</MenuItem>\n <MenuItem value=\"Gibraltar\">{this.props.t('Gibraltar')}</MenuItem>\n <MenuItem value=\"Guernsey\">{this.props.t('Guernsey')}</MenuItem>\n <MenuItem value=\"Greece\">{this.props.t('Greece')}</MenuItem>\n <MenuItem value=\"Greenland\">{this.props.t('Greenland')}</MenuItem>\n <MenuItem value=\"Grenada\">{this.props.t('Grenada')}</MenuItem>\n <MenuItem value=\"Guadeloupe\">{this.props.t('Guadeloupe')}</MenuItem>\n <MenuItem value=\"Guam\">{this.props.t('Guam')}</MenuItem>\n <MenuItem value=\"Guatemala\">{this.props.t('Guatemala')}</MenuItem>\n <MenuItem value=\"Guinea\">{this.props.t('Guinea')}</MenuItem>\n <MenuItem value=\"Guinea-Bissau\">{this.props.t('Guinea-Bissau')}</MenuItem>\n <MenuItem value=\"Guyana\">{this.props.t('Guyana')}</MenuItem>\n <MenuItem value=\"Haiti\">{this.props.t('Haiti')}</MenuItem>\n <MenuItem value=\"Heard and Mc Donald Islands\">\n {this.props.t('Heard and Mc Donald Islands')}\n </MenuItem>\n <MenuItem value=\"Honduras\">{this.props.t('Honduras')}</MenuItem>\n <MenuItem value=\"Hong Kong\">{this.props.t('Hong Kong')}</MenuItem>\n <MenuItem value=\"Hungary\">{this.props.t('Hungary')}</MenuItem>\n <MenuItem value=\"Iceland\">{this.props.t('Iceland')}</MenuItem>\n <MenuItem value=\"India\">{this.props.t('India')}</MenuItem>\n <MenuItem value=\"Isle of Man\">{this.props.t('Isle of Man')}</MenuItem>\n <MenuItem value=\"Indonesia\">{this.props.t('Indonesia')}</MenuItem>\n <MenuItem value=\"Iran\">{this.props.t('Iran')}</MenuItem>\n <MenuItem value=\"Iraq\">{this.props.t('Iraq')}</MenuItem>\n <MenuItem value=\"Ireland\">{this.props.t('Ireland')}</MenuItem>\n <MenuItem value=\"Israel\">{this.props.t('Israel')}</MenuItem>\n <MenuItem value=\"Ivory Coast\">{this.props.t('Ivory Coast')}</MenuItem>\n <MenuItem value=\"Jersey\">{this.props.t('Jersey')}</MenuItem>\n <MenuItem value=\"Jamaica\">{this.props.t('Jamaica')}</MenuItem>\n <MenuItem value=\"Japan\">{this.props.t('Japan')}</MenuItem>\n <MenuItem value=\"Jordan\">{this.props.t('Jordan')}</MenuItem>\n <MenuItem value=\"Kazakhstan\">{this.props.t('Kazakhstan')}</MenuItem>\n <MenuItem value=\"Kenya\">{this.props.t('Kenya')}</MenuItem>\n <MenuItem value=\"Kiribati\">{this.props.t('Kiribati')}</MenuItem>\n <MenuItem value=\"Korea\">{this.props.t('Korea')}</MenuItem>\n <MenuItem value=\"Kosovo\">{this.props.t('Kosovo')}</MenuItem>\n <MenuItem value=\"Kuwait\">{this.props.t('Kuwait')}</MenuItem>\n <MenuItem value=\"Kyrgyzstan\">{this.props.t('Kyrgyzstan')}</MenuItem>\n <MenuItem value=\"Lao People's Democratic Republic\">\n {this.props.t(\"Lao People's Democratic Republic\")}\n </MenuItem>\n <MenuItem value=\"Latvia\">{this.props.t('Latvia')}</MenuItem>\n <MenuItem value=\"Lebanon\">{this.props.t('Lebanon')}</MenuItem>\n <MenuItem value=\"Lesotho\">{this.props.t('Lesotho')}</MenuItem>\n <MenuItem value=\"Liberia\">{this.props.t('Liberia')}</MenuItem>\n <MenuItem value=\"Libyan Arab Jamahiriya\">\n {this.props.t('Libyan Arab Jamahiriya')}\n </MenuItem>\n <MenuItem value=\"Liechtenstein\">{this.props.t('Liechtenstein')}</MenuItem>\n <MenuItem value=\"Lithuania\">{this.props.t('Lithuania')}</MenuItem>\n <MenuItem value=\"Luxembourg\">{this.props.t('Luxembourg')}</MenuItem>\n <MenuItem value=\"Macau\">{this.props.t('Macau')}</MenuItem>\n <MenuItem value=\"Macedonia\">{this.props.t('Macedonia')}</MenuItem>\n <MenuItem value=\"Madagascar\">{this.props.t('Madagascar')}</MenuItem>\n <MenuItem value=\"Malawi\">{this.props.t('Malawi')}</MenuItem>\n <MenuItem value=\"Malaysia\">{this.props.t('Malaysia')}</MenuItem>\n <MenuItem value=\"Maldives\">{this.props.t('Maldives')}</MenuItem>\n <MenuItem value=\"Mali\">{this.props.t('Mali')}</MenuItem>\n <MenuItem value=\"Malta\">{this.props.t('Malta')}</MenuItem>\n <MenuItem value=\"Marshall Islands\">\n {this.props.t('Marshall Islands')}\n </MenuItem>\n <MenuItem value=\"Martinique\">{this.props.t('Martinique')}</MenuItem>\n <MenuItem value=\"Mauritania\">{this.props.t('Mauritania')}</MenuItem>\n <MenuItem value=\"Mauritius\">{this.props.t('Mauritius')}</MenuItem>\n <MenuItem value=\"Mayotte\">{this.props.t('Mayotte')}</MenuItem>\n <MenuItem value=\"Mexico\">{this.props.t('Mexico')}</MenuItem>\n <MenuItem value=\"Micronesia\">{this.props.t('Micronesia')}</MenuItem>\n <MenuItem value=\"Moldova\">{this.props.t('Moldova')}</MenuItem>\n <MenuItem value=\"Monaco\">{this.props.t('Monaco')}</MenuItem>\n <MenuItem value=\"Mongolia\">{this.props.t('Mongolia')}</MenuItem>\n <MenuItem value=\"Montenegro\">{this.props.t('Montenegro')}</MenuItem>\n <MenuItem value=\"Montserrat\">{this.props.t('Montserrat')}</MenuItem>\n <MenuItem value=\"Morocco\">{this.props.t('Morocco')}</MenuItem>\n <MenuItem value=\"Mozambique\">{this.props.t('Mozambique')}</MenuItem>\n <MenuItem value=\"Myanmar\">{this.props.t('Myanmar')}</MenuItem>\n <MenuItem value=\"Namibia\">{this.props.t('Namibia')}</MenuItem>\n <MenuItem value=\"Nauru\">{this.props.t('Nauru')}</MenuItem>\n <MenuItem value=\"Nepal\">{this.props.t('Nepal')}</MenuItem>\n <MenuItem value=\"Netherlands Antilles\">\n {this.props.t('Netherlands Antilles')}\n </MenuItem>\n <MenuItem value=\"New Caledonia\">{this.props.t('New Caledonia')}</MenuItem>\n <MenuItem value=\"New Zealand\">{this.props.t('New Zealand')}</MenuItem>\n <MenuItem value=\"Nicaragua\">{this.props.t('Nicaragua')}</MenuItem>\n <MenuItem value=\"Niger\">{this.props.t('Niger')}</MenuItem>\n <MenuItem value=\"Nigeria\">{this.props.t('Nigeria')}</MenuItem>\n <MenuItem value=\"Niue\">{this.props.t('Niue')}</MenuItem>\n <MenuItem value=\"Norfolk Island\">{this.props.t('Norfolk Island')}</MenuItem>\n <MenuItem value=\"Northern Mariana Islands\">\n {this.props.t('Northern Mariana Islands')}\n </MenuItem>\n <MenuItem value=\"Norway\">{this.props.t('Norway')}</MenuItem>\n <MenuItem value=\"Oman\">{this.props.t('Oman')}</MenuItem>\n <MenuItem value=\"Pakistan\">{this.props.t('Pakistan')}</MenuItem>\n <MenuItem value=\"Palau\">{this.props.t('Palau')}</MenuItem>\n <MenuItem value=\"Palestine\">{this.props.t('Palestine')}</MenuItem>\n <MenuItem value=\"Panama\">{this.props.t('Panama')}</MenuItem>\n <MenuItem value=\"Papua New Guinea\">\n {this.props.t('Papua New Guinea')}\n </MenuItem>\n <MenuItem value=\"Paraguay\">{this.props.t('Paraguay')}</MenuItem>\n <MenuItem value=\"Peru\">{this.props.t('Peru')}</MenuItem>\n <MenuItem value=\"Philippines\">{this.props.t('Philippines')}</MenuItem>\n <MenuItem value=\"Pitcairn\">{this.props.t('Pitcairn')}</MenuItem>\n <MenuItem value=\"Poland\">{this.props.t('Poland')}</MenuItem>\n <MenuItem value=\"Portugal\">{this.props.t('Portugal')}</MenuItem>\n <MenuItem value=\"Puerto Rico\">{this.props.t('Puerto Rico')}</MenuItem>\n <MenuItem value=\"Qatar\">{this.props.t('Qatar')}</MenuItem>\n <MenuItem value=\"Reunion\">{this.props.t('Reunion')}</MenuItem>\n <MenuItem value=\"Romania\">{this.props.t('Romania')}</MenuItem>\n <MenuItem value=\"Rwanda\">{this.props.t('Rwanda')}</MenuItem>\n <MenuItem value=\"Saint Kitts and Nevis\">\n {this.props.t('Saint Kitts and Nevis')}\n </MenuItem>\n <MenuItem value=\"Saint Lucia\">{this.props.t('Saint Lucia')}</MenuItem>\n <MenuItem value=\"Saint Vincent and the Grenadines\">\n {this.props.t('Saint Vincent and the Grenadines')}\n </MenuItem>\n <MenuItem value=\"Samoa\">{this.props.t('Samoa')}</MenuItem>\n <MenuItem value=\"San Marino\">{this.props.t('San Marino')}</MenuItem>\n <MenuItem value=\"Sao Tome and Principe\">\n {this.props.t('Sao Tome and Principe')}\n </MenuItem>\n <MenuItem value=\"Saudi Arabia\">{this.props.t('Saudi Arabia')}</MenuItem>\n <MenuItem value=\"Senegal\">{this.props.t('Senegal')}</MenuItem>\n <MenuItem value=\"Serbia\">{this.props.t('Serbia')}</MenuItem>\n <MenuItem value=\"Seychelles\">{this.props.t('Seychelles')}</MenuItem>\n <MenuItem value=\"Sierra Leone\">{this.props.t('Sierra Leone')}</MenuItem>\n <MenuItem value=\"Singapore\">{this.props.t('Singapore')}</MenuItem>\n <MenuItem value=\"Slovakia\">{this.props.t('Slovakia')}</MenuItem>\n <MenuItem value=\"Slovenia\">{this.props.t('Slovenia')}</MenuItem>\n <MenuItem value=\"Solomon Islands\">\n {this.props.t('Solomon Islands')}\n </MenuItem>\n <MenuItem value=\"Somalia\">{this.props.t('Somalia')}</MenuItem>\n <MenuItem value=\"South Africa\">{this.props.t('South Africa')}</MenuItem>\n <MenuItem value=\"South Georgia South Sandwich Islands\">\n {this.props.t('South Georgia South Sandwich Islands')}\n </MenuItem>\n <MenuItem value=\"Spain\">{this.props.t('Spain')}</MenuItem>\n <MenuItem value=\"Sri Lanka\">{this.props.t('Sri Lanka')}</MenuItem>\n <MenuItem value=\"St. Helena\">{this.props.t('St. Helena')}</MenuItem>\n <MenuItem value=\"St. Pierre and Miquelon\">\n {this.props.t('St. Pierre and Miquelon')}\n </MenuItem>\n <MenuItem value=\"Sudan\">{this.props.t('Sudan')}</MenuItem>\n <MenuItem value=\"Suriname\">{this.props.t('Suriname')}</MenuItem>\n <MenuItem value=\"Svalbard and Jan Mayen Islands\">\n {this.props.t('Svalbard and Jan Mayen Islands')}\n </MenuItem>\n <MenuItem value=\"Swaziland\">{this.props.t('Swaziland')}</MenuItem>\n <MenuItem value=\"Sweden\">{this.props.t('Sweden')}</MenuItem>\n <MenuItem value=\"Syrian Arab Republic\">\n {this.props.t('Syrian Arab Republic')}\n </MenuItem>\n <MenuItem value=\"Taiwan\">{this.props.t('Taiwan')}</MenuItem>\n <MenuItem value=\"Tajikistan\">{this.props.t('Tajikistan')}</MenuItem>\n <MenuItem value=\"Tanzania\">{this.props.t('Tanzania')}</MenuItem>\n <MenuItem value=\"Thailand\">{this.props.t('Thailand')}</MenuItem>\n <MenuItem value=\"Togo\">{this.props.t('Togo')}</MenuItem>\n <MenuItem value=\"Tokelau\">{this.props.t('Tokelau')}</MenuItem>\n <MenuItem value=\"Tonga\">{this.props.t('Tonga')}</MenuItem>\n <MenuItem value=\"Trinidad and Tobago\">\n {this.props.t('Trinidad and Tobago')}\n </MenuItem>\n <MenuItem value=\"Tunisia\">{this.props.t('Tunisia')}</MenuItem>\n <MenuItem value=\"Turkey\">{this.props.t('Turkey')}</MenuItem>\n <MenuItem value=\"Turkmenistan\">{this.props.t('Turkmenistan')}</MenuItem>\n <MenuItem value=\"Turks and Caicos Islands\">\n {this.props.t('Turks and Caicos Islands')}\n </MenuItem>\n <MenuItem value=\"Tuvalu\">{this.props.t('Tuvalu')}</MenuItem>\n <MenuItem value=\"Uganda\">{this.props.t('Uganda')}</MenuItem>\n <MenuItem value=\"Ukraine\">{this.props.t('Ukraine')}</MenuItem>\n <MenuItem value=\"United Arab Emirates\">\n {this.props.t('United Arab Emirates')}\n </MenuItem>\n <MenuItem value=\"United States minor outlying islands\">\n {this.props.t('United States minor outlying islands')}\n </MenuItem>\n <MenuItem value=\"Uruguay\">{this.props.t('Uruguay')}</MenuItem>\n <MenuItem value=\"Uzbekistan\">{this.props.t('Uzbekistan')}</MenuItem>\n <MenuItem value=\"Vanuatu\">{this.props.t('Vanuatu')}</MenuItem>\n <MenuItem value=\"Vatican City State\">\n {this.props.t('Vatican City State')}\n </MenuItem>\n <MenuItem value=\"Venezuela\">{this.props.t('Venezuela')}</MenuItem>\n <MenuItem value=\"Vietnam\">{this.props.t('Vietnam')}</MenuItem>\n <MenuItem value=\"Virgin Islands (British)\">\n {this.props.t('Virgin Islands (British)')}\n </MenuItem>\n <MenuItem value=\"Virgin Islands (U.S.)\">\n {this.props.t('Virgin Islands (U.S.)')}\n </MenuItem>\n <MenuItem value=\"Wallis and Futuna Islands\">\n {this.props.t('Wallis and Futuna Islands')}\n </MenuItem>\n <MenuItem value=\"Western Sahara\">{this.props.t('Western Sahara')}</MenuItem>\n <MenuItem value=\"Yemen\">{this.props.t('Yemen')}</MenuItem>\n <MenuItem value=\"Zaire\">{this.props.t('Zaire')}</MenuItem>\n <MenuItem value=\"Zambia\">{this.props.t('Zambia')}</MenuItem>\n <MenuItem value=\"Zimbabwe\">{this.props.t('Zimbabwe')}</MenuItem>\n </Select>\n </FormControl>\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('City')}\n style={styles.controlItem}\n value={this.state.city}\n onChange={e => this.onChangeAddress(e, 'city')}\n slotProps={{\n input: {\n endAdornment: this.state.city ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ city: '' })}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Address')}\n style={styles.controlItemAddress}\n value={this.state.address}\n onChange={e => this.onChangeAddress(e, 'address')}\n helperText={this.props.t('Used only to calculate position.')}\n slotProps={{\n input: {\n endAdornment: this.state.address ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ address: '' })}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n <Fab\n size=\"small\"\n onClick={() => this.addressToPosition()}\n >\n <GpsFixed />\n </Fab>\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Longitude')}\n style={styles.controlItem}\n value={this.state.longitude}\n onChange={e => this.onChangePosition(e, 'longitude')}\n slotProps={{\n input: {\n endAdornment: this.state.longitude ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ longitude: '' })}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Latitude')}\n style={styles.controlItem}\n value={this.state.latitude}\n onChange={e => this.onChangePosition(e, 'latitude')}\n slotProps={{\n input: {\n endAdornment: this.state.latitude ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ latitude: '' })}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </Grid2>\n <Grid2 style={{ textAlign: 'left' }}>\n <FormControl\n variant=\"standard\"\n style={styles.controlItem}\n >\n <InputLabel>{this.props.t('Week starts with')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.firstDayOfWeek}\n onChange={e =>\n this.setState({ firstDayOfWeek: e.target.value as 'sunday' | 'monday' })\n }\n >\n <MenuItem value=\"monday\">{this.props.t('monday')}</MenuItem>\n <MenuItem value=\"sunday\">{this.props.t('sunday')}</MenuItem>\n </Select>\n </FormControl>\n </Grid2>\n </Grid2>\n </Grid2>\n </Grid2>\n <Grid2 style={styles.mapGrid}>\n <MapContainer\n style={styles.map}\n center={center}\n zoom={zoom}\n maxZoom={18}\n attributionControl\n zoomControl\n doubleClickZoom\n scrollWheelZoom\n dragging\n // animate\n easeLinearity={0.35}\n >\n <TileLayer url=\"https://{s}.tile.osm.org/{z}/{x}/{y}.png\" />\n <MyMapComponent addMap={map => this.onMap(map)} />\n </MapContainer>\n </Grid2>\n </Grid2>\n <Toolbar style={styles.toolbar}>\n <div style={styles.grow} />\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() =>\n this.props.onDone({\n tempUnit: this.state.tempUnit,\n currency: this.state.currency,\n dateFormat: this.state.dateFormat,\n isFloatComma: this.state.isFloatComma,\n address: this.state.address,\n firstDayOfWeek: this.state.firstDayOfWeek,\n country: this.state.country,\n city: this.state.city,\n longitude: parseFloat(this.state.longitude as string),\n latitude: parseFloat(this.state.latitude as string),\n })\n }\n startIcon={<IconCheck />}\n >\n {this.props.t('Save')}\n </Button>\n <div style={styles.grow} />\n </Toolbar>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(WizardSettingsTab);\n","import React, { Component, type JSX } from 'react';\n\nimport {\n Grid2,\n Toolbar,\n FormControlLabel,\n Checkbox,\n Button,\n Paper,\n InputLabel,\n MenuItem,\n FormHelperText,\n FormControl,\n Select,\n FormGroup,\n Box,\n} from '@mui/material';\n\nimport { Check as IconCheck } from '@mui/icons-material';\n\nimport { type IobTheme, type Translate, withWidth } from '@iobroker/adapter-react-v5';\n\nconst TOOLBAR_HEIGHT = 64;\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n },\n title: (theme: IobTheme) => ({\n color: theme.palette.secondary.main,\n }),\n form: {\n height: `calc(100% - ${TOOLBAR_HEIGHT + 8}px)`,\n overflow: 'auto',\n },\n input: {\n width: 400,\n textAlign: 'left',\n },\n inputLine: {\n width: 400,\n margin: 'auto',\n marginBottom: 50,\n },\n grow: {\n flexGrow: 1,\n },\n toolbar: {\n height: TOOLBAR_HEIGHT,\n lineHeight: `${TOOLBAR_HEIGHT}px`,\n },\n};\n\ninterface WizardAuthSSLTabProps {\n auth: boolean;\n secure: boolean;\n t: Translate;\n onDone: (config: { auth: boolean; secure: boolean }) => void;\n}\n\ninterface WizardAuthSSLTabState {\n auth: boolean;\n secure: boolean;\n}\n\nclass WizardAuthSSLTab extends Component<WizardAuthSSLTabProps, WizardAuthSSLTabState> {\n constructor(props: WizardAuthSSLTabProps) {\n super(props);\n\n this.state = {\n auth: !!this.props.auth,\n secure: !!this.props.secure,\n };\n }\n\n render(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n <form\n style={styles.form}\n noValidate\n autoComplete=\"off\"\n >\n <Grid2\n container\n direction=\"column\"\n >\n <Grid2>\n <Box\n component=\"h2\"\n sx={styles.title}\n >\n {this.props.t('It is suggested to enable the authentication in admin')}\n </Box>\n </Grid2>\n <Grid2 style={styles.inputLine}>\n <FormGroup>\n <FormControlLabel\n style={styles.input}\n control={\n <Checkbox\n checked={this.state.auth}\n onChange={() => this.setState({ auth: !this.state.auth })}\n />\n }\n label={this.props.t('Authentication in Admin')}\n />\n <FormHelperText>\n {this.props.t(\n 'Activate the check of password in admin if you plan to access your ioBroker is not in \"Demilitarized Zone\"',\n )}\n </FormHelperText>\n </FormGroup>\n </Grid2>\n <Grid2>\n <FormControl\n variant=\"standard\"\n style={styles.input}\n >\n <InputLabel>{this.props.t('Certificates')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.secure ? 'true' : 'false'}\n onChange={e => this.setState({ secure: e.target.value === 'true' })}\n >\n <MenuItem value=\"false\">{this.props.t('No SSL')}</MenuItem>\n <MenuItem value=\"true\">{this.props.t('Use self signed certificates')}</MenuItem>\n </Select>\n <FormHelperText>\n {this.state.secure\n ? this.props.t(\n 'Browsers will inform you about the problem with self-signed certificates, but the communication is encrypted.',\n )\n : this.props.t('Your communication with admin is not encrypted')}\n </FormHelperText>\n </FormControl>\n </Grid2>\n </Grid2>\n </form>\n <Toolbar style={styles.toolbar}>\n <div style={styles.grow} />\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={() => this.props.onDone({ auth: this.state.auth, secure: this.state.secure })}\n startIcon={<IconCheck />}\n >\n {this.props.t('Apply')}\n </Button>\n </Toolbar>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(WizardAuthSSLTab);\n","import React, { createRef, Component, type JSX } from 'react';\n\nimport { Grid2, Toolbar, Button, Paper, Box } from '@mui/material';\n\nimport { Public as IconCloud, Language as IconCloudPro, Check as IconCheck } from '@mui/icons-material';\n\nimport { withWidth, type IobTheme, type Translate } from '@iobroker/adapter-react-v5';\n\nconst TOOLBAR_HEIGHT = 64;\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n },\n title: (theme: IobTheme) => ({\n color: theme.palette.secondary.main,\n }),\n form: {\n height: `calc(100% - ${TOOLBAR_HEIGHT + 8}px)`,\n overflow: 'auto',\n },\n input: {\n width: 400,\n marginBottom: 16,\n },\n grow: {\n flexGrow: 1,\n },\n toolbar: {\n height: TOOLBAR_HEIGHT,\n lineHeight: `${TOOLBAR_HEIGHT}px`,\n },\n text: {\n fontSize: 16,\n },\n\n error: {\n fontSize: 24,\n color: '#c61f1f',\n },\n warning: {\n fontSize: 20,\n color: '#c6891f',\n },\n information: {\n fontSize: 18,\n color: '#429c1b',\n },\n button: {\n marginRight: 16,\n },\n};\n\ninterface WizardPortForwardingProps {\n auth: boolean;\n secure: boolean;\n t: Translate;\n onDone: () => void;\n}\n\ninterface WizardPortForwardingState {\n auth: boolean;\n secure: boolean;\n}\n\nclass WizardPortForwarding extends Component<WizardPortForwardingProps, WizardPortForwardingState> {\n private readonly focusRef: React.RefObject<HTMLInputElement>;\n\n constructor(props: WizardPortForwardingProps) {\n super(props);\n\n this.focusRef = createRef();\n }\n\n componentDidMount(): void {\n this.focusRef.current?.focus();\n }\n\n render(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n <form\n style={styles.form}\n noValidate\n autoComplete=\"off\"\n >\n <Grid2\n container\n direction=\"column\"\n >\n <Grid2>\n <Box\n component=\"h2\"\n sx={styles.title}\n >\n {this.props.t('Important information about port forwarding')}\n </Box>\n </Grid2>\n <Grid2>\n {!this.props.auth ? <div style={styles.error}>{this.props.t('Warning!')}</div> : null}\n {this.props.auth && !this.props.secure ? (\n <div style={styles.warning}>{this.props.t('Be aware!')}</div>\n ) : null}\n {this.props.auth && this.props.secure ? (\n <div style={styles.information}>{this.props.t('Information')}</div>\n ) : null}\n\n <div style={styles.text}>\n {this.props.t(\n 'Do not expose iobroker Admin or Web interfaces to the internet directly via the port forwarding!',\n )}\n </div>\n </Grid2>\n <Grid2 style={{ marginTop: 16 }}>\n <div style={styles.text}>\n {this.props.t(\n 'The Cloud services from iobroker.net/pro can help here to do that securely:',\n )}\n </div>\n </Grid2>\n <Grid2 style={{ marginTop: 16 }}>\n <Button\n style={styles.button}\n color=\"secondary\"\n variant=\"contained\"\n onClick={() => window.open('https://iobroker.pro', 'help')}\n startIcon={<IconCloudPro />}\n >\n ioBroker.pro\n </Button>\n <Button\n color=\"secondary\"\n variant=\"contained\"\n onClick={() => window.open('https://iobroker.net', 'help')}\n startIcon={<IconCloud />}\n >\n ioBroker.net\n </Button>\n </Grid2>\n </Grid2>\n </form>\n <Toolbar style={styles.toolbar}>\n <div style={styles.grow} />\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={() => this.props.onDone()}\n startIcon={<IconCheck />}\n >\n {this.props.t('Understand')}\n </Button>\n </Toolbar>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(WizardPortForwarding);\n","import React, { type JSX } from 'react';\nimport {\n Paper,\n Toolbar,\n Button,\n Accordion,\n Box,\n AccordionSummary,\n AccordionDetails,\n Checkbox,\n Typography,\n LinearProgress,\n} from '@mui/material';\nimport { Check as IconCheck, ExpandMore as ExpandMoreIcon, ArrowForward as IconNext } from '@mui/icons-material';\nimport { type AdminConnection, I18n } from '@iobroker/adapter-react-v5';\nimport type { Repository } from '@/types';\n\ninterface WizardAdaptersTabProps {\n /** Function to call if wizard step finishes */\n onDone: () => void;\n /** The socket connection */\n socket: AdminConnection;\n /** The host name */\n host: string;\n /** Execute command on given host */\n executeCommand: (cmd: string, host: string, cb: () => void) => void;\n}\n\ninterface WizardAdaptersTabState {\n /** The repository */\n repository: Repository;\n /** Adapters which should be installed */\n selectedAdapters: string[];\n}\n\ninterface AdapterOptions {\n /** Adapter name */\n name: string;\n /** Adapter description */\n description: string;\n}\n\nexport default class WizardAdaptersTab extends React.Component<WizardAdaptersTabProps, WizardAdaptersTabState> {\n /** Height of the toolbar */\n private readonly TOOLBAR_HEIGHT = 64;\n\n constructor(props: WizardAdaptersTabProps) {\n super(props);\n\n this.state = {\n repository: {},\n selectedAdapters: [],\n };\n }\n\n /**\n * Lifecycle hook called if component is mounted\n */\n async componentDidMount(): Promise<void> {\n try {\n const repository = await this.props.socket.getRepository(this.props.host, {\n repo: this.props.socket.systemConfig.common.activeRepo,\n });\n\n this.setState({ repository });\n } catch (e) {\n console.error(`Could not read repository: ${e.message}`);\n }\n }\n\n /**\n * Install adapters if the next button is called\n */\n async onDone(): Promise<void> {\n const { selectedAdapters } = this.state;\n\n this.props.onDone();\n\n // after calling onDone we install in the background\n for (const adapter of selectedAdapters) {\n await new Promise<void>(resolve => {\n this.props.executeCommand(`add ${adapter}`, this.props.host, resolve);\n });\n }\n }\n\n /**\n * Render Accordion for given adapter\n *\n * @param options Adapter specific information\n */\n renderAdapterAccordion(options: AdapterOptions): JSX.Element | null {\n const { name, description } = options;\n\n const adapter = this.state.repository[name];\n\n if (!adapter) {\n return null;\n }\n\n const lang = this.props.socket.systemLang;\n\n const title = adapter.titleLang[lang] || adapter.titleLang.en;\n\n return (\n <Box sx={{ display: 'flex', alignItems: 'flex-start' }}>\n <Accordion\n style={{\n borderColor: 'rgba(0, 0, 0, 0.2)',\n borderWidth: '1px',\n borderStyle: 'solid',\n width: '100%',\n }}\n >\n <AccordionSummary\n style={{\n backgroundColor: 'primary.main',\n fontWeight: 'bold',\n height: 52,\n }}\n expandIcon={<ExpandMoreIcon />}\n aria-controls=\"panel1-content\"\n id=\"panel1-header\"\n >\n <Box style={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <Checkbox\n sx={{ color: 'text.primary', '&.Mui-checked': { color: 'text.primary' } }}\n onClick={e => e.stopPropagation()}\n onChange={() => {\n const { selectedAdapters } = this.state;\n\n if (selectedAdapters.includes(name)) {\n const idx = selectedAdapters.indexOf(name);\n selectedAdapters.splice(idx, 1);\n } else {\n selectedAdapters.push(name);\n }\n\n this.setState({ selectedAdapters });\n }}\n />\n <img\n alt={title}\n src={adapter.extIcon}\n style={{ width: 45, height: 45 }}\n />\n {title}\n </Box>\n </AccordionSummary>\n <AccordionDetails\n style={{\n backgroundColor: 'background.appbar',\n whiteSpace: 'pre-wrap',\n fontSize: 16,\n textAlign: 'left',\n }}\n >\n <Typography>{description}</Typography>\n </AccordionDetails>\n </Accordion>\n </Box>\n );\n }\n\n /**\n * Render the actual content\n */\n renderContent(): JSX.Element {\n return (\n <Box sx={{ display: 'flex', gap: 1, flexDirection: 'column' }}>\n <Typography sx={{ paddingTop: 2 }}>{I18n.t('wizard adapter general description')}</Typography>\n <h2>{I18n.t('Cloud')}</h2>\n <Typography>{I18n.t('cloud wizard category')}</Typography>\n {this.renderAdapterAccordion({\n name: 'iot',\n description: I18n.t('iot wizard description'),\n })}\n {this.renderAdapterAccordion({ name: 'cloud', description: I18n.t('cloud wizard description') })}\n\n <h2>{I18n.t('Logic')}</h2>\n <Typography>{I18n.t('logic wizard category')}</Typography>\n {this.renderAdapterAccordion({\n name: 'javascript',\n description: I18n.t('javascript wizard description'),\n })}\n {this.renderAdapterAccordion({ name: 'scenes', description: I18n.t('scenes wizard description') })}\n\n <h2>{I18n.t('Notifications')}</h2>\n <Typography>{I18n.t('notifications wizard category')}</Typography>\n {this.renderAdapterAccordion({\n name: 'notification-manager',\n description: I18n.t('notification-manager wizard description'),\n })}\n {this.renderAdapterAccordion({ name: 'telegram', description: I18n.t('telegram wizard description') })}\n {this.renderAdapterAccordion({ name: 'email', description: I18n.t('email wizard description') })}\n {this.renderAdapterAccordion({ name: 'pushover', description: I18n.t('pushover wizard description') })}\n {this.renderAdapterAccordion({\n name: 'signal-cmb',\n description: I18n.t('signal-cmb wizard description'),\n })}\n\n <h2>{I18n.t('History data')}</h2>\n <Typography>{I18n.t('history wizard category')}</Typography>\n {this.renderAdapterAccordion({ name: 'history', description: I18n.t('history wizard description') })}\n {this.renderAdapterAccordion({ name: 'sql', description: I18n.t('sql wizard description') })}\n\n <h2>{I18n.t('Weather')}</h2>\n <Typography>{I18n.t('weather wizard category')}</Typography>\n {this.renderAdapterAccordion({\n name: 'weatherunderground',\n description: I18n.t('weatherunderground wizard description'),\n })}\n\n <h2>{I18n.t('Visualization')}</h2>\n <Typography>{I18n.t('visualization wizard category')}</Typography>\n {this.renderAdapterAccordion({ name: 'vis-2', description: I18n.t('vis-2 wizard description') })}\n </Box>\n );\n }\n\n /**\n * Render the component\n */\n render(): JSX.Element {\n const repositoryReceived = Object.keys(this.state.repository).length > 0;\n\n return (\n <Paper\n sx={{\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n }}\n >\n <Box\n sx={{\n height: `calc(100% - ${this.TOOLBAR_HEIGHT}px)`,\n width: '90%',\n maxWidth: '800px',\n overflow: 'auto',\n '-ms-overflow-style': 'none',\n 'scrollbar-width': 'none',\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n }}\n >\n {repositoryReceived ? this.renderContent() : <LinearProgress />}\n </Box>\n <Toolbar\n sx={{\n height: this.TOOLBAR_HEIGHT,\n lineHeight: `${this.TOOLBAR_HEIGHT}px`,\n width: '100%',\n }}\n >\n <div style={{ flexGrow: 1 }} />\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={() => this.onDone()}\n startIcon={this.state.selectedAdapters.length ? <IconCheck /> : <IconNext />}\n >\n {this.state.selectedAdapters.length ? I18n.t('Install selected adapters') : I18n.t('Next')}\n </Button>\n </Toolbar>\n </Paper>\n );\n }\n}\n","import React, { Component, type JSX } from 'react';\n\nimport { Button, Dialog, DialogContent, DialogTitle, AppBar, Toolbar, Stepper, Step, StepLabel } from '@mui/material';\n\n// Icons\nimport { PlayArrow as PlayArrowIcon, Check as CheckIcon } from '@mui/icons-material';\n\nimport {\n withWidth,\n Router,\n ToggleThemeMenu,\n I18n,\n type AdminConnection,\n type ThemeName,\n type ThemeType,\n} from '@iobroker/adapter-react-v5';\n\nimport WizardPasswordTab from '@/components/Wizard/WizardPasswordTab';\nimport WizardLicenseTab from '@/components/Wizard/WizardLicenseTab';\nimport WizardFinishImage from '@/assets/wizard-finish.jpg';\nimport WizardWelcomeImage from '@/assets/wizard-welcome.jpg';\nimport Logo from '@/assets/logo.png';\nimport LongLogo from '@/assets/longLogo.svg';\nimport WizardSettingsTab from '@/components/Wizard/WizardSettingsTab';\nimport WizardAuthSSLTab from '@/components/Wizard/WizardAuthSSLTab';\nimport WizardPortForwarding from '@/components/Wizard/WizardPortForwarding';\nimport WizardAdaptersTab from '@/components/Wizard/WizardAdaptersTab';\n\nconst TOOLBAR_HEIGHT = 64;\n\nconst styles: Record<string, React.CSSProperties> = {\n dialog: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n },\n paper: {\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n },\n content: {\n textAlign: 'center',\n },\n tabPanel: {\n width: '100%',\n overflow: 'hidden',\n height: 'calc(100% - 72px)',\n },\n fullHeightWithoutToolbar: {\n height: `calc(100% - ${TOOLBAR_HEIGHT}px)`,\n width: '100%',\n overflow: 'auto',\n },\n finishBackground: {\n backgroundImage: `url(${WizardFinishImage})`,\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n },\n welcomeBackground: {\n backgroundImage: `url(${WizardWelcomeImage})`,\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n },\n grow: {\n flexGrow: 1,\n },\n playIcon: {\n marginLeft: 8,\n },\n toolbar: {\n height: TOOLBAR_HEIGHT,\n },\n logo: {\n width: 32,\n height: 32,\n borderRadius: '50%',\n background: 'white',\n marginRight: 8,\n verticalAlign: 'middle',\n },\n themeButton: {\n float: 'right',\n display: 'inline-block',\n marginTop: -1,\n marginRight: 8,\n },\n\n finalText: {\n fontSize: 48,\n marginTop: 80,\n color: '#265063',\n fontWeight: 'bold',\n },\n finalLongLogo: {\n width: 500,\n },\n};\n\ninterface WizardDialogProps {\n socket: AdminConnection;\n onClose: (redirect?: string) => void;\n toggleTheme: () => void;\n themeName: ThemeName;\n themeType: ThemeType;\n /** Active host name */\n host: string;\n /** Execute command on given host */\n executeCommand: (cmd: string, host: string, cb: () => void) => void;\n}\n\ninterface WizardDialogState {\n activeStep: number;\n auth: boolean;\n secure: boolean;\n}\n\nclass WizardDialog extends Component<WizardDialogProps, WizardDialogState> {\n private adminInstance: null | ioBroker.AdapterObject = null;\n\n constructor(props: WizardDialogProps) {\n super(props);\n\n this.state = {\n activeStep: 0,\n auth: false,\n secure: false,\n };\n }\n\n componentDidMount(): void {\n void this.props.socket.getCurrentInstance().then((namespace: string) =>\n this.props.socket.getObject(`system.adapter.${namespace}`).then(obj => {\n this.adminInstance = obj;\n this.setState({ auth: obj.native.auth, secure: obj.native.secure });\n }),\n );\n }\n\n renderWelcome(): JSX.Element {\n // shutterstock Standard commercial license on ioBroker GmbH: https://www.shutterstock.com/de/image-vector/welcome-neon-text-vector-sign-design-1186433386\n return (\n <div style={{ ...styles.paper, ...styles.welcomeBackground }}>\n <div style={styles.fullHeightWithoutToolbar}></div>\n <Toolbar style={styles.toolbar}>\n <div style={styles.grow} />\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() =>\n this.props.socket.getCompactSystemConfig(true).then(obj =>\n this.setState({\n activeStep: this.state.activeStep + 1 + (obj.common.licenseConfirmed ? 0 : 0),\n }),\n )\n }\n >\n {I18n.t('Start wizard')} <PlayArrowIcon style={styles.playIcon} />\n </Button>\n <div style={styles.grow} />\n </Toolbar>\n </div>\n );\n }\n\n renderLicense(): JSX.Element {\n return (\n <WizardLicenseTab\n t={I18n.t}\n socket={this.props.socket}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n onDone={async (settings?: { lang: ioBroker.Languages }) => {\n const obj = await this.props.socket.getSystemConfig(true);\n obj.common.licenseConfirmed = true;\n if (settings?.lang) {\n obj.common.language = settings.lang;\n await this.props.socket.setSystemConfig(obj);\n }\n this.setState({ activeStep: this.state.activeStep + 1 });\n }}\n />\n );\n }\n\n renderPassword(): JSX.Element {\n return (\n <WizardPasswordTab\n t={I18n.t}\n socket={this.props.socket}\n themeName={this.props.themeName}\n onDone={(pass: string) =>\n this.props.socket\n .changePassword('admin', pass)\n .then(() => this.setState({ activeStep: this.state.activeStep + 1 }))\n }\n />\n );\n }\n\n renderSettings(): JSX.Element {\n return (\n <WizardSettingsTab\n t={I18n.t}\n socket={this.props.socket}\n themeName={this.props.themeName}\n onDone={(settings: {\n tempUnit: '°C' | '°F';\n currency: string;\n dateFormat: string;\n isFloatComma: boolean;\n country: string;\n city: string;\n address: string;\n longitude: number;\n latitude: number;\n firstDayOfWeek: 'sunday' | 'monday';\n }) =>\n this.props.socket\n .getSystemConfig(true)\n .then(obj => {\n Object.assign(obj.common, settings);\n return this.props.socket.setSystemConfig(obj);\n })\n .then(() => this.setState({ activeStep: this.state.activeStep + 1 }))\n }\n />\n );\n }\n\n renderAuthentication(): JSX.Element {\n return (\n <WizardAuthSSLTab\n t={I18n.t}\n auth={this.state.auth}\n secure={this.state.secure}\n socket={this.props.socket}\n themeName={this.props.themeName}\n onDone={(settings: any) =>\n this.setState(settings, () => this.setState({ activeStep: this.state.activeStep + 1 }))\n }\n />\n );\n }\n\n renderPortForwarding(): JSX.Element {\n return (\n <WizardPortForwarding\n t={I18n.t}\n socket={this.props.socket}\n themeName={this.props.themeName}\n auth={this.state.auth}\n secure={this.state.secure}\n onDone={() => this.setState({ activeStep: this.state.activeStep + 1 })}\n />\n );\n }\n\n /**\n * Render the adapter selection wizard tab\n */\n renderAdapters(): JSX.Element {\n return (\n <WizardAdaptersTab\n host={this.props.host}\n socket={this.props.socket}\n executeCommand={this.props.executeCommand}\n onDone={() => this.setState({ activeStep: this.state.activeStep + 1 })}\n />\n );\n }\n\n async onClose(): Promise<void> {\n // read if discovery is available\n const discovery = await this.props.socket.getState('system.adapter.discovery.0.alive');\n\n if (this.adminInstance) {\n let certPublic;\n let certPrivate;\n if (\n this.adminInstance.native.secure !== this.state.secure ||\n this.adminInstance.native.auth !== this.state.auth\n ) {\n if (\n this.state.secure &&\n (!this.adminInstance.native.certPublic || !!this.adminInstance.native.certPrivate)\n ) {\n // get certificates\n try {\n const certs = await this.props.socket.getCertificates();\n certPublic = certs && certs.find(c => c.type === 'public');\n certPrivate = certs && certs.find(c => c.type === 'private');\n } catch (e) {\n window.alert(`Cannot read certificates: ${e}`);\n }\n }\n this.adminInstance.native.auth = this.state.auth;\n\n if (this.state.secure) {\n if (\n !(this.adminInstance.native.certPublic || certPublic) ||\n !(this.adminInstance.native.certPrivate || certPrivate)\n ) {\n window.alert(I18n.t('Cannot enable authentication as no certificates found!'));\n this.adminInstance.native.secure = false;\n\n await this.props.socket.setObject(this.adminInstance._id, this.adminInstance);\n setTimeout(\n () =>\n (window.location.href = `http://${window.location.host}/#tab-adapters${discovery?.val ? '/discovery' : ''}`),\n 1000,\n );\n this.props.onClose();\n return;\n }\n this.adminInstance.native.secure = this.state.secure;\n this.adminInstance.native.certPublic = this.adminInstance.native.certPublic || certPublic.name;\n this.adminInstance.native.certPrivate = this.adminInstance.native.certPrivate || certPrivate.name;\n }\n\n await this.props.socket.setObject(this.adminInstance._id, this.adminInstance);\n\n // redirect to https or http\n let redirect;\n if (this.adminInstance.native.secure) {\n redirect = `https://${window.location.host}/#tab-adapters${discovery?.val ? '/discovery' : ''}`;\n } else {\n redirect = `http://${window.location.host}/#tab-adapters${discovery?.val ? '/discovery' : ''}`;\n }\n\n this.props.onClose(redirect);\n } else {\n Router.doNavigate('tab-adapters', discovery?.val ? 'discovery' : undefined);\n this.props.onClose();\n }\n } else {\n Router.doNavigate('tab-adapters', discovery?.val ? 'discovery' : undefined);\n this.props.onClose();\n }\n }\n\n renderFinish(): JSX.Element {\n // Free Image license: https://pixabay.com/illustrations/road-sky-mountains-clouds-black-908176/\n return (\n <div style={{ ...styles.paper, ...styles.finishBackground }}>\n <div style={styles.fullHeightWithoutToolbar}>\n <div style={styles.finalText}>{I18n.t('Have fun automating your home with')}</div>\n <img\n src={LongLogo}\n alt=\"ioBroker\"\n style={styles.finalLongLogo}\n />\n </div>\n <Toolbar style={styles.toolbar}>\n <div style={styles.grow} />\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => this.onClose()}\n startIcon={<CheckIcon />}\n >\n {I18n.t('Finish')}\n </Button>\n <div style={styles.grow} />\n </Toolbar>\n </div>\n );\n }\n\n render(): JSX.Element {\n return (\n <Dialog\n style={styles.dialog}\n open={!0}\n onClose={() => {\n // ignore\n // This dialog can be closed only by button\n }}\n fullWidth\n fullScreen\n aria-labelledby=\"wizard-dialog-title\"\n >\n <DialogTitle id=\"wizard-dialog-title\">\n <img\n src={Logo}\n style={styles.logo}\n alt=\"logo\"\n />\n {I18n.t('Initial ioBroker setup')}{' '}\n <ToggleThemeMenu\n style={styles.themeButton}\n t={I18n.t}\n toggleTheme={this.props.toggleTheme}\n themeName={this.props.themeName as any}\n size=\"small\"\n />\n </DialogTitle>\n <DialogContent style={styles.content}>\n <AppBar position=\"static\">\n <Toolbar>\n <Stepper activeStep={this.state.activeStep}>\n <Step>\n <StepLabel>{I18n.t('Welcome')}</StepLabel>\n </Step>\n <Step>\n <StepLabel>{I18n.t('License agreement')}</StepLabel>\n </Step>\n <Step>\n <StepLabel>{I18n.t('Password')}</StepLabel>\n </Step>\n <Step>\n <StepLabel>{I18n.t('Authentication')}</StepLabel>\n </Step>\n <Step>\n <StepLabel>{I18n.t('Port forwarding')}</StepLabel>\n </Step>\n <Step>\n <StepLabel>{I18n.t('Settings')}</StepLabel>\n </Step>\n <Step>\n <StepLabel>{I18n.t('Adapters')}</StepLabel>\n </Step>\n <Step>\n <StepLabel>{I18n.t('Finish')}</StepLabel>\n </Step>\n </Stepper>\n </Toolbar>\n </AppBar>\n {this.state.activeStep === 0 ? <div style={styles.tabPanel}>{this.renderWelcome()}</div> : null}\n {this.state.activeStep === 1 ? <div style={styles.tabPanel}>{this.renderLicense()}</div> : null}\n {this.state.activeStep === 2 ? <div style={styles.tabPanel}>{this.renderPassword()}</div> : null}\n {this.state.activeStep === 3 ? (\n <div style={styles.tabPanel}>{this.renderAuthentication()}</div>\n ) : null}\n {this.state.activeStep === 4 ? (\n <div style={styles.tabPanel}>{this.renderPortForwarding()}</div>\n ) : null}\n {this.state.activeStep === 5 ? <div style={styles.tabPanel}>{this.renderSettings()}</div> : null}\n {this.state.activeStep === 6 ? <div style={styles.tabPanel}>{this.renderAdapters()}</div> : null}\n {this.state.activeStep === 7 ? <div style={styles.tabPanel}>{this.renderFinish()}</div> : null}\n </DialogContent>\n </Dialog>\n );\n }\n}\n\nexport default withWidth()(WizardDialog);\n","import React from 'react';\n\nimport { type AdminConnection, type Translate, type ThemeType, type ThemeName } from '@iobroker/adapter-react-v5';\n\nimport type { AdminGuiConfig } from '@/types';\n\nexport interface BaseSystemSettingsDialogProps {\n adminGuiConfig: AdminGuiConfig;\n onChange: (data: any, dataAux: any, cb: () => void) => void;\n data: any;\n dataAux: any;\n handle: (type: 'none' | 'extended' | 'no-city') => void;\n users: ioBroker.UserObject[];\n groups: ioBroker.GroupObject[];\n multipleRepos: boolean;\n activeRepo: string[];\n repoInfo: Record<string, ioBroker.RepoInfo>;\n histories: string[];\n themeName: ThemeName;\n themeType: ThemeType;\n host: string;\n t: Translate;\n socket: AdminConnection;\n saving: boolean;\n}\n\nabstract class BaseSystemSettingsDialog<P = undefined, S extends object = object> extends React.Component<\n P extends undefined ? BaseSystemSettingsDialogProps : P,\n S\n> {}\n\nexport default BaseSystemSettingsDialog;\n","import React, { type JSX } from 'react';\n\nimport { MapContainer, TileLayer, useMap } from 'react-leaflet';\nimport { OpenStreetMapProvider } from 'leaflet-geosearch';\n\nimport {\n Grid2,\n InputLabel,\n MenuItem,\n FormControl,\n Select,\n TextField,\n Autocomplete,\n FormHelperText,\n InputAdornment,\n IconButton,\n type SelectChangeEvent,\n} from '@mui/material';\n\nimport { Close as CloseIcon } from '@mui/icons-material';\n\nimport { Marker, type DragEndEvent, type LatLngTuple, type Map } from 'leaflet';\n\nimport { DialogConfirm, withWidth, I18n, type Translate } from '@iobroker/adapter-react-v5';\nimport { type AdminGuiConfig } from '@/types';\n\nimport AdminUtils from '../../helpers/AdminUtils';\nimport countries from '../../assets/json/countries.json';\nimport BaseSystemSettingsDialog from './BaseSystemSettingsDialog';\n\nconst styles: Record<string, React.CSSProperties> = {\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n // backgroundColor: blueGrey[ 50 ]\n },\n formControl: {\n marginRight: 8,\n minWidth: '100%',\n },\n selectEmpty: {\n marginTop: 16,\n },\n map: {\n borderRadius: 5,\n },\n};\n\nconst MyMapComponent: React.FC<{ addMap: (map: any) => any }> = props => {\n const map = useMap();\n if (props.addMap) {\n props.addMap(map);\n }\n return null;\n};\n\ninterface Setting {\n id: string;\n title: string;\n translate?: boolean;\n values: { id: string | boolean; title: string }[];\n allowText?: boolean;\n autocomplete?: boolean;\n help?: string;\n}\n\ninterface Props {\n t: Translate;\n data: ioBroker.SystemConfigObject;\n dataAux: ioBroker.SystemConfigObject;\n adminGuiConfig: AdminGuiConfig;\n saving: boolean;\n onChange: (data: any, dataAux: any, cb?: () => void) => void;\n histories: string[];\n multipleRepos: boolean;\n}\n\ninterface State {\n zoom: number;\n confirm: boolean;\n confirmValue: string;\n}\n\nclass MainSettingsDialog extends BaseSystemSettingsDialog<Props, State> {\n constructor(props: Props) {\n super(props);\n this.state = {\n zoom: 14,\n confirm: false,\n confirmValue: '',\n };\n }\n\n marker: Marker;\n\n map: Map;\n\n cityTimer: ReturnType<typeof setTimeout>;\n\n latLongTimer: ReturnType<typeof setTimeout>;\n\n getSettings(): Setting[] {\n return [\n {\n id: 'language',\n title: 'System language:',\n translate: false,\n values: [\n {\n id: 'en',\n title: 'English',\n },\n {\n id: 'de',\n title: 'Deutsch',\n },\n {\n id: 'ru',\n title: 'русский',\n },\n {\n id: 'uk',\n title: 'український',\n },\n {\n id: 'pt',\n title: 'Portugues',\n },\n {\n id: 'nl',\n title: 'Nederlands',\n },\n {\n id: 'fr',\n title: 'français',\n },\n {\n id: 'it',\n title: 'Italiano',\n },\n {\n id: 'es',\n title: 'Espanol',\n },\n {\n id: 'pl',\n title: 'Polski',\n },\n {\n id: 'zh-ch',\n title: '简体中文',\n },\n ],\n },\n {\n id: 'tempUnit',\n title: 'Temperature units',\n translate: false,\n values: [\n {\n id: '°C',\n title: '°C',\n },\n {\n id: '°F',\n title: '°F',\n },\n ],\n },\n {\n id: 'currency',\n title: 'Currency sign',\n translate: false,\n allowText: true,\n autocomplete: true,\n values: [\n {\n id: '€',\n title: '€',\n },\n {\n id: '$',\n title: '$',\n },\n {\n id: '₽',\n title: '₽',\n },\n {\n id: '₤',\n title: '₤',\n },\n {\n id: 'CHF',\n title: 'CHF',\n },\n ],\n },\n {\n id: 'dateFormat',\n title: 'Date format',\n translate: true,\n values: [\n {\n id: 'DD.MM.YYYY',\n title: 'DD.MM.YYYY',\n },\n {\n id: 'YYYY.MM.DD',\n title: 'YYYY.MM.DD',\n },\n {\n id: 'MM/DD/YYYY',\n title: 'MM/DD/YYYY',\n },\n ],\n },\n {\n id: 'isFloatComma',\n title: 'Float divider sign',\n translate: true,\n values: [\n {\n id: true,\n title: 'comma',\n },\n {\n id: false,\n title: 'point',\n },\n ],\n },\n {\n id: 'defaultHistory',\n title: 'Default History',\n values: [\n { id: '', title: this.props.t('None') },\n ...this.props.histories.map(history => ({\n id: history,\n title: history,\n })),\n ],\n },\n {\n id: 'activeRepo',\n title: 'Default Repository',\n translate: false,\n values: AdminUtils.objectMap(this.props.dataAux.native.repositories, (_repo, name) => ({\n id: name,\n title: name,\n })),\n },\n {\n id: 'expertMode',\n title: 'Expert mode',\n values: [\n { id: true, title: 'on' },\n { id: false, title: 'off (default)' },\n ],\n },\n {\n id: 'defaultLogLevel',\n title: 'Default log level',\n help: 'for new instances',\n translate: false,\n values: [\n { id: 'debug', title: 'debug' },\n { id: 'info', title: 'info' },\n { id: 'warn', title: 'warn' },\n { id: 'error', title: 'error' },\n ],\n },\n {\n id: 'firstDayOfWeek',\n title: 'First day of week',\n translate: true,\n values: [\n { id: 'monday', title: 'Monday' },\n { id: 'sunday', title: 'Sunday' },\n ],\n },\n ];\n }\n\n onMap = (map: Map): void => {\n if (this.props.saving) {\n return;\n }\n if (!this.map || this.map !== map) {\n this.map = map;\n const center: LatLngTuple = [\n parseFloat(\n this.props.data.common.latitude !== undefined\n ? (this.props.data.common.latitude as any as string)\n : '50',\n ) || 0,\n parseFloat(\n this.props.data.common.longitude !== undefined\n ? (this.props.data.common.longitude as any as string)\n : '10',\n ) || 0,\n ];\n\n this.marker = new Marker(center, {\n draggable: true,\n title: I18n.t('Resource location'),\n alt: I18n.t('Resource Location'),\n riseOnHover: true,\n })\n .addTo(map)\n .bindPopup('Popup for any custom information.')\n .on({ dragend: (evt: DragEndEvent) => this.onMarkerDragend(evt) });\n }\n };\n\n getSelect(e: Setting, i: number): JSX.Element | null {\n let value = (this.props.data.common as Record<string, any>)[e.id];\n\n if (e.id === 'defaultLogLevel' && !value) {\n value = 'info';\n }\n\n if (e.id === 'activeRepo' && this.props.multipleRepos) {\n return null;\n }\n\n // if disabled by vendor settings\n if (this.props.adminGuiConfig.admin.settings && this.props.adminGuiConfig.admin.settings[e.id] === false) {\n return null;\n }\n\n if (e.autocomplete && e.values) {\n return (\n <Grid2\n size={{ sm: 6, xs: 12 }}\n key={i}\n >\n <Autocomplete<Setting['values'][0], false, false, true>\n // variant=\"standard\"\n freeSolo\n disabled={this.props.saving}\n options={e.values}\n inputValue={value.toString()}\n onChange={(_evt, newValue) => {\n const id = this.getSettings()[i].id;\n if (typeof newValue === 'string') {\n this.doChange(id, newValue);\n return;\n }\n this.doChange(id, newValue ? newValue.id : '');\n }}\n onInputChange={(_event, newValue) => {\n const id = this.getSettings()[i].id;\n this.doChange(id, newValue);\n }}\n getOptionLabel={option => {\n if (typeof option === 'string') {\n return option;\n }\n if (e.translate) {\n return this.props.t(option.title || option.id.toString());\n }\n return option.title || option.id.toString();\n }}\n renderOption={(props, option) => (\n <li {...props}>\n {e.translate\n ? this.props.t(option.title || option.id.toString())\n : option.title || option.id}\n </li>\n )}\n renderInput={params => (\n <TextField\n {...params}\n variant=\"standard\"\n label={this.props.t(e.title)}\n />\n )}\n />\n </Grid2>\n );\n }\n\n // If value is not in known values, show text input\n if (e.allowText && value && !e.values.find(elem => elem.id === value)) {\n return (\n <Grid2\n size={{ sm: 6, xs: 12 }}\n key={i}\n >\n <FormControl\n style={styles.formControl}\n variant=\"standard\"\n >\n <InputLabel\n shrink\n id={`${e.id}-label`}\n >\n {this.props.t(e.title)}\n </InputLabel>\n <TextField\n disabled={this.props.saving}\n variant=\"standard\"\n id={e.id}\n value={value.toString()}\n onChange={evt => this.handleChange(evt, i)}\n helperText={e.help ? this.props.t(e.help) : ''}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n endAdornment: value.toString() ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.handleChange({ target: { value: '' } }, i)}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </FormControl>\n </Grid2>\n );\n }\n\n const items = e.values.map((elem, index) => (\n <MenuItem\n value={elem.id as string}\n key={index}\n >\n {e.translate ? this.props.t(elem.title || elem.id.toString()) : elem.title || elem.id}\n </MenuItem>\n ));\n\n return (\n <Grid2\n size={{ sm: 6, xs: 12 }}\n key={i}\n >\n <FormControl\n style={styles.formControl}\n variant=\"standard\"\n >\n <InputLabel\n shrink\n id={`${e.id}-label`}\n >\n {this.props.t(e.title)}\n </InputLabel>\n <Select\n disabled={this.props.saving}\n variant=\"standard\"\n style={styles.formControl}\n id={e.id}\n value={value === undefined ? false : value}\n onChange={evt => this.handleChange(evt, i)}\n displayEmpty\n >\n {items}\n </Select>\n {e.help ? <FormHelperText>{this.props.t(e.help)}</FormHelperText> : null}\n </FormControl>\n </Grid2>\n );\n }\n\n renderDialogConfirm(): JSX.Element | null {\n if (this.state.confirm) {\n return (\n <DialogConfirm\n text={this.props.t('confirm_change_repo')}\n onClose={result => {\n const value = this.state.confirmValue;\n this.setState({ confirm: false, confirmValue: null }, () => {\n if (result) {\n this.doChange('activeRepo', value);\n }\n });\n }}\n />\n );\n }\n\n return null;\n }\n\n getCounters = (): JSX.Element => {\n const items = countries.map((elem, index) => (\n <MenuItem\n value={elem.name}\n key={index}\n >\n {this.props.t(elem.name)}\n </MenuItem>\n ));\n\n return (\n <FormControl\n style={styles.formControl}\n variant=\"standard\"\n >\n <InputLabel\n shrink\n id=\"country-label\"\n >\n {this.props.t('Country:')}\n </InputLabel>\n <Select\n disabled={this.props.saving}\n variant=\"standard\"\n style={styles.formControl}\n id=\"country\"\n value={this.props.data.common.country}\n onChange={this.handleChangeCountry}\n displayEmpty\n >\n {items}\n </Select>\n </FormControl>\n );\n };\n\n handleChangeCountry = (evt: SelectChangeEvent<string>): void => {\n const value = evt.target.value;\n const id = 'country';\n this.doChange(id, value);\n };\n\n onChangeText = (evt: { target: { value: string } }, id: string): void => {\n const value = evt.target.value;\n this.onChangeInput(value, id);\n\n if (id === 'longitude' || id === 'latitude') {\n if (this.latLongTimer) {\n clearTimeout(this.latLongTimer);\n }\n this.latLongTimer = setTimeout(() => {\n this.latLongTimer = null;\n this.map.flyTo([\n parseFloat(this.props.data.common.latitude as any as string),\n parseFloat(this.props.data.common.longitude as any as string),\n ]);\n this.marker.setLatLng([\n parseFloat(this.props.data.common.latitude as any as string),\n parseFloat(this.props.data.common.longitude as any as string),\n ]);\n }, 500);\n }\n };\n\n onChangeInput = (value: any, id: string, cb?: () => void): void => this.doChange(id, value, cb);\n\n onChangeCity = (evt: { target: { value: string } }): void => {\n this.onChangeText(evt, 'city');\n\n if (this.cityTimer) {\n clearTimeout(this.cityTimer);\n }\n\n this.cityTimer = setTimeout(() => {\n this.cityTimer = null;\n const provider = new OpenStreetMapProvider();\n\n void provider.search({ query: evt.target.value }).then(results => {\n if (results[0]) {\n setTimeout(\n () =>\n this.onChangeInput(results[0].y, 'latitude', () =>\n this.onChangeInput(results[0].x, 'longitude', () =>\n this.onChangeInput(23, 'zoom', () => {\n this.map.flyTo([results[0].y, results[0].x]);\n this.marker.setLatLng([results[0].y, results[0].x]);\n }),\n ),\n ),\n 1200,\n );\n }\n });\n }, 500);\n };\n\n handleChange = (evt: { target: { value: string } }, selectId: number): void => {\n const value = evt.target.value;\n const id = this.getSettings()[selectId].id;\n\n if (\n id === 'activeRepo' &&\n !value.toLowerCase().startsWith('stable') &&\n !value.toLowerCase().includes('default')\n ) {\n this.setState({ confirm: true, confirmValue: value });\n } else {\n this.doChange(id, value);\n }\n };\n\n doChange = (name: string, value: any, cb?: () => void): void => {\n const newData = AdminUtils.clone(this.props.data);\n (newData.common as Record<string, any>)[name] = value;\n this.props.onChange(newData, null, () => cb && cb());\n };\n\n onMarkerDragend = (evt: DragEndEvent): void => {\n // ignore changes during saving\n if (!this.props.saving) {\n const ll = JSON.parse(JSON.stringify(evt.target._latlng));\n this.doChange('latitude', ll.lat, () => this.doChange('longitude', ll.lng));\n }\n };\n\n render(): JSX.Element {\n const selectors = this.getSettings().map((e, i) => this.getSelect(e, i));\n\n const center: LatLngTuple = [\n parseFloat(\n this.props.data.common.latitude !== undefined\n ? (this.props.data.common.latitude as any as string)\n : '50',\n ) || 0,\n parseFloat(\n this.props.data.common.longitude !== undefined\n ? (this.props.data.common.longitude as any as string)\n : '10',\n ) || 0,\n ];\n\n const { zoom } = this.state;\n\n return (\n <div style={styles.tabPanel}>\n {this.renderDialogConfirm()}\n <Grid2\n container\n spacing={3}\n >\n <Grid2 size={{ lg: 6, md: 12 }}>\n <Grid2\n container\n spacing={3}\n >\n <Grid2 size={{ xs: 12 }}>\n <TextField\n disabled={this.props.saving}\n fullWidth\n variant=\"standard\"\n id=\"siteName\"\n label={this.props.t('Site name')}\n value={this.props.data.common.siteName || ''}\n onChange={e => this.doChange('siteName', e.target.value)}\n helperText={this.props.t(\n \"This name will be shown in admin's header. Just to identify the whole installation\",\n )}\n slotProps={{\n input: {\n endAdornment: this.props.data.common.siteName ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.doChange('siteName', '')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </Grid2>\n {selectors}\n </Grid2>\n </Grid2>\n <Grid2 size={{ lg: 6, md: 12 }}>\n <MapContainer\n style={styles.map}\n center={center}\n zoom={zoom}\n maxZoom={18}\n attributionControl={!this.props.saving}\n zoomControl={!this.props.saving}\n doubleClickZoom={!this.props.saving}\n scrollWheelZoom={!this.props.saving}\n dragging={!this.props.saving}\n // animate\n easeLinearity={0.35}\n >\n <TileLayer url=\"https://{s}.tile.osm.org/{z}/{x}/{y}.png\" />\n <MyMapComponent addMap={map => this.onMap(map)} />\n </MapContainer>\n </Grid2>\n </Grid2>\n <Grid2\n container\n spacing={6}\n >\n <Grid2 size={{ sm: 6, xs: 12, md: 3 }}>{this.getCounters()}</Grid2>\n <Grid2 size={{ sm: 6, xs: 12, md: 3 }}>\n <FormControl\n style={styles.formControl}\n variant=\"standard\"\n >\n <InputLabel\n shrink\n id=\"city-label\"\n >\n {this.props.t('City:')}\n </InputLabel>\n <TextField\n disabled={this.props.saving}\n variant=\"standard\"\n id=\"city\"\n label={this.props.t('City:')}\n value={this.props.data.common.city}\n onChange={evt => this.onChangeCity(evt)}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n endAdornment: this.props.data.common.city ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.onChangeCity({ target: { value: '' } })}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </FormControl>\n </Grid2>\n <Grid2 size={{ sm: 6, xs: 12, md: 3 }}>\n <FormControl\n style={styles.formControl}\n variant=\"standard\"\n >\n <InputLabel\n shrink\n id=\"latitude-label\"\n >\n {this.props.t('Latitude:')}\n </InputLabel>\n <TextField\n disabled={this.props.saving}\n variant=\"standard\"\n id=\"latitude\"\n label={this.props.t('Latitude:')}\n value={this.props.data.common.latitude || 0}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n },\n }}\n onChange={evt => this.onChangeText(evt, 'latitude')}\n />\n </FormControl>\n </Grid2>\n <Grid2 size={{ sm: 6, xs: 12, md: 3 }}>\n <FormControl\n style={styles.formControl}\n variant=\"standard\"\n >\n <InputLabel\n shrink\n id=\"longitude-label\"\n >\n {this.props.t('Longitude:')}\n </InputLabel>\n <TextField\n disabled={this.props.saving}\n variant=\"standard\"\n id=\"longitude\"\n label={this.props.t('Longitude:')}\n value={this.props.data.common.longitude || 0}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n },\n }}\n onChange={evt => this.onChangeText(evt, 'longitude')}\n />\n </FormControl>\n </Grid2>\n </Grid2>\n </div>\n );\n }\n}\n\nexport default withWidth()(MainSettingsDialog);\n","import React from 'react';\nimport { SortableContainer, SortableElement, SortableHandle } from 'react-sortable-hoc';\n\nimport {\n Checkbox,\n Fab,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n TextField,\n Tooltip,\n InputAdornment,\n IconButton,\n Select,\n MenuItem,\n Typography,\n} from '@mui/material';\n\nimport {\n Add as AddIcon,\n Delete as DeleteIcon,\n Menu as DragHandleIcon,\n SettingsBackupRestore as RestoreIcon,\n Close as CloseIcon,\n} from '@mui/icons-material';\n\nimport { I18n, withWidth, DialogConfirm, type Translate, type ThemeType } from '@iobroker/adapter-react-v5';\nimport { InfoBox } from '@foxriver76/iob-component-lib';\n\nimport type { AdminGuiConfig, ioBrokerObject } from '@/types';\nimport IsVisible from '@/components/IsVisible';\nimport { AUTO_UPGRADE_OPTIONS_MAPPING, AUTO_UPGRADE_SETTINGS } from '@/helpers/utils';\nimport AdminUtils from '../../helpers/AdminUtils';\nimport BaseSystemSettingsDialog from './BaseSystemSettingsDialog';\n\nconst styles: Record<string, any> = {\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n // backgroundColor: blueGrey[ 50 ]\n },\n table: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n },\n buttonPanel: {\n paddingBottom: 20,\n display: 'flex',\n },\n descriptionPanel: {\n width: '100%',\n backgroundColor: 'transparent',\n marginLeft: 40,\n border: 'none',\n display: 'flex',\n alignItems: 'center',\n },\n dragColumn: {\n width: 32,\n },\n enableColumn: {\n width: 110,\n },\n stableColumn: {\n width: 80,\n },\n upgradePolicyColumn: {\n width: 190,\n textAlign: 'center',\n },\n buttonColumn: {\n width: 80,\n },\n nameRow: {\n width: 220,\n },\n input: {\n width: '100%',\n },\n checkboxError: {\n '& span:first-child': {\n border: '2px solid #FF0000',\n borderRadius: 4,\n },\n },\n fabButton: {\n marginRight: 8,\n width: 44,\n height: 44,\n },\n tooltip: {\n pointerEvents: 'none',\n },\n};\n\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nexport type Repository = Record<string, ioBroker.RepositoryInformation>;\n\ntype RepositoryArray = Array<{ title: string; link: string }>;\n\nfunction repoToArray(repos: Repository): RepositoryArray {\n return AdminUtils.objectMap(repos, (repo, name) => ({\n title: name,\n link: repo.link,\n }));\n}\n\nfunction arrayToRepo(array: RepositoryArray): Repository {\n const result: Repository = {};\n for (const item of array) {\n // @ts-expect-error will be fixed in js-controller\n result[item.title] = { link: item.link };\n }\n\n return result;\n}\n\nconst DragHandle = SortableHandle(() => <DragHandleIcon style={{ marginTop: 8, marginRight: 0, cursor: 'handle' }} />);\n\ninterface RepositoriesDialogProps {\n t: Translate;\n data: ioBrokerObject<{ repositories: Repository }>;\n dataAux: ioBrokerObject<object, { activeRepo: string | string[] }>;\n multipleRepos: boolean;\n repoInfo: Repository;\n saving: boolean;\n onChange: (\n data: ioBrokerObject<{ repositories: Repository }>,\n dataAux?: ioBrokerObject<object, { activeRepo: string | string[] }>,\n ) => void;\n adminGuiConfig: AdminGuiConfig;\n themeType: ThemeType;\n}\n\ninterface RepositoriesDialogState {\n error: boolean;\n confirm: boolean;\n confirmValue: {\n newData: ioBrokerObject<object, { activeRepo: string | string[] }>;\n error: boolean;\n } | null;\n}\n\nconst SortableList = SortableContainer<{ value: any }>(({ value }: { value: any }) => value);\nconst SortableItem = SortableElement<{ value: any }>(({ value }: { value: any }) => value);\n\nclass RepositoriesDialog extends BaseSystemSettingsDialog<RepositoriesDialogProps, RepositoriesDialogState> {\n constructor(props: RepositoriesDialogProps) {\n super(props);\n const repos = (\n typeof this.props.dataAux.common.activeRepo === 'string'\n ? [this.props.dataAux.common.activeRepo]\n : this.props.dataAux.common.activeRepo\n ).filter(r => r);\n\n this.state = {\n error: !repos.length,\n confirm: false,\n confirmValue: null,\n };\n }\n\n onValueChanged(value: any, id: string, name: 'title' | 'link'): void {\n const newData = AdminUtils.clone(this.props.data);\n const array = repoToArray(newData.native.repositories);\n const item = array.find(element => element.title === id);\n const oldTitle = item.title;\n item[name] = value;\n newData.native.repositories = arrayToRepo(array);\n\n let newConfig;\n if (\n ((typeof this.props.dataAux.common.activeRepo === 'string' &&\n this.props.dataAux.common.activeRepo === id) ||\n (typeof this.props.dataAux.common.activeRepo !== 'string' &&\n this.props.dataAux.common.activeRepo.includes(id))) &&\n name === 'title'\n ) {\n newConfig = this.getUpdateDefaultRepo(value, newData, oldTitle, value);\n }\n\n this.props.onChange(newData, newConfig);\n }\n\n onDelete(id: string): void {\n const newData = AdminUtils.clone(this.props.data);\n const array = repoToArray(newData.native.repositories);\n const index = array.findIndex(element => element.title === id);\n array.splice(index, 1);\n newData.native.repositories = arrayToRepo(array);\n if (this.props.dataAux.common.activeRepo === id) {\n if (Object.keys(newData.native.repositories).length) {\n // set first repo as active\n this.props.onChange(newData, this.getUpdateDefaultRepo(Object.keys(newData.native.repositories)[0]));\n } else {\n this.props.onChange(newData, this.getUpdateDefaultRepo(''));\n }\n } else {\n this.props.onChange(newData);\n }\n }\n\n onAdd = (): void => {\n const newData = AdminUtils.clone(this.props.data);\n const array = repoToArray(newData.native.repositories);\n array.push({\n title: '__',\n link: '',\n });\n newData.native.repositories = arrayToRepo(array);\n this.props.onChange(newData);\n };\n\n onRestore = (): void => {\n const newData = AdminUtils.clone(this.props.data);\n newData.native.repositories = {\n // @ts-expect-error will be fixed in js-controller\n stable: {\n link: 'http://download.iobroker.net/sources-dist.json',\n },\n // @ts-expect-error will be fixed in js-controller\n beta: {\n link: 'http://download.iobroker.net/sources-dist-latest.json',\n },\n };\n // Store old information if already read\n const oldStable = Object.keys(this.props.data.native.repositories).find(\n name => this.props.data.native.repositories[name].link === newData.native.repositories.stable.link,\n );\n if (oldStable) {\n if (newData.native.repositories.stable.json) {\n newData.native.repositories.stable.json = this.props.data.native.repositories[oldStable].json;\n }\n if (newData.native.repositories.stable.hash) {\n newData.native.repositories.stable.hash = this.props.data.native.repositories[oldStable].hash;\n }\n if (newData.native.repositories.stable.time) {\n newData.native.repositories.stable.time = this.props.data.native.repositories[oldStable].time;\n }\n }\n const oldBeta = Object.keys(this.props.data.native.repositories).find(\n name => this.props.data.native.repositories[name].link === newData.native.repositories.beta.link,\n );\n if (oldBeta) {\n if (newData.native.repositories.beta.json) {\n newData.native.repositories.beta.json = this.props.data.native.repositories[oldBeta].json;\n }\n if (newData.native.repositories.beta.hash) {\n newData.native.repositories.beta.hash = this.props.data.native.repositories[oldBeta].hash;\n }\n if (newData.native.repositories.beta.time) {\n newData.native.repositories.beta.time = this.props.data.native.repositories[oldBeta].time;\n }\n }\n\n const newConfig: ioBrokerObject<Record<string, unknown>, { activeRepo: string | string[] }> = AdminUtils.clone(\n this.props.dataAux,\n );\n if (!this.props.multipleRepos) {\n newConfig.common.activeRepo = 'stable';\n this.props.onChange(newData, newConfig);\n return;\n }\n newConfig.common.activeRepo = ['stable'];\n newConfig.common.adapterAutoUpgrade = { repositories: {}, defaultPolicy: 'none' };\n\n this.props.onChange(newData, newConfig);\n return null;\n };\n\n getUpdateDefaultRepo = (\n newRepo: string,\n newData?: ioBrokerObject<{ repositories: Repository }>,\n oldTitle?: string,\n newTitle?: string,\n ): ioBrokerObject<object, { activeRepo: string | string[] }> => {\n const newConfig = AdminUtils.clone(this.props.dataAux);\n if (!this.props.multipleRepos) {\n newConfig.common.activeRepo = newRepo;\n return newConfig;\n }\n newData = newData || AdminUtils.clone(this.props.data);\n if (oldTitle !== undefined && typeof newConfig.common.activeRepo !== 'string') {\n const pos = newConfig.common.activeRepo.indexOf(oldTitle);\n if (pos !== -1) {\n newConfig.common.activeRepo[pos] = newTitle;\n }\n }\n\n if (typeof newConfig.common.activeRepo === 'string' && newConfig.common.activeRepo) {\n newConfig.common.activeRepo = [newConfig.common.activeRepo];\n }\n newConfig.common.activeRepo = newConfig.common.activeRepo || [];\n if (typeof newConfig.common.activeRepo !== 'string') {\n if (!newConfig.common.activeRepo.includes(newRepo)) {\n // sort activeRepo anew\n const items = repoToArray(newData.native.repositories);\n newConfig.common.activeRepo.sort((a, b) => {\n const indexA = items.findIndex(item => item.title === a);\n const indexB = items.findIndex(item => item.title === b);\n return indexA - indexB;\n });\n }\n }\n\n return newConfig;\n };\n\n onSortEnd = ({ oldIndex, newIndex }: { oldIndex: number; newIndex: number }): void => {\n console.log(oldIndex, newIndex);\n const newData = AdminUtils.clone(this.props.data);\n const items = repoToArray(newData.native.repositories);\n const item = items[oldIndex];\n items.splice(oldIndex, 1);\n items.splice(newIndex, 0, item);\n newData.native.repositories = arrayToRepo(items);\n\n const newConfig = AdminUtils.clone(this.props.dataAux);\n\n if (typeof newConfig.common.activeRepo === 'string') {\n newConfig.common.activeRepo = [newConfig.common.activeRepo];\n }\n\n // sort activeRepo anew\n newConfig.common.activeRepo.sort((a, b) => {\n const indexA = items.findIndex(it => it.title === a);\n const indexB = items.findIndex(it => it.title === b);\n return indexA - indexB;\n });\n\n this.props.onChange(newData, newConfig);\n };\n\n onChangeActiveRepo(\n newData: ioBrokerObject<object, { activeRepo: string | string[] }>,\n error: boolean,\n showWarning: boolean,\n ): void {\n if (showWarning) {\n this.setState({ confirm: true, confirmValue: { newData, error } });\n } else {\n this.setState({ error }, () => this.props.onChange(null, newData));\n }\n }\n\n renderDialogConfirm(): React.JSX.Element {\n if (this.state.confirm) {\n return (\n <DialogConfirm\n text={this.props.t('confirm_change_repo')}\n onClose={result => {\n const value = this.state.confirmValue;\n this.setState({ confirm: false, confirmValue: null }, () => {\n if (result) {\n this.setState({ error: value.error }, () => this.props.onChange(null, value.newData));\n }\n });\n }}\n />\n );\n }\n return null;\n }\n\n renderSortableItem(item: RepositoryArray[number], index: number): React.JSX.Element {\n const errorName =\n !item.title ||\n item.title.trimStart() !== item.title ||\n (item.title.length < 3 && !!item.title.match(/^\\d+$/));\n\n const result = (\n <TableRow className=\"float_row\">\n <TableCell\n style={styles.dragColumn}\n className=\"float_cell\"\n title={this.props.t('Drag and drop to reorder')}\n >\n <DragHandle />\n </TableCell>\n <TableCell\n style={styles.enableColumn}\n className=\"float_cell\"\n >\n {index + 1}\n {this.props.multipleRepos ? (\n <Checkbox\n disabled={\n this.props.adminGuiConfig.admin.settings.activeRepo === false || this.props.saving\n }\n sx={this.state.error ? styles.checkboxError : undefined}\n title={this.state.error ? I18n.t('At least one repo must be selected') : ''}\n checked={\n typeof this.props.dataAux.common.activeRepo === 'string'\n ? this.props.dataAux.common.activeRepo === item.title\n : this.props.dataAux.common.activeRepo.includes(item.title)\n }\n onChange={() => {\n let showWarning = false;\n const newData = AdminUtils.clone(this.props.dataAux);\n if (typeof newData.common.activeRepo === 'string') {\n newData.common.activeRepo = [newData.common.activeRepo];\n }\n let pos = newData.common.activeRepo.indexOf(item.title);\n if (pos === -1) {\n newData.common.activeRepo.push(item.title);\n // newData.common.activeRepo.sort();\n // sort repos according to order of repos\n const arr = repoToArray(this.props.data.native.repositories);\n newData.common.activeRepo.sort((a, b) => {\n const indexA = arr.findIndex(it => it.title === a);\n const indexB = arr.findIndex(it => it.title === b);\n return indexA - indexB;\n });\n\n showWarning = item.title.toLowerCase().startsWith('beta');\n } else {\n newData.common.activeRepo.splice(pos, 1);\n }\n\n if (\n item.title.toLowerCase().startsWith('beta') &&\n newData.common.activeRepo.find(r => r.toLowerCase().startsWith('stable'))\n ) {\n pos = newData.common.activeRepo.findIndex(r =>\n r.toLowerCase().startsWith('stable'),\n );\n newData.common.activeRepo.splice(pos, 1);\n } else if (\n item.title.toLowerCase().startsWith('stable') &&\n newData.common.activeRepo.find(r => r.toLowerCase().startsWith('beta'))\n ) {\n pos = newData.common.activeRepo.findIndex(r => r.toLowerCase().startsWith('beta'));\n newData.common.activeRepo.splice(pos, 1);\n }\n\n const _error = !newData.common.activeRepo.length;\n this.onChangeActiveRepo(newData, _error, showWarning);\n }}\n />\n ) : null}\n </TableCell>\n <TableCell\n style={styles.stableColumn}\n className=\"float_cell\"\n >\n <Tooltip\n title={I18n.t(\n 'Flag will be automatically detected as repository will be read for the first time',\n )}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <span>\n <Checkbox\n disabled\n checked={this.props.repoInfo[item.title]?.stable}\n indeterminate={!this.props.repoInfo[item.title]}\n />\n </span>\n </Tooltip>\n </TableCell>\n <TableCell\n style={styles.upgradePolicyColumn}\n className=\"float_cell\"\n >\n <Tooltip\n title={I18n.t('Allow automatic adapter upgrades for this repository')}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <span>\n <Checkbox\n disabled={this.props.saving}\n checked={this.props.dataAux.common?.adapterAutoUpgrade?.repositories[item.title]}\n onChange={e => {\n const sysConfig = AdminUtils.clone(this.props.dataAux);\n\n if (!sysConfig.common.adapterAutoUpgrade) {\n sysConfig.common.adapterAutoUpgrade = {\n repositories: {},\n defaultPolicy: 'none',\n };\n }\n\n sysConfig.common.adapterAutoUpgrade.repositories[item.title] = e.target.checked;\n\n this.props.onChange(this.props.data, sysConfig);\n }}\n />\n </span>\n </Tooltip>\n </TableCell>\n <TableCell\n style={styles.nameRow}\n className=\"float_cell\"\n >\n <TextField\n variant=\"standard\"\n disabled={this.props.saving}\n value={item.title}\n style={styles.input}\n className=\"xs-centered\"\n onChange={evt => this.onValueChanged(evt.target.value, item.title, 'title')}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n endAdornment: item.title ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.onValueChanged('', item.title, 'title')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n error={errorName}\n helperText={errorName ? I18n.t('Invalid name') : undefined}\n />\n </TableCell>\n <TableCell className=\"grow_cell float_cell\">\n <TextField\n disabled={this.props.saving}\n variant=\"standard\"\n id={`default_${index}`}\n value={item.link}\n style={styles.input}\n className=\"xs-centered\"\n onChange={evt => this.onValueChanged(evt.target.value, item.title, 'link')}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n endAdornment: item.link ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.onValueChanged('', item.title, 'link')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </TableCell>\n <TableCell\n style={styles.buttonColumn}\n className=\"float_cell\"\n >\n <Fab\n disabled={this.props.saving}\n size=\"small\"\n color=\"secondary\"\n aria-label=\"add\"\n onClick={() => this.onDelete(item.title)}\n >\n <DeleteIcon />\n </Fab>\n </TableCell>\n </TableRow>\n );\n\n return (\n <SortableItem\n key={index}\n index={index}\n value={result}\n />\n );\n }\n\n renderSortableList(items: RepositoryArray): React.JSX.Element {\n const result = (\n <Table style={styles.table}>\n <TableHead>\n <TableRow className=\"float_row\">\n <TableCell\n style={styles.dragColumn}\n className=\"float_cell\"\n />\n <TableCell\n style={styles.enableColumn}\n className=\"float_cell\"\n >\n {this.props.multipleRepos ? I18n.t('Active') : ''}\n </TableCell>\n <TableCell\n style={styles.stableColumn}\n className=\"float_cell\"\n >\n {I18n.t('Stable')}\n </TableCell>\n <TableCell\n style={styles.upgradePolicyColumn}\n className=\"float_cell\"\n >\n {I18n.t('Auto-Upgrade')}\n </TableCell>\n <TableCell\n style={styles.nameRow}\n className=\"float_cell\"\n >\n {this.props.t('name')}\n </TableCell>\n <TableCell className=\"grow_cell float_cell\">{this.props.t('link')}</TableCell>\n <TableCell\n style={styles.buttonColumn}\n className=\"float_cell\"\n >\n {' '}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>{items.map((item, index) => this.renderSortableItem(item, index))}</TableBody>\n </Table>\n );\n\n return (\n <SortableList\n helperClass=\"draggable-item\"\n useDragHandle\n lockAxis=\"y\"\n onSortEnd={this.onSortEnd}\n value={result}\n />\n );\n }\n\n /**\n * Render the auto upgrade policy\n */\n renderAutoUpgradePolicy(): React.JSX.Element {\n const policy: ioBroker.AutoUpgradePolicy =\n this.props.dataAux.common.adapterAutoUpgrade?.defaultPolicy || 'none';\n const activatedRepos = this.props.dataAux.common.adapterAutoUpgrade?.repositories || {};\n\n return (\n <div style={{ display: 'flex', marginLeft: 20, flexDirection: 'column' }}>\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <Typography>\n {I18n.t('Allow only the following upgrades to be performed automatically:')}\n </Typography>\n <Select\n variant=\"standard\"\n sx={{ marginLeft: 1, marginBottom: 1 }}\n value={policy}\n onChange={e => {\n const sysConfig = AdminUtils.clone(this.props.dataAux);\n\n if (!sysConfig.common.adapterAutoUpgrade) {\n sysConfig.common.adapterAutoUpgrade = { repositories: {}, defaultPolicy: 'none' };\n }\n\n sysConfig.common.adapterAutoUpgrade.defaultPolicy = e.target.value;\n\n this.props.onChange(this.props.data, sysConfig);\n }}\n >\n {AUTO_UPGRADE_SETTINGS.map(option => (\n <MenuItem\n value={option}\n key={option}\n >\n {AUTO_UPGRADE_OPTIONS_MAPPING[option]}\n </MenuItem>\n ))}\n </Select>\n </div>\n <IsVisible value={!!(activatedRepos.beta || activatedRepos['Beta (latest)']) && policy !== 'none'}>\n <InfoBox type=\"warning\">{I18n.t('repo_update_hint')}</InfoBox>\n </IsVisible>\n <IsVisible value={policy === 'major'}>\n <InfoBox type=\"warning\">\n {I18n.t(\n 'The current selected configuration will allow to automatically pull in incompatible changes of this adapter!',\n )}\n </InfoBox>\n </IsVisible>\n </div>\n );\n }\n\n render(): React.JSX.Element {\n const items = repoToArray(this.props.data.native.repositories);\n\n return (\n <div style={styles.tabPanel}>\n {this.renderDialogConfirm()}\n <div style={styles.buttonPanel}>\n <Fab\n size=\"small\"\n color=\"primary\"\n disabled={this.props.saving}\n aria-label=\"add\"\n onClick={this.onAdd}\n style={styles.fabButton}\n title={this.props.t('Add new line to the repository list')}\n >\n <AddIcon />\n </Fab>\n <Fab\n size=\"small\"\n disabled={this.props.saving}\n onClick={this.onRestore}\n style={styles.fabButton}\n title={this.props.t('Restore repository list to default')}\n >\n <RestoreIcon />\n </Fab>\n {this.renderAutoUpgradePolicy()}\n </div>\n <TableContainer>{this.renderSortableList(items)}</TableContainer>\n </div>\n );\n }\n}\n\nexport default withWidth()(RepositoriesDialog);\n","import React, { type JSX } from 'react';\n\nimport { Button, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, TextField } from '@mui/material';\n\nimport { Refresh as IconRefresh } from '@mui/icons-material';\n\nimport { withWidth, Utils, type AdminConnection, type Translate } from '@iobroker/adapter-react-v5';\n\nimport { type ioBrokerObject } from '@/types';\nimport BaseSystemSettingsDialog from './BaseSystemSettingsDialog';\n\nconst styles: Record<string, React.CSSProperties> = {\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n // backgroundColor: blueGrey[ 50 ]\n },\n table: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n },\n input: {\n width: 250,\n marginRight: 16,\n },\n button: {\n marginTop: 16,\n },\n uuidGreen: {\n color: 'green',\n },\n uuidGrey: {\n color: 'grey',\n },\n tableName: {\n width: 200,\n },\n tableDate: {\n width: 150,\n textAlign: 'right',\n },\n tableUuid: {\n width: 300,\n },\n tableValid: {\n width: 100,\n },\n tableVersion: {\n width: 50,\n },\n tableUsedIn: {\n width: 100,\n },\n tableDiv: {\n overflow: 'auto',\n height: 'calc(100% - 75px)',\n },\n tableCommercial: {\n width: 100,\n },\n licenseId: {\n fontSize: 10,\n opacity: 0.5,\n fontStyle: 'italic',\n },\n};\n\ninterface License {\n id: string;\n product: string;\n time: number;\n uuid: string;\n validTill: string;\n version: string;\n usedBy: string;\n invoice: string;\n}\n\n// Todo: implement license object in js-controller - 'system.licenses'\ntype LicenseObject = ioBrokerObject<{\n licenses: License[];\n login: string;\n password: string;\n}>;\n\ninterface LicensesDialogProps {\n t: Translate;\n data: LicenseObject;\n host: string;\n saving: boolean;\n socket: AdminConnection;\n onChange: (data: LicenseObject) => void;\n}\n\ninterface LicensesDialogState {\n uuid: string;\n requesting: boolean;\n licenses: License[];\n // readTime: number;\n}\n\nclass LicensesDialog extends BaseSystemSettingsDialog<LicensesDialogProps, LicensesDialogState> {\n constructor(props: LicensesDialogProps) {\n super(props);\n\n this.state = {\n uuid: '',\n requesting: false,\n licenses: this.props.data.native.licenses || [],\n // readTime: this.props.data.native.readTime || 0,\n };\n }\n\n onLicensesChanged = (id: string, obj: ioBroker.Object | null | undefined): void => {\n if (id === 'system.licenses') {\n obj = obj || ({} as ioBroker.Object);\n obj.native = obj.native || {};\n obj.native.licenses = obj.native.licenses || [];\n\n // if licenses changed\n if (JSON.stringify(obj.native.licenses) !== JSON.stringify(this.state.licenses)) {\n window.alert(this.props.t('New licenses were stored'));\n this.setState({ licenses: obj.native.licenses /* , readTime: obj.native.licenses.readTime || 0 */ });\n } else {\n window.alert(this.props.t('Licenses have not changed'));\n }\n }\n };\n\n componentDidMount(): void {\n void this.props.socket.getObject('system.meta.uuid').then(obj => {\n this.props.socket\n .subscribeObject('system.licenses', this.onLicensesChanged)\n .catch(e => window.alert(`Cannot subscribe on system.licenses: ${e}`));\n this.setState({ uuid: obj.native.uuid });\n });\n }\n\n componentWillUnmount(): void {\n void this.props.socket.unsubscribeObject('system.licenses', this.onLicensesChanged);\n }\n\n doChange(name: 'login' | 'password', value: string): void {\n const newData: LicenseObject = Utils.clone(this.props.data) as LicenseObject;\n newData.native[name] = value;\n this.props.onChange(newData);\n }\n\n async requestLicenses(): Promise<void> {\n this.setState({ requesting: true });\n try {\n let password = this.props.data.native.password;\n // if the password was not changed\n if (password === '__SOME_PASSWORD__') {\n const obj = await this.props.socket.getObject('system.licenses');\n // if login was changed\n if (obj.native.login !== this.props.data.native.login) {\n password = await this.props.socket.decrypt(obj.native.password);\n } else {\n password = null;\n }\n }\n\n const licenses = await this.props.socket.updateLicenses(\n password ? this.props.data.native.login : null,\n password,\n );\n\n if (licenses !== null && licenses !== undefined) {\n if (password) {\n window.alert(\n this.props.t('Licenses were not stored. They will be stored after the settings will be saved'),\n );\n }\n\n this.setState({ licenses, requesting: false });\n } else {\n this.setState({ requesting: false });\n }\n } catch (error) {\n this.setState({ requesting: false });\n if (error === 'permissionError') {\n window.alert(this.props.t('May not trigger \"updateLicenses\"'));\n } else if (error === 'Authentication required') {\n window.alert(this.props.t('Cannot update licenses: %s', this.props.t('Authentication required')));\n } else {\n window.alert(this.props.t('Cannot update licenses: %s', error));\n }\n }\n }\n\n renderLicenses(): JSX.Element {\n return (\n <div style={styles.tableDiv}>\n <TableContainer>\n <Table\n stickyHeader\n size=\"small\"\n >\n <TableHead>\n <TableRow>\n <TableCell style={styles.tableName}>{this.props.t('Product')}</TableCell>\n <TableCell style={styles.tableDate}>{this.props.t('Ordered at')}</TableCell>\n <TableCell style={styles.tableUuid}>{this.props.t('UUID')}</TableCell>\n <TableCell style={styles.tableValid}>{this.props.t('Valid till')}</TableCell>\n <TableCell style={styles.tableVersion}>{this.props.t('V')}</TableCell>\n <TableCell style={styles.tableUsedIn}>{this.props.t('Used by')}</TableCell>\n <TableCell style={styles.tableCommercial}>{this.props.t('Invoice number')}</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {this.state.licenses &&\n this.state.licenses.map(license => (\n <TableRow key={license.id}>\n <TableCell style={styles.tableName}>\n <div>{license.product}</div>\n <div style={styles.licenseId}>{license.id}</div>\n </TableCell>\n <TableCell style={styles.tableDate}>\n {new Date(license.time).toLocaleDateString()}\n </TableCell>\n <TableCell\n style={{\n ...styles.tableUuid,\n ...(license.uuid && this.state.uuid === license.uuid\n ? styles.uuidGreen\n : license.uuid\n ? styles.uuidGrey\n : undefined),\n }}\n >\n {license.uuid || ''}\n </TableCell>\n <TableCell style={styles.tableValid}>\n {license.validTill === '0000-00-00 00:00:00' ? '' : license.validTill || ''}\n </TableCell>\n <TableCell style={styles.tableVersion}>{license.version || ''}</TableCell>\n <TableCell style={styles.tableUsedIn}>{license.usedBy || ''}</TableCell>\n <TableCell style={styles.tableCommercial}>\n {license.invoice !== 'free'\n ? license.invoice === 'MANUALLY_CREATED'\n ? '✓'\n : license.invoice\n : '-'}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n </div>\n );\n }\n\n render(): JSX.Element {\n return (\n <div style={styles.tabPanel}>\n <TextField\n variant=\"standard\"\n style={styles.input}\n disabled={this.props.saving || this.state.requesting}\n value={this.props.data.native.login}\n helperText={this.props.t('for ioBroker.net portal')}\n label={this.props.t('Login/Email')}\n onChange={e => this.doChange('login', e.target.value)}\n slotProps={{\n input: {\n autoComplete: 'new-password',\n },\n htmlInput: {\n autoComplete: 'off',\n },\n }}\n />\n <TextField\n variant=\"standard\"\n disabled={this.props.saving || this.state.requesting}\n style={styles.input}\n type=\"password\"\n value={this.props.data.native.password}\n helperText={this.props.t('for ioBroker.net portal')}\n label={this.props.t('Password')}\n onChange={e => this.doChange('password', e.target.value)}\n slotProps={{\n input: {\n autoComplete: 'new-password',\n },\n htmlInput: {\n autoComplete: 'off',\n },\n }}\n />\n <Button\n variant=\"contained\"\n startIcon={<IconRefresh />}\n disabled={\n this.state.requesting ||\n this.props.saving ||\n !this.props.host ||\n !this.props.data.native.password ||\n !this.props.data.native.login\n }\n onClick={() => this.requestLicenses()}\n style={styles.button}\n color=\"grey\"\n >\n {this.props.t('Check')}\n </Button>\n {this.renderLicenses()}\n </div>\n );\n }\n}\n\nexport default withWidth()(LicensesDialog);\n","import React, { type JSX } from 'react';\nimport Dropzone from 'react-dropzone';\n\nimport {\n Fab,\n IconButton,\n InputAdornment,\n Paper,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n TextField,\n} from '@mui/material';\n\nimport { Add as AddIcon, Delete as DeleteIcon, Close as CloseIcon } from '@mui/icons-material';\n\nimport { withWidth, I18n, type Translate } from '@iobroker/adapter-react-v5';\n\nimport { type ioBrokerObject } from '@/types';\nimport AdminUtils from '../../helpers/AdminUtils';\nimport BaseSystemSettingsDialog from './BaseSystemSettingsDialog';\n\n// icons\n\nconst styles: Record<string, React.CSSProperties> = {\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n position: 'relative',\n },\n tableContainer: {\n zIndex: 100,\n },\n table: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n },\n buttonPanel: {\n paddingBottom: 20,\n display: 'flex',\n },\n descriptionPanel: {\n width: '100%',\n backgroundColor: 'transparent',\n marginLeft: 40,\n border: 'none',\n display: 'flex',\n alignItems: 'center',\n },\n littleRow: {\n width: 110,\n },\n nameRow: {\n width: 220,\n },\n input: {\n width: '100%',\n },\n};\n\ntype CertificateArray = {\n title: string;\n data: string;\n}[];\n\ntype Certificate = Record<string, string>;\n\ninterface CertificatesDialogProps {\n t: Translate;\n // TODO: implement certificates in js-controller - 'system.certificates'\n data: ioBrokerObject<CertificateArray>;\n onChange: (data: ioBrokerObject<CertificateArray>) => void;\n saving: boolean;\n width: string;\n}\n\ninterface CertificatesDialogState {\n chClass: boolean;\n}\n\nclass CertificatesDialog extends BaseSystemSettingsDialog<CertificatesDialogProps, CertificatesDialogState> {\n constructor(props: CertificatesDialogProps) {\n super(props);\n\n this.state = {\n chClass: false,\n };\n }\n\n static certToArray(certs: Certificate): CertificateArray {\n return AdminUtils.objectMap(certs, (cert, name: string) => ({\n title: name,\n data: cert,\n }));\n }\n\n static arrayToCert(array: CertificateArray): Certificate {\n const result: Record<string, string> = {};\n array.forEach(e => {\n result[e.title] = e.data;\n });\n\n return result;\n }\n\n static detectType(name: string): string {\n name = name.toLowerCase();\n\n if (name.includes('public') || name.includes('cert')) {\n return 'public';\n }\n if (name.includes('priv') || name.includes('key')) {\n return 'private';\n }\n if (name.includes('chain') || name.includes('ca')) {\n return 'chained';\n }\n return '';\n }\n\n render(): JSX.Element {\n const arr = CertificatesDialog.certToArray(this.props.data.native.certificates);\n\n const rows = arr.map((e, i) => {\n const type = CertificatesDialog.detectType(e.title);\n\n return (\n <TableRow\n key={i}\n className=\"float_row\"\n >\n <TableCell\n style={styles.littleRow}\n className=\"float_cell\"\n >\n {i + 1}\n </TableCell>\n <TableCell\n style={styles.nameRow}\n className=\"float_cell\"\n >\n <TextField\n disabled={this.props.saving}\n variant=\"standard\"\n value={e.title}\n style={styles.input}\n className=\"xs-centered\"\n onChange={evt => this.onChangeText(evt.target.value, e.title, 'title')}\n error={!type}\n helperText={\n type ||\n I18n.t(\n 'Unknown type: use in name \"private\", \"public\" or \"chained\" to define the certificate type',\n )\n }\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n endAdornment: e.title ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.onChangeText('', e.title, 'title')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </TableCell>\n <TableCell className=\"grow_cell float_cell\">\n <TextField\n disabled={this.props.saving}\n variant=\"standard\"\n id={`default_${i}`}\n value={e.data}\n style={styles.input}\n className=\"xs-centered\"\n onChange={evt => {\n let value = evt.target.value.replace(/\\r/g, '').replace(/\\n/g, '');\n if (value.startsWith('--')) {\n const parts = value.split('-----');\n parts[2] = parts[2].replace(/\\s/g, '');\n value = `-----${parts[1]}-----\\r\\n${parts[2]}\\r\\n-----${parts[3]}-----`;\n }\n\n this.onChangeText(value, e.title, 'data');\n }}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n endAdornment: e.data ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.onChangeText('', e.title, 'data')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </TableCell>\n <TableCell\n style={styles.littleRow}\n className=\"float_cell\"\n >\n <Fab\n disabled={this.props.saving}\n size=\"small\"\n color=\"secondary\"\n aria-label=\"add\"\n onClick={() => this.onDelete(e.title)}\n >\n <DeleteIcon />\n </Fab>\n </TableCell>\n </TableRow>\n );\n });\n return (\n <div style={styles.tabPanel}>\n <Dropzone noClick>\n {({ getRootProps, getInputProps, acceptedFiles, fileRejections }) => (\n <div\n {...getRootProps({\n className: this.state.chClass ? 'drop-container drop-dop' : 'drop-container',\n onDragEnter: () => this.setState({ chClass: true }),\n onDragLeave: () => this.setState({ chClass: false }),\n onDrop: () => {\n if (this.props.saving) {\n // ignore\n return;\n }\n if (fileRejections.length) {\n const msg: string[] = [];\n fileRejections.forEach(e => {\n const m = `${e.file.name}: `;\n const mm: string[] = [];\n e.errors.forEach(ee => mm.push(ee.message));\n msg.push(m + mm.join(','));\n });\n\n alert(msg.join(', '));\n }\n\n if (acceptedFiles.length) {\n acceptedFiles.forEach(file => {\n const reader = new FileReader();\n reader.onload = e => this.onAdd(file.name, e.target.result as string);\n reader.readAsText(file);\n });\n } else if (!fileRejections.length) {\n alert(this.props.t('No files exists'));\n }\n\n this.setState({ chClass: false });\n },\n })}\n >\n <input {...getInputProps()} />\n </div>\n )}\n </Dropzone>\n <div style={styles.buttonPanel}>\n <Fab\n disabled={this.props.saving}\n size=\"small\"\n className=\"small_size\"\n color=\"primary\"\n aria-label=\"add\"\n onClick={() => this.onAdd()}\n >\n <AddIcon />\n </Fab>\n <Paper\n variant=\"outlined\"\n style={styles.descriptionPanel}\n >\n {this.props.t('certs_hint')}\n </Paper>\n </div>\n <TableContainer style={styles.tableContainer}>\n <Table\n style={styles.table}\n aria-label=\"customized table\"\n >\n <TableHead>\n <TableRow className=\"float_row\">\n <TableCell\n style={styles.littleRow}\n className=\"float_cell\"\n >\n {' '}\n </TableCell>\n <TableCell\n style={styles.nameRow}\n className=\"float_cell\"\n >\n {this.props.t('name')}\n </TableCell>\n <TableCell className=\"grow_cell float_cell\">{this.props.t('Certificate')}</TableCell>\n <TableCell\n style={styles.littleRow}\n className=\"float_cell\"\n >\n {' '}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>{rows}</TableBody>\n </Table>\n </TableContainer>\n </div>\n );\n }\n\n onChangeText = (value: string, id: string, name: 'title' | 'data'): void => {\n const newData = AdminUtils.clone(this.props.data);\n const array = CertificatesDialog.certToArray(newData.native.certificates);\n array.find(element => element.title === id)[name] = value;\n newData.native.certificates = CertificatesDialog.arrayToCert(array);\n this.props.onChange(newData);\n };\n\n onDelete = (id: string): void => {\n const newData = AdminUtils.clone(this.props.data);\n const array = CertificatesDialog.certToArray(newData.native.certificates);\n const index = array.findIndex(element => element.title === id);\n array.splice(index, 1);\n newData.native.certificates = CertificatesDialog.arrayToCert(array);\n this.props.onChange(newData);\n };\n\n onAdd = (title?: string, data?: string): void => {\n const newData = AdminUtils.clone(this.props.data);\n const array = CertificatesDialog.certToArray(newData.native.certificates);\n const certText = this.props.t('certificate');\n if (!title) {\n for (let i = 1; ; i++) {\n if (!array.find(item => item.title === `${certText}_${i}`)) {\n title = `${certText}_${i}`;\n break;\n }\n }\n }\n\n array.push({\n title: title || '__',\n data: data || '',\n });\n newData.native.certificates = CertificatesDialog.arrayToCert(array);\n this.props.onChange(newData);\n };\n}\n\nexport default withWidth()(CertificatesDialog);\n","import React, { type JSX } from 'react';\n\nimport { Grid2, FormControl, TextField, Paper, InputAdornment, IconButton } from '@mui/material';\n\nimport { Close as CloseIcon } from '@mui/icons-material';\n\nimport { withWidth, type Translate, type IobTheme } from '@iobroker/adapter-react-v5';\nimport type { ioBrokerObject } from '@/types';\nimport AdminUtils from '@/helpers/AdminUtils';\nimport BaseSystemSettingsDialog from './BaseSystemSettingsDialog';\n\nconst styles: Record<string, any> = {\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n // backgroundColor: blueGrey[ 50 ]\n },\n buttonPanel: {\n paddingBottom: 50,\n display: 'flex',\n },\n descriptionPanel: (theme: IobTheme) => ({\n width: '100%',\n backgroundColor: 'transparent',\n marginLeft: 40,\n border: 'none',\n display: 'flex',\n alignItems: 'center',\n '& a': {\n paddingLeft: 3,\n color: theme.palette.mode === 'dark' ? '#EEE' : '#111',\n },\n }),\n formControl: {\n margin: 8,\n minWidth: '100%',\n },\n};\n\ninterface SSLDialogProps {\n t: Translate;\n data: ioBrokerObject<{ letsEncrypt: { email?: string; domains?: string; path?: string } }>;\n onChange: (data: Record<string, any>) => void;\n saving: boolean;\n}\n\nclass SSLDialog extends BaseSystemSettingsDialog<SSLDialogProps> {\n render(): JSX.Element {\n const { data } = this.props;\n const { letsEncrypt } = data.native || {};\n return (\n <div style={styles.tabPanel}>\n <div\n style={{\n width: '100%',\n // height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n fontSize: 20,\n color: '#ff4949',\n }}\n >\n {this.props.t('ra_Use iobroker.acme adapter for letsencrypt certificates')}\n </div>\n <div style={styles.buttonPanel}>\n <Paper\n variant=\"outlined\"\n sx={styles.descriptionPanel}\n dangerouslySetInnerHTML={{ __html: this.props.t('letsnecrypt_help') }}\n />\n </div>\n <Grid2\n container\n spacing={6}\n >\n <Grid2 size={{ md: 3, xs: 12 }}>\n <FormControl\n variant=\"standard\"\n style={styles.formControl}\n >\n <TextField\n variant=\"standard\"\n id=\"email\"\n disabled={this.props.saving}\n label={this.props.t('Email for account:')}\n value={letsEncrypt?.email || ''}\n onChange={evt => this.onChangeText(evt, 'email')}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n endAdornment: letsEncrypt?.email ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() =>\n this.onChangeText({ target: { value: '' } }, 'email')\n }\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </FormControl>\n </Grid2>\n <Grid2 size={{ md: 3, xs: 12 }}>\n <FormControl\n variant=\"standard\"\n style={styles.formControl}\n >\n <TextField\n disabled={this.props.saving}\n variant=\"standard\"\n id=\"domains\"\n label={this.props.t('Domains:')}\n value={letsEncrypt?.domains || ''}\n onChange={evt => this.onChangeText(evt, 'domains')}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n endAdornment: letsEncrypt?.domains ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() =>\n this.onChangeText({ target: { value: '' } }, 'domains')\n }\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </FormControl>\n </Grid2>\n <Grid2 size={{ md: 3, xs: 12 }}>\n <FormControl\n variant=\"standard\"\n style={styles.formControl}\n >\n <TextField\n variant=\"standard\"\n id=\"path\"\n disabled={this.props.saving}\n label={this.props.t('Path to storage:')}\n value={letsEncrypt?.path || ''}\n onChange={evt => this.onChangeText(evt, 'path')}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n endAdornment: letsEncrypt?.path ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.onChangeText({ target: { value: '' } }, 'path')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </FormControl>\n </Grid2>\n </Grid2>\n </div>\n );\n }\n\n onChangeText(evt: { target: { value: string } }, id: 'email' | 'domains' | 'path'): void {\n const value = evt.target.value;\n this.doChange(id, value);\n }\n\n doChange(name: 'email' | 'domains' | 'path', value: string): void {\n const newData = AdminUtils.clone(this.props.data);\n newData.native.letsEncrypt = newData.native.letsEncrypt || {};\n newData.native.letsEncrypt[name] = value;\n this.props.onChange(newData);\n }\n}\n\nexport default withWidth()(SSLDialog);\n","import React, { Fragment, type JSX } from 'react';\n\nimport {\n Grid2,\n Typography,\n FormControl,\n Checkbox,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n MenuItem,\n Select,\n InputLabel,\n} from '@mui/material';\n\nimport { I18n, withWidth, type Translate } from '@iobroker/adapter-react-v5';\n\nimport { type ioBrokerObject } from '@/types';\nimport AdminUtils from '@/helpers/AdminUtils';\nimport BaseSystemSettingsDialog from './BaseSystemSettingsDialog';\n\nconst styles: Record<string, React.CSSProperties> = {\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n // backgroundColor: blueGrey[ 50 ]\n },\n buttonPanel: {\n paddingBottom: 40,\n display: 'flex',\n },\n formControl: {\n margin: 8,\n minWidth: '100%',\n },\n tableCell: {\n textAlign: 'center',\n border: '1px solid #AAA',\n paddingLeft: 0,\n paddingRight: 0,\n },\n};\n\ntype ACLOwners = {\n owner: ioBroker.ObjectIDs.User;\n ownerGroup: ioBroker.ObjectIDs.Group;\n};\n\ntype ACLRights = {\n object: number;\n state: number;\n file: number;\n};\n\ntype ACLObject = ioBrokerObject<object, { defaultNewAcl: ACLOwners & ACLRights }>;\n\ntype ACLObjectProps = {\n t: Translate;\n data: ACLObject;\n users: ioBroker.Object[];\n groups: ioBroker.Object[];\n onChange: (data: ACLObject) => void;\n saving: boolean;\n};\n\nclass ACLDialog extends BaseSystemSettingsDialog<ACLObjectProps> {\n private static permBits: [number, number][] = [\n [0x400, 0x200],\n [0x40, 0x20],\n [0x4, 0x2],\n ];\n\n static getTypes(): { type: keyof ACLRights; title: string }[] {\n return [\n {\n type: 'object',\n title: 'Object rights',\n },\n {\n type: 'state',\n title: 'States rights',\n },\n {\n type: 'file',\n title: 'File rights',\n },\n ];\n }\n\n getRights(type: keyof ACLRights): number[][] {\n const rts = this.props.data.common.defaultNewAcl[type];\n return ACLDialog.permBits.map(bitGroup => bitGroup.map(bit => rts & bit));\n }\n\n getTable(owner: keyof ACLRights): JSX.Element {\n const checks = this.getRights(owner);\n const checkboxes = checks.map((elem, index) => (\n <Fragment key={index}>\n <TableCell style={styles.tableCell}>\n <Checkbox\n disabled={this.props.saving}\n checked={!!elem[0]}\n color=\"primary\"\n onChange={() => this.handleCheck(owner, index, 0)}\n />\n </TableCell>\n <TableCell style={styles.tableCell}>\n <Checkbox\n disabled={this.props.saving}\n checked={!!elem[1]}\n color=\"primary\"\n onChange={() => this.handleCheck(owner, index, 1)}\n />\n </TableCell>\n </Fragment>\n ));\n\n return (\n <TableContainer>\n <Table\n style={styles.table}\n aria-label=\"customized table\"\n >\n <TableHead>\n <TableRow>\n <TableCell\n colSpan={2}\n style={styles.tableCell}\n >\n {this.props.t('Owner')}\n </TableCell>\n <TableCell\n colSpan={2}\n style={styles.tableCell}\n >\n {this.props.t('Group')}\n </TableCell>\n <TableCell\n colSpan={2}\n style={styles.tableCell}\n >\n {this.props.t('Everyone')}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n <TableRow>\n <TableCell style={styles.tableCell}>{this.props.t('read')}</TableCell>\n <TableCell style={styles.tableCell}>{this.props.t('write')}</TableCell>\n <TableCell style={styles.tableCell}>{this.props.t('read')}</TableCell>\n <TableCell style={styles.tableCell}>{this.props.t('write')}</TableCell>\n <TableCell style={styles.tableCell}>{this.props.t('read')}</TableCell>\n <TableCell style={styles.tableCell}>{this.props.t('write')}</TableCell>\n </TableRow>\n <TableRow>{checkboxes}</TableRow>\n </TableBody>\n </Table>\n </TableContainer>\n );\n }\n\n doChange(name: keyof ACLOwners, value: string): void {\n const newData = AdminUtils.clone(this.props.data);\n if (name === 'owner') {\n newData.common.defaultNewAcl.owner = value as ioBroker.ObjectIDs.User;\n } else if (name === 'ownerGroup') {\n newData.common.defaultNewAcl.ownerGroup = value as ioBroker.ObjectIDs.Group;\n }\n this.props.onChange(newData);\n }\n\n handleCheck(ownerType: keyof ACLRights, elemNum: number, num: number): void {\n const newData = AdminUtils.clone(this.props.data);\n newData.common.defaultNewAcl[ownerType] ^= ACLDialog.permBits[elemNum][num];\n this.props.onChange(newData);\n }\n\n render(): JSX.Element {\n const lang = I18n.getLanguage();\n const users = this.props.users.map((elem, index) => (\n <MenuItem\n value={elem._id}\n key={index}\n >\n {typeof elem.common.name === 'object'\n ? elem.common.name[lang] || elem.common.name.en\n : elem.common.name}\n </MenuItem>\n ));\n\n const groups = this.props.groups.map((elem, index) => (\n <MenuItem\n value={elem._id}\n key={index}\n >\n {typeof elem.common.name === 'object'\n ? elem.common.name[lang] || elem.common.name.en\n : elem.common.name}\n </MenuItem>\n ));\n\n const objectRights = ACLDialog.getTypes().map((ee, ii) => (\n <Grid2\n size={{ lg: 4, xs: 12, md: 6 }}\n key={ii}\n >\n <Typography\n variant=\"h6\"\n component=\"div\"\n >\n {this.props.t(ee.title)}\n </Typography>\n {this.getTable(ee.type)}\n </Grid2>\n ));\n\n return (\n <div style={styles.tabPanel}>\n <Typography\n variant=\"h5\"\n component=\"div\"\n >\n {this.props.t('Access control list')}\n </Typography>\n <Grid2\n container\n spacing={3}\n >\n <Grid2 size={{ lg: 3, xs: 12, md: 6 }}>\n <FormControl\n variant=\"standard\"\n style={styles.formControl}\n >\n <InputLabel\n shrink\n id=\"owner-label\"\n >\n {this.props.t('Owner user')}\n </InputLabel>\n <Select\n disabled={this.props.saving}\n variant=\"standard\"\n style={styles.formControl}\n id=\"owner\"\n value={this.props.data.common.defaultNewAcl.owner}\n onChange={evt => this.doChange('owner', evt.target.value)}\n displayEmpty\n inputProps={{ 'aria-label': 'users' }}\n >\n {users}\n </Select>\n </FormControl>\n </Grid2>\n <Grid2 size={{ lg: 3, xs: 12, md: 6 }}>\n <FormControl\n variant=\"standard\"\n style={styles.formControl}\n >\n <InputLabel\n shrink\n id=\"ownerGroup-label\"\n >\n {this.props.t('Owner group')}\n </InputLabel>\n <Select\n disabled={this.props.saving}\n variant=\"standard\"\n style={styles.formControl}\n id=\"ownerGroup\"\n value={this.props.data.common.defaultNewAcl.ownerGroup}\n onChange={evt => this.doChange('ownerGroup', evt.target.value)}\n displayEmpty\n inputProps={{ 'aria-label': 'ownerGroup' }}\n >\n {groups}\n </Select>\n </FormControl>\n </Grid2>\n </Grid2>\n <Grid2\n container\n spacing={3}\n >\n {objectRights}\n </Grid2>\n </div>\n );\n }\n}\n\nexport default withWidth()(ACLDialog);\n","import React, { type JSX } from 'react';\n\nimport {\n Grid2,\n Paper,\n Card,\n Typography,\n MenuItem,\n FormControl,\n Select,\n InputLabel,\n type SelectChangeEvent,\n} from '@mui/material';\n\nimport blueGrey from '@mui/material/colors/blueGrey';\n\nimport { withWidth, type Translate, type ThemeType } from '@iobroker/adapter-react-v5';\nimport AdminUtils from '@/helpers/AdminUtils';\nimport Editor from '../../components/Editor';\nimport BaseSystemSettingsDialog from './BaseSystemSettingsDialog';\n\n(window as any).ace.config.set('basePath', 'lib/js/ace');\n\nconst styles: Record<string, React.CSSProperties> = {\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n padding: 15,\n // backgroundColor: blueGrey[ 50 ]\n },\n note: {\n padding: 15,\n backgroundColor: blueGrey[500],\n color: '#FFF',\n overflow: 'auto',\n flex: 'none',\n },\n sentData: {\n padding: 15,\n },\n formControl: {\n margin: 8,\n minWidth: '100%',\n },\n descriptionPanel: {\n width: '100%',\n backgroundColor: 'transparent',\n border: 'none',\n overflow: 'auto',\n },\n selectEmpty: {\n marginTop: 16,\n },\n};\n\ninterface StatisticsDialogProps {\n t: Translate;\n data: ioBroker.SystemConfigObject;\n dataAux: Record<string, any> | null;\n themeType: ThemeType;\n onChange: (data: ioBroker.SystemConfigObject) => void;\n saving: boolean;\n handle: (type: string) => void;\n}\n\nclass StatisticsDialog extends BaseSystemSettingsDialog<StatisticsDialogProps> {\n static getTypes(): { id: string; title: string }[] {\n return [\n {\n id: 'none',\n title: 'none',\n },\n {\n id: 'normal',\n title: 'normal',\n },\n {\n id: 'no-city',\n title: 'no-city',\n },\n {\n id: 'extended',\n title: 'extended',\n },\n ];\n }\n\n getTypesSelector(): JSX.Element {\n const { common } = this.props.data;\n\n const items = StatisticsDialog.getTypes().map((elem, index) => (\n <MenuItem\n value={elem.title}\n key={index}\n >\n {this.props.t(elem.title)}\n </MenuItem>\n ));\n\n return (\n <FormControl\n variant=\"standard\"\n style={styles.formControl}\n >\n <InputLabel\n shrink\n id=\"statistics-label\"\n >\n {this.props.t('Statistics')}\n </InputLabel>\n <Select\n disabled={this.props.saving}\n variant=\"standard\"\n style={styles.formControl}\n id=\"statistics\"\n value={common.diag}\n displayEmpty\n onChange={(e: SelectChangeEvent<'none' | 'normal' | 'no-city' | 'extended'>) =>\n this.handleChangeType(e.target.value as 'none' | 'normal' | 'no-city' | 'extended')\n }\n >\n {items}\n </Select>\n </FormControl>\n );\n }\n\n doChange(name: string, value: string): void {\n const newData = AdminUtils.clone(this.props.data);\n (newData.common as Record<string, any>)[name] = value;\n this.props.onChange(newData);\n }\n\n handleChangeType = (value: 'none' | 'normal' | 'no-city' | 'extended'): void => {\n this.doChange('diag', value);\n if (this.props.handle) {\n this.props.handle(value);\n }\n };\n\n render(): JSX.Element {\n return (\n <div style={{ ...styles.tabPanel, height: '100%' }}>\n <Grid2\n container\n spacing={3}\n className=\"sendData-grid\"\n style={{ height: '100%' }}\n >\n <Grid2\n size={{ lg: 4, md: 4, xs: 12 }}\n style={{ display: 'flex', flexDirection: 'column' }}\n >\n <Card style={styles.note}>\n <Typography\n gutterBottom\n variant=\"h6\"\n component=\"div\"\n >\n {this.props.t('Note:')}\n </Typography>\n <Typography\n variant=\"body2\"\n component=\"div\"\n dangerouslySetInnerHTML={{ __html: this.props.t('diag-note') }}\n />\n </Card>\n {this.getTypesSelector()}\n {this.props.dataAux ? (\n <Paper\n variant=\"outlined\"\n style={styles.descriptionPanel}\n >\n <ul>\n {Object.keys(this.props.dataAux).map(key => (\n <li key={key}>{key}</li>\n ))}\n </ul>\n </Paper>\n ) : null}\n </Grid2>\n <Grid2\n size={{ lg: 8, md: 4, xs: 12 }}\n className=\"sendData-grid\"\n style={{ height: '100%', display: 'flex', flexDirection: 'column' }}\n >\n <Paper style={styles.sentData}>\n <Typography\n gutterBottom\n variant=\"h6\"\n component=\"div\"\n >\n {this.props.t('Sent data:')}\n </Typography>\n </Paper>\n <Editor\n editValueMode\n themeType={this.props.themeType}\n value={JSON.stringify(this.props.dataAux, null, 2)}\n />\n </Grid2>\n </Grid2>\n </div>\n );\n }\n}\n\nexport default withWidth()(StatisticsDialog);\n","import React, { Component, type JSX } from 'react';\n\nimport {\n Dialog,\n DialogActions,\n DialogContent,\n AppBar,\n Tab,\n Tabs,\n Typography,\n Button,\n LinearProgress,\n IconButton,\n Box,\n} from '@mui/material';\n\nimport { Check as CheckIcon, Close as CloseIcon } from '@mui/icons-material';\n\nimport {\n DialogConfirm,\n withWidth,\n type IobTheme,\n type Translate,\n Router,\n type AdminConnection,\n type ThemeType,\n type ThemeName,\n} from '@iobroker/adapter-react-v5';\n\nimport type { AdminGuiConfig, ioBrokerObject } from '@/types';\nimport AdminUtils from '@/helpers/AdminUtils';\nimport MainSettingsDialog from './SystemSettingsTabs/MainSettingsDialog';\nimport RepositoriesDialog, { type Repository } from './SystemSettingsTabs/RepositoriesDialog';\nimport LicensesDialog from './SystemSettingsTabs/LicensesDialog';\nimport CertificatesDialog from './SystemSettingsTabs/CertificatesDialog';\nimport SSLDialog from './SystemSettingsTabs/SSLDialog';\nimport ACLDialog from './SystemSettingsTabs/ACLDialog';\nimport StatisticsDialog from './SystemSettingsTabs/StatisticsDialog';\nimport type { BaseSystemSettingsDialogProps } from './SystemSettingsTabs/BaseSystemSettingsDialog';\n// icons\n\n// style\nimport '../assets/css/style.css';\n\nconst SOME_PASSWORD = '__SOME_PASSWORD__';\n\nconst styles: Record<string, any> = {\n tabPanel: (theme: IobTheme) => ({\n width: '100%',\n height: `calc(100% - ${theme.mixins.toolbar.minHeight}px)`,\n overflow: 'hidden',\n }),\n tab: {\n // backgroundColor:'#FFF',\n // color:lightBlue[500]\n },\n dialogTitle: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '0 0 0 20px',\n },\n dialog: {\n width: '100%',\n height: '100%',\n maxWidth: '100%',\n },\n content: {\n padding: '0 !important',\n },\n selected: (theme: IobTheme) => ({\n color: theme.palette.mode === 'dark' ? '#FFF !important' : '#222 !important',\n }),\n};\n\ntype SystemLicenseObject = ioBroker.Object & {\n name: string;\n};\n\ninterface SystemSettingsDialogProps {\n t: Translate;\n socket: AdminConnection;\n themeName: ThemeName;\n themeType: ThemeType;\n onClose: (repoChanged?: boolean) => void;\n currentTab: { id: string };\n width: string;\n adminGuiConfig: AdminGuiConfig;\n expertModeFunc: (value: boolean) => void;\n currentHost: string;\n}\n\ninterface SystemSettingsDialogState {\n loading: boolean;\n confirmExit: boolean;\n systemConfig: ioBroker.SystemConfigObject;\n systemCertificates: ioBroker.Object;\n systemRepositories: ioBroker.RepositoryObject;\n systemLicenses: ioBroker.Object;\n multipleRepos: boolean;\n licenseManager: boolean;\n host: string;\n repoInfo: Record<string, ioBroker.RepoInfo>;\n users?: ioBroker.UserObject[];\n groups?: ioBroker.GroupObject[];\n histories?: string[];\n diagData?: any;\n saving?: boolean;\n}\n\ninterface SystemSettingsDialogTab {\n id: number;\n title: string;\n component: React.FC<BaseSystemSettingsDialogProps>;\n data: string;\n name: string;\n dataAux: string;\n handle?: (type: 'none' | 'extended' | 'no-city') => void;\n socket?: AdminConnection;\n}\n\nclass SystemSettingsDialog extends Component<SystemSettingsDialogProps, SystemSettingsDialogState> {\n originalCertificates: string;\n\n originalConfig: string;\n\n originalRepositories: string;\n\n originalLicenses: string;\n\n constructor(props: SystemSettingsDialogProps) {\n super(props);\n this.state = {\n loading: true,\n confirmExit: false,\n systemConfig: null,\n systemCertificates: null,\n systemRepositories: null,\n systemLicenses: null,\n multipleRepos: false,\n licenseManager: false,\n host: '',\n repoInfo: {},\n };\n this.getSettings(/* this.state.currentHost */).catch(e => window.alert(`Cannot read settings: ${e}`));\n }\n\n async componentDidMount(): Promise<void> {\n const multipleRepos = await this.props.socket.checkFeatureSupported('CONTROLLER_MULTI_REPO');\n const licenseManager = await this.props.socket.checkFeatureSupported('CONTROLLER_LICENSE_MANAGER');\n const namespace = await this.props.socket.getCurrentInstance();\n const obj = (await this.props.socket.getObject(\n `system.adapter.${namespace}`,\n )) as any as ioBroker.InstanceObject;\n this.setState({ host: obj.common.host, multipleRepos, licenseManager });\n }\n\n async getSettings(): Promise<void> {\n const newState: Partial<SystemSettingsDialogState> = { loading: false };\n try {\n let systemRepositories = await this.props.socket.getObject('system.repositories');\n systemRepositories = AdminUtils.clone(systemRepositories);\n systemRepositories = (systemRepositories || {}) as ioBroker.RepositoryObject;\n systemRepositories.native = (systemRepositories.native || {}) as ioBroker.RepositoryObject['native'];\n systemRepositories.native.repositories = systemRepositories.native.repositories || {};\n newState.repoInfo = {};\n\n Object.keys(systemRepositories.native.repositories).forEach(repo => {\n if (systemRepositories.native.repositories[repo]) {\n if (systemRepositories.native.repositories[repo].json) {\n newState.repoInfo[repo] = systemRepositories.native.repositories[repo].json._repoInfo;\n delete systemRepositories.native.repositories[repo].json;\n }\n if (systemRepositories.native.repositories[repo].hash) {\n delete systemRepositories.native.repositories[repo].hash;\n }\n if (systemRepositories.native.repositories[repo].time) {\n delete systemRepositories.native.repositories[repo].time;\n }\n }\n });\n\n this.originalRepositories = JSON.stringify(systemRepositories);\n newState.systemRepositories = systemRepositories;\n const systemConfig = await this.props.socket.getSystemConfig(true);\n this.originalConfig = JSON.stringify(systemConfig || {});\n newState.systemConfig = systemConfig || ({} as ioBroker.SystemConfigObject);\n systemConfig.common = systemConfig.common || ({} as ioBroker.SystemConfigCommon);\n systemConfig.native = systemConfig.native || ({} as ioBroker.SystemConfigObject['native']);\n\n systemConfig.common.defaultNewAcl = systemConfig.common.defaultNewAcl || {\n object: 1636,\n state: 1636,\n file: 1632,\n owner: 'system.user.admin',\n ownerGroup: 'system.group.administrator',\n };\n\n systemConfig.common.firstDayOfWeek = systemConfig.common.firstDayOfWeek || 'monday';\n\n newState.diagData = await this.props.socket.getDiagData(this.props.currentHost, systemConfig.common.diag);\n newState.users = await this.props.socket.getUsers();\n newState.groups = await this.props.socket.getGroups();\n const instances = await this.props.socket.getAdapterInstances(true);\n newState.histories = Object.values(instances)\n .filter(instance => instance.common.getHistory)\n .map(instance => {\n const id = instance._id.split('.');\n return `${id[id.length - 2]}.${id[id.length - 1]}`;\n });\n\n const systemCertificates = await this.props.socket.getObject('system.certificates');\n this.originalCertificates = JSON.stringify(systemCertificates);\n newState.systemCertificates = systemCertificates;\n let systemLicenses: ioBroker.Object = await this.props.socket.getObject('system.licenses');\n systemLicenses =\n systemLicenses ||\n ({\n common: {\n name: 'Licenses from iobroker.net',\n },\n native: {\n login: '',\n password: '',\n licenses: [],\n },\n type: 'config',\n } as unknown as ioBroker.Object);\n if (systemLicenses.native.password) {\n systemLicenses.native.password = SOME_PASSWORD;\n }\n\n this.originalLicenses = JSON.stringify({\n login: systemLicenses.native.login,\n password: systemLicenses.native.password,\n });\n newState.systemLicenses = systemLicenses;\n this.setState(newState as SystemSettingsDialogState);\n } catch (e) {\n window.alert(`Cannot read settings: ${e}`);\n }\n }\n\n renderDialogConfirm(): JSX.Element | null {\n if (this.state.confirmExit) {\n return (\n <DialogConfirm\n text={this.props.t('Discard unsaved changes?')}\n onClose={result => this.setState({ confirmExit: false }, () => result && this.props.onClose())}\n />\n );\n }\n return null;\n }\n\n onSave(): void {\n let repoChanged = false;\n this.setState({ saving: true }, async () => {\n try {\n let systemConfig = await this.props.socket.getSystemConfig(true);\n systemConfig = systemConfig || ({} as ioBroker.SystemConfigObject);\n if (JSON.stringify(systemConfig.common) !== JSON.stringify(this.state.systemConfig.common)) {\n await this.props.socket.setSystemConfig(this.state.systemConfig);\n }\n await this.props.socket.setObject('system.certificates', this.state.systemCertificates);\n\n let systemRepositories = await this.props.socket.getObject('system.repositories');\n systemRepositories = systemRepositories || ({} as ioBroker.RepositoryObject);\n systemRepositories.native = systemRepositories.native || ({} as ioBroker.RepositoryObject['native']);\n systemRepositories.native.repositories = systemRepositories.native.repositories || {};\n const newRepo = JSON.parse(JSON.stringify(this.state.systemRepositories.native.repositories));\n\n // merge new and existing info\n Object.keys(newRepo).forEach(repo => {\n if (systemRepositories.native.repositories[repo]) {\n if (systemRepositories.native.repositories[repo].json) {\n newRepo[repo].json = systemRepositories.native.repositories[repo].json;\n }\n if (systemRepositories.native.repositories[repo].hash) {\n newRepo[repo].hash = systemRepositories.native.repositories[repo].hash;\n }\n if (systemRepositories.native.repositories[repo].time) {\n newRepo[repo].time = systemRepositories.native.repositories[repo].time;\n }\n }\n });\n if (JSON.stringify(this.state.systemRepositories.native.repositories) !== JSON.stringify(newRepo)) {\n systemRepositories.native.repositories = newRepo;\n repoChanged = true;\n await this.props.socket.setObject('system.repositories', systemRepositories);\n }\n\n let systemLicenses = (await this.props.socket.getObject('system.licenses')) as SystemLicenseObject;\n systemLicenses = systemLicenses || ({} as SystemLicenseObject);\n systemLicenses.type = systemLicenses.type || 'config';\n systemLicenses.name = systemLicenses.name || 'Licenses from iobroker.net';\n systemLicenses.common = systemLicenses.common || ({} as SystemLicenseObject['common']);\n systemLicenses.native = systemLicenses.native || ({} as SystemLicenseObject['native']);\n systemLicenses.native.licenses = systemLicenses.native.licenses || [];\n systemLicenses.native.password = systemLicenses.native.password || '';\n systemLicenses.native.login = systemLicenses.native.login || '';\n\n const currentPassword = systemLicenses.native.password ? SOME_PASSWORD : '';\n\n if (\n this.state.systemLicenses.native.password !== currentPassword ||\n systemLicenses.native.login !== this.state.systemLicenses.native.login\n ) {\n systemLicenses.native.login = this.state.systemLicenses.native.login;\n\n if (\n this.state.systemLicenses.native.password !== SOME_PASSWORD &&\n this.state.systemLicenses.native.password\n ) {\n // encode it\n try {\n systemLicenses.native.password = await this.props.socket.encrypt(\n this.state.systemLicenses.native.password,\n );\n } catch (error) {\n window.alert(this.props.t('Cannot update licenses: %s', error));\n }\n } else if (!this.state.systemLicenses.native.password) {\n systemLicenses.native.password = '';\n }\n try {\n await this.props.socket.setObject('system.licenses', systemLicenses);\n await this.props.socket.updateLicenses(null, null);\n } catch (error) {\n window.alert(this.props.t('Cannot update licenses: %s', error));\n }\n }\n\n // this.getSettings();\n alert(this.props.t('Settings saved'));\n this.props.onClose(repoChanged);\n if (this.state.systemConfig.common.expertMode !== JSON.parse(this.originalConfig).common.expertMode) {\n this.props.expertModeFunc(this.state.systemConfig.common.expertMode);\n }\n if (\n this.state.systemConfig.common.language !== JSON.parse(this.originalConfig).common.language ||\n JSON.stringify(this.state.systemConfig.common.activeRepo) !==\n JSON.stringify(JSON.parse(this.originalConfig).common.activeRepo)\n ) {\n window.location.reload();\n }\n this.setState({ saving: false });\n } catch (e) {\n window.alert(`Cannot save system configuration: ${e}`);\n }\n });\n }\n\n getTabs(): SystemSettingsDialogTab[] {\n return [\n {\n id: 0,\n title: 'System settings',\n component: MainSettingsDialog,\n data: 'systemConfig',\n name: 'tabConfig',\n dataAux: 'systemRepositories',\n handle: null,\n },\n {\n id: 1,\n title: 'Repositories',\n component: RepositoriesDialog,\n data: 'systemRepositories',\n name: 'tabRepositories',\n dataAux: 'systemConfig',\n handle: null,\n socket: this.props.socket,\n },\n {\n id: 2,\n title: 'Licenses',\n component: LicensesDialog,\n data: 'systemLicenses',\n name: 'tabLicenses',\n dataAux: null,\n handle: null,\n socket: this.props.socket,\n },\n {\n id: 3,\n title: 'Certificates',\n component: CertificatesDialog,\n data: 'systemCertificates',\n name: 'tabCertificates',\n dataAux: null,\n handle: null,\n },\n {\n id: 4,\n title: \"Let's encrypt SSL\",\n component: SSLDialog,\n data: 'systemCertificates',\n name: 'tabLetsEncrypt',\n dataAux: null,\n handle: null,\n },\n {\n id: 5,\n title: 'Default ACL',\n component: ACLDialog,\n data: 'systemConfig',\n name: 'tabDefaultACL',\n dataAux: null,\n handle: null,\n },\n {\n id: 6,\n title: 'Statistics',\n component: StatisticsDialog,\n data: 'systemConfig',\n dataAux: 'diagData',\n name: 'tabStatistics',\n handle: type => this.onChangeDiagType(type),\n },\n ];\n }\n\n onChangeDiagType = (type: 'none' | 'extended' | 'no-city'): void => {\n void this.props.socket.getDiagData(this.props.currentHost, type).then(diagData =>\n this.setState({\n diagData,\n systemConfig: {\n ...this.state.systemConfig,\n common: {\n ...this.state.systemConfig.common,\n diag: type,\n },\n },\n }),\n );\n };\n\n getDialogContent(tabsList: SystemSettingsDialogTab[]): JSX.Element {\n if (this.state.loading) {\n return <LinearProgress />;\n }\n\n const tab = tabsList.find(t => t.name === this.props.currentTab.id) || tabsList[0];\n\n const MyComponent: React.FC<BaseSystemSettingsDialogProps> = tab.component;\n const { groups, users, histories } = this.state;\n return (\n <Box\n component=\"div\"\n sx={styles.tabPanel}\n >\n <MyComponent\n adminGuiConfig={this.props.adminGuiConfig}\n onChange={(data: any, dataAux: any, cb: () => void) =>\n this.onChangedTab(tab.data, data, tab.dataAux, dataAux, cb)\n }\n data={this.state[tab.data as keyof SystemSettingsDialogState]}\n dataAux={this.state[tab.dataAux as keyof SystemSettingsDialogState]}\n handle={tab.handle}\n users={users}\n groups={groups}\n multipleRepos={this.state.multipleRepos}\n activeRepo={this.state.systemConfig.common.activeRepo}\n repoInfo={this.state.repoInfo}\n histories={histories}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n host={this.state.host}\n t={this.props.t}\n socket={this.props.socket}\n saving={this.state.saving}\n />\n </Box>\n );\n }\n\n static onTabChanged = (newTab: string): void => {\n Router.doNavigate(null, 'system', newTab);\n };\n\n onChangedTab(id: any, data: any, idAux: any, dataAux: any, cb: () => void): void {\n if (data || dataAux) {\n const state: SystemSettingsDialogState = { ...this.state };\n if (data) {\n (state as any)[id] = data;\n }\n if (dataAux) {\n (state as any)[idAux] = dataAux;\n }\n this.setState(state, () => cb && cb());\n }\n }\n\n static ifRepoError(data: ioBrokerObject<{ repositories: Repository }>): boolean {\n if (!data?.native?.repositories) {\n return false;\n }\n const invalidKey = Object.keys(data.native.repositories).find((key: string) => {\n return !key || key.trimStart() !== key || (key.length < 3 && !!key.match(/^\\d+$/));\n });\n return invalidKey !== undefined;\n }\n\n render(): JSX.Element {\n const changed = !(\n JSON.stringify(this.state.systemRepositories) === this.originalRepositories &&\n JSON.stringify(this.state.systemConfig) === this.originalConfig &&\n JSON.stringify(this.state.systemCertificates) === this.originalCertificates &&\n JSON.stringify({\n login: this.state.systemLicenses.native.login,\n password: this.state.systemLicenses.native.password,\n }) === this.originalLicenses\n );\n\n let tabError = false;\n if (this.props.currentTab.id === 'tabRepositories') {\n tabError = SystemSettingsDialog.ifRepoError(this.state.systemRepositories);\n }\n\n const tabsList = this.getTabs().filter(tab => {\n if (!this.state.licenseManager && tab.name === 'tabLicenses') {\n return false;\n }\n return this.props.adminGuiConfig.admin.settings[tab.name] !== false;\n });\n\n console.log(`get state: ${tabError}`);\n const tabs = tabsList.map(tab => (\n <Tab\n key={tab.title}\n label={this.props.t(tab.title)}\n value={tab.name}\n disabled={tabError && tab.name !== (this.props.currentTab.id || 'tabConfig')}\n sx={{ '&.Mui-selected': styles.selected }}\n />\n ));\n\n return (\n <Dialog\n sx={{\n '&.MuiDialog-root': styles.dialog,\n '& .MuiDialog-paper': {\n height: 'calc(100% - 64px)',\n width: 'calc(100% - 64px)',\n maxWidth: 'calc(100% - 64px)',\n },\n }}\n open={!0}\n onClose={(_e, reason) => {\n if (reason !== 'backdropClick' && reason !== 'escapeKeyDown') {\n if (changed) {\n this.setState({ confirmExit: true });\n } else {\n this.props.onClose();\n }\n }\n }}\n fullWidth\n fullScreen={false}\n aria-labelledby=\"system-settings-dialog-title\"\n >\n <DialogContent style={styles.content}>\n <AppBar\n position=\"static\"\n color=\"default\"\n >\n <div style={styles.dialogTitle}>\n {this.props.width !== 'xs' && this.props.width !== 'sm' && (\n <Typography className=\"dialogName\">{this.props.t('Base settings')}</Typography>\n )}\n <Tabs\n style={styles.tab}\n indicatorColor=\"secondary\"\n value={this.props.currentTab.id || 'tabConfig'}\n onChange={(_event, newTab: string) => SystemSettingsDialog.onTabChanged(newTab)}\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n >\n {tabs}\n </Tabs>\n <IconButton\n size=\"large\"\n disabled={this.state.saving}\n edge=\"start\"\n color=\"inherit\"\n onClick={() => (changed ? this.setState({ confirmExit: true }) : this.props.onClose())}\n aria-label=\"close\"\n >\n <CloseIcon />\n </IconButton>\n </div>\n </AppBar>\n {this.getDialogContent(tabsList)}\n {this.renderDialogConfirm()}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n disabled={!changed || this.state.saving || tabError}\n onClick={() => this.onSave()}\n color=\"primary\"\n startIcon={<CheckIcon />}\n >\n {this.props.t('Save & Close')}\n </Button>\n <Button\n variant=\"contained\"\n disabled={this.state.saving}\n onClick={() => (changed ? this.setState({ confirmExit: true }) : this.props.onClose())}\n startIcon={<CloseIcon />}\n color=\"grey\"\n >\n {changed ? this.props.t('Cancel') : this.props.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default withWidth()(SystemSettingsDialog);\n","import React, { Component, type JSX } from 'react';\n\nimport {\n Avatar,\n Box,\n Button,\n Checkbox,\n CircularProgress,\n FormControlLabel,\n Grid2,\n Link,\n Paper,\n TextField,\n Typography,\n} from '@mui/material';\n\nimport { type IobTheme, type Translate, withWidth } from '@iobroker/adapter-react-v5';\n\nconst boxShadow = '0 4px 7px 5px rgb(0 0 0 / 14%), 0 3px 1px 1px rgb(0 0 0 / 12%), 0 1px 5px 0 rgb(0 0 0 / 20%)';\n\nconst styles: Record<string, any> = {\n root: {\n padding: 10,\n margin: 'auto',\n display: 'flex',\n height: '100%',\n alignItems: 'center',\n borderRadius: 0,\n justifyContent: 'center',\n },\n paper: (theme: IobTheme) => ({\n backgroundColor: theme.palette.background.paper + (theme.palette.background.paper.length < 7 ? 'd' : 'dd'),\n p: '24px',\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n maxHeight: 500,\n maxWidth: 380,\n boxShadow,\n }),\n avatar: {\n margin: 8,\n backgroundColor: '#fff',\n width: 100,\n height: 100,\n },\n avatarImg: {\n width: 'calc(100% - 4px)',\n height: 'calc(100% - 4px)',\n padding: 2,\n },\n form: {\n width: '100%', // Fix IE 11 issue.\n marginTop: 8,\n },\n submit: {\n margin: 8,\n },\n alert: {\n marginTop: 16,\n backgroundColor: '#f44336',\n padding: 8,\n color: '#fff',\n borderRadius: 4,\n fontSize: 16,\n },\n ioBrokerLink: {\n textTransform: 'inherit',\n },\n marginTop: {\n marginTop: 'auto',\n },\n progress: {\n textAlign: 'center',\n },\n};\n\ndeclare global {\n interface Window {\n loginBackgroundColor: string;\n loginBackgroundImage: string;\n loginLink: string;\n loginMotto: string;\n login: string;\n loginLogo: string;\n loginHideLogo: string;\n loginTitle: string;\n }\n}\n\ninterface LoginProps {\n t: Translate;\n}\n\ninterface LoginState {\n inProcess: boolean;\n}\n\nclass Login extends Component<LoginProps, LoginState> {\n private readonly formRef: React.RefObject<HTMLFormElement>;\n\n constructor(props: LoginProps) {\n super(props);\n\n this.state = {\n inProcess: false,\n };\n\n this.formRef = React.createRef();\n\n // apply image\n const body = window.document.body;\n body.style.backgroundColor = window.loginBackgroundColor;\n body.style.backgroundImage = window.loginBackgroundImage;\n body.style.backgroundSize = 'cover';\n }\n\n render(): JSX.Element {\n const action = `${window.location.port === '3000' ? `${window.location.protocol}//${window.location.hostname}:8081/` : ''}login?${window.location.port === '3000' ? 'dev&' : ''}href=${window.location.hash}`;\n\n const link =\n window.loginLink && window.loginLink !== '@@loginLink@@' ? window.loginLink : 'https://www.iobroker.net/';\n const motto =\n window.loginMotto && window.loginMotto !== '@@loginMotto@@' ? window.loginMotto : 'Discover awesome. ';\n\n if (window.login !== 'true') {\n // eslint-disable-next-line no-debugger\n debugger;\n window.location.href = `${window.location.protocol}//${window.location.host}${window.location.pathname}`;\n }\n const style =\n (window.loginBackgroundColor && window.loginBackgroundColor !== 'inherit') || window.loginBackgroundImage\n ? { background: '#00000000' }\n : {};\n\n return (\n <Paper\n component=\"main\"\n style={{ ...styles.root, ...style }}\n >\n <Paper sx={styles.paper}>\n <Grid2\n container\n direction=\"column\"\n alignItems=\"center\"\n >\n {window.loginLogo && window.loginLogo !== '@@loginLogo@@' ? (\n <div\n style={{\n height: 50,\n width: 102,\n lineHeight: '50px',\n background: 'white',\n borderRadius: 5,\n padding: 5,\n }}\n >\n <img\n src={window.loginLogo}\n alt=\"logo\"\n style={{ maxWidth: '100%', maxHeight: '100%' }}\n />\n </div>\n ) : (\n window.loginHideLogo === 'false' && (\n <Avatar\n style={styles.avatar}\n src=\"img/logo.png\"\n sx={{ '& .MuiAvatar-img': styles.avatarImg }}\n />\n )\n )}\n <Typography\n component=\"h1\"\n variant=\"h5\"\n >\n {window.loginTitle && window.loginTitle !== '@@loginTitle@@'\n ? window.loginTitle\n : this.props.t('loginTitle')}\n </Typography>\n {window.location.search.includes('error') && (\n <div style={styles.alert}>{this.props.t('wrongPassword')}</div>\n )}\n <form\n ref={this.formRef}\n style={styles.form}\n action={action}\n method=\"post\"\n >\n <TextField\n variant=\"outlined\"\n margin=\"normal\"\n disabled={this.state.inProcess}\n required\n fullWidth\n size=\"small\"\n id=\"username\"\n label={this.props.t('enterLogin')}\n name=\"username\"\n autoComplete=\"username\"\n autoFocus\n />\n <TextField\n variant=\"outlined\"\n margin=\"normal\"\n disabled={this.state.inProcess}\n required\n fullWidth\n size=\"small\"\n name=\"password\"\n label={this.props.t('enterPassword')}\n type=\"password\"\n id=\"password\"\n autoComplete=\"current-password\"\n />\n <FormControlLabel\n control={\n <Checkbox\n id=\"stayloggedin\"\n name=\"stayloggedin\"\n value=\"on\"\n color=\"primary\"\n disabled={this.state.inProcess}\n />\n }\n label={this.props.t('Stay signed in')}\n />\n <input\n id=\"origin\"\n type=\"hidden\"\n name=\"origin\"\n value={window.location.pathname + window.location.search.replace('&error', '')}\n />\n {\n <Button\n type=\"submit\"\n disabled={this.state.inProcess}\n onClick={() => {\n this.formRef.current.submit();\n // give time to firefox to send the data\n setTimeout(() => this.setState({ inProcess: true }), 50);\n }}\n fullWidth\n variant=\"contained\"\n color=\"primary\"\n style={styles.submit}\n >\n {this.state.inProcess ? <CircularProgress size={24} /> : this.props.t('login')}\n </Button>\n }\n </form>\n </Grid2>\n <Box style={styles.marginTop}>\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n align=\"center\"\n >\n {window.loginLink && window.loginLink !== '@@loginLink@@' ? (\n <Link\n style={styles.ioBrokerLink}\n color=\"inherit\"\n href={link}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n {motto}\n </Link>\n ) : null}\n {!window.loginLink || window.loginLink === '@@loginLink@@' ? motto : null}\n {!window.loginLink || window.loginLink === '@@loginLink@@' ? (\n <Link\n style={styles.ioBrokerLink}\n color=\"inherit\"\n href={link}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n ioBroker\n </Link>\n ) : null}\n </Typography>\n </Box>\n </Paper>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(Login);\n","import React, { useState, type JSX } from 'react';\n\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n FormControlLabel,\n Checkbox,\n Grid2,\n DialogTitle,\n IconButton,\n Typography,\n Box,\n} from '@mui/material';\nimport { Build as BuildIcon, Check as CheckIcon } from '@mui/icons-material';\n\nimport { I18n, IconExpert, type IobTheme } from '@iobroker/adapter-react-v5';\n\nconst styles: Record<string, any> = {\n root: (theme: IobTheme) => ({\n backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: 'auto',\n display: 'flex',\n borderRadius: 4,\n fontSize: 16,\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif',\n }),\n paper: {\n maxWidth: 800,\n },\n overflowHidden: {\n display: 'flex',\n },\n pre: {\n overflow: 'auto',\n margin: 20,\n },\n text: {\n fontSize: 16,\n },\n textBold: {\n fontSize: 16,\n fontWeight: 'bold',\n },\n width100: {\n width: '100%',\n },\n};\n\ninterface ExpertModeDialogProps {\n expertMode: boolean;\n onClose: (result?: string | boolean) => void;\n}\n\nconst ExpertModeDialog: React.FC<ExpertModeDialogProps> = ({\n expertMode,\n onClose,\n}: ExpertModeDialogProps): JSX.Element => {\n const [doNotShow, setDoNotShow] = useState(false);\n\n return (\n <Dialog\n onClose={() => onClose()}\n open={!0}\n sx={{ '& .MuiDialog-paper': styles.paper }}\n >\n <DialogTitle>\n <IconExpert style={{ marginRight: 8 }} />\n {I18n.t('Expert mode')}\n </DialogTitle>\n <DialogContent\n style={styles.overflowHidden}\n dividers\n >\n <Grid2 container>\n <Grid2 style={styles.width100}>\n <Box\n component=\"div\"\n sx={styles.root}\n >\n <div style={styles.pre}>\n <Typography\n style={styles.text}\n variant=\"body2\"\n component=\"p\"\n >\n {expertMode\n ? I18n.t(\n 'Now the expert mode will be deactivated only during this browser session.',\n )\n : I18n.t(\n 'Now the expert mode will be active only during this browser session.',\n )}\n </Typography>\n {!expertMode ? (\n <Typography\n style={styles.textBold}\n variant=\"body2\"\n component=\"p\"\n >\n {I18n.t('The expert mode allows you to view and edit system internal details.')}\n </Typography>\n ) : null}\n {!expertMode ? (\n <Typography\n style={styles.textBold}\n variant=\"body2\"\n component=\"p\"\n >\n {I18n.t('Please make sure you know what you are doing!')}\n </Typography>\n ) : null}\n <Typography\n style={styles.text}\n variant=\"body2\"\n component=\"p\"\n >\n {I18n.t(\n 'If you need to save the mode all the time, you can do this in the system settings.',\n )}\n </Typography>\n {I18n.t('Use this button:')}\n <IconButton\n color=\"primary\"\n size=\"small\"\n onClick={() => onClose('openSettings')}\n >\n <BuildIcon />\n </IconButton>\n </div>\n </Box>\n </Grid2>\n <Grid2>\n <FormControlLabel\n control={\n <Checkbox\n id=\"expert-mode-do-not-show\"\n checked={doNotShow}\n onChange={e => setDoNotShow(e.target.checked)}\n />\n }\n label={I18n.t('Do not show this dialog in this browser session any more')}\n />\n </Grid2>\n </Grid2>\n </DialogContent>\n <DialogActions>\n <Button\n id=\"expert-mode-dialog-ok\"\n variant=\"contained\"\n autoFocus\n onClick={() => {\n if (doNotShow) {\n (((window as any)._sessionStorage as Storage) || window.sessionStorage).setItem(\n 'App.doNotShowExpertDialog',\n 'true',\n );\n }\n onClose(true);\n }}\n color=\"primary\"\n startIcon={<CheckIcon />}\n >\n {I18n.t('Ok')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default ExpertModeDialog;\n","import React, { useState, type JSX } from 'react';\n\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n Accordion,\n AccordionDetails,\n AccordionSummary,\n AppBar,\n Box,\n CardMedia,\n Tab,\n Tabs,\n Typography,\n} from '@mui/material';\n\nimport {\n Update as UpdateIcon,\n SettingsRemote as SettingsRemoteIcon,\n Cancel as CancelIcon,\n CancelPresentation as CancelPresentationIcon,\n PermDeviceInformation as PermDeviceInformationIcon,\n ImportExport as ImportExportIcon,\n Warning as WarningIcon,\n Notifications as BellIcon,\n Info as InfoIcon,\n Memory as MemoryIcon,\n ExpandMore as ExpandMoreIcon,\n Check as CheckIcon,\n Close as CloseIcon,\n} from '@mui/icons-material';\n\nimport { I18n, Utils, type ThemeType, type IobTheme } from '@iobroker/adapter-react-v5';\n\nconst styles: Record<string, any> = {\n root: (theme: IobTheme) => ({\n backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: 'auto',\n display: 'flex',\n borderRadius: '4px',\n flexDirection: 'column',\n }),\n paper: {\n maxWidth: 1000,\n width: '100%',\n },\n flex: {\n display: 'flex',\n },\n overflowHidden: {\n overflow: 'hidden',\n },\n overflowAuto: {\n overflowY: 'auto',\n },\n message: {\n justifyContent: 'space-between',\n display: 'flex',\n width: '100%',\n alignItems: 'center',\n '@media screen and (max-width: 550px)': {\n flexWrap: 'wrap',\n },\n },\n column: {\n flexDirection: 'column',\n },\n headerText: (theme: IobTheme) => ({\n fontWeight: 'bold',\n fontSize: 20,\n color: theme.palette.mode === 'dark' ? '#DDD' : '#111',\n }),\n descriptionHeaderText: (theme: IobTheme) => ({\n margin: '18px 0',\n color: theme.palette.mode === 'dark' ? '#CCC' : '#222',\n }),\n silver: {\n color: 'silver',\n '@media screen and (max-width: 550px)': {\n fontSize: '2.9vw',\n },\n },\n button: {\n paddingTop: 18,\n paddingBottom: 5,\n position: 'sticky',\n bottom: 0,\n background: 'white',\n zIndex: 3,\n },\n terminal: {\n fontFamily: 'monospace',\n fontSize: 14,\n ml: '20px',\n whiteSpace: 'pre-wrap',\n '@media screen and (max-width: 550px)': {\n fontSize: '2.9vw',\n marginLeft: 0,\n },\n },\n img2: {\n width: 25,\n height: 25,\n mr: '10px',\n margin: 'auto 0',\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n },\n },\n heading: {\n display: 'flex',\n alignItems: 'center',\n overflow: 'hidden',\n },\n headingTop: {\n display: 'flex',\n alignItems: 'center',\n },\n classNameBox: {\n margin: 8,\n p: '24px',\n '@media screen and (max-width: 550px)': {\n p: '10px',\n },\n },\n textStyle: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n '@media screen and (max-width: 550px)': {\n fontSize: '2.9vw',\n },\n },\n content: {\n overflow: 'hidden',\n },\n buttonStyle: {\n margin: '3px',\n '@media screen and (max-width: 550px)': {\n fontSize: '2.9vw',\n },\n },\n};\n\n/** Possible message severities */\ntype Severity = 'notify' | 'info' | 'alert';\n\ninterface StatusOptions {\n /** Id of the message */\n name: string;\n /** Severity of the message */\n severity?: Severity;\n}\n\nconst Status = ({ name, severity, ...props }: StatusOptions): JSX.Element => {\n switch (name) {\n case 'restartLoop':\n return (\n <UpdateIcon\n style={{ color: '#ffca00' }}\n {...props}\n />\n );\n case 'memIssues':\n return (\n <MemoryIcon\n style={{ color: '#ffca00' }}\n {...props}\n />\n );\n case 'fsIoErrors':\n return (\n <ImportExportIcon\n style={{ color: '#ffca00' }}\n {...props}\n />\n );\n case 'noDiskSpace':\n return (\n <PermDeviceInformationIcon\n style={{ color: '#ffca00' }}\n {...props}\n />\n );\n case 'accessErrors':\n return (\n <CancelPresentationIcon\n style={{ color: '#ffca00' }}\n {...props}\n />\n );\n case 'nonExistingFileErrors':\n return (\n <CancelIcon\n style={{ color: '#ffca00' }}\n {...props}\n />\n );\n case 'remoteHostErrors':\n return (\n <SettingsRemoteIcon\n style={{ color: '#ffca00' }}\n {...props}\n />\n );\n case 'heading':\n return (\n <BellIcon\n sx={{\n fontSize: 36,\n marginLeft: 4,\n marginRight: 2,\n }}\n {...props}\n />\n );\n\n default:\n if (severity === 'notify') {\n return (\n <BellIcon\n color=\"primary\"\n {...props}\n />\n );\n }\n\n if (severity === 'info') {\n return (\n <InfoIcon\n color=\"info\"\n {...props}\n />\n );\n }\n\n return (\n <WarningIcon\n style={{ color: '#ffca00' }}\n {...props}\n />\n );\n }\n};\n\nfunction a11yProps(index: number): { id: string; 'aria-controls': string } {\n return {\n id: `scrollable-force-tab-${index}`,\n 'aria-controls': `scrollable-force-tabpanel-${index}`,\n };\n}\n\ninterface TabPanelOptions {\n value: number;\n index: number;\n styleDiv: React.CSSProperties;\n sxBox: Record<string, any>;\n children: JSX.Element;\n}\n\nconst TabPanel = ({ children, value, index, styleDiv, sxBox, ...other }: TabPanelOptions): JSX.Element => (\n <div\n role=\"tabpanel\"\n hidden={value !== index}\n id={`scrollable-force-tabpanel-${index}`}\n aria-labelledby={`scrollable-force-tab-${index}`}\n style={styleDiv}\n {...other}\n >\n {value === index && (\n <Box style={sxBox}>\n <Typography component=\"div\">{children}</Typography>\n </Box>\n )}\n </div>\n);\n\ninterface InstanceMessage {\n messages: {\n message: string;\n ts: number;\n }[];\n}\n\ninterface Message {\n name: ioBroker.Translated;\n severity: Severity;\n description: ioBroker.Translated;\n instances: Record<string, InstanceMessage>;\n}\n\ninterface HostWarningDialogOptions {\n messages: Record<string, Message>;\n onClose: () => void;\n ackCallback: (name: string) => void;\n dateFormat: string;\n themeType: ThemeType;\n instances: any;\n}\n\nconst HostWarningDialog = ({\n messages,\n onClose,\n ackCallback,\n dateFormat,\n themeType,\n instances,\n}: HostWarningDialogOptions): JSX.Element => {\n const [value, setValue] = useState(0);\n const [disabled, setDisabled] = useState<string[]>([]);\n const [expanded, setExpanded] = useState('');\n const [autoCollapse, setAutoCollapse] = useState(true);\n\n const handleChange = (event: unknown, newValue: number): void => {\n setAutoCollapse(true);\n setValue(newValue);\n setExpanded('');\n };\n\n const handleChangeAccordion =\n (panel: string) =>\n (_event: unknown, isExpanded: boolean): void =>\n setExpanded(isExpanded ? panel : '');\n\n const dark = themeType === 'dark';\n\n return (\n <Dialog\n onClose={() => onClose()}\n open={!0}\n sx={{ '& .MuiDialog-paper': styles.paper }}\n >\n <h2 style={styles.headingTop}>\n <Status name=\"heading\" />\n {I18n.t('Host-specific notifications')}\n </h2>\n <DialogContent\n style={{ ...styles.flex, ...styles.overflowHidden }}\n dividers\n >\n <Box\n component=\"div\"\n sx={styles.root}\n >\n <AppBar\n position=\"static\"\n color=\"default\"\n >\n <Tabs\n value={value}\n onChange={handleChange}\n variant=\"scrollable\"\n scrollButtons\n indicatorColor={dark ? 'primary' : 'secondary'}\n textColor=\"primary\"\n >\n {Object.entries(messages).map(([name, entry], idx) => (\n <Tab\n style={dark ? { color: 'white' } : { color: 'black' }}\n disabled={disabled.includes(name)}\n key={name}\n label={entry.name[I18n.getLanguage()]}\n icon={\n <Status\n name={name}\n severity={entry.severity}\n />\n }\n {...a11yProps(idx)}\n />\n ))}\n </Tabs>\n </AppBar>\n {Object.keys(messages).map((name, idx) => (\n <TabPanel\n sxBox={styles.classNameBox}\n key={`tabPanel-${name}`}\n styleDiv={{ ...styles.overflowAuto, color: dark ? 'black' : undefined }}\n value={value}\n index={idx}\n >\n <div>\n <Box\n component=\"div\"\n sx={styles.headerText}\n style={{ fontWeight: 'bold' }}\n >\n {messages[name].name[I18n.getLanguage()]}\n </Box>\n <Box\n component=\"div\"\n sx={styles.descriptionHeaderText}\n >\n {messages[name].description[I18n.getLanguage()]}\n </Box>\n <div>\n {messages[name].instances\n ? Object.keys(messages[name].instances).map(nameInst => {\n const index = Object.keys(messages).indexOf(name);\n\n if (autoCollapse && value === index) {\n handleChangeAccordion(`${name}-${nameInst}`)('', true);\n setAutoCollapse(false);\n }\n\n const currentInstance = instances && instances[nameInst];\n let icon = 'img/no-image.png';\n if (currentInstance?.common?.icon && currentInstance?.common?.name) {\n icon = `adapter/${currentInstance.common.name}/${currentInstance.common.icon}`;\n }\n return (\n <Accordion\n style={dark ? undefined : { background: '#c0c0c052' }}\n key={nameInst}\n expanded={expanded === `${name}-${nameInst}`}\n onChange={handleChangeAccordion(`${name}-${nameInst}`)}\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n sx={{ '& .MuiAccordionSummary-content': styles.content }}\n aria-controls=\"panel1bh-content\"\n id=\"panel1bh-header\"\n >\n <Typography style={styles.heading}>\n <CardMedia\n sx={styles.img2}\n component=\"img\"\n image={icon}\n />\n <Box\n component=\"div\"\n sx={styles.textStyle}\n >\n {nameInst.replace(/^system\\.adapter\\./, '')}\n </Box>\n </Typography>\n </AccordionSummary>\n <AccordionDetails style={styles.column}>\n {messages[name].instances[nameInst].messages.map(msg => (\n <Typography\n key={msg.ts}\n component=\"div\"\n sx={styles.message}\n >\n <Box\n component=\"div\"\n sx={styles.terminal}\n >\n {Utils.renderTextWithA(msg.message)}\n </Box>\n <Box\n component=\"div\"\n sx={styles.silver}\n >\n {Utils.formatDate(new Date(msg.ts), dateFormat)}\n </Box>\n </Typography>\n ))}\n </AccordionDetails>\n </Accordion>\n );\n })\n : null}\n </div>\n <div style={styles.button}>\n <Button\n variant=\"contained\"\n autoFocus={Object.keys(messages).length !== 1}\n disabled={disabled.includes(name)}\n style={disabled.includes(name) ? { background: 'silver' } : undefined}\n sx={styles.buttonStyle}\n onClick={() => {\n ackCallback(name);\n setDisabled([...disabled, name]);\n }}\n color={Object.keys(messages).length !== 1 ? 'primary' : 'grey'}\n startIcon={<CheckIcon />}\n >\n {I18n.t('Acknowledge')}\n </Button>\n {Object.keys(messages).length === 1 && (\n <Button\n variant=\"contained\"\n disabled={disabled.includes(name)}\n sx={styles.buttonStyle}\n style={disabled.includes(name) ? { background: 'silver' } : undefined}\n onClick={() => {\n setDisabled([...disabled, name]);\n ackCallback(name);\n onClose();\n }}\n startIcon={\n <>\n <CheckIcon />\n <CloseIcon />\n </>\n }\n color=\"primary\"\n >\n {I18n.t('Acknowledge & close')}\n </Button>\n )}\n </div>\n </div>\n </TabPanel>\n ))}\n </Box>\n </DialogContent>\n <DialogActions>\n <Button\n id=\"host-warning-dialog-ok\"\n variant=\"contained\"\n onClick={() => onClose()}\n startIcon={<CloseIcon />}\n color=\"grey\"\n >\n {I18n.t('Ok')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default HostWarningDialog;\n","import { type AdminConnection } from '@iobroker/adapter-react-v5';\nimport AdminUtils, { type Style } from '../helpers/AdminUtils';\n\ninterface LogLine {\n severity: string;\n ts: number;\n message: string | { original: string; parts: { text: string; style: Style }[] };\n from: string;\n _id: number;\n}\n\nexport interface LogLineSaved extends LogLine {\n key?: number;\n}\n\nexport default class LogsWorker {\n private readonly socket: AdminConnection;\n\n private readonly handlers: ((events: LogLineSaved[], messageSize: number) => void)[];\n\n private promise: Promise<{ logs: LogLineSaved[]; logSize: number }> | null;\n\n private connected: boolean;\n\n private logs: LogLineSaved[] | null;\n\n private newLogs: LogLineSaved[] | null;\n\n private errorCountHandlers: ((errors: number) => void)[];\n\n private warningCountHandlers: ((warnings: number) => void)[];\n\n private countErrors: boolean;\n\n private countWarnings: boolean;\n\n private errors: number;\n\n private warnings: number;\n\n private currentHost: string;\n\n private readonly maxLogs: number;\n\n private readonly isSafari: boolean;\n\n private logTimeout: ReturnType<typeof setTimeout> | null;\n\n private logSize: number;\n\n constructor(socket: AdminConnection, maxLogs?: number) {\n this.socket = socket;\n this.handlers = [];\n this.promise = null;\n\n this.errorCountHandlers = [];\n this.warningCountHandlers = [];\n this.countErrors = true;\n this.countWarnings = true;\n this.errors = 0;\n this.warnings = 0;\n this.currentHost = '';\n this.connected = this.socket.isConnected();\n this.maxLogs = maxLogs || 1000;\n this.logs = null;\n this.isSafari =\n navigator.vendor &&\n navigator.vendor.includes('Apple') &&\n navigator.userAgent &&\n !navigator.userAgent.includes('CriOS') &&\n !navigator.userAgent.includes('FxiOS');\n\n socket.registerLogHandler(this.logHandler);\n socket.registerConnectionHandler(this.connectionHandler);\n }\n\n setCurrentHost(currentHost: string): void {\n if (currentHost !== this.currentHost) {\n this.currentHost = currentHost;\n void this.getLogs(true);\n }\n }\n\n enableCountErrors(isEnabled: boolean): void {\n if (this.countErrors !== isEnabled) {\n this.countErrors = isEnabled;\n if (!this.countErrors) {\n const errors = this.errors;\n this.errors = 0;\n if (errors) {\n this.errorCountHandlers.forEach(handler => handler && handler(errors));\n }\n }\n }\n }\n\n enableCountWarnings(isEnabled: boolean): void {\n if (this.countWarnings !== isEnabled) {\n this.countWarnings = isEnabled;\n if (!this.countWarnings) {\n const warnings = this.warnings;\n this.warnings = 0;\n if (warnings) {\n this.warningCountHandlers.forEach(handler => handler && handler(warnings));\n }\n }\n }\n }\n\n resetErrors(): void {\n if (this.errors) {\n this.errors = 0;\n this.errorCountHandlers.forEach(handler => handler && handler(this.errors));\n }\n }\n\n resetWarnings(): void {\n if (this.warnings) {\n this.warnings = 0;\n this.warningCountHandlers.forEach(handler => handler && handler(this.warnings));\n }\n }\n\n logHandler = (line: LogLine | string): void => {\n const result = this._processLine(line);\n\n if (result?.objLine) {\n this.newLogs = this.newLogs || [];\n this.newLogs.push(result.objLine);\n\n if (!this.logTimeout) {\n this.logTimeout = setTimeout(() => {\n this.logTimeout = null;\n const newLogs = this.newLogs;\n this.newLogs = null;\n\n this.handlers.forEach(handler => handler && handler(newLogs, JSON.stringify(line).length - 65));\n }, 200);\n }\n\n if (result.isNew) {\n if (result.objLine.severity === 'error' && this.countErrors) {\n this.errors++;\n this.errorCountHandlers.forEach(handler => handler && handler(this.errors));\n } else if (result.objLine.severity === 'warn' && this.countWarnings) {\n this.warnings++;\n this.warningCountHandlers.forEach(handler => handler && handler(this.warnings));\n }\n }\n }\n };\n\n connectionHandler = (isConnected: boolean): void => {\n if (isConnected && !this.connected) {\n this.connected = true;\n void this.getLogs(true);\n } else if (!isConnected && this.connected) {\n this.connected = false;\n }\n };\n\n registerHandler(cb: (events: LogLineSaved[], messageSize: number) => void): void {\n if (!this.handlers.includes(cb)) {\n this.handlers.push(cb);\n }\n }\n\n unregisterHandler(cb: (events: LogLineSaved[], messageSize: number) => void): void {\n const pos = this.handlers.indexOf(cb);\n\n if (pos !== -1) {\n this.handlers.splice(pos, 1);\n }\n }\n\n registerErrorCountHandler(cb: (errors: number) => void): void {\n if (!this.errorCountHandlers.includes(cb)) {\n this.errorCountHandlers.push(cb);\n }\n }\n\n unregisterErrorCountHandler(cb: (errors: number) => void): void {\n const pos = this.errorCountHandlers.indexOf(cb);\n\n if (pos !== -1) {\n this.errorCountHandlers.splice(pos, 1);\n }\n }\n\n registerWarningCountHandler(cb: (warnings: number) => void): void {\n if (!this.warningCountHandlers.includes(cb)) {\n this.warningCountHandlers.push(cb);\n }\n }\n\n unregisterWarningCountHandler(cb: (warnings: number) => void): void {\n const pos = this.warningCountHandlers.indexOf(cb);\n\n if (pos !== -1) {\n this.warningCountHandlers.splice(pos, 1);\n }\n }\n\n _processLine(line: LogLine | string, lastKey?: number): { objLine: LogLineSaved; isNew: boolean } | null {\n // do not update logs before the first logs from host received\n if (!this.logs) {\n return null;\n }\n if (!line) {\n return null;\n }\n /* const line = {\n \"severity\": \"error\",\n \"ts\": 1588162801514,\n \"message\": \"host.DESKTOP-PLLTPO1 Invalid request getLogs. \\\"callback\\\" or \\\"from\\\" is null\",\n \"from\": \"host.DESKTOP-PLLTPO1\",\n \"_id\": 48358425\n }; */\n\n let objLine: LogLineSaved;\n let isNew = true;\n const length = this.logs.length;\n lastKey = lastKey || (length && this.logs[this.logs.length - 1].key) || 0;\n\n if (typeof line === 'object') {\n objLine = line as LogLineSaved;\n if (lastKey && lastKey <= objLine.ts) {\n objLine.key = lastKey + 1;\n } else {\n objLine.key = objLine.ts;\n }\n } else {\n // parse string\n const time = line.match(/^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{3}/);\n\n if (time && time.length > 0) {\n let ts;\n // Safari sucks. It is a very idiotic browser, and because of it, we must parse every number apart\n if (this.isSafari) {\n // parse every number\n const tt = line.match(/^(\\d{4})-(\\d{2})-(\\d{2}) (\\d{2}):(\\d{2}):(\\d{2})\\.(\\d{3})/);\n ts = new Date(\n parseInt(tt[1], 10),\n parseInt(tt[2], 10) - 1,\n parseInt(tt[3], 10),\n parseInt(tt[4], 10),\n parseInt(tt[5], 10),\n parseInt(tt[6], 10),\n parseInt(tt[7], 10),\n ).getTime();\n } else {\n const tt = time[0].split(' ');\n ts = new Date(`${tt[0]}T${tt[1]}`).getTime();\n }\n let key = ts;\n\n if (lastKey && lastKey <= ts) {\n key = lastKey + 1;\n }\n\n // detect from\n const from = line.match(/: (host\\..+? |[-\\w]+\\.\\d+ \\()/);\n\n objLine = {\n key,\n from: from ? from[0].replace(/[ :(]/g, '') : '',\n message: line.split(/\\[\\d+m: /)[1],\n severity: line.match(/\\d+m(silly|debug|info|warn|error)/)[0].replace(/[\\dm]/g, ''),\n ts,\n } as LogLineSaved;\n } else {\n isNew = false;\n // if no time found\n if (length) {\n objLine = this.logs[length - 1];\n if (objLine) {\n if (typeof objLine.message === 'object') {\n objLine.message = AdminUtils.parseColorMessage(objLine.message.original + line);\n } else {\n objLine.message += line;\n }\n }\n }\n }\n }\n\n if (!objLine) {\n return null;\n }\n\n if (typeof objLine.message !== 'object') {\n objLine.message = AdminUtils.parseColorMessage(objLine.message);\n }\n\n if (isNew) {\n // if new message time is less than last message in log\n if (length && this.logs[length - 1].key > objLine.key) {\n let i;\n // find the place\n for (i = length - 1; i >= 0; i--) {\n if (this.logs[i].key < objLine.key) {\n break;\n }\n }\n if (i === -1) {\n this.logs.unshift(objLine);\n } else {\n this.logs.splice(i + 1, 0, objLine);\n }\n } else {\n this.logs.push(objLine);\n }\n\n if (length + 1 === this.maxLogs) {\n this.logs.shift();\n }\n }\n\n return { objLine, isNew };\n }\n\n getLogs(update?: boolean): Promise<{ logs: LogLineSaved[]; logSize: number }> {\n if (!this.currentHost) {\n return Promise.resolve({ logs: [], logSize: 0 });\n }\n\n if (!update && this.promise instanceof Promise) {\n return this.promise;\n }\n\n const oldErrors = this.errors;\n const oldWarnings = this.warnings;\n this.errors = 0;\n this.warnings = 0;\n\n this.promise = this.socket\n .getLogs(this.currentHost, 200)\n .then(lines => {\n // @ts-expect-error it can return error string or error object { error: 'permissionError' }\n if ((lines as string) === 'permissionError' || lines?.error !== undefined) {\n this.logs = [];\n\n window.alert('Cannot get logs: no permission');\n\n return { logs: this.logs, logSize: 0 };\n }\n\n const logSizeStr: string | null = lines ? (lines as string[]).pop() : null;\n let logSize = 0;\n\n if (typeof logSizeStr === 'string') {\n logSize = parseInt(logSizeStr, 10);\n }\n\n this.logs = [];\n let lastKey: number;\n\n (lines as string[]).forEach(line => {\n const result = this._processLine(line, lastKey);\n if (result?.objLine) {\n lastKey = result.objLine.key;\n if (result.isNew && result.objLine.severity === 'error' && this.countErrors) {\n this.errors++;\n }\n\n if (result.isNew && result.objLine.severity === 'warn' && this.countWarnings) {\n this.warnings++;\n }\n }\n });\n\n if (this.logs?.length && this.logs[0].ts) {\n this.logs.sort((a, b) => (a.ts > b.ts ? 1 : a.ts < b.ts ? -1 : 0));\n }\n\n this.logSize = logSize;\n\n // inform subscribes about each line\n this.handlers.forEach(cb => cb && cb(this.logs, logSize));\n\n if (oldErrors !== this.errors) {\n this.errorCountHandlers.forEach(handler => handler && handler(this.errors));\n }\n if (oldWarnings !== this.warnings) {\n this.warningCountHandlers.forEach(handler => handler && handler(this.warnings));\n }\n\n return { logs: this.logs, logSize };\n })\n .catch((e: unknown): { logs: LogLineSaved[] | null; logSize: number } => {\n window.alert(`Cannot get logs: ${e as Error}`);\n return { logs: this.logs, logSize: 0 };\n });\n\n return this.promise;\n }\n\n clearLines(): void {\n this.logs = [];\n this.logSize = 0;\n\n if (this.errors) {\n this.errors = 0;\n this.errorCountHandlers.forEach(handler => handler && handler(this.errors));\n }\n\n if (this.warnings) {\n this.warnings = 0;\n this.warningCountHandlers.forEach(handler => handler && handler(this.warnings));\n }\n }\n}\n","import { type AdminConnection } from '@iobroker/adapter-react-v5';\nimport GenericWorker, { type EventType, type GenericEvent } from './GenericWorker';\n\nexport type InstanceEventType = EventType;\n\nexport type InstanceEvent = GenericEvent<'instance'>;\n\nexport default class InstancesWorker extends GenericWorker<'instance'> {\n constructor(socket: AdminConnection) {\n super(socket, 'system.adapter', 'instance');\n }\n}\n","import type { AdminConnection } from '@iobroker/adapter-react-v5';\nimport type { FilteredNotificationInformation } from '@iobroker/socket-client';\nimport GenericWorker, { type EventType, type GenericEvent } from './GenericWorker';\n\nexport type HostEventType = EventType;\n\nexport type NotificationAnswer = { result: FilteredNotificationInformation } | null;\n\nexport type HostEvent = GenericEvent<'host'>;\n\nexport interface HostAliveEvent {\n id: `system.host.${string}`;\n alive: boolean;\n type: HostEventType;\n}\n\nexport default class HostsWorker extends GenericWorker<'host'> {\n private readonly aliveHandlers: (((events: HostAliveEvent[]) => void) | false)[] = [];\n\n private readonly notificationsHandlers: ((notifications: Record<string, NotificationAnswer>) => void)[] = [];\n\n private readonly aliveStates: Record<string, boolean> = {};\n\n private readonly notificationPromises: Record<string, Promise<Record<string, NotificationAnswer | null>>> = {};\n\n private notificationTimer: ReturnType<typeof setTimeout> | null = null;\n\n private subscribeTs: number | undefined;\n\n constructor(socket: AdminConnection) {\n super(socket, 'system.host', 'host');\n this.aliveHandlers = [];\n this.notificationsHandlers = [];\n this.notificationPromises = {};\n this.aliveStates = {};\n }\n\n aliveChangeHandler = (id: string, state: ioBroker.State): void => {\n // if instance\n if (id.startsWith('system.host.') && id.endsWith('.alive')) {\n let type: HostEventType;\n id = id.replace(/\\.alive$/, '');\n if (state) {\n if (this.aliveStates[id] !== undefined) {\n if (!!this.aliveStates[id] !== !!state?.val) {\n type = 'changed';\n this.aliveStates[id] = !!state?.val;\n } else {\n // no changes\n return;\n }\n } else {\n type = 'new';\n this.aliveStates[id] = !!state?.val;\n }\n } else if (this.aliveStates[id]) {\n type = 'deleted';\n delete this.aliveStates[id];\n } else {\n // deleted unknown instance\n return;\n }\n this.aliveHandlers.forEach(\n cb =>\n cb &&\n cb([\n {\n id: id as `system.host.${string}`,\n alive: this.aliveStates[id],\n type,\n },\n ]),\n );\n }\n };\n\n connectionPostHandler(isConnected: boolean): void {\n if (isConnected) {\n if (this.aliveHandlers.length) {\n void this.socket.subscribeState('system.host.*.alive', this.aliveChangeHandler);\n }\n } else {\n Object.keys(this.aliveStates).forEach((id: string) => (this.aliveStates[id] = false));\n }\n }\n\n registerAliveHandler(cb: (events: HostAliveEvent[]) => void): void {\n if (!this.aliveHandlers.includes(cb)) {\n this.aliveHandlers.push(cb);\n\n if (this.aliveHandlers.length === 1 && this.connected) {\n void this.socket.subscribeState('system.host.*.alive', this.aliveChangeHandler);\n }\n }\n }\n\n unregisterAliveHandler(cb: (events: HostAliveEvent[]) => void): void {\n const pos = this.aliveHandlers.indexOf(cb);\n if (pos !== -1) {\n this.aliveHandlers.splice(pos, 1);\n if (!this.aliveHandlers.length && this.connected) {\n this.socket.unsubscribeState('system.host.*.alive', this.aliveChangeHandler);\n }\n }\n }\n\n onNotificationHandler = (id: string /* , state */): void => {\n const host = id.replace(/\\.notifications\\..+$/, '');\n\n // ignore subscribe events\n if (!this.subscribeTs || Date.now() - this.subscribeTs > 500) {\n if (this.notificationTimer) {\n clearTimeout(this.notificationTimer);\n }\n\n this.notificationTimer = setTimeout(\n host_ => {\n this.notificationTimer = null;\n this.notificationPromises[host_] = this._getNotificationsFromHosts(host_, true);\n\n void this.notificationPromises[host_].then(\n notifications => notifications && this.notificationsHandlers.forEach(cb => cb(notifications)),\n );\n },\n 300,\n host,\n );\n }\n };\n\n _getNotificationsFromHosts(hostId: string, update?: boolean): Promise<Record<string, NotificationAnswer | null>> {\n if (!update && this.notificationPromises[hostId] instanceof Promise) {\n return this.notificationPromises[hostId];\n }\n\n this.notificationPromises[hostId] = this.socket\n .getState(`${hostId}.alive`)\n .then((state: ioBroker.State | null | undefined): Promise<Record<string, NotificationAnswer | null>> => {\n if (state?.val) {\n return this.socket\n .getNotifications(hostId, '')\n .then((notifications: NotificationAnswer) => ({ [hostId]: notifications || null }))\n .catch((e: unknown): Record<string, NotificationAnswer | null> => {\n console.warn(`Cannot read notifications from \"${hostId}\": ${e as Error}`);\n return { [hostId]: null };\n });\n }\n return Promise.resolve({ [hostId]: null });\n });\n\n return this.notificationPromises[hostId];\n }\n\n async getNotifications(hostId?: string, update?: boolean): Promise<Record<string, NotificationAnswer | null>> {\n if (hostId) {\n return this._getNotificationsFromHosts(hostId, update);\n }\n\n // get from all hosts\n const hosts = await this.socket.getCompactHosts(update);\n const promises = hosts.map(host => this._getNotificationsFromHosts(host._id, update));\n const pResults = await Promise.all(promises);\n const result: Record<string, NotificationAnswer | null> = {};\n pResults.forEach(r => Object.assign(result, r));\n return result;\n }\n\n registerNotificationHandler(cb: (notifications: Record<string, NotificationAnswer>) => void): void {\n if (!this.notificationsHandlers.includes(cb)) {\n this.notificationsHandlers.push(cb);\n\n if (this.notificationsHandlers.length === 1 && this.connected) {\n this.subscribeTs = Date.now();\n void this.socket.subscribeState('system.host.*.notifications.*', this.onNotificationHandler);\n }\n }\n }\n\n unregisterNotificationHandler(cb: (notifications: Record<string, NotificationAnswer>) => void): void {\n const pos = this.notificationsHandlers.indexOf(cb);\n\n if (pos !== -1) {\n this.notificationsHandlers.splice(pos, 1);\n if (!this.notificationsHandlers.length && this.connected) {\n this.socket.unsubscribeState('system.host.*.notifications.*', this.onNotificationHandler);\n }\n }\n }\n}\n","import { type AdminConnection } from '@iobroker/adapter-react-v5';\nimport GenericWorker, { type EventType, type GenericEvent } from './GenericWorker';\n\nexport type AdapterEventType = EventType;\n\nexport type AdapterEvent = GenericEvent<'adapter'>;\n\nexport default class AdaptersWorker extends GenericWorker<'adapter'> {\n private readonly repositoryHandlers: (() => void)[];\n\n private repoTimer: ReturnType<typeof setTimeout> | null;\n\n constructor(socket: AdminConnection) {\n super(socket, 'system.adapter', 'adapter');\n this.repositoryHandlers = [];\n }\n\n protected checkObjectId(id: string, obj: ioBroker.AdapterObject | null | undefined): boolean {\n return id.match(/^system\\.adapter\\.[^.]+$/) && (!obj || obj.type === this.objectType);\n }\n\n protected postProcessing(_id: string, _obj: ioBroker.AdapterObject | null | undefined): void {\n this.socket.getAdaptersResetCache();\n this.socket.getInstalledResetCache('');\n }\n\n repoChangeHandler = (/* id, obj */): void => {\n if (this.repoTimer) {\n clearTimeout(this.repoTimer);\n }\n this.repoTimer = setTimeout(() => {\n this.repoTimer = null;\n this.repositoryHandlers.forEach(cb => cb());\n }, 500);\n };\n\n registerRepositoryHandler(cb: () => void): void {\n if (!this.repositoryHandlers.includes(cb)) {\n this.repositoryHandlers.push(cb);\n\n if (this.repositoryHandlers.length === 1 && this.connected) {\n this.socket\n .subscribeObject('system.repositories', this.repoChangeHandler)\n .catch(e => window.alert(`Cannot subscribe on object: ${e}`));\n }\n }\n }\n\n unregisterRepositoryHandler(cb: () => void): void {\n const pos = this.repositoryHandlers.indexOf(cb);\n if (pos !== -1) {\n this.repositoryHandlers.splice(pos, 1);\n }\n\n if (!this.repositoryHandlers.length && this.connected) {\n this.socket\n .unsubscribeObject('system.repositories', this.repoChangeHandler)\n .catch(e => window.alert(`Cannot unsubscribe on object: ${e}`));\n }\n }\n}\n","import { type AdminConnection } from '@iobroker/adapter-react-v5';\nimport AdminUtils from '../helpers/AdminUtils';\n\nexport type ObjectEventType = 'new' | 'changed' | 'deleted';\n\nexport interface ObjectEvent {\n id: string;\n obj?: ioBroker.Object;\n type: ObjectEventType;\n oldObj?: ioBroker.Object;\n}\n\nexport default class ObjectsWorker {\n private readonly socket: AdminConnection;\n\n private readonly handlers: ((events: ObjectEvent[]) => void)[];\n\n private promise: Promise<void | Record<string, ioBroker.Object>> | null;\n\n private connected: boolean;\n\n private objects: Record<string, ioBroker.Object> | null;\n\n constructor(socket: AdminConnection) {\n this.socket = socket;\n this.handlers = [];\n this.promise = null;\n\n socket.registerConnectionHandler(this.connectionHandler);\n\n this.connected = this.socket.isConnected();\n\n this.objects = null;\n }\n\n objectChangeHandler = (id: string, obj: ioBroker.Object | null): void => {\n this.objects = this.objects || {};\n // if instance\n let oldObj: ioBroker.Object | undefined;\n let type: ObjectEventType;\n\n if (obj) {\n if (obj.type === 'instance' || obj.type === 'adapter') {\n AdminUtils.fixAdminUI(obj);\n }\n\n if (this.objects[id]) {\n oldObj = this.objects[id];\n if (JSON.stringify(this.objects[id]) !== JSON.stringify(obj)) {\n type = 'changed';\n this.objects[id] = obj;\n } else {\n // no changes\n type = 'changed';\n }\n } else {\n type = 'new';\n this.objects[id] = obj;\n }\n } else if (this.objects[id]) {\n oldObj = this.objects[id];\n type = 'deleted';\n delete this.objects[id];\n } else {\n // deleted unknown instance\n type = 'deleted';\n }\n\n this.handlers.forEach(cb =>\n cb([\n {\n id,\n obj,\n type,\n oldObj,\n },\n ]),\n );\n };\n\n // be careful with this object. Do not change them.\n getObjects(update?: boolean): Promise<void | Record<string, ioBroker.Object>> {\n if (!update && this.promise instanceof Promise) {\n return this.promise;\n }\n\n this.promise = this.socket\n .getObjects(update, true)\n .then((objects: Record<string, ioBroker.Object>) => {\n this.objects = objects;\n return this.objects;\n })\n .catch((e: any) => window.alert(`Cannot get objects: ${e}`));\n\n return this.promise;\n }\n\n connectionHandler = (isConnected: boolean): void => {\n if (isConnected && !this.connected) {\n this.connected = true;\n\n if (this.handlers.length) {\n this.socket\n .subscribeObject('*', this.objectChangeHandler)\n .catch((e: any) => window.alert(`Cannot subscribe on objects: ${e}`));\n\n void this.getObjects(true).then(\n objects => objects && Object.keys(objects).forEach(id => this.objectChangeHandler(id, objects[id])),\n );\n }\n } else if (!isConnected && this.connected) {\n this.connected = false;\n }\n };\n\n registerHandler(cb: (events: ObjectEvent[]) => void): void {\n if (!this.handlers.includes(cb)) {\n this.handlers.push(cb);\n\n if (this.handlers.length === 1 && this.connected) {\n this.socket\n .subscribeObject('*', this.objectChangeHandler)\n .catch((e: any) => window.alert(`Cannot subscribe on object: ${e}`));\n }\n }\n }\n\n unregisterHandler(cb: (events: ObjectEvent[]) => void, doNotUnsubscribe?: boolean): void {\n const pos = this.handlers.indexOf(cb);\n if (pos !== -1) {\n this.handlers.splice(pos, 1);\n }\n\n if (!this.handlers.length && this.connected && !doNotUnsubscribe) {\n this.socket\n .unsubscribeObject('*', this.objectChangeHandler)\n .catch((e: any) => window.alert(`Cannot unsubscribe on object: ${e as Error}`));\n }\n }\n}\n","import React, { useEffect, useState } from 'react';\n\nimport { Button, Dialog, DialogActions, DialogContent, Paper, Typography, Box, AppBar } from '@mui/material';\n\nimport { Settings as SettingsIcon, Close as CloseIcon, Check as CheckIcon } from '@mui/icons-material';\n\nimport { I18n, type AdminConnection, type ThemeName, type ThemeType, type IobTheme } from '@iobroker/adapter-react-v5';\n\nimport { type ConfigItemPanel, ConfigPanel } from '@iobroker/json-config';\n\nconst styles: Record<string, React.CSSProperties> = {\n root: {\n // backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: 'auto',\n display: 'flex',\n borderRadius: 4,\n flexDirection: 'column',\n },\n paper: {\n maxWidth: 1000,\n width: '100%',\n maxHeight: 800,\n height: 'calc(100% - 32px)',\n },\n flex: {\n display: 'flex',\n },\n overflowHidden: {\n overflow: 'hidden',\n },\n heading: {\n display: 'flex',\n alignItems: 'center',\n },\n headerBlock: {\n backgroundColor: '#272727',\n padding: 13,\n fontSize: 16,\n },\n paperTable: {\n width: '100%',\n marginBottom: 16,\n },\n};\n\ninterface TabPanelProps {\n children: JSX.Element;\n value: number;\n index: number;\n title: string;\n custom?: boolean;\n}\n\nconst TabPanel: React.FC<TabPanelProps> = ({ children, value, index, title, custom, ...props }) => {\n if (custom) {\n return <div {...props}>{value === index && children}</div>;\n }\n\n return (\n <div {...props}>\n {value === index && (\n <>\n <AppBar\n position=\"static\"\n color=\"default\"\n >\n <div style={styles.headerBlock}>{title}</div>\n </AppBar>\n <Box p={3}>\n <Typography component=\"div\">{children}</Typography>\n </Box>\n </>\n )}\n </div>\n );\n};\ntype InputType = 'password' | 'checkbox' | 'select' | 'link' | 'comment' | 'text' | 'name' | 'title';\ntype InputControlType = 'password' | 'checkbox' | 'select' | 'text' | 'staticText' | 'header';\n\nconst types: Record<InputType, InputControlType> = {\n password: 'password',\n checkbox: 'checkbox',\n select: 'select',\n link: 'staticText',\n comment: 'staticText',\n text: 'text',\n name: 'staticText',\n title: 'staticText',\n};\n\ninterface DiscoveryInstanceCommentInput {\n /** Link to attribute, like: 'native.user' */\n name: string;\n def: string | boolean | number;\n type: InputType;\n title: string;\n options: Record<string, string | boolean | number>;\n}\n\nexport interface DiscoveryInstanceComment {\n add?: boolean | string | number | string[];\n changed?: boolean | string | number | string[];\n extended?: boolean | string | number | string[];\n text?: string;\n ack?: boolean;\n inputs?: DiscoveryInstanceCommentInput[];\n license?: string;\n}\n\nexport interface DiscoveryInstance {\n /** Adapter instance ID, like system.adapter.tr-064.0 */\n _id: `system.adapter.${string}.${number}`;\n common: {\n name: string;\n title?: string;\n licenseUrl?: ioBroker.StringOrTranslated;\n };\n comment: DiscoveryInstanceComment;\n native: Record<string, any>;\n}\n\ninterface DiscoveryDevice {\n _addr: string;\n _name: string;\n _ping: {\n alive: boolean;\n ms: number;\n };\n _source: 'ping';\n _type: 'ip' | 'once';\n _dns?: {\n /** \"fritz.box\", \"www.fritz.box\" */\n hostnames: string[];\n };\n}\n\nexport interface DiscoveryObject {\n _id: 'system.discovery';\n common: {\n name: ioBroker.StringOrTranslated;\n };\n type: 'config';\n native: {\n lastScan: string;\n newInstances: DiscoveryInstance[];\n devices: DiscoveryDevice[];\n };\n}\n\nfunction _setValueInObj(obj: Record<string, any>, path: string[], value: string | number | boolean): void {\n const attr = path.unshift();\n if (!path.length) {\n obj[attr] = value;\n } else {\n obj[attr] = obj[attr] || {};\n _setValueInObj(obj[attr], path, value);\n }\n}\n\nfunction setValueInObj(obj: Record<string, any>, path: string, value: string | number | boolean): void {\n const pathArray = path.split('.');\n\n _setValueInObj(obj, pathArray, value);\n}\n\ninterface SchemaItem {\n type: InputControlType;\n label: string;\n text: string;\n href: string;\n sm: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n newLine: boolean;\n button: boolean;\n variant: 'contained';\n icon: string;\n repeat: boolean;\n required: boolean;\n name: string;\n}\n\ninterface GenerateInputsModalProps {\n systemConfig: ioBroker.SystemConfigCommon;\n themeType: ThemeType;\n themeName: ThemeName;\n theme: IobTheme;\n socket: AdminConnection;\n newInstance: DiscoveryInstance;\n /** The result looks like { native: { attr1: value }} */\n onClose: (obj?: { native: Record<string, any> }) => void;\n}\n\nconst GenerateInputsModal: React.FC<GenerateInputsModalProps> = ({\n theme,\n themeType,\n themeName,\n socket,\n newInstance,\n onClose,\n systemConfig,\n}) => {\n const [error, setError] = useState<Record<string, string>>({});\n\n const [schema, setSchema] = useState<{ type: 'panel'; items: Record<string, Partial<SchemaItem>> }>({\n type: 'panel',\n items: {},\n });\n\n const [schemaData, setSchemaData] = useState<Record<string, string | boolean | number>>({});\n\n useEffect(() => {\n const objSchema: {\n [key: string]: Partial<SchemaItem>;\n } = {};\n const objValue: {\n [key: string]: string | boolean | number;\n } = {};\n if (newInstance?.comment?.add && Array.isArray(newInstance?.comment?.add)) {\n newInstance.comment.add.forEach((text: string, idx: number) => (objSchema[idx] = { type: 'header', text }));\n\n newInstance.comment.inputs.forEach((el, idx) => {\n objSchema[idx + 1] = {\n ...el,\n type: types[el.type],\n label: el.title,\n text: el.def ? el.def.toString() : '',\n href: el.def ? el.def.toString() : '',\n sm: 6,\n newLine: true,\n };\n\n if (el.type === 'link') {\n objSchema[idx + 1].button = true;\n objSchema[idx + 1].variant = 'contained';\n objSchema[idx + 1].href = el.def ? el.def.toString() : '';\n objSchema[idx + 1].text = el.title;\n objSchema[idx + 1].icon =\n 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGZpbGw9ImN1cnJlbnRDb2xvciIgZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6bTYuOTMgNmgtMi45NWMtLjMyLTEuMjUtLjc4LTIuNDUtMS4zOC0zLjU2IDEuODQuNjMgMy4zNyAxLjkxIDQuMzMgMy41NnpNMTIgNC4wNGMuODMgMS4yIDEuNDggMi41MyAxLjkxIDMuOTZoLTMuODJjLjQzLTEuNDMgMS4wOC0yLjc2IDEuOTEtMy45NnpNNC4yNiAxNEM0LjEgMTMuMzYgNCAxMi42OSA0IDEycy4xLTEuMzYuMjYtMmgzLjM4Yy0uMDguNjYtLjE0IDEuMzItLjE0IDIgMCAuNjguMDYgMS4zNC4xNCAySDQuMjZ6bS44MiAyaDIuOTVjLjMyIDEuMjUuNzggMi40NSAxLjM4IDMuNTYtMS44NC0uNjMtMy4zNy0xLjktNC4zMy0zLjU2em0yLjk1LThINS4wOGMuOTYtMS42NiAyLjQ5LTIuOTMgNC4zMy0zLjU2QzguODEgNS41NSA4LjM1IDYuNzUgOC4wMyA4ek0xMiAxOS45NmMtLjgzLTEuMi0xLjQ4LTIuNTMtMS45MS0zLjk2aDMuODJjLS40MyAxLjQzLTEuMDggMi43Ni0xLjkxIDMuOTZ6TTE0LjM0IDE0SDkuNjZjLS4wOS0uNjYtLjE2LTEuMzItLjE2LTIgMC0uNjguMDctMS4zNS4xNi0yaDQuNjhjLjA5LjY1LjE2IDEuMzIuMTYgMiAwIC42OC0uMDcgMS4zNC0uMTYgMnptLjI1IDUuNTZjLjYtMS4xMSAxLjA2LTIuMzEgMS4zOC0zLjU2aDIuOTVjLS45NiAxLjY1LTIuNDkgMi45My00LjMzIDMuNTZ6TTE2LjM2IDE0Yy4wOC0uNjYuMTQtMS4zMi4xNC0yIDAtLjY4LS4wNi0xLjM0LS4xNC0yaDMuMzhjLjE2LjY0LjI2IDEuMzEuMjYgMnMtLjEgMS4zNi0uMjYgMmgtMy4zOHoiPjwvcGF0aD48L3N2Zz4=';\n }\n\n if (el.type === 'password') {\n objSchema[idx + 1].repeat = true;\n }\n\n if (el.def !== undefined) {\n objValue[idx + 1] = '';\n }\n\n if (el.type === 'checkbox') {\n objValue[idx + 1] = false;\n }\n });\n setSchemaData(objValue);\n setSchema({ type: 'panel', items: objSchema });\n }\n }, [newInstance]);\n\n return (\n <Dialog\n onClose={onClose}\n open={!0}\n sx={{ '& .MuiDialog-paper': styles.paper }}\n >\n <h2 style={styles.heading}>\n <SettingsIcon\n style={{\n color: 'rgb(77 171 245)',\n fontSize: 36,\n marginLeft: 25,\n marginRight: 10,\n }}\n />\n {I18n.t('Instance parameters for %s', newInstance._id.replace('system.adapter.', ''))}\n </h2>\n <DialogContent\n style={{ ...styles.flex, ...styles.overflowHidden }}\n dividers\n >\n <div style={styles.root}>\n <TabPanel\n value={1}\n index={1}\n custom\n title={I18n.t('Test')}\n >\n <Paper style={styles.paperTable}>\n <ConfigPanel\n oContext={{\n socket,\n themeType,\n theme,\n isFloatComma: true,\n instance: 0,\n dateFormat: 'YYYY.MM.DD',\n forceUpdate: () => {},\n onCommandRunning: () => {},\n adapterName: 'dummy',\n _themeName: themeName,\n systemConfig,\n }}\n data={schemaData}\n themeName={themeName}\n onChange={setSchemaData}\n onError={(attr: string, _error?: string): void =>\n setError({ ...error, [attr]: _error })\n }\n schema={schema as unknown as ConfigItemPanel}\n // all unused properties\n alive\n changed={false}\n originalData={schemaData}\n common={{}}\n />\n </Paper>\n </TabPanel>\n </div>\n </DialogContent>\n <DialogActions>\n <Button\n id=\"inputs-modal-dialog-apply\"\n variant=\"contained\"\n autoFocus\n disabled={!!Object.keys(error).find(attr => error[attr])}\n onClick={() => {\n const obj: { native: Record<string, any> } = { native: {} };\n let err = false;\n Object.keys(schema.items).forEach((key: string) => {\n if (schema.items[key].required) {\n if (!schemaData[key] && schema.items[key].type !== 'checkbox') {\n err = true;\n alert(`no data ${schema.items[key].label}`);\n } else {\n setValueInObj(obj, schema.items[key].name, schemaData[key]);\n }\n } else if (schema.items[key].name) {\n err = false;\n setValueInObj(obj, schema.items[key].name, schemaData[key]);\n }\n });\n if (!err) {\n onClose(obj);\n }\n }}\n color=\"primary\"\n startIcon={<CheckIcon />}\n >\n {I18n.t('Apply')}\n </Button>\n <Button\n id=\"inputs-modal-dialog-close\"\n variant=\"contained\"\n onClick={() => onClose()}\n color=\"grey\"\n startIcon={<CloseIcon />}\n >\n {I18n.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default GenerateInputsModal;\n","import { useState } from 'react';\n\nexport default function useStateLocal(defaultValue: any, key: string): [any, (newValue: any) => void, boolean] {\n const data = (window._localStorage || window.localStorage).getItem(key);\n if (data) {\n try {\n defaultValue = JSON.parse(data);\n } catch {\n // ignore\n }\n }\n\n const [state, setState] = useState(defaultValue);\n\n const eventsToInstall = (newValue: any): void => {\n (window._localStorage || window.localStorage).setItem(key, JSON.stringify(newValue));\n setState(newValue);\n };\n\n return [state, eventsToInstall, !!(window._localStorage || window.localStorage).getItem(key)];\n}\n","import React, { useEffect, useState } from 'react';\n\nimport {\n DialogActions,\n DialogContent,\n Button,\n Dialog,\n Tooltip,\n AppBar,\n Avatar,\n Box,\n Checkbox,\n CircularProgress,\n LinearProgress,\n Paper,\n Step,\n StepLabel,\n Stepper,\n Switch,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n TableSortLabel,\n Typography,\n} from '@mui/material';\nimport { ThemeProvider } from '@mui/material/styles';\n\nimport {\n Visibility as VisibilityIcon,\n NavigateNext as NavigateNextIcon,\n NavigateBefore as NavigateBeforeIcon,\n Search as SearchIcon,\n Close as CloseIcon,\n LibraryAdd as LibraryAddIcon,\n AssignmentTurnedIn as AssignmentTurnedInIcon,\n ReportProblem as ReportProblemIcon,\n} from '@mui/icons-material';\n\nimport {\n I18n,\n Utils,\n SelectWithIcon,\n type IobTheme,\n type AdminConnection,\n type ThemeType,\n type ThemeName,\n} from '@iobroker/adapter-react-v5';\nimport type { CompactHost } from '@/types';\n\nimport Command from '../components/Command';\nimport LicenseDialog from './LicenseDialog';\nimport GenerateInputsModal, {\n type DiscoveryInstance,\n type DiscoveryInstanceComment,\n type DiscoveryObject,\n} from './GenerateInputsModal';\nimport useStateLocal from '../helpers/hooks/useStateLocal';\n\nconst styles: Record<string, any> = {\n root: {\n // backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: 'auto',\n display: 'flex',\n borderRadius: 4,\n flexDirection: 'column',\n },\n paper: {\n maxWidth: 1000,\n width: '100%',\n maxHeight: 800,\n height: 'calc(100% - 32px)',\n },\n flex: {\n display: 'flex',\n },\n overflowHidden: {\n overflow: 'hidden',\n },\n overflowAuto: {\n overflowY: 'auto',\n },\n headerText: {\n fontWeight: 'bold',\n fontSize: 15,\n },\n descriptionHeaderText: {\n margin: '10px 0',\n },\n heading: {\n display: 'flex',\n alignItems: 'center',\n },\n headerBlock: {\n backgroundColor: '#272727',\n padding: 13,\n fontSize: 16,\n },\n headerBlockDisplayItem: {\n p: '5px',\n fontSize: 16,\n display: 'flex',\n m: '2px',\n border: '1px solid #c0c0c045',\n borderRadius: '4px',\n alignItems: 'center',\n transition: 'background .5s, color .5s',\n },\n activeBlock: {\n backgroundColor: '#c0c0c021',\n border: '1px solid #4dabf5',\n },\n pointer: {\n cursor: 'pointer',\n },\n hover: {\n '&:hover': {\n backgroundColor: '#c0c0c021',\n },\n },\n installSuccess: {\n opacity: 0.7,\n color: '#5ef05e',\n },\n installError: {\n opacity: 0.7,\n color: '#ffc14f',\n },\n width200: {\n width: 200,\n },\n table: {\n // '& *': {\n // color: 'black'\n // }\n },\n paperTable: {\n width: '100%',\n marginBottom: 16,\n },\n wrapperSwitch: {\n display: 'flex',\n margin: 10,\n marginTop: 0,\n },\n divSwitch: {\n display: 'flex',\n // margin: 10,\n alignItems: 'center',\n fontSize: 10,\n marginLeft: 0,\n color: 'silver',\n },\n marginLeft: {\n marginLeft: 40,\n },\n stepper: {\n padding: 0,\n background: 'inherit',\n },\n instanceIcon: {\n width: 30,\n height: 30,\n margin: 3,\n },\n instanceId: {\n marginLeft: 10,\n },\n instanceWrapper: {\n display: 'flex',\n alignItems: 'center',\n },\n};\n\ntype CompactRepository = Record<\n string,\n {\n icon: ioBroker.AdapterCommon['icon'];\n version: string;\n }\n>;\n\ninterface TabPanelProps {\n children: JSX.Element | JSX.Element[];\n value: number;\n index: number;\n title: string;\n custom?: boolean;\n boxHeight?: boolean;\n black?: boolean;\n [other: string]: unknown;\n}\n\nfunction TabPanel({\n style,\n children,\n value,\n index,\n title,\n custom,\n boxHeight,\n black,\n ...props\n}: TabPanelProps): JSX.Element | null {\n if (custom) {\n return <div {...props}>{value === index && children}</div>;\n }\n if (value === index) {\n return (\n <div\n {...props}\n style={style}\n >\n <AppBar\n position=\"static\"\n color=\"default\"\n >\n <div style={{ ...styles.headerBlock, color: !black ? 'white' : undefined }}>{title}</div>\n </AppBar>\n <Box\n style={boxHeight ? { height: 'calc(100% - 45px)' } : undefined}\n p={3}\n >\n <Typography\n style={boxHeight ? { height: '100%' } : undefined}\n component=\"div\"\n >\n {children}\n </Typography>\n </Box>\n </div>\n );\n }\n return null;\n}\n\nconst headCells = [\n {\n id: 'instance',\n numeric: false,\n disablePadding: true,\n label: 'Instance',\n },\n {\n id: 'host',\n numeric: false,\n disablePadding: false,\n label: 'Host',\n },\n {\n id: 'description',\n numeric: false,\n disablePadding: false,\n label: 'Description',\n },\n {\n id: 'ignore',\n numeric: true,\n disablePadding: false,\n label: 'Ignore',\n },\n];\n\ninterface EnhancedTableHeadProps {\n numSelected: number;\n onSelectAllClick: (event: React.ChangeEvent) => void;\n rowCount: number;\n}\n\nfunction EnhancedTableHead(props: EnhancedTableHeadProps): JSX.Element {\n const { numSelected, rowCount, onSelectAllClick } = props;\n\n return (\n <TableHead>\n <TableRow>\n <TableCell padding=\"checkbox\">\n <Checkbox\n indeterminate={numSelected > 0 && numSelected < rowCount}\n checked={rowCount > 0 && numSelected === rowCount}\n onChange={(event: React.ChangeEvent) => onSelectAllClick(event)}\n inputProps={{ 'aria-label': 'select all desserts' }}\n />\n </TableCell>\n {headCells.map(headCell => (\n <TableCell\n key={headCell.id}\n align={headCell.numeric ? 'right' : 'left'}\n padding={headCell.disablePadding ? 'none' : 'normal'}\n >\n <TableSortLabel>{headCell.label}</TableSortLabel>\n </TableCell>\n ))}\n </TableRow>\n </TableHead>\n );\n}\n\nfunction buildComment(comment: DiscoveryInstanceComment): string {\n if (!comment) {\n return 'new';\n }\n if (typeof comment === 'string') {\n return comment;\n }\n let text = '';\n\n if (comment.add) {\n text += I18n.t('new');\n if (Array.isArray(comment.add) && comment.add.length) {\n text += ': ';\n if (comment.add.length <= 5) {\n text += comment.add.join(', ');\n } else {\n text += I18n.t('%s devices', comment.add.length);\n }\n } else if (typeof comment.add === 'string' || typeof comment.add === 'number') {\n text += ': ';\n text += comment.add;\n }\n }\n\n if (comment.changed) {\n text += (text ? ', ' : '') + I18n.t('changed');\n if (Array.isArray(comment.changed) && comment.changed.length) {\n text += ': ';\n if (comment.changed.length <= 5) {\n text += comment.changed.join(', ');\n } else {\n text += I18n.t('%s devices', comment.changed.length);\n }\n } else if (typeof comment.changed === 'string' || typeof comment.changed === 'number') {\n text += ': ';\n text += comment.changed;\n }\n }\n\n if (comment.extended) {\n text += (text ? ', ' : '') + I18n.t('extended');\n if (Array.isArray(comment.extended) && comment.extended.length) {\n text += ': ';\n if (comment.extended.length <= 5) {\n text += comment.extended.join(', ');\n } else {\n text += I18n.t('%s devices', comment.extended.length);\n }\n } else if (typeof comment.extended === 'string' || typeof comment.extended === 'number') {\n text += ': ';\n text += comment.extended;\n }\n }\n\n if (comment.text) {\n text += (text ? ', ' : '') + comment.text;\n }\n return text;\n}\n\ninterface DiscoveryDialogProps {\n themeType: ThemeType;\n themeName: ThemeName;\n socket: AdminConnection;\n dateFormat: string;\n currentHost: string;\n defaultLogLevel: ioBroker.LogLevel;\n repository: CompactRepository;\n hosts: CompactHost[];\n onClose: () => void;\n theme: IobTheme;\n systemConfig: ioBroker.SystemConfigCommon;\n}\n\nfunction DiscoveryDialog({\n themeType,\n themeName,\n socket,\n dateFormat,\n currentHost,\n defaultLogLevel,\n repository,\n hosts,\n onClose,\n theme,\n systemConfig,\n}: DiscoveryDialogProps): JSX.Element {\n const [step, setStep] = useState<number>(0);\n const [listMethods, setListMethods] = useState<Record<string, { type: string; source: string; timeout?: number }>>(\n {},\n );\n const [checkboxChecked, setCheckboxChecked] = useState<Record<string, boolean>>({});\n const [disableScanner, setDisableScanner] = useState<boolean>(false);\n const [discoveryData, setDiscoveryData] = useState<DiscoveryObject | null>(null);\n\n useEffect(() => {\n async function fetchData(): Promise<void> {\n const resultList: Record<string, { type: string; source: string; timeout?: number }> = await socket.sendTo(\n 'system.adapter.discovery.0',\n 'listMethods',\n null,\n );\n const listChecked: Record<string, boolean> = {};\n const lastSelectionStr =\n (((window as any)._localStorage as Storage) || window.localStorage).getItem(\n 'App.discoveryLastSelection',\n ) || null;\n let lastSelection: null | Record<string, boolean>;\n if (lastSelectionStr) {\n try {\n lastSelection = JSON.parse(lastSelectionStr) as Record<string, boolean>;\n } catch {\n lastSelection = null;\n }\n }\n\n Object.keys(resultList).forEach(key => {\n if (lastSelection) {\n listChecked[key] = lastSelection[key];\n } else {\n listChecked[key] = key !== 'serial';\n }\n });\n\n setCheckboxChecked(listChecked);\n setListMethods(resultList);\n }\n\n void fetchData().catch(e => console.warn(`Cannot read listMethods: ${e}`));\n }, [socket]);\n\n useEffect(() => {\n async function readOldData(): Promise<void> {\n const dataDiscovery = await socket.getObject('system.discovery');\n if (dataDiscovery !== undefined) {\n setDiscoveryData(dataDiscovery as unknown as DiscoveryObject);\n }\n }\n\n readOldData().catch(e => console.warn(`Cannot read system.discovery: ${e}`));\n }, [socket]);\n\n const [aliveHosts, setAliveHosts] = useState<Record<string, boolean>>({});\n const [checkSelectHosts, setCheckSelectHosts] = useState(false);\n const [hostInstances, setHostInstances] = useState<Record<string, string>>({});\n\n useEffect(() => {\n hosts.forEach(async ({ _id }: { _id: string }) => {\n const aliveValue = await socket.getState(`${_id}.alive`);\n\n setAliveHosts(prev => ({\n ...prev,\n [_id]: !aliveValue || aliveValue.val === null ? false : !!aliveValue.val,\n }));\n });\n\n if (Object.keys(aliveHosts).filter(key => aliveHosts[key]).length > 1) {\n setCheckSelectHosts(true);\n }\n }, [hosts, socket, aliveHosts]);\n\n const [devicesFound, setDevicesFound] = useState(0);\n const [devicesProgress, setDevicesProgress] = useState(0);\n const [instancesFound, setInstancesFound] = useState(0);\n const [scanRunning, setScanRunning] = useState(false);\n const [servicesProgress, setServicesProgress] = useState(0);\n const [selected, setSelected] = useState<string[]>([]);\n const [installProgress, setInstallProgress] = useState(false);\n const [currentInstall, setCurrentInstall] = useState(1);\n const [installStatus, setInstallStatus] = useState<Record<string, 'error' | 'success'>>({});\n const [cmdName, setCmdName] = useState('install');\n const [suggested, setSuggested] = useStateLocal(true, 'discovery.suggested');\n const [showAll, setShowAll] = useStateLocal(true, 'discovery.showAll');\n const [showLicenseDialog, setShowLicenseDialog] = useState<{ obj: DiscoveryInstance; cb: () => void } | null>(null);\n const [showInputsDialog, setShowInputsDialog] = useState<{ obj: DiscoveryInstance; cb: () => void } | null>(null);\n\n const black = themeType === 'dark';\n\n const [instancesInputsParams, setInstancesInputsParams] = useState<{ native: Record<string, any> }>({ native: {} });\n const steps = ['Select methods', 'Create instances', 'Installation process'];\n const [logs, setLogs] = useState<Record<string, any>>({});\n const [finishInstall, setFinishInstall] = useState(false);\n const [selectLogsIndex, setSelectLogsIndex] = useState(1);\n\n const handlerInstall = (name: string, value: ioBroker.State | null | undefined): void => {\n if (!value) {\n return;\n }\n switch (name) {\n case 'discovery.0.devicesFound':\n setDevicesFound(value.val as number);\n break;\n case 'discovery.0.devicesProgress':\n setDevicesProgress(value.val as number);\n break;\n case 'discovery.0.instancesFound':\n setInstancesFound(value.val as number);\n break;\n case 'discovery.0.scanRunning':\n setScanRunning(value.val as boolean);\n break;\n case 'discovery.0.servicesProgress':\n setServicesProgress(value.val as number);\n break;\n default:\n break;\n }\n };\n const onSystemDiscoveryChanged = (id: string, obj: ioBroker.Object | null | undefined): void => {\n if (!obj) {\n return;\n }\n if (id === 'system.discovery') {\n setDiscoveryData(obj as unknown as DiscoveryObject);\n }\n };\n useEffect(() => {\n void socket.subscribeObject('system.discovery', onSystemDiscoveryChanged);\n void socket.subscribeState('discovery.0.devicesFound', handlerInstall);\n void socket.subscribeState('discovery.0.devicesProgress', handlerInstall);\n void socket.subscribeState('discovery.0.instancesFound', handlerInstall);\n void socket.subscribeState('discovery.0.scanRunning', handlerInstall);\n void socket.subscribeState('discovery.0.servicesProgress', handlerInstall);\n\n return () => {\n void socket.unsubscribeObject('system.discovery', onSystemDiscoveryChanged);\n void socket.unsubscribeState('discovery.0.devicesFound', handlerInstall);\n void socket.unsubscribeState('discovery.0.devicesProgress', handlerInstall);\n void socket.unsubscribeState('discovery.0.instancesFound', handlerInstall);\n void socket.unsubscribeState('discovery.0.scanRunning', handlerInstall);\n void socket.unsubscribeState('discovery.0.servicesProgress', handlerInstall);\n };\n }, [socket]);\n\n const stepUp = (): void => setStep(step + 1);\n\n const stepDown = (): void => setStep(step - 1);\n\n const extendObject = (id: string, data: Record<string, any>): Promise<void> =>\n socket.extendObject(id, data).catch((error: any) => window.alert(error));\n\n const discoverScanner = async (): Promise<void> => {\n setDisableScanner(true);\n const dataArray = Object.keys(checkboxChecked).filter(key => checkboxChecked[key]);\n const resultList = await socket.sendTo('system.adapter.discovery.0', 'browse', dataArray);\n setDisableScanner(false);\n if (resultList.error) {\n window.alert(resultList.error);\n } else {\n setStep(1);\n }\n };\n\n const handleSelectAllClick = (event: any): void => {\n if (event.target.checked) {\n const newSelected = discoveryData?.native?.newInstances?.map(n => n._id);\n setSelected(newSelected);\n return;\n }\n setSelected([]);\n };\n\n const isSelected = (name: string, arr: string[]): boolean => arr.includes(name);\n\n const handleClick = (_event: any, name: string, arr: string[], func: (newSelected: any) => void): void => {\n const selectedIndex = arr.indexOf(name);\n let newSelected: string[] = [];\n\n if (selectedIndex === -1) {\n newSelected = newSelected.concat(arr, name);\n } else if (selectedIndex === 0) {\n newSelected = newSelected.concat(arr.slice(1));\n } else if (selectedIndex === arr.length - 1) {\n newSelected = newSelected.concat(arr.slice(0, -1));\n } else if (selectedIndex > 0) {\n newSelected = newSelected.concat(arr.slice(0, selectedIndex), arr.slice(selectedIndex + 1));\n }\n\n func(newSelected);\n };\n\n const checkLicenseAndInputs = (objName: string, cb: () => void): void => {\n const instanceObj: DiscoveryInstance | null = discoveryData?.native?.newInstances.find(\n ob => ob._id === objName,\n );\n const obj: DiscoveryInstance | null = instanceObj ? JSON.parse(JSON.stringify(instanceObj)) : null;\n let license = true;\n if (obj?.comment?.license && obj.comment.license !== 'MIT') {\n license = false;\n if (!obj.common.licenseUrl) {\n obj.common.licenseUrl = `https://raw.githubusercontent.com/ioBroker/ioBroker.${obj.common.name}/master/LICENSE`;\n }\n if (obj.common.licenseUrl && typeof obj.common.licenseUrl === 'object') {\n obj.common.licenseUrl = obj.common.licenseUrl[I18n.getLanguage()] || obj.common.licenseUrl.en;\n }\n if ((obj.common.licenseUrl as string).includes('github.com')) {\n obj.common.licenseUrl = (obj.common.licenseUrl as string)\n .replace('github.com', 'raw.githubusercontent.com')\n .replace('/blob/', '/');\n }\n }\n\n if (license) {\n if (obj.comment?.inputs) {\n setShowInputsDialog({ cb, obj });\n } else {\n cb();\n }\n } else {\n setShowLicenseDialog({ cb, obj });\n }\n };\n\n const goToNextInstance = (id: string, reason: string): void => {\n const index = selected.indexOf(id) + 1;\n setInstallStatus(status => ({ ...status, [index]: 'error' }));\n\n if (reason) {\n setLogs(logsEl => ({ ...logsEl, [selected[index - 1]]: [I18n.t(reason)] }));\n }\n\n if (selected.length > index) {\n setTimeout(\n () =>\n checkLicenseAndInputs(selected[index], () => {\n setCurrentInstall(index + 1);\n setCmdName('install');\n setInstallProgress(true);\n }),\n 100,\n );\n } else {\n setFinishInstall(true);\n }\n };\n\n const inputsDialog = showInputsDialog ? (\n <GenerateInputsModal\n socket={socket}\n theme={theme}\n themeType={themeType}\n themeName={themeName}\n newInstance={showInputsDialog.obj}\n systemConfig={systemConfig}\n onClose={params => {\n const { cb } = showInputsDialog;\n const { obj } = showInputsDialog;\n setShowInputsDialog(null);\n\n if (params) {\n setInstancesInputsParams(params);\n cb();\n } else {\n goToNextInstance(obj._id, 'Error: configuration dialog canceled');\n }\n }}\n />\n ) : null;\n\n const resetStateBack = (): void => {\n setSelected([]);\n setInstallProgress(false);\n setFinishInstall(false);\n setCurrentInstall(1);\n setCmdName('install');\n setInstallStatus({});\n };\n\n const checkInstall = (): void => {\n checkLicenseAndInputs(selected[0], () => {\n setCurrentInstall(1);\n setInstallProgress(true);\n });\n };\n\n const licenseDialog = showLicenseDialog ? (\n <LicenseDialog\n licenseType={showLicenseDialog.obj.comment.license}\n url={showLicenseDialog.obj.common.licenseUrl as string}\n onClose={result => {\n const { cb, obj } = showLicenseDialog;\n setShowLicenseDialog(null);\n if (!result) {\n // license isn't accepted, go to the next instance\n goToNextInstance(obj._id, 'Error: license not accepted');\n } else if (obj.comment?.inputs) {\n setShowInputsDialog({ cb, obj });\n } else {\n cb();\n }\n }}\n />\n ) : null;\n\n return (\n <ThemeProvider theme={theme}>\n {licenseDialog}\n {inputsDialog}\n <Dialog\n onClose={(event, reason) => {\n if (reason !== 'backdropClick' && reason !== 'escapeKeyDown') {\n onClose();\n }\n }}\n open={!0}\n sx={{ '& .MuiDialog-paper': styles.paper }}\n >\n <h2 style={styles.heading}>\n <VisibilityIcon\n style={{\n color: 'rgb(77 171 245)',\n fontSize: 36,\n marginLeft: 25,\n marginRight: 10,\n }}\n />\n {I18n.t('Find devices and services')}\n </h2>\n <Stepper\n style={styles.stepper}\n alternativeLabel\n activeStep={step}\n >\n {steps.map(label => (\n <Step key={label}>\n <StepLabel>{I18n.t(label)}</StepLabel>\n </Step>\n ))}\n </Stepper>\n <DialogContent\n style={{ ...styles.flex, ...styles.overflowHidden }}\n dividers\n >\n <div style={styles.root}>\n <TabPanel\n style={{ ...styles.overflowAuto, color: black ? 'white' : undefined }}\n value={step}\n index={0}\n black={black}\n title={I18n.t('Discover all possible devices')}\n >\n {!disableScanner ? (\n <>\n {' '}\n <div style={styles.headerText}>{I18n.t('press_discover')}</div>\n {discoveryData?.native?.lastScan && (\n <div style={styles.descriptionHeaderText}>\n {I18n.t(\n 'Last scan on %s',\n Utils.formatDate(new Date(discoveryData.native.lastScan), dateFormat),\n )}\n </div>\n )}\n <div style={{ ...styles.headerBlock, color: !black ? 'white' : undefined }}>\n {I18n.t('Use following methods:')}\n </div>\n {Object.keys(listMethods).map(key => (\n <div key={key}>\n <Checkbox\n checked={checkboxChecked[key]}\n disabled={disableScanner}\n onChange={(_, value) => {\n const newCheckboxChecked = JSON.parse(\n JSON.stringify(checkboxChecked),\n );\n newCheckboxChecked[key] = value;\n ((window as any)._localStorage || window.localStorage).setItem(\n 'App.discoveryLastSelection',\n JSON.stringify(newCheckboxChecked),\n );\n setCheckboxChecked(newCheckboxChecked);\n }}\n />\n {key}\n </div>\n ))}\n </>\n ) : (\n scanRunning && (\n <div>\n {devicesProgress >= 99\n ? `Lookup services - ${servicesProgress}%`\n : `Lookup devices - ${devicesProgress}%`}\n {disableScanner && (\n <LinearProgress\n variant=\"determinate\"\n value={devicesProgress >= 99 ? servicesProgress : devicesProgress}\n />\n )}\n {devicesProgress >= 99\n ? `${instancesFound} service(s) found`\n : `${devicesFound} device(s) found`}\n </div>\n )\n )}\n </TabPanel>\n <TabPanel\n style={styles.overflowAuto}\n value={step}\n index={1}\n title={\n discoveryData?.native?.lastScan\n ? I18n.t(\n 'Create instances automatically - Last scan on %s',\n Utils.formatDate(new Date(discoveryData.native.lastScan), dateFormat),\n )\n : I18n.t('Create instances automatically')\n }\n >\n <div style={styles.wrapperSwitch}>\n <div style={styles.divSwitch}>\n <div style={!showAll ? { color: 'green' } : undefined}>\n {I18n.t('hide ignored')}\n </div>\n <Switch\n checked={showAll}\n onChange={e => setShowAll(e.target.checked)}\n color=\"primary\"\n />\n <div style={showAll ? { color: 'green' } : undefined}>{I18n.t('show ignored')}</div>\n </div>\n <div style={{ ...styles.divSwitch, ...styles.marginLeft }}>\n <div style={!suggested ? { color: 'green' } : undefined}>\n {I18n.t('hide suggested')}\n </div>\n <Switch\n checked={suggested}\n onChange={e => setSuggested(e.target.checked)}\n color=\"primary\"\n />\n <div style={suggested ? { color: 'green' } : undefined}>\n {I18n.t('show suggested')}\n </div>\n </div>\n </div>\n <Paper style={styles.paperTable}>\n <TableContainer>\n <Table\n style={styles.table}\n size=\"small\"\n >\n <EnhancedTableHead\n numSelected={selected.length}\n onSelectAllClick={handleSelectAllClick}\n rowCount={discoveryData?.native?.newInstances?.length || 0}\n />\n <TableBody>\n {discoveryData?.native?.newInstances\n ?.filter((el: any) => {\n if (!suggested) {\n return !el.comment?.advice;\n }\n if (!showAll) {\n return !el?.comment?.ack;\n }\n return true;\n })\n .map((obj: any, idx: number) => (\n <TableRow\n hover\n role=\"checkbox\"\n key={obj._id}\n selected={obj.comment?.advice}\n >\n <TableCell padding=\"checkbox\">\n <Checkbox\n checked={isSelected(obj._id, selected)}\n onClick={e =>\n handleClick(e, obj._id, selected, setSelected)\n }\n />\n </TableCell>\n <TableCell\n component=\"th\"\n scope=\"row\"\n padding=\"none\"\n >\n <div style={styles.instanceWrapper}>\n <Avatar\n variant=\"square\"\n alt={obj._id.replace('system.adapter.', '')}\n src={repository[obj.common.name]?.icon}\n style={styles.instanceIcon}\n />\n <div style={styles.instanceId}>\n {obj._id.replace('system.adapter.', '')}\n </div>\n </div>\n </TableCell>\n <TableCell align=\"left\">\n {checkSelectHosts ? (\n <SelectWithIcon\n fullWidth\n lang={I18n.getLanguage()}\n list={hosts as ioBroker.Object[]}\n t={I18n.t}\n value={hostInstances[obj._id] || currentHost}\n themeType={themeType}\n onChange={val =>\n setHostInstances({\n ...hostInstances,\n [obj._id]: val,\n })\n }\n />\n ) : (\n '_'\n )}\n </TableCell>\n <TableCell align=\"left\">{buildComment(obj.comment)}</TableCell>\n <TableCell\n align=\"right\"\n padding=\"checkbox\"\n >\n <Checkbox\n checked={!!obj?.comment?.ack}\n onClick={() => {\n const newInstances = JSON.parse(\n JSON.stringify(\n discoveryData?.native.newInstances,\n ),\n );\n\n newInstances[idx].comment = {\n ...newInstances[idx].comment,\n ack: !newInstances[idx].comment.ack,\n };\n\n void extendObject('system.discovery', {\n native: { newInstances },\n });\n }}\n />\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n </Paper>\n </TabPanel>\n <TabPanel\n value={step}\n index={2}\n style={{ ...styles.overflowAuto, height: '100%' }}\n boxHeight\n title={I18n.t('Install adapters')}\n >\n <div style={{ display: 'flex', height: '100%' }}>\n <div>\n {selected.map((el, idx) => (\n <Box\n component=\"div\"\n key={el}\n onClick={finishInstall ? () => setSelectLogsIndex(idx) : undefined}\n sx={{\n ...styles.headerBlockDisplayItem,\n ...(finishInstall ? styles.pointer : undefined),\n ...(finishInstall ? styles.hover : undefined),\n ...(finishInstall && selectLogsIndex === idx\n ? styles.activeBlock\n : undefined),\n }}\n >\n <div style={styles.width200}>\n <div style={styles.instanceWrapper}>\n <Avatar\n variant=\"square\"\n alt={el.replace('system.adapter.', '')}\n src={\n repository[el.replace('system.adapter.', '').split('.')[0]]\n ?.icon\n }\n style={styles.instanceIcon}\n />\n <div style={styles.instanceId}>\n {el.replace('system.adapter.', '')}\n </div>\n </div>\n </div>\n {currentInstall === idx + 1 && !installStatus[idx + 1] && (\n <CircularProgress size={20} />\n )}\n {installStatus[idx + 1] === 'error' ? (\n <ReportProblemIcon style={styles.installError} />\n ) : installStatus[idx + 1] === 'success' ? (\n <AssignmentTurnedInIcon style={styles.installSuccess} />\n ) : null}\n </Box>\n ))}\n </div>\n {currentInstall && (installProgress || finishInstall) && (\n <div style={{ overflow: 'hidden', width: 'calc(100% - 260px)' }}>\n <Command\n noSpacing\n key={`${currentInstall}-${cmdName}`}\n ready\n host={currentHost}\n logsRead={\n finishInstall ? logs[selected[selectLogsIndex]] || ['skipped'] : null\n }\n showElement={!finishInstall}\n socket={socket}\n t={I18n.t}\n cmd={\n finishInstall\n ? ''\n : `${cmdName} ${\n selected[currentInstall - 1]\n .replace('system.adapter.', '')\n .split('.')[0]\n }`\n }\n onFinished={(_, logsSuccess) => {\n let data = JSON.parse(\n JSON.stringify(\n discoveryData?.native.newInstances.find(\n (obj: any) => obj._id === selected[currentInstall - 1],\n ),\n ),\n );\n delete data.comment;\n\n let adapterId = data._id.split('.');\n adapterId.pop();\n adapterId = adapterId.join('.');\n void socket.getObject(adapterId).then((obj: ioBroker.AdapterObject) => {\n data = { ...obj, ...data };\n data.common = Object.assign(obj.common, data.common);\n data.native = Object.assign(obj.native, data.native);\n data.type = 'instance';\n\n // set log level\n if (defaultLogLevel) {\n data.common.logLevel = defaultLogLevel;\n }\n data.common.logLevel = data.common.logLevel || 'info';\n\n if (\n instancesInputsParams.native &&\n Object.keys(instancesInputsParams.native).length\n ) {\n Object.assign(data.native, instancesInputsParams.native);\n setInstancesInputsParams({ native: {} });\n }\n if (checkSelectHosts && hostInstances[data._id]) {\n data.common.host = hostInstances[data._id];\n }\n\n // write created instance\n void extendObject(data._id, data).then(() => {\n if (currentInstall < selected.length) {\n // install next\n checkLicenseAndInputs(selected[currentInstall], () => {\n setCurrentInstall(currentInstall + 1);\n setCmdName('install');\n });\n setLogs({\n ...logs,\n [selected[currentInstall - 1]]: logsSuccess,\n });\n setInstallStatus({\n ...installStatus,\n [currentInstall]: 'success',\n });\n } else {\n setLogs({\n ...logs,\n [selected[currentInstall - 1]]: logsSuccess,\n });\n setInstallStatus({\n ...installStatus,\n [currentInstall]: 'success',\n });\n setSelectLogsIndex(currentInstall - 1);\n const dataDiscovery = JSON.parse(\n JSON.stringify(discoveryData),\n );\n if (dataDiscovery) {\n dataDiscovery.native.newInstances =\n dataDiscovery.native.newInstances.filter(\n ({ _id }: { _id: string }) => {\n const find = selected.find(\n el => el === _id,\n );\n if (!find) {\n return true;\n }\n return (\n installStatus[\n selected.indexOf(find) + 1\n ] !== 'success'\n );\n },\n );\n void socket.setObject(\n 'system.discovery',\n dataDiscovery,\n );\n }\n setFinishInstall(true);\n window.alert(I18n.t('Finished'));\n }\n });\n });\n }}\n errorFunc={(el, logsError) => {\n if (el === 51 && cmdName === 'install') {\n setCmdName('upload');\n return;\n }\n if (selected.length > currentInstall && cmdName === 'upload') {\n checkLicenseAndInputs(selected[currentInstall], () =>\n setCurrentInstall(currentInstall + 1),\n );\n setInstallStatus({ ...installStatus, [currentInstall]: 'error' });\n } else {\n if (selected.length > currentInstall) {\n setInstallStatus({\n ...installStatus,\n [currentInstall]: 'error',\n });\n checkLicenseAndInputs(selected[currentInstall], () =>\n setCurrentInstall(currentInstall + 1),\n );\n setCmdName('install');\n setLogs({ ...logs, [selected[currentInstall - 1]]: logsError });\n } else {\n setInstallStatus({\n ...installStatus,\n [currentInstall]: 'error',\n });\n setLogs({ ...logs, [selected[currentInstall - 1]]: logsError });\n setFinishInstall(true);\n setSelectLogsIndex(currentInstall - 1);\n const dataDiscovery = JSON.parse(JSON.stringify(discoveryData));\n if (dataDiscovery) {\n dataDiscovery.native.newInstances =\n dataDiscovery.native.newInstances.filter(\n ({ _id }: { _id: string }) => {\n const find = selected.find(ele => ele === _id);\n if (!find) {\n return true;\n }\n return (\n installStatus[\n selected.indexOf(find) + 1\n ] !== 'success'\n );\n },\n );\n void socket.setObject('system.discovery', dataDiscovery);\n }\n }\n window.alert(`error ${selected[currentInstall - 1]}`);\n }\n }}\n />\n </div>\n )}\n </div>\n </TabPanel>\n </div>\n </DialogContent>\n <DialogActions>\n {step > 0 && step !== 4 && (\n <Button\n variant=\"contained\"\n disabled={step === 0}\n onClick={() => {\n if (step === 2) {\n resetStateBack();\n }\n stepDown();\n }}\n color=\"grey\"\n startIcon={<NavigateBeforeIcon />}\n >\n {I18n.t('Back')}\n </Button>\n )}\n {step === 0 && (\n <Button\n variant=\"contained\"\n autoFocus\n disabled={disableScanner}\n onClick={discoverScanner}\n color=\"primary\"\n startIcon={<SearchIcon />}\n >\n {I18n.t('Discover')}\n </Button>\n )}\n {step !== 2 && step !== 4 && (\n <Tooltip\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n title={\n step === 0\n ? I18n.t('Skip discovery process and go to install with last scan results')\n : ''\n }\n >\n <span style={{ marginLeft: 8 }}>\n <Button\n variant=\"contained\"\n disabled={\n !discoveryData ||\n !discoveryData?.native?.lastScan ||\n step === 2 ||\n disableScanner ||\n (step === 1 && !selected.length)\n }\n onClick={() => {\n stepUp();\n if (step === 1) {\n checkInstall();\n }\n }}\n color={step === 1 ? 'primary' : 'grey'}\n startIcon={step === 1 ? <LibraryAddIcon /> : <NavigateNextIcon />}\n >\n {I18n.t(step === 1 ? 'Create instances' : 'Use last scan')}\n </Button>\n </span>\n </Tooltip>\n )}\n <Button\n variant=\"contained\"\n disabled={disableScanner}\n onClick={() => onClose()}\n color={step === 2 ? 'primary' : 'grey'}\n startIcon={<CloseIcon />}\n >\n {I18n.t(step === 2 ? 'Finish' : 'Close')}\n </Button>\n </DialogActions>\n </Dialog>\n </ThemeProvider>\n );\n}\n\nexport default DiscoveryDialog;\n","import React, { type RefObject, Suspense, type JSX } from 'react';\nimport { ThemeProvider, StyledEngineProvider } from '@mui/material/styles';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { TouchBackend } from 'react-dnd-touch-backend';\n\n// @mui/material\nimport {\n AppBar,\n Avatar,\n Grid2 as Grid,\n IconButton,\n Paper,\n Snackbar,\n Toolbar,\n Typography,\n Tooltip,\n Badge,\n Menu,\n MenuItem,\n ListItemIcon,\n ListItemText,\n CircularProgress,\n Dialog,\n DialogTitle,\n Button,\n DialogContent,\n DialogContentText,\n DialogActions,\n Box,\n} from '@mui/material';\n\n// @mui/icons-material\nimport {\n Menu as MenuIcon,\n Build as BuildIcon,\n Update as UpdateIcon,\n Visibility as VisibilityIcon,\n PictureInPictureAlt as PictureInPictureAltIcon,\n Person as UserIcon,\n CloudSync as SyncIcon,\n SyncDisabled as SyncIconDisabled,\n Close as CancelIcon,\n Notifications as NotificationsIcon,\n} from '@mui/icons-material';\n\nimport { AdminConnection as Connection, type FilteredNotificationInformation, PROGRESS } from '@iobroker/socket-client';\n\nimport {\n LoaderPT,\n LoaderMV,\n LoaderVendor,\n Loader,\n I18n,\n Router,\n DialogConfirm,\n Icon,\n withWidth,\n Theme,\n IconExpert,\n ToggleThemeMenu,\n type IobTheme,\n type ThemeName,\n type AdminConnection,\n type ThemeType,\n Utils,\n dictionary,\n} from '@iobroker/adapter-react-v5';\n\nimport NotificationsDialog from '@/dialogs/NotificationsDialog';\nimport type { AdminGuiConfig, CompactAdapterInfo, CompactHost, NotificationsCount } from '@/types';\nimport type { InstanceConfig } from '@/tabs/EasyMode';\n\nimport CommandDialog from './dialogs/CommandDialog';\nimport Drawer, {\n STATES as DrawerStates,\n DRAWER_FULL_WIDTH,\n DRAWER_COMPACT_WIDTH,\n DRAWER_EDIT_WIDTH,\n} from './components/Drawer';\n\nimport Connecting from './components/Connecting';\n\nimport WizardDialog from './dialogs/WizardDialog';\nimport SystemSettingsDialog from './dialogs/SystemSettingsDialog';\nimport Login from './login/Login';\nimport HostSelectors from './components/HostSelectors';\nimport ExpertModeDialog from './dialogs/ExpertModeDialog';\nimport NewsAdminDialog, { checkMessages, type DbType, type ShowMessage } from './dialogs/NewsAdminDialog';\nimport HostWarningDialog from './dialogs/HostWarningDialog';\nimport LogsWorker from './Workers/LogsWorker';\nimport InstancesWorker from './Workers/InstancesWorker';\nimport HostsWorker, { type HostEvent, type NotificationAnswer } from './Workers/HostsWorker';\nimport AdaptersWorker, { type AdapterEvent } from './Workers/AdaptersWorker';\nimport ObjectsWorker from './Workers/ObjectsWorker';\nimport DiscoveryDialog from './dialogs/DiscoveryDialog';\nimport SlowConnectionWarningDialog, { SlowConnectionWarningDialogClass } from './dialogs/SlowConnectionWarningDialog';\nimport IsVisible from './components/IsVisible';\nimport type { CompactInstanceInfo } from './dialogs/AdapterUpdateDialog';\n\nimport enLocal from './i18n/en.json';\nimport deLocal from './i18n/de.json';\nimport ruLocal from './i18n/ru.json';\nimport ptLocal from './i18n/pt.json';\nimport nlLocal from './i18n/nl.json';\nimport frLocal from './i18n/fr.json';\nimport itLocal from './i18n/it.json';\nimport esLocal from './i18n/es.json';\nimport plLocal from './i18n/pl.json';\nimport ukLocal from './i18n/uk.json';\nimport zhCNLocal from './i18n/zh-cn.json';\n\n// Tabs\nconst Adapters = React.lazy(() => import('./tabs/Adapters'));\nconst Instances = React.lazy(() => import('./tabs/Instances'));\nconst Intro = React.lazy(() => import('./tabs/Intro'));\nconst Logs = React.lazy(() => import('./tabs/Logs'));\nconst Files = React.lazy(() => import('./tabs/Files'));\nconst Objects = React.lazy(() => import('./tabs/Objects'));\nconst Users = React.lazy(() => import('./tabs/Users'));\nconst Enums = React.lazy(() => import('./tabs/Enums'));\nconst CustomTab = React.lazy(() => import('./tabs/CustomTab'));\nconst Hosts = React.lazy(() => import('./tabs/Hosts'));\nconst EasyMode = React.lazy(() => import('./tabs/EasyMode'));\n\ndeclare global {\n interface Window {\n _localStorage?: Storage;\n _sessionStorage?: Storage;\n\n sidebar?: {\n addPanel: (name: string, icon: string, element: React.ReactNode) => void;\n };\n opera: boolean;\n }\n interface Navigator {\n // @deprecated\n userLanguage: string;\n }\n}\n\nconst query: { login?: boolean } = {};\n\n(window.location.search || '')\n .replace(/^\\?/, '')\n .split('&')\n .forEach(attr => {\n const parts = attr.split('=');\n if (!parts[0]) {\n return;\n }\n (query as Record<string, boolean | string>)[parts[0]] =\n parts[1] === undefined ? true : decodeURIComponent(parts[1]);\n });\n\nconst styles: Record<string, any> = {\n root: {\n display: 'flex',\n height: '100%',\n },\n appBar: (theme: IobTheme) => ({\n transition: theme.transitions.create(['margin', 'width'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n }),\n logoWhite: {\n backgroundColor: '#FFFFFF',\n },\n appBarShift: (theme: IobTheme) => ({\n width: `calc(100% - ${DRAWER_FULL_WIDTH}px)`,\n ml: DRAWER_FULL_WIDTH / 8,\n transition: theme.transitions.create(['margin', 'width'], {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n }),\n appBarShiftEdit: (theme: IobTheme) => ({\n width: `calc(100% - ${DRAWER_EDIT_WIDTH}px)`,\n ml: DRAWER_EDIT_WIDTH / 8,\n transition: theme.transitions.create(['margin', 'width'], {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n }),\n appBarShiftCompact: (theme: IobTheme) => ({\n width: `calc(100% - ${DRAWER_COMPACT_WIDTH}px)`,\n ml: DRAWER_COMPACT_WIDTH / 8,\n transition: theme.transitions.create(['margin', 'width'], {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n }),\n menuButton: {\n marginRight: 16,\n },\n hide: {\n display: 'none',\n },\n content: (theme: IobTheme) => ({\n flexGrow: 1,\n padding: 1,\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n overflowY: 'auto',\n mt: `${theme.mixins.toolbar?.minHeight}px`,\n '@media (min-width:0px) and (orientation: landscape)': {\n // @ts-expect-error must be defined\n mt: theme.mixins.toolbar['@media (min-width:0px) and (orientation: landscape)']?.minHeight\n ? // @ts-expect-error must be defined\n `${theme.mixins.toolbar['@media (min-width:0px) and (orientation: landscape)'].minHeight}px`\n : undefined,\n },\n '@media (min-width:600px)': {\n // @ts-expect-error must be defined\n mt: theme.mixins.toolbar['@media (min-width:600px)']?.minHeight\n ? // @ts-expect-error must be defined\n `${theme.mixins.toolbar['@media (min-width:600px)'].minHeight}px`\n : undefined,\n },\n }),\n contentMargin: {\n ml: -DRAWER_FULL_WIDTH / 8,\n },\n contentMarginEdit: {\n ml: -DRAWER_EDIT_WIDTH / 8,\n },\n contentMarginCompact: {\n ml: -DRAWER_COMPACT_WIDTH / 8,\n },\n contentShift: (theme: IobTheme) => ({\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n ml: 0,\n }),\n expertIcon: {\n width: 22,\n height: 22,\n // color: theme.palette.text ? theme.palette.text.disabled : 'grey'\n },\n expertIconActive: {\n // color: theme.palette.action.active\n },\n baseSettingsButton: {\n color: 'red',\n },\n alert_info: {},\n alert_error: {\n backgroundColor: '#f44336',\n },\n alert_success: {\n backgroundColor: '#4caf50',\n },\n avatarNotVisible: {\n opacity: 0,\n marginLeft: 5,\n transition: 'opacity 0.3s',\n width: 'initial',\n },\n avatarVisible: {\n opacity: 1,\n },\n cmd: {\n animation: '1s linear infinite alternate $myEffect',\n opacity: 0.2,\n },\n errorCmd: {\n color: '#a90000',\n animation: '0.2s linear infinite alternate myEffect2',\n },\n performed: (theme: IobTheme) => ({\n color: theme.palette.mode === 'light' ? '#3bfd44' : '#388e3c',\n animation: '0.2s linear infinite alternate myEffect2',\n }),\n wrapperButtons: {\n display: 'flex',\n marginRight: 'auto',\n overflowY: 'auto',\n alignItems: 'center',\n },\n\n flexGrow: {\n flexGrow: 2,\n },\n userBadge: {\n lineHeight: '48px',\n display: 'inline-block',\n },\n userIcon: {\n borderRadius: 4,\n width: 44,\n height: 44,\n verticalAlign: 'middle',\n marginLeft: 10,\n marginRight: 10,\n },\n userText: {\n verticalAlign: 'middle',\n fontSize: 16,\n maxWidth: 250,\n marginRight: 10,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: 'inline-block',\n },\n userBackground: (theme: IobTheme) => ({\n borderRadius: 1,\n backgroundColor: theme.palette.mode === 'dark' ? '#EEE' : '#222',\n p: 0.5,\n }),\n styleVersion: {\n fontSize: 10,\n },\n wrapperName: {\n display: 'flex',\n flexDirection: 'column',\n marginRight: 10,\n },\n expertBadge: {\n mt: '11px',\n mr: '11px',\n },\n siteName: {\n lineHeight: '48px',\n fontSize: 24,\n marginLeft: 10,\n marginRight: 10,\n display: 'inline-block',\n verticalAlign: 'middle',\n },\n tooltip: {\n pointerEvents: 'none',\n },\n};\n\ninterface ObjectGuiSettings extends ioBroker.StateObject {\n common: {\n name: ioBroker.StringOrTranslated;\n type: 'boolean';\n read: true;\n write: false;\n role: 'state';\n };\n native: {\n localStorage: Record<string, any>;\n sessionStorage: Record<string, any>;\n 'App.drawerState'?: string;\n };\n}\n\nconst DEFAULT_GUI_SETTINGS_OBJECT: ObjectGuiSettings = {\n _id: '',\n type: 'state',\n common: {\n name: 'Admin settings',\n type: 'boolean',\n read: true,\n write: false,\n role: 'state',\n },\n native: {\n localStorage: {},\n sessionStorage: {},\n },\n};\n\ninterface AppProps {\n width: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n}\n\ntype CompactRepository = Record<\n string,\n {\n icon: ioBroker.AdapterCommon['icon'];\n version: string;\n }\n>;\ntype CompactInstalledInfo = Record<\n string,\n {\n version: string;\n ignoreVersion?: string;\n }\n>;\n\ninterface AppState {\n connected: boolean;\n progress: number;\n ready: boolean;\n lang: ioBroker.Languages;\n expertMode: boolean;\n expertModeDialog?: boolean;\n showGuiSettings?: HTMLButtonElement | null;\n hosts: CompactHost[];\n currentHost: string;\n currentHostName: string;\n ownHost: string;\n currentTab: {\n tab: string;\n dialog?: string;\n id?: string;\n arg?: string;\n };\n systemConfig: ioBroker.SystemConfigObject;\n showHostWarning: {\n host: string;\n instances: Record<string, ioBroker.InstanceObject>;\n result: FilteredNotificationInformation;\n } | null;\n user: {\n id: string;\n name: string;\n color?: string;\n icon?: string;\n invertBackground: boolean;\n } | null;\n repository: CompactRepository;\n installed: CompactInstalledInfo;\n waitForRestart: boolean;\n tabs: any;\n config: Record<string, any>;\n stateChanged: boolean;\n theme: IobTheme;\n themeName: ThemeName;\n themeType: ThemeType;\n alert: boolean;\n alertType: 'error' | 'warning' | 'info' | 'success';\n alertMessage: string;\n drawerState: 0 | 1 | 2;\n editMenuList: boolean;\n tab: any;\n allStored: boolean;\n dataNotStoredDialog: boolean;\n dataNotStoredTab: {\n tab: string;\n subTab?: string;\n param?: string;\n } | null;\n baseSettingsOpened: boolean;\n unsavedDataInDialog: boolean;\n systemSettingsOpened: boolean;\n\n cmd: string | null;\n cmdDialog: boolean;\n commandHost: string | null;\n callback?: ((exitCode?: number) => void) | null;\n commandError: boolean;\n commandRunning: boolean;\n\n wizard: boolean;\n performed: boolean;\n discoveryAlive: boolean;\n readTimeoutMs: number;\n showSlowConnectionWarning: boolean;\n expireWarningMode: boolean;\n versionAdmin: string;\n forceUpdateAdapters: number;\n noTranslation: boolean;\n cloudNotConnected: boolean;\n cloudReconnect: number;\n showRedirect: string;\n redirectCountDown: number;\n triggerAdapterUpdate: number;\n updating: boolean;\n notificationsDialog: boolean;\n notifications: Record<string, any>;\n /** Number of active notifications */\n noNotifications: NotificationsCount;\n configNotSaved: boolean;\n login: boolean;\n hostname: string;\n hasGlobalError?: null | Error;\n guiSettings?: boolean;\n strictEasyMode?: boolean;\n easyModeConfigs?: InstanceConfig[];\n adapters: Record<string, CompactAdapterInfo>;\n showNews?: {\n checkNews: ShowMessage[];\n lastNewsId: string | undefined;\n } | null;\n}\n\nclass App extends Router<AppProps, AppState> {\n private readonly translations: Record<ioBroker.Languages, Record<string, string>>;\n\n /** Seconds before logout to show warning */\n private readonly EXPIRE_WARNING_THRESHOLD: number = 120;\n\n private refConfigIframe: HTMLIFrameElement | null = null;\n\n private readonly refUser: RefObject<HTMLDivElement>;\n\n private readonly refUserDiv: RefObject<HTMLDivElement>;\n\n private expireInSec: number | null = null;\n\n private lastExecution: number = 0;\n\n private pingAuth: ReturnType<typeof setTimeout> | null = null;\n\n private expireInSecInterval: ReturnType<typeof setTimeout> | null = null;\n\n private readonly toggleThemePossible: boolean;\n\n private readonly expireText: string = I18n.t('Session expire in %s', '%s');\n\n private adminGuiConfig: AdminGuiConfig;\n\n private logsWorker: LogsWorker | null;\n\n private instancesWorker: InstancesWorker | null;\n\n private hostsWorker: HostsWorker | null;\n\n private adaptersWorker: AdaptersWorker | null;\n\n private objectsWorker: ObjectsWorker | null;\n\n private guiSettings: ObjectGuiSettings;\n\n private localStorageTimer: ReturnType<typeof setTimeout> | null = null;\n\n private languageSet: boolean;\n\n private socket: AdminConnection;\n\n private adminInstance: string = '';\n\n private newsInstance: number = 0;\n\n constructor(props: AppProps) {\n super(props);\n\n try {\n window.alert = message => {\n if (message && message.toString().toLowerCase().includes('error')) {\n console.error(message);\n this.showAlert(message.toString(), 'error');\n } else {\n console.log(message);\n this.showAlert(message.toString(), 'info');\n }\n };\n } catch {\n // ignore. FF could not redefine alert\n }\n\n // init translations\n this.translations = dictionary;\n\n const translations: Record<ioBroker.Languages, Record<string, string>> = {\n en: enLocal,\n de: deLocal,\n ru: ruLocal,\n pt: ptLocal,\n nl: nlLocal,\n fr: frLocal,\n it: itLocal,\n es: esLocal,\n pl: plLocal,\n uk: ukLocal,\n 'zh-cn': zhCNLocal,\n };\n\n // merge together\n Object.keys(translations).forEach((lang: ioBroker.Languages) =>\n Object.assign(this.translations[lang], translations[lang]),\n );\n\n // init translations\n I18n.setTranslations(this.translations);\n I18n.setLanguage(\n (window.navigator.language || window.navigator.userLanguage || 'en')\n .substring(0, 2)\n .toLowerCase() as ioBroker.Languages,\n );\n\n this.refUser = React.createRef<HTMLDivElement>();\n this.refUserDiv = React.createRef<HTMLDivElement>();\n this.adminGuiConfig = {\n admin: {\n menu: {},\n settings: {},\n adapters: {},\n login: {},\n },\n };\n\n const vendorPrefix = window.vendorPrefix;\n this.toggleThemePossible = !vendorPrefix || vendorPrefix === '@@vendorPrefix@@' || vendorPrefix === 'MV';\n\n if (!query.login) {\n const drawerStateStr = (window._localStorage || window.localStorage).getItem('App.drawerState');\n let drawerState: 0 | 1 | 2;\n if (drawerStateStr) {\n drawerState = parseInt(drawerStateStr, 10) as 0 | 1 | 2;\n } else {\n drawerState = this.props.width === 'xs' ? (DrawerStates.closed as 1) : (DrawerStates.opened as 0);\n }\n\n const theme = App.createTheme();\n\n // install setter for configNotSaved (used in javascript)\n Object.defineProperty(window, 'configNotSaved', {\n get: () => this.state.configNotSaved,\n set: configNotSaved => {\n const allStored = !configNotSaved;\n if (allStored !== this.state.allStored) {\n this.setState({ allStored });\n }\n },\n configurable: true,\n });\n\n this.state = {\n connected: false,\n progress: 0,\n ready: false,\n lang: 'en',\n\n hostname: window.location.hostname,\n\n expertMode: false,\n\n hosts: [],\n currentHost: '',\n currentHostName: '',\n ownHost: '',\n currentTab: Router.getLocation(),\n systemConfig: null,\n user: null, // Logged in user\n\n repository: {},\n installed: {},\n\n waitForRestart: false,\n tabs: null,\n config: {},\n\n stateChanged: false,\n\n theme,\n themeName: App.getThemeName(theme),\n themeType: App.getThemeType(theme),\n\n alert: false,\n alertType: 'info',\n alertMessage: '',\n drawerState,\n editMenuList: false,\n\n tab: null,\n allStored: true,\n dataNotStoredDialog: false,\n dataNotStoredTab: null,\n\n baseSettingsOpened: false,\n unsavedDataInDialog: false,\n systemSettingsOpened: false,\n\n cmd: null,\n cmdDialog: false,\n commandHost: null,\n commandError: false,\n commandRunning: false,\n\n wizard: true,\n performed: false,\n\n discoveryAlive: false,\n\n readTimeoutMs: SlowConnectionWarningDialogClass.getReadTimeoutMs(),\n showSlowConnectionWarning: false,\n\n /** if true, shows the expiry warning (left time and update button) */\n expireWarningMode: false,\n\n versionAdmin: '',\n\n forceUpdateAdapters: 0,\n\n noTranslation: (window._localStorage || window.localStorage).getItem('App.noTranslation') !== 'false',\n\n cloudNotConnected: false,\n cloudReconnect: 0,\n\n showRedirect: '',\n redirectCountDown: 0,\n\n triggerAdapterUpdate: 0,\n\n updating: false, // js controller updating\n /** If the notification dialog should be shown */\n notificationsDialog: false,\n /** Notifications, excluding the system ones */\n notifications: {},\n /** Number of new notifications */\n noNotifications: {\n warning: 0,\n other: 0,\n },\n\n configNotSaved: false,\n login: false,\n showHostWarning: null,\n adapters: {},\n };\n this.logsWorker = null;\n this.instancesWorker = null;\n this.hostsWorker = null;\n } else {\n const theme = App.createTheme();\n this.state = {\n login: true,\n theme,\n themeName: App.getThemeName(theme),\n themeType: App.getThemeType(theme),\n } as AppState;\n }\n }\n\n static getDerivedStateFromError(error: null | { message: string; stack: any }): {\n hasGlobalError: null | { message: string; stack: any };\n } {\n // Update state so the next render will show the fallback UI.\n return { hasGlobalError: error };\n }\n\n componentDidCatch(error: Error): void {\n this.setState({ hasGlobalError: error });\n }\n\n setUnsavedData(hasUnsavedData: boolean): void {\n if (hasUnsavedData !== this.state.unsavedDataInDialog) {\n this.setState({ unsavedDataInDialog: hasUnsavedData });\n }\n }\n\n // If the background color must be inverted. Depends on the current theme.\n mustInvertBackground(color: string): boolean {\n if (!color) {\n return false;\n }\n const invertedColor = Utils.invertColor(color, true);\n if (invertedColor === '#FFFFFF' && this.state.themeType === 'dark') {\n return true;\n }\n\n return invertedColor === '#000000' && this.state.themeType === 'light';\n }\n\n localStorageGetItem = (name: string): any => this.guiSettings.native.localStorage[name];\n\n localStorageSetItem = (name: string, value: any): void => {\n if (value === null) {\n value = 'null';\n } else if (value === undefined) {\n this.localStorageRemoveItem(name);\n return;\n }\n this.guiSettings.native.localStorage[name] = value.toString();\n\n this.localStorageSave();\n };\n\n localStorageRemoveItem = (name: string): void => {\n if (Object.prototype.hasOwnProperty.call(this.guiSettings.native.localStorage, name)) {\n delete this.guiSettings.native.localStorage[name];\n this.localStorageSave();\n }\n };\n\n sessionStorageGetItem = (name: string): any => this.guiSettings.native.sessionStorage[name];\n\n sessionStorageSetItem = (name: string, value: any): void => {\n if (value === null) {\n value = 'null';\n } else if (value === undefined) {\n this.sessionStorageRemoveItem(name);\n return;\n }\n this.guiSettings.native.sessionStorage[name] = value.toString();\n this.localStorageSave();\n };\n\n sessionStorageRemoveItem = (name: string): void => {\n if (Object.prototype.hasOwnProperty.call(this.guiSettings.native.sessionStorage, name)) {\n delete this.guiSettings.native.sessionStorage[name];\n this.localStorageSave();\n }\n };\n\n localStorageSave(): void {\n if (this.localStorageTimer) {\n clearTimeout(this.localStorageTimer);\n }\n this.localStorageTimer = setTimeout(async () => {\n this.localStorageTimer = null;\n await this.socket.setObject(`system.adapter.${this.adminInstance}.guiSettings`, this.guiSettings);\n }, 200);\n }\n\n toggleTranslation = (): void => {\n (window._localStorage || window.localStorage).setItem(\n 'App.noTranslation',\n this.state.noTranslation ? 'false' : 'true',\n );\n this.setState({ noTranslation: !this.state.noTranslation });\n };\n\n async getGUISettings(): Promise<void> {\n let obj;\n\n if (!this.adminInstance) {\n return;\n }\n\n try {\n obj = await this.socket.getObject(`system.adapter.${this.adminInstance}.guiSettings`);\n } catch (e) {\n console.warn(`Could not get \"system.adapter.${this.adminInstance}.guiSettings\": ${e.message}`);\n }\n\n if (!obj) {\n obj = JSON.parse(JSON.stringify(DEFAULT_GUI_SETTINGS_OBJECT));\n try {\n await this.socket.setObject(`system.adapter.${this.adminInstance}.guiSettings`, obj);\n } catch (e) {\n console.warn(`Could not update \"system.adapter.${this.adminInstance}.guiSettings\": ${e}`);\n }\n }\n\n let state;\n try {\n state = await this.socket.getState(`system.adapter.${this.adminInstance}.guiSettings`);\n } catch {\n state = { val: false };\n }\n if (state?.val) {\n this.guiSettings = obj;\n this.guiSettings.native = this.guiSettings.native || { localStorage: {}, sessionStorage: {} };\n if (!this.guiSettings.native.localStorage) {\n this.guiSettings.native = { localStorage: this.guiSettings.native, sessionStorage: {} };\n }\n\n // @ts-expect-error it is not full implementation of storage\n window._localStorage = {\n getItem: this.localStorageGetItem,\n setItem: this.localStorageSetItem,\n removeItem: this.localStorageRemoveItem,\n };\n // @ts-expect-error it is not full implementation of storage\n window._sessionStorage = {\n getItem: this.sessionStorageGetItem,\n setItem: this.sessionStorageSetItem,\n removeItem: this.sessionStorageRemoveItem,\n };\n\n // this is only settings that initialized before the connection was established\n const drawerStateStr = (window._localStorage || window.localStorage).getItem('App.drawerState');\n let drawerState: 0 | 1 | 2;\n if (drawerStateStr) {\n drawerState = parseInt(drawerStateStr, 10) as 0 | 1 | 2;\n } else {\n drawerState = this.props.width === 'xs' ? (DrawerStates.closed as 1) : (DrawerStates.opened as 0);\n }\n const noTranslation =\n (window._localStorage || window.localStorage).getItem('App.noTranslation') !== 'false';\n\n this.setState({ guiSettings: true, drawerState, noTranslation }, () => {\n if (Utils.getThemeName() !== this.state.theme.name) {\n this.toggleTheme(Utils.getThemeName());\n }\n });\n } else if (this.state.guiSettings) {\n window._localStorage = null;\n window._sessionStorage = null;\n\n this.setState({ guiSettings: false });\n }\n }\n\n enableGuiSettings(enabled: boolean, ownSettings?: boolean): void {\n if (enabled && !this.guiSettings) {\n void this.socket.getObject(`system.adapter.${this.adminInstance}.guiSettings`).then(async obj => {\n this.guiSettings = obj || JSON.parse(JSON.stringify(DEFAULT_GUI_SETTINGS_OBJECT));\n\n if (ownSettings || !this.guiSettings.native || !Object.keys(this.guiSettings.native).length) {\n this.guiSettings.native = { localStorage: {}, sessionStorage: {} };\n Object.keys(window.localStorage).forEach(name => {\n if (\n name !== 'getItem' &&\n name !== 'setItem' &&\n name !== 'removeItem' &&\n name !== 'clear' &&\n name !== 'key' &&\n name !== 'length'\n ) {\n this.guiSettings.native.localStorage[name] = window.localStorage.getItem(name);\n }\n });\n\n Object.keys(window.sessionStorage).forEach(name => {\n if (\n name !== 'getItem' &&\n name !== 'setItem' &&\n name !== 'removeItem' &&\n name !== 'clear' &&\n name !== 'key' &&\n name !== 'length'\n ) {\n this.guiSettings.native.sessionStorage[name] = window.sessionStorage.getItem(name);\n }\n });\n await this.socket.setObject(`system.adapter.${this.adminInstance}.guiSettings`, this.guiSettings);\n await this.socket.setState(`system.adapter.${this.adminInstance}.guiSettings`, {\n val: true,\n ack: true,\n });\n } else {\n await this.socket.setState(`system.adapter.${this.adminInstance}.guiSettings`, {\n val: true,\n ack: true,\n });\n window.location.reload();\n }\n\n await this.getGUISettings();\n });\n } else if (!enabled && this.guiSettings) {\n void this.socket.getObject(`system.adapter.${this.adminInstance}.guiSettings`).then(async obj => {\n if (!obj) {\n try {\n // create an object if not exists\n await this.socket.setObject(\n `system.adapter.${this.adminInstance}.guiSettings`,\n DEFAULT_GUI_SETTINGS_OBJECT,\n );\n } catch (e) {\n console.error(`Cannot create system.adapter.${this.adminInstance}.guiSettings\": ${e}`);\n }\n }\n window._localStorage = null;\n window._sessionStorage = null;\n\n // clear localStorage\n Object.keys(window.localStorage).forEach(key => window.localStorage.removeItem(key));\n Object.keys(window.sessionStorage).forEach(key => window.sessionStorage.removeItem(key));\n\n Object.keys(this.guiSettings.native.localStorage).forEach(name =>\n window.localStorage.setItem(name, this.guiSettings.native.localStorage[name]),\n );\n Object.keys(this.guiSettings.native.sessionStorage).forEach(name =>\n window.sessionStorage.setItem(name, this.guiSettings.native.sessionStorage[name]),\n );\n\n this.guiSettings = null;\n\n try {\n await this.socket.setState(`system.adapter.${this.adminInstance}.guiSettings`, {\n val: false,\n ack: true,\n });\n } catch (e) {\n window.alert(`Cannot disable settings: ${e}`);\n }\n this.setState({ guiSettings: false });\n });\n }\n }\n\n componentDidMount(): void {\n if (!this.state.login) {\n window.addEventListener('hashchange', this.onHashChanged, false);\n\n if (!this.state.currentTab.tab) {\n this.handleNavigation('tab-intro');\n } else {\n this.setTitle(this.state.currentTab.tab.replace('tab-', ''));\n }\n\n this.socket = new Connection({\n protocol: window.location.protocol,\n host: window.location.hostname,\n\n name: 'admin',\n admin5only: true,\n port: App.getPort(),\n autoSubscribes: ['system.adapter.*'], // Do not subscribe on '*' and really we don't need a 'system.adapter.*' too. Every tab must subscribe itself to everything that it needs\n autoSubscribeLog: true,\n onProgress: progress => {\n if (progress === PROGRESS.CONNECTING) {\n this.setState({\n connected: false,\n });\n } else if (progress === PROGRESS.READY) {\n // BF: (2022.05.09) here must be this.socket.getVersion(true), but I have no Idea, why it does not work :(\n this.socket\n .getVersion()\n .then(async versionInfo => {\n console.log(\n `Stored version: ${this.state.versionAdmin}, new version: ${versionInfo.version}`,\n );\n if (this.state.versionAdmin && this.state.versionAdmin !== versionInfo.version) {\n window.alert('New adapter version detected. Reloading...');\n setTimeout(() => window.location.reload(), 500);\n }\n if (!this.adminInstance) {\n this.adminInstance = await this.socket.getCurrentInstance();\n }\n\n // read settings anew\n await this.getGUISettings();\n\n const newState: Partial<AppState> = {\n connected: true,\n progress: 100,\n versionAdmin: versionInfo.version,\n };\n\n if (this.state.cmd && this.state.cmd.match(/ admin(@[-.\\w]+)?$/)) {\n // close the command dialog after reconnecting (maybe admin was restarted, and update is now finished)\n newState.commandRunning = false;\n newState.forceUpdateAdapters = this.state.forceUpdateAdapters + 1;\n\n this.closeCmdDialog(() => {\n this.setState(newState as AppState);\n window.location.reload();\n });\n } else {\n try {\n const adminObj = await this.socket.getObject(\n `system.adapter.${this.adminInstance}`,\n );\n // use instance language\n if (adminObj?.native?.language) {\n if (adminObj.native.language !== I18n.getLanguage()) {\n console.log(`Language changed to ${adminObj.native.language}`);\n I18n.setLanguage(adminObj.native.language);\n if (this.languageSet) {\n window.location.reload();\n } else {\n this.languageSet = true;\n }\n }\n } else if (this.socket.systemLang !== I18n.getLanguage()) {\n console.log(`Language changed to ${this.socket.systemLang}`);\n I18n.setLanguage(this.socket.systemLang);\n if (this.languageSet) {\n window.location.reload();\n } else {\n this.languageSet = true;\n }\n }\n } catch (e) {\n console.error(`Cannot read admin settings: ${e}`);\n }\n\n this.setState(newState as AppState);\n }\n })\n .catch(err => {\n console.error(`Cannot read version: ${err}`);\n if (err === 'ioBroker is not connected') {\n setInterval(() => {\n if (this.state.cloudReconnect > 0) {\n this.setState({ cloudReconnect: this.state.cloudReconnect - 1 });\n } else {\n window.location.reload();\n }\n }, 1_000);\n\n this.setState({\n cloudNotConnected: true,\n cloudReconnect: 10,\n });\n }\n });\n } else {\n this.setState({\n connected: true,\n progress: Math.round((PROGRESS.READY / progress) * 100),\n });\n }\n },\n onReady: async () => {\n // Combine adminGuiConfig with user settings\n this.adminGuiConfig = {\n admin: {\n menu: {},\n settings: {},\n adapters: {},\n login: {},\n },\n ...this.socket.systemConfig.native?.vendor,\n };\n this.adminGuiConfig.admin.menu = this.adminGuiConfig.admin.menu || {};\n this.adminGuiConfig.admin.settings = this.adminGuiConfig.admin.settings || {};\n this.adminGuiConfig.admin.adapters = this.adminGuiConfig.admin.adapters || {};\n this.adminGuiConfig.admin.login = this.adminGuiConfig.admin.login || {};\n\n try {\n if (!this.adminInstance) {\n this.adminInstance = await this.socket.getCurrentInstance();\n }\n if (!this.adminInstance) {\n console.error('Cannot read admin instance!');\n }\n const adminObj = await this.socket.getObject(`system.adapter.${this.adminInstance}`);\n // use instance language\n if (adminObj?.native?.language) {\n I18n.setLanguage(adminObj.native.language);\n } else {\n I18n.setLanguage(this.socket.systemLang);\n }\n\n this.languageSet = true;\n const isStrict = await this.socket.getIsEasyModeStrict();\n\n await this.getGUISettings();\n\n if (isStrict) {\n const config = await this.socket.getEasyMode();\n this.setState({\n lang: this.socket.systemLang,\n ready: true,\n strictEasyMode: true,\n easyModeConfigs: config.configs,\n });\n return;\n }\n\n // create Workers\n this.logsWorker = this.logsWorker || new LogsWorker(this.socket, 1_000);\n this.instancesWorker = this.instancesWorker || new InstancesWorker(this.socket);\n this.hostsWorker = this.hostsWorker || new HostsWorker(this.socket);\n this.adaptersWorker = this.adaptersWorker || new AdaptersWorker(this.socket);\n this.objectsWorker = this.objectsWorker || new ObjectsWorker(this.socket);\n\n const newState: Partial<AppState> = {\n lang: this.socket.systemLang,\n ready: true,\n };\n\n try {\n newState.systemConfig = await this.socket.getCompactSystemConfig();\n newState.wizard = !newState.systemConfig.common.licenseConfirmed;\n await this.findCurrentHost(newState);\n await this.readRepoAndInstalledInfo(newState.currentHost, newState.hosts);\n } catch (e) {\n console.log(`Error reading repo in onReady: ${e.stack}`);\n }\n\n this.adaptersWorker.registerRepositoryHandler(this.repoChangeHandler);\n this.adaptersWorker.registerHandler(this.adaptersChangeHandler);\n this.hostsWorker.registerHandler(this.updateHosts);\n this.hostsWorker.registerNotificationHandler(this.handleNewNotifications);\n\n const storedExpertMode = (window._sessionStorage || window.sessionStorage).getItem(\n 'App.expertMode',\n );\n newState.expertMode = storedExpertMode\n ? storedExpertMode === 'true'\n : !!newState.systemConfig.common.expertMode;\n\n // Read user and show him\n if (this.socket.isSecure || this.socket.systemConfig.native?.vendor) {\n try {\n const user = await this.socket.getCurrentUser();\n\n const userObj = await this.socket.getObject(`system.user.${user}`);\n\n if (userObj.native?.vendor) {\n Object.assign(this.adminGuiConfig, userObj.native.vendor);\n }\n\n if (this.socket.isSecure) {\n this.setState({\n user: {\n id: userObj._id,\n name: Utils.getObjectNameFromObj(userObj, this.socket.systemLang),\n color: userObj.common.color,\n icon: userObj.common.icon,\n invertBackground: this.mustInvertBackground(userObj.common.color),\n },\n });\n\n // start ping interval\n void this.makePingAuth();\n }\n } catch (e) {\n console.error(`Could not determine user to show: ${e.toString()}, ${e.stack}`);\n this.showAlert(e.toString(), 'error');\n }\n }\n\n this.setState(newState as AppState, () => this.setCurrentTabTitle());\n\n void this.socket.subscribeState('system.adapter.discovery.0.alive', this.onDiscoveryAlive);\n\n // Give some time for communication\n setTimeout(() => this.logsWorkerChanged(this.state.currentHost), 1000);\n\n setTimeout(\n () =>\n this.findNewsInstance().then(instance => {\n this.newsInstance = instance;\n void this.socket.subscribeState(`admin.${instance}.info.newsFeed`, this.onNews);\n }),\n 5_000,\n );\n\n setTimeout(async () => {\n const notifications = await this.hostsWorker.getNotifications(newState.currentHost);\n await this.handleNewNotifications(notifications);\n }, 3_000);\n } catch (e) {\n console.error(`Error in onReady: ${e.stack}`);\n this.showAlert(`Error in onReady: ${e.stack}`, 'error');\n }\n },\n onError: (error: string | Error) => {\n console.error(error);\n let errorStr: string;\n if (error instanceof Error) {\n errorStr = error.message || error.toString();\n } else {\n errorStr = error.toString();\n }\n if (errorStr === 'ioBroker is not connected') {\n if (!this.state.cloudNotConnected) {\n this.showAlert(I18n.t(errorStr), 'error');\n setInterval(() => {\n if (this.state.cloudReconnect > 0) {\n this.setState({ cloudReconnect: this.state.cloudReconnect - 1 });\n } else {\n window.location.reload();\n }\n }, 1_000);\n\n this.setState({\n cloudNotConnected: true,\n cloudReconnect: 10,\n });\n }\n } else {\n this.showAlert(errorStr, 'error');\n }\n },\n }) as unknown as AdminConnection;\n }\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('hashchange', this.onHashChanged, false);\n this.socket?.unsubscribeState('system.adapter.discovery.0.alive', this.onDiscoveryAlive);\n\n this.adaptersWorker?.unregisterRepositoryHandler(this.repoChangeHandler);\n this.adaptersWorker?.unregisterHandler(this.adaptersChangeHandler);\n this.hostsWorker?.unregisterHandler(this.updateHosts);\n\n if (this.pingAuth) {\n clearTimeout(this.pingAuth);\n this.pingAuth = null;\n }\n if (this.expireInSecInterval) {\n clearInterval(this.expireInSecInterval);\n this.expireInSecInterval = null;\n }\n\n if (window._localStorage) {\n window._localStorage = null;\n window._sessionStorage = null;\n }\n }\n\n updateHosts = (events: HostEvent[]): void => {\n const hosts: CompactHost[] = JSON.parse(JSON.stringify(this.state.hosts));\n\n events.forEach((event: HostEvent): void => {\n const elementFind = hosts.find(host => host._id === event.id);\n if (elementFind) {\n const index = hosts.indexOf(elementFind);\n if (event.obj) {\n // updated\n hosts[index] = event.obj as CompactHost;\n } else {\n // deleted\n hosts.splice(index, 1);\n }\n } else {\n // new\n hosts.push(event.obj as CompactHost);\n }\n });\n\n this.setState({ hosts });\n };\n\n repoChangeHandler = (): void => {\n void this.readRepoAndInstalledInfo(this.state.currentHost, null, true).then(() => console.log('Repo updated!'));\n };\n\n adaptersChangeHandler = (events: AdapterEvent[]): void => {\n // update installed\n //\n const installed: CompactInstalledInfo = JSON.parse(JSON.stringify(this.state.installed));\n let changed = false;\n events.forEach(event => {\n const parts = event.id.split('.');\n const adapter = parts[2];\n if (event.type === 'deleted' || !event.obj) {\n if (installed[adapter]) {\n changed = true;\n delete installed[adapter];\n }\n } else if (installed[adapter]) {\n Object.keys(installed[adapter]).forEach(attr => {\n if (\n (installed[adapter] as Record<string, any>)[attr] !==\n (event.obj.common as Record<string, any>)[attr]\n ) {\n (installed[adapter] as Record<string, any>)[attr] = (event.obj.common as Record<string, any>)[\n attr\n ];\n changed = true;\n }\n });\n } else {\n installed[adapter] = { version: event.obj.common.version };\n changed = true;\n }\n });\n\n if (changed) {\n this.setState({ installed });\n }\n };\n\n async findCurrentHost(newState: Partial<AppState>): Promise<void> {\n newState.hosts = await this.socket.getCompactHosts();\n\n if (!this.state.currentHost) {\n const currentHost = (window._localStorage || window.localStorage).getItem('App.currentHost');\n\n const itemHost = newState.hosts.find(host => host._id === currentHost);\n\n if (currentHost && itemHost) {\n newState.currentHost = itemHost._id;\n newState.currentHostName = itemHost.common?.name || itemHost._id.replace('system.host.', '');\n } else {\n newState.currentHost = newState.hosts[0]._id;\n newState.currentHostName =\n newState.hosts[0].common?.name || newState.hosts[0]._id.replace('system.host.', '');\n }\n }\n\n newState.ownHost = newState.currentHost;\n\n // Check that host is alive\n let alive;\n try {\n alive = await this.socket.getState(`${newState.currentHost}.alive`);\n } catch (e) {\n alive = null;\n console.warn(`Cannot get state ${newState.currentHost}.alive: ${e}`);\n }\n\n if (!alive || !alive.val) {\n // find first the live host\n for (let h = 0; h < newState.hosts.length; h++) {\n alive = await this.socket.getState(`${newState.hosts[h]._id}.alive`);\n if (alive && alive.val) {\n newState.currentHost = newState.hosts[h]._id;\n newState.currentHostName = newState.hosts[h].common.name;\n }\n }\n }\n }\n\n updateExpireIn(): void {\n const now = Date.now();\n this.expireInSec = this.expireInSec > 0 ? this.expireInSec - (now - this.lastExecution) / 1_000 : 0;\n\n const time = Utils.formatTime(this.expireInSec);\n if (this.refUser.current) {\n this.refUser.current.title = this.expireText.replace('%s', time);\n }\n if (this.expireInSec < this.EXPIRE_WARNING_THRESHOLD && this.refUserDiv.current) {\n this.refUserDiv.current.innerHTML = time;\n\n if (!this.state.expireWarningMode) {\n this.setState({ expireWarningMode: true });\n }\n } else if (this.state.expireWarningMode) {\n this.refUserDiv.current.innerHTML = this.state.user.name;\n this.setState({ expireWarningMode: false });\n }\n\n if (this.expireInSec <= 0) {\n window.alert('Session expired');\n // reconnect\n setTimeout(() => window.location.reload(), 1_000);\n }\n\n this.lastExecution = now;\n }\n\n /**\n * Start interval to handle logout after the session expires, this also refreshes the session\n */\n async makePingAuth(): Promise<void> {\n if (this.pingAuth) {\n clearTimeout(this.pingAuth);\n this.pingAuth = null;\n }\n\n try {\n const data = await this.socket.getCurrentSession();\n\n if (data) {\n if (!this.expireInSecInterval) {\n this.expireInSecInterval = setInterval(() => this.updateExpireIn(), 1_000);\n }\n this.expireInSec = data.expireInSec;\n this.lastExecution = Date.now();\n this.updateExpireIn();\n }\n } catch (e) {\n window.alert(`Session timeout: ${e}`);\n // reconnect\n setTimeout(() => window.location.reload(), 1_000);\n }\n }\n\n onDiscoveryAlive = (_name: string, value?: ioBroker.State | null): void => {\n if (!!value?.val !== this.state.discoveryAlive) {\n this.setState({ discoveryAlive: !!value?.val });\n }\n };\n\n getDiscoveryModal = (): JSX.Element => (\n <DiscoveryDialog\n themeType={this.state.themeType}\n themeName={this.state.themeName}\n theme={this.state.theme}\n socket={this.socket}\n systemConfig={this.state.systemConfig.common}\n dateFormat={this.state.systemConfig.common.dateFormat}\n currentHost={this.state.currentHost}\n defaultLogLevel={this.state.systemConfig.common.defaultLogLevel}\n repository={this.state.repository}\n hosts={this.state.hosts}\n onClose={() => Router.doNavigate(null)}\n />\n );\n\n async findNewsInstance(): Promise<number> {\n const maxCount = 200;\n for (let instance = 0; instance < maxCount; instance++) {\n try {\n const adminAlive = await this.socket.getState(`system.adapter.admin.${instance}.alive`);\n if (adminAlive?.val) {\n return instance;\n }\n } catch (e) {\n console.error(`Cannot find news instance: ${e.stack}`);\n this.showAlert(`Cannot find news instance: ${e.stack}`, 'error');\n }\n }\n return 0;\n }\n\n /**\n * Render the notification dialog\n */\n renderNotificationsDialog(): JSX.Element | null {\n if (!this.state.notificationsDialog) {\n return null;\n }\n\n return (\n <NotificationsDialog\n notifications={this.state.notifications?.notifications || {}}\n instances={this.state.notifications?.instances || {}}\n onClose={() => this.setState({ notificationsDialog: false })}\n ackCallback={(host, name) => this.socket.clearNotifications(host, name)}\n dateFormat={this.state.systemConfig.common.dateFormat}\n isFloatComma={this.state.systemConfig.common.isFloatComma}\n themeType={this.state.themeType}\n themeName={this.state.themeName}\n theme={this.state.theme}\n socket={this.socket}\n />\n );\n }\n\n renderHostWarningDialog(): JSX.Element | null {\n if (!this.state.showHostWarning) {\n return null;\n }\n\n return (\n <HostWarningDialog\n instances={this.state.showHostWarning.instances}\n messages={this.state.showHostWarning.result.system.categories}\n dateFormat={this.state.systemConfig.common.dateFormat}\n themeType={this.state.themeType}\n ackCallback={name => this.socket.clearNotifications(this.state.showHostWarning.host, name)}\n onClose={() => this.setState({ showHostWarning: null })}\n />\n );\n }\n\n /** Called when notifications detected, updates the notification indicator */\n handleNewNotifications = async (notifications: Record<string, NotificationAnswer>): Promise<void> => {\n const noNotifications: NotificationsCount = {\n warning: 0,\n other: 0,\n };\n\n // if host is offline it returns null\n if (!notifications) {\n this.setState({ noNotifications, notifications: {} });\n return;\n }\n\n for (const hostDetails of Object.values(notifications)) {\n if (!hostDetails?.result) {\n continue;\n }\n for (const [scope, scopeDetails] of Object.entries(hostDetails.result)) {\n if (scope === 'system') {\n continue;\n }\n\n for (const categoryDetails of Object.values(scopeDetails.categories)) {\n for (const instanceDetails of Object.values(categoryDetails.instances)) {\n const isWarning = categoryDetails.severity === 'alert';\n noNotifications[isWarning ? 'warning' : 'other'] += instanceDetails.messages.length;\n }\n }\n }\n }\n\n const instances = await this.instancesWorker.getObjects();\n\n this.setState({ noNotifications, notifications: { notifications, instances } });\n };\n\n /**\n * Shows notifications to the user\n *\n * @param notifications present notifications\n * @param host host to get notifications from\n */\n showAdaptersWarning = async (\n notifications: Record<string, NotificationAnswer | null>,\n host: string,\n ): Promise<void> => {\n if (!notifications || !notifications[host] || !notifications[host].result) {\n return;\n }\n\n const result = notifications[host].result;\n\n if (result?.system && Object.keys(result.system.categories).length) {\n await this.instancesWorker.getObjects().then(instances =>\n this.setState({\n showHostWarning: {\n host,\n instances,\n result,\n },\n }),\n );\n }\n };\n\n /**\n * Get news for specific adapter instance\n */\n onNews = async (_id: string, newsFeed: ioBroker.State): Promise<void> => {\n try {\n if (!this.state.systemConfig.common.licenseConfirmed) {\n return;\n }\n\n const lastNewsId = await this.socket.getState(`admin.${this.newsInstance}.info.newsLastId`);\n if (newsFeed?.val) {\n let news = null;\n try {\n news = JSON.parse(newsFeed.val as string);\n } catch {\n console.error(`Cannot parse news: ${newsFeed.val}`);\n }\n\n if (news?.length && news[0].id !== lastNewsId?.val) {\n const uuid: string = await this.socket.getUuid();\n const info: {\n Platform: string;\n os: string;\n Architecture: string;\n CPUs: number;\n Speed: number;\n Model: string;\n RAM: number;\n 'System uptime': number;\n 'Node.js': string;\n time: number;\n timeOffset: number;\n NPM: string;\n 'adapters count': number;\n 'Disk size': number;\n 'Disk free': number;\n 'Active instances': number;\n location: string;\n Uptime: number;\n } | null = await this.socket.getHostInfo(this.state.currentHost).catch((): null => null);\n\n const instances: Record<string, CompactInstanceInfo> | null = await this.socket\n .getCompactInstances()\n .catch((): null => null);\n\n const objectsDbType: DbType = (await this.socket.getDiagData(this.state.currentHost, 'normal'))\n .objectsType;\n\n const objects = await this.objectsWorker.getObjects(true);\n const noObjects = Object.keys(objects || {}).length;\n\n const checkNews = checkMessages(news, lastNewsId?.val as string, {\n lang: I18n.getLanguage(),\n adapters: this.state.adapters,\n instances: instances || {},\n nodeVersion: info ? info['Node.js'] || '?' : '?',\n npmVersion: info ? info.NPM || '?' : '?',\n os: info ? info.os || '?' : '?',\n activeRepo: this.state.systemConfig.common.activeRepo,\n uuid,\n objectsDbType,\n noObjects,\n });\n\n if (checkNews?.length) {\n this.setState({\n showNews: {\n checkNews,\n lastNewsId: lastNewsId?.val as string,\n },\n });\n }\n }\n }\n } catch (e) {\n console.error(`Could not process news: ${e.stack}`);\n this.showAlert(`Could not process news: ${e.stack}`, 'error');\n }\n };\n\n renderNewsDialog(): JSX.Element | null {\n if (!this.state.showNews) {\n return null;\n }\n return (\n <NewsAdminDialog\n newsArr={this.state.showNews.checkNews}\n current={this.state.showNews.lastNewsId}\n onSetLastNewsId={async id => {\n if (id) {\n await this.socket.setState(`admin.${this.newsInstance}.info.newsLastId`, {\n val: id,\n ack: true,\n });\n }\n this.setState({ showNews: null });\n }}\n />\n );\n }\n\n renderSlowConnectionWarning(): JSX.Element | null {\n if (!this.state.showSlowConnectionWarning) {\n return null;\n }\n\n return (\n <SlowConnectionWarningDialog\n readTimeoutMs={this.state.readTimeoutMs}\n t={I18n.t}\n onClose={readTimeoutMs => {\n if (readTimeoutMs) {\n this.setState({ showSlowConnectionWarning: false, readTimeoutMs }, () =>\n this.readRepoAndInstalledInfo(this.state.currentHost),\n );\n } else {\n this.setState({ showSlowConnectionWarning: false });\n }\n }}\n />\n );\n }\n\n async readRepoAndInstalledInfo(currentHost: string, hosts?: CompactHost[] | null, update?: boolean): Promise<void> {\n hosts = hosts || this.state.hosts;\n\n const repository: CompactRepository = await this.socket\n .getCompactRepository(currentHost, update, this.state.readTimeoutMs)\n .catch((e: unknown): CompactRepository => {\n window.alert(`Cannot getRepositoryCompact: ${e}`);\n if ((e as Error).toString().includes('timeout')) {\n this.setState({ showSlowConnectionWarning: true });\n }\n return {} as CompactRepository;\n });\n\n const installed: CompactInstalledInfo = await this.socket\n .getCompactInstalled(currentHost, update, this.state.readTimeoutMs)\n .catch((e: unknown): CompactInstalledInfo => {\n window.alert(`Cannot getInstalled: ${e}`);\n if (e.toString().includes('timeout')) {\n this.setState({ showSlowConnectionWarning: true });\n }\n return {} as CompactInstalledInfo;\n });\n\n const adapters: Record<string, CompactAdapterInfo> = await this.socket\n .getCompactAdapters(update)\n .catch((e: unknown): Record<string, CompactAdapterInfo> => {\n window.alert(`Cannot read adapters: ${e as Error}`);\n return {} as Record<string, CompactAdapterInfo>;\n });\n\n if (installed && adapters) {\n Object.keys(adapters).forEach(id => {\n if (installed[id] && adapters[id].iv) {\n installed[id].ignoreVersion = adapters[id].iv;\n }\n });\n }\n\n this.setState({\n repository,\n installed,\n hosts,\n adapters,\n });\n }\n\n logsWorkerChanged = (currentHost: string): void => {\n this.logsWorker?.setCurrentHost(currentHost);\n };\n\n /**\n * Updates the current currentTab in the states\n */\n onHashChanged = (): void => {\n this.setState({ currentTab: Router.getLocation() }, () => this.setCurrentTabTitle());\n };\n\n /**\n * Get the used port\n */\n static getPort(): number {\n let port = parseInt(window.location.port, 10);\n\n if (Number.isNaN(port)) {\n switch (App.getProtocol()) {\n case 'https:':\n port = 443;\n break;\n case 'http:':\n port = 80;\n break;\n default:\n break;\n }\n }\n\n if (!port || port === 3000) {\n port = 8081;\n }\n\n return port;\n }\n\n /**\n * Get the used protocol\n */\n private static getProtocol(): 'http:' | 'https:' {\n return window.location.protocol as 'http:' | 'https:';\n }\n\n /**\n * Get a theme\n */\n private static createTheme(name?: ThemeName): IobTheme {\n return Theme(Utils.getThemeName(name));\n }\n\n /**\n * Get the theme name\n */\n private static getThemeName(theme: IobTheme): ThemeName {\n return theme.name;\n }\n\n /**\n * Get the theme type\n */\n private static getThemeType(theme: IobTheme): ThemeType {\n return theme.palette.mode;\n }\n\n /** Changes the current theme */\n toggleTheme = (currentThemeName?: ThemeName): void => {\n const themeName = this.state.themeName;\n\n const newThemeName = currentThemeName || Utils.toggleTheme(themeName);\n\n const theme = App.createTheme(newThemeName);\n\n this.setState(\n {\n theme,\n themeName: newThemeName,\n themeType: App.getThemeType(theme),\n },\n () => {\n this.refConfigIframe?.contentWindow?.postMessage('updateTheme', '*');\n },\n );\n };\n\n setCurrentTabTitle(): void {\n this.setTitle(this.state.currentTab.tab.replace('tab-', ''));\n }\n\n setTitle(title: string): void {\n document.title = `${title} - ${this.state.currentHostName || 'ioBroker'}`;\n }\n\n getCurrentTab(): JSX.Element | null {\n if (this.state && this.state.currentTab && this.state.currentTab.tab) {\n if (this.state.currentTab.tab === 'tab-adapters') {\n const small = this.props.width === 'xs' || this.props.width === 'sm';\n const opened = !small && this.state.drawerState === DrawerStates.opened;\n const closed = small || this.state.drawerState === DrawerStates.closed;\n\n return (\n <Suspense fallback={<Connecting />}>\n <Adapters\n theme={this.state.theme}\n triggerUpdate={this.state.triggerAdapterUpdate}\n key=\"adapters\"\n forceUpdateAdapters={this.state.forceUpdateAdapters}\n adaptersWorker={this.adaptersWorker}\n instancesWorker={this.instancesWorker}\n themeType={this.state.themeType}\n systemConfig={this.state.systemConfig}\n socket={this.socket}\n adminHost={this.state.ownHost}\n hostsWorker={this.hostsWorker}\n currentHost={this.state.currentHost}\n ready={this.state.ready}\n t={I18n.t}\n lang={I18n.getLanguage()}\n expertMode={this.state.expertMode}\n executeCommand={(cmd: string, host?: string, callback?: (exitCode: number) => void) =>\n this.executeCommand(cmd, host, callback)\n }\n commandRunning={this.state.commandRunning}\n onSetCommandRunning={commandRunning => this.setState({ commandRunning })}\n menuOpened={opened}\n menuClosed={closed}\n adminGuiConfig={this.adminGuiConfig}\n toggleTranslation={this.toggleTranslation}\n noTranslation={this.state.noTranslation}\n adminInstance={this.adminInstance}\n currentAdminVersion={this.state.versionAdmin}\n onUpdating={updating => this.setState({ updating })}\n />\n </Suspense>\n );\n }\n if (this.state.currentTab.tab === 'tab-instances') {\n return (\n <Suspense fallback={<Connecting />}>\n <Instances\n key=\"instances\"\n menuPadding={\n this.state.drawerState === DrawerStates.closed\n ? 0\n : this.state.drawerState === DrawerStates.opened\n ? this.state.editMenuList\n ? DRAWER_EDIT_WIDTH\n : DRAWER_FULL_WIDTH\n : DRAWER_COMPACT_WIDTH\n }\n socket={this.socket}\n instancesWorker={this.instancesWorker}\n lang={I18n.getLanguage()}\n hostname={this.state.hostname}\n adminInstance={this.adminInstance}\n repository={this.state.repository}\n hosts={this.state.hosts}\n themeName={this.state.themeName}\n themeType={this.state.themeType}\n theme={this.state.theme}\n expertMode={this.state.expertMode}\n currentHost={this.state.currentHost}\n currentHostName={this.state.currentHostName}\n t={I18n.t}\n dateFormat={this.state.systemConfig.common.dateFormat}\n isFloatComma={this.state.systemConfig.common.isFloatComma}\n width={this.props.width}\n configStored={(value: boolean) => this.allStored(value)}\n executeCommand={(cmd: string, host?: string, callback?: (exitCode: number) => void) =>\n this.executeCommand(cmd, host, callback)\n }\n inBackgroundCommand={this.state.commandError || this.state.performed}\n onRegisterIframeRef={(ref: HTMLIFrameElement) => (this.refConfigIframe = ref)}\n onUnregisterIframeRef={(ref: HTMLIFrameElement) => {\n if (this.refConfigIframe === ref) {\n this.refConfigIframe = null;\n }\n }}\n handleNavigation={this.handleNavigation}\n />\n </Suspense>\n );\n }\n if (this.state.currentTab.tab === 'tab-intro') {\n return (\n <Suspense fallback={<Connecting />}>\n <Intro\n key=\"intro\"\n hostname={this.state.hostname}\n adminInstance={this.adminInstance}\n instancesWorker={this.instancesWorker}\n hostsWorker={this.hostsWorker}\n showAlert={(message: string, type?: 'error' | 'warning' | 'info' | 'success') =>\n this.showAlert(message, type)\n }\n socket={this.socket}\n t={I18n.t}\n lang={I18n.getLanguage()}\n theme={this.state.theme}\n />\n </Suspense>\n );\n }\n if (this.state.currentTab.tab === 'tab-logs') {\n return (\n <Suspense fallback={<Connecting />}>\n <Logs\n key=\"logs\"\n t={I18n.t}\n width={this.props.width}\n lang={this.state.lang}\n socket={this.socket}\n themeType={this.state.themeType}\n theme={this.state.theme}\n ready={this.state.ready}\n logsWorker={this.logsWorker}\n expertMode={this.state.expertMode}\n currentHost={this.state.currentHost}\n hostsWorker={this.hostsWorker}\n clearErrors={() => this.clearLogErrors()}\n />\n </Suspense>\n );\n }\n if (this.state.currentTab.tab === 'tab-files') {\n return (\n <Suspense fallback={<Connecting />}>\n <Files\n key=\"files\"\n ready={this.state.ready}\n t={I18n.t}\n expertMode={this.state.expertMode}\n lang={I18n.getLanguage()}\n socket={this.socket}\n themeType={this.state.themeType}\n theme={this.state.theme}\n />\n </Suspense>\n );\n }\n if (this.state.currentTab.tab === 'tab-users') {\n return (\n <Suspense fallback={<Connecting />}>\n <Users\n key=\"users\"\n ready={this.state.ready}\n t={I18n.t}\n expertMode={this.state.expertMode}\n lang={I18n.getLanguage()}\n socket={this.socket}\n themeType={this.state.themeType}\n theme={this.state.theme}\n />\n </Suspense>\n );\n }\n if (this.state.currentTab.tab === 'tab-enums') {\n return (\n <Suspense fallback={<Connecting />}>\n <Enums\n key=\"enums\"\n t={I18n.t}\n lang={I18n.getLanguage()}\n socket={this.socket}\n themeType={this.state.themeType}\n theme={this.state.theme}\n />\n </Suspense>\n );\n }\n if (this.state.currentTab.tab === 'tab-objects') {\n return (\n <Suspense\n fallback={<Connecting />}\n key=\"objects\"\n >\n <Objects\n t={I18n.t}\n theme={this.state.theme}\n themeName={this.state.themeName}\n themeType={this.state.themeType}\n expertMode={this.state.expertMode}\n objectsWorker={this.objectsWorker}\n lang={I18n.getLanguage()}\n socket={this.socket}\n dateFormat={this.state.systemConfig.common.dateFormat}\n isFloatComma={this.state.systemConfig.common.isFloatComma}\n />\n </Suspense>\n );\n }\n if (this.state.currentTab.tab === 'tab-hosts') {\n return (\n <Suspense fallback={<Connecting />}>\n <Hosts\n socket={this.socket}\n lang={I18n.getLanguage()}\n hostsWorker={this.hostsWorker}\n toggleTranslation={this.toggleTranslation}\n noTranslation={this.state.noTranslation}\n themeType={this.state.themeType}\n theme={this.state.theme}\n expertMode={this.state.expertMode}\n t={I18n.t}\n navigate={Router.doNavigate}\n currentHost={this.state.currentHost}\n executeCommand={(cmd: string, host?: string, callback?: (exitCode: number) => void) =>\n this.executeCommand(cmd, host, callback)\n }\n systemConfig={this.state.systemConfig}\n showAdaptersWarning={this.showAdaptersWarning}\n adminInstance={this.adminInstance}\n onUpdating={(updating: boolean) => this.setState({ updating })}\n instancesWorker={this.instancesWorker}\n />\n </Suspense>\n );\n }\n const m = this.state.currentTab.tab.match(/^tab-([-\\w]+)(-\\d+)?$/);\n if (m) {\n // /adapter/javascript/tab.html\n return (\n <Suspense fallback={<Connecting />}>\n <CustomTab\n key={this.state.currentTab.tab}\n t={I18n.t}\n hostname={this.state.hostname}\n adminInstance={this.adminInstance}\n hosts={this.state.hosts}\n instancesWorker={this.instancesWorker}\n tab={this.state.currentTab.tab}\n themeName={this.state.themeName}\n expertMode={this.state.expertMode}\n lang={I18n.getLanguage()}\n onRegisterIframeRef={(ref: HTMLIFrameElement) => (this.refConfigIframe = ref)}\n onUnregisterIframeRef={(ref: HTMLIFrameElement) => {\n if (this.refConfigIframe === ref) {\n this.refConfigIframe = null;\n }\n }}\n />\n </Suspense>\n );\n }\n }\n\n return null;\n }\n\n clearLogErrors(): void {\n this.logsWorker.resetErrors();\n this.logsWorker.resetWarnings();\n }\n\n getCurrentDialog(): JSX.Element | null {\n if (this.state && this.state.currentTab && this.state.currentTab.dialog) {\n if (this.state.currentTab.dialog === 'system') {\n return this.getSystemSettingsDialog();\n }\n if (this.state.currentTab.dialog === 'discovery') {\n return this.getDiscoveryModal();\n }\n }\n\n return null;\n }\n\n getSystemSettingsDialog(): JSX.Element {\n return (\n <SystemSettingsDialog\n adminGuiConfig={this.adminGuiConfig}\n width={this.props.width}\n currentHost={this.state.currentHost}\n themeName={this.state.themeName}\n themeType={this.state.themeType}\n theme={this.state.theme}\n key=\"systemSettings\"\n onClose={async (repoChanged?: boolean) => {\n Router.doNavigate(null);\n // read systemConfig anew\n const systemConfig = await this.socket.getObject('system.config');\n\n if (repoChanged) {\n this.setState({ triggerAdapterUpdate: this.state.triggerAdapterUpdate + 1, systemConfig });\n } else {\n this.setState({ systemConfig });\n }\n }}\n lang={this.state.lang}\n socket={this.socket}\n currentTab={this.state.currentTab}\n expertModeFunc={(value: boolean) => {\n (window._sessionStorage || window.sessionStorage).removeItem('App.expertMode');\n const systemConfig = JSON.parse(JSON.stringify(this.state.systemConfig));\n systemConfig.common.expertMode = value;\n this.setState({ expertMode: value, systemConfig });\n }}\n t={I18n.t}\n />\n );\n }\n\n handleAlertClose(event?: string, reason?: string): void {\n if (reason === 'clickaway') {\n return;\n }\n\n this.setState({ alert: false });\n }\n\n showAlert(alertMessage: string | Error, alertType?: 'error' | 'warning' | 'info' | 'success'): void {\n if (alertType !== 'error' && alertType !== 'warning' && alertType !== 'info' && alertType !== 'success') {\n alertType = 'info';\n }\n let alertMessageStr: string;\n if (typeof alertMessage !== 'string') {\n if (alertMessage instanceof Error) {\n alertMessageStr = alertMessage.message || alertMessage.toString();\n } else if (alertMessage === null || alertMessage === undefined) {\n alertMessageStr = 'null';\n } else {\n alertMessageStr = (alertMessage as Error).toString();\n }\n } else {\n alertMessageStr = alertMessage;\n }\n\n this.setState({\n alert: true,\n alertType,\n alertMessage: alertMessageStr,\n });\n }\n\n handleDrawerState(state: 0 | 1 | 2): void {\n (window._localStorage || window.localStorage).setItem('App.drawerState', state.toString());\n this.setState({\n drawerState: state,\n });\n }\n\n static logout(): void {\n if (window.location.port === '3000') {\n window.location.href = `${window.location.protocol}//${window.location.hostname}:8081/logout?dev`;\n } else {\n window.location.href = `./logout?origin=${window.location.pathname}`;\n }\n }\n\n handleNavigation = (tab: string, subTab?: string, param?: string): void => {\n if (tab) {\n if (this.state.allStored) {\n Router.doNavigate(tab, subTab, param);\n\n this.setState({ currentTab: Router.getLocation() });\n } else {\n this.setState({\n dataNotStoredDialog: true,\n dataNotStoredTab: { tab, subTab, param },\n });\n }\n }\n\n if (this.props.width === 'xs' || this.props.width === 'sm') {\n this.handleDrawerState(DrawerStates.closed as 1);\n }\n\n tab = tab || (this.state.currentTab && this.state.currentTab.tab) || '';\n\n this.setTitle(tab.replace('tab-', ''));\n };\n\n allStored(value: boolean): void {\n this.setState({\n allStored: value,\n });\n }\n\n closeDataNotStoredDialog(): void {\n this.setState({ dataNotStoredDialog: false });\n }\n\n confirmDataNotStored(): void {\n this.setState(\n {\n dataNotStoredDialog: false,\n allStored: true,\n },\n () =>\n this.handleNavigation(\n this.state.dataNotStoredTab?.tab,\n this.state.dataNotStoredTab?.subTab,\n this.state.dataNotStoredTab?.param,\n ),\n );\n }\n\n executeCommand(cmd: string, host?: string, callback?: (exitCode: number) => void): void {\n if (typeof host === 'boolean') {\n callback = host;\n host = null;\n }\n\n if (this.state.performed || this.state.commandError) {\n this.setState(\n {\n cmd: null,\n cmdDialog: false,\n commandError: false,\n performed: false,\n callback: null,\n commandHost: null,\n },\n () =>\n this.setState({\n cmd,\n cmdDialog: true,\n callback,\n }),\n );\n return;\n }\n console.log(`Execute: ${cmd}`);\n\n this.setState({\n cmd,\n cmdDialog: true,\n callback,\n commandHost: host || this.state.currentHost,\n });\n }\n\n closeCmdDialog(cb?: () => void): void {\n this.setState(\n {\n cmd: null,\n cmdDialog: false,\n commandError: false,\n performed: false,\n callback: null,\n commandHost: null,\n },\n () => cb && cb(),\n );\n }\n\n renderWizardDialog(): JSX.Element | null {\n if (this.state.wizard) {\n return (\n <WizardDialog\n executeCommand={(cmd: string, host?: string, callback?: (exitCode: number) => void) =>\n this.executeCommand(cmd, host, callback)\n }\n host={this.state.currentHost}\n socket={this.socket}\n themeName={this.state.themeName}\n themeType={this.state.themeType}\n toggleTheme={this.toggleTheme}\n lang={I18n.getLanguage()}\n onClose={(redirect?: string) => {\n this.setState({ wizard: false, showRedirect: redirect, redirectCountDown: 10 }, () => {\n if (this.state.showRedirect) {\n setInterval(() => {\n if (this.state.redirectCountDown > 0) {\n this.setState({ redirectCountDown: this.state.redirectCountDown - 1 });\n } else {\n window.location.href = this.state.showRedirect;\n }\n }, 1_000);\n }\n });\n }}\n />\n );\n }\n return null;\n }\n\n showRedirectDialog(): JSX.Element | null {\n if (this.state.showRedirect) {\n return (\n <Dialog\n open={!0}\n onClose={() => {\n // Ignore. It can be closed only by button\n }}\n >\n <DialogTitle>{I18n.t('Waiting for admin restart...')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {I18n.t('Redirect in %s second(s)', this.state.redirectCountDown)}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n {window.sidebar ||\n (window.opera && window.print) ||\n // @ts-expect-error ignore\n (window.document.all && window.external?.AddFavorite) ? (\n <Button\n onClick={() => {\n if (window.sidebar) {\n // Firefox\n window.sidebar.addPanel('ioBroker.admin', this.state.showRedirect, '');\n } else if (window.opera && window.print) {\n // Opera\n const elem = document.createElement('a');\n elem.setAttribute('href', this.state.showRedirect);\n elem.setAttribute('title', 'ioBroker.admin');\n elem.setAttribute('rel', 'sidebar');\n elem.click(); // this.title=document.title;\n } else if (document.all) {\n // ie\n // @ts-expect-error ignore\n window.external.AddFavorite(this.state.showRedirect, 'ioBroker.admin');\n }\n }}\n >\n {I18n.t('Bookmark admin')}\n </Button>\n ) : null}\n {this.state.redirectCountDown ? (\n <Button\n variant=\"contained\"\n onClick={() => (window.location.href = this.state.showRedirect)}\n >\n {I18n.t('Go to admin now')}\n </Button>\n ) : null}\n </DialogActions>\n </Dialog>\n );\n }\n return null;\n }\n\n renderCommandDialog(): JSX.Element | null {\n return this.state.cmd ? (\n <CommandDialog\n onSetCommandRunning={(commandRunning: boolean) => this.setState({ commandRunning })}\n onClose={() => this.closeCmdDialog(() => this.setState({ commandRunning: false }))}\n visible={this.state.cmdDialog}\n callback={this.state.callback}\n onInBackground={() => this.setState({ cmdDialog: false })}\n cmd={this.state.cmd}\n errorFunc={() => this.setState({ commandError: true })}\n performed={() => this.setState({ performed: true })}\n inBackground={this.state.commandError || this.state.performed}\n commandError={this.state.commandError}\n socket={this.socket}\n host={this.state.commandHost || this.state.currentHost}\n ready={this.state.ready}\n t={I18n.t}\n />\n ) : null;\n }\n\n renderLoggedUser(): JSX.Element | null {\n if (this.state.user && this.props.width !== 'xs' && this.props.width !== 'sm') {\n return (\n <div>\n {this.state.systemConfig.common.siteName ? (\n <div style={styles.siteName}>{this.state.systemConfig.common.siteName}</div>\n ) : null}\n\n <Box\n component=\"div\"\n title={this.state.user.id}\n sx={{\n ...styles.userBadge,\n ...(this.state.user.invertBackground ? styles.userBackground : undefined),\n }}\n ref={this.refUser}\n >\n {this.state.user.icon ? (\n <Icon\n src={this.state.user.icon}\n style={styles.userIcon}\n />\n ) : (\n <UserIcon style={styles.userIcon} />\n )}\n <div\n ref={this.refUserDiv}\n style={{\n ...styles.userText,\n color: this.state.expireWarningMode ? '#F44' : this.state.user?.color || undefined,\n }}\n >\n {this.state.user.name}\n </div>\n\n {this.state.expireWarningMode ? (\n <IconButton\n onClick={async () => {\n await this.socket.getCurrentSession();\n await this.makePingAuth();\n }}\n >\n <UpdateIcon />\n </IconButton>\n ) : null}\n </Box>\n </div>\n );\n }\n if (this.props.width !== 'xs' && this.props.width !== 'sm' && this.state.systemConfig.common.siteName) {\n return <div style={styles.siteName}>{this.state.systemConfig.common.siteName}</div>;\n }\n return null;\n }\n\n renderAlertSnackbar(): JSX.Element {\n return (\n <Snackbar\n style={styles[`alert_${this.state.alertType}`]}\n open={this.state.alert}\n autoHideDuration={6000}\n onClose={() => this.handleAlertClose()}\n message={this.state.alertMessage}\n />\n );\n }\n\n renderDialogConfirm(): JSX.Element | null {\n /* return <DialogConfirm\n onClose={() => this.closeDataNotStoredDialog()}\n open={this.state.dataNotStoredDialog}\n header={I18n.t('Please confirm')}\n onConfirm={() => this.confirmDataNotStored()}\n confirmText={I18n.t('Ok')}\n >\n {I18n.t('Some data are not stored. Discard?')}\n </DialogConfirm>; */\n return this.state.dataNotStoredDialog ? (\n <DialogConfirm\n title={I18n.t('Please confirm')}\n text={I18n.t('Some data are not stored. Discard?')}\n ok={I18n.t('Ok')}\n cancel={I18n.t('Cancel')}\n onClose={(isYes: boolean) => (isYes ? this.confirmDataNotStored() : this.closeDataNotStoredDialog())}\n />\n ) : null;\n }\n\n renderExpertDialog(): JSX.Element | null {\n if (!this.state.expertModeDialog) {\n return null;\n }\n return (\n <ExpertModeDialog\n onClose={result => {\n if (result === 'openSettings') {\n Router.doNavigate(null, 'system');\n } else if (result) {\n (window._sessionStorage || window.sessionStorage).setItem(\n 'App.expertMode',\n this.state.expertMode ? 'false' : 'true',\n );\n this.refConfigIframe?.contentWindow?.postMessage('updateExpertMode', '*');\n this.setState({ expertModeDialog: false, expertMode: !this.state.expertMode });\n } else if (this.state.expertModeDialog) {\n this.setState({ expertModeDialog: false });\n }\n }}\n expertMode={this.state.expertMode}\n />\n );\n }\n\n renderShowGuiSettings(): JSX.Element | null {\n return this.state.showGuiSettings ? (\n <Menu\n anchorEl={this.state.showGuiSettings}\n open={!0}\n onClose={() => this.setState({ showGuiSettings: null })}\n >\n <MenuItem\n onClick={() => {\n this.setState({ showGuiSettings: null });\n this.enableGuiSettings(true);\n }}\n >\n {I18n.t('Use settings of other browsers')}\n </MenuItem>\n <MenuItem\n onClick={() => {\n this.setState({ showGuiSettings: null });\n this.enableGuiSettings(true, true);\n }}\n >\n {I18n.t('Use settings of this browser')}\n </MenuItem>\n <MenuItem onClick={() => this.setState({ showGuiSettings: null })}>\n <ListItemIcon>\n <CancelIcon fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText>{I18n.t('Cancel')}</ListItemText>\n </MenuItem>\n </Menu>\n ) : null;\n }\n\n renderToolbar(small: boolean): JSX.Element {\n const storedExpertMode = (window._sessionStorage || window.sessionStorage).getItem('App.expertMode');\n const expertModePermanent =\n !storedExpertMode || (storedExpertMode === 'true') === !!this.state.systemConfig.common.expertMode;\n\n const performedStyle = Utils.getStyle(this.state.theme, styles.performed);\n const sumNotification = this.state.noNotifications.warning + this.state.noNotifications.other;\n\n return (\n <Toolbar>\n <IconButton\n size=\"large\"\n edge=\"start\"\n style={{\n ...styles.menuButton,\n ...(!small && this.state.drawerState !== DrawerStates.closed ? styles.hide : undefined),\n }}\n onClick={() => this.handleDrawerState(DrawerStates.opened as 0)}\n >\n <MenuIcon />\n </IconButton>\n <div style={styles.wrapperButtons}>\n <Tooltip\n title={I18n.t('Notifications')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n disableRipple={!sumNotification}\n style={{ opacity: sumNotification ? 1 : 0.3 }}\n onClick={sumNotification ? () => this.setState({ notificationsDialog: true }) : null}\n >\n <Badge\n badgeContent={this.state.noNotifications.other + this.state.noNotifications.warning}\n color={this.state.noNotifications.warning > 0 ? 'error' : 'secondary'}\n max={99}\n >\n <NotificationsIcon />\n </Badge>\n </IconButton>\n </Tooltip>\n <IsVisible\n name=\"admin.appBar.discovery\"\n config={this.adminGuiConfig}\n >\n {this.state.discoveryAlive && (\n <Tooltip\n title={I18n.t('Discovery devices')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={() => Router.doNavigate(null, 'discovery')}\n >\n <VisibilityIcon />\n </IconButton>\n </Tooltip>\n )}\n </IsVisible>\n <IsVisible\n name=\"admin.appBar.systemSettings\"\n config={this.adminGuiConfig}\n >\n <Tooltip\n title={I18n.t('System settings')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={() => Router.doNavigate(null, 'system')}\n >\n <BuildIcon />\n </IconButton>\n </Tooltip>\n </IsVisible>\n {this.toggleThemePossible ? (\n <IsVisible\n name=\"admin.appBar.toggleTheme\"\n config={this.adminGuiConfig}\n >\n <ToggleThemeMenu\n size=\"large\"\n toggleTheme={this.toggleTheme}\n themeName={this.state.themeName as 'dark' | 'light' | 'colored' | 'blue'}\n t={I18n.t}\n />\n </IsVisible>\n ) : null}\n <IsVisible\n name=\"admin.appBar.expertMode\"\n config={this.adminGuiConfig}\n >\n <Tooltip\n title={`${I18n.t('Toggle expert mode')} ${\n expertModePermanent ? '' : ` (${I18n.t('only in this browser session')})`\n }`}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <Badge\n color=\"secondary\"\n variant=\"dot\"\n sx={{ '& .MuiBadge-badge': styles.expertBadge }}\n invisible={expertModePermanent}\n >\n <IconButton\n size=\"large\"\n onClick={() => {\n if (!!this.state.systemConfig.common.expertMode === !this.state.expertMode) {\n (window._sessionStorage || window.sessionStorage).setItem(\n 'App.expertMode',\n this.state.expertMode ? 'false' : 'true',\n );\n this.setState({ expertMode: !this.state.expertMode });\n this.refConfigIframe?.contentWindow?.postMessage('updateExpertMode', '*');\n } else if (\n (window._sessionStorage || window.sessionStorage).getItem(\n 'App.doNotShowExpertDialog',\n ) === 'true'\n ) {\n (window._sessionStorage || window.sessionStorage).setItem(\n 'App.expertMode',\n this.state.expertMode ? 'false' : 'true',\n );\n this.setState({ expertMode: !this.state.expertMode });\n this.refConfigIframe?.contentWindow?.postMessage('updateExpertMode', '*');\n } else {\n this.setState({ expertModeDialog: true });\n }\n }}\n style={{\n color: this.state.expertMode ? this.state.theme.palette.expert : undefined,\n }}\n color=\"default\"\n >\n <IconExpert\n // glowColor={this.state.theme.palette.secondary.main}\n // active={this.state.expertMode}\n style={{\n ...styles.expertIcon,\n ...(this.state.expertMode ? styles.expertIconActive : undefined),\n }}\n />\n </IconButton>\n </Badge>\n </Tooltip>\n </IsVisible>\n {this.state.expertMode ? (\n <Tooltip\n title={I18n.t('Synchronize admin settings between all opened browser windows')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={e =>\n this.state.guiSettings\n ? this.enableGuiSettings(false)\n : this.setState({ showGuiSettings: e.target as HTMLButtonElement })\n }\n style={{\n color: this.state.guiSettings ? this.state.theme.palette.expert : undefined,\n }}\n >\n {this.state.guiSettings ? <SyncIcon /> : <SyncIconDisabled />}\n </IconButton>\n </Tooltip>\n ) : null}\n <IsVisible\n name=\"admin.appBar.hostSelector\"\n config={this.adminGuiConfig}\n >\n <HostSelectors\n tooltip={\n this.state.currentTab.tab !== 'tab-instances' &&\n this.state.currentTab.tab !== 'tab-adapters' &&\n this.state.currentTab.tab !== 'tab-logs'\n ? I18n.t('You can change host on Instances, Adapters or Logs pages')\n : undefined\n }\n themeType={this.state.themeType}\n expertMode={this.state.expertMode}\n socket={this.socket}\n hostsWorker={this.hostsWorker}\n currentHost={this.state.currentHost}\n setCurrentHost={(hostName, host) => {\n this.setState(\n {\n currentHostName: hostName,\n currentHost: host,\n },\n async () => {\n this.logsWorkerChanged(host);\n (window._localStorage || window.localStorage).setItem('App.currentHost', host);\n await this.readRepoAndInstalledInfo(host, this.state.hosts);\n // read notifications from host\n const notifications = await this.hostsWorker.getNotifications(host);\n await this.handleNewNotifications(notifications);\n },\n );\n }}\n disabled={\n this.state.currentTab.tab !== 'tab-instances' &&\n this.state.currentTab.tab !== 'tab-adapters' &&\n this.state.currentTab.tab !== 'tab-logs'\n }\n />\n </IsVisible>\n <div style={styles.flexGrow} />\n {this.state.cmd && !this.state.cmdDialog && (\n <IconButton\n size=\"large\"\n onClick={() => this.setState({ cmdDialog: true })}\n >\n <PictureInPictureAltIcon\n style={\n this.state.commandError\n ? styles.errorCmd\n : this.state.performed\n ? performedStyle\n : styles.cmd\n }\n />\n </IconButton>\n )}\n </div>\n\n {this.renderLoggedUser()}\n\n {this.state.drawerState !== DrawerStates.opened &&\n !this.state.expertMode &&\n window.innerWidth > 400 && (\n <Grid\n container\n style={{\n ...(this.state.drawerState !== DrawerStates.opened ? styles.avatarVisible : undefined),\n ...styles.avatarNotVisible,\n }}\n spacing={1}\n alignItems=\"center\"\n >\n {(!this.state.user || this.props.width === 'xs' || this.props.width === 'sm') && (\n <Box\n component=\"div\"\n style={styles.wrapperName}\n sx={{ display: { md: 'inline-block', xs: 'none' } }}\n >\n <Typography>admin</Typography>\n {!this.adminGuiConfig.icon && this.state.versionAdmin && (\n <Typography\n style={{\n ...styles.styleVersion,\n color: this.state.themeType === 'dark' ? '#ffffff80' : '#00000080',\n }}\n >\n v{this.state.versionAdmin}\n </Typography>\n )}\n </Box>\n )}\n <Grid>\n <a\n href=\"/#easy\"\n onClick={event => event.preventDefault()}\n style={{ color: 'inherit', textDecoration: 'none' }}\n >\n {this.adminGuiConfig.icon ? (\n <div\n style={{\n height: 50,\n width: 102,\n lineHeight: '50px',\n background: 'white',\n borderRadius: 5,\n padding: 5,\n }}\n >\n <img\n src={this.adminGuiConfig.icon}\n alt=\"logo\"\n style={{ maxWidth: '100%', maxHeight: '100%' }}\n />\n </div>\n ) : (\n <Avatar\n onClick={() => this.handleNavigation('easy')}\n style={\n this.state.themeName === 'colored' || this.state.themeName === 'blue'\n ? styles.logoWhite\n : undefined\n }\n alt=\"ioBroker\"\n src=\"img/no-image.png\"\n />\n )}\n </a>\n </Grid>\n </Grid>\n )}\n </Toolbar>\n );\n }\n\n renderSampleError(): JSX.Element {\n const message = this.state.hasGlobalError.message;\n const stack = this.state.hasGlobalError.stack;\n\n return (\n <div\n style={{\n textAlign: 'center',\n fontSize: 22,\n marginTop: 50,\n height: 'calc(100% - 50px)',\n overflow: 'auto',\n }}\n >\n <h1 style={{ color: '#F00' }}>Error in GUI!</h1>\n Please open the browser console (F12), copy error text from there and create the issue on{' '}\n <a\n href=\"https://github.com/ioBroker/ioBroker.admin/issues\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n github\n </a>\n <br />\n Without this information it is not possible to analyse the error.\n <br />\n It should looks like <br />\n <img\n src=\"img/browserError.png\"\n alt=\"error\"\n />\n <br />\n If in the second line you will see{' '}\n <code\n style={{\n color: '#888',\n fontFamily: 'monospace',\n fontSize: 16,\n }}\n >\n at :3000/static/js/main.chunk.js:36903\n </code>{' '}\n and not the normal file name,\n <br />\n please try to reproduce an error with opened browser console. In this case the special "map"\n files will be loaded and the developers can see the real name of functions and files.\n <div style={{ color: '#F88', fontSize: 14, marginTop: 20 }}>{message}</div>\n <pre\n style={{\n color: '#F88',\n fontSize: 12,\n fontFamily: 'monospace',\n textAlign: 'left',\n marginTop: 20,\n padding: 20,\n }}\n >\n {(stack || '')\n .toString()\n .split('\\n')\n .map((line: string, i: number) => (\n <div key={i}>\n {line}\n <br />\n </div>\n ))}\n </pre>\n </div>\n );\n }\n\n renderEasyMode(): JSX.Element {\n return (\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={this.state.theme}>\n <div style={{ height: '100%' }}>\n {!this.state.connected && <Connecting />}\n <Suspense fallback={<Connecting />}>\n <EasyMode\n navigate={Router.doNavigate}\n getLocation={Router.getLocation}\n location={this.state.currentTab}\n toggleTheme={this.toggleTheme}\n themeName={this.state.themeName}\n themeType={this.state.themeType}\n theme={this.state.theme}\n width={this.props.width}\n adminInstance={this.adminInstance}\n configs={this.state.easyModeConfigs}\n socket={this.socket}\n configStored={value => this.allStored(value)}\n isFloatComma={this.state.systemConfig?.common.isFloatComma}\n dateFormat={this.state.systemConfig?.common.dateFormat}\n t={I18n.t}\n lang={I18n.getLanguage()}\n onRegisterIframeRef={ref => (this.refConfigIframe = ref)}\n onUnregisterIframeRef={ref => {\n if (this.refConfigIframe === ref) {\n this.refConfigIframe = null;\n }\n }}\n handleNavigation={this.handleNavigation}\n />\n </Suspense>\n </div>\n </ThemeProvider>\n </StyledEngineProvider>\n );\n }\n\n render(): JSX.Element {\n const small = this.props.width === 'xs' || this.props.width === 'sm';\n\n if (this.state.cloudNotConnected) {\n return (\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={this.state.theme}>\n <div\n style={{\n width: '100%',\n height: '100%',\n textAlign: 'center',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: this.state.themeType === 'dark' ? '#1a1a1a' : '#fafafa',\n color: this.state.themeType === 'dark' ? '#fafafa' : '#1a1a1a',\n }}\n >\n <div style={{ width: 300, height: 100 }}>\n <CircularProgress />\n <div style={{ fontSize: 16 }}>\n {I18n.t('Waiting for connection of ioBroker...')}{' '}\n <span style={{ fontSize: 18 }}>{this.state.cloudReconnect}</span>\n </div>\n </div>\n </div>\n {this.renderAlertSnackbar()}\n </ThemeProvider>\n </StyledEngineProvider>\n );\n }\n\n if (this.state.hasGlobalError) {\n return this.renderSampleError();\n }\n\n if (this.state.login) {\n return (\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={this.state.theme}>\n <Login t={I18n.t} />\n {this.renderAlertSnackbar()}\n </ThemeProvider>\n </StyledEngineProvider>\n );\n }\n if (!this.state.ready && !this.state.updating) {\n return (\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={this.state.theme}>\n {window.vendorPrefix === 'PT' ? <LoaderPT themeType={this.state.themeType} /> : null}\n {window.vendorPrefix === 'MV' ? <LoaderMV themeType={this.state.themeType} /> : null}\n {window.vendorPrefix &&\n window.vendorPrefix !== 'PT' &&\n window.vendorPrefix !== 'MV' &&\n window.vendorPrefix !== '@@vendorPrefix@@' ? (\n <LoaderVendor themeType={this.state.themeType} />\n ) : null}\n {!window.vendorPrefix || window.vendorPrefix === '@@vendorPrefix@@' ? (\n <Loader themeType={this.state.themeType} />\n ) : null}\n {this.renderAlertSnackbar()}\n </ThemeProvider>\n </StyledEngineProvider>\n );\n }\n if (this.state.strictEasyMode || this.state.currentTab.tab === 'easy') {\n return this.renderEasyMode();\n }\n\n return (\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={this.state.theme}>\n <style>\n {`@keyframes myEffect2 {\n 0% {\n opacity: 1;\n transform: translateX(0);\n }\n 100% {\n opacity: 0.7;\n transform: translateX(-2%);\n }\n }\n @keyframes myEffect: {\n 0% {\n opacity: 0.2;\n transform: translateY(0);\n }\n 100% {\n opacity: 1;\n transform: translateY(-10%);\n }\n }\n `}\n </style>\n <Paper\n elevation={0}\n style={styles.root}\n >\n <AppBar\n color=\"default\"\n position=\"fixed\"\n sx={Utils.getStyle(\n this.state.theme,\n styles.appBar,\n !small &&\n this.state.drawerState === DrawerStates.opened &&\n !this.state.editMenuList &&\n styles.appBarShift,\n !small &&\n this.state.drawerState === DrawerStates.opened &&\n this.state.editMenuList &&\n styles.appBarShiftEdit,\n !small && this.state.drawerState === DrawerStates.compact && styles.appBarShiftCompact,\n )}\n >\n {this.renderToolbar(small)}\n </AppBar>\n <DndProvider backend={!small ? HTML5Backend : TouchBackend}>\n <Drawer\n adminGuiConfig={this.adminGuiConfig}\n state={this.state.drawerState}\n editMenuList={this.state.editMenuList}\n setEditMenuList={(editMenuList: boolean) => this.setState({ editMenuList })}\n systemConfig={this.state.systemConfig}\n handleNavigation={this.handleNavigation}\n onStateChange={(state: 0 | 1 | 2) => this.handleDrawerState(state)}\n onLogout={() => App.logout()}\n currentTab={this.state.currentTab && this.state.currentTab.tab}\n instancesWorker={this.instancesWorker}\n hostsWorker={this.hostsWorker}\n logsWorker={this.logsWorker}\n logoutTitle={I18n.t('Logout')}\n isSecure={this.socket.isSecure}\n versionAdmin={this.state.versionAdmin}\n t={I18n.t}\n lang={I18n.getLanguage()}\n socket={this.socket}\n expertMode={this.state.expertMode}\n ready={this.state.ready}\n themeName={this.state.themeName}\n themeType={this.state.themeType}\n hostname={this.state.hostname}\n adminInstance={this.adminInstance}\n hosts={this.state.hosts}\n repository={this.state.repository}\n installed={this.state.installed}\n theme={this.state.theme}\n />\n </DndProvider>\n <Paper\n elevation={0}\n square\n id=\"app-paper\"\n sx={Utils.getStyle(\n this.state.theme,\n styles.content,\n !small &&\n this.state.drawerState !== DrawerStates.compact &&\n !this.state.editMenuList &&\n styles.contentMargin,\n !small &&\n this.state.drawerState !== DrawerStates.compact &&\n this.state.editMenuList &&\n styles.contentMarginEdit,\n !small && this.state.drawerState !== DrawerStates.opened && styles.contentMarginCompact,\n !small && this.state.drawerState !== DrawerStates.closed && styles.contentShift,\n )}\n >\n {this.getCurrentTab()}\n </Paper>\n {this.renderAlertSnackbar()}\n </Paper>\n {this.renderExpertDialog()}\n {this.getCurrentDialog()}\n {this.renderDialogConfirm()}\n {this.renderCommandDialog()}\n {this.renderWizardDialog()}\n {this.showRedirectDialog()}\n {this.renderSlowConnectionWarning()}\n {this.renderNewsDialog()}\n {this.renderHostWarningDialog()}\n {this.renderNotificationsDialog()}\n {!this.state.connected && !this.state.redirectCountDown && !this.state.updating ? (\n <Connecting />\n ) : null}\n {this.renderShowGuiSettings()}\n </ThemeProvider>\n </StyledEngineProvider>\n );\n }\n}\n\nexport default withWidth()(App);\n","import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport * as Sentry from '@sentry/browser';\n\nimport './index.css';\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3';\nimport { LocalizationProvider } from '@mui/x-date-pickers';\n\nimport version from './version.json';\nimport { ContextWrapperProvider } from './components/ContextWrapper';\nimport App from './App';\n\ndeclare global {\n interface Window {\n adapterName: string;\n disableDataReporting: boolean | string;\n }\n}\n\nwindow.adapterName = 'admin';\n\nconsole.log(`iobroker.${window.adapterName}@${version.version}`);\n\nconst versionChanged = [\n 'ChunkLoadError', // version was changed\n 'removeChild', // version was changed\n 'DOMException', // version was changed\n];\n\nconst ignoreErrors = [\n 'removeChild', // ignore errors that happen by changing the version\n 'Loading chunk', // ignore errors that happen by changing the version\n 'getWidth', // echarts error\n 'safari-extension', // ignore safari extension errors\n 'this.animation', // echarts error\n 'No connection', // Ignore no connection errors\n 'notConnectedError', // Ignore no connection errors\n 'has no target', // Alias has no target\n 'ResizeObserver', // echarts error\n 'WorkerGlobalScope', // worker error\n 'generateKey', // ignore safari extension errors\n 'The operation is insecure.', // http => https access\n 'SyntaxError: An invalid or illegal string was specified', // No stack and no possibility to detect\n \"Can't find variable: servConn\", // Error from info adapter\n 'LPContentScriptFeatures', // ignore safari extension errors\n 'window.webkit.messageHandlers', // ignore safari extension errors\n 'has no target', // ignore alias errors\n];\n\nif (\n (!window.disableDataReporting || window.disableDataReporting === '@@disableDataReporting@@') &&\n window.location.port !== '3000'\n) {\n Sentry.init({\n dsn: 'https://43643152dab3481db69950ba866ee9d6@sentry.iobroker.net/58',\n release: `iobroker.${window.adapterName}@${version.version}`,\n integrations: [Sentry.dedupeIntegration()],\n beforeSend(event: Sentry.ErrorEvent) {\n // Modify the event here\n if (event?.message && versionChanged.find(error => event.message.includes(error))) {\n window.location.reload();\n } else if (event?.message && ignoreErrors.find(error => event.message.includes(error))) {\n return null;\n }\n return event;\n },\n });\n} else {\n window.onerror = (event: Event | string, source?: string, lineno?: number, colno?: number, error?: Error) => {\n if (!error && event) {\n error = event as unknown as Error;\n }\n const errText = error.toString();\n if (typeof error === 'object' && errText && versionChanged.find(e => errText.includes(e))) {\n const message = error.message;\n const stack = error.stack;\n console.error('Try to detect admin version change:');\n console.error(message);\n console.error(JSON.stringify(stack, null, 2));\n window.location.reload();\n return;\n }\n if (typeof error === 'string') {\n if (ignoreErrors.find(e => (error as unknown as string).includes(e))) {\n console.error(`Ignore error: ${error}`);\n return;\n }\n throw new Error(error);\n }\n throw error;\n };\n window.onunhandledrejection = (event: PromiseRejectionEvent) => {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n const errText = event.toString();\n if (typeof event === 'object' && errText && versionChanged.find(e => errText.includes(e))) {\n console.error(`Try to detect admin version change: ${event.reason}`);\n window.location.reload();\n return;\n }\n if (event instanceof Error) {\n throw event;\n } else {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n throw new Error(event.toString());\n }\n };\n}\n\nconst container = document.getElementById('root');\nconst root = createRoot(container);\n\nroot.render(\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <ContextWrapperProvider>\n <App />\n </ContextWrapperProvider>\n </LocalizationProvider>,\n);\n","import React, { Component, type JSX } from 'react';\n\nimport { amber, blue, red } from '@mui/material/colors';\n\nimport { Grid2, LinearProgress, Paper, Switch, Typography } from '@mui/material';\n\nimport { Router, type AdminConnection, type Translate } from '@iobroker/adapter-react-v5';\n\nimport AdminUtils, { type Style } from '../helpers/AdminUtils';\n\nconst styles: Record<string, React.CSSProperties> = {\n log: {\n height: 400,\n width: 860,\n padding: 8,\n overflowY: 'auto',\n },\n logNoSpacing: {\n height: '100%',\n width: 'calc(100% - 8px)',\n marginLeft: 8,\n padding: 8,\n overflowY: 'auto',\n },\n error: {\n color: red[500],\n },\n info: {\n color: blue[500],\n },\n warn: {\n color: amber[500],\n },\n};\n\ninterface CommandProps {\n noSpacing?: boolean;\n host: string;\n callback?: (exitCode: number) => void;\n socket: AdminConnection;\n onFinished: (exitCode: number, log: string[]) => void;\n ready: boolean;\n t: Translate;\n inBackground?: boolean;\n commandError?: boolean;\n errorFunc?: (exitCode: number, log: string[]) => void;\n performed?: () => void;\n cmd: string;\n onSetCommandRunning?: (running: boolean) => void;\n showElement?: boolean;\n logsRead?: string[];\n}\n\ninterface CommandState {\n log: string[];\n init: boolean;\n max: number | null;\n value: number | null;\n // progressText: string;\n moreChecked: boolean;\n stopped: boolean;\n activeCmdId?: number;\n // closeOnReady: boolean;\n}\n\nclass Command extends Component<CommandProps, CommandState> {\n private readonly logRef: React.RefObject<HTMLDivElement>;\n\n private static pattern = ['error', 'warn', 'info'];\n\n private readonly regExp: RegExp;\n\n constructor(props: CommandProps) {\n super(props);\n\n this.state = {\n log: [`$ iobroker ${props.cmd || ''}`],\n init: false,\n max: null,\n value: null,\n // progressText: '',\n moreChecked: true,\n stopped: false,\n };\n\n this.logRef = React.createRef();\n\n this.regExp = new RegExp(Command.pattern.join('|'), 'i');\n }\n\n componentDidMount(): void {\n if (this.props.ready && this.props.cmd) {\n console.log(`STARTED: ${this.props.cmd}`);\n this.executeCommand();\n }\n // try {\n // const closeOnReady = JSON.parse((window._localStorage || window.localStorage).getItem('CommandDialog.closeOnReady')) || false;\n // this.setState({ closeOnReady });\n // } catch (error) {\n // this.setState({ closeOnReady: false });\n // }\n }\n\n componentDidUpdate(): void {\n if (!this.state.init && this.props.ready && this.props.cmd) {\n this.executeCommand();\n }\n if (this.props.logsRead && JSON.stringify(this.props.logsRead) !== JSON.stringify(this.state.log)) {\n this.setState({ log: this.props.logsRead });\n }\n this.logRef.current?.scrollIntoView();\n }\n\n executeCommand(): void {\n this.setState({ init: true }, () => this.props.onSetCommandRunning && this.props.onSetCommandRunning(true));\n\n this.props.socket.registerCmdStdoutHandler(this.cmdStdoutHandler.bind(this));\n this.props.socket.registerCmdStderrHandler(this.cmdStderrHandler.bind(this));\n this.props.socket.registerCmdExitHandler(this.cmdExitHandler.bind(this));\n\n const activeCmdId = Math.floor(Math.random() * 0xffffffe) + 1;\n\n this.setState({ activeCmdId });\n\n this.props.socket\n .cmdExec(\n this.props.host.startsWith('system.host.') ? this.props.host : `system.host.${this.props.host}`,\n this.props.cmd,\n activeCmdId,\n )\n .catch(error => console.log(error));\n }\n\n cmdStdoutHandler(id: number, text: string): void {\n if (this.state.activeCmdId && this.state.activeCmdId === id) {\n const log = this.state.log.slice();\n log.push(text);\n\n const upload = text.match(/^upload \\[(\\d+)]/);\n const gotAdmin = !upload ? text.match(/^got [-_:/\\\\.\\w\\d]+\\/admin$/) : null;\n const gotWww = !gotAdmin ? text.match(/^got [-_:/\\\\.\\w\\d]+\\/www$/) : null;\n\n let max = this.state.max;\n let value = null;\n // let progressText = '';\n\n if (upload) {\n max = max || parseInt(upload[1], 10);\n value = parseInt(upload[1], 10);\n } else if (gotAdmin) {\n // upload of admin\n // progressText = this.t('Upload admin started');\n max = null;\n } else if (gotWww) {\n // upload of www\n // progressText = this.t('Upload www started');\n max = null;\n }\n\n this.setState({\n log,\n max,\n value,\n // progressText,\n });\n\n console.log('cmdStdout');\n }\n }\n\n cmdStderrHandler(id: number, text: string): void {\n if (this.state.activeCmdId && this.state.activeCmdId === id) {\n const log = this.state.log.slice();\n log.push(text);\n\n this.setState({ log });\n\n console.log('cmdStderr');\n console.log(id);\n console.log(text);\n }\n }\n\n cmdExitHandler(id: number, exitCode: number): void {\n if (this.state.activeCmdId && this.state.activeCmdId === id) {\n const log = this.state.log.slice();\n if (\n !window.document.hidden &&\n exitCode === 0 &&\n log.length &&\n log[log.length - 1].endsWith('created') &&\n this.props.callback\n ) {\n const newArr = log[log.length - 1].split(' ');\n const adapter = newArr.find(el => el.startsWith('system'));\n if (adapter) {\n // it takes some time to creat the object\n setTimeout(\n _adapter => {\n void this.props.socket.getObject(_adapter).then(obj => {\n AdminUtils.fixAdminUI(obj);\n if (obj && obj.common?.adminUI?.config !== 'none') {\n Router.doNavigate('tab-instances', 'config', _adapter);\n }\n });\n },\n 1000,\n adapter,\n );\n }\n }\n log.push(`${exitCode !== 0 ? 'ERROR: ' : ''}Process exited with code ${exitCode}`);\n\n this.setState({ log, stopped: true }, () => {\n if (this.props.onSetCommandRunning) {\n this.props.onSetCommandRunning(false);\n }\n if (exitCode !== 0 || this.state.log[this.state.log.length - 1].toLowerCase().includes('error')) {\n if (this.props.errorFunc) {\n this.props.errorFunc(exitCode, this.state.log);\n }\n } else {\n if (this.props.performed) {\n this.props.performed();\n }\n this.props.onFinished(exitCode, this.state.log);\n }\n console.log('cmdExit');\n console.log(id);\n console.log(exitCode);\n\n if (typeof this.props.callback === 'function') {\n this.props.callback(exitCode);\n }\n });\n }\n }\n\n colorize(text: string, maxLength?: number): JSX.Element[] | string {\n if (maxLength) {\n text = text.substring(0, maxLength);\n }\n\n if (text.search(this.regExp) !== -1) {\n const result = [];\n\n while (text.search(this.regExp) >= 0) {\n const [match] = text.match(this.regExp);\n const pos = text.search(this.regExp);\n\n if (pos > 0) {\n const part = text.substring(0, pos);\n const message = AdminUtils.parseColorMessage(part);\n result.push(\n <span key={result.length}>\n {typeof message === 'object'\n ? message.parts.map((item, i) => (\n <span\n key={i}\n style={item.style}\n >\n {item.text}\n </span>\n ))\n : message}\n </span>,\n );\n text = text.replace(part, '');\n }\n\n const part = text.substring(0, match.length);\n if (part) {\n const message = AdminUtils.parseColorMessage(part);\n result.push(\n <span\n key={result.length}\n style={styles[match.toLowerCase()]}\n >\n {typeof message === 'object'\n ? message.parts.map((item, i) => (\n <span\n key={i}\n style={item.style}\n >\n {item.text}\n </span>\n ))\n : message}\n </span>,\n );\n text = text.replace(part, '');\n }\n }\n\n if (text) {\n const message = AdminUtils.parseColorMessage(text);\n result.push(\n <span key={result.length}>\n {typeof message === 'object'\n ? (message as { original: string; parts: { text: string; style: Style }[] }).parts.map(\n (item, i) => (\n <span\n key={i}\n style={item.style}\n >\n {item.text}\n </span>\n ),\n )\n : message}\n </span>,\n );\n }\n\n return result;\n }\n\n return text;\n }\n\n getLog(): JSX.Element[] {\n return this.state.log.map((value, index) => (\n <Typography\n ref={index === this.state.log.length - 1 ? this.logRef : undefined}\n key={index}\n component=\"p\"\n variant=\"body2\"\n >\n {this.colorize(value)}\n </Typography>\n ));\n }\n\n render(): JSX.Element {\n return (\n <Grid2\n style={this.props.noSpacing ? { height: '100%', width: '100%' } : {}}\n container\n direction=\"column\"\n spacing={this.props.noSpacing ? 0 : 2}\n >\n {this.props.showElement === undefined || this.props.showElement === true ? (\n <Grid2>\n {!this.state.stopped && (\n <LinearProgress\n style={this.props.commandError ? { backgroundColor: '#f44336' } : null}\n variant={this.props.inBackground ? 'determinate' : 'indeterminate'}\n value={\n this.state.max && this.state.value\n ? 100 - Math.round((this.state.value / this.state.max) * 100)\n : this.props.commandError\n ? 0\n : 100\n }\n />\n )}\n </Grid2>\n ) : null}\n <div\n style={{\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: this.props.inBackground ? 'space-between' : 'flex-end',\n }}\n >\n <Typography\n style={\n this.props.inBackground\n ? {\n width: 'calc(100% - 180px)',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }\n : { display: 'none' }\n }\n component=\"div\"\n >\n {this.colorize(this.state.log[this.state.log.length - 1])}\n </Typography>\n {this.props.showElement === undefined || this.props.showElement === true ? (\n <Typography\n component=\"div\"\n style={{ width: 250 }}\n >\n <Grid2\n component=\"label\"\n container\n alignItems=\"center\"\n spacing={1}\n >\n <Grid2>{this.props.t('less')}</Grid2>\n <Grid2>\n <Switch\n checked={this.state.moreChecked}\n onChange={event => this.setState({ moreChecked: event.target.checked })}\n color=\"primary\"\n />\n </Grid2>\n <Grid2>{this.props.t('more')}</Grid2>\n </Grid2>\n </Typography>\n ) : null}\n </div>\n <Grid2 style={this.props.noSpacing ? { height: 'calc(100% - 45px)', width: '100%' } : {}}>\n {this.state.moreChecked && (\n <Paper style={this.props.noSpacing ? styles.logNoSpacing : styles.log}>{this.getLog()}</Paper>\n )}\n </Grid2>\n </Grid2>\n );\n }\n}\n\nexport default Command;\n","import React, { Component, type JSX } from 'react';\n\nimport AceEditor from 'react-ace';\nimport 'ace-builds/src-min-noconflict/mode-json';\nimport 'ace-builds/src-min-noconflict/mode-json5';\nimport 'ace-builds/src-min-noconflict/mode-xml';\nimport 'ace-builds/src-min-noconflict/mode-html';\nimport 'ace-builds/src-min-noconflict/worker-json';\nimport 'ace-builds/src-min-noconflict/worker-javascript';\nimport 'ace-builds/src-min-noconflict/worker-xml';\nimport 'ace-builds/src-min-noconflict/worker-html';\nimport 'ace-builds/src-min-noconflict/theme-clouds_midnight';\nimport 'ace-builds/src-min-noconflict/theme-chrome';\nimport 'ace-builds/src-min-noconflict/ext-language_tools';\n\nimport type { ThemeType } from '@iobroker/adapter-react-v5';\n\nexport interface EditorProps {\n fontSize?: number;\n value?: string;\n defaultValue?: string;\n mode?: string;\n name?: string;\n onChange?: (newVal: string) => void;\n themeType: ThemeType;\n /** flag that indicates the \"value edit mode\" */\n editValueMode?: boolean;\n error?: boolean;\n style?: React.CSSProperties;\n}\n\nclass Editor extends Component<EditorProps> {\n render(): JSX.Element {\n return (\n <AceEditor\n style={{\n border: '1px solid',\n borderColor: this.props.error ? 'red' : '#00000000',\n minHeight: 200,\n ...this.props.style,\n }}\n mode={this.props.mode || 'json'}\n width=\"100%\"\n height=\"100%\"\n showPrintMargin={this.props.editValueMode}\n showGutter={this.props.editValueMode}\n highlightActiveLine={this.props.editValueMode}\n defaultValue={this.props.defaultValue}\n theme={this.props.themeType === 'dark' ? 'clouds_midnight' : 'chrome'}\n value={this.props.value}\n readOnly={!this.props.onChange}\n onChange={newValue => this.props.onChange(newValue)}\n name={this.props.name || 'UNIQUE_ID_OF_DIV1'}\n fontSize={this.props.fontSize || 14}\n setOptions={{\n enableBasicAutocompletion: true,\n enableLiveAutocompletion: true,\n enableSnippets: true,\n\n showLineNumbers: this.props.editValueMode,\n tabSize: this.props.editValueMode ? 2 : undefined,\n }}\n editorProps={{ $blockScrolling: true }}\n />\n );\n }\n}\n\nexport default Editor;\n","import React, { Component, type JSX } from 'react';\n\nimport { Box, Button, Menu, MenuItem, Tooltip } from '@mui/material';\n\nimport { type AdminConnection, I18n, Icon, Utils } from '@iobroker/adapter-react-v5';\nimport type { CompactHost } from '@/types';\nimport type HostsWorker from '@/Workers/HostsWorker';\nimport { type HostEvent, type HostAliveEvent } from '@/Workers/HostsWorker';\n\nconst styles: Record<string, any> = {\n imgDiv: {\n '& svg:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n },\n '& img:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n },\n '@media screen and (max-width: 710px)': {\n '& img,svg': {\n marginRight: 0,\n },\n },\n },\n img: {\n width: 30,\n height: 30,\n margin: 'auto 0',\n position: 'relative',\n marginRight: 10,\n borderRadius: 3,\n background: '#FFFFFF',\n padding: 2,\n },\n notAlive: {\n opacity: 0.3,\n },\n button: {\n maxWidth: 300,\n },\n name: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n '@media screen and (max-width: 710px)': {\n display: 'none',\n },\n },\n width: {\n width: '100%',\n '@media screen and (max-width: 710px)': {\n width: 'auto',\n },\n },\n selector: {\n width: 15,\n display: 'inline-block',\n },\n tooltip: {\n pointerEvents: 'none',\n },\n};\n\ninterface HostSelectorsProps {\n disabled?: boolean;\n socket: AdminConnection;\n currentHost: string;\n hostsWorker: InstanceType<typeof HostsWorker>;\n expertMode: boolean;\n setCurrentHost: (hostname: string, aliveHost: string) => void;\n tooltip: string;\n themeType?: string;\n}\n\ninterface HostSelectorsState {\n anchorEl: any;\n alive: Record<string, boolean>;\n hosts: CompactHost[];\n}\n\nclass HostSelectors extends Component<HostSelectorsProps, HostSelectorsState> {\n constructor(props: HostSelectorsProps) {\n super(props);\n\n this.state = {\n anchorEl: null,\n alive: {},\n hosts: [],\n };\n }\n\n componentDidMount(): void {\n this.props.socket\n .getCompactHosts(true)\n .then((hosts: CompactHost[]) => {\n this.setState({ hosts }, async () => {\n // request for all host the \"alive\" status\n const alive: Record<string, boolean> = {};\n for (let h = 0; h < hosts.length; h++) {\n const state = await this.props.socket.getState(`${hosts[h]._id}.alive`);\n if (state) {\n alive[hosts[h]._id] = !!state.val;\n } else {\n alive[hosts[h]._id] = false;\n }\n }\n\n // if the current host is not alive, find the first alive host and set it as current\n if (!alive[this.props.currentHost]) {\n const aliveHost = Object.keys(alive).find(id => alive[id]);\n if (aliveHost) {\n setTimeout(() => {\n const obj = this.state.hosts.find(ob => ob._id === aliveHost);\n if (obj) {\n this.props.setCurrentHost(\n obj.common?.name || aliveHost.replace('system.host.', ''),\n aliveHost,\n );\n } else {\n this.props.setCurrentHost(aliveHost.replace('system.host.', ''), aliveHost);\n }\n }, 100);\n }\n }\n\n this.setState({ alive }, () => {\n this.props.hostsWorker.registerHandler(this.onHostsObjectChange);\n this.props.hostsWorker.registerAliveHandler(this.onAliveChanged);\n });\n });\n })\n .catch((e: any) => {\n window.alert(`Cannot get hosts: ${e}`);\n });\n }\n\n componentWillUnmount(): void {\n this.props.hostsWorker.unregisterHandler(this.onHostsObjectChange);\n this.props.hostsWorker.unregisterAliveHandler(this.onAliveChanged);\n }\n\n onAliveChanged = (events: HostAliveEvent[]): void => {\n const alive: Record<string, boolean> = JSON.parse(JSON.stringify(this.state.alive));\n let changed = false;\n events.forEach(event => {\n if (event.type === 'deleted') {\n if (alive[event.id] !== undefined) {\n delete alive[event.id];\n changed = true;\n }\n } else if (!!alive[event.id] !== !!event.alive) {\n alive[event.id] = event.alive;\n changed = true;\n }\n });\n\n if (changed) {\n this.setState({ alive }, () => {\n if (!alive[this.props.currentHost]) {\n const aliveHost = Object.keys(alive).find(id => alive[id]);\n if (aliveHost) {\n const obj = this.state.hosts.find(ob => ob._id === aliveHost);\n if (obj) {\n this.props.setCurrentHost(\n obj.common?.name || aliveHost.replace('system.host.', ''),\n aliveHost,\n );\n } else {\n this.props.setCurrentHost(aliveHost.replace('system.host.', ''), aliveHost);\n }\n }\n }\n });\n }\n };\n\n onHostsObjectChange = (events: HostEvent[]): void => {\n const hosts: CompactHost[] = JSON.parse(JSON.stringify(this.state.hosts));\n const alive: Record<string, boolean> = JSON.parse(JSON.stringify(this.state.alive));\n let changed = false;\n\n void Promise.all(\n events.map(async event => {\n const host = hosts.find(it => it._id === event.id);\n\n if (event.type === 'deleted' || !event.obj) {\n if (host) {\n const pos = hosts.indexOf(host);\n if (pos !== -1) {\n delete alive[event.id];\n hosts.splice(pos);\n changed = true;\n }\n }\n } else if (host) {\n if (host.common.name !== event.obj.common?.name) {\n host.common.name = event.obj.common?.name || '';\n changed = true;\n }\n if (host.common.color !== event.obj.common?.color) {\n host.common.color = event.obj.common?.color || '';\n changed = true;\n }\n if (host.common.icon !== event.obj.common?.icon) {\n host.common.icon = event.obj.common?.icon || '';\n changed = true;\n }\n } else {\n // new host detected\n changed = true;\n hosts.push({\n _id: event.id,\n common: {\n name: event.obj.common?.name || '',\n color: event.obj.common?.color || '',\n icon: event.obj.common?.icon || '',\n installedVersion: 'ignored',\n },\n native: {\n hardware: {\n networkInterfaces: {},\n },\n },\n });\n\n const state = await this.props.socket.getState(`${event.id}.alive`);\n alive[event.id] = !!state?.val;\n }\n }),\n ).then(() => {\n if (changed) {\n this.setState({ hosts, alive }, () => {\n if (!alive[this.props.currentHost]) {\n const aliveHost = Object.keys(alive).find(id => alive[id]);\n if (aliveHost) {\n const obj = this.state.hosts.find(ob => ob._id === aliveHost);\n if (obj) {\n this.props.setCurrentHost(\n obj.common?.name || aliveHost.replace('system.host.', ''),\n aliveHost,\n );\n } else {\n this.props.setCurrentHost(aliveHost.replace('system.host.', ''), aliveHost);\n }\n }\n }\n });\n }\n });\n };\n\n render(): JSX.Element | null {\n if (!this.props.expertMode && this.state.hosts.length < 2) {\n return null;\n }\n let selectedHostObj;\n if (this.state.hosts.length) {\n selectedHostObj = this.state.hosts.find(\n host => host._id === this.props.currentHost || host._id === `system.host.${this.props.currentHost}`,\n );\n }\n\n return (\n <Box>\n <Tooltip\n title={this.props.tooltip || I18n.t('Change current host')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <span>\n <Button\n color={this.props.themeType === 'dark' ? 'primary' : 'secondary'}\n style={{\n ...styles.button,\n background: selectedHostObj?.common?.color || 'none',\n borderColor: selectedHostObj?.common?.color\n ? Utils.invertColor(selectedHostObj.common.color, false)\n : 'none',\n }}\n variant={this.props.disabled || this.state.hosts.length < 2 ? 'text' : 'outlined'}\n disabled={!!this.props.disabled || this.state.hosts.length < 2}\n aria-haspopup=\"true\"\n onClick={e => this.setState({ anchorEl: e.currentTarget })}\n >\n <Box\n component=\"div\"\n sx={{\n ...styles.width,\n ...(!this.state.alive[this.props.currentHost] ? styles.notAlive : undefined),\n ...styles.imgDiv,\n }}\n style={{\n display: 'flex',\n color: selectedHostObj?.common?.color\n ? Utils.invertColor(selectedHostObj.common.color, true)\n : 'none',\n alignItems: 'center',\n }}\n >\n <Icon\n style={styles.img}\n src={selectedHostObj?.common?.icon || 'img/no-image.png'}\n />\n <Box\n component=\"div\"\n sx={styles.name}\n >\n {selectedHostObj?.common?.name}\n </Box>\n </Box>\n </Button>\n </span>\n </Tooltip>\n <Menu\n anchorEl={this.state.anchorEl}\n keepMounted\n open={!!this.state.anchorEl}\n onClose={() => this.setState({ anchorEl: null })}\n >\n {this.state.hosts.map(({ _id, common: { name, icon, color } }, idx) => (\n <MenuItem\n key={_id}\n // button\n disabled={!this.state.alive[_id]}\n selected={_id === this.props.currentHost}\n style={{ background: color || 'inherit' }}\n onClick={() => {\n if (this.props.currentHost !== this.state.hosts[idx]._id) {\n this.props.setCurrentHost(\n this.state.hosts[idx].common.name,\n this.state.hosts[idx]._id,\n );\n }\n this.setState({ anchorEl: null });\n }}\n >\n <Box\n component=\"div\"\n sx={styles.imgDiv}\n style={{\n display: 'flex',\n color: (color && Utils.invertColor(color, true)) || 'inherit',\n alignItems: 'center',\n }}\n >\n <div style={styles.selector}>{_id === this.props.currentHost ? 'ᐅ' : ''}</div>\n <Icon\n style={styles.img}\n src={icon || 'img/no-image.png'}\n />\n {name}\n </Box>\n </MenuItem>\n ))}\n </Menu>\n </Box>\n );\n }\n}\n\nexport default HostSelectors;\n","import { type ReactElement, type JSX } from 'react';\n\nfunction getAttr(obj: Record<any, any>, attr: string | string[]): boolean {\n if (!obj) {\n return null;\n }\n if (typeof attr !== 'object') {\n attr = attr.split('.');\n }\n const att = attr.shift();\n const val = obj[att];\n if (!attr.length) {\n return val;\n }\n if (typeof val === 'object') {\n return getAttr(val, attr);\n }\n return null;\n}\n\ninterface IsVisibleProps {\n name?: string;\n config?: Record<string, any>;\n value?: boolean;\n children: JSX.Element | JSX.Element[];\n}\n\nfunction IsVisible(props: IsVisibleProps): ReactElement<any, any> {\n const { config, children, name, value } = props;\n\n if (value !== undefined) {\n return value === false ? null : (children as ReactElement<any, any>);\n }\n if (!config) {\n return children as ReactElement<any, any>;\n }\n if (getAttr(config, name) !== false) {\n return children as ReactElement<any, any>;\n }\n return null;\n}\n\nexport default IsVisible;\n","import React, { useEffect, useState, type JSX } from 'react';\nimport Markdown from 'react-markdown';\n\nimport { Box, Button, Dialog, DialogActions, DialogContent, DialogTitle, LinearProgress } from '@mui/material';\n\nimport { Close as IconClose, Check as IconCheck, ArrowDownward as IconArrowDownward } from '@mui/icons-material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nconst styles: Record<string, any> = {\n root: {\n backgroundColor: 'background.paper',\n width: '100%',\n height: 'auto',\n display: 'flex',\n '& .markdown': {\n margin: 0,\n p: '10px',\n width: '100%',\n height: '100%',\n overflow: 'auto',\n },\n },\n paper: {\n maxWidth: 800,\n },\n overflowHidden: {\n display: 'flex',\n overflow: 'hidden',\n },\n pre: {\n overflow: 'auto',\n whiteSpace: 'pre-wrap',\n margin: 0,\n padding: 10,\n width: '100%',\n },\n header1: {\n backgroundColor: 'primary.main',\n color: 'primary.contrastText',\n borderRadius: '2px',\n pl: 1,\n pr: 1,\n pb: '4px',\n },\n header2: {\n backgroundColor: 'secondary.main',\n color: 'secondary.contrastText',\n borderRadius: '2px',\n pl: 1,\n pr: 1,\n pb: '4px',\n },\n};\n\ninterface LicenseDialogProps {\n /** URL to show license text from */\n url: string;\n /** License type: MIT, Apache, ... */\n licenseType: string;\n /** function called when dialog is closed */\n onClose: (accepted?: boolean) => void;\n}\n\nfunction LicenseDialog({ url, onClose, licenseType }: LicenseDialogProps): JSX.Element {\n const [text, setText] = useState('');\n const [loading, setLoading] = useState(true);\n const [scrolled, setScrolled] = useState(false);\n const preRef = React.useRef<HTMLPreElement>(null);\n const divRef = React.useRef<HTMLDivElement>(null);\n const installTimer = React.useRef<ReturnType<typeof setInterval> | null | undefined>(undefined);\n\n useEffect(() => {\n setLoading(true);\n setText('');\n let _url = url;\n if (_url.startsWith('https://github.com/')) {\n _url = _url.replace('https://github.com/', 'https://raw.githubusercontent.com/').replace('/blob/', '/');\n }\n\n fetch(_url)\n .then(el => el.text())\n .then((txt: string): void => {\n setText(txt);\n setLoading(false);\n })\n .catch((): void => setLoading(false));\n }, [url]);\n\n useEffect(() => {\n const installOnscroll = (): boolean => {\n const divMarkdown: HTMLDivElement | null = divRef.current?.querySelector('.markdown');\n if (divMarkdown) {\n // install on scroll only if the scrollbar is visible\n if (divMarkdown.scrollHeight <= divMarkdown.clientHeight) {\n return true;\n }\n\n if (installTimer.current) {\n clearInterval(installTimer.current);\n installTimer.current = null;\n }\n divMarkdown.onscroll = (event: Event) => {\n const div: HTMLDivElement = event.target as HTMLDivElement;\n // give 10 pixels tolerance for MS-edge\n const _scrolled = div.scrollTop + div.clientHeight >= div.scrollHeight - 10;\n if (!scrolled && _scrolled) {\n setScrolled(_scrolled);\n }\n };\n return true;\n }\n return false;\n };\n\n if (!loading && text) {\n if (text.startsWith('#')) {\n if (!installOnscroll()) {\n installTimer.current = installTimer.current || setInterval(() => installOnscroll(), 100);\n }\n } else if (preRef.current) {\n // give 10 pixels tolerance for MS-edge\n if (preRef.current.scrollHeight - 10 <= preRef.current.clientHeight) {\n setScrolled(true);\n }\n } else {\n // check in 100 ms the existence of the preRef\n setTimeout(() => {\n if (preRef.current) {\n // give 10 pixels tolerance for MS-edge\n if (preRef.current.scrollHeight - 10 <= preRef.current.clientHeight) {\n setScrolled(true);\n }\n } else {\n setScrolled(true);\n }\n }, 100);\n }\n }\n\n return () => {\n if (installTimer.current) {\n clearInterval(installTimer.current);\n installTimer.current = null;\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const _preRef: HTMLPreElement | null = preRef.current;\n\n if (_preRef) {\n const _divMarkdown: HTMLDivElement | null = _preRef.querySelector('.markdown');\n if (_divMarkdown) {\n _divMarkdown.onscroll = null;\n }\n }\n };\n }, [loading, scrolled, text]);\n\n let content: JSX.Element;\n if (!loading && text) {\n if (text.startsWith('#')) {\n content = (\n <Markdown\n className=\"markdown\"\n components={{\n h1: h1Props => (\n <Box\n component=\"h1\"\n sx={styles.header1}\n >\n {h1Props.children}\n </Box>\n ),\n h2: h2Props => (\n <Box\n component=\"h2\"\n sx={styles.header2}\n >\n {h2Props.children}\n </Box>\n ),\n }}\n >\n {text}\n </Markdown>\n );\n } else {\n content = (\n <pre\n style={styles.pre}\n ref={preRef}\n onScroll={() => {\n if (preRef.current) {\n // give 10 pixels tolerance for MS-edge\n const _scrolled =\n preRef.current.scrollTop + preRef.current.clientHeight >=\n preRef.current.scrollHeight - 10;\n if (!scrolled && _scrolled) {\n setScrolled(_scrolled);\n }\n }\n }}\n >\n {text}\n </pre>\n );\n }\n }\n\n return (\n <Dialog\n onClose={() => onClose()}\n open={!0}\n maxWidth=\"lg\"\n fullWidth\n sx={{ '& .MuiDialog-paper': styles.paper }}\n >\n <DialogTitle>\n {I18n.t('License agreement')}:<span style={{ marginLeft: 16, fontWeight: 'bold' }}>{licenseType}</span>\n </DialogTitle>\n <DialogContent\n style={styles.overflowHidden}\n dividers\n >\n <Box\n component=\"div\"\n sx={styles.root}\n ref={divRef}\n >\n {loading ? <LinearProgress /> : content}\n </Box>\n </DialogContent>\n <DialogActions>\n <Button\n id=\"license-dialog-accept\"\n variant=\"contained\"\n disabled={loading || !scrolled}\n autoFocus\n onClick={() => onClose(true)}\n startIcon={scrolled ? <IconCheck /> : <IconArrowDownward />}\n color=\"primary\"\n >\n {!scrolled ? I18n.t('Read to the end for accept') : I18n.t('Accept')}\n </Button>\n <Button\n id=\"license-dialog-close\"\n variant=\"contained\"\n onClick={() => onClose()}\n startIcon={<IconClose />}\n color=\"grey\"\n >\n {I18n.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n\nexport default LicenseDialog;\n","import React, { useEffect, useState, type JSX } from 'react';\nimport semver from 'semver';\n\nimport { Button, Dialog, DialogActions, DialogContent, DialogTitle, CardMedia, Typography, Box } from '@mui/material';\n\nimport {\n Info as InfoIcon,\n Warning as WarningIcon,\n Cancel as CancelIcon,\n Check as CheckIcon,\n Public as WorldIcon,\n} from '@mui/icons-material';\n\nimport { I18n, type IobTheme, Utils } from '@iobroker/adapter-react-v5';\nimport type { CompactAdapterInfo } from '@/types';\nimport type { CompactInstanceInfo } from '@/dialogs/AdapterUpdateDialog';\n\nconst styles: Record<string, any> = {\n root: (theme: IobTheme) => ({\n backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: 'auto',\n display: 'flex',\n borderRadius: '4px',\n }),\n paper: {\n maxWidth: 1000,\n width: '100%',\n },\n overflowHidden: {\n display: 'flex',\n },\n pre: {\n overflow: 'auto',\n m: '20px',\n '& p': {\n fontSize: 18,\n },\n },\n blockInfo: {\n right: 20,\n top: 10,\n position: 'absolute',\n display: 'flex',\n alignItems: 'center',\n color: 'silver',\n },\n img: {\n '& .news-admin-dialog-img': {\n marginLeft: 10,\n width: 45,\n height: 45,\n margin: 'auto 0',\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n },\n },\n },\n img2: {\n width: 70,\n height: 70,\n m: '10px 0',\n borderRadius: '4px',\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n },\n },\n link: {\n margin: '10px 0',\n },\n};\n\nconst Status = ({ name }: { name: string }): JSX.Element => {\n switch (name) {\n case 'warning':\n return (\n <WarningIcon\n className=\"news-admin-dialog-img\"\n style={{ color: '#ffca00' }}\n />\n );\n case 'info':\n return (\n <InfoIcon\n className=\"news-admin-dialog-img\"\n style={{ color: '#007cff' }}\n />\n );\n case 'danger':\n return (\n <CancelIcon\n className=\"news-admin-dialog-img\"\n style={{ color: '#ff2f2f' }}\n />\n );\n default:\n return (\n <InfoIcon\n className=\"news-admin-dialog-img\"\n style={{ color: '#007cff' }}\n />\n );\n }\n};\n\nfunction checkActive(adapterName: string, instances: Record<string, CompactInstanceInfo>): boolean {\n return !!Object.keys(instances)\n .filter(id => id.startsWith(`adapter.system.${adapterName}.`))\n .find(id => instances[id].enabled);\n}\n\nfunction checkConditions(condition: string, installedVersion: string): boolean {\n if (condition.startsWith('equals')) {\n const vers = condition.substring(7, condition.length - 1).trim();\n return installedVersion === vers;\n }\n if (condition.startsWith('bigger') || condition.startsWith('greater')) {\n const vers = condition.substring(7, condition.length - 1).trim();\n try {\n return semver.gt(vers, installedVersion);\n } catch {\n return false;\n }\n }\n if (condition.startsWith('smaller')) {\n const vers = condition.substring(8, condition.length - 1).trim();\n try {\n return semver.lt(installedVersion, vers);\n } catch {\n return false;\n }\n }\n if (condition.startsWith('between')) {\n const vers1 = condition.substring(8, condition.indexOf(',')).trim();\n const vers2 = condition.substring(condition.indexOf(',') + 1, condition.length - 1).trim();\n try {\n return semver.gte(installedVersion, vers1) && semver.lte(installedVersion, vers2);\n } catch {\n return false;\n }\n }\n return true;\n}\n\nexport type DbType = 'file' | 'jsonl' | 'redis';\n\ninterface Context {\n adapters: Record<string, CompactAdapterInfo>;\n instances: Record<string, CompactInstanceInfo>;\n nodeVersion: string;\n npmVersion: string;\n os: string;\n activeRepo: string[] | string;\n uuid?: string;\n lang: ioBroker.Languages;\n /** Current configured database for objects */\n objectsDbType: DbType;\n /** Number of objects in the database */\n noObjects: number;\n}\n\ninterface Message {\n id: string;\n uuid: string;\n 'date-start'?: number | string;\n 'date-end'?: number | string;\n 'node-version'?: string;\n 'npm-version'?: string;\n os?: string;\n repo: string;\n conditions: {\n // bigger(x.x.x), smaller(x.x.x), equals(x.x.x), between(x.x.x, x.x.x)\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n [adapter: string]: '!installed' | 'active' | '!active' | string;\n };\n title: Record<ioBroker.Languages, string>;\n content: Record<ioBroker.Languages, string>;\n class: 'info' | 'warning' | 'danger';\n created: string;\n /** Link destination */\n link?: string;\n /** Title of the link */\n linkTitle?: ioBroker.StringOrTranslated;\n /** E.g., a base64 encoded image like, data:image/png;base64,iVBORw0KG... */\n img?: 'string';\n /** e.g. >= 15000 to address installations with more than 15k objects */\n 'number-of-objects'?: string;\n /** All object db types which this message is valid for */\n 'objects-db-type'?: DbType[];\n}\n\nexport interface ShowMessage {\n id: string;\n title: string;\n content: string;\n class: 'info' | 'warning' | 'danger';\n created: string;\n link?: string;\n linkTitle: string;\n img?: string;\n}\n\nexport const checkMessages = (messages: Message[], lastMessageId: string, context: Context): ShowMessage[] => {\n const messagesToShow: ShowMessage[] = [];\n\n try {\n const today = Date.now();\n for (const message of messages) {\n if (!message) {\n continue;\n }\n\n if (message.id === lastMessageId) {\n break;\n }\n let showIt = true;\n\n if (showIt && message['date-start'] && new Date(message['date-start']).getTime() > today) {\n showIt = false;\n } else if (showIt && message['date-end'] && new Date(message['date-end']).getTime() < today) {\n showIt = false;\n } else if (showIt && message.conditions && Object.keys(message.conditions).length > 0) {\n let andConditions = true;\n if (message.conditions.or === 'true') {\n andConditions = false;\n }\n const adapters = Object.keys(message.conditions).filter(key => key !== 'or');\n let conditionResult = true;\n for (let a = 0; a < adapters.length; a++) {\n const adapter = context.adapters[adapters[a]];\n const condition = message.conditions[adapters[a]];\n if (condition) {\n if (!adapter && condition !== '!installed') {\n conditionResult = false;\n } else if (adapter && condition === '!installed') {\n conditionResult = false;\n } else if (adapter && condition === 'active') {\n conditionResult = checkActive(adapters[a], context.instances);\n } else if (adapter && condition === '!active') {\n conditionResult = !checkActive(adapters[a], context.instances);\n } else if (adapter) {\n conditionResult = checkConditions(condition, adapter.v);\n }\n }\n if (andConditions && !conditionResult) {\n break;\n } else if (!andConditions && conditionResult) {\n break;\n }\n }\n showIt = conditionResult;\n }\n\n if (showIt && message['node-version'] && context.nodeVersion) {\n showIt = checkConditions(message['node-version'], context.nodeVersion);\n }\n if (showIt && message['npm-version'] && context.npmVersion) {\n showIt = checkConditions(message['npm-version'], context.npmVersion);\n }\n if (showIt && message.os && context.os) {\n showIt = context.os === message.os;\n }\n if (showIt && message.repo) {\n // If multi-repo\n if (Array.isArray(context.activeRepo)) {\n showIt = context.activeRepo.includes(message.repo);\n } else {\n showIt = context.activeRepo === message.repo;\n }\n }\n if (showIt && message.uuid) {\n if (Array.isArray(message.uuid)) {\n showIt = context.uuid && message.uuid.find(uuid => context.uuid === uuid);\n } else {\n showIt = !!(context.uuid && context.uuid === message.uuid);\n }\n }\n\n if (showIt && message['number-of-objects']) {\n // eslint-disable-next-line no-eval\n showIt = eval(`${context.noObjects} ${message['number-of-objects']}`);\n }\n\n if (showIt && message['objects-db-type']) {\n if (!message['objects-db-type'].includes(context.objectsDbType)) {\n showIt = false;\n }\n }\n\n if (showIt) {\n messagesToShow.push({\n id: message.id,\n title: message.title[context.lang] || message.title.en,\n content: message.content[context.lang] || message.content.en,\n class: message.class,\n created: message.created,\n link: message.link,\n linkTitle:\n typeof message.linkTitle === 'object'\n ? message.linkTitle[context.lang] || message.linkTitle.en\n : message.linkTitle,\n img: message.img,\n });\n }\n }\n } catch {\n // ignore\n }\n\n return messagesToShow;\n};\n\nfunction NewsAdminDialog({\n newsArr,\n current,\n onSetLastNewsId,\n}: {\n newsArr: ShowMessage[];\n current: string;\n onSetLastNewsId: (id?: string) => void;\n}): JSX.Element {\n const [id, setId] = useState(current);\n const [last, setLast] = useState(false);\n const [indexArr, setIndexArr] = useState(0);\n\n useEffect(() => {\n const item = newsArr.find(el => el.id === id);\n if (item) {\n const index = newsArr.indexOf(item);\n if (index + 1 < newsArr.length) {\n const newId = newsArr[index + 1].id;\n if (newId) {\n setId(newId);\n setIndexArr(index + 1);\n }\n } else {\n onSetLastNewsId();\n }\n } else {\n setId(newsArr[0].id);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [last]);\n\n const onClose = (): void => {\n // setOpen(false);\n setLast(!last);\n onSetLastNewsId(id);\n };\n\n const lang = I18n.getLanguage();\n const content = newsArr[indexArr].content.replace(/='([^']*)'/g, '=\"$1\"');\n const title = newsArr[indexArr].title;\n\n const link = newsArr[indexArr].link;\n const linkTitle = newsArr[indexArr].linkTitle;\n return (\n <Dialog\n onClose={onClose}\n open={!0}\n sx={{ '& .MuiDialog-paper': styles.paper }}\n >\n <Box\n component=\"div\"\n sx={{ ...styles.blockInfo, ...styles.img }}\n >\n {new Date(newsArr[indexArr].created).toLocaleDateString(lang)}\n <Status name={newsArr[indexArr].class} />\n </Box>\n <DialogTitle>{I18n.t('You have unread news!')}</DialogTitle>\n <DialogTitle>{title}</DialogTitle>\n <DialogContent\n style={styles.overflowHidden}\n dividers\n >\n <Box\n component=\"div\"\n sx={styles.root}\n >\n <Box\n component=\"div\"\n sx={styles.pre}\n >\n {newsArr[indexArr]?.img && (\n <CardMedia\n sx={styles.img2}\n component=\"img\"\n image={newsArr[indexArr].img}\n />\n )}\n <Typography\n variant=\"body2\"\n component=\"p\"\n >\n {Utils.renderTextWithA(content.replace(/\\n/g, '<br />'))}\n </Typography>\n {newsArr[indexArr]?.link && (\n <Button\n variant=\"contained\"\n style={styles.link}\n onClick={() => window.open(newsArr[indexArr].link, '_blank')}\n color=\"primary\"\n >\n {linkTitle || I18n.t('Link')}\n </Button>\n )}\n </Box>\n </Box>\n </DialogContent>\n <DialogActions>\n {link ? (\n <Button\n id=\"news-admin-dialog-more-info\"\n variant=\"contained\"\n onClick={() => {\n const frame = window.open(link, '_blank');\n frame?.focus();\n }}\n color=\"secondary\"\n startIcon={<WorldIcon />}\n >\n {linkTitle || I18n.t('Show more info')}\n </Button>\n ) : null}\n <Button\n id=\"news-admin-dialog-acknowledge\"\n variant=\"contained\"\n autoFocus\n onClick={onClose}\n color=\"primary\"\n startIcon={<CheckIcon />}\n >\n {I18n.t('Acknowledge')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n\nexport default NewsAdminDialog;\n","import React, { Component, type JSX } from 'react';\n\nimport { Dialog, DialogContent, DialogActions, DialogTitle, DialogContentText, TextField, Button } from '@mui/material';\n\nimport { Close as CloseIcon, AccessTime as TimeIcon, Check as CheckIcon } from '@mui/icons-material';\n\nimport { AdminConnection, type Translate } from '@iobroker/adapter-react-v5';\nimport { MOBILE_WIDTH } from '@/helpers/MobileDialog';\n\nconst styles: Record<string, React.CSSProperties> = {\n buttonLabel: {\n whiteSpace: 'nowrap',\n },\n input: {\n minWidth: 150,\n },\n};\n\ninterface SlowConnectionWarningDialogProps {\n t: Translate;\n readTimeoutMs: number;\n onClose: (readTimeoutMs?: number) => void;\n}\n\ninterface SlowConnectionWarningDialogState {\n readTimeoutSec: number | string;\n}\n\nexport class SlowConnectionWarningDialogClass extends Component<\n SlowConnectionWarningDialogProps,\n SlowConnectionWarningDialogState\n> {\n private readonly mobile: boolean;\n\n constructor(props: SlowConnectionWarningDialogProps) {\n super(props);\n\n this.state = {\n readTimeoutSec: Math.round(\n (props.readTimeoutMs || SlowConnectionWarningDialogClass.getReadTimeoutMs()) / 1000,\n ),\n };\n\n this.mobile = window.innerWidth < MOBILE_WIDTH;\n }\n\n static getReadTimeoutMs(): number {\n return (\n parseInt(((window as any)._localStorage || window.localStorage).getItem('App.readTimeoutMs'), 10) ||\n (AdminConnection.isCloud() ? 40_000 : 15_000)\n );\n }\n\n static saveReadTimeoutMs(readTimeoutMs: number): number {\n if (readTimeoutMs) {\n return ((window as any)._localStorage || window.localStorage).setItem(\n 'App.readTimeoutMs',\n readTimeoutMs.toString(),\n );\n }\n return ((window as any)._localStorage || window.localStorage).removeItem('App.readTimeoutMs');\n }\n\n render(): JSX.Element {\n return (\n <Dialog\n open={!0}\n maxWidth=\"lg\"\n onClose={() => this.props.onClose()}\n >\n <DialogTitle>{this.props.t('Detected slow connection!')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {this.props.t('Seems that you have slow connection. Do you want to increase timeout interval?')}\n </DialogContentText>\n <TextField\n variant=\"standard\"\n style={styles.input}\n label={this.props.t('Read timeout')}\n value={this.state.readTimeoutSec}\n onChange={e => this.setState({ readTimeoutSec: e.target.value })}\n type=\"number\"\n slotProps={{ htmlInput: { min: 5, max: 600 } }}\n helperText={this.props.t('in seconds')}\n />\n </DialogContent>\n <DialogActions>\n <Button\n id=\"slow-connection-dialog-minute\"\n className=\"slow-connection-minute\"\n style={styles.buttonLabel}\n variant=\"contained\"\n onClick={() => {\n SlowConnectionWarningDialogClass.saveReadTimeoutMs(60000);\n this.props.onClose(60000);\n }}\n startIcon={<TimeIcon />}\n color=\"grey\"\n >\n {this.mobile ? this.props.t('1 minute') : this.props.t('Set timeout to 1 minute')}\n </Button>\n <Button\n id=\"slow-connection-dialog-ok\"\n className=\"slow-connection-ok\"\n variant=\"contained\"\n autoFocus\n color=\"primary\"\n disabled={!parseInt(this.state.readTimeoutSec as string, 10)}\n onClick={() => {\n const readTimeoutMs = parseInt(this.state.readTimeoutSec as string, 10) * 1000;\n SlowConnectionWarningDialogClass.saveReadTimeoutMs(readTimeoutMs);\n this.props.onClose(readTimeoutMs);\n }}\n startIcon={<CheckIcon />}\n >\n {this.mobile ? null : this.props.t('Apply')}\n </Button>\n <Button\n id=\"slow-connection-dialog-close\"\n className=\"slow-connection-cancel\"\n variant=\"contained\"\n onClick={() => this.props.onClose()}\n color=\"grey\"\n startIcon={<CloseIcon />}\n >\n {this.mobile ? null : this.props.t('Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default SlowConnectionWarningDialogClass;\n","import semver from 'semver';\nimport { type Translate } from '@iobroker/adapter-react-v5';\n\ndeclare module '@mui/material/Button' {\n interface ButtonPropsColorOverrides {\n grey: true;\n }\n}\n\nconst ANSI_RESET = 0;\nconst ANSI_RESET_COLOR = 39;\nconst ANSI_RESET_BG_COLOR = 49;\nconst ANSI_BOLD = 1;\nconst ANSI_RESET_BOLD = 22;\n\nexport interface Style {\n color?: string;\n backgroundColor?: string;\n fontWeight?: string;\n}\n\nconst STYLES: Record<string, Style> = {\n 30: { color: 'black' }, // ANSI_BLACK\n 31: { color: 'red' }, // ANSI_RED\n 32: { color: 'green' }, // ANSI_GREEN\n 33: { color: 'yellow' }, // ANSI_YELLOW\n 34: { color: 'blue' }, // ANSI_BLUE\n 35: { color: 'purple' }, // ANSI_PURPLE\n 36: { color: 'cyan' }, // ANSI_CYAN\n 37: { color: 'white' }, // ANSI_WHITE\n\n 90: { color: 'grey' }, // ANSI_BRIGHT_BLACK\n 91: { color: 'lightred' }, // ANSI_BRIGHT_RED\n 92: { color: 'lightgreen' }, // ANSI_BRIGHT_GREEN\n 93: { color: 'lightyellow' }, // ANSI_BRIGHT_YELLOW\n 94: { color: 'lightblue' }, // ANSI_BRIGHT_BLUE\n 95: { color: 'lightpurple' }, // ANSI_BRIGHT_PURPLE\n 96: { color: 'lightcyan' }, // ANSI_BRIGHT_CYAN\n 97: { color: 'white' }, // ANSI_BRIGHT_WHITE\n\n 40: { backgroundColor: 'black' }, // ANSI_BG_BLACK\n 41: { backgroundColor: 'red' }, // ANSI_BG_RED\n 42: { backgroundColor: 'green' }, // ANSI_BG_GREEN\n 43: { backgroundColor: 'yellow' }, // ANSI_BG_YELLOW\n 44: { backgroundColor: 'blue' }, // ANSI_BG_BLUE\n 45: { backgroundColor: 'purple' }, // ANSI_BG_PURPLE\n 46: { backgroundColor: 'cyan' }, // ANSI_BG_CYAN\n 47: { backgroundColor: 'white' }, // ANSI_BG_WHITE\n\n 100: { backgroundColor: 'grey' }, // ANSI_BRIGHT_BG_BLACK\n 101: { backgroundColor: 'lightred' }, // ANSI_BRIGHT_BG_RED\n 102: { backgroundColor: 'lightgreen' }, // ANSI_BRIGHT_BG_GREEN\n 103: { backgroundColor: 'lightyellow' }, // ANSI_BRIGHT_BG_YELLOW\n 104: { backgroundColor: 'lightblue' }, // ANSI_BRIGHT_BG_BLUE\n 105: { backgroundColor: 'lightpurple' }, // ANSI_BRIGHT_BG_PURPLE\n 106: { backgroundColor: 'lightcyan' }, // ANSI_BRIGHT_BG_CYAN\n 107: { backgroundColor: 'white' }, // ANSI_BRIGHT_BG_WHITE\n};\n\nclass AdminUtils {\n /**\n * Perform JSON parse/stringify with type inference\n *\n * @param obj the object to clone\n */\n static deepClone<T extends Record<string, any>>(obj: T): T {\n return JSON.parse(JSON.stringify(obj));\n }\n\n /**\n * Format bytes to MB or GB\n *\n * @param bytes the number of bytes\n */\n static formatRam(bytes: number): string {\n const GB = Math.floor((bytes / (1024 * 1024 * 1024)) * 10) / 10;\n bytes %= 1024 * 1024 * 1024;\n const MB = Math.floor((bytes / (1024 * 1024)) * 10) / 10;\n let text = '';\n\n if (GB > 1) {\n text += `${GB} GB`;\n } else {\n text += `${MB} MB`;\n }\n\n return text;\n }\n\n static isTouchDevice(): boolean {\n return 'ontouchstart' in window || window.navigator.maxTouchPoints > 0 || window.navigator.msMaxTouchPoints > 0;\n }\n\n static formatSpeed(mhz: number): string {\n return `${mhz} MHz`;\n }\n\n static formatBytes(bytes: number): string {\n if (Math.abs(bytes) < 1024) {\n return `${bytes} B`;\n }\n\n const units = ['KB', 'MB', 'GB'];\n // const units = ['KiB','MiB','GiB','TiB','PiB','EiB','ZiB','YiB'];\n let u = -1;\n\n do {\n bytes /= 1024;\n ++u;\n } while (Math.abs(bytes) >= 1024 && u < units.length - 1);\n\n return `${bytes.toFixed(1)} ${units[u]}`;\n }\n\n static getFileExtension(fileName: string): string | null {\n const pos = fileName.lastIndexOf('.');\n if (pos !== -1) {\n return fileName.substring(pos + 1).toLowerCase();\n }\n return null;\n }\n\n // Big thanks to: https://stackoverflow.com/questions/35969656/how-can-i-generate-the-opposite-color-according-to-current-color\n static invertColor(hex: string, bw: boolean): string {\n if (hex === undefined || hex === null || hex === '' || typeof hex !== 'string') {\n return '';\n }\n if (hex.indexOf('#') === 0) {\n hex = hex.slice(1);\n }\n // convert 3-digit hex to 6-digits.\n if (hex.length === 3) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n if (hex.length !== 6) {\n throw new Error('Invalid HEX color.');\n }\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n\n if (bw) {\n // http://stackoverflow.com/a/3943023/112731\n return r * 0.299 + g * 0.587 + b * 0.114 > 186 ? '#000000' : '#FFFFFF';\n }\n // invert color components\n const finalR = (255 - r).toString(16);\n const finalG = (255 - g).toString(16);\n const finalB = (255 - b).toString(16);\n // pad each with zeros and return\n return `#${finalR.padStart(2, '0')}${finalG.padStart(2, '0')}${finalB.padStart(2, '0')}`;\n }\n\n /**\n * Format number in seconds to time text\n *\n * @param seconds the number of seconds\n * @param t i18n.t function\n */\n static formatSeconds(seconds: number, t: Translate): string {\n const days = Math.floor(seconds / (3600 * 24));\n let minutesRes: string;\n let secondsRes: string;\n let hoursRes: string;\n\n seconds %= 3600 * 24;\n const hours = Math.floor(seconds / 3600);\n\n if (hours < 10) {\n hoursRes = `0${hours}`;\n } else {\n hoursRes = hours.toString();\n }\n seconds %= 3600;\n const minutes = Math.floor(seconds / 60);\n if (minutes < 10) {\n minutesRes = `0${minutes}`;\n } else {\n minutesRes = minutes.toString();\n }\n\n seconds %= 60;\n seconds = Math.floor(seconds);\n if (seconds < 10) {\n secondsRes = `0${seconds}`;\n } else {\n secondsRes = seconds.toString();\n }\n\n let text = '';\n if (days) {\n text += `${days} ${t('daysShortText')} `;\n }\n text += `${hoursRes}:${minutesRes}:${secondsRes}`;\n\n return text;\n }\n\n static objectMap<Result = any, Value = any>(\n object: Record<string, Value>,\n callback: (res: Value, key: string) => Result,\n ): Result[] {\n const result: Result[] = [];\n for (const key in object) {\n result.push(callback(object[key], key));\n }\n return result;\n }\n\n static fixAdminUI(obj: Record<string, any>): void {\n if (obj?.common) {\n if (!obj.common.adminUI) {\n if (obj.common.noConfig) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.config = 'none';\n } else if (obj.common.jsonConfig) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.config = 'json';\n } else if (obj.common.materialize) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.config = 'materialize';\n } else {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.config = 'html';\n }\n\n if (obj.common.jsonCustom) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.custom = 'json';\n } else if (obj.common.supportCustoms) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.custom = 'json';\n }\n\n if (obj.common.materializeTab && obj.common.adminTab) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.tab = 'materialize';\n } else if (obj.common.adminTab) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.tab = 'html';\n }\n\n if (obj.common.adminUI) {\n console.warn(\n `Please add to \"${obj._id.replace(/\\.\\d+$/, '')}\" common.adminUI=${JSON.stringify(obj.common.adminUI)}`,\n );\n }\n } else {\n let changed = false;\n if (obj.common.materializeTab && obj.common.adminTab) {\n if (obj.common.adminUI.tab !== 'materialize') {\n obj.common.adminUI.tab = 'materialize';\n changed = true;\n }\n } else if (obj.common.adminTab) {\n if (obj.common.adminUI.tab !== 'html' && obj.common.adminUI.tab !== 'materialize') {\n obj.common.adminUI.tab = 'html';\n changed = true;\n }\n }\n\n if (obj.common.jsonCustom || obj.common.supportCustoms) {\n if (obj.common.adminUI.custom !== 'json') {\n obj.common.adminUI.custom = 'json';\n changed = true;\n }\n }\n\n if (obj.common.noConfig) {\n if (obj.common.adminUI.config !== 'none') {\n obj.common.adminUI.config = 'none';\n changed = true;\n }\n } else if (obj.common.jsonConfig) {\n if (obj.common.adminUI.config !== 'json') {\n obj.common.adminUI.config = 'json';\n changed = true;\n }\n obj.common.adminUI.config = 'json';\n } else if (obj.common.materialize) {\n if (obj.common.adminUI.config !== 'materialize') {\n if (!obj.common.adminUI.config) {\n obj.common.adminUI.config = 'materialize';\n changed = true;\n }\n }\n } else if (!obj.common.adminUI.config) {\n obj.common.adminUI.config = 'html';\n changed = true;\n }\n if (changed) {\n console.warn(\n `Please modify \"${obj._id.replace(/\\.\\d+$/, '')}\" common.adminUI=${JSON.stringify(obj.common.adminUI)}`,\n );\n }\n }\n }\n }\n\n static parseColorMessage(text: string): string | { original: string; parts: { text: string; style: Style }[] } {\n if (text && (text.includes('\\u001b[') || text.includes('\\u001B['))) {\n // eslint-disable-next-line\n let m = text.match(/\\u001b\\[\\d+m/gi);\n if (m) {\n const original = text;\n const result = [];\n let style: Style = {};\n for (let i = 0; i < m.length; i++) {\n const pos = text.indexOf(m[i]);\n if (pos) {\n result.push({ text: text.substring(0, pos), style: { ...style } });\n }\n const code = parseInt(m[i].substring(2), 10);\n if (STYLES[code]) {\n Object.assign(style, STYLES[code]);\n } else if (ANSI_RESET_COLOR === code) {\n delete style.color;\n } else if (ANSI_RESET_BG_COLOR === code) {\n delete style.backgroundColor;\n } else if (ANSI_RESET_BOLD === code) {\n delete style.fontWeight;\n } else if (ANSI_BOLD === code) {\n style.fontWeight = 'bold';\n } else if (ANSI_RESET === code) {\n style = {};\n }\n text = text.substring(m[i].length + pos);\n }\n if (text) {\n result.push({ text, style: { ...style } });\n }\n\n return { original, parts: result };\n }\n return text;\n }\n return text;\n }\n\n static PASSWORD_ERROR_LENGTH =\n 'Password must be at least 8 characters long and have numbers, upper and lower case letters';\n\n static PASSWORD_ERROR_NOT_EQUAL = 'Repeat password is not equal with password';\n\n static PASSWORD_ERROR_EMPTY = 'Empty password is not allowed';\n\n static PASSWORD_SET = '***********';\n\n /** The languages for which docs are generated */\n static SUPPORTED_DOC_LANGUAGES: ioBroker.Languages[] = ['en', 'de', 'ru', 'zh-cn'];\n\n static checkPassword(password: string, passwordRepeat?: string): false | string {\n password = password || '';\n passwordRepeat = passwordRepeat || '';\n if (\n password &&\n passwordRepeat &&\n password !== AdminUtils.PASSWORD_SET &&\n passwordRepeat !== AdminUtils.PASSWORD_SET\n ) {\n if (password.length < 8 || !password.match(/\\d/) || !password.match(/[a-z]/) || !password.match(/[A-Z]/)) {\n return AdminUtils.PASSWORD_ERROR_LENGTH;\n }\n if (password !== passwordRepeat) {\n return AdminUtils.PASSWORD_ERROR_NOT_EQUAL;\n }\n return false;\n }\n if (password && password !== AdminUtils.PASSWORD_SET) {\n if (password.length < 8 || !password.match(/\\d/) || !password.match(/[a-z]/) || !password.match(/[A-Z]/)) {\n return AdminUtils.PASSWORD_ERROR_LENGTH;\n }\n return false;\n }\n if (passwordRepeat && passwordRepeat !== AdminUtils.PASSWORD_SET) {\n if (\n passwordRepeat.length < 8 ||\n !passwordRepeat.match(/\\d/) ||\n !passwordRepeat.match(/[a-z]/) ||\n !passwordRepeat.match(/[A-Z]/)\n ) {\n return AdminUtils.PASSWORD_ERROR_LENGTH;\n }\n return false;\n }\n if (password === AdminUtils.PASSWORD_SET || passwordRepeat === AdminUtils.PASSWORD_SET) {\n return false;\n }\n return AdminUtils.PASSWORD_ERROR_EMPTY;\n }\n\n /**\n * Get Link to adapter docs in given language\n *\n * @param options the adapter name without ioBroker. prefix and the language information\n * @param options.adapterName the adapter name without ioBroker. prefix\n * @param options.lang the language for the docs\n */\n static getDocsLinkForAdapter(options: { lang: ioBroker.Languages; adapterName: string }): string {\n const { adapterName } = options;\n let { lang } = options;\n\n if (!AdminUtils.SUPPORTED_DOC_LANGUAGES.includes(lang)) {\n lang = 'en';\n }\n\n return `https://www.iobroker.net/#${lang}/adapters/adapterref/iobroker.${adapterName}/README.md`;\n }\n\n static updateAvailable(oldVersion: string, newVersion: string): boolean {\n try {\n return semver.gt(newVersion, oldVersion) === true;\n } catch {\n console.warn(`[ADAPTERS] Cannot compare \"${newVersion}\" and \"${oldVersion}\"`);\n return false;\n }\n }\n\n static getText(word: ioBroker.StringOrTranslated, lang: ioBroker.Languages): string {\n if (typeof word === 'object') {\n if (!word) {\n return '';\n }\n return (word[lang] || word.en || '').toString();\n }\n\n return word ? word.toString() : '';\n }\n\n static clone<T>(obj: T): T {\n return JSON.parse(JSON.stringify(obj));\n }\n}\n\nexport default AdminUtils;\n","import React, { Component, type JSX } from 'react';\n\nexport const MOBILE_WIDTH = 800;\n\ninterface MobileDialogState {\n mobile: boolean;\n}\n\nclass MobileDialog<TProps, TState extends MobileDialogState = MobileDialogState> extends Component<TProps, TState> {\n private _resizeHandlerInstalled: boolean;\n\n private _timerOnResize: ReturnType<typeof setTimeout> = null;\n\n static isMobile(): boolean {\n return window.innerWidth < MOBILE_WIDTH;\n }\n\n componentDidMount(): void {\n if (this.state.mobile !== MobileDialog.isMobile()) {\n this.setState({ mobile: MobileDialog.isMobile() });\n }\n if (!this._resizeHandlerInstalled) {\n this._resizeHandlerInstalled = true;\n window.addEventListener('resize', this.__onResize, false);\n }\n }\n\n componentWillUnmount(): void {\n if (this._timerOnResize) {\n clearTimeout(this._timerOnResize);\n this._timerOnResize = null;\n }\n if (this._resizeHandlerInstalled) {\n window.removeEventListener('resize', this.__onResize, false);\n }\n }\n\n __onResize = (): void => {\n if (this._timerOnResize) {\n clearTimeout(this._timerOnResize);\n }\n this._timerOnResize = setTimeout(() => {\n this._timerOnResize = null;\n if (this.state.mobile !== MobileDialog.isMobile()) {\n this.setState({ mobile: MobileDialog.isMobile() });\n }\n }, 200);\n };\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n getButtonTitle(icon: JSX.Element, text: string, moreMobileIcon?: JSX.Element): string | JSX.Element | null {\n if (icon && text) {\n if (this.state.mobile) {\n if (moreMobileIcon) {\n return (\n <>\n {icon} & {moreMobileIcon}\n </>\n );\n }\n return icon;\n }\n return (\n <>\n {icon}\n <span style={{ marginLeft: 4 }}>{text}</span>\n </>\n );\n }\n if (icon) {\n return icon;\n }\n if (text) {\n return text;\n }\n return null;\n }\n}\n\nexport default MobileDialog;\n","/** Url where controller changelog is reachable */\nexport const CONTROLLER_CHANGELOG_URL = 'https://github.com/ioBroker/ioBroker.js-controller/blob/master/CHANGELOG.md';\n\n/** All possible auto upgrade settings */\nexport const AUTO_UPGRADE_SETTINGS: ioBroker.AutoUpgradePolicy[] = ['none', 'patch', 'minor', 'major'];\n\n/** Mapping to make it more understandable which upgrades are allowed */\nexport const AUTO_UPGRADE_OPTIONS_MAPPING: Record<ioBroker.AutoUpgradePolicy, string> = {\n none: 'none',\n patch: 'patch',\n minor: 'patch & minor',\n major: 'patch, minor & major',\n};\n\nfunction ip2int(ip: string): number {\n return ip.split('.').reduce((ipInt, octet) => (ipInt << 8) + parseInt(octet, 10), 0) >>> 0;\n}\n\nfunction findNetworkAddressOfHost(obj: ioBroker.HostObject, localIp: string): null | string {\n const networkInterfaces = obj?.native?.hardware?.networkInterfaces;\n if (!networkInterfaces) {\n return null;\n }\n\n let hostIp;\n for (const networkInterface of Object.values(networkInterfaces)) {\n if (!networkInterface) {\n continue;\n }\n for (let i = 0; i < networkInterface.length; i++) {\n const ip = networkInterface[i];\n if (ip.internal) {\n return;\n }\n if (localIp.includes(':') && ip.family !== 'IPv6') {\n return;\n }\n if (localIp.includes('.') && !localIp.match(/[^.\\d]/) && ip.family !== 'IPv4') {\n return;\n }\n if (localIp === '127.0.0.0' || localIp === 'localhost' || localIp.match(/[^.\\d]/)) {\n // if DNS name\n hostIp = ip.address;\n } else if (\n ip.family === 'IPv4' &&\n localIp.includes('.') &&\n (ip2int(localIp) & ip2int(ip.netmask)) === (ip2int(ip.address) & ip2int(ip.netmask))\n ) {\n hostIp = ip.address;\n } else {\n hostIp = ip.address;\n }\n }\n }\n\n if (!hostIp) {\n for (const networkInterface of Object.values(networkInterfaces)) {\n if (!networkInterface) {\n continue;\n }\n for (let i = 0; i < networkInterface.length; i++) {\n const ip = networkInterface[i];\n if (ip.internal) {\n return;\n }\n if (localIp.includes(':') && ip.family !== 'IPv6') {\n return;\n }\n if (localIp.includes('.') && !localIp.match(/[^.\\d]/) && ip.family !== 'IPv4') {\n return;\n }\n if (localIp === '127.0.0.0' || localIp === 'localhost' || localIp.match(/[^.\\d]/)) {\n // if DNS name\n hostIp = ip.address;\n } else {\n hostIp = ip.address;\n }\n }\n }\n }\n\n if (!hostIp) {\n for (const networkInterface of Object.values(networkInterfaces)) {\n if (!networkInterface) {\n continue;\n }\n for (let i = 0; i < networkInterface.length; i++) {\n const ip = networkInterface[i];\n if (ip.internal) {\n return;\n }\n hostIp = ip.address;\n }\n }\n }\n\n return hostIp;\n}\n\nfunction getHostname(\n instanceObj: ioBroker.InstanceObject,\n objects: Record<string, ioBroker.InstanceObject>,\n hosts: Record<string, ioBroker.HostObject>,\n currentHostname: string,\n adminInstance: string,\n): string {\n if (!instanceObj || !instanceObj.common) {\n return null;\n }\n\n let hostname;\n // check if the adapter from the same host as admin\n const adminHost = objects[`system.adapter.${adminInstance}`]?.common?.host;\n if (instanceObj.common.host !== adminHost) {\n // find IP address\n const host = hosts[`system.host.${instanceObj.common.host}`];\n if (host) {\n const ip = findNetworkAddressOfHost(host, currentHostname);\n if (ip) {\n hostname = ip;\n } else {\n console.warn(`Cannot find suitable IP in host ${instanceObj.common.host} for ${instanceObj._id}`);\n return null;\n }\n } else {\n console.warn(`Cannot find host ${instanceObj.common.host} for ${instanceObj._id}`);\n return null;\n }\n } else {\n hostname = currentHostname;\n }\n\n return hostname;\n}\n\n// internal use\nfunction _replaceLink(\n link: string,\n objects: Record<string, ioBroker.InstanceObject>,\n adapterInstance: string,\n attr: string,\n placeholder: string,\n hosts: Record<string, ioBroker.HostObject>,\n hostname: string,\n adminInstance: string,\n): string {\n if (attr === 'protocol') {\n attr = 'secure';\n }\n\n try {\n const object = objects[`system.adapter.${adapterInstance}`];\n\n if (link && object) {\n if (attr === 'secure') {\n link = link.replace(`%${placeholder}%`, object.native[attr] ? 'https' : 'http');\n } else {\n let value = object.native[attr];\n // workaround for port\n if ((attr === 'webinterfacePort' || attr === 'port') && (!value || value === '0')) {\n if (object.native.secure === true) {\n value = 443;\n } else {\n value = 80;\n }\n }\n\n if (attr === 'bind' || attr === 'ip') {\n let ip = object.native.bind || object.native.ip;\n if (ip === '0.0.0.0') {\n ip = getHostname(object, objects, hosts, hostname, adminInstance);\n }\n if (!link.includes(`%${placeholder}%`)) {\n link = link.replace(`%native_${placeholder}%`, ip || '');\n } else {\n link = link.replace(`%${placeholder}%`, ip || '');\n }\n } else if (!link.includes(`%${placeholder}%`)) {\n link = link.replace(`%native_${placeholder}%`, value);\n } else {\n link = link.replace(`%${placeholder}%`, value);\n }\n }\n } else {\n console.log(`Cannot get link ${attr}`);\n link = link.replace(`%${placeholder}%`, '');\n }\n } catch (error) {\n console.log(error);\n }\n return link;\n}\n\n/**\n * Convert the template link to string\n *\n * Possible placeholders:\n * `%ip%` - `native.bind` or `native.ip` of this adapter. If it is '0.0.0.0', we are trying to find the host IP that is reachable from the current browser.\n * `%protocol%` - `native.protocol` or `native.secure` of this adapter. The result is 'http' or 'https'.\n * `%s%` - `native.protocol` or `native.secure` of this adapter. The result is '' or 's'. The idea is to use the pattern like \"http%s%://...\"\n * `%instance%` - instance number\n * `%adapterName_nativeAttr%` - Takes the native value `nativeAttr` of all instances of adapterName. This generates many links if more than one instance installed\n * `%adapterName.x_nativeAttr%` - Takes the native value `nativeAttr` of adapterName.x instance\n *\n * @param link pattern for link\n * @param adapter adapter name\n * @param instance adapter instance number\n * @param context Context object\n * @param context.instances Object with all instances\n * @param context.hostname Actual host name\n * @param context.adminInstance Actual admin instance\n * @param context.hosts Object with all hosts\n */\nexport function replaceLink(\n link: string,\n adapter: string,\n instance: number,\n context: {\n instances: Record<string, ioBroker.InstanceObject>;\n hostname: string;\n adminInstance: string;\n hosts: Record<string, ioBroker.HostObject>;\n },\n): {\n url: string;\n port: number;\n instance?: string;\n}[] {\n const _urls: {\n url: string;\n port: number;\n instance?: string;\n }[] = [];\n let port: number;\n\n if (link) {\n const instanceObj = context.instances[`system.adapter.${adapter}.${instance}`];\n const native = instanceObj?.native || {};\n\n const placeholders = link.match(/%(\\w+)%/g);\n\n if (placeholders) {\n for (let p = 0; p < placeholders.length; p++) {\n let placeholder = placeholders[p];\n\n if (placeholder === '%ip%') {\n let ip: string = (native.bind || native.ip) as string;\n if (!ip || ip === '0.0.0.0') {\n // Check host\n ip = getHostname(\n instanceObj,\n context.instances,\n context.hosts,\n context.hostname,\n context.adminInstance,\n );\n }\n\n if (_urls.length) {\n _urls.forEach(item => (item.url = item.url.replace('%ip%', ip)));\n } else {\n link = link.replace('%ip%', ip || '');\n }\n } else if (placeholder === '%protocol%') {\n const protocolVal: string | boolean = native.secure === undefined ? native.protocol : native.secure;\n let protocol: 'http' | 'https';\n if (protocolVal === true || protocolVal === 'true') {\n protocol = 'https';\n } else if (protocolVal === false || protocolVal === 'false' || !protocolVal) {\n protocol = 'http';\n } else {\n protocol = protocolVal.toString().replace(/:$/, '') as 'http' | 'https';\n }\n\n if (_urls.length) {\n _urls.forEach(item => (item.url = item.url.replace('%protocol%', protocol)));\n } else {\n link = link.replace('%protocol%', protocol);\n }\n } else if (placeholder === '%s%') {\n const protocolVal: string | boolean = native.secure === undefined ? native.protocol : native.secure;\n let protocol: '' | 's';\n if (protocolVal === true || protocolVal === 'true') {\n protocol = 's';\n } else if (protocolVal === false || protocolVal === 'false' || !protocolVal) {\n protocol = '';\n } else {\n protocol = protocolVal.toString().replace(/:$/, '') as '' | 's';\n }\n\n if (_urls.length) {\n _urls.forEach(item => (item.url = item.url.replace('%s%', protocol)));\n } else {\n link = link.replace('%s%', protocol);\n }\n } else if (placeholder === '%instance%') {\n link = link.replace('%instance%', instance.toString());\n if (_urls.length) {\n _urls.forEach(item => (item.url = item.url.replace('%instance%', instance.toString())));\n } else {\n link = link.replace('%instance%', instance.toString());\n }\n } else {\n // remove %%\n placeholder = placeholder.replace(/%/g, '');\n\n if (placeholder.startsWith('native_')) {\n placeholder = placeholder.substring(7);\n }\n\n // like web.0_port or web_protocol\n if (!placeholder.includes('_')) {\n // if only one instance\n const adapterInstance = `${adapter}.${instance}`;\n if (_urls.length) {\n _urls.forEach(\n item =>\n (item.url = _replaceLink(\n item.url,\n context.instances,\n adapterInstance,\n placeholder,\n placeholder,\n context.hosts,\n context.hostname,\n context.adminInstance,\n )),\n );\n } else {\n link = _replaceLink(\n link,\n context.instances,\n adapterInstance,\n placeholder,\n placeholder,\n context.hosts,\n context.hostname,\n context.adminInstance,\n );\n port = context.instances[`system.adapter.${adapterInstance}`]?.native?.port;\n }\n } else {\n const [adapterInstance, attr] = placeholder.split('_');\n\n // if instance number not found\n if (!adapterInstance.match(/\\.[0-9]+$/)) {\n // list all possible instances\n let ids: string[];\n if (adapter === adapterInstance) {\n // take only this one instance and that's all\n ids = [`${adapter}.${instance}`];\n } else {\n ids = Object.keys(context.instances)\n .filter(\n id =>\n id.startsWith(`system.adapter.${adapterInstance}.`) &&\n context.instances[id].common.enabled,\n )\n .map(id => id.substring(15));\n\n // try to get disabled instances\n if (!ids.length) {\n ids = Object.keys(context.instances)\n .filter(id => id.startsWith(`system.adapter.${adapterInstance}.`))\n .map(id => id.substring(15));\n }\n }\n\n for (const id of ids) {\n if (_urls.length) {\n const item = _urls.find(t => t.instance === id);\n if (item) {\n item.url = _replaceLink(\n item.url,\n context.instances,\n id,\n attr,\n placeholder,\n context.hosts,\n context.hostname,\n context.adminInstance,\n );\n } else {\n // add new\n const _link = _replaceLink(\n link,\n context.instances,\n id,\n attr,\n placeholder,\n context.hosts,\n context.hostname,\n context.adminInstance,\n );\n const _port: number = context.instances[`system.adapter.${id}`]?.native\n ?.port as number;\n\n _urls.push({ url: _link, port: _port, instance: id });\n }\n } else {\n const _link = _replaceLink(\n link,\n context.instances,\n id,\n attr,\n placeholder,\n context.hosts,\n context.hostname,\n context.adminInstance,\n );\n\n const _port: number = context.instances[`system.adapter.${id}`]?.native\n ?.port as number;\n _urls.push({ url: _link, port: _port, instance: id });\n }\n }\n } else {\n link = _replaceLink(\n link,\n context.instances,\n adapterInstance,\n attr,\n placeholder,\n context.hosts,\n context.hostname,\n context.adminInstance,\n );\n\n port = context.instances[`system.adapter.${adapterInstance}`]?.native?.port as number;\n }\n }\n }\n }\n }\n }\n\n if (_urls.length) {\n return _urls;\n }\n return [{ url: link, port }];\n}\n","import React, { Component, type JSX } from 'react';\nimport { LinearProgress } from '@mui/material';\n\nimport { withWidth, type ThemeType, Router } from '@iobroker/adapter-react-v5';\n\nimport type InstancesWorker from '@/Workers/InstancesWorker';\nimport AdminUtils from '@/helpers/AdminUtils';\nimport { replaceLink } from '@/helpers/utils';\n\nconst styles: Record<string, React.CSSProperties> = {\n root: {\n // border: '0 solid #FFF',\n display: 'block',\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n // background: 'white',\n color: 'black',\n borderRadius: 4,\n boxShadow:\n '0px 2px 1px -1px rgb(0 0 0 / 20%), 0px 1px 1px 0px rgb(0 0 0 / 14%), 0px 1px 3px 0px rgb(0 0 0 / 12%)',\n border: '0px solid #888',\n },\n};\n\nexport async function getHref(\n instancesWorker: InstancesWorker,\n tab: string,\n hostname: string,\n hosts: Record<string, ioBroker.HostObject>,\n adminInstance: string,\n themeType: ThemeType,\n): Promise<string> {\n const instances = await instancesWorker.getObjects();\n let adapter = tab.replace(/^tab-/, '');\n const m = adapter.match(/-(\\d+)$/);\n const instNum: number | null = m ? parseInt(m[1], 10) : null;\n let instance;\n if (instances) {\n if (instNum !== null) {\n adapter = adapter.replace(/-(\\d+)$/, '');\n const name = `system.adapter.${adapter}.${instNum}`;\n instance = Object.keys(instances).find(id => id === name);\n } else {\n const name = `system.adapter.${adapter}.`;\n\n instance = instances && Object.keys(instances).find(id => id.startsWith(name));\n }\n }\n instance = instances && instances[instance];\n AdminUtils.fixAdminUI(instance);\n if (!instance || !instance.common || !instance.common.adminTab) {\n console.error(`Cannot find instance ${tab}`);\n\n return '';\n }\n\n // calculate href\n let href = instance.common.adminTab.link;\n if (!href) {\n if (instance.common.adminUI?.tab === 'materialize') {\n href = `adapter/${adapter}/tab_m.html${instNum !== null && instNum !== undefined ? `?${instNum}` : ''}`;\n } else {\n href = `adapter/${adapter}/tab.html${instNum !== null && instNum !== undefined ? `?${instNum}` : ''}`;\n }\n }\n if (!instance.common.adminTab.singleton && instNum !== null && instNum !== undefined) {\n href += `${href.includes('?') ? '&' : '?'}instance=${instNum}`;\n }\n if (href.includes('%')) {\n let _instNum: number;\n // fix for singletons\n if (instNum === null) {\n _instNum = parseInt(instance._id.split('.').pop(), 10);\n } else {\n _instNum = instNum;\n }\n\n // replace\n const hrefs = replaceLink(href, adapter, _instNum, {\n hostname,\n // it cannot be void\n instances: instances,\n hosts,\n adminInstance,\n });\n\n href = hrefs ? hrefs[0]?.url : '';\n }\n // add at the end the instance, as some adapters make bullshit like: window.location.search.slice(-1) || 0;\n href += `${href.includes('?') ? '&' : '?'}newReact=true${instNum !== null && instNum !== undefined ? `&${instNum}` : ''}&react=${themeType}`;\n return href;\n}\n\ninterface CustomTabProps {\n instancesWorker: InstancesWorker;\n tab: string;\n hostname: string;\n hosts: ioBroker.HostObject[];\n adminInstance: string;\n themeName: ThemeType;\n onRegisterIframeRef: (ref: HTMLIFrameElement) => void;\n onUnregisterIframeRef: (ref: HTMLIFrameElement) => void;\n}\n\ninterface CustomTabState {\n href: string;\n}\n\nclass CustomTab extends Component<CustomTabProps, CustomTabState> {\n private refIframe: HTMLIFrameElement | null = null;\n\n private registered: boolean = false;\n\n constructor(props: CustomTabProps) {\n super(props);\n this.state = {\n href: '',\n };\n\n const hosts: Record<string, ioBroker.HostObject> = {};\n for (const host of props.hosts) {\n hosts[host._id] = host;\n }\n\n void getHref(\n this.props.instancesWorker,\n this.props.tab,\n this.props.hostname,\n hosts,\n this.props.adminInstance,\n this.props.themeName,\n ).then(href => {\n this.setState({ href });\n // check if href exists\n // fetch(href)\n // .then(() => this.setState({ href }))\n // .catch(() => this.setState({ href: href.includes('tab_m.html') ? href.replace('tab_m.html', 'tab.html') : href.replace('tab.html', 'tab_m.html') }));\n });\n }\n\n componentWillUnmount(): void {\n if (this.registered) {\n this.props.onUnregisterIframeRef(this.refIframe);\n this.registered = false;\n }\n (window.removeEventListener || window.detachEvent)(\n window.removeEventListener ? 'message' : 'onmessage',\n this.onMessage,\n false,\n );\n }\n\n componentDidMount(): void {\n if (!this.registered && this.refIframe?.contentWindow) {\n this.registered = true;\n this.props.onRegisterIframeRef(this.refIframe);\n }\n (window.addEventListener || window.attachEvent)(\n window.addEventListener ? 'message' : 'onmessage',\n this.onMessage,\n false,\n );\n }\n\n componentDidUpdate(/* prevProps, prevState, snapshot */): void {\n if (!this.registered && this.refIframe?.contentWindow) {\n this.registered = true;\n this.props.onRegisterIframeRef(this.refIframe);\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n onMessage = (event: MessageEvent & { message: string }): void => {\n if (event.origin !== window.location.origin) {\n return;\n }\n if (event.data === 'close' || event.message === 'close') {\n Router.doNavigate('tab-instances');\n } else if (event.data === 'change' || event.message === 'change') {\n // this.props.configStored(false);\n console.warn('Application sends \"change\" message, but it is not processed yet');\n } else if (event.data === 'nochange' || event.message === 'nochange') {\n // this.props.configStored(true);\n console.warn('Application sends \"nochange\" message, but it is not processed yet');\n } else if (\n (typeof event.data === 'string' && event.data.startsWith('goto:')) ||\n (typeof event.message === 'string' && event.message.startsWith('goto:'))\n ) {\n const [, url] = (event.data || event.message).split(':');\n const [tab, subTab, parameter] = url.split('/');\n Router.doNavigate(tab, subTab, parameter);\n }\n };\n\n render(): JSX.Element {\n if (!this.state.href) {\n return <LinearProgress />;\n }\n\n return (\n <iframe\n ref={el => (this.refIframe = el)}\n title={this.props.tab}\n style={styles.root}\n src={this.state.href}\n onError={e => {\n (e.target as HTMLIFrameElement).onerror = null;\n this.setState({ href: this.state.href.replace('tab_m.html', 'tab.html') });\n }}\n />\n );\n }\n}\n\nexport default withWidth()(CustomTab);\n"],"names":["GenericWorker","constructor","socket","root","objectType","handlers","promise","connected","objects","forceUpdate","objectChangeHandler","id","obj","this","checkObjectId","type","oldObj","AdminUtils","fixAdminUI","JSON","stringify","postProcessing","forEach","cb","connectionHandler","isConnected","length","subscribeObject","concat","then","getObjects","Object","keys","catch","e","window","alert","connectionPostHandler","registerConnectionHandler","startsWith","_id","_obj","isForceUpdate","update","Promise","getObjectViewSystem","_isConnected","registerHandler","doNotRequestObjects","includes","push","unregisterHandler","pos","indexOf","splice","unsubscribeObject","destroy","unregisterConnectionHandler","ContextWrapper","createContext","hostsUpdate","adaptersUpdate","hosts","repository","installed","ContextWrapperProvider","_ref","children","stateContext","setState","useState","setStateContext","useMemo","prevState","_objectSpread","useEffect","jsControllerVersion","version","count","element","updateAvailable","common","installedVersion","_installed","adapter","ignoreVersion","_jsx","Provider","value","styles","message","position","display","width","offline","justifyContent","alignItems","opacity","flexWrap","timestamp","color","top","right","fontSize","simpleMessage","fontFamily","ml","mb","whiteSpace","NotificationMessage","Component","props","super","lastAlive","onAliveChanged","state","instanceId","alive","val","Date","now","getGui","data","schema","updateData","componentDidMount","_this$props$message$c","_this$props$message$c2","contextData","admin","notification","getState","subscribeState","_this$props$message$c3","_this$props$message$c4","_this$props$message$c5","_this$props$message$c6","parse","offlineMessage","sendTo","replace","result","renderCustomGui","_this$props$message$c7","_this$props$message$c8","text","systemLang","en","Box","sx","Utils","renderTextWithA","Typography","I18n","t","LinearProgress","adapterName","instance","split","_jsxs","_Fragment","error","style","JsonConfigComponent","parseInt","onError","onChange","onBackEndCommand","command","refresh","onLink","embedded","themeName","themeType","theme","isFloatComma","dateFormat","renderSimpleMessage","render","component","ts","toLocaleString","backgroundColor","palette","background","paper","height","borderRadius","flexDirection","maxWidth","flex","overflowHidden","overflow","overflowAuto","overflowY","column","headerText","fontWeight","mode","descriptionHeaderText","margin","button","paddingTop","paddingBottom","bottom","zIndex","img2","mr","content","left","backgroundSize","heading","headingTop","classNameBox","p","textStyle","textOverflow","buttonStyle","m","Status","severity","isDark","_objectWithoutProperties","_excluded","BellIcon","InfoIcon","WarningIcon","TabPanel","_ref2","index","sxBox","role","_ref3","notifications","onClose","ackCallback","instances","panel","setPanel","disabled","setDisabled","expanded","setExpanded","autoCollapse","setAutoCollapse","messages","setMessages","handleChangeAccordion","panelName","_event","isExpanded","black","notificationManagerInstalled","values","find","name","_messages","firstKey","host","hostDetails","entries","scope","scopeDetails","category","categoryDetails","categories","map","key","currentScope","currentName","entry","Dialog","open","marginLeft","marginRight","Tooltip","title","slotProps","popper","pointerEvents","DialogContent","dividers","AppBar","Tabs","handleChange","newValue","variant","scrollButtons","indicatorColor","textColor","idx","Tab","label","getLanguage","icon","undefined","description","nameInst","_currentInstance$comm","_currentInstance$comm2","accKey","currentInstance","Accordion","AccordionSummary","expandIcon","ExpandMoreIcon","CardMedia","image","AccordionDetails","msg","i","linkCommand","target","url","toString","setTimeout","_url","location","hash","protocol","href","close","pathname","DialogActions","Button","autoFocus","onClick","startIcon","CheckIcon","CloseIcon","flexGrow","closeButton","grey","hiddenDialog","dialogRoot","CommandDialog","progressText","isError","closeOnReady","_localStorage","localStorage","getItem","scroll","fullWidth","visible","inBackground","onInBackground","DialogTitle","IconButton","size","Command","noSpacing","ready","commandError","errorFunc","performed","callback","cmd","onFinished","onSetCommandRunning","running","FormControlLabel","control","Checkbox","checked","setItem","OpenInBrowserIcon","confirmText","funcSet","_","setTabs","tabs","findCard","cards","card","c","cursor","canDrag","setEndDrag","iconJSX","selected","compact","badgeContent","badgeColor","tab","ref","useRef","handlerId","drop","useDrop","accept","collect","monitor","getHandlerId","hover","_ref$current","draggedId","current","overIndexActions","hoverBoundingRect","getBoundingClientRect","hoverMiddleY","hoverClientY","getClientOffset","y","moveCard","atIndex","copyCard","isDragging","drag","preview","useDrag","item","end","getEmptyImage","captureDraggingState","event","preventDefault","textDecoration","primary","main","invertColor","selectedIcon","compactBadge","pl","noWrap","warn","amber","editMenuList","editListFunc","badgeAdditionalContent","badgeAdditionalColor","DragHandle","ColorPicker","noInputField","ListItemButton","getStyle","Grid2","container","spacing","ListItemIcon","minWidth","Badge","ListItemText","layerStyles","getItemStyles","initialOffset","currentOffset","isSnapToGrid","x","Math","round","snapToGrid","transform","WebkitTransform","default","itemType","useDragLayer","getItemType","getInitialSourceClientOffset","getSourceClientOffset","DrawerItem","timer","anchorEl","setAnchorEl","React","setOpen","placement","setPlacement","el","clearTimeout","currentTarget","prev","EditIcon","Popper","transition","TransitionProps","Fade","timeout","Paper","padding","DRAWER_FULL_WIDTH","DRAWER_EDIT_WIDTH","flexShrink","transitions","create","easing","easeOut","duration","enteringScreen","rootFullWidth","rootEditWidth","rootCompactWidth","overflowX","header","mixins","toolbar","headerCompact","headerLogout","list","logoSize","avatarBlock","marginTop","marginBottom","avatarNotVisible","avatarVisible","styleVersion","alignSelf","editButton","STATES","tabsInfo","order","AppsIcon","StoreIcon","SubtitlesIcon","ViewListIcon","ArtTrackIcon","DvrIcon","ViewHeadlineIcon","SubscriptionsIcon","FlashOnIcon","PersonOutlineIcon","StorageIcon","FilesIcon","Drawer","logsHandlerRegistered","refEditButton","instanceChangedHandler","getTabs","onNotificationsHandler","hostsWorker","getNotifications","calculateWarning","onErrorsUpdates","logErrors","onWarningsUpdates","logWarnings","warning","other","_notifications$host","_notifications$host$r","system","hostNotifications","tabsEditSystemConfig","async","isVisibility","newColor","newTabs","newObjCopy","getSystemConfig","tabsVisible","setSystemConfig","badge","additionalContent","additionalColor","calculateHostUpdates","calculateAdapterUpdates","getDerivedStateFromProps","_repository$jsContro","sort","instancesWorker","registerNotificationHandler","logsWorker","registerErrorCountHandler","registerWarningCountHandler","componentWillUnmount","unregisterNotificationHandler","unregisterErrorCountHandler","unregisterWarningCountHandler","componentDidUpdate","isSwipeable","setEditMenuList","getCompactInstances","dynamicTabs","adminTab","singleton","instNum","match","_instance$adminTab$na","lang","READY_TO_USE","filter","str","substring","toUpperCase","toLowerCase","a","b","getCompactSystemConfig","systemConfig","it","aa","bb","newTabsVisible","_systemConfig","getHeader","handleNavigation","isSecure","adminGuiConfig","lineHeight","src","alt","maxHeight","verticalAlign","Avatar","versionAdmin","onStateChange","ChevronLeftIcon","getNavigationItems","currentTab","_tabsInfo$tab$name","_tabsInfo$tab$name2","_this$badge","_this$badge2","menu","DragWrapper","Icon","newObj","ctrlKey","shiftKey","getHref","hostname","adminInstance","console","log","focus","SwipeableDrawer","anchor","onOpen","CustomDragLayer","List","onLogout","LogoutIcon","editable","CustomPopper","MaterialDrawer","onMouseEnter","onMouseLeave","contextType","withWidth","connecting","spinner","animation","path","strokeDasharray","strokeDashoffset","transformOrigin","offset","viewBox","xmlns","fill","strokeWidth","strokeLinecap","cx","cy","r","secondary","form","TOOLBAR_HEIGHT","input","grow","WizardPasswordTab","focusRef","password","passwordRepeat","errorPassword","errorPasswordRepeat","createRef","_this$focusRef$curren","noValidate","autoComplete","direction","TextField","readOnly","helperText","htmlInput","onKeyDown","document","getElementById","checkPassword","onDone","Toolbar","IconCheck","de","ru","fr","pt","nl","es","uk","gridDiv","textAlign","languageSelect","licenseDiv","statAccept","statAcceptDiv","statAcceptNote","greenButton","licenseTextDiv","licenseText","WizardLicenseTab","statisticsAccepted","notAgree","diagData","requesting","showStatisticsDialog","readStatistics","getCurrentInstance","settings","getObject","getDiagData","renderStatisticsDialog","Editor","editValueMode","Close","renderNotAgree","DialogContentText","renderLicenseText","lines","LicenseTexts","line","FormControl","InputLabel","IconWorld","Select","setLanguage","MenuItem","IconCancel","MyMapComponent","useMap","addMap","SETTINGS_WIDTH","mainGrid","mapGrid","controlItem","controlItemAddress","gridSettings","settingsGrid","CURRENCY","WizardSettingsTab","marker","cityTimer","latLongTimer","onMap","center","parseFloat","latitude","longitude","Marker","draggable","riseOnHover","addTo","bindPopup","on","dragend","evt","onMarkerDragend","_latlng","lat","lng","onChangePosition","changeMapPosition","onChangeAddress","city","address","country","addressToPosition","tempUnit","currency","firstDayOfWeek","zoom","positionReady","coords","toFixed","getBrowserCoordinates","navigator","geolocation","getCurrentPosition","noWait","flyTo","setLatLng","OpenStreetMapProvider","search","query","results","Autocomplete","freeSolo","options","inputValue","onInputChange","getOptionLabel","option","renderOption","renderInput","params","endAdornment","InputAdornment","Fab","GpsFixed","MapContainer","maxZoom","attributionControl","zoomControl","doubleClickZoom","scrollWheelZoom","dragging","easeLinearity","TileLayer","inputLine","WizardAuthSSLTab","auth","secure","FormGroup","FormHelperText","information","WizardPortForwarding","IconCloudPro","IconCloud","WizardAdaptersTab","selectedAdapters","getRepository","repo","activeRepo","resolve","executeCommand","renderAdapterAccordion","titleLang","borderColor","borderWidth","borderStyle","gap","stopPropagation","extIcon","renderContent","repositoryReceived","IconNext","dialog","tabPanel","fullHeightWithoutToolbar","finishBackground","backgroundImage","WizardFinishImage","backgroundRepeat","backgroundPosition","welcomeBackground","WizardWelcomeImage","playIcon","logo","themeButton","float","finalText","finalLongLogo","WizardDialog","activeStep","namespace","native","renderWelcome","licenseConfirmed","PlayArrowIcon","renderLicense","language","renderPassword","pass","changePassword","renderSettings","assign","renderAuthentication","renderPortForwarding","renderAdapters","discovery","certPublic","certPrivate","certs","getCertificates","setObject","redirect","Router","doNavigate","renderFinish","LongLogo","fullScreen","ToggleThemeMenu","toggleTheme","Stepper","Step","StepLabel","BaseSystemSettingsDialog","formControl","selectEmpty","saving","getCounters","items","countries","elem","shrink","handleChangeCountry","displayEmpty","doChange","onChangeText","onChangeInput","onChangeCity","selectId","getSettings","confirm","confirmValue","newData","clone","ll","translate","allowText","autocomplete","histories","history","objectMap","dataAux","repositories","_repo","help","getSelect","multipleRepos","sm","xs","_evt","inputLabel","renderDialogConfirm","DialogConfirm","selectors","lg","md","siteName","table","buttonPanel","descriptionPanel","border","dragColumn","enableColumn","stableColumn","upgradePolicyColumn","buttonColumn","nameRow","checkboxError","fabButton","tooltip","repoToArray","repos","link","arrayToRepo","array","SortableHandle","DragHandleIcon","SortableList","SortableContainer","SortableItem","SortableElement","onAdd","onRestore","stable","beta","oldStable","json","time","oldBeta","newConfig","adapterAutoUpgrade","defaultPolicy","getUpdateDefaultRepo","newRepo","oldTitle","newTitle","findIndex","onSortEnd","oldIndex","newIndex","onValueChanged","onDelete","onChangeActiveRepo","showWarning","renderSortableItem","_this$props$repoInfo$","_this$props$dataAux$c","_this$props$dataAux$c2","errorName","trimStart","TableRow","className","TableCell","arr","_error","repoInfo","indeterminate","sysConfig","DeleteIcon","renderSortableList","Table","TableHead","TableBody","helperClass","useDragHandle","lockAxis","renderAutoUpgradePolicy","_this$props$dataAux$c3","_this$props$dataAux$c4","policy","activatedRepos","AUTO_UPGRADE_SETTINGS","AUTO_UPGRADE_OPTIONS_MAPPING","IsVisible","InfoBox","AddIcon","RestoreIcon","TableContainer","uuidGreen","uuidGrey","tableName","tableDate","tableUuid","tableValid","tableVersion","tableUsedIn","tableDiv","tableCommercial","licenseId","fontStyle","onLicensesChanged","licenses","uuid","requestLicenses","login","decrypt","updateLicenses","renderLicenses","stickyHeader","license","product","toLocaleDateString","validTill","usedBy","invoice","IconRefresh","tableContainer","littleRow","CertificatesDialog","certToArray","certificates","arrayToCert","certText","chClass","cert","detectType","rows","parts","Dropzone","noClick","getRootProps","getInputProps","acceptedFiles","fileRejections","onDragEnter","onDragLeave","onDrop","file","mm","errors","ee","join","reader","FileReader","onload","readAsText","paddingLeft","letsEncrypt","dangerouslySetInnerHTML","__html","email","domains","tableCell","paddingRight","ACLDialog","getTypes","getRights","rts","defaultNewAcl","permBits","bitGroup","bit","getTable","owner","checkboxes","Fragment","handleCheck","colSpan","ownerGroup","ownerType","elemNum","num","users","groups","objectRights","ii","inputProps","ace","config","set","note","blueGrey","sentData","StatisticsDialog","arguments","handleChangeType","handle","getTypesSelector","diag","Card","gutterBottom","SOME_PASSWORD","minHeight","dialogTitle","SystemSettingsDialog","originalCertificates","originalConfig","originalRepositories","originalLicenses","onChangeDiagType","currentHost","loading","confirmExit","systemCertificates","systemRepositories","systemLicenses","licenseManager","checkFeatureSupported","newState","_repoInfo","object","getUsers","getGroups","getAdapterInstances","getHistory","onSave","repoChanged","currentPassword","encrypt","expertMode","expertModeFunc","reload","MainSettingsDialog","RepositoriesDialog","LicensesDialog","SSLDialog","getDialogContent","tabsList","MyComponent","onChangedTab","idAux","ifRepoError","_data$native","changed","tabError","_e","reason","newTab","onTabChanged","edge","boxShadow","avatar","avatarImg","submit","ioBrokerLink","textTransform","progress","Login","formRef","inProcess","body","loginBackgroundColor","loginBackgroundImage","action","port","loginLink","motto","loginMotto","loginLogo","loginHideLogo","loginTitle","method","required","CircularProgress","align","Link","rel","pre","textBold","width100","doNotShow","setDoNotShow","IconExpert","BuildIcon","_sessionStorage","sessionStorage","silver","terminal","UpdateIcon","MemoryIcon","ImportExportIcon","PermDeviceInformationIcon","CancelPresentationIcon","CancelIcon","SettingsRemoteIcon","styleDiv","_excluded2","hidden","setValue","dark","_ref4","formatDate","LogsWorker","maxLogs","logs","newLogs","errorCountHandlers","warningCountHandlers","countErrors","countWarnings","warnings","isSafari","logTimeout","logSize","logHandler","_processLine","objLine","handler","isNew","getLogs","vendor","userAgent","registerLogHandler","setCurrentHost","enableCountErrors","isEnabled","enableCountWarnings","resetErrors","resetWarnings","lastKey","tt","getTime","from","parseColorMessage","original","unshift","shift","oldErrors","oldWarnings","_this$logs","logSizeStr","pop","clearLines","InstancesWorker","HostsWorker","aliveHandlers","notificationsHandlers","aliveStates","notificationPromises","notificationTimer","subscribeTs","aliveChangeHandler","endsWith","onNotificationHandler","host_","_getNotificationsFromHosts","registerAliveHandler","unregisterAliveHandler","unsubscribeState","hostId","promises","getCompactHosts","pResults","all","AdaptersWorker","repositoryHandlers","repoTimer","repoChangeHandler","getAdaptersResetCache","getInstalledResetCache","registerRepositoryHandler","unregisterRepositoryHandler","ObjectsWorker","doNotUnsubscribe","headerBlock","paperTable","custom","types","checkbox","select","comment","_setValueInObj","attr","setValueInObj","newInstance","setError","setSchema","schemaData","setSchemaData","_newInstance$comment","_newInstance$comment2","objSchema","objValue","add","Array","isArray","inputs","def","newLine","repeat","SettingsIcon","ConfigPanel","oContext","onCommandRunning","_themeName","originalData","err","useStateLocal","defaultValue","_unused","headerBlockDisplayItem","activeBlock","pointer","installSuccess","installError","width200","wrapperSwitch","divSwitch","stepper","instanceIcon","instanceWrapper","boxHeight","headCells","numeric","disablePadding","EnhancedTableHead","numSelected","rowCount","onSelectAllClick","headCell","TableSortLabel","buildComment","extended","_discoveryData$native4","_discoveryData$native5","_discoveryData$native6","_discoveryData$native7","_discoveryData$native8","_discoveryData$native9","_discoveryData$native10","defaultLogLevel","step","setStep","listMethods","setListMethods","checkboxChecked","setCheckboxChecked","disableScanner","setDisableScanner","discoveryData","setDiscoveryData","resultList","listChecked","lastSelectionStr","lastSelection","fetchData","dataDiscovery","readOldData","aliveHosts","setAliveHosts","checkSelectHosts","setCheckSelectHosts","hostInstances","setHostInstances","aliveValue","devicesFound","setDevicesFound","devicesProgress","setDevicesProgress","instancesFound","setInstancesFound","scanRunning","setScanRunning","servicesProgress","setServicesProgress","setSelected","installProgress","setInstallProgress","currentInstall","setCurrentInstall","installStatus","setInstallStatus","cmdName","setCmdName","suggested","setSuggested","showAll","setShowAll","showLicenseDialog","setShowLicenseDialog","showInputsDialog","setShowInputsDialog","instancesInputsParams","setInstancesInputsParams","setLogs","finishInstall","setFinishInstall","selectLogsIndex","setSelectLogsIndex","handlerInstall","onSystemDiscoveryChanged","extendObject","checkLicenseAndInputs","objName","_discoveryData$native3","_obj$comment","instanceObj","newInstances","ob","_obj$comment2","licenseUrl","goToNextInstance","status","logsEl","inputsDialog","GenerateInputsModal","licenseDialog","LicenseDialog","licenseType","_obj$comment3","ThemeProvider","VisibilityIcon","alternativeLabel","lastScan","newCheckboxChecked","Switch","_discoveryData$native","_discoveryData$native2","newSelected","n","_el$comment","_el$comment2","ack","advice","_obj$comment4","_repository$obj$commo","_obj$comment5","handleClick","func","selectedIndex","slice","SelectWithIcon","_repository$el$replac","ReportProblemIcon","AssignmentTurnedInIcon","logsRead","showElement","logsSuccess","adapterId","logLevel","logsError","_ref5","ele","NavigateBeforeIcon","dataArray","SearchIcon","LibraryAddIcon","NavigateNextIcon","Adapters","Instances","Intro","Logs","Files","Objects","Users","Enums","CustomTab","Hosts","EasyMode","decodeURIComponent","appBar","sharp","leavingScreen","logoWhite","appBarShift","appBarShiftEdit","appBarShiftCompact","DRAWER_COMPACT_WIDTH","menuButton","hide","_theme$mixins$toolbar","_theme$mixins$toolbar2","_theme$mixins$toolbar3","mt","contentMargin","contentMarginEdit","contentMarginCompact","contentShift","expertIcon","expertIconActive","baseSettingsButton","alert_info","alert_error","alert_success","errorCmd","wrapperButtons","userBadge","userIcon","userText","userBackground","wrapperName","expertBadge","DEFAULT_GUI_SETTINGS_OBJECT","read","write","App","translations","EXPIRE_WARNING_THRESHOLD","refConfigIframe","refUser","refUserDiv","expireInSec","lastExecution","pingAuth","expireInSecInterval","toggleThemePossible","expireText","adaptersWorker","objectsWorker","guiSettings","localStorageTimer","languageSet","newsInstance","localStorageGetItem","localStorageSetItem","localStorageRemoveItem","localStorageSave","prototype","hasOwnProperty","call","sessionStorageGetItem","sessionStorageSetItem","sessionStorageRemoveItem","toggleTranslation","noTranslation","updateHosts","events","elementFind","readRepoAndInstalledInfo","adaptersChangeHandler","onDiscoveryAlive","_name","discoveryAlive","getDiscoveryModal","DiscoveryDialog","handleNewNotifications","noNotifications","instanceDetails","showAdaptersWarning","showHostWarning","onNews","newsFeed","lastNewsId","_news","news","getUuid","info","getHostInfo","objectsDbType","objectsType","noObjects","checkNews","checkMessages","adapters","nodeVersion","npmVersion","NPM","os","showNews","stack","showAlert","logsWorkerChanged","_this$logsWorker","onHashChanged","getLocation","setCurrentTabTitle","currentThemeName","newThemeName","createTheme","getThemeType","_this$refConfigIframe","_this$refConfigIframe2","contentWindow","postMessage","subTab","param","allStored","dataNotStoredDialog","dataNotStoredTab","handleDrawerState","DrawerStates","setTitle","_unused2","dictionary","enLocal","deLocal","ruLocal","ptLocal","nlLocal","frLocal","itLocal","esLocal","plLocal","ukLocal","zhCNLocal","setTranslations","userLanguage","vendorPrefix","getThemeName","drawerStateStr","drawerState","defineProperty","get","configNotSaved","configurable","currentHostName","ownHost","user","waitForRestart","stateChanged","alertType","alertMessage","baseSettingsOpened","unsavedDataInDialog","systemSettingsOpened","cmdDialog","commandHost","commandRunning","wizard","readTimeoutMs","SlowConnectionWarningDialogClass","getReadTimeoutMs","showSlowConnectionWarning","expireWarningMode","forceUpdateAdapters","cloudNotConnected","cloudReconnect","showRedirect","redirectCountDown","triggerAdapterUpdate","updating","notificationsDialog","getDerivedStateFromError","hasGlobalError","componentDidCatch","setUnsavedData","hasUnsavedData","mustInvertBackground","invertedColor","getGUISettings","_state","_unused3","removeItem","enableGuiSettings","enabled","ownSettings","addEventListener","Connection","admin5only","getPort","autoSubscribes","autoSubscribeLog","onProgress","PROGRESS","CONNECTING","READY","getVersion","versionInfo","closeCmdDialog","_adminObj$native","adminObj","setInterval","onReady","_this$socket$systemCo","_adminObj$native2","_this$socket$systemCo2","isStrict","getIsEasyModeStrict","getEasyMode","strictEasyMode","easyModeConfigs","configs","findCurrentHost","storedExpertMode","_userObj$native","getCurrentUser","userObj","getObjectNameFromObj","invertBackground","makePingAuth","findNewsInstance","errorStr","Error","_this$socket","_this$adaptersWorker","_this$adaptersWorker2","_this$hostsWorker","removeEventListener","clearInterval","itemHost","_itemHost$common","_newState$hosts$0$com","h","updateExpireIn","formatTime","innerHTML","getCurrentSession","adminAlive","renderNotificationsDialog","_this$state$notificat","_this$state$notificat2","NotificationsDialog","clearNotifications","renderHostWarningDialog","HostWarningDialog","renderNewsDialog","NewsAdminDialog","newsArr","onSetLastNewsId","renderSlowConnectionWarning","SlowConnectionWarningDialog","getCompactRepository","getCompactInstalled","getCompactAdapters","iv","Number","isNaN","getProtocol","Theme","getCurrentTab","small","opened","closed","Suspense","fallback","Connecting","triggerUpdate","adminHost","menuOpened","menuClosed","currentAdminVersion","onUpdating","menuPadding","configStored","inBackgroundCommand","onRegisterIframeRef","onUnregisterIframeRef","clearErrors","clearLogErrors","navigate","getCurrentDialog","getSystemSettingsDialog","handleAlertClose","alertMessageStr","logout","closeDataNotStoredDialog","confirmDataNotStored","_this$state$dataNotSt","_this$state$dataNotSt2","_this$state$dataNotSt3","renderWizardDialog","showRedirectDialog","_window$external","sidebar","opera","print","external","AddFavorite","addPanel","createElement","setAttribute","click","renderCommandDialog","renderLoggedUser","_this$state$user","UserIcon","renderAlertSnackbar","Snackbar","autoHideDuration","ok","cancel","isYes","renderExpertDialog","expertModeDialog","ExpertModeDialog","_this$refConfigIframe3","_this$refConfigIframe4","renderShowGuiSettings","showGuiSettings","Menu","renderToolbar","expertModePermanent","performedStyle","sumNotification","MenuIcon","disableRipple","max","NotificationsIcon","invisible","_this$refConfigIframe5","_this$refConfigIframe6","_this$refConfigIframe7","_this$refConfigIframe8","expert","SyncIcon","SyncIconDisabled","HostSelectors","hostName","PictureInPictureAltIcon","innerWidth","Grid","renderSampleError","renderEasyMode","_this$state$systemCon","_this$state$systemCon2","StyledEngineProvider","injectFirst","elevation","DndProvider","backend","TouchBackend","HTML5Backend","logoutTitle","square","LoaderPT","LoaderMV","LoaderVendor","Loader","versionChanged","ignoreErrors","disableDataReporting","onerror","source","lineno","colno","errText","onunhandledrejection","Sentry","dsn","release","integrations","beforeSend","createRoot","LocalizationProvider","dateAdapter","AdapterDateFns","logNoSpacing","red","blue","logRef","regExp","init","moreChecked","stopped","RegExp","pattern","_this$logRef$current","scrollIntoView","registerCmdStdoutHandler","cmdStdoutHandler","bind","registerCmdStderrHandler","cmdStderrHandler","registerCmdExitHandler","cmdExitHandler","activeCmdId","floor","random","cmdExec","upload","gotAdmin","gotWww","exitCode","_adapter","_obj$common","_obj$common$adminUI","adminUI","colorize","maxLength","part","getLog","AceEditor","showPrintMargin","showGutter","highlightActiveLine","setOptions","enableBasicAutocompletion","enableLiveAutocompletion","enableSnippets","showLineNumbers","tabSize","editorProps","$blockScrolling","imgDiv","img","notAlive","selector","aliveHost","onHostsObjectChange","_event$obj$common","_event$obj$common3","_event$obj$common5","_event$obj$common2","_event$obj$common4","_event$obj$common6","_event$obj$common7","_event$obj$common8","_event$obj$common9","hardware","networkInterfaces","_obj$common2","_obj$common3","_selectedHostObj","_selectedHostObj$comm","_selectedHostObj2","_selectedHostObj2$com","_selectedHostObj3","_selectedHostObj3$com","_selectedHostObj4","_selectedHostObj4$com","_selectedHostObj5","_selectedHostObj5$com","selectedHostObj","keepMounted","getAttr","header1","pr","pb","header2","setText","setLoading","scrolled","setScrolled","preRef","divRef","installTimer","fetch","txt","installOnscroll","_divRef$current","divMarkdown","querySelector","scrollHeight","clientHeight","onscroll","div","_scrolled","scrollTop","_preRef","_divMarkdown","Markdown","components","h1","h1Props","h2","h2Props","onScroll","IconArrowDownward","IconClose","blockInfo","checkActive","checkConditions","condition","trim","vers","semver","vers1","vers2","lastMessageId","context","messagesToShow","today","showIt","conditions","andConditions","or","conditionResult","v","eval","class","created","linkTitle","_unused4","_newsArr$indexArr","_newsArr$indexArr2","setId","last","setLast","indexArr","setIndexArr","newId","frame","WorldIcon","buttonLabel","mobile","readTimeoutSec","MOBILE_WIDTH","AdminConnection","isCloud","saveReadTimeoutMs","min","TimeIcon","STYLES","deepClone","formatRam","bytes","GB","MB","isTouchDevice","maxTouchPoints","msMaxTouchPoints","formatSpeed","mhz","formatBytes","abs","units","u","getFileExtension","fileName","lastIndexOf","hex","bw","g","finalR","finalG","finalB","padStart","formatSeconds","seconds","days","minutesRes","secondsRes","hoursRes","hours","minutes","materializeTab","jsonCustom","supportCustoms","noConfig","jsonConfig","materialize","code","PASSWORD_SET","PASSWORD_ERROR_LENGTH","PASSWORD_ERROR_NOT_EQUAL","PASSWORD_ERROR_EMPTY","getDocsLinkForAdapter","SUPPORTED_DOC_LANGUAGES","oldVersion","newVersion","getText","word","MobileDialog","_resizeHandlerInstalled","_timerOnResize","__onResize","isMobile","getButtonTitle","moreMobileIcon","CONTROLLER_CHANGELOG_URL","none","patch","minor","major","ip2int","ip","reduce","ipInt","octet","getHostname","currentHostname","_objects","_objects$common","localIp","_obj$native","_obj$native$hardware","hostIp","networkInterface","internal","family","netmask","findNetworkAddressOfHost","_replaceLink","adapterInstance","placeholder","replaceLink","_urls","placeholders","protocolVal","_context$instances4","_context$instances4$n","ids","_context$instances2","_context$instances2$n","_link","_port","_context$instances3","_context$instances3$n","_context$instances","_context$instances$na","_instance$common$admi","_hrefs$","_instNum","hrefs","refIframe","registered","onMessage","origin","parameter","detachEvent","_this$refIframe","attachEvent","_this$refIframe2"],"sourceRoot":""}
|