langsys-js-typescript 0.1.0
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/CHANGELOG.md +31 -0
- package/LICENSE +21 -0
- package/README.md +268 -0
- package/dist/index.d.mts +428 -0
- package/dist/index.d.ts +428 -0
- package/dist/index.js +1249 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1231 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/signal.ts","../src/logger.ts","../src/api.ts","../src/persist.ts","../src/stores.ts","../src/interpolate.ts","../src/translations.ts","../src/langsys-app.ts","../src/utils.ts","../src/translate.ts","../src/index.ts"],"names":["config","t","initialTranslations","x","c","a","b","d","i"],"mappings":";;;AA6BO,SAAS,aAAgB,OAAA,EAAuB;AACnD,EAAA,IAAI,KAAA,GAAW,OAAA;AACf,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAmB;AAE3C,EAAA,MAAM,SAAA,GAAY,CAAC,GAAA,KAAqC;AACpD,IAAA,WAAA,CAAY,IAAI,GAAG,CAAA;AACnB,IAAA,GAAA,CAAI,KAAK,CAAA;AACT,IAAA,OAAO,MAAM;AACT,MAAA,WAAA,CAAY,OAAO,GAAG,CAAA;AAAA,IAC1B,CAAA;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,GAAA,GAAM,CAAC,IAAA,KAAkB;AAC3B,IAAA,IAAI,MAAA,CAAO,EAAA,CAAG,KAAA,EAAO,IAAI,CAAA,EAAG;AAC5B,IAAA,KAAA,GAAQ,IAAA;AACR,IAAA,KAAA,MAAW,GAAA,IAAO,WAAA,EAAa,GAAA,CAAI,KAAK,CAAA;AAAA,EAC5C,CAAA;AAEA,EAAA,MAAM,MAAA,GAAS,CAAC,EAAA,KAAyB;AACrC,IAAA,GAAA,CAAI,EAAA,CAAG,KAAK,CAAC,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,MAAM,MAAM,MAAS,KAAA;AAErB,EAAA,OAAO,EAAE,SAAA,EAAW,GAAA,EAAK,MAAA,EAAQ,GAAA,EAAI;AACzC;AAGO,SAAS,SAAY,MAAA,EAAsB;AAC9C,EAAA,OAAO,OAAO,GAAA,EAAI;AACtB;;;ACrDA,IAAM,MAAA,GAAS;AAAA,EACX,GAAA,EAAK,iHAAA;AAAA,EACL,IAAA,EAAM,qGAAA;AAAA,EACN,KAAA,EAAO;AACX,CAAA;AAEA,IAAM,aAAA,GAAgB,OAAO,MAAA,KAAW,WAAA;AAExC,SAAS,IAAA,CAAK,KAAA,EAAiC,KAAA,EAAe,IAAA,EAAiB;AAE3E,EAAA,IAAI,aAAA,EAAe;AAEf,IAAA,OAAA,CAAQ,KAAK,EAAE,CAAA,EAAA,EAAK,KAAK,IAAI,MAAA,CAAO,KAAK,CAAA,EAAG,GAAG,IAAI,CAAA;AAAA,EACvD,CAAA,MAAO;AAEH,IAAA,OAAA,CAAQ,KAAK,CAAA,CAAE,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAA,EAAK,GAAG,IAAI,CAAA;AAAA,EACxC;AACJ;AAEO,IAAM,SAAN,MAAa;AAAA,EAGhB,WAAA,CAAY,eAAe,KAAA,EAAO;AAC9B,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AAAA,EACxB;AAAA,EAEA,OAAO,IAAA,EAAiB;AACpB,IAAA,IAAI,CAAC,KAAK,YAAA,EAAc;AACxB,IAAA,IAAA,CAAK,KAAA,EAAO,iBAAiB,IAAI,CAAA;AAAA,EACrC;AAAA,EAEA,QAAQ,IAAA,EAAiB;AACrB,IAAA,IAAA,CAAK,MAAA,EAAQ,mBAAmB,IAAI,CAAA;AAAA,EACxC;AAAA,EAEA,SAAS,IAAA,EAAiB;AACtB,IAAA,IAAA,CAAK,OAAA,EAAS,iBAAiB,IAAI,CAAA;AAAA,EACvC;AACJ;AAEO,IAAM,MAAA,GAAS,IAAI,MAAA,CAAO,KAAK;;;ACvCtC,IAAM,qBAAN,MAAyB;AAAA,EAKrB,WAAA,GAAc;AAJd,IAAA,IAAA,CAAQ,MAAA,GAAS,6BAAA;AAKb,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,MACX,GAAA,EAAK,EAAA;AAAA,MACL,WAAA,EAAa,aAAa,EAAE,CAAA;AAAA,MAC5B,UAAA,EAAY;AAAA,KAChB;AACA,IAAA,IAAA,CAAK,OAAA,GAAU;AAAA,MACX,cAAA,EAAgB,iCAAA;AAAA,MAChB,iBAAA,EAAmB,KAAK,MAAA,CAAO;AAAA,KACnC;AAAA,EACJ;AAAA,EAEO,MAAMA,OAAAA,EAAwB;AACjC,IAAA,IAAIA,OAAAA,EAAQ,GAAA,IAAOA,OAAAA,EAAQ,SAAA,EAAW;AAClC,MAAA,IAAA,CAAK,MAAA,GAASA,OAAAA;AACd,MAAA,IAAA,CAAK,OAAA,CAAQ,iBAAiB,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,GAAA;AAAA,IAClD;AAAA,EACJ;AAAA;AAAA,EAGO,WAAW,GAAA,EAAa;AAC3B,IAAA,IAAA,CAAK,MAAA,GAAS,GAAA,CAAI,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAAA,EACvC;AAAA,EAEA,MAAa,SAASA,OAAAA,EAAwB;AAC1C,IAAA,IAAA,CAAK,MAAMA,OAAM,CAAA;AACjB,IAAA,OAAO,MAAM,IAAA,CAAK,GAAA,CAAI,+BAA+B,CAAA;AAAA,EACzD;AAAA,EAEA,MAAa,gBAAgB,MAAA,EAAgB;AACzC,IAAA,OAAO,MAAM,IAAA,CAAK,GAAA,CAAI,mCAAA,EAAqC,EAAE,QAAQ,CAAA;AAAA,EACzE;AAAA,EAEA,MAAa,IAAA,CAAK,IAAA,EAAc,IAAA,GAAgC,EAAC,EAAG;AAChE,IAAA,OAAO,MAAM,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,MAAM,IAAI,CAAA;AAAA,EAC7C;AAAA,EACA,MAAa,GAAA,CAAI,IAAA,EAAc,IAAA,GAAgC,EAAC,EAAG;AAC/D,IAAA,OAAO,MAAM,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO,MAAM,IAAI,CAAA;AAAA,EAC5C;AAAA,EACA,MAAa,MAAA,CAAO,IAAA,EAAc,IAAA,GAAgC,EAAC,EAAG;AAClE,IAAA,OAAO,MAAM,IAAA,CAAK,IAAA,CAAK,QAAA,EAAU,MAAM,IAAI,CAAA;AAAA,EAC/C;AAAA,EACA,MAAa,KAAA,CAAM,IAAA,EAAc,IAAA,GAAgC,EAAC,EAAG;AACjE,IAAA,OAAO,MAAM,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,MAAM,IAAI,CAAA;AAAA,EAC9C;AAAA,EACA,MAAa,GAAA,CAAI,IAAA,EAAc,IAAA,GAAgC,EAAC,EAAG;AAC/D,IAAA,OAAO,MAAM,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO,MAAM,IAAI,CAAA;AAAA,EAC5C;AAAA,EAEA,MAAc,IAAA,CAAK,MAAA,EAAgB,IAAA,EAAc,IAAA,GAAgC,EAAC,EAA4B;AAC1G,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,aAAa,CAAC,IAAA,CAAK,OAAO,GAAA,EAAK;AAC5C,MAAA,OAAO;AAAA,QACH,MAAA,EAAQ,KAAA;AAAA,QACR,MAAA,EAAQ,CAAC,+CAA+C,CAAA;AAAA,QACxD,IAAA,EAAM;AAAA,UACF,MAAA,EAAQ,CAAA;AAAA,UACR,UAAA,EAAY,qBAAA;AAAA,UACZ,GAAA,EAAK,CAAA,EAAG,IAAA,CAAK,MAAM,IAAI,IAAI,CAAA,CAAA;AAAA,UAC3B,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA;AAC7B,OACJ;AAAA,IACJ;AAGA,IAAA,IAAI,KAAK,UAAA,CAAW,GAAG,GAAG,IAAA,GAAO,IAAA,CAAK,UAAU,CAAC,CAAA;AAGjD,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,cAAc,CAAA,EAAG;AAC/B,MAAA,IAAA,GAAO,KAAK,UAAA,CAAW,cAAA,EAAgB,IAAI,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA,CAAE,CAAA;AAAA,IACtE;AAEA,IAAA,IAAI;AACA,MAAA,MAAM,WAAA,GACF,WAAW,KAAA,GACL,GAAA,GAAM,IAAI,eAAA,CAAgB,IAA8B,CAAA,CAAE,QAAA,EAAS,GACnE,EAAA;AAEV,MAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,EAAG,WAAA,KAAgB,GAAA,GAAM,EAAA,GAAK,WAAW,CAAA,CAAA,EAAI;AAAA,QACzF,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,MAAA;AAAA,QACA,MAAM,MAAA,KAAW,KAAA,GAAQ,KAAA,CAAA,GAAY,IAAA,CAAK,UAAU,IAAI;AAAA,OAC3D,CAAA;AAED,MAAA,MAAM,YAAA,GAAgB,MAAM,KAAA,CAAM,IAAA,EAAK;AACvC,MAAA,MAAM,IAAA,GAAqB;AAAA,QACvB,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,KAAK,KAAA,CAAM,GAAA;AAAA,QACX,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA,OAC7B;AACA,MAAA,YAAA,CAAa,IAAA,GAAO,IAAA;AAEpB,MAAA,IAAI,CAAC,MAAM,EAAA,EAAI;AACX,QAAA,MAAA,CAAO,IAAA,CAAK,iCAAiC,YAAY,CAAA;AACzD,QAAA,OAAO;AAAA,UACH,MAAA,EAAQ,KAAA;AAAA,UACR,MAAA,EAAQ,CAAC,CAAA,KAAA,EAAQ,KAAA,CAAM,MAAM,CAAA,EAAA,EAAK,KAAA,CAAM,UAAU,CAAA,CAAE,CAAA;AAAA,UACpD,IAAA,EAAM,YAAA;AAAA,UACN;AAAA,SACJ;AAAA,MACJ;AAEA,MAAA,OAAO,YAAA;AAAA,IACX,SAAS,GAAA,EAAK;AACV,MAAA,MAAM,YAAA,GAAe,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,wBAAA;AAC1D,MAAA,MAAA,CAAO,KAAA,CAAM,wBAAwB,YAAY,CAAA;AACjD,MAAA,MAAA,CAAO,MAAM,kBAAA,EAAoB;AAAA,QAC7B,MAAA;AAAA,QACA,GAAA,EAAK,CAAA,EAAG,IAAA,CAAK,MAAM,IAAI,IAAI,CAAA,CAAA;AAAA,QAC3B;AAAA,OACH,CAAA;AACD,MAAA,OAAO;AAAA,QACH,MAAA,EAAQ,KAAA;AAAA,QACR,MAAA,EAAQ,CAAC,qCAAA,EAAuC,YAAY,CAAA;AAAA,QAC5D,IAAA,EAAM;AAAA,UACF,MAAA,EAAQ,CAAA;AAAA,UACR,UAAA,EAAY,eAAA;AAAA,UACZ,GAAA,EAAK,CAAA,EAAG,IAAA,CAAK,MAAM,IAAI,IAAI,CAAA,CAAA;AAAA,UAC3B,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA;AAC7B,OACJ;AAAA,IACJ;AAAA,EACJ;AACJ,CAAA;AAEO,IAAM,aAAA,GAAgB,IAAI,kBAAA;;;ACnI1B,SAAS,OAAA,CAAW,KAAa,OAAA,EAAuB;AAC3D,EAAA,MAAM,UAAU,cAAA,EAAe;AAC/B,EAAA,IAAI,IAAA,GAAO,OAAA;AAEX,EAAA,IAAI,OAAA,EAAS;AACT,IAAA,IAAI;AACA,MAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AAC/B,MAAA,IAAI,GAAA,KAAQ,IAAA,EAAM,IAAA,GAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,IAC3C,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACJ;AAEA,EAAA,MAAM,MAAA,GAAS,aAAgB,IAAI,CAAA;AAEnC,EAAA,IAAI,OAAA,EAAS;AACT,IAAA,MAAA,CAAO,SAAA,CAAU,CAAC,KAAA,KAAU;AACxB,MAAA,IAAI;AACA,QAAA,OAAA,CAAQ,OAAA,CAAQ,GAAA,EAAK,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,MAC9C,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACJ,CAAC,CAAA;AAAA,EACL;AAEA,EAAA,OAAO,MAAA;AACX;AAEA,SAAS,cAAA,GAAiC;AACtC,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,IAAA;AAC1C,EAAA,IAAI;AACA,IAAA,MAAM,IAAI,MAAA,CAAO,YAAA;AAEjB,IAAA,CAAA,CAAE,QAAQ,mBAAmB,CAAA;AAC7B,IAAA,OAAO,CAAA;AAAA,EACX,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,IAAA;AAAA,EACX;AACJ;;;ACvCA,IAAM,mBAAA,GAAmC;AAAA,EACrC,iBAAA,EAAmB;AAAA,IACf,YAAA,EAAc,mBAAA;AAAA,IACd,UAAA,EAAY;AAAA;AAEpB,CAAA;AAEO,IAAM,aAAA,GAAgB,OAAA,CAAqB,cAAA,EAAgB,mBAAmB;AAE9E,IAAM,qBAAA,GAAwB,aAAqB,EAAE;AAErD,IAAM,aAAA,GAAgB,YAAA,CAA8B,EAAE;AAEtD,IAAM,MAAA,GAAyB;AAAA,EAClC,SAAA,EAAW,EAAA;AAAA,EACX,GAAA,EAAK,EAAA;AAAA,EACL,WAAA,EAAa,aAAqB,EAAE,CAAA;AAAA,EACpC,UAAA,EAAY,IAAA;AAAA,EACZ,KAAA,EAAO,KAAA;AAAA,EACP,QAAA,EAAU;AACd,CAAA;;;ACjBO,SAAS,WAAA,CAAY,UAAkB,MAAA,EAAyC;AACnF,EAAA,OAAO,QAAA,CAAS,OAAA,CAAQ,eAAA,EAAiB,CAAC,OAAO,MAAA,KAAmB;AAChE,IAAA,MAAM,GAAA,GAAM,OAAO,IAAA,EAAK;AACxB,IAAA,IAAI,EAAE,GAAA,IAAO,MAAA,CAAA,EAAS,OAAO,KAAA;AAC7B,IAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM,OAAO,KAAA;AAClD,IAAA,IAAI,KAAA,YAAiB,IAAA,EAAM,OAAO,KAAA,CAAM,WAAA,EAAY;AACpD,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACvB,CAAC,CAAA;AACL;;;ACFA,SAAS,SAAS,IAAA,EAAgD;AAC9D,EAAA,OAAO,OAAO,SAAS,QAAA,IAAY,CAAC,MAAM,OAAA,CAAQ,IAAI,KAAK,IAAA,KAAS,IAAA;AACxE;AACA,SAAS,SAAA,CAAU,GAAiB,CAAA,EAA0B;AAC1D,EAAA,OAAO,CAAA,CAAE,SAAA,KAAc,CAAA,CAAE,SAAA,IAAa,CAAA,CAAE,aAAa,CAAA,CAAE,QAAA,IAAY,CAAA,CAAE,KAAA,KAAU,CAAA,CAAE,KAAA;AACrF;AAYO,IAAM,eAAN,MAAmB;AAAA,EAatB,YAAYA,OAAAA,EAAwB;AAVpC,IAAA,IAAA,CAAQ,aAAqC,EAAC;AAC9C,IAAA,IAAA,CAAQ,gBAAgC,EAAC;AACzC,IAAA,IAAA,CAAQ,KAAA,GAA+C,IAAA;AACvD,IAAA,IAAA,CAAQ,cAAA,GAAiB,KAAA;AACzB,IAAA,IAAA,CAAQ,gBAAA,GAAmB,IAAA;AAOvB,IAAA,IAAA,CAAK,MAAA,GAASA,OAAAA;AACd,IAAA,IAAA,CAAK,QAAQ,IAAI,MAAA,CAAO,CAAC,CAACA,QAAO,KAAK,CAAA;AACtC,IAAA,IAAA,CAAK,MAAA,GAASA,QAAO,UAAA,IAAc,EAAA;AAEnC,IAAA,IAAA,CAAK,OAAA,GAAU,YAAA,CAAwB,IAAA,CAAK,QAAA,EAAU,CAAA;AACtD,IAAA,aAAA,CAAc,SAAA,CAAU,MAAM,IAAA,CAAK,OAAA,CAAQ,IAAI,IAAA,CAAK,QAAA,EAAU,CAAC,CAAA;AAC/D,IAAA,qBAAA,CAAsB,SAAA,CAAU,MAAM,IAAA,CAAK,OAAA,CAAQ,IAAI,IAAA,CAAK,QAAA,EAAU,CAAC,CAAA;AAEvE,IAAA,IAAIA,QAAO,GAAA,IAAOA,OAAAA,CAAO,SAAA,EAAW,IAAA,CAAK,MAAMA,OAAM,CAAA;AAAA,EACzD;AAAA;AAAA,EAGA,IAAW,CAAA,GAAe;AACtB,IAAA,OAAO,IAAA,CAAK,QAAQ,GAAA,EAAI;AAAA,EAC5B;AAAA;AAAA,EAGO,UAAU,GAAA,EAAmC;AAChD,IAAA,OAAO,aAAA,CAAc,UAAU,GAAG,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,aAAA,CAAc,QAAA,EAAkB,QAAA,EAAkB,KAAA,EAA8B;AACnF,IAAA,MAAM,IAAA,GAAO,cAAc,GAAA,EAAI;AAC/B,IAAA,MAAM,YAAY,QAAA,IAAY,mBAAA;AAC9B,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,SAAS,CAAA,GAAI,QAAQ,CAAA;AAC9C,IAAA,IAAI,CAAC,WAAA,IAAe,OAAO,WAAA,KAAgB,UAAU,OAAO,IAAA;AAC5D,IAAA,MAAM,KAAA,GAAS,YAAkD,KAAK,CAAA;AACtE,IAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,IAAA;AAAA,EAC/C;AAAA,EAEQ,QAAA,GAAsB;AAC1B,IAAA,OAAO,CAAmB,QAAA,EAAkB,MAAA,EAAA,GAAc,IAAA,KAA2B;AACjF,MAAA,MAAM,IAAA,GAAO,cAAc,GAAA,EAAI;AAC/B,MAAA,MAAM,YAAY,QAAA,IAAY,mBAAA;AAC9B,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAS,CAAA,GAAI,MAAM,CAAA;AAEtC,MAAA,IAAI,UAAA;AACJ,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,SAAS,CAAA,EAAG;AAC/C,QAAA,IAAA,CAAK,MAAM,GAAA,CAAI,mBAAA,EAAqB,CAAC,SAAA,EAAW,MAAA,EAAQ,KAAK,CAAC,CAAA;AAC9D,QAAA,UAAA,GAAa,KAAA;AAAA,MACjB,CAAA,MAAO;AACH,QAAA,IAAA,CAAK,YAAA,CAAa,WAAW,MAAM,CAAA;AACnC,QAAA,UAAA,GAAa,MAAA;AAAA,MACjB;AAEA,MAAA,MAAM,MAAA,GAAS,KAAK,CAAC,CAAA;AACrB,MAAA,OAAO,MAAA,GAAS,WAAA,CAAY,UAAA,EAAY,MAAiC,CAAA,GAAI,UAAA;AAAA,IACjF,CAAA;AAAA,EACJ;AAAA,EAEQ,YAAA,CAAa,UAAkB,KAAA,EAAkC;AACrE,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AACvC,MAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,CAAA,+CAAA,EAAkD,QAAQ,CAAA,CAAE,CAAA;AAAA,IACvF;AAEA,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,QAAA,KAAa,OAAA,EAAS;AAClC,MAAA,IAAA,CAAK,MAAM,GAAA,CAAI,CAAA,8CAAA,EAAiD,KAAK,MAAA,CAAO,QAAA,IAAY,SAAS,CAAA,EAAA,CAAA,EAAM;AAAA,QACnG,QAAA;AAAA,QACA;AAAA,OACH,CAAA;AACD,MAAA;AAAA,IACJ;AAGA,IAAA,IAAI,gBAAA,CAAiB,IAAA,CAAK,KAAK,CAAA,EAAG;AAClC,IAAA,IAAI,UAAU,QAAA,EAAU;AACpB,MAAA,IAAA,CAAK,MAAM,KAAA,CAAM,CAAA,yBAAA,EAA4B,QAAQ,CAAA,CAAA,EAAI,KAAK,IAAI,KAAK,CAAA;AACvE,MAAA;AAAA,IACJ;AACA,IAAA,IAAI,UAAU,EAAA,EAAI;AACd,MAAA,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,sBAAA,EAAwB,KAAK,CAAA;AAC7C,MAAA;AAAA,IACJ;AAEA,IAAA,MAAM,eAA6B,EAAE,QAAA,EAAU,OAAO,SAAA,EAAW,IAAA,CAAK,OAAO,SAAA,EAAU;AACvF,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,CAACC,OAAM,SAAA,CAAUA,EAAAA,EAAG,YAAY,CAAC,CAAA,EAAG;AAC7D,MAAA,IAAA,CAAK,MAAM,GAAA,CAAI,6BAAA,EAA+B,CAAC,YAAA,EAAc,CAAC,GAAG,IAAA,CAAK,aAAa,CAAA,EAAG,EAAE,GAAG,aAAA,CAAc,GAAA,EAAI,EAAG,CAAC,CAAA;AACjH,MAAA,IAAA,CAAK,aAAA,CAAc,KAAK,YAAY,CAAA;AACpC,MAAA,IAAA,CAAK,kBAAA,EAAmB;AAAA,IAC5B;AAAA,EACJ;AAAA,EAEQ,kBAAA,GAAqB;AACzB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,gBAAA,IAAoB,QAAA;AACjD,IAAA,MAAM,KAAA,GAAQ,OAAO,MAAA,KAAW,WAAA;AAEhC,IAAA,IAAI,KAAA,EAAO;AACP,MAAA,QAAQ,QAAA;AAAU,QACd,KAAK,QAAA;AACD,UAAA,IAAI,CAAC,KAAK,cAAA,EAAgB;AACtB,YAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AACtB,YAAA,cAAA,CAAe,MAAM;AACjB,cAAA,IAAA,CAAK,YAAA,EAAa,CAAE,IAAA,CAAK,MAAM;AAC3B,gBAAA,IAAA,CAAK,cAAA,GAAiB,KAAA;AAAA,cAC1B,CAAC,CAAA;AAAA,YACL,CAAC,CAAA;AAAA,UACL;AACA,UAAA;AAAA,QAEJ,KAAK,MAAA;AACD,UAAA,IAAI,KAAK,aAAA,CAAc,MAAA,IAAU,CAAA,IAAK,CAAC,KAAK,cAAA,EAAgB;AACxD,YAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AACtB,YAAA,cAAA,CAAe,MAAM;AACjB,cAAA,IAAA,CAAK,YAAA,EAAa,CAAE,IAAA,CAAK,MAAM;AAC3B,gBAAA,IAAA,CAAK,cAAA,GAAiB,KAAA;AAAA,cAC1B,CAAC,CAAA;AAAA,YACL,CAAC,CAAA;AAAA,UACL;AACA,UAAA;AAAA,QAEJ,KAAK,QAAA;AAAA,QACL;AACI,UAAA,IAAA,CAAK,KAAA,CAAM,IAAI,kDAAkD,CAAA;AACjE,UAAA;AAAA;AACR,IACJ,CAAA,MAAO;AAEH,MAAA,IAAI,CAAC,IAAA,CAAK,cAAA,IAAkB,CAAC,KAAK,KAAA,EAAO;AACrC,QAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AACtB,QAAA,cAAA,CAAe,MAAM;AACjB,UAAA,IAAA,CAAK,YAAA,EAAa,CAAE,IAAA,CAAK,MAAM;AAC3B,YAAA,IAAA,CAAK,cAAA,GAAiB,KAAA;AAAA,UAC1B,CAAC,CAAA;AAAA,QACL,CAAC,CAAA;AAAA,MACL;AAAA,IACJ;AAAA,EACJ;AAAA,EAEO,MAAMD,OAAAA,EAAwB;AACjC,IAAA,IAAA,CAAK,MAAA,GAASA,OAAAA;AACd,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,aAAa,CAAC,IAAA,CAAK,OAAO,GAAA,EAAK;AAEhD,IAAA,IAAI,KAAK,MAAA,CAAO,KAAA,OAAY,KAAA,CAAM,YAAA,GAAe,KAAK,MAAA,CAAO,KAAA;AAC7D,IAAA,IAAIA,OAAAA,CAAO,UAAA,EAAY,IAAA,CAAK,MAAA,GAASA,OAAAA,CAAO,UAAA;AAE5C,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,6BAAA,EAA+B,IAAA,CAAK,MAAM,CAAA;AAEzD,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAC/B,MAAA,IAAI,IAAA,CAAK,gBAAA,IAAoB,IAAA,CAAK,aAAA,CAAc,SAAS,CAAA,EAAG;AACxD,QAAA,IAAA,CAAK,gBAAA,GAAmB,KAAA;AACxB,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,gBAAA,IAAoB,QAAA;AACjD,QAAA,IAAI,aAAa,QAAA,IAAa,QAAA,KAAa,UAAU,IAAA,CAAK,aAAA,CAAc,SAAS,CAAA,EAAI;AACjF,UAAA,IAAA,CAAK,MAAM,GAAA,CAAI,CAAA,yBAAA,EAA4B,IAAA,CAAK,aAAA,CAAc,MAAM,CAAA,qBAAA,CAAuB,CAAA;AAC3F,UAAA,cAAA,CAAe,MAAM,IAAA,CAAK,YAAA,EAAc,CAAA;AAAA,QAC5C;AAAA,MACJ;AAEA,MAAA,IAAI,IAAA,CAAK,KAAA,EAAO,aAAA,CAAc,IAAA,CAAK,KAAK,CAAA;AACxC,MAAA,IAAA,CAAK,QAAQ,WAAA,CAAY,MAAM,IAAA,CAAK,YAAA,IAAgB,GAAI,CAAA;AACxD,MAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,uBAAA,EAAyB,IAAA,CAAK,KAAK,CAAA;AAAA,IACtD,CAAA,MAAO;AACH,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,gBAAA,IAAoB,QAAA;AACjD,MAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,CAAA,kCAAA,EAAqC,QAAQ,CAAA,gBAAA,CAAkB,CAAA;AAAA,IAClF;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,MAAA,CAAO,MAAA,EAAgB,KAAA,GAAQ,KAAA,EAAO,YAAY,KAAA,EAAyB;AACpF,IAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,IAAA,IAAI,CAAC,KAAK,MAAA,CAAO,SAAA,IAAa,CAAC,IAAA,CAAK,MAAA,CAAO,KAAK,OAAO,KAAA;AAEvD,IAAA,IAAI,SAAA,EAAW;AACX,MAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,2CAAA,EAA6C,MAAM,CAAA;AAClE,MAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,MAAA,IAAA,CAAK,WAAW,MAAM,CAAA,GAAA,qBAAQ,IAAA,EAAK,EAAE,SAAQ,GAAI,GAAA;AACjD,MAAA,OAAO,IAAA;AAAA,IACX;AAEA,IAAA,MAAM,GAAA,GAAA,iBAAM,IAAI,IAAA,EAAK,EAAE,SAAQ,GAAI,GAAA;AACnC,IAAA,IACI,CAAC,KAAA,IACD,MAAA,KAAW,IAAA,CAAK,MAAA,IAChB,KAAK,UAAA,CAAW,MAAM,CAAA,IACtB,IAAA,CAAK,IAAI,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,GAAI,GAAG,IAAI,EAAA,EAC5C;AACE,MAAA,OAAO,KAAA;AAAA,IACX;AAEA,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,yBAAA,EAA2B,MAAM,CAAA;AAChD,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,MAAM,KAAK,eAAA,EAAgB;AAC3B,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEA,MAAc,YAAA,GAAiC;AAC3C,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,CAAc,MAAA,EAAQ,OAAO,KAAA;AACvC,IAAA,IAAI,CAAC,KAAK,MAAA,CAAO,SAAA,IAAa,CAAC,IAAA,CAAK,MAAA,CAAO,KAAK,OAAO,KAAA;AACvD,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,QAAA,KAAa,OAAA,EAAS;AAClC,MAAA,IAAA,CAAK,MAAM,GAAA,CAAI,CAAA,mCAAA,EAAsC,KAAK,MAAA,CAAO,QAAA,IAAY,SAAS,CAAA,CAAA,CAAG,CAAA;AACzF,MAAA,OAAO,KAAA;AAAA,IACX;AAEA,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAC/B,MAAA,IAAA,CAAK,MAAM,GAAA,CAAI,CAAA,QAAA,EAAW,IAAA,CAAK,aAAA,CAAc,MAAM,CAAA,gBAAA,CAAkB,CAAA;AAAA,IACzE;AAEA,IAAA,MAAM,WAAA,GAAc,cAAc,GAAA,EAAI;AACtC,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA,CAAK,aAAA,CAAc,MAAA,CAAO,CAAC,QAAA,KAAa;AACzD,MAAA,QAAA,CAAS,SAAA,GAAY,KAAK,MAAA,CAAO,SAAA;AACjC,MAAA,IAAI,QAAA,CAAS,YAAY,WAAA,IAAe,QAAA,CAAS,SAAS,WAAA,CAAY,QAAA,CAAS,QAAQ,CAAA,EAAG;AACtF,QAAA,IAAA,CAAK,KAAA,CAAM,IAAI,yCAAA,EAA2C;AAAA,UACtD,UAAU,QAAA,CAAS,QAAA;AAAA,UACnB,OAAO,QAAA,CAAS,KAAA;AAAA,UAChB,UAAU,WAAA,CAAY,QAAA,CAAS,QAAQ,CAAA,CAAE,SAAS,KAAK;AAAA,SAC1D,CAAA;AACD,QAAA,OAAO,KAAA;AAAA,MACX;AACA,MAAA,OAAO,IAAA;AAAA,IACX,CAAC,CAAA;AAED,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,CAAc,MAAA,EAAQ,OAAO,KAAA;AAEvC,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,uBAAA,EAAyB,IAAA,CAAK,aAAa,CAAA;AAC1D,IAAA,IAAI;AACA,MAAA,MAAM,QAAA,GAA2B,MAAM,aAAA,CAAc,IAAA,CAAK,6BAAA,EAA+B;AAAA,QACrF,QAAQ,IAAA,CAAK;AAAA,OAChB,CAAA;AACD,MAAA,IAAI,CAAC,SAAS,MAAA,EAAQ;AAClB,QAAA,IAAI,SAAS,MAAA,EAAQ;AACjB,UAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,mBAAA,EAAqB,IAAA,CAAK,aAAa,CAAA;AACtD,UAAA,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,+BAAA,EAAiC,QAAA,CAAS,MAAM,CAAA;AAAA,QACrE;AACA,QAAA,OAAO,KAAA;AAAA,MACX;AAEA,MAAA,IAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,CAAC,QAAA,KAAa;AACrC,QAAA,IAAI,CAAC,WAAA,CAAY,QAAA,CAAS,QAAQ,CAAA,EAAG;AACjC,UAAA,WAAA,CAAY,QAAA,CAAS,QAAQ,CAAA,GAAI;AAAA,YAC7B,cAAc,QAAA,CAAS,QAAA;AAAA,YACvB,YAAY,QAAA,CAAS;AAAA,WACzB;AAAA,QACJ;AACA,QAAA,WAAA,CAAY,SAAS,QAAQ,CAAA,CAAE,QAAA,CAAS,KAAK,IAAI,QAAA,CAAS,KAAA;AAC1D,QAAA,WAAA,CAAY,QAAA,CAAS,QAAQ,CAAA,CAAE,cAAc,IAAI,QAAA,CAAS,QAAA;AAAA,MAC9D,CAAC,CAAA;AACD,MAAA,aAAA,CAAc,GAAA,CAAI,EAAE,GAAG,WAAA,EAAa,CAAA;AACpC,MAAA,IAAA,CAAK,gBAAgB,EAAC;AACtB,MAAA,OAAO,IAAA;AAAA,IACX,SAAS,GAAA,EAAK;AACV,MAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,8BAAA,EAAgC,IAAA,CAAK,aAAa,CAAA;AACjE,MAAA,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,+BAAA,EAAiC,GAAG,CAAA;AACrD,MAAA,OAAO,KAAA;AAAA,IACX;AAAA,EACJ;AAAA,EAEA,MAAc,eAAA,GAAiC;AAC3C,IAAA,IAAI,CAAC,aAAA,CAAc,MAAA,CAAO,SAAA,IAAa,IAAA,CAAK,OAAO,SAAA,EAAW;AAC1D,MAAA,aAAA,CAAc,KAAA,CAAM,KAAK,MAAM,CAAA;AAAA,IACnC;AAEA,IAAA,MAAM,QAAA,GAA2B,MAAM,aAAA,CAAc,eAAA,CAAgB,KAAK,MAAM,CAAA;AAChF,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,+BAAA,EAAiC,QAAQ,CAAA;AACxD,IAAA,IAAI,SAAS,MAAA,EAAQ;AACjB,MAAA,IAAA,CAAK,MAAM,KAAA,CAAM,OAAA,EAAS,QAAA,CAAS,MAAA,CAAO,CAAC,CAAC,CAAA;AAC5C,MAAA;AAAA,IACJ;AAEA,IAAA,MAAM,QAAQ,QAAA,CAAS,IAAA;AAEvB,IAAA,IAAI,CAAC,QAAA,CAAS,KAAA,CAAM,mBAAmB,CAAC,CAAA,EAAG;AACvC,MAAA,KAAA,CAAM,mBAAmB,CAAA,GAAI;AAAA,QACzB,YAAA,EAAc,mBAAA;AAAA,QACd,UAAA,EAAY;AAAA,OAChB;AAAA,IACJ;AAEA,IAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,EAAG;AAClC,MAAA,KAAA,CAAM,GAAG,CAAA,CAAE,cAAc,CAAA,GAAI,GAAA;AAAA,IACjC;AAEA,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,mBAAA,GAAsB,IAAA,CAAK,QAAQ,KAAK,CAAA;AAEvD,IAAA,aAAA,CAAc,IAAI,KAAK,CAAA;AAEvB,IAAA,UAAA,CAAW,MAAM,qBAAA,CAAsB,GAAA,CAAI,IAAA,CAAK,MAAM,GAAG,GAAG,CAAA;AAC5D,IAAA,IAAA,CAAK,UAAA,CAAW,KAAK,MAAM,CAAA,GAAA,qBAAQ,IAAA,EAAK,EAAE,SAAQ,GAAI,GAAA;AAAA,EAC1D;AACJ;;;ACjUA,IAAM,kBAAN,MAAsB;AAAA,EAmBlB,WAAA,GAAc;AAfd,IAAA,IAAA,CAAO,0BAAA,GAA+C,QAAQ,OAAA,EAAQ;AAEtE,IAAA,IAAA,CAAQ,UAAyC,EAAC;AAElD,IAAA,IAAA,CAAQ,YAA0B,EAAC;AACnC,IAAA,IAAA,CAAQ,eAAA,GAAkB,EAAA;AAE1B,IAAA,IAAA,CAAQ,YAAgC,EAAC;AACzC,IAAA,IAAA,CAAQ,eAAA,GAAkB,EAAA;AAE1B,IAAA,IAAA,CAAQ,aAA4B,EAAC;AACrC,IAAA,IAAA,CAAQ,gBAAA,GAAmB,EAAA;AAKvB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,QAAQ,IAAI,MAAA,CAAO,CAAC,CAAC,IAAA,CAAK,OAAO,KAAK,CAAA;AAC3C,IAAA,IAAA,CAAK,YAAA,GAAe,IAAI,YAAA,CAAa,IAAA,CAAK,MAAM,CAAA;AAAA,EACpD;AAAA;AAAA,EAGA,IAAW,CAAA,GAAe;AACtB,IAAA,OAAO,KAAK,YAAA,CAAa,CAAA;AAAA,EAC7B;AAAA,EAEA,MAAa,OAAA,GAAU;AACnB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,WAAA,CAAY,GAAA,EAAI;AAC3C,IAAA,IAAA,CAAK,UAAU,EAAC;AAChB,IAAA,OAAO,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,MAAA,EAAQ,IAAI,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,KAAK,UAAA,EAAyD;AACvE,IAAA,MAAM,YAAY,UAAA,CAAW,SAAA;AAC7B,IAAA,MAAM,MAAM,UAAA,CAAW,GAAA;AACvB,IAAA,MAAM,kBAAkB,UAAA,CAAW,eAAA;AACnC,IAAA,IAAI,UAAA,GAAa,WAAW,UAAA,IAAc,IAAA;AAC1C,IAAA,MAAM,KAAA,GAAQ,WAAW,KAAA,IAAS,KAAA;AAClC,IAAA,MAAM,oBAAA,GAAuB,WAAW,oBAAA,IAAwB,KAAA;AAChE,IAAA,MAAM,gBAAA,GAAmB,WAAW,gBAAA,IAAoB,QAAA;AACxD,IAAA,MAAME,uBAAsB,UAAA,CAAW,mBAAA;AACvC,IAAA,MAAM,4BAA4B,UAAA,CAAW,yBAAA;AAE7C,IAAA,IAAA,CAAK,MAAM,YAAA,GAAe,KAAA;AAE1B,IAAA,IAAI,SAASA,oBAAAA,EAAqB;AAC9B,MAAA,IAAA,CAAK,KAAA,CAAM,IAAI,kCAAA,EAAoC;AAAA,QAC/C,sBAAA,EAAwB,CAAC,CAACA,oBAAAA;AAAA,QAC1B,yBAAA;AAAA,QACA,oBAAoBA,oBAAAA,GAAsB,MAAA,CAAO,IAAA,CAAKA,oBAAmB,EAAE,MAAA,GAAS,CAAA;AAAA,QACpF,YAAYA,oBAAAA,GAAsB,MAAA,CAAO,IAAA,CAAKA,oBAAmB,IAAI;AAAC,OACzE,CAAA;AAAA,IACL;AAEA,IAAA,IAAI,CAAC,SAAA,EAAW;AACZ,MAAA,IAAA,CAAK,KAAA,CAAM,MAAM,4DAA4D,CAAA;AAC7E,MAAA,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,CAAC,mBAAmB,CAAA,EAAE;AAAA,IAC1D;AACA,IAAA,IAAI,CAAC,GAAA,EAAK;AACN,MAAA,IAAA,CAAK,KAAA,CAAM,MAAM,0DAA0D,CAAA;AAC3E,MAAA,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,CAAC,iBAAiB,CAAA,EAAE;AAAA,IACxD;AACA,IAAA,IAAI,CAAC,iBAAiB,SAAA,EAAW;AAC7B,MAAA,IAAA,CAAK,KAAA,CAAM,KAAA;AAAA,QACP;AAAA,OACJ;AACA,MAAA,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,CAAC,yBAAyB,CAAA,EAAE;AAAA,IAChE;AAEA,IAAA,UAAA,GAAa,WAAW,WAAA,EAAY;AAEpC,IAAA,IAAI,CAAC,oBAAA,EAAsB;AACvB,MAAA,IAAA,CAAK,MAAA,GAAS;AAAA,QACV,SAAA;AAAA,QACA,GAAA;AAAA,QACA,WAAA,EAAa,eAAA;AAAA,QACb,UAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA,OACJ;AAEA,MAAA,MAAA,CAAO,MAAA,CAAO,MAAA,EAAa,IAAA,CAAK,MAAM,CAAA;AAAA,IAC1C;AAEA,IAAA,MAAM,gBAAA,GAAmB,MAAM,aAAA,CAAc,QAAA,CAAS,KAAK,MAAM,CAAA;AAEjE,IAAA,IAAI,gBAAA,CAAiB,MAAA,IAAU,gBAAA,CAAiB,IAAA,EAAM;AAClD,MAAA,MAAM,WAAW,gBAAA,CAAiB,IAAA;AAClC,MAAA,IAAI,SAAS,QAAA,EAAU;AACnB,QAAA,IAAA,CAAK,MAAA,CAAO,WAAW,QAAA,CAAS,QAAA;AAChC,QAAA,MAAA,CAAY,WAAW,QAAA,CAAS,QAAA;AAChC,QAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,eAAA,EAAiB,IAAA,CAAK,OAAO,QAAQ,CAAA;AAAA,MACxD;AAAA,IACJ;AAGA,IAAA,IAAIA,wBAAuB,yBAAA,EAA2B;AAClD,MAAA,IAAI,CAACA,oBAAAA,CAAoB,mBAAmB,CAAA,EAAG;AAC3C,QAAAA,oBAAAA,CAAoB,mBAAmB,CAAA,GAAI;AAAA,UACvC,YAAA,EAAc,mBAAA;AAAA,UACd,UAAA,EAAY;AAAA,SAChB;AAAA,MACJ;AACA,MAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAKA,oBAAmB,CAAA,EAAG;AAChD,QAAAA,oBAAAA,CAAoB,GAAG,CAAA,CAAE,cAAc,CAAA,GAAI,GAAA;AAAA,MAC/C;AACA,MAAA,aAAA,CAAc,IAAIA,oBAAmB,CAAA;AACrC,MAAA,qBAAA,CAAsB,IAAI,yBAAyB,CAAA;AACnD,MAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,uDAAA,EAAyD,yBAAyB,CAAA;AAAA,IACrG;AAEA,IAAA,IAAA,CAAK,YAAA,CAAa,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA;AAGnC,IAAA,IAAA,CAAK,MAAA,CAAO,WAAA,CAAY,SAAA,CAAU,CAAC,MAAA,KAAW;AAC1C,MAAA,IAAI,CAAC,iBAAiB,MAAA,EAAQ;AAC9B,MAAA,IAAA,CAAK,eAAe,MAAM,CAAA;AAC1B,MAAA,IAAA,CAAK,KAAA,CAAM,IAAI,kCAAkC,CAAA;AACjD,MAAA,MAAM,SAAA,GAAY,yBAAA,KAA8B,MAAA,IAAU,CAAC,CAACA,oBAAAA;AAC5D,MAAA,IAAA,CAAK,6BAA6B,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,MAAA,EAAQ,OAAO,SAAS,CAAA;AAAA,IACvF,CAAC,CAAA;AAED,IAAA,OAAO,gBAAA;AAAA,EACX;AAAA,EAEA,MAAa,aAAa,QAAA,EAAgD;AACtE,IAAA,MAAM,MAAA,GAAS,YAAY,IAAA,CAAK,MAAA,CAAO,YAAY,GAAA,EAAI,IAAK,KAAK,MAAA,CAAO,UAAA;AACxE,IAAA,IAAI,KAAK,SAAA,CAAU,MAAA,IAAU,KAAK,eAAA,KAAoB,MAAA,SAAe,IAAA,CAAK,SAAA;AAE1E,IAAA,MAAM,KAAA,GAAQ,wBAAwB,MAAM,CAAA,CAAA;AAC5C,IAAA,MAAM,QAAA,GAAW,MAAM,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA;AAC9C,IAAA,IAAI,QAAA,CAAS,MAAA,IAAU,CAAC,QAAA,CAAS,MAAA,EAAQ;AACrC,MAAA,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,kCAAA,GAAqC,KAAK,CAAA;AAC3D,MAAA,OAAO,EAAC;AAAA,IACZ;AACA,IAAA,IAAA,CAAK,YAAY,QAAA,CAAS,IAAA;AAC1B,IAAA,IAAA,CAAK,eAAA,GAAkB,MAAA;AACvB,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EAChB;AAAA,EAEA,MAAa,cAAc,QAAA,EAA2C;AAClE,IAAA,MAAM,MAAA,GAAS,YAAY,IAAA,CAAK,MAAA,CAAO,YAAY,GAAA,EAAI,IAAK,KAAK,MAAA,CAAO,UAAA;AACxE,IAAA,IAAI,KAAK,UAAA,CAAW,MAAA,IAAU,KAAK,gBAAA,KAAqB,MAAA,SAAe,IAAA,CAAK,UAAA;AAE5E,IAAA,MAAM,KAAA,GAAQ,cAAc,MAAM,CAAA,CAAA;AAClC,IAAA,MAAM,QAAA,GAAW,MAAM,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA;AAC9C,IAAA,IAAI,QAAA,CAAS,MAAA,IAAU,CAAC,QAAA,CAAS,MAAA,EAAQ;AACrC,MAAA,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,mCAAA,GAAsC,KAAK,CAAA;AAC5D,MAAA,OAAO,EAAC;AAAA,IACZ;AACA,IAAA,IAAA,CAAK,aAAa,QAAA,CAAS,IAAA;AAC3B,IAAA,IAAA,CAAK,gBAAA,GAAmB,MAAA;AACxB,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EAChB;AAAA,EAEA,MAAa,aAAa,QAAA,EAA0C;AAChE,IAAA,MAAM,MAAA,GAAS,YAAY,IAAA,CAAK,MAAA,CAAO,YAAY,GAAA,EAAI,IAAK,KAAK,MAAA,CAAO,UAAA;AACxE,IAAA,IAAI,KAAK,SAAA,CAAU,MAAA,IAAU,KAAK,eAAA,KAAoB,MAAA,SAAe,IAAA,CAAK,SAAA;AAE1E,IAAA,MAAM,KAAA,GAAQ,aAAa,MAAM,CAAA,CAAA;AACjC,IAAA,MAAM,QAAA,GAAW,MAAM,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA;AAC9C,IAAA,IAAI,QAAA,CAAS,MAAA,IAAU,CAAC,QAAA,CAAS,MAAA,EAAQ;AACrC,MAAA,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,kCAAA,GAAqC,KAAK,CAAA;AAC3D,MAAA,OAAO,EAAC;AAAA,IACZ;AACA,IAAA,IAAA,CAAK,YAAY,QAAA,CAAS,IAAA;AAC1B,IAAA,IAAA,CAAK,eAAA,GAAkB,MAAA;AACvB,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EAChB;AAAA,EAEA,MAAa,cAAA,CAAe,cAAA,EAAwB,QAAA,EAAoC;AACpF,IAAA,IAAI,CAAC,gBAAgB,OAAO,EAAA;AAC5B,IAAA,MAAM,MAAA,GAAS,YAAY,IAAA,CAAK,MAAA,CAAO,YAAY,GAAA,EAAI,IAAK,KAAK,MAAA,CAAO,UAAA;AACxE,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,MAAA,IAAU,IAAA,CAAK,oBAAoB,MAAA,EAAQ,MAAM,IAAA,CAAK,YAAA,CAAa,QAAQ,CAAA;AAE/F,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,WAAA,EAAY,KAAM,cAAA,CAAe,WAAA,EAAa,CAAA,EAAG,KAAA;AACnG,IAAA,IAAI,CAAC,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,kCAAkC,cAAc,CAAA;AAC9E,IAAA,OAAO,OAAA,IAAW,cAAA;AAAA,EACtB;AAAA,EAEA,MAAa,eAAA,CAAgB,eAAA,EAAyB,QAAA,EAAoC;AACtF,IAAA,IAAI,CAAC,iBAAiB,OAAO,EAAA;AAC7B,IAAA,MAAM,MAAA,GAAS,YAAY,IAAA,CAAK,MAAA,CAAO,YAAY,GAAA,EAAI,IAAK,KAAK,MAAA,CAAO,UAAA;AACxE,IAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,MAAA,IAAU,IAAA,CAAK,qBAAqB,MAAA,EAAQ,MAAM,IAAA,CAAK,aAAA,CAAc,QAAQ,CAAA;AAElG,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,WAAA,EAAY,KAAM,eAAA,CAAgB,WAAA,EAAa,CAAA,EAAG,IAAA;AACvG,IAAA,IAAI,CAAC,QAAA,EAAU,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,mCAAmC,eAAe,CAAA;AACjF,IAAA,OAAO,QAAA,IAAY,eAAA;AAAA,EACvB;AAAA,EAEA,MAAa,gBAAA,CACT,MAAA,GAA+B,EAAA,EAC/B,QAAA,EACuD;AACvD,IAAA,MAAM,MAAA,GAAS,YAAY,IAAA,CAAK,MAAA,CAAO,YAAY,GAAA,EAAI,IAAK,KAAK,MAAA,CAAO,UAAA;AACxE,IAAA,MAAM,QAAQ,CAAA,QAAA,EAAW,MAAM,MAAM,MAAA,GAAS,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,GAAK,EAAA,CAAA;AAC7D,IAAA,MAAM,QAAA,GAAW,MAAM,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA;AAC9C,IAAA,IAAI,QAAA,CAAS,MAAA,IAAU,CAAC,QAAA,CAAS,MAAA,EAAQ;AACrC,MAAA,IAAA,CAAK,MAAM,KAAA,CAAM,QAAA,CAAS,MAAA,EAAQ,QAAA,CAAS,QAAQ,QAAQ,CAAA;AAC3D,MAAA,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,gCAAA,GAAmC,KAAK,CAAA;AACzD,MAAA,OAAO,MAAA,KAAW,SAAS,EAAC,GAAI,WAAW,MAAA,GAAS,KAAK,EAAC;AAAA,IAC9D;AACA,IAAA,QAAQ,MAAA;AAAQ,MACZ,KAAK,MAAA;AACD,QAAA,OAAO,QAAA,CAAS,IAAA;AAAA,MACpB,KAAK,MAAA;AACD,QAAA,OAAO,QAAA,CAAS,IAAA;AAAA,MACpB;AACI,QAAA,OAAO,QAAA,CAAS,IAAA;AAAA;AACxB,EACJ;AAAA,EAEA,MAAa,eAAe,QAAA,EAA2C;AACnE,IAAA,OAAQ,MAAM,IAAA,CAAK,gBAAA,CAAiB,MAAA,EAAQ,QAAQ,CAAA;AAAA,EACxD;AAAA,EAEA,MAAa,cAAA,CAAe,QAAA,EAAmB,YAAA,GAAe,KAAA,EAA+B;AACzF,IAAA,MAAM,MAAA,GAAS,YAAY,IAAA,CAAK,MAAA,CAAO,YAAY,GAAA,EAAI,IAAK,KAAK,MAAA,CAAO,UAAA;AACxE,IAAA,IAAI,IAAA,CAAK,OAAA,GAAU,MAAM,CAAA,EAAG,MAAA,IAAU,CAAC,YAAA,EAAc,OAAO,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA;AAC/E,IAAA,IAAA,CAAK,QAAQ,MAAM,CAAA,GAAK,MAAM,IAAA,CAAK,gBAAA,CAAiB,QAAQ,QAAQ,CAAA;AACpE,IAAA,OAAO,IAAA,CAAK,QAAQ,MAAM,CAAA;AAAA,EAC9B;AAAA,EAEA,MAAa,WAAW,QAAA,EAA4C;AAChE,IAAA,OAAQ,MAAM,IAAA,CAAK,gBAAA,CAAiB,EAAA,EAAI,QAAQ,CAAA;AAAA,EACpD;AAAA,EAEA,MAAa,uBAAA,CAAwB,SAAA,EAAmB,SAAA,GAAY,OAAO,QAAA,EAAoC;AAC3G,IAAA,IAAI,CAAC,WAAW,OAAO,EAAA;AACvB,IAAA,MAAM,MAAA,GAAS,YAAY,IAAA,CAAK,MAAA,CAAO,YAAY,GAAA,EAAI,IAAK,KAAK,MAAA,CAAO,UAAA;AACxE,IAAA,MAAM,IAAA,CAAK,eAAe,MAAM,CAAA;AAChC,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,SAAA,EAAW,SAAA,EAAW,MAAM,CAAA;AAAA,EAC1D;AAAA,EAEO,aAAA,CAAc,SAAA,EAAmB,SAAA,GAAY,KAAA,EAAO,QAAA,EAA2B;AAClF,IAAA,MAAM,MAAA,GAAS,YAAY,IAAA,CAAK,MAAA,CAAO,YAAY,GAAA,EAAI,IAAK,KAAK,MAAA,CAAO,UAAA;AACxE,IAAA,IAAI,IAAA,GAAO,EAAA;AACX,IAAA,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,EAAG,KAAA,CAAM,CAAC,GAAA,KAAQ;AACjC,MAAA,IAAI,GAAA,CAAI,SAAS,SAAA,EAAW;AACxB,QAAA,IAAA,GAAO,SAAA,GAAY,GAAA,CAAI,SAAA,GAAY,GAAA,CAAI,WAAA;AACvC,QAAA,OAAO,KAAA;AAAA,MACX;AACA,MAAA,OAAO,IAAA;AAAA,IACX,CAAC,CAAA;AACD,IAAA,IAAI,CAAC,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,2CAA2C,SAAS,CAAA;AAC/E,IAAA,OAAO,IAAA;AAAA,EACX;AAAA;AAAA,EAGA,MAAa,eAAA,CAAgB,SAAA,EAAmB,SAAA,GAAY,OAAO,QAAA,EAAoC;AACnG,IAAA,OAAO,IAAA,CAAK,uBAAA,CAAwB,SAAA,EAAW,SAAA,EAAW,QAAQ,CAAA;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,qBAAA,CACH,sBACA,gBAAA,EACc;AACd,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,0BAAA,CAA2B,oBAAoB,CAAA;AACxE,IAAA,IAAI,WAAA,CAAY,MAAA,KAAW,CAAA,EAAG,OAAO,KAAA;AAErC,IAAA,IAAI,gBAAA,IAAoB,gBAAA,CAAiB,MAAA,GAAS,CAAA,EAAG;AACjD,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,mBAAA,CAAoB,WAAA,EAAa,gBAAgB,CAAA;AACxE,MAAA,IAAI,WAAW,OAAO,SAAA;AAAA,IAC1B;AAEA,IAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,WAAA,CAAY,CAAC,CAAC,CAAA;AAAA,EAC9C;AAAA,EAEQ,2BAA2B,oBAAA,EAAgD;AAC/E,IAAA,IAAI,oBAAA,EAAsB;AACtB,MAAA,IAAI;AACA,QAAA,OAAO,IAAA,CAAK,0BAA0B,oBAAoB,CAAA;AAAA,MAC9D,SAAS,KAAA,EAAO;AACZ,QAAA,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,yCAAA,EAA2C,KAAK,CAAA;AAAA,MACpE;AAAA,IACJ;AAEA,IAAA,IAAI,OAAO,cAAc,WAAA,EAAa;AAClC,MAAA,IAAI,SAAA,CAAU,SAAA,IAAa,SAAA,CAAU,SAAA,CAAU,SAAS,CAAA,EAAG;AACvD,QAAA,OAAO,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,SAAS,CAAA;AAAA,MACzC;AACA,MAAA,IAAI,SAAA,CAAU,QAAA,EAAU,OAAO,CAAC,UAAU,QAAQ,CAAA;AAAA,IACtD;AAEA,IAAA,OAAO,EAAC;AAAA,EACZ;AAAA,EAEQ,0BAA0B,MAAA,EAA0B;AACxD,IAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,IAAY,OAAO,IAAA,EAAK,KAAM,EAAA,EAAI,OAAO,EAAC;AAE3E,IAAA,IAAI;AACA,MAAA,OAAO,OACF,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,IAAA,KAAS;AACX,QAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,QAAA,IAAI,CAAC,OAAA,IAAW,OAAA,KAAY,GAAA,EAAK,OAAO,IAAA;AACxC,QAAA,MAAM,CAAC,UAAA,EAAY,KAAK,CAAA,GAAI,OAAA,CAAQ,MAAM,KAAK,CAAA;AAC/C,QAAA,MAAM,MAAA,GAAS,YAAY,IAAA,EAAK;AAChC,QAAA,MAAM,CAAA,GAAI,KAAA,GAAQ,UAAA,CAAW,KAAK,CAAA,GAAI,CAAA;AACtC,QAAA,IAAI,CAAC,UAAU,KAAA,CAAM,CAAC,KAAK,CAAA,IAAK,CAAA,IAAK,CAAA,GAAI,CAAA,EAAG,OAAO,IAAA;AACnD,QAAA,OAAO,EAAE,QAAQ,CAAA,EAAE;AAAA,MACvB,CAAC,EACA,MAAA,CAAO,CAAC,SAAgD,IAAA,KAAS,IAAI,EACrE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,CAAA,CAAE,IAAI,CAAA,CAAE,CAAC,EACxB,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,MAAM,CAAA;AAAA,IAClC,SAAS,KAAA,EAAO;AACZ,MAAA,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,uCAAA,EAAyC,KAAK,CAAA;AAC9D,MAAA,OAAO,EAAC;AAAA,IACZ;AAAA,EACJ;AAAA,EAEQ,mBAAA,CAAoB,aAAuB,gBAAA,EAA2C;AAC1F,IAAA,IAAI,CAAC,WAAA,CAAY,MAAA,IAAU,CAAC,gBAAA,CAAiB,QAAQ,OAAO,IAAA;AAE5D,IAAA,MAAM,mBAAA,GAAsB,iBAAiB,GAAA,CAAI,CAAC,MAAM,IAAA,CAAK,eAAA,CAAgB,CAAC,CAAC,CAAA;AAE/E,IAAA,KAAA,MAAW,cAAc,WAAA,EAAa;AAClC,MAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,eAAA,CAAgB,UAAU,CAAA;AACtD,MAAA,IAAI,mBAAA,CAAoB,QAAA,CAAS,cAAc,CAAA,EAAG,OAAO,cAAA;AAAA,IAC7D;AAEA,IAAA,KAAA,MAAW,cAAc,WAAA,EAAa;AAClC,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,eAAA,CAAgB,UAAU,CAAA;AAChD,MAAA,KAAA,MAAW,aAAa,mBAAA,EAAqB;AACzC,QAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,SAAS,CAAA,KAAM,UAAU,OAAO,SAAA;AAAA,MAC7D;AAAA,IACJ;AAEA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEQ,gBAAgB,MAAA,EAAwB;AAC5C,IAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,KAAW,UAAU,OAAO,MAAA;AAClD,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA;AACjC,IAAA,IAAI,MAAM,MAAA,KAAW,CAAA,SAAU,KAAA,CAAM,CAAC,EAAE,WAAA,EAAY;AACpD,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,CAAC,CAAA,CAAE,WAAA,EAAY;AACtC,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,CAAC,CAAA,CAAE,WAAA,EAAY;AACpC,IAAA,OAAO,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,EAChC;AAAA,EAEQ,gBAAgB,MAAA,EAAwB;AAC5C,IAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,KAAW,UAAU,OAAO,EAAA;AAClD,IAAA,OAAO,OAAO,KAAA,CAAM,MAAM,CAAA,CAAE,CAAC,EAAE,WAAA,EAAY;AAAA,EAC/C;AACJ,CAAA;AAEO,IAAM,UAAA,GAAa,IAAI,eAAA;;;ACpXvB,IAAM,OAAA,GAAU,CAAC,IAAA,KAA2B;AAC/C,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,OAAO,IAAA,KAAS,WAAW,OAAO,KAAA;AAClE,EAAA,IAAI,OAAO,IAAA,KAAS,WAAA,IAAe,IAAA,KAAS,MAAM,OAAO,IAAA;AACzD,EAAA,IAAI,OAAQ,IAAA,CAA6B,MAAA,KAAW,WAAA,EAAa;AAC7D,IAAA,OAAQ,KAA4B,MAAA,KAAW,CAAA;AAAA,EACnD;AACA,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU,OAAO,OAAO,IAAA,CAAK,IAAc,EAAE,MAAA,KAAW,CAAA;AAC5E,EAAA,OAAO,KAAA;AACX;AAoBO,SAAS,IAAI,WAAA,EAAqB;AACrC,EAAA,IAAI,OAAO,WAAA,KAAgB,QAAA,EAAU,WAAA,GAAc,IAAA,CAAK,UAAU,WAAW,CAAA;AAC7E,EAAA,MAAM,EAAA,GAAK,kBAAA;AACX,EAAA,SAAS,GAAG,CAAA,EAAW;AAAE,IAAA,IAAI,GAAG,CAAA,GAAI,EAAA;AAAI,IAAA,KAAK,IAAI,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK,CAAA,IAAK,GAAG,MAAA,CAAQ,CAAA,IAAM,IAAI,CAAA,GAAI,CAAA,GAAM,EAAI,CAAA,GAAI,EAAA,CAAG,OAAQ,CAAA,IAAM,CAAA,GAAI,IAAM,EAAI,CAAA;AAAG,IAAA,OAAO,CAAA;AAAA,EAAG;AACzJ,EAAA,SAAS,EAAA,CAAGC,IAAW,CAAA,EAAW;AAAE,IAAA,MAAM,CAAA,GAAA,CAAKA,EAAAA,GAAI,KAAA,KAAW,CAAA,GAAI,KAAA,CAAA;AAAS,IAAA,MAAM,CAAA,GAAA,CAAKA,EAAAA,IAAK,EAAA,KAAO,CAAA,IAAK,OAAO,CAAA,IAAK,EAAA,CAAA;AAAK,IAAA,OAAQ,CAAA,IAAK,KAAO,CAAA,GAAI,KAAA;AAAA,EAAS;AACzJ,EAAA,SAAS,EAAA,CAAG,GAAWC,EAAAA,EAAW;AAAE,IAAA,OAAQ,CAAA,IAAKA,EAAAA,GAAM,CAAA,KAAO,EAAA,GAAKA,EAAAA;AAAA,EAAK;AACxE,EAAA,SAAS,GAAG,CAAA,EAAWC,EAAAA,EAAWC,EAAAA,EAAWH,EAAAA,EAAW,GAAWF,EAAAA,EAAW;AAAE,IAAA,OAAO,EAAA,CAAG,EAAA,CAAG,EAAA,CAAG,EAAA,CAAGI,IAAG,CAAC,CAAA,EAAG,EAAA,CAAGF,EAAAA,EAAGF,EAAC,CAAC,CAAA,EAAG,CAAC,GAAGK,EAAC,CAAA;AAAA,EAAG;AAC7H,EAAA,SAAS,GAAGD,EAAAA,EAAWC,EAAAA,EAAWF,IAAWG,EAAAA,EAAWJ,EAAAA,EAAW,GAAWF,EAAAA,EAAW;AAAE,IAAA,OAAO,EAAA,CAAIK,EAAAA,GAAIF,EAAAA,GAAO,CAACE,EAAAA,GAAKC,IAAIF,EAAAA,EAAGC,EAAAA,EAAGH,EAAAA,EAAG,CAAA,EAAGF,EAAC,CAAA;AAAA,EAAG;AAC3I,EAAA,SAAS,GAAGI,EAAAA,EAAWC,EAAAA,EAAWF,IAAWG,EAAAA,EAAWJ,EAAAA,EAAW,GAAWF,EAAAA,EAAW;AAAE,IAAA,OAAO,EAAA,CAAIK,EAAAA,GAAIC,EAAAA,GAAMH,EAAAA,GAAK,CAACG,IAAKF,EAAAA,EAAGC,EAAAA,EAAGH,EAAAA,EAAG,CAAA,EAAGF,EAAC,CAAA;AAAA,EAAG;AAC3I,EAAA,SAAS,GAAGI,EAAAA,EAAWC,EAAAA,EAAWF,IAAWG,EAAAA,EAAWJ,EAAAA,EAAW,GAAWF,EAAAA,EAAW;AAAE,IAAA,OAAO,EAAA,CAAGK,KAAIF,EAAAA,GAAIG,EAAAA,EAAGF,IAAGC,EAAAA,EAAGH,EAAAA,EAAG,GAAGF,EAAC,CAAA;AAAA,EAAG;AAChI,EAAA,SAAS,GAAGI,EAAAA,EAAWC,EAAAA,EAAWF,IAAWG,EAAAA,EAAWJ,EAAAA,EAAW,GAAWF,EAAAA,EAAW;AAAE,IAAA,OAAO,EAAA,CAAGG,MAAKE,EAAAA,GAAK,CAACC,KAAKF,EAAAA,EAAGC,EAAAA,EAAGH,EAAAA,EAAG,CAAA,EAAGF,EAAC,CAAA;AAAA,EAAG;AACrI,EAAA,SAAS,GAAGE,EAAAA,EAAW;AACnB,IAAA,IAAIK,EAAAA;AAAG,IAAA,MAAM,IAAA,GAAA,CAASL,EAAAA,CAAE,MAAA,GAAS,CAAA,IAAM,CAAA,IAAK,CAAA;AAAG,IAAA,MAAM,IAAA,GAAO,IAAI,KAAA,CAAM,IAAA,GAAO,EAAE,CAAA;AAAG,IAAA,KAAKK,EAAAA,GAAI,GAAGA,EAAAA,GAAI,IAAA,GAAO,IAAIA,EAAAA,EAAAA,EAAK,IAAA,CAAKA,EAAC,CAAA,GAAI,CAAA;AAC5H,IAAA,KAAKA,EAAAA,GAAI,CAAA,EAAGA,EAAAA,GAAIL,EAAAA,CAAE,QAAQK,EAAAA,EAAAA,EAAK,IAAA,CAAKA,EAAAA,IAAK,CAAC,KAAKL,EAAAA,CAAE,UAAA,CAAWK,EAAC,CAAA,IAAOA,KAAI,CAAA,GAAK,CAAA;AAC7E,IAAA,IAAA,CAAKA,EAAAA,IAAK,CAAC,CAAA,IAAK,GAAA,IAAUA,KAAI,CAAA,GAAK,CAAA;AAAI,IAAA,IAAA,CAAK,IAAA,GAAO,EAAA,GAAK,CAAC,CAAA,GAAIL,GAAE,MAAA,GAAS,CAAA;AAAG,IAAA,OAAO,IAAA;AAAA,EACtF;AACA,EAAA,IAAI,GAAG,CAAA,GAAI,EAAA,CAAG,EAAA,GAAK,WAAW,GAAG,CAAA,GAAI,UAAA,EAAY,CAAA,GAAI,UAAA,EAAY,IAAI,WAAA,EAAa,CAAA,GAAI,SAAA,EAAW,IAAA,EAAM,MAAM,IAAA,EAAM,IAAA;AACnH,EAAA,KAAK,IAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,MAAA,EAAQ,KAAK,EAAA,EAAI;AAC/B,IAAA,IAAA,GAAO,CAAA;AAAG,IAAA,IAAA,GAAO,CAAA;AAAG,IAAA,IAAA,GAAO,CAAA;AAAG,IAAA,IAAA,GAAO,CAAA;AACrC,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,CAAA,EAAG,UAAU,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,UAAU,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,SAAS,CAAA;AACrI,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,WAAW,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,CAAA,EAAG,UAAU,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,UAAU,CAAA;AACvI,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,WAAW,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,SAAS,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,CAAA,EAAG,UAAU,CAAA;AACtI,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,WAAW,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,EAAE,CAAA,EAAG,EAAA,EAAI,MAAM,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,EAAE,CAAA,EAAG,EAAA,EAAI,WAAW,CAAA;AACvI,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,EAAE,CAAA,EAAG,CAAA,EAAG,UAAU,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,EAAE,CAAA,EAAG,EAAA,EAAI,SAAS,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,EAAE,CAAA,EAAG,EAAA,EAAI,WAAW,CAAA;AACzI,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,EAAE,CAAA,EAAG,EAAA,EAAI,UAAU,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,CAAA,EAAG,UAAU,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,CAAA,EAAG,WAAW,CAAA;AACvI,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,EAAE,CAAA,EAAG,EAAA,EAAI,SAAS,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,UAAU,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,CAAA,EAAG,UAAU,CAAA;AACtI,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,EAAE,CAAA,EAAG,CAAA,EAAG,QAAQ,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,EAAE,CAAA,EAAG,EAAA,EAAI,UAAU,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,UAAU,CAAA;AACtI,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,CAAA,EAAG,SAAS,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,EAAE,CAAA,EAAG,CAAA,EAAG,WAAW,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,UAAU,CAAA;AACtI,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,UAAU,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,EAAE,CAAA,EAAG,CAAA,EAAG,WAAW,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,CAAA,EAAG,SAAS,CAAA;AACtI,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,UAAU,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,EAAE,CAAA,EAAG,EAAA,EAAI,WAAW,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,CAAA,EAAG,OAAO,CAAA;AACrI,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,WAAW,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,EAAE,CAAA,EAAG,EAAA,EAAI,UAAU,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,EAAE,CAAA,EAAG,EAAA,EAAI,SAAS,CAAA;AACzI,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,CAAA,EAAG,WAAW,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,UAAU,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,UAAU,CAAA;AACvI,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,EAAE,CAAA,EAAG,EAAA,EAAI,WAAW,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,EAAE,CAAA,EAAG,CAAA,EAAG,SAAS,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,UAAU,CAAA;AACxI,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,UAAU,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,QAAQ,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,CAAA,EAAG,UAAU,CAAA;AACpI,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,EAAE,CAAA,EAAG,EAAA,EAAI,UAAU,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,EAAE,CAAA,EAAG,EAAA,EAAI,SAAS,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,UAAU,CAAA;AACxI,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,CAAA,EAAG,UAAU,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,UAAU,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,EAAE,CAAA,EAAG,EAAA,EAAI,WAAW,CAAA;AACxI,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,SAAS,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,EAAE,CAAA,EAAG,CAAA,EAAG,UAAU,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,WAAW,CAAA;AACvI,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,EAAE,CAAA,EAAG,EAAA,EAAI,QAAQ,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,WAAW,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,CAAA,EAAG,UAAU,CAAA;AACtI,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,EAAE,CAAA,EAAG,EAAA,EAAI,SAAS,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,WAAW,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,EAAE,CAAA,EAAG,EAAA,EAAI,UAAU,CAAA;AACzI,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,CAAA,EAAG,UAAU,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,EAAE,CAAA,EAAG,EAAA,EAAI,WAAW,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,SAAS,CAAA;AACvI,IAAA,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,GAAI,CAAC,CAAA,EAAG,EAAA,EAAI,UAAU,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,GAAG,IAAI,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,GAAG,IAAI,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,GAAG,IAAI,CAAA;AAAG,IAAA,CAAA,GAAI,EAAA,CAAG,GAAG,IAAI,CAAA;AAAA,EACnH;AACA,EAAA,OAAO,EAAA,CAAG,CAAC,CAAA,GAAI,EAAA,CAAG,CAAC,IAAI,EAAA,CAAG,CAAC,CAAA,GAAI,EAAA,CAAG,CAAC,CAAA;AACvC;;;AC/CA,IAAM,uBAAA,GAA0B;AAAA,EAC5B,aAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,kBAAA;AAAA,EACA,YAAA;AAAA,EACA,oBAAA;AAAA,EACA,yBAAA;AAAA,EACA,sBAAA;AAAA,EACA,uBAAA;AAAA,EACA;AACJ,CAAA;AAEA,IAAM,2BAAA,GAA8B,CAAC,QAAQ,CAAA;AAC7C,IAAM,8BAAA,GAAiC,CAAC,QAAA,EAAU,QAAQ,CAAA;AAM1D,IAAM,yBAAA,GAA4B;AAAA,EAC9B,WAAA;AAAA,EAAa,aAAA;AAAA,EAAe,YAAA;AAAA,EAAc,cAAA;AAAA,EAAgB,aAAA;AAAA,EAC1D,gBAAA;AAAA,EAAkB,cAAA;AAAA,EAAgB,YAAA;AAAA,EAAc,iBAAA;AAAA,EAChD,gBAAA;AAAA,EAAkB,aAAA;AAAA,EAAe,aAAA;AAAA,EAAe,aAAA;AAAA,EAAe,wBAAA;AAAA,EAC/D,OAAA;AAAA,EAAS,kBAAA;AAAA,EAAoB,kBAAA;AAAA,EAAoB,qBAAA;AAAA,EACjD,iBAAA;AAAA,EAAmB,mBAAA;AAAA,EACnB,QAAA;AAAA,EAAU,YAAA;AAAA,EAAc,cAAA;AAAA,EAAgB,eAAA;AAAA,EAAiB,aAAA;AAAA,EACzD,eAAA;AAAA,EAAiB,cAAA;AAAA,EAAgB,cAAA;AAAA,EAAgB,cAAA;AAAA,EACjD,QAAA;AAAA,EAAU,YAAA;AAAA,EAAc,cAAA;AAAA,EAAgB,eAAA;AAAA,EAAiB,aAAA;AAAA,EACzD,SAAA;AAAA,EAAW,aAAA;AAAA,EAAe,eAAA;AAAA,EAAiB,gBAAA;AAAA,EAAkB,cAAA;AAAA,EAC7D,YAAA;AAAA,EAAc,SAAA;AAAA,EAAW,QAAA;AAAA,EACzB,SAAA;AAAA,EAAW,YAAA;AAAA,EAAc,YAAA;AAAA,EAAc,iBAAA;AAAA,EACvC;AACJ,CAAA;AAeO,IAAM,YAAN,MAAgB;AAAA,EAWnB,WAAA,CAAY,OAAA,EAAsB,OAAA,GAA4B,EAAC,EAAG;AARlE,IAAA,IAAA,CAAQ,YAAA,GAAmC,IAAA;AAC3C,IAAA,IAAA,CAAQ,SAAmB,EAAC;AAC5B,IAAA,IAAA,CAAQ,aAAA,GAAgB,KAAA;AACxB,IAAA,IAAA,CAAQ,YAAA,GAAe,KAAA;AACvB,IAAA,IAAA,CAAQ,oBAAA,GAAuB,EAAA;AAE/B,IAAA,IAAA,CAAQ,iBAAA,GAAyC,IAAA;AAG7C,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,OAAA,GAAU,EAAE,GAAG,OAAA,EAAQ;AAC5B,IAAA,IAAA,CAAK,SAAA,GAAY,QAAQ,SAAA,IAAa,EAAA;AAGtC,IAAA,KAAK,KAAK,eAAA,EAAgB;AAG1B,IAAA,IAAA,CAAK,iBAAA,GAAoB,qBAAA,CAAsB,SAAA,CAAU,CAAC,MAAA,KAAW;AACjE,MAAA,IAAI,MAAA,IAAU,IAAA,CAAK,aAAA,EAAe,IAAA,CAAK,gBAAgB,MAAM,CAAA;AAAA,IACjE,CAAC,CAAA;AAAA,EACL;AAAA;AAAA,EAGO,OAAA,GAAU;AACb,IAAA,IAAI,KAAK,iBAAA,EAAmB;AACxB,MAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,MAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA;AAAA,IAC7B;AAAA,EACJ;AAAA,EAEQ,gBAAgB,aAAA,EAAuB;AAC3C,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAS,SAAA,IAAa,CAAC,KAAK,aAAA,EAAe;AACrD,IAAA,IAAI,IAAA,CAAK,yBAAyB,aAAA,EAAe;AAEjD,IAAA,MAAM,EAAE,QAAA,GAAW,EAAA,EAAG,GAAI,IAAA,CAAK,OAAA;AAE/B,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AAC1B,MAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,UAAA,CAAW,YAAA,CAAa,EAAE,QAAA,EAAU,IAAA,CAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,IAC/E,CAAA,MAAO;AACH,MAAA,IAAA,CAAK,UAAU,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAC,CAAA;AAClD,MAAA,IAAA,CAAK,oBAAA,GAAuB,aAAA;AAAA,IAChC;AAAA,EACJ;AAAA,EAEA,MAAc,eAAA,GAAoC;AAC9C,IAAA,IAAI,IAAA,CAAK,cAAc,OAAO,KAAA;AAC9B,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,CAAC,IAAA,CAAK,OAAA,CAAQ,WAAW,MAAA,EAAQ;AAClD,MAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AACrB,MAAA,IAAA,CAAK,YAAA,GAAe,KAAA;AACpB,MAAA,OAAO,KAAA;AAAA,IACX;AAEA,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA;AACpB,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,IAAI,CAAA;AAC/C,IAAA,MAAM,QAAQ,KAAA,CAAM,IAAA,CAAK,KAAK,YAAA,CAAa,UAAA,IAAc,EAAE,CAAA;AAC3D,IAAA,IAAA,CAAK,SAAS,KAAK,CAAA;AAEnB,IAAA,MAAM,EAAE,QAAA,GAAW,EAAA,EAAG,GAAI,IAAA,CAAK,OAAA;AAE/B,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AAC1B,MAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,UAAA,CAAW,YAAA,CAAa,EAAE,QAAA,EAAU,IAAA,CAAK,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,IAC/E,CAAA,MAAO;AACH,MAAA,MAAM,YAAA,GAA8B;AAAA,QAChC,SAAA,EAAW,EAAA;AAAA,QACX,QAAA;AAAA,QACA,KAAA,EAAO,KAAK,OAAA,CAAQ,KAAA;AAAA,QACpB,OAAA,EAAS,KAAK,YAAA,CAAc,SAAA;AAAA,QAC5B,QAAQ,IAAA,CAAK;AAAA,OACjB;AACA,MAAA,MAAM,IAAA,CAAK,mBAAmB,YAAY,CAAA;AAAA,IAC9C;AAEA,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AACrB,IAAA,IAAA,CAAK,YAAA,GAAe,KAAA;AACpB,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEA,MAAc,mBAAmB,YAAA,EAA6B;AAC1D,IAAA,IAAI,OAAA,CAAQ,KAAK,SAAS,CAAA,OAAQ,SAAA,GAAY,IAAA,CAAK,iBAAiB,YAAY,CAAA;AAChF,IAAA,YAAA,CAAa,YAAY,IAAA,CAAK,SAAA;AAE9B,IAAA,MAAM,OAAA,GAAU,cAAc,GAAA,EAAI;AAClC,IAAA,MAAM,QAAA,GAAW,QAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,SAAA,KAAc,KAAK,SAAS,CAAA;AACnE,IAAA,IAAI,CAAC,QAAA,EAAU;AACX,MAAA,IAAI,MAAA,CAAY,aAAa,OAAA,EAAS;AAClC,QAAA,aAAA,CAAc,KAAK,qCAAA,EAAuC,YAAkD,CAAA,CACvG,IAAA,CAAK,CAAC,QAAA,KAAa;AAChB,UAAA,IAAI,CAAC,SAAS,MAAA,EAAQ;AAClB,YAAA,MAAA,CAAO,KAAA,CAAM,8BAAA,EAAgC,QAAA,CAAS,MAAM,CAAA;AAAA,UAChE,CAAA,MAAO;AACH,YAAA,aAAA,CAAc,OAAO,CAAC,MAAA,KAAW,CAAC,GAAG,MAAA,EAAQ,YAAY,CAAC,CAAA;AAAA,UAC9D;AAAA,QACJ,CAAC,EACA,KAAA,CAAM,CAAC,QAAQ,MAAA,CAAO,KAAA,CAAM,8BAAA,EAAgC,GAAG,CAAC,CAAA;AAAA,MACzE,CAAA,MAAA,IAAW,OAAY,KAAA,EAAO;AAC1B,QAAA,MAAA,CAAO,GAAA,CAAI,CAAA,wCAAA,EAA2C,MAAA,CAAY,QAAA,IAAY,SAAS,CAAA,CAAA,CAAG,CAAA;AAAA,MAC9F;AAEA,MAAA,IAAI,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,CAAA,IAAK,KAAK,OAAA,EAAS;AACxC,QAAA,IAAA,CAAK,UAAU,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAC,CAAA;AAClD,QAAA,IAAA,CAAK,oBAAA,GAAuB,sBAAsB,GAAA,EAAI;AAAA,MAC1D;AAAA,IACJ;AAAA,EACJ;AAAA,EAEQ,QAAA,CAAS,KAAA,EAAgB,OAAA,GAAoB,EAAC,EAAG;AACrD,IAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,EAAM,KAAA,KAAU;AAC3B,MAAA,IAAI,IAAA,EAAM,QAAA,KAAa,IAAA,CAAK,YAAA,EAAc;AACtC,QAAA,MAAM,OAAA,GAAU,IAAA;AAChB,QAAA,IAAI,OAAA,CAAQ,YAAA,CAAa,WAAW,CAAA,KAAM,IAAA,EAAM;AAAA,MACpD;AAEA,MAAA,IAAI,IAAA,EAAM,eAAc,EAAG;AACvB,QAAA,IAAA,CAAK,kBAAkB,IAAA,EAAqB,CAAC,GAAG,OAAA,EAAS,KAAK,CAAC,CAAA;AAAA,MACnE;AAEA,MAAA,IAAI,IAAA,EAAM,QAAA,KAAa,IAAA,CAAK,YAAA,EAAc;AACtC,QAAA,IAAA,CAAK,mBAAmB,IAAmB,CAAA;AAAA,MAC/C;AAEA,MAAA,MAAM,eAAe,IAAA,CAAK,SAAA,EAAW,QAAQ,MAAA,EAAQ,GAAG,EAAE,IAAA,EAAK;AAC/D,MAAA,IAAI,IAAA,EAAM,QAAA,KAAa,IAAA,CAAK,SAAA,IAAa,YAAA,EAAc;AACnD,QAAA,IAAA,CAAK,MAAA,CAAO,KAAK,YAAY,CAAA;AAC7B,QAAA;AAAA,MACJ;AAEA,MAAA,IAAI,CAAC,IAAA,EAAM,aAAA,EAAc,EAAG;AAC5B,MAAA,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,UAAU,GAAG,CAAC,GAAG,OAAA,EAAS,KAAK,CAAC,CAAA;AAAA,IAClE,CAAC,CAAA;AAAA,EACL;AAAA,EAEQ,mBAAmB,OAAA,EAAsB;AAC7C,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,WAAA,EAAY;AAE5C,IAAA,IAAI,YAAY,KAAA,EAAO;AACnB,MAAA,MAAM,GAAA,GAAM,OAAA;AACZ,MAAA,IAAI,IAAI,GAAA,EAAK,OAAA,CAAQ,YAAA,CAAa,KAAA,EAAO,IAAI,GAAG,CAAA;AAAA,IACpD;AAEA,IAAA,KAAA,MAAW,QAAQ,uBAAA,EAAyB;AACxC,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,YAAA,CAAa,IAAI,GAAG,IAAA,EAAK;AAC/C,MAAA,IAAI,KAAA,EAAO,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAAA,IACrC;AAEA,IAAA,IAAI,2BAAA,CAA4B,QAAA,CAAS,OAAO,CAAA,EAAG;AAC/C,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,YAAA,CAAa,OAAO,GAAG,IAAA,EAAK;AAClD,MAAA,IAAI,KAAA,EAAO,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAAA,IACrC;AAEA,IAAA,IAAI,YAAY,OAAA,EAAS;AACrB,MAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,YAAA,CAAa,MAAM,GAAG,WAAA,EAAY;AAC5D,MAAA,IAAI,SAAA,IAAa,8BAAA,CAA+B,QAAA,CAAS,SAAS,CAAA,EAAG;AACjE,QAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,YAAA,CAAa,OAAO,GAAG,IAAA,EAAK;AAClD,QAAA,IAAI,KAAA,EAAO,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAAA,MACrC;AAAA,IACJ;AAEA,IAAA,IAAI,YAAY,QAAA,EAAU;AACtB,MAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,gBAAA,CAAiB,QAAQ,CAAA;AACjD,MAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,MAAA,KAAW;AACxB,QAAA,MAAM,UAAA,GAAa,MAAA,CAAO,WAAA,EAAa,IAAA,EAAK;AAC5C,QAAA,IAAI,UAAA,EAAY,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA;AAAA,MAC/C,CAAC,CAAA;AAAA,IACL;AAAA,EACJ;AAAA,EAEQ,QAAA,CAAS,OAAgB,OAAA,EAAwC;AACrE,IAAA,IAAI,WAAA,GAAgC,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,CAAA;AACpD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACrC,MAAA,IAAI,CAAC,WAAA,IAAe,CAAC,WAAA,CAAY,aAAA,IAAiB,OAAO,MAAA;AACzD,MAAA,WAAA,GAAc,MAAM,IAAA,CAAK,WAAA,CAAY,UAAU,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,IAC/D;AACA,IAAA,OAAO,WAAA;AAAA,EACX;AAAA,EAEQ,UAAU,KAAA,EAAgB;AAC9B,IAAA,MAAM,aAAA,GAAgB,sBAAsB,GAAA,EAAI;AAChD,IAAA,IACI,aAAA,KAAkB,OAAY,UAAA,KAC7B,IAAA,CAAK,yBAAyB,EAAA,IAAM,IAAA,CAAK,oBAAA,KAAyB,MAAA,CAAY,UAAA,CAAA,EACjF;AACE,MAAA;AAAA,IACJ;AAEA,IAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS;AACpB,MAAA,IAAI,IAAA,EAAM,QAAA,KAAa,IAAA,CAAK,YAAA,EAAc;AACtC,QAAA,MAAM,OAAA,GAAU,IAAA;AAChB,QAAA,IAAI,OAAA,CAAQ,YAAA,CAAa,WAAW,CAAA,KAAM,IAAA,EAAM;AAChD,QAAA,IAAA,CAAK,oBAAoB,IAAgB,CAAA;AAAA,MAC7C;AAEA,MAAA,IAAI,IAAA,EAAM,QAAA,KAAa,IAAA,CAAK,SAAA,EAAW;AACnC,QAAA,IAAI,CAAC,IAAA,EAAM,aAAA,EAAc,EAAG;AAC5B,QAAA,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,UAAU,CAAC,CAAA;AAC1C,QAAA;AAAA,MACJ;AAEA,MAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,SAAA,EAAW,IAAA,EAAM,CAAA,EAAG;AAErC,MAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,iBAAiB,CAAA,EAAG;AACjC,QAAA,IAAA,CAAK,oBAAoB,IAAA,CAAK,SAAA;AAAA,MAClC;AAEA,MAAA,MAAM,eAAe,IAAA,CAAK,iBAAA,EAAmB,QAAQ,MAAA,EAAQ,GAAG,EAAE,IAAA,EAAK;AACvE,MAAA,IAAI,CAAC,YAAA,EAAc;AAEnB,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,cAAA,CAAe,YAAY,CAAA;AAEpD,MAAA,IAAI,WAAA,IAAe,YAAA,IAAgB,IAAA,CAAK,iBAAA,EAAmB;AACvD,QAAA,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,iBAAA,CAAkB,OAAA,CAAQ,cAAc,WAAW,CAAA;AAAA,MAC7E,CAAA,MAAA,IAAW,KAAK,iBAAA,EAAmB;AAC/B,QAAA,IAAA,CAAK,YAAY,IAAA,CAAK,iBAAA;AAAA,MAC1B;AAAA,IACJ,CAAC,CAAA;AAAA,EACL;AAAA,EAEQ,eAAe,KAAA,EAA8B;AACjD,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,IAAA,MAAM,EAAE,QAAA,GAAW,EAAA,EAAG,GAAI,IAAA,CAAK,OAAA;AAC/B,IAAA,OAAO,WAAW,YAAA,CAAa,aAAA,CAAc,QAAA,EAAU,IAAA,CAAK,WAAW,KAAK,CAAA;AAAA,EAChF;AAAA,EAEQ,oBAAoB,OAAA,EAAmB;AAC3C,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,WAAA,EAAY;AAC5C,IAAA,IAAI,CAAC,OAAA,CAAQ,kBAAA,EAAoB,OAAA,CAAQ,qBAAqB,EAAC;AAE/D,IAAA,KAAA,MAAW,QAAQ,uBAAA,EAAyB;AACxC,MAAA,IAAA,CAAK,kBAAA,CAAmB,SAAS,IAAI,CAAA;AAAA,IACzC;AAEA,IAAA,IAAI,2BAAA,CAA4B,QAAA,CAAS,OAAO,CAAA,EAAG;AAC/C,MAAA,IAAA,CAAK,kBAAA,CAAmB,SAAS,OAAO,CAAA;AAAA,IAC5C;AAEA,IAAA,IAAI,YAAY,OAAA,EAAS;AACrB,MAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,YAAA,CAAa,MAAM,GAAG,WAAA,EAAY;AAC5D,MAAA,IAAI,SAAA,IAAa,8BAAA,CAA+B,QAAA,CAAS,SAAS,CAAA,EAAG;AACjE,QAAA,IAAA,CAAK,kBAAA,CAAmB,SAAS,OAAO,CAAA;AAAA,MAC5C;AAAA,IACJ;AAEA,IAAA,IAAI,YAAY,QAAA,EAAU;AACtB,MAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,gBAAA,CAAiB,QAAQ,CAAA;AACjD,MAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,MAAA,KAAW;AACxB,QAAA,MAAM,QAAA,GAAW,MAAA;AACjB,QAAA,IAAI,CAAC,QAAA,CAAS,kBAAA,EAAoB,QAAA,CAAS,qBAAqB,EAAC;AACjE,QAAA,IAAI,QAAA,CAAS,kBAAA,CAAmB,aAAa,CAAA,KAAM,MAAA,EAAW;AAC1D,UAAA,QAAA,CAAS,kBAAA,CAAmB,aAAa,CAAA,GAAI,MAAA,CAAO,WAAA,IAAe,EAAA;AAAA,QACvE;AACA,QAAA,MAAM,YAAA,GAAe,QAAA,CAAS,kBAAA,CAAmB,aAAa,EAAE,IAAA,EAAK;AACrE,QAAA,IAAI,YAAA,EAAc;AACd,UAAA,MAAM,WAAA,GAAc,IAAA,CAAK,cAAA,CAAe,YAAY,CAAA;AACpD,UAAA,MAAA,CAAO,WAAA,GAAc,WAAA,IAAe,QAAA,CAAS,kBAAA,CAAmB,aAAa,CAAA;AAAA,QACjF;AAAA,MACJ,CAAC,CAAA;AAAA,IACL;AAAA,EACJ;AAAA,EAEQ,kBAAA,CAAmB,SAAmB,IAAA,EAAc;AACxD,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,YAAA,CAAa,IAAI,CAAA;AAC9C,IAAA,IAAI,CAAC,YAAA,EAAc;AAEnB,IAAA,IAAI,OAAA,CAAQ,kBAAA,CAAoB,IAAI,CAAA,KAAM,MAAA,EAAW;AACjD,MAAA,OAAA,CAAQ,kBAAA,CAAoB,IAAI,CAAA,GAAI,YAAA;AAAA,IACxC;AAEA,IAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,kBAAA,CAAoB,IAAI,EAAE,IAAA,EAAK;AAC7D,IAAA,IAAI,CAAC,aAAA,EAAe;AAEpB,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,cAAA,CAAe,aAAa,CAAA;AACrD,IAAA,IAAI,WAAA,EAAa,OAAA,CAAQ,YAAA,CAAa,IAAA,EAAM,WAAW,CAAA;AAAA,iBAC1C,YAAA,CAAa,IAAA,EAAM,OAAA,CAAQ,kBAAA,CAAoB,IAAI,CAAC,CAAA;AAAA,EACrE;AAAA,EAEQ,iBAAiB,YAAA,EAAqC;AAC1D,IAAA,OAAO,GAAA,CAAI,CAAA,EAAG,YAAA,CAAa,QAAQ,CAAA,CAAA,EAAI,aAAa,MAAA,CAAO,IAAA,CAAK,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,EAC1E;AAAA,EAEQ,iBAAA,CAAkB,MAAmB,OAAA,EAAmB;AAC5D,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,OAAO,WAAW,WAAA,EAAa;AACpD,IAAA,MAAM,OAAA,GAAU,KAAK,QAAA,CAAS,KAAA,CAAM,KAAK,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA,EAAG,OAAO,CAAA;AAC1E,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,WAAA,EAAY;AAC5C,IAAA,MAAM,SAAA,GAAY,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAChD,IAAA,SAAA,CAAU,MAAM,UAAA,GAAa,QAAA;AAC7B,IAAA,SAAA,CAAU,MAAM,QAAA,GAAW,UAAA;AAC3B,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,SAAS,CAAA;AAEnC,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,gBAAA,CAAiB,OAAO,CAAA;AAChD,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,gBAAA,CAAiB,SAAS,CAAA;AAElD,IAAA,KAAA,MAAW,QAAQ,yBAAA,EAA2B;AAC1C,MAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,gBAAA,CAAiB,IAAI,CAAA;AAC5C,MAAA,MAAM,YAAA,GAAe,QAAA,CAAS,gBAAA,CAAiB,IAAI,CAAA;AACnD,MAAA,IAAI,KAAA,IAAS,UAAU,YAAA,EAAc;AACjC,QAAA,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,IAAA,EAAM,KAAK,CAAA;AAAA,MACtC;AAAA,IACJ;AAEA,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,SAAS,CAAA;AACnC,IAAA,IAAA,CAAK,gBAAgB,OAAO,CAAA;AAAA,EAChC;AACJ;;;ACtUO,IAAM,CAAA,IAAgB,CACzB,QAAA,EACA,MAAA,EAAA,GACG,IAAA,KACM;AACT,EAAA,OAAO,WAAY,YAAA,CAAa,CAAA,CAAE,QAAA,EAAU,MAAA,EAAQ,GAAG,IAAI,CAAA;AAC/D,CAAA;AAEO,IAAM,OAAA,GAAU,WAAY,YAAA,CAAa","file":"index.js","sourcesContent":["/**\n * Tiny framework-agnostic reactive value holder — our replacement for a\n * Svelte `Writable<T>`. The shape is deliberately similar so the mental\n * model is identical: subscribe/set/update/get.\n *\n * Usage:\n * const locale = createSignal('en-us');\n * locale.subscribe((v) => console.log('locale is now', v));\n * locale.set('fr-fr');\n * locale.get(); // 'fr-fr'\n *\n * Subscribe is called synchronously with the current value on registration\n * (same semantics as a Svelte store).\n */\nexport type Subscriber<T> = (value: T) => void;\nexport type Unsubscriber = () => void;\nexport type Updater<T> = (value: T) => T;\n\nexport interface Signal<T> {\n /** Register a subscriber; it's called immediately with the current value. Returns an unsubscribe function. */\n subscribe(run: Subscriber<T>): Unsubscriber;\n /** Set the value and notify subscribers. */\n set(value: T): void;\n /** Update the value via a function and notify subscribers. */\n update(fn: Updater<T>): void;\n /** Read the current value without subscribing. */\n get(): T;\n}\n\nexport function createSignal<T>(initial: T): Signal<T> {\n let value: T = initial;\n const subscribers = new Set<Subscriber<T>>();\n\n const subscribe = (run: Subscriber<T>): Unsubscriber => {\n subscribers.add(run);\n run(value);\n return () => {\n subscribers.delete(run);\n };\n };\n\n const set = (next: T): void => {\n if (Object.is(value, next)) return;\n value = next;\n for (const run of subscribers) run(value);\n };\n\n const update = (fn: Updater<T>): void => {\n set(fn(value));\n };\n\n const get = (): T => value;\n\n return { subscribe, set, update, get };\n}\n\n/** Synchronously read a Signal's value. Mirrors svelte's `get(store)`. */\nexport function getValue<T>(signal: Signal<T>): T {\n return signal.get();\n}\n","/**\n * Lightweight debug logger. Styled in browsers (via %c), plain text in Node.\n * Replaces the pre-existing `echo` module from the Svelte SDK with a simpler,\n * SSR-safe equivalent.\n */\n\nconst STYLES = {\n log: 'display:inline-block;background:rgb(239,239,244);color:black;font-weight:bold;padding:3px 7px;border-radius:3px',\n warn: 'display:inline-block;background:gold;color:black;font-weight:bold;padding:3px 7px;border-radius:3px',\n error: 'display:inline-block;background:#e0005a;color:#fff;font-weight:bold;padding:3px 7px;border-radius:3px',\n};\n\nconst supportsStyle = typeof window !== 'undefined';\n\nfunction emit(level: 'log' | 'warn' | 'error', label: string, args: unknown[]) {\n // Browsers render %c style. Node just gets the plain string.\n if (supportsStyle) {\n // eslint-disable-next-line no-console\n console[level](`%c${label}`, STYLES[level], ...args);\n } else {\n // eslint-disable-next-line no-console\n console[level](`[${label}]`, ...args);\n }\n}\n\nexport class Logger {\n debugEnabled: boolean;\n\n constructor(debugEnabled = false) {\n this.debugEnabled = debugEnabled;\n }\n\n log(...args: unknown[]) {\n if (!this.debugEnabled) return;\n emit('log', 'Langsys Debug', args);\n }\n\n warn(...args: unknown[]) {\n emit('warn', 'Langsys Warning', args);\n }\n\n error(...args: unknown[]) {\n emit('error', 'Langsys Error', args);\n }\n}\n\nexport const logger = new Logger(false);\n","import { createSignal } from './signal.js';\nimport type { HttpResponse, ResponseObject } from './types/api.js';\nimport type { iLangsysConfig } from './types/config.js';\nimport { logger } from './logger.js';\n\ntype Method = 'GET' | 'POST' | 'DELETE' | 'PATCH' | 'PUT';\n\nclass LangsysAppAPIClass {\n private apiurl = 'https://api.langsys.dev/api';\n public config: iLangsysConfig;\n private headers: { 'Content-Type': string; 'x-Authorization': string };\n\n constructor() {\n this.config = {\n projectid: '',\n key: '',\n sUserLocale: createSignal(''),\n baseLocale: 'en',\n };\n this.headers = {\n 'Content-Type': 'application/json; charset=utf-8',\n 'x-Authorization': this.config.key,\n };\n }\n\n public setup(config: iLangsysConfig) {\n if (config?.key && config?.projectid) {\n this.config = config;\n this.headers['x-Authorization'] = this.config.key;\n }\n }\n\n /** Optional hook to point the client at a different API host. */\n public setBaseUrl(url: string) {\n this.apiurl = url.replace(/\\/$/, '');\n }\n\n public async validate(config: iLangsysConfig) {\n this.setup(config);\n return await this.get('authorize-project/[projectid]');\n }\n\n public async getTranslations(locale: string) {\n return await this.get('projects/[projectid]/translations', { locale });\n }\n\n public async post(path: string, data: Record<string, unknown> = {}) {\n return await this.send('POST', path, data);\n }\n public async get(path: string, data: Record<string, unknown> = {}) {\n return await this.send('GET', path, data);\n }\n public async delete(path: string, data: Record<string, unknown> = {}) {\n return await this.send('DELETE', path, data);\n }\n public async patch(path: string, data: Record<string, unknown> = {}) {\n return await this.send('PATCH', path, data);\n }\n public async put(path: string, data: Record<string, unknown> = {}) {\n return await this.send('PUT', path, data);\n }\n\n private async send(method: Method, path: string, data: Record<string, unknown> = {}): Promise<ResponseObject> {\n if (!this.config.projectid || !this.config.key) {\n return {\n status: false,\n errors: ['Missing projectid or API key in configuration'],\n http: {\n status: 0,\n statusText: 'Configuration Error',\n url: `${this.apiurl}/${path}`,\n data: JSON.stringify(data),\n },\n };\n }\n\n // API calls should not include a leading slash.\n if (path.startsWith('/')) path = path.substring(1);\n\n // Replace [projectid] token with the actual configured projectid.\n if (path.includes('/[projectid]')) {\n path = path.replaceAll('/[projectid]', `/${this.config.projectid}`);\n }\n\n try {\n const querystring =\n method === 'GET'\n ? '?' + new URLSearchParams(data as Record<string, string>).toString()\n : '';\n\n const query = await fetch(`${this.apiurl}/${path}${querystring === '?' ? '' : querystring}`, {\n headers: this.headers,\n method,\n body: method === 'GET' ? undefined : JSON.stringify(data),\n });\n\n const responseData = (await query.json()) as ResponseObject;\n const http: HttpResponse = {\n status: query.status,\n statusText: query.statusText,\n url: query.url,\n data: JSON.stringify(data),\n };\n responseData.http = http;\n\n if (!query.ok) {\n logger.warn('LangsysAppAPI failed to query', responseData);\n return {\n status: false,\n errors: [`HTTP ${query.status}: ${query.statusText}`],\n data: responseData,\n http,\n };\n }\n\n return responseData;\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Unknown error occurred';\n logger.error('LangsysAppAPI Error:', errorMessage);\n logger.error('Request details:', {\n method,\n url: `${this.apiurl}/${path}`,\n data,\n });\n return {\n status: false,\n errors: ['Error communicating with API Server', errorMessage],\n http: {\n status: 0,\n statusText: 'Network Error',\n url: `${this.apiurl}/${path}`,\n data: JSON.stringify(data),\n },\n };\n }\n }\n}\n\nexport const LangsysAppAPI = new LangsysAppAPIClass();\nexport default LangsysAppAPI;\n","import { createSignal, type Signal } from './signal.js';\n\n/**\n * Create a Signal whose value is persisted to localStorage (when available).\n * Falls back to in-memory behavior during SSR or when storage is unavailable\n * or quota-exceeded. Stored value is JSON-encoded.\n */\nexport function persist<T>(key: string, initial: T): Signal<T> {\n const storage = getSafeStorage();\n let seed = initial;\n\n if (storage) {\n try {\n const raw = storage.getItem(key);\n if (raw !== null) seed = JSON.parse(raw) as T;\n } catch {\n // Corrupt value; fall through to initial.\n }\n }\n\n const signal = createSignal<T>(seed);\n\n if (storage) {\n signal.subscribe((value) => {\n try {\n storage.setItem(key, JSON.stringify(value));\n } catch {\n // Quota / serialization failure — silently keep going; in-memory stays authoritative.\n }\n });\n }\n\n return signal;\n}\n\nfunction getSafeStorage(): Storage | null {\n if (typeof window === 'undefined') return null;\n try {\n const s = window.localStorage;\n // Some browsers throw on access in private-mode iframes.\n s.getItem('__langsys_probe__');\n return s;\n } catch {\n return null;\n }\n}\n","import { createSignal } from './signal.js';\nimport { persist } from './persist.js';\nimport type { iCategories } from './types/translations.js';\nimport type { iContentBlock } from './types/content-block.js';\nimport type { iLangsysConfig } from './types/config.js';\n\nconst initialTranslations: iCategories = {\n __uncategorized__: {\n __category__: '__uncategorized__',\n __symbol__: '__uncategorized__',\n },\n};\n\nexport const sTranslations = persist<iCategories>('translations', initialTranslations);\n\nexport const currentlyLoadedLocale = createSignal<string>('');\n\nexport const contentBlocks = createSignal<iContentBlock[]>([]);\n\nexport const config: iLangsysConfig = {\n projectid: '',\n key: '',\n sUserLocale: createSignal<string>(''),\n baseLocale: 'en',\n debug: false,\n key_type: 'read',\n};\n","/**\n * Substitute `{name}`-style placeholders in a translated string with values\n * from `params`. Unknown placeholders are left untouched so missing data is\n * visible to the developer rather than silently rendering empty strings.\n *\n * Dates are serialized to ISO 8601; everything else goes through `String()`.\n * Designed as a forward-compatible stop-gap until ICU MessageFormat is wired\n * in for plurals/select/date formatting.\n */\nexport function interpolate(template: string, params: Record<string, unknown>): string {\n return template.replace(/\\{([^{}]+)\\}/g, (match, rawKey: string) => {\n const key = rawKey.trim();\n if (!(key in params)) return match;\n const value = params[key];\n if (value === undefined || value === null) return match;\n if (value instanceof Date) return value.toISOString();\n return String(value);\n });\n}\n","import { LangsysAppAPI } from './api.js';\nimport { interpolate } from './interpolate.js';\nimport { Logger } from './logger.js';\nimport { createSignal, type Signal } from './signal.js';\nimport { currentlyLoadedLocale, sTranslations } from './stores.js';\nimport type { ResponseObject } from './types/api.js';\nimport type { iLangsysConfig } from './types/config.js';\nimport type { ParamsFor, TArgs, TFunction } from './types/translation-fn.js';\nimport type { iCategories, iTranslations } from './types/translations.js';\n\ninterface iTokenUpdate {\n projectid: string;\n category: string;\n token: string;\n}\n\nfunction isObject(test: unknown): test is Record<string, unknown> {\n return typeof test === 'object' && !Array.isArray(test) && test !== null;\n}\nfunction sameToken(a: iTokenUpdate, b: iTokenUpdate): boolean {\n return a.projectid === b.projectid && a.category === b.category && a.token === b.token;\n}\n\n/**\n * Lifecycle for app translations:\n * - on-miss: any `t(cat, phrase)` whose phrase isn't in the catalog is\n * queued as a \"missing token\" and (with write keys) flushed to the API.\n * - locale changes trigger `change()` which fetches and replaces.\n * - consumers can `subscribe(fn)` to react to translation snapshots.\n * - frameworks subscribe to `tSignal` (which re-emits a fresh `TFunction`\n * every time translations or the loaded locale change) so reactive\n * templates re-render automatically.\n */\nexport class Translations {\n private config: iLangsysConfig;\n private locale: string;\n private lastLoaded: Record<string, number> = {};\n private missingTokens: iTokenUpdate[] = [];\n private timer: ReturnType<typeof setInterval> | null = null;\n private flushScheduled = false;\n private isFirstClientRun = true;\n public debug: Logger;\n\n /** Reactive holder for the current translation function. Re-emits on every catalog/locale change. */\n public tSignal: Signal<TFunction>;\n\n constructor(config: iLangsysConfig) {\n this.config = config;\n this.debug = new Logger(!!config.debug);\n this.locale = config.baseLocale || '';\n\n this.tSignal = createSignal<TFunction>(this.buildTFn());\n sTranslations.subscribe(() => this.tSignal.set(this.buildTFn()));\n currentlyLoadedLocale.subscribe(() => this.tSignal.set(this.buildTFn()));\n\n if (config.key && config.projectid) this.setup(config);\n }\n\n /** Current translation function. Reads fresh state on every call. */\n public get t(): TFunction {\n return this.tSignal.get();\n }\n\n /** Subscribe to translation snapshot changes. Fires immediately with the current value. */\n public subscribe(run: (value: iCategories) => void) {\n return sTranslations.subscribe(run);\n }\n\n /**\n * Content-block-keyed lookup used by the DOM `Translate` class.\n * Returns the per-token translation inside a content block, or `null` if\n * either the content block or the inner token is missing. Never registers\n * a missing token — the DOM class manages its own lifecycle via content blocks.\n */\n public lookupContent(category: string, customId: string, token: string): string | null {\n const cats = sTranslations.get();\n const lookupCat = category || '__uncategorized__';\n const contentData = cats[lookupCat]?.[customId];\n if (!contentData || typeof contentData !== 'object') return null;\n const value = (contentData as unknown as Record<string, string>)[token];\n return typeof value === 'string' ? value : null;\n }\n\n private buildTFn(): TFunction {\n return <P extends string>(category: string, phrase: P, ...args: TArgs<P>): string => {\n const cats = sTranslations.get();\n const lookupCat = category || '__uncategorized__';\n const value = cats[lookupCat]?.[phrase];\n\n let translated: string;\n if (typeof value === 'string' && value.length > 0) {\n this.debug.log('TRANSLATION FOUND', [lookupCat, phrase, value]);\n translated = value;\n } else {\n this.missingToken(lookupCat, phrase);\n translated = phrase;\n }\n\n const params = args[0] as ParamsFor<P> | undefined;\n return params ? interpolate(translated, params as Record<string, unknown>) : translated;\n };\n }\n\n private missingToken(category: string, token: string | undefined | null) {\n if (token === undefined || token === null) {\n return this.debug.warn(`Received undefined or null token for category: ${category}`);\n }\n\n if (this.config.key_type !== 'write') {\n this.debug.log(`Skipping missing token collection (API key is ${this.config.key_type || 'unknown'}):`, {\n category,\n token,\n });\n return;\n }\n\n // Skip content-block id lookups (32-hex md5 strings).\n if (/^[0-9a-f]{32}$/.test(token)) return;\n if (token === 'toJSON') {\n this.debug.error(`Received toJSON as token ${category}:${token}`, token);\n return;\n }\n if (token === '') {\n this.debug.warn('Received empty token', token);\n return;\n }\n\n const missingToken: iTokenUpdate = { category, token, projectid: this.config.projectid };\n if (!this.missingTokens.some((t) => sameToken(t, missingToken))) {\n this.debug.log('MISSING TOKEN LOOKUP FAILED', [missingToken, [...this.missingTokens], { ...sTranslations.get() }]);\n this.missingTokens.push(missingToken);\n this.scheduleTokenFlush();\n }\n }\n\n private scheduleTokenFlush() {\n const strategy = this.config.ssrTokenStrategy || 'client';\n const isSSR = typeof window === 'undefined';\n\n if (isSSR) {\n switch (strategy) {\n case 'server':\n if (!this.flushScheduled) {\n this.flushScheduled = true;\n queueMicrotask(() => {\n this.updateTokens().then(() => {\n this.flushScheduled = false;\n });\n });\n }\n break;\n\n case 'auto':\n if (this.missingTokens.length <= 5 && !this.flushScheduled) {\n this.flushScheduled = true;\n queueMicrotask(() => {\n this.updateTokens().then(() => {\n this.flushScheduled = false;\n });\n });\n }\n break;\n\n case 'client':\n default:\n this.debug.log('SSR: Queuing tokens for client-side transmission');\n break;\n }\n } else {\n // Client — flush immediately on first discovery, then let the 3s timer take over.\n if (!this.flushScheduled && !this.timer) {\n this.flushScheduled = true;\n queueMicrotask(() => {\n this.updateTokens().then(() => {\n this.flushScheduled = false;\n });\n });\n }\n }\n }\n\n public setup(config: iLangsysConfig) {\n this.config = config;\n if (!this.config.projectid || !this.config.key) return;\n\n if (this.config.debug) this.debug.debugEnabled = this.config.debug;\n if (config.baseLocale) this.locale = config.baseLocale;\n\n this.debug.log('TRANSLATION SETUP INITIATED', this.config);\n\n if (typeof window !== 'undefined') {\n if (this.isFirstClientRun && this.missingTokens.length > 0) {\n this.isFirstClientRun = false;\n const strategy = this.config.ssrTokenStrategy || 'client';\n if (strategy === 'client' || (strategy === 'auto' && this.missingTokens.length > 5)) {\n this.debug.log(`Post-hydration: Flushing ${this.missingTokens.length} SSR-collected tokens`);\n queueMicrotask(() => this.updateTokens());\n }\n }\n\n if (this.timer) clearInterval(this.timer);\n this.timer = setInterval(() => this.updateTokens(), 3000);\n this.debug.log('UPDATE TOKEN INTERVAL', this.timer);\n } else {\n const strategy = this.config.ssrTokenStrategy || 'client';\n this.debug.log(`SSR environment detected - using '${strategy}' token strategy`);\n }\n }\n\n /**\n * React to a user-locale change. Fetches translations if we haven't\n * loaded this locale within the last 60s (or if forced).\n */\n public async change(locale: string, force = false, skipFetch = false): Promise<boolean> {\n if (!locale) return false;\n if (!this.config.projectid || !this.config.key) return false;\n\n if (skipFetch) {\n this.debug.log('Using pre-fetched translations for locale', locale);\n this.locale = locale;\n this.lastLoaded[locale] = new Date().getTime() / 1000;\n return true;\n }\n\n const now = new Date().getTime() / 1000;\n if (\n !force &&\n locale === this.locale &&\n this.lastLoaded[locale] &&\n Math.abs(this.lastLoaded[locale] - now) < 60\n ) {\n return false;\n }\n\n this.debug.log('Locale change detected!', locale);\n this.locale = locale;\n await this.getTranslations();\n return true;\n }\n\n private async updateTokens(): Promise<boolean> {\n if (!this.missingTokens.length) return false;\n if (!this.config.projectid || !this.config.key) return false;\n if (this.config.key_type !== 'write') {\n this.debug.log(`Skipping token updates (API key is ${this.config.key_type || 'unknown'})`);\n return false;\n }\n\n if (typeof window === 'undefined') {\n this.debug.log(`Sending ${this.missingTokens.length} tokens from SSR`);\n }\n\n const currentData = sTranslations.get();\n this.missingTokens = this.missingTokens.filter((tokenObj) => {\n tokenObj.projectid = this.config.projectid;\n if (tokenObj.category in currentData && tokenObj.token in currentData[tokenObj.category]) {\n this.debug.log('Missing token already exists! Skipping:', {\n category: tokenObj.category,\n token: tokenObj.token,\n existing: currentData[tokenObj.category][tokenObj.token],\n });\n return false;\n }\n return true;\n });\n\n if (!this.missingTokens.length) return false;\n\n this.debug.log('CREATE MISSING TOKENS', this.missingTokens);\n try {\n const response: ResponseObject = await LangsysAppAPI.post('projects/[projectid]/tokens', {\n tokens: this.missingTokens,\n });\n if (!response.status) {\n if (response.errors) {\n this.debug.log('TOKEN UPDATE FAIL', this.missingTokens);\n this.debug.error('Error updating project tokens', response.errors);\n }\n return false;\n }\n\n this.missingTokens.forEach((tokenObj) => {\n if (!currentData[tokenObj.category]) {\n currentData[tokenObj.category] = {\n __category__: tokenObj.category,\n __symbol__: tokenObj.category,\n } as iTranslations;\n }\n currentData[tokenObj.category][tokenObj.token] = tokenObj.token;\n currentData[tokenObj.category]['__category__'] = tokenObj.category;\n });\n sTranslations.set({ ...currentData });\n this.missingTokens = [];\n return true;\n } catch (err) {\n this.debug.log('CREATE MISSING TOKEN FAILURE', this.missingTokens);\n this.debug.error('Error updating project tokens', err);\n return false;\n }\n }\n\n private async getTranslations(): Promise<void> {\n if (!LangsysAppAPI.config.projectid && this.config.projectid) {\n LangsysAppAPI.setup(this.config);\n }\n\n const response: ResponseObject = await LangsysAppAPI.getTranslations(this.locale);\n this.debug.log('GET TRANSLATIONS API RESPONSE', response);\n if (response.errors) {\n this.debug.error('Error', response.errors[0]);\n return;\n }\n\n const trans = response.data as iCategories;\n\n if (!isObject(trans['__uncategorized__'])) {\n trans['__uncategorized__'] = {\n __category__: '__uncategorized__',\n __symbol__: '__uncategorized__',\n } as iTranslations;\n }\n\n for (const cat of Object.keys(trans)) {\n trans[cat]['__category__'] = cat;\n }\n\n this.debug.log('GET TRANSLATIONS ' + this.locale, trans);\n\n sTranslations.set(trans);\n // Small delay so consumers see translations + locale updates on the same tick.\n setTimeout(() => currentlyLoadedLocale.set(this.locale), 100);\n this.lastLoaded[this.locale] = new Date().getTime() / 1000;\n }\n}\n\nexport default Translations;\n","import { LangsysAppAPI } from './api.js';\nimport { Logger } from './logger.js';\nimport { config as configStore, currentlyLoadedLocale, sTranslations } from './stores.js';\nimport { Translations } from './translations.js';\nimport type { ResponseObject } from './types/api.js';\nimport type { iLangsysConfig, iLangsysInitConfig } from './types/config.js';\nimport type { iCountryDialCode, iCountryList } from './types/countries.js';\nimport type { iCurrencyList } from './types/currencies.js';\nimport type { iLocaleData, iLocaleDefault, iLocaleFlat } from './types/locales.js';\nimport type { TFunction } from './types/translation-fn.js';\nimport type { iTranslations } from './types/translations.js';\n\nclass LangsysAppClass {\n private config: iLangsysConfig;\n\n public Translations: Translations;\n public translationsLoadingPromise: Promise<unknown> = Promise.resolve();\n\n private locales: Record<string, iLocaleData[]> = {};\n\n private countries: iCountryList = [];\n private countriesLocale = '';\n\n private dialCodes: iCountryDialCode[] = [];\n private dialCodesLocale = '';\n\n private currencies: iCurrencyList = [];\n private currenciesLocale = '';\n\n public debug: Logger;\n\n constructor() {\n this.config = configStore;\n this.debug = new Logger(!!this.config.debug);\n this.Translations = new Translations(this.config);\n }\n\n /** Current translation function. Reads fresh state on every call. */\n public get t(): TFunction {\n return this.Translations.t;\n }\n\n public async refresh() {\n const locale = this.config.sUserLocale.get();\n this.locales = {};\n return this.Translations.change(locale, true);\n }\n\n /**\n * Initialize Langsys. Configuration must include at least `projectid`,\n * `key`, and `UserLocaleStore` (any Signal<string>).\n */\n public async init(initConfig: iLangsysInitConfig): Promise<ResponseObject> {\n const projectid = initConfig.projectid;\n const key = initConfig.key;\n const UserLocaleStore = initConfig.UserLocaleStore;\n let baseLocale = initConfig.baseLocale || 'en';\n const debug = initConfig.debug || false;\n const emulateFailureToLoad = initConfig.emulateFailureToLoad || false;\n const ssrTokenStrategy = initConfig.ssrTokenStrategy || 'client';\n const initialTranslations = initConfig.initialTranslations;\n const initialTranslationsLocale = initConfig.initialTranslationsLocale;\n\n this.debug.debugEnabled = debug;\n\n if (debug && initialTranslations) {\n this.debug.log('SSR initial translations config:', {\n hasInitialTranslations: !!initialTranslations,\n initialTranslationsLocale,\n categoriesProvided: initialTranslations ? Object.keys(initialTranslations).length : 0,\n categories: initialTranslations ? Object.keys(initialTranslations) : [],\n });\n }\n\n if (!projectid) {\n this.debug.error('LangsysApp.init missing projectid in configuration object!');\n return { status: false, errors: ['Missing projectid'] };\n }\n if (!key) {\n this.debug.error('LangsysApp.init missing API key in configuration object!');\n return { status: false, errors: ['Missing API key'] };\n }\n if (!UserLocaleStore?.subscribe) {\n this.debug.error(\n \"LangsysApp.init missing UserLocaleStore — pass a Signal<string> (createSignal('en-us') works if you have nothing of your own).\"\n );\n return { status: false, errors: ['Missing UserLocaleStore'] };\n }\n\n baseLocale = baseLocale.toLowerCase();\n\n if (!emulateFailureToLoad) {\n this.config = {\n projectid,\n key,\n sUserLocale: UserLocaleStore,\n baseLocale,\n debug,\n ssrTokenStrategy,\n };\n // Keep the exported config singleton in sync (used by Translate + API).\n Object.assign(configStore, this.config);\n }\n\n const validateResponse = await LangsysAppAPI.validate(this.config);\n\n if (validateResponse.status && validateResponse.data) {\n const authData = validateResponse.data as { key_type?: 'read' | 'write' };\n if (authData.key_type) {\n this.config.key_type = authData.key_type;\n configStore.key_type = authData.key_type;\n this.debug.log('API Key Type:', this.config.key_type);\n }\n }\n\n // Seed the translations store if initial data is provided (SSR handoff).\n if (initialTranslations && initialTranslationsLocale) {\n if (!initialTranslations['__uncategorized__']) {\n initialTranslations['__uncategorized__'] = {\n __category__: '__uncategorized__',\n __symbol__: '__uncategorized__',\n } as iTranslations;\n }\n for (const cat of Object.keys(initialTranslations)) {\n initialTranslations[cat]['__category__'] = cat;\n }\n sTranslations.set(initialTranslations);\n currentlyLoadedLocale.set(initialTranslationsLocale);\n this.debug.log('Populated sTranslations with initial data for locale:', initialTranslationsLocale);\n }\n\n this.Translations.setup(this.config);\n\n // Prefetch and wire up reactive locale change handling.\n this.config.sUserLocale.subscribe((locale) => {\n if (!validateResponse.status) return;\n this.getLocalesData(locale);\n this.debug.log('SUBSCRIBING TO USER LOCALE STORE');\n const skipFetch = initialTranslationsLocale === locale && !!initialTranslations;\n this.translationsLoadingPromise = this.Translations.change(locale, false, skipFetch);\n });\n\n return validateResponse;\n }\n\n public async getDialCodes(inLocale?: string): Promise<iCountryDialCode[]> {\n const locale = inLocale || this.config.sUserLocale.get() || this.config.baseLocale;\n if (this.dialCodes.length && this.dialCodesLocale === locale) return this.dialCodes;\n\n const route = `countries/dial-codes/${locale}`;\n const response = await LangsysAppAPI.get(route);\n if (response.errors || !response.status) {\n this.debug.error('LangsysApp.getDialCodes failed: ' + route);\n return [];\n }\n this.dialCodes = response.data as iCountryDialCode[];\n this.dialCodesLocale = locale;\n return this.dialCodes;\n }\n\n public async getCurrencies(inLocale?: string): Promise<iCurrencyList> {\n const locale = inLocale || this.config.sUserLocale.get() || this.config.baseLocale;\n if (this.currencies.length && this.currenciesLocale === locale) return this.currencies;\n\n const route = `currencies/${locale}`;\n const response = await LangsysAppAPI.get(route);\n if (response.errors || !response.status) {\n this.debug.error('LangsysApp.getCurrencies failed: ' + route);\n return [];\n }\n this.currencies = response.data as iCurrencyList;\n this.currenciesLocale = locale;\n return this.currencies;\n }\n\n public async getCountries(inLocale?: string): Promise<iCountryList> {\n const locale = inLocale || this.config.sUserLocale.get() || this.config.baseLocale;\n if (this.countries.length && this.countriesLocale === locale) return this.countries;\n\n const route = `countries/${locale}`;\n const response = await LangsysAppAPI.get(route);\n if (response.errors || !response.status) {\n this.debug.error('LangsysApp.getCountries failed: ' + route);\n return [];\n }\n this.countries = response.data as iCountryList;\n this.countriesLocale = locale;\n return this.countries;\n }\n\n public async getCountryName(forCountryCode: string, inLocale?: string): Promise<string> {\n if (!forCountryCode) return '';\n const locale = inLocale || this.config.sUserLocale.get() || this.config.baseLocale;\n if (!this.countries.length || this.countriesLocale !== locale) await this.getCountries(inLocale);\n\n const country = this.countries.find((c) => c.code.toLowerCase() === forCountryCode.toLowerCase())?.label;\n if (!country) this.debug.warn('getCountryName failed to match', forCountryCode);\n return country || forCountryCode;\n }\n\n public async getCurrencyName(forCurrencyCode: string, inLocale?: string): Promise<string> {\n if (!forCurrencyCode) return '';\n const locale = inLocale || this.config.sUserLocale.get() || this.config.baseLocale;\n if (!this.currencies.length || this.currenciesLocale !== locale) await this.getCurrencies(inLocale);\n\n const currency = this.currencies.find((c) => c.code?.toLowerCase() === forCurrencyCode.toLowerCase())?.name;\n if (!currency) this.debug.warn('getCurrencyName failed to match', forCurrencyCode);\n return currency || forCurrencyCode;\n }\n\n public async getLocalesFormat(\n format: '' | 'flat' | 'data' = '',\n inLocale?: string\n ): Promise<iLocaleDefault | iLocaleFlat[] | iLocaleData[]> {\n const locale = inLocale || this.config.sUserLocale.get() || this.config.baseLocale;\n const route = `locales/${locale}` + (format ? `/${format}` : '');\n const response = await LangsysAppAPI.get(route);\n if (response.errors || !response.status) {\n this.debug.error(response.errors, response.status, response);\n this.debug.error('LangsysApp.getLocales failed: ' + route);\n return format === 'flat' ? [] : format === 'data' ? [] : {};\n }\n switch (format) {\n case 'flat':\n return response.data as iLocaleFlat[];\n case 'data':\n return response.data as iLocaleData[];\n default:\n return response.data as iLocaleDefault;\n }\n }\n\n public async getLocalesFlat(inLocale?: string): Promise<iLocaleFlat[]> {\n return (await this.getLocalesFormat('flat', inLocale)) as iLocaleFlat[];\n }\n\n public async getLocalesData(inLocale?: string, forceRefresh = false): Promise<iLocaleData[]> {\n const locale = inLocale || this.config.sUserLocale.get() || this.config.baseLocale;\n if (this.locales?.[locale]?.length && !forceRefresh) return this.locales[locale];\n this.locales[locale] = (await this.getLocalesFormat('data', inLocale)) as iLocaleData[];\n return this.locales[locale];\n }\n\n public async getLocales(inLocale?: string): Promise<iLocaleDefault> {\n return (await this.getLocalesFormat('', inLocale)) as iLocaleDefault;\n }\n\n public async getLocaleNameWithLookup(forLocale: string, shortName = false, inLocale?: string): Promise<string> {\n if (!forLocale) return '';\n const locale = inLocale || this.config.sUserLocale.get() || this.config.baseLocale;\n await this.getLocalesData(locale);\n return this.getLocaleName(forLocale, shortName, locale);\n }\n\n public getLocaleName(forLocale: string, shortName = false, inLocale?: string): string {\n const locale = inLocale || this.config.sUserLocale.get() || this.config.baseLocale;\n let name = '';\n this.locales[locale]?.every((loc) => {\n if (loc.code === forLocale) {\n name = shortName ? loc.lang_name : loc.locale_name;\n return false;\n }\n return true;\n });\n if (!name) this.debug.warn('getLocaleNameWithLookup failed to match', forLocale);\n return name;\n }\n\n /** @deprecated use `getLocaleNameWithLookup` or `getLocaleName` */\n public async getLanguageName(forLocale: string, shortName = false, inLocale?: string): Promise<string> {\n return this.getLocaleNameWithLookup(forLocale, shortName, inLocale);\n }\n\n /**\n * Detects the end-user's preferred locale.\n *\n * - In browsers, uses `navigator.languages` with fallback to `navigator.language`.\n * - In SSR environments, parses the `Accept-Language` header.\n */\n public detectPreferredLocale(\n acceptLanguageHeader?: string | null,\n supportedLocales?: string[]\n ): string | false {\n const userLocales = this.getUserLanguagePreferences(acceptLanguageHeader);\n if (userLocales.length === 0) return false;\n\n if (supportedLocales && supportedLocales.length > 0) {\n const bestMatch = this.findBestLocaleMatch(userLocales, supportedLocales);\n if (bestMatch) return bestMatch;\n }\n\n return this.normalizeLocale(userLocales[0]);\n }\n\n private getUserLanguagePreferences(acceptLanguageHeader?: string | null): string[] {\n if (acceptLanguageHeader) {\n try {\n return this.parseAcceptLanguageHeader(acceptLanguageHeader);\n } catch (error) {\n this.debug.warn('Failed to parse Accept-Language header:', error);\n }\n }\n\n if (typeof navigator !== 'undefined') {\n if (navigator.languages && navigator.languages.length > 0) {\n return Array.from(navigator.languages);\n }\n if (navigator.language) return [navigator.language];\n }\n\n return [];\n }\n\n private parseAcceptLanguageHeader(header: string): string[] {\n if (!header || typeof header !== 'string' || header.trim() === '') return [];\n\n try {\n return header\n .split(',')\n .map((part) => {\n const trimmed = part.trim();\n if (!trimmed || trimmed === '*') return null;\n const [localePart, qPart] = trimmed.split(';q=');\n const locale = localePart?.trim();\n const q = qPart ? parseFloat(qPart) : 1.0;\n if (!locale || isNaN(q) || q <= 0 || q > 1) return null;\n return { locale, q };\n })\n .filter((item): item is { locale: string; q: number } => item !== null)\n .sort((a, b) => b.q - a.q)\n .map((item) => item.locale);\n } catch (error) {\n this.debug.warn('Error parsing Accept-Language header:', error);\n return [];\n }\n }\n\n private findBestLocaleMatch(userLocales: string[], supportedLocales: string[]): string | null {\n if (!userLocales.length || !supportedLocales.length) return null;\n\n const normalizedSupported = supportedLocales.map((l) => this.normalizeLocale(l));\n\n for (const userLocale of userLocales) {\n const normalizedUser = this.normalizeLocale(userLocale);\n if (normalizedSupported.includes(normalizedUser)) return normalizedUser;\n }\n\n for (const userLocale of userLocales) {\n const userLang = this.getLanguageCode(userLocale);\n for (const supported of normalizedSupported) {\n if (this.getLanguageCode(supported) === userLang) return supported;\n }\n }\n\n return null;\n }\n\n private normalizeLocale(locale: string): string {\n if (!locale || typeof locale !== 'string') return locale;\n const parts = locale.split(/[-_]/);\n if (parts.length === 1) return parts[0].toLowerCase();\n const language = parts[0].toLowerCase();\n const region = parts[1].toUpperCase();\n return `${language}-${region}`;\n }\n\n private getLanguageCode(locale: string): string {\n if (!locale || typeof locale !== 'string') return '';\n return locale.split(/[-_]/)[0].toLowerCase();\n }\n}\n\nexport const LangsysApp = new LangsysAppClass();\nexport type { LangsysAppClass };\n","export const isEmpty = (data: unknown): boolean => {\n if (typeof data === 'number' || typeof data === 'boolean') return false;\n if (typeof data === 'undefined' || data === null) return true;\n if (typeof (data as { length?: number }).length !== 'undefined') {\n return (data as { length: number }).length === 0;\n }\n if (typeof data === 'object') return Object.keys(data as object).length === 0;\n return false;\n};\n\nexport function structuredCloneShim<T>(obj: T): T {\n if (typeof structuredClone === 'function') return structuredClone(obj);\n\n const clone = <V>(o: V): V => {\n if (typeof o !== 'object' || o === null) return o;\n if (Array.isArray(o)) return o.map((item) => clone(item)) as unknown as V;\n const out: Record<string, unknown> = {};\n for (const key in o as object) {\n if (Object.prototype.hasOwnProperty.call(o, key)) {\n out[key] = clone((o as Record<string, unknown>)[key]);\n }\n }\n return out as V;\n };\n return clone(obj);\n}\n\n// prettier-ignore\nexport function md5(inputString: string) {\n if (typeof inputString !== 'string') inputString = JSON.stringify(inputString);\n const hc = '0123456789abcdef';\n function rh(n: number) { let j, s = ''; for (j = 0; j <= 3; j++) s += hc.charAt((n >> (j * 8 + 4)) & 0x0F) + hc.charAt((n >> (j * 8)) & 0x0F); return s; }\n function ad(x: number, y: number) { const l = (x & 0xFFFF) + (y & 0xFFFF); const m = (x >> 16) + (y >> 16) + (l >> 16); return (m << 16) | (l & 0xFFFF); }\n function rl(n: number, c: number) { return (n << c) | (n >>> (32 - c)); }\n function cm(q: number, a: number, b: number, x: number, s: number, t: number) { return ad(rl(ad(ad(a, q), ad(x, t)), s), b); }\n function ff(a: number, b: number, c: number, d: number, x: number, s: number, t: number) { return cm((b & c) | ((~b) & d), a, b, x, s, t); }\n function gg(a: number, b: number, c: number, d: number, x: number, s: number, t: number) { return cm((b & d) | (c & (~d)), a, b, x, s, t); }\n function hh(a: number, b: number, c: number, d: number, x: number, s: number, t: number) { return cm(b ^ c ^ d, a, b, x, s, t); }\n function ii(a: number, b: number, c: number, d: number, x: number, s: number, t: number) { return cm(c ^ (b | (~d)), a, b, x, s, t); }\n function sb(x: string) {\n let i; const nblk = ((x.length + 8) >> 6) + 1; const blks = new Array(nblk * 16); for (i = 0; i < nblk * 16; i++) blks[i] = 0;\n for (i = 0; i < x.length; i++) blks[i >> 2] |= x.charCodeAt(i) << ((i % 4) * 8);\n blks[i >> 2] |= 0x80 << ((i % 4) * 8); blks[nblk * 16 - 2] = x.length * 8; return blks;\n }\n let i, x = sb('' + inputString), a = 1732584193, b = -271733879, c = -1732584194, d = 271733878, olda, oldb, oldc, oldd;\n for (i = 0; i < x.length; i += 16) {\n olda = a; oldb = b; oldc = c; oldd = d;\n a = ff(a, b, c, d, x[i + 0], 7, -680876936); d = ff(d, a, b, c, x[i + 1], 12, -389564586); c = ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = ff(b, c, d, a, x[i + 3], 22, -1044525330); a = ff(a, b, c, d, x[i + 4], 7, -176418897); d = ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = ff(c, d, a, b, x[i + 6], 17, -1473231341); b = ff(b, c, d, a, x[i + 7], 22, -45705983); a = ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = ff(d, a, b, c, x[i + 9], 12, -1958414417); c = ff(c, d, a, b, x[i + 10], 17, -42063); b = ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = ff(a, b, c, d, x[i + 12], 7, 1804603682); d = ff(d, a, b, c, x[i + 13], 12, -40341101); c = ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = ff(b, c, d, a, x[i + 15], 22, 1236535329); a = gg(a, b, c, d, x[i + 1], 5, -165796510); d = gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = gg(c, d, a, b, x[i + 11], 14, 643717713); b = gg(b, c, d, a, x[i + 0], 20, -373897302); a = gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = gg(d, a, b, c, x[i + 10], 9, 38016083); c = gg(c, d, a, b, x[i + 15], 14, -660478335); b = gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = gg(a, b, c, d, x[i + 9], 5, 568446438); d = gg(d, a, b, c, x[i + 14], 9, -1019803690); c = gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = gg(b, c, d, a, x[i + 8], 20, 1163531501); a = gg(a, b, c, d, x[i + 13], 5, -1444681467); d = gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = gg(c, d, a, b, x[i + 7], 14, 1735328473); b = gg(b, c, d, a, x[i + 12], 20, -1926607734); a = hh(a, b, c, d, x[i + 5], 4, -378558);\n d = hh(d, a, b, c, x[i + 8], 11, -2022574463); c = hh(c, d, a, b, x[i + 11], 16, 1839030562); b = hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = hh(a, b, c, d, x[i + 1], 4, -1530992060); d = hh(d, a, b, c, x[i + 4], 11, 1272893353); c = hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = hh(b, c, d, a, x[i + 10], 23, -1094730640); a = hh(a, b, c, d, x[i + 13], 4, 681279174); d = hh(d, a, b, c, x[i + 0], 11, -358537222);\n c = hh(c, d, a, b, x[i + 3], 16, -722521979); b = hh(b, c, d, a, x[i + 6], 23, 76029189); a = hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = hh(d, a, b, c, x[i + 12], 11, -421815835); c = hh(c, d, a, b, x[i + 15], 16, 530742520); b = hh(b, c, d, a, x[i + 2], 23, -995338651);\n a = ii(a, b, c, d, x[i + 0], 6, -198630844); d = ii(d, a, b, c, x[i + 7], 10, 1126891415); c = ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = ii(b, c, d, a, x[i + 5], 21, -57434055); a = ii(a, b, c, d, x[i + 12], 6, 1700485571); d = ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = ii(c, d, a, b, x[i + 10], 15, -1051523); b = ii(b, c, d, a, x[i + 1], 21, -2054922799); a = ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = ii(d, a, b, c, x[i + 15], 10, -30611744); c = ii(c, d, a, b, x[i + 6], 15, -1560198380); b = ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = ii(a, b, c, d, x[i + 4], 6, -145523070); d = ii(d, a, b, c, x[i + 11], 10, -1120210379); c = ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = ii(b, c, d, a, x[i + 9], 21, -343485551); a = ad(a, olda); b = ad(b, oldb); c = ad(c, oldc); d = ad(d, oldd);\n }\n return rh(a) + rh(b) + rh(c) + rh(d);\n}\n","import { LangsysAppAPI } from './api.js';\nimport { LangsysApp } from './langsys-app.js';\nimport { logger } from './logger.js';\nimport { config as configStore, contentBlocks, currentlyLoadedLocale } from './stores.js';\nimport type { Unsubscriber } from './signal.js';\nimport type { iContentBlock } from './types/content-block.js';\nimport { isEmpty, md5 } from './utils.js';\n\n/** Options for the `Translate` class. Matches the Svelte component's props. */\nexport interface TranslateOptions {\n /** Optional category under which tokens are registered. Helps translators disambiguate. */\n category?: string;\n /** Optional stable id for the content block. If omitted, we hash category+tokens. */\n custom_id?: string;\n /** Optional human-readable label shown in the Translation Manager. */\n label?: string;\n}\n\ntype iNode = Node & { originalNodeValue?: string | null };\ntype iElement = HTMLElement & { originalAttributes?: Record<string, string> };\n\n/**\n * HTML attributes whose values should be harvested for translation.\n */\nconst TRANSLATABLE_ATTRIBUTES = [\n 'placeholder',\n 'alt',\n 'title',\n 'aria-label',\n 'aria-placeholder',\n 'data-error',\n 'data-error-message',\n 'data-validation-message',\n 'data-invalid-message',\n 'data-required-message',\n 'data-pattern-message',\n];\n\nconst VALUE_TRANSLATABLE_ELEMENTS = ['button'];\nconst VALUE_TRANSLATABLE_INPUT_TYPES = ['submit', 'button'];\n\n/**\n * Semantic CSS properties captured on cloned content for the Translation Manager\n * so translators see the content styled the way end-users do.\n */\nconst SEMANTIC_STYLE_PROPERTIES = [\n 'font-size', 'font-weight', 'font-style', 'font-variant', 'line-height',\n 'letter-spacing', 'word-spacing', 'text-align', 'text-decoration',\n 'text-transform', 'text-indent', 'text-shadow', 'white-space', '-webkit-font-smoothing',\n 'color', 'background-color', 'background-image', 'background-position',\n 'background-size', 'background-repeat',\n 'border', 'border-top', 'border-right', 'border-bottom', 'border-left',\n 'border-radius', 'border-color', 'border-width', 'border-style',\n 'margin', 'margin-top', 'margin-right', 'margin-bottom', 'margin-left',\n 'padding', 'padding-top', 'padding-right', 'padding-bottom', 'padding-left',\n 'box-shadow', 'opacity', 'filter',\n 'display', 'visibility', 'list-style', 'list-style-type',\n 'cursor',\n];\n\n/**\n * Wrap a DOM element and manage translation for its contents.\n *\n * const el = document.querySelector('#hero');\n * new Translate(el, { category: 'Home' });\n *\n * The first-pass tokenizes text nodes and translatable attributes; if the\n * content is a single text run, it's treated as a plain token. For HTML\n * content, a \"content block\" is registered so translators see the content\n * with the same visual structure users see.\n *\n * Call `.destroy()` to stop reacting to locale changes.\n */\nexport class Translate {\n private element: HTMLElement;\n private options: TranslateOptions;\n private contentClone: HTMLElement | null = null;\n private tokens: string[] = [];\n private parseComplete = false;\n private isTokenizing = false;\n private lastTranslatedLocale = '';\n private custom_id: string;\n private unsubscribeLocale: Unsubscriber | null = null;\n\n constructor(element: HTMLElement, options: TranslateOptions = {}) {\n this.element = element;\n this.options = { ...options };\n this.custom_id = options.custom_id || '';\n\n // First pass: tokenize + save + translate.\n void this.tokenizeContent();\n\n // React to locale changes.\n this.unsubscribeLocale = currentlyLoadedLocale.subscribe((locale) => {\n if (locale && this.parseComplete) this.translateUpdate(locale);\n });\n }\n\n /** Stop reacting to locale changes. Safe to call multiple times. */\n public destroy() {\n if (this.unsubscribeLocale) {\n this.unsubscribeLocale();\n this.unsubscribeLocale = null;\n }\n }\n\n private translateUpdate(currentLocale: string) {\n if (!this.element?.innerHTML || !this.parseComplete) return;\n if (this.lastTranslatedLocale === currentLocale) return;\n\n const { category = '' } = this.options;\n\n if (this.tokens.length === 1) {\n this.element.innerText = LangsysApp.Translations.t(category, this.tokens[0]);\n } else {\n this.translate(Array.from(this.element.childNodes));\n this.lastTranslatedLocale = currentLocale;\n }\n }\n\n private async tokenizeContent(): Promise<boolean> {\n if (this.isTokenizing) return false;\n if (!this.element || !this.element.childNodes.length) {\n this.parseComplete = true;\n this.isTokenizing = false;\n return false;\n }\n\n this.isTokenizing = true;\n this.contentClone = this.element.cloneNode(true) as HTMLElement;\n const nodes = Array.from(this.contentClone.childNodes || []);\n this.tokenize(nodes);\n\n const { category = '' } = this.options;\n\n if (this.tokens.length === 1) {\n this.element.innerText = LangsysApp.Translations.t(category, this.tokens[0]);\n } else {\n const contentBlock: iContentBlock = {\n custom_id: '',\n category,\n label: this.options.label,\n content: this.contentClone!.outerHTML,\n tokens: this.tokens,\n };\n await this.handleContentBlock(contentBlock);\n }\n\n this.parseComplete = true;\n this.isTokenizing = false;\n return true;\n }\n\n private async handleContentBlock(contentBlock: iContentBlock) {\n if (isEmpty(this.custom_id)) this.custom_id = this.generateCustomId(contentBlock);\n contentBlock.custom_id = this.custom_id;\n\n const current = contentBlocks.get();\n const existing = current.find((b) => b.custom_id === this.custom_id);\n if (!existing) {\n if (configStore.key_type === 'write') {\n LangsysAppAPI.post('projects/[projectid]/content-blocks', contentBlock as unknown as Record<string, unknown>)\n .then((response) => {\n if (!response.status) {\n logger.error('Could not save content block', response.errors);\n } else {\n contentBlocks.update((blocks) => [...blocks, contentBlock]);\n }\n })\n .catch((err) => logger.error('Could not save content block', err));\n } else if (configStore.debug) {\n logger.log(`Skipping content block save (API key is ${configStore.key_type || 'unknown'})`);\n }\n\n if (this.tokens.length > 1 && this.element) {\n this.translate(Array.from(this.element.childNodes));\n this.lastTranslatedLocale = currentlyLoadedLocale.get();\n }\n }\n }\n\n private tokenize(nodes: iNode[], indices: number[] = []) {\n nodes.forEach((node, index) => {\n if (node?.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n if (element.getAttribute('translate') === 'no') return;\n }\n\n if (node?.hasChildNodes()) {\n this.applyStylesToNode(node as HTMLElement, [...indices, index]);\n }\n\n if (node?.nodeType === Node.ELEMENT_NODE) {\n this.tokenizeAttributes(node as HTMLElement);\n }\n\n const contentToken = node.nodeValue?.replace(/\\s+/g, ' ').trim();\n if (node?.nodeType === Node.TEXT_NODE && contentToken) {\n this.tokens.push(contentToken);\n return;\n }\n\n if (!node?.hasChildNodes()) return;\n this.tokenize(Array.from(node.childNodes), [...indices, index]);\n });\n }\n\n private tokenizeAttributes(element: HTMLElement) {\n const tagName = element.tagName.toLowerCase();\n\n if (tagName === 'img') {\n const img = element as HTMLImageElement;\n if (img.src) element.setAttribute('src', img.src);\n }\n\n for (const attr of TRANSLATABLE_ATTRIBUTES) {\n const value = element.getAttribute(attr)?.trim();\n if (value) this.tokens.push(value);\n }\n\n if (VALUE_TRANSLATABLE_ELEMENTS.includes(tagName)) {\n const value = element.getAttribute('value')?.trim();\n if (value) this.tokens.push(value);\n }\n\n if (tagName === 'input') {\n const inputType = element.getAttribute('type')?.toLowerCase();\n if (inputType && VALUE_TRANSLATABLE_INPUT_TYPES.includes(inputType)) {\n const value = element.getAttribute('value')?.trim();\n if (value) this.tokens.push(value);\n }\n }\n\n if (tagName === 'select') {\n const options = element.querySelectorAll('option');\n options.forEach((option) => {\n const optionText = option.textContent?.trim();\n if (optionText) this.tokens.push(optionText);\n });\n }\n }\n\n private findNode(nodes: iNode[], indices: number[]): Element | undefined {\n let currentNode: Node | undefined = nodes[indices[0]];\n for (let i = 1; i < indices.length; i++) {\n if (!currentNode || !currentNode.hasChildNodes()) return undefined;\n currentNode = Array.from(currentNode.childNodes)[indices[i]];\n }\n return currentNode as Element;\n }\n\n private translate(nodes: iNode[]) {\n const currentLocale = currentlyLoadedLocale.get();\n if (\n currentLocale === configStore.baseLocale &&\n (this.lastTranslatedLocale === '' || this.lastTranslatedLocale === configStore.baseLocale)\n ) {\n return;\n }\n\n nodes.forEach((node) => {\n if (node?.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n if (element.getAttribute('translate') === 'no') return;\n this.translateAttributes(node as iElement);\n }\n\n if (node?.nodeType !== Node.TEXT_NODE) {\n if (!node?.hasChildNodes()) return;\n this.translate(Array.from(node.childNodes));\n return;\n }\n\n if (isEmpty(node.nodeValue?.trim())) return;\n\n if (isEmpty(node.originalNodeValue)) {\n node.originalNodeValue = node.nodeValue;\n }\n\n const contentToken = node.originalNodeValue?.replace(/\\s+/g, ' ').trim();\n if (!contentToken) return;\n\n const translation = this.getTranslation(contentToken);\n\n if (translation && contentToken && node.originalNodeValue) {\n node.nodeValue = node.originalNodeValue.replace(contentToken, translation);\n } else if (node.originalNodeValue) {\n node.nodeValue = node.originalNodeValue;\n }\n });\n }\n\n private getTranslation(token: string): string | null {\n if (!token) return null;\n const { category = '' } = this.options;\n return LangsysApp.Translations.lookupContent(category, this.custom_id, token);\n }\n\n private translateAttributes(element: iElement) {\n const tagName = element.tagName.toLowerCase();\n if (!element.originalAttributes) element.originalAttributes = {};\n\n for (const attr of TRANSLATABLE_ATTRIBUTES) {\n this.translateAttribute(element, attr);\n }\n\n if (VALUE_TRANSLATABLE_ELEMENTS.includes(tagName)) {\n this.translateAttribute(element, 'value');\n }\n\n if (tagName === 'input') {\n const inputType = element.getAttribute('type')?.toLowerCase();\n if (inputType && VALUE_TRANSLATABLE_INPUT_TYPES.includes(inputType)) {\n this.translateAttribute(element, 'value');\n }\n }\n\n if (tagName === 'select') {\n const options = element.querySelectorAll('option');\n options.forEach((option) => {\n const optionEl = option as iElement;\n if (!optionEl.originalAttributes) optionEl.originalAttributes = {};\n if (optionEl.originalAttributes['textContent'] === undefined) {\n optionEl.originalAttributes['textContent'] = option.textContent || '';\n }\n const originalText = optionEl.originalAttributes['textContent'].trim();\n if (originalText) {\n const translation = this.getTranslation(originalText);\n option.textContent = translation || optionEl.originalAttributes['textContent'];\n }\n });\n }\n }\n\n private translateAttribute(element: iElement, attr: string) {\n const currentValue = element.getAttribute(attr);\n if (!currentValue) return;\n\n if (element.originalAttributes![attr] === undefined) {\n element.originalAttributes![attr] = currentValue;\n }\n\n const originalValue = element.originalAttributes![attr].trim();\n if (!originalValue) return;\n\n const translation = this.getTranslation(originalValue);\n if (translation) element.setAttribute(attr, translation);\n else element.setAttribute(attr, element.originalAttributes![attr]);\n }\n\n private generateCustomId(contentBlock: iContentBlock): string {\n return md5(`${contentBlock.category}-${contentBlock.tokens.join('-')}`);\n }\n\n private applyStylesToNode(node: HTMLElement, indices: number[]) {\n if (!this.element || typeof window === 'undefined') return;\n const domNode = this.findNode(Array.from(this.element.childNodes), indices);\n if (!domNode) return;\n\n const tagName = domNode.tagName.toLowerCase();\n const reference = document.createElement(tagName);\n reference.style.visibility = 'hidden';\n reference.style.position = 'absolute';\n document.body.appendChild(reference);\n\n const computed = window.getComputedStyle(domNode);\n const defaults = window.getComputedStyle(reference);\n\n for (const prop of SEMANTIC_STYLE_PROPERTIES) {\n const value = computed.getPropertyValue(prop);\n const defaultValue = defaults.getPropertyValue(prop);\n if (value && value !== defaultValue) {\n node.style.setProperty(prop, value);\n }\n }\n\n document.body.removeChild(reference);\n node.removeAttribute('class');\n }\n}\n\nexport default Translate;\n","/**\n * Langsys SDK — framework-agnostic TypeScript\n *\n * Realtime continuous translations with automatic token discovery for any\n * web app. The public translation surface is `t(category, phrase, params?)`\n * — the phrase itself is the lookup key (and the source-language default).\n * Frameworks subscribe to `tSignal` for reactive re-renders.\n */\n\n// Public singletons and classes\nexport { LangsysApp } from './langsys-app.js';\nexport { Translations } from './translations.js';\nexport { Translate, type TranslateOptions } from './translate.js';\nexport { LangsysAppAPI } from './api.js';\n\n// Reactive primitives\nexport { createSignal, getValue, type Signal, type Subscriber, type Unsubscriber, type Updater } from './signal.js';\nexport { persist } from './persist.js';\n\n// Stores (advanced usage — direct subscription to translations / locale)\nexport { sTranslations, currentlyLoadedLocale, contentBlocks } from './stores.js';\n\n// Logger\nexport { Logger, logger } from './logger.js';\n\n// Utility exports\nexport { md5, isEmpty } from './utils.js';\nexport { interpolate } from './interpolate.js';\n\n// Type re-exports\nexport type { ResponseObject as iLangsysResponse } from './types/api.js';\nexport type { iLangsysConfig, iLangsysInitConfig } from './types/config.js';\nexport type { iContentBlock } from './types/content-block.js';\nexport type { iCountry, iCountryDialCode, iCountryList } from './types/countries.js';\nexport type { iCurrency, iCurrencyList } from './types/currencies.js';\nexport type { iLanguageName, iLocaleData, iLocaleDefault, iLocaleFlat } from './types/locales.js';\nexport type { iProject } from './types/project.js';\nexport type {\n ExtractParamKeys,\n ParamPrimitive,\n ParamsFor,\n TArgs,\n TFunction,\n TranslationParams,\n} from './types/translation-fn.js';\nexport type { iCategories, iTranslations } from './types/translations.js';\n\n// Convenience exports — `t` is a stable function that delegates to the\n// LangsysApp singleton (reads fresh state on every call). `tSignal` is the\n// reactive primitive frameworks bind to.\nimport { LangsysApp as _LangsysApp } from './langsys-app.js';\nimport type { TArgs, TFunction } from './types/translation-fn.js';\n\nexport const t: TFunction = (<P extends string>(\n category: string,\n phrase: P,\n ...args: TArgs<P>\n): string => {\n return _LangsysApp.Translations.t(category, phrase, ...args);\n}) as TFunction;\n\nexport const tSignal = _LangsysApp.Translations.tSignal;\n"]}
|