{"version":3,"sources":["../src/colors.ts","../src/loader.ts","../src/format.ts","../src/command-output.ts","../src/timing-tracker.ts","../src/command-suggestions.ts","../src/command-discovery.ts","../src/manifest-parser.ts","../src/multi-cli-suggestions.ts","../src/dynamic-command-discovery.ts","../src/artifacts-display.ts","../src/table.ts","../src/debug/formatters/ai.ts","../src/debug/formatters/human.ts","../src/debug/utilities.ts","../src/debug/formatters/timeline.ts","../src/debug/components/output.ts","../src/debug/components/tree.ts","../src/debug/components/trace.ts","../src/command-runner.ts","../src/utils/flags.ts","../src/utils/env.ts","../src/utils/context.ts","../src/utils/path.ts","../src/utils/retry.ts","../src/utils/errors.ts","../src/destructive.ts","../src/modern-format.ts","../src/command-result.ts","../src/log-display.ts","../src/badge.ts","../src/interactive/terminal.ts","../src/tasks.ts","../src/interactive/confirm.ts","../src/interactive/text.ts","../src/interactive/select.ts","../src/interactive/multi-select.ts","../src/stdout-ui.ts"],"names":["text","indent","pad","timestamp","path","fsp","padding","formatTimestamp","formatDuration","section","result","formatTiming","bulletList","readline","readline2","readline3"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,IAAM,GAAA,GAAM,OAAA;AACZ,IAAM,KAAA,GAAQ,SAAA;AAEd,IAAM,WAAA,GACJ,CAAA,GAAI,KAAA,KACJ,CAACA,UACC,CAAA,EAAG,GAAG,CAAA,EAAG,KAAA,CAAM,KAAK,GAAG,CAAC,CAAA,CAAA,EAAIA,KAAI,GAAG,KAAK,CAAA,CAAA;AAE5C,IAAM,UAAA,GAAa,SAAA;AACnB,IAAM,YAAA,GAAe,SAAA;AACrB,IAAM,UAAA,GAAa,SAAA;AACnB,IAAM,YAAA,GAAe,SAAA;AACrB,IAAM,OAAA,GAAU,EAAA;AAChB,IAAM,YAAA,GAAe,EAAA;AAEd,IAAM,MAAA,GAAS;AAAA;AAAA,EAEpB,OAAA,EAAS,YAAY,EAAE,CAAA;AAAA,EACvB,KAAA,EAAO,YAAY,EAAE,CAAA;AAAA,EACrB,OAAA,EAAS,YAAY,EAAE,CAAA;AAAA,EACvB,IAAA,EAAM,YAAY,EAAE,CAAA;AAAA;AAAA,EAGpB,OAAA,EAAS,YAAY,UAAU,CAAA;AAAA,EAC/B,MAAA,EAAQ,YAAY,YAAY,CAAA;AAAA,EAChC,SAAA,EAAW,YAAY,UAAU,CAAA;AAAA,EACjC,SAAA,EAAW,YAAY,YAAY,CAAA;AAAA,EACnC,QAAA,EAAU,YAAY,UAAU,CAAA;AAAA,EAChC,KAAA,EAAO,YAAY,YAAY,CAAA;AAAA,EAC/B,UAAA,EAAY,YAAY,OAAO,CAAA;AAAA;AAAA,EAG/B,GAAA,EAAK,YAAY,CAAC,CAAA;AAAA,EAClB,IAAA,EAAM,YAAY,CAAC,CAAA;AAAA,EACnB,SAAA,EAAW,YAAY,CAAC,CAAA;AAAA,EACxB,OAAA,EAAS,YAAY,CAAC;AACxB;AAGA,IAAM,gBAAA,GAAmB;AAAA,EACvB,OAAA,EAAS,QAAA;AAAA,EACT,KAAA,EAAO,QAAA;AAAA,EACP,OAAA,EAAS,QAAA;AAAA,EACT,IAAA,EAAM,QAAA;AAAA,EACN,MAAA,EAAQ,QAAA;AAAA,EACR,KAAA,EAAO,QAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,OAAA,EAAS,QAAA;AAAA,EACT,OAAA,EAAS,QAAA;AAAA,EACT,OAAA,EAAS,QAAA;AAAA,EACT,IAAA,EAAM,QAAA;AAAA,EACN,QAAA,EAAU,QAAA;AAAA,EACV,KAAA,EAAO,QAAA;AAAA,EACP,OAAA,EAAS;AACX,CAAA;AAEO,IAAM,OAAA,GAAU;AAAA,EACrB,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,gBAAA,CAAiB,OAAO,CAAA;AAAA,EAChD,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,gBAAA,CAAiB,KAAK,CAAA;AAAA,EAC1C,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,gBAAA,CAAiB,OAAO,CAAA;AAAA,EAChD,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,gBAAA,CAAiB,IAAI,CAAA;AAAA,EACvC,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,gBAAA,CAAiB,MAAM,CAAA;AAAA,EAC5C,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,gBAAA,CAAiB,KAAK,CAAA;AAAA,EAC1C,MAAA,EAAQ,MAAA,CAAO,OAAA,CAAQ,gBAAA,CAAiB,MAAM,CAAA;AAAA,EAC9C,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,gBAAA,CAAiB,OAAO,CAAA;AAAA,EAC/C,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,gBAAA,CAAiB,OAAO,CAAA;AAAA,EAChD,OAAA,EAAS,MAAA,CAAO,KAAA,CAAM,gBAAA,CAAiB,OAAO,CAAA;AAAA,EAC9C,IAAA,EAAM,MAAA,CAAO,KAAA,CAAM,gBAAA,CAAiB,IAAI,CAAA;AAAA,EACxC,QAAA,EAAU,MAAA,CAAO,OAAA,CAAQ,gBAAA,CAAiB,QAAQ,CAAA;AAAA,EAClD,KAAA,EAAO,MAAA,CAAO,OAAA,CAAQ,gBAAA,CAAiB,KAAK,CAAA;AAAA,EAC5C,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,gBAAA,CAAiB,OAAO;AAClD;AAGA,IAAM,WAAA,GAAc,CAAC,KAAA,KAAuC;AAC1D,EAAA,IAAI,CAAC,KAAA,EAAO;AAAC,IAAA,OAAO,KAAA;AAAA,EAAM;AAC1B,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,EAAK,CAAE,WAAA,EAAY;AAC5C,EAAA,OAAO,eAAe,EAAA,IAAM,UAAA,KAAe,GAAA,IAAO,UAAA,KAAe,WAAW,UAAA,KAAe,KAAA;AAC7F,CAAA;AAEO,IAAM,iBAAiB,MAAM;AAClC,EAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAAC,IAAA,OAAO,KAAA;AAAA,EAAM;AAElD,EAAA,MAAM,UAAA,GAAa,QAAQ,GAAA,CAAI,WAAA;AAC/B,EAAA,IAAI,WAAA,CAAY,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA,EAAG;AACrC,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,WAAA,CAAY,UAAU,CAAA,EAAG;AAC3B,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AAAC,IAAA,OAAO,KAAA;AAAA,EAAM;AAEnC,EAAA,IAAI,OAAA,CAAQ,MAAA,CAAO,KAAA,KAAU,KAAA,EAAO;AAClC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA;AACT,CAAA;AAGA,IAAM,WAAA,GACJ,CAAC,EAAA,KACD,CAACA,UACC,aAAA,GAAgB,EAAA,CAAGA,KAAI,CAAA,GAAIA,KAAAA;AAExB,IAAM,UAAA,GAAa;AAAA,EACxB,OAAA,EAAS,WAAA,CAAY,MAAA,CAAO,OAAO,CAAA;AAAA,EACnC,KAAA,EAAO,WAAA,CAAY,MAAA,CAAO,KAAK,CAAA;AAAA,EAC/B,OAAA,EAAS,WAAA,CAAY,MAAA,CAAO,OAAO,CAAA;AAAA,EACnC,IAAA,EAAM,WAAA,CAAY,MAAA,CAAO,IAAI,CAAA;AAAA,EAC7B,MAAA,EAAQ,WAAA,CAAY,MAAA,CAAO,MAAM,CAAA;AAAA,EACjC,OAAA,EAAS,WAAA,CAAY,MAAA,CAAO,OAAO,CAAA;AAAA,EACnC,SAAA,EAAW,WAAA,CAAY,MAAA,CAAO,SAAS,CAAA;AAAA,EACvC,SAAA,EAAW,WAAA,CAAY,MAAA,CAAO,SAAS,CAAA;AAAA,EACvC,QAAA,EAAU,WAAA,CAAY,MAAA,CAAO,QAAQ,CAAA;AAAA,EACrC,UAAA,EAAY,WAAA,CAAY,MAAA,CAAO,UAAU,CAAA;AAAA,EACzC,KAAA,EAAO,WAAA,CAAY,MAAA,CAAO,KAAK,CAAA;AAAA,EAC/B,GAAA,EAAK,WAAA,CAAY,MAAA,CAAO,GAAG,CAAA;AAAA,EAC3B,IAAA,EAAM,WAAA,CAAY,MAAA,CAAO,IAAI,CAAA;AAAA,EAC7B,SAAA,EAAW,WAAA,CAAY,MAAA,CAAO,SAAS,CAAA;AAAA,EACvC,OAAA,EAAS,WAAA,CAAY,MAAA,CAAO,OAAO;AACrC;AAEO,IAAM,WAAA,GAAc;AAAA,EACzB,OAAA,EAAS,aAAA,GAAgB,OAAA,CAAQ,OAAA,GAAU,QAAA;AAAA,EAC3C,KAAA,EAAO,aAAA,GAAgB,OAAA,CAAQ,KAAA,GAAQ,QAAA;AAAA,EACvC,OAAA,EAAS,aAAA,GAAgB,OAAA,CAAQ,OAAA,GAAU,QAAA;AAAA,EAC3C,IAAA,EAAM,aAAA,GAAgB,OAAA,CAAQ,IAAA,GAAO,QAAA;AAAA,EACrC,MAAA,EAAQ,aAAA,GAAgB,OAAA,CAAQ,MAAA,GAAS,QAAA;AAAA,EACzC,KAAA,EAAO,aAAA,GAAgB,OAAA,CAAQ,KAAA,GAAQ,QAAA;AAAA,EACvC,MAAA,EAAQ,aAAA,GAAgB,OAAA,CAAQ,MAAA,GAAS,QAAA;AAAA,EACzC,OAAA,EAAS,aAAA,GAAgB,OAAA,CAAQ,OAAA,GAAU,QAAA;AAAA,EAC3C,OAAA,EAAS,aAAA,GAAgB,OAAA,CAAQ,OAAA,GAAU,QAAA;AAAA,EAC3C,OAAA,EAAS,aAAA,GAAgB,OAAA,CAAQ,OAAA,GAAU,QAAA;AAAA,EAC3C,IAAA,EAAM,aAAA,GAAgB,OAAA,CAAQ,IAAA,GAAO,QAAA;AAAA,EACrC,QAAA,EAAU,aAAA,GAAgB,OAAA,CAAQ,QAAA,GAAW,QAAA;AAAA,EAC7C,KAAA,EAAO,aAAA,GAAgB,OAAA,CAAQ,KAAA,GAAQ,QAAA;AAAA,EACvC,OAAA,EAAS,aAAA,GAAgB,OAAA,CAAQ,OAAA,GAAU,QAAA;AAAA;AAAA,EAE3C,SAAA,EAAW,QAAA;AAAA,EACX,MAAA,EAAQ,QAAA;AAAA,EACR,OAAA,EAAS,QAAA;AAAA,EACT,QAAA,EAAU,QAAA;AAAA,EACV,UAAA,EAAY,QAAA;AAAA,EACZ,WAAA,EAAa,QAAA;AAAA,EACb,KAAA,EAAO,QAAA;AAAA,EACP,MAAA,EAAQ;AACV;;;ACpIA,IAAM,aAAA,GAAgB,CAAC,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAG,CAAA;AAGvE,IAAI,SAAA,GAAY,KAAA;AAET,SAAS,YAAY,OAAA,EAAwB;AAClD,EAAA,SAAA,GAAY,OAAA;AACd;AAEO,SAAS,UAAA,GAAsB;AACpC,EAAA,OAAO,SAAA;AACT;AAEO,IAAM,SAAN,MAAa;AAAA,EACV,QAAA,GAAW,KAAA;AAAA,EACX,OAAA;AAAA,EACA,UAAA,GAAa,CAAA;AAAA,EACb,UAAA;AAAA,EACA,WAAA;AAAA;AAAA,EAER,WAAA,CAAY,OAAA,GAAyB,EAAC,EAAG;AACvC,IAAA,IAAA,CAAK,OAAA,GAAU;AAAA,MACb,IAAA,EAAM,YAAA;AAAA,MACN,OAAA,EAAS,IAAA;AAAA,MACT,QAAA,EAAU,KAAA;AAAA,MACV,GAAG;AAAA,KACL;AACA,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,OAAA,CAAQ,IAAA,IAAQ,YAAA;AAAA,EAC1C;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,QAAA,IAAY,IAAA,CAAK,QAAA,EAAU;AAC1C,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAGhB,IAAA,IAAI,KAAK,OAAA,CAAQ,OAAA,IAAW,CAAC,IAAA,CAAK,QAAQ,QAAA,EAAU;AAClD,MAAA,IAAA,CAAK,UAAA,GAAa,YAAY,MAAM;AAClC,QAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAClB,UAAA,IAAA,CAAK,aAAA,EAAc;AACnB,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,IAAA,GAAO,aAAA,CAAc,IAAA,CAAK,UAAA,GAAa,cAAc,MAAM,CAAA;AACjE,QAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,WAAW,CAAA,CAAE,CAAA;AACpD,QAAA,IAAA,CAAK,UAAA,EAAA;AAAA,MACP,GAAG,GAAG,CAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,OAAO,OAAA,EAAuC;AAC5C,IAAA,IAAA,CAAK,UAAU,EAAE,GAAG,IAAA,CAAK,OAAA,EAAS,GAAG,OAAA,EAAQ;AAE7C,IAAA,IAAI,CAAC,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,QAAQ,QAAA,EAAU;AAAC,MAAA;AAAA,IAAO;AAGrD,IAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAW;AAC9B,MAAA,IAAA,CAAK,cAAc,OAAA,CAAQ,IAAA;AAAA,IAC7B;AAGA,IAAA,IAAI,CAAC,KAAK,UAAA,EAAY;AACpB,MAAA,IAAI,IAAA,CAAK,QAAQ,OAAA,EAAS;AACxB,QAAA,MAAMA,KAAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,IAAQ,YAAA;AAClC,QAAA,OAAA,CAAQ,IAAI,CAAA,EAAG,WAAA,CAAY,IAAI,CAAA,CAAA,EAAIA,KAAI,CAAA,CAAE,CAAA;AAAA,MAC3C,CAAA,MAAA,IAAW,IAAA,CAAK,OAAA,CAAQ,KAAA,KAAU,MAAA,EAAW;AAC3C,QAAA,IAAA,CAAK,cAAA,EAAe;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAA,GAAa;AACX,IAAA,IAAA,CAAK,QAAA,GAAW,KAAA;AAChB,IAAA,IAAA,CAAK,aAAA,EAAc;AAAA,EACrB;AAAA,EAEA,QAAQ,OAAA,EAAwB;AAC9B,IAAA,IAAA,CAAK,IAAA,EAAK;AACV,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,QAAA,IAAY,OAAA,EAAS;AACrC,MAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA,QAAA,EAAW,WAAA,CAAY,OAAO,IAAI,OAAO;AAAA,CAAI,CAAA;AAAA,IACpE;AAAA,EACF;AAAA,EAEA,KAAK,OAAA,EAAwB;AAC3B,IAAA,IAAA,CAAK,IAAA,EAAK;AACV,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,QAAA,IAAY,OAAA,EAAS;AACrC,MAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA,QAAA,EAAW,WAAA,CAAY,KAAK,IAAI,OAAO;AAAA,CAAI,CAAA;AAAA,IAClE;AAAA,EACF;AAAA,EAEQ,aAAA,GAAsB;AAC5B,IAAA,IAAI,KAAK,UAAA,EAAY;AACnB,MAAA,aAAA,CAAc,KAAK,UAAU,CAAA;AAC7B,MAAA,IAAA,CAAK,UAAA,GAAa,MAAA;AAAA,IACpB;AAAA,EACF;AAAA,EAEQ,cAAA,GAAuB;AAC7B,IAAA,IAAI,KAAK,OAAA,CAAQ,KAAA,KAAU,UAAa,IAAA,CAAK,OAAA,CAAQ,YAAY,MAAA,EAAW;AAAC,MAAA;AAAA,IAAO;AAEpF,IAAA,MAAM,OAAA,GAAU,KAAK,OAAA,CAAQ,OAAA;AAC7B,IAAA,MAAM,KAAA,GAAQ,KAAK,OAAA,CAAQ,KAAA;AAC3B,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAO,OAAA,GAAU,QAAS,GAAG,CAAA;AACrD,IAAA,MAAM,SAAA,GAAY,EAAA;AAClB,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,KAAA,CAAO,OAAA,GAAU,QAAS,SAAS,CAAA;AAE7D,IAAA,MAAM,GAAA,GAAM,SAAI,MAAA,CAAO,YAAY,IAAI,QAAA,CAAI,MAAA,CAAO,YAAY,YAAY,CAAA;AAC1E,IAAA,MAAMA,KAAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,IAAQ,UAAA;AAElC,IAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA,EAAA,EAAK,UAAA,CAAW,IAAA,CAAK,QAAG,CAAC,CAAA,CAAA,EAAIA,KAAI,CAAA,IAAA,EAAO,GAAG,CAAA,CAAA,EAAI,UAAU,MAAM,OAAO,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAG,CAAA;AAAA,EACzG;AACF;AAKO,SAAS,aAAA,CAAcA,KAAAA,EAAc,QAAA,GAAW,KAAA,EAAe;AACpE,EAAA,OAAO,IAAI,OAAO,EAAE,IAAA,EAAAA,OAAM,OAAA,EAAS,IAAA,EAAM,UAAU,CAAA;AACrD;AAKO,SAAS,iBAAA,CAAkBA,KAAAA,EAAc,KAAA,EAAe,QAAA,GAAW,KAAA,EAAe;AACvF,EAAA,OAAO,IAAI,MAAA,CAAO,EAAE,IAAA,EAAAA,KAAAA,EAAM,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,CAAA,EAAG,QAAA,EAAU,CAAA;AACzE;AAKO,SAAS,WAAA,CAAYA,KAAAA,EAAc,QAAA,GAAW,KAAA,EAAa;AAChE,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,UAAA,CAAW,IAAA,CAAK,QAAG,CAAC,CAAA,CAAA,EAAIA,KAAI,CAAA,GAAA,CAAK,CAAA;AAAA,EAClD;AACF;AAKO,SAAS,WAAA,CAAYA,KAAAA,EAAc,QAAA,GAAW,KAAA,EAAa;AAChE,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAG,WAAA,CAAY,OAAO,CAAA,CAAA,EAAIA,KAAI,CAAA,CAAE,CAAA;AAAA,EAC9C;AACF;AAKO,SAAS,SAAA,CAAUA,KAAAA,EAAc,QAAA,GAAW,KAAA,EAAa;AAC9D,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAG,WAAA,CAAY,KAAK,CAAA,CAAA,EAAIA,KAAI,CAAA,CAAE,CAAA;AAAA,EAC5C;AACF;AAmBO,SAAS,SAAA,CAAUA,OAAc,OAAA,EAA0C;AAChF,EAAA,OAAO,IAAI,OAAO,EAAE,IAAA,EAAAA,OAAM,QAAA,EAAU,SAAA,EAAW,GAAG,OAAA,EAAS,CAAA;AAC7D;;;AC7LA,IAAM,YAAA,GAAe,mBAAA;AAEd,SAAS,UAAU,KAAA,EAAuB;AAC/C,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,YAAA,EAAc,EAAE,CAAA;AACvC;AAEO,SAAS,QAAQ,KAAA,EAAwB;AAC9C,EAAA,OAAO,kBAAA,CAAmB,KAAK,KAAK,CAAA;AACtC;AAEA,SAAS,cAAc,KAAA,EAAuB;AAC5C,EAAA,OAAO,SAAA,CAAU,KAAK,CAAA,CAAE,MAAA;AAC1B;AAKO,SAAS,GAAA,CAAI,KAAA,EAAe,OAAA,GAAoB,IAAI,QAAA,EAA2B;AACpF,EAAA,MAAM,QAAQ,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,OAAA,GAAU,CAAC,EAAE,CAAA;AAChD,EAAA,MAAM,UAAA,GAAa,cAAc,KAAK,CAAA;AAGtC,EAAA,MAAM,aAAA,GAAgB,OAAO,OAAA,KAAY,WAAA,IAAe,QAAQ,MAAA,EAAQ,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,OAAA,GAAU,EAAA;AAC3G,EAAA,MAAM,oBAAoB,QAAA,IAAY,IAAA,CAAK,GAAA,CAAI,aAAA,GAAgB,GAAG,GAAG,CAAA;AAErE,EAAA,MAAM,YAAY,IAAA,CAAK,GAAA;AAAA,IACrB,iBAAA;AAAA,IACA,IAAA,CAAK,GAAA,CAAI,UAAA,EAAY,GAAG,KAAA,CAAM,IAAI,CAAA,IAAA,KAAQ,aAAA,CAAc,IAAI,CAAC,CAAC;AAAA,GAChE;AAGA,EAAA,MAAM,eAAyB,EAAC;AAChC,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,UAAA,GAAa,cAAc,IAAI,CAAA;AACrC,IAAA,IAAI,cAAc,SAAA,EAAW;AAC3B,MAAA,YAAA,CAAa,KAAK,IAAI,CAAA;AAAA,IACxB,CAAA,MAAO;AAEL,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAChC,MAAA,IAAI,WAAA,GAAc,EAAA;AAClB,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,MAAM,WAAW,WAAA,GAAc,IAAA;AAC/B,QAAA,IAAI,aAAA,CAAc,QAAQ,CAAA,IAAK,SAAA,EAAW;AACxC,UAAA,WAAA,GAAc,QAAA;AAAA,QAChB,CAAA,MAAO;AACL,UAAA,IAAI,WAAA,EAAa;AACf,YAAA,YAAA,CAAa,IAAA,CAAK,WAAA,CAAY,OAAA,EAAS,CAAA;AAAA,UACzC;AAEA,UAAA,IAAI,aAAA,CAAc,IAAI,CAAA,GAAI,SAAA,EAAW;AACnC,YAAA,YAAA,CAAa,IAAA,CAAK,QAAA,CAAS,IAAA,EAAM,SAAS,CAAC,CAAA;AAC3C,YAAA,WAAA,GAAc,EAAA;AAAA,UAChB,CAAA,MAAO;AACL,YAAA,WAAA,GAAc,IAAA;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AACA,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,YAAA,CAAa,IAAA,CAAK,WAAA,CAAY,OAAA,EAAS,CAAA;AAAA,MACzC;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,YAAY,CAAA,MAAA,EAAI,QAAA,CAAI,MAAA,CAAO,SAAA,GAAY,CAAC,CAAC,CAAA,MAAA,CAAA;AAC/C,EAAA,MAAM,SAAA,GAAY,CAAA,OAAA,EAAK,UAAA,CAAW,IAAA,CAAK,KAAK,CAAC,CAAA,EAAG,GAAA,CAAI,MAAA,CAAO,KAAK,GAAA,CAAI,CAAA,EAAG,SAAA,GAAY,UAAU,CAAC,CAAC,CAAA,OAAA,CAAA;AAC/F,EAAA,MAAM,SAAA,GAAY,YAAA,CAAa,GAAA,CAAI,CAAC,IAAA,KAAS;AAC3C,IAAA,MAAM,UAAU,IAAA,CAAK,GAAA,CAAI,GAAG,SAAA,GAAY,aAAA,CAAc,IAAI,CAAC,CAAA;AAC3D,IAAA,OAAO,UAAK,IAAI,CAAA,EAAG,GAAA,CAAI,MAAA,CAAO,OAAO,CAAC,CAAA,OAAA,CAAA;AAAA,EACxC,CAAC,CAAA;AACD,EAAA,MAAM,eAAe,CAAA,MAAA,EAAI,QAAA,CAAI,MAAA,CAAO,SAAA,GAAY,CAAC,CAAC,CAAA,MAAA,CAAA;AAElD,EAAA,OAAO,CAAC,WAAW,SAAA,EAAW,GAAG,WAAW,YAAY,CAAA,CAAE,KAAK,IAAI,CAAA;AACrE;AAKO,SAAS,MAAA,CAAO,KAAA,EAAiB,KAAA,GAAQ,CAAA,EAAa;AAC3D,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AAChC,EAAA,OAAO,MAAM,GAAA,CAAI,CAAA,IAAA,KAAQ,GAAG,MAAM,CAAA,EAAG,IAAI,CAAA,CAAE,CAAA;AAC7C;AAKO,SAAS,OAAA,CAAQ,QAAgB,OAAA,EAA6B;AACnE,EAAA,OAAO;AAAA,IACL,EAAA;AAAA,IACA,UAAA,CAAW,KAAK,MAAM,CAAA;AAAA,IACtB,GAAG,OAAO,OAAO;AAAA,GACnB;AACF;AAKO,SAAS,KAAA,CAAM,MAA6B,OAAA,EAA8B;AAC/E,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AAAC,IAAA,OAAO,EAAC;AAAA,EAAE;AAGlC,EAAA,MAAM,UAAU,OAAA,GAAU,CAAC,OAAA,EAAS,GAAG,IAAI,CAAA,GAAI,IAAA;AAC/C,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AAAC,IAAA,OAAO,EAAC;AAAA,EAAE;AAErC,EAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,CAAC,CAAA,CAAG,GAAA;AAAA,IAAI,CAAC,CAAA,EAAG,QAAA,KACvC,IAAA,CAAK,GAAA,CAAI,GAAG,OAAA,CAAQ,GAAA,CAAI,CAAA,GAAA,KAAO,MAAA,CAAO,IAAI,QAAQ,CAAA,IAAK,EAAE,CAAA,CAAE,MAAM,CAAC;AAAA,GACpE;AAGA,EAAA,OAAO,OAAA,CAAQ,IAAI,CAAA,GAAA,KAAO;AACxB,IAAA,OAAO,GAAA,CAAI,GAAA;AAAA,MAAI,CAAC,IAAA,EAAM,QAAA,KACpB,MAAA,CAAO,IAAA,IAAQ,EAAE,CAAA,CAAE,MAAA,CAAO,YAAA,CAAa,QAAQ,CAAA,IAAK,CAAC;AAAA,KACvD,CAAE,KAAK,IAAI,CAAA;AAAA,EACb,CAAC,CAAA;AACH;AASO,SAAS,QAAA,CACd,KAAA,EACA,OAAA,GAA2B,EAAC,EAClB;AACV,EAAA,MAAM,EAAE,OAAA,GAAU,IAAA,EAAK,GAAI,OAAA;AAC3B,EAAA,OAAO,YAAA,CAAa,KAAA,EAAO,EAAE,GAAA,EAAK,SAAS,CAAA;AAC7C;AAKO,SAAS,WAAW,KAAA,EAA2B;AACpD,EAAA,OAAO,KAAA,CAAM,IAAI,CAAA,IAAA,KAAQ,CAAA,EAAG,YAAY,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA;AAC1D;AAQO,SAAS,YAAA,CACd,KAAA,EACA,OAAA,GAA+B,EAAC,EACtB;AACV,EAAA,MAAM,EAAE,QAAAC,OAAAA,GAAS,CAAA,EAAG,KAAAC,IAAAA,GAAM,IAAA,EAAM,YAAW,GAAI,OAAA;AAC/C,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAC9B,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,IAAA,OAAO,EAAC;AAAA,EACV;AACA,EAAA,MAAM,SAAA,GAAY,GAAA,CAAI,MAAA,CAAOD,OAAM,CAAA;AACnC,EAAA,MAAM,YAAA,GAAeC,IAAAA,GACjB,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,GAAA,CAAI,CAAA,GAAA,KAAOD,OAAAA,GAAS,SAAA,CAAU,GAAG,CAAA,CAAE,MAAM,CAAC,CAAA,GAC3D,CAAA;AACJ,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ;AACvB,IAAA,MAAM,MAAA,GAAS,GAAA;AACf,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,KAAA,CAAM,GAAG,KAAK,EAAE,CAAA;AACxC,IAAA,MAAM,SAAA,GAAYA,OAAAA,GAAS,SAAA,CAAU,MAAM,CAAA,CAAE,MAAA;AAC7C,IAAA,MAAM,UAAUC,IAAAA,GAAM,IAAA,CAAK,IAAI,CAAA,EAAG,YAAA,GAAe,SAAS,CAAA,GAAI,CAAA;AAC9D,IAAA,MAAM,YAAA,GAAe,GAAG,SAAS,CAAA,EAAG,MAAM,CAAA,EAAG,GAAA,CAAI,MAAA,CAAO,OAAO,CAAC,CAAA,CAAA;AAChE,IAAA,MAAM,aAAA,GAAgB,UAAA,GAAa,UAAA,CAAW,QAAA,EAAU,GAAG,CAAA,GAAI,QAAA;AAC/D,IAAA,MAAM,YAAY,OAAA,CAAQ,aAAa,IAAI,aAAA,GAAgB,UAAA,CAAW,MAAM,aAAa,CAAA;AACzF,IAAA,OAAO,GAAG,UAAA,CAAW,IAAA,CAAK,YAAY,CAAC,KAAK,SAAS,CAAA,CAAA;AAAA,EACvD,CAAC,CAAA;AACH;AAEA,IAAM,IAAA,GAAO,CAAC,KAAA,KAA0B,KAAA,CAAM,UAAS,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAExE,IAAM,MAAA,GAAS,CAAC,KAAA,KAAgC,KAAA,YAAiB,IAAA,GAAO,IAAI,IAAA,CAAK,KAAA,CAAM,OAAA,EAAS,CAAA,GAAI,IAAI,KAAK,KAAK,CAAA;AAElH,IAAM,cAAc,CAAC,IAAA,KAAwB,OAAO,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA;AAE3E,SAAS,gBAAA,CAAiB,MAAY,QAAA,EAA2B;AAC/D,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,CAAC,KAAK,iBAAA,EAAkB;AAAA,EACjC;AAEA,EAAA,MAAM,GAAA,GAAM,IAAI,IAAA,CAAK,cAAA,CAAe,OAAA,EAAS;AAAA,IAC3C,QAAA;AAAA,IACA,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,GAAA,EAAK,SAAA;AAAA,IACL,IAAA,EAAM,SAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,aAAA,CAAc,IAAI,CAAA;AACpC,EAAA,MAAM,SAAS,MAAA,CAAO,WAAA;AAAA,IACpB,MACG,MAAA,CAAO,CAAA,IAAA,KAAQ,IAAA,CAAK,IAAA,KAAS,SAAS,CAAA,CACtC,GAAA,CAAI,CAAA,IAAA,KAAQ,CAAC,KAAK,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,KAAK,CAAC,CAAC;AAAA,GAChD;AAEA,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,IAAQ,IAAA,CAAK,cAAA,EAAe;AAChD,EAAA,MAAM,SAAS,MAAA,CAAO,KAAA,IAAS,IAAA,CAAK,WAAA,KAAgB,CAAA,IAAK,CAAA;AACzD,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,IAAO,IAAA,CAAK,UAAA,EAAW;AAE1C,EAAA,MAAM,IAAA,GAAA,CAAQ,MAAA,CAAO,IAAA,IAAQ,IAAA,CAAK,aAAY,IAAK,EAAA;AACnD,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,IAAU,IAAA,CAAK,aAAA,EAAc;AACnD,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,IAAU,IAAA,CAAK,aAAA,EAAc;AAEnD,EAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,CAAI,IAAA,EAAM,OAAO,GAAA,EAAK,IAAA,EAAM,QAAQ,MAAM,CAAA;AAE7D,EAAA,OAAO,KAAK,KAAA,CAAA,CAAO,KAAA,GAAQ,IAAA,CAAK,OAAA,MAAa,GAAK,CAAA;AACpD;AAEA,SAAS,aAAa,aAAA,EAA+B;AACnD,EAAA,MAAM,IAAA,GAAO,aAAA,IAAiB,CAAA,GAAI,GAAA,GAAM,GAAA;AACxC,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,aAAa,CAAA;AACzC,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,UAAA,GAAa,EAAE,CAAA;AACxC,EAAA,MAAM,UAAU,UAAA,GAAa,EAAA;AAC7B,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,EAAG,IAAA,CAAK,KAAK,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAC/C;AAEA,SAAS,YAAA,CAAa,MAAY,QAAA,EAOhC;AACA,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,KAAK,WAAA,EAAY;AAAA,MACvB,KAAA,EAAO,IAAA,CAAK,QAAA,EAAS,GAAI,CAAA;AAAA,MACzB,GAAA,EAAK,KAAK,OAAA,EAAQ;AAAA,MAClB,IAAA,EAAM,KAAK,QAAA,EAAS;AAAA,MACpB,MAAA,EAAQ,KAAK,UAAA,EAAW;AAAA,MACxB,MAAA,EAAQ,KAAK,UAAA;AAAW,KAC1B;AAAA,EACF;AAEA,EAAA,MAAM,GAAA,GAAM,IAAI,IAAA,CAAK,cAAA,CAAe,OAAA,EAAS;AAAA,IAC3C,QAAA;AAAA,IACA,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,GAAA,EAAK,SAAA;AAAA,IACL,IAAA,EAAM,SAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,aAAA,CAAc,IAAI,CAAA;AACpC,EAAA,MAAM,SAAS,MAAA,CAAO,WAAA;AAAA,IACpB,MACG,MAAA,CAAO,CAAA,IAAA,KAAQ,IAAA,CAAK,IAAA,KAAS,SAAS,CAAA,CACtC,GAAA,CAAI,CAAA,IAAA,KAAQ,CAAC,KAAK,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,KAAK,CAAC,CAAC;AAAA,GAChD;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA,CAAO,IAAA,IAAQ,IAAA,CAAK,cAAA,EAAe;AAAA,IACzC,KAAA,EAAO,MAAA,CAAO,KAAA,IAAS,IAAA,CAAK,aAAY,GAAI,CAAA;AAAA,IAC5C,GAAA,EAAK,MAAA,CAAO,GAAA,IAAO,IAAA,CAAK,UAAA,EAAW;AAAA;AAAA,IAEnC,IAAA,EAAA,CAAO,MAAA,CAAO,IAAA,IAAQ,IAAA,CAAK,aAAY,IAAK,EAAA;AAAA,IAC5C,MAAA,EAAQ,MAAA,CAAO,MAAA,IAAU,IAAA,CAAK,aAAA,EAAc;AAAA,IAC5C,MAAA,EAAQ,MAAA,CAAO,MAAA,IAAU,IAAA,CAAK,aAAA;AAAc,GAC9C;AACF;AAKO,SAAS,SAASF,KAAAA,EAAsB;AAC7C,EAAA,OAAO,UAAA,CAAW,OAAA,CAAQ,UAAA,CAAW,IAAA,CAAKA,KAAI,CAAC,CAAA;AACjD;AAKO,SAAS,YAAYA,KAAAA,EAAsB;AAChD,EAAA,OAAO,UAAA,CAAW,MAAA,CAAO,UAAA,CAAW,IAAA,CAAKA,KAAI,CAAC,CAAA;AAChD;AAKO,SAAS,MAAMA,KAAAA,EAAsB;AAC1C,EAAA,OAAO,UAAA,CAAW,MAAMA,KAAI,CAAA;AAC9B;AAKO,SAAS,WAAW,KAAA,EAAuB;AAChD,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAA,EAAK,IAAA,EAAM,MAAM,IAAI,CAAA;AACpC,EAAA,IAAI,IAAA,GAAO,KAAA;AACX,EAAA,IAAI,SAAA,GAAY,CAAA;AAEhB,EAAA,OAAO,IAAA,IAAQ,IAAA,IAAQ,SAAA,GAAY,KAAA,CAAM,SAAS,CAAA,EAAG;AACnD,IAAA,IAAA,IAAQ,IAAA;AACR,IAAA,SAAA,EAAA;AAAA,EACF;AAEA,EAAA,OAAO,CAAA,EAAG,IAAA,CAAK,OAAA,CAAQ,SAAA,KAAc,CAAA,GAAI,CAAA,GAAI,CAAC,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,SAAS,CAAC,CAAA,CAAA;AACrE;AAKO,SAAS,mBAAmBG,UAAAA,EAAkC;AACnE,EAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,EAAA,MAAM,IAAA,GAAO,OAAOA,UAAS,CAAA;AAE7B,EAAA,IAAI,CAAC,WAAA,CAAY,IAAI,CAAA,EAAG;AACtB,IAAA,OAAO,cAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,OAAA,EAAQ,GAAI,KAAK,OAAA,EAAQ;AAE5C,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,GAAI,CAAA;AACxC,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,EAAE,CAAA;AACvC,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,EAAE,CAAA;AACrC,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,EAAE,CAAA;AAElC,EAAA,IAAI,OAAO,CAAA,EAAG;AACZ,IAAA,OAAO,GAAG,IAAI,CAAA,IAAA,EAAO,IAAA,GAAO,CAAA,GAAI,MAAM,EAAE,CAAA,IAAA,CAAA;AAAA,EAC1C,CAAA,MAAA,IAAW,QAAQ,CAAA,EAAG;AACpB,IAAA,OAAO,GAAG,KAAK,CAAA,KAAA,EAAQ,KAAA,GAAQ,CAAA,GAAI,MAAM,EAAE,CAAA,IAAA,CAAA;AAAA,EAC7C,CAAA,MAAA,IAAW,UAAU,CAAA,EAAG;AACtB,IAAA,OAAO,GAAG,OAAO,CAAA,OAAA,EAAU,OAAA,GAAU,CAAA,GAAI,MAAM,EAAE,CAAA,IAAA,CAAA;AAAA,EACnD,CAAA,MAAO;AACL,IAAA,OAAO,GAAG,OAAO,CAAA,OAAA,EAAU,OAAA,GAAU,CAAA,GAAI,MAAM,EAAE,CAAA,IAAA,CAAA;AAAA,EACnD;AACF;AAaO,SAAS,eAAA,CACdA,UAAAA,EACA,OAAA,GAAkC,EAAC,EAC3B;AACR,EAAA,MAAM;AAAA,IACJ,IAAA,GAAO,OAAA;AAAA,IACP,QAAA;AAAA,IACA,cAAA,GAAiB,KAAA;AAAA,IACjB,mBAAA,GAAsB,IAAA;AAAA,IACtB,aAAA,GAAgB;AAAA,GAClB,GAAI,OAAA;AAEJ,EAAA,MAAM,IAAA,GAAO,OAAOA,UAAS,CAAA;AAC7B,EAAA,IAAI,CAAC,WAAA,CAAY,IAAI,CAAA,EAAG;AACtB,IAAA,OAAO,cAAA;AAAA,EACT;AAEA,EAAA,MAAM,aAAA,GAAgB,aAAA,GAAgB,gBAAA,CAAiB,IAAA,EAAM,QAAQ,CAAA,GAAI,IAAA;AACzE,EAAA,MAAM,YAAA,GACJ,iBAAiB,aAAA,KAAkB,IAAA,GAAO,KAAK,YAAA,CAAa,aAAa,CAAC,CAAA,CAAA,CAAA,GAAM,EAAA;AAElF,EAAA,IAAI,SAAS,KAAA,EAAO;AAClB,IAAA,MAAM,MAAA,GAAS,KAAK,WAAA,EAAY;AAChC,IAAA,MAAM,MAAM,mBAAA,GAAsB,MAAA,GAAS,MAAA,CAAO,OAAA,CAAQ,aAAa,GAAG,CAAA;AAC1E,IAAA,OAAO,CAAA,EAAG,GAAG,CAAA,EAAG,YAAY,CAAA,CAAA;AAAA,EAC9B;AAEA,EAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,GAAA,EAAK,IAAA,EAAM,QAAQ,MAAA,EAAO,GAAI,YAAA,CAAa,IAAA,EAAM,QAAQ,CAAA;AAC9E,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,KAAK,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAAA,IACnC,CAAA,EAAG,IAAA,CAAK,IAAI,CAAC,IAAI,IAAA,CAAK,MAAM,CAAC,CAAA,EAAG,iBAAiB,CAAA,CAAA,EAAI,IAAA,CAAK,MAAM,CAAC,KAAK,EAAE,CAAA;AAAA,GAC1E,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,EAAG,YAAY,CAAA,CAAA;AAC/B;AAKO,SAAS,QAAA,CAASH,OAAc,SAAA,EAA2B;AAChE,EAAA,IAAIA,KAAAA,CAAK,UAAU,SAAA,EAAW;AAAC,IAAA,OAAOA,KAAAA;AAAA,EAAK;AAC3C,EAAA,OAAOA,KAAAA,CAAK,SAAA,CAAU,CAAA,EAAG,SAAA,GAAY,CAAC,CAAA,GAAI,KAAA;AAC5C;AAKO,SAAS,GAAA,CAAIA,KAAAA,EAAc,KAAA,EAAe,KAAA,GAAqC,MAAA,EAAgB;AACpG,EAAA,IAAIA,KAAAA,CAAK,UAAU,KAAA,EAAO;AAAC,IAAA,OAAOA,KAAAA;AAAA,EAAK;AAEvC,EAAA,MAAM,OAAA,GAAU,QAAQA,KAAAA,CAAK,MAAA;AAE7B,EAAA,QAAQ,KAAA;AAAO,IACb,KAAK,OAAA;AACH,MAAA,OAAO,GAAA,CAAI,MAAA,CAAO,OAAO,CAAA,GAAIA,KAAAA;AAAA,IAC/B,KAAK,QAAA;AACH,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,CAAC,CAAA;AACtC,MAAA,MAAM,WAAW,OAAA,GAAU,OAAA;AAC3B,MAAA,OAAO,IAAI,MAAA,CAAO,OAAO,IAAIA,KAAAA,GAAO,GAAA,CAAI,OAAO,QAAQ,CAAA;AAAA,IACzD;AACE,MAAA,OAAOA,KAAAA,GAAO,GAAA,CAAI,MAAA,CAAO,OAAO,CAAA;AAAA;AAEtC;;;ACtYO,SAAS,aAAa,EAAA,EAAoB;AAC/C,EAAA,IAAI,KAAK,GAAA,EAAM;AACb,IAAA,OAAO,GAAG,EAAE,CAAA,EAAA,CAAA;AAAA,EACd,CAAA,MAAA,IAAW,KAAK,GAAA,EAAO;AACrB,IAAA,OAAO,CAAA,EAAA,CAAI,EAAA,GAAK,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,EAClC,CAAA,MAAO;AACL,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,EAAA,GAAK,GAAK,CAAA;AACrC,IAAA,MAAM,OAAA,GAAA,CAAY,EAAA,GAAK,GAAA,GAAS,GAAA,EAAM,QAAQ,CAAC,CAAA;AAC/C,IAAA,OAAO,CAAA,EAAG,OAAO,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,CAAA;AAAA,EAC/B;AACF;AAKO,SAAS,sBAAsB,OAAA,EAA2C;AAC/E,EAAA,MAAM,QAAkB,EAAC;AAGzB,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,CACzC,OAAO,CAAC,CAAC,GAAG,CAAA,KAAM,GAAA,KAAQ,OAAO,EACjC,IAAA,CAAK,CAAC,GAAG,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA;AAE/B,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,EAAE,CAAA,IAAK,aAAA,EAAe;AACtC,IAAA,MAAM,aAAA,GAAgB,KAAK,MAAA,CAAO,CAAC,EAAE,WAAA,EAAY,GAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AACjE,IAAA,KAAA,CAAM,KAAK,CAAA,EAAG,aAAa,KAAK,YAAA,CAAa,EAAE,CAAC,CAAA,CAAE,CAAA;AAAA,EACpD;AAGA,EAAA,IAAI,OAAA,CAAQ,UAAU,MAAA,EAAW;AAC/B,IAAA,KAAA,CAAM,KAAK,CAAA,OAAA,EAAU,YAAA,CAAa,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,EACpD;AAEA,EAAA,OAAO,KAAA;AACT;AAKO,SAAS,oBAAoB,MAAA,EAA+B;AACjE,EAAA,MAAM,WAAqB,EAAC;AAG5B,EAAA,MAAM,YAAA,GAAe,QAAA,CAAS,MAAA,CAAO,OAAO,CAAA;AAC5C,EAAA,QAAA,CAAS,IAAA,CAAK,GAAG,YAAY,CAAA;AAG7B,EAAA,IAAI,MAAA,CAAO,WAAW,MAAA,EAAW;AAC/B,IAAA,QAAA,CAAS,KAAK,EAAE,CAAA;AAEhB,IAAA,IAAI,OAAO,MAAA,CAAO,MAAA,KAAW,QAAA,EAAU;AACrC,MAAA,QAAA,CAAS,KAAK,CAAA,MAAA,EAAS,YAAA,CAAa,MAAA,CAAO,MAAM,CAAC,CAAA,CAAE,CAAA;AAAA,IACtD,CAAA,MAAO;AACL,MAAA,MAAM,WAAA,GAAc,qBAAA,CAAsB,MAAA,CAAO,MAAM,CAAA;AACvD,MAAA,QAAA,CAAS,IAAA,CAAK,GAAG,WAAW,CAAA;AAAA,IAC9B;AAAA,EACF;AAGA,EAAA,IAAI,MAAA,CAAO,QAAA,IAAY,MAAA,CAAO,QAAA,CAAS,SAAS,CAAA,EAAG;AACjD,IAAA,QAAA,CAAS,KAAK,EAAE,CAAA;AAChB,IAAA,QAAA,CAAS,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,WAAW,CAAC,CAAA;AAC7C,IAAA,MAAA,CAAO,QAAA,CAAS,OAAA;AAAA,MAAQ,CAAA,OAAA,KACtB,QAAA,CAAS,IAAA,CAAK,CAAA,EAAA,EAAK,UAAA,CAAW,IAAI,QAAG,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE;AAAA,KACrD;AAAA,EACF;AAGA,EAAA,IAAI,MAAA,CAAO,MAAA,IAAU,MAAA,CAAO,MAAA,CAAO,SAAS,CAAA,EAAG;AAC7C,IAAA,QAAA,CAAS,KAAK,EAAE,CAAA;AAChB,IAAA,QAAA,CAAS,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,SAAS,CAAC,CAAA;AACzC,IAAA,MAAA,CAAO,MAAA,CAAO,OAAA;AAAA,MAAQ,CAAA,KAAA,KACpB,QAAA,CAAS,IAAA,CAAK,CAAA,EAAA,EAAK,UAAA,CAAW,IAAI,QAAG,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE;AAAA,KACnD;AAAA,EACF;AAGA,EAAA,IAAI,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,WAAA,CAAY,SAAS,CAAA,EAAG;AACvD,IAAA,QAAA,CAAS,KAAK,EAAE,CAAA;AAChB,IAAA,QAAA,CAAS,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,cAAc,CAAC,CAAA;AAC7C,IAAA,MAAA,CAAO,WAAA,CAAY,OAAA;AAAA,MAAQ,CAAA,UAAA,KACzB,QAAA,CAAS,IAAA,CAAK,CAAA,EAAA,EAAK,UAAA,CAAW,IAAI,QAAG,CAAC,CAAA,CAAA,EAAI,UAAU,CAAA,CAAE;AAAA,KACxD;AAAA,EACF;AAGA,EAAA,IAAI,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,WAAA,CAAY,SAAS,CAAA,EAAG;AACvD,IAAA,QAAA,CAAS,KAAK,EAAE,CAAA;AAChB,IAAA,QAAA,CAAS,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,cAAc,CAAC,CAAA;AAC7C,IAAA,MAAA,CAAO,WAAA,CAAY,OAAA;AAAA,MAAQ,CAAA,UAAA,KACzB,QAAA,CAAS,IAAA,CAAK,CAAA,EAAA,EAAK,UAAA,CAAW,IAAI,QAAG,CAAC,CAAA,CAAA,EAAI,UAAU,CAAA,CAAE;AAAA,KACxD;AAAA,EACF;AAEA,EAAA,OAAO,GAAA,CAAI,MAAA,CAAO,KAAA,EAAO,QAAQ,CAAA;AACnC;AAKO,SAAS,kBAAA,CACd,KAAA,EACA,OAAA,EACA,MAAA,EACe;AACf,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AACF;AAKO,SAAS,oBAAA,CACd,KAAA,EACA,OAAA,EACA,OAAA,GAMI,EAAC,EACU;AACf,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,OAAA;AAAA,IACA,GAAG;AAAA,GACL;AACF;;;ACnJO,IAAM,gBAAN,MAAoB;AAAA,EACjB,KAAA;AAAA,EACA,cAAsC,EAAC;AAAA,EAE/C,WAAA,GAAc;AACZ,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,GAAA,EAAI;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,IAAA,EAAoB;AAC7B,IAAA,IAAA,CAAK,YAAY,IAAI,CAAA,GAAI,IAAA,CAAK,GAAA,KAAQ,IAAA,CAAK,KAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,GAAgB;AACd,IAAA,OAAO,IAAA,CAAK,GAAA,EAAI,GAAI,IAAA,CAAK,KAAA;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,GAAoC;AAClC,IAAA,OAAO,EAAE,GAAG,IAAA,CAAK,aAAa,KAAA,EAAO,IAAA,CAAK,OAAM,EAAE;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAKA,eAAA,GAA0C;AACxC,IAAA,OAAO,EAAE,GAAG,IAAA,CAAK,WAAA,EAAY;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,GAAA,EAAI;AACtB,IAAA,IAAA,CAAK,cAAc,EAAC;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAA,GAA8B;AAC5B,IAAA,MAAM,kBAAA,GAAqB,KAAK,GAAA,CAAI,GAAG,OAAO,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA,EAAG,CAAC,CAAA;AACzE,IAAA,OAAO,IAAA,CAAK,GAAA,EAAI,GAAI,IAAA,CAAK,KAAA,GAAQ,kBAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,cAAA,EAAuC;AACrD,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,WAAA,CAAY,cAAc,CAAA;AACtD,IAAA,IAAI,mBAAmB,MAAA,EAAW;AAChC,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA,CAAK,GAAA,EAAI,GAAI,IAAA,CAAK,KAAA,GAAQ,cAAA;AAAA,EACnC;AACF;;;AC7CO,SAAS,sBAAsB,QAAA,EAAqC;AACzE,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,QAAQ,CAAA;AACnC,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAyB;AAG5C,EAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,IAAA,MAAM,CAAC,KAAA,EAAO,GAAG,IAAI,CAAA,GAAI,GAAA,CAAI,MAAM,GAAG,CAAA;AACtC,IAAA,IAAI,KAAA,IAAS,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AAC5B,MAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA,EAAG;AACtB,QAAA,MAAA,CAAO,GAAA,CAAI,KAAA,kBAAO,IAAI,GAAA,EAAK,CAAA;AAAA,MAC7B;AACA,MAAA,MAAA,CAAO,IAAI,KAAK,CAAA,CAAG,IAAI,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,IACvC;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,UAAA;AAAA,IACV;AAAA,GACF;AACF;AAKO,SAAS,kBAAA,CACd,SACA,QAAA,EACS;AAET,EAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,KAAK,CAAA,EAAG;AAC7B,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA;AAC/B,IAAA,IAAI,KAAA,CAAM,UAAU,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,EAAG;AAC7C,MAAA,MAAM,KAAA,GAAQ,MAAM,CAAC,CAAA;AACrB,MAAA,MAAM,UAAA,GAAa,MAAM,CAAC,CAAA;AAC1B,MAAA,MAAM,WAAA,GAAc,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA;AAC1C,MAAA,OAAO,QAAA,CAAS,QAAA,CAAS,GAAA,CAAI,WAAW,CAAA;AAAA,IAC1C;AAAA,EACF;AAGA,EAAA,OAAO,QAAA,CAAS,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA;AACtC;AAKO,SAAS,mBAAA,CACd,aACA,QAAA,EACqB;AACrB,EAAA,OAAO,WAAA,CAAY,IAAI,CAAA,UAAA,MAAe;AAAA,IACpC,GAAG,UAAA;AAAA,IACH,SAAA,EAAW,kBAAA,CAAmB,UAAA,CAAW,OAAA,EAAS,QAAQ;AAAA,GAC5D,CAAE,CAAA,CAAE,MAAA,CAAO,CAAA,UAAA,KAAc,WAAW,SAAS,CAAA;AAC/C;AAKO,SAAS,0BAAA,CACd,YAAA,EACA,OAAA,EACA,QAAA,EACqB;AACrB,EAAA,MAAM,cAAmC,EAAC;AAG1C,EAAA,IAAI,YAAA,CAAa,GAAA,CAAI,eAAe,CAAA,EAAG;AACrC,IAAA,WAAA,CAAY,IAAA,CAAK;AAAA,MACf,EAAA,EAAI,WAAA;AAAA,MACJ,OAAA,EAAS,kBAAA;AAAA,MACT,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,MACd,WAAA,EAAa,iCAAA;AAAA,MACb,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,YAAA,CAAa,GAAA,CAAI,gBAAgB,CAAA,EAAG;AACtC,IAAA,WAAA,CAAY,IAAA,CAAK;AAAA,MACf,EAAA,EAAI,eAAA;AAAA,MACJ,OAAA,EAAS,mBAAA;AAAA,MACT,IAAA,EAAM,CAAC,WAAW,CAAA;AAAA,MAClB,WAAA,EAAa,uBAAA;AAAA,MACb,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,YAAA,CAAa,GAAA,CAAI,YAAY,CAAA,EAAG;AAClC,IAAA,WAAA,CAAY,IAAA,CAAK;AAAA,MACf,EAAA,EAAI,cAAA;AAAA,MACJ,OAAA,EAAS,mBAAA;AAAA,MACT,IAAA,EAAM,CAAC,aAAa,CAAA;AAAA,MACpB,WAAA,EAAa,mBAAA;AAAA,MACb,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,YAAA,CAAa,GAAA,CAAI,sBAAsB,CAAA,EAAG;AAC5C,IAAA,WAAA,CAAY,IAAA,CAAK;AAAA,MACf,EAAA,EAAI,YAAA;AAAA,MACJ,OAAA,EAAS,kBAAA;AAAA,MACT,MAAM,EAAC;AAAA,MACP,WAAA,EAAa,uBAAA;AAAA,MACb,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,YAAA,CAAa,GAAA,CAAI,oBAAoB,CAAA,EAAG;AAC1C,IAAA,WAAA,CAAY,IAAA,CAAK;AAAA,MACf,EAAA,EAAI,eAAA;AAAA,MACJ,OAAA,EAAS,kBAAA;AAAA,MACT,IAAA,EAAM,CAAC,QAAQ,CAAA;AAAA,MACf,WAAA,EAAa,iCAAA;AAAA,MACb,MAAA,EAAQ,YAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,OAAA,CAAQ,MAAM,SAAA,EAAW;AAC3B,IAAA,WAAA,CAAY,IAAA,CAAK;AAAA,MACf,EAAA,EAAI,WAAA;AAAA,MACJ,OAAA,EAAS,iBAAA;AAAA,MACT,MAAM,EAAC;AAAA,MACP,WAAA,EAAa,uBAAA;AAAA,MACb,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAGA,EAAA,OAAO,mBAAA,CAAoB,aAAa,QAAQ,CAAA;AAClD;AAMO,SAAS,oBAAA,CACd,WAAA,EACA,QAAA,EACA,KAAA,GAAgB,SAAA,EACK;AACrB,EAAA,IAAI,CAAC,WAAA,EAAa;AAAC,IAAA,OAAO,EAAC;AAAA,EAAE;AAE7B,EAAA,MAAM,YAAA,GAAoC;AAAA,IACxC;AAAA,MACE,EAAA,EAAI,aAAA;AAAA,MACJ,OAAA,EAAS,MAAM,KAAK,CAAA,MAAA,CAAA;AAAA,MACpB,MAAM,EAAC;AAAA,MACP,WAAA,EAAa,iBAAA;AAAA,MACb,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACR;AAAA,IACA;AAAA,MACE,EAAA,EAAI,YAAA;AAAA,MACJ,OAAA,EAAS,MAAM,KAAK,CAAA,KAAA,CAAA;AAAA,MACpB,MAAM,EAAC;AAAA,MACP,WAAA,EAAa,aAAA;AAAA,MACb,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACR;AAAA,IACA;AAAA,MACE,EAAA,EAAI,aAAA;AAAA,MACJ,OAAA,EAAS,MAAM,KAAK,CAAA,MAAA,CAAA;AAAA,MACpB,MAAM,EAAC;AAAA,MACP,WAAA,EAAa,eAAA;AAAA,MACb,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM;AAAA;AACR,GACF;AAEA,EAAA,OAAO,mBAAA,CAAoB,cAAc,QAAQ,CAAA;AACnD;;;ACtKO,IAAM,yBAAN,MAAyD;AAAA,EAC9D,YAAoB,QAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EAAqB;AAAA,EAArB,QAAA;AAAA,EAEpB,MAAM,oBAAA,GAA0C;AAC9C,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,QAAQ,CAAA;AAAA,EAC1B;AAAA,EAEA,MAAM,eAAe,SAAA,EAAgD;AACnE,IAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,SAAS,CAAA,EAAG;AACtC,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,CAAC,KAAA,EAAO,IAAI,CAAA,GAAI,SAAA,CAAU,MAAM,GAAG,CAAA;AACzC,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,SAAA;AAAA,MACJ,OAAO,KAAA,IAAS,SAAA;AAAA,MAChB,MAAM,IAAA,IAAQ,SAAA;AAAA,MACd,WAAA,EAAa,WAAW,SAAS,CAAA,CAAA;AAAA,MACjC,SAAA,EAAW;AAAA,KACb;AAAA,EACF;AAAA,EAEA,MAAM,mBAAmB,SAAA,EAAqC;AAC5D,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,SAAS,CAAA;AAAA,EACzC;AACF;AAOO,SAAS,uBAAuB,QAAA,EAAsC;AAC3E,EAAA,OAAO,IAAI,uBAAuB,QAAQ,CAAA;AAC5C;;;ACzCO,SAAS,kBAAkB,QAAA,EAAuC;AACvE,EAAA,OAAO,QAAA,CAAS,GAAA,CAAI,CAAA,GAAA,KAAO,GAAA,CAAI,EAAE,CAAA;AACnC;AAKO,SAAS,qBAAqB,QAAA,EAAuC;AAC1E,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAY;AAC/B,EAAA,QAAA,CAAS,QAAQ,CAAA,GAAA,KAAO,MAAA,CAAO,GAAA,CAAI,GAAA,CAAI,KAAK,CAAC,CAAA;AAC7C,EAAA,OAAO,KAAA,CAAM,KAAK,MAAM,CAAA;AAC1B;AAKO,SAAS,mBAAA,CAAoB,UAA6B,KAAA,EAAkC;AACjG,EAAA,OAAO,QAAA,CAAS,MAAA,CAAO,CAAA,GAAA,KAAO,GAAA,CAAI,UAAU,KAAK,CAAA;AACnD;AAKO,SAAS,eAAA,CAAgB,UAA6B,EAAA,EAAyC;AACpG,EAAA,OAAO,QAAA,CAAS,IAAA,CAAK,CAAA,GAAA,KAAO,GAAA,CAAI,OAAO,EAAE,CAAA;AAC3C;AAKO,SAAS,cAAA,CAAe,UAA6B,SAAA,EAMnD;AACP,EAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,QAAA,EAAU,SAAS,CAAA;AAC/C,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,CAAC,KAAA,EAAO,IAAI,CAAA,GAAI,SAAA,CAAU,MAAM,GAAG,CAAA;AACzC,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,SAAA;AAAA,IACJ,OAAO,KAAA,IAAS,SAAA;AAAA,IAChB,MAAM,IAAA,IAAQ,SAAA;AAAA,IACd,aAAa,GAAA,CAAI,QAAA;AAAA,IACjB,SAAA,EAAW;AAAA,GACb;AACF;AAKO,SAAS,wBAAA,CACd,QAAA,EACA,KAAA,EACA,aAAA,EACA,QAAA,EASC;AACD,EAAA,MAAM,aAAA,GAAgB,mBAAA,CAAoB,QAAA,EAAU,KAAK,CAAA;AACzD,EAAA,MAAM,cAQD,EAAC;AAGN,EAAA,KAAA,MAAW,OAAO,aAAA,EAAe;AAE/B,IAAA,WAAA,CAAY,IAAA,CAAK;AAAA,MACf,IAAI,CAAA,EAAG,GAAA,CAAI,KAAA,CAAM,WAAA,EAAa,CAAA,CAAA,EAAI,GAAA,CAAI,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,EAAG,WAAA,MAAiB,SAAS,CAAA,CAAA;AAAA,MAClF,OAAA,EAAS,CAAA,GAAA,EAAM,GAAA,CAAI,KAAK,CAAA,CAAA,EAAI,GAAA,CAAI,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,IAAK,EAAE,CAAA,CAAA;AAAA,MACtD,MAAM,EAAC;AAAA,MACP,aAAa,GAAA,CAAI,QAAA;AAAA,MACjB,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,SAAA;AAAA,MACN,SAAA,EAAW;AAAA,KACZ,CAAA;AAGD,IAAA,IAAI,GAAA,CAAI,EAAA,CAAG,QAAA,CAAS,MAAM,CAAA,EAAG;AAC3B,MAAA,WAAA,CAAY,IAAA,CAAK;AAAA,QACf,EAAA,EAAI,CAAA,EAAG,GAAA,CAAI,KAAA,CAAM,aAAa,CAAA,WAAA,CAAA;AAAA,QAC9B,OAAA,EAAS,CAAA,GAAA,EAAM,GAAA,CAAI,KAAK,CAAA,CAAA,EAAI,GAAA,CAAI,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,IAAK,EAAE,CAAA,CAAA;AAAA,QACtD,IAAA,EAAM,CAAC,SAAS,CAAA;AAAA,QAChB,WAAA,EAAa,CAAA,EAAG,GAAA,CAAI,QAAQ,CAAA,QAAA,CAAA;AAAA,QAC5B,MAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAM,aAAA;AAAA,QACN,SAAA,EAAW;AAAA,OACZ,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,GAAA,CAAI,GAAG,QAAA,CAAS,OAAO,KAAK,GAAA,CAAI,EAAA,CAAG,QAAA,CAAS,OAAO,CAAA,EAAG;AACxD,MAAA,WAAA,CAAY,IAAA,CAAK;AAAA,QACf,EAAA,EAAI,CAAA,EAAG,GAAA,CAAI,KAAA,CAAM,aAAa,CAAA,WAAA,CAAA;AAAA,QAC9B,OAAA,EAAS,CAAA,GAAA,EAAM,GAAA,CAAI,KAAK,CAAA,CAAA,EAAI,GAAA,CAAI,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,IAAK,EAAE,CAAA,CAAA;AAAA,QACtD,IAAA,EAAM,CAAC,QAAQ,CAAA;AAAA,QACf,WAAA,EAAa,CAAA,EAAG,GAAA,CAAI,QAAQ,CAAA,OAAA,CAAA;AAAA,QAC5B,MAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW;AAAA,OACZ,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAO,WAAA;AACT;;;ACrHO,IAAM,sBAAN,MAA0B;AAAA,EACvB,QAAA,uBAAwC,GAAA,EAAI;AAAA,EAC5C,cAAA,GAAyC,IAAA;AAAA;AAAA;AAAA;AAAA,EAKjD,gBAAgB,GAAA,EAAuB;AACrC,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,GAAA,CAAI,IAAA,EAAM,GAAG,CAAA;AAC/B,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAA,GAAqC;AAC3C,IAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,MAAA,OAAO,IAAA,CAAK,cAAA;AAAA,IACd;AAEA,IAAA,MAAM,cAAwB,EAAC;AAC/B,IAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,QAAA,CAAS,MAAA,EAAO,EAAG;AACxC,MAAA,WAAA,CAAY,IAAA,CAAK,GAAG,iBAAA,CAAkB,GAAA,CAAI,QAAQ,CAAC,CAAA;AAAA,IACrD;AAEA,IAAA,IAAA,CAAK,cAAA,GAAiB,sBAAsB,WAAW,CAAA;AACvD,IAAA,OAAO,IAAA,CAAK,cAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,wBAAA,CACE,OACA,OAAA,EACqB;AACrB,IAAA,MAAM,cAAmC,EAAC;AAC1C,IAAA,MAAM,QAAA,GAAW,KAAK,iBAAA,EAAkB;AAGxC,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,IAAA,CAAK,SAAS,MAAA,EAAQ,EACpD,MAAA,CAAO,CAAA,GAAA,KAAO,IAAI,KAAA,KAAU,KAAK,EACjC,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,CAAA,CAAE,QAAA,GAAW,CAAA,CAAE,QAAQ,CAAA;AAEzC,IAAA,KAAA,MAAW,OAAO,aAAA,EAAe;AAC/B,MAAA,MAAM,gBAAA,GAAmB,wBAAA;AAAA,QACvB,GAAA,CAAI,QAAA;AAAA,QACJ,KAAA;AAAA,QACA,OAAA,CAAQ,YAEV,CAAA;AAGA,MAAA,KAAA,MAAW,cAAc,gBAAA,EAAkB;AACzC,QAAA,IAAI,QAAA,CAAS,QAAA,CAAS,GAAA,CAAI,UAAA,CAAW,OAAA,CAAQ,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,CAAE,OAAA,CAAQ,GAAA,EAAK,GAAG,CAAC,CAAA,EAAG;AAClF,UAAA,WAAA,CAAY,IAAA,CAAK;AAAA,YACf,IAAI,UAAA,CAAW,EAAA;AAAA,YACf,SAAS,UAAA,CAAW,OAAA;AAAA,YACpB,MAAM,UAAA,CAAW,IAAA;AAAA,YACjB,aAAa,UAAA,CAAW,WAAA;AAAA,YACxB,QAAQ,UAAA,CAAW,MAAA;AAAA,YACnB,MAAM,UAAA,CAAW,IAAA;AAAA,YACjB,SAAA,EAAW;AAAA,WACZ,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,uBAAuB,OAAA,EAA+C;AACpE,IAAA,MAAM,cAAmC,EAAC;AAC1C,IAAA,MAAM,QAAA,GAAW,KAAK,iBAAA,EAAkB;AAGxC,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,SAAS,CAAA,EAAG;AAChC,MAAA,MAAM,kBAAA,GAAqB,0BAAA;AAAA,QACzB,OAAA,CAAQ,YAAA;AAAA,QACR,EAAE,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAK;AAAA,QACrB;AAAA,OACF;AACA,MAAA,WAAA,CAAY,IAAA,CAAK,GAAG,kBAAkB,CAAA;AAAA,IACxC;AAGA,IAAA,MAAM,MAAA,uBAAa,GAAA,EAAY;AAC/B,IAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,QAAA,CAAS,MAAA,EAAO,EAAG;AACxC,MAAA,MAAA,CAAO,GAAA,CAAI,IAAI,KAAK,CAAA;AAAA,IACtB;AAEA,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,IAAI,UAAU,SAAA,EAAW;AACvB,QAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,wBAAA,CAAyB,KAAA,EAAO,OAAO,CAAA;AACrE,QAAA,WAAA,CAAY,IAAA,CAAK,GAAG,gBAAgB,CAAA;AAAA,MACtC;AAAA,IACF;AAEA,IAAA,OAAO,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,qBAAqB,KAAA,EAAyB;AAC5C,IAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,MAAA,EAAQ,CAAA,CACpD,MAAA,CAAO,CAAA,GAAA,KAAO,GAAA,CAAI,KAAA,KAAU,KAAK,CAAA;AAEpC,IAAA,MAAM,WAAqB,EAAC;AAC5B,IAAA,KAAA,MAAW,OAAO,aAAA,EAAe;AAC/B,MAAA,QAAA,CAAS,IAAA,CAAK,GAAG,iBAAA,CAAkB,GAAA,CAAI,QAAQ,CAAC,CAAA;AAAA,IAClD;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,WAAA,GAA4B;AAC1B,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AAAA,EAC1C;AACF;;;AChJO,IAAM,0BAAN,MAA0D;AAAA,EAI/D,WAAA,CACU,gBACA,YAAA,EACR;AAFQ,IAAA,IAAA,CAAA,cAAA,GAAA,cAAA;AACA,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AAAA,EACP;AAAA,EAFO,cAAA;AAAA,EACA,YAAA;AAAA,EALF,aAAA,uBAAoB,GAAA,EAAmB;AAAA,EACvC,YAAA,uBAAmB,GAAA,EAAyB;AAAA,EAOpD,MAAM,oBAAA,GAA0C;AAC9C,IAAA,MAAM,cAAwB,EAAC;AAE/B,IAAA,KAAA,MAAW,WAAA,IAAe,KAAK,YAAA,EAAc;AAC3C,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,YAAA,CAAa,WAAW,CAAA;AACpD,QAAA,MAAM,QAAA,GAAW,QAAA,CAAS,GAAA,CAAI,CAAA,GAAA,KAAO,IAAI,EAAE,CAAA;AAC3C,QAAA,WAAA,CAAY,IAAA,CAAK,GAAG,QAAQ,CAAA;AAAA,MAC9B,SAAS,KAAA,EAAO;AACd,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,4BAAA,EAA+B,WAAW,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AAAA,MACnE;AAAA,IACF;AAEA,IAAA,OAAO,WAAA;AAAA,EACT;AAAA,EAEA,MAAM,eAAe,SAAA,EAAgD;AAEnE,IAAA,IAAI,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,SAAS,CAAA,EAAG;AACpC,MAAA,OAAO,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,SAAS,CAAA;AAAA,IACxC;AAGA,IAAA,KAAA,MAAW,WAAA,IAAe,KAAK,YAAA,EAAc;AAC3C,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,YAAA,CAAa,WAAW,CAAA;AACpD,QAAA,MAAM,UAAU,QAAA,CAAS,IAAA,CAAK,CAAA,GAAA,KAAO,GAAA,CAAI,OAAO,SAAS,CAAA;AAEzD,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,MAAM,CAAC,KAAA,EAAO,IAAI,CAAA,GAAI,SAAA,CAAU,MAAM,GAAG,CAAA;AACzC,UAAA,MAAM,IAAA,GAAoB;AAAA,YACxB,EAAA,EAAI,SAAA;AAAA,YACJ,OAAO,KAAA,IAAS,SAAA;AAAA,YAChB,MAAM,IAAA,IAAQ,SAAA;AAAA,YACd,WAAA,EAAa,OAAA,CAAQ,QAAA,IAAY,CAAA,QAAA,EAAW,SAAS,CAAA,CAAA;AAAA,YACrD,SAAA,EAAW;AAAA,WACb;AAEA,UAAA,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,IAAI,CAAA;AACrC,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,4BAAA,EAA+B,WAAW,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AAAA,MACnE;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,mBAAmB,SAAA,EAAqC;AAC5D,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,cAAA,CAAe,SAAS,CAAA;AAChD,IAAA,OAAO,IAAA,KAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAc,aAAa,WAAA,EAAqC;AAC9D,IAAA,IAAI,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,WAAW,CAAA,EAAG;AACvC,MAAA,OAAO,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,WAAW,CAAA;AAAA,IAC3C;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,cAAA,CAAe,aAAa,WAAW,CAAA;AACnE,IAAA,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,WAAA,EAAa,QAAQ,CAAA;AAC5C,IAAA,OAAO,QAAA;AAAA,EACT;AACF;AAKO,SAAS,4BAAA,GAAwD;AACtE,EAAA,MAAM,cAAA,GAAiC;AAAA,IACrC,MAAM,aAAa,WAAA,EAAqC;AACtD,MAAA,IAAI;AAEF,QAAA,MAAM,aAAA,GAAgB;AAAA,UACpB,YAAY,WAAW,CAAA,gBAAA,CAAA;AAAA,UACvB,YAAY,WAAW,CAAA,qBAAA,CAAA;AAAA,UACvB,YAAY,WAAW,CAAA,oBAAA;AAAA,SACzB;AAEA,QAAA,KAAA,MAAWI,SAAQ,aAAA,EAAe;AAChC,UAAA,IAAI;AACF,YAAA,MAAM,QAAA,GAAW,MAAM,OAAOA,KAAAA,CAAAA;AAC9B,YAAA,IAAI,SAAS,QAAA,IAAY,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA,EAAG;AACzD,cAAA,OAAO,QAAA,CAAS,QAAA;AAAA,YAClB;AAAA,UACF,CAAA,CAAA,MAAQ;AAEN,YAAA;AAAA,UACF;AAAA,QACF;AAEA,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,WAAW,CAAA,CAAE,CAAA;AAAA,MACxD,SAAS,KAAA,EAAO;AACd,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,4BAAA,EAA+B,WAAW,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AACjE,QAAA,OAAO,EAAC;AAAA,MACV;AAAA,IACF;AAAA,GACF;AAEA,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,cAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,OAAO,IAAI,uBAAA,CAAwB,cAAA,EAAgB,YAAY,CAAA;AACjE;ACzGO,SAAS,gBAAA,CACd,SAAA,EACA,OAAA,GAAkC,EAAC,EACzB;AACV,EAAA,MAAM;AAAA,IACJ,QAAA,GAAW,IAAA;AAAA,IACX,QAAA,GAAW,IAAA;AAAA,IACX,eAAA,GAAkB,KAAA;AAAA,IAClB,QAAA,GAAW,EAAA;AAAA,IACX,KAAA,GAAQ,qBAAA;AAAA,IACR,OAAA,GAAU;AAAA,GACZ,GAAI,OAAA;AAEJ,EAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,IAAA,OAAO,EAAC;AAAA,EACV;AAGA,EAAA,IAAI,eAAA,GAAkB,SAAA;AAEtB,EAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,IAAA,eAAA,GAAkB,CAAC,GAAG,SAAS,CAAA,CAAE,IAAA;AAAA,MAC/B,CAAC,CAAA,EAAG,CAAA,KAAA,CAAO,CAAA,CAAE,QAAA,EAAU,OAAA,EAAQ,IAAK,CAAA,KAAM,CAAA,CAAE,QAAA,EAAU,OAAA,EAAQ,IAAK,CAAA;AAAA,KACrE;AAAA,EACF,CAAA,MAAA,IAAW,YAAY,MAAA,EAAQ;AAC7B,IAAA,eAAA,GAAkB,CAAC,GAAG,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,aAAA,CAAc,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,EAC9E,CAAA,MAAO;AACL,IAAA,eAAA,GAAkB,CAAC,GAAG,SAAS,CAAA,CAAE,IAAA;AAAA,MAC/B,CAAC,CAAA,EAAG,CAAA,KAAA,CAAO,CAAA,CAAE,QAAA,EAAU,OAAA,EAAQ,IAAK,CAAA,KAAM,CAAA,CAAE,QAAA,EAAU,OAAA,EAAQ,IAAK,CAAA;AAAA,KACrE;AAAA,EACF;AAEA,EAAA,eAAA,GAAkB,eAAA,CAAgB,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA;AAEnD,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,EACnC;AAEA,EAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,IAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,MAAA,CAAO,CAAC,KAAK,QAAA,KAAa;AACxD,MAAA,MAAM,OAAO,QAAA,CAAS,IAAA,CAAK,MAAM,GAAG,CAAA,CAAE,CAAC,CAAA,IAAK,OAAA;AAC5C,MAAA,IAAI,CAAC,GAAA,CAAI,IAAI,CAAA,EAAG;AAAC,QAAA,GAAA,CAAI,IAAI,IAAI,EAAC;AAAA,MAAE;AAChC,MAAA,GAAA,CAAI,IAAI,CAAA,CAAG,IAAA,CAAK,QAAQ,CAAA;AACxB,MAAA,OAAO,GAAA;AAAA,IACT,CAAA,EAAG,EAAoC,CAAA;AAEvC,IAAA,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,EAAG,KAAA,KAAU;AACxD,MAAA,IAAI,KAAA,GAAQ,KAAK,KAAA,EAAO;AACtB,QAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,MACf;AACA,MAAA,KAAA,CAAM,IAAA,CAAK,GAAG,YAAA,CAAa,EAAE,CAAC,IAAI,GAAG,EAAA,EAAG,EAAG,EAAE,GAAA,EAAK,KAAA,EAAO,CAAC,CAAA;AAC1D,MAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,QAAA,EAAU,aAAA,KAAkB;AACzC,QAAA,IAAI,gBAAgB,CAAA,EAAG;AACrB,UAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,QACf;AACA,QAAA,KAAA,CAAM,IAAA,CAAK,GAAG,mBAAA,CAAoB,QAAA,EAAU;AAAA,UAC1C,QAAA;AAAA,UACA,QAAA;AAAA,UACA,eAAA;AAAA,UACA,MAAA,EAAQ;AAAA,SACT,CAAC,CAAA;AAAA,MACJ,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AACD,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,eAAA,CAAgB,OAAA,CAAQ,CAAC,QAAA,EAAU,KAAA,KAAU;AAC3C,IAAA,IAAI,QAAQ,CAAA,EAAG;AACb,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AACA,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,mBAAA,CAAoB,QAAA,EAAU;AAAA,MAC1C,QAAA;AAAA,MACA,QAAA;AAAA,MACA,eAAA;AAAA,MACA,MAAA,EAAQ;AAAA,KACT,CAAC,CAAA;AAAA,EACJ,CAAC,CAAA;AAED,EAAA,OAAO,KAAA;AACT;AAKA,SAAS,mBAAA,CACP,UACA,OAAA,EAMU;AACV,EAAA,MAAM,EAAE,QAAA,EAAU,QAAA,EAAU,eAAA,EAAiB,MAAA,EAAAH,SAAO,GAAI,OAAA;AACxD,EAAA,MAAM,eAAeG,qBAAA,CAAK,QAAA,CAAS,QAAQ,GAAA,EAAI,EAAG,SAAS,IAAI,CAAA;AAC/D,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,CAAM,IAAA;AAAA,IACJ,GAAG,YAAA,CAAa,EAAE,CAAC,SAAS,IAAI,GAAG,YAAA,EAAa,EAAG,EAAE,GAAA,EAAK,KAAA,EAAO,MAAA,EAAAH,SAAQ;AAAA,GAC3E;AACA,EAAA,IAAI,QAAA,IAAY,SAAS,IAAA,EAAM;AAC7B,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,GAAG,YAAA,CAAa,EAAE,IAAA,EAAM,WAAW,QAAA,CAAS,IAAI,CAAA,EAAE,EAAG,EAAE,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQA,OAAAA,GAAS,GAAG;AAAA,KACzF;AAAA,EACF;AAEA,EAAA,IAAI,QAAA,IAAY,SAAS,QAAA,EAAU;AACjC,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,GAAG,YAAA,CAAa,EAAE,OAAA,EAAS,mBAAmB,QAAA,CAAS,QAAQ,CAAA,EAAE,EAAG,EAAE,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQA,OAAAA,GAAS,GAAG;AAAA,KACxG;AAAA,EACF;AAEA,EAAA,IAAI,eAAA,IAAmB,SAAS,WAAA,EAAa;AAC3C,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,GAAG,YAAA,CAAa,EAAE,IAAA,EAAM,QAAA,CAAS,WAAA,EAAY,EAAG,EAAE,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQA,OAAAA,GAAS,GAAG;AAAA,KACpF;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AAKO,SAAS,qBAAA,CAAsB,UAAwB,KAAA,EAA0B;AACtF,EAAA,MAAM,eAAeG,qBAAA,CAAK,QAAA,CAAS,QAAQ,GAAA,EAAI,EAAG,SAAS,IAAI,CAAA;AAC/D,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,EACnC;AAEA,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,UAAA,CAAW,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,IAAA,CAAK,YAAY,CAAC,CAAA,CAAE,CAAA;AAElF,EAAA,IAAI,SAAS,IAAA,EAAM;AACjB,IAAA,KAAA,CAAM,KAAK,CAAA,UAAA,EAAa,UAAA,CAAW,QAAA,CAAS,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,EACrD;AAEA,EAAA,IAAI,SAAS,QAAA,EAAU;AACrB,IAAA,KAAA,CAAM,KAAK,CAAA,cAAA,EAAiB,kBAAA,CAAmB,QAAA,CAAS,QAAQ,CAAC,CAAA,CAAE,CAAA;AAAA,EACrE;AAEA,EAAA,IAAI,SAAS,WAAA,EAAa;AACxB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,iBAAA,EAAoB,QAAA,CAAS,WAAW,CAAA,CAAE,CAAA;AAAA,EACvD;AAEA,EAAA,OAAO,KAAA;AACT;AAKO,SAAS,uBAAA,CACd,SAAA,EACA,OAAA,GAMI,EAAC,EACK;AACV,EAAA,MAAM;AAAA,IACJ,QAAA,GAAW,CAAA;AAAA,IACX,QAAA,GAAW,IAAA;AAAA,IACX,UAAA,GAAa,IAAA;AAAA,IACb,QAAA,GAAW,IAAA;AAAA,IACX,KAAA,GAAQ;AAAA,GACV,GAAI,OAAA;AAEJ,EAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,eAAA,GAAA,CAAmB,UAAA,GACrB,CAAC,GAAG,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAA,CAAO,CAAA,CAAE,QAAA,EAAU,OAAA,MAAa,CAAA,KAAM,CAAA,CAAE,QAAA,EAAU,OAAA,EAAQ,IAAK,CAAA,CAAE,CAAA,GACzF,SAAA,CAAU,KAAA,EAAM,EAClB,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA;AAEnB,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,KAAK,CAAC,CAAA;AAEjC,EAAA,eAAA,CAAgB,OAAA,CAAQ,CAAC,QAAA,EAAU,KAAA,KAAU;AAC3C,IAAA,IAAI,QAAQ,CAAA,EAAG;AACb,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AACA,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,GAAG,oBAAoB,QAAA,EAAU;AAAA,QAC/B,QAAA;AAAA,QACA,QAAA;AAAA,QACA,eAAA,EAAiB,KAAA;AAAA,QACjB,MAAA,EAAQ;AAAA,OACT;AAAA,KACH;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,KAAA;AACT;AAiBA,eAAsB,iBAAA,CACpB,SACA,QAAA,EACyB;AACzB,EAAA,MAAM,YAA4B,EAAC;AAEnC,EAAA,KAAA,MAAW,YAAY,QAAA,EAAU;AAC/B,IAAA,MAAM,YAAA,GAAeA,qBAAA,CAAK,IAAA,CAAK,OAAA,EAAS,SAAS,OAAO,CAAA;AACxD,IAAA,IAAI;AACF,MAAA,MAAMC,WAAA,CAAI,OAAO,YAAY,CAAA;AAC7B,MAAA,MAAM,KAAA,GAAQ,MAAMA,WAAA,CAAI,IAAA,CAAK,YAAY,CAAA;AACzC,MAAA,SAAA,CAAU,IAAA,CAAK;AAAA,QACb,MAAM,QAAA,CAAS,IAAA;AAAA,QACf,IAAA,EAAM,YAAA;AAAA,QACN,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,UAAU,KAAA,CAAM,KAAA;AAAA,QAChB,WAAA,EAAa,SAAS,WAAA,IAAe;AAAA,OACtC,CAAA;AAAA,IACH,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAEA,EAAA,OAAO,SAAA;AACT;;;AChQA,SAAS,YAAY,GAAA,EAAqB;AACxC,EAAA,MAAM,SAAA,GAAY,wBAAA;AAClB,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAA;AAI1C,EAAA,MAAM,gBAAA,GAAmB,yLAAA;AACzB,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,KAAA,CAAM,gBAAgB,CAAA;AACnD,EAAA,MAAM,SAAA,GAAY,WAAA,GAAc,WAAA,CAAY,MAAA,GAAS,CAAA;AAGrD,EAAA,OAAO,CAAC,GAAG,QAAQ,CAAA,CAAE,MAAA,GAAS,SAAA;AAChC;AAKA,SAAS,SAAA,CAAU,GAAA,EAAa,KAAA,EAAe,OAAA,GAAkB,GAAA,EAAa;AAC5E,EAAA,MAAM,MAAA,GAAS,YAAY,GAAG,CAAA;AAC9B,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,MAAM,CAAA;AAC1C,EAAA,OAAO,GAAA,GAAM,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAA;AACrC;AAiBO,SAAS,WAAA,CACd,OAAA,EACA,IAAA,EACA,OAAA,GAAwB,EAAC,EACf;AACV,EAAA,MAAM,EAAE,MAAA,GAAS,IAAA,EAAM,YAAY,QAAA,EAAK,OAAA,GAAU,GAAE,GAAI,OAAA;AAGxD,EAAA,MAAM,MAAA,GAAmB,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAK,GAAA,KAAQ;AACjD,IAAA,IAAI,GAAA,CAAI,UAAU,MAAA,EAAW;AAC3B,MAAA,OAAO,GAAA,CAAI,KAAA;AAAA,IACb;AAGA,IAAA,IAAI,QAAA,GAAW,WAAA,CAAY,GAAA,CAAI,MAAM,CAAA;AACrC,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,IAAI,GAAA,CAAI,GAAG,CAAA,EAAG;AACZ,QAAA,QAAA,GAAW,IAAA,CAAK,IAAI,QAAA,EAAU,WAAA,CAAY,OAAO,GAAA,CAAI,GAAG,CAAC,CAAC,CAAC,CAAA;AAAA,MAC7D;AAAA,IACF;AACA,IAAA,OAAO,QAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,MAAM,QAAkB,EAAC;AAGzB,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAK,GAAA,KAAQ;AAC5C,MAAA,MAAM,OAAO,GAAA,CAAI,MAAA;AACjB,MAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,MAAA,OAAO,SAAA,CAAU,MAAM,KAAK,CAAA;AAAA,IAC9B,CAAC,CAAA;AACD,IAAA,KAAA,CAAM,KAAK,WAAA,CAAY,IAAA,CAAK,IAAI,MAAA,CAAO,OAAO,CAAC,CAAC,CAAA;AAGhD,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,GAAA,CAAI,CAAA,CAAA,KAAK,SAAA,CAAU,MAAA,CAAO,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,OAAO,CAAC,CAAA;AACnF,MAAA,KAAA,CAAM,KAAK,aAAa,CAAA;AAAA,IAC1B;AAAA,EACF;AAGA,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAK,GAAA,KAAQ;AACtC,MAAA,MAAM,IAAA,GAAO,IAAI,GAAG,CAAA,KAAM,SAAY,MAAA,CAAO,GAAA,CAAI,GAAG,CAAC,CAAA,GAAI,EAAA;AACzD,MAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,IAAS,MAAA;AAC3B,MAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AAExB,MAAA,IAAI,UAAU,OAAA,EAAS;AACrB,QAAA,MAAM,MAAA,GAAS,YAAY,IAAI,CAAA;AAC/B,QAAA,MAAMC,QAAAA,GAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,MAAM,CAAA;AAC1C,QAAA,OAAO,GAAA,CAAI,MAAA,CAAOA,QAAO,CAAA,GAAI,IAAA;AAAA,MAC/B,CAAA,MAAA,IAAW,UAAU,QAAA,EAAU;AAC7B,QAAA,MAAM,MAAA,GAAS,YAAY,IAAI,CAAA;AAC/B,QAAA,MAAMA,QAAAA,GAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,MAAM,CAAA;AAC1C,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAMA,QAAAA,GAAU,CAAC,CAAA;AACtC,QAAA,MAAM,WAAWA,QAAAA,GAAU,OAAA;AAC3B,QAAA,OAAO,IAAI,MAAA,CAAO,OAAO,IAAI,IAAA,GAAO,GAAA,CAAI,OAAO,QAAQ,CAAA;AAAA,MACzD,CAAA,MAAO;AACL,QAAA,OAAO,SAAA,CAAU,MAAM,KAAK,CAAA;AAAA,MAC9B;AAAA,IACF,CAAC,CAAA;AACD,IAAA,KAAA,CAAM,KAAK,KAAA,CAAM,IAAA,CAAK,IAAI,MAAA,CAAO,OAAO,CAAC,CAAC,CAAA;AAAA,EAC5C;AAEA,EAAA,OAAO,KAAA;AACT;AAKO,SAAS,mBAAA,CACd,IAAA,EACA,OAAA,GAAsD,EAAC,EAC7C;AACV,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAC7B,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AAAC,IAAA,OAAO,EAAC;AAAA,EAAE;AAElC,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,QAAA,IAAY,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,GAAA,CAAI,CAAA,CAAA,KAAK,WAAA,CAAY,CAAC,CAAC,GAAG,CAAC,CAAA;AACjF,EAAA,MAAM,aAAa,OAAA,CAAQ,UAAA,IAAc,KAAK,GAAA,CAAI,GAAG,OAAO,MAAA,CAAO,IAAI,CAAA,CAAE,GAAA,CAAI,OAAK,WAAA,CAAY,MAAA,CAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AAE5G,EAAA,OAAO,IAAA,CAAK,IAAI,CAAA,GAAA,KAAO;AACrB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,GAAG,CAAC,CAAA;AAC9B,IAAA,OAAO,CAAA,EAAG,UAAU,GAAA,EAAK,QAAQ,CAAC,CAAA,EAAA,EAAK,SAAA,CAAU,KAAA,EAAO,UAAU,CAAC,CAAA,CAAA;AAAA,EACrE,CAAC,CAAA;AACH;;;AClIO,SAAS,mBAAmB,KAAA,EAA2B;AAC5D,EAAA,OAAO,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA;AACtC;AAEO,SAAS,qBAAqB,OAAA,EAA+B;AAClE,EAAA,OAAO,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,IAAA,EAAM,CAAC,CAAA;AACxC;AAEO,SAAS,iBAAA,CAAkB,QAAsB,QAAA,EAA6B;AACnF,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA,KAAW,IAAA;AACpB;;;ACNA,SAASC,iBAAgBJ,UAAAA,EAA2B;AAClD,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAKA,UAAS,CAAA;AAC/B,EAAA,OAAO,KAAK,WAAA,EAAY;AAC1B;AAEA,SAAS,eAAe,QAAA,EAA0B;AAChD,EAAA,IAAI,WAAW,GAAA,EAAM;AACnB,IAAA,OAAO,GAAG,QAAQ,CAAA,EAAA,CAAA;AAAA,EACpB;AACA,EAAA,OAAO,CAAA,EAAA,CAAI,QAAA,GAAW,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AACxC;AAEO,SAAS,qBAAA,CAAsB,KAAA,EAAmB,OAAA,GAAiC,EAAC,EAAW;AACpG,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,IAAI,QAAQ,aAAA,EAAe;AACzB,IAAA,KAAA,CAAM,KAAK,UAAA,CAAW,GAAA,CAAII,iBAAgB,KAAA,CAAM,SAAS,CAAC,CAAC,CAAA;AAAA,EAC7D;AAEA,EAAA,KAAA,CAAM,KAAK,UAAA,CAAW,IAAA,CAAK,IAAI,KAAA,CAAM,SAAS,GAAG,CAAC,CAAA;AAClD,EAAA,KAAA,CAAM,IAAA,CAAK,MAAM,OAAO,CAAA;AAExB,EAAA,IAAI,OAAA,CAAQ,YAAA,IAAgB,OAAO,KAAA,CAAM,aAAa,QAAA,EAAU;AAC9D,IAAA,KAAA,CAAM,IAAA,CAAK,WAAW,GAAA,CAAI,CAAA,CAAA,EAAI,eAAe,KAAA,CAAM,QAAQ,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA;AAAA,EAClE;AAEA,EAAA,IAAI,KAAA,CAAM,UAAU,OAAA,EAAS;AAC3B,IAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,WAAA,CAAY,KAAK,CAAC,CAAA;AAAA,EAChD,CAAA,MAAA,IAAW,KAAA,CAAM,KAAA,KAAU,MAAA,EAAQ;AACjC,IAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,WAAA,CAAY,OAAO,CAAC,CAAA;AAAA,EACpD;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,GAAG,CAAA;AACvB;AAEO,SAAS,uBAAA,CAAwB,OAAA,EAAuB,OAAA,GAAiC,EAAC,EAAW;AAC1G,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS,CAAC,GAAG,OAAO,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,SAAA,GAAY,CAAA,CAAE,SAAS,CAAA;AACpE,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,IAAI,OAAA,CAAQ,YAAY,WAAA,EAAa;AACnC,IAAA,MAAM,UAAA,uBAAiB,GAAA,EAA0B;AACjD,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpC,QAAA,UAAA,CAAW,GAAA,CAAI,KAAA,CAAM,SAAA,EAAW,EAAE,CAAA;AAAA,MACpC;AACA,MAAA,UAAA,CAAW,GAAA,CAAI,KAAA,CAAM,SAAS,CAAA,CAAG,KAAK,KAAK,CAAA;AAAA,IAC7C;AAEA,IAAA,KAAA,MAAW,CAAC,SAAA,EAAW,gBAAgB,CAAA,IAAK,UAAA,EAAY;AACtD,MAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,SAAS,CAAC,CAAA;AACrC,MAAA,KAAA,MAAW,SAAS,gBAAA,EAAkB;AACpC,QAAA,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,qBAAA,CAAsB,KAAA,EAAO,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,MACzD;AACA,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AACA,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,CAAE,OAAA,EAAQ;AAAA,EAClC;AAEA,EAAA,IAAI,OAAA,CAAQ,YAAY,OAAA,EAAS;AAC/B,IAAA,MAAM,MAAA,uBAAa,GAAA,EAA0B;AAC7C,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,MAAM,SAAA,GAAY,MAAM,KAAA,IAAS,SAAA;AACjC,MAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,SAAS,CAAA,EAAG;AAC1B,QAAA,MAAA,CAAO,GAAA,CAAI,SAAA,EAAW,EAAE,CAAA;AAAA,MAC1B;AACA,MAAA,MAAA,CAAO,GAAA,CAAI,SAAS,CAAA,CAAG,IAAA,CAAK,KAAK,CAAA;AAAA,IACnC;AAEA,IAAA,KAAA,MAAW,CAAC,SAAA,EAAW,YAAY,CAAA,IAAK,MAAA,EAAQ;AAC9C,MAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,SAAS,CAAC,CAAA;AACrC,MAAA,KAAA,MAAW,SAAS,YAAA,EAAc;AAChC,QAAA,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,qBAAA,CAAsB,KAAA,EAAO,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,MACzD;AACA,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AACA,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,CAAE,OAAA,EAAQ;AAAA,EAClC;AAEA,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,KAAA,CAAM,IAAA,CAAK,qBAAA,CAAsB,KAAA,EAAO,OAAO,CAAC,CAAA;AAAA,EAClD;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;;;AC3FA,SAAS,QAAQ,OAAA,EAAyB;AACxC,EAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAG;AAC1B,IAAA,OAAO,IAAI,OAAO,CAAA,CAAA,EAAI,OAAA,CAAQ,QAAQ,qBAAA,EAAuB,MAAM,CAAC,CAAA,CAAA,CAAA,EAAK,GAAG,CAAA;AAAA,EAC9E;AACA,EAAA,MAAM,OAAA,GAAU,QAAQ,OAAA,CAAQ,oBAAA,EAAsB,MAAM,CAAA,CAAE,OAAA,CAAQ,OAAO,IAAI,CAAA;AACjF,EAAA,OAAO,IAAI,MAAA,CAAO,CAAA,CAAA,EAAI,OAAO,KAAK,GAAG,CAAA;AACvC;AAEO,SAAS,iBAAA,CAAkB,SAAuB,OAAA,EAAwC;AAC/F,EAAA,MAAM,UAAU,OAAO,OAAA,KAAY,QAAA,GAAW,OAAA,CAAQ,OAAO,CAAA,GAAI,OAAA;AACjE,EAAA,OAAO,OAAA,CAAQ,OAAO,CAAC,KAAA,KAAU,QAAQ,IAAA,CAAK,KAAA,CAAM,SAAS,CAAC,CAAA;AAChE;AAEO,SAAS,aAAA,CAAc,SAAuB,KAAA,EAAwC;AAC3F,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,IAAI,GAAA,CAAI,KAAK,CAAA,mBAAI,IAAI,GAAA,CAAI,CAAC,KAAK,CAAC,CAAA;AACvE,EAAA,OAAO,OAAA,CAAQ,OAAO,CAAC,KAAA,KAAU,QAAQ,GAAA,CAAI,KAAA,CAAM,KAAK,CAAC,CAAA;AAC3D;AAEO,SAAS,iBAAA,CAAkB,OAAA,EAAuB,IAAA,EAAe,EAAA,EAA2B;AACjG,EAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,CAAC,KAAA,KAAU;AAC/B,IAAA,IAAI,IAAA,KAAS,MAAA,IAAa,KAAA,CAAM,SAAA,GAAY,IAAA,EAAM;AAChD,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAI,EAAA,KAAO,MAAA,IAAa,KAAA,CAAM,SAAA,GAAY,EAAA,EAAI;AAC5C,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AACH;AAEO,SAAS,YAAA,CAAa,SAAuB,KAAA,EAA6B;AAC/E,EAAA,MAAM,OAAA,GAAU,MAAM,WAAA,EAAY;AAClC,EAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,CAAC,KAAA,KAAU;AAC/B,IAAA,IAAI,MAAM,OAAA,CAAQ,WAAA,EAAY,CAAE,QAAA,CAAS,OAAO,CAAA,EAAG;AACjD,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,MAAM,SAAA,CAAU,WAAA,EAAY,CAAE,QAAA,CAAS,OAAO,CAAA,EAAG;AACnD,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,MAAM,IAAA,EAAM;AACd,MAAA,MAAM,aAAa,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,IAAI,EAAE,WAAA,EAAY;AAC1D,MAAA,IAAI,UAAA,CAAW,QAAA,CAAS,OAAO,CAAA,EAAG;AAChC,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAC,CAAA;AACH;AAEO,SAAS,kBAAA,CAAmB,SAAuB,OAAA,EAA2C;AACnG,EAAA,IAAI,QAAA,GAAW,CAAC,GAAG,OAAO,CAAA;AAE1B,EAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,IAAA,QAAA,GAAW,iBAAA,CAAkB,QAAA,EAAU,OAAA,CAAQ,SAAS,CAAA;AAAA,EAC1D;AAEA,EAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,IAAA,QAAA,GAAW,aAAA,CAAc,QAAA,EAAU,OAAA,CAAQ,KAAK,CAAA;AAAA,EAClD;AAEA,EAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,IAAA,QAAA,GAAW,kBAAkB,QAAA,EAAU,OAAA,CAAQ,UAAU,IAAA,EAAM,OAAA,CAAQ,UAAU,EAAE,CAAA;AAAA,EACrF;AAEA,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,QAAA,GAAW,YAAA,CAAa,QAAA,EAAU,OAAA,CAAQ,MAAM,CAAA;AAAA,EAClD;AAEA,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,QAAA,GAAW,SAAS,MAAA,CAAO,CAAC,UAAU,KAAA,CAAM,OAAA,KAAY,QAAQ,OAAO,CAAA;AAAA,EACzE;AAEA,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,iBAAiB,OAAA,EAAkD;AACjF,EAAA,MAAM,GAAA,uBAAU,GAAA,EAA0B;AAC1C,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,IAAI,CAAC,GAAA,CAAI,GAAA,CAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AAC7B,MAAA,GAAA,CAAI,GAAA,CAAI,KAAA,CAAM,SAAA,EAAW,EAAE,CAAA;AAAA,IAC7B;AACA,IAAA,GAAA,CAAI,GAAA,CAAI,KAAA,CAAM,SAAS,CAAA,CAAG,KAAK,KAAK,CAAA;AAAA,EACtC;AACA,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,aAAa,OAAA,EAAkD;AAC7E,EAAA,MAAM,GAAA,uBAAU,GAAA,EAA0B;AAC1C,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,IAAS,SAAA;AAC7B,IAAA,IAAI,CAAC,GAAA,CAAI,GAAA,CAAI,KAAK,CAAA,EAAG;AACnB,MAAA,GAAA,CAAI,GAAA,CAAI,KAAA,EAAO,EAAE,CAAA;AAAA,IACnB;AACA,IAAA,GAAA,CAAI,GAAA,CAAI,KAAK,CAAA,CAAG,IAAA,CAAK,KAAK,CAAA;AAAA,EAC5B;AACA,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,gBAAgB,OAAA,EAA6C;AAC3E,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS,CAAC,GAAG,OAAO,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,SAAA,GAAY,CAAA,CAAE,SAAS,CAAA;AACpE,EAAA,MAAM,KAAA,uBAAY,GAAA,EAA2B;AAC7C,EAAA,IAAI,IAAA,GAA6B,IAAA;AAEjC,EAAA,SAAS,WAAW,KAAA,EAAkC;AACpD,IAAA,IAAI,MAAM,MAAA,IAAU,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,MAAM,CAAA,EAAG;AAC3C,MAAA,OAAO,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,MAAM,CAAA;AAAA,IAC/B;AACA,IAAA,MAAM,OAAsB,EAAE,KAAA,EAAO,UAAU,EAAC,EAAG,OAAO,CAAA,EAAE;AAC5D,IAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,MAAA,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,MAAA,EAAQ,IAAI,CAAA;AAAA,IAC9B;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,IAAA,GAAO,WAAW,KAAK,CAAA;AAE7B,IAAA,IAAI,MAAM,YAAA,IAAgB,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,YAAY,CAAA,EAAG;AACvD,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,YAAY,CAAA;AAC3C,MAAA,IAAA,CAAK,KAAA,GAAQ,OAAO,KAAA,GAAQ,CAAA;AAC5B,MAAA,MAAA,CAAO,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,IAC3B,CAAA,MAAA,IAAW,SAAS,IAAA,EAAM;AACxB,MAAA,IAAA,GAAO,IAAA;AAAA,IACT,CAAA,MAAO;AAEL,MAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,KAAA,GAAQ,CAAA;AAC1B,MAAA,IAAA,CAAK,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,IACzB;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,YAAA,CAAa,OAAA,EAAuB,OAAA,GAA8B,EAAC,EAAW;AAC5F,EAAA,MAAM,WAAW,OAAA,CAAQ,MAAA,GAAS,mBAAmB,OAAA,EAAS,OAAA,CAAQ,MAAM,CAAA,GAAI,OAAA;AAChF,EAAA,IAAI,OAAA,CAAQ,gBAAgB,KAAA,EAAO;AACjC,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,MACV,QAAA,CAAS,IAAI,CAAC,EAAE,MAAM,KAAA,EAAO,GAAG,IAAA,EAAK,KAAM,IAAI,CAAA;AAAA,MAC/C,IAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,IAAA,CAAK,SAAA,CAAU,QAAA,EAAU,IAAA,EAAM,CAAC,CAAA;AACzC;AAEO,SAAS,oBAAA,CAAqB,OAAA,EAAuB,OAAA,GAA8B,EAAC,EAAW;AACpG,EAAA,MAAM,WAAW,OAAA,CAAQ,MAAA,GAAS,mBAAmB,OAAA,EAAS,OAAA,CAAQ,MAAM,CAAA,GAAI,OAAA;AAChF,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,IAC3C,MAAM,KAAA,CAAM,OAAA;AAAA,IACZ,KAAK,KAAA,CAAM,SAAA;AAAA,IACX,EAAA,EAAI,MAAM,KAAA,KAAU,OAAA,GAAU,MAAM,KAAA,CAAM,KAAA,KAAU,SAAS,GAAA,GAAM,GAAA;AAAA,IACnE,EAAA,EAAI,MAAM,SAAA,GAAY,GAAA;AAAA,IACtB,GAAA,EAAA,CAAM,KAAA,CAAM,QAAA,IAAY,CAAA,IAAK,GAAA;AAAA,IAC7B,GAAA,EAAK,CAAA;AAAA,IACL,GAAA,EAAK,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,SAAA;AAAA,IAC3B,IAAA,EAAM,KAAA,CAAM,IAAA,IAAQ;AAAC,GACvB,CAAE,CAAA;AAEF,EAAA,OAAO,KAAK,SAAA,CAAU,EAAE,WAAA,EAAY,EAAG,MAAM,CAAC,CAAA;AAChD;AAEO,SAAS,iBAAA,CAAkB,OAAA,EAAuB,OAAA,GAA8B,EAAC,EAAW;AACjG,EAAA,MAAM,WAAW,OAAA,CAAQ,MAAA,GAAS,mBAAmB,OAAA,EAAS,OAAA,CAAQ,MAAM,CAAA,GAAI,OAAA;AAChF,EAAA,OAAO,uBAAA,CAAwB,UAAU,EAAE,OAAA,EAAS,aAAa,aAAA,EAAe,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,CAAA;AAC5G;AAEO,SAAS,kBAAA,CAAmB,SAAuB,OAAA,EAAqC;AAC7F,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,IAAU,MAAA;AACjC,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,QAAA;AACH,MAAA,OAAO,oBAAA,CAAqB,SAAS,OAAO,CAAA;AAAA,IAC9C,KAAK,MAAA;AACH,MAAA,OAAO,iBAAA,CAAkB,SAAS,OAAO,CAAA;AAAA,IAC3C,KAAK,MAAA;AAAA,IACL;AACE,MAAA,OAAO,YAAA,CAAa,SAAS,OAAO,CAAA;AAAA;AAE1C;AAEO,SAAS,oBAAA,CAAqB,OAAA,EAAuB,OAAA,GAA8B,EAAC,EAAW;AACpG,EAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,OAAA,EAAS,OAAO,CAAA;AACpD,EAAA,OAAO,uBAAA,CAAwB,UAAU,EAAE,aAAA,EAAe,MAAM,YAAA,EAAc,IAAA,EAAM,OAAA,EAAS,WAAA,EAAa,CAAA;AAC5G;AAEO,SAAS,iBAAA,CAAkB,OAAA,EAAuB,OAAA,GAA8B,EAAC,EAAW;AACjG,EAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,OAAA,EAAS,OAAO,CAAA;AACpD,EAAA,OAAO,qBAAqB,QAAQ,CAAA;AACtC;AAEO,SAAS,uBAAA,CAAwB,OAAA,EAAuB,OAAA,GAA8B,EAAC,EAAW;AACvG,EAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,OAAA,EAAS,OAAO,CAAA;AACpD,EAAA,OAAO,0BAA0B,QAAQ,CAAA;AAC3C;;;ACrMA,SAASC,gBAAe,QAAA,EAA0B;AAChD,EAAA,IAAI,WAAW,GAAA,EAAM;AACnB,IAAA,OAAO,GAAG,QAAQ,CAAA,EAAA,CAAA;AAAA,EACpB;AACA,EAAA,OAAO,CAAA,EAAA,CAAI,QAAA,GAAW,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AACxC;AAEO,SAAS,kBAAA,CACd,IAAA,EACA,MAAA,EACA,MAAA,GAAS,IACT,QAAA,EACU;AACV,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,SAAA,GAAY,SAAS,cAAA,GAAO,cAAA;AAClC,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,KAAA,CAAM,IAAA,CAAK,WAAW,IAAA,CAAK,CAAA,CAAA,EAAI,KAAK,KAAA,CAAM,SAAS,GAAG,CAAC,CAAA;AACvD,EAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAE7B,EAAA,IAAI,OAAO,IAAA,CAAK,KAAA,CAAM,QAAA,KAAa,QAAA,EAAU;AAC3C,IAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,CAAA,CAAA,EAAIA,eAAAA,CAAe,KAAK,KAAA,CAAM,QAAQ,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA;AAAA,EACvE;AAEA,EAAA,IAAI,IAAA,CAAK,KAAA,CAAM,KAAA,KAAU,OAAA,EAAS;AAChC,IAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,WAAA,CAAY,KAAK,CAAC,CAAA;AAAA,EAChD,CAAA,MAAA,IAAW,IAAA,CAAK,KAAA,CAAM,KAAA,KAAU,MAAA,EAAQ;AACtC,IAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,WAAA,CAAY,OAAO,CAAC,CAAA;AAAA,EACpD;AAEA,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAG,OAAA,EAAS,CAAA;AAE/D,EAAA,IAAI,QAAA,KAAa,MAAA,IAAa,IAAA,CAAK,KAAA,GAAQ,KAAK,QAAA,EAAU;AACxD,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,WAAA,GAAc,MAAA,IAAU,MAAA,GAAS,KAAA,GAAQ,UAAA,CAAA;AAC/C,EAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,QAAQ,KAAA,EAAA,EAAS;AACzD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA;AACjC,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA;AAAA,IACF;AACA,IAAA,MAAM,WAAA,GAAc,KAAA,KAAU,IAAA,CAAK,QAAA,CAAS,MAAA,GAAS,CAAA;AACrD,IAAA,KAAA,CAAM,KAAK,GAAG,kBAAA,CAAmB,OAAO,WAAA,EAAa,WAAA,EAAa,QAAQ,CAAC,CAAA;AAAA,EAC7E;AAEA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,eAAe,OAAA,EAA+B;AAC5D,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAA,GAAO,gBAAgB,OAAO,CAAA;AACpC,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,OAAO,kBAAA,CAAmB,IAAA,EAAM,IAAI,CAAA,CAAE,KAAK,IAAI,CAAA;AACjD;AAEO,SAAS,0BAA0B,OAAA,EAA+B;AACvE,EAAA,MAAM,QAAA,GAAW,eAAe,OAAO,CAAA;AACvC,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,MAAA,CAAO,CAAC,GAAA,EAAK,UAAU,GAAA,IAAO,KAAA,CAAM,QAAA,IAAY,CAAA,CAAA,EAAI,CAAC,CAAA;AACnF,EAAA,MAAM,UAAA,GAAa,QAAQ,MAAA,CAAO,CAAC,UAAU,KAAA,CAAM,KAAA,KAAU,OAAO,CAAA,CAAE,MAAA;AACtE,EAAA,MAAM,SAAA,GAAY,QAAQ,MAAA,CAAO,CAAC,UAAU,KAAA,CAAM,KAAA,KAAU,MAAM,CAAA,CAAE,MAAA;AAEpE,EAAA,MAAM,eAAyB,EAAC;AAChC,EAAA,IAAI,gBAAgB,CAAA,EAAG;AACrB,IAAA,YAAA,CAAa,IAAA,CAAK,CAAA,OAAA,EAAUA,eAAAA,CAAe,aAAa,CAAC,CAAA,CAAE,CAAA;AAAA,EAC7D;AACA,EAAA,IAAI,aAAa,CAAA,EAAG;AAClB,IAAA,YAAA,CAAa,KAAK,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,UAAU,SAAS,CAAC,CAAA;AAAA,EAC5D;AACA,EAAA,IAAI,YAAY,CAAA,EAAG;AACjB,IAAA,YAAA,CAAa,KAAK,UAAA,CAAW,OAAA,CAAQ,CAAA,EAAG,SAAS,WAAW,CAAC,CAAA;AAAA,EAC/D;AAEA,EAAA,IAAI,YAAA,CAAa,WAAW,CAAA,EAAG;AAC7B,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,OAAO,GAAG,QAAQ;;AAAA,EAAO,UAAA,CAAW,KAAK,UAAU,CAAC,IAAI,YAAA,CAAa,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AACjF;;;AC5EO,SAAS,iBAAA,CAAkB,KAAA,EAAmB,OAAA,GAA8B,EAAC,EAAW;AAC7F,EAAA,IAAI,iBAAA,CAAkB,OAAA,CAAQ,MAAM,CAAA,EAAG;AACrC,IAAA,OAAO,mBAAmB,KAAK,CAAA;AAAA,EACjC;AAEA,EAAA,OAAO,qBAAA,CAAsB,OAAO,OAAO,CAAA;AAC7C;AAEO,SAAS,kBAAA,CAAmB,OAAA,EAAuB,OAAA,GAA8B,EAAC,EAAW;AAClG,EAAA,IAAI,iBAAA,CAAkB,OAAA,CAAQ,MAAM,CAAA,EAAG;AACrC,IAAA,OAAO,qBAAqB,OAAO,CAAA;AAAA,EACrC;AAEA,EAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,IAAA,OAAO,0BAA0B,OAAO,CAAA;AAAA,EAC1C;AAEA,EAAA,OAAO,uBAAA,CAAwB,SAAS,OAAO,CAAA;AACjD;AAEO,IAAM,eAAN,MAAmB;AAAA,EACP,UAAwB,EAAC;AAAA,EACzB,KAAA;AAAA,EACA,OAAA;AAAA,EAEjB,WAAA,CAAY,KAAA,EAAe,OAAA,GAA8B,EAAC,EAAG;AAC3D,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA,EAEA,IAAI,KAAA,EAAyB;AAC3B,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,EACzB;AAAA,EAEA,OAAO,OAAA,EAA6B;AAClC,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,GAAG,OAAO,CAAA;AAAA,EAC9B;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,QAAQ,MAAA,GAAS,CAAA;AAAA,EACxB;AAAA,EAEA,MAAA,GAAiB;AACf,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG;AAC7B,MAAA,OAAO,EAAA;AAAA,IACT;AAEA,IAAA,MAAM,OAAA,GAAU,kBAAA,CAAmB,IAAA,CAAK,OAAA,EAAS,KAAK,OAAO,CAAA;AAC7D,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,EAAA;AAAA,IACT;AAEA,IAAA,IAAI,iBAAA,CAAkB,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC1C,MAAA,OAAO,OAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAI,IAAA,CAAK,KAAA,EAAO,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,EAC5C;AAAA,EAEA,IAAI,KAAA,GAAgB;AAClB,IAAA,OAAO,KAAK,OAAA,CAAQ,MAAA;AAAA,EACtB;AACF;AAEO,IAAM,cAAN,MAAkB;AAAA,EACN,QAAA,uBAAe,GAAA,EAA0B;AAAA,EACzC,gBAA8B,EAAC;AAAA,EAC/B,OAAA;AAAA,EAEjB,WAAA,CAAY,OAAA,GAA8B,EAAC,EAAG;AAC5C,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA,EAEA,IAAI,KAAA,EAAyB;AAC3B,IAAA,IAAA,CAAK,aAAA,CAAc,KAAK,KAAK,CAAA;AAAA,EAC/B;AAAA,EAEA,YAAA,CAAa,aAAqB,KAAA,EAAyB;AACzD,IAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,WAAW,CAAA,EAAG;AACnC,MAAA,IAAA,CAAK,QAAA,CAAS,IAAI,WAAA,EAAa,IAAI,aAAa,WAAA,EAAa,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,IAC5E;AACA,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,WAAW,CAAA,CAAG,IAAI,KAAK,CAAA;AAAA,EAC3C;AAAA,EAEA,WAAW,WAAA,EAAmC;AAC5C,IAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,WAAW,CAAA,EAAG;AACnC,MAAA,IAAA,CAAK,QAAA,CAAS,IAAI,WAAA,EAAa,IAAI,aAAa,WAAA,EAAa,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,IAC5E;AACA,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,WAAW,CAAA;AAAA,EACtC;AAAA,EAEA,MAAA,GAAiB;AACf,IAAA,MAAM,QAAkB,EAAC;AAEzB,IAAA,IAAI,IAAA,CAAK,aAAA,CAAc,MAAA,GAAS,CAAA,EAAG;AACjC,MAAA,MAAM,SAAA,GAAY,kBAAA,CAAmB,IAAA,CAAK,aAAA,EAAe,KAAK,OAAO,CAAA;AACrE,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AAAA,MACtB;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,GAAGC,QAAO,CAAA,IAAK,KAAK,QAAA,EAAU;AACvC,MAAA,MAAM,SAAA,GAAYA,SAAQ,MAAA,EAAO;AACjC,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AAAA,MACtB;AAAA,IACF;AAEA,IAAA,OAAO,KAAA,CAAM,KAAK,MAAM,CAAA;AAAA,EAC1B;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,cAAc,MAAA,GAAS,CAAA;AAC5B,IAAA,IAAA,CAAK,SAAS,KAAA,EAAM;AAAA,EACtB;AAAA,EAEA,IAAI,UAAA,GAAqB;AACvB,IAAA,IAAI,KAAA,GAAQ,KAAK,aAAA,CAAc,MAAA;AAC/B,IAAA,KAAA,MAAWA,QAAAA,IAAW,IAAA,CAAK,QAAA,CAAS,MAAA,EAAO,EAAG;AAC5C,MAAA,KAAA,IAASA,QAAAA,CAAQ,KAAA;AAAA,IACnB;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACF;;;AC3HO,IAAM,YAAN,MAAgB;AAAA,EACb,IAAA,GAA6B,IAAA;AAAA,EACpB,OAAA;AAAA,EAEjB,WAAA,CAAY,OAAA,EAAuB,OAAA,GAA4B,EAAC,EAAG;AACjE,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,IAAA,GAAO,gBAAgB,OAAO,CAAA;AAAA,EACrC;AAAA,EAEA,OAAO,OAAA,EAA6B;AAClC,IAAA,IAAA,CAAK,IAAA,GAAO,gBAAgB,OAAO,CAAA;AAAA,EACrC;AAAA,EAEA,MAAA,GAAiB;AACf,IAAA,IAAI,CAAC,KAAK,IAAA,EAAM;AACd,MAAA,OAAO,EAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,mBAAmB,IAAA,CAAK,IAAA,EAAM,MAAM,EAAA,EAAI,IAAA,CAAK,QAAQ,QAAQ,CAAA;AAC3E,IAAA,IAAI,IAAA,CAAK,QAAQ,WAAA,EAAa;AAC5B,MAAA,MAAM,OAAA,GAAU,KAAK,UAAA,EAAW;AAChC,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,KAAA,CAAM,IAAA,CAAK,IAAI,OAAO,CAAA;AAAA,MACxB;AAAA,IACF;AACA,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAAA,EAEQ,UAAA,GAAqB;AAC3B,IAAA,IAAI,CAAC,KAAK,IAAA,EAAM;AACd,MAAA,OAAO,EAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AACzC,IAAA,MAAM,QAAkB,EAAC;AAEzB,IAAA,IAAI,KAAA,CAAM,gBAAgB,CAAA,EAAG;AAC3B,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,MAAA,EAAS,KAAA,CAAM,aAAa,CAAA,EAAA,CAAI,CAAA;AAAA,IAC7C;AACA,IAAA,IAAI,KAAA,CAAM,aAAa,CAAA,EAAG;AACxB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,KAAA,CAAM,UAAU,CAAA,OAAA,CAAS,CAAA;AAAA,IACzC;AACA,IAAA,IAAI,KAAA,CAAM,YAAY,CAAA,EAAG;AACvB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,KAAA,CAAM,SAAS,CAAA,SAAA,CAAW,CAAA;AAAA,IAC1C;AACA,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,KAAA,CAAM,SAAS,CAAA,MAAA,CAAQ,CAAA;AAErC,IAAA,OAAO,CAAA,SAAA,EAAY,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,EACrC;AAAA,EAEQ,aAAa,IAAA,EAAqC;AACxD,IAAA,IAAI,aAAA,GAAgB,IAAA,CAAK,KAAA,CAAM,QAAA,IAAY,CAAA;AAC3C,IAAA,IAAI,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,KAAA,KAAU,UAAU,CAAA,GAAI,CAAA;AACpD,IAAA,IAAI,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,KAAA,KAAU,SAAS,CAAA,GAAI,CAAA;AAClD,IAAA,IAAI,SAAA,GAAY,CAAA;AAEhB,IAAA,KAAA,MAAW,KAAA,IAAS,KAAK,QAAA,EAAU;AACjC,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,YAAA,CAAa,KAAK,CAAA;AAC1C,MAAA,aAAA,IAAiB,UAAA,CAAW,aAAA;AAC5B,MAAA,UAAA,IAAc,UAAA,CAAW,UAAA;AACzB,MAAA,SAAA,IAAa,UAAA,CAAW,SAAA;AACxB,MAAA,SAAA,IAAa,UAAA,CAAW,SAAA;AAAA,IAC1B;AAEA,IAAA,OAAO,EAAE,aAAA,EAAe,UAAA,EAAY,SAAA,EAAW,SAAA,EAAU;AAAA,EAC3D;AAAA,EAEA,IAAI,IAAA,GAA6B;AAC/B,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AACF;;;AC5EO,IAAM,aAAN,MAAiB;AAAA,EACL,UAAwB,EAAC;AAAA,EACzB,OAAA;AAAA,EAEjB,YAAY,OAAA,GAAwB,EAAC,EAAG,OAAA,GAAwB,EAAC,EAAG;AAClE,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,GAAG,OAAO,CAAA;AAC5B,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA,EAEA,IAAI,KAAA,EAAyB;AAC3B,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,EACzB;AAAA,EAEA,OAAO,OAAA,EAA6B;AAClC,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,GAAG,OAAO,CAAA;AAAA,EAC9B;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,QAAQ,MAAA,GAAS,CAAA;AAAA,EACxB;AAAA,EAEA,MAAA,GAAiB;AACf,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG;AAC7B,MAAA,OAAO,EAAA;AAAA,IACT;AAEA,IAAA,MAAM,MAAA,GAAS,CAAC,GAAG,IAAA,CAAK,OAAO,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,SAAA,GAAY,EAAE,SAAS,CAAA;AACzE,IAAA,IAAI,IAAA,CAAK,QAAQ,aAAA,EAAe;AAC9B,MAAA,OAAO,IAAA,CAAK,cAAc,MAAM,CAAA;AAAA,IAClC;AAEA,IAAA,OAAO,0BAA0B,MAAM,CAAA;AAAA,EACzC;AAAA,EAEQ,cAAc,OAAA,EAA+B;AACnD,IAAA,MAAM,MAAA,uBAAa,GAAA,EAA0B;AAC7C,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,KAAK,KAAA,CAAM,SAAA;AACtD,MAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,MAAM,CAAA,EAAG;AACvB,QAAA,MAAA,CAAO,GAAA,CAAI,MAAA,EAAQ,EAAE,CAAA;AAAA,MACvB;AACA,MAAA,MAAA,CAAO,GAAA,CAAI,MAAM,CAAA,CAAG,IAAA,CAAK,KAAK,CAAA;AAAA,IAChC;AAEA,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,aAAa,CAAA,IAAK,MAAA,EAAQ;AAC5C,MAAA,MAAM,IAAA,GAAO,IAAI,SAAA,CAAU,aAAA,EAAe;AAAA,QACxC,WAAA,EAAa,KAAK,OAAA,CAAQ,WAAA;AAAA,QAC1B,QAAA,EAAU,KAAK,OAAA,CAAQ;AAAA,OACxB,CAAA;AACD,MAAA,MAAM,SAAA,GAAY,KAAK,MAAA,EAAO;AAC9B,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,CAAA,EAAK,SAAS,CAAA;AAAA,MACrC;AAAA,IACF;AACA,IAAA,OAAO,KAAA,CAAM,KAAK,MAAM,CAAA;AAAA,EAC1B;AAAA,EAEA,QAAA,GAME;AACA,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,IAAA,IAAI,aAAA,GAAgB,CAAA;AACpB,IAAA,IAAI,UAAA,GAAa,CAAA;AACjB,IAAA,IAAI,SAAA,GAAY,CAAA;AAEhB,IAAA,KAAA,MAAW,KAAA,IAAS,KAAK,OAAA,EAAS;AAChC,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,KAAK,KAAA,CAAM,SAAA;AACtD,MAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AAClB,MAAA,aAAA,IAAiB,MAAM,QAAA,IAAY,CAAA;AACnC,MAAA,IAAI,KAAA,CAAM,UAAU,OAAA,EAAS;AAC3B,QAAA,UAAA,IAAc,CAAA;AAAA,MAChB,CAAA,MAAA,IAAW,KAAA,CAAM,KAAA,KAAU,MAAA,EAAQ;AACjC,QAAA,SAAA,IAAa,CAAA;AAAA,MACf;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,YAAA,EAAc,KAAK,OAAA,CAAQ,MAAA;AAAA,MAC3B,OAAA,EAAS,KAAA,CAAM,IAAA,CAAK,OAAO,CAAA;AAAA,MAC3B,aAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACF;;;AC1CO,SAAS,oBAAoB,OAAA,EAA+B;AACjE,EAAA,OAAO,OAAO,GAAA,EAAqB,IAAA,EAAgB,KAAA,KAAoD;AACrG,IAAA,MAAM,OAAA,GAAU,IAAI,aAAA,EAAc;AAClC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,KAAS,IAAA;AAChC,IAAA,MAAM,SAAA,GAAY,MAAM,KAAA,KAAU,IAAA;AAClC,IAAA,IAAI,QAAA,GAAqC,IAAA;AACzC,IAAA,IAAI,OAAA,CAAQ,cAAc,MAAA,EAAW;AACnC,MAAA,IAAI;AAKF,QAAA,MAAM,eAAA,GAAkB,MAAM,OAAO,6BAA6B,CAAA;AAGlE,QAAA,IAAI,gBAAgB,QAAA,EAAU;AAC5B,UAAA,QAAA,GAAW,eAAA,CAAgB,QAAA;AAAA,QAC7B;AAAA,MACF,CAAA,CAAA,MAAQ;AAEN,QAAA,QAAA,GAAW,IAAA;AAAA,MACb;AAAA,IACF;AAEA,IAAA,MAAM,UAAU,YAA6B;AAC3C,MAAA,OAAA,CAAQ,WAAW,OAAO,CAAA;AAC1B,MAAA,IAAI;AACF,QAAA,MAAMC,UAAS,MAAM,OAAA,CAAQ,OAAA,CAAQ,GAAA,EAAK,OAAO,OAAO,CAAA;AACxD,QAAA,OAAA,CAAQ,WAAW,UAAU,CAAA;AAC7B,QAAA,mBAAA,CAAoB,KAAK,OAAA,CAAQ,KAAA,EAAOA,OAAAA,EAAQ,OAAA,CAAQ,OAAM,EAAG;AAAA,UAC/D,QAAA;AAAA,UACA;AAAA,SACD,CAAA;AACD,QAAA,OAAO,CAAA;AAAA,MACT,SAAS,KAAA,EAAO;AACd,QAAA,OAAA,CAAQ,WAAW,OAAO,CAAA;AAC1B,QAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,QAAA,iBAAA,CAAkB,GAAA,EAAK,OAAA,EAAS,OAAA,CAAQ,KAAA,EAAM,EAAG;AAAA,UAC/C,QAAA;AAAA,UACA;AAAA,SACD,CAAA;AACD,QAAA,OAAO,CAAA;AAAA,MACT;AAAA,IACF,CAAA;AAEA,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,OAAA,CAAQ,SAAA,EAAW;AACnC,MAAA,OAAO,OAAA,EAAQ;AAAA,IACjB;AAEA,IAAA,MAAM,UAAA,GAAa,KAAK,GAAA,EAAI;AAC5B,IAAA,MAAM,SAAS,MAAM,QAAA;AAAA,MACnB;AAAA,QACE,KAAA,EAAO,QAAQ,SAAA,CAAU,KAAA;AAAA,QACzB,GAAA,EAAK,EAAE,SAAA,EAAW,GAAA,CAAI,GAAA;AAAI,OAC5B;AAAA,MACA,OAAO,IAAA,KAAwB;AAC7B,QAAA,MAAM,IAAA,CAAK;AAAA,UACT,IAAA,EAAM,QAAQ,SAAA,CAAW,OAAA;AAAA,UACzB,SAAS,OAAA,CAAQ,SAAA,CAAW,UAAA,GAAa,KAAK,KAAK;AAAC,SACrD,CAAA;AAED,QAAA,IAAI,QAAA,GAAW,CAAA;AACf,QAAA,IAAI;AACF,UAAA,QAAA,GAAW,MAAM,OAAA,EAAQ;AACzB,UAAA,MAAM,IAAA,CAAK;AAAA,YACT,IAAA,EAAM,QAAQ,SAAA,CAAW,QAAA;AAAA,YACzB,OAAA,EAAS;AAAA,cACP,GAAI,OAAA,CAAQ,SAAA,CAAW,UAAA,GAAa,KAAK,KAAK,EAAC;AAAA,cAC/C,UAAA,EAAY,IAAA,CAAK,GAAA,EAAI,GAAI,UAAA;AAAA,cACzB,MAAA,EAAQ,QAAA,KAAa,CAAA,GAAI,SAAA,GAAY;AAAA;AACvC,WACD,CAAA;AAAA,QACH,SAAS,KAAA,EAAO;AACd,UAAA,MAAM,IAAA,CAAK;AAAA,YACT,IAAA,EAAM,QAAQ,SAAA,CAAW,QAAA;AAAA,YACzB,OAAA,EAAS;AAAA,cACP,GAAI,OAAA,CAAQ,SAAA,CAAW,UAAA,GAAa,KAAK,KAAK,EAAC;AAAA,cAC/C,UAAA,EAAY,IAAA,CAAK,GAAA,EAAI,GAAI,UAAA;AAAA,cACzB,MAAA,EAAQ,OAAA;AAAA,cACR,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA;AAC9D,WACD,CAAA;AACD,UAAA,MAAM,KAAA;AAAA,QACR;AAEA,QAAA,OAAO,QAAA;AAAA,MACT;AAAA,KACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AACF;AAOA,SAAS,mBAAA,CACP,GAAA,EACA,KAAA,EACA,MAAA,EACA,YACA,KAAA,EACM;AACN,EAAA,IAAI,MAAM,QAAA,EAAU;AAClB,IAAA,MAAM,OAAA,GAAmC;AAAA,MACvC,EAAA,EAAI,IAAA;AAAA,MACJ,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,MAAA,EAAQ,OAAO,MAAA,IAAU,UAAA;AAAA,MACzB,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,QAAQ,MAAA,CAAO;AAAA,KACjB;AACA,IAAA,IAAI,OAAO,SAAA,EAAW;AACpB,MAAA,OAAA,CAAQ,YAAY,MAAA,CAAO,SAAA;AAAA,IAC7B;AACA,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,MAAA,CAAO,MAAA,CAAO,OAAA,EAAS,MAAA,CAAO,IAAI,CAAA;AAAA,IACpC;AACA,IAAA,GAAA,CAAI,SAAA,CAAU,KAAK,OAAO,CAAA;AAC1B,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,MAAM,SAAA,EAAW;AACnB,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,WAAA,GAAc,kBAAA,CAAmB,MAAA,CAAO,OAAO,CAAA;AACrD,EAAA,MAAM,oBAAqD,WAAA,GACvD,EAAE,GAAG,MAAA,CAAO,OAAA,KACZ,MAAA,CAAO,OAAA;AAEX,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,OAAO,iBAAA,CAAkB,YAAY,GAAG,CAAA;AAAA,EAC1C;AAEA,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,YAAA,GAAe,SAAS,iBAAiB,CAAA;AAC/C,EAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,YAAY,CAAA;AAAA,EAC5B;AAEA,EAAA,IAAI,MAAA,CAAO,SAAA,IAAa,MAAA,CAAO,SAAA,CAAU,SAAS,CAAA,EAAG;AACnD,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AACA,IAAA,KAAA,CAAM,KAAK,GAAG,gBAAA,CAAiB,OAAO,SAAA,EAAW,MAAA,CAAO,gBAAgB,CAAC,CAAA;AAAA,EAC3E;AAEA,EAAA,MAAM,MAAA,GAAS,OAAO,MAAA,IAAU,UAAA;AAChC,EAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA;AACrC,IAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,MAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,QAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,MACf;AACA,MAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,QAAQ,CAAC,CAAA;AACpC,MAAA,KAAA,MAAW,CAAC,KAAA,EAAO,KAAK,CAAA,IAAK,OAAA,EAAS;AACpC,QAAA,KAAA,CAAM,KAAK,GAAG,YAAA,CAAa,EAAE,CAAC,KAAK,GAAG,YAAA,CAAa,KAAK,CAAA,IAAK,EAAE,MAAA,EAAQ,GAAG,GAAA,EAAK,KAAA,EAAO,CAAC,CAAA;AAAA,MACzF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,WAAA,CAAY,SAAS,CAAA,EAAG;AACvD,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AACA,IAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,aAAa,CAAC,CAAA;AACzC,IAAA,MAAA,CAAO,WAAA,CAAY,OAAA,CAAQ,CAAC,IAAA,KAAS,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,CAAA,EAAA,EAAK,IAAI,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,EAChF;AAEA,EAAA,IAAI,MAAA,CAAO,QAAA,IAAY,MAAA,CAAO,QAAA,CAAS,SAAS,CAAA,EAAG;AACjD,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AACA,IAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,UAAU,CAAC,CAAA;AACtC,IAAA,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,CAAC,IAAA,KAAS,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,CAAA,EAAA,EAAK,IAAI,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,EAC7E;AAEA,EAAA,IAAI,MAAA,CAAO,MAAA,IAAU,MAAA,CAAO,MAAA,CAAO,SAAS,CAAA,EAAG;AAC7C,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AACA,IAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,QAAQ,CAAC,CAAA;AACpC,IAAA,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,CAAC,IAAA,KAAS,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,CAAA,EAAA,EAAK,IAAI,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,EAC3E;AAEA,EAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AACA,EAAA,KAAA,CAAM,IAAA,CAAK,gBAAA,CAAiB,WAAA,EAAa,KAAA,EAAO,UAAU,CAAC,CAAA;AAE3D,EAAA,GAAA,CAAI,SAAA,CAAU,KAAA,CAAM,GAAA,CAAI,KAAA,EAAO,KAAK,CAAC,CAAA;AACvC;AAEA,SAAS,iBAAA,CACP,GAAA,EACA,YAAA,EACA,UAAA,EACA,KAAA,EACM;AACN,EAAA,IAAI,MAAM,QAAA,EAAU;AAClB,IAAA,GAAA,CAAI,UAAU,IAAA,CAAK;AAAA,MACjB,EAAA,EAAI,KAAA;AAAA,MACJ,KAAA,EAAO,YAAA;AAAA,MACP,MAAA,EAAQ;AAAA,KACT,CAAA;AACD,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,MAAM,SAAA,EAAW;AACnB,IAAA;AAAA,EACF;AAEA,EAAA,GAAA,CAAI,SAAA,CAAU,MAAM,YAAY,CAAA;AAClC;AAOA,SAAS,mBAAmB,OAAA,EAA8D;AACxF,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AAClD,IAAA,IAAI,OAAO,UAAU,QAAA,IAAY,GAAA,CAAI,aAAY,CAAE,QAAA,CAAS,QAAQ,CAAA,EAAG;AACrE,MAAA,OAAO,EAAE,KAAK,KAAA,EAAM;AAAA,IACtB;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,gBAAA,CAAiB,aAAiC,UAAA,EAA4B;AACrF,EAAA,MAAM,YAAY,WAAA,IAAe,MAAA;AACjC,EAAA,MAAM,UAAA,GAAa,UAAU,WAAA,EAAY;AAEzC,EAAA,IAAI,SAAS,WAAA,CAAY,OAAA;AACzB,EAAA,IAAI,WAAW,UAAA,CAAW,OAAA;AAE1B,EAAA,IAAI,WAAW,QAAA,CAAS,OAAO,KAAK,UAAA,CAAW,QAAA,CAAS,MAAM,CAAA,EAAG;AAC/D,IAAA,MAAA,GAAS,WAAA,CAAY,KAAA;AACrB,IAAA,QAAA,GAAW,UAAA,CAAW,KAAA;AAAA,EACxB,CAAA,MAAA,IAAW,WAAW,QAAA,CAAS,SAAS,KAAK,UAAA,CAAW,QAAA,CAAS,MAAM,CAAA,EAAG;AACxE,IAAA,MAAA,GAAS,WAAA,CAAY,OAAA;AACrB,IAAA,QAAA,GAAW,UAAA,CAAW,OAAA;AAAA,EACxB;AAEA,EAAA,MAAM,aAAa,OAAA,CAAQ,SAAS,CAAA,GAAI,SAAA,GAAY,SAAS,SAAS,CAAA;AACtE,EAAA,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,UAAU,CAAA,MAAA,EAAM,WAAW,KAAA,CAAM,YAAA,CAAa,UAAU,CAAC,CAAC,CAAA,CAAA;AAChF;;;ACvMO,SAAS,YAAmC,MAAA,EAA+B;AAChF,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,MAAM,EAAC;AAAA,IACP,KAAA,EAAO,CAAC,KAAA,KAAmB,mBAAA,CAAoB,OAAO,MAAM;AAAA,GAC9D;AACF;AASO,SAAS,mBAAA,CACd,OACA,MAAA,EACmB;AACnB,EAAA,MAAM,SAAgE,EAAC;AACvE,EAAA,MAAM,QAAA,GAAW,KAAA;AAEjB,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,IAAI,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AAChD,IAAA,MAAM,KAAA,GAAQ,WAAW,GAAG,CAAA;AAG5B,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,IAAI,aAAa,IAAA,EAAM;AACrB,QAAA,MAAA,CAAO,GAAG,IAAI,IAAA,CAAK,OAAA;AAAA,MACrB;AACA,MAAA;AAAA,IACF;AAGA,IAAA,QAAQ,KAAK,IAAA;AAAM,MACjB,KAAK,SAAA;AACH,QAAA,MAAA,CAAO,GAAG,CAAA,GAAI,YAAA,CAAa,KAAA,EAAO,GAAG,CAAA;AACrC,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAA,MAAA,CAAO,GAAG,CAAA,GAAI,WAAA,CAAY,KAAA,EAAO,GAAG,CAAA;AAEpC,QAAA,IAAI,IAAA,CAAK,QAAA,IAAY,MAAA,CAAO,GAAG,MAAM,MAAA,EAAW;AAC9C,UAAA,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,QAC3B;AACA,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAA,MAAA,CAAO,GAAG,CAAA,GAAI,WAAA,CAAY,KAAA,EAAO,GAAG,CAAA;AAEpC,QAAA,IAAI,IAAA,CAAK,QAAA,IAAY,MAAA,CAAO,GAAG,MAAM,MAAA,EAAW;AAC9C,UAAA,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,QAC3B;AACA,QAAA;AAAA;AACJ,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAMO,SAAS,YAAA,CAAa,OAAgB,QAAA,EAA2B;AACtE,EAAA,IAAI,OAAO,UAAU,SAAA,EAAW;AAC9B,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,KAAA,GAAQ,MAAM,WAAA,EAAY;AAChC,IAAA,IAAI,KAAA,KAAU,MAAA,IAAU,KAAA,KAAU,GAAA,IAAO,UAAU,KAAA,EAAO;AAAC,MAAA,OAAO,IAAA;AAAA,IAAK;AACvE,IAAA,IAAI,KAAA,KAAU,OAAA,IAAW,KAAA,KAAU,GAAA,IAAO,UAAU,IAAA,EAAM;AAAC,MAAA,OAAO,KAAA;AAAA,IAAM;AAAA,EAC1E;AAEA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR,CAAA,MAAA,EAAS,QAAQ,CAAA,uBAAA,EAA0B,OAAO,KAAK,CAAA,kCAAA;AAAA,GAEzD;AACF;AAEO,SAAS,WAAA,CAAY,OAAgB,QAAA,EAA0B;AACpE,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,KAAA;AAAA,EACT;AAGA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AAEA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR,CAAA,MAAA,EAAS,QAAQ,CAAA,sBAAA,EAAyB,OAAO,KAAK,CAAA,CAAA;AAAA,GACxD;AACF;AAEO,SAAS,WAAA,CAAY,OAAgB,QAAA,EAA0B;AACpE,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,EAAG;AAC3B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,MAAA,EAAS,QAAQ,CAAA,6BAAA,EAAgC,KAAK,CAAA,CAAA,CAAG,CAAA;AAAA,IAC3E;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,IAAA,MAAM,MAAA,GAAS,OAAO,OAAO,CAAA;AAC7B,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,EAAG;AAC5B,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,MAAA,EAAS,QAAQ,CAAA,sCAAA,EAAyC,KAAK,CAAA,EAAA;AAAA,OACjE;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR,CAAA,MAAA,EAAS,QAAQ,CAAA,sBAAA,EAAyB,OAAO,KAAK,CAAA,CAAA;AAAA,GACxD;AACF;AAMO,SAAS,gBAAgB,KAAA,EAAoC;AAClE,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,GAAI,KAAA,GAAQ,MAAA;AAAA,EAC1C;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,MAAA,GAAS,OAAO,OAAO,CAAA;AAC7B,IAAA,OAAO,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,GAAI,MAAA,GAAS,MAAA;AAAA,EAC5C;AAEA,EAAA,OAAO,MAAA;AACT;AAgBO,SAAS,WAA8C,KAAA,EAAa;AACzE,EAAA,IAAI,CAAC,KAAA,CAAM,KAAA,IAAS,OAAO,KAAA,CAAM,UAAU,QAAA,EAAU;AACnD,IAAA,OAAO,KAAA;AAAA,EACT;AAGA,EAAA,OAAO,EAAE,GAAG,KAAA,EAAO,GAAG,MAAM,KAAA,EAAM;AACpC;;;AC/KO,SAAS,UAA+B,MAAA,EAA6B;AAC1E,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,MAAM,EAAC;AAAA,IACP,KAAA,EAAO,CAAC,OAAA,KAAyB,mBAAA,CAAoB,SAAS,MAAM;AAAA,GACtE;AACF;AASO,SAAS,mBAAA,CACd,SACA,MAAA,EACmB;AACnB,EAAA,MAAM,SAAkC,EAAC;AAEzC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,IAAI,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AAChD,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AAGhC,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA,IAAI,aAAa,IAAA,EAAM;AACrB,QAAA,MAAA,CAAO,GAAG,IAAI,IAAA,CAAK,OAAA;AAAA,MACrB;AACA,MAAA;AAAA,IACF;AAGA,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI,aAAA,CAAc,QAAA,EAAU,KAAK,IAAI,CAAA;AAAA,EACjD;AAEA,EAAA,OAAO,MAAA;AACT;AAKA,SAAS,aAAA,CAAc,KAAA,EAA2B,GAAA,EAAa,IAAA,EAAuD;AACpH,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,SAAA;AACH,MAAA,OAAO,YAAA,CAAa,OAAO,GAAG,CAAA;AAAA,IAEhC,KAAK,QAAA;AACH,MAAA,MAAM,QAAA,GAAW,WAAA,CAAY,KAAA,EAAO,GAAG,CAAA;AAEvC,MAAA,IAAI,KAAK,QAAA,EAAU;AACjB,QAAA,IAAA,CAAK,SAAS,QAAQ,CAAA;AAAA,MACxB;AACA,MAAA,OAAO,QAAA;AAAA,IAET,KAAK,QAAA;AACH,MAAA,MAAM,QAAA,GAAW,WAAA,CAAY,KAAA,EAAO,GAAG,CAAA;AAEvC,MAAA,IAAI,KAAK,QAAA,EAAU;AACjB,QAAA,IAAA,CAAK,SAAS,QAAQ,CAAA;AAAA,MACxB;AACA,MAAA,OAAO,QAAA;AAAA,IAET;AACE,MAAA,OAAO,KAAA;AAAA;AAEb;;;AC/JO,SAAS,cAAc,KAAA,EAA6C;AACzE,EAAA,IAAI,KAAA,IAAS,OAAO,KAAA,CAAM,GAAA,KAAQ,YAAY,KAAA,CAAM,GAAA,CAAI,SAAS,CAAA,EAAG;AAClE,IAAA,OAAO,KAAA,CAAM,GAAA;AAAA,EACf;AACA,EAAA,OAAO,QAAQ,GAAA,EAAI;AACrB;;;ACNO,SAAS,YAAY,KAAA,EAAuB;AACjD,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA;AACjC;;;ACEA,eAAe,aAAA,CACb,OAAA,EACA,KAAA,EACA,OAAA,EACe;AACf,EAAA,IAAI,SAAS,CAAA,EAAG;AAAE,IAAA;AAAA,EAAQ;AAC1B,EAAA,MAAM,OAAO,OAAA,KAAY,aAAA,GAAgB,KAAA,GAAQ,CAAA,KAAM,UAAU,CAAA,CAAA,GAAK,KAAA;AACtE,EAAA,MAAM,IAAI,OAAA,CAAc,CAAC,OAAA,KAAY;AAAE,IAAA,UAAA,CAAW,SAAS,IAAI,CAAA;AAAA,EAAG,CAAC,CAAA;AACrE;AAEA,eAAsB,SAAA,CACpB,EAAA,EACA,OAAA,GAAwB,EAAC,EACb;AACZ,EAAA,IAAI,OAAO,OAAO,UAAA,EAAY;AAC5B,IAAA,MAAM,IAAI,UAAU,uBAAuB,CAAA;AAAA,EAC7C;AAEA,EAAA,MAAM,EAAE,WAAW,CAAA,EAAG,KAAA,GAAQ,GAAG,OAAA,GAAU,OAAA,EAAS,SAAQ,GAAI,OAAA;AAEhE,EAAA,IAAI,WAAW,CAAA,EAAG;AAChB,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,2BAAA,EAA8B,QAAQ,CAAA,CAAE,CAAA;AAAA,EAC/D;AACA,EAAA,IAAI,QAAQ,CAAA,EAAG;AACb,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,wBAAA,EAA2B,KAAK,CAAA,CAAE,CAAA;AAAA,EACzD;AAEA,EAAA,IAAI,SAAA;AAEJ,EAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,IAAW,QAAA,EAAU,OAAA,EAAA,EAAW;AACpD,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,EAAA,EAAG;AAAA,IAClB,SAAS,GAAA,EAAK;AACZ,MAAA,SAAA,GAAY,GAAA;AACZ,MAAA,IAAI,UAAU,QAAA,EAAU;AACtB,QAAA,OAAA,GAAU,KAAK,OAAO,CAAA;AACtB,QAAA,MAAM,aAAA,CAAc,OAAA,EAAS,KAAA,EAAO,OAAO,CAAA;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,SAAA;AACR;;;ACtCO,SAAS,eAAA,CACd,GAAA,EACA,OAAA,EACA,IAAA,EACA,MAAA,EACM;AACN,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,GAAA,CAAI,IAAI,IAAA,GAAO,EAAE,EAAA,EAAI,KAAA,EAAO,OAAO,EAAE,IAAA,EAAM,cAAA,EAAgB,OAAA,EAAS,GAAI,IAAA,IAAQ,EAAE,IAAA,EAAK,IAAM,CAAA;AAAA,EAC/F,CAAA,MAAO;AACL,IAAA,GAAA,CAAI,EAAA,EAAI,QAAQ,OAAA,EAAS,EAAE,GAAI,IAAA,IAAQ,EAAE,IAAA,EAAK,EAAI,CAAA;AAAA,EACpD;AACF;AAMO,SAAS,WAAA,CAAY,GAAA,EAAmB,GAAA,EAAc,MAAA,EAAwB;AACnF,EAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,GAAA,CAAI,EAAA,EAAI,IAAA,GAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,EAAE,IAAA,EAAM,gBAAA,EAAkB,OAAA,EAAQ,EAAG,CAAA;AAAA,EAC1E,CAAA,MAAO;AACL,IAAA,GAAA,CAAI,EAAA,EAAI,QAAQ,OAAO,CAAA;AAAA,EACzB;AACF;AAOO,SAAS,eAAe,GAAA,EAAqB;AAClD,EAAA,IAAI,QAAQ,IAAA,IAAQ,OAAO,GAAA,KAAQ,QAAA,IAAY,gBAAgB,GAAA,EAAK;AAClE,IAAA,MAAM,GAAA;AAAA,EACR;AACA,EAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,EAAA,MAAM,MAAA,CAAO,MAAA,CAAO,IAAI,KAAA,CAAM,OAAO,CAAA,EAAG;AAAA,IACtC,UAAA,EAAY,GAAA;AAAA,IACZ,IAAA,EAAM;AAAA,GACP,CAAA;AACH;;;AC8BO,SAAS,wBAAwB,CAAA,EAA4C;AAClF,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,KAAA;AAAA,IACJ,oBAAA,EAAsB,IAAA;AAAA,IACtB,WAAA,EAAa,IAAA;AAAA,IACb,YAAA,EAAc,CAAC,CAAA,CAAE,UAAA;AAAA,IACjB,UAAU,CAAA,CAAE,QAAA;AAAA,IACZ,QAAQ,CAAA,CAAE,MAAA;AAAA,IACV,UAAU,CAAA,CAAE,QAAA;AAAA,IACZ,QAAQ,CAAA,CAAE,MAAA;AAAA,IACV,YAAY,CAAA,CAAE,UAAA;AAAA,IACd,GAAI,CAAA,CAAE,WAAA,IAAe,EAAE,WAAA,EAAa,EAAE,WAAA,EAAY;AAAA,IAClD,GAAI,CAAA,CAAE,QAAA,IAAY,EAAE,QAAA,EAAU,EAAE,QAAA,EAAS;AAAA,IACzC,WAAA,EAAa,EAAE,WAAA,IAAe,OAAA;AAAA,IAC9B,OAAA,EAAS,yBAAyB,CAAC;AAAA,GACrC;AACF;AAGO,SAAS,yBAAyB,CAAA,EAA8B;AACrE,EAAA,MAAM,IAAA,GAAO,EAAE,WAAA,IAAe,OAAA;AAC9B,EAAA,MAAM,KAAK,CAAA,CAAE,WAAA;AACb,EAAA,MAAM,KAAA,GAAQ,EAAA,GACV,CAAA,EAAA,EAAK,CAAC,EAAA,CAAG,SAAS,IAAA,GAAO,CAAA,EAAG,EAAA,CAAG,KAAK,CAAA,CAAA,EAAI,EAAA,CAAG,QAAQ,SAAS,CAAA,CAAA,GAAK,EAAA,EAAI,EAAA,CAAG,KAAK,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,QAAK,CAAC,CAAA,CAAA,CAAA,GAC1G,EAAA;AACJ,EAAA,MAAM,IAAA,GAAO,EAAE,UAAA,GAAa,CAAA,CAAA,EAAI,EAAE,QAAQ,CAAA,CAAA,CAAA,GAAM,CAAA,qBAAA,EAAmB,CAAA,CAAE,QAAQ,CAAA,CAAA,CAAA;AAC7E,EAAA,MAAM,GAAA,GAAM,EAAE,QAAA,GACV,CAAA,WAAA,EAAc,EAAE,QAAQ,CAAA,CAAA,CAAA,GACxB,CAAA,CAAE,UAAA,GACA,EAAA,GACA,+CAAA;AACN,EAAA,OAAO,GAAG,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,MAAM,WAAM,CAAA,CAAE,MAAM,CAAA,IAAA,EAAO,CAAA,CAAE,QAAQ,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,GAAG,iBAAiB,IAAI,CAAA,CAAA,CAAA;AAC/F;AAUO,SAAS,kBAAA,CACd,KACA,IAAA,EACuB;AACvB,EAAA,IAAI,KAAK,SAAA,EAAW;AAClB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,IAAI,IAAA,CAAK,MAAA;AACf,EAAA,MAAM,MAAA,GAAS,wBAAwB,CAAC,CAAA;AACxC,EAAA,IAAI,KAAK,MAAA,EAAQ;AAGf,IAAA,GAAA,CAAI,EAAA,EAAI,OAAO,MAAM,CAAA;AAAA,EACvB,CAAA,MAAO;AACL,IAAA,CAAC,GAAA,CAAI,IAAI,IAAA,IAAQ,GAAA,CAAI,IAAI,KAAA,IAAS,wBAAA,CAAyB,CAAC,CAAC,CAAA;AAAA,EAC/D;AACA,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,KAAA;AAAA,IACJ,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,uBAAA;AAAA,MACN,IAAA,EAAM,YAAA;AAAA,MACN,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,OAAA,EAAS,EAAE,GAAG,MAAA;AAAO,KACvB;AAAA,IACA,MAAA,EAAQ;AAAA,GACV;AACF;;;ACnGO,SAAS,cAAc,OAAA,EAAuC;AACnE,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAU,QAAQ,MAAA,EAAQ,MAAA,EAAQ,SAAQ,GAAI,OAAA;AAC7D,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,MAAM,aAAA,GACJ,OAAO,OAAA,KAAY,WAAA,IAAe,QAAQ,MAAA,EAAQ,OAAA,GAC9C,OAAA,CAAQ,MAAA,CAAO,OAAA,GACf,EAAA;AAEN,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,gBAAgB,CAAC,CAAA;AAGnD,EAAA,MAAM,SAAA,GAAY,CAAA,EAAG,UAAA,CAAW,OAAA,CAAQ,QAAG,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,IAAA,CAAK,KAAK,CAAC,CAAA,CAAA;AACvE,EAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AACpB,EAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA;AAGhC,EAAA,IAAI,WAAW,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,SAAS,CAAA,EAAG;AAC9C,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA,EAAG,MAAA,CAAO,CAAC,CAAC,CAAqB,CAAA;AAC1F,IAAA,MAAM,aAAA,GAAwC,MAAA,CAAO,WAAA,CAAY,OAAO,CAAA;AACxE,IAAA,MAAM,YAAA,GAAe,YAAY,aAAa,CAAA;AAC9C,IAAA,KAAA,MAAW,QAAQ,YAAA,EAAc;AAC/B,MAAA,KAAA,CAAM,IAAA,CAAK,GAAG,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA,EAAA,EAAK,IAAI,CAAA,CAAE,CAAA;AAAA,IAChD;AACA,IAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,MAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA;AAAA,IAClC;AAAA,EACF;AAGA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AACxC,IAAA,MAAMD,QAAAA,GAAU,SAAS,CAAC,CAAA;AAC1B,IAAA,IAAI,CAACA,QAAAA,EAAS;AAAC,MAAA;AAAA,IAAS;AAGxB,IAAA,IAAIA,SAAQ,MAAA,EAAQ;AAClB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,IAAA,CAAKA,QAAAA,CAAQ,MAAM,CAAC,CAAA,CAAE,CAAA;AAAA,IAC3E;AAGA,IAAA,KAAA,MAAW,OAAA,IAAWA,SAAQ,KAAA,EAAO;AACnC,MAAA,MAAM,OAAO,OAAO,OAAA,KAAY,WAAW,EAAE,IAAA,EAAM,SAAQ,GAAI,OAAA;AAC/D,MAAA,IAAI,YAAA;AAEJ,MAAA,IAAI,IAAA,CAAK,aAAa,MAAA,EAAW;AAC/B,QAAA,MAAM,GAAA,GAAM,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AAC/B,QAAA,MAAM,SAAA,GAAY,GAAA,CAAI,MAAA,GAAS,IAAA,CAAK,QAAA,GAChC,SAAA,CAAU,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,QAAA,GAAW,CAAC,CAAA,GAAI,WAC1C,IAAA,CAAK,IAAA;AACT,QAAA,YAAA,GAAe,CAAC,KAAK,GAAA,GAAM,UAAA,CAAW,MAAM,SAAA,CAAU,SAAS,CAAC,CAAA,GAAI,SAAS,CAAA;AAAA,MAC/E,CAAA,MAAO;AACL,QAAA,MAAM,OAAA,GAAU,QAAA,CAAS,IAAA,CAAK,IAAA,EAAM,YAAY,CAAA;AAChD,QAAA,YAAA,GAAe,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA,CAAI,OAAK,UAAA,CAAW,KAAA,CAAM,CAAC,CAAC,CAAA,GAAI,OAAA;AAAA,MACpE;AAEA,MAAA,KAAA,MAAW,MAAM,YAAA,EAAc;AAC7B,QAAA,KAAA,CAAM,IAAA,CAAK,GAAG,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA,EAAA,EAAK,EAAE,CAAA,CAAE,CAAA;AAAA,MAC9C;AAAA,IACF;AAGA,IAAA,IAAI,CAAA,GAAI,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAC3B,MAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA;AAAA,IAClC;AAAA,EACF;AAGA,EAAA,IAAI,MAAA,IAAU,MAAA,IAAU,MAAA,KAAW,MAAA,EAAW;AAC5C,IAAA,IAAI,KAAA,CAAM,MAAM,MAAA,GAAS,CAAC,MAAM,UAAA,CAAW,KAAA,CAAM,QAAG,CAAA,EAAG;AACrD,MAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA;AAAA,IAClC;AACA,IAAA,MAAM,cAAwB,EAAC;AAE/B,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,WAAA,CAAY,KAAK,MAAM,CAAA;AAAA,IACzB,WAAW,MAAA,EAAQ;AACjB,MAAA,MAAM,YAAA,GAAe,gBAAgB,MAAM,CAAA;AAC3C,MAAA,MAAM,WAAA,GAAc,eAAe,MAAM,CAAA;AACzC,MAAA,WAAA,CAAY,IAAA,CAAK,WAAA,CAAY,CAAA,EAAG,YAAY,EAAE,CAAC,CAAA;AAAA,IACjD;AAEA,IAAA,IAAI,WAAW,MAAA,EAAW;AACxB,MAAA,WAAA,CAAY,KAAK,UAAA,CAAW,KAAA,CAAME,aAAAA,CAAa,MAAM,CAAC,CAAC,CAAA;AAAA,IACzD;AAEA,IAAA,MAAM,UAAA,GAAa,CAAA,EAAG,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA,EAAA,EAAK,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AACtE,IAAA,KAAA,CAAM,KAAK,UAAU,CAAA;AAAA,EACvB;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAKO,SAAS,cAAcX,KAAAA,EAAsB;AAClD,EAAA,OAAO,UAAA,CAAW,KAAKA,KAAI,CAAA;AAC7B;AAKO,SAAS,YAAY,OAAA,EAAoD;AAC9E,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA;AACtC,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AAAC,IAAA,OAAO,EAAC;AAAA,EAAE;AAGrC,EAAA,MAAM,eAAe,IAAA,CAAK,GAAA;AAAA,IACxB,GAAG,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAC,GAAG,CAAA,KAAM,SAAA,CAAU,GAAG,CAAA,CAAE,MAAM;AAAA,GACjD;AAEA,EAAA,OAAO,QAAQ,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AACnC,IAAA,MAAM,SAAA,GAAY,SAAA,CAAU,GAAG,CAAA,CAAE,MAAA;AACjC,IAAA,MAAM,OAAA,GAAU,GAAA,CAAI,MAAA,CAAO,YAAA,GAAe,YAAY,CAAC,CAAA;AACvD,IAAA,MAAM,YAAA,GAAe,UAAA,CAAW,IAAA,CAAK,GAAG,CAAA;AACxC,IAAA,MAAM,cAAA,GAAiB,UAAA,CAAW,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AACrD,IAAA,OAAO,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,OAAO,GAAG,cAAc,CAAA,CAAA;AAAA,EACpD,CAAC,CAAA;AACH;AAKO,IAAMY,WAAAA,GAAa,UAAA;AAKnB,IAAMD,aAAAA,GAAe,YAAA;AAKrB,SAAS,UAAA,CACd,QACA,MAAA,EACQ;AACR,EAAA,MAAM,MAAA,GAAS,gBAAgB,MAAM,CAAA;AACrC,EAAA,MAAM,KAAA,GAAQ,eAAe,MAAM,CAAA;AAEnC,EAAA,MAAM,KAAA,GAAQ,CAAC,KAAA,CAAM,MAAM,CAAC,CAAA;AAE5B,EAAA,IAAI,WAAW,MAAA,EAAW;AACxB,IAAA,KAAA,CAAM,KAAK,UAAA,CAAW,KAAA,CAAMA,aAAAA,CAAa,MAAM,CAAC,CAAC,CAAA;AAAA,EACnD;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAOA,SAAS,SAAA,CAAU,KAAa,UAAA,EAA4B;AAC1D,EAAA,IAAI,OAAA,GAAU,CAAA;AACd,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,OAAO,CAAA,GAAI,IAAI,MAAA,EAAQ;AACrB,IAAA,IAAI,GAAA,CAAI,CAAC,CAAA,KAAM,MAAA,IAAU,IAAI,CAAA,GAAI,CAAC,MAAM,GAAA,EAAK;AAC3C,MAAA,IAAI,IAAI,CAAA,GAAI,CAAA;AACZ,MAAA,OAAO,CAAA,GAAI,IAAI,MAAA,IAAU,CAAC,WAAW,IAAA,CAAK,GAAA,CAAI,CAAC,CAAE,CAAA,EAAG;AAAE,QAAA,CAAA,EAAA;AAAA,MAAK;AAC3D,MAAA,MAAA,IAAU,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA;AAC5B,MAAA,CAAA,GAAI,CAAA,GAAI,CAAA;AAAA,IACV,CAAA,MAAO;AACL,MAAA,IAAI,WAAW,UAAA,EAAY;AAAE,QAAA;AAAA,MAAO;AACpC,MAAA,MAAA,IAAU,IAAI,CAAC,CAAA;AACf,MAAA,OAAA,EAAA;AACA,MAAA,CAAA,EAAA;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,gBAAgB,MAAA,EAA0D;AACjF,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,SAAA;AACH,MAAA,OAAO,WAAA,CAAY,OAAA;AAAA,IACrB,KAAK,OAAA;AACH,MAAA,OAAO,WAAA,CAAY,KAAA;AAAA,IACrB,KAAK,SAAA;AACH,MAAA,OAAO,WAAA,CAAY,OAAA;AAAA,IACrB,KAAK,MAAA;AACH,MAAA,OAAO,WAAA,CAAY,IAAA;AAAA;AAEzB;AAEA,SAAS,eAAe,MAAA,EAA4E;AAClG,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,SAAA;AACH,MAAA,OAAO,UAAA,CAAW,OAAA;AAAA,IACpB,KAAK,OAAA;AACH,MAAA,OAAO,UAAA,CAAW,KAAA;AAAA,IACpB,KAAK,SAAA;AACH,MAAA,OAAO,UAAA,CAAW,OAAA;AAAA,IACpB,KAAK,MAAA;AACH,MAAA,OAAO,UAAA,CAAW,IAAA;AAAA;AAExB;AAMA,SAAS,QAAA,CAASX,OAAc,QAAA,EAA4B;AAC1D,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,MAAM,QAAA,GAAWA,KAAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAChC,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,MAAM,IAAA,GAAO,QAAQ,OAAA,EAAQ;AAC7B,IAAA,IAAI,SAAA,CAAU,IAAI,CAAA,CAAE,MAAA,IAAU,QAAA,EAAU;AACtC,MAAA,MAAA,CAAO,KAAK,IAAI,CAAA;AAChB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAChC,IAAA,IAAI,OAAA,GAAU,EAAA;AACd,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,OAAO,OAAA,GAAU,IAAA;AACvB,MAAA,IAAI,SAAA,CAAU,IAAI,CAAA,CAAE,MAAA,IAAU,QAAA,EAAU;AACtC,QAAA,OAAA,GAAU,IAAA;AAAA,MACZ,CAAA,MAAO;AACL,QAAA,IAAI,OAAA,CAAQ,SAAQ,EAAG;AAAC,UAAA,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,CAAA;AAAA,QAAE;AACvD,QAAA,MAAM,OAAA,GAAU,SAAA,CAAU,IAAI,CAAA,CAAE,MAAA;AAChC,QAAA,IAAI,UAAU,QAAA,EAAU;AAEtB,UAAA,MAAA,CAAO,IAAA,CAAK,UAAU,IAAI,CAAA,CAAE,MAAM,CAAA,EAAG,QAAA,GAAW,CAAC,CAAA,GAAI,QAAG,CAAA;AACxD,UAAA,OAAA,GAAU,EAAA;AAAA,QACZ,CAAA,MAAO;AACL,UAAA,OAAA,GAAU,IAAA;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,SAAQ,EAAG;AAAC,MAAA,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,CAAA;AAAA,IAAE;AAAA,EACzD;AACA,EAAA,OAAO,MAAA,CAAO,MAAA,GAAS,CAAA,GAAI,MAAA,GAAS,CAAC,EAAE,CAAA;AACzC;AAiCO,SAAS,gBAAgB,KAAA,EAAsC;AACpE,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AAAE,IAAA,OAAO,EAAA;AAAA,EAAI;AACrC,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,IAAA,OAAO,aAAA,CAAc,EAAE,KAAA,EAAO,IAAA,CAAK,OAAO,QAAA,EAAU,IAAA,CAAK,QAAA,EAAU,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,MAAA,EAAQ,IAAA,CAAK,QAAQ,CAAA;AAAA,EAC/G;AAEA,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,aAAA,GACJ,OAAO,OAAA,KAAY,WAAA,IAAe,QAAQ,MAAA,EAAQ,OAAA,GAC9C,OAAA,CAAQ,MAAA,CAAO,OAAA,GACf,EAAA;AACN,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,gBAAgB,CAAC,CAAA;AAEnD,EAAA,KAAA,IAAS,QAAA,GAAW,CAAA,EAAG,QAAA,GAAW,KAAA,CAAM,QAAQ,QAAA,EAAA,EAAY;AAC1D,IAAA,MAAM,KAAA,GAAQ,MAAM,QAAQ,CAAA;AAC5B,IAAA,MAAM,MAAA,GAAS,QAAA,KAAa,KAAA,CAAM,MAAA,GAAS,CAAA;AAG3C,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,UAAA,CAAW,OAAA,CAAQ,QAAG,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,IAAA,CAAK,KAAA,CAAM,KAAK,CAAC,CAAA,CAAE,CAAA;AACxE,IAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA;AAGhC,IAAA,IAAI,KAAA,CAAM,WAAW,MAAA,CAAO,IAAA,CAAK,MAAM,OAAO,CAAA,CAAE,SAAS,CAAA,EAAG;AAC1D,MAAA,MAAM,UAAU,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAM,OAAO,EAAE,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,CAAC,GAAG,MAAA,CAAO,CAAC,CAAC,CAAqB,CAAA;AAChG,MAAA,MAAM,aAAA,GAAwC,MAAA,CAAO,WAAA,CAAY,OAAO,CAAA;AACxE,MAAA,MAAM,YAAA,GAAe,YAAY,aAAa,CAAA;AAC9C,MAAA,KAAA,MAAW,QAAQ,YAAA,EAAc;AAC/B,QAAA,KAAA,CAAM,IAAA,CAAK,GAAG,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA,EAAA,EAAK,IAAI,CAAA,CAAE,CAAA;AAAA,MAChD;AACA,MAAA,IAAI,KAAA,CAAM,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAC7B,QAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA;AAAA,MAClC;AAAA,IACF;AAGA,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AAC9C,MAAA,MAAMS,QAAAA,GAAU,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA;AAChC,MAAA,IAAI,CAACA,QAAAA,EAAS;AAAE,QAAA;AAAA,MAAU;AAE1B,MAAA,IAAIA,SAAQ,MAAA,EAAQ;AAClB,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,IAAA,CAAKA,QAAAA,CAAQ,MAAM,CAAC,CAAA,CAAE,CAAA;AAAA,MAC3E;AAEA,MAAA,KAAA,MAAW,OAAA,IAAWA,SAAQ,KAAA,EAAO;AACnC,QAAA,MAAM,OAAO,OAAO,OAAA,KAAY,WAAW,EAAE,IAAA,EAAM,SAAQ,GAAI,OAAA;AAC/D,QAAA,IAAI,YAAA;AAEJ,QAAA,IAAI,IAAA,CAAK,aAAa,MAAA,EAAW;AAC/B,UAAA,MAAM,GAAA,GAAM,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AAC/B,UAAA,MAAM,SAAA,GAAY,GAAA,CAAI,MAAA,GAAS,IAAA,CAAK,QAAA,GAChC,SAAA,CAAU,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,QAAA,GAAW,CAAC,CAAA,GAAI,WAC1C,IAAA,CAAK,IAAA;AACT,UAAA,YAAA,GAAe,CAAC,KAAK,GAAA,GAAM,UAAA,CAAW,MAAM,SAAA,CAAU,SAAS,CAAC,CAAA,GAAI,SAAS,CAAA;AAAA,QAC/E,CAAA,MAAO;AACL,UAAA,MAAM,OAAA,GAAU,QAAA,CAAS,IAAA,CAAK,IAAA,EAAM,YAAY,CAAA;AAChD,UAAA,YAAA,GAAe,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA,CAAI,OAAK,UAAA,CAAW,KAAA,CAAM,CAAC,CAAC,CAAA,GAAI,OAAA;AAAA,QACpE;AAEA,QAAA,KAAA,MAAW,MAAM,YAAA,EAAc;AAC7B,UAAA,KAAA,CAAM,IAAA,CAAK,GAAG,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA,EAAA,EAAK,EAAE,CAAA,CAAE,CAAA;AAAA,QAC9C;AAAA,MACF;AAEA,MAAA,IAAI,CAAA,GAAI,KAAA,CAAM,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACjC,QAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA;AAAA,MAClC;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,IAAI,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,MAAA,KAAW,MAAA,EAAW;AAC9C,QAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA;AAChC,QAAA,MAAM,cAAwB,EAAC;AAC/B,QAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,UAAA,WAAA,CAAY,IAAA,CAAK,eAAe,KAAA,CAAM,MAAM,EAAE,eAAA,CAAgB,KAAA,CAAM,MAAM,CAAC,CAAC,CAAA;AAAA,QAC9E;AACA,QAAA,IAAI,KAAA,CAAM,WAAW,MAAA,EAAW;AAC9B,UAAA,WAAA,CAAY,KAAK,UAAA,CAAW,KAAA,CAAME,cAAa,KAAA,CAAM,MAAM,CAAC,CAAC,CAAA;AAAA,QAC/D;AACA,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA,EAAA,EAAK,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,MAClE;AAAA,IACF,CAAA,MAAO;AAEL,MAAA,IAAI,KAAA,CAAM,MAAM,MAAA,GAAS,CAAC,MAAM,UAAA,CAAW,KAAA,CAAM,QAAG,CAAA,EAAG;AACrD,QAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AASO,SAAS,WAAA,CAAY,KAAqB,IAAA,EAAwC;AACvF,EAAA,MAAM,MAAM,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC3D,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,KAAA,CAAM,IAAI,EAAE,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,CAAC,CAAA;AAC/E,EAAA,MAAM,GAAA,GAAM,MAAM,QAAA,IAAY,CAAA;AAC9B,EAAA,IAAI,QAAA,CAAS,UAAU,GAAA,EAAK;AAAC,IAAA,OAAO,QAAA;AAAA,EAAS;AAC7C,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,MAAM,CAAC,CAAA;AACvC,EAAA,KAAA,CAAM,IAAA,CAAK,WAAW,KAAA,CAAM,CAAA,OAAA,EAAK,SAAS,MAAA,GAAS,GAAA,GAAM,CAAC,CAAA,WAAA,CAAa,CAAC,CAAA;AACxE,EAAA,OAAO,KAAA;AACT;AAgBO,SAAS,kBAAkB,OAAA,EAOvB;AACT,EAAA,MAAM,EAAE,KAAA,EAAO,WAAA,EAAa,iBAAiB,QAAA,EAAU,KAAA,EAAO,SAAQ,GAAI,OAAA;AAC1E,EAAA,MAAM,WAA6B,EAAC;AAGpC,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,aAAA;AAAA,MACR,KAAA,EAAO,CAAC,WAAW;AAAA,KACpB,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,SAAA;AAAA,MACR,KAAA,EAAO,CAAC,eAAe;AAAA,KACxB,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AACjC,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,SAAA;AAAA,MACR,OAAO,OAAA,CAAQ,GAAA,CAAI,OAAK,UAAA,CAAW,KAAA,CAAM,CAAC,CAAC;AAAA,KAC5C,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,KAAA,IAAS,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AAC7B,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,GAAA,CAAI,CAAA,IAAA,KAAQ;AAClC,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,GACf,CAAA,EAAA,EAAK,IAAA,CAAK,IAAI,CAAA,GAAA,EAAM,IAAA,CAAK,KAAK,CAAA,CAAA,GAC9B,CAAA,EAAA,EAAK,IAAA,CAAK,IAAI,CAAA,CAAA;AAClB,MAAA,MAAM,WAAW,IAAA,CAAK,QAAA,GAAW,UAAA,CAAW,OAAA,CAAQ,aAAa,CAAA,GAAI,EAAA;AACrE,MAAA,MAAM,IAAA,GAAO,KAAK,WAAA,GAAc,UAAA,CAAW,MAAM,CAAA,QAAA,EAAM,IAAA,CAAK,WAAW,CAAA,CAAE,CAAA,GAAI,EAAA;AAC7E,MAAA,OAAO,CAAA,EAAG,WAAW,IAAA,CAAK,KAAK,CAAC,CAAA,EAAG,QAAQ,GAAG,IAAI,CAAA,CAAA;AAAA,IACpD,CAAC,CAAA;AACD,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,OAAA;AAAA,MACR,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,QAAA,IAAY,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACnC,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,UAAA;AAAA,MACR,KAAA,EAAO,SAAS,GAAA,CAAI,CAAA,EAAA,KAAM,WAAW,KAAA,CAAM,CAAA,EAAA,EAAK,EAAE,CAAA,CAAE,CAAC;AAAA,KACtD,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,aAAA,CAAc;AAAA,IACnB,KAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA,EAAQ;AAAA,GACT,CAAA;AACH;;;ACxbO,SAAS,oBAAoB,MAAA,EAA4C;AAC9E,EAAA,MAAM;AAAA,IACJ,KAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAU,EAAC;AAAA,IACX,WAAW,EAAC;AAAA,IACZ,SAAS,EAAC;AAAA,IACV,MAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF,GAAI,MAAA;AAGJ,EAAA,MAAM,WAA6B,EAAC;AAGpC,EAAA,IAAI,WAAW,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,SAAS,CAAA,EAAG;AAC9C,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,SAAA;AAAA,MACR,KAAA,EAAO,YAAY,OAAO;AAAA,KAC3B,CAAA;AAAA,EACH;AAGA,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,QAAQ,MAAA,CAAO,OAAA;AAAA,MACf,OAAO,MAAA,CAAO;AAAA,KACf,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,iBAAA;AAAA,MACR,KAAA,EAAOC,YAAW,QAAQ;AAAA,KAC3B,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,eAAA;AAAA,MACR,KAAA,EAAOA,YAAW,MAAM;AAAA,KACzB,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,QAAQ,aAAA,CAAc;AAAA,IAC1B,KAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACD,CAAA;AAGD,EAAA,MAAM,IAAA,GAAgC;AAAA,IACpC,IAAI,MAAA,KAAW,SAAA;AAAA,IACf,MAAA;AAAA,IACA,GAAI,OAAA,IAAW,EAAE,OAAA,EAAQ;AAAA,IACzB,GAAI,OAAA,CAAQ,MAAA,GAAS,CAAA,IAAK;AAAA,MACxB,OAAA,EAAS,OAAA,CAAQ,MAAA,CAAO,CAAC,KAAK,CAAA,KAAM;AAClC,QAAA,GAAA,CAAI,CAAA,CAAE,OAAO,CAAA,GAAI,CAAA,CAAE,KAAA;AACnB,QAAA,OAAO,GAAA;AAAA,MACT,CAAA,EAAG,EAA8B;AAAA,KACnC;AAAA,IACA,GAAI,QAAA,CAAS,MAAA,GAAS,CAAA,IAAK,EAAE,QAAA,EAAS;AAAA,IACtC,GAAI,MAAA,CAAO,MAAA,GAAS,CAAA,IAAK,EAAE,MAAA,EAAO;AAAA,IAClC,GAAI,MAAA,KAAW,MAAA,IAAa,EAAE,UAAU,MAAA,EAAO;AAAA,IAC/C,GAAI,QAAA,IAAY,EAAE,IAAA,EAAM,QAAA;AAAS,GACnC;AAEA,EAAA,OAAO;AAAA,IACL,IAAI,MAAA,KAAW,SAAA;AAAA,IACf,MAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AACF;AAaO,SAAS,aAAA,CACd,OACA,IAAA,EAMe;AACf,EAAA,OAAO,mBAAA,CAAoB;AAAA,IACzB,KAAA;AAAA,IACA,SAAS,IAAA,EAAM,OAAA;AAAA,IACf,SAAS,IAAA,EAAM,OAAA;AAAA,IACf,QAAQ,IAAA,EAAM,MAAA;AAAA,IACd,MAAA,EAAQ,SAAA;AAAA,IACR,UAAU,IAAA,EAAM;AAAA,GACjB,CAAA;AACH;AAaO,SAAS,WAAA,CACd,KAAA,EACA,KAAA,EACA,OAAA,EAIe;AACf,EAAA,MAAM,YAAA,GAAe,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,KAAA;AAC9D,EAAA,MAAM,UAAA,GAAa,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,KAAA,GAAQ,MAAA;AAE1D,EAAA,OAAO,mBAAA,CAAoB;AAAA,IACzB,KAAA;AAAA,IACA,MAAA,EAAQ,CAAC,YAAY,CAAA;AAAA,IACrB,OAAA,EAAS,OAAA,EAAS,WAAA,GACd,CAAC,EAAE,OAAA,EAAS,aAAA,EAAe,KAAA,EAAOA,WAAAA,CAAW,OAAA,CAAQ,WAAW,CAAA,EAAG,IACnE,EAAC;AAAA,IACL,QAAQ,OAAA,EAAS,MAAA;AAAA,IACjB,MAAA,EAAQ,OAAA;AAAA,IACR,QAAA,EAAU;AAAA,MACR,KAAA,EAAO,YAAA;AAAA,MACP,GAAI,UAAA,IAAc,EAAE,KAAA,EAAO,UAAA;AAAW;AACxC,GACD,CAAA;AACH;AAaO,SAAS,aAAA,CACd,KAAA,EACA,QAAA,EACA,OAAA,EAIe;AACf,EAAA,OAAO,mBAAA,CAAoB;AAAA,IACzB,KAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAS,OAAA,EAAS,OAAA;AAAA,IAClB,QAAQ,OAAA,EAAS,MAAA;AAAA,IACjB,MAAA,EAAQ;AAAA,GACT,CAAA;AACH;AAcO,SAAS,UAAA,CACd,OACA,IAAA,EAKe;AACf,EAAA,OAAO,mBAAA,CAAoB;AAAA,IACzB,KAAA;AAAA,IACA,SAAS,IAAA,EAAM,OAAA;AAAA,IACf,SAAS,IAAA,EAAM,OAAA;AAAA,IACf,QAAQ,IAAA,EAAM,MAAA;AAAA,IACd,MAAA,EAAQ;AAAA,GACT,CAAA;AACH;;;ACjQA,IAAM,YAAA,GAAkG;AAAA,EACtG,IAAA,EAAS,EAAE,MAAA,EAAQ,QAAA,EAAK,OAAO,OAAA,EAAS,KAAA,EAAO,WAAW,IAAA,EAAK;AAAA,EAC/D,IAAA,EAAS,EAAE,MAAA,EAAQ,QAAA,EAAK,OAAO,OAAA,EAAS,KAAA,EAAO,WAAW,OAAA,EAAQ;AAAA,EAClE,KAAA,EAAS,EAAE,MAAA,EAAQ,QAAA,EAAK,OAAO,OAAA,EAAS,KAAA,EAAO,WAAW,KAAA,EAAM;AAAA,EAChE,KAAA,EAAS,EAAE,MAAA,EAAQ,QAAA,EAAK,OAAO,OAAA,EAAS,KAAA,EAAO,WAAW,KAAA,EAAM;AAAA,EAChE,OAAA,EAAS,EAAE,MAAA,EAAQ,MAAA,EAAK,OAAO,OAAA,EAAS,KAAA,EAAO,WAAW,KAAA;AAC5D,CAAA;AAEA,SAAS,SAAA,GAAoB;AAC3B,EAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,EAAA,MAAM,CAAA,GAAI,OAAO,GAAA,CAAI,QAAA,EAAU,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAChD,EAAA,MAAM,CAAA,GAAI,OAAO,GAAA,CAAI,UAAA,EAAY,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAClD,EAAA,MAAM,CAAA,GAAI,OAAO,GAAA,CAAI,UAAA,EAAY,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAClD,EAAA,OAAO,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,IAAI,CAAC,CAAA,CAAA;AACvB;AAEO,SAAS,OAAA,CAAQ,OAAiB,OAAA,EAAyB;AAChE,EAAA,MAAM,GAAA,GAAM,aAAa,KAAK,CAAA;AAC9B,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA;AAChC,EAAA,MAAM,GAAA,GAAM,UAAA,CAAW,KAAA,CAAM,GAAA,CAAI,KAAK,CAAA;AACtC,EAAA,MAAM,EAAA,GAAK,UAAA,CAAW,KAAA,CAAM,SAAA,EAAW,CAAA;AACvC,EAAA,OAAO,KAAK,GAAG,CAAA,CAAA,EAAI,GAAG,CAAA,EAAA,EAAK,EAAE,KAAK,OAAO,CAAA,CAAA;AAC3C;AAEO,SAAS,QAAA,CAAS,OAAe,KAAA,EAAyB;AAC/D,EAAA,MAAM,MAAA,GAAS,CAAA,EAAA,EAAK,UAAA,CAAW,IAAA,CAAK,KAAK,CAAC,CAAA,CAAA;AAC1C,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,OAAO,CAAC,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AACnD,EAAA,OAAO,IAAA,GAAO,GAAG,MAAM;AAAA,EAAK,IAAI,CAAA,CAAA,GAAK,MAAA;AACvC;AAEO,SAAS,QAAA,CAAS,OAAiB,OAAA,EAAuB;AAC/D,EAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,OAAO,IAAI,IAAI,CAAA;AACrD;;;AC5BA,IAAM,YAAA,GAA4D;AAAA,EAChE,SAAS,UAAA,CAAW,OAAA;AAAA,EACpB,OAAS,UAAA,CAAW,KAAA;AAAA,EACpB,SAAS,UAAA,CAAW,OAAA;AAAA,EACpB,MAAS,UAAA,CAAW,IAAA;AAAA,EACpB,SAAS,UAAA,CAAW;AACtB,CAAA;AAEO,SAAS,KAAA,CAAM,KAAA,EAAe,OAAA,GAAwB,SAAA,EAAmB;AAC9E,EAAA,MAAM,OAAA,GAAU,aAAa,OAAO,CAAA;AACpC,EAAA,OAAO,OAAA,CAAQ,CAAA,CAAA,EAAI,KAAA,CAAM,WAAA,EAAa,CAAA,CAAA,CAAG,CAAA;AAC3C;AAEO,SAAS,YAAY,MAAA,EAAwB;AAClD,EAAA,MAAM,CAAA,GAAI,OAAO,WAAA,EAAY;AAC7B,EAAA,IAAI,CAAA,KAAM,YAAY,CAAA,KAAM,SAAA,IAAa,MAAM,SAAA,IAAa,CAAA,KAAM,QAAA,IAAY,CAAA,KAAM,MAAA,EAAQ;AAC1F,IAAA,OAAO,KAAA,CAAM,QAAQ,SAAS,CAAA;AAAA,EAChC;AACA,EAAA,IAAI,MAAM,SAAA,IAAa,CAAA,KAAM,YAAY,CAAA,KAAM,OAAA,IAAW,MAAM,SAAA,EAAW;AACzE,IAAA,OAAO,KAAA,CAAM,QAAQ,OAAO,CAAA;AAAA,EAC9B;AACA,EAAA,IAAI,MAAM,UAAA,IAAc,CAAA,KAAM,aAAa,CAAA,KAAM,cAAA,IAAkB,MAAM,SAAA,EAAW;AAClF,IAAA,OAAO,KAAA,CAAM,QAAQ,SAAS,CAAA;AAAA,EAChC;AACA,EAAA,IAAI,CAAA,KAAM,UAAA,IAAc,CAAA,KAAM,cAAA,EAAgB;AAC5C,IAAA,OAAO,KAAA,CAAM,QAAQ,MAAM,CAAA;AAAA,EAC7B;AACA,EAAA,OAAO,KAAA,CAAM,QAAQ,SAAS,CAAA;AAChC;AC1BO,SAAS,aAAA,GAAyB;AACvC,EAAA,OAAO,OAAA;AAAA,IACL,OAAA,CAAQ,KAAA,CAAM,KAAA,IACd,OAAA,CAAQ,MAAA,CAAO,KAAA,IACf,CAAC,OAAA,CAAQ,GAAA,CAAI,EAAA,IACb,CAAC,OAAA,CAAQ,GAAA,CAAI;AAAA,GACf;AACF;AAEO,SAAS,aAAA,GAAsB;AACpC,EAAA,IAAI,OAAA,CAAQ,MAAM,KAAA,EAAO;AACvB,IAAA,OAAA,CAAQ,KAAA,CAAM,WAAW,IAAI,CAAA;AAAA,EAC/B;AACF;AAEO,SAAS,cAAA,GAAuB;AACrC,EAAA,IAAI,OAAA,CAAQ,MAAM,KAAA,EAAO;AACvB,IAAA,OAAA,CAAQ,KAAA,CAAM,WAAW,KAAK,CAAA;AAAA,EAChC;AACF;AAEO,SAAS,SAAA,GAAkB;AAChC,EAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,UAAU,CAAA;AACjC;AAEO,SAAS,WAAW,CAAA,EAAiB;AAC1C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,IAAA,IAAI,IAAI,CAAA,EAAG;AAAC,MAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,SAAS,CAAA;AAAA,IAAE;AAC5C,IAAA,SAAA,EAAU;AAAA,EACZ;AACF;AAEO,SAAS,UAAA,GAAmB;AACjC,EAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,WAAW,CAAA;AAClC;AAEO,SAAS,UAAA,GAAmB;AACjC,EAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,WAAW,CAAA;AAClC;AAUO,SAAS,WAAW,OAAA,EAAyC;AAClE,EAASC,mBAAA,CAAA,kBAAA,CAAmB,QAAQ,KAAK,CAAA;AAEzC,EAAA,MAAM,QAAA,GAAW,CAAC,CAAA,EAAY,GAAA,KAAa;AACzC,IAAA,IAAI,GAAA,EAAK;AAAC,MAAA,OAAA,CAAQ,GAAG,CAAA;AAAA,IAAE;AAAA,EACzB,CAAA;AAEA,EAAA,OAAA,CAAQ,KAAA,CAAM,EAAA,CAAG,UAAA,EAAY,QAAQ,CAAA;AACrC,EAAA,OAAA,CAAQ,MAAM,MAAA,EAAO;AAErB,EAAA,OAAO,MAAM;AACX,IAAA,OAAA,CAAQ,KAAA,CAAM,GAAA,CAAI,UAAA,EAAY,QAAQ,CAAA;AACtC,IAAA,IAAI,OAAA,CAAQ,KAAA,CAAM,aAAA,CAAc,UAAU,MAAM,CAAA,EAAG;AACjD,MAAA,OAAA,CAAQ,MAAM,KAAA,EAAM;AAAA,IACtB;AAAA,EACF,CAAA;AACF;AAEO,SAAS,QAAQ,GAAA,EAAmB;AACzC,EAAA,OAAO,IAAI,IAAA,KAAS,IAAA,IAAS,IAAI,IAAA,KAAS,GAAA,IAAO,CAAC,GAAA,CAAI,IAAA;AACxD;AAEO,SAAS,UAAU,GAAA,EAAmB;AAC3C,EAAA,OAAO,IAAI,IAAA,KAAS,MAAA,IAAW,IAAI,IAAA,KAAS,GAAA,IAAO,CAAC,GAAA,CAAI,IAAA;AAC1D;AAEO,SAAS,WAAW,GAAA,EAAmB;AAC5C,EAAA,OAAO,GAAA,CAAI,IAAA,KAAS,QAAA,IAAY,GAAA,CAAI,IAAA,KAAS,OAAA;AAC/C;AAEO,SAAS,YAAY,GAAA,EAAmB;AAC7C,EAAA,OAAO,GAAA,CAAI,IAAA,KAAS,QAAA,IAAa,GAAA,CAAI,IAAA,KAAS,GAAA,IAAO,GAAA,CAAI,IAAA,IAAU,GAAA,CAAI,IAAA,KAAS,GAAA,IAAO,CAAC,GAAA,CAAI,IAAA;AAC9F;AAEO,SAAS,WAAW,GAAA,EAAmB;AAC5C,EAAA,OAAO,IAAI,IAAA,KAAS,OAAA;AACtB;;;ACxEA,IAAM,cAAA,GAAiB,CAAC,QAAA,EAAK,QAAA,EAAK,UAAK,QAAG,CAAA;AAE1C,SAAS,WAAA,CAAY,UAAwB,YAAA,EAA8B;AACzE,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,IAAA,IAAI,MAAA;AACJ,IAAA,QAAQ,EAAE,KAAA;AAAO,MACf,KAAK,SAAA;AACH,QAAA,MAAA,GAAS,UAAA,CAAW,MAAM,QAAG,CAAA;AAC7B,QAAA;AAAA,MACF,KAAK,SAAA;AACH,QAAA,MAAA,GAAS,WAAW,OAAA,CAAQ,cAAA,CAAe,eAAe,cAAA,CAAe,MAAM,KAAK,QAAG,CAAA;AACvF,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,MAAA,GAAS,UAAA,CAAW,QAAQ,QAAG,CAAA;AAC/B,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAA,MAAA,GAAS,UAAA,CAAW,MAAM,QAAG,CAAA;AAC7B,QAAA;AAAA;AAEJ,IAAA,KAAA,CAAM,IAAA,CAAK,KAAK,MAAM,CAAA,EAAA,EAAK,EAAE,KAAA,KAAU,MAAA,GAAS,UAAA,CAAW,KAAA,CAAM,CAAA,CAAE,KAAK,IAAI,CAAA,CAAE,KAAA,KAAU,WAAW,UAAA,CAAW,KAAA,CAAM,EAAE,KAAK,CAAA,GAAI,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AACxI,IAAA,IAAI,EAAE,KAAA,EAAO;AACX,MAAA,KAAA,CAAM,KAAK,CAAA,KAAA,EAAQ,UAAA,CAAW,MAAM,CAAA,CAAE,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,IAChD;AAAA,EACF;AACA,EAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,IAAI,IAAI,IAAI,CAAA;AAC5C,EAAA,OAAO,KAAA,CAAM,MAAA;AACf;AAEA,eAAsB,SAAS,KAAA,EAA8B;AAC3D,EAAA,MAAM,QAAA,GAAyB,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,KAAA,EAAO,CAAA,CAAE,KAAA,EAAO,KAAA,EAAO,SAAA,EAAuB,CAAE,CAAA;AACnG,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,IAAI,YAAA,GAAe,CAAA;AAGnB,EAAA,SAAA,GAAY,WAAA,CAAY,UAAU,YAAY,CAAA;AAE9C,EAAA,IAAI,eAAA;AAEJ,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,IAAA,MAAM,MAAA,GAAS,SAAS,CAAC,CAAA;AACzB,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,MAAA,EAAQ;AAAC,MAAA;AAAA,IAAS;AAEhC,IAAA,MAAA,CAAO,KAAA,GAAQ,SAAA;AACf,IAAA,UAAA,CAAW,SAAS,CAAA;AACpB,IAAA,SAAA,GAAY,WAAA,CAAY,UAAU,YAAY,CAAA;AAE9C,IAAA,eAAA,GAAkB,YAAY,MAAM;AAClC,MAAA,YAAA,EAAA;AACA,MAAA,UAAA,CAAW,SAAS,CAAA;AACpB,MAAA,SAAA,GAAY,WAAA,CAAY,UAAU,YAAY,CAAA;AAAA,IAChD,GAAG,EAAE,CAAA;AAEL,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,GAAA,CAAI,CAAC,QAAA,KAAa;AAC3B,QAAA,MAAA,CAAO,KAAA,GAAQ,QAAA;AAAA,MACjB,CAAC,CAAA;AACD,MAAA,MAAA,CAAO,KAAA,GAAQ,MAAA;AAAA,IACjB,SAAS,GAAA,EAAK;AACZ,MAAA,MAAA,CAAO,KAAA,GAAQ,QAAA;AACf,MAAA,MAAA,CAAO,QAAQ,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAAA,IAChE,CAAA,SAAE;AACA,MAAA,aAAA,CAAc,eAAe,CAAA;AAC7B,MAAA,eAAA,GAAkB,MAAA;AAAA,IACpB;AAAA,EACF;AAGA,EAAA,UAAA,CAAW,SAAS,CAAA;AACpB,EAAA,WAAA,CAAY,UAAU,CAAC,CAAA;AACvB,EAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,IAAI,CAAA;AAEzB,EAAA,MAAM,SAAS,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,QAAQ,CAAA;AAC1D,EAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,MAAA,CAAO,MAAM,CAAA,KAAA,EAAQ,MAAA,CAAO,MAAA,KAAW,CAAA,GAAI,EAAA,GAAK,GAAG,CAAA,OAAA,CAAS,CAAA;AAAA,EACjF;AACF;ACxFA,eAAsB,QAAQ,OAAA,EAA2C;AACvE,EAAA,MAAM,EAAE,OAAA,EAAS,YAAA,GAAe,KAAA,EAAM,GAAI,OAAA;AAE1C,EAAA,IAAI,CAAC,eAAc,EAAG;AACpB,IAAA,OAAO,YAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAA,GAAO,eAAe,OAAA,GAAU,OAAA;AACtC,EAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA,EAAG,UAAA,CAAW,OAAA,CAAQ,QAAG,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA,EAAI,WAAW,KAAA,CAAM,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AAEzG,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,IAAA,MAAM,EAAA,GAAcC,oCAAgB,EAAE,KAAA,EAAO,QAAQ,KAAA,EAAO,MAAA,EAAQ,QAAW,CAAA;AAE/E,IAAA,EAAA,CAAG,IAAA,CAAK,MAAA,EAAQ,CAAC,IAAA,KAAS;AACxB,MAAA,EAAA,CAAG,KAAA,EAAM;AACT,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,EAAK,CAAE,WAAA,EAAY;AACxC,MAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,IAAI,CAAA;AACzB,MAAA,IAAI,YAAY,EAAA,EAAI;AAClB,QAAA,OAAA,CAAQ,YAAY,CAAA;AAAA,MACtB,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,OAAA,KAAY,GAAA,IAAO,OAAA,KAAY,KAAK,CAAA;AAAA,MAC9C;AAAA,IACF,CAAC,CAAA;AAED,IAAA,EAAA,CAAG,IAAA,CAAK,SAAS,MAAM;AACrB,MAAA,OAAA,CAAQ,YAAY,CAAA;AAAA,IACtB,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;ACzBA,eAAsB,KAAK,OAAA,EAAuC;AAChE,EAAA,MAAM,EAAE,SAAS,WAAA,EAAa,YAAA,GAAe,IAAI,QAAA,EAAU,IAAA,GAAO,OAAM,GAAI,OAAA;AAE5E,EAAA,IAAI,CAAC,eAAc,EAAG;AACpB,IAAA,OAAO,YAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAO,WAAA,GAAc,UAAA,CAAW,MAAM,CAAA,EAAA,EAAK,WAAW,GAAG,CAAA,GAAI,EAAA;AACnE,EAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,UAAA,CAAW,OAAA,CAAQ,QAAG,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,IAAA,CAAK,OAAO,CAAC,GAAG,IAAI;AAAA,CAAI,CAAA;AACvF,EAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA,EAAG,WAAW,KAAA,CAAM,QAAG,CAAC,CAAA,EAAA,CAAI,CAAA;AAEjD,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,IAAA,MAAM,KAAcC,mBAAA,CAAA,eAAA,CAAgB;AAAA,MAClC,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,MAAA,EAAQ,IAAA,GAAO,MAAA,GAAY,OAAA,CAAQ,MAAA;AAAA,MACnC,UAAU,CAAC;AAAA,KACZ,CAAA;AAED,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,OAAA,CAAQ,KAAA,CAAM,EAAA,CAAG,MAAA,EAAQ,CAAC,IAAA,KAAS;AACjC,QAAA,MAAM,CAAA,GAAI,KAAK,QAAA,EAAS;AACxB,QAAA,IAAI,CAAA,KAAM,IAAA,IAAQ,CAAA,KAAM,IAAA,EAAM;AAAC,UAAA;AAAA,QAAO;AACtC,QAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,GAAG,CAAA;AAAA,MAC1B,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,EAAA,CAAG,IAAA,CAAK,MAAA,EAAQ,CAAC,IAAA,KAAS;AACxB,MAAA,EAAA,CAAG,KAAA,EAAM;AACT,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,EAAK,IAAK,YAAA;AAE7B,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,MAAM,KAAA,GAAQ,SAAS,KAAK,CAAA;AAC5B,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,KAAA,CAAM,KAAK,CAAC;AAAA,CAAI,CAAA;AAC7E,UAAA,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAC,CAAA;AACrB,UAAA;AAAA,QACF;AAAA,MACF;AAEA,MAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA,EAAG,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC;AAAA,CAAI,CAAA;AACjD,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf,CAAC,CAAA;AAED,IAAA,EAAA,CAAG,IAAA,CAAK,SAAS,MAAM;AACrB,MAAA,OAAA,CAAQ,YAAY,CAAA;AAAA,IACtB,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;;;ACrCA,SAAS,YAAA,CAAgB,OAAA,EAAiB,OAAA,EAA4B,WAAA,EAAqB,OAAA,EAA0B;AACnH,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,UAAA,CAAW,OAAA,CAAQ,QAAG,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,IAAA,CAAK,OAAO,CAAC,CAAA,CAAE,CAAA;AACpE,IAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA;AAAA,EAClC;AAEA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,IAAA,MAAM,MAAA,GAAS,QAAQ,CAAC,CAAA;AACxB,IAAA,IAAI,CAAC,MAAA,EAAQ;AAAC,MAAA;AAAA,IAAS;AACvB,IAAA,MAAM,WAAW,CAAA,KAAM,WAAA;AACvB,IAAA,MAAM,OAAA,GAAU,QAAA,GAAW,UAAA,CAAW,OAAA,CAAQ,QAAG,CAAA,GAAI,GAAA;AACrD,IAAA,MAAM,KAAA,GAAQ,QAAA,GAAW,UAAA,CAAW,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,GAAI,UAAA,CAAW,KAAA,CAAM,MAAA,CAAO,KAAK,CAAA;AACtF,IAAA,MAAM,IAAA,GAAO,OAAO,IAAA,GAAO,UAAA,CAAW,MAAM,CAAA,QAAA,EAAM,MAAA,CAAO,IAAI,CAAA,CAAE,CAAA,GAAI,EAAA;AACnE,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,EAAI,KAAK,CAAA,EAAG,IAAI,CAAA,CAAE,CAAA;AAAA,EACnE;AAEA,EAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA;AAChC,EAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,IAAI,IAAI,IAAI,CAAA;AAC5C,EAAA,OAAO,KAAA,CAAM,MAAA;AACf;AAEA,eAAsB,OAAU,OAAA,EAAuC;AACrE,EAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAS,YAAA,GAAe,GAAE,GAAI,OAAA;AAE/C,EAAA,IAAI,CAAC,aAAA,EAAc,IAAK,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC5C,IAAA,OAAQ,OAAA,CAAQ,KAAK,GAAA,CAAI,YAAA,EAAc,QAAQ,MAAA,GAAS,CAAC,CAAC,CAAA,CAAsB,KAAA;AAAA,EAClF;AAEA,EAAA,IAAI,cAAc,IAAA,CAAK,GAAA,CAAI,YAAA,EAAc,OAAA,CAAQ,SAAS,CAAC,CAAA;AAC3D,EAAA,IAAI,SAAA,GAAY,CAAA;AAEhB,EAAA,UAAA,EAAW;AACX,EAAA,aAAA,EAAc;AACd,EAAA,SAAA,GAAY,YAAA,CAAa,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,IAAI,CAAA;AAE5D,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,IAAA,MAAM,WAAA,GAAc,UAAA,CAAW,CAAC,GAAA,KAAQ;AACtC,MAAA,IAAI,OAAA,CAAQ,GAAG,CAAA,EAAG;AAChB,QAAA,WAAA,GAAA,CAAe,WAAA,GAAc,CAAA,GAAI,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,MAAA;AAC3D,QAAA,UAAA,CAAW,SAAS,CAAA;AACpB,QAAA,SAAA,GAAY,YAAA,CAAa,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,KAAK,CAAA;AAC7D,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,SAAA,CAAU,GAAG,CAAA,EAAG;AAClB,QAAA,WAAA,GAAA,CAAe,WAAA,GAAc,KAAK,OAAA,CAAQ,MAAA;AAC1C,QAAA,UAAA,CAAW,SAAS,CAAA;AACpB,QAAA,SAAA,GAAY,YAAA,CAAa,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,KAAK,CAAA;AAC7D,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,UAAA,CAAW,GAAG,CAAA,EAAG;AACnB,QAAA,WAAA,EAAY;AACZ,QAAA,cAAA,EAAe;AACf,QAAA,UAAA,EAAW;AACX,QAAA,UAAA,CAAW,YAAY,CAAC,CAAA;AACxB,QAAA,MAAM,QAAA,GAAW,QAAQ,WAAW,CAAA;AACpC,QAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA,EAAG,UAAA,CAAW,OAAA,CAAQ,QAAG,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,IAAA,CAAK,OAAO,CAAC,CAAA,EAAA,EAAK,WAAW,KAAA,CAAM,QAAA,CAAS,KAAK,CAAC;AAAA,CAAI,CAAA;AACrH,QAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA,EAAG,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC;AAAA,CAAI,CAAA;AACjD,QAAA,OAAA,CAAQ,SAAS,KAAK,CAAA;AACtB,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,WAAA,CAAY,GAAG,CAAA,EAAG;AACpB,QAAA,WAAA,EAAY;AACZ,QAAA,cAAA,EAAe;AACf,QAAA,UAAA,EAAW;AACX,QAAA,UAAA,CAAW,YAAY,CAAC,CAAA;AACxB,QAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA,EAAG,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,KAAA,CAAM,OAAO,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,KAAA,CAAM,WAAW,CAAC;AAAA,CAAI,CAAA;AACjH,QAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA,EAAG,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC;AAAA,CAAI,CAAA;AACjD,QAAA,OAAA,CAAS,OAAA,CAAQ,YAAY,CAAA,CAAsB,KAAK,CAAA;AACxD,QAAA;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;;;AC3EA,SAAS,kBACP,OAAA,EACA,OAAA,EACA,OAAA,EACA,WAAA,EACA,SACA,KAAA,EACQ;AACR,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,KAAA,CAAM,KAAK,CAAA,EAAG,UAAA,CAAW,OAAA,CAAQ,QAAG,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,IAAA,CAAK,OAAO,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,KAAA,CAAM,mCAAmC,CAAC,CAAA,CAAE,CAAA;AAC9H,IAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA;AAAA,EAClC;AAEA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,IAAA,MAAM,MAAA,GAAS,QAAQ,CAAC,CAAA;AACxB,IAAA,IAAI,CAAC,MAAA,EAAQ;AAAC,MAAA;AAAA,IAAS;AACvB,IAAA,MAAM,WAAW,CAAA,KAAM,WAAA;AACvB,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA;AAC/B,IAAA,MAAM,QAAA,GAAW,YAAY,UAAA,CAAW,OAAA,CAAQ,QAAG,CAAA,GAAI,UAAA,CAAW,MAAM,QAAG,CAAA;AAC3E,IAAA,MAAM,OAAA,GAAU,QAAA,GAAW,UAAA,CAAW,OAAA,CAAQ,QAAG,CAAA,GAAI,GAAA;AACrD,IAAA,MAAM,KAAA,GAAQ,QAAA,GAAW,UAAA,CAAW,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,GAAI,SAAA,GAAY,MAAA,CAAO,KAAA,GAAQ,UAAA,CAAW,KAAA,CAAM,OAAO,KAAK,CAAA;AACjH,IAAA,MAAM,IAAA,GAAO,OAAO,IAAA,GAAO,UAAA,CAAW,MAAM,CAAA,QAAA,EAAM,MAAA,CAAO,IAAI,CAAA,CAAE,CAAA,GAAI,EAAA;AACnE,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,EAAI,KAAK,CAAA,EAAG,IAAI,CAAA,CAAE,CAAA;AAAA,EAC/E;AAEA,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,KAAA,CAAM,KAAK,CAAA,EAAG,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA,CAAE,CAAA;AACrC,IAAA,KAAA,CAAM,KAAK,CAAA,EAAG,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,KAAA,CAAM,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,EAC7F;AAEA,EAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA;AAChC,EAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,IAAI,IAAI,IAAI,CAAA;AAC5C,EAAA,OAAO,KAAA,CAAM,MAAA;AACf;AAEA,eAAsB,YAAe,OAAA,EAA8C;AACjF,EAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAS,GAAA,EAAI,GAAI,OAAA;AAElC,EAAA,IAAI,CAAC,aAAA,EAAc,IAAK,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC5C,IAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,CAAA;AAAA,EAC5D;AAEA,EAAA,IAAI,WAAA,GAAc,CAAA;AAClB,EAAA,MAAM,UAAU,IAAI,GAAA;AAAA,IAClB,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,EAAG,MAAO,CAAA,CAAE,OAAA,GAAU,CAAA,GAAI,EAAG,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,KAAK,CAAC;AAAA,GAClE;AACA,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,IAAI,KAAA;AAEJ,EAAA,UAAA,EAAW;AACX,EAAA,aAAA,EAAc;AACd,EAAA,SAAA,GAAY,kBAAkB,OAAA,EAAS,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,MAAM,KAAK,CAAA;AAEjF,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,IAAA,MAAM,WAAA,GAAc,UAAA,CAAW,CAAC,GAAA,KAAQ;AACtC,MAAA,IAAI,OAAA,CAAQ,GAAG,CAAA,EAAG;AAChB,QAAA,WAAA,GAAA,CAAe,WAAA,GAAc,CAAA,GAAI,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,MAAA;AAC3D,QAAA,UAAA,CAAW,SAAS,CAAA;AACpB,QAAA,SAAA,GAAY,kBAAkB,OAAA,EAAS,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,OAAO,KAAK,CAAA;AAClF,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,SAAA,CAAU,GAAG,CAAA,EAAG;AAClB,QAAA,WAAA,GAAA,CAAe,WAAA,GAAc,KAAK,OAAA,CAAQ,MAAA;AAC1C,QAAA,UAAA,CAAW,SAAS,CAAA;AACpB,QAAA,SAAA,GAAY,kBAAkB,OAAA,EAAS,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,OAAO,KAAK,CAAA;AAClF,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,UAAA,CAAW,GAAG,CAAA,EAAG;AACnB,QAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA,EAAG;AAC5B,UAAA,OAAA,CAAQ,OAAO,WAAW,CAAA;AAAA,QAC5B,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,IAAI,WAAW,CAAA;AAAA,QACzB;AACA,QAAA,KAAA,GAAQ,MAAA;AACR,QAAA,UAAA,CAAW,SAAS,CAAA;AACpB,QAAA,SAAA,GAAY,kBAAkB,OAAA,EAAS,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,OAAO,KAAK,CAAA;AAClF,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,GAAA,CAAI,IAAA,KAAS,GAAA,IAAO,CAAC,IAAI,IAAA,EAAM;AACjC,QAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,OAAA,CAAQ,MAAA,EAAQ;AACnC,UAAA,OAAA,CAAQ,KAAA,EAAM;AAAA,QAChB,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,QAAQ,CAAC,CAAA,EAAG,MAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,QAC1C;AACA,QAAA,UAAA,CAAW,SAAS,CAAA;AACpB,QAAA,SAAA,GAAY,kBAAkB,OAAA,EAAS,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,OAAO,KAAK,CAAA;AAClF,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,UAAA,CAAW,GAAG,CAAA,EAAG;AACnB,QAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,OAAA,CAAQ,IAAA,GAAO,GAAA,EAAK;AAC3C,UAAA,KAAA,GAAQ,mBAAmB,GAAG,CAAA,OAAA,EAAU,GAAA,KAAQ,CAAA,GAAI,KAAK,GAAG,CAAA,CAAA;AAC5D,UAAA,UAAA,CAAW,SAAS,CAAA;AACpB,UAAA,SAAA,GAAY,kBAAkB,OAAA,EAAS,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,OAAO,KAAK,CAAA;AAClF,UAAA;AAAA,QACF;AAEA,QAAA,WAAA,EAAY;AACZ,QAAA,cAAA,EAAe;AACf,QAAA,UAAA,EAAW;AACX,QAAA,MAAM,WAAA,GAAc,CAAA;AACpB,QAAA,UAAA,CAAW,YAAY,WAAW,CAAA;AAElC,QAAA,MAAM,iBAAiB,OAAA,CACpB,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,QAAQ,GAAA,CAAI,CAAC,CAAC,CAAA,CAC/B,IAAI,CAAC,CAAA,KAAM,EAAE,KAAK,CAAA,CAClB,KAAK,IAAI,CAAA;AACZ,QAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA,EAAG,UAAA,CAAW,OAAA,CAAQ,QAAG,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,IAAA,CAAK,OAAO,CAAC,CAAA,EAAA,EAAK,WAAW,KAAA,CAAM,cAAA,IAAkB,MAAM,CAAC;AAAA,CAAI,CAAA;AAC/H,QAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA,EAAG,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC;AAAA,CAAI,CAAA;AAEjD,QAAA,OAAA,CAAQ,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,EAAG,MAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAC,EAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,CAAC,CAAA;AACpE,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,WAAA,CAAY,GAAG,CAAA,EAAG;AACpB,QAAA,WAAA,EAAY;AACZ,QAAA,cAAA,EAAe;AACf,QAAA,UAAA,EAAW;AACX,QAAA,UAAA,CAAW,YAAY,CAAC,CAAA;AACxB,QAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA,EAAG,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,KAAA,CAAM,OAAO,CAAC,CAAA,EAAA,EAAK,UAAA,CAAW,KAAA,CAAM,WAAW,CAAC;AAAA,CAAI,CAAA;AACjH,QAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA,EAAG,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC;AAAA,CAAI,CAAA;AACjD,QAAA,OAAA,CAAQ,EAAE,CAAA;AACV,QAAA;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;;;AC7IO,IAAM,YAAA,GAA0B;AAAA,EACrC,OAAA,EAAS,OAAO,CAAA,EAAG,IAAA,KAAS,MAAM,YAAA,IAAgB,KAAA;AAAA,EAClD,MAAA,EAAQ,OAAO,CAAA,EAAG,IAAA,KAAS,MAAM,OAAA,IAAW,EAAA;AAAA,EAC5C,QAAQ,OAAU,CAAA,EAAW,OAAA,KAA+B,OAAA,CAAQ,CAAC,CAAA,EAAG,KAAA;AAAA,EACxE,WAAA,EAAa,OAAU,CAAA,EAAW,OAAA,KAChC,OAAA,CAAQ,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,OAAO,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,KAAK;AACnD;AAWO,SAAS,kBAAA,CACd,SACA,GAAA,EACU;AACV,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,UAAA;AAAA,IACR,OAAA,EAAS,WAAA;AAAA,IAET,KAAA,EAAO,CAACf,KAAAA,KAAS;AAAE,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAMA,KAAAA,GAAO,IAAI,CAAA;AAAA,IAAG,CAAA;AAAA,IAEtD,IAAA,EAAM,CAAC,GAAA,EAAK,OAAA,KAAY;AACtB,MAAA,MAAM,KAAA,GAAQ,OAAA,EAAS,QAAA,IAAY,EAAC;AACpC,MAAA,OAAA,CAAQ,IAAI,aAAA,CAAc;AAAA,QACxB,KAAA,EAAO,SAAS,KAAA,IAAS,MAAA;AAAA,QACzB,QAAA,EAAU,CAAC,EAAE,KAAA,EAAO,CAAC,GAAG,CAAA,EAAE,EAAG,GAAG,KAAK,CAAA;AAAA,QACrC,MAAA,EAAQ,MAAA;AAAA,QACR,QAAQ,OAAA,EAAS,MAAA;AAAA,QACjB,SAAS,OAAA,EAAS;AAAA,OACnB,CAAC,CAAA;AAAA,IACJ,CAAA;AAAA,IAEA,OAAA,EAAS,CAAC,GAAA,EAAK,OAAA,KAAY;AACzB,MAAA,MAAM,KAAA,GAAQ,OAAA,EAAS,QAAA,IAAY,EAAC;AACpC,MAAA,OAAA,CAAQ,IAAI,aAAA,CAAc;AAAA,QACxB,KAAA,EAAO,SAAS,KAAA,IAAS,SAAA;AAAA,QACzB,QAAA,EAAU,CAAC,EAAE,KAAA,EAAO,CAAC,GAAG,CAAA,EAAE,EAAG,GAAG,KAAK,CAAA;AAAA,QACrC,MAAA,EAAQ,SAAA;AAAA,QACR,QAAQ,OAAA,EAAS,MAAA;AAAA,QACjB,SAAS,OAAA,EAAS;AAAA,OACnB,CAAC,CAAA;AAAA,IACJ,CAAA;AAAA,IAEA,IAAA,EAAM,CAAC,GAAA,EAAK,OAAA,KAAY;AACtB,MAAA,MAAM,KAAA,GAAQ,OAAA,EAAS,QAAA,IAAY,EAAC;AACpC,MAAA,OAAA,CAAQ,IAAI,aAAA,CAAc;AAAA,QACxB,KAAA,EAAO,SAAS,KAAA,IAAS,SAAA;AAAA,QACzB,QAAA,EAAU,CAAC,EAAE,KAAA,EAAO,CAAC,GAAG,CAAA,EAAE,EAAG,GAAG,KAAK,CAAA;AAAA,QACrC,MAAA,EAAQ,SAAA;AAAA,QACR,QAAQ,OAAA,EAAS,MAAA;AAAA,QACjB,SAAS,OAAA,EAAS;AAAA,OACnB,CAAC,CAAA;AAAA,IACJ,CAAA;AAAA,IAEA,KAAA,EAAO,CAAC,GAAA,EAAK,OAAA,KAAY;AACvB,MAAA,MAAM,OAAA,GAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,GAAA;AACrD,MAAA,MAAM,QAAA,GAA+F;AAAA,QACnG,EAAE,KAAA,EAAO,CAAC,OAAO,CAAA;AAAE,OACrB;AAEA,MAAA,IAAI,OAAA,EAAS,UAAU,MAAA,EAAQ;AAC7B,QAAA,QAAA,CAAS,IAAA,CAAK,GAAG,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA,CAAA,MAAM,EAAE,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,KAAA,GAAQ,CAAC,CAAA;AAAA,MACpF;AAEA,MAAA,IAAI,SAAS,KAAA,EAAO;AAClB,QAAA,QAAA,CAAS,IAAA,CAAK,EAAE,MAAA,EAAQ,OAAA,EAAS,OAAO,CAAC,EAAE,IAAA,EAAM,OAAA,CAAQ,KAAA,EAAO,GAAA,EAAK,IAAA,EAAM,GAAG,CAAA;AAAA,MAChF;AAEA,MAAA,IAAI,SAAS,IAAA,EAAM;AACjB,QAAA,MAAM,SAAA,GAA4D,CAAC,OAAA,CAAQ,IAAI,CAAA;AAC/E,QAAA,IAAI,QAAQ,OAAA,EAAS;AAAE,UAAA,SAAA,CAAU,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,EAAA,EAAK,QAAQ,OAAO,CAAA,CAAA,EAAI,GAAA,EAAK,IAAA,EAAM,CAAA;AAAA,QAAG;AACpF,QAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,WAAW,CAAA;AAAA,MACpD,CAAA,MAAA,IAAW,SAAS,OAAA,EAAS;AAC3B,QAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,CAAC,EAAE,IAAA,EAAM,CAAA,EAAA,EAAK,OAAA,CAAQ,OAAO,CAAA,CAAA,EAAI,GAAA,EAAK,IAAA,EAAM,GAAG,CAAA;AAAA,MACxF;AAEA,MAAA,OAAA,CAAQ,MAAM,aAAA,CAAc;AAAA,QAC1B,KAAA,EAAO,SAAS,KAAA,IAAS,OAAA;AAAA,QACzB,QAAA;AAAA,QACA,MAAA,EAAQ,OAAA;AAAA,QACR,QAAQ,OAAA,EAAS,MAAA;AAAA,QACjB,SAAS,OAAA,EAAS;AAAA,OACnB,CAAC,CAAA;AAAA,IACJ,CAAA;AAAA,IAEA,KAAA,EAAO,CAAC,GAAA,KAAQ;AAAE,MAAA,IAAI,OAAA,CAAQ,IAAI,KAAA,EAAO;AAAE,QAAA,OAAA,CAAQ,MAAM,GAAG,CAAA;AAAA,MAAG;AAAA,IAAE,CAAA;AAAA,IAEjE,OAAA,EAAS,CAAC,GAAA,KAAQ;AAChB,MAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,UAAA,CAAW,OAAA,CAAQ,QAAG,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA;AAC/C,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,CAAC,CAAA,KAAM,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,UAAA,CAAW,OAAA,CAAQ,QAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAA;AAAA,QAC5D,OAAA,EAAS,CAAC,CAAA,KAAM,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,UAAA,CAAW,OAAA,CAAQ,QAAG,CAAC,CAAA,CAAA,EAAI,CAAA,IAAK,GAAG,CAAA,CAAE,CAAA;AAAA,QACpE,IAAA,EAAM,CAAC,CAAA,KAAM,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,UAAA,CAAW,KAAA,CAAM,QAAG,CAAC,CAAA,CAAA,EAAI,CAAA,IAAK,GAAG,CAAA,CAAE,CAAA;AAAA,QAC/D,MAAM,MAAM;AAAA,QAAC;AAAA,OACf;AAAA,IACF,CAAA;AAAA,IAEA,KAAA,EAAO,CAAC,IAAA,EAAM,OAAA,KAAY;AACxB,MAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AAAE,QAAA;AAAA,MAAQ;AACjC,MAAA,MAAM,IAAA,GAAO,OAAA,IAAW,MAAA,CAAO,IAAA,CAAK,KAAK,CAAC,CAAE,CAAA,CAAE,GAAA,CAAI,QAAM,EAAE,MAAA,EAAQ,CAAA,EAAG,GAAA,EAAK,GAAE,CAAE,CAAA;AAC9E,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,GAAA,KAAO,KAAK,GAAA,CAAI,CAAA,GAAA,KAAO,MAAA,CAAO,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA,IAAK,EAAE,CAAC,CAAC,CAAA;AACxE,MAAA,MAAM,KAAA,GAAQ,WAAA;AAAA,QACZ,IAAA,CAAK,GAAA,CAAI,CAAA,CAAA,MAAM,EAAE,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAQ,KAAA,EAAQ,CAAA,CAAyB,KAAA,EAAO,KAAA,EAAQ,CAAA,CAA8C,OAAM,CAAE,CAAA;AAAA,QACzI,IAAA;AAAA,QACA,EAAE,WAAW,EAAA;AAAG,OAClB;AACA,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AAAE,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,IAAI,CAAA,CAAE,CAAA;AAAA,MAAG;AAAA,IACxD,CAAA;AAAA,IAEA,MAAM,CAAC,IAAA,EAAM,OAAA,KAAY,OAAA,CAAQ,IAAI,OAAA,EAAS,MAAA,GAAS,IAAA,CAAK,SAAA,CAAU,MAAM,IAAA,EAAM,CAAC,IAAI,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,IAC3G,OAAA,EAAS,MAAM,OAAA,CAAQ,GAAA,EAAI;AAAA,IAC3B,OAAA,EAAS,MAAM,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,KAAA,CAAM,QAAA,CAAI,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,OAAA,IAAW,EAAE,CAAC,CAAC,CAAA;AAAA,IAErF,GAAA,EAAK,CAAC,OAAA,EAAS,KAAA,KAAU;AACvB,MAAA,OAAA,CAAQ,IAAI,aAAA,CAAc;AAAA,QACxB,OAAO,KAAA,IAAS,EAAA;AAAA,QAChB,QAAA,EAAU,CAAC,EAAE,KAAA,EAAO,QAAQ,KAAA,CAAM,IAAI,GAAG,CAAA;AAAA,QACzC,MAAA,EAAQ;AAAA,OACT,CAAC,CAAA;AAAA,IACJ,CAAA;AAAA,IAEA,OAAA,EAAS,CAAC,OAAA,KAAY;AACpB,MAAA,MAAM,cAAkG,EAAC;AACzG,MAAA,IAAI,OAAA,CAAQ,WAAW,MAAA,CAAO,IAAA,CAAK,QAAQ,OAAO,CAAA,CAAE,SAAS,CAAA,EAAG;AAC9D,QAAA,WAAA,CAAY,KAAK,EAAE,KAAA,EAAO,YAAY,OAAA,CAAQ,OAA0C,GAAG,CAAA;AAAA,MAC7F;AACA,MAAA,WAAA,CAAY,KAAK,GAAA,CAAI,OAAA,CAAQ,QAAA,IAAY,IAAI,GAAA,CAAI,CAAA,CAAA,MAAM,EAAE,MAAA,EAAQ,EAAE,MAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,KAAA,GAAQ,CAAC,CAAA;AAC7F,MAAA,OAAA,CAAQ,IAAI,aAAA,CAAc;AAAA,QACxB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,QAAA,EAAU,WAAA;AAAA,QACV,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,QAAQ,OAAA,CAAQ;AAAA,OACjB,CAAC,CAAA;AAAA,IACJ,CAAA;AAAA,IAEA,KAAA,EAAO,CAAC,KAAA,KAAU;AAChB,MAAA,OAAA,CAAQ,GAAA,CAAI,eAAA;AAAA,QACV,KAAA,CAAM,IAAI,CAAA,IAAA,MAAS;AAAA,UACjB,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ,QAAA,EAAA,CAAW,IAAA,CAAK,QAAA,IAAY,IAAI,GAAA,CAAI,CAAA,CAAA,MAAM,EAAE,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,OAAM,CAAE,CAAA;AAAA,UAC/E,SAAS,IAAA,CAAK,OAAA;AAAA,UACd,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,QAAQ,IAAA,CAAK;AAAA,SACf,CAAE;AAAA,OACH,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB;AAAA,GACF;AACF","file":"index.cjs","sourcesContent":["/**\n * Minimalist color utilities for CLI output\n * Uses strategic color application - only for status, not decoration\n */\n\nconst CSI = '\\x1b[';\nconst RESET = '\\x1b[0m';\n\nconst createColor =\n  (...codes: Array<number | string>) =>\n  (text: string): string =>\n    `${CSI}${codes.join(';')}m${text}${RESET}`;\n\nconst accentBlue = '38;5;39';\nconst accentViolet = '38;5;99';\nconst accentTeal = '38;5;51';\nconst accentIndigo = '38;5;63';\nconst neutral = 37;\nconst neutralMuted = 90;\n\nexport const colors = {\n  // Semantic colors\n  success: createColor(32),\n  error: createColor(31),\n  warning: createColor(33),\n  info: createColor(36),\n\n  // Accent palette (reused across CLI)\n  primary: createColor(accentBlue),\n  accent: createColor(accentViolet),\n  highlight: createColor(accentTeal),\n  secondary: createColor(accentIndigo),\n  emphasis: createColor('38;5;117'),\n  muted: createColor(neutralMuted),\n  foreground: createColor(neutral),\n\n  // Formatting helpers\n  dim: createColor(2),\n  bold: createColor(1),\n  underline: createColor(4),\n  inverse: createColor(7),\n};\n\n// Unicode symbols — KB Labs visual identity\nconst symbolCharacters = {\n  success: '✓',\n  error: '✗',\n  warning: '⚠',\n  info: '◆',\n  bullet: '•',\n  clock: '◷',\n  folder: '▸',\n  package: '◆',\n  pointer: '❯',\n  section: '│',\n  step: '○',\n  stepDone: '●',\n  arrow: '→',\n  diamond: '◆',\n};\n\nexport const symbols = {\n  success: colors.success(symbolCharacters.success),\n  error: colors.error(symbolCharacters.error),\n  warning: colors.warning(symbolCharacters.warning),\n  info: colors.info(symbolCharacters.info),\n  bullet: colors.muted(symbolCharacters.bullet),\n  clock: colors.muted(symbolCharacters.clock),\n  folder: colors.primary(symbolCharacters.folder),\n  package: colors.accent(symbolCharacters.package),\n  pointer: colors.primary(symbolCharacters.pointer),\n  section: colors.muted(symbolCharacters.section),\n  step: colors.muted(symbolCharacters.step),\n  stepDone: colors.success(symbolCharacters.stepDone),\n  arrow: colors.primary(symbolCharacters.arrow),\n  diamond: colors.primary(symbolCharacters.diamond),\n};\n\n// Check if colors are supported\nconst isTruthyEnv = (value: string | undefined): boolean => {\n  if (!value) {return false;}\n  const normalized = value.trim().toLowerCase();\n  return normalized !== '' && normalized !== '0' && normalized !== 'false' && normalized !== 'off';\n};\n\nexport const supportsColor = (() => {\n  if (typeof process === 'undefined') {return false;}\n\n  const forceColor = process.env.FORCE_COLOR;\n  if (isTruthyEnv(process.env.NO_COLOR)) {\n    return false;\n  }\n  if (isTruthyEnv(forceColor)) {\n    return true;\n  }\n\n  if (!process.stdout) {return false;}\n\n  if (process.stdout.isTTY === false) {\n    return false;\n  }\n\n  return true;\n})();\n\n// Color functions that respect NO_COLOR\nconst passthrough =\n  (fn: (text: string) => string) =>\n  (text: string): string =>\n    supportsColor ? fn(text) : text;\n\nexport const safeColors = {\n  success: passthrough(colors.success),\n  error: passthrough(colors.error),\n  warning: passthrough(colors.warning),\n  info: passthrough(colors.info),\n  accent: passthrough(colors.accent),\n  primary: passthrough(colors.primary),\n  highlight: passthrough(colors.highlight),\n  secondary: passthrough(colors.secondary),\n  emphasis: passthrough(colors.emphasis),\n  foreground: passthrough(colors.foreground),\n  muted: passthrough(colors.muted),\n  dim: passthrough(colors.dim),\n  bold: passthrough(colors.bold),\n  underline: passthrough(colors.underline),\n  inverse: passthrough(colors.inverse),\n};\n\nexport const safeSymbols = {\n  success: supportsColor ? symbols.success : '✓',\n  error: supportsColor ? symbols.error : '✗',\n  warning: supportsColor ? symbols.warning : '⚠',\n  info: supportsColor ? symbols.info : '◆',\n  bullet: supportsColor ? symbols.bullet : '•',\n  clock: supportsColor ? symbols.clock : '◷',\n  folder: supportsColor ? symbols.folder : '▸',\n  package: supportsColor ? symbols.package : '◆',\n  pointer: supportsColor ? symbols.pointer : '❯',\n  section: supportsColor ? symbols.section : '│',\n  step: supportsColor ? symbols.step : '○',\n  stepDone: supportsColor ? symbols.stepDone : '●',\n  arrow: supportsColor ? symbols.arrow : '→',\n  diamond: supportsColor ? symbols.diamond : '◆',\n  // Box-drawing characters\n  separator: '─',\n  border: '│',\n  topLeft: '┌',\n  topRight: '┐',\n  bottomLeft: '└',\n  bottomRight: '┘',\n  leftT: '├',\n  rightT: '┤',\n};\n","/**\n * Progress indicators and loaders for CLI operations\n *\n * Periodic animation implementation (works in child processes as multi-line output).\n */\n\nimport { safeColors, safeSymbols } from './colors';\n\nexport interface LoaderOptions {\n  /** Text to show while loading */\n  text?: string;\n  /** Whether to show spinner (true) or progress bar (false) */\n  spinner?: boolean;\n  /** Total items for progress bar */\n  total?: number;\n  /** Current item for progress bar */\n  current?: number;\n  /** Whether JSON mode is enabled (disables all visual feedback) */\n  jsonMode?: boolean;\n}\n\nconst SPINNER_CHARS = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];\n\n// Process-scoped json mode flag. Set by SDK before invoking handler; read by useLoader().\nlet _jsonMode = false;\n\nexport function setJsonMode(enabled: boolean): void {\n  _jsonMode = enabled;\n}\n\nexport function isJsonMode(): boolean {\n  return _jsonMode;\n}\n\nexport class Loader {\n  private isActive = false;\n  private options: LoaderOptions;\n  private frameIndex = 0;\n  private intervalId?: NodeJS.Timeout;\n  private currentText: string;  // ← Реактивная переменная для текста\n\n  constructor(options: LoaderOptions = {}) {\n    this.options = {\n      text: 'Loading...',\n      spinner: true,\n      jsonMode: false,\n      ...options,\n    };\n    this.currentText = this.options.text ?? 'Loading...';\n  }\n\n  start(): void {\n    if (this.options.jsonMode || this.isActive) {\n      return;\n    }\n    this.isActive = true;\n\n    // Start periodic animation updates (every 200ms)\n    if (this.options.spinner && !this.options.jsonMode) {\n      this.intervalId = setInterval(() => {\n        if (!this.isActive) {\n          this.clearInterval();\n          return;\n        }\n\n        const char = SPINNER_CHARS[this.frameIndex % SPINNER_CHARS.length];\n        process.stdout.write(`\\r${char} ${this.currentText}`);  // ← Читаем реактивный текст\n        this.frameIndex++;\n      }, 200);\n    }\n  }\n\n  update(options: Partial<LoaderOptions>): void {\n    this.options = { ...this.options, ...options };\n\n    if (!this.isActive || this.options.jsonMode) {return;}\n\n    // Update reactive text - setInterval will pick it up on next tick\n    if (options.text !== undefined) {\n      this.currentText = options.text;\n    }\n\n    // For manual updates when no interval (progress bar mode)\n    if (!this.intervalId) {\n      if (this.options.spinner) {\n        const text = this.options.text ?? 'Loading...';\n        console.log(`${safeSymbols.info} ${text}`);\n      } else if (this.options.total !== undefined) {\n        this.updateProgress();\n      }\n    }\n  }\n\n  stop(): void {\n    this.isActive = false;\n    this.clearInterval();\n  }\n\n  succeed(message?: string): void {\n    this.stop();\n    if (!this.options.jsonMode && message) {\n      process.stdout.write(`\\r\\x1b[K${safeSymbols.success} ${message}\\n`);\n    }\n  }\n\n  fail(message?: string): void {\n    this.stop();\n    if (!this.options.jsonMode && message) {\n      process.stdout.write(`\\r\\x1b[K${safeSymbols.error} ${message}\\n`);\n    }\n  }\n\n  private clearInterval(): void {\n    if (this.intervalId) {\n      clearInterval(this.intervalId);\n      this.intervalId = undefined;\n    }\n  }\n\n  private updateProgress(): void {\n    if (this.options.total === undefined || this.options.current === undefined) {return;}\n\n    const current = this.options.current;\n    const total = this.options.total;\n    const percentage = Math.round((current / total) * 100);\n    const barLength = 20;\n    const filledLength = Math.round((current / total) * barLength);\n\n    const bar = '█'.repeat(filledLength) + '░'.repeat(barLength - filledLength);\n    const text = this.options.text || 'Progress';\n\n    process.stdout.write(`\\r${safeColors.info('→')} ${text}... ${bar} ${percentage}% (${current}/${total})`);\n  }\n}\n\n/**\n * Create a simple spinner\n */\nexport function createSpinner(text: string, jsonMode = false): Loader {\n  return new Loader({ text, spinner: true, jsonMode });\n}\n\n/**\n * Create a progress bar\n */\nexport function createProgressBar(text: string, total: number, jsonMode = false): Loader {\n  return new Loader({ text, spinner: false, total, current: 0, jsonMode });\n}\n\n/**\n * Simple loading message without spinner\n */\nexport function showLoading(text: string, jsonMode = false): void {\n  if (!jsonMode) {\n    console.log(`${safeColors.info('→')} ${text}...`);\n  }\n}\n\n/**\n * Show completion message\n */\nexport function showSuccess(text: string, jsonMode = false): void {\n  if (!jsonMode) {\n    console.log(`${safeSymbols.success} ${text}`);\n  }\n}\n\n/**\n * Show error message\n */\nexport function showError(text: string, jsonMode = false): void {\n  if (!jsonMode) {\n    console.log(`${safeSymbols.error} ${text}`);\n  }\n}\n\n/**\n * Create a loader for progress indication\n *\n * @param text - Text to display while loading\n * @param options - Optional configuration\n * @returns Loader instance\n *\n * @example\n * ```typescript\n * import { useLoader } from '@kb-labs/sdk';\n *\n * const loader = useLoader('Processing data...');\n * loader.start();\n * // ... do work ...\n * loader.succeed('Processing complete!');\n * ```\n */\nexport function useLoader(text: string, options?: Partial<LoaderOptions>): Loader {\n  return new Loader({ text, jsonMode: _jsonMode, ...options });\n}\n","/**\n * Output formatting utilities for structured CLI output\n */\n\nimport { safeColors, safeSymbols } from './colors';\n\nconst ANSI_PATTERN = /\\u001B\\[[0-9;]*m/g;\n\nexport function stripAnsi(input: string): string {\n  return input.replace(ANSI_PATTERN, '');\n}\n\nexport function hasAnsi(input: string): boolean {\n  return /\\u001B\\[[0-9;]*m/.test(input);\n}\n\nfunction visibleLength(input: string): number {\n  return stripAnsi(input).length;\n}\n\n/**\n * Create a boxed section with title\n */\nexport function box(title: string, content: string[] = [], maxWidth?: number): string {\n  const lines = content.length > 0 ? content : [''];\n  const titleWidth = visibleLength(title);\n  \n  // Determine max width: use provided maxWidth, or terminal width (default 80), or content width\n  const terminalWidth = typeof process !== 'undefined' && process.stdout?.columns ? process.stdout.columns : 80;\n  const effectiveMaxWidth = maxWidth ?? Math.min(terminalWidth - 4, 120); // -4 for borders and padding\n  \n  const bodyWidth = Math.min(\n    effectiveMaxWidth,\n    Math.max(titleWidth, ...lines.map(line => visibleLength(line)))\n  );\n\n  // Wrap long lines\n  const wrappedLines: string[] = [];\n  for (const line of lines) {\n    const lineLength = visibleLength(line);\n    if (lineLength <= bodyWidth) {\n      wrappedLines.push(line);\n    } else {\n      // Split long lines at word boundaries when possible\n      const words = line.split(/(\\s+)/);\n      let currentLine = '';\n      for (const word of words) {\n        const testLine = currentLine + word;\n        if (visibleLength(testLine) <= bodyWidth) {\n          currentLine = testLine;\n        } else {\n          if (currentLine) {\n            wrappedLines.push(currentLine.trimEnd());\n          }\n          // If single word is too long, truncate it\n          if (visibleLength(word) > bodyWidth) {\n            wrappedLines.push(truncate(word, bodyWidth));\n            currentLine = '';\n          } else {\n            currentLine = word;\n          }\n        }\n      }\n      if (currentLine) {\n        wrappedLines.push(currentLine.trimEnd());\n      }\n    }\n  }\n\n  const topBorder = `┌${'─'.repeat(bodyWidth + 2)}┐`;\n  const titleLine = `│ ${safeColors.bold(title)}${' '.repeat(Math.max(0, bodyWidth - titleWidth))} │`;\n  const bodyLines = wrappedLines.map((line) => {\n    const padding = Math.max(0, bodyWidth - visibleLength(line));\n    return `│ ${line}${' '.repeat(padding)} │`;\n  });\n  const bottomBorder = `└${'─'.repeat(bodyWidth + 2)}┘`;\n\n  return [topBorder, titleLine, ...bodyLines, bottomBorder].join('\\n');\n}\n\n/**\n * Add consistent indentation to lines\n */\nexport function indent(lines: string[], level = 1): string[] {\n  const prefix = '  '.repeat(level);\n  return lines.map(line => `${prefix}${line}`);\n}\n\n/**\n * Create a section with header and content\n */\nexport function section(header: string, content: string[]): string[] {\n  return [\n    '',\n    safeColors.bold(header),\n    ...indent(content),\n  ];\n}\n\n/**\n * Format a table with consistent spacing\n */\nexport function table(rows: (string | number)[][], headers?: string[]): string[] {\n  if (rows.length === 0) {return [];}\n  \n  // Calculate column widths\n  const allRows = headers ? [headers, ...rows] : rows;\n  if (allRows.length === 0) {return [];}\n  \n  const columnWidths = allRows[0]!.map((_, colIndex) => \n    Math.max(...allRows.map(row => String(row[colIndex] || '').length))\n  );\n  \n  // Format rows\n  return allRows.map(row => {\n    return row.map((cell, colIndex) => \n      String(cell || '').padEnd(columnWidths[colIndex] || 0)\n    ).join('  ');\n  });\n}\n\n/**\n * Format key-value pairs\n */\nexport interface KeyValueOptions {\n  padKeys?: boolean;\n}\n\nexport function keyValue(\n  pairs: Record<string, string | number>,\n  options: KeyValueOptions = {},\n): string[] {\n  const { padKeys = true } = options;\n  return safeKeyValue(pairs, { pad: padKeys });\n}\n\n/**\n * Format a list with bullets\n */\nexport function bulletList(items: string[]): string[] {\n  return items.map(item => `${safeSymbols.bullet} ${item}`);\n}\n\nexport interface SafeKeyValueOptions {\n  indent?: number;\n  pad?: boolean;\n  valueColor?: (value: string, key: string) => string;\n}\n\nexport function safeKeyValue(\n  pairs: Record<string, string | number>,\n  options: SafeKeyValueOptions = {},\n): string[] {\n  const { indent = 0, pad = true, valueColor } = options;\n  const keys = Object.keys(pairs);\n  if (keys.length === 0) {\n    return [];\n  }\n  const indentStr = ' '.repeat(indent);\n  const maxKeyLength = pad\n    ? Math.max(...keys.map(key => indent + stripAnsi(key).length))\n    : 0;\n  return keys.map((key) => {\n    const rawKey = key;\n    const rawValue = String(pairs[key] ?? '');\n    const keyLength = indent + stripAnsi(rawKey).length;\n    const padding = pad ? Math.max(0, maxKeyLength - keyLength) : 0;\n    const formattedKey = `${indentStr}${rawKey}${' '.repeat(padding)}`;\n    const computedValue = valueColor ? valueColor(rawValue, key) : rawValue;\n    const valueText = hasAnsi(computedValue) ? computedValue : safeColors.muted(computedValue);\n    return `${safeColors.bold(formattedKey)}: ${valueText}`;\n  });\n}\n\nconst pad2 = (value: number): string => value.toString().padStart(2, '0');\n\nconst toDate = (value: string | Date): Date => (value instanceof Date ? new Date(value.getTime()) : new Date(value));\n\nconst isValidDate = (date: Date): boolean => Number.isFinite(date.getTime());\n\nfunction getOffsetMinutes(date: Date, timeZone?: string): number {\n  if (!timeZone) {\n    return -date.getTimezoneOffset();\n  }\n\n  const dtf = new Intl.DateTimeFormat('en-US', {\n    timeZone,\n    hour12: false,\n    year: 'numeric',\n    month: '2-digit',\n    day: '2-digit',\n    hour: '2-digit',\n    minute: '2-digit',\n    second: '2-digit',\n  });\n\n  const parts = dtf.formatToParts(date);\n  const lookup = Object.fromEntries(\n    parts\n      .filter(part => part.type !== 'literal')\n      .map(part => [part.type, Number(part.value)]),\n  ) as Record<string, number | undefined>;\n\n  const year = lookup.year ?? date.getUTCFullYear();\n  const month = (lookup.month ?? date.getUTCMonth() + 1) - 1;\n  const day = lookup.day ?? date.getUTCDate();\n  // Intl.DateTimeFormat with hour12:false may return 24 for midnight, normalize to 0\n  const hour = (lookup.hour ?? date.getUTCHours()) % 24;\n  const minute = lookup.minute ?? date.getUTCMinutes();\n  const second = lookup.second ?? date.getUTCSeconds();\n\n  const asUTC = Date.UTC(year, month, day, hour, minute, second);\n\n  return Math.round((asUTC - date.getTime()) / 60000);\n}\n\nfunction formatOffset(offsetMinutes: number): string {\n  const sign = offsetMinutes >= 0 ? '+' : '-';\n  const absMinutes = Math.abs(offsetMinutes);\n  const hours = Math.floor(absMinutes / 60);\n  const minutes = absMinutes % 60;\n  return `${sign}${pad2(hours)}:${pad2(minutes)}`;\n}\n\nfunction getDateParts(date: Date, timeZone?: string): {\n  year: number;\n  month: number;\n  day: number;\n  hour: number;\n  minute: number;\n  second: number;\n} {\n  if (!timeZone) {\n    return {\n      year: date.getFullYear(),\n      month: date.getMonth() + 1,\n      day: date.getDate(),\n      hour: date.getHours(),\n      minute: date.getMinutes(),\n      second: date.getSeconds(),\n    };\n  }\n\n  const dtf = new Intl.DateTimeFormat('en-US', {\n    timeZone,\n    hour12: false,\n    year: 'numeric',\n    month: '2-digit',\n    day: '2-digit',\n    hour: '2-digit',\n    minute: '2-digit',\n    second: '2-digit',\n  });\n\n  const parts = dtf.formatToParts(date);\n  const lookup = Object.fromEntries(\n    parts\n      .filter(part => part.type !== 'literal')\n      .map(part => [part.type, Number(part.value)]),\n  ) as Record<string, number | undefined>;\n\n  return {\n    year: lookup.year ?? date.getUTCFullYear(),\n    month: lookup.month ?? date.getUTCMonth() + 1,\n    day: lookup.day ?? date.getUTCDate(),\n    // Intl.DateTimeFormat with hour12:false may return 24 for midnight, normalize to 0\n    hour: (lookup.hour ?? date.getUTCHours()) % 24,\n    minute: lookup.minute ?? date.getUTCMinutes(),\n    second: lookup.second ?? date.getUTCSeconds(),\n  };\n}\n\n/**\n * Apply primary headline styling\n */\nexport function headline(text: string): string {\n  return safeColors.primary(safeColors.bold(text));\n}\n\n/**\n * Accent label style (used for tags/pills)\n */\nexport function accentLabel(text: string): string {\n  return safeColors.accent(safeColors.bold(text));\n}\n\n/**\n * Muted helper\n */\nexport function muted(text: string): string {\n  return safeColors.muted(text);\n}\n\n/**\n * Format file size\n */\nexport function formatSize(bytes: number): string {\n  const units = ['B', 'KB', 'MB', 'GB'];\n  let size = bytes;\n  let unitIndex = 0;\n  \n  while (size >= 1024 && unitIndex < units.length - 1) {\n    size /= 1024;\n    unitIndex++;\n  }\n  \n  return `${size.toFixed(unitIndex === 0 ? 0 : 1)} ${units[unitIndex]}`;\n}\n\n/**\n * Format relative time\n */\nexport function formatRelativeTime(timestamp: string | Date): string {\n  const now = new Date();\n  const time = toDate(timestamp);\n\n  if (!isValidDate(time)) {\n    return 'Invalid date';\n  }\n\n  const diffMs = now.getTime() - time.getTime();\n  \n  const seconds = Math.floor(diffMs / 1000);\n  const minutes = Math.floor(seconds / 60);\n  const hours = Math.floor(minutes / 60);\n  const days = Math.floor(hours / 24);\n  \n  if (days > 0) {\n    return `${days} day${days > 1 ? 's' : ''} ago`;\n  } else if (hours > 0) {\n    return `${hours} hour${hours > 1 ? 's' : ''} ago`;\n  } else if (minutes > 0) {\n    return `${minutes} minute${minutes > 1 ? 's' : ''} ago`;\n  } else {\n    return `${seconds} second${seconds > 1 ? 's' : ''} ago`;\n  }\n}\n\nexport interface FormatTimestampOptions {\n  mode?: 'local' | 'iso';\n  timeZone?: string;\n  includeSeconds?: boolean;\n  includeMilliseconds?: boolean;\n  includeOffset?: boolean;\n}\n\n/**\n * Format timestamps as absolute values (local or ISO) with optional offsets\n */\nexport function formatTimestamp(\n  timestamp: string | Date,\n  options: FormatTimestampOptions = {},\n): string {\n  const {\n    mode = 'local',\n    timeZone,\n    includeSeconds = false,\n    includeMilliseconds = true,\n    includeOffset = true,\n  } = options;\n\n  const date = toDate(timestamp);\n  if (!isValidDate(date)) {\n    return 'Invalid date';\n  }\n\n  const offsetMinutes = includeOffset ? getOffsetMinutes(date, timeZone) : null;\n  const offsetSuffix =\n    includeOffset && offsetMinutes !== null ? ` (${formatOffset(offsetMinutes)})` : '';\n\n  if (mode === 'iso') {\n    const isoRaw = date.toISOString();\n    const iso = includeMilliseconds ? isoRaw : isoRaw.replace(/\\.\\d{3}Z$/, 'Z');\n    return `${iso}${offsetSuffix}`;\n  }\n\n  const { year, month, day, hour, minute, second } = getDateParts(date, timeZone);\n  const base = [\n    `${year}-${pad2(month)}-${pad2(day)}`,\n    `${pad2(hour)}:${pad2(minute)}${includeSeconds ? `:${pad2(second)}` : ''}`,\n  ].join(' ');\n\n  return `${base}${offsetSuffix}`;\n}\n\n/**\n * Truncate text with ellipsis\n */\nexport function truncate(text: string, maxLength: number): string {\n  if (text.length <= maxLength) {return text;}\n  return text.substring(0, maxLength - 3) + '...';\n}\n\n/**\n * Pad string to specific width\n */\nexport function pad(text: string, width: number, align: 'left' | 'right' | 'center' = 'left'): string {\n  if (text.length >= width) {return text;}\n  \n  const padding = width - text.length;\n  \n  switch (align) {\n    case 'right':\n      return ' '.repeat(padding) + text;\n    case 'center':\n      const leftPad = Math.floor(padding / 2);\n      const rightPad = padding - leftPad;\n      return ' '.repeat(leftPad) + text + ' '.repeat(rightPad);\n    default:\n      return text + ' '.repeat(padding);\n  }\n}\n","/**\n * Command output formatting utilities\n * Provides consistent formatting for CLI command results\n */\n\nimport { box, keyValue } from './format';\nimport { safeColors } from './colors';\n\nexport interface CommandResult {\n  title: string;\n  summary: Record<string, string | number>;\n  timing?: number | Record<string, number>;\n  diagnostics?: string[];\n  warnings?: string[];\n  errors?: string[];\n  suggestions?: string[];\n}\n\n/**\n * Format timing in milliseconds to human-readable string\n */\nexport function formatTiming(ms: number): string {\n  if (ms < 1000) {\n    return `${ms}ms`;\n  } else if (ms < 60000) {\n    return `${(ms / 1000).toFixed(1)}s`;\n  } else {\n    const minutes = Math.floor(ms / 60000);\n    const seconds = ((ms % 60000) / 1000).toFixed(1);\n    return `${minutes}m ${seconds}s`;\n  }\n}\n\n/**\n * Format timing breakdown as array of strings\n */\nexport function formatTimingBreakdown(timings: Record<string, number>): string[] {\n  const lines: string[] = [];\n  \n  // Sort timings by value (descending) for better readability\n  const sortedEntries = Object.entries(timings)\n    .filter(([key]) => key !== 'total')\n    .sort(([, a], [, b]) => b - a);\n  \n  for (const [name, ms] of sortedEntries) {\n    const formattedName = name.charAt(0).toUpperCase() + name.slice(1);\n    lines.push(`${formattedName}: ${formatTiming(ms)}`);\n  }\n  \n  // Always show total at the end\n  if (timings.total !== undefined) {\n    lines.push(`Total: ${formatTiming(timings.total)}`);\n  }\n  \n  return lines;\n}\n\n/**\n * Format complete command output with box, summary, timing, and additional info\n */\nexport function formatCommandOutput(result: CommandResult): string {\n  const sections: string[] = [];\n  \n  // Add summary section\n  const summaryLines = keyValue(result.summary);\n  sections.push(...summaryLines);\n  \n  // Add timing section\n  if (result.timing !== undefined) {\n    sections.push('');\n    \n    if (typeof result.timing === 'number') {\n      sections.push(`Time: ${formatTiming(result.timing)}`);\n    } else {\n      const timingLines = formatTimingBreakdown(result.timing);\n      sections.push(...timingLines);\n    }\n  }\n  \n  // Add warnings section\n  if (result.warnings && result.warnings.length > 0) {\n    sections.push('');\n    sections.push(safeColors.warning('Warnings:'));\n    result.warnings.forEach(warning => \n      sections.push(`  ${safeColors.dim('•')} ${warning}`)\n    );\n  }\n  \n  // Add errors section\n  if (result.errors && result.errors.length > 0) {\n    sections.push('');\n    sections.push(safeColors.error('Errors:'));\n    result.errors.forEach(error => \n      sections.push(`  ${safeColors.dim('•')} ${error}`)\n    );\n  }\n  \n  // Add diagnostics section\n  if (result.diagnostics && result.diagnostics.length > 0) {\n    sections.push('');\n    sections.push(safeColors.info('Diagnostics:'));\n    result.diagnostics.forEach(diagnostic => \n      sections.push(`  ${safeColors.dim('•')} ${diagnostic}`)\n    );\n  }\n  \n  // Add suggestions section\n  if (result.suggestions && result.suggestions.length > 0) {\n    sections.push('');\n    sections.push(safeColors.info('Suggestions:'));\n    result.suggestions.forEach(suggestion => \n      sections.push(`  ${safeColors.dim('•')} ${suggestion}`)\n    );\n  }\n  \n  return box(result.title, sections);\n}\n\n/**\n * Create a simple command result with just title, summary, and timing\n */\nexport function createSimpleResult(\n  title: string, \n  summary: Record<string, string | number>, \n  timing?: number\n): CommandResult {\n  return {\n    title,\n    summary,\n    timing,\n  };\n}\n\n/**\n * Create a detailed command result with all optional fields\n */\nexport function createDetailedResult(\n  title: string,\n  summary: Record<string, string | number>,\n  options: {\n    timing?: number | Record<string, number>;\n    diagnostics?: string[];\n    warnings?: string[];\n    errors?: string[];\n    suggestions?: string[];\n  } = {}\n): CommandResult {\n  return {\n    title,\n    summary,\n    ...options,\n  };\n}\n","/**\n * Timing tracker utility for CLI commands\n * Provides checkpoint-based timing measurement\n */\n\nexport class TimingTracker {\n  private start: number;\n  private checkpoints: Record<string, number> = {};\n  \n  constructor() {\n    this.start = Date.now();\n  }\n  \n  /**\n   * Record a timing checkpoint\n   */\n  checkpoint(name: string): void {\n    this.checkpoints[name] = Date.now() - this.start;\n  }\n  \n  /**\n   * Get total elapsed time in milliseconds\n   */\n  total(): number {\n    return Date.now() - this.start;\n  }\n  \n  /**\n   * Get timing breakdown including total\n   */\n  breakdown(): Record<string, number> {\n    return { ...this.checkpoints, total: this.total() };\n  }\n  \n  /**\n   * Get timing breakdown without total\n   */\n  checkpointsOnly(): Record<string, number> {\n    return { ...this.checkpoints };\n  }\n  \n  /**\n   * Reset the timer\n   */\n  reset(): void {\n    this.start = Date.now();\n    this.checkpoints = {};\n  }\n  \n  /**\n   * Get elapsed time since last checkpoint or start\n   */\n  sinceLastCheckpoint(): number {\n    const lastCheckpointTime = Math.max(...Object.values(this.checkpoints), 0);\n    return Date.now() - this.start - lastCheckpointTime;\n  }\n  \n  /**\n   * Get elapsed time since a specific checkpoint\n   */\n  sinceCheckpoint(checkpointName: string): number | null {\n    const checkpointTime = this.checkpoints[checkpointName];\n    if (checkpointTime === undefined) {\n      return null;\n    }\n    return Date.now() - this.start - checkpointTime;\n  }\n}\n","/**\n * Command suggestions and validation utilities\n */\n\nexport interface CommandSuggestion {\n  id: string;\n  command: string;\n  args: string[];\n  description: string;\n  impact: 'safe' | 'disruptive';\n  when: string;\n  available?: boolean;\n}\n\nexport interface CommandRegistry {\n  commands: Set<string>;\n  groups: Map<string, Set<string>>;\n}\n\n/**\n * Create a command registry from available commands\n */\nexport function createCommandRegistry(commands: string[]): CommandRegistry {\n  const commandSet = new Set(commands);\n  const groups = new Map<string, Set<string>>();\n  \n  // Group commands by prefix (e.g., \"devlink:apply\" -> group \"devlink\")\n  for (const cmd of commands) {\n    const [group, ...rest] = cmd.split(':');\n    if (group && rest.length > 0) {\n      if (!groups.has(group)) {\n        groups.set(group, new Set());\n      }\n      groups.get(group)!.add(rest.join(':'));\n    }\n  }\n  \n  return {\n    commands: commandSet,\n    groups\n  };\n}\n\n/**\n * Check if a command is available in the registry\n */\nexport function isCommandAvailable(\n  command: string, \n  registry: CommandRegistry\n): boolean {\n  // Handle full command strings like \"kb devlink apply\"\n  if (command.startsWith('kb ')) {\n    const parts = command.split(' ');\n    if (parts.length >= 3 && parts[1] && parts[2]) {\n      const group = parts[1];\n      const subcommand = parts[2];\n      const fullCommand = `${group}:${subcommand}`;\n      return registry.commands.has(fullCommand);\n    }\n  }\n  \n  // Handle direct command names like \"devlink:apply\"\n  return registry.commands.has(command);\n}\n\n/**\n * Validate suggestions against available commands\n */\nexport function validateSuggestions(\n  suggestions: CommandSuggestion[],\n  registry: CommandRegistry\n): CommandSuggestion[] {\n  return suggestions.map(suggestion => ({\n    ...suggestion,\n    available: isCommandAvailable(suggestion.command, registry)\n  })).filter(suggestion => suggestion.available);\n}\n\n/**\n * Generate common devlink suggestions\n */\nexport function generateDevlinkSuggestions(\n  warningCodes: Set<string>,\n  context: { undo?: { available: boolean } },\n  registry: CommandRegistry\n): CommandSuggestion[] {\n  const suggestions: CommandSuggestion[] = [];\n\n  // LOCK_MISMATCH -> apply\n  if (warningCodes.has('LOCK_MISMATCH')) {\n    suggestions.push({\n      id: 'SYNC_LOCK',\n      command: 'kb devlink apply',\n      args: ['--yes'],\n      description: 'Apply changes to sync manifests',\n      impact: 'safe',\n      when: 'LOCK_MISMATCH'\n    });\n  }\n\n  // BACKUP_MISSING -> freeze\n  if (warningCodes.has('BACKUP_MISSING')) {\n    suggestions.push({\n      id: 'CREATE_BACKUP',\n      command: 'kb devlink freeze',\n      args: ['--replace'],\n      description: 'Create a fresh backup',\n      impact: 'safe',\n      when: 'BACKUP_MISSING'\n    });\n  }\n\n  // STALE_LOCK -> freeze\n  if (warningCodes.has('STALE_LOCK')) {\n    suggestions.push({\n      id: 'REFRESH_LOCK',\n      command: 'kb devlink freeze',\n      args: ['--pin=caret'],\n      description: 'Refresh lock file',\n      impact: 'safe',\n      when: 'STALE_LOCK'\n    });\n  }\n\n  // STALE_YALC_ARTIFACTS -> clean\n  if (warningCodes.has('STALE_YALC_ARTIFACTS')) {\n    suggestions.push({\n      id: 'CLEAN_YALC',\n      command: 'kb devlink clean',\n      args: [],\n      description: 'Remove yalc artifacts',\n      impact: 'safe',\n      when: 'STALE_YALC_ARTIFACTS'\n    });\n  }\n\n  // PROTOCOL_CONFLICTS -> clean --hard\n  if (warningCodes.has('PROTOCOL_CONFLICTS')) {\n    suggestions.push({\n      id: 'FIX_PROTOCOLS',\n      command: 'kb devlink clean',\n      args: ['--hard'],\n      description: 'Reset all protocols and reapply',\n      impact: 'disruptive',\n      when: 'PROTOCOL_CONFLICTS'\n    });\n  }\n\n  // Undo suggestion\n  if (context.undo?.available) {\n    suggestions.push({\n      id: 'UNDO_LAST',\n      command: 'kb devlink undo',\n      args: [],\n      description: 'Revert last operation',\n      impact: 'safe',\n      when: 'BACKUP_AVAILABLE'\n    });\n  }\n\n  // Validate and return only available suggestions\n  return validateSuggestions(suggestions, registry);\n}\n\n\n/**\n * Generate quick actions for common scenarios\n */\nexport function generateQuickActions(\n  hasWarnings: boolean,\n  registry: CommandRegistry,\n  group: string = 'devlink'\n): CommandSuggestion[] {\n  if (!hasWarnings) {return [];}\n\n  const quickActions: CommandSuggestion[] = [\n    {\n      id: 'QUICK_CLEAN',\n      command: `kb ${group} clean`,\n      args: [],\n      description: 'Clean artifacts',\n      impact: 'safe',\n      when: 'QUICK_ACTIONS'\n    },\n    {\n      id: 'QUICK_PLAN',\n      command: `kb ${group} plan`,\n      args: [],\n      description: 'Create plan',\n      impact: 'safe',\n      when: 'QUICK_ACTIONS'\n    },\n    {\n      id: 'QUICK_APPLY',\n      command: `kb ${group} apply`,\n      args: [],\n      description: 'Apply changes',\n      impact: 'safe',\n      when: 'QUICK_ACTIONS'\n    }\n  ];\n\n  return validateSuggestions(quickActions, registry);\n}\n","/**\n * Command discovery utilities for CLI systems\n */\n\nexport interface CommandInfo {\n  id: string;\n  group: string;\n  name: string;\n  description: string;\n  available: boolean;\n}\n\n/**\n * Discover available commands from CLI manifest or registry\n * This is a generic interface that can be implemented by different CLI systems\n */\nexport interface CommandDiscovery {\n  /**\n   * Get all available commands\n   */\n  getAvailableCommands(): Promise<string[]>;\n  \n  /**\n   * Get command info by ID\n   */\n  getCommandInfo(commandId: string): Promise<CommandInfo | null>;\n  \n  /**\n   * Check if a command is available\n   */\n  isCommandAvailable(commandId: string): Promise<boolean>;\n}\n\n/**\n * Simple command discovery that works with a predefined list\n * Can be extended to work with actual CLI registries\n */\nexport class StaticCommandDiscovery implements CommandDiscovery {\n  constructor(private commands: string[]) {}\n\n  async getAvailableCommands(): Promise<string[]> {\n    return [...this.commands];\n  }\n\n  async getCommandInfo(commandId: string): Promise<CommandInfo | null> {\n    if (!this.commands.includes(commandId)) {\n      return null;\n    }\n\n    const [group, name] = commandId.split(':');\n    return {\n      id: commandId,\n      group: group || 'unknown',\n      name: name || commandId,\n      description: `Execute ${commandId}`,\n      available: true\n    };\n  }\n\n  async isCommandAvailable(commandId: string): Promise<boolean> {\n    return this.commands.includes(commandId);\n  }\n}\n\n\n\n/**\n * Create a command discovery instance from a command list\n */\nexport function createCommandDiscovery(commands: string[]): CommandDiscovery {\n  return new StaticCommandDiscovery(commands);\n}\n","/**\n * CLI manifest parsing utilities\n */\n\nexport interface CommandManifest {\n  manifestVersion: string;\n  id: string;\n  aliases?: string[];\n  group: string;\n  describe: string;\n  longDescription?: string;\n  requires?: string[];\n  flags?: FlagDefinition[];\n  examples?: string[];\n  loader: () => Promise<{ run: unknown }>;\n}\n\nexport interface FlagDefinition {\n  name: string;\n  type: 'string' | 'boolean' | 'number' | 'array';\n  alias?: string;\n  default?: string | boolean | number | string[];\n  description?: string;\n  choices?: string[];\n  required?: boolean;\n}\n\n/**\n * Extract command IDs from a manifest\n */\nexport function extractCommandIds(manifest: CommandManifest[]): string[] {\n  return manifest.map(cmd => cmd.id);\n}\n\n/**\n * Extract command groups from a manifest\n */\nexport function extractCommandGroups(manifest: CommandManifest[]): string[] {\n  const groups = new Set<string>();\n  manifest.forEach(cmd => groups.add(cmd.group));\n  return Array.from(groups);\n}\n\n/**\n * Find commands by group\n */\nexport function findCommandsByGroup(manifest: CommandManifest[], group: string): CommandManifest[] {\n  return manifest.filter(cmd => cmd.group === group);\n}\n\n/**\n * Find command by ID\n */\nexport function findCommandById(manifest: CommandManifest[], id: string): CommandManifest | undefined {\n  return manifest.find(cmd => cmd.id === id);\n}\n\n/**\n * Get command info for suggestions\n */\nexport function getCommandInfo(manifest: CommandManifest[], commandId: string): {\n  id: string;\n  group: string;\n  name: string;\n  description: string;\n  available: boolean;\n} | null {\n  const cmd = findCommandById(manifest, commandId);\n  if (!cmd) {\n    return null;\n  }\n\n  const [group, name] = commandId.split(':');\n  return {\n    id: commandId,\n    group: group || 'unknown',\n    name: name || commandId,\n    description: cmd.describe,\n    available: true\n  };\n}\n\n/**\n * Generate suggestions for a specific group\n */\nexport function generateGroupSuggestions(\n  manifest: CommandManifest[],\n  group: string,\n  _warningCodes: Set<string>,\n  _context: unknown\n): Array<{\n  id: string;\n  command: string;\n  args: string[];\n  description: string;\n  impact: 'safe' | 'disruptive';\n  when: string;\n  available: boolean;\n}> {\n  const groupCommands = findCommandsByGroup(manifest, group);\n  const suggestions: Array<{\n    id: string;\n    command: string;\n    args: string[];\n    description: string;\n    impact: 'safe' | 'disruptive';\n    when: string;\n    available: boolean;\n  }> = [];\n\n  // Generate common suggestions for each group\n  for (const cmd of groupCommands) {\n    // Basic command suggestion\n    suggestions.push({\n      id: `${cmd.group.toUpperCase()}_${cmd.id.split(':')[1]?.toUpperCase() || 'UNKNOWN'}`,\n      command: `kb ${cmd.group} ${cmd.id.split(':')[1] || ''}`,\n      args: [],\n      description: cmd.describe,\n      impact: 'safe',\n      when: 'GENERAL',\n      available: true\n    });\n\n    // Add specific suggestions based on command type\n    if (cmd.id.includes('init')) {\n      suggestions.push({\n        id: `${cmd.group.toUpperCase()}_INIT_FORCE`,\n        command: `kb ${cmd.group} ${cmd.id.split(':')[1] || ''}`,\n        args: ['--force'],\n        description: `${cmd.describe} (force)`,\n        impact: 'disruptive',\n        when: 'INIT_FAILED',\n        available: true\n      });\n    }\n\n    if (cmd.id.includes('clean') || cmd.id.includes('reset')) {\n      suggestions.push({\n        id: `${cmd.group.toUpperCase()}_CLEAN_HARD`,\n        command: `kb ${cmd.group} ${cmd.id.split(':')[1] || ''}`,\n        args: ['--hard'],\n        description: `${cmd.describe} (hard)`,\n        impact: 'disruptive',\n        when: 'CLEAN_NEEDED',\n        available: true\n      });\n    }\n  }\n\n  return suggestions;\n}\n","/**\n * Multi-CLI suggestions system\n * Supports multiple CLI packages with their own manifests\n */\n\nimport { \n  createCommandRegistry, \n  generateDevlinkSuggestions,\n  type CommandSuggestion,\n  type CommandRegistry \n} from './command-suggestions';\nimport { \n  extractCommandIds, \n  generateGroupSuggestions,\n  type CommandManifest \n} from './manifest-parser';\n\nexport interface MultiCLIContext {\n  warningCodes: Set<string>;\n  undo?: { available: boolean };\n  [key: string]: unknown;\n}\n\nexport interface CLIPackage {\n  name: string;\n  group: string;\n  commands: CommandManifest[];\n  priority: number; // Higher priority = more important suggestions\n}\n\n/**\n * Multi-CLI suggestions manager\n */\nexport class MultiCLISuggestions {\n  private packages: Map<string, CLIPackage> = new Map();\n  private globalRegistry: CommandRegistry | null = null;\n\n  /**\n   * Register a CLI package\n   */\n  registerPackage(pkg: CLIPackage): void {\n    this.packages.set(pkg.name, pkg);\n    this.globalRegistry = null; // Invalidate cache\n  }\n\n  /**\n   * Get or create global command registry\n   */\n  private getGlobalRegistry(): CommandRegistry {\n    if (this.globalRegistry) {\n      return this.globalRegistry;\n    }\n\n    const allCommands: string[] = [];\n    for (const pkg of this.packages.values()) {\n      allCommands.push(...extractCommandIds(pkg.commands));\n    }\n\n    this.globalRegistry = createCommandRegistry(allCommands);\n    return this.globalRegistry;\n  }\n\n  /**\n   * Generate suggestions for a specific group\n   */\n  generateGroupSuggestions(\n    group: string, \n    context: MultiCLIContext\n  ): CommandSuggestion[] {\n    const suggestions: CommandSuggestion[] = [];\n    const registry = this.getGlobalRegistry();\n\n    // Find packages for this group\n    const groupPackages = Array.from(this.packages.values())\n      .filter(pkg => pkg.group === group)\n      .sort((a, b) => b.priority - a.priority);\n\n    for (const pkg of groupPackages) {\n      const groupSuggestions = generateGroupSuggestions(\n        pkg.commands, \n        group, \n        context.warningCodes, \n        context\n      );\n\n      // Convert to CommandSuggestion format and validate\n      for (const suggestion of groupSuggestions) {\n        if (registry.commands.has(suggestion.command.replace('kb ', '').replace(' ', ':'))) {\n          suggestions.push({\n            id: suggestion.id,\n            command: suggestion.command,\n            args: suggestion.args,\n            description: suggestion.description,\n            impact: suggestion.impact,\n            when: suggestion.when,\n            available: true\n          });\n        }\n      }\n    }\n\n    return suggestions;\n  }\n\n  /**\n   * Generate all suggestions across all packages\n   */\n  generateAllSuggestions(context: MultiCLIContext): CommandSuggestion[] {\n    const suggestions: CommandSuggestion[] = [];\n    const registry = this.getGlobalRegistry();\n\n    // Special handling for devlink (highest priority)\n    if (this.packages.has('devlink')) {\n      const devlinkSuggestions = generateDevlinkSuggestions(\n        context.warningCodes, \n        { undo: context.undo }, \n        registry\n      );\n      suggestions.push(...devlinkSuggestions);\n    }\n\n    // Generate suggestions for other groups\n    const groups = new Set<string>();\n    for (const pkg of this.packages.values()) {\n      groups.add(pkg.group);\n    }\n\n    for (const group of groups) {\n      if (group !== 'devlink') { // Skip devlink as it's handled above\n        const groupSuggestions = this.generateGroupSuggestions(group, context);\n        suggestions.push(...groupSuggestions);\n      }\n    }\n\n    return suggestions;\n  }\n\n  /**\n   * Get available commands for a group\n   */\n  getAvailableCommands(group: string): string[] {\n    const groupPackages = Array.from(this.packages.values())\n      .filter(pkg => pkg.group === group);\n    \n    const commands: string[] = [];\n    for (const pkg of groupPackages) {\n      commands.push(...extractCommandIds(pkg.commands));\n    }\n    \n    return commands;\n  }\n\n  /**\n   * Get all registered packages\n   */\n  getPackages(): CLIPackage[] {\n    return Array.from(this.packages.values());\n  }\n}\n\n","/**\n * Dynamic command discovery that loads commands from actual manifests\n */\n\nimport type { CommandDiscovery} from './command-discovery';\nimport { type CommandInfo } from './command-discovery';\n\nexport interface ManifestLoader {\n  loadManifest(packageName: string): Promise<any[]>;\n}\n\n/**\n * Dynamic command discovery that loads commands from manifests\n */\nexport class DynamicCommandDiscovery implements CommandDiscovery {\n  private manifestCache = new Map<string, any[]>();\n  private commandCache = new Map<string, CommandInfo>();\n\n  constructor(\n    private manifestLoader: ManifestLoader,\n    private packageNames: string[]\n  ) {}\n\n  async getAvailableCommands(): Promise<string[]> {\n    const allCommands: string[] = [];\n    \n    for (const packageName of this.packageNames) {\n      try {\n        const manifest = await this.loadManifest(packageName);\n        const commands = manifest.map(cmd => cmd.id);\n        allCommands.push(...commands);\n      } catch (error) {\n        console.warn(`Failed to load manifest for ${packageName}:`, error);\n      }\n    }\n    \n    return allCommands;\n  }\n\n  async getCommandInfo(commandId: string): Promise<CommandInfo | null> {\n    // Check cache first\n    if (this.commandCache.has(commandId)) {\n      return this.commandCache.get(commandId)!;\n    }\n\n    // Search through all packages\n    for (const packageName of this.packageNames) {\n      try {\n        const manifest = await this.loadManifest(packageName);\n        const command = manifest.find(cmd => cmd.id === commandId);\n        \n        if (command) {\n          const [group, name] = commandId.split(':');\n          const info: CommandInfo = {\n            id: commandId,\n            group: group || 'unknown',\n            name: name || commandId,\n            description: command.describe || `Execute ${commandId}`,\n            available: true\n          };\n          \n          this.commandCache.set(commandId, info);\n          return info;\n        }\n      } catch (error) {\n        console.warn(`Failed to load manifest for ${packageName}:`, error);\n      }\n    }\n\n    return null;\n  }\n\n  async isCommandAvailable(commandId: string): Promise<boolean> {\n    const info = await this.getCommandInfo(commandId);\n    return info !== null;\n  }\n\n  private async loadManifest(packageName: string): Promise<any[]> {\n    if (this.manifestCache.has(packageName)) {\n      return this.manifestCache.get(packageName)!;\n    }\n\n    const manifest = await this.manifestLoader.loadManifest(packageName);\n    this.manifestCache.set(packageName, manifest);\n    return manifest;\n  }\n}\n\n/**\n * Create a dynamic command discovery for KB Labs packages\n */\nexport function createKBLabsCommandDiscovery(): DynamicCommandDiscovery {\n  const manifestLoader: ManifestLoader = {\n    async loadManifest(packageName: string): Promise<any[]> {\n      try {\n        // Try to load from different possible locations\n        const possiblePaths = [\n          `@kb-labs/${packageName}/cli.manifest.js`,\n          `@kb-labs/${packageName}/dist/cli.manifest.js`,\n          `@kb-labs/${packageName}/src/cli.manifest.js`\n        ];\n\n        for (const path of possiblePaths) {\n          try {\n            const manifest = await import(path);\n            if (manifest.commands && Array.isArray(manifest.commands)) {\n              return manifest.commands;\n            }\n          } catch {\n            // Try next path\n            continue;\n          }\n        }\n\n        throw new Error(`No manifest found for ${packageName}`);\n      } catch (error) {\n        console.warn(`Failed to load manifest for ${packageName}:`, error);\n        return [];\n      }\n    }\n  };\n\n  const packageNames = [\n    'devlink-core',\n    'mind-cli', \n    'tox-cli',\n    'core-cli'\n  ];\n\n  return new DynamicCommandDiscovery(manifestLoader, packageNames);\n}\n","import path from 'node:path';\nimport { promises as fsp } from 'node:fs';\nimport { safeColors } from './colors';\nimport { formatSize, formatRelativeTime, safeKeyValue } from './format';\n\nexport interface ArtifactInfo {\n  name: string;\n  path: string;\n  size?: number;\n  modified?: Date;\n  description: string;\n}\n\nexport interface ArtifactDisplayOptions {\n  showSize?: boolean;\n  showTime?: boolean;\n  showDescription?: boolean;\n  maxItems?: number;\n  title?: string;\n  groupBy?: 'none' | 'type' | 'time';\n}\n\n/**\n * Display artifacts information in CLI\n */\nexport function displayArtifacts(\n  artifacts: ArtifactInfo[],\n  options: ArtifactDisplayOptions = {},\n): string[] {\n  const {\n    showSize = true,\n    showTime = true,\n    showDescription = false,\n    maxItems = 10,\n    title = 'Generated Artifacts',\n    groupBy = 'none'\n  } = options;\n\n  if (artifacts.length === 0) {\n    return [];\n  }\n\n  // Sort and limit artifacts\n  let sortedArtifacts = artifacts;\n  \n  if (groupBy === 'time') {\n    sortedArtifacts = [...artifacts].sort(\n      (a, b) => (b.modified?.getTime() ?? 0) - (a.modified?.getTime() ?? 0),\n    );\n  } else if (groupBy === 'type') {\n    sortedArtifacts = [...artifacts].sort((a, b) => a.name.localeCompare(b.name));\n  } else {\n    sortedArtifacts = [...artifacts].sort(\n      (a, b) => (b.modified?.getTime() ?? 0) - (a.modified?.getTime() ?? 0),\n    );\n  }\n\n  sortedArtifacts = sortedArtifacts.slice(0, maxItems);\n\n  const lines: string[] = [];\n\n  if (title) {\n    lines.push(safeColors.bold(title));\n  }\n\n  if (groupBy === 'type') {\n    const grouped = sortedArtifacts.reduce((acc, artifact) => {\n      const type = artifact.name.split(' ')[0] || 'Other';\n      if (!acc[type]) {acc[type] = [];}\n      acc[type]!.push(artifact);\n      return acc;\n    }, {} as Record<string, ArtifactInfo[]>);\n\n    Object.entries(grouped).forEach(([type, items], index) => {\n      if (index > 0 || title) {\n        lines.push('');\n      }\n      lines.push(...safeKeyValue({ [type]: '' }, { pad: false }));\n      items.forEach((artifact, artifactIndex) => {\n        if (artifactIndex > 0) {\n          lines.push('');\n        }\n        lines.push(...formatArtifactLines(artifact, {\n          showSize,\n          showTime,\n          showDescription,\n          indent: 2,\n        }));\n      });\n    });\n    return lines;\n  }\n\n  sortedArtifacts.forEach((artifact, index) => {\n    if (index > 0) {\n      lines.push('');\n    }\n    lines.push(...formatArtifactLines(artifact, {\n      showSize,\n      showTime,\n      showDescription,\n      indent: 0,\n    }));\n  });\n\n  return lines;\n}\n\n/**\n * Format a single artifact line\n */\nfunction formatArtifactLines(\n  artifact: ArtifactInfo,\n  options: {\n    showSize: boolean;\n    showTime: boolean;\n    showDescription: boolean;\n    indent: number;\n  },\n): string[] {\n  const { showSize, showTime, showDescription, indent } = options;\n  const relativePath = path.relative(process.cwd(), artifact.path);\n  const lines: string[] = [];\n  lines.push(\n    ...safeKeyValue({ [artifact.name]: relativePath }, { pad: false, indent }),\n  );\n  if (showSize && artifact.size) {\n    lines.push(\n      ...safeKeyValue({ Size: formatSize(artifact.size) }, { pad: false, indent: indent + 2 }),\n    );\n  }\n\n  if (showTime && artifact.modified) {\n    lines.push(\n      ...safeKeyValue({ Updated: formatRelativeTime(artifact.modified) }, { pad: false, indent: indent + 2 }),\n    );\n  }\n\n  if (showDescription && artifact.description) {\n    lines.push(\n      ...safeKeyValue({ Note: artifact.description }, { pad: false, indent: indent + 2 }),\n    );\n  }\n\n  return lines;\n}\n\n/**\n * Display a single artifact with full details\n */\nexport function displaySingleArtifact(artifact: ArtifactInfo, title?: string): string[] {\n  const relativePath = path.relative(process.cwd(), artifact.path);\n  const lines: string[] = [];\n  \n  if (title) {\n    lines.push('');\n    lines.push(safeColors.bold(title));\n  }\n  \n  lines.push(`  ${safeColors.bold(artifact.name)}: ${safeColors.info(relativePath)}`);\n  \n  if (artifact.size) {\n    lines.push(`    Size: ${formatSize(artifact.size)}`);\n  }\n  \n  if (artifact.modified) {\n    lines.push(`    Modified: ${formatRelativeTime(artifact.modified)}`);\n  }\n  \n  if (artifact.description) {\n    lines.push(`    Description: ${artifact.description}`);\n  }\n  \n  return lines;\n}\n\n/**\n * Display artifacts in a compact format (for status-like displays)\n */\nexport function displayArtifactsCompact(\n  artifacts: ArtifactInfo[],\n  options: {\n    maxItems?: number;\n    showSize?: boolean;\n    sortByTime?: boolean;\n    showTime?: boolean;\n    title?: string;\n  } = {},\n): string[] {\n  const {\n    maxItems = 5,\n    showSize = true,\n    sortByTime = true,\n    showTime = true,\n    title = 'Artifacts',\n  } = options;\n  \n  if (artifacts.length === 0) {\n    return [];\n  }\n\n  const sortedArtifacts = (sortByTime\n    ? [...artifacts].sort((a, b) => (b.modified?.getTime() ?? 0) - (a.modified?.getTime() ?? 0))\n    : artifacts.slice()\n  ).slice(0, maxItems);\n\n  const lines: string[] = [];\n  lines.push(safeColors.bold(title));\n\n  sortedArtifacts.forEach((artifact, index) => {\n    if (index > 0) {\n      lines.push('');\n    }\n    lines.push(\n      ...formatArtifactLines(artifact, {\n        showSize,\n        showTime,\n        showDescription: false,\n        indent: 0,\n      }),\n    );\n  });\n\n  return lines;\n}\n\n/**\n * Discover artifacts in a directory based on patterns\n * \n * @param baseDir - Base directory to search for artifacts\n * @param patterns - Array of artifact patterns to search for\n * @returns Array of discovered artifacts\n * \n * @example\n * ```typescript\n * const artifacts = await discoverArtifacts('.kb/mind', [\n *   { name: 'Index', pattern: 'index.json', description: 'Main index' },\n *   { name: 'API Index', pattern: 'api-index.json', description: 'API index' },\n * ]);\n * ```\n */\nexport async function discoverArtifacts(\n  baseDir: string,\n  patterns: Array<{ name: string; pattern: string; description?: string }>\n): Promise<ArtifactInfo[]> {\n  const artifacts: ArtifactInfo[] = [];\n\n  for (const artifact of patterns) {\n    const artifactPath = path.join(baseDir, artifact.pattern);\n    try {\n      await fsp.access(artifactPath);\n      const stats = await fsp.stat(artifactPath);\n      artifacts.push({\n        name: artifact.name,\n        path: artifactPath,\n        size: stats.size,\n        modified: stats.mtime,\n        description: artifact.description || ''\n      });\n    } catch {\n      // Skip if file doesn't exist\n    }\n  }\n\n  return artifacts;\n}\n","/**\n * Table formatting utilities for CLI output\n * Handles proper column alignment accounting for emoji/unicode width\n */\n\n/**\n * Calculate visual width of a string (accounting for emoji/wide chars and ANSI codes)\n * Simplified version - emoji count as 2 chars, ANSI codes are stripped\n */\nfunction visualWidth(str: string): number {\n  const ansiRegex = /\\x1B\\[[0-9;]*[a-zA-Z]/g;\n  const cleanStr = str.replace(ansiRegex, '');\n\n  // Only count genuinely double-width characters: high-plane emoji (U+1F000+) and CJK blocks.\n  // BMP symbols like ✓ ✗ ◆ ○ (dingbats, arrows, geometric shapes) are single-width in terminals.\n  const doubleWidthRegex = /[\\u{1100}-\\u{115F}]|[\\u{2E80}-\\u{A4CF}]|[\\u{AC00}-\\u{D7AF}]|[\\u{F900}-\\u{FAFF}]|[\\u{FE10}-\\u{FE1F}]|[\\u{FE30}-\\u{FE4F}]|[\\u{FF01}-\\u{FF60}]|[\\u{FFE0}-\\u{FFE6}]|[\\u{1F000}-\\u{1FFFF}]/gu;\n  const wideMatches = cleanStr.match(doubleWidthRegex);\n  const wideCount = wideMatches ? wideMatches.length : 0;\n\n  // Use codepoint count (not UTF-16 length) so surrogate-pair emoji count as 1 base + 1 extra = 2.\n  return [...cleanStr].length + wideCount;\n}\n\n/**\n * Pad string to visual width (accounting for emoji)\n */\nfunction padVisual(str: string, width: number, padChar: string = ' '): string {\n  const vWidth = visualWidth(str);\n  const padding = Math.max(0, width - vWidth);\n  return str + padChar.repeat(padding);\n}\n\nexport interface TableColumn {\n  header: string;\n  width?: number; // Auto-calculated if not provided\n  align?: 'left' | 'right' | 'center';\n}\n\nexport interface TableOptions {\n  header?: boolean;\n  separator?: string; // Character for separator line (e.g., '─')\n  padding?: number; // Padding between columns\n}\n\n/**\n * Format data as a table with proper column alignment\n */\nexport function formatTable(\n  columns: TableColumn[],\n  rows: string[][],\n  options: TableOptions = {}\n): string[] {\n  const { header = true, separator = '─', padding = 1 } = options;\n  \n  // Calculate column widths\n  const widths: number[] = columns.map((col, idx) => {\n    if (col.width !== undefined) {\n      return col.width;\n    }\n    \n    // Calculate max width from header and all rows\n    let maxWidth = visualWidth(col.header);\n    for (const row of rows) {\n      if (row[idx]) {\n        maxWidth = Math.max(maxWidth, visualWidth(String(row[idx])));\n      }\n    }\n    return maxWidth;\n  });\n  \n  const lines: string[] = [];\n  \n  // Header\n  if (header) {\n    const headerCells = columns.map((col, idx) => {\n      const cell = col.header;\n      const width = widths[idx]!;\n      return padVisual(cell, width);\n    });\n    lines.push(headerCells.join(' '.repeat(padding)));\n    \n    // Separator\n    if (separator) {\n      const separatorLine = widths.map(w => separator.repeat(w)).join(' '.repeat(padding));\n      lines.push(separatorLine);\n    }\n  }\n  \n  // Rows\n  for (const row of rows) {\n    const cells = columns.map((col, idx) => {\n      const cell = row[idx] !== undefined ? String(row[idx]) : '';\n      const align = col.align || 'left';\n      const width = widths[idx]!;\n      \n      if (align === 'right') {\n        const vWidth = visualWidth(cell);\n        const padding = Math.max(0, width - vWidth);\n        return ' '.repeat(padding) + cell;\n      } else if (align === 'center') {\n        const vWidth = visualWidth(cell);\n        const padding = Math.max(0, width - vWidth);\n        const leftPad = Math.floor(padding / 2);\n        const rightPad = padding - leftPad;\n        return ' '.repeat(leftPad) + cell + ' '.repeat(rightPad);\n      } else {\n        return padVisual(cell, width);\n      }\n    });\n    lines.push(cells.join(' '.repeat(padding)));\n  }\n  \n  return lines;\n}\n\n/**\n * Format simple key-value pairs as a table\n */\nexport function formatKeyValueTable(\n  data: Record<string, string | number>,\n  options: { keyWidth?: number; valueWidth?: number } = {}\n): string[] {\n  const keys = Object.keys(data);\n  if (keys.length === 0) {return [];}\n  \n  const keyWidth = options.keyWidth || Math.max(...keys.map(k => visualWidth(k)), 0);\n  const valueWidth = options.valueWidth || Math.max(...Object.values(data).map(v => visualWidth(String(v))), 0);\n  \n  return keys.map(key => {\n    const value = String(data[key]);\n    return `${padVisual(key, keyWidth)}  ${padVisual(value, valueWidth)}`;\n  });\n}\n","import type { DebugEntry, DebugFormat } from '../types';\n\nexport function formatDebugEntryAI(entry: DebugEntry): string {\n  return JSON.stringify(entry, null, 2);\n}\n\nexport function formatDebugEntriesAI(entries: DebugEntry[]): string {\n  return JSON.stringify(entries, null, 2);\n}\n\nexport function shouldUseAIFormat(format?: DebugFormat, jsonMode?: boolean): boolean {\n  if (jsonMode) {\n    return true;\n  }\n  return format === 'ai';\n}\n\n","import { safeColors, safeSymbols } from '../../colors';\nimport type { DebugEntry } from '../types';\n\nexport interface HumanFormatterOptions {\n  showTimestamp?: boolean;\n  showDuration?: boolean;\n  groupBy?: 'namespace' | 'group' | 'none';\n}\n\nfunction formatTimestamp(timestamp: number): string {\n  const date = new Date(timestamp);\n  return date.toISOString();\n}\n\nfunction formatDuration(duration: number): string {\n  if (duration < 1000) {\n    return `${duration}ms`;\n  }\n  return `${(duration / 1000).toFixed(2)}s`;\n}\n\nexport function formatDebugEntryHuman(entry: DebugEntry, options: HumanFormatterOptions = {}): string {\n  const parts: string[] = [];\n\n  if (options.showTimestamp) {\n    parts.push(safeColors.dim(formatTimestamp(entry.timestamp)));\n  }\n\n  parts.push(safeColors.bold(`[${entry.namespace}]`));\n  parts.push(entry.message);\n\n  if (options.showDuration && typeof entry.duration === 'number') {\n    parts.push(safeColors.dim(`(${formatDuration(entry.duration)})`));\n  }\n\n  if (entry.level === 'error') {\n    parts.push(safeColors.error(safeSymbols.error));\n  } else if (entry.level === 'warn') {\n    parts.push(safeColors.warning(safeSymbols.warning));\n  }\n\n  return parts.join(' ');\n}\n\nexport function formatDebugEntriesHuman(entries: DebugEntry[], options: HumanFormatterOptions = {}): string {\n  if (entries.length === 0) {\n    return '';\n  }\n\n  const sorted = [...entries].sort((a, b) => a.timestamp - b.timestamp);\n  const lines: string[] = [];\n\n  if (options.groupBy === 'namespace') {\n    const namespaces = new Map<string, DebugEntry[]>();\n    for (const entry of sorted) {\n      if (!namespaces.has(entry.namespace)) {\n        namespaces.set(entry.namespace, []);\n      }\n      namespaces.get(entry.namespace)!.push(entry);\n    }\n\n    for (const [namespace, namespaceEntries] of namespaces) {\n      lines.push(safeColors.bold(namespace));\n      for (const entry of namespaceEntries) {\n        lines.push(`  ${formatDebugEntryHuman(entry, options)}`);\n      }\n      lines.push('');\n    }\n    return lines.join('\\n').trimEnd();\n  }\n\n  if (options.groupBy === 'group') {\n    const groups = new Map<string, DebugEntry[]>();\n    for (const entry of sorted) {\n      const groupName = entry.group ?? 'default';\n      if (!groups.has(groupName)) {\n        groups.set(groupName, []);\n      }\n      groups.get(groupName)!.push(entry);\n    }\n\n    for (const [groupName, groupEntries] of groups) {\n      lines.push(safeColors.bold(groupName));\n      for (const entry of groupEntries) {\n        lines.push(`  ${formatDebugEntryHuman(entry, options)}`);\n      }\n      lines.push('');\n    }\n    return lines.join('\\n').trimEnd();\n  }\n\n  for (const entry of sorted) {\n    lines.push(formatDebugEntryHuman(entry, options));\n  }\n\n  return lines.join('\\n');\n}\n\n","import { formatDebugEntriesHuman } from './formatters/human';\nimport { formatDebugEntriesAI } from './formatters/ai';\nimport { formatTimelineWithSummary } from './formatters/timeline';\nimport type { DebugEntry, DebugExportOptions, DebugFilterOptions, DebugTreeNode } from './types';\n\nfunction toRegex(pattern: string): RegExp {\n  if (!pattern.includes('*')) {\n    return new RegExp(`^${pattern.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}$`, 'i');\n  }\n  const escaped = pattern.replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&').replace(/\\*/g, '.*');\n  return new RegExp(`^${escaped}$`, 'i');\n}\n\nexport function filterByNamespace(entries: DebugEntry[], pattern: string | RegExp): DebugEntry[] {\n  const matcher = typeof pattern === 'string' ? toRegex(pattern) : pattern;\n  return entries.filter((entry) => matcher.test(entry.namespace));\n}\n\nexport function filterByLevel(entries: DebugEntry[], level: string | string[]): DebugEntry[] {\n  const allowed = Array.isArray(level) ? new Set(level) : new Set([level]);\n  return entries.filter((entry) => allowed.has(entry.level));\n}\n\nexport function filterByTimeRange(entries: DebugEntry[], from?: number, to?: number): DebugEntry[] {\n  return entries.filter((entry) => {\n    if (from !== undefined && entry.timestamp < from) {\n      return false;\n    }\n    if (to !== undefined && entry.timestamp > to) {\n      return false;\n    }\n    return true;\n  });\n}\n\nexport function searchInLogs(entries: DebugEntry[], query: string): DebugEntry[] {\n  const lowered = query.toLowerCase();\n  return entries.filter((entry) => {\n    if (entry.message.toLowerCase().includes(lowered)) {\n      return true;\n    }\n    if (entry.namespace.toLowerCase().includes(lowered)) {\n      return true;\n    }\n    if (entry.meta) {\n      const metaString = JSON.stringify(entry.meta).toLowerCase();\n      if (metaString.includes(lowered)) {\n        return true;\n      }\n    }\n    return false;\n  });\n}\n\nexport function filterDebugEntries(entries: DebugEntry[], options: DebugFilterOptions): DebugEntry[] {\n  let filtered = [...entries];\n\n  if (options.namespace) {\n    filtered = filterByNamespace(filtered, options.namespace);\n  }\n\n  if (options.level) {\n    filtered = filterByLevel(filtered, options.level);\n  }\n\n  if (options.timeRange) {\n    filtered = filterByTimeRange(filtered, options.timeRange.from, options.timeRange.to);\n  }\n\n  if (options.search) {\n    filtered = searchInLogs(filtered, options.search);\n  }\n\n  if (options.traceId) {\n    filtered = filtered.filter((entry) => entry.traceId === options.traceId);\n  }\n\n  return filtered;\n}\n\nexport function groupByNamespace(entries: DebugEntry[]): Map<string, DebugEntry[]> {\n  const map = new Map<string, DebugEntry[]>();\n  for (const entry of entries) {\n    if (!map.has(entry.namespace)) {\n      map.set(entry.namespace, []);\n    }\n    map.get(entry.namespace)!.push(entry);\n  }\n  return map;\n}\n\nexport function groupByGroup(entries: DebugEntry[]): Map<string, DebugEntry[]> {\n  const map = new Map<string, DebugEntry[]>();\n  for (const entry of entries) {\n    const group = entry.group ?? 'default';\n    if (!map.has(group)) {\n      map.set(group, []);\n    }\n    map.get(group)!.push(entry);\n  }\n  return map;\n}\n\nexport function createDebugTree(entries: DebugEntry[]): DebugTreeNode | null {\n  if (entries.length === 0) {\n    return null;\n  }\n\n  const sorted = [...entries].sort((a, b) => a.timestamp - b.timestamp);\n  const nodes = new Map<string, DebugTreeNode>();\n  let root: DebugTreeNode | null = null;\n\n  function ensureNode(entry: DebugEntry): DebugTreeNode {\n    if (entry.spanId && nodes.has(entry.spanId)) {\n      return nodes.get(entry.spanId)!;\n    }\n    const node: DebugTreeNode = { entry, children: [], depth: 0 };\n    if (entry.spanId) {\n      nodes.set(entry.spanId, node);\n    }\n    return node;\n  }\n\n  for (const entry of sorted) {\n    const node = ensureNode(entry);\n\n    if (entry.parentSpanId && nodes.has(entry.parentSpanId)) {\n      const parent = nodes.get(entry.parentSpanId)!;\n      node.depth = parent.depth + 1;\n      parent.children.push(node);\n    } else if (root === null) {\n      root = node;\n    } else {\n      // Fallback: attach additional roots under primary root to preserve output\n      node.depth = root.depth + 1;\n      root.children.push(node);\n    }\n  }\n\n  return root;\n}\n\nexport function exportToJSON(entries: DebugEntry[], options: DebugExportOptions = {}): string {\n  const filtered = options.filter ? filterDebugEntries(entries, options.filter) : entries;\n  if (options.includeMeta === false) {\n    return JSON.stringify(\n      filtered.map(({ meta: _meta, ...rest }) => rest),\n      null,\n      2,\n    );\n  }\n  return JSON.stringify(filtered, null, 2);\n}\n\nexport function exportToChromeFormat(entries: DebugEntry[], options: DebugExportOptions = {}): string {\n  const filtered = options.filter ? filterDebugEntries(entries, options.filter) : entries;\n  const traceEvents = filtered.map((entry) => ({\n    name: entry.message,\n    cat: entry.namespace,\n    ph: entry.level === 'error' ? 'E' : entry.level === 'warn' ? 'W' : 'X',\n    ts: entry.timestamp * 1000,\n    dur: (entry.duration ?? 0) * 1000,\n    pid: 1,\n    tid: entry.spanId ?? entry.namespace,\n    args: entry.meta ?? {},\n  }));\n\n  return JSON.stringify({ traceEvents }, null, 2);\n}\n\nexport function exportToPlainText(entries: DebugEntry[], options: DebugExportOptions = {}): string {\n  const filtered = options.filter ? filterDebugEntries(entries, options.filter) : entries;\n  return formatDebugEntriesHuman(filtered, { groupBy: 'namespace', showTimestamp: true, showDuration: true });\n}\n\nexport function exportDebugEntries(entries: DebugEntry[], options: DebugExportOptions): string {\n  const format = options.format ?? 'json';\n  switch (format) {\n    case 'chrome':\n      return exportToChromeFormat(entries, options);\n    case 'text':\n      return exportToPlainText(entries, options);\n    case 'json':\n    default:\n      return exportToJSON(entries, options);\n  }\n}\n\nexport function describeEntriesHuman(entries: DebugEntry[], options: DebugFilterOptions = {}): string {\n  const filtered = filterDebugEntries(entries, options);\n  return formatDebugEntriesHuman(filtered, { showTimestamp: true, showDuration: true, groupBy: 'namespace' });\n}\n\nexport function describeEntriesAI(entries: DebugEntry[], options: DebugFilterOptions = {}): string {\n  const filtered = filterDebugEntries(entries, options);\n  return formatDebugEntriesAI(filtered);\n}\n\nexport function describeEntriesTimeline(entries: DebugEntry[], options: DebugFilterOptions = {}): string {\n  const filtered = filterDebugEntries(entries, options);\n  return formatTimelineWithSummary(filtered);\n}\n\n","import { safeColors, safeSymbols } from '../../colors';\nimport type { DebugEntry, DebugTreeNode } from '../types';\nimport { createDebugTree } from '../utilities';\n\nfunction formatDuration(duration: number): string {\n  if (duration < 1000) {\n    return `${duration}ms`;\n  }\n  return `${(duration / 1000).toFixed(2)}s`;\n}\n\nexport function formatTimelineNode(\n  node: DebugTreeNode,\n  isLast: boolean,\n  prefix = '',\n  maxDepth?: number,\n): string[] {\n  const lines: string[] = [];\n  const connector = isLast ? '└─' : '├─';\n  const parts: string[] = [];\n\n  parts.push(safeColors.bold(`[${node.entry.namespace}]`));\n  parts.push(node.entry.message);\n\n  if (typeof node.entry.duration === 'number') {\n    parts.push(safeColors.dim(`(${formatDuration(node.entry.duration)})`));\n  }\n\n  if (node.entry.level === 'error') {\n    parts.push(safeColors.error(safeSymbols.error));\n  } else if (node.entry.level === 'warn') {\n    parts.push(safeColors.warning(safeSymbols.warning));\n  }\n\n  lines.push(`${prefix}${connector} ${parts.join(' ')}`.trimEnd());\n\n  if (maxDepth !== undefined && node.depth + 1 >= maxDepth) {\n    return lines;\n  }\n\n  const childPrefix = prefix + (isLast ? '   ' : '│  ');\n  for (let index = 0; index < node.children.length; index++) {\n    const child = node.children[index];\n    if (!child) {\n      continue;\n    }\n    const childIsLast = index === node.children.length - 1;\n    lines.push(...formatTimelineNode(child, childIsLast, childPrefix, maxDepth));\n  }\n\n  return lines;\n}\n\nexport function formatTimeline(entries: DebugEntry[]): string {\n  if (entries.length === 0) {\n    return '';\n  }\n\n  const tree = createDebugTree(entries);\n  if (!tree) {\n    return '';\n  }\n\n  return formatTimelineNode(tree, true).join('\\n');\n}\n\nexport function formatTimelineWithSummary(entries: DebugEntry[]): string {\n  const timeline = formatTimeline(entries);\n  if (timeline.length === 0) {\n    return '';\n  }\n\n  const totalDuration = entries.reduce((acc, entry) => acc + (entry.duration ?? 0), 0);\n  const errorCount = entries.filter((entry) => entry.level === 'error').length;\n  const warnCount = entries.filter((entry) => entry.level === 'warn').length;\n\n  const summaryParts: string[] = [];\n  if (totalDuration > 0) {\n    summaryParts.push(`Total: ${formatDuration(totalDuration)}`);\n  }\n  if (errorCount > 0) {\n    summaryParts.push(safeColors.error(`${errorCount} errors`));\n  }\n  if (warnCount > 0) {\n    summaryParts.push(safeColors.warning(`${warnCount} warnings`));\n  }\n\n  if (summaryParts.length === 0) {\n    return timeline;\n  }\n\n  return `${timeline}\\n\\n${safeColors.bold('Summary:')} ${summaryParts.join(', ')}`;\n}\n\n","import { box } from '../../format';\nimport { formatDebugEntryAI, formatDebugEntriesAI, shouldUseAIFormat } from '../formatters/ai';\nimport {\n  formatDebugEntryHuman,\n  formatDebugEntriesHuman,\n  type HumanFormatterOptions,\n} from '../formatters/human';\nimport { formatTimelineWithSummary } from '../formatters/timeline';\nimport type { DebugDetailLevel, DebugEntry, DebugFormat } from '../types';\n\nexport interface DebugOutputOptions extends HumanFormatterOptions {\n  format?: DebugFormat;\n  detailLevel?: DebugDetailLevel;\n  useTimeline?: boolean;\n}\n\nexport function formatDebugOutput(entry: DebugEntry, options: DebugOutputOptions = {}): string {\n  if (shouldUseAIFormat(options.format)) {\n    return formatDebugEntryAI(entry);\n  }\n\n  return formatDebugEntryHuman(entry, options);\n}\n\nexport function formatDebugOutputs(entries: DebugEntry[], options: DebugOutputOptions = {}): string {\n  if (shouldUseAIFormat(options.format)) {\n    return formatDebugEntriesAI(entries);\n  }\n\n  if (options.useTimeline) {\n    return formatTimelineWithSummary(entries);\n  }\n\n  return formatDebugEntriesHuman(entries, options);\n}\n\nexport class DebugSection {\n  private readonly entries: DebugEntry[] = [];\n  private readonly title: string;\n  private readonly options: DebugOutputOptions;\n\n  constructor(title: string, options: DebugOutputOptions = {}) {\n    this.title = title;\n    this.options = options;\n  }\n\n  add(entry: DebugEntry): void {\n    this.entries.push(entry);\n  }\n\n  addAll(entries: DebugEntry[]): void {\n    this.entries.push(...entries);\n  }\n\n  clear(): void {\n    this.entries.length = 0;\n  }\n\n  format(): string {\n    if (this.entries.length === 0) {\n      return '';\n    }\n\n    const content = formatDebugOutputs(this.entries, this.options);\n    if (!content) {\n      return '';\n    }\n\n    if (shouldUseAIFormat(this.options.format)) {\n      return content;\n    }\n\n    return box(this.title, content.split('\\n'));\n  }\n\n  get count(): number {\n    return this.entries.length;\n  }\n}\n\nexport class DebugOutput {\n  private readonly sections = new Map<string, DebugSection>();\n  private readonly globalEntries: DebugEntry[] = [];\n  private readonly options: DebugOutputOptions;\n\n  constructor(options: DebugOutputOptions = {}) {\n    this.options = options;\n  }\n\n  add(entry: DebugEntry): void {\n    this.globalEntries.push(entry);\n  }\n\n  addToSection(sectionName: string, entry: DebugEntry): void {\n    if (!this.sections.has(sectionName)) {\n      this.sections.set(sectionName, new DebugSection(sectionName, this.options));\n    }\n    this.sections.get(sectionName)!.add(entry);\n  }\n\n  getSection(sectionName: string): DebugSection {\n    if (!this.sections.has(sectionName)) {\n      this.sections.set(sectionName, new DebugSection(sectionName, this.options));\n    }\n    return this.sections.get(sectionName)!;\n  }\n\n  format(): string {\n    const parts: string[] = [];\n\n    if (this.globalEntries.length > 0) {\n      const formatted = formatDebugOutputs(this.globalEntries, this.options);\n      if (formatted) {\n        parts.push(formatted);\n      }\n    }\n\n    for (const [, section] of this.sections) {\n      const formatted = section.format();\n      if (formatted) {\n        parts.push(formatted);\n      }\n    }\n\n    return parts.join('\\n\\n');\n  }\n\n  clear(): void {\n    this.globalEntries.length = 0;\n    this.sections.clear();\n  }\n\n  get totalCount(): number {\n    let count = this.globalEntries.length;\n    for (const section of this.sections.values()) {\n      count += section.count;\n    }\n    return count;\n  }\n}\n\n","import type { DebugEntry, DebugTreeNode } from '../types';\nimport { createDebugTree } from '../utilities';\nimport { formatTimelineNode } from '../formatters/timeline';\n\nexport interface DebugTreeOptions {\n  showSummary?: boolean;\n  maxDepth?: number;\n}\n\ninterface DebugTreeStats {\n  totalDuration: number;\n  errorCount: number;\n  warnCount: number;\n  nodeCount: number;\n}\n\nexport class DebugTree {\n  private tree: DebugTreeNode | null = null;\n  private readonly options: DebugTreeOptions;\n\n  constructor(entries: DebugEntry[], options: DebugTreeOptions = {}) {\n    this.options = options;\n    this.tree = createDebugTree(entries);\n  }\n\n  update(entries: DebugEntry[]): void {\n    this.tree = createDebugTree(entries);\n  }\n\n  format(): string {\n    if (!this.tree) {\n      return '';\n    }\n\n    const lines = formatTimelineNode(this.tree, true, '', this.options.maxDepth);\n    if (this.options.showSummary) {\n      const summary = this.getSummary();\n      if (summary) {\n        lines.push('', summary);\n      }\n    }\n    return lines.join('\\n');\n  }\n\n  private getSummary(): string {\n    if (!this.tree) {\n      return '';\n    }\n\n    const stats = this.collectStats(this.tree);\n    const parts: string[] = [];\n\n    if (stats.totalDuration > 0) {\n      parts.push(`total ${stats.totalDuration}ms`);\n    }\n    if (stats.errorCount > 0) {\n      parts.push(`${stats.errorCount} errors`);\n    }\n    if (stats.warnCount > 0) {\n      parts.push(`${stats.warnCount} warnings`);\n    }\n    parts.push(`${stats.nodeCount} nodes`);\n\n    return `Summary: ${parts.join(', ')}`;\n  }\n\n  private collectStats(node: DebugTreeNode): DebugTreeStats {\n    let totalDuration = node.entry.duration ?? 0;\n    let errorCount = node.entry.level === 'error' ? 1 : 0;\n    let warnCount = node.entry.level === 'warn' ? 1 : 0;\n    let nodeCount = 1;\n\n    for (const child of node.children) {\n      const childStats = this.collectStats(child);\n      totalDuration += childStats.totalDuration;\n      errorCount += childStats.errorCount;\n      warnCount += childStats.warnCount;\n      nodeCount += childStats.nodeCount;\n    }\n\n    return { totalDuration, errorCount, warnCount, nodeCount };\n  }\n\n  get root(): DebugTreeNode | null {\n    return this.tree;\n  }\n}\n\n","import type { DebugEntry } from '../types';\nimport { formatTimelineWithSummary } from '../formatters/timeline';\nimport { DebugTree } from './tree';\n\nexport interface TraceOptions {\n  showSummary?: boolean;\n  groupByPlugin?: boolean;\n  maxDepth?: number;\n}\n\nexport class DebugTrace {\n  private readonly entries: DebugEntry[] = [];\n  private readonly options: TraceOptions;\n\n  constructor(entries: DebugEntry[] = [], options: TraceOptions = {}) {\n    this.entries.push(...entries);\n    this.options = options;\n  }\n\n  add(entry: DebugEntry): void {\n    this.entries.push(entry);\n  }\n\n  addAll(entries: DebugEntry[]): void {\n    this.entries.push(...entries);\n  }\n\n  clear(): void {\n    this.entries.length = 0;\n  }\n\n  format(): string {\n    if (this.entries.length === 0) {\n      return '';\n    }\n\n    const sorted = [...this.entries].sort((a, b) => a.timestamp - b.timestamp);\n    if (this.options.groupByPlugin) {\n      return this.formatGrouped(sorted);\n    }\n\n    return formatTimelineWithSummary(sorted);\n  }\n\n  private formatGrouped(entries: DebugEntry[]): string {\n    const groups = new Map<string, DebugEntry[]>();\n    for (const entry of entries) {\n      const plugin = entry.namespace.split(':')[0] ?? entry.namespace;\n      if (!groups.has(plugin)) {\n        groups.set(plugin, []);\n      }\n      groups.get(plugin)!.push(entry);\n    }\n\n    const parts: string[] = [];\n    for (const [plugin, pluginEntries] of groups) {\n      const tree = new DebugTree(pluginEntries, {\n        showSummary: this.options.showSummary,\n        maxDepth: this.options.maxDepth,\n      });\n      const formatted = tree.format();\n      if (formatted) {\n        parts.push(`[${plugin}]`, formatted);\n      }\n    }\n    return parts.join('\\n\\n');\n  }\n\n  getStats(): {\n    totalEntries: number;\n    plugins: string[];\n    totalDuration: number;\n    errorCount: number;\n    warnCount: number;\n  } {\n    const plugins = new Set<string>();\n    let totalDuration = 0;\n    let errorCount = 0;\n    let warnCount = 0;\n\n    for (const entry of this.entries) {\n      const plugin = entry.namespace.split(':')[0] ?? entry.namespace;\n      plugins.add(plugin);\n      totalDuration += entry.duration ?? 0;\n      if (entry.level === 'error') {\n        errorCount += 1;\n      } else if (entry.level === 'warn') {\n        warnCount += 1;\n      }\n    }\n\n    return {\n      totalEntries: this.entries.length,\n      plugins: Array.from(plugins),\n      totalDuration,\n      errorCount,\n      warnCount,\n    };\n  }\n}\n\n","import { box, keyValue, safeKeyValue, hasAnsi } from './format';\nimport { formatTiming } from './command-output';\nimport { safeColors, safeSymbols } from './colors';\nimport {\n  displayArtifacts,\n  type ArtifactInfo,\n  type ArtifactDisplayOptions,\n} from './artifacts-display';\nimport { TimingTracker } from './timing-tracker';\n\n// Optional analytics types - using interface to avoid type resolution errors\n// when @kb-labs/analytics-sdk-node is not installed\ninterface AnalyticsRunScope {\n  (options: { runId?: string; actor?: unknown; ctx?: Record<string, unknown> }, fn: (emit: AnalyticsEmit) => Promise<unknown>): Promise<unknown>;\n}\n\ninterface AnalyticsEmit {\n  (event: Partial<{ type: string; payload: Record<string, unknown> }>): Promise<unknown>;\n}\n\nexport interface CommandPresenter {\n  info(message: string): void;\n  warn?(message: string): void;\n  error(message: string): void;\n  write(payload: string): void;\n  json(payload: unknown): void;\n}\n\nexport interface CommandContext {\n  cwd: string;\n  presenter: CommandPresenter;\n}\n\nexport interface CommandExecutionResult {\n  summary: Record<string, string | number>;\n  artifacts?: ArtifactInfo[];\n  artifactsOptions?: ArtifactDisplayOptions;\n  timing?: number | Record<string, number>;\n  diagnostics?: string[];\n  warnings?: string[];\n  errors?: string[];\n  data?: Record<string, unknown>;\n}\n\nexport interface AnalyticsConfig {\n  actor: string;\n  started: string;\n  finished: string;\n  getPayload?: (flags: Record<string, unknown>, result?: CommandExecutionResult) => Record<string, unknown>;\n}\n\nexport interface CommandRunnerOptions {\n  title: string;\n  analytics?: AnalyticsConfig;\n  execute: (ctx: CommandContext, flags: Record<string, unknown>, tracker: TimingTracker) => Promise<CommandExecutionResult>;\n}\n\nexport function createCommandRunner(options: CommandRunnerOptions) {\n  return async (ctx: CommandContext, argv: string[], flags: Record<string, unknown>): Promise<number> => {\n    const tracker = new TimingTracker();\n    const jsonMode = flags.json === true;\n    const quietMode = flags.quiet === true;\n    let runScope: AnalyticsRunScope | null = null;\n    if (options.analytics !== undefined) {\n      try {\n        // Dynamic import with type assertion to avoid TypeScript errors\n        // @kb-labs/analytics-sdk-node is an optional dependency\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore - optional dependency, types may not be available\n        const analyticsModule = await import('@kb-labs/analytics-sdk-node') as {\n          runScope?: AnalyticsRunScope;\n        };\n        if (analyticsModule.runScope) {\n          runScope = analyticsModule.runScope;\n        }\n      } catch {\n        // Analytics SDK not available, continue without it\n        runScope = null;\n      }\n    }\n\n    const execute = async (): Promise<number> => {\n      tracker.checkpoint('start');\n      try {\n        const result = await options.execute(ctx, flags, tracker);\n        tracker.checkpoint('complete');\n        formatSuccessOutput(ctx, options.title, result, tracker.total(), {\n          jsonMode,\n          quietMode,\n        });\n        return 0;\n      } catch (error) {\n        tracker.checkpoint('error');\n        const message = error instanceof Error ? error.message : String(error);\n        formatErrorOutput(ctx, message, tracker.total(), {\n          jsonMode,\n          quietMode,\n        });\n        return 1;\n      }\n    };\n\n    if (!runScope || !options.analytics) {\n      return execute();\n    }\n\n    const totalStart = Date.now();\n    const result = await runScope(\n      {\n        actor: options.analytics.actor as never,\n        ctx: { workspace: ctx.cwd },\n      },\n      async (emit: AnalyticsEmit) => {\n        await emit({\n          type: options.analytics!.started,\n          payload: options.analytics!.getPayload?.(flags) ?? {},\n        });\n\n        let exitCode = 0;\n        try {\n          exitCode = await execute();\n          await emit({\n            type: options.analytics!.finished,\n            payload: {\n              ...(options.analytics!.getPayload?.(flags) ?? {}),\n              durationMs: Date.now() - totalStart,\n              result: exitCode === 0 ? 'success' : 'error',\n            },\n          });\n        } catch (error) {\n          await emit({\n            type: options.analytics!.finished,\n            payload: {\n              ...(options.analytics!.getPayload?.(flags) ?? {}),\n              durationMs: Date.now() - totalStart,\n              result: 'error',\n              error: error instanceof Error ? error.message : String(error),\n            },\n          });\n          throw error;\n        }\n\n        return exitCode;\n      },\n    );\n\n    return result as number;\n  };\n}\n\ninterface OutputFlags {\n  jsonMode: boolean;\n  quietMode: boolean;\n}\n\nfunction formatSuccessOutput(\n  ctx: CommandContext,\n  title: string,\n  result: CommandExecutionResult,\n  durationMs: number,\n  flags: OutputFlags,\n): void {\n  if (flags.jsonMode) {\n    const payload: Record<string, unknown> = {\n      ok: true,\n      summary: result.summary,\n      timing: result.timing ?? durationMs,\n      diagnostics: result.diagnostics,\n      warnings: result.warnings,\n      errors: result.errors,\n    };\n    if (result.artifacts) {\n      payload.artifacts = result.artifacts;\n    }\n    if (result.data) {\n      Object.assign(payload, result.data);\n    }\n    ctx.presenter.json(payload);\n    return;\n  }\n\n  if (flags.quietMode) {\n    return;\n  }\n\n  const statusEntry = extractStatusEntry(result.summary);\n  const summaryForDisplay: Record<string, string | number> = statusEntry\n    ? { ...result.summary }\n    : result.summary;\n\n  if (statusEntry) {\n    delete summaryForDisplay[statusEntry.key];\n  }\n\n  const lines: string[] = [];\n  const summaryLines = keyValue(summaryForDisplay);\n  if (summaryLines.length > 0) {\n    lines.push(...summaryLines);\n  }\n\n  if (result.artifacts && result.artifacts.length > 0) {\n    if (lines.length > 0) {\n      lines.push('');\n    }\n    lines.push(...displayArtifacts(result.artifacts, result.artifactsOptions));\n  }\n\n  const timing = result.timing ?? durationMs;\n  if (typeof timing !== 'number') {\n    const entries = Object.entries(timing);\n    if (entries.length > 0) {\n      if (lines.length > 0) {\n        lines.push('');\n      }\n      lines.push(safeColors.bold('Timing'));\n      for (const [label, value] of entries) {\n        lines.push(...safeKeyValue({ [label]: formatTiming(value) }, { indent: 2, pad: false }));\n      }\n    }\n  }\n\n  if (result.diagnostics && result.diagnostics.length > 0) {\n    if (lines.length > 0) {\n      lines.push('');\n    }\n    lines.push(safeColors.bold('Diagnostics'));\n    result.diagnostics.forEach((item) => lines.push(safeColors.muted(`- ${item}`)));\n  }\n\n  if (result.warnings && result.warnings.length > 0) {\n    if (lines.length > 0) {\n      lines.push('');\n    }\n    lines.push(safeColors.bold('Warnings'));\n    result.warnings.forEach((item) => lines.push(safeColors.muted(`- ${item}`)));\n  }\n\n  if (result.errors && result.errors.length > 0) {\n    if (lines.length > 0) {\n      lines.push('');\n    }\n    lines.push(safeColors.bold('Errors'));\n    result.errors.forEach((item) => lines.push(safeColors.muted(`- ${item}`)));\n  }\n\n  if (lines.length > 0) {\n    lines.push('');\n  }\n  lines.push(formatStatusLine(statusEntry?.value, durationMs));\n\n  ctx.presenter.write(box(title, lines));\n}\n\nfunction formatErrorOutput(\n  ctx: CommandContext,\n  errorMessage: string,\n  durationMs: number,\n  flags: OutputFlags,\n): void {\n  if (flags.jsonMode) {\n    ctx.presenter.json({\n      ok: false,\n      error: errorMessage,\n      timing: durationMs,\n    });\n    return;\n  }\n\n  if (flags.quietMode) {\n    return;\n  }\n\n  ctx.presenter.error(errorMessage);\n}\n\ninterface StatusEntry {\n  key: string;\n  value: string;\n}\n\nfunction extractStatusEntry(summary: Record<string, string | number>): StatusEntry | null {\n  for (const [key, value] of Object.entries(summary)) {\n    if (typeof value === 'string' && key.toLowerCase().includes('status')) {\n      return { key, value };\n    }\n  }\n  return null;\n}\n\nfunction formatStatusLine(statusValue: string | undefined, durationMs: number): string {\n  const rawStatus = statusValue ?? 'Done';\n  const normalized = rawStatus.toLowerCase();\n\n  let symbol = safeSymbols.success;\n  let colorize = safeColors.success;\n\n  if (normalized.includes('error') || normalized.includes('fail')) {\n    symbol = safeSymbols.error;\n    colorize = safeColors.error;\n  } else if (normalized.includes('partial') || normalized.includes('warn')) {\n    symbol = safeSymbols.warning;\n    colorize = safeColors.warning;\n  }\n\n  const statusText = hasAnsi(rawStatus) ? rawStatus : colorize(rawStatus);\n  return `${symbol} ${statusText} · ${safeColors.muted(formatTiming(durationMs))}`;\n}\n\n","/**\n * Flag system for declarative CLI flag definition with type safety\n *\n * Usage:\n * ```typescript\n * // In contracts\n * export const myFlags = defineFlags({\n *   scope: { type: 'string', description: 'Filter by scope' },\n *   verbose: { type: 'boolean', default: false },\n * });\n *\n * // In command\n * export default defineCommand({\n *   flags: myFlags,\n *   handler: {\n *     async execute(ctx, input: typeof myFlags.type) {\n *       const { scope, verbose } = input;\n *     }\n *   }\n * });\n * ```\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type FlagType = 'string' | 'boolean' | 'number';\n\nexport interface BaseFlagSpec<T extends FlagType> {\n  type: T;\n  description?: string;\n  examples?: string[];\n  deprecated?: boolean | string;\n}\n\nexport interface StringFlagSpec extends BaseFlagSpec<'string'> {\n  default?: string;\n  validate?: (value: string) => void | Promise<void>;\n}\n\nexport interface BooleanFlagSpec extends BaseFlagSpec<'boolean'> {\n  default?: boolean;\n}\n\nexport interface NumberFlagSpec extends BaseFlagSpec<'number'> {\n  default?: number;\n  validate?: (value: number) => void | Promise<void>;\n}\n\nexport type FlagSpec = StringFlagSpec | BooleanFlagSpec | NumberFlagSpec;\n\nexport type FlagsSchema = Record<string, FlagSpec>;\n\n// ============================================================================\n// Type inference\n// ============================================================================\n\ntype InferFlagType<T extends FlagSpec> =\n  T extends StringFlagSpec\n    ? T extends { default: string } ? string : string | undefined\n    : T extends BooleanFlagSpec\n    ? T extends { default: boolean } ? boolean : boolean | undefined\n    : T extends NumberFlagSpec\n    ? T extends { default: number } ? number : number | undefined\n    : never;\n\nexport type InferFlagsType<T extends FlagsSchema> = {\n  [K in keyof T]: InferFlagType<T[K]>;\n};\n\n// ============================================================================\n// defineFlags - main API\n// ============================================================================\n\nexport interface FlagsDefinition<T extends FlagsSchema> {\n  /** Schema for manifest */\n  schema: T;\n  /** Inferred TypeScript type */\n  type: InferFlagsType<T>;\n  /** Parse and validate flags from raw input */\n  parse: (input: unknown) => InferFlagsType<T>;\n}\n\n/**\n * Define CLI flags with type safety and validation\n *\n * @example\n * ```typescript\n * export const commitFlags = defineFlags({\n *   scope: {\n *     type: 'string',\n *     description: 'Limit to package or path',\n *     examples: ['@kb-labs/core', 'packages/**'],\n *   },\n *   'dry-run': {\n *     type: 'boolean',\n *     description: 'Preview without applying',\n *     default: false,\n *   },\n * });\n *\n * // Use in command\n * type MyInput = typeof commitFlags.type;\n * // Result: { scope?: string; 'dry-run': boolean }\n * ```\n */\nexport function defineFlags<T extends FlagsSchema>(schema: T): FlagsDefinition<T> {\n  return {\n    schema,\n    type: {} as InferFlagsType<T>,\n    parse: (input: unknown) => parseFlagsFromInput(input, schema),\n  };\n}\n\n// ============================================================================\n// Runtime parsing and validation\n// ============================================================================\n\n/**\n * Parse flags from raw input with type validation and defaults\n */\nexport function parseFlagsFromInput<T extends FlagsSchema>(\n  input: unknown,\n  schema: T\n): InferFlagsType<T> {\n  const result: Record<string, string | boolean | number | undefined> = {};\n  const rawInput = input as Record<string, unknown>;\n\n  for (const [key, spec] of Object.entries(schema)) {\n    const value = rawInput?.[key];\n\n    // Apply default if value is undefined\n    if (value === undefined) {\n      if ('default' in spec) {\n        result[key] = spec.default;\n      }\n      continue;\n    }\n\n    // Type validation and coercion\n    switch (spec.type) {\n      case 'boolean':\n        result[key] = parseBoolean(value, key);\n        break;\n      case 'string':\n        result[key] = parseString(value, key);\n        // Custom validation for string\n        if (spec.validate && result[key] !== undefined) {\n          spec.validate(result[key]);\n        }\n        break;\n      case 'number':\n        result[key] = parseNumber(value, key);\n        // Custom validation for number\n        if (spec.validate && result[key] !== undefined) {\n          spec.validate(result[key]);\n        }\n        break;\n    }\n  }\n\n  return result as unknown as InferFlagsType<T>;\n}\n\n// ============================================================================\n// Type parsers (exported for reuse in env.ts)\n// ============================================================================\n\nexport function parseBoolean(value: unknown, flagName: string): boolean {\n  if (typeof value === 'boolean') {\n    return value;\n  }\n\n  if (typeof value === 'string') {\n    const lower = value.toLowerCase();\n    if (lower === 'true' || lower === '1' || lower === 'yes') {return true;}\n    if (lower === 'false' || lower === '0' || lower === 'no') {return false;}\n  }\n\n  throw new Error(\n    `Flag \"${flagName}\" must be boolean, got ${typeof value}. ` +\n    `Use true/false or 1/0 or yes/no.`\n  );\n}\n\nexport function parseString(value: unknown, flagName: string): string {\n  if (typeof value === 'string') {\n    return value;\n  }\n\n  // Coerce number to string\n  if (typeof value === 'number') {\n    return String(value);\n  }\n\n  throw new Error(\n    `Flag \"${flagName}\" must be string, got ${typeof value}.`\n  );\n}\n\nexport function parseNumber(value: unknown, flagName: string): number {\n  if (typeof value === 'number') {\n    if (!Number.isFinite(value)) {\n      throw new Error(`Flag \"${flagName}\" must be finite number, got ${value}.`);\n    }\n    return value;\n  }\n\n  if (typeof value === 'string') {\n    const trimmed = value.trim();\n    const parsed = Number(trimmed);\n    if (!Number.isFinite(parsed)) {\n      throw new Error(\n        `Flag \"${flagName}\" must be number, got invalid string \"${value}\".`\n      );\n    }\n    return parsed;\n  }\n\n  throw new Error(\n    `Flag \"${flagName}\" must be number, got ${typeof value}.`\n  );\n}\n\n// ============================================================================\n// Legacy helper (keep for backward compatibility)\n// ============================================================================\n\nexport function parseNumberFlag(value: unknown): number | undefined {\n  if (typeof value === 'number') {\n    return Number.isFinite(value) ? value : undefined;\n  }\n\n  if (typeof value === 'string') {\n    const trimmed = value.trim();\n    if (trimmed.length === 0) {\n      return undefined;\n    }\n\n    const parsed = Number(trimmed);\n    return Number.isFinite(parsed) ? parsed : undefined;\n  }\n\n  return undefined;\n}\n\n// ============================================================================\n// Utility: Merge input.flags into input (for V3 compatibility)\n// ============================================================================\n\n/**\n * Merge input.flags into input root (V3 compatibility helper)\n *\n * @example\n * ```typescript\n * const raw = { scope: 'old', flags: { scope: 'new', json: true } };\n * const merged = mergeFlags(raw);\n * // Result: { scope: 'new', json: true, flags: {...} }\n * ```\n */\nexport function mergeFlags<T extends Record<string, unknown>>(input: T): T {\n  if (!input.flags || typeof input.flags !== 'object') {\n    return input;\n  }\n\n  // Merge: root values first, then flags override\n  return { ...input, ...input.flags };\n}\n","/**\n * Environment variable system for declarative env definition with type safety\n *\n * Usage:\n * ```typescript\n * // In contracts\n * export const myEnv = defineEnv({\n *   MY_API_KEY: { type: 'string', description: 'API key for service' },\n *   MY_ENABLED: { type: 'boolean', default: true },\n *   MY_TIMEOUT: { type: 'number', default: 5000 },\n * });\n *\n * // In command\n * export default defineCommand({\n *   handler: {\n *     async execute(ctx, input) {\n *       const env = myEnv.parse(ctx.runtime);\n *       console.log(env.MY_API_KEY); // string | undefined\n *       console.log(env.MY_ENABLED); // boolean\n *     }\n *   }\n * });\n * ```\n */\n\nimport {\n  type FlagSpec,\n  type FlagsSchema,\n  type InferFlagsType,\n  parseBoolean,\n  parseString,\n  parseNumber,\n} from './flags.js';\n\n/**\n * Runtime API interface (minimal for env parsing)\n * Avoids dependency on @kb-labs/plugin-contracts\n */\nexport interface RuntimeLike {\n  env(key: string): string | undefined;\n}\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Environment variable schema (reuses FlagSpec types)\n */\nexport type EnvSchema = FlagsSchema;\n\n/**\n * Environment variable definition with parse method\n */\nexport interface EnvDefinition<T extends EnvSchema> {\n  /** Schema for documentation and validation */\n  schema: T;\n  /** Inferred TypeScript type */\n  type: InferFlagsType<T>;\n  /** Parse environment variables from RuntimeLike */\n  parse: (runtime: RuntimeLike) => InferFlagsType<T>;\n}\n\n// ============================================================================\n// defineEnv - main API\n// ============================================================================\n\n/**\n * Define environment variables with type safety and validation\n *\n * @example\n * ```typescript\n * export const commitEnv = defineEnv({\n *   KB_COMMIT_LLM_ENABLED: {\n *     type: 'boolean',\n *     default: true,\n *     description: 'Enable LLM analysis',\n *   },\n *   KB_COMMIT_LLM_TEMPERATURE: {\n *     type: 'number',\n *     default: 0.3,\n *     description: 'LLM temperature (0-1)',\n *     validate: (v) => {\n *       if (v < 0 || v > 1) throw new Error('Must be 0-1');\n *     },\n *   },\n * });\n *\n * // Use in command\n * const env = commitEnv.parse(ctx.runtime);\n * // Type: { KB_COMMIT_LLM_ENABLED: boolean; KB_COMMIT_LLM_TEMPERATURE: number }\n * ```\n */\nexport function defineEnv<T extends EnvSchema>(schema: T): EnvDefinition<T> {\n  return {\n    schema,\n    type: {} as InferFlagsType<T>,\n    parse: (runtime: RuntimeLike) => parseEnvFromRuntime(runtime, schema),\n  };\n}\n\n// ============================================================================\n// Runtime parsing\n// ============================================================================\n\n/**\n * Parse environment variables from RuntimeLike with validation and defaults\n */\nexport function parseEnvFromRuntime<T extends EnvSchema>(\n  runtime: RuntimeLike,\n  schema: T\n): InferFlagsType<T> {\n  const result: Record<string, unknown> = {};\n\n  for (const [key, spec] of Object.entries(schema)) {\n    const rawValue = runtime.env(key);\n\n    // Apply default if undefined\n    if (rawValue === undefined) {\n      if ('default' in spec) {\n        result[key] = spec.default;\n      }\n      continue;\n    }\n\n    // Parse based on type (reuse parsers from flags)\n    result[key] = parseEnvValue(rawValue, key, spec);\n  }\n\n  return result as unknown as InferFlagsType<T>;\n}\n\n/**\n * Parse single env value with type validation\n */\nfunction parseEnvValue(value: string | undefined, key: string, spec: FlagSpec): string | boolean | number | undefined {\n  if (value === undefined) {\n    return undefined;\n  }\n\n  switch (spec.type) {\n    case 'boolean':\n      return parseBoolean(value, key);\n\n    case 'string':\n      const strValue = parseString(value, key);\n      // Custom validation for string\n      if (spec.validate) {\n        spec.validate(strValue);\n      }\n      return strValue;\n\n    case 'number':\n      const numValue = parseNumber(value, key);\n      // Custom validation for number\n      if (spec.validate) {\n        spec.validate(numValue);\n      }\n      return numValue;\n\n    default:\n      return value;\n  }\n}\n","/**\n * Resolve the current working directory from a CLI context-like object.\n * Falls back to the process cwd when the context does not provide one.\n */\nexport function getContextCwd(input: { cwd?: string } | undefined): string {\n  if (input && typeof input.cwd === \"string\" && input.cwd.length > 0) {\n    return input.cwd;\n  }\n  return process.cwd();\n}\n\n\n","/**\n * Normalize filesystem paths to POSIX (forward-slash) form.\n */\nexport function toPosixPath(input: string): string {\n  return input.replace(/\\\\/g, \"/\");\n}\n\n\n","export interface RetryOptions {\n  attempts?: number;\n  delay?: number;\n  backoff?: 'fixed' | 'exponential';\n  onRetry?: (error: unknown, attempt: number) => void;\n}\n\nasync function sleepForRetry(\n  attempt: number,\n  delay: number,\n  backoff: 'fixed' | 'exponential',\n): Promise<void> {\n  if (delay <= 0) { return; }\n  const wait = backoff === 'exponential' ? delay * 2 ** (attempt - 1) : delay;\n  await new Promise<void>((resolve) => { setTimeout(resolve, wait); });\n}\n\nexport async function withRetry<T>(\n  fn: () => Promise<T>,\n  options: RetryOptions = {},\n): Promise<T> {\n  if (typeof fn !== 'function') {\n    throw new TypeError('fn must be a function');\n  }\n\n  const { attempts = 3, delay = 0, backoff = 'fixed', onRetry } = options;\n\n  if (attempts < 1) {\n    throw new RangeError(`attempts must be >= 1, got ${attempts}`);\n  }\n  if (delay < 0) {\n    throw new RangeError(`delay must be >= 0, got ${delay}`);\n  }\n\n  let lastError: unknown;\n\n  for (let attempt = 1; attempt <= attempts; attempt++) {\n    try {\n      return await fn();\n    } catch (err) {\n      lastError = err;\n      if (attempt < attempts) {\n        onRetry?.(err, attempt);\n        await sleepForRetry(attempt, delay, backoff);\n      }\n    }\n  }\n\n  throw lastError;\n}\n","interface ErrorContext {\n  ui?: {\n    json?: (data: unknown) => void;\n    error?: (message: string, opts?: Record<string, unknown>) => void;\n  };\n}\n\n/**\n * Structured validation error — emits { ok: false, error: { code: 'INVALID_ARGS', ... } } in JSON mode.\n * Call before try/catch, right before `return { exitCode: 1 }`.\n */\nexport function validationError(\n  ctx: ErrorContext,\n  message: string,\n  hint?: string,\n  isJson?: boolean,\n): void {\n  if (isJson) {\n    ctx.ui?.json?.({ ok: false, error: { code: 'INVALID_ARGS', message, ...(hint && { hint }) } });\n  } else {\n    ctx.ui?.error?.(message, { ...(hint && { hint }) });\n  }\n}\n\n/**\n * Structured runtime/API error — emits { ok: false, error: { code: 'INTERNAL_ERROR', ... } } in JSON mode.\n * Call in catch blocks, right before `return { exitCode: 1 }`.\n */\nexport function handleError(ctx: ErrorContext, err: unknown, isJson?: boolean): void {\n  const message = err instanceof Error ? err.message : String(err);\n  if (isJson) {\n    ctx.ui?.json?.({ ok: false, error: { code: 'INTERNAL_ERROR', message } });\n  } else {\n    ctx.ui?.error?.(message);\n  }\n}\n\n/**\n * Re-throws `err` as an HTTP-aware error for REST handlers.\n * Envelope middleware reads `err.statusCode` to set HTTP status.\n * If err already has statusCode — preserves it. Otherwise → 500.\n */\nexport function rethrowForRest(err: unknown): never {\n  if (err !== null && typeof err === 'object' && 'statusCode' in err) {\n    throw err;\n  }\n  const message = err instanceof Error ? err.message : String(err);\n  throw Object.assign(new Error(message), {\n    statusCode: 500,\n    code: 'INTERNAL_ERROR',\n  });\n}\n","import type { CommandFailure } from '@kb-labs/plugin-contracts';\n\n/**\n * Destructive-action protocol (SOFT layer).\n *\n * A single, platform-wide way for a command to declare that an operation is\n * destructive — how bad, how broad, and whether it can be undone — and to gate\n * it behind explicit confirmation in EVERY mode (human and agent).\n *\n * This layer is intentionally SOFT: it informs and asks, it does not enforce.\n * Physical enforcement (can-this-token-even-invoke-this) is the platform's\n * future token/permission layer; it reads the SAME `severity`/`destructive`\n * declaration on the command. So one declaration drives both:\n *   - now:   this helper renders a clear signal + requires `--yes`;\n *   - later: the permission layer filters discovery + blocks invocation by right.\n *\n * Declaring it is OPTIONAL for external plugins (commands work without it) but\n * strongly recommended — agents can only reason about blast radius they're told.\n */\n\nexport type DestructiveSeverity = 'low' | 'medium' | 'high' | 'critical';\n\n/**\n * Severity rubric — worst-case blast radius weighed against recovery cost\n * (keep consistent across plugins so agents can calibrate):\n *  - low      narrow scope AND trivially auto-rebuilt from source (idempotent)\n *  - medium   a bounded set is lost; rebuildable, but with effort/recompute\n *  - high     a WHOLE collection is destroyed (entire index/corpus), OR recovery\n *             is slow / manual — even if rebuildable, the loss is large and\n *             easy to mis-target\n *  - critical irreversible, NO recovery (prod data, tenant wipe)\n */\nexport interface DestructiveAction {\n  /** Command identity, e.g. \"mind drop\". */\n  action: string;\n  /** What is affected, e.g. 'index \"code\"'. */\n  resource: string;\n  /** Plain-language effect, e.g. \"deletes all vectors + the manifest\". */\n  effect: string;\n  /** Blast-radius tier. */\n  severity: DestructiveSeverity;\n  /** Whether the data can be recovered afterwards. */\n  reversible: boolean;\n  /** How to recover, if reversible (e.g. \"re-run `kb mind index --full`\"). */\n  recovery?: string;\n  /** Quantified scope — how much, of what, how broad. */\n  blastRadius?: { count?: number; unit?: string; scope?: string };\n  /** Flag that confirms the action (default `--yes`). */\n  confirmFlag?: string;\n}\n\n/** The machine-readable signal an agent receives when confirmation is missing. */\nexport interface ConfirmationRequired {\n  ok: false;\n  confirmationRequired: true;\n  destructive: true;\n  irreversible: boolean;\n  severity: DestructiveSeverity;\n  action: string;\n  resource: string;\n  effect: string;\n  reversible: boolean;\n  blastRadius?: { count?: number; unit?: string; scope?: string };\n  recovery?: string;\n  confirmWith: string;\n  message: string;\n}\n\ninterface ConfirmContext {\n  ui?: {\n    json?: (data: unknown) => void;\n    warn?: (message: string, opts?: Record<string, unknown>) => void;\n    error?: (message: string, opts?: Record<string, unknown>) => void;\n  };\n}\n\n/**\n * Build the machine-readable signal an agent receives when confirmation is\n * missing in json mode. Exported so a non-CLI surface (REST 409, MCP) can reuse\n * the exact shape instead of re-deriving it.\n */\nexport function buildConfirmationSignal(a: DestructiveAction): ConfirmationRequired {\n  return {\n    ok: false,\n    confirmationRequired: true,\n    destructive: true,\n    irreversible: !a.reversible,\n    severity: a.severity,\n    action: a.action,\n    resource: a.resource,\n    effect: a.effect,\n    reversible: a.reversible,\n    ...(a.blastRadius && { blastRadius: a.blastRadius }),\n    ...(a.recovery && { recovery: a.recovery }),\n    confirmWith: a.confirmFlag ?? '--yes',\n    message: renderDestructiveMessage(a),\n  };\n}\n\n/** Render the one-line warning — leads with the scary part (irreversibility + severity). */\nexport function renderDestructiveMessage(a: DestructiveAction): string {\n  const flag = a.confirmFlag ?? '--yes';\n  const br = a.blastRadius;\n  const blast = br\n    ? ` (${[br.count != null ? `${br.count} ${br.unit ?? 'item(s)'}` : '', br.scope].filter(Boolean).join(' · ')})`\n    : '';\n  const lead = a.reversible ? `[${a.severity}]` : `⚠ IRREVERSIBLE [${a.severity}]`;\n  const rec = a.recovery\n    ? ` Recovery: ${a.recovery}.`\n    : a.reversible\n      ? ''\n      : ' No recovery — data is permanently lost.';\n  return `${lead} ${a.action} — ${a.effect} on ${a.resource}${blast}.${rec} Confirm with ${flag}.`;\n}\n\n/**\n * Gate a destructive command. Returns the command result to return immediately\n * when NOT confirmed (in every mode — agents get the structured signal, not a\n * silent execution), or `null` when confirmed so the caller proceeds.\n *\n *   const blocked = confirmDestructive(ctx, { confirmed: flags.yes, isJson, action });\n *   if (blocked) return blocked;\n */\nexport function confirmDestructive(\n  ctx: ConfirmContext,\n  opts: { confirmed: boolean; isJson?: boolean; action: DestructiveAction },\n): CommandFailure | null {\n  if (opts.confirmed) {\n    return null;\n  }\n  const a = opts.action;\n  const signal = buildConfirmationSignal(a);\n  if (opts.isJson) {\n    // Machine-readable signal — `ctx.ui.json` emits one parseable line by\n    // default (the agent extracts it with `grep \"^{\"`).\n    ctx.ui?.json?.(signal);\n  } else {\n    (ctx.ui?.warn ?? ctx.ui?.error)?.(renderDestructiveMessage(a));\n  }\n  return {\n    ok: false,\n    error: {\n      code: 'CONFIRMATION_REQUIRED',\n      kind: 'validation',\n      message: signal.message,\n      details: { ...signal },\n    },\n    result: signal,\n  };\n}\n","/**\n * Modern CLI formatting utilities with side border design\n * Provides minimalist, modern UI components for CLI output\n */\n\nimport { safeColors, safeSymbols } from './colors';\nimport { stripAnsi, bulletList as baseBulletList } from './format';\nimport { formatTiming as baseFormatTiming } from './command-output';\n\n/**\n * Side border box - Clack-style design\n *\n * @example\n * ```\n * ◆  Command Name\n * │\n * │  Section Header\n * │  Key: value\n * │\n * └  ✓ Success  84ms\n * ```\n */\nexport interface SideBorderBoxOptions {\n  title: string;\n  sections: SectionContent[];\n  footer?: string;\n  status?: 'success' | 'error' | 'warning' | 'info';\n  timing?: number;\n  summary?: Record<string, string | number | boolean>;\n}\n\nexport interface RichSectionItem {\n  text: string;\n  /** Render text in muted/dim color */\n  dim?: boolean;\n  /** Hard-truncate to N visible chars instead of wrapping */\n  truncate?: number;\n}\n\n/** A section item — either a plain string or a rich descriptor */\nexport type SectionItem = string | RichSectionItem;\n\nexport interface SectionContent {\n  header?: string;\n  items: SectionItem[];\n}\n\n/**\n * Create a side-bordered box with modern design\n */\nexport function sideBorderBox(options: SideBorderBoxOptions): string {\n  const { title, sections, footer, status, timing, summary } = options;\n  const lines: string[] = [];\n\n  const terminalWidth =\n    typeof process !== 'undefined' && process.stdout?.columns\n      ? process.stdout.columns\n      : 80;\n  // Available width for item content: terminalWidth minus \"│  \" prefix (3) and 1 right margin\n  const itemMaxWidth = Math.max(40, terminalWidth - 4);\n\n  // Title line: ◆  Title\n  const titleLine = `${safeColors.primary('◆')}  ${safeColors.bold(title)}`;\n  lines.push(titleLine);\n  lines.push(safeColors.muted('│'));\n\n  // Summary key-value pairs rendered before sections\n  if (summary && Object.keys(summary).length > 0) {\n    const entries = Object.entries(summary).map(([k, v]) => [k, String(v)] as [string, string]);\n    const metricsRecord: Record<string, string> = Object.fromEntries(entries);\n    const metricsLines = metricsList(metricsRecord);\n    for (const line of metricsLines) {\n      lines.push(`${safeColors.muted('│')}  ${line}`);\n    }\n    if (sections.length > 0) {\n      lines.push(safeColors.muted('│'));\n    }\n  }\n\n  // Sections\n  for (let i = 0; i < sections.length; i++) {\n    const section = sections[i];\n    if (!section) {continue;}\n\n    // Section header (optional)\n    if (section.header) {\n      lines.push(`${safeColors.muted('│')}  ${safeColors.bold(section.header)}`);\n    }\n\n    // Section items — word-wrapped and multiline-safe\n    for (const rawItem of section.items) {\n      const item = typeof rawItem === 'string' ? { text: rawItem } : rawItem;\n      let displayLines: string[];\n\n      if (item.truncate !== undefined) {\n        const vis = stripAnsi(item.text);\n        const truncated = vis.length > item.truncate\n          ? ansiSlice(item.text, item.truncate - 1) + '…'\n          : item.text;\n        displayLines = [item.dim ? safeColors.muted(stripAnsi(truncated)) : truncated];\n      } else {\n        const wrapped = wrapText(item.text, itemMaxWidth);\n        displayLines = item.dim ? wrapped.map(l => safeColors.muted(l)) : wrapped;\n      }\n\n      for (const dl of displayLines) {\n        lines.push(`${safeColors.muted('│')}  ${dl}`);\n      }\n    }\n\n    // Add spacing between sections (but not after the last one)\n    if (i < sections.length - 1) {\n      lines.push(safeColors.muted('│'));\n    }\n  }\n\n  // Bottom line: └  ✓ Success  84ms\n  if (footer || status || timing !== undefined) {\n    if (lines[lines.length - 1] !== safeColors.muted('│')) {\n      lines.push(safeColors.muted('│'));\n    }\n    const footerParts: string[] = [];\n\n    if (footer) {\n      footerParts.push(footer);\n    } else if (status) {\n      const statusSymbol = getStatusSymbol(status);\n      const statusColor = getStatusColor(status);\n      footerParts.push(statusColor(`${statusSymbol}`));\n    }\n\n    if (timing !== undefined) {\n      footerParts.push(safeColors.muted(formatTiming(timing)));\n    }\n\n    const footerLine = `${safeColors.muted('└')}  ${footerParts.join('  ')}`;\n    lines.push(footerLine);\n  }\n\n  return lines.join('\\n');\n}\n\n/**\n * Format a section header\n */\nexport function sectionHeader(text: string): string {\n  return safeColors.bold(text);\n}\n\n/**\n * Format metrics list (key: value pairs with aligned values)\n */\nexport function metricsList(metrics: Record<string, string | number>): string[] {\n  const entries = Object.entries(metrics);\n  if (entries.length === 0) {return [];}\n\n  // Find max key length for alignment\n  const maxKeyLength = Math.max(\n    ...entries.map(([key]) => stripAnsi(key).length)\n  );\n\n  return entries.map(([key, value]) => {\n    const keyLength = stripAnsi(key).length;\n    const padding = ' '.repeat(maxKeyLength - keyLength + 2);\n    const formattedKey = safeColors.bold(key);\n    const formattedValue = safeColors.muted(String(value));\n    return `${formattedKey}:${padding}${formattedValue}`;\n  });\n}\n\n/**\n * Format a bullet list (re-exported from base utilities)\n */\nexport const bulletList = baseBulletList;\n\n/**\n * Format timing (re-exported from command-output)\n */\nexport const formatTiming = baseFormatTiming;\n\n/**\n * Format status line for footer\n */\nexport function statusLine(\n  status: 'success' | 'error' | 'warning' | 'info',\n  timing?: number\n): string {\n  const symbol = getStatusSymbol(status);\n  const color = getStatusColor(status);\n\n  const parts = [color(symbol)];\n\n  if (timing !== undefined) {\n    parts.push(safeColors.muted(formatTiming(timing)));\n  }\n\n  return parts.join('  ');\n}\n\n// Helper functions\n\n/**\n * Slice a string to maxVisible visible characters, preserving ANSI escape codes.\n */\nfunction ansiSlice(str: string, maxVisible: number): string {\n  let visible = 0;\n  let i = 0;\n  let result = '';\n  while (i < str.length) {\n    if (str[i] === '\\x1b' && str[i + 1] === '[') {\n      let j = i + 2;\n      while (j < str.length && !/[A-Za-z]/.test(str[j]!)) { j++; }\n      result += str.slice(i, j + 1);\n      i = j + 1;\n    } else {\n      if (visible >= maxVisible) { break; }\n      result += str[i];\n      visible++;\n      i++;\n    }\n  }\n  return result;\n}\n\nfunction getStatusSymbol(status: 'success' | 'error' | 'warning' | 'info'): string {\n  switch (status) {\n    case 'success':\n      return safeSymbols.success;\n    case 'error':\n      return safeSymbols.error;\n    case 'warning':\n      return safeSymbols.warning;\n    case 'info':\n      return safeSymbols.info;\n  }\n}\n\nfunction getStatusColor(status: 'success' | 'error' | 'warning' | 'info'): (text: string) => string {\n  switch (status) {\n    case 'success':\n      return safeColors.success;\n    case 'error':\n      return safeColors.error;\n    case 'warning':\n      return safeColors.warning;\n    case 'info':\n      return safeColors.info;\n  }\n}\n\n/**\n * Word-wrap plain text to maxWidth visible characters.\n * Handles existing newlines and long words (hard-truncated with ellipsis).\n */\nfunction wrapText(text: string, maxWidth: number): string[] {\n  const result: string[] = [];\n  const rawLines = text.split('\\n');\n  for (const rawLine of rawLines) {\n    const line = rawLine.trimEnd();\n    if (stripAnsi(line).length <= maxWidth) {\n      result.push(line);\n      continue;\n    }\n    const words = line.split(/(\\s+)/);\n    let current = '';\n    for (const word of words) {\n      const test = current + word;\n      if (stripAnsi(test).length <= maxWidth) {\n        current = test;\n      } else {\n        if (current.trimEnd()) {result.push(current.trimEnd());}\n        const wordLen = stripAnsi(word).length;\n        if (wordLen > maxWidth) {\n          // Hard-truncate a single oversized word\n          result.push(stripAnsi(word).slice(0, maxWidth - 1) + '…');\n          current = '';\n        } else {\n          current = word;\n        }\n      }\n    }\n    if (current.trimEnd()) {result.push(current.trimEnd());}\n  }\n  return result.length > 0 ? result : [''];\n}\n\n/**\n * A single block in a chained output — a title + sections with optional footer on the last block.\n */\nexport interface SideBorderChainItem {\n  title: string;\n  sections: SectionContent[];\n  summary?: Record<string, string | number | boolean>;\n  status?: 'success' | 'error' | 'warning' | 'info';\n  timing?: number;\n}\n\n/**\n * Render multiple side-border blocks as a continuous visual chain.\n *\n * Every block opens with `◆  Title` on the shared rail.\n * Only the last block gets `└  status  timing`.\n *\n * @example\n * ```\n * ◆  workflow metrics\n * │\n * │  Failed to fetch metrics\n * │\n * ◆  Warning\n * │\n * │  Make sure daemon is running\n * │\n * └  ✗  12ms\n * ```\n */\n// eslint-disable-next-line sonarjs/cognitive-complexity\nexport function sideBorderChain(items: SideBorderChainItem[]): string {\n  if (items.length === 0) { return ''; }\n  if (items.length === 1) {\n    const item = items[0]!;\n    return sideBorderBox({ title: item.title, sections: item.sections, status: item.status, timing: item.timing });\n  }\n\n  const lines: string[] = [];\n  const terminalWidth =\n    typeof process !== 'undefined' && process.stdout?.columns\n      ? process.stdout.columns\n      : 80;\n  const itemMaxWidth = Math.max(40, terminalWidth - 4);\n\n  for (let blockIdx = 0; blockIdx < items.length; blockIdx++) {\n    const block = items[blockIdx]!;\n    const isLast = blockIdx === items.length - 1;\n\n    // Block header: ◆  Title\n    lines.push(`${safeColors.primary('◆')}  ${safeColors.bold(block.title)}`);\n    lines.push(safeColors.muted('│'));\n\n    // Summary key-value pairs\n    if (block.summary && Object.keys(block.summary).length > 0) {\n      const entries = Object.entries(block.summary).map(([k, v]) => [k, String(v)] as [string, string]);\n      const metricsRecord: Record<string, string> = Object.fromEntries(entries);\n      const metricsLines = metricsList(metricsRecord);\n      for (const line of metricsLines) {\n        lines.push(`${safeColors.muted('│')}  ${line}`);\n      }\n      if (block.sections.length > 0) {\n        lines.push(safeColors.muted('│'));\n      }\n    }\n\n    // Sections\n    for (let i = 0; i < block.sections.length; i++) {\n      const section = block.sections[i];\n      if (!section) { continue; }\n\n      if (section.header) {\n        lines.push(`${safeColors.muted('│')}  ${safeColors.bold(section.header)}`);\n      }\n\n      for (const rawItem of section.items) {\n        const item = typeof rawItem === 'string' ? { text: rawItem } : rawItem;\n        let displayLines: string[];\n\n        if (item.truncate !== undefined) {\n          const vis = stripAnsi(item.text);\n          const truncated = vis.length > item.truncate\n            ? ansiSlice(item.text, item.truncate - 1) + '…'\n            : item.text;\n          displayLines = [item.dim ? safeColors.muted(stripAnsi(truncated)) : truncated];\n        } else {\n          const wrapped = wrapText(item.text, itemMaxWidth);\n          displayLines = item.dim ? wrapped.map(l => safeColors.muted(l)) : wrapped;\n        }\n\n        for (const dl of displayLines) {\n          lines.push(`${safeColors.muted('│')}  ${dl}`);\n        }\n      }\n\n      if (i < block.sections.length - 1) {\n        lines.push(safeColors.muted('│'));\n      }\n    }\n\n    if (isLast) {\n      if (block.status || block.timing !== undefined) {\n        lines.push(safeColors.muted('│'));\n        const footerParts: string[] = [];\n        if (block.status) {\n          footerParts.push(getStatusColor(block.status)(getStatusSymbol(block.status)));\n        }\n        if (block.timing !== undefined) {\n          footerParts.push(safeColors.muted(formatTiming(block.timing)));\n        }\n        lines.push(`${safeColors.muted('└')}  ${footerParts.join('  ')}`);\n      }\n    } else {\n      // Blank rail line before next ◆ — only if not already there\n      if (lines[lines.length - 1] !== safeColors.muted('│')) {\n        lines.push(safeColors.muted('│'));\n      }\n    }\n  }\n\n  return lines.join('\\n');\n}\n\n/**\n * Convert an Error or raw string into clean display lines for sideBorderBox items.\n * Splits on newlines, removes blank lines, and caps at maxLines with a \"… N more\" hint.\n *\n * @example\n * items: formatError(err, { maxLines: 6 })\n */\nexport function formatError(err: Error | string, opts?: { maxLines?: number }): string[] {\n  const raw = err instanceof Error ? err.message : String(err);\n  const allLines = raw.split('\\n').map(l => l.trimEnd()).filter(l => l.length > 0);\n  const max = opts?.maxLines ?? 8;\n  if (allLines.length <= max) {return allLines;}\n  const shown = allLines.slice(0, max - 1);\n  shown.push(safeColors.muted(`… ${allLines.length - max + 1} more lines`));\n  return shown;\n}\n\n/**\n * Format command help in modern side-border style\n *\n * @example\n * ```typescript\n * const help = formatCommandHelp({\n *   title: 'kb version',\n *   description: 'Show CLI version',\n *   longDescription: 'Displays the current version...',\n *   examples: ['kb version', 'kb version --json'],\n *   flags: [{name: 'json', description: 'Output in JSON'}]\n * });\n * ```\n */\nexport function formatCommandHelp(options: {\n  title: string;\n  description?: string;\n  longDescription?: string;\n  examples?: string[];\n  flags?: Array<{ name: string; alias?: string; description?: string; required?: boolean }>;\n  aliases?: string[];\n}): string {\n  const { title, description, longDescription, examples, flags, aliases } = options;\n  const sections: SectionContent[] = [];\n\n  // Description section\n  if (description) {\n    sections.push({\n      header: 'Description',\n      items: [description],\n    });\n  }\n\n  // Long description\n  if (longDescription) {\n    sections.push({\n      header: 'Details',\n      items: [longDescription],\n    });\n  }\n\n  // Aliases\n  if (aliases && aliases.length > 0) {\n    sections.push({\n      header: 'Aliases',\n      items: aliases.map(a => safeColors.muted(a)),\n    });\n  }\n\n  // Flags\n  if (flags && flags.length > 0) {\n    const flagItems = flags.map(flag => {\n      const label = flag.alias\n        ? `--${flag.name}, -${flag.alias}`\n        : `--${flag.name}`;\n      const required = flag.required ? safeColors.warning(' (required)') : '';\n      const desc = flag.description ? safeColors.muted(` — ${flag.description}`) : '';\n      return `${safeColors.bold(label)}${required}${desc}`;\n    });\n    sections.push({\n      header: 'Flags',\n      items: flagItems,\n    });\n  }\n\n  // Examples\n  if (examples && examples.length > 0) {\n    sections.push({\n      header: 'Examples',\n      items: examples.map(ex => safeColors.muted(`  ${ex}`)),\n    });\n  }\n\n  return sideBorderBox({\n    title,\n    sections,\n    status: 'info',\n  });\n}\n","/**\n * Command result formatting utilities\n * Provides high and low-level APIs for formatting command output\n */\n\nimport {\n  sideBorderBox,\n  metricsList,\n  bulletList,\n  type SectionContent,\n} from './modern-format';\n\n/**\n * Command output with human and machine-readable formats\n * Extends CommandResult contract from command-kit\n */\nexport interface CommandOutput {\n  /** Whether command executed successfully - required by CommandResult contract */\n  ok: boolean;\n  /** Execution status */\n  status?: 'success' | 'error' | 'warning' | 'info' | 'failed' | 'cancelled' | 'skipped';\n  /** Human-readable output (side border format) */\n  human: string;\n  /** Machine-readable output (JSON) */\n  json: object;\n  /** Agent-specific output (optional, for --agent flag) */\n  agent?: object;\n}\n\n/**\n * Parameters for formatting command results\n */\nexport interface CommandResultParams {\n  title: string;\n  summary?: Record<string, string | number>;\n  details?: Array<{ section: string; items: string[] }>;\n  warnings?: string[];\n  errors?: string[];\n  timing?: number;\n  status: 'success' | 'error' | 'warning' | 'info';\n  /** Custom JSON data (optional) */\n  jsonData?: object;\n}\n\n/**\n * Low-level: Format command result with full control\n *\n * @example\n * ```typescript\n * const output = formatCommandResult({\n *   title: 'System Diagnostics',\n *   summary: { 'Total Checks': 4, 'OK': 3 },\n *   details: [\n *     { section: 'Environment', items: ['Node 20.11.0'] }\n *   ],\n *   warnings: ['Cache is old'],\n *   timing: 150,\n *   status: 'success',\n * });\n *\n * console.log(output.human);  // Pretty CLI output\n * console.log(output.json);   // JSON for --json flag\n * ```\n */\nexport function formatCommandResult(params: CommandResultParams): CommandOutput {\n  const {\n    title,\n    summary,\n    details = [],\n    warnings = [],\n    errors = [],\n    timing,\n    status,\n    jsonData,\n  } = params;\n\n  // Build sections for human output\n  const sections: SectionContent[] = [];\n\n  // Summary section\n  if (summary && Object.keys(summary).length > 0) {\n    sections.push({\n      header: 'Summary',\n      items: metricsList(summary),\n    });\n  }\n\n  // Details sections\n  for (const detail of details) {\n    sections.push({\n      header: detail.section,\n      items: detail.items,\n    });\n  }\n\n  // Warnings section\n  if (warnings.length > 0) {\n    sections.push({\n      header: '⚠ Warnings',\n      items: bulletList(warnings),\n    });\n  }\n\n  // Errors section\n  if (errors.length > 0) {\n    sections.push({\n      header: '✗ Errors',\n      items: bulletList(errors),\n    });\n  }\n\n  // Generate human-readable output\n  const human = sideBorderBox({\n    title,\n    sections,\n    status,\n    timing,\n  });\n\n  // Generate JSON output\n  const json: Record<string, unknown> = {\n    ok: status === 'success',\n    status,\n    ...(summary && { summary }),\n    ...(details.length > 0 && {\n      details: details.reduce((acc, d) => {\n        acc[d.section] = d.items;\n        return acc;\n      }, {} as Record<string, string[]>),\n    }),\n    ...(warnings.length > 0 && { warnings }),\n    ...(errors.length > 0 && { errors }),\n    ...(timing !== undefined && { timingMs: timing }),\n    ...(jsonData && { data: jsonData }),\n  };\n\n  return {\n    ok: status === 'success',\n    status,\n    human,\n    json\n  };\n}\n\n/**\n * High-level: Quick success result\n *\n * @example\n * ```typescript\n * return successResult('Version Info', {\n *   summary: { 'CLI Version': '0.1.0' },\n *   timing: 5,\n * });\n * ```\n */\nexport function successResult(\n  title: string,\n  data?: {\n    summary?: Record<string, string | number>;\n    details?: Array<{ section: string; items: string[] }>;\n    timing?: number;\n    json?: object;\n  }\n): CommandOutput {\n  return formatCommandResult({\n    title,\n    summary: data?.summary,\n    details: data?.details,\n    timing: data?.timing,\n    status: 'success',\n    jsonData: data?.json,\n  });\n}\n\n/**\n * High-level: Quick error result\n *\n * @example\n * ```typescript\n * return errorResult('Command Failed', new Error('Something went wrong'), {\n *   timing: 100,\n *   suggestions: ['Try running with --debug flag'],\n * });\n * ```\n */\nexport function errorResult(\n  title: string,\n  error: Error | string,\n  options?: {\n    timing?: number;\n    suggestions?: string[];\n  }\n): CommandOutput {\n  const errorMessage = error instanceof Error ? error.message : error;\n  const errorStack = error instanceof Error ? error.stack : undefined;\n\n  return formatCommandResult({\n    title,\n    errors: [errorMessage],\n    details: options?.suggestions\n      ? [{ section: 'Suggestions', items: bulletList(options.suggestions) }]\n      : [],\n    timing: options?.timing,\n    status: 'error',\n    jsonData: {\n      error: errorMessage,\n      ...(errorStack && { stack: errorStack }),\n    },\n  });\n}\n\n/**\n * High-level: Quick warning result\n *\n * @example\n * ```typescript\n * return warningResult('Configuration Updated', ['Deprecated option used'], {\n *   summary: { 'Files Updated': 3 },\n *   timing: 50,\n * });\n * ```\n */\nexport function warningResult(\n  title: string,\n  warnings: string[],\n  options?: {\n    summary?: Record<string, string | number>;\n    timing?: number;\n  }\n): CommandOutput {\n  return formatCommandResult({\n    title,\n    warnings,\n    summary: options?.summary,\n    timing: options?.timing,\n    status: 'warning',\n  });\n}\n\n/**\n * High-level: Info result\n *\n * @example\n * ```typescript\n * return infoResult('Help Information', {\n *   details: [\n *     { section: 'Usage', items: ['kb command --flag'] }\n *   ],\n * });\n * ```\n */\nexport function infoResult(\n  title: string,\n  data?: {\n    summary?: Record<string, string | number>;\n    details?: Array<{ section: string; items: string[] }>;\n    timing?: number;\n  }\n): CommandOutput {\n  return formatCommandResult({\n    title,\n    summary: data?.summary,\n    details: data?.details,\n    timing: data?.timing,\n    status: 'info',\n  });\n}\n","/**\n * Structured log display for CLI output (watch/run/stream commands).\n * Not a spinner — for rendering log lines with level, timestamp, and message.\n */\n\nimport { safeColors } from './colors.js';\n\nexport type LogLevel = 'info' | 'warn' | 'error' | 'debug' | 'verbose';\n\nconst LEVEL_CONFIG: Record<LogLevel, { symbol: string; label: string; color: (s: string) => string }> = {\n  info:    { symbol: '◆', label: 'INFO ', color: safeColors.info },\n  warn:    { symbol: '⚠', label: 'WARN ', color: safeColors.warning },\n  error:   { symbol: '✗', label: 'ERROR', color: safeColors.error },\n  debug:   { symbol: '○', label: 'DEBUG', color: safeColors.muted },\n  verbose: { symbol: '·', label: 'VERB ', color: safeColors.muted },\n};\n\nfunction timestamp(): string {\n  const now = new Date();\n  const h = String(now.getHours()).padStart(2, '0');\n  const m = String(now.getMinutes()).padStart(2, '0');\n  const s = String(now.getSeconds()).padStart(2, '0');\n  return `${h}:${m}:${s}`;\n}\n\nexport function logLine(level: LogLevel, message: string): string {\n  const cfg = LEVEL_CONFIG[level];\n  const sym = cfg.color(cfg.symbol);\n  const lbl = safeColors.muted(cfg.label);\n  const ts = safeColors.muted(timestamp());\n  return `  ${sym} ${lbl}  ${ts}  ${message}`;\n}\n\nexport function logGroup(title: string, lines: string[]): string {\n  const header = `  ${safeColors.bold(title)}`;\n  const body = lines.map((l) => `    ${l}`).join('\\n');\n  return body ? `${header}\\n${body}` : header;\n}\n\nexport function printLog(level: LogLevel, message: string): void {\n  process.stdout.write(logLine(level, message) + '\\n');\n}\n","/**\n * Inline status badges for CLI output.\n *\n * @example\n * badge('ONLINE', 'success')   → green  [ONLINE]\n * badge('FAILED', 'error')     → red    [FAILED]\n * badge('PENDING', 'neutral')  → muted  [PENDING]\n */\n\nimport { safeColors } from './colors.js';\n\nexport type BadgeVariant = 'success' | 'error' | 'warning' | 'info' | 'neutral';\n\nconst BADGE_COLORS: Record<BadgeVariant, (s: string) => string> = {\n  success: safeColors.success,\n  error:   safeColors.error,\n  warning: safeColors.warning,\n  info:    safeColors.info,\n  neutral: safeColors.muted,\n};\n\nexport function badge(label: string, variant: BadgeVariant = 'neutral'): string {\n  const colorFn = BADGE_COLORS[variant];\n  return colorFn(`[${label.toUpperCase()}]`);\n}\n\nexport function statusBadge(status: string): string {\n  const s = status.toLowerCase();\n  if (s === 'online' || s === 'running' || s === 'success' || s === 'active' || s === 'done') {\n    return badge(status, 'success');\n  }\n  if (s === 'offline' || s === 'failed' || s === 'error' || s === 'stopped') {\n    return badge(status, 'error');\n  }\n  if (s === 'degraded' || s === 'warning' || s === 'reconnecting' || s === 'pending') {\n    return badge(status, 'warning');\n  }\n  if (s === 'starting' || s === 'initializing') {\n    return badge(status, 'info');\n  }\n  return badge(status, 'neutral');\n}\n","/**\n * Low-level terminal utilities for interactive CLI prompts.\n * All functions check isInteractive() before using raw mode.\n */\n\nimport * as readline from 'node:readline';\n\nexport interface Key {\n  name: string;\n  ctrl: boolean;\n  shift: boolean;\n  meta: boolean;\n  sequence: string;\n}\n\nexport function isInteractive(): boolean {\n  return Boolean(\n    process.stdin.isTTY &&\n    process.stdout.isTTY &&\n    !process.env.CI &&\n    !process.env.NO_INTERACTIVE\n  );\n}\n\nexport function enableRawMode(): void {\n  if (process.stdin.isTTY) {\n    process.stdin.setRawMode(true);\n  }\n}\n\nexport function disableRawMode(): void {\n  if (process.stdin.isTTY) {\n    process.stdin.setRawMode(false);\n  }\n}\n\nexport function clearLine(): void {\n  process.stdout.write('\\r\\x1b[K');\n}\n\nexport function clearLines(n: number): void {\n  for (let i = 0; i < n; i++) {\n    if (i > 0) {process.stdout.write('\\x1b[1A');}\n    clearLine();\n  }\n}\n\nexport function hideCursor(): void {\n  process.stdout.write('\\x1b[?25l');\n}\n\nexport function showCursor(): void {\n  process.stdout.write('\\x1b[?25h');\n}\n\nexport function moveCursorUp(n: number): void {\n  process.stdout.write(`\\x1b[${n}A`);\n}\n\n/**\n * Listen for keypresses. Returns an unsubscribe function.\n * Caller is responsible for enabling raw mode before calling.\n */\nexport function onKeypress(handler: (key: Key) => void): () => void {\n  readline.emitKeypressEvents(process.stdin);\n\n  const listener = (_: unknown, key: Key) => {\n    if (key) {handler(key);}\n  };\n\n  process.stdin.on('keypress', listener);\n  process.stdin.resume();\n\n  return () => {\n    process.stdin.off('keypress', listener);\n    if (process.stdin.listenerCount('keypress') === 0) {\n      process.stdin.pause();\n    }\n  };\n}\n\nexport function isUpKey(key: Key): boolean {\n  return key.name === 'up' || (key.name === 'k' && !key.ctrl);\n}\n\nexport function isDownKey(key: Key): boolean {\n  return key.name === 'down' || (key.name === 'j' && !key.ctrl);\n}\n\nexport function isEnterKey(key: Key): boolean {\n  return key.name === 'return' || key.name === 'enter';\n}\n\nexport function isEscapeKey(key: Key): boolean {\n  return key.name === 'escape' || (key.name === 'c' && key.ctrl) || (key.name === 'q' && !key.ctrl);\n}\n\nexport function isSpaceKey(key: Key): boolean {\n  return key.name === 'space';\n}\n","/**\n * Multi-step task runner with visual progress.\n * Each task shows as ○ pending → spinner running → ● done / ✗ failed.\n *\n * @example\n * await runTasks([\n *   { title: 'Install dependencies', run: async () => { ... } },\n *   { title: 'Build', run: async () => { ... } },\n * ])\n */\n\nimport { safeColors } from './colors.js';\nimport { clearLines } from './interactive/terminal.js';\n\nexport interface Task {\n  title: string;\n  run: (updateTitle: (t: string) => void) => Promise<void>;\n}\n\ntype TaskState = 'pending' | 'running' | 'done' | 'failed';\n\ninterface TaskStatus {\n  title: string;\n  state: TaskState;\n  error?: string;\n}\n\nconst SPINNER_FRAMES = ['◐', '◓', '◑', '◒'];\n\nfunction renderTasks(statuses: TaskStatus[], spinnerFrame: number): number {\n  const lines: string[] = [];\n  for (const s of statuses) {\n    let prefix: string;\n    switch (s.state) {\n      case 'pending':\n        prefix = safeColors.muted('○');\n        break;\n      case 'running':\n        prefix = safeColors.primary(SPINNER_FRAMES[spinnerFrame % SPINNER_FRAMES.length] ?? '◆');\n        break;\n      case 'done':\n        prefix = safeColors.success('●');\n        break;\n      case 'failed':\n        prefix = safeColors.error('✗');\n        break;\n    }\n    lines.push(`  ${prefix}  ${s.state === 'done' ? safeColors.muted(s.title) : s.state === 'failed' ? safeColors.error(s.title) : s.title}`);\n    if (s.error) {\n      lines.push(`     ${safeColors.muted(s.error)}`);\n    }\n  }\n  process.stdout.write(lines.join('\\n') + '\\n');\n  return lines.length;\n}\n\nexport async function runTasks(tasks: Task[]): Promise<void> {\n  const statuses: TaskStatus[] = tasks.map((t) => ({ title: t.title, state: 'pending' as TaskState }));\n  let lineCount = 0;\n  let spinnerFrame = 0;\n\n  // Initial render\n  lineCount = renderTasks(statuses, spinnerFrame);\n\n  let spinnerInterval: ReturnType<typeof setInterval> | undefined;\n\n  for (let i = 0; i < tasks.length; i++) {\n    const task = tasks[i];\n    const status = statuses[i];\n    if (!task || !status) {continue;}\n\n    status.state = 'running';\n    clearLines(lineCount);\n    lineCount = renderTasks(statuses, spinnerFrame);\n\n    spinnerInterval = setInterval(() => {\n      spinnerFrame++;\n      clearLines(lineCount);\n      lineCount = renderTasks(statuses, spinnerFrame);\n    }, 80);\n\n    try {\n      await task.run((newTitle) => {\n        status.title = newTitle;\n      });\n      status.state = 'done';\n    } catch (err) {\n      status.state = 'failed';\n      status.error = err instanceof Error ? err.message : String(err);\n    } finally {\n      clearInterval(spinnerInterval);\n      spinnerInterval = undefined;\n    }\n  }\n\n  // Final render without spinner\n  clearLines(lineCount);\n  renderTasks(statuses, 0);\n  process.stdout.write('\\n');\n\n  const failed = statuses.filter((s) => s.state === 'failed');\n  if (failed.length > 0) {\n    throw new Error(`${failed.length} task${failed.length === 1 ? '' : 's'} failed`);\n  }\n}\n","/**\n * Interactive y/n confirmation prompt.\n *\n * @example\n * const ok = await confirm({ message: 'Deploy to production?', defaultValue: false })\n */\n\nimport * as readline from 'node:readline';\nimport { safeColors } from '../colors.js';\nimport { isInteractive } from './terminal.js';\n\nexport interface ConfirmOptions {\n  message: string;\n  defaultValue?: boolean;\n}\n\nexport async function confirm(options: ConfirmOptions): Promise<boolean> {\n  const { message, defaultValue = false } = options;\n\n  if (!isInteractive()) {\n    return defaultValue;\n  }\n\n  const hint = defaultValue ? '(Y/n)' : '(y/N)';\n  process.stdout.write(`${safeColors.primary('◆')}  ${safeColors.bold(message)} ${safeColors.muted(hint)} `);\n\n  return new Promise((resolve) => {\n    const rl = readline.createInterface({ input: process.stdin, output: undefined });\n\n    rl.once('line', (line) => {\n      rl.close();\n      const trimmed = line.trim().toLowerCase();\n      process.stdout.write('\\n');\n      if (trimmed === '') {\n        resolve(defaultValue);\n      } else {\n        resolve(trimmed === 'y' || trimmed === 'yes');\n      }\n    });\n\n    rl.once('close', () => {\n      resolve(defaultValue);\n    });\n  });\n}\n","/**\n * Interactive text input prompt.\n *\n * @example\n * const name = await text({ message: 'Plugin name', placeholder: 'my-plugin', validate: v => v ? undefined : 'Required' })\n */\n\nimport * as readline from 'node:readline';\nimport { safeColors } from '../colors.js';\nimport { isInteractive } from './terminal.js';\n\nexport interface TextOptions {\n  message: string;\n  placeholder?: string;\n  defaultValue?: string;\n  validate?: (value: string) => string | undefined;\n  mask?: boolean;\n}\n\nexport async function text(options: TextOptions): Promise<string> {\n  const { message, placeholder, defaultValue = '', validate, mask = false } = options;\n\n  if (!isInteractive()) {\n    return defaultValue;\n  }\n\n  const hint = placeholder ? safeColors.muted(` (${placeholder})`) : '';\n  process.stdout.write(`${safeColors.primary('◆')}  ${safeColors.bold(message)}${hint}\\n`);\n  process.stdout.write(`${safeColors.muted('│')}  `);\n\n  return new Promise((resolve) => {\n    const rl = readline.createInterface({\n      input: process.stdin,\n      output: mask ? undefined : process.stdout,\n      terminal: !mask,\n    });\n\n    if (mask) {\n      process.stdin.on('data', (char) => {\n        const c = char.toString();\n        if (c === '\\n' || c === '\\r') {return;}\n        process.stdout.write('*');\n      });\n    }\n\n    rl.once('line', (line) => {\n      rl.close();\n      const value = line.trim() || defaultValue;\n\n      if (validate) {\n        const error = validate(value);\n        if (error) {\n          process.stdout.write(`${safeColors.error('✗')}  ${safeColors.error(error)}\\n`);\n          resolve(text(options));\n          return;\n        }\n      }\n\n      process.stdout.write(`${safeColors.muted('└')}\\n`);\n      resolve(value);\n    });\n\n    rl.once('close', () => {\n      resolve(defaultValue);\n    });\n  });\n}\n","/**\n * Interactive arrow-key single-select prompt.\n *\n * @example\n * const env = await select({\n *   message: 'Select environment',\n *   choices: [{ label: 'development', value: 'dev' }, { label: 'production', value: 'prod' }]\n * })\n */\n\nimport { safeColors } from '../colors.js';\nimport {\n  isInteractive, enableRawMode, disableRawMode,\n  hideCursor, showCursor, clearLines,\n  onKeypress, isUpKey, isDownKey, isEnterKey, isEscapeKey,\n} from './terminal.js';\n\nexport interface SelectChoice<T> {\n  label: string;\n  value: T;\n  hint?: string;\n}\n\nexport interface SelectOptions<T> {\n  message: string;\n  choices: SelectChoice<T>[];\n  initialIndex?: number;\n}\n\nfunction renderSelect<T>(message: string, choices: SelectChoice<T>[], activeIndex: number, isFirst: boolean): number {\n  const lines: string[] = [];\n\n  if (isFirst) {\n    lines.push(`${safeColors.primary('◆')}  ${safeColors.bold(message)}`);\n    lines.push(safeColors.muted('│'));\n  }\n\n  for (let i = 0; i < choices.length; i++) {\n    const choice = choices[i];\n    if (!choice) {continue;}\n    const isActive = i === activeIndex;\n    const pointer = isActive ? safeColors.primary('❯') : ' ';\n    const label = isActive ? safeColors.bold(choice.label) : safeColors.muted(choice.label);\n    const hint = choice.hint ? safeColors.muted(` — ${choice.hint}`) : '';\n    lines.push(`${safeColors.muted('│')}  ${pointer} ${label}${hint}`);\n  }\n\n  lines.push(safeColors.muted('│'));\n  process.stdout.write(lines.join('\\n') + '\\n');\n  return lines.length;\n}\n\nexport async function select<T>(options: SelectOptions<T>): Promise<T> {\n  const { message, choices, initialIndex = 0 } = options;\n\n  if (!isInteractive() || choices.length === 0) {\n    return (choices[Math.min(initialIndex, choices.length - 1)] as SelectChoice<T>).value;\n  }\n\n  let activeIndex = Math.min(initialIndex, choices.length - 1);\n  let lineCount = 0;\n\n  hideCursor();\n  enableRawMode();\n  lineCount = renderSelect(message, choices, activeIndex, true);\n\n  return new Promise((resolve) => {\n    const unsubscribe = onKeypress((key) => {\n      if (isUpKey(key)) {\n        activeIndex = (activeIndex - 1 + choices.length) % choices.length;\n        clearLines(lineCount);\n        lineCount = renderSelect(message, choices, activeIndex, false);\n        return;\n      }\n\n      if (isDownKey(key)) {\n        activeIndex = (activeIndex + 1) % choices.length;\n        clearLines(lineCount);\n        lineCount = renderSelect(message, choices, activeIndex, false);\n        return;\n      }\n\n      if (isEnterKey(key)) {\n        unsubscribe();\n        disableRawMode();\n        showCursor();\n        clearLines(lineCount + 2);\n        const selected = choices[activeIndex] as SelectChoice<T>;\n        process.stdout.write(`${safeColors.primary('◆')}  ${safeColors.bold(message)}  ${safeColors.muted(selected.label)}\\n`);\n        process.stdout.write(`${safeColors.muted('└')}\\n`);\n        resolve(selected.value);\n        return;\n      }\n\n      if (isEscapeKey(key)) {\n        unsubscribe();\n        disableRawMode();\n        showCursor();\n        clearLines(lineCount + 2);\n        process.stdout.write(`${safeColors.muted('◆')}  ${safeColors.muted(message)}  ${safeColors.muted('cancelled')}\\n`);\n        process.stdout.write(`${safeColors.muted('└')}\\n`);\n        resolve((choices[initialIndex] as SelectChoice<T>).value);\n        return;\n      }\n    });\n  });\n}\n","/**\n * Interactive checkbox multi-select prompt.\n * Space to toggle, Enter to confirm, 'a' to toggle all.\n *\n * @example\n * const plugins = await multiSelect({\n *   message: 'Select plugins',\n *   choices: [{ label: 'workflow', value: 'workflow', checked: true }, ...]\n * })\n */\n\nimport { safeColors } from '../colors.js';\nimport {\n  isInteractive, enableRawMode, disableRawMode,\n  hideCursor, showCursor, clearLines,\n  onKeypress, isUpKey, isDownKey, isEnterKey, isEscapeKey, isSpaceKey,\n} from './terminal.js';\n\nexport interface MultiSelectChoice<T> {\n  label: string;\n  value: T;\n  checked?: boolean;\n  hint?: string;\n}\n\nexport interface MultiSelectOptions<T> {\n  message: string;\n  choices: MultiSelectChoice<T>[];\n  min?: number;\n}\n\nfunction renderMultiSelect<T>(\n  message: string,\n  choices: MultiSelectChoice<T>[],\n  checked: Set<number>,\n  activeIndex: number,\n  isFirst: boolean,\n  error?: string,\n): number {\n  const lines: string[] = [];\n\n  if (isFirst) {\n    lines.push(`${safeColors.primary('◆')}  ${safeColors.bold(message)}  ${safeColors.muted('Space to toggle, Enter to confirm')}`);\n    lines.push(safeColors.muted('│'));\n  }\n\n  for (let i = 0; i < choices.length; i++) {\n    const choice = choices[i];\n    if (!choice) {continue;}\n    const isActive = i === activeIndex;\n    const isChecked = checked.has(i);\n    const checkbox = isChecked ? safeColors.success('◉') : safeColors.muted('○');\n    const pointer = isActive ? safeColors.primary('❯') : ' ';\n    const label = isActive ? safeColors.bold(choice.label) : isChecked ? choice.label : safeColors.muted(choice.label);\n    const hint = choice.hint ? safeColors.muted(` — ${choice.hint}`) : '';\n    lines.push(`${safeColors.muted('│')}  ${pointer} ${checkbox} ${label}${hint}`);\n  }\n\n  if (error) {\n    lines.push(`${safeColors.muted('│')}`);\n    lines.push(`${safeColors.muted('│')}  ${safeColors.error('✗')}  ${safeColors.error(error)}`);\n  }\n\n  lines.push(safeColors.muted('│'));\n  process.stdout.write(lines.join('\\n') + '\\n');\n  return lines.length;\n}\n\nexport async function multiSelect<T>(options: MultiSelectOptions<T>): Promise<T[]> {\n  const { message, choices, min } = options;\n\n  if (!isInteractive() || choices.length === 0) {\n    return choices.filter((c) => c.checked).map((c) => c.value);\n  }\n\n  let activeIndex = 0;\n  const checked = new Set<number>(\n    choices.map((c, i) => (c.checked ? i : -1)).filter((i) => i >= 0)\n  );\n  let lineCount = 0;\n  let error: string | undefined;\n\n  hideCursor();\n  enableRawMode();\n  lineCount = renderMultiSelect(message, choices, checked, activeIndex, true, error);\n\n  return new Promise((resolve) => {\n    const unsubscribe = onKeypress((key) => {\n      if (isUpKey(key)) {\n        activeIndex = (activeIndex - 1 + choices.length) % choices.length;\n        clearLines(lineCount);\n        lineCount = renderMultiSelect(message, choices, checked, activeIndex, false, error);\n        return;\n      }\n\n      if (isDownKey(key)) {\n        activeIndex = (activeIndex + 1) % choices.length;\n        clearLines(lineCount);\n        lineCount = renderMultiSelect(message, choices, checked, activeIndex, false, error);\n        return;\n      }\n\n      if (isSpaceKey(key)) {\n        if (checked.has(activeIndex)) {\n          checked.delete(activeIndex);\n        } else {\n          checked.add(activeIndex);\n        }\n        error = undefined;\n        clearLines(lineCount);\n        lineCount = renderMultiSelect(message, choices, checked, activeIndex, false, error);\n        return;\n      }\n\n      if (key.name === 'a' && !key.ctrl) {\n        if (checked.size === choices.length) {\n          checked.clear();\n        } else {\n          choices.forEach((_, i) => checked.add(i));\n        }\n        clearLines(lineCount);\n        lineCount = renderMultiSelect(message, choices, checked, activeIndex, false, error);\n        return;\n      }\n\n      if (isEnterKey(key)) {\n        if (min !== undefined && checked.size < min) {\n          error = `Select at least ${min} option${min === 1 ? '' : 's'}`;\n          clearLines(lineCount);\n          lineCount = renderMultiSelect(message, choices, checked, activeIndex, false, error);\n          return;\n        }\n\n        unsubscribe();\n        disableRawMode();\n        showCursor();\n        const headerLines = 2;\n        clearLines(lineCount + headerLines);\n\n        const selectedLabels = choices\n          .filter((_, i) => checked.has(i))\n          .map((c) => c.label)\n          .join(', ');\n        process.stdout.write(`${safeColors.primary('◆')}  ${safeColors.bold(message)}  ${safeColors.muted(selectedLabels || 'none')}\\n`);\n        process.stdout.write(`${safeColors.muted('└')}\\n`);\n\n        resolve(choices.filter((_, i) => checked.has(i)).map((c) => c.value));\n        return;\n      }\n\n      if (isEscapeKey(key)) {\n        unsubscribe();\n        disableRawMode();\n        showCursor();\n        clearLines(lineCount + 2);\n        process.stdout.write(`${safeColors.muted('◆')}  ${safeColors.muted(message)}  ${safeColors.muted('cancelled')}\\n`);\n        process.stdout.write(`${safeColors.muted('└')}\\n`);\n        resolve([]);\n        return;\n      }\n    });\n  });\n}\n","import type { UIFacade, SelectChoice, MultiSelectChoice } from '@kb-labs/plugin-contracts';\nimport { safeColors, safeSymbols } from './colors.js';\nimport { sideBorderBox, sideBorderChain, metricsList } from './modern-format.js';\nimport { formatTable } from './table.js';\n\n/**\n * All interactive prompt methods of UIFacade.\n * Required (not optional) so TypeScript catches missing implementations\n * when UIFacade gains a new prompt method.\n */\nexport interface UIPrompts {\n  confirm(msg: string, opts?: { defaultValue?: boolean }): Promise<boolean>;\n  prompt(msg: string, opts?: { default?: string; mask?: boolean }): Promise<string>;\n  select<T>(msg: string, choices: SelectChoice<T>[]): Promise<T>;\n  multiSelect<T>(msg: string, choices: MultiSelectChoice<T>[]): Promise<T[]>;\n}\n\n/**\n * Safe-return prompts for non-interactive contexts (subprocess, sandbox).\n * All methods return the most sensible default without any I/O.\n */\nexport const NOOP_PROMPTS: UIPrompts = {\n  confirm: async (_, opts) => opts?.defaultValue ?? false,\n  prompt: async (_, opts) => opts?.default ?? '',\n  select: async <T>(_: string, choices: SelectChoice<T>[]) => choices[0]?.value as T,\n  multiSelect: async <T>(_: string, choices: MultiSelectChoice<T>[]) =>\n    choices.filter(c => c.checked).map(c => c.value) as T[],\n};\n\n/**\n * Shared stdout UIFacade factory for subprocess/worker contexts.\n *\n * Both params are required so TypeScript catches any new UIFacade interactive\n * method at the call site rather than silently inheriting a noop default.\n *\n * Uses `satisfies UIFacade` on the object literal — TypeScript will error here\n * (not just at the return type) if any UIFacade method is missing.\n */\nexport function createBaseStdoutUI(\n  prompts: UIPrompts,\n  log: UIFacade['log'],\n): UIFacade {\n  return {\n    colors: safeColors,\n    symbols: safeSymbols,\n\n    write: (text) => { process.stdout.write(text + '\\n'); },\n\n    info: (msg, options) => {\n      const extra = options?.sections ?? [];\n      console.log(sideBorderBox({\n        title: options?.title ?? 'Info',\n        sections: [{ items: [msg] }, ...extra],\n        status: 'info',\n        timing: options?.timing,\n        summary: options?.summary,\n      }));\n    },\n\n    success: (msg, options) => {\n      const extra = options?.sections ?? [];\n      console.log(sideBorderBox({\n        title: options?.title ?? 'Success',\n        sections: [{ items: [msg] }, ...extra],\n        status: 'success',\n        timing: options?.timing,\n        summary: options?.summary,\n      }));\n    },\n\n    warn: (msg, options) => {\n      const extra = options?.sections ?? [];\n      console.log(sideBorderBox({\n        title: options?.title ?? 'Warning',\n        sections: [{ items: [msg] }, ...extra],\n        status: 'warning',\n        timing: options?.timing,\n        summary: options?.summary,\n      }));\n    },\n\n    error: (err, options) => {\n      const message = err instanceof Error ? err.message : err;\n      const sections: Array<{ header?: string; items: Array<string | { text: string; dim?: boolean }> }> = [\n        { items: [message] },\n      ];\n\n      if (options?.sections?.length) {\n        sections.push(...options.sections.map(s => ({ header: s.header, items: s.items })));\n      }\n\n      if (options?.cause) {\n        sections.push({ header: 'Cause', items: [{ text: options.cause, dim: true }] });\n      }\n\n      if (options?.hint) {\n        const hintItems: Array<string | { text: string; dim: boolean }> = [options.hint];\n        if (options.command) { hintItems.push({ text: `$ ${options.command}`, dim: true }); }\n        sections.push({ header: 'Hint', items: hintItems });\n      } else if (options?.command) {\n        sections.push({ header: 'Hint', items: [{ text: `$ ${options.command}`, dim: true }] });\n      }\n\n      console.error(sideBorderBox({\n        title: options?.title ?? 'Error',\n        sections,\n        status: 'error',\n        timing: options?.timing,\n        summary: options?.summary,\n      }));\n    },\n\n    debug: (msg) => { if (process.env.DEBUG) { console.debug(msg); } },\n\n    spinner: (msg) => {\n      console.log(`${safeColors.primary('◆')} ${msg}`);\n      return {\n        update: (m) => console.log(`${safeColors.primary('◆')} ${m}`),\n        succeed: (m) => console.log(`${safeColors.success('✓')} ${m ?? msg}`),\n        fail: (m) => console.log(`${safeColors.error('✗')} ${m ?? msg}`),\n        stop: () => {},\n      };\n    },\n\n    table: (data, columns) => {\n      if (data.length === 0) { return; }\n      const cols = columns ?? Object.keys(data[0]!).map(k => ({ header: k, key: k }));\n      const rows = data.map(row => cols.map(col => String(row[col.key] ?? '')));\n      const lines = formatTable(\n        cols.map(c => ({ header: c.header, width: (c as { width?: number }).width, align: (c as { align?: 'left' | 'center' | 'right' }).align })),\n        rows,\n        { separator: '' },\n      );\n      for (const line of lines) { console.log(`  ${line}`); }\n    },\n\n    json: (data, options) => console.log(options?.pretty ? JSON.stringify(data, null, 2) : JSON.stringify(data)),\n    newline: () => console.log(),\n    divider: () => console.log(safeColors.muted('─'.repeat(process.stdout.columns || 80))),\n\n    box: (content, title) => {\n      console.log(sideBorderBox({\n        title: title || '',\n        sections: [{ items: content.split('\\n') }],\n        status: 'info',\n      }));\n    },\n\n    sideBox: (options) => {\n      const allSections: Array<{ header?: string; items: Array<string | { text: string; dim?: boolean }> }> = [];\n      if (options.summary && Object.keys(options.summary).length > 0) {\n        allSections.push({ items: metricsList(options.summary as Record<string, string | number>) });\n      }\n      allSections.push(...(options.sections ?? []).map(s => ({ header: s.header, items: s.items })));\n      console.log(sideBorderBox({\n        title: options.title,\n        sections: allSections,\n        status: options.status,\n        timing: options.timing,\n      }));\n    },\n\n    chain: (items) => {\n      console.log(sideBorderChain(\n        items.map(item => ({\n          title: item.title,\n          sections: (item.sections ?? []).map(s => ({ header: s.header, items: s.items })),\n          summary: item.summary,\n          status: item.status,\n          timing: item.timing,\n        })),\n      ));\n    },\n\n    confirm: prompts.confirm,\n    prompt: prompts.prompt,\n    select: prompts.select,\n    multiSelect: prompts.multiSelect,\n    log,\n  } satisfies UIFacade;\n}\n"]}