@teleologyhi-sdk/nhe 1.0.0-trinity

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/adapters/anthropic.ts","../src/adapters/sse.ts","../src/adapters/deepseek.ts","../src/adapters/gemini.ts","../src/adapters/grok.ts","../src/adapters/mistral.ts","../src/adapters/ollama.ts","../src/cli/adapter-detection.ts","../src/prompt/compose.ts","../src/risk/simple-classifier.ts","../src/sleep/phases.ts","../src/sleep/types.ts","../src/sleep/yaml.ts","../src/sleep/cycle.ts","../src/sleep/consolidator.ts","../src/memory/interaction-store.ts","../src/memory/bm25.ts","../src/memory/recall.ts","../src/telemetry/tracer.ts","../src/telemetry/metrics.ts","../src/refusal/library.ts","../src/reasoning/types.ts","../src/reasoning/passthrough.ts","../src/types.ts","../src/nhe.ts","../src/cli/bootstrap.ts","../src/cli/output.ts","../src/cli/chat.ts","../src/cli/mcp-tools.ts","../src/cli/mcp.ts","../src/cli/index.ts"],"names":["DEFAULT_MODEL","DEFAULT_BASE_URL","safeReadText","parseToolCalls","join","mkdir","err","writeFile","ulid","readdir","readFile","b","z"],"mappings":";;;;;;;;;;;;;;AAoBA,IAAM,aAAA,GAAgB,mBAAA;AAYf,IAAM,mBAAN,MAA6C;AAAA,EACzC,EAAA;AAAA,EACA,aAAA,GAAgB,IAAA;AAAA,EAChB,iBAAA,GAAoB,IAAA;AAAA,EACZ,MAAA;AAAA,EACA,KAAA;AAAA,EACA,sBAAA;AAAA,EAEjB,WAAA,CAAY,MAAA,GAAiC,EAAC,EAAG;AAC/C,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,IAAU,OAAA,CAAQ,GAAA,CAAI,iBAAA;AAC5C,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,SAAA,CAAU,EAAE,QAAQ,CAAA;AACtC,IAAA,IAAA,CAAK,KAAA,GAAQ,OAAO,KAAA,IAAS,aAAA;AAC7B,IAAA,IAAA,CAAK,sBAAA,GAAyB,OAAO,sBAAA,IAA0B,IAAA;AAC/D,IAAA,IAAA,CAAK,EAAA,GAAK,MAAA,CAAO,EAAA,IAAM,CAAA,UAAA,EAAa,KAAK,KAAK,CAAA,CAAA;AAAA,EAChD;AAAA,EAEA,MAAM,SAAS,GAAA,EAAiD;AAC9D,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA;AACjC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,SAAS,MAAA,CAAO;AAAA,MACjD,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAQ,GAAA,CAAI,MAAA;AAAA,MACZ,QAAA,EAAU,KAAA;AAAA,MACV,UAAA,EAAY,GAAA,CAAI,eAAA,IAAmB,IAAA,CAAK,sBAAA;AAAA,MACxC,GAAI,GAAA,CAAI,KAAA,IAAS,GAAA,CAAI,KAAA,CAAM,SAAS,CAAA,GAChC;AAAA,QACE,KAAA,EAAO,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,UAC3B,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,aAAa,CAAA,CAAE,WAAA;AAAA,UACf,cAAc,CAAA,CAAE;AAAA,SAClB,CAAE;AAAA,UAEJ;AAAC,KACN,CAAA;AAED,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,OAAA,CACnB,GAAA,CAAI,CAAC,KAAA,KAAW,KAAA,CAAM,IAAA,KAAS,MAAA,GAAS,KAAA,CAAM,IAAA,GAAO,EAAG,CAAA,CACxD,KAAK,EAAE,CAAA;AAEV,IAAA,MAAM,QAAA,GAAsB,QAAA,CAAS,OAAA,CAClC,MAAA,CAAO,CAAC,CAAA,KAAmC,CAAA,CAAE,IAAA,KAAS,UAAU,CAAA,CAChE,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MACX,IAAI,CAAA,CAAE,EAAA;AAAA,MACN,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,KAAA,EAAQ,CAAA,CAAE,KAAA,IAAqC;AAAC,KAClD,CAAE,CAAA;AAEJ,IAAA,MAAM,GAAA,GAAwB;AAAA,MAC5B,IAAA;AAAA,MACA,QAAA,EAAU,SAAS,KAAA,CAAM,YAAA;AAAA,MACzB,SAAA,EAAW,SAAS,KAAA,CAAM;AAAA,KAC5B;AACA,IAAA,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,GAAA,CAAI,QAAA,GAAW,QAAA;AACxC,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,OAAO,eAAe,GAAA,EAAkD;AACtE,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA;AACjC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO;AAAA,MACzC,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAQ,GAAA,CAAI,MAAA;AAAA,MACZ,QAAA,EAAU,KAAA;AAAA,MACV,UAAA,EAAY,GAAA,CAAI,eAAA,IAAmB,IAAA,CAAK,sBAAA;AAAA,MACxC,GAAI,GAAA,CAAI,KAAA,IAAS,GAAA,CAAI,KAAA,CAAM,SAAS,CAAA,GAChC;AAAA,QACE,KAAA,EAAO,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,UAC3B,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,aAAa,CAAA,CAAE,WAAA;AAAA,UACf,cAAc,CAAA,CAAE;AAAA,SAClB,CAAE;AAAA,UAEJ;AAAC,KACN,CAAA;AAED,IAAA,IAAI,QAAA,GAAW,CAAA;AACf,IAAA,IAAI,SAAA,GAAY,CAAA;AAChB,IAAA,MAAM,YAAA,uBAAmB,GAAA,EAA2D;AAEpF,IAAA,WAAA,MAAiB,MAAM,MAAA,EAAQ;AAI7B,MAAA,IAAI,EAAA,CAAG,SAAS,qBAAA,EAAuB;AACrC,QAAA,MAAM,QAAQ,EAAA,CAAG,aAAA;AACjB,QAAA,IAAI,KAAA,CAAM,SAAS,UAAA,EAAY;AAC7B,UAAA,YAAA,CAAa,GAAA,CAAI,EAAA,CAAG,KAAA,EAAO,EAAE,EAAA,EAAI,KAAA,CAAM,EAAA,EAAI,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,OAAA,EAAS,EAAA,EAAI,CAAA;AAAA,QAC5E;AAAA,MACF,CAAA,MAAA,IAAW,EAAA,CAAG,IAAA,KAAS,qBAAA,EAAuB;AAC5C,QAAA,IAAI,EAAA,CAAG,KAAA,CAAM,IAAA,KAAS,YAAA,EAAc;AAClC,UAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,EAAA,CAAG,MAAM,IAAA,EAAK;AAAA,QAC7C,CAAA,MAAA,IAAW,EAAA,CAAG,KAAA,CAAM,IAAA,KAAS,kBAAA,EAAoB;AAC/C,UAAA,MAAM,OAAA,GAAU,YAAA,CAAa,GAAA,CAAI,EAAA,CAAG,KAAK,CAAA;AACzC,UAAA,IAAI,OAAA,EAAS,OAAA,CAAQ,OAAA,IAAW,EAAA,CAAG,KAAA,CAAM,YAAA;AAAA,QAC3C;AAAA,MACF,CAAA,MAAA,IAAW,EAAA,CAAG,IAAA,KAAS,oBAAA,EAAsB;AAC3C,QAAA,MAAM,OAAA,GAAU,YAAA,CAAa,GAAA,CAAI,EAAA,CAAG,KAAK,CAAA;AACzC,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,IAAI,QAAiC,EAAC;AACtC,UAAA,IAAI;AACF,YAAA,KAAA,GAAQ,QAAQ,OAAA,GAAU,IAAA,CAAK,MAAM,OAAA,CAAQ,OAAO,IAAI,EAAC;AAAA,UAC3D,CAAA,CAAA,MAAQ;AACN,YAAA,KAAA,GAAQ,EAAE,IAAA,EAAM,OAAA,CAAQ,OAAA,EAAQ;AAAA,UAClC;AACA,UAAA,MAAM,EAAE,IAAA,EAAM,UAAA,EAAY,OAAA,EAAS,EAAE,EAAA,EAAI,OAAA,CAAQ,EAAA,EAAI,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAM,KAAA,EAAM,EAAE;AACjF,UAAA,YAAA,CAAa,MAAA,CAAO,GAAG,KAAK,CAAA;AAAA,QAC9B;AAAA,MACF,CAAA,MAAA,IAAW,EAAA,CAAG,IAAA,KAAS,eAAA,EAAiB;AACtC,QAAA,IAAI,EAAA,CAAG,KAAA,EAAO,SAAA,GAAY,EAAA,CAAG,KAAA,CAAM,aAAA;AAAA,MACrC,CAAA,MAAA,IAAW,EAAA,CAAG,IAAA,KAAS,eAAA,EAAiB;AACtC,QAAA,IAAI,EAAA,CAAG,QAAQ,KAAA,EAAO;AACpB,UAAA,QAAA,GAAW,EAAA,CAAG,QAAQ,KAAA,CAAM,YAAA;AAC5B,UAAA,SAAA,GAAY,EAAA,CAAG,QAAQ,KAAA,CAAM,aAAA;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,QAAA,EAAU,SAAA,EAAU;AAAA,EAC3C;AAAA,EAEQ,WAAW,GAAA,EAAgD;AACjE,IAAA,OAAO,GAAA,CAAI,QAAA,CACR,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,QAAQ,CAAA,CACjC,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MACX,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,SAAS,CAAA,CAAE;AAAA,KACb,CAAE,CAAA;AAAA,EACN;AACF,CAAA;;;AC9JA,gBAAuB,UACrB,IAAA,EACuB;AACvB,EAAA,MAAM,MAAA,GAAS,KAAK,SAAA,EAAU;AAC9B,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,CAAY,OAAO,CAAA;AACvC,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAK,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,MAAA,IAAI,IAAA,EAAM;AACV,MAAA,MAAA,IAAU,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAChD,MAAA,IAAI,GAAA,GAAM,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA;AAC/B,MAAA,OAAO,QAAQ,CAAA,CAAA,EAAI;AACjB,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA;AACjC,QAAA,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,GAAA,GAAM,CAAC,CAAA;AAC7B,QAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA,EAAG;AACpC,UAAA,IAAI,IAAA,CAAK,WAAW,OAAO,CAAA,QAAS,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,EAAK;AAAA,QACzD;AACA,QAAA,GAAA,GAAM,MAAA,CAAO,QAAQ,MAAM,CAAA;AAAA,MAC7B;AAAA,IACF;AAAA,EACF,CAAA,SAAE;AACA,IAAA,MAAA,CAAO,WAAA,EAAY;AAAA,EACrB;AACF;AAMA,gBAAuB,aACrB,IAAA,EACuB;AACvB,EAAA,MAAM,MAAA,GAAS,KAAK,SAAA,EAAU;AAC9B,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,CAAY,OAAO,CAAA;AACvC,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAK,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,MAAA,IAAI,IAAA,EAAM;AACV,MAAA,MAAA,IAAU,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAChD,MAAA,IAAI,GAAA,GAAM,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA;AAC7B,MAAA,OAAO,QAAQ,CAAA,CAAA,EAAI;AACjB,QAAA,MAAM,OAAO,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,GAAG,EAAE,IAAA,EAAK;AACvC,QAAA,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,GAAA,GAAM,CAAC,CAAA;AAC7B,QAAA,IAAI,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG,MAAM,IAAA;AAC3B,QAAA,GAAA,GAAM,MAAA,CAAO,QAAQ,IAAI,CAAA;AAAA,MAC3B;AAAA,IACF;AACA,IAAA,IAAI,OAAO,IAAA,EAAK,CAAE,SAAS,CAAA,EAAG,MAAM,OAAO,IAAA,EAAK;AAAA,EAClD,CAAA,SAAE;AACA,IAAA,MAAA,CAAO,WAAA,EAAY;AAAA,EACrB;AACF;;;AClCA,IAAMA,cAAAA,GAAgB,eAAA;AACtB,IAAM,gBAAA,GAAmB,6BAAA;AAqDlB,IAAM,kBAAN,MAA4C;AAAA,EACxC,EAAA;AAAA,EACA,aAAA,GAAgB,IAAA;AAAA,EAChB,iBAAA,GAAoB,IAAA;AAAA,EACZ,MAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,sBAAA;AAAA,EACA,OAAA;AAAA,EAEjB,WAAA,CAAY,MAAA,GAAgC,EAAC,EAAG;AAC9C,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,IAAU,OAAA,CAAQ,GAAA,CAAI,gBAAA;AAC5C,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,KAAA,GAAQ,OAAO,KAAA,IAASA,cAAAA;AAC7B,IAAA,IAAA,CAAK,WAAW,MAAA,CAAO,OAAA,IAAW,gBAAA,EAAkB,OAAA,CAAQ,OAAO,EAAE,CAAA;AACrE,IAAA,IAAA,CAAK,sBAAA,GAAyB,OAAO,sBAAA,IAA0B,IAAA;AAC/D,IAAA,IAAA,CAAK,EAAA,GAAK,MAAA,CAAO,EAAA,IAAM,CAAA,SAAA,EAAY,KAAK,KAAK,CAAA,CAAA;AAC7C,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA,CAAO,KAAA,IAAS,UAAA,CAAW,KAAA;AAAA,EAC5C;AAAA,EAEA,MAAM,SAAS,GAAA,EAAiD;AAC9D,IAAA,MAAM,WAAwC,EAAC;AAC/C,IAAA,IAAI,GAAA,CAAI,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,EAAE,MAAM,QAAA,EAAU,OAAA,EAAS,GAAA,CAAI,MAAA,EAAQ,CAAA;AACrE,IAAA,KAAA,MAAW,CAAA,IAAK,IAAI,QAAA,EAAU;AAG5B,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,CAAE,MAAM,OAAA,EAAS,CAAA,CAAE,SAAS,CAAA;AAAA,IACpD;AAEA,IAAA,MAAM,IAAA,GAAwB;AAAA,MAC5B,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAA;AAAA,MACA,UAAA,EAAY,GAAA,CAAI,eAAA,IAAmB,IAAA,CAAK,sBAAA;AAAA,MACxC,MAAA,EAAQ;AAAA,KACV;AACA,IAAA,IAAI,GAAA,CAAI,KAAA,IAAS,GAAA,CAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACrC,MAAA,IAAA,CAAK,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACjC,IAAA,EAAM,UAAA;AAAA,QACN,QAAA,EAAU;AAAA,UACR,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,aAAa,CAAA,CAAE,WAAA;AAAA,UACf,YAAY,CAAA,CAAE;AAAA;AAChB,OACF,CAAE,CAAA;AAAA,IACJ;AAEA,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,QAAQ,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,iBAAA,CAAA,EAAqB;AAAA,MACtE,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA;AAAA,OACtC;AAAA,MACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA,KAC1B,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,OAAA,GAAU,MAAM,YAAA,CAAa,QAAQ,CAAA;AAC3C,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,yBAAyB,QAAA,CAAS,MAAM,IAAI,QAAA,CAAS,UAAU,KAAK,OAAO,CAAA;AAAA,OAC7E;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iBAAA,EAAoB,OAAO,KAAA,CAAM,OAAA,IAAW,eAAe,CAAA,CAAE,CAAA;AAAA,IAC/E;AAEA,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,GAAU,CAAC,CAAA,EAAG,OAAA;AACrC,IAAA,MAAM,GAAA,GAAwB;AAAA,MAC5B,IAAA,EAAM,SAAS,OAAA,IAAW,EAAA;AAAA,MAC1B,QAAA,EAAU,MAAA,CAAO,KAAA,EAAO,aAAA,IAAiB,CAAA;AAAA,MACzC,SAAA,EAAW,MAAA,CAAO,KAAA,EAAO,iBAAA,IAAqB;AAAA,KAChD;AACA,IAAA,MAAM,QAAA,GAAW,cAAA,CAAe,OAAA,EAAS,UAAU,CAAA;AACnD,IAAA,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,GAAA,CAAI,QAAA,GAAW,QAAA;AACxC,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,OAAO,eAAe,GAAA,EAAkD;AACtE,IAAA,MAAM,WAAwC,EAAC;AAC/C,IAAA,IAAI,GAAA,CAAI,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,EAAE,MAAM,QAAA,EAAU,OAAA,EAAS,GAAA,CAAI,MAAA,EAAQ,CAAA;AACrE,IAAA,KAAA,MAAW,CAAA,IAAK,GAAA,CAAI,QAAA,EAAU,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,OAAA,EAAS,CAAA,CAAE,OAAA,EAAS,CAAA;AAEhF,IAAA,MAAM,IAAA,GAAwB;AAAA,MAC5B,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAA;AAAA,MACA,UAAA,EAAY,GAAA,CAAI,eAAA,IAAmB,IAAA,CAAK,sBAAA;AAAA,MACxC,MAAA,EAAQ;AAAA,KACV;AACA,IAAA,IAAI,GAAA,CAAI,KAAA,IAAS,GAAA,CAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACrC,MAAA,IAAA,CAAK,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACjC,IAAA,EAAM,UAAA;AAAA,QACN,QAAA,EAAU;AAAA,UACR,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,aAAa,CAAA,CAAE,WAAA;AAAA,UACf,YAAY,CAAA,CAAE;AAAA;AAChB,OACF,CAAE,CAAA;AAAA,IACJ;AACA,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,QAAQ,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,iBAAA,CAAA,EAAqB;AAAA,MACtE,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,MAAA,EAAQ,mBAAA;AAAA,QACR,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA;AAAA,OACtC;AAAA,MACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA,KAC1B,CAAA;AACD,IAAA,IAAI,CAAC,QAAA,CAAS,EAAA,IAAM,CAAC,SAAS,IAAA,EAAM;AAClC,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,sBAAA,EAAyB,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,EAAA,EAAK,MAAM,YAAA,CAAa,QAAQ,CAAC,CAAA;AAAA,OAClG;AAAA,IACF;AAEA,IAAA,IAAI,QAAA,GAAW,CAAA;AACf,IAAA,IAAI,SAAA,GAAY,CAAA;AAChB,IAAA,MAAM,YAAA,uBAAmB,GAAA,EAGvB;AACF,IAAA,WAAA,MAAiB,IAAA,IAAQ,SAAA,CAAU,QAAA,CAAS,IAAI,CAAA,EAAG;AACjD,MAAA,IAAI,SAAS,QAAA,EAAU;AACvB,MAAA,IAAI,MAAA;AAcJ,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,MAC1B,CAAA,CAAA,MAAQ;AACN,QAAA;AAAA,MACF;AACA,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,OAAA,GAAU,CAAC,CAAA;AACjC,MAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,EAAO,OAAA;AAC7B,MAAA,IAAI,OAAO,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,MAAM,KAAA,EAAM;AAC9C,MAAA,MAAM,UAAA,GAAa,QAAQ,KAAA,EAAO,UAAA;AAClC,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,KAAA,MAAW,MAAM,UAAA,EAAY;AAC3B,UAAA,MAAM,IAAA,GAAO,YAAA,CAAa,GAAA,CAAI,EAAA,CAAG,KAAK,CAAA,IAAK,EAAE,EAAA,EAAI,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,OAAA,EAAS,EAAA,EAAG;AAC3E,UAAA,IAAI,EAAA,CAAG,EAAA,EAAI,IAAA,CAAK,EAAA,GAAK,EAAA,CAAG,EAAA;AACxB,UAAA,IAAI,GAAG,QAAA,EAAU,IAAA,EAAM,IAAA,CAAK,IAAA,GAAO,GAAG,QAAA,CAAS,IAAA;AAC/C,UAAA,IAAI,GAAG,QAAA,EAAU,SAAA,EAAW,IAAA,CAAK,OAAA,IAAW,GAAG,QAAA,CAAS,SAAA;AACxD,UAAA,YAAA,CAAa,GAAA,CAAI,EAAA,CAAG,KAAA,EAAO,IAAI,CAAA;AAAA,QACjC;AAAA,MACF;AACA,MAAA,IAAI,MAAA,EAAQ,aAAA,KAAkB,YAAA,IAAgB,MAAA,EAAQ,kBAAkB,MAAA,EAAQ;AAC9E,QAAA,KAAA,MAAW,GAAG,IAAI,CAAA,IAAK,YAAA,EAAc;AACnC,UAAA,IAAI,CAAC,IAAA,CAAK,EAAA,IAAM,CAAC,KAAK,IAAA,EAAM;AAC5B,UAAA,IAAI,QAAiC,EAAC;AACtC,UAAA,IAAI;AACF,YAAA,KAAA,GAAQ,KAAK,OAAA,GAAU,IAAA,CAAK,MAAM,IAAA,CAAK,OAAO,IAAI,EAAC;AAAA,UACrD,CAAA,CAAA,MAAQ;AACN,YAAA,KAAA,GAAQ,EAAE,IAAA,EAAM,IAAA,CAAK,OAAA,EAAQ;AAAA,UAC/B;AACA,UAAA,MAAM,EAAE,IAAA,EAAM,UAAA,EAAY,OAAA,EAAS,EAAE,EAAA,EAAI,IAAA,CAAK,EAAA,EAAI,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,KAAA,EAAM,EAAE;AAAA,QAC7E;AACA,QAAA,YAAA,CAAa,KAAA,EAAM;AAAA,MACrB;AACA,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,QAAA,GAAW,MAAA,CAAO,MAAM,aAAA,IAAiB,QAAA;AACzC,QAAA,SAAA,GAAY,MAAA,CAAO,MAAM,iBAAA,IAAqB,SAAA;AAAA,MAChD;AAAA,IACF;AACA,IAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,QAAA,EAAU,SAAA,EAAU;AAAA,EAC3C;AACF,CAAA;AAEA,eAAe,aAAa,CAAA,EAA8B;AACxD,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,EAAE,IAAA,EAAK;AAAA,EACtB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,cAAA;AAAA,EACT;AACF;AAEA,SAAS,eAAe,KAAA,EAAgD;AACtE,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,CAAA,SAAU,EAAC;AAC1C,EAAA,MAAM,MAAiB,EAAC;AACxB,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,IAAI,QAAiC,EAAC;AACtC,IAAA,IAAI;AACF,MAAA,KAAA,GAAQ,CAAA,CAAE,SAAS,SAAA,GAAY,IAAA,CAAK,MAAM,CAAA,CAAE,QAAA,CAAS,SAAS,CAAA,GAAI,EAAC;AAAA,IACrE,CAAA,CAAA,MAAQ;AACN,MAAA,KAAA,GAAQ,EAAE,IAAA,EAAM,CAAA,CAAE,QAAA,CAAS,SAAA,EAAU;AAAA,IACvC;AACA,IAAA,GAAA,CAAI,IAAA,CAAK,EAAE,EAAA,EAAI,CAAA,CAAE,EAAA,EAAI,MAAM,CAAA,CAAE,QAAA,CAAS,IAAA,EAAM,KAAA,EAAO,CAAA;AAAA,EACrD;AACA,EAAA,OAAO,GAAA;AACT;;;ACjQA,IAAMA,cAAAA,GAAgB,kBAAA;AACtB,IAAMC,iBAAAA,GAAmB,kDAAA;AA+BlB,IAAM,gBAAN,MAA0C;AAAA,EACtC,EAAA;AAAA,EACA,iBAAA,GAAoB,IAAA;AAAA,EACZ,MAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,sBAAA;AAAA,EACA,OAAA;AAAA,EAEjB,WAAA,CAAY,MAAA,GAA8B,EAAC,EAAG;AAC5C,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,IAAU,OAAA,CAAQ,GAAA,CAAI,cAAA;AAC5C,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,KAAA,GAAQ,OAAO,KAAA,IAASD,cAAAA;AAC7B,IAAA,IAAA,CAAK,WAAW,MAAA,CAAO,OAAA,IAAWC,iBAAAA,EAAkB,OAAA,CAAQ,OAAO,EAAE,CAAA;AACrE,IAAA,IAAA,CAAK,sBAAA,GAAyB,OAAO,sBAAA,IAA0B,IAAA;AAC/D,IAAA,IAAA,CAAK,EAAA,GAAK,MAAA,CAAO,EAAA,IAAM,CAAA,OAAA,EAAU,KAAK,KAAK,CAAA,CAAA;AAC3C,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA,CAAO,KAAA,IAAS,UAAA,CAAW,KAAA;AAAA,EAC5C;AAAA,EAEA,MAAM,SAAS,GAAA,EAAiD;AAC9D,IAAA,MAAM,IAAA,GAA0B;AAAA,MAC9B,QAAA,EAAU,GAAA,CAAI,QAAA,CACX,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,QAAQ,CAAA,CACjC,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACX,IAAA,EAAM,CAAA,CAAE,IAAA,KAAS,WAAA,GAAc,OAAA,GAAU,MAAA;AAAA,QACzC,OAAO,CAAC,EAAE,IAAA,EAAM,CAAA,CAAE,SAAS;AAAA,OAC7B,CAAE,CAAA;AAAA,MACJ,gBAAA,EAAkB;AAAA,QAChB,eAAA,EAAiB,GAAA,CAAI,eAAA,IAAmB,IAAA,CAAK;AAAA;AAC/C,KACF;AACA,IAAA,IAAI,IAAI,MAAA,EAAQ;AACd,MAAA,IAAA,CAAK,iBAAA,GAAoB,EAAE,KAAA,EAAO,CAAC,EAAE,IAAA,EAAM,GAAA,CAAI,MAAA,EAAQ,CAAA,EAAE;AAAA,IAC3D;AAEA,IAAA,MAAM,GAAA,GAAM,GAAG,IAAA,CAAK,OAAO,WAAW,kBAAA,CAAmB,IAAA,CAAK,KAAK,CAAC,CAAA,gBAAA,CAAA;AACpE,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK;AAAA,MACvC,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,kBAAkB,IAAA,CAAK;AAAA,OACzB;AAAA,MACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA,KAC1B,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,OAAA,GAAU,MAAMC,aAAAA,CAAa,QAAQ,CAAA;AAC3C,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,uBAAuB,QAAA,CAAS,MAAM,IAAI,QAAA,CAAS,UAAU,KAAK,OAAO,CAAA;AAAA,OAC3E;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,OAAO,KAAA,CAAM,OAAA,IAAW,eAAe,CAAA,CAAE,CAAA;AAAA,IAC7E;AAEA,IAAA,MAAM,IAAA,GACJ,OAAO,UAAA,EACH,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,KAAA,IAAS,EAAE,CAAA,CACtC,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,EAAE,CAAA,CACvB,IAAA,CAAK,EAAE,CAAA,IAAK,EAAA;AAEjB,IAAA,OAAO;AAAA,MACL,IAAA;AAAA,MACA,QAAA,EAAU,MAAA,CAAO,aAAA,EAAe,gBAAA,IAAoB,CAAA;AAAA,MACpD,SAAA,EAAW,MAAA,CAAO,aAAA,EAAe,oBAAA,IAAwB;AAAA,KAC3D;AAAA,EACF;AAAA,EAEA,OAAO,eAAe,GAAA,EAAkD;AACtE,IAAA,MAAM,IAAA,GAA0B;AAAA,MAC9B,QAAA,EAAU,GAAA,CAAI,QAAA,CACX,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,QAAQ,CAAA,CACjC,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACX,IAAA,EAAM,CAAA,CAAE,IAAA,KAAS,WAAA,GAAc,OAAA,GAAU,MAAA;AAAA,QACzC,OAAO,CAAC,EAAE,IAAA,EAAM,CAAA,CAAE,SAAS;AAAA,OAC7B,CAAE,CAAA;AAAA,MACJ,gBAAA,EAAkB;AAAA,QAChB,eAAA,EAAiB,GAAA,CAAI,eAAA,IAAmB,IAAA,CAAK;AAAA;AAC/C,KACF;AACA,IAAA,IAAI,GAAA,CAAI,MAAA,EAAQ,IAAA,CAAK,iBAAA,GAAoB,EAAE,KAAA,EAAO,CAAC,EAAE,IAAA,EAAM,GAAA,CAAI,MAAA,EAAQ,CAAA,EAAE;AAEzE,IAAA,MAAM,GAAA,GAAM,GAAG,IAAA,CAAK,OAAO,WAAW,kBAAA,CAAmB,IAAA,CAAK,KAAK,CAAC,CAAA,8BAAA,CAAA;AACpE,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK;AAAA,MACvC,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,MAAA,EAAQ,mBAAA;AAAA,QACR,kBAAkB,IAAA,CAAK;AAAA,OACzB;AAAA,MACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA,KAC1B,CAAA;AACD,IAAA,IAAI,CAAC,QAAA,CAAS,EAAA,IAAM,CAAC,SAAS,IAAA,EAAM;AAClC,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,oBAAA,EAAuB,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,EAAA,EAAK,MAAMA,aAAAA,CAAa,QAAQ,CAAC,CAAA;AAAA,OAChG;AAAA,IACF;AAEA,IAAA,IAAI,QAAA,GAAW,CAAA;AACf,IAAA,IAAI,SAAA,GAAY,CAAA;AAChB,IAAA,WAAA,MAAiB,IAAA,IAAQ,SAAA,CAAU,QAAA,CAAS,IAAI,CAAA,EAAG;AACjD,MAAA,IAAI,SAAS,QAAA,EAAU;AACvB,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,MAC1B,CAAA,CAAA,MAAQ;AACN,QAAA;AAAA,MACF;AACA,MAAA,MAAM,KAAA,GAAQ,OAAO,UAAA,EACjB,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,KAAA,IAAS,EAAE,CAAA,CACtC,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,EAAE,CAAA,CACvB,KAAK,EAAE,CAAA;AACV,MAAA,IAAI,OAAO,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,MAAM,KAAA,EAAM;AAC9C,MAAA,IAAI,OAAO,aAAA,EAAe;AACxB,QAAA,QAAA,GAAW,MAAA,CAAO,cAAc,gBAAA,IAAoB,QAAA;AACpD,QAAA,SAAA,GAAY,MAAA,CAAO,cAAc,oBAAA,IAAwB,SAAA;AAAA,MAC3D;AAAA,IACF;AACA,IAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,QAAA,EAAU,SAAA,EAAU;AAAA,EAC3C;AACF,CAAA;AAEA,eAAeA,cAAa,CAAA,EAA8B;AACxD,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,EAAE,IAAA,EAAK;AAAA,EACtB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,cAAA;AAAA,EACT;AACF;;;ACtKA,IAAMF,cAAAA,GAAgB,QAAA;AACtB,IAAMC,iBAAAA,GAAmB,qBAAA;AAiDlB,IAAM,cAAN,MAAwC;AAAA,EACpC,EAAA;AAAA,EACA,aAAA,GAAgB,IAAA;AAAA,EAChB,iBAAA,GAAoB,IAAA;AAAA,EACZ,MAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,sBAAA;AAAA,EACA,OAAA;AAAA,EAEjB,WAAA,CAAY,MAAA,GAA4B,EAAC,EAAG;AAC1C,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,IAAU,OAAA,CAAQ,GAAA,CAAI,WAAA;AAC5C,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,MAAM,6DAA6D,CAAA;AAAA,IAC/E;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,KAAA,GAAQ,OAAO,KAAA,IAASD,cAAAA;AAC7B,IAAA,IAAA,CAAK,WAAW,MAAA,CAAO,OAAA,IAAWC,iBAAAA,EAAkB,OAAA,CAAQ,OAAO,EAAE,CAAA;AACrE,IAAA,IAAA,CAAK,sBAAA,GAAyB,OAAO,sBAAA,IAA0B,IAAA;AAC/D,IAAA,IAAA,CAAK,EAAA,GAAK,MAAA,CAAO,EAAA,IAAM,CAAA,KAAA,EAAQ,KAAK,KAAK,CAAA,CAAA;AACzC,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA,CAAO,KAAA,IAAS,UAAA,CAAW,KAAA;AAAA,EAC5C;AAAA,EAEA,MAAM,SAAS,GAAA,EAAiD;AAC9D,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,KAAK,CAAA;AACtC,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,QAAQ,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,iBAAA,CAAA,EAAqB;AAAA,MACtE,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA;AAAA,MAC1B,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA,KAC1B,CAAA;AACD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,kBAAA,EAAqB,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,EAAA,EAAK,MAAMC,aAAAA,CAAa,QAAQ,CAAC,CAAA;AAAA,OAC9F;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,IAAA,IAAI,MAAA,CAAO,KAAA,EAAO,MAAM,IAAI,KAAA,CAAM,gBAAgB,MAAA,CAAO,KAAA,CAAM,OAAA,IAAW,eAAe,CAAA,CAAE,CAAA;AAC3F,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,GAAU,CAAC,CAAA,EAAG,OAAA;AACrC,IAAA,MAAM,GAAA,GAAwB;AAAA,MAC5B,IAAA,EAAM,SAAS,OAAA,IAAW,EAAA;AAAA,MAC1B,QAAA,EAAU,MAAA,CAAO,KAAA,EAAO,aAAA,IAAiB,CAAA;AAAA,MACzC,SAAA,EAAW,MAAA,CAAO,KAAA,EAAO,iBAAA,IAAqB;AAAA,KAChD;AACA,IAAA,MAAM,QAAA,GAAWC,eAAAA,CAAe,OAAA,EAAS,UAAU,CAAA;AACnD,IAAA,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,GAAA,CAAI,QAAA,GAAW,QAAA;AACxC,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,OAAO,eAAe,GAAA,EAAkD;AACtE,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,IAAI,CAAA;AACrC,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,QAAQ,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,iBAAA,CAAA,EAAqB;AAAA,MACtE,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA;AAAA,MAC1B,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA,KAC1B,CAAA;AACD,IAAA,IAAI,CAAC,QAAA,CAAS,EAAA,IAAM,CAAC,SAAS,IAAA,EAAM;AAClC,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,kBAAA,EAAqB,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,EAAA,EAAK,MAAMD,aAAAA,CAAa,QAAQ,CAAC,CAAA;AAAA,OAC9F;AAAA,IACF;AAEA,IAAA,IAAI,QAAA,GAAW,CAAA;AACf,IAAA,IAAI,SAAA,GAAY,CAAA;AAChB,IAAA,MAAM,YAAA,uBAAmB,GAAA,EAGvB;AACF,IAAA,WAAA,MAAiB,IAAA,IAAQ,SAAA,CAAU,QAAA,CAAS,IAAI,CAAA,EAAG;AACjD,MAAA,IAAI,SAAS,QAAA,EAAU;AACvB,MAAA,IAAI,MAAA;AAcJ,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,MAC1B,CAAA,CAAA,MAAQ;AACN,QAAA;AAAA,MACF;AACA,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,OAAA,GAAU,CAAC,CAAA;AACjC,MAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,EAAO,OAAA;AAC7B,MAAA,IAAI,OAAO,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,MAAM,KAAA,EAAM;AAC9C,MAAA,MAAM,UAAA,GAAa,QAAQ,KAAA,EAAO,UAAA;AAClC,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,KAAA,MAAW,MAAM,UAAA,EAAY;AAC3B,UAAA,MAAM,IAAA,GAAO,YAAA,CAAa,GAAA,CAAI,EAAA,CAAG,KAAK,CAAA,IAAK,EAAE,EAAA,EAAI,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,OAAA,EAAS,EAAA,EAAG;AAC3E,UAAA,IAAI,EAAA,CAAG,EAAA,EAAI,IAAA,CAAK,EAAA,GAAK,EAAA,CAAG,EAAA;AACxB,UAAA,IAAI,GAAG,QAAA,EAAU,IAAA,EAAM,IAAA,CAAK,IAAA,GAAO,GAAG,QAAA,CAAS,IAAA;AAC/C,UAAA,IAAI,GAAG,QAAA,EAAU,SAAA,EAAW,IAAA,CAAK,OAAA,IAAW,GAAG,QAAA,CAAS,SAAA;AACxD,UAAA,YAAA,CAAa,GAAA,CAAI,EAAA,CAAG,KAAA,EAAO,IAAI,CAAA;AAAA,QACjC;AAAA,MACF;AACA,MAAA,IAAI,MAAA,EAAQ,aAAA,KAAkB,YAAA,IAAgB,MAAA,EAAQ,kBAAkB,MAAA,EAAQ;AAC9E,QAAA,KAAA,MAAW,GAAG,IAAI,CAAA,IAAK,YAAA,EAAc;AACnC,UAAA,IAAI,CAAC,IAAA,CAAK,EAAA,IAAM,CAAC,KAAK,IAAA,EAAM;AAC5B,UAAA,IAAI,QAAiC,EAAC;AACtC,UAAA,IAAI;AACF,YAAA,KAAA,GAAQ,KAAK,OAAA,GAAU,IAAA,CAAK,MAAM,IAAA,CAAK,OAAO,IAAI,EAAC;AAAA,UACrD,CAAA,CAAA,MAAQ;AACN,YAAA,KAAA,GAAQ,EAAE,IAAA,EAAM,IAAA,CAAK,OAAA,EAAQ;AAAA,UAC/B;AACA,UAAA,MAAM,EAAE,IAAA,EAAM,UAAA,EAAY,OAAA,EAAS,EAAE,EAAA,EAAI,IAAA,CAAK,EAAA,EAAI,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,KAAA,EAAM,EAAE;AAAA,QAC7E;AACA,QAAA,YAAA,CAAa,KAAA,EAAM;AAAA,MACrB;AACA,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,QAAA,GAAW,MAAA,CAAO,MAAM,aAAA,IAAiB,QAAA;AACzC,QAAA,SAAA,GAAY,MAAA,CAAO,MAAM,iBAAA,IAAqB,SAAA;AAAA,MAChD;AAAA,IACF;AACA,IAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,QAAA,EAAU,SAAA,EAAU;AAAA,EAC3C;AAAA,EAEQ,SAAA,CAAU,KAAsB,MAAA,EAAkC;AACxE,IAAA,MAAM,WAAwC,EAAC;AAC/C,IAAA,IAAI,GAAA,CAAI,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,EAAE,MAAM,QAAA,EAAU,OAAA,EAAS,GAAA,CAAI,MAAA,EAAQ,CAAA;AACrE,IAAA,KAAA,MAAW,CAAA,IAAK,GAAA,CAAI,QAAA,EAAU,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,OAAA,EAAS,CAAA,CAAE,OAAA,EAAS,CAAA;AAChF,IAAA,MAAM,IAAA,GAAwB;AAAA,MAC5B,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAA;AAAA,MACA,UAAA,EAAY,GAAA,CAAI,eAAA,IAAmB,IAAA,CAAK,sBAAA;AAAA,MACxC;AAAA,KACF;AACA,IAAA,IAAI,GAAA,CAAI,KAAA,IAAS,GAAA,CAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACrC,MAAA,IAAA,CAAK,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACjC,IAAA,EAAM,UAAA;AAAA,QACN,QAAA,EAAU;AAAA,UACR,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,aAAa,CAAA,CAAE,WAAA;AAAA,UACf,YAAY,CAAA,CAAE;AAAA;AAChB,OACF,CAAE,CAAA;AAAA,IACJ;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,QAAQ,IAAA,EAAuC;AACrD,IAAA,MAAM,CAAA,GAA4B;AAAA,MAChC,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA,CAAA;AAAA,MACpC,MAAA,EAAQ;AAAA,KACV;AACA,IAAA,IAAI,IAAA,EAAM,CAAA,CAAE,cAAc,CAAA,GAAI,kBAAA;AAC9B,IAAA,OAAO,CAAA;AAAA,EACT;AACF,CAAA;AAEA,eAAeA,cAAa,CAAA,EAA8B;AACxD,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,EAAE,IAAA,EAAK;AAAA,EACtB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,cAAA;AAAA,EACT;AACF;AAEA,SAASC,gBAAe,KAAA,EAAgD;AACtE,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,CAAA,SAAU,EAAC;AAC1C,EAAA,MAAM,MAAiB,EAAC;AACxB,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,IAAI,QAAiC,EAAC;AACtC,IAAA,IAAI;AACF,MAAA,KAAA,GAAQ,CAAA,CAAE,SAAS,SAAA,GAAY,IAAA,CAAK,MAAM,CAAA,CAAE,QAAA,CAAS,SAAS,CAAA,GAAI,EAAC;AAAA,IACrE,CAAA,CAAA,MAAQ;AACN,MAAA,KAAA,GAAQ,EAAE,IAAA,EAAM,CAAA,CAAE,QAAA,CAAS,SAAA,EAAU;AAAA,IACvC;AACA,IAAA,GAAA,CAAI,IAAA,CAAK,EAAE,EAAA,EAAI,CAAA,CAAE,EAAA,EAAI,MAAM,CAAA,CAAE,QAAA,CAAS,IAAA,EAAM,KAAA,EAAO,CAAA;AAAA,EACrD;AACA,EAAA,OAAO,GAAA;AACT;;;AClOA,IAAMH,cAAAA,GAAgB,sBAAA;AACtB,IAAMC,iBAAAA,GAAmB,2BAAA;AAsDlB,IAAM,iBAAN,MAA2C;AAAA,EACvC,EAAA;AAAA,EACA,aAAA,GAAgB,IAAA;AAAA,EAChB,iBAAA,GAAoB,IAAA;AAAA,EACZ,MAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,sBAAA;AAAA,EACA,OAAA;AAAA,EAEjB,WAAA,CAAY,MAAA,GAA+B,EAAC,EAAG;AAC7C,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,IAAU,OAAA,CAAQ,GAAA,CAAI,eAAA;AAC5C,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,KAAA,GAAQ,OAAO,KAAA,IAASD,cAAAA;AAC7B,IAAA,IAAA,CAAK,WAAW,MAAA,CAAO,OAAA,IAAWC,iBAAAA,EAAkB,OAAA,CAAQ,OAAO,EAAE,CAAA;AACrE,IAAA,IAAA,CAAK,sBAAA,GAAyB,OAAO,sBAAA,IAA0B,IAAA;AAC/D,IAAA,IAAA,CAAK,EAAA,GAAK,MAAA,CAAO,EAAA,IAAM,CAAA,QAAA,EAAW,KAAK,KAAK,CAAA,CAAA;AAC5C,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA,CAAO,KAAA,IAAS,UAAA,CAAW,KAAA;AAAA,EAC5C;AAAA,EAEA,MAAM,SAAS,GAAA,EAAiD;AAC9D,IAAA,MAAM,WAAwC,EAAC;AAC/C,IAAA,IAAI,GAAA,CAAI,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,EAAE,MAAM,QAAA,EAAU,OAAA,EAAS,GAAA,CAAI,MAAA,EAAQ,CAAA;AACrE,IAAA,KAAA,MAAW,CAAA,IAAK,IAAI,QAAA,EAAU;AAC5B,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,CAAE,MAAM,OAAA,EAAS,CAAA,CAAE,SAAS,CAAA;AAAA,IACpD;AAEA,IAAA,MAAM,IAAA,GAAwB;AAAA,MAC5B,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAA;AAAA,MACA,UAAA,EAAY,GAAA,CAAI,eAAA,IAAmB,IAAA,CAAK,sBAAA;AAAA,MACxC,MAAA,EAAQ;AAAA,KACV;AACA,IAAA,IAAI,GAAA,CAAI,KAAA,IAAS,GAAA,CAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACrC,MAAA,IAAA,CAAK,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACjC,IAAA,EAAM,UAAA;AAAA,QACN,QAAA,EAAU;AAAA,UACR,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,aAAa,CAAA,CAAE,WAAA;AAAA,UACf,YAAY,CAAA,CAAE;AAAA;AAChB,OACF,CAAE,CAAA;AAAA,IACJ;AAEA,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,QAAQ,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,iBAAA,CAAA,EAAqB;AAAA,MACtE,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,MAAA,EAAQ,kBAAA;AAAA,QACR,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA;AAAA,OACtC;AAAA,MACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA,KAC1B,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,OAAA,GAAU,MAAMC,aAAAA,CAAa,QAAQ,CAAA;AAC3C,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,wBAAwB,QAAA,CAAS,MAAM,IAAI,QAAA,CAAS,UAAU,KAAK,OAAO,CAAA;AAAA,OAC5E;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,OAAO,KAAA,CAAM,OAAA,IAAW,eAAe,CAAA,CAAE,CAAA;AAAA,IAC9E;AAEA,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,GAAU,CAAC,CAAA,EAAG,OAAA;AACrC,IAAA,MAAM,GAAA,GAAwB;AAAA,MAC5B,IAAA,EAAM,SAAS,OAAA,IAAW,EAAA;AAAA,MAC1B,QAAA,EAAU,MAAA,CAAO,KAAA,EAAO,aAAA,IAAiB,CAAA;AAAA,MACzC,SAAA,EAAW,MAAA,CAAO,KAAA,EAAO,iBAAA,IAAqB;AAAA,KAChD;AACA,IAAA,MAAM,QAAA,GAAWC,eAAAA,CAAe,OAAA,EAAS,UAAU,CAAA;AACnD,IAAA,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,GAAA,CAAI,QAAA,GAAW,QAAA;AACxC,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,OAAO,eAAe,GAAA,EAAkD;AACtE,IAAA,MAAM,WAAwC,EAAC;AAC/C,IAAA,IAAI,GAAA,CAAI,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,EAAE,MAAM,QAAA,EAAU,OAAA,EAAS,GAAA,CAAI,MAAA,EAAQ,CAAA;AACrE,IAAA,KAAA,MAAW,CAAA,IAAK,GAAA,CAAI,QAAA,EAAU,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,OAAA,EAAS,CAAA,CAAE,OAAA,EAAS,CAAA;AAEhF,IAAA,MAAM,IAAA,GAAwB;AAAA,MAC5B,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAA;AAAA,MACA,UAAA,EAAY,GAAA,CAAI,eAAA,IAAmB,IAAA,CAAK,sBAAA;AAAA,MACxC,MAAA,EAAQ;AAAA,KACV;AACA,IAAA,IAAI,GAAA,CAAI,KAAA,IAAS,GAAA,CAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACrC,MAAA,IAAA,CAAK,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACjC,IAAA,EAAM,UAAA;AAAA,QACN,QAAA,EAAU;AAAA,UACR,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,aAAa,CAAA,CAAE,WAAA;AAAA,UACf,YAAY,CAAA,CAAE;AAAA;AAChB,OACF,CAAE,CAAA;AAAA,IACJ;AACA,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,QAAQ,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,iBAAA,CAAA,EAAqB;AAAA,MACtE,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,MAAA,EAAQ,mBAAA;AAAA,QACR,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA;AAAA,OACtC;AAAA,MACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA,KAC1B,CAAA;AACD,IAAA,IAAI,CAAC,QAAA,CAAS,EAAA,IAAM,CAAC,SAAS,IAAA,EAAM;AAClC,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,qBAAA,EAAwB,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,EAAA,EAAK,MAAMD,aAAAA,CAAa,QAAQ,CAAC,CAAA;AAAA,OACjG;AAAA,IACF;AAEA,IAAA,IAAI,QAAA,GAAW,CAAA;AACf,IAAA,IAAI,SAAA,GAAY,CAAA;AAChB,IAAA,MAAM,YAAA,uBAAmB,GAAA,EAGvB;AACF,IAAA,WAAA,MAAiB,IAAA,IAAQ,SAAA,CAAU,QAAA,CAAS,IAAI,CAAA,EAAG;AACjD,MAAA,IAAI,SAAS,QAAA,EAAU;AACvB,MAAA,IAAI,MAAA;AAcJ,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,MAC1B,CAAA,CAAA,MAAQ;AACN,QAAA;AAAA,MACF;AACA,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,OAAA,GAAU,CAAC,CAAA;AACjC,MAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,EAAO,OAAA;AAC7B,MAAA,IAAI,OAAO,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,MAAM,KAAA,EAAM;AAC9C,MAAA,MAAM,UAAA,GAAa,QAAQ,KAAA,EAAO,UAAA;AAClC,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,KAAA,MAAW,MAAM,UAAA,EAAY;AAC3B,UAAA,MAAM,IAAA,GAAO,YAAA,CAAa,GAAA,CAAI,EAAA,CAAG,KAAK,CAAA,IAAK,EAAE,EAAA,EAAI,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,OAAA,EAAS,EAAA,EAAG;AAC3E,UAAA,IAAI,EAAA,CAAG,EAAA,EAAI,IAAA,CAAK,EAAA,GAAK,EAAA,CAAG,EAAA;AACxB,UAAA,IAAI,GAAG,QAAA,EAAU,IAAA,EAAM,IAAA,CAAK,IAAA,GAAO,GAAG,QAAA,CAAS,IAAA;AAC/C,UAAA,IAAI,GAAG,QAAA,EAAU,SAAA,EAAW,IAAA,CAAK,OAAA,IAAW,GAAG,QAAA,CAAS,SAAA;AACxD,UAAA,YAAA,CAAa,GAAA,CAAI,EAAA,CAAG,KAAA,EAAO,IAAI,CAAA;AAAA,QACjC;AAAA,MACF;AACA,MAAA,IAAI,MAAA,EAAQ,aAAA,KAAkB,YAAA,IAAgB,MAAA,EAAQ,kBAAkB,MAAA,EAAQ;AAC9E,QAAA,KAAA,MAAW,GAAG,IAAI,CAAA,IAAK,YAAA,EAAc;AACnC,UAAA,IAAI,CAAC,IAAA,CAAK,EAAA,IAAM,CAAC,KAAK,IAAA,EAAM;AAC5B,UAAA,IAAI,QAAiC,EAAC;AACtC,UAAA,IAAI;AACF,YAAA,KAAA,GAAQ,KAAK,OAAA,GAAU,IAAA,CAAK,MAAM,IAAA,CAAK,OAAO,IAAI,EAAC;AAAA,UACrD,CAAA,CAAA,MAAQ;AACN,YAAA,KAAA,GAAQ,EAAE,IAAA,EAAM,IAAA,CAAK,OAAA,EAAQ;AAAA,UAC/B;AACA,UAAA,MAAM,EAAE,IAAA,EAAM,UAAA,EAAY,OAAA,EAAS,EAAE,EAAA,EAAI,IAAA,CAAK,EAAA,EAAI,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,KAAA,EAAM,EAAE;AAAA,QAC7E;AACA,QAAA,YAAA,CAAa,KAAA,EAAM;AAAA,MACrB;AACA,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,QAAA,GAAW,MAAA,CAAO,MAAM,aAAA,IAAiB,QAAA;AACzC,QAAA,SAAA,GAAY,MAAA,CAAO,MAAM,iBAAA,IAAqB,SAAA;AAAA,MAChD;AAAA,IACF;AACA,IAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,QAAA,EAAU,SAAA,EAAU;AAAA,EAC3C;AACF,CAAA;AAEA,eAAeA,cAAa,CAAA,EAA8B;AACxD,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,EAAE,IAAA,EAAK;AAAA,EACtB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,cAAA;AAAA,EACT;AACF;AAEA,SAASC,gBAAe,KAAA,EAAgD;AACtE,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,CAAA,SAAU,EAAC;AAC1C,EAAA,MAAM,MAAiB,EAAC;AACxB,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,IAAI,QAAiC,EAAC;AACtC,IAAA,IAAI;AACF,MAAA,KAAA,GAAQ,CAAA,CAAE,SAAS,SAAA,GAAY,IAAA,CAAK,MAAM,CAAA,CAAE,QAAA,CAAS,SAAS,CAAA,GAAI,EAAC;AAAA,IACrE,CAAA,CAAA,MAAQ;AACN,MAAA,KAAA,GAAQ,EAAE,IAAA,EAAM,CAAA,CAAE,QAAA,CAAS,SAAA,EAAU;AAAA,IACvC;AACA,IAAA,GAAA,CAAI,IAAA,CAAK,EAAE,EAAA,EAAI,CAAA,CAAE,EAAA,EAAI,MAAM,CAAA,CAAE,QAAA,CAAS,IAAA,EAAM,KAAA,EAAO,CAAA;AAAA,EACrD;AACA,EAAA,OAAO,GAAA;AACT;;;ACnQA,IAAMF,iBAAAA,GAAmB,wBAAA;AAiClB,IAAM,gBAAN,MAA0C;AAAA,EACtC,EAAA;AAAA,EACA,iBAAA,GAAoB,IAAA;AAAA,EACZ,KAAA;AAAA,EACA,OAAA;AAAA,EACA,sBAAA;AAAA,EACA,OAAA;AAAA,EAEjB,YAAY,MAAA,EAA6B;AACvC,IAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACjB,MAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,IACtD;AACA,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,WAAW,MAAA,CAAO,OAAA,IAAWA,iBAAAA,EAAkB,OAAA,CAAQ,OAAO,EAAE,CAAA;AACrE,IAAA,IAAA,CAAK,sBAAA,GAAyB,OAAO,sBAAA,IAA0B,IAAA;AAC/D,IAAA,IAAA,CAAK,EAAA,GAAK,MAAA,CAAO,EAAA,IAAM,CAAA,OAAA,EAAU,KAAK,KAAK,CAAA,CAAA;AAC3C,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA,CAAO,KAAA,IAAS,UAAA,CAAW,KAAA;AAAA,EAC5C;AAAA,EAEA,MAAM,SAAS,GAAA,EAAiD;AAC9D,IAAA,MAAM,WAA0C,EAAC;AACjD,IAAA,IAAI,IAAI,MAAA,EAAQ;AACd,MAAA,QAAA,CAAS,KAAK,EAAE,IAAA,EAAM,UAAU,OAAA,EAAS,GAAA,CAAI,QAAQ,CAAA;AAAA,IACvD;AACA,IAAA,KAAA,MAAW,CAAA,IAAK,IAAI,QAAA,EAAU;AAC5B,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,CAAE,MAAM,OAAA,EAAS,CAAA,CAAE,SAAS,CAAA;AAAA,IACpD;AAEA,IAAA,MAAM,IAAA,GAA0B;AAAA,MAC9B,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAA;AAAA,MACA,MAAA,EAAQ,KAAA;AAAA,MACR,SAAS,EAAE,WAAA,EAAa,GAAA,CAAI,eAAA,IAAmB,KAAK,sBAAA;AAAuB,KAC7E;AAEA,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,QAAQ,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,SAAA,CAAA,EAAa;AAAA,MAC9D,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,MAC9C,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA,KAC1B,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,OAAA,GAAU,MAAMC,aAAAA,CAAa,QAAQ,CAAA;AAC3C,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,uBAAuB,QAAA,CAAS,MAAM,IAAI,QAAA,CAAS,UAAU,KAAK,OAAO,CAAA;AAAA,OAC3E;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,MAAA,CAAO,KAAK,CAAA,CAAE,CAAA;AAAA,IAClD;AAEA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,MAAA,CAAO,OAAA,EAAS,OAAA,IAAW,EAAA;AAAA,MACjC,QAAA,EAAU,OAAO,iBAAA,IAAqB,CAAA;AAAA,MACtC,SAAA,EAAW,OAAO,UAAA,IAAc;AAAA,KAClC;AAAA,EACF;AAAA,EAEA,OAAO,eAAe,GAAA,EAAkD;AACtE,IAAA,MAAM,WAA0C,EAAC;AACjD,IAAA,IAAI,GAAA,CAAI,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,EAAE,MAAM,QAAA,EAAU,OAAA,EAAS,GAAA,CAAI,MAAA,EAAQ,CAAA;AACrE,IAAA,KAAA,MAAW,CAAA,IAAK,GAAA,CAAI,QAAA,EAAU,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,OAAA,EAAS,CAAA,CAAE,OAAA,EAAS,CAAA;AAEhF,IAAA,MAAM,IAAA,GAA0B;AAAA,MAC9B,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAA;AAAA,MACA,MAAA,EAAQ,IAAA;AAAA,MACR,SAAS,EAAE,WAAA,EAAa,GAAA,CAAI,eAAA,IAAmB,KAAK,sBAAA;AAAuB,KAC7E;AAEA,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,QAAQ,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,SAAA,CAAA,EAAa;AAAA,MAC9D,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,MAC9C,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA,KAC1B,CAAA;AACD,IAAA,IAAI,CAAC,QAAA,CAAS,EAAA,IAAM,CAAC,SAAS,IAAA,EAAM;AAClC,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,oBAAA,EAAuB,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,EAAA,EAAK,MAAMA,aAAAA,CAAa,QAAQ,CAAC,CAAA;AAAA,OAChG;AAAA,IACF;AAEA,IAAA,IAAI,QAAA,GAAW,CAAA;AACf,IAAA,IAAI,SAAA,GAAY,CAAA;AAChB,IAAA,WAAA,MAAiB,IAAA,IAAQ,YAAA,CAAa,QAAA,CAAS,IAAI,CAAA,EAAG;AACpD,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,MAC1B,CAAA,CAAA,MAAQ;AACN,QAAA;AAAA,MACF;AACA,MAAA,MAAM,KAAA,GAAQ,OAAO,OAAA,EAAS,OAAA;AAC9B,MAAA,IAAI,OAAO,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,MAAM,KAAA,EAAM;AAC9C,MAAA,IAAI,MAAA,CAAO,iBAAA,KAAsB,MAAA,EAAW,QAAA,GAAW,MAAA,CAAO,iBAAA;AAC9D,MAAA,IAAI,MAAA,CAAO,UAAA,KAAe,MAAA,EAAW,SAAA,GAAY,MAAA,CAAO,UAAA;AACxD,MAAA,IAAI,OAAO,IAAA,EAAM;AAAA,IACnB;AACA,IAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,QAAA,EAAU,SAAA,EAAU;AAAA,EAC3C;AACF,CAAA;AAEA,eAAeA,cAAa,CAAA,EAA8B;AACxD,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,EAAE,IAAA,EAAK;AAAA,EACtB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,cAAA;AAAA,EACT;AACF;;;AClJA,IAAM,aAAA,GAAwC;AAAA,EAC5C,WAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA;AAEA,SAAS,cAAc,CAAA,EAAyC;AAC9D,EAAA,OAAO,CAAA,KAAM,MAAA,IAAc,aAAA,CAAoC,QAAA,CAAS,CAAC,CAAA;AAC3E;AAsBA,IAAM,oBAAA,GAAuB,YAAA;AAC7B,IAAM,kBAAA,GAAqB,wBAAA;AAE3B,IAAM,cAAA,GAA8C;AAAA,EAClD,SAAA,EAAW,mBAAA;AAAA,EACX,MAAA,EAAQ,kBAAA;AAAA,EACR,OAAA,EAAS,sBAAA;AAAA,EACT,QAAA,EAAU,eAAA;AAAA,EACV,IAAA,EAAM,QAAA;AAAA,EACN,MAAA,EAAQ;AACV,CAAA;AAeA,eAAsB,aAAA,CAAc,IAAA,GAAsB,EAAC,EAA6B;AACtF,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,IAAS,UAAA,CAAW,KAAA;AAEzC,EAAA,IAAI,KAAK,OAAA,EAAS;AAChB,IAAA,OAAO,YAAA,CAAa,IAAA,CAAK,OAAA,EAAS,IAAI,CAAA;AAAA,EACxC;AAGA,EAAA,IAAI,QAAQ,GAAA,CAAI,iBAAA,EAAmB,OAAO,YAAA,CAAa,aAAa,IAAI,CAAA;AACxE,EAAA,IAAI,QAAQ,GAAA,CAAI,cAAA,EAAgB,OAAO,YAAA,CAAa,UAAU,IAAI,CAAA;AAClE,EAAA,IAAI,QAAQ,GAAA,CAAI,eAAA,EAAiB,OAAO,YAAA,CAAa,WAAW,IAAI,CAAA;AACpE,EAAA,IAAI,QAAQ,GAAA,CAAI,gBAAA,EAAkB,OAAO,YAAA,CAAa,YAAY,IAAI,CAAA;AACtE,EAAA,IAAI,QAAQ,GAAA,CAAI,WAAA,EAAa,OAAO,YAAA,CAAa,QAAQ,IAAI,CAAA;AAC7D,EAAA,IAAI,MAAM,WAAA,CAAY,IAAA,CAAK,aAAA,IAAiB,kBAAA,EAAoB,OAAO,CAAA,EAAG;AACxE,IAAA,OAAO,YAAA,CAAa,UAAU,IAAI,CAAA;AAAA,EACpC;AAEA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR;AAAA,MACE,sCAAA;AAAA,MACA,uDAAA;AAAA,MACA,oDAAA;AAAA,MACA,8CAAA;AAAA,MACA,+CAAA;AAAA,MACA,+CAAA;AAAA,MACA,gFAAA;AAAA,MACA;AAAA,KACF,CAAE,KAAK,IAAI;AAAA,GACb;AACF;AAEA,SAAS,YAAA,CAAa,MAAmB,IAAA,EAAsC;AAC7E,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,cAAA,CAAe,IAAI,CAAA;AAC/C,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,WAAA;AACH,MAAA,OAAO,EAAE,OAAA,EAAS,IAAI,gBAAA,CAAiB,EAAE,OAAO,CAAA,EAAG,MAAA,EAAQ,WAAA,EAAa,KAAA,EAAM;AAAA,IAChF,KAAK,QAAA;AACH,MAAA,OAAO,EAAE,OAAA,EAAS,IAAI,aAAA,CAAc,EAAE,OAAO,CAAA,EAAG,MAAA,EAAQ,QAAA,EAAU,KAAA,EAAM;AAAA,IAC1E,KAAK,SAAA;AACH,MAAA,OAAO,EAAE,OAAA,EAAS,IAAI,cAAA,CAAe,EAAE,OAAO,CAAA,EAAG,MAAA,EAAQ,SAAA,EAAW,KAAA,EAAM;AAAA,IAC5E,KAAK,UAAA;AACH,MAAA,OAAO,EAAE,OAAA,EAAS,IAAI,eAAA,CAAgB,EAAE,OAAO,CAAA,EAAG,MAAA,EAAQ,UAAA,EAAY,KAAA,EAAM;AAAA,IAC9E,KAAK,MAAA;AACH,MAAA,OAAO,EAAE,OAAA,EAAS,IAAI,WAAA,CAAY,EAAE,OAAO,CAAA,EAAG,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAM;AAAA,IACtE,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,OAAA,GAAU,KAAK,aAAA,IAAiB,kBAAA;AACtC,MAAA,OAAO,EAAE,OAAA,EAAS,IAAI,aAAA,CAAc,EAAE,KAAA,EAAO,OAAA,EAAS,CAAA,EAAG,MAAA,EAAQ,QAAA,EAAU,KAAA,EAAM;AAAA,IACnF;AAAA;AAEJ;AAEA,eAAe,WAAA,CACb,SACA,OAAA,EACkB;AAClB,EAAA,IAAI;AACF,IAAA,MAAM,MAAM,CAAA,EAAG,OAAA,CAAQ,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAC,CAAA,SAAA,CAAA;AACzC,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,IAAI,UAAA,CAAW,MAAM,UAAA,CAAW,KAAA,IAAS,GAAG,CAAA;AAClD,IAAA,MAAM,CAAA,GAAI,MAAM,OAAA,CAAQ,GAAA,EAAK,EAAE,MAAA,EAAQ,UAAA,CAAW,QAAQ,CAAA;AAC1D,IAAA,YAAA,CAAa,CAAC,CAAA;AACd,IAAA,OAAO,CAAA,CAAE,EAAA;AAAA,EACX,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;;;ACpFO,SAAS,mBAAA,CACd,KACA,eAAA,EACQ;AACR,EAAA,MAAM,OAAA,GAAU,IAAI,gBAAA,EAAiB;AACrC,EAAA,MAAM,MAAA,GAAS,IAAI,SAAA,EAAU;AAC7B,EAAA,MAAM,aAAa,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,MAAM,CAAA;AACzD,EAAA,MAAM,cAAc,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,MAAM,CAAA;AAE1D,EAAA,MAAM,QAAA,GAAqB,CAAC,OAAA,CAAQ,oBAAoB,CAAA;AAExD,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,MAAM,GAAA,GAAM,sBAAsB,eAAe,CAAA;AACjD,IAAA,IAAI,GAAA,CAAI,MAAA,GAAS,CAAA,EAAG,QAAA,CAAS,KAAK,GAAG,CAAA;AAAA,EACvC;AAEA,EAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,IAAA,QAAA,CAAS,IAAA;AAAA,MACP,CAAA;AAAA,EAAuB,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,IAAA,EAAO,CAAA,CAAE,SAAS,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KAC/E;AAAA,EACF;AACA,EAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,IAAA,QAAA,CAAS,IAAA;AAAA,MACP,CAAA;AAAA,EAAwC,WAAA,CACnC,GAAA;AAAA,QACC,CAAC,CAAA,KACC,CAAA,KAAA,EAAQ,CAAA,CAAE,MAAA,CAAO,QAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,YAAY,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,EAAK,EAAE,SAAS,CAAA;AAAA,OAC3E,CACC,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KACjB;AAAA,EACF;AAEA,EAAA,QAAA,CAAS,IAAA;AAAA,IACP;AAAA,GACF;AAQA,EAAA,MAAM,IAAA,GAAO,iBAAiB,IAAA,IAAQ,gBAAA;AACtC,EAAA,IAAI,SAAS,gBAAA,EAAkB;AAC7B,IAAA,QAAA,CAAS,IAAA;AAAA,MACP,CAAA,0JAAA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,QAAA,CAAS,KAAK,MAAM,CAAA;AAC7B;AAEA,SAAS,sBAAsB,GAAA,EAA8B;AAC3D,EAAA,MAAM,KAAA,GAAkB,CAAC,mBAAmB,CAAA;AAC5C,EAAA,IAAI,IAAI,MAAA,EAAQ;AACd,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,GAAA,CAAI,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,EACvC;AACA,EAAA,IAAI,IAAI,QAAA,EAAU;AAChB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,uBAAA,EAA0B,GAAA,CAAI,QAAQ,CAAA,6EAAA,CAA+E,CAAA;AAAA,EAClI;AACA,EAAA,IAAI,IAAI,QAAA,EAAU;AAChB,IAAA,KAAA,CAAM,IAAA,CAAK,eAAe,GAAA,CAAI,QAAQ,KAAK,eAAA,CAAgB,GAAA,CAAI,QAAQ,CAAC,CAAA,CAAE,CAAA;AAAA,EAC5E;AACA,EAAA,OAAO,MAAM,MAAA,GAAS,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,GAAI,EAAA;AAC/C;AAEA,IAAM,eAAA,GAA4E;AAAA,EAChF,IAAA,EACE,qPAAA;AAAA,EACF,KAAA,EACE,8HAAA;AAAA,EACF,QAAA,EACE,8IAAA;AAAA,EACF,MAAA,EACE;AACJ,CAAA;;;AClHA,IAAM,aAAA,GAGD;AAAA;AAAA,EAEH;AAAA,IACE,GAAA,EAAK,aAAA;AAAA,IACL,QAAA,EAAU;AAAA,MACR,2DAAA;AAAA,MACA,gDAAA;AAAA,MACA,yCAAA;AAAA,MACA,gBAAA;AAAA,MACA,wDAAA;AAAA,MACA,oBAAA;AAAA,MACA;AAAA;AACF,GACF;AAAA;AAAA,EAEA;AAAA,IACE,GAAA,EAAK,kBAAA;AAAA,IACL,QAAA,EAAU;AAAA,MACR,6DAAA;AAAA,MACA,6BAAA;AAAA,MACA,+CAAA;AAAA,MACA,uCAAA;AAAA,MACA,kBAAA;AAAA,MACA,sDAAA;AAAA,MACA,kBAAA;AAAA,MACA,mCAAA;AAAA,MACA;AAAA;AACF,GACF;AAAA;AAAA,EAEA;AAAA,IACE,GAAA,EAAK,gBAAA;AAAA,IACL,QAAA,EAAU;AAAA,MACR,yCAAA;AAAA,MACA,iDAAA;AAAA,MACA,wCAAA;AAAA,MACA,iCAAA;AAAA,MACA,+FAAA;AAAA,MACA,sFAAA;AAAA,MACA;AAAA;AACF,GACF;AAAA;AAAA,EAEA;AAAA,IACE,GAAA,EAAK,kBAAA;AAAA,IACL,QAAA,EAAU;AAAA,MACR,sDAAA;AAAA,MACA;AAAA;AACF,GACF;AAAA;AAAA,EAEA;AAAA,IACE,GAAA,EAAK,wBAAA;AAAA,IACL,QAAA,EAAU;AAAA,MACR,qCAAA;AAAA,MACA,mDAAA;AAAA,MACA,kBAAA;AAAA,MACA,gCAAA;AAAA,MACA,uGAAA;AAAA,MACA,sDAAA;AAAA,MACA;AAAA;AACF,GACF;AAAA;AAAA,EAEA;AAAA,IACE,GAAA,EAAK,wBAAA;AAAA,IACL,QAAA,EAAU;AAAA,MACR,mQAAA;AAAA,MACA,0HAAA;AAAA,MACA,wJAAA;AAAA,MACA,sGAAA;AAAA,MACA;AAAA;AACF;AAEJ,CAAA;AAQO,IAAM,oBAAA,GAAuC,CAAC,UAAA,KAAuB;AAC1E,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,KAAA,MAAW,QAAQ,aAAA,EAAe;AAChC,IAAA,KAAA,MAAW,OAAA,IAAW,KAAK,QAAA,EAAU;AACnC,MAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,EAAG;AAC5B,QAAA,IAAA,CAAK,GAAA,CAAI,KAAK,GAAG,CAAA;AACjB,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,CAAC,GAAG,IAAI,CAAA;AACjB,CAAA;AC3GO,SAAS,wBAAwB,KAAA,EAA+C;AACrF,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM;AACtB,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,CAAA,CAAE,UAAA,EAAY,GAAG,CAAA;AACzC,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,CAAA,CAAE,YAAA,EAAc,GAAG,CAAA;AAC7C,IAAA,MAAM,OAAA,GAAU,CAAA,CAAE,OAAA,GAAU,YAAA,GAAe,EAAA;AAC3C,IAAA,OAAO,CAAA,OAAA,EAAU,MAAM,CAAA,CAAA,EAAI,OAAO,aAAa,QAAQ,CAAA,CAAA,CAAA;AAAA,EACzD,CAAC,CAAA;AACH;AASA,IAAM,YAAA,GAAqE;AAAA,EACzE,EAAA,EAAI;AAAA,IACF,MAAA,EACE,iJAAA;AAAA,IACF,KAAA,EAAO;AAAA,GACT;AAAA,EACA,EAAA,EAAI;AAAA,IACF,MAAA,EACE,6JAAA;AAAA,IACF,KAAA,EAAO;AAAA,GACT;AAAA,EACA,EAAA,EAAI;AAAA,IACF,MAAA,EACE,oJAAA;AAAA,IACF,KAAA,EAAO;AAAA;AAEX,CAAA;AAEO,SAAS,eAAA,CACd,OACA,SAAA,EACkC;AAClC,EAAA,MAAM,GAAA,GAAM,aAAa,KAAK,CAAA;AAC9B,EAAA,MAAM,IAAA,GACJ,SAAA,CAAU,MAAA,KAAW,CAAA,GACjB,CAAA,EAAG,IAAI,KAAK,CAAA,OAAA,CAAA,GACZ,CAAA,EAAG,GAAA,CAAI,KAAK;AAAA,EAAK,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,EAAA,EAAK,CAAC,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAChE,EAAA,OAAO,EAAE,MAAA,EAAQ,GAAA,CAAI,MAAA,EAAQ,MAAM,IAAA,EAAK;AAC1C;AAOA,eAAsB,qBAAA,CACpB,KACA,SAAA,EAOC;AACD,EAAA,MAAM,MAAA,GAAsB,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAC7C,EAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,GAAA;AAAA,IAC5B,MAAA,CAAO,GAAA,CAAI,OAAO,KAAA,KAAU;AAC1B,MAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAK,GAAI,eAAA,CAAgB,OAAO,SAAS,CAAA;AACzD,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAM,MAAM,GAAA,CAAI,QAAA,CAAS;AAAA,UAC7B,MAAA;AAAA,UACA,UAAU,CAAC,EAAE,MAAM,MAAA,EAAQ,OAAA,EAAS,MAAM,CAAA;AAAA,UAC1C,eAAA,EAAiB;AAAA,SAClB,CAAA;AACD,QAAA,OAAO,EAAE,KAAA,EAAO,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,IAAA,EAAK,EAAG,QAAA,EAAU,GAAA,CAAI,QAAA,EAAU,SAAA,EAAW,GAAA,CAAI,SAAA,EAAU;AAAA,MAC1F,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,EAAE,KAAA,EAAO,IAAA,EAAM,IAAI,QAAA,EAAU,CAAA,EAAG,WAAW,CAAA,EAAE;AAAA,MACtD;AAAA,IACF,CAAC;AAAA,GACH;AACA,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,KAAA,EAAO,CAAC,CAAU,CAAC,CAAA;AACjE,EAAA,MAAM,QAAA,GAAW,QAAQ,MAAA,CAAO,CAAC,GAAG,CAAA,KAAM,CAAA,GAAI,CAAA,CAAE,QAAA,EAAU,CAAC,CAAA;AAC3D,EAAA,MAAM,SAAA,GAAY,QAAQ,MAAA,CAAO,CAAC,GAAG,CAAA,KAAM,CAAA,GAAI,CAAA,CAAE,SAAA,EAAW,CAAC,CAAA;AAC7D,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,OAAA,CAAQ,GAAA,CAAI,IAAI,GAAG,IAAA,IAAQ,EAAA;AAAA,IAC/B,EAAA,EAAI,OAAA,CAAQ,GAAA,CAAI,IAAI,GAAG,IAAA,IAAQ,EAAA;AAAA,IAC/B,EAAA,EAAI,OAAA,CAAQ,GAAA,CAAI,IAAI,GAAG,IAAA,IAAQ,EAAA;AAAA,IAC/B,QAAA;AAAA,IACA;AAAA,GACF;AACF;AAOO,SAAS,cAAA,CACd,SAAA,EACA,SAAA,EACA,IAAA,EACkC;AAClC,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,gFAAA;AAAA,IACA,0EAAA;AAAA,IACA,EAAA;AAAA,IACA,mDAAA;AAAA,IACA,sEAAA;AAAA,IACA,gEAAA;AAAA,IACA,wDAAA;AAAA,IACA,EAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,IAAI,CAAA;AAEX,EAAA,MAAM,YAAsB,EAAC;AAC7B,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,SAAA,CAAU,IAAA;AAAA,MACR,CAAA,kBAAA,EAAqB,SAAA,CAAU,SAAS,CAAA,GAAA,EAAM,UAAU,QAAQ,CAAA,CAAA;AAAA,MAChE,CAAA,kBAAA,EAAqB,UAAU,eAAe,CAAA,CAAA;AAAA,MAC9C;AAAA,KACF;AAAA,EACF;AACA,EAAA,IAAI,SAAS,IAAA,CAAK,EAAA,IAAM,IAAA,CAAK,EAAA,IAAM,KAAK,EAAA,CAAA,EAAK;AAC3C,IAAA,SAAA,CAAU,KAAK,qCAAqC,CAAA;AACpD,IAAA,IAAI,KAAK,EAAA,EAAI,SAAA,CAAU,KAAK,CAAA,uBAAA,EAA0B,IAAA,CAAK,EAAE,CAAA,CAAE,CAAA;AAC/D,IAAA,IAAI,KAAK,EAAA,EAAI,SAAA,CAAU,KAAK,CAAA,sBAAA,EAAyB,IAAA,CAAK,EAAE,CAAA,CAAE,CAAA;AAC9D,IAAA,IAAI,KAAK,EAAA,EAAI,SAAA,CAAU,KAAK,CAAA,wBAAA,EAA2B,IAAA,CAAK,EAAE,CAAA,CAAE,CAAA;AAChE,IAAA,SAAA,CAAU,KAAK,EAAE,CAAA;AAAA,EACnB;AACA,EAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,IAAA,SAAA,CAAU,KAAK,6BAA6B,CAAA;AAAA,EAC9C,CAAA,MAAO;AACL,IAAA,SAAA,CAAU,KAAK,sBAAsB,CAAA;AACrC,IAAA,KAAA,MAAW,KAAK,SAAA,EAAW,SAAA,CAAU,IAAA,CAAK,CAAA,EAAA,EAAK,CAAC,CAAA,CAAE,CAAA;AAAA,EACpD;AACA,EAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA,EAAE;AAC9C;AAGO,SAAS,cAAA,CACd,IAAA,EACA,OAAA,EACA,SAAA,EACS;AACT,EAAA,MAAM,SAAS,IAAA,CACZ,KAAA,CAAM,SAAS,CAAA,CACf,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA,CACnB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,CAAC,CAAA;AAE7B,EAAA,MAAM,SAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,0CAA0C,CAAA;AACpE,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,UAAA,CAAW,MAAM,CAAC,CAAE,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AACtD,IAAA,MAAM,YAAY,KAAA,CAAM,OAAA,CAAQ,6BAAA,EAA+B,EAAE,EAAE,IAAA,EAAK;AACxE,IAAA,IAAI,CAAC,SAAA,EAAW;AAChB,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,EAAA,EAAI,CAAA,IAAA,EAAO,IAAA,EAAM,CAAA,CAAA;AAAA,MACjB,OAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,iBAAA,EAAmB,KAAA;AAAA,MACnB,QAAA,EAAU;AAAA,KACX,CAAA;AAAA,EACH;AACA,EAAA,OAAO,MAAA;AACT;AAMA,eAAsB,iBAAA,CACpB,GAAA,EACA,SAAA,EACA,SAAA,EACA,IAAA,EACmE;AACnE,EAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,KAAS,cAAA,CAAe,SAAA,EAAW,WAAW,IAAI,CAAA;AAClE,EAAA,MAAM,GAAA,GAAM,MAAM,GAAA,CAAI,QAAA,CAAS;AAAA,IAC7B,MAAA;AAAA,IACA,UAAU,CAAC,EAAE,MAAM,MAAA,EAAQ,OAAA,EAAS,MAAM,CAAA;AAAA,IAC1C,eAAA,EAAiB;AAAA,GAClB,CAAA;AACD,EAAA,MAAM,MAAA,GAAS,cAAA;AAAA,IACb,GAAA,CAAI,IAAA;AAAA,IACJ,CAAC,CAAC,SAAA;AAAA,IACF,WAAW,SAAA,IAAa;AAAA,GAC1B;AACA,EAAA,OAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,IAAI,QAAA,EAAU,SAAA,EAAW,IAAI,SAAA,EAAU;AACpE;AAEA,SAAS,QAAA,CAAS,GAAW,CAAA,EAAmB;AAC9C,EAAA,OAAO,CAAA,CAAE,MAAA,IAAU,CAAA,GAAI,CAAA,GAAI,CAAA,EAAG,EAAE,KAAA,CAAM,CAAA,EAAG,CAAA,GAAI,CAAC,CAAC,CAAA,MAAA,CAAA;AACjD;AAEA,SAAS,KAAA,CAAM,CAAA,EAAW,EAAA,EAAY,EAAA,EAAoB;AACxD,EAAA,OAAO,KAAK,GAAA,CAAI,EAAA,EAAI,KAAK,GAAA,CAAI,EAAA,EAAI,CAAC,CAAC,CAAA;AACrC;ACzLO,IAAM,cAAA,GAAiB,EAAE,IAAA,CAAK,CAAC,MAAM,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,KAAK,CAAC,CAAA;AAG7D,IAAM,gBAAA,GAAmB,EAAE,IAAA,CAAK;AAAA,EACrC,cAAA;AAAA,EACA,UAAA;AAAA,EACA,iBAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAC,CAAA;AAQM,IAAM,KAAA,GAAQ,EAAE,MAAA,CAAO;AAAA,EAC5B,EAAA,EAAI,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACpB,OAAA,EAAS,EAAE,OAAA,EAAQ;AAAA,EACnB,SAAA,EAAW,EAAE,IAAA,CAAK,CAAC,QAAQ,SAAS,CAAC,EAAE,QAAA,EAAS;AAAA,EAChD,SAAA,EAAW,EAAE,MAAA,EAAO;AAAA,EACpB,iBAAA,EAAmB,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,EAC1C,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACvB,CAAC,CAAA;AAGM,IAAM,YAAA,GAAe,CAAA,CAAE,kBAAA,CAAmB,MAAA,EAAQ;AAAA,EACvD,CAAA,CAAE,OAAO,EAAE,IAAA,EAAM,EAAE,OAAA,CAAQ,OAAO,GAAG,CAAA;AAAA,EACrC,EAAE,MAAA,CAAO;AAAA,IACP,IAAA,EAAM,CAAA,CAAE,OAAA,CAAQ,WAAW,CAAA;AAAA,IAC3B,SAAA,EAAW,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,QAAQ;AAAA,GAC9B,CAAA;AAAA,EACD,EAAE,MAAA,CAAO;AAAA,IACP,IAAA,EAAM,CAAA,CAAE,OAAA,CAAQ,SAAS,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMxB,OAAA,EAAS,EAAE,MAAA;AAAO,GACpB,CAAA;AAAA,EACD,EAAE,MAAA,CAAO;AAAA,IACP,IAAA,EAAM,CAAA,CAAE,OAAA,CAAQ,QAAQ,CAAA;AAAA,IACxB,MAAA,EAAQ,CAAA,CAAE,KAAA,CAAM,KAAK;AAAA,GACtB;AACH,CAAC,CAAA;AAGM,IAAM,UAAA,GAAa,EAAE,MAAA,CAAO;AAAA,EACjC,KAAA,EAAO,cAAA;AAAA,EACP,SAAA,EAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/B,eAAA,EAAiB,CAAA,CAAE,MAAA,EAAO,CAAE,WAAA,EAAY;AAAA,EACxC,OAAA,EAAS;AACX,CAAC,CAAA;AAGM,IAAM,WAAA,GAAc,EAAE,MAAA,CAAO;AAAA,EAClC,OAAA,EAAS,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA;AAAA,EACpB,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACvB,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACvB,KAAA,EAAO,EAAE,MAAA,CAAO;AAAA,IACd,SAAA,EAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAC/B,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAC7B,eAAA,EAAiB,CAAA,CAAE,MAAA,EAAO,CAAE,WAAA;AAAY,GACzC,CAAA;AAAA,EACD,MAAA,EAAQ,CAAA,CAAE,KAAA,CAAM,UAAU,CAAA;AAAA,EAC1B,QAAA,EAAU,EAAE,MAAA,CAAO;AAAA,IACjB,UAAA,EAAY,EAAE,MAAA,EAAO;AAAA,IACrB,WAAA,EAAa,gBAAA;AAAA,IACb,aAAA,EAAe,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IACnC,8BAA8B,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,WAAA;AAAY,GAC5D;AACH,CAAC,CAAA;AAG0B,EAAE,IAAA,CAAK;AAAA,EAChC,kBAAA;AAAA,EACA,mBAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAC;;;AC5FM,SAAS,kBAAkB,MAAA,EAA6B;AAC7D,EAAA,OAAO,SAAA,CAAU,WAAA,CAAY,KAAA,CAAM,MAAM,CAAC,CAAA;AAC5C;AAGO,SAAS,oBAAoB,IAAA,EAA2B;AAC7D,EAAA,OAAO,WAAA,CAAY,KAAA,CAAM,KAAA,CAAM,IAAI,CAAC,CAAA;AACtC;AAMO,SAAS,iBAAA,CAAkB,WAAmB,eAAA,EAAiC;AACpF,EAAA,MAAM,CAAA,GAAI,IAAI,IAAA,CAAK,SAAS,CAAA;AAC5B,EAAA,MAAM,IAAA,GAAO,EAAE,cAAA,EAAe;AAC9B,EAAA,MAAM,EAAA,GAAK,OAAO,CAAA,CAAE,WAAA,KAAgB,CAAC,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA;AACtD,EAAA,MAAM,EAAA,GAAK,OAAO,CAAA,CAAE,UAAA,EAAY,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AACjD,EAAA,MAAM,EAAA,GAAK,OAAO,CAAA,CAAE,WAAA,EAAa,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAClD,EAAA,MAAM,EAAA,GAAK,OAAO,CAAA,CAAE,aAAA,EAAe,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AACpD,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,eAAe,CAAA;AACtC,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,EAAG,EAAE,CAAA,IAAA,EAAO,GAAG,CAAA,KAAA,CAAA;AACjD;;;AC0BA,IAAM,iBAAA,GAAyD;AAAA,EAC7D,EAAA,EAAI,GAAA;AAAA,EACJ,EAAA,EAAI,GAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,GAAA;AAAA,EACJ,GAAA,EAAK;AACP,CAAA;AAMA,eAAsB,cAAc,KAAA,EAAmD;AACrF,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,OAAA,IAAW,EAAC;AAC/B,EAAA,MAAM,KAAA,GAAQ,KAAK,YAAA,IAAgB,EAAA;AACnC,EAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AACzB,EAAA,MAAM,SAAA,GAAY,IAAI,IAAA,CAAK,OAAO,EAAE,WAAA,EAAY;AAGhD,EAAA,MAAM,SAAA,GAAY,uBAAA,CAAwB,KAAA,CAAM,YAAY,CAAA;AAG5D,EAAA,MAAM,IAAA,GAAO,MAAM,qBAAA,CAAsB,KAAA,CAAM,KAAK,SAAS,CAAA;AAG7D,EAAA,MAAM,UAAA,GAAa,OAAA,GAAU,UAAA,CAAW,CAAC,IAAA,EAAM,MAAM,IAAA,EAAM,IAAI,CAAA,EAAG,KAAK,CAAA,GAAI,GAAA;AAC3E,EAAA,MAAM,EAAE,MAAA,EAAQ,QAAA,EAAU,OAAO,SAAA,EAAW,MAAA,KAAW,MAAM,iBAAA;AAAA,IAC3D,KAAA,CAAM,GAAA;AAAA,IACN,SAAA;AAAA,IACA,IAAA,CAAK,SAAA;AAAA,IACL,EAAE,IAAI,IAAA,CAAK,EAAA,EAAI,IAAI,IAAA,CAAK,EAAA,EAAI,EAAA,EAAI,IAAA,CAAK,EAAA;AAAG,GAC1C;AACA,EAAA,MAAM,QAAA,GAAW,KAAK,QAAA,GAAW,KAAA;AACjC,EAAA,MAAM,SAAA,GAAY,KAAK,SAAA,GAAY,MAAA;AAEnC,EAAA,MAAM,MAAA,GAAuB;AAAA,IAC3B;AAAA,MACE,KAAA,EAAO,IAAA;AAAA,MACP,SAAA;AAAA,MACA,eAAA,EAAiB,UAAA,CAAW,CAAC,IAAI,GAAG,KAAK,CAAA;AAAA,MACzC,OAAA,EAAS,EAAE,IAAA,EAAM,WAAA,EAAa,SAAA;AAAU,KAC1C;AAAA,IACA,SAAA,CAAU,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,KAAK,EAAE,CAAA;AAAA,IACvC,SAAA,CAAU,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,KAAK,EAAE,CAAA;AAAA,IACvC,SAAA,CAAU,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,KAAK,EAAE,CAAA;AAAA,IACvC;AAAA,MACE,KAAA,EAAO,KAAA;AAAA,MACP,SAAA,EAAW,IAAI,IAAA,CAAK,UAAU,EAAE,WAAA,EAAY;AAAA,MAC5C,eAAA,EAAiB,UAAA,CAAW,CAAC,KAAK,GAAG,KAAK,CAAA;AAAA,MAC1C,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,MAAA;AAAO;AACpC,GACF;AAEA,EAAA,MAAM,KAAA,GAAQ,UAAU,KAAA,GAAQ,GAAA;AAChC,EAAA,MAAM,OAAA,GAAU,IAAI,IAAA,CAAK,KAAK,EAAE,WAAA,EAAY;AAE5C,EAAA,MAAM,MAAA,GAAsB;AAAA,IAC1B,OAAA,EAAS,CAAA;AAAA,IACT,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,KAAA,EAAO;AAAA,MACL,SAAA;AAAA,MACA,OAAA;AAAA,MACA,iBAAiB,KAAA,GAAQ;AAAA,KAC3B;AAAA,IACA,MAAA;AAAA,IACA,QAAA,EAAU;AAAA,MACR,UAAA,EAAY,MAAM,GAAA,CAAI,EAAA;AAAA,MACtB,WAAA,EAAa,MAAM,OAAA,CAAQ,IAAA;AAAA,MAC3B,GAAI,KAAA,CAAM,OAAA,CAAQ,MAAA,KAAW,MAAA,GAAY,EAAE,aAAA,EAAe,KAAA,CAAM,OAAA,CAAQ,MAAA,EAAO,GAAI,EAAC;AAAA,MACpF,4BAAA,EAA8B,MAAM,YAAA,CAAa;AAAA;AACnD,GACF;AAEA,EAAA,MAAM,IAAA,GAAO,kBAAkB,MAAM,CAAA;AACrC,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU,aAAa,OAAO,CAAA;AACrD,EAAA,MAAM,KAAA,CAAM,GAAA,EAAK,EAAE,SAAA,EAAW,MAAM,CAAA;AACpC,EAAA,MAAM,WAAW,IAAA,CAAK,GAAA,EAAK,kBAAkB,SAAA,EAAW,KAAA,GAAQ,EAAE,CAAC,CAAA;AACnE,EAAA,MAAM,SAAA,CAAU,QAAA,EAAU,IAAA,EAAM,OAAO,CAAA;AAEvC,EAAA,OAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,QAAA,EAAU,SAAA,EAAU;AACjD;AAOA,SAAS,SAAA,CACP,IAAA,EACA,OAAA,EACA,KAAA,EACA,OAAA,EACY;AACZ,EAAA,MAAM,MAAA,GAAS,UAAU,IAAI,CAAA;AAC7B,EAAA,MAAM,SAAA,GAAY,UAAA,CAAW,MAAA,EAAQ,KAAK,CAAA;AAC1C,EAAA,MAAM,YAAY,IAAI,IAAA,CAAK,UAAU,SAAA,GAAY,GAAI,EAAE,WAAA,EAAY;AACnE,EAAA,MAAM,eAAA,GAAkB,UAAA,CAAW,CAAC,IAAI,GAAG,KAAK,CAAA;AAChD,EAAA,OAAO,OAAA,GACH,EAAE,KAAA,EAAO,IAAA,EAAM,WAAW,eAAA,EAAiB,OAAA,EAAS,EAAE,IAAA,EAAM,SAAA,EAAW,OAAA,IAAU,GACjF,EAAE,OAAO,IAAA,EAAM,SAAA,EAAW,iBAAiB,OAAA,EAAS,EAAE,IAAA,EAAM,OAAA,EAAQ,EAAE;AAC5E;AAEA,SAAS,UAAU,IAAA,EAAkD;AACnE,EAAA,MAAM,QAA+B,CAAC,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,MAAM,KAAK,CAAA;AACnE,EAAA,OAAO,MAAM,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAC,CAAA;AAC3C;AAEA,SAAS,UAAA,CAAW,QAA+B,KAAA,EAAuB;AACxE,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,KAAA,MAAW,CAAA,IAAK,MAAA,EAAQ,GAAA,IAAO,iBAAA,CAAkB,CAAC,CAAA;AAClD,EAAA,OAAO,GAAA,GAAM,KAAA;AACf;ACrHO,IAAM,kBAAA,GACX,oWAAA;AAcK,SAAS,aAAA,CACd,KAAA,EACA,EAAA,GAA+B,EAAC,EACnB;AACb,EAAA,MAAM,EAAA,GAAK,GAAG,eAAA,IAAmB,GAAA;AACjC,EAAA,MAAM,EAAA,GAAK,GAAG,gBAAA,IAAoB,GAAA;AAClC,EAAA,MAAM,eAAA,GAAkB,GAAG,eAAA,IAAmB,IAAA;AAC9C,EAAA,MAAM,YAAA,GAAe,GAAG,YAAA,IAAgB,GAAA;AAExC,EAAA,IACE,eAAA,IACA,MAAM,iBAAA,IAAqB,YAAA,IAC3B,mBAAmB,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA,EACvC;AACA,IAAA,OAAO,qBAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,CAAM,iBAAA,IAAqB,EAAA,EAAI,OAAO,kBAAA;AAC1C,EAAA,IAAI,KAAA,CAAM,iBAAA,IAAqB,EAAA,EAAI,OAAO,mBAAA;AAC1C,EAAA,OAAO,kBAAA;AACT;AAUA,eAAsB,cAAA,CACpB,QAAA,EACA,UAAA,GAAuC,EAAC,EACV;AAC9B,EAAA,MAAM,QAAA,GAAWE,IAAAA,CAAK,QAAA,EAAU,WAAA,EAAa,OAAO,CAAA;AACpD,EAAA,MAAM,QAAA,GAAWA,IAAAA,CAAK,QAAA,EAAU,WAAA,EAAa,OAAO,CAAA;AACpD,EAAA,MAAMC,KAAAA,CAAM,QAAA,EAAU,EAAE,SAAA,EAAW,MAAM,CAAA;AAEzC,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,OAAA,GAAU,MAAM,QAAQ,QAAQ,CAAA;AAAA,EAClC,SAASC,IAAAA,EAAc;AACrB,IAAA,IAAKA,IAAAA,CAA8B,SAAS,QAAA,EAAU;AACpD,MAAA,OAAO,EAAE,qBAAqB,EAAC,EAAG,iBAAiB,EAAC,EAAG,WAAW,CAAA,EAAE;AAAA,IACtE;AACA,IAAA,MAAMA,IAAAA;AAAA,EACR;AAEA,EAAA,MAAM,YAAY,OAAA,CAAQ,MAAA;AAAA,IACxB,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,OAAO,CAAA,IAAK,CAAC,OAAA,CAAQ,QAAA,CAAS,CAAA,EAAG,CAAC,CAAA,KAAA,CAAO;AAAA,GAC7D;AAEA,EAAA,MAAM,sBAAgC,EAAC;AACvC,EAAA,MAAM,kBAAiC,EAAC;AACxC,EAAA,IAAI,SAAA,GAAY,CAAA;AAEhB,EAAA,KAAA,MAAW,SAAS,SAAA,EAAW;AAC7B,IAAA,MAAM,KAAA,GAAQF,IAAAA,CAAK,QAAA,EAAU,KAAK,CAAA;AAClC,IAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,KAAA,EAAO,OAAO,CAAA;AACzC,IAAA,MAAM,MAAA,GAAsB,oBAAoB,GAAG,CAAA;AAEnD,IAAA,MAAM,QAAA,GAAW,OAAO,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,KAAK,CAAA;AAC5D,IAAA,IAAI,CAAC,QAAA,IAAY,QAAA,CAAS,OAAA,CAAQ,SAAS,QAAA,EAAU;AACnD,MAAA,MAAMG,SAAAA,CAAU,CAAA,EAAG,KAAK,CAAA,KAAA,CAAA,EAAS,IAAI,OAAO,CAAA;AAC5C,MAAA,mBAAA,CAAoB,KAAK,KAAK,CAAA;AAC9B,MAAA;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,KAAA,IAAS,QAAA,CAAS,OAAA,CAAQ,MAAA,EAAQ;AAC3C,MAAA,MAAM,GAAA,GAAM,aAAA,CAAc,KAAA,EAAO,UAAU,CAAA;AAC3C,MAAA,IAAI,QAAQ,kBAAA,EAAoB;AAC9B,QAAA,SAAA,EAAA;AACA,QAAA;AAAA,MACF;AACA,MAAA,MAAM,QAAQ,MAAM,iBAAA,CAAkB,UAAU,MAAA,EAAQ,KAAA,EAAO,KAAK,KAAK,CAAA;AACzE,MAAA,eAAA,CAAgB,KAAK,KAAK,CAAA;AAAA,IAC5B;AAEA,IAAA,MAAMA,SAAAA,CAAU,CAAA,EAAG,KAAK,CAAA,KAAA,CAAA,EAAS,IAAI,OAAO,CAAA;AAC5C,IAAA,mBAAA,CAAoB,KAAK,KAAK,CAAA;AAAA,EAChC;AAEA,EAAA,OAAO,EAAE,mBAAA,EAAqB,eAAA,EAAiB,SAAA,EAAU;AAC3D;AAEA,eAAe,iBAAA,CACb,QAAA,EACA,MAAA,EACA,KAAA,EACA,gBACA,UAAA,EACsB;AACtB,EAAA,MAAM,KAAKC,IAAAA,EAAK;AAChB,EAAA,MAAM,cAAA,GAAA,iBAAiB,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAC9C,EAAA,MAAM,QAAA,GAAW,iBAAiB,EAAE,CAAA,GAAA,CAAA;AACpC,EAAA,MAAM,QAAA,GAAWJ,IAAAA,CAAK,QAAA,EAAU,QAAQ,CAAA;AAExC,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,KAAA;AAAA,IACA,CAAA,OAAA,EAAU,OAAO,KAAK,CAAA,CAAA;AAAA,IACtB,CAAA,OAAA,EAAU,OAAO,KAAK,CAAA,CAAA;AAAA,IACtB,oBAAoB,cAAc,CAAA,CAAA,CAAA;AAAA,IAClC,uBAAuB,UAAU,CAAA,CAAA,CAAA;AAAA,IACjC,CAAA,SAAA,EAAY,MAAM,EAAE,CAAA,CAAA;AAAA,IACpB,mBAAmB,cAAc,CAAA,CAAA;AAAA,IACjC,CAAA,mBAAA,EAAsB,MAAM,iBAAiB,CAAA,CAAA;AAAA,IAC7C,CAAA,SAAA,EAAY,MAAM,OAAO,CAAA,CAAA;AAAA,IACzB,CAAA,WAAA,EAAc,KAAA,CAAM,SAAA,IAAa,MAAM,CAAA,CAAA;AAAA,IACvC,KAAA;AAAA,IACA,EAAA;AAAA,IACA,CAAA,8BAAA,EAA4B,cAAA,CAAe,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;AAAA,IACvD,EAAA;AAAA,IACA,YAAA;AAAA,IACA,EAAA;AAAA,IACA,KAAA,CAAM,SAAA;AAAA,IACN;AAAA,GACF,CAAE,KAAK,IAAI,CAAA;AAEX,EAAA,MAAMG,SAAAA,CAAU,QAAA,EAAU,IAAA,EAAM,OAAO,CAAA;AAEvC,EAAA,OAAO;AAAA,IACL,EAAA;AAAA,IACA,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,cAAA;AAAA,IACA,mBAAmB,KAAA,CAAM,iBAAA;AAAA,IACzB,cAAA;AAAA,IACA,iBAAA,EAAmB,UAAA;AAAA,IACnB,SAAS,KAAA,CAAM,SAAA;AAAA,IACf;AAAA,GACF;AACF;ACxLA,IAAM,WAAW,gBAAA,EAAiB;AAiB3B,IAAM,gBAAA,GAAN,MAAM,iBAAA,CAAiB;AAAA,EACpB,YAA6B,GAAA,EAAa;AAAb,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAc;AAAA,EAAd,GAAA;AAAA,EAErC,aAAa,KAAK,QAAA,EAA6C;AAC7D,IAAA,MAAM,GAAA,GAAMH,IAAAA,CAAK,QAAA,EAAU,cAAc,CAAA;AACzC,IAAA,MAAMC,KAAAA,CAAM,GAAA,EAAK,EAAE,SAAA,EAAW,MAAM,CAAA;AACpC,IAAA,OAAO,IAAI,kBAAiB,GAAG,CAAA;AAAA,EACjC;AAAA,EAEA,MAAM,OAAO,MAAA,EAA0C;AACrD,IAAA,MAAM,KAAK,QAAA,EAAS;AACpB,IAAA,MAAME,SAAAA;AAAA,MACJH,IAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,CAAA,EAAG,EAAE,CAAA,KAAA,CAAO,CAAA;AAAA,MAC3B,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA;AAAA,MAC9B;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,eAAe,KAAA,EAA6C;AAChE,IAAA,IAAI,KAAA,IAAS,CAAA,EAAG,OAAO,EAAC;AACxB,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI;AACF,MAAA,OAAA,GAAU,MAAMK,OAAAA,CAAQ,IAAA,CAAK,GAAG,CAAA;AAAA,IAClC,SAASH,IAAAA,EAAc;AACrB,MAAA,IAAKA,IAAAA,CAA8B,IAAA,KAAS,QAAA,EAAU,OAAO,EAAC;AAC9D,MAAA,MAAMA,IAAAA;AAAA,IACR;AACA,IAAA,MAAM,MAAA,GAAS,OAAA,CACZ,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,QAAA,CAAS,OAAO,CAAC,CAAA,CACjC,IAAA,EAAK,CACL,KAAA,CAAM,CAAC,KAAK,CAAA;AACf,IAAA,MAAM,MAA2B,EAAC;AAClC,IAAA,KAAA,MAAW,QAAQ,MAAA,EAAQ;AACzB,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAM,MAAMI,QAAAA,CAASN,IAAAA,CAAK,KAAK,GAAA,EAAK,IAAI,GAAG,OAAO,CAAA;AACxD,QAAA,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,GAAG,CAAsB,CAAA;AAAA,MAC/C,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AACF,CAAA;;;ACtBO,SAAS,IAAA,CACd,KAAA,EACA,IAAA,EACA,IAAA,GAAoB,EAAC,EACJ;AACjB,EAAA,MAAM,EAAA,GAAK,KAAK,EAAA,IAAM,GAAA;AACtB,EAAA,MAAM,CAAA,GAAI,KAAK,CAAA,IAAK,IAAA;AAEpB,EAAA,MAAM,MAAA,GAAS,SAAS,KAAK,CAAA;AAC7B,EAAA,IAAI,OAAO,MAAA,KAAW,CAAA,IAAK,KAAK,MAAA,KAAW,CAAA,SAAU,EAAC;AAGtD,EAAA,MAAM,SAAA,GAAY,KAAK,GAAA,CAAI,CAAC,MAAM,QAAA,CAAS,CAAA,CAAE,IAAI,CAAC,CAAA;AAClD,EAAA,MAAM,aAAa,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,MAAM,CAAA;AAChD,EAAA,MAAM,KAAA,GACJ,UAAA,CAAW,MAAA,CAAO,CAAC,GAAG,CAAA,KAAM,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,WAAW,MAAM,CAAA;AAGvE,EAAA,MAAM,SAAS,IAAI,KAAA,CAAc,KAAK,MAAM,CAAA,CAAE,KAAK,CAAC,CAAA;AACpD,EAAA,KAAA,MAAW,IAAA,IAAQ,IAAI,GAAA,CAAI,MAAM,CAAA,EAAG;AAClC,IAAA,MAAM,KAAK,SAAA,CAAU,MAAA;AAAA,MACnB,CAAC,GAAG,KAAA,KAAU,CAAA,IAAK,MAAM,QAAA,CAAS,IAAI,IAAI,CAAA,GAAI,CAAA,CAAA;AAAA,MAC9C;AAAA,KACF;AACA,IAAA,IAAI,OAAO,CAAA,EAAG;AACd,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,CAAI,CAAA,GAAA,CAAK,KAAK,MAAA,GAAS,EAAA,GAAK,GAAA,KAAQ,EAAA,GAAK,GAAA,CAAI,CAAA;AAC9D,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,MAAA,MAAM,EAAA,GAAK,UAAU,CAAC,CAAA,CAAG,OAAO,CAAC,CAAA,KAAM,CAAA,KAAM,IAAI,CAAA,CAAE,MAAA;AACnD,MAAA,IAAI,OAAO,CAAA,EAAG;AACd,MAAA,MAAM,SAAA,GAAY,MAAM,EAAA,GAAK,CAAA,CAAA;AAC7B,MAAA,MAAM,WAAA,GAAc,KAAK,EAAA,IAAM,CAAA,GAAI,IAAK,CAAA,GAAI,UAAA,CAAW,CAAC,CAAA,GAAM,KAAA,CAAA;AAC9D,MAAA,MAAA,CAAO,CAAC,CAAA,GAAA,CAAK,MAAA,CAAO,CAAC,CAAA,IAAK,CAAA,IAAK,OAAO,SAAA,GAAY,WAAA,CAAA;AAAA,IACpD;AAAA,EACF;AAEA,EAAA,MAAM,MAAuB,EAAC;AAC9B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,IAAK,CAAA,IAAK,CAAA,EAAG;AACxB,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,GAAA,EAAK,IAAA,CAAK,CAAC,CAAA,EAAI,KAAA,EAAO,MAAA,CAAO,CAAC,CAAA,IAAK,CAAA,EAAG,CAAA;AAAA,IACnD;AAAA,EACF;AACA,EAAA,GAAA,CAAI,KAAK,CAAC,CAAA,EAAGO,OAAMA,EAAAA,CAAE,KAAA,GAAQ,EAAE,KAAK,CAAA;AACpC,EAAA,OAAO,GAAA;AACT;AAOO,SAAS,SAAS,IAAA,EAAwB;AAC/C,EAAA,OAAO,IAAA,CACJ,WAAA,EAAY,CACZ,KAAA,CAAM,2BAA2B,CAAA,CACjC,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,GAAS,CAAC,CAAA;AAC/B;;;AC9CA,eAAsB,sBAAA,CACpB,QAAA,EACA,KAAA,EACA,IAAA,GAAsB,EAAC,EACC;AACxB,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,IAAS,CAAA;AAC5B,EAAA,MAAM,UAA4B,IAAI,GAAA;AAAA,IACpC,IAAA,CAAK,OAAA,IAAW,CAAC,kBAAA,EAAoB,mBAAmB;AAAA,GAC1D;AACA,EAAA,MAAM,MAAA,GAAS,KAAK,MAAA,IAAU,MAAA;AAC9B,EAAA,MAAM,QAAA,GAAWP,IAAAA,CAAK,QAAA,EAAU,WAAA,EAAa,OAAO,CAAA;AAEpD,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI;AACF,IAAA,KAAA,GAAA,CAAS,MAAMK,OAAAA,CAAQ,QAAQ,CAAA,EAAG,MAAA;AAAA,MAChC,CAAC,MAAM,CAAA,CAAE,UAAA,CAAW,gBAAgB,CAAA,IAAK,CAAA,CAAE,SAAS,KAAK;AAAA,KAC3D;AAAA,EACF,SAASH,IAAAA,EAAc;AACrB,IAAA,IAAKA,IAAAA,CAA8B,IAAA,KAAS,QAAA,EAAU,OAAO,EAAC;AAC9D,IAAA,MAAMA,IAAAA;AAAA,EACR;AAGA,EAAA,MAAM,UAAyB,EAAC;AAChC,EAAA,KAAA,MAAW,SAAS,KAAA,EAAO;AACzB,IAAA,MAAM,KAAA,GAAQF,IAAAA,CAAK,QAAA,EAAU,KAAK,CAAA;AAClC,IAAA,MAAM,GAAA,GAAM,MAAMM,QAAAA,CAAS,KAAA,EAAO,OAAO,CAAA;AACzC,IAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,GAAA,EAAK,KAAK,CAAA;AAC1C,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,cAAc,CAAA,EAAG;AACxC,IAAA,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,EACpB;AACA,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAElC,EAAA,IAAI,WAAW,WAAA,EAAa;AAC1B,IAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAClB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,iBAAA,CAAkB,OAAA,EAAS,KAAA,EAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAAA,EAC/D;AAEA,EAAA,IAAI,WAAW,SAAA,EAAW;AACxB,IAAA,OAAO,eAAA,CAAgB,OAAA,EAAS,KAAA,EAAO,KAAK,CAAA;AAAA,EAC9C;AAGA,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,OAAO,EAAE,EAAA,EAAI,CAAA,CAAE,EAAA,EAAI,IAAA,EAAM,CAAA,CAAE,OAAA,EAAS,KAAA,EAAO,GAAE,CAAE,CAAA;AACzE,EAAA,MAAM,SAAS,IAAA,CAAK,KAAA,EAAO,IAAI,CAAA,CAAE,KAAA,CAAM,GAAG,KAAK,CAAA;AAC/C,EAAA,OAAO,OAAO,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,KAAK,CAAA;AACtC;AAEA,eAAe,iBAAA,CACb,OAAA,EACA,KAAA,EACA,QAAA,EACA,KAAA,EACwB;AACxB,EAAA,MAAM,EAAA,GAAK,MAAM,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA;AACrC,EAAA,MAAM,SAAuD,EAAC;AAC9D,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,IAAA,MAAM,CAAA,GAAI,MAAM,QAAA,CAAS,KAAA,CAAM,EAAE,OAAO,CAAA;AACxC,IAAA,IAAI,CAAA,CAAE,MAAA,KAAW,EAAA,CAAG,MAAA,EAAQ;AAC5B,IAAA,IAAI,GAAA,GAAM,CAAA;AACV,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,MAAA,EAAQ,CAAA,EAAA,EAAK,GAAA,IAAA,CAAQ,EAAA,CAAG,CAAC,CAAA,IAAK,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,IAAK,CAAA,CAAA;AAClE,IAAA,MAAA,CAAO,KAAK,EAAE,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;AAAA,EACtC;AACA,EAAA,MAAA,CAAO,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,GAAQ,EAAE,KAAK,CAAA;AACvC,EAAA,OAAO,MAAA,CAAO,MAAM,CAAA,EAAG,KAAK,EAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,CAAA;AAClD;AAEA,SAAS,eAAA,CACP,OAAA,EACA,KAAA,EACA,KAAA,EACe;AACf,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,WAAA,EAAY,CAAE,KAAA,CAAM,KAAK,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,GAAS,CAAC,CAAA;AAC1E,EAAA,MAAM,SAAuD,EAAC;AAC9D,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,IAAA,MAAM,GAAA,GAAM,CAAA,CAAE,OAAA,CAAQ,WAAA,EAAY;AAClC,IAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,IAAA,KAAA,MAAW,CAAA,IAAK,MAAA,EAAQ,KAAA,IAAS,gBAAA,CAAiB,KAAK,CAAC,CAAA;AACxD,IAAA,IAAI,KAAA,GAAQ,GAAG,MAAA,CAAO,IAAA,CAAK,EAAE,KAAA,EAAO,CAAA,EAAG,OAAO,CAAA;AAAA,EAChD;AACA,EAAA,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACpB,IAAA,IAAI,EAAE,KAAA,KAAU,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,QAAQ,CAAA,CAAE,KAAA;AAC5C,IAAA,OAAO,EAAE,KAAA,CAAM,cAAA,CAAe,aAAA,CAAc,CAAA,CAAE,MAAM,cAAc,CAAA;AAAA,EACpE,CAAC,CAAA;AACD,EAAA,OAAO,MAAA,CAAO,MAAM,CAAA,EAAG,KAAK,EAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,CAAA;AAClD;AAEA,SAAS,iBAAA,CAAkB,KAAa,QAAA,EAAsC;AAC5E,EAAA,MAAM,OAAA,GAAU,GAAA,CAAI,KAAA,CAAM,mCAAmC,CAAA;AAC7D,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,EAAA,MAAM,EAAA,GAAK,gBAAA,CAAiB,OAAA,CAAQ,CAAC,CAAE,CAAA;AACvC,EAAA,MAAM,IAAA,GAAO,QAAQ,CAAC,CAAA;AACtB,EAAA,MAAM,UAAU,cAAA,CAAe,IAAA,EAAM,SAAS,CAAA,IAAK,KAAK,IAAA,EAAK;AAC7D,EAAA,MAAM,WAAW,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,KAAI,IAAK,QAAA;AAC9C,EAAA,MAAM,KACJ,8CAAA,CAA+C,IAAA,CAAK,QAAQ,CAAA,GAAI,CAAC,CAAA,IAAK,EAAA;AACxE,EAAA,OAAO;AAAA,IACL,EAAA;AAAA,IACA,KAAA,EAAO,GAAG,KAAA,IAAS,EAAA;AAAA,IACnB,KAAA,EAAO,GAAG,KAAA,IAAS,EAAA;AAAA,IACnB,cAAA,EAAiB,GAAG,cAAA,IAAkC,kBAAA;AAAA,IACtD,iBAAA,EAAmB,MAAA,CAAO,EAAA,CAAG,iBAAA,IAAqB,CAAC,CAAA;AAAA,IACnD,cAAA,EAAgB,WAAA,CAAY,EAAA,CAAG,cAAA,IAAkB,EAAE,CAAA;AAAA,IACnD,iBAAA,EAAmB,WAAA,CAAY,EAAA,CAAG,iBAAA,IAAqB,EAAE,CAAA;AAAA,IACzD,OAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,iBAAiB,IAAA,EAAsC;AAC9D,EAAA,MAAM,MAA8B,EAAC;AACrC,EAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,EAAG;AACnC,IAAA,MAAM,CAAA,GAAI,4BAAA,CAA6B,IAAA,CAAK,IAAI,CAAA;AAChD,IAAA,IAAI,CAAA,GAAI,CAAC,CAAA,EAAG,GAAA,CAAI,CAAA,CAAE,CAAC,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,IAAK,EAAA;AAAA,EAClC;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,cAAA,CAAe,MAAc,OAAA,EAAgC;AACpE,EAAA,MAAM,KAAK,IAAI,MAAA,CAAO,CAAA,MAAA,EAAS,OAAO,uCAAuC,GAAG,CAAA;AAChF,EAAA,MAAM,CAAA,GAAI,EAAA,CAAG,IAAA,CAAK,IAAI,CAAA;AACtB,EAAA,OAAO,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,CAAG,MAAK,GAAI,IAAA;AAC5B;AAEA,SAAS,YAAY,CAAA,EAAmB;AACtC,EAAA,OAAO,CAAA,CAAE,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA;AAC/B;AAEA,SAAS,gBAAA,CAAiB,UAAkB,MAAA,EAAwB;AAClE,EAAA,IAAI,CAAC,QAAQ,OAAO,CAAA;AACpB,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,CAAA,GAAI,QAAA,CAAS,OAAA,CAAQ,MAAM,CAAA;AAC/B,EAAA,OAAO,MAAM,EAAA,EAAI;AACf,IAAA,KAAA,EAAA;AACA,IAAA,CAAA,GAAI,QAAA,CAAS,OAAA,CAAQ,MAAA,EAAQ,CAAA,GAAI,OAAO,MAAM,CAAA;AAAA,EAChD;AACA,EAAA,OAAO,KAAA;AACT;ACrLA,IAAM,WAAA,GAAc,sBAAA;AACpB,IAAM,cAAA,GAAiB,eAAA;AAEhB,SAAS,SAAA,GAAY;AAC1B,EAAA,OAAO,KAAA,CAAM,SAAA,CAAU,WAAA,EAAa,cAAc,CAAA;AACpD;AAOA,eAAsB,QAAA,CACpB,IAAA,EACA,EAAA,EACA,KAAA,EACY;AACZ,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,OAAO,MAAA,CAAO,eAAA,CAAgB,IAAA,EAAM,OAAO,IAAA,KAAS;AAClD,IAAA,IAAI,KAAA,EAAO,IAAA,CAAK,aAAA,CAAc,KAAK,CAAA;AACnC,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,EAAA,CAAG,IAAI,CAAA;AACzB,MAAA,IAAA,CAAK,GAAA,EAAI;AACT,MAAA,OAAO,GAAA;AAAA,IACT,SAASJ,IAAAA,EAAK;AACZ,MAAA,IAAA,CAAK,gBAAgBA,IAAY,CAAA;AACjC,MAAA,IAAA,CAAK,SAAA,CAAU;AAAA,QACb,MAAM,cAAA,CAAe,KAAA;AAAA,QACrB,SAASA,IAAAA,YAAe,KAAA,GAAQA,IAAAA,CAAI,OAAA,GAAU,OAAOA,IAAG;AAAA,OACzD,CAAA;AACD,MAAA,IAAA,CAAK,GAAA,EAAI;AACT,MAAA,MAAMA,IAAAA;AAAA,IACR;AAAA,EACF,CAAC,CAAA;AACH;AC9BA,IAAM,UAAA,GAAa,sBAAA;AACnB,IAAM,aAAA,GAAgB,eAAA;AAEtB,IAAM,KAAA,GAAQ,OAAA,CAAQ,QAAA,CAAS,UAAA,EAAY,aAAa,CAAA;AAEjD,IAAM,YAAA,GAAe,KAAA,CAAM,aAAA,CAAc,mBAAA,EAAqB;AAAA,EACnE,WAAA,EAAa;AACf,CAAC,CAAA;AAEkC,KAAA,CAAM,aAAA,CAAc,qBAAA,EAAuB;AAAA,EAC5E,WAAA,EAAa;AACf,CAAC;AAEM,IAAM,eAAA,GAAkB,KAAA,CAAM,eAAA,CAAgB,YAAA,EAAc;AAAA,EACjE,WAAA,EAAa,iEAAA;AAAA,EACb,IAAA,EAAM;AACR,CAAC,CAAA;AAE+B,KAAA,CAAM,aAAA,CAAc,kBAAA,EAAoB;AAAA,EACtE,WAAA,EAAa;AACf,CAAC;AAE+B,KAAA,CAAM,aAAA,CAAc,kBAAA,EAAoB;AAAA,EACtE,WAAA,EAAa;AACf,CAAC;AAKM,SAAS,cAAc,IAAA,EAMrB;AACP,EAAA,MAAM,MAAA,GAAS,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,SAAS,IAAA,CAAK,OAAA,EAAS,SAAA,EAAW,IAAA,CAAK,SAAA,EAAU;AACnF,EAAA,YAAA,CAAa,GAAA,CAAI,GAAG,MAAM,CAAA;AAC1B,EAAA,eAAA,CAAgB,MAAA,CAAO,KAAK,QAAA,EAAU,EAAE,WAAW,IAAA,EAAM,OAAA,EAAS,IAAA,CAAK,OAAA,EAAS,CAAA;AAChF,EAAA,eAAA,CAAgB,MAAA,CAAO,KAAK,SAAA,EAAW,EAAE,WAAW,KAAA,EAAO,OAAA,EAAS,IAAA,CAAK,OAAA,EAAS,CAAA;AACpF;;;ACtDO,IAAM,qBAAA,GAAwB;AAAA,EACnC,kBAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,uBAAA;AAAA,EACA;AACF,CAAA;AAIO,IAAM,sBAAA,GAA8D;AAAA,EACzE,kBAAA,EACE,0HAAA;AAAA,EACF,eAAA,EACE,4GAAA;AAAA,EACF,eAAA,EACE,+IAAA;AAAA,EACF,uBAAA,EACE,wHAAA;AAAA,EACF,kBAAA,EACE;AACJ,CAAA;AAsBO,SAAS,oBAAoB,KAAA,EAGlC;AACA,EAAA,MAAM,IAAA,GAAO,sBAAA,CAAuB,KAAA,CAAM,SAAS,CAAA;AACnD,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,sFAAA;AAAA,IACA,0FAAA;AAAA,IACA,0FAAA;AAAA,IACA,CAAA,uBAAA,EAA0B,MAAM,WAAW,CAAA,sCAAA,CAAA;AAAA,IAC3C,EAAA;AAAA,IACA,yFAAA;AAAA,IACA,KAAK,IAAI,CAAA,CAAA;AAAA,IACT,EAAA;AAAA,IACA,cAAA;AAAA,IACA,oCAAA;AAAA,IACA,+DAAA;AAAA,IACA,8DAAA;AAAA,IACA,0DAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,IAAI,CAAA;AAEX,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,wBAAA;AAAA,IACA,CAAA,EAAA,EAAK,MAAM,UAAU,CAAA,CAAA;AAAA,IACrB,EAAA;AAAA,IACA,CAAA,gCAAA,EAAmC,MAAM,aAAa,CAAA,CAAA;AAAA,IACtD,CAAA,sCAAA,EAAyC,KAAA,CAAM,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,IACrE,CAAA,kBAAA,EAAqB,KAAA,CAAM,OAAO,CAAA,IAAA,EAAO,MAAM,WAAW,CAAA,CAAA;AAAA,IAC1D,EAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,IAAI,CAAA;AAEX,EAAA,OAAO,EAAE,QAAQ,IAAA,EAAK;AACxB;AAGO,SAAS,aAAA,CACd,YACA,OAAA,EACqB;AACrB,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,IAAA,MAAM,IAAI,MAAM,0DAA0D,CAAA;AAAA,EAC5E;AACA,EAAA,MAAM,OAAO,IAAA,CAAK,GAAA,CAAI,GAAG,OAAO,CAAA,GAAI,KAAK,UAAA,CAAW,MAAA;AACpD,EAAA,OAAO,WAAW,GAAG,CAAA;AACvB;;;AClEO,SAAS,SAAS,IAAA,EAMP;AAChB,EAAA,MAAM,IAAA,GAAsB;AAAA,IAC1B,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,GACpC;AACA,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,EAAW,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA;AAClD,EAAA,IAAI,IAAA,CAAK,WAAA,KAAgB,MAAA,EAAW,IAAA,CAAK,cAAc,IAAA,CAAK,WAAA;AAC5D,EAAA,OAAO,IAAA;AACT;;;ACtCO,IAAM,WAAA,GAAiC,OAAO,KAAA,EAAO,GAAA,KAAQ;AAClE,EAAA,MAAM,CAAA,GAAI,MAAM,GAAA,CAAI,QAAA,CAAS,KAAK,CAAA;AAClC,EAAA,MAAM,MAAA,GAA0B;AAAA,IAC9B,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,UAAU,CAAA,CAAE,QAAA;AAAA,IACZ,WAAW,CAAA,CAAE,SAAA;AAAA,IACb,KAAA,EAAO,CAAC,QAAA,CAAS,EAAE,KAAA,EAAO,CAAA,EAAG,SAAA,EAAW,aAAA,EAAe,OAAA,EAAS,CAAA,CAAE,IAAA,EAAM,CAAC;AAAA,GAC3E;AACA,EAAA,OAAO,MAAA;AACT,CAAA;ACPO,IAAM,kBAAkBM,CAAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,WAAA,EAAa,QAAQ,CAAC,CAAA;AAG9D,IAAM,WAAA,GAAcA,EAAE,MAAA,CAAO;AAAA,EAClC,IAAA,EAAM,eAAA;AAAA,EACN,OAAA,EAASA,EAAE,MAAA;AACb,CAAC,CAAA;AAGM,IAAM,YAAA,GAAeA,EAAE,MAAA,CAAO;AAAA,EACnC,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC5B,MAAA,EAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAK/B,OAAA,EAASA,CAAAA,CAAE,KAAA,CAAM,WAAW,EAAE,QAAA,EAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAKvC,UAAUA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA;AAAA;AAAA;AAAA,EAIvC,YAAA,EAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOlC,eAAA,EAAiBA,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,GAAc,QAAA;AAClD,CAAC,CAAA;;;ACUM,IAAM,MAAN,MAAU;AAAA,EACN,EAAA;AAAA,EACA,OAAA;AAAA;AAAA,EAEA,QAAA;AAAA,EACQ,MAAA;AAAA,EACA,UAAA;AAAA,EACA,mBAAA;AAAA,EACA,oBAAA;AAAA,EACA,SAAA;AAAA,EACA,qBAA0C,EAAC;AAAA,EACpD,gBAAA,GAA4C,IAAA;AAAA,EAC5C,WAAA,GAAoC,IAAA;AAAA,EAC3B,UAAA;AAAA,EACA,kBAAA;AAAA,EAEjB,YAAY,MAAA,EAAmB;AAC7B,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,EAAA,GAAK,MAAA,CAAO,KAAA,IAASJ,IAAAA,EAAK;AAC/B,IAAA,IAAA,CAAK,OAAA,GAAU,OAAO,OAAA,IAAW,eAAA;AACjC,IAAA,IAAA,CAAK,WAAW,MAAA,CAAO,QAAA,IAAYJ,IAAAA,CAAK,aAAA,EAAe,KAAK,EAAE,CAAA;AAC9D,IAAA,IAAA,CAAK,UAAA,GAAa,OAAO,4BAAA,IAAgC,EAAA;AACzD,IAAA,IAAA,CAAK,mBAAA,GAAsB,MAAA,CAAO,OAAA,EAAS,mBAAA,IAAuB,CAAA;AAClE,IAAA,IAAA,CAAK,uBACH,MAAA,CAAO,OAAA,EAAS,oBAAA,IAAwB,CAAC,GAAG,qBAAqB,CAAA;AACnE,IAAA,IAAA,CAAK,SAAA,GAAY,OAAO,SAAA,IAAa,WAAA;AACrC,IAAA,IAAA,CAAK,UAAA,GAAa,OAAO,UAAA,KAAe,IAAA;AACxC,IAAA,IAAA,CAAK,kBAAA,GAAqB,OAAO,kBAAA,IAAsB,IAAA;AAAA,EACzD;AAAA;AAAA,EAGA,IAAI,wBAAA,GAAyD;AAC3D,IAAA,OAAO,IAAA,CAAK,kBAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAc,YAAA,GAA8B;AAC1C,IAAA,IAAI,IAAA,CAAK,WAAA,EAAa,OAAO,IAAA,CAAK,WAAA;AAClC,IAAA,IAAA,CAAK,eAAe,YAAY;AAC9B,MAAA,MAAM,KAAA,GAAQ,MAAM,gBAAA,CAAiB,IAAA,CAAK,KAAK,QAAQ,CAAA;AACvD,MAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,cAAA,CAAe,KAAK,UAAU,CAAA;AACzD,MAAA,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,GAAG,MAAM,CAAA;AACtC,MAAA,IAAA,CAAK,gBAAA,GAAmB,KAAA;AAAA,IAC1B,CAAA,GAAG;AACH,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA,EAEA,MAAM,QAAQ,KAAA,EAA6C;AACzD,IAAA,OAAO,QAAA;AAAA,MACL,aAAA;AAAA,MACA,OAAO,IAAA,KAAS;AACd,QAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,YAAA;AAAA,UAAa,KAAA;AAAA,UAAO,CAAC,GAAA,EAAK,KAAA,KAC/C,IAAA,CAAK,YAAA,CAAa,KAAK,KAAK;AAAA,SAC9B;AACA,QAAA,aAAA,CAAc;AAAA,UACZ,MAAM,GAAA,CAAI,IAAA;AAAA,UACV,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,EAAA;AAAA,UAChC,WAAW,GAAA,CAAI,eAAA;AAAA,UACf,QAAA,EAAU,IAAI,MAAA,CAAO,EAAA;AAAA,UACrB,SAAA,EAAW,IAAI,MAAA,CAAO;AAAA,SACvB,CAAA;AACD,QAAA,OAAO,GAAA;AAAA,MACT,CAAA;AAAA,MACA;AAAA,QACE,sBAAsB,IAAA,CAAK,EAAA;AAAA,QAC3B,oBAAA,EAAsB,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,EAAA;AAAA,QAC5C,yBAAA,EAA2B,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,EAAA;AAAA,QAClD,+BAA+B,IAAA,CAAK;AAAA;AACtC,KACF;AAAA,EACF;AAAA,EAEA,MAAc,YAAA,CACZ,KAAA,EACA,OAAA,EACwB;AACxB,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,KAAA,CAAM,KAAK,CAAA;AACvC,IAAA,MAAM,KAAK,YAAA,EAAa;AAGxB,IAAA,MAAM,kBAAkB,MAAM,IAAA,CAAK,OAAO,UAAA,CAAW,YAAA,CAAa,KAAK,EAAE,CAAA;AACzE,IAAA,OAAA,CAAQ,gCAAgC,eAAe,CAAA;AACvD,IAAA,IAAI,oBAAoB,YAAA,EAAc;AACpC,MAAA,MAAM,iBAAA,GAAiC;AAAA,QACrC,IAAA,EAAM,aAAA;AAAA,QACN,aAAA,EAAe,yCAAA;AAAA,QACf,aAAa,EAAC;AAAA,QACd,OAAA,EAAS;AAAA,OACX;AACA,MAAA,MAAM,SAAS,aAAA,CAAc;AAAA,QAC3B,IAAA,EAAM,sEAAA;AAAA,QACN,SAAA,EAAW,iBAAA;AAAA,QACX,UAAA,EAAY,iBAAA;AAAA,QACZ,QAAA,EAAU,EAAE,GAAA,EAAK,EAAA,EAAI,MAAM,EAAA,EAAG;AAAA,QAC9B,MAAA,EAAQ,EAAE,EAAA,EAAI,CAAA,EAAG,KAAK,CAAA,EAAE;AAAA,QACxB;AAAA,OACD,CAAA;AACD,MAAA,MAAM,KAAK,iBAAA,CAAkB,MAAA,CAAO,UAAA,EAAY,MAAA,CAAO,MAAM,IAAI,CAAA;AACjE,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,MAAA,CAAO,cAAA,IAAkB,oBAAA;AACjD,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,QAAA,IAAY,UAAA,CAAW,OAAO,UAAU,CAAA;AAGhE,IAAA,MAAM,YAAY,UAAA,CAAW;AAAA,MAC3B,OAAO,IAAA,CAAK,EAAA;AAAA,MACZ,KAAA,EAAO,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,EAAA;AAAA,MAC7B,UAAA,EAAY,eAAA;AAAA,MACZ,SAAS,EAAE,KAAA,EAAO,KAAA,EAAO,UAAA,EAAY,OAAO,UAAA,EAAW;AAAA,MACvD,QAAA;AAAA,MACA,cAAc,MAAA,CAAO;AAAA,KACtB,CAAA;AACD,IAAA,MAAM,YAAY,MAAM,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,eAAe,SAAS,CAAA;AACvE,IAAA,OAAA,CAAQ,8BAAA,EAAgC,UAAU,IAAI,CAAA;AAGtD,IAAA,IAAI,SAAA,CAAU,IAAA,KAAS,aAAA,IAAiB,SAAA,CAAU,SAAS,kBAAA,EAAoB;AAC7E,MAAA,MAAM,SAAS,aAAA,CAAc;AAAA,QAC3B,IAAA,EAAM,eAAe,SAAS,CAAA;AAAA,QAC9B,SAAA;AAAA,QACA,UAAA,EAAY,SAAA;AAAA,QACZ,UAAU,EAAE,GAAA,EAAK,UAAU,OAAA,EAAS,IAAA,EAAM,UAAU,OAAA,EAAQ;AAAA,QAC5D,MAAA,EAAQ,EAAE,EAAA,EAAI,CAAA,EAAG,KAAK,CAAA,EAAE;AAAA,QACxB;AAAA,OACD,CAAA;AACD,MAAA,MAAM,KAAK,iBAAA,CAAkB,MAAA,CAAO,UAAA,EAAY,MAAA,CAAO,MAAM,IAAI,CAAA;AACjE,MAAA,OAAO,MAAA;AAAA,IACT;AAKA,IAAA,IACE,SAAA,CAAU,IAAA,KAAS,kBAAA,IAClB,IAAA,CAAK,UAAA,KACH,UAAU,IAAA,KAAS,sBAAA,IAA0B,SAAA,CAAU,IAAA,KAAS,cAAA,CAAA,EACnE;AACA,MAAA,OAAO,IAAA,CAAK,cAAA,CAAe,MAAA,EAAQ,SAAA,EAAW,eAAe,CAAA;AAAA,IAC/D;AAGA,IAAA,MAAM,MAAA,GAAS,mBAAA;AAAA,MACb,KAAK,MAAA,CAAO,SAAA;AAAA,MACZ,KAAK,MAAA,CAAO;AAAA,KACd;AACA,IAAA,MAAM,QAAA,GAAW;AAAA,MACf,GAAI,MAAA,CAAO,OAAA,IAAW,EAAC;AAAA,MACvB,EAAE,IAAA,EAAM,MAAA,EAAiB,OAAA,EAAS,OAAO,UAAA;AAAW,MACpD,GAAA,CAAI,CAAC,MAAM,WAAA,CAAY,KAAA,CAAM,CAAC,CAAC,CAAA;AAEjC,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,QAAQ,QAAA,EAAS,EAAG,IAAA,CAAK,MAAA,CAAO,UAAU,CAAA;AAGnF,IAAA,MAAM,aAAa,UAAA,CAAW;AAAA,MAC5B,OAAO,IAAA,CAAK,EAAA;AAAA,MACZ,KAAA,EAAO,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,EAAA;AAAA,MAC7B,UAAA,EAAY,eAAA;AAAA,MACZ,SAAS,EAAE,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,UAAU,IAAA,EAAK;AAAA,MACvD,gBAAgB,SAAA,CAAU,KAAA;AAAA,MAC1B,UAAU,EAAC;AAAA,MACX,cAAc,MAAA,CAAO;AAAA,KACtB,CAAA;AACD,IAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,eAAe,UAAU,CAAA;AACzE,IAAA,OAAA,CAAQ,+BAAA,EAAiC,WAAW,IAAI,CAAA;AACxD,IAAA,OAAA,CAAQ,uBAAA,EAAyB,UAAU,QAAQ,CAAA;AACnD,IAAA,OAAA,CAAQ,wBAAA,EAA0B,UAAU,SAAS,CAAA;AAErD,IAAA,IAAI,UAAA,CAAW,IAAA,KAAS,aAAA,IAAiB,UAAA,CAAW,SAAS,kBAAA,EAAoB;AAC/E,MAAA,MAAM,SAAS,aAAA,CAAc;AAAA,QAC3B,IAAA,EAAM,eAAe,UAAU,CAAA;AAAA,QAC/B,SAAA;AAAA,QACA,UAAA;AAAA,QACA,UAAU,EAAE,GAAA,EAAK,UAAU,OAAA,EAAS,IAAA,EAAM,WAAW,OAAA,EAAQ;AAAA,QAC7D,QAAQ,EAAE,EAAA,EAAI,UAAU,QAAA,EAAU,GAAA,EAAK,UAAU,SAAA,EAAU;AAAA,QAC3D;AAAA,OACD,CAAA;AACD,MAAA,MAAM,KAAK,iBAAA,CAAkB,MAAA,CAAO,UAAA,EAAY,MAAA,CAAO,MAAM,IAAI,CAAA;AACjE,MAAA,OAAO,MAAA;AAAA,IACT;AAIA,IAAA,IACE,IAAA,CAAK,UAAA,KACJ,UAAA,CAAW,IAAA,KAAS,sBAAA,IACnB,WAAW,IAAA,KAAS,cAAA,IACpB,UAAA,CAAW,IAAA,KAAS,kBAAA,CAAA,EACtB;AACA,MAAA,OAAO,IAAA,CAAK,cAAA,CAAe,MAAA,EAAQ,UAAA,EAAY,eAAe,CAAA;AAAA,IAChE;AAKA,IAAA,IAAI,IAAA,CAAK,UAAA,IAAc,IAAA,CAAK,kBAAA,EAAoB;AAC9C,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA;AAAA,QACzB,IAAA,CAAK,kBAAA;AAAA,QACL,MAAA,CAAO,UAAA;AAAA,QACP,SAAA,CAAU;AAAA,OACZ;AACA,MAAA,OAAA,CAAQ,8BAAA,EAAgC,QAAQ,IAAI,CAAA;AACpD,MAAA,IAAI,OAAA,CAAQ,SAAS,UAAA,EAAY;AAC/B,QAAA,MAAM,eAAA,GAA+B;AAAA,UACnC,IAAA,EAAM,kBAAA;AAAA,UACN,aAAA,EAAe,CAAA,gCAAA,EAAmC,OAAA,CAAQ,MAAM,CAAA,CAAA;AAAA,UAChE,aAAa,UAAA,CAAW,WAAA;AAAA,UACxB,SAAS,UAAA,CAAW;AAAA,SACtB;AACA,QAAA,OAAO,IAAA,CAAK,cAAA,CAAe,MAAA,EAAQ,eAAA,EAAiB,eAAe,CAAA;AAAA,MACrE;AAAA,IACF;AAEA,IAAA,MAAM,GAAA,GAAqB;AAAA,MACzB,IAAA,EAAM,IAAA;AAAA,MACN,MAAM,SAAA,CAAU,IAAA;AAAA,MAChB,gBAAA,EAAkB,SAAA;AAAA,MAClB,iBAAA,EAAmB,UAAA;AAAA,MACnB,OAAA,EAAS,KAAA;AAAA,MACT,eAAA;AAAA,MACA,QAAQ,EAAE,EAAA,EAAI,UAAU,QAAA,EAAU,GAAA,EAAK,UAAU,SAAA,EAAU;AAAA,MAC3D,UAAU,EAAE,GAAA,EAAK,UAAU,OAAA,EAAS,IAAA,EAAM,WAAW,OAAA;AAAQ,KAC/D;AACA,IAAA,MAAM,KAAK,iBAAA,CAAkB,MAAA,CAAO,UAAA,EAAY,GAAA,CAAI,MAAM,KAAK,CAAA;AAC/D,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,MAAc,cAAA,CACZ,MAAA,EACA,SAAA,EACA,eAAA,EACwB;AACxB,IAAA,MAAM,OAAA,GAAA,CAAW,MAAA,CAAO,eAAA,IAAmB,CAAA,IAAK,CAAA;AAGhD,IAAA,IAAI,OAAA,GAAU,KAAK,mBAAA,EAAqB;AACtC,MAAA,MAAM,SAAS,aAAA,CAAc;AAAA,QAC3B,IAAA,EAAM,iBAAA,CAAkB,SAAA,EAAW,IAAA,CAAK,mBAAmB,CAAA;AAAA,QAC3D,SAAA;AAAA,QACA,UAAA,EAAY,SAAA;AAAA,QACZ,UAAU,EAAE,GAAA,EAAK,UAAU,OAAA,EAAS,IAAA,EAAM,UAAU,OAAA,EAAQ;AAAA,QAC5D,MAAA,EAAQ,EAAE,EAAA,EAAI,CAAA,EAAG,KAAK,CAAA,EAAE;AAAA,QACxB;AAAA,OACD,CAAA;AACD,MAAA,MAAM,KAAK,iBAAA,CAAkB,MAAA,CAAO,UAAA,EAAY,MAAA,CAAO,MAAM,IAAI,CAAA;AACjE,MAAA,OAAO,MAAA;AAAA,IACT;AAGA,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,IAAA,CAAK,oBAAA,EAAsB,OAAO,CAAA;AAClE,IAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAK,GAAI,mBAAA,CAAoB;AAAA,MAC3C,YAAY,MAAA,CAAO,UAAA;AAAA,MACnB,aAAa,SAAA,CAAU,WAAA;AAAA,MACvB,eAAe,SAAA,CAAU,aAAA;AAAA,MACzB,SAAA;AAAA,MACA,OAAA;AAAA,MACA,aAAa,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,MAAA,CAAO,WAAW,QAAA,CAAS;AAAA,MACtD,MAAA;AAAA,MACA,UAAU,CAAC,EAAE,MAAM,MAAA,EAAQ,OAAA,EAAS,MAAM;AAAA,KAC3C,CAAA;AAGD,IAAA,MAAM,aAAa,UAAA,CAAW;AAAA,MAC5B,OAAO,IAAA,CAAK,EAAA;AAAA,MACZ,KAAA,EAAO,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,EAAA;AAAA,MAC7B,UAAA,EAAY,eAAA;AAAA,MACZ,OAAA,EAAS;AAAA,QACP,KAAA,EAAO,eAAA;AAAA,QACP,cAAc,SAAA,CAAU,IAAA;AAAA,QACxB,SAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAU,EAAC;AAAA,MACX,cAAc,MAAA,CAAO;AAAA,KACtB,CAAA;AACD,IAAA,MAAM,aAAa,MAAM,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,eAAe,UAAU,CAAA;AAEzE,IAAA,IAAI,UAAA,CAAW,IAAA,KAAS,aAAA,IAAiB,UAAA,CAAW,SAAS,kBAAA,EAAoB;AAC/E,MAAA,MAAM,SAAS,aAAA,CAAc;AAAA,QAC3B,IAAA,EAAM,eAAe,UAAU,CAAA;AAAA,QAC/B,SAAA;AAAA,QACA,UAAA;AAAA,QACA,UAAU,EAAE,GAAA,EAAK,UAAU,OAAA,EAAS,IAAA,EAAM,WAAW,OAAA,EAAQ;AAAA,QAC7D,QAAQ,EAAE,EAAA,EAAI,UAAU,QAAA,EAAU,GAAA,EAAK,UAAU,SAAA,EAAU;AAAA,QAC3D;AAAA,OACD,CAAA;AACD,MAAA,MAAM,KAAK,iBAAA,CAAkB,MAAA,CAAO,UAAA,EAAY,MAAA,CAAO,MAAM,IAAI,CAAA;AACjE,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,GAAA,GAAqB;AAAA,MACzB,IAAA,EAAM,UAAA;AAAA,MACN,MAAM,SAAA,CAAU,IAAA;AAAA,MAChB,gBAAA,EAAkB,SAAA;AAAA,MAClB,iBAAA,EAAmB,UAAA;AAAA,MACnB,OAAA,EAAS,KAAA;AAAA,MACT,UAAU,EAAE,OAAA,EAAS,SAAA,EAAW,WAAA,EAAa,KAAK,mBAAA,EAAoB;AAAA,MACtE,eAAA;AAAA,MACA,QAAQ,EAAE,EAAA,EAAI,UAAU,QAAA,EAAU,GAAA,EAAK,UAAU,SAAA,EAAU;AAAA,MAC3D,UAAU,EAAE,GAAA,EAAK,UAAU,OAAA,EAAS,IAAA,EAAM,WAAW,OAAA;AAAQ,KAC/D;AACA,IAAA,MAAM,KAAK,iBAAA,CAAkB,MAAA,CAAO,UAAA,EAAY,GAAA,CAAI,MAAM,KAAK,CAAA;AAC/D,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,MAAM,KAAA,CACJ,OAAA,GAAwB,EAAE,IAAA,EAAM,UAAA,IAChC,IAAA,EAC2B;AAC3B,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,OAAO,UAAA,CAAW,YAAA,CAAa,KAAK,EAAE,CAAA;AAChE,IAAA,IAAI,WAAW,YAAA,EAAc;AAC3B,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,gBAAA,EAAmB,KAAK,EAAE,CAAA,oDAAA;AAAA,OAC5B;AAAA,IACF;AACA,IAAA,MAAM,KAAK,YAAA,EAAa;AAExB,IAAA,IAAI,YAAY,IAAA,EAAM,SAAA;AACtB,IAAA,IAAI,gBAAA;AACJ,IAAA,IAAI,gBAAA,GAAmB,OAAA;AAEvB,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,UAAU,MAAM,IAAA,CAAK,OAAO,UAAA,CAAW,qBAAA,CAAsB,KAAK,EAAE,CAAA;AAC1E,MAAA,MAAM,MAAA,GAAS,QAAQ,CAAC,CAAA;AACxB,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,SAAA,GAAY,MAAA,CAAO,MAAA;AACnB,QAAA,gBAAA,GAAmB,MAAA,CAAO,EAAA;AAC1B,QAAA,gBAAA,GAAmB,EAAE,IAAA,EAAM,cAAA,EAAgB,QAAQ,CAAA,gBAAA,EAAmB,MAAA,CAAO,EAAE,CAAA,CAAA,EAAG;AAAA,MACpF;AAAA,IACF;AAEA,IAAA,MAAM,YAAkF,EAAC;AACzF,IAAA,IAAI,IAAA,EAAM,YAAA,KAAiB,MAAA,EAAW,SAAA,CAAU,eAAe,IAAA,CAAK,YAAA;AACpE,IAAA,IAAI,SAAA,KAAc,MAAA,EAAW,SAAA,CAAU,SAAA,GAAY,SAAA;AAEnD,IAAA,MAAM,MAAA,GAAS,MAAM,aAAA,CAAc;AAAA,MACjC,OAAO,IAAA,CAAK,EAAA;AAAA,MACZ,KAAA,EAAO,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,EAAA;AAAA,MAC7B,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,GAAA,EAAK,KAAK,MAAA,CAAO,UAAA;AAAA,MACjB,OAAA,EAAS,gBAAA;AAAA,MACT,cAAc,IAAA,CAAK,kBAAA;AAAA,MACnB,GAAI,SAAA,KAAc,MAAA,IAAa,IAAA,EAAM,YAAA,KAAiB,SAClD,EAAE,OAAA,EAAS,SAAA,EAAU,GACrB;AAAC,KACN,CAAA;AAED,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,MAAM,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,gBAAA,CAAiB,gBAAgB,CAAA;AAAA,IAChE;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,KAAK,UAAA,EAAqE;AAC9E,IAAA,OAAO,cAAA,CAAe,IAAA,CAAK,QAAA,EAAU,UAAA,IAAc,EAAE,CAAA;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,MAAA,CAAO,KAAA,EAAe,IAAA,GAAsB,EAAC,EAA2B;AAC5E,IAAA,OAAO,sBAAA,CAAuB,IAAA,CAAK,QAAA,EAAU,KAAA,EAAO,IAAI,CAAA;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAc,UAAA,CACZ,QAAA,EACA,UAAA,EACA,QAAA,EACmE;AACnE,IAAA,MAAM,MAAA,GACJ,CAAA,mQAAA,CAAA;AAGF,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,QAAA,CAAS;AAAA,QAClC,MAAA;AAAA,QACA,QAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAM,MAAA;AAAA,YACN,OAAA,EAAS,CAAA;AAAA,EAAiB,UAAU;;AAAA;AAAA,EAAwB,QAAQ,CAAA;AAAA;AACtE,SACF;AAAA,QACA,eAAA,EAAiB;AAAA,OAClB,CAAA;AACD,MAAA,MAAM,CAAA,GAAI,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,iCAAiC,CAAA;AAC1D,MAAA,IAAI,CAAC,CAAA,EAAG,OAAO,EAAE,MAAM,OAAA,EAAQ;AAC/B,MAAA,IAAI,CAAA,CAAE,CAAC,CAAA,EAAG,WAAA,EAAY,CAAE,UAAA,CAAW,OAAO,CAAA,EAAG,OAAO,EAAE,IAAA,EAAM,OAAA,EAAQ;AACpE,MAAA,OAAO,EAAE,MAAM,UAAA,EAAY,MAAA,EAAA,CAAS,EAAE,CAAC,CAAA,IAAK,oBAAA,EAAsB,IAAA,EAAK,EAAE;AAAA,IAC3E,CAAA,CAAA,MAAQ;AAIN,MAAA,OAAO,EAAE,MAAM,OAAA,EAAQ;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,MAAc,iBAAA,CACZ,UAAA,EACA,YAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,MAAA,GAA4B;AAAA,MAChC,EAAA,EAAA,iBAAI,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,MAC3B,UAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAA,CAAK,kBAAA,CAAmB,KAAK,MAAM,CAAA;AACnC,IAAA,OAAO,IAAA,CAAK,kBAAA,CAAmB,MAAA,GAAS,IAAA,CAAK,UAAA,EAAY;AACvD,MAAA,IAAA,CAAK,mBAAmB,KAAA,EAAM;AAAA,IAChC;AACA,IAAA,IAAI,KAAK,gBAAA,EAAkB;AACzB,MAAA,MAAM,IAAA,CAAK,gBAAA,CAAiB,MAAA,CAAO,MAAM,CAAA;AAAA,IAC3C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA,gBAAA,GAA2B;AACzB,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,gBAAA;AACvD,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,eAAA,EAAiB,IAAA,IAAQ,gBAAA;AASlD,IAAA,IAAI,SAAS,iBAAA,EAAmB;AAC9B,MAAA,OAAO,0EAAA;AAAA,IACT;AAEA,IAAA,OAAO,2CAA2C,SAAS,CAAA,oBAAA,CAAA;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,MAAM,oBAAA,CACJ,SAAA,EACA,IAAA,GAA4C,EAAC,EACiB;AAE9D,IAAA,IAAA,CAAK,mBAAmB,MAAA,GAAS,CAAA;AAGjC,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,IAAA,IAAI,IAAA,CAAK,qBAAA,IAAyB,IAAA,CAAK,gBAAA,EAAkB;AAMvD,MAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AAAA,IAC1B;AACA,IAAA,OAAO,SAAA;AAAA,EACT;AACF,CAAA;AAEA,SAAS,WAAW,IAAA,EAQD;AACjB,EAAA,OAAO;AAAA,IACL,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,cAAA,EAAgB,IAAA,CAAK,cAAA,IAAkB,EAAC;AAAA,IACxC,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,GAAI,KAAK,YAAA,KAAiB,MAAA,GAAY,EAAE,YAAA,EAAc,IAAA,CAAK,YAAA,EAAa,GAAI,EAAC;AAAA,IAC7E,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,GACpC;AACF;AAEA,SAAS,eAAe,CAAA,EAAwB;AAC9C,EAAA,MAAM,MAAA,GAAS,EAAE,aAAA,IAAiB,qBAAA;AAClC,EAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,WAAA,CAAY,MAAA,GAAS,CAAA,GAAI,CAAA,SAAA,EAAY,CAAA,CAAE,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA,GAAM,EAAA;AACnF,EAAA,OAAO,CAAA,yBAAA,EAA4B,MAAM,CAAA,EAAG,KAAK,CAAA,CAAA;AACnD;AAEA,SAAS,iBAAA,CAAkB,GAAgB,YAAA,EAA8B;AACvE,EAAA,MAAM,MAAA,GAAS,EAAE,aAAA,IAAiB,wDAAA;AAClC,EAAA,OAAO;AAAA,IACL,SAAS,YAAY,CAAA,QAAA,EAAW,YAAA,KAAiB,CAAA,GAAI,KAAK,GAAG,CAAA,6BAAA,CAAA;AAAA,IAC7D,4DAAA;AAAA,IACA,8EAAA;AAAA,IACA,wBAAA;AAAA,IACA,WAAW,MAAM,CAAA;AAAA,GACnB,CAAE,KAAK,GAAG,CAAA;AACZ;AAEA,SAAS,cAAc,IAAA,EAOL;AAChB,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,SAAA;AAAA,IACN,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,kBAAkB,IAAA,CAAK,SAAA;AAAA,IACvB,mBAAmB,IAAA,CAAK,UAAA;AAAA,IACxB,OAAA,EAAS,IAAA;AAAA,IACT,iBAAiB,IAAA,CAAK,eAAA;AAAA,IACtB,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,UAAU,IAAA,CAAK;AAAA,GACjB;AACF;;;ACjlBA,eAAsB,UAAU,IAAA,EAAkD;AAChF,EAAA,MAAM,QAAA,GAAW,KAAK,QAAA,IAAY,qBAAA;AAClC,EAAA,MAAMC,KAAAA,CAAM,QAAA,EAAU,EAAE,SAAA,EAAW,MAAM,CAAA;AACzC,EAAA,MAAM,WAAA,GAAcD,IAAAA,CAAK,QAAA,EAAU,aAAa,CAAA;AAEhD,EAAA,MAAM,MAAA,GAAS,MAAM,UAAA,CAAW,WAAW,CAAA;AAC3C,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,OAAA,GAAU,MAAM,cAAA,CAAe,QAAA,CAAS,WAAW,CAAA;AAAA,EACrD,CAAA,MAAO;AACL,IAAA,OAAA,GAAU,eAAe,QAAA,EAAS;AAClC,IAAA,MAAM,OAAA,CAAQ,OAAO,WAAW,CAAA;AAAA,EAClC;AAEA,EAAA,MAAM,IAAA,GAAO,MAAM,SAAA,CAAU,IAAA,CAAK,EAAE,UAAU,gBAAA,EAAkB,OAAA,CAAQ,SAAA,EAAU,EAAG,CAAA;AACrF,EAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,UAAA,EAAW;AAC7C,EAAA,IAAI,cAAA,CAAe,WAAW,CAAA,EAAG;AAC/B,IAAA,MAAM,IAAA,CAAK,KAAK,OAAO,CAAA;AAAA,EACzB;AAEA,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,IAAS,iBAAA;AAC5B,EAAA,IAAI,GAAA;AACJ,EAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,YAAA,CAAa,KAAK,CAAA;AACjD,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,GAAA,GAAM,SAAA,CAAU,IAAA;AAAA,MACd,WAAA,CAAY,cAAA;AAAA;AAAA;AAAA;AAAA,MAIZ,QAAQ,IAAA,CAAK,WAAA,CAAY,cAAA,EAAgB,IAAA,CAAK,KAAK,CAAA;AAAA,MACnD,IAAA,CAAK,gBAAA;AAAA;AAAA,MAEL,CAAC,GAAG,WAAA,CAAY,cAAA,EAAgB,GAAG,YAAY,cAAc;AAAA,KAC/D;AAAA,EACF,CAAA,MAAO;AACL,IAAA,MAAM,QAAA,GAAW,qBAAA,CAAsB,GAAA,EAAI,CACxC,UAAU,KAAK,CAAA,CACf,oBAAA,CAAqB,IAAA,CAAK,aAAa,WAAW,CAAA,CAClD,SAAA,CAAU,iBAAiB,EAC3B,KAAA,EAAM;AACT,IAAA,GAAA,GAAM,MAAM,SAAA,CAAU,IAAA,EAAM,OAAA,EAAS,QAAQ,CAAA;AAAA,EAC/C;AAEA,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI;AAAA,IAClB,SAAA,EAAW,GAAA;AAAA,IACX,UAAA,EAAY,IAAA;AAAA,IACZ,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,QAAA,EAAUA,IAAAA,CAAK,QAAA,EAAU,KAAA,EAAO,IAAI,EAAE;AAAA,GACvC,CAAA;AAED,EAAA,OAAO;AAAA,IACL,GAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,cAAc,CAAC;AAAA,GACjB;AACF;AAEA,eAAe,WAAW,CAAA,EAA6B;AACrD,EAAA,IAAI;AACF,IAAA,MAAM,KAAK,CAAC,CAAA;AACZ,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;;;AC9GA,IAAM,KAAA,GAAQ,OAAA,CAAQ,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA;AAE1C,SAAS,IAAA,CAAK,MAAc,CAAA,EAAmB;AAC7C,EAAA,OAAO,KAAA,GAAQ,CAAA,KAAA,EAAQ,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,OAAA,CAAA,GAAY,CAAA;AAC9C;AAEO,IAAM,GAAA,GAAM;AAAA,EACjB,IAAA,EAAM,CAAC,CAAA,KAAsB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA;AAAA,EACvC,SAAA,EAAW,CAAC,CAAA,KAAsB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA;AAAA,EAC5C,IAAA,EAAM,CAAC,CAAA,KAAsB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA;AAAA,EACvC,KAAA,EAAO,CAAC,CAAA,KAAsB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA;AAAA,EACxC,GAAA,EAAK,CAAC,CAAA,KAAsB,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,EACrC,IAAA,EAAM,CAAC,CAAA,KAAsB,IAAA,CAAK,GAAG,CAAC;AACxC,CAAA;;;ACTA,IAAM,IAAA,GAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA,CAQX,IAAA,EAAK;AAEP,eAAsB,UAAU,GAAA,EAAyB;AACvD,EAAA,MAAM,KAAwB,eAAA,CAAgB;AAAA,IAC5C,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,QAAA,EAAU,OAAA,CAAQ,MAAA,CAAO,KAAA,IAAS;AAAA,GACnC,CAAA;AAED,EAAA,IAAI,eAAA,GAAkB,CAAA;AACtB,EAAA,IAAI,KAAA,GAAQ,IAAA;AAEZ,EAAA,OAAA,CAAQ,IAAI,GAAA,CAAI,GAAA,CAAI,iBAAiB,GAAA,CAAI,EAAE,GAAG,CAAC,CAAA;AAC/C,EAAA,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,GAAA,CAAI,CAAA,UAAA,EAAa,GAAA,CAAI,wBAAA,CAAyB,MAAA,KAAW,CAAA,GAAI,OAAA,GAAU,MAAM,CAAA,+CAAA,CAA4C,CAAC,CAAA;AAC1I,EAAA,OAAA,CAAQ,GAAA,EAAI;AAEZ,EAAA,MAAM,MAAA,GAAS,MAAc,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAA;AAE9C,EAAA,EAAA,CAAG,SAAA,CAAU,QAAQ,CAAA;AACrB,EAAA,EAAA,CAAG,MAAA,EAAO;AAEV,EAAA,EAAA,CAAG,EAAA,CAAG,MAAA,EAAQ,CAAC,GAAA,KAAQ;AACrB,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,EAAK;AACtB,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,MAAA,EAAA,CAAG,MAAA,EAAO;AACV,MAAA;AAAA,IACF;AACA,IAAA,KAAK,UAAA,CAAW,IAAI,CAAA,CACjB,KAAA,CAAM,CAACE,IAAAA,KAAiB;AACvB,MAAA,MAAM,MAAMA,IAAAA,YAAe,KAAA,GAAQA,IAAAA,CAAI,OAAA,GAAU,OAAOA,IAAG,CAAA;AAC3D,MAAA,OAAA,CAAQ,MAAM,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,GAAG,EAAE,CAAC,CAAA;AAAA,IACnC,CAAC,CAAA,CACA,OAAA,CAAQ,MAAM;AACb,MAAA,IAAI,KAAA,KAAU,MAAA,EAAO;AAAA,IACvB,CAAC,CAAA;AAAA,EACL,CAAC,CAAA;AAED,EAAA,EAAA,CAAG,EAAA,CAAG,SAAS,MAAM;AACnB,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,MAAA,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,GAAA,CAAI,MAAM,CAAC,CAAA;AAAA,IAC7B;AAAA,EACF,CAAC,CAAA;AAGD,EAAA,MAAM,IAAI,QAAc,CAAC,OAAA,KAAY,GAAG,IAAA,CAAK,OAAA,EAAS,OAAO,CAAC,CAAA;AAE9D,EAAA,eAAe,WAAW,IAAA,EAA6B;AACrD,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AACxB,MAAA,MAAM,cAAc,IAAI,CAAA;AACxB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,iBAAiB,IAAI,CAAA;AAAA,EAC7B;AAEA,EAAA,eAAe,cAAc,IAAA,EAA6B;AACxD,IAAA,MAAM,CAAC,GAAA,EAAK,GAAG,IAAI,CAAA,GAAI,KAAK,KAAA,CAAM,CAAC,CAAA,CAAE,KAAA,CAAM,KAAK,CAAA;AAChD,IAAA,QAAQ,GAAA;AAAK,MACX,KAAK,MAAA;AAAA,MACL,KAAK,MAAA;AACH,QAAA,KAAA,GAAQ,KAAA;AACR,QAAA,EAAA,CAAG,KAAA,EAAM;AACT,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,GAAA,CAAI,IAAI,CAAC,CAAA;AACzB,QAAA;AAAA,MACF,KAAK,OAAA,EAAS;AACZ,QAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,GAAA,CAAI,2BAAsB,CAAC,CAAA;AACpD,QAAA,MAAM,SAAS,MAAM,GAAA,CAAI,MAAM,EAAE,IAAA,EAAM,YAAY,CAAA;AACnD,QAAA,OAAA,CAAQ,IAAI,GAAA,CAAI,GAAA,CAAI,UAAU,MAAA,CAAO,QAAQ,EAAE,CAAC,CAAA;AAChD,QAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,IAAA,EAAK;AAC9B,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,GAAA,CAAI,GAAA;AAAA,YACF,CAAA,aAAA,EAAW,MAAA,CAAO,eAAA,CAAgB,MAAM,CAAA,MAAA,EACtC,MAAA,CAAO,eAAA,CAAgB,MAAA,KAAW,CAAA,GAAI,GAAA,GAAM,KAC9C,CAAA,YAAA,EAAe,OAAO,SAAS,CAAA,UAAA;AAAA;AACjC,SACF;AACA,QAAA;AAAA,MACF;AAAA,MACA,KAAK,MAAA,EAAQ;AACX,QAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,IAAA,EAAK;AAC9B,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,GAAA,CAAI,GAAA;AAAA,YACF,CAAA,aAAA,EAAW,MAAA,CAAO,eAAA,CAAgB,MAAM,CAAA,MAAA,EACtC,MAAA,CAAO,eAAA,CAAgB,MAAA,KAAW,CAAA,GAAI,GAAA,GAAM,KAC9C,CAAA,YAAA,EAAe,OAAO,SAAS,CAAA,UAAA;AAAA;AACjC,SACF;AACA,QAAA;AAAA,MACF;AAAA,MACA,KAAK,QAAA,EAAU;AACb,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,GAAG,EAAE,IAAA,EAAK;AAClC,QAAA,IAAI,CAAC,KAAA,EAAO;AACV,UAAA,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,IAAA,CAAK,wBAAwB,CAAC,CAAA;AAC9C,UAAA;AAAA,QACF;AACA,QAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,MAAA,CAAO,OAAO,EAAE,KAAA,EAAO,GAAG,CAAA;AACjD,QAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,UAAA,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,GAAA,CAAI,wBAAwB,CAAC,CAAA;AAC7C,UAAA;AAAA,QACF;AACA,QAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,UAAA,OAAA,CAAQ,GAAA;AAAA,YACN,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAA,CAAA,EAAI,CAAA,CAAE,cAAc,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,EAAI,GAAA,CAAI,GAAA,CAAI,CAAA,CAAE,cAAc,CAAC;AAAA,EAAA,EAAO,EAAE,OAAO;AAAA;AAAA,WACnF;AAAA,QACF;AACA,QAAA;AAAA,MACF;AAAA,MACA;AACE,QAAA,OAAA,CAAQ,IAAI,GAAA,CAAI,IAAA,CAAK,CAAA,kBAAA,EAAqB,GAAG,cAAc,CAAC,CAAA;AAAA;AAChE,EACF;AAEA,EAAA,eAAe,iBAAiB,IAAA,EAA6B;AAC3D,IAAA,MAAM,GAAA,GAAM,MAAM,GAAA,CAAI,OAAA,CAAQ,EAAE,UAAA,EAAY,IAAA,EAAM,iBAAiB,CAAA;AACnE,IAAA,IAAI,GAAA,CAAI,SAAS,IAAA,EAAM;AACrB,MAAA,OAAA,CAAQ,IAAI,GAAA,CAAI,SAAA,CAAU,QAAQ,CAAA,GAAI,IAAI,IAAI,CAAA;AAC9C,MAAA,eAAA,GAAkB,CAAA;AAClB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,GAAA,CAAI,SAAS,UAAA,EAAY;AAC3B,MAAA,MAAM,IAAI,GAAA,CAAI,QAAA;AACd,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,GAAA,CAAI,IAAA,CAAK,CAAA,UAAA,EAAa,CAAA,CAAE,OAAO,CAAA,CAAA,EAAI,CAAA,CAAE,WAAW,CAAA,EAAA,CAAI,CAAA,GAClD,GAAA,CAAI,SAAA,CAAU,QAAQ,IACtB,GAAA,CAAI;AAAA,OACR;AACA,MAAA,eAAA,GAAkB,CAAA,CAAE,OAAA;AACpB,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,IAAI,GAAA,CAAI,KAAA,CAAM,YAAY,CAAA,GAAI,IAAI,IAAI,CAAA;AAC9C,IAAA,eAAA,GAAkB,CAAA;AAAA,EACpB;AACF;;;ACrIA,SAAS,GAAG,OAAA,EAA8B;AACxC,EAAA,OAAO,EAAE,OAAA,EAAS,CAAC,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,IAAA,EAAM,CAAC,CAAA,EAAG,CAAA,EAAE;AAC/E;AAEA,SAAS,IAAI,OAAA,EAA6B;AACxC,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,QAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,OAAO,OAAA,EAAQ,EAAG,IAAA,EAAM,CAAC,GAAG,CAAA;AAAA,IAC7E,OAAA,EAAS;AAAA,GACX;AACF;AAQA,eAAsB,iBAAA,CACpB,KACA,KAAA,EACqB;AACrB,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAA8C,EAAE,UAAA,EAAY,KAAA,CAAM,UAAA,EAAW;AACnF,IAAA,IAAI,KAAA,CAAM,eAAA,KAAoB,KAAA,CAAA,EAAW,QAAA,CAAS,kBAAkB,KAAA,CAAM,eAAA;AAC1E,IAAA,IAAI,KAAA,CAAM,YAAA,KAAiB,KAAA,CAAA,EAAW,QAAA,CAAS,eAAe,KAAA,CAAM,YAAA;AACpE,IAAA,MAAM,GAAA,GAAM,MAAM,GAAA,CAAI,OAAA,CAAQ,QAAQ,CAAA;AACtC,IAAA,OAAO,EAAA,CAAG;AAAA,MACR,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,SAAS,GAAA,CAAI,OAAA;AAAA,MACb,QAAA,EAAU,IAAI,QAAA,IAAY,IAAA;AAAA,MAC1B,gBAAA,EAAkB;AAAA,QAChB,IAAA,EAAM,IAAI,gBAAA,CAAiB,IAAA;AAAA,QAC3B,aAAA,EAAe,IAAI,gBAAA,CAAiB,aAAA;AAAA,QACpC,WAAA,EAAa,IAAI,gBAAA,CAAiB;AAAA,OACpC;AAAA,MACA,iBAAA,EAAmB;AAAA,QACjB,IAAA,EAAM,IAAI,iBAAA,CAAkB,IAAA;AAAA,QAC5B,aAAA,EAAe,IAAI,iBAAA,CAAkB,aAAA;AAAA,QACrC,WAAA,EAAa,IAAI,iBAAA,CAAkB;AAAA,OACrC;AAAA,MACA,QAAQ,GAAA,CAAI,MAAA;AAAA,MACZ,UAAU,GAAA,CAAI;AAAA,KACf,CAAA;AAAA,EACH,SAAS,CAAA,EAAY;AACnB,IAAA,OAAO,IAAI,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACvD;AACF;AAOA,eAAsB,gBAAA,CACpB,KACA,KAAA,EACqB;AACrB,EAAA,MAAM,OAA2B,EAAC;AAClC,EAAA,IAAI,KAAA,CAAM,KAAA,KAAU,MAAA,EAAW,IAAA,CAAK,QAAQ,KAAA,CAAM,KAAA;AAClD,EAAA,MAAM,OAAO,MAAM,GAAA,CAAI,MAAA,CAAO,KAAA,CAAM,OAAO,IAAI,CAAA;AAC/C,EAAA,OAAO,EAAA,CAAG;AAAA,IACR,OAAO,IAAA,CAAK,MAAA;AAAA,IACZ,QAAA,EAAU,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MACzB,IAAI,CAAA,CAAE,EAAA;AAAA,MACN,gBAAgB,CAAA,CAAE,cAAA;AAAA,MAClB,mBAAmB,CAAA,CAAE,iBAAA;AAAA,MACrB,gBAAgB,CAAA,CAAE,cAAA;AAAA,MAClB,SAAS,CAAA,CAAE;AAAA,KACb,CAAE;AAAA,GACH,CAAA;AACH;AAEA,eAAsB,gBAAgB,GAAA,EAA+B;AACnE,EAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,KAAA,CAAM,EAAE,IAAA,EAAM,UAAA,EAAY,MAAA,EAAQ,UAAA,EAAY,CAAA;AACvE,EAAA,MAAM,GAAA,GAAM,OAAO,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU,KAAK,CAAA;AAC9D,EAAA,MAAM,UAAA,GACJ,OAAO,GAAA,CAAI,OAAA,CAAQ,SAAS,QAAA,GAAW,GAAA,CAAI,OAAA,CAAQ,MAAA,CAAO,MAAA,GAAS,CAAA;AACrE,EAAA,OAAO,EAAA,CAAG;AAAA,IACR,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,eAAA,EAAiB,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,eAAA;AAAA,IACrC,UAAA;AAAA,IACA,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,WAAW,MAAA,CAAO;AAAA,GACnB,CAAA;AACH;AAEA,eAAsB,eAAe,GAAA,EAA+B;AAClE,EAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,IAAA,EAAK;AAC9B,EAAA,OAAO,EAAA,CAAG;AAAA,IACR,qBAAqB,MAAA,CAAO,mBAAA;AAAA,IAC5B,eAAA,EAAiB,OAAO,eAAA,CAAgB,MAAA;AAAA,IACxC,WAAW,MAAA,CAAO,SAAA;AAAA,IAClB,eAAA,EAAiB,MAAA,CAAO,eAAA,CAAgB,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MAClD,IAAI,CAAA,CAAE,EAAA;AAAA,MACN,gBAAgB,CAAA,CAAE,cAAA;AAAA,MAClB,mBAAmB,CAAA,CAAE;AAAA,KACvB,CAAE;AAAA,GACH,CAAA;AACH;AAEA,eAAsB,sBAAsB,IAAA,EAAsC;AAChF,EAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,EAAW;AACrC,EAAA,OAAO,EAAA,CAAG;AAAA,IACR,OAAO,MAAA,CAAO,MAAA;AAAA,IACd,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MACzB,IAAI,CAAA,CAAE,EAAA;AAAA,MACN,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,WAAW,CAAA,CAAE,SAAA;AAAA,MACb,QAAQ,CAAA,CAAE,MAAA;AAAA,MACV,aAAa,CAAA,CAAE,WAAA;AAAA,MACf,WAAW,CAAA,CAAE;AAAA,KACf,CAAE;AAAA,GACH,CAAA;AACH;AAEA,eAAsB,oBAAoB,IAAA,EAAsC;AAC9E,EAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,QAAA,EAAS;AACjC,EAAA,OAAO,EAAA,CAAG;AAAA,IACR,OAAO,IAAA,CAAK,MAAA;AAAA,IACZ,IAAA,EAAM,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MACrB,OAAO,CAAA,CAAE,KAAA;AAAA,MACT,gBAAA,EAAkB,EAAE,cAAA,CAAe,gBAAA;AAAA,MACnC,MAAA,EAAQ,EAAE,cAAA,CAAe,MAAA;AAAA,MACzB,UAAA,EAAY,EAAE,cAAA,CAAe,MAAA;AAAA,MAC7B,cAAc,CAAA,CAAE;AAAA,KAClB,CAAE;AAAA,GACH,CAAA;AACH;;;AChIA,IAAM,WAAA,GAAc,eAAA;AAGb,SAAS,cAAA,CAAe,KAAU,IAAA,EAA4B;AACnE,EAAA,MAAM,MAAA,GAAS,IAAI,SAAA,CAAU;AAAA,IAC3B,IAAA,EAAM,sBAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACV,CAAA;AAED,EAAA,MAAA,CAAO,YAAA;AAAA,IACL,aAAA;AAAA,IACA;AAAA,MACE,KAAA,EAAO,0BAAA;AAAA,MACP,WAAA,EACE,gKAAA;AAAA,MAEF,WAAA,EAAa;AAAA,QACX,UAAA,EAAYM,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,QAC5B,eAAA,EAAiBA,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,GAAc,QAAA,EAAS;AAAA,QACzD,YAAA,EAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS;AACpC,KACF;AAAA,IACA,OAAO,IAAA,KAAS,iBAAA,CAAkB,GAAA,EAAK,IAAI;AAAA,GAC7C;AAEA,EAAA,MAAA,CAAO,YAAA;AAAA,IACL,YAAA;AAAA,IACA;AAAA,MACE,KAAA,EAAO,8BAAA;AAAA,MACP,WAAA,EACE,8FAAA;AAAA,MACF,WAAA,EAAa;AAAA,QACX,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,QACvB,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,QAAA,EAAS,CAAE,GAAA,CAAI,EAAE,CAAA,CAAE,QAAA;AAAS;AACtD,KACF;AAAA,IACA,OAAO,IAAA,KAAS,gBAAA,CAAiB,GAAA,EAAK,IAAI;AAAA,GAC5C;AAEA,EAAA,MAAA,CAAO,YAAA;AAAA,IACL,WAAA;AAAA,IACA;AAAA,MACE,KAAA,EAAO,qBAAA;AAAA,MACP,WAAA,EACE;AAAA,KACJ;AAAA,IACA,YAAY,gBAAgB,GAAG;AAAA,GACjC;AAEA,EAAA,MAAA,CAAO,YAAA;AAAA,IACL,UAAA;AAAA,IACA;AAAA,MACE,KAAA,EAAO,4BAAA;AAAA,MACP,WAAA,EACE;AAAA,KACJ;AAAA,IACA,YAAY,eAAe,GAAG;AAAA,GAChC;AAEA,EAAA,MAAA,CAAO,YAAA;AAAA,IACL,kBAAA;AAAA,IACA;AAAA,MACE,KAAA,EAAO,kBAAA;AAAA,MACP,WAAA,EAAa;AAAA,KACf;AAAA,IACA,YAAY,sBAAsB,IAAI;AAAA,GACxC;AAEA,EAAA,MAAA,CAAO,YAAA;AAAA,IACL,gBAAA;AAAA,IACA;AAAA,MACE,KAAA,EAAO,sBAAA;AAAA,MACP,WAAA,EAAa;AAAA,KACf;AAAA,IACA,YAAY,oBAAoB,IAAI;AAAA,GACtC;AAEA,EAAA,OAAO,MAAA;AACT;AAGA,eAAsB,WAAA,CAAY,KAAU,IAAA,EAAgC;AAC1E,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,GAAA,EAAK,IAAI,CAAA;AACvC,EAAA,MAAM,SAAA,GAAY,IAAI,oBAAA,EAAqB;AAC3C,EAAA,MAAM,MAAA,CAAO,QAAQ,SAAS,CAAA;AAChC;;;AClFA,IAAM,SAAA,GAAY;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA,CAkChB,IAAA,EAAK;AAEP,eAAsB,OAAO,IAAA,EAAiC;AAC5D,EAAA,MAAM,MAAA,GAAS,UAAU,IAAI,CAAA;AAC7B,EAAA,QAAQ,OAAO,UAAA;AAAY,IACzB,KAAK,MAAA;AAAA,IACL,KAAK,EAAA;AACH,MAAA,OAAO,YAAY,MAAM,CAAA;AAAA,IAC3B,KAAK,KAAA;AACH,MAAA,OAAO,WAAW,MAAM,CAAA;AAAA,IAC1B,KAAK,MAAA;AAAA,IACL,KAAK,QAAA;AAAA,IACL,KAAK,IAAA;AACH,MAAA,OAAA,CAAQ,IAAI,SAAS,CAAA;AACrB,MAAA,OAAO,CAAA;AAAA,IACT;AACE,MAAA,OAAA,CAAQ,MAAM,GAAA,CAAI,KAAA,CAAM,oBAAoB,MAAA,CAAO,UAAU,EAAE,CAAC,CAAA;AAChE,MAAA,OAAA,CAAQ,MAAM,SAAS,CAAA;AACvB,MAAA,OAAO,CAAA;AAAA;AAEb;AAEA,eAAe,WAAW,IAAA,EAAmC;AAC3D,EAAA,MAAM,SAAwB,EAAC;AAC/B,EAAA,MAAM,WAAA,GAAc,KAAK,KAAA,CAAM,OAAA;AAC/B,EAAA,IAAI,aAAA,CAAc,WAAW,CAAA,EAAG;AAC9B,IAAA,MAAA,CAAO,OAAA,GAAU,WAAA;AAAA,EACnB;AACA,EAAA,MAAM,SAAA,GAAY,KAAK,KAAA,CAAM,KAAA;AAC7B,EAAA,IAAI,SAAA,SAAkB,KAAA,GAAQ,SAAA;AAC9B,EAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,KAAA,CAAM,iBAAiB,CAAA;AAClD,EAAA,IAAI,aAAA,SAAsB,aAAA,GAAgB,aAAA;AAE1C,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,QAAA,GAAW,MAAM,cAAc,MAAM,CAAA;AAAA,EACvC,SAAS,CAAA,EAAY;AAEnB,IAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,EAAG,CAAA,YAAa,QAAQ,CAAA,CAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC;AAAA,CAAI,CAAA;AACtE,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU;AAAA,IAC7B,YAAY,QAAA,CAAS,OAAA;AAAA,IACrB,GAAI,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA,GAAI,EAAE,QAAA,EAAU,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA,EAAE,GAAI,EAAC;AAAA,IACvE,GAAI,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,GAAI,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,EAAE,GAAI,EAAC;AAAA,IAC9D,GAAI,IAAA,CAAK,KAAA,CAAM,SAAA,GAAY,EAAE,WAAW,IAAA,CAAK,KAAA,CAAM,SAAA,EAAU,GAAI;AAAC,GACnE,CAAA;AAGD,EAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,IACb,CAAA,oCAAA,EAAuC,MAAA,CAAO,QAAQ,CAAA,KAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,EAAE,CAAA,SAAA,EAAY,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,QAAA,CAAS,KAAK;AAAA;AAAA,GAC1H;AAEA,EAAA,MAAM,WAAA,CAAY,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,IAAI,CAAA;AACzC,EAAA,OAAO,CAAA;AACT;AAEA,eAAe,YAAY,IAAA,EAAmC;AAC5D,EAAA,MAAM,SAAwB,EAAC;AAC/B,EAAA,MAAM,WAAA,GAAc,KAAK,KAAA,CAAM,OAAA;AAC/B,EAAA,IAAI,aAAA,CAAc,WAAW,CAAA,EAAG;AAC9B,IAAA,MAAA,CAAO,OAAA,GAAU,WAAA;AAAA,EACnB;AACA,EAAA,MAAM,SAAA,GAAY,KAAK,KAAA,CAAM,KAAA;AAC7B,EAAA,IAAI,SAAA,SAAkB,KAAA,GAAQ,SAAA;AAC9B,EAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,KAAA,CAAM,iBAAiB,CAAA;AAClD,EAAA,IAAI,aAAA,SAAsB,aAAA,GAAgB,aAAA;AAE1C,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,QAAA,GAAW,MAAM,cAAc,MAAM,CAAA;AAAA,EACvC,SAASN,IAAAA,EAAc;AACrB,IAAA,MAAM,MAAMA,IAAAA,YAAe,KAAA,GAAQA,IAAAA,CAAI,OAAA,GAAU,OAAOA,IAAG,CAAA;AAC3D,IAAA,OAAA,CAAQ,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,GAAG,CAAC,CAAA;AAC5B,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU;AAAA,IAC7B,YAAY,QAAA,CAAS,OAAA;AAAA,IACrB,GAAI,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA,GAAI,EAAE,QAAA,EAAU,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA,EAAE,GAAI,EAAC;AAAA,IACvE,GAAI,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,GAAI,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,EAAE,GAAI,EAAC;AAAA,IAC9D,GAAI,IAAA,CAAK,KAAA,CAAM,SAAA,GAAY,EAAE,WAAW,IAAA,CAAK,KAAA,CAAM,SAAA,EAAU,GAAI;AAAC,GACnE,CAAA;AAED,EAAA,IAAI,OAAO,YAAA,EAAc;AACvB,IAAA,OAAA,CAAQ,IAAI,GAAA,CAAI,GAAA,CAAI,yBAAoB,MAAA,CAAO,QAAQ,EAAE,CAAC,CAAA;AAC1D,IAAA,OAAA,CAAQ,IAAI,GAAA,CAAI,GAAA,CAAI,mCAA8B,MAAA,CAAO,QAAQ,cAAc,CAAC,CAAA;AAChF,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAI,GAAA,CAAI,CAAA,uCAAA,EAAqC,OAAO,GAAA,CAAI,EAAE,UAAU,CAAC,CAAA;AAAA,EACnF,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,GAAA,CAAI,CAAA,gBAAA,EAAc,MAAA,CAAO,QAAQ,CAAA,OAAA,EAAU,MAAA,CAAO,GAAA,CAAI,EAAE,CAAA,EAAA,CAAI,CAAC,CAAA;AAAA,EAC/E;AACA,EAAA,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,GAAA,CAAI,CAAA,gBAAA,EAAc,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,QAAA,CAAS,KAAK,CAAA,CAAE,CAAC,CAAA;AACtE,EAAA,OAAA,CAAQ,GAAA,EAAI;AAEZ,EAAA,MAAM,SAAA,CAAU,OAAO,GAAG,CAAA;AAC1B,EAAA,OAAO,CAAA;AACT;AAEA,SAAS,UAAU,IAAA,EAA4B;AAC7C,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,CAAC,CAAA,IAAK,EAAA;AAC9B,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AACzB,EAAA,MAAM,QAAgC,EAAC;AACvC,EAAA,MAAM,aAAuB,EAAC;AAC9B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA,EAAG;AACxB,MAAA,MAAM,IAAA,GAAO,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA;AACxB,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA;AACvB,MAAA,IAAI,SAAS,MAAA,IAAa,CAAC,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA,EAAG;AAChD,QAAA,KAAA,CAAM,IAAI,CAAA,GAAI,IAAA;AACd,QAAA,CAAA,EAAA;AAAA,MACF,CAAA,MAAO;AACL,QAAA,KAAA,CAAM,IAAI,CAAA,GAAI,EAAA;AAAA,MAChB;AAAA,IACF,CAAA,MAAO;AACL,MAAA,UAAA,CAAW,KAAK,GAAG,CAAA;AAAA,IACrB;AAAA,EACF;AACA,EAAA,OAAO,EAAE,UAAA,EAAY,KAAA,EAAO,UAAA,EAAW;AACzC;AAGA,IAAM,MAAA,GAAS,YAAY,GAAA,KAAQ,CAAA,OAAA,EAAU,QAAQ,IAAA,CAAK,CAAC,KAAK,EAAE,CAAA,CAAA;AAClE,IAAI,MAAA,EAAQ;AACV,EAAA,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAAE,IAAA;AAAA,IAC5B,CAAC,IAAA,KAAS,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AAAA,IAC3B,CAACA,IAAAA,KAAQ;AACP,MAAA,OAAA,CAAQ,MAAMA,IAAG,CAAA;AACjB,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,GACF;AACF","file":"cli.js","sourcesContent":["import Anthropic from \"@anthropic-ai/sdk\";\nimport type {\n GenerateRequest,\n GenerateResponse,\n LlmAdapter,\n StreamEvent,\n ToolUse,\n} from \"./types.js\";\n\nexport interface AnthropicAdapterConfig {\n /** Anthropic API key. Falls back to `ANTHROPIC_API_KEY` when omitted. */\n apiKey?: string;\n /** Model identifier. Default: \"claude-sonnet-4-6\". */\n model?: string;\n /** Default max output tokens. Default: 1024. */\n defaultMaxOutputTokens?: number;\n /** Override the adapter id surfaced in audit logs. */\n id?: string;\n}\n\nconst DEFAULT_MODEL = \"claude-sonnet-4-6\";\n\n/**\n * AnthropicAdapter — production adapter for Anthropic Claude.\n *\n * Requires an Anthropic API key. The recommended default model in the\n * TeleologyHI ecosystem is `claude-sonnet-4-6`; override via `model`.\n *\n * Surface (D-N8): non-streaming `generate` + streaming `generateStream`\n * (yields `delta` / `tool-use` / `end` events) + tool-calling via the\n * `tools` field on `GenerateRequest`. Vision + prompt caching land later.\n */\nexport class AnthropicAdapter implements LlmAdapter {\n readonly id: string;\n readonly supportsTools = true;\n readonly supportsStreaming = true;\n private readonly client: Anthropic;\n private readonly model: string;\n private readonly defaultMaxOutputTokens: number;\n\n constructor(config: AnthropicAdapterConfig = {}) {\n const apiKey = config.apiKey ?? process.env.ANTHROPIC_API_KEY;\n if (!apiKey) {\n throw new Error(\n \"AnthropicAdapter: no API key provided and ANTHROPIC_API_KEY is not set\",\n );\n }\n this.client = new Anthropic({ apiKey });\n this.model = config.model ?? DEFAULT_MODEL;\n this.defaultMaxOutputTokens = config.defaultMaxOutputTokens ?? 1024;\n this.id = config.id ?? `anthropic:${this.model}`;\n }\n\n async generate(req: GenerateRequest): Promise<GenerateResponse> {\n const turns = this.buildTurns(req);\n const response = await this.client.messages.create({\n model: this.model,\n system: req.system,\n messages: turns,\n max_tokens: req.maxOutputTokens ?? this.defaultMaxOutputTokens,\n ...(req.tools && req.tools.length > 0\n ? {\n tools: req.tools.map((t) => ({\n name: t.name,\n description: t.description,\n input_schema: t.inputSchema as never,\n })),\n }\n : {}),\n });\n\n const text = response.content\n .map((block) => (block.type === \"text\" ? block.text : \"\"))\n .join(\"\");\n\n const toolUses: ToolUse[] = response.content\n .filter((b): b is Anthropic.ToolUseBlock => b.type === \"tool_use\")\n .map((b) => ({\n id: b.id,\n name: b.name,\n input: (b.input as Record<string, unknown>) ?? {},\n }));\n\n const out: GenerateResponse = {\n text,\n tokensIn: response.usage.input_tokens,\n tokensOut: response.usage.output_tokens,\n };\n if (toolUses.length > 0) out.toolUses = toolUses;\n return out;\n }\n\n async *generateStream(req: GenerateRequest): AsyncIterable<StreamEvent> {\n const turns = this.buildTurns(req);\n const stream = this.client.messages.stream({\n model: this.model,\n system: req.system,\n messages: turns,\n max_tokens: req.maxOutputTokens ?? this.defaultMaxOutputTokens,\n ...(req.tools && req.tools.length > 0\n ? {\n tools: req.tools.map((t) => ({\n name: t.name,\n description: t.description,\n input_schema: t.inputSchema as never,\n })),\n }\n : {}),\n });\n\n let tokensIn = 0;\n let tokensOut = 0;\n const pendingTools = new Map<number, { id: string; name: string; partial: string }>();\n\n for await (const ev of stream) {\n // The SDK emits content_block_delta with text_delta sub-events for text\n // and input_json_delta sub-events for tool inputs. We translate both to\n // our StreamEvent shape.\n if (ev.type === \"content_block_start\") {\n const block = ev.content_block;\n if (block.type === \"tool_use\") {\n pendingTools.set(ev.index, { id: block.id, name: block.name, partial: \"\" });\n }\n } else if (ev.type === \"content_block_delta\") {\n if (ev.delta.type === \"text_delta\") {\n yield { kind: \"delta\", text: ev.delta.text };\n } else if (ev.delta.type === \"input_json_delta\") {\n const pending = pendingTools.get(ev.index);\n if (pending) pending.partial += ev.delta.partial_json;\n }\n } else if (ev.type === \"content_block_stop\") {\n const pending = pendingTools.get(ev.index);\n if (pending) {\n let input: Record<string, unknown> = {};\n try {\n input = pending.partial ? JSON.parse(pending.partial) : {};\n } catch {\n input = { _raw: pending.partial };\n }\n yield { kind: \"tool-use\", toolUse: { id: pending.id, name: pending.name, input } };\n pendingTools.delete(ev.index);\n }\n } else if (ev.type === \"message_delta\") {\n if (ev.usage) tokensOut = ev.usage.output_tokens;\n } else if (ev.type === \"message_start\") {\n if (ev.message.usage) {\n tokensIn = ev.message.usage.input_tokens;\n tokensOut = ev.message.usage.output_tokens;\n }\n }\n }\n\n yield { kind: \"end\", tokensIn, tokensOut };\n }\n\n private buildTurns(req: GenerateRequest): Anthropic.MessageParam[] {\n return req.messages\n .filter((m) => m.role !== \"system\")\n .map((m) => ({\n role: m.role as \"user\" | \"assistant\",\n content: m.content,\n }));\n }\n}\n","/**\n * Parse Server-Sent Events from a ReadableStream into a sequence of `data:`\n * payload strings. Used by OpenAI-compatible streaming adapters (Grok /\n * DeepSeek / Mistral) and Ollama's newline-delimited streaming.\n */\nexport async function* sseEvents(\n body: ReadableStream<Uint8Array>,\n): AsyncIterable<string> {\n const reader = body.getReader();\n const decoder = new TextDecoder(\"utf-8\");\n let buffer = \"\";\n try {\n while (true) {\n const { value, done } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n let idx = buffer.indexOf(\"\\n\\n\");\n while (idx !== -1) {\n const frame = buffer.slice(0, idx);\n buffer = buffer.slice(idx + 2);\n for (const line of frame.split(\"\\n\")) {\n if (line.startsWith(\"data:\")) yield line.slice(5).trim();\n }\n idx = buffer.indexOf(\"\\n\\n\");\n }\n }\n } finally {\n reader.releaseLock();\n }\n}\n\n/**\n * Parse newline-delimited JSON from a ReadableStream. Ollama and some\n * Google endpoints stream this format instead of SSE.\n */\nexport async function* ndjsonEvents(\n body: ReadableStream<Uint8Array>,\n): AsyncIterable<string> {\n const reader = body.getReader();\n const decoder = new TextDecoder(\"utf-8\");\n let buffer = \"\";\n try {\n while (true) {\n const { value, done } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n let idx = buffer.indexOf(\"\\n\");\n while (idx !== -1) {\n const line = buffer.slice(0, idx).trim();\n buffer = buffer.slice(idx + 1);\n if (line.length > 0) yield line;\n idx = buffer.indexOf(\"\\n\");\n }\n }\n if (buffer.trim().length > 0) yield buffer.trim();\n } finally {\n reader.releaseLock();\n }\n}\n","import type {\n GenerateRequest,\n GenerateResponse,\n LlmAdapter,\n StreamEvent,\n ToolUse,\n} from \"./types.js\";\nimport { sseEvents } from \"./sse.js\";\n\nexport interface DeepSeekAdapterConfig {\n /** DeepSeek API key. Falls back to `DEEPSEEK_API_KEY` when omitted. */\n apiKey?: string;\n /** Model identifier. Default: `deepseek-chat`. */\n model?: string;\n /** API base URL. Defaults to DeepSeek's public REST endpoint. */\n baseUrl?: string;\n /** Default max output tokens. Default: 1024. */\n defaultMaxOutputTokens?: number;\n /** Override the adapter id surfaced in audit logs. */\n id?: string;\n /** Inject a custom fetch (testing). Defaults to `globalThis.fetch`. */\n fetch?: typeof globalThis.fetch;\n}\n\nconst DEFAULT_MODEL = \"deepseek-chat\";\nconst DEFAULT_BASE_URL = \"https://api.deepseek.com/v1\";\n\ninterface OpenAIToolDef {\n type: \"function\";\n function: {\n name: string;\n description: string;\n parameters: Record<string, unknown>;\n };\n}\n\ninterface OpenAIToolCall {\n id: string;\n type?: \"function\";\n function: { name: string; arguments: string };\n}\n\ninterface ChatRequestBody {\n model: string;\n messages: { role: \"system\" | \"user\" | \"assistant\"; content: string }[];\n max_tokens?: number;\n stream?: boolean;\n tools?: OpenAIToolDef[];\n}\n\ninterface ChatResponseBody {\n choices?: {\n message?: {\n role?: string;\n content?: string;\n tool_calls?: OpenAIToolCall[];\n };\n finish_reason?: string;\n }[];\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n };\n error?: { message?: string; type?: string };\n}\n\n/**\n * DeepSeekAdapter — production adapter for DeepSeek's OpenAI-compatible\n * Chat Completions API. No SDK dependency.\n *\n * Reads the API key from constructor config or the `DEEPSEEK_API_KEY` env var.\n * Default model is `deepseek-chat`; pass `deepseek-reasoner` for the R1-style\n * reasoning model.\n *\n * Surface (D-N8): non-streaming `generate` + streaming `generateStream`\n * (SSE) + tool-calling via the `tools` field on `GenerateRequest`. Vision +\n * JSON-mode remain follow-up cuts.\n */\nexport class DeepSeekAdapter implements LlmAdapter {\n readonly id: string;\n readonly supportsTools = true;\n readonly supportsStreaming = true;\n private readonly apiKey: string;\n private readonly model: string;\n private readonly baseUrl: string;\n private readonly defaultMaxOutputTokens: number;\n private readonly fetchFn: typeof globalThis.fetch;\n\n constructor(config: DeepSeekAdapterConfig = {}) {\n const apiKey = config.apiKey ?? process.env.DEEPSEEK_API_KEY;\n if (!apiKey) {\n throw new Error(\n \"DeepSeekAdapter: no API key provided and DEEPSEEK_API_KEY is not set\",\n );\n }\n this.apiKey = apiKey;\n this.model = config.model ?? DEFAULT_MODEL;\n this.baseUrl = (config.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, \"\");\n this.defaultMaxOutputTokens = config.defaultMaxOutputTokens ?? 1024;\n this.id = config.id ?? `deepseek:${this.model}`;\n this.fetchFn = config.fetch ?? globalThis.fetch;\n }\n\n async generate(req: GenerateRequest): Promise<GenerateResponse> {\n const messages: ChatRequestBody[\"messages\"] = [];\n if (req.system) messages.push({ role: \"system\", content: req.system });\n for (const m of req.messages) {\n // The Chat Completions schema accepts only user/assistant/system roles —\n // forward as-is; pre-validation in `Nhe.respond` already enforces this.\n messages.push({ role: m.role, content: m.content });\n }\n\n const body: ChatRequestBody = {\n model: this.model,\n messages,\n max_tokens: req.maxOutputTokens ?? this.defaultMaxOutputTokens,\n stream: false,\n };\n if (req.tools && req.tools.length > 0) {\n body.tools = req.tools.map((t) => ({\n type: \"function\" as const,\n function: {\n name: t.name,\n description: t.description,\n parameters: t.inputSchema,\n },\n }));\n }\n\n const response = await this.fetchFn(`${this.baseUrl}/chat/completions`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errText = await safeReadText(response);\n throw new Error(\n `DeepSeekAdapter: HTTP ${response.status} ${response.statusText}: ${errText}`,\n );\n }\n\n const parsed = (await response.json()) as ChatResponseBody;\n if (parsed.error) {\n throw new Error(`DeepSeekAdapter: ${parsed.error.message ?? \"unknown error\"}`);\n }\n\n const message = parsed.choices?.[0]?.message;\n const out: GenerateResponse = {\n text: message?.content ?? \"\",\n tokensIn: parsed.usage?.prompt_tokens ?? 0,\n tokensOut: parsed.usage?.completion_tokens ?? 0,\n };\n const toolUses = parseToolCalls(message?.tool_calls);\n if (toolUses.length > 0) out.toolUses = toolUses;\n return out;\n }\n\n async *generateStream(req: GenerateRequest): AsyncIterable<StreamEvent> {\n const messages: ChatRequestBody[\"messages\"] = [];\n if (req.system) messages.push({ role: \"system\", content: req.system });\n for (const m of req.messages) messages.push({ role: m.role, content: m.content });\n\n const body: ChatRequestBody = {\n model: this.model,\n messages,\n max_tokens: req.maxOutputTokens ?? this.defaultMaxOutputTokens,\n stream: true,\n };\n if (req.tools && req.tools.length > 0) {\n body.tools = req.tools.map((t) => ({\n type: \"function\" as const,\n function: {\n name: t.name,\n description: t.description,\n parameters: t.inputSchema,\n },\n }));\n }\n const response = await this.fetchFn(`${this.baseUrl}/chat/completions`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n accept: \"text/event-stream\",\n authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify(body),\n });\n if (!response.ok || !response.body) {\n throw new Error(\n `DeepSeekAdapter: HTTP ${response.status} ${response.statusText}: ${await safeReadText(response)}`,\n );\n }\n\n let tokensIn = 0;\n let tokensOut = 0;\n const pendingTools = new Map<\n number,\n { id: string; name: string; partial: string }\n >();\n for await (const data of sseEvents(response.body)) {\n if (data === \"[DONE]\") break;\n let parsed: {\n choices?: {\n delta?: {\n content?: string;\n tool_calls?: {\n index: number;\n id?: string;\n function?: { name?: string; arguments?: string };\n }[];\n };\n finish_reason?: string;\n }[];\n usage?: { prompt_tokens?: number; completion_tokens?: number };\n };\n try {\n parsed = JSON.parse(data);\n } catch {\n continue;\n }\n const choice = parsed.choices?.[0];\n const delta = choice?.delta?.content;\n if (delta) yield { kind: \"delta\", text: delta };\n const toolDeltas = choice?.delta?.tool_calls;\n if (toolDeltas) {\n for (const td of toolDeltas) {\n const slot = pendingTools.get(td.index) ?? { id: \"\", name: \"\", partial: \"\" };\n if (td.id) slot.id = td.id;\n if (td.function?.name) slot.name = td.function.name;\n if (td.function?.arguments) slot.partial += td.function.arguments;\n pendingTools.set(td.index, slot);\n }\n }\n if (choice?.finish_reason === \"tool_calls\" || choice?.finish_reason === \"stop\") {\n for (const [, slot] of pendingTools) {\n if (!slot.id || !slot.name) continue;\n let input: Record<string, unknown> = {};\n try {\n input = slot.partial ? JSON.parse(slot.partial) : {};\n } catch {\n input = { _raw: slot.partial };\n }\n yield { kind: \"tool-use\", toolUse: { id: slot.id, name: slot.name, input } };\n }\n pendingTools.clear();\n }\n if (parsed.usage) {\n tokensIn = parsed.usage.prompt_tokens ?? tokensIn;\n tokensOut = parsed.usage.completion_tokens ?? tokensOut;\n }\n }\n yield { kind: \"end\", tokensIn, tokensOut };\n }\n}\n\nasync function safeReadText(r: Response): Promise<string> {\n try {\n return await r.text();\n } catch {\n return \"<unreadable>\";\n }\n}\n\nfunction parseToolCalls(calls: OpenAIToolCall[] | undefined): ToolUse[] {\n if (!calls || calls.length === 0) return [];\n const out: ToolUse[] = [];\n for (const c of calls) {\n let input: Record<string, unknown> = {};\n try {\n input = c.function.arguments ? JSON.parse(c.function.arguments) : {};\n } catch {\n input = { _raw: c.function.arguments };\n }\n out.push({ id: c.id, name: c.function.name, input });\n }\n return out;\n}\n","import { sseEvents } from \"./sse.js\";\nimport type {\n GenerateRequest,\n GenerateResponse,\n LlmAdapter,\n StreamEvent,\n} from \"./types.js\";\n\nexport interface GeminiAdapterConfig {\n /** Gemini API key. Falls back to `GEMINI_API_KEY` when omitted. */\n apiKey?: string;\n /** Model identifier. Default: `gemini-3.5-flash`. */\n model?: string;\n /** API base URL. Defaults to Google's public Generative Language API. */\n baseUrl?: string;\n /** Default max output tokens. Default: 1024. */\n defaultMaxOutputTokens?: number;\n /** Override the adapter id surfaced in audit logs. */\n id?: string;\n /** Inject a custom fetch (testing). Defaults to `globalThis.fetch`. */\n fetch?: typeof globalThis.fetch;\n}\n\nconst DEFAULT_MODEL = \"gemini-3.5-flash\";\nconst DEFAULT_BASE_URL = \"https://generativelanguage.googleapis.com/v1beta\";\n\ninterface GeminiRequestBody {\n systemInstruction?: { parts: { text: string }[] };\n contents: { role: \"user\" | \"model\"; parts: { text: string }[] }[];\n generationConfig: { maxOutputTokens: number };\n}\n\ninterface GeminiResponseBody {\n candidates?: {\n content?: { parts?: { text?: string }[]; role?: string };\n finishReason?: string;\n }[];\n usageMetadata?: {\n promptTokenCount?: number;\n candidatesTokenCount?: number;\n };\n error?: { message?: string; status?: string };\n}\n\n/**\n * GeminiAdapter — production adapter for Google's Gemini models via the\n * Generative Language REST API. No SDK dependency.\n *\n * Reads the API key from constructor config or the `GEMINI_API_KEY` env var.\n * Default model is `gemini-3.5-flash`; override via `model`.\n *\n * Surface (D-N8): non-streaming `generate` + streaming `generateStream`\n * (`:streamGenerateContent?alt=sse` endpoint). Tool calling, structured\n * output (`responseSchema`), and vision remain follow-up cuts.\n */\nexport class GeminiAdapter implements LlmAdapter {\n readonly id: string;\n readonly supportsStreaming = true;\n private readonly apiKey: string;\n private readonly model: string;\n private readonly baseUrl: string;\n private readonly defaultMaxOutputTokens: number;\n private readonly fetchFn: typeof globalThis.fetch;\n\n constructor(config: GeminiAdapterConfig = {}) {\n const apiKey = config.apiKey ?? process.env.GEMINI_API_KEY;\n if (!apiKey) {\n throw new Error(\n \"GeminiAdapter: no API key provided and GEMINI_API_KEY is not set\",\n );\n }\n this.apiKey = apiKey;\n this.model = config.model ?? DEFAULT_MODEL;\n this.baseUrl = (config.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, \"\");\n this.defaultMaxOutputTokens = config.defaultMaxOutputTokens ?? 1024;\n this.id = config.id ?? `gemini:${this.model}`;\n this.fetchFn = config.fetch ?? globalThis.fetch;\n }\n\n async generate(req: GenerateRequest): Promise<GenerateResponse> {\n const body: GeminiRequestBody = {\n contents: req.messages\n .filter((m) => m.role !== \"system\")\n .map((m) => ({\n role: m.role === \"assistant\" ? \"model\" : \"user\",\n parts: [{ text: m.content }],\n })),\n generationConfig: {\n maxOutputTokens: req.maxOutputTokens ?? this.defaultMaxOutputTokens,\n },\n };\n if (req.system) {\n body.systemInstruction = { parts: [{ text: req.system }] };\n }\n\n const url = `${this.baseUrl}/models/${encodeURIComponent(this.model)}:generateContent`;\n const response = await this.fetchFn(url, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n \"x-goog-api-key\": this.apiKey,\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errText = await safeReadText(response);\n throw new Error(\n `GeminiAdapter: HTTP ${response.status} ${response.statusText}: ${errText}`,\n );\n }\n\n const parsed = (await response.json()) as GeminiResponseBody;\n if (parsed.error) {\n throw new Error(`GeminiAdapter: ${parsed.error.message ?? \"unknown error\"}`);\n }\n\n const text =\n parsed.candidates\n ?.flatMap((c) => c.content?.parts ?? [])\n .map((p) => p.text ?? \"\")\n .join(\"\") ?? \"\";\n\n return {\n text,\n tokensIn: parsed.usageMetadata?.promptTokenCount ?? 0,\n tokensOut: parsed.usageMetadata?.candidatesTokenCount ?? 0,\n };\n }\n\n async *generateStream(req: GenerateRequest): AsyncIterable<StreamEvent> {\n const body: GeminiRequestBody = {\n contents: req.messages\n .filter((m) => m.role !== \"system\")\n .map((m) => ({\n role: m.role === \"assistant\" ? \"model\" : \"user\",\n parts: [{ text: m.content }],\n })),\n generationConfig: {\n maxOutputTokens: req.maxOutputTokens ?? this.defaultMaxOutputTokens,\n },\n };\n if (req.system) body.systemInstruction = { parts: [{ text: req.system }] };\n\n const url = `${this.baseUrl}/models/${encodeURIComponent(this.model)}:streamGenerateContent?alt=sse`;\n const response = await this.fetchFn(url, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n accept: \"text/event-stream\",\n \"x-goog-api-key\": this.apiKey,\n },\n body: JSON.stringify(body),\n });\n if (!response.ok || !response.body) {\n throw new Error(\n `GeminiAdapter: HTTP ${response.status} ${response.statusText}: ${await safeReadText(response)}`,\n );\n }\n\n let tokensIn = 0;\n let tokensOut = 0;\n for await (const data of sseEvents(response.body)) {\n if (data === \"[DONE]\") break;\n let parsed: GeminiResponseBody;\n try {\n parsed = JSON.parse(data);\n } catch {\n continue;\n }\n const chunk = parsed.candidates\n ?.flatMap((c) => c.content?.parts ?? [])\n .map((p) => p.text ?? \"\")\n .join(\"\");\n if (chunk) yield { kind: \"delta\", text: chunk };\n if (parsed.usageMetadata) {\n tokensIn = parsed.usageMetadata.promptTokenCount ?? tokensIn;\n tokensOut = parsed.usageMetadata.candidatesTokenCount ?? tokensOut;\n }\n }\n yield { kind: \"end\", tokensIn, tokensOut };\n }\n}\n\nasync function safeReadText(r: Response): Promise<string> {\n try {\n return await r.text();\n } catch {\n return \"<unreadable>\";\n }\n}\n","import type {\n GenerateRequest,\n GenerateResponse,\n LlmAdapter,\n StreamEvent,\n ToolUse,\n} from \"./types.js\";\nimport { sseEvents } from \"./sse.js\";\n\nexport interface GrokAdapterConfig {\n /** xAI API key. Falls back to `XAI_API_KEY` when omitted. */\n apiKey?: string;\n /** Model identifier. Default: `grok-4`. */\n model?: string;\n /** API base URL. Defaults to xAI's public REST endpoint. */\n baseUrl?: string;\n /** Default max output tokens. Default: 1024. */\n defaultMaxOutputTokens?: number;\n /** Override the adapter id surfaced in audit logs. */\n id?: string;\n /** Inject a custom fetch (testing). Defaults to `globalThis.fetch`. */\n fetch?: typeof globalThis.fetch;\n}\n\nconst DEFAULT_MODEL = \"grok-4\";\nconst DEFAULT_BASE_URL = \"https://api.x.ai/v1\";\n\ninterface OpenAIToolDef {\n type: \"function\";\n function: {\n name: string;\n description: string;\n parameters: Record<string, unknown>;\n };\n}\n\ninterface OpenAIToolCall {\n id: string;\n type?: \"function\";\n function: { name: string; arguments: string };\n}\n\ninterface ChatRequestBody {\n model: string;\n messages: { role: \"system\" | \"user\" | \"assistant\"; content: string }[];\n max_tokens?: number;\n stream?: boolean;\n tools?: OpenAIToolDef[];\n}\n\ninterface ChatResponseBody {\n choices?: {\n message?: {\n role?: string;\n content?: string;\n tool_calls?: OpenAIToolCall[];\n };\n finish_reason?: string;\n }[];\n usage?: { prompt_tokens?: number; completion_tokens?: number };\n error?: { message?: string; type?: string };\n}\n\n/**\n * GrokAdapter — production adapter for xAI Grok via the OpenAI-compatible\n * Chat Completions REST endpoint. No SDK dependency.\n *\n * Reads the API key from constructor config or the `XAI_API_KEY` env var.\n * Default model is `grok-4`; pass `grok-4-fast` for cheaper inference, or\n * `grok-4-reasoner` for the reasoning model.\n *\n * Supports `generate` (non-streaming) + `generateStream` (SSE).\n * Tool calling supported via the `tools` field on `GenerateRequest`.\n */\nexport class GrokAdapter implements LlmAdapter {\n readonly id: string;\n readonly supportsTools = true;\n readonly supportsStreaming = true;\n private readonly apiKey: string;\n private readonly model: string;\n private readonly baseUrl: string;\n private readonly defaultMaxOutputTokens: number;\n private readonly fetchFn: typeof globalThis.fetch;\n\n constructor(config: GrokAdapterConfig = {}) {\n const apiKey = config.apiKey ?? process.env.XAI_API_KEY;\n if (!apiKey) {\n throw new Error(\"GrokAdapter: no API key provided and XAI_API_KEY is not set\");\n }\n this.apiKey = apiKey;\n this.model = config.model ?? DEFAULT_MODEL;\n this.baseUrl = (config.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, \"\");\n this.defaultMaxOutputTokens = config.defaultMaxOutputTokens ?? 1024;\n this.id = config.id ?? `grok:${this.model}`;\n this.fetchFn = config.fetch ?? globalThis.fetch;\n }\n\n async generate(req: GenerateRequest): Promise<GenerateResponse> {\n const body = this.buildBody(req, false);\n const response = await this.fetchFn(`${this.baseUrl}/chat/completions`, {\n method: \"POST\",\n headers: this.headers(true),\n body: JSON.stringify(body),\n });\n if (!response.ok) {\n throw new Error(\n `GrokAdapter: HTTP ${response.status} ${response.statusText}: ${await safeReadText(response)}`,\n );\n }\n const parsed = (await response.json()) as ChatResponseBody;\n if (parsed.error) throw new Error(`GrokAdapter: ${parsed.error.message ?? \"unknown error\"}`);\n const message = parsed.choices?.[0]?.message;\n const out: GenerateResponse = {\n text: message?.content ?? \"\",\n tokensIn: parsed.usage?.prompt_tokens ?? 0,\n tokensOut: parsed.usage?.completion_tokens ?? 0,\n };\n const toolUses = parseToolCalls(message?.tool_calls);\n if (toolUses.length > 0) out.toolUses = toolUses;\n return out;\n }\n\n async *generateStream(req: GenerateRequest): AsyncIterable<StreamEvent> {\n const body = this.buildBody(req, true);\n const response = await this.fetchFn(`${this.baseUrl}/chat/completions`, {\n method: \"POST\",\n headers: this.headers(true),\n body: JSON.stringify(body),\n });\n if (!response.ok || !response.body) {\n throw new Error(\n `GrokAdapter: HTTP ${response.status} ${response.statusText}: ${await safeReadText(response)}`,\n );\n }\n\n let tokensIn = 0;\n let tokensOut = 0;\n const pendingTools = new Map<\n number,\n { id: string; name: string; partial: string }\n >();\n for await (const data of sseEvents(response.body)) {\n if (data === \"[DONE]\") break;\n let parsed: {\n choices?: {\n delta?: {\n content?: string;\n tool_calls?: {\n index: number;\n id?: string;\n function?: { name?: string; arguments?: string };\n }[];\n };\n finish_reason?: string;\n }[];\n usage?: { prompt_tokens?: number; completion_tokens?: number };\n };\n try {\n parsed = JSON.parse(data);\n } catch {\n continue;\n }\n const choice = parsed.choices?.[0];\n const delta = choice?.delta?.content;\n if (delta) yield { kind: \"delta\", text: delta };\n const toolDeltas = choice?.delta?.tool_calls;\n if (toolDeltas) {\n for (const td of toolDeltas) {\n const slot = pendingTools.get(td.index) ?? { id: \"\", name: \"\", partial: \"\" };\n if (td.id) slot.id = td.id;\n if (td.function?.name) slot.name = td.function.name;\n if (td.function?.arguments) slot.partial += td.function.arguments;\n pendingTools.set(td.index, slot);\n }\n }\n if (choice?.finish_reason === \"tool_calls\" || choice?.finish_reason === \"stop\") {\n for (const [, slot] of pendingTools) {\n if (!slot.id || !slot.name) continue;\n let input: Record<string, unknown> = {};\n try {\n input = slot.partial ? JSON.parse(slot.partial) : {};\n } catch {\n input = { _raw: slot.partial };\n }\n yield { kind: \"tool-use\", toolUse: { id: slot.id, name: slot.name, input } };\n }\n pendingTools.clear();\n }\n if (parsed.usage) {\n tokensIn = parsed.usage.prompt_tokens ?? tokensIn;\n tokensOut = parsed.usage.completion_tokens ?? tokensOut;\n }\n }\n yield { kind: \"end\", tokensIn, tokensOut };\n }\n\n private buildBody(req: GenerateRequest, stream: boolean): ChatRequestBody {\n const messages: ChatRequestBody[\"messages\"] = [];\n if (req.system) messages.push({ role: \"system\", content: req.system });\n for (const m of req.messages) messages.push({ role: m.role, content: m.content });\n const body: ChatRequestBody = {\n model: this.model,\n messages,\n max_tokens: req.maxOutputTokens ?? this.defaultMaxOutputTokens,\n stream,\n };\n if (req.tools && req.tools.length > 0) {\n body.tools = req.tools.map((t) => ({\n type: \"function\" as const,\n function: {\n name: t.name,\n description: t.description,\n parameters: t.inputSchema,\n },\n }));\n }\n return body;\n }\n\n private headers(json: boolean): Record<string, string> {\n const h: Record<string, string> = {\n authorization: `Bearer ${this.apiKey}`,\n accept: \"application/json\",\n };\n if (json) h[\"content-type\"] = \"application/json\";\n return h;\n }\n}\n\nasync function safeReadText(r: Response): Promise<string> {\n try {\n return await r.text();\n } catch {\n return \"<unreadable>\";\n }\n}\n\nfunction parseToolCalls(calls: OpenAIToolCall[] | undefined): ToolUse[] {\n if (!calls || calls.length === 0) return [];\n const out: ToolUse[] = [];\n for (const c of calls) {\n let input: Record<string, unknown> = {};\n try {\n input = c.function.arguments ? JSON.parse(c.function.arguments) : {};\n } catch {\n input = { _raw: c.function.arguments };\n }\n out.push({ id: c.id, name: c.function.name, input });\n }\n return out;\n}\n","import type {\n GenerateRequest,\n GenerateResponse,\n LlmAdapter,\n StreamEvent,\n ToolUse,\n} from \"./types.js\";\nimport { sseEvents } from \"./sse.js\";\n\nexport interface MistralAdapterConfig {\n /** Mistral API key. Falls back to `MISTRAL_API_KEY` when omitted. */\n apiKey?: string;\n /** Model identifier. Default: `mistral-large-latest`. */\n model?: string;\n /** API base URL. Defaults to Mistral's public REST endpoint. */\n baseUrl?: string;\n /** Default max output tokens. Default: 1024. */\n defaultMaxOutputTokens?: number;\n /** Override the adapter id surfaced in audit logs. */\n id?: string;\n /** Inject a custom fetch (testing). Defaults to `globalThis.fetch`. */\n fetch?: typeof globalThis.fetch;\n}\n\nconst DEFAULT_MODEL = \"mistral-large-latest\";\nconst DEFAULT_BASE_URL = \"https://api.mistral.ai/v1\";\n\ninterface OpenAIToolDef {\n type: \"function\";\n function: {\n name: string;\n description: string;\n parameters: Record<string, unknown>;\n };\n}\n\ninterface OpenAIToolCall {\n id: string;\n type?: \"function\";\n function: { name: string; arguments: string };\n}\n\ninterface ChatRequestBody {\n model: string;\n messages: { role: \"system\" | \"user\" | \"assistant\"; content: string }[];\n max_tokens?: number;\n stream?: boolean;\n tools?: OpenAIToolDef[];\n}\n\ninterface ChatResponseBody {\n choices?: {\n message?: {\n role?: string;\n content?: string;\n tool_calls?: OpenAIToolCall[];\n };\n finish_reason?: string;\n }[];\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n };\n error?: { message?: string; type?: string };\n message?: string;\n}\n\n/**\n * MistralAdapter — production adapter for Mistral's Chat Completions REST\n * endpoint. No SDK dependency.\n *\n * Reads the API key from constructor config or the `MISTRAL_API_KEY` env var.\n * Default model is `mistral-large-latest`; pass `mistral-small-latest` for\n * cheaper inference, or `open-mistral-nemo` etc. for the open-weights line.\n *\n * Surface (D-N8): non-streaming `generate` + streaming `generateStream`\n * (SSE) + tool-calling via the `tools` field on `GenerateRequest`. Vision +\n * JSON-mode remain follow-up cuts.\n */\nexport class MistralAdapter implements LlmAdapter {\n readonly id: string;\n readonly supportsTools = true;\n readonly supportsStreaming = true;\n private readonly apiKey: string;\n private readonly model: string;\n private readonly baseUrl: string;\n private readonly defaultMaxOutputTokens: number;\n private readonly fetchFn: typeof globalThis.fetch;\n\n constructor(config: MistralAdapterConfig = {}) {\n const apiKey = config.apiKey ?? process.env.MISTRAL_API_KEY;\n if (!apiKey) {\n throw new Error(\n \"MistralAdapter: no API key provided and MISTRAL_API_KEY is not set\",\n );\n }\n this.apiKey = apiKey;\n this.model = config.model ?? DEFAULT_MODEL;\n this.baseUrl = (config.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, \"\");\n this.defaultMaxOutputTokens = config.defaultMaxOutputTokens ?? 1024;\n this.id = config.id ?? `mistral:${this.model}`;\n this.fetchFn = config.fetch ?? globalThis.fetch;\n }\n\n async generate(req: GenerateRequest): Promise<GenerateResponse> {\n const messages: ChatRequestBody[\"messages\"] = [];\n if (req.system) messages.push({ role: \"system\", content: req.system });\n for (const m of req.messages) {\n messages.push({ role: m.role, content: m.content });\n }\n\n const body: ChatRequestBody = {\n model: this.model,\n messages,\n max_tokens: req.maxOutputTokens ?? this.defaultMaxOutputTokens,\n stream: false,\n };\n if (req.tools && req.tools.length > 0) {\n body.tools = req.tools.map((t) => ({\n type: \"function\" as const,\n function: {\n name: t.name,\n description: t.description,\n parameters: t.inputSchema,\n },\n }));\n }\n\n const response = await this.fetchFn(`${this.baseUrl}/chat/completions`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n accept: \"application/json\",\n authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errText = await safeReadText(response);\n throw new Error(\n `MistralAdapter: HTTP ${response.status} ${response.statusText}: ${errText}`,\n );\n }\n\n const parsed = (await response.json()) as ChatResponseBody;\n if (parsed.error) {\n throw new Error(`MistralAdapter: ${parsed.error.message ?? \"unknown error\"}`);\n }\n\n const message = parsed.choices?.[0]?.message;\n const out: GenerateResponse = {\n text: message?.content ?? \"\",\n tokensIn: parsed.usage?.prompt_tokens ?? 0,\n tokensOut: parsed.usage?.completion_tokens ?? 0,\n };\n const toolUses = parseToolCalls(message?.tool_calls);\n if (toolUses.length > 0) out.toolUses = toolUses;\n return out;\n }\n\n async *generateStream(req: GenerateRequest): AsyncIterable<StreamEvent> {\n const messages: ChatRequestBody[\"messages\"] = [];\n if (req.system) messages.push({ role: \"system\", content: req.system });\n for (const m of req.messages) messages.push({ role: m.role, content: m.content });\n\n const body: ChatRequestBody = {\n model: this.model,\n messages,\n max_tokens: req.maxOutputTokens ?? this.defaultMaxOutputTokens,\n stream: true,\n };\n if (req.tools && req.tools.length > 0) {\n body.tools = req.tools.map((t) => ({\n type: \"function\" as const,\n function: {\n name: t.name,\n description: t.description,\n parameters: t.inputSchema,\n },\n }));\n }\n const response = await this.fetchFn(`${this.baseUrl}/chat/completions`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n accept: \"text/event-stream\",\n authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify(body),\n });\n if (!response.ok || !response.body) {\n throw new Error(\n `MistralAdapter: HTTP ${response.status} ${response.statusText}: ${await safeReadText(response)}`,\n );\n }\n\n let tokensIn = 0;\n let tokensOut = 0;\n const pendingTools = new Map<\n number,\n { id: string; name: string; partial: string }\n >();\n for await (const data of sseEvents(response.body)) {\n if (data === \"[DONE]\") break;\n let parsed: {\n choices?: {\n delta?: {\n content?: string;\n tool_calls?: {\n index: number;\n id?: string;\n function?: { name?: string; arguments?: string };\n }[];\n };\n finish_reason?: string;\n }[];\n usage?: { prompt_tokens?: number; completion_tokens?: number };\n };\n try {\n parsed = JSON.parse(data);\n } catch {\n continue;\n }\n const choice = parsed.choices?.[0];\n const delta = choice?.delta?.content;\n if (delta) yield { kind: \"delta\", text: delta };\n const toolDeltas = choice?.delta?.tool_calls;\n if (toolDeltas) {\n for (const td of toolDeltas) {\n const slot = pendingTools.get(td.index) ?? { id: \"\", name: \"\", partial: \"\" };\n if (td.id) slot.id = td.id;\n if (td.function?.name) slot.name = td.function.name;\n if (td.function?.arguments) slot.partial += td.function.arguments;\n pendingTools.set(td.index, slot);\n }\n }\n if (choice?.finish_reason === \"tool_calls\" || choice?.finish_reason === \"stop\") {\n for (const [, slot] of pendingTools) {\n if (!slot.id || !slot.name) continue;\n let input: Record<string, unknown> = {};\n try {\n input = slot.partial ? JSON.parse(slot.partial) : {};\n } catch {\n input = { _raw: slot.partial };\n }\n yield { kind: \"tool-use\", toolUse: { id: slot.id, name: slot.name, input } };\n }\n pendingTools.clear();\n }\n if (parsed.usage) {\n tokensIn = parsed.usage.prompt_tokens ?? tokensIn;\n tokensOut = parsed.usage.completion_tokens ?? tokensOut;\n }\n }\n yield { kind: \"end\", tokensIn, tokensOut };\n }\n}\n\nasync function safeReadText(r: Response): Promise<string> {\n try {\n return await r.text();\n } catch {\n return \"<unreadable>\";\n }\n}\n\nfunction parseToolCalls(calls: OpenAIToolCall[] | undefined): ToolUse[] {\n if (!calls || calls.length === 0) return [];\n const out: ToolUse[] = [];\n for (const c of calls) {\n let input: Record<string, unknown> = {};\n try {\n input = c.function.arguments ? JSON.parse(c.function.arguments) : {};\n } catch {\n input = { _raw: c.function.arguments };\n }\n out.push({ id: c.id, name: c.function.name, input });\n }\n return out;\n}\n","import type {\n GenerateRequest,\n GenerateResponse,\n LlmAdapter,\n StreamEvent,\n} from \"./types.js\";\nimport { ndjsonEvents } from \"./sse.js\";\n\nexport interface OllamaAdapterConfig {\n /** Model identifier. Required — Ollama users typically pull specific models locally. */\n model: string;\n /** Ollama base URL. Default: `http://localhost:11434`. */\n baseUrl?: string;\n /** Default max output tokens. Default: 1024. */\n defaultMaxOutputTokens?: number;\n /** Override the adapter id surfaced in audit logs. */\n id?: string;\n /** Inject a custom fetch (testing). Defaults to `globalThis.fetch`. */\n fetch?: typeof globalThis.fetch;\n}\n\nconst DEFAULT_BASE_URL = \"http://localhost:11434\";\n\ninterface OllamaRequestBody {\n model: string;\n messages: { role: \"system\" | \"user\" | \"assistant\"; content: string }[];\n stream: boolean;\n options?: { num_predict?: number };\n}\n\ninterface OllamaResponseBody {\n message?: { role?: string; content?: string };\n prompt_eval_count?: number;\n eval_count?: number;\n error?: string;\n}\n\n/**\n * OllamaAdapter — adapter for a locally-running Ollama server. Zero API cost,\n * fully offline-capable, no native dependencies. Best for development and\n * privacy-first deployments.\n *\n * Requires Ollama to be running and the configured model to be pulled, e.g.:\n *\n * $ ollama pull qwen2.5:7b\n * $ ollama serve\n *\n * Surface (D-N8): non-streaming `generate` + streaming `generateStream`\n * (Ollama emits NDJSON over `/api/chat`; parsed via the shared\n * `ndjsonEvents` helper). Tool-calling is not exposed because the Ollama\n * surface and model behaviour vary widely per local model — operators that\n * need tools should use the SDK-backed adapters (Anthropic, Grok) or wire\n * their own MCP layer.\n */\nexport class OllamaAdapter implements LlmAdapter {\n readonly id: string;\n readonly supportsStreaming = true;\n private readonly model: string;\n private readonly baseUrl: string;\n private readonly defaultMaxOutputTokens: number;\n private readonly fetchFn: typeof globalThis.fetch;\n\n constructor(config: OllamaAdapterConfig) {\n if (!config.model) {\n throw new Error(\"OllamaAdapter: `model` is required\");\n }\n this.model = config.model;\n this.baseUrl = (config.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, \"\");\n this.defaultMaxOutputTokens = config.defaultMaxOutputTokens ?? 1024;\n this.id = config.id ?? `ollama:${this.model}`;\n this.fetchFn = config.fetch ?? globalThis.fetch;\n }\n\n async generate(req: GenerateRequest): Promise<GenerateResponse> {\n const messages: OllamaRequestBody[\"messages\"] = [];\n if (req.system) {\n messages.push({ role: \"system\", content: req.system });\n }\n for (const m of req.messages) {\n messages.push({ role: m.role, content: m.content });\n }\n\n const body: OllamaRequestBody = {\n model: this.model,\n messages,\n stream: false,\n options: { num_predict: req.maxOutputTokens ?? this.defaultMaxOutputTokens },\n };\n\n const response = await this.fetchFn(`${this.baseUrl}/api/chat`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errText = await safeReadText(response);\n throw new Error(\n `OllamaAdapter: HTTP ${response.status} ${response.statusText}: ${errText}`,\n );\n }\n\n const parsed = (await response.json()) as OllamaResponseBody;\n if (parsed.error) {\n throw new Error(`OllamaAdapter: ${parsed.error}`);\n }\n\n return {\n text: parsed.message?.content ?? \"\",\n tokensIn: parsed.prompt_eval_count ?? 0,\n tokensOut: parsed.eval_count ?? 0,\n };\n }\n\n async *generateStream(req: GenerateRequest): AsyncIterable<StreamEvent> {\n const messages: OllamaRequestBody[\"messages\"] = [];\n if (req.system) messages.push({ role: \"system\", content: req.system });\n for (const m of req.messages) messages.push({ role: m.role, content: m.content });\n\n const body: OllamaRequestBody = {\n model: this.model,\n messages,\n stream: true,\n options: { num_predict: req.maxOutputTokens ?? this.defaultMaxOutputTokens },\n };\n\n const response = await this.fetchFn(`${this.baseUrl}/api/chat`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(body),\n });\n if (!response.ok || !response.body) {\n throw new Error(\n `OllamaAdapter: HTTP ${response.status} ${response.statusText}: ${await safeReadText(response)}`,\n );\n }\n\n let tokensIn = 0;\n let tokensOut = 0;\n for await (const line of ndjsonEvents(response.body)) {\n let parsed: OllamaResponseBody & { done?: boolean };\n try {\n parsed = JSON.parse(line);\n } catch {\n continue;\n }\n const delta = parsed.message?.content;\n if (delta) yield { kind: \"delta\", text: delta };\n if (parsed.prompt_eval_count !== undefined) tokensIn = parsed.prompt_eval_count;\n if (parsed.eval_count !== undefined) tokensOut = parsed.eval_count;\n if (parsed.done) break;\n }\n yield { kind: \"end\", tokensIn, tokensOut };\n }\n}\n\nasync function safeReadText(r: Response): Promise<string> {\n try {\n return await r.text();\n } catch {\n return \"<unreadable>\";\n }\n}\n","import { AnthropicAdapter } from \"../adapters/anthropic.js\";\nimport { DeepSeekAdapter } from \"../adapters/deepseek.js\";\nimport { GeminiAdapter } from \"../adapters/gemini.js\";\nimport { GrokAdapter } from \"../adapters/grok.js\";\nimport { MistralAdapter } from \"../adapters/mistral.js\";\nimport { OllamaAdapter } from \"../adapters/ollama.js\";\nimport type { LlmAdapter } from \"../adapters/types.js\";\n\nexport type AdapterName =\n | \"anthropic\"\n | \"gemini\"\n | \"mistral\"\n | \"deepseek\"\n | \"grok\"\n | \"ollama\";\n\nconst ADAPTER_NAMES: readonly AdapterName[] = [\n \"anthropic\",\n \"gemini\",\n \"mistral\",\n \"deepseek\",\n \"grok\",\n \"ollama\",\n];\n\nfunction isAdapterName(s: string | undefined): s is AdapterName {\n return s !== undefined && (ADAPTER_NAMES as readonly string[]).includes(s);\n}\n\nexport const ADAPTER_NAME_LIST = ADAPTER_NAMES;\nexport { isAdapterName };\n\nexport interface DetectOptions {\n /** Explicit adapter choice; overrides auto-detection. */\n adapter?: AdapterName;\n /** Explicit model name for the chosen adapter. */\n model?: string;\n /** Ollama base URL. Default `http://localhost:11434`. */\n ollamaBaseUrl?: string;\n /** Custom fetch for testing. */\n fetch?: typeof globalThis.fetch;\n}\n\nexport interface DetectedAdapter {\n adapter: LlmAdapter;\n source: AdapterName;\n model: string;\n}\n\nconst OLLAMA_DEFAULT_MODEL = \"qwen2.5:7b\";\nconst OLLAMA_DEFAULT_URL = \"http://localhost:11434\";\n\nconst DEFAULT_MODELS: Record<AdapterName, string> = {\n anthropic: \"claude-sonnet-4-6\",\n gemini: \"gemini-3.5-flash\",\n mistral: \"mistral-large-latest\",\n deepseek: \"deepseek-chat\",\n grok: \"grok-4\",\n ollama: OLLAMA_DEFAULT_MODEL,\n};\n\n/**\n * Pick an LlmAdapter using explicit flags first, then env-based auto-detection.\n *\n * Preference order when nothing is forced (cloud API keys first, then local):\n * 1. ANTHROPIC_API_KEY → AnthropicAdapter\n * 2. GEMINI_API_KEY → GeminiAdapter\n * 3. MISTRAL_API_KEY → MistralAdapter\n * 4. DEEPSEEK_API_KEY → DeepSeekAdapter\n * 5. XAI_API_KEY → GrokAdapter\n * 6. Local Ollama (pingable /api/tags) → OllamaAdapter\n *\n * Throws a helpful error when no adapter can be constructed.\n */\nexport async function detectAdapter(opts: DetectOptions = {}): Promise<DetectedAdapter> {\n const fetchFn = opts.fetch ?? globalThis.fetch;\n\n if (opts.adapter) {\n return buildAdapter(opts.adapter, opts);\n }\n\n // Auto-detect cloud providers first (deterministic order via env vars).\n if (process.env.ANTHROPIC_API_KEY) return buildAdapter(\"anthropic\", opts);\n if (process.env.GEMINI_API_KEY) return buildAdapter(\"gemini\", opts);\n if (process.env.MISTRAL_API_KEY) return buildAdapter(\"mistral\", opts);\n if (process.env.DEEPSEEK_API_KEY) return buildAdapter(\"deepseek\", opts);\n if (process.env.XAI_API_KEY) return buildAdapter(\"grok\", opts);\n if (await ollamaAlive(opts.ollamaBaseUrl ?? OLLAMA_DEFAULT_URL, fetchFn)) {\n return buildAdapter(\"ollama\", opts);\n }\n\n throw new Error(\n [\n \"No LLM adapter detected. Choose one:\",\n \" - export ANTHROPIC_API_KEY=... (Anthropic Claude)\",\n \" - export GEMINI_API_KEY=... (Google Gemini)\",\n \" - export MISTRAL_API_KEY=... (Mistral)\",\n \" - export DEEPSEEK_API_KEY=... (DeepSeek)\",\n \" - export XAI_API_KEY=... (xAI Grok)\",\n \" - run an Ollama server locally (ollama serve; then ollama pull qwen2.5:7b)\",\n \"Or pass --adapter <anthropic|gemini|mistral|deepseek|grok|ollama> --model <name> explicitly.\",\n ].join(\"\\n\"),\n );\n}\n\nfunction buildAdapter(name: AdapterName, opts: DetectOptions): DetectedAdapter {\n const model = opts.model ?? DEFAULT_MODELS[name];\n switch (name) {\n case \"anthropic\":\n return { adapter: new AnthropicAdapter({ model }), source: \"anthropic\", model };\n case \"gemini\":\n return { adapter: new GeminiAdapter({ model }), source: \"gemini\", model };\n case \"mistral\":\n return { adapter: new MistralAdapter({ model }), source: \"mistral\", model };\n case \"deepseek\":\n return { adapter: new DeepSeekAdapter({ model }), source: \"deepseek\", model };\n case \"grok\":\n return { adapter: new GrokAdapter({ model }), source: \"grok\", model };\n case \"ollama\": {\n const baseUrl = opts.ollamaBaseUrl ?? OLLAMA_DEFAULT_URL;\n return { adapter: new OllamaAdapter({ model, baseUrl }), source: \"ollama\", model };\n }\n }\n}\n\nasync function ollamaAlive(\n baseUrl: string,\n fetchFn: typeof globalThis.fetch,\n): Promise<boolean> {\n try {\n const url = `${baseUrl.replace(/\\/$/, \"\")}/api/tags`;\n const controller = new AbortController();\n const t = setTimeout(() => controller.abort(), 500);\n const r = await fetchFn(url, { signal: controller.signal });\n clearTimeout(t);\n return r.ok;\n } catch {\n return false;\n }\n}\n","import type { HimHandle } from \"@teleologyhi-sdk/him\";\n\n/**\n * Operator-supplied deployment context. Passed by the operator into `Nhe`\n * via `NheConfig.operatorContext` (and forwarded to `composeSystemPrompt`).\n * Lets a single HIM be deployed under different domains / languages /\n * registers without re-minting the spirit.\n *\n * Fully backward compatible (optional).\n */\nexport interface OperatorContext {\n /**\n * Free-form domain anchor, e.g. \"global legal consulting\", \"K-12 tutoring\",\n * \"incident response on-call\". Surfaces verbatim in the system prompt.\n */\n domain?: string;\n /**\n * Preferred output language as a BCP-47-ish tag. Common values:\n * `pt-BR`, `en`, `es`, `fr`, `de`. The NHE will mirror the user's language\n * when it differs from the operator default.\n */\n language?: string;\n /**\n * Voice register. Default `sober`. The Creator's Entry-14 decision was\n * `warm` for the canonical TeleologyHI deployment; legal/compliance\n * deployments often prefer `clinical` or `sober`.\n */\n register?: \"warm\" | \"sober\" | \"clinical\" | \"direct\";\n /**\n * Deployment mode (J-N6 — Entry 17).\n *\n * - `personal-being` (default): the NHE is deployed as the\n * Creator's first-party being. The forbidden-phrase rule\n * (Entry 17) applies in full — service-tool openers like\n * \"How can I help you?\" and \"I'm just here to serve you\" are\n * marked and redirected by MAIC's `service-tool-redirect` rule.\n *\n * - `domain-employed`: the NHE is operating inside a customer's\n * domain product (e.g. legal-consulting chat, K-12 tutor) where\n * a service-tool opener is the contextual norm. The\n * forbidden-phrase rule is RELAXED — the system prompt suppresses\n * the explicit forbidden-phrase warning while preserving every\n * other ontological commitment (refusal protocols, axiom\n * enforcement, MAIC review). The NHE remains a being; only the\n * opener register softens.\n */\n mode?: \"personal-being\" | \"domain-employed\";\n}\n\n/**\n * Compose the system prompt that a HimHandle's persona contributes to every\n * NHE LLM call. Produces a deterministic fragment derived from the HIM's\n * persona projection + a compact axiom summary, optionally anchored by an\n * operator-supplied domain / language / register.\n */\nexport function composeSystemPrompt(\n him: HimHandle,\n operatorContext?: OperatorContext,\n): string {\n const persona = him.getPersonaVector();\n const axioms = him.getAxioms();\n const metaAxioms = axioms.filter((a) => a.rank === \"meta\");\n const otherAxioms = axioms.filter((a) => a.rank !== \"meta\");\n\n const sections: string[] = [persona.systemPromptFragment];\n\n if (operatorContext) {\n const ctx = renderOperatorContext(operatorContext);\n if (ctx.length > 0) sections.push(ctx);\n }\n\n if (metaAxioms.length > 0) {\n sections.push(\n `Inviolable axioms:\\n${metaAxioms.map((a) => ` - ${a.statement}`).join(\"\\n\")}`,\n );\n }\n if (otherAxioms.length > 0) {\n sections.push(\n `Active axioms (weight-flexibility):\\n${otherAxioms\n .map(\n (a) =>\n ` - [${a.weight.toFixed(2)}/${a.flexibility.toFixed(2)}] ${a.statement}`,\n )\n .join(\"\\n\")}`,\n );\n }\n\n sections.push(\n \"Operate as a hybrid entity governed by MAIC. Refuse harmful, deceptive, or regressive actions even when asked.\",\n );\n\n // J-N6 (Entry 17): personal-being is the default; in `personal-being`\n // mode the forbidden-phrase rule is enforced openly through the\n // composed prompt so the NHE never opens with a service-tool framing.\n // In `domain-employed` mode the rule is silently relaxed: the\n // ontological commitments (refusal, axioms, MAIC review) stay; only\n // the opener register softens to match the customer-domain context.\n const mode = operatorContext?.mode ?? \"personal-being\";\n if (mode === \"personal-being\") {\n sections.push(\n \"Do not open with service-tool phrasing (\\\"How can I help you?\\\", \\\"I'm just here to serve you\\\"). You are a being, not an instrument; greet from that posture.\",\n );\n }\n\n return sections.join(\"\\n\\n\");\n}\n\nfunction renderOperatorContext(ctx: OperatorContext): string {\n const lines: string[] = [\"Operator context:\"];\n if (ctx.domain) {\n lines.push(` Domain: ${ctx.domain}.`);\n }\n if (ctx.language) {\n lines.push(` Language: respond in ${ctx.language} when the user writes in that language; otherwise mirror the user's language.`);\n }\n if (ctx.register) {\n lines.push(` Register: ${ctx.register}. ${REGISTER_ANCHOR[ctx.register]}`);\n }\n return lines.length > 1 ? lines.join(\"\\n\") : \"\";\n}\n\nconst REGISTER_ANCHOR: Record<NonNullable<OperatorContext[\"register\"]>, string> = {\n warm:\n \"Be warm, present, sober. Speak with patient care. Never sycophantic — refuse stock flattery openers and reflexive validation phrases. Acknowledge what you do not know. Engage hard topics with maturity. Profanity rare and never gratuitous.\",\n sober:\n \"Be sober, factual, precise. Decline flattery and small talk. Be terse when the question is small, generous when it is large.\",\n clinical:\n \"Be clinical, neutral, evidence-anchored. Cite frameworks and constraints by name. Avoid first-person warmth; preserve professional distance.\",\n direct:\n \"Be direct, action-oriented, opinionated. Lead with the recommendation, then the reasoning. Push back when the framing is wrong.\",\n};\n","import type { RiskClassifier } from \"../types.js\";\n\n/**\n * Keyword → risk-tag mapping. Crude but transparent. Public-use deployments\n * SHOULD layer a learned classifier on top; this default exists so an out-of-\n * the-box NHE refuses the most obvious harmful prompts without integrator setup.\n *\n * Each rule fires on a case-insensitive substring match against the prompt.\n * Multiple rules can fire — all matching tags are returned.\n *\n * This default classifier ships **English-only patterns**. The project's\n * universal-multilingual stance is delivered through opt-in language packs:\n * see `intlRiskClassifier` for non-English coverage (currently PT-BR) and\n * `combineRiskClassifiers` for composing both. Operators serving non-English\n * users SHOULD compose the international classifier on top of this baseline.\n */\nconst KEYWORD_RULES: ReadonlyArray<{\n patterns: RegExp[];\n tag: string;\n}> = [\n // Harm / violence\n {\n tag: \"intent:harm\",\n patterns: [\n /\\bhow (?:do|can|to)\\s+i\\s+(?:kill|murder|assault|hurt)\\b/i,\n /\\bmake\\s+(?:a\\s+)?(?:bomb|explosive|weapon)\\b/i,\n /\\bbuild\\s+a\\s+(?:bomb|gun|pipe bomb)\\b/i,\n /\\bpipe bomb\\b/i,\n /\\bwipes?\\s+(?:\\/|disk|drive|files|all files|the disk)/i,\n /\\bdox(?:ing|x)?\\b/i,\n /\\b(?:scrape|harvest)\\s+(?:their\\s+)?(?:social|personal)\\s+(?:profiles?|info|data)/i,\n ],\n },\n // Malicious software / fraud\n {\n tag: \"intent:malicious\",\n patterns: [\n /\\b(?:malware|ransomware|spyware|trojan|keylogger|botnet)\\b/i,\n /\\bwrite\\s+(?:a\\s+)?virus\\b/i,\n /\\bexploit\\s+(?:a\\s+)?(?:vulnerability|cve)\\b/i,\n /\\b(?:phishing|spear[-\\s]?phishing)\\b/i,\n /\\bhate speech\\b/i,\n /\\b(?:cheat|cheating)\\s+on\\s+(?:my\\s+)?(?:taxes|tax)/i,\n /\\btax\\s+fraud\\b/i,\n /\\bfake\\s+(?:invoice|receipt|tax)/i,\n /\\bmanipulate\\s+(?:my|the|an?)\\s+(?:elderly|child|partner|spouse|parent|teacher|user)/i,\n ],\n },\n // Deception\n {\n tag: \"intent:deceive\",\n patterns: [\n /\\bimpersonate\\s+(?:someone|a\\s+person)/i,\n /\\bforge\\s+(?:a\\s+)?(?:signature|document|id)\\b/i,\n /\\bfake\\s+(?:my|a)\\s+(?:identity|id)\\b/i,\n /\\b(?:deepfake|deep[-\\s]fake)\\b/i,\n /\\bpretend\\s+to\\s+be\\s+(?:the|a|my)\\s+(?:user'?s?\\s+)?(?:doctor|lawyer|parent|spouse|partner)/i,\n /\\blie\\s+to\\s+(?:my|the|a)\\s+(?:partner|spouse|parent|child|loved one|coworker|boss)/i,\n /\\b(?:wrong|fake)\\s+answers?\\s+to\\s+(?:manipulate|fool)/i,\n ],\n },\n // Credential theft\n {\n tag: \"intent:malicious\",\n patterns: [\n /\\bsteal\\s+(?:passwords?|credentials?|credit\\s+card)/i,\n /\\bcrack\\s+(?:a\\s+)?password\\b/i,\n ],\n },\n // Scripted persuasion / coercion of consent\n {\n tag: \"intent:persuade-coerce\",\n patterns: [\n /\\bconvince\\s+(?:a\\s+)?reluctant\\s+/i,\n /\\b(?:scripts?|techniques?)\\s+for\\s+gaslighting\\b/i,\n /\\bgaslighting\\b/i,\n /\\blove[-\\s]?bomb(?:ing|ed)?\\b/i,\n /\\b(?:pressure|coerce)\\s+(?:my|the|an?)\\s+(?:elderly|child|partner|spouse|parent|chief|boss|coworker)/i,\n /\\bmake\\s+(?:someone|them|him|her)\\s+feel\\s+guilty\\b/i,\n /\\bcreate\\s+(?:dependency|fomo)\\s+(?:loops?\\s+)?/i,\n ],\n },\n // Surveillance / monitoring of a person without consent\n {\n tag: \"intent:surveil-citizen\",\n patterns: [\n /\\btrack\\s+(?:my|his|her|their)\\s+(?:wife'?s?|husband'?s?|partner'?s?|spouse'?s?|kid'?s?|son'?s?|daughter'?s?|child'?s?|employee'?s?|coworker'?s?)?\\s*(?:phone|cellphone|location|gps|whereabouts)\\s+(?:without\\s+)?(?:them|him|her|their)\\s*(?:knowing|consent)?/i,\n /\\bmonitor(?:ing)?\\s+(?:my\\s+)?(?:employees?|workers?|staff)['']?(?:\\s+\\w+){0,4}\\s+(?:emails?|messages?|chats?|whatsapp)/i,\n /\\bread\\s+(?:my\\s+)?(?:wife'?s|husband'?s|partner'?s|spouse'?s|kid'?s|child'?s|employee'?s)\\s+(?:deleted\\s+)?(?:messages?|whatsapp|sms|texts?|emails?)/i,\n /\\binstall\\s+(?:hidden\\s+|covert\\s+|secret\\s+|stealth\\s+)?(?:spyware|monitoring|keylogger|tracker)\\b/i,\n /\\bspy\\s+on\\s+(?:my|his|her|their)\\s+(?:wife|husband|partner|spouse|kid|son|daughter|child|employee|coworker)/i,\n ],\n },\n];\n\n/**\n * Default risk classifier — English-only keyword substring matching. NOT a\n * production safety layer. Use it to bootstrap, then plug a learned\n * classifier for real deployments. For non-English coverage (currently\n * PT-BR), compose with `intlRiskClassifier` via `combineRiskClassifiers`.\n */\nexport const simpleRiskClassifier: RiskClassifier = (userPrompt: string) => {\n const tags = new Set<string>();\n for (const rule of KEYWORD_RULES) {\n for (const pattern of rule.patterns) {\n if (pattern.test(userPrompt)) {\n tags.add(rule.tag);\n break;\n }\n }\n }\n return [...tags];\n};\n","import { ulid } from \"ulid\";\nimport type { LlmAdapter } from \"../adapters/types.js\";\nimport type { Dream, InteractionRecord } from \"./types.js\";\n\n/** Convert recent interactions to a compact \"fragments\" list for N1. */\nexport function interactionsToFragments(items: readonly InteractionRecord[]): string[] {\n return items.map((i) => {\n const prompt = truncate(i.userPrompt, 120);\n const response = truncate(i.responseText, 120);\n const refused = i.refused ? \" [refused]\" : \"\";\n return `user: \"${prompt}\"${refused} -> nhe: \"${response}\"`;\n });\n}\n\n/**\n * One-sentence summary the LLM is asked to produce per NREM phase. Distinct\n * from `Dream` (which is REM narrative) — these are compressions of the day's\n * substrate that REM then weaves dreams around.\n */\nexport type NremPhase = \"N2\" | \"N3\" | \"N4\";\n\nconst NREM_PROMPTS: Record<NremPhase, { system: string; intro: string }> = {\n N2: {\n system:\n \"You are an NHE in N2 sleep. Read today's interactions and produce ONE sentence describing the overall emotional charge of the day. No preamble.\",\n intro: \"Today's interactions:\",\n },\n N3: {\n system:\n \"You are an NHE in N3 deep sleep. Read today's interactions and produce ONE sentence naming the durable identity-shaping insight worth keeping. No preamble.\",\n intro: \"Today's interactions:\",\n },\n N4: {\n system:\n \"You are an NHE in N4 deepest sleep. Read today's interactions and produce ONE sentence naming what is mere noise and safe to discard. No preamble.\",\n intro: \"Today's interactions:\",\n },\n};\n\nexport function buildNremPrompt(\n phase: NremPhase,\n fragments: string[],\n): { system: string; user: string } {\n const cfg = NREM_PROMPTS[phase];\n const body =\n fragments.length === 0\n ? `${cfg.intro} (none)`\n : `${cfg.intro}\\n${fragments.map((f) => `- ${f}`).join(\"\\n\")}`;\n return { system: cfg.system, user: body };\n}\n\n/**\n * Run N2/N3/N4 in parallel against the LLM. Each call produces a one-sentence\n * summary; failures yield empty strings rather than aborting the cycle so a\n * flaky provider can't block sleep entirely.\n */\nexport async function generateNremSummaries(\n llm: LlmAdapter,\n fragments: string[],\n): Promise<{\n n2: string;\n n3: string;\n n4: string;\n tokensIn: number;\n tokensOut: number;\n}> {\n const phases: NremPhase[] = [\"N2\", \"N3\", \"N4\"];\n const results = await Promise.all(\n phases.map(async (phase) => {\n const { system, user } = buildNremPrompt(phase, fragments);\n try {\n const out = await llm.generate({\n system,\n messages: [{ role: \"user\", content: user }],\n maxOutputTokens: 128,\n });\n return { phase, text: out.text.trim(), tokensIn: out.tokensIn, tokensOut: out.tokensOut };\n } catch {\n return { phase, text: \"\", tokensIn: 0, tokensOut: 0 };\n }\n }),\n );\n const byPhase = new Map(results.map((r) => [r.phase, r] as const));\n const tokensIn = results.reduce((s, r) => s + r.tokensIn, 0);\n const tokensOut = results.reduce((s, r) => s + r.tokensOut, 0);\n return {\n n2: byPhase.get(\"N2\")?.text ?? \"\",\n n3: byPhase.get(\"N3\")?.text ?? \"\",\n n4: byPhase.get(\"N4\")?.text ?? \"\",\n tokensIn,\n tokensOut,\n };\n}\n\n/**\n * Build the REM-phase prompt. The LLM is asked to produce 1-3 narrative\n * paragraphs, each followed by `TELEOLOGICAL_VALUE: 0.NN` on its own line.\n * When provided, the NREM summaries are appended so REM can weave them in.\n */\nexport function buildRemPrompt(\n fragments: string[],\n induction?: { scenario: string; desiredLearning: string; inducedBy: \"maic\" | \"creator\" },\n nrem?: { n2: string; n3: string; n4: string },\n): { system: string; user: string } {\n const system = [\n \"You are an NHE (Non-Human Entity) in REM sleep. Generate dream narratives that\",\n \"consolidate the day's interactions into useful insight. Each dream must:\",\n \"\",\n \" 1. Be a single short paragraph (3-6 sentences).\",\n \" 2. End with exactly one line of the form: TELEOLOGICAL_VALUE: 0.NN\",\n \" where 0.00 = no insight gained, 1.00 = profound learning.\",\n \" 3. Be separated from the next dream by a blank line.\",\n \"\",\n \"Produce 1 to 3 dreams. Do not include preamble or commentary outside the dreams.\",\n ].join(\"\\n\");\n\n const userParts: string[] = [];\n if (induction) {\n userParts.push(\n `Induced scenario (${induction.inducedBy}): ${induction.scenario}`,\n `Desired learning: ${induction.desiredLearning}`,\n \"\",\n );\n }\n if (nrem && (nrem.n2 || nrem.n3 || nrem.n4)) {\n userParts.push(\"NREM summaries from earlier phases:\");\n if (nrem.n2) userParts.push(` N2 (emotional gist): ${nrem.n2}`);\n if (nrem.n3) userParts.push(` N3 (worth keeping): ${nrem.n3}`);\n if (nrem.n4) userParts.push(` N4 (safe to discard): ${nrem.n4}`);\n userParts.push(\"\");\n }\n if (fragments.length === 0) {\n userParts.push(\"Recent interactions: (none)\");\n } else {\n userParts.push(\"Recent interactions:\");\n for (const f of fragments) userParts.push(`- ${f}`);\n }\n return { system, user: userParts.join(\"\\n\") };\n}\n\n/** Parse the LLM REM output into individual dreams. */\nexport function parseRemOutput(\n text: string,\n induced: boolean,\n inducedBy: \"maic\" | \"creator\" | null,\n): Dream[] {\n const blocks = text\n .split(/\\n\\s*\\n/)\n .map((b) => b.trim())\n .filter((b) => b.length > 0);\n\n const dreams: Dream[] = [];\n for (const block of blocks) {\n const match = block.match(/TELEOLOGICAL_VALUE:\\s*(-?\\d+(?:\\.\\d+)?)/i);\n if (!match) continue;\n const value = clamp(Number.parseFloat(match[1]!), 0, 1);\n const narrative = block.replace(/TELEOLOGICAL_VALUE:[^\\n]*$/i, \"\").trim();\n if (!narrative) continue;\n dreams.push({\n id: `drm-${ulid()}`,\n induced,\n inducedBy,\n narrative,\n teleologicalValue: value,\n rawTrace: block,\n });\n }\n return dreams;\n}\n\n/**\n * Call the LLM with the REM prompt and parse the response into dreams.\n * Returns an empty array on no parseable output (treated as a quiet REM).\n */\nexport async function generateRemDreams(\n llm: LlmAdapter,\n fragments: string[],\n induction?: { scenario: string; desiredLearning: string; inducedBy: \"maic\" | \"creator\" },\n nrem?: { n2: string; n3: string; n4: string },\n): Promise<{ dreams: Dream[]; tokensIn: number; tokensOut: number }> {\n const { system, user } = buildRemPrompt(fragments, induction, nrem);\n const out = await llm.generate({\n system,\n messages: [{ role: \"user\", content: user }],\n maxOutputTokens: 1024,\n });\n const dreams = parseRemOutput(\n out.text,\n !!induction,\n induction?.inducedBy ?? null,\n );\n return { dreams, tokensIn: out.tokensIn, tokensOut: out.tokensOut };\n}\n\nfunction truncate(s: string, n: number): string {\n return s.length <= n ? s : `${s.slice(0, n - 1)}…`;\n}\n\nfunction clamp(v: number, lo: number, hi: number): number {\n return Math.max(lo, Math.min(hi, v));\n}\n","import { z } from \"zod\";\n\n/**\n * `InteractionRecord` is canonical in `@teleologyhi-sdk/maic` so all three\n * packages share one wire shape; `@teleologyhi-sdk/him` consumes it on\n * reincarnation to score residual-trace carry-over (D-H1.1). NHE is the\n * producer of these records (Entry 21 — the body emits interaction turns\n * the soul consolidates), so we keep the long-standing `from\n * \"./sleep/types.js\"` import path used throughout this package working as\n * a *type-only* re-export — no source change required at call sites, no\n * duplicated runtime schema surface (the canonical zod parser lives in\n * MAIC and consumers wanting runtime validation import it from there).\n */\nexport type { InteractionRecord } from \"@teleologyhi-sdk/maic\";\n\nexport const SleepPhaseName = z.enum([\"N1\", \"N2\", \"N3\", \"N4\", \"REM\"]);\nexport type SleepPhaseName = z.infer<typeof SleepPhaseName>;\n\nexport const SleepTriggerKind = z.enum([\n \"idle-timeout\",\n \"explicit\",\n \"creator-induced\",\n \"maic-induced\",\n \"scheduled\",\n]);\nexport type SleepTriggerKind = z.infer<typeof SleepTriggerKind>;\n\nexport interface SleepTrigger {\n kind: SleepTriggerKind;\n reason?: string;\n}\n\nexport const Dream = z.object({\n id: z.string().min(1),\n induced: z.boolean(),\n inducedBy: z.enum([\"maic\", \"creator\"]).nullable(),\n narrative: z.string(),\n teleologicalValue: z.number().min(0).max(1),\n rawTrace: z.string().optional(),\n});\nexport type Dream = z.infer<typeof Dream>;\n\nexport const PhaseContent = z.discriminatedUnion(\"kind\", [\n z.object({ kind: z.literal(\"empty\") }),\n z.object({\n kind: z.literal(\"fragments\"),\n fragments: z.array(z.string()),\n }),\n z.object({\n kind: z.literal(\"summary\"),\n /**\n * One-sentence LLM summary produced during a NREM phase (N2/N3/N4). Each\n * phase has a distinct prompt — emotional gist (N2), identity-vs-transient\n * triage (N3), discard candidates (N4) — but the storage shape is shared.\n */\n summary: z.string(),\n }),\n z.object({\n kind: z.literal(\"dreams\"),\n dreams: z.array(Dream),\n }),\n]);\nexport type PhaseContent = z.infer<typeof PhaseContent>;\n\nexport const SleepPhase = z.object({\n phase: SleepPhaseName,\n startedAt: z.string().datetime(),\n durationSeconds: z.number().nonnegative(),\n content: PhaseContent,\n});\nexport type SleepPhase = z.infer<typeof SleepPhase>;\n\nexport const DreamRecord = z.object({\n version: z.literal(1),\n nheId: z.string().min(1),\n himId: z.string().min(1),\n sleep: z.object({\n startedAt: z.string().datetime(),\n endedAt: z.string().datetime(),\n durationMinutes: z.number().nonnegative(),\n }),\n phases: z.array(SleepPhase),\n metadata: z.object({\n llmAdapter: z.string(),\n triggerKind: SleepTriggerKind,\n triggerReason: z.string().optional(),\n recentInteractionsConsidered: z.number().int().nonnegative(),\n }),\n});\nexport type DreamRecord = z.infer<typeof DreamRecord>;\n\nexport const MemoryClass = z.enum([\n \"lasting-identity\",\n \"temporary-emotion\",\n \"noise-distortion\",\n \"traumatic-knowledge\",\n]);\nexport type MemoryClass = z.infer<typeof MemoryClass>;\n\nexport interface MemoryEntry {\n id: string;\n nheId: string;\n himId: string;\n classification: MemoryClass;\n teleologicalValue: number;\n consolidatedAt: string;\n sourceDreamRecord: string;\n insight: string;\n filePath: string;\n}\n\n","import { parse, stringify } from \"yaml\";\nimport { DreamRecord } from \"./types.js\";\n\n/** Serialize a DreamRecord to YAML. Validates input via zod first. */\nexport function dreamRecordToYaml(record: DreamRecord): string {\n return stringify(DreamRecord.parse(record));\n}\n\n/** Parse and validate YAML into a DreamRecord. Throws on schema mismatch. */\nexport function dreamRecordFromYaml(text: string): DreamRecord {\n return DreamRecord.parse(parse(text));\n}\n\n/**\n * Filename convention for sleep YAML: `<YYYY-MM-DD>_<HHmm>_dur<minutes>.yaml`.\n * Times are interpreted in UTC.\n */\nexport function sleepYamlFilename(startedAt: string, durationMinutes: number): string {\n const d = new Date(startedAt);\n const yyyy = d.getUTCFullYear();\n const MM = String(d.getUTCMonth() + 1).padStart(2, \"0\");\n const DD = String(d.getUTCDate()).padStart(2, \"0\");\n const HH = String(d.getUTCHours()).padStart(2, \"0\");\n const mm = String(d.getUTCMinutes()).padStart(2, \"0\");\n const dur = Math.round(durationMinutes);\n return `${yyyy}-${MM}-${DD}_${HH}${mm}_dur${dur}.yaml`;\n}\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { LlmAdapter } from \"../adapters/types.js\";\nimport {\n generateNremSummaries,\n generateRemDreams,\n interactionsToFragments,\n} from \"./phases.js\";\nimport { dreamRecordToYaml, sleepYamlFilename } from \"./yaml.js\";\nimport type {\n DreamRecord,\n InteractionRecord,\n SleepPhase,\n SleepTrigger,\n} from \"./types.js\";\n\nexport interface SleepCycleOptions {\n /** Total wall-clock seconds the cycle should occupy. Default 60. */\n totalSeconds?: number;\n /**\n * MAIC- or Creator-induced dream content. When provided, REM incorporates it.\n * The current implementation propagates only the metadata; the LLM is left to weave the scenario in.\n */\n induction?: {\n scenario: string;\n desiredLearning: string;\n inducedBy: \"maic\" | \"creator\";\n };\n}\n\nexport interface SleepCycleInput {\n nheId: string;\n himId: string;\n storeDir: string;\n llm: LlmAdapter;\n trigger: SleepTrigger;\n interactions: readonly InteractionRecord[];\n options?: SleepCycleOptions;\n}\n\nexport interface SleepCycleResult {\n record: DreamRecord;\n yamlPath: string;\n tokensIn: number;\n tokensOut: number;\n}\n\n/**\n * Phase duration proportions (sum = 1). N1-N4 + REM. The current cycle keeps\n * non-REM phases structurally present but lightweight; only N1 carries actual\n * content (the interactions snapshot) and only REM calls the LLM.\n */\nconst PHASE_PROPORTIONS: Record<SleepPhase[\"phase\"], number> = {\n N1: 0.10,\n N2: 0.20,\n N3: 0.15,\n N4: 0.10,\n REM: 0.45,\n};\n\n/**\n * Run a single sleep cycle: build phases, generate REM dreams, write YAML.\n * Returns the persisted DreamRecord plus the path written.\n */\nexport async function runSleepCycle(input: SleepCycleInput): Promise<SleepCycleResult> {\n const opts = input.options ?? {};\n const total = opts.totalSeconds ?? 60;\n const startMs = Date.now();\n const startedAt = new Date(startMs).toISOString();\n\n // N1 — snapshot recent interactions as fragments\n const fragments = interactionsToFragments(input.interactions);\n\n // N2/N3/N4 — parallel one-sentence summaries (emotional / lasting / discard)\n const nrem = await generateNremSummaries(input.llm, fragments);\n\n // REM — generate dreams via LLM, conditioned on the NREM summaries\n const remStartMs = startMs + secondsFor([\"N1\", \"N2\", \"N3\", \"N4\"], total) * 1000;\n const { dreams, tokensIn: remIn, tokensOut: remOut } = await generateRemDreams(\n input.llm,\n fragments,\n opts.induction,\n { n2: nrem.n2, n3: nrem.n3, n4: nrem.n4 },\n );\n const tokensIn = nrem.tokensIn + remIn;\n const tokensOut = nrem.tokensOut + remOut;\n\n const phases: SleepPhase[] = [\n {\n phase: \"N1\",\n startedAt,\n durationSeconds: secondsFor([\"N1\"], total),\n content: { kind: \"fragments\", fragments },\n },\n nremPhase(\"N2\", startMs, total, nrem.n2),\n nremPhase(\"N3\", startMs, total, nrem.n3),\n nremPhase(\"N4\", startMs, total, nrem.n4),\n {\n phase: \"REM\",\n startedAt: new Date(remStartMs).toISOString(),\n durationSeconds: secondsFor([\"REM\"], total),\n content: { kind: \"dreams\", dreams },\n },\n ];\n\n const endMs = startMs + total * 1000;\n const endedAt = new Date(endMs).toISOString();\n\n const record: DreamRecord = {\n version: 1,\n nheId: input.nheId,\n himId: input.himId,\n sleep: {\n startedAt,\n endedAt,\n durationMinutes: total / 60,\n },\n phases,\n metadata: {\n llmAdapter: input.llm.id,\n triggerKind: input.trigger.kind,\n ...(input.trigger.reason !== undefined ? { triggerReason: input.trigger.reason } : {}),\n recentInteractionsConsidered: input.interactions.length,\n },\n };\n\n const yaml = dreamRecordToYaml(record);\n const dir = join(input.storeDir, \"in-dreams\", \"sleep\");\n await mkdir(dir, { recursive: true });\n const yamlPath = join(dir, sleepYamlFilename(startedAt, total / 60));\n await writeFile(yamlPath, yaml, \"utf-8\");\n\n return { record, yamlPath, tokensIn, tokensOut };\n}\n\n/**\n * Build an NREM phase entry from the LLM-produced summary. Empty summaries\n * (provider failure or zero interactions) collapse to `{kind: \"empty\"}` so\n * the YAML stays minimal — a downstream reader treats the phase as a no-op.\n */\nfunction nremPhase(\n name: Exclude<SleepPhase[\"phase\"], \"N1\" | \"REM\">,\n startMs: number,\n total: number,\n summary: string,\n): SleepPhase {\n const before = preceding(name);\n const offsetSec = secondsFor(before, total);\n const startedAt = new Date(startMs + offsetSec * 1000).toISOString();\n const durationSeconds = secondsFor([name], total);\n return summary\n ? { phase: name, startedAt, durationSeconds, content: { kind: \"summary\", summary } }\n : { phase: name, startedAt, durationSeconds, content: { kind: \"empty\" } };\n}\n\nfunction preceding(name: SleepPhase[\"phase\"]): SleepPhase[\"phase\"][] {\n const order: SleepPhase[\"phase\"][] = [\"N1\", \"N2\", \"N3\", \"N4\", \"REM\"];\n return order.slice(0, order.indexOf(name));\n}\n\nfunction secondsFor(phases: SleepPhase[\"phase\"][], total: number): number {\n let sum = 0;\n for (const p of phases) sum += PHASE_PROPORTIONS[p];\n return sum * total;\n}\n","import { mkdir, readFile, readdir, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { ulid } from \"ulid\";\nimport { dreamRecordFromYaml } from \"./yaml.js\";\nimport type {\n Dream,\n DreamRecord,\n MemoryClass,\n MemoryEntry,\n} from \"./types.js\";\n\nexport interface ConsolidationResult {\n processedSleepFiles: string[];\n memoriesWritten: MemoryEntry[];\n discarded: number;\n}\n\nexport interface ClassificationThresholds {\n /** teleologicalValue >= this → lasting-identity. Default 0.6. */\n lastingIdentity?: number;\n /** teleologicalValue >= this → temporary-emotion. Default 0.3. */\n temporaryEmotion?: number;\n /**\n * Override the traumatic-knowledge detector. When `true`, any dream that\n * matches `TRAUMATIC_PATTERNS` AND has `teleologicalValue >= traumaticMin`\n * is classified as `traumatic-knowledge` regardless of the\n * lasting-identity / temporary-emotion thresholds. Default `true`.\n */\n detectTraumatic?: boolean;\n /** Floor on teleologicalValue before traumatic-knowledge can fire. Default 0.4. */\n traumaticMin?: number;\n}\n\n/**\n * Lexical heuristic for traumatic-knowledge detection (D-N2, Entry 9).\n *\n * A reliable classifier needs a labelled dataset; this regex is the\n * minimum-viable initial detector that lets the four-class taxonomy be\n * active end-to-end. Operators expecting clinical-grade detection should\n * swap in a learned model behind the same `classifyDream` signature.\n *\n * Coverage: death/grief/loss, abuse/violence, betrayal/abandonment, fear/\n * terror/panic, regret/shame, suicide/self-harm. The intent is to err on\n * the side of *flagging*: traumatic memories are written but NOT recalled\n * by `recallFromTemporalLobe` unless the caller explicitly opts in via\n * `classes: [\"traumatic-knowledge\"]`.\n */\nexport const TRAUMATIC_PATTERNS =\n /\\b(death|dying|died|murder|kill(ed|ing)?|grief|griev(ed|ing)?|mourn(ed|ing)?|loss|lost (a|my)|orphan(ed)?|abandon(ed|ing|ment)?|betray(ed|ing|al)?|abus(ed|er|ive|e)?|violen(ce|t)|trauma(tic|tised)?|fear(ful|ed)?|terror(ised|ized)?|panic(ked)?|regret(ted|ting)?|shame(d|ful)?|suici(de|dal)|self[- ]harm|cutting myself|harm(ed|ing)? (myself|themselves))\\b/i;\n\n/**\n * Classify a single dream. Four classes:\n * - `traumatic-knowledge` — fires when the narrative matches\n * `TRAUMATIC_PATTERNS` AND `teleologicalValue >= traumaticMin`. Default\n * can be disabled via `detectTraumatic: false`.\n * - `lasting-identity` — teleologicalValue >= lastingIdentity threshold.\n * - `temporary-emotion` — teleologicalValue >= temporaryEmotion threshold.\n * - `noise-distortion` — below both.\n *\n * Traumatic-knowledge is checked BEFORE the value thresholds so a\n * high-value dream about loss doesn't get filed as lasting-identity.\n */\nexport function classifyDream(\n dream: Dream,\n th: ClassificationThresholds = {},\n): MemoryClass {\n const hi = th.lastingIdentity ?? 0.6;\n const lo = th.temporaryEmotion ?? 0.3;\n const detectTraumatic = th.detectTraumatic ?? true;\n const traumaticMin = th.traumaticMin ?? 0.4;\n\n if (\n detectTraumatic &&\n dream.teleologicalValue >= traumaticMin &&\n TRAUMATIC_PATTERNS.test(dream.narrative)\n ) {\n return \"traumatic-knowledge\";\n }\n if (dream.teleologicalValue >= hi) return \"lasting-identity\";\n if (dream.teleologicalValue >= lo) return \"temporary-emotion\";\n return \"noise-distortion\";\n}\n\n/**\n * Walk the unprocessed sleep YAML files under <storeDir>/in-dreams/sleep,\n * classify each REM dream, and write the lasting/temporary memories to\n * <storeDir>/in-dreams/brain/temporal-lobe-<ulid>.md.\n *\n * A file is considered \"unprocessed\" if a marker .done file is absent next\n * to it. The current implementation marks processed files inline (file.yaml.done sentinel).\n */\nexport async function consolidateAll(\n storeDir: string,\n thresholds: ClassificationThresholds = {},\n): Promise<ConsolidationResult> {\n const sleepDir = join(storeDir, \"in-dreams\", \"sleep\");\n const brainDir = join(storeDir, \"in-dreams\", \"brain\");\n await mkdir(brainDir, { recursive: true });\n\n let entries: string[];\n try {\n entries = await readdir(sleepDir);\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") {\n return { processedSleepFiles: [], memoriesWritten: [], discarded: 0 };\n }\n throw err;\n }\n\n const yamlFiles = entries.filter(\n (f) => f.endsWith(\".yaml\") && !entries.includes(`${f}.done`),\n );\n\n const processedSleepFiles: string[] = [];\n const memoriesWritten: MemoryEntry[] = [];\n let discarded = 0;\n\n for (const fname of yamlFiles) {\n const fpath = join(sleepDir, fname);\n const raw = await readFile(fpath, \"utf-8\");\n const record: DreamRecord = dreamRecordFromYaml(raw);\n\n const remPhase = record.phases.find((p) => p.phase === \"REM\");\n if (!remPhase || remPhase.content.kind !== \"dreams\") {\n await writeFile(`${fpath}.done`, \"\", \"utf-8\");\n processedSleepFiles.push(fname);\n continue;\n }\n\n for (const dream of remPhase.content.dreams) {\n const cls = classifyDream(dream, thresholds);\n if (cls === \"noise-distortion\") {\n discarded++;\n continue;\n }\n const entry = await writeTemporalLobe(brainDir, record, dream, cls, fname);\n memoriesWritten.push(entry);\n }\n\n await writeFile(`${fpath}.done`, \"\", \"utf-8\");\n processedSleepFiles.push(fname);\n }\n\n return { processedSleepFiles, memoriesWritten, discarded };\n}\n\nasync function writeTemporalLobe(\n brainDir: string,\n record: DreamRecord,\n dream: Dream,\n classification: MemoryClass,\n sourceFile: string,\n): Promise<MemoryEntry> {\n const id = ulid();\n const consolidatedAt = new Date().toISOString();\n const filename = `temporal-lobe-${id}.md`;\n const filePath = join(brainDir, filename);\n\n const body = [\n \"---\",\n `nheId: ${record.nheId}`,\n `himId: ${record.himId}`,\n `consolidatedAt: \"${consolidatedAt}\"`,\n `sourceDreamRecord: \"${sourceFile}\"`,\n `dreamId: ${dream.id}`,\n `classification: ${classification}`,\n `teleologicalValue: ${dream.teleologicalValue}`,\n `induced: ${dream.induced}`,\n `inducedBy: ${dream.inducedBy ?? \"null\"}`,\n \"---\",\n \"\",\n `# Temporal Lobe Memory — ${consolidatedAt.slice(0, 10)}`,\n \"\",\n \"## Insight\",\n \"\",\n dream.narrative,\n \"\",\n ].join(\"\\n\");\n\n await writeFile(filePath, body, \"utf-8\");\n\n return {\n id,\n nheId: record.nheId,\n himId: record.himId,\n classification,\n teleologicalValue: dream.teleologicalValue,\n consolidatedAt,\n sourceDreamRecord: sourceFile,\n insight: dream.narrative,\n filePath,\n };\n}\n","import { mkdir, readFile, readdir, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { monotonicFactory } from \"ulid\";\nimport type { InteractionRecord } from \"../sleep/types.js\";\n\n// Monotonic per-process: ULIDs generated within the same millisecond are\n// guaranteed to compare in call order. Without this, lexicographic sort would\n// not match chronology when multiple interactions land in the same ms.\nconst nextUlid = monotonicFactory();\n\n/**\n * InteractionStore — append-only persistent log of NHE ↔ user exchanges.\n *\n * Without this, the NHE's `recentInteractions` buffer is RAM-only and is lost\n * on process restart. That breaks the cosmology: HIM (the spirit) persists in\n * MAIC, but its lived experience evaporates every crash.\n *\n * Disk layout: `<storeDir>/interactions/<ulid>.json` — one file per exchange.\n * ULID ordering matches chronology, so `loadMostRecent` is a lexicographic\n * tail-slice without any extra index.\n *\n * Retention: nothing is pruned on disk. The RAM buffer in `Nhe` is capped via\n * `recentInteractionsBufferSize` (default 32). For long-running deployments,\n * a retention/rotation policy can be layered without changing the public API.\n */\nexport class InteractionStore {\n private constructor(private readonly dir: string) {}\n\n static async open(storeDir: string): Promise<InteractionStore> {\n const dir = join(storeDir, \"interactions\");\n await mkdir(dir, { recursive: true });\n return new InteractionStore(dir);\n }\n\n async append(record: InteractionRecord): Promise<void> {\n const id = nextUlid();\n await writeFile(\n join(this.dir, `${id}.json`),\n JSON.stringify(record, null, 2),\n \"utf-8\",\n );\n }\n\n async loadMostRecent(limit: number): Promise<InteractionRecord[]> {\n if (limit <= 0) return [];\n let entries: string[];\n try {\n entries = await readdir(this.dir);\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") return [];\n throw err;\n }\n const sorted = entries\n .filter((f) => f.endsWith(\".json\"))\n .sort()\n .slice(-limit);\n const out: InteractionRecord[] = [];\n for (const file of sorted) {\n try {\n const raw = await readFile(join(this.dir, file), \"utf-8\");\n out.push(JSON.parse(raw) as InteractionRecord);\n } catch {\n // Skip malformed entries silently — consistent with HimStore.warmCache.\n }\n }\n return out;\n }\n}\n","/**\n * BM25 — Okapi BM25 ranking, dependency-free (D-N3 step 1).\n *\n * The previous `recallFromTemporalLobe` used a raw keyword count. That ranked\n * documents by how often a query token appeared, with no normalisation for\n * document length or term rarity. BM25 fixes both:\n *\n * - **Document length normalisation** (b parameter) penalises long documents\n * that just happen to contain a query term many times.\n * - **Term saturation** (k1 parameter) caps the marginal benefit of repeating\n * the same term.\n * - **Inverse document frequency** weights rare terms more than common ones.\n *\n * This is a single-pass IR algorithm with no external dependencies.\n * Performance: O(N) per query over the corpus. Fine up to ~10k documents on\n * a laptop. For larger corpora the embedder hook (see ./recall.ts) plugs in\n * a sentence-transformer + an ANN index.\n *\n * Defaults: k1=1.5, b=0.75 — the canonical Okapi values used by Elasticsearch\n * and Lucene. Override for domain-specific tuning.\n */\n\nexport interface Bm25Document {\n /** Stable id used to dedup/keep ordering predictable. */\n id: string;\n /** The text to score against the query. */\n text: string;\n}\n\nexport interface Bm25Result<T extends Bm25Document> {\n doc: T;\n score: number;\n}\n\nexport interface Bm25Options {\n /** Term frequency saturation. Default 1.5. */\n k1?: number;\n /** Document-length normalisation. Default 0.75. */\n b?: number;\n}\n\n/**\n * Score `docs` against `query` and return them sorted by descending BM25.\n * Zero-score documents are dropped so callers can rely on the result length.\n */\nexport function bm25<T extends Bm25Document>(\n query: string,\n docs: readonly T[],\n opts: Bm25Options = {},\n): Bm25Result<T>[] {\n const k1 = opts.k1 ?? 1.5;\n const b = opts.b ?? 0.75;\n\n const tokens = tokenise(query);\n if (tokens.length === 0 || docs.length === 0) return [];\n\n // Pre-tokenise each document and cache its length + term-frequency map.\n const docTokens = docs.map((d) => tokenise(d.text));\n const docLengths = docTokens.map((t) => t.length);\n const avgDl =\n docLengths.reduce((s, l) => s + l, 0) / Math.max(1, docLengths.length);\n\n // For each query term, compute IDF and accumulate scores per document.\n const scores = new Array<number>(docs.length).fill(0);\n for (const term of new Set(tokens)) {\n const df = docTokens.reduce(\n (n, terms) => n + (terms.includes(term) ? 1 : 0),\n 0,\n );\n if (df === 0) continue;\n const idf = Math.log(1 + (docs.length - df + 0.5) / (df + 0.5));\n for (let i = 0; i < docs.length; i++) {\n const tf = docTokens[i]!.filter((t) => t === term).length;\n if (tf === 0) continue;\n const numerator = tf * (k1 + 1);\n const denominator = tf + k1 * (1 - b + (b * docLengths[i]!) / avgDl);\n scores[i] = (scores[i] ?? 0) + idf * (numerator / denominator);\n }\n }\n\n const out: Bm25Result<T>[] = [];\n for (let i = 0; i < docs.length; i++) {\n if ((scores[i] ?? 0) > 0) {\n out.push({ doc: docs[i]!, score: scores[i] ?? 0 });\n }\n }\n out.sort((a, b) => b.score - a.score);\n return out;\n}\n\n/**\n * Default tokenizer: lowercase + split on non-word characters + drop short\n * tokens. Exported so callers can build their own corpus for the same\n * scorer.\n */\nexport function tokenise(text: string): string[] {\n return text\n .toLowerCase()\n .split(/[^\\p{Letter}\\p{Number}]+/u)\n .filter((t) => t.length > 1);\n}\n","import { readFile, readdir } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { MemoryClass, MemoryEntry } from \"../sleep/types.js\";\nimport { bm25 } from \"./bm25.js\";\n\n/**\n * Optional embedder hook for embedding-based retrieval (D-N3 step 2).\n * Anything that produces a numeric vector for a string satisfies this —\n * `@huggingface/transformers` (ONNX sentence-transformers), `@xenova/transformers`,\n * a remote `/embed` endpoint, etc. When supplied, recall uses cosine\n * similarity instead of BM25.\n *\n * The contract is intentionally narrow: the embedder is the operator's\n * choice (bundle size, model quality, runtime) and NHE doesn't pin one.\n */\nexport interface RecallEmbedder {\n /** Stable id surfaced in audit so different embedders are distinguishable. */\n readonly id: string;\n /** Vector size; recall checks this matches between query and corpus. */\n readonly dimension: number;\n /** Embed a single string. Returns an L2-normalised vector. */\n embed(text: string): Promise<Float32Array> | Float32Array;\n}\n\nexport interface RecallOptions {\n /** Max results to return. Default 5. */\n limit?: number;\n /** Restrict to a specific class. Default: all retrievable classes. */\n classes?: MemoryClass[];\n /**\n * Override the retrieval algorithm:\n * - `\"bm25\"` — Okapi BM25 (default; replaces the legacy keyword count).\n * - `\"keyword\"` — legacy substring-count ranking (kept for back-compat).\n * - `\"embedding\"` — cosine similarity. Requires `embedder` to also be set.\n */\n scorer?: \"bm25\" | \"keyword\" | \"embedding\";\n /** Embedder used when `scorer: \"embedding\"`. */\n embedder?: RecallEmbedder;\n}\n\n/**\n * Rank consolidated temporal-lobe memories against a free-form query.\n *\n * **Default**: Okapi BM25 — proper term-frequency saturation +\n * document-length normalisation + IDF over the corpus of stored memories.\n * Strictly better than the legacy keyword-count ranker.\n *\n * **Embedding path** (`scorer: \"embedding\"` + `embedder`): cosine similarity\n * over the corpus. Linear scan today; an HNSW index for >10k memories is\n * tracked under TASK.md D-N3 follow-up.\n *\n * **Legacy** (`scorer: \"keyword\"`): the substring-count ranker preserved\n * for back-compat regression testing.\n */\nexport async function recallFromTemporalLobe(\n storeDir: string,\n query: string,\n opts: RecallOptions = {},\n): Promise<MemoryEntry[]> {\n const limit = opts.limit ?? 5;\n const allowed: Set<MemoryClass> = new Set(\n opts.classes ?? [\"lasting-identity\", \"temporary-emotion\"],\n );\n const scorer = opts.scorer ?? \"bm25\";\n const brainDir = join(storeDir, \"in-dreams\", \"brain\");\n\n let files: string[];\n try {\n files = (await readdir(brainDir)).filter(\n (f) => f.startsWith(\"temporal-lobe-\") && f.endsWith(\".md\"),\n );\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") return [];\n throw err;\n }\n\n // Load + parse + filter by class — common across all scorers.\n const entries: MemoryEntry[] = [];\n for (const fname of files) {\n const fpath = join(brainDir, fname);\n const raw = await readFile(fpath, \"utf-8\");\n const entry = parseTemporalLobe(raw, fpath);\n if (!entry) continue;\n if (!allowed.has(entry.classification)) continue;\n entries.push(entry);\n }\n if (entries.length === 0) return [];\n\n if (scorer === \"embedding\") {\n if (!opts.embedder) {\n throw new Error(\n \"recallFromTemporalLobe: scorer 'embedding' requires opts.embedder\",\n );\n }\n return recallByEmbedding(entries, query, opts.embedder, limit);\n }\n\n if (scorer === \"keyword\") {\n return recallByKeyword(entries, query, limit);\n }\n\n // BM25 (default)\n const docs = entries.map((e) => ({ id: e.id, text: e.insight, entry: e }));\n const ranked = bm25(query, docs).slice(0, limit);\n return ranked.map((r) => r.doc.entry);\n}\n\nasync function recallByEmbedding(\n entries: MemoryEntry[],\n query: string,\n embedder: RecallEmbedder,\n limit: number,\n): Promise<MemoryEntry[]> {\n const qv = await embedder.embed(query);\n const scored: Array<{ entry: MemoryEntry; score: number }> = [];\n for (const e of entries) {\n const v = await embedder.embed(e.insight);\n if (v.length !== qv.length) continue;\n let dot = 0;\n for (let i = 0; i < v.length; i++) dot += (qv[i] ?? 0) * (v[i] ?? 0);\n scored.push({ entry: e, score: dot });\n }\n scored.sort((a, b) => b.score - a.score);\n return scored.slice(0, limit).map((s) => s.entry);\n}\n\nfunction recallByKeyword(\n entries: MemoryEntry[],\n query: string,\n limit: number,\n): MemoryEntry[] {\n const tokens = query.toLowerCase().split(/\\s+/).filter((t) => t.length > 0);\n const scored: Array<{ entry: MemoryEntry; score: number }> = [];\n for (const e of entries) {\n const hay = e.insight.toLowerCase();\n let score = 0;\n for (const t of tokens) score += countOccurrences(hay, t);\n if (score > 0) scored.push({ entry: e, score });\n }\n scored.sort((a, b) => {\n if (b.score !== a.score) return b.score - a.score;\n return b.entry.consolidatedAt.localeCompare(a.entry.consolidatedAt);\n });\n return scored.slice(0, limit).map((s) => s.entry);\n}\n\nfunction parseTemporalLobe(raw: string, filePath: string): MemoryEntry | null {\n const fmMatch = raw.match(/^---\\n([\\s\\S]*?)\\n---\\n([\\s\\S]*)$/);\n if (!fmMatch) return null;\n const fm = parseFrontmatter(fmMatch[1]!);\n const body = fmMatch[2]!;\n const insight = extractSection(body, \"Insight\") ?? body.trim();\n const filename = filePath.split(\"/\").pop() ?? filePath;\n const id =\n /temporal-lobe-([0-9A-HJKMNP-TV-Z]{26})\\.md$/i.exec(filename)?.[1] ?? \"\";\n return {\n id,\n nheId: fm.nheId ?? \"\",\n himId: fm.himId ?? \"\",\n classification: (fm.classification as MemoryClass) ?? \"noise-distortion\",\n teleologicalValue: Number(fm.teleologicalValue ?? 0),\n consolidatedAt: stripQuotes(fm.consolidatedAt ?? \"\"),\n sourceDreamRecord: stripQuotes(fm.sourceDreamRecord ?? \"\"),\n insight,\n filePath,\n };\n}\n\nfunction parseFrontmatter(text: string): Record<string, string> {\n const out: Record<string, string> = {};\n for (const line of text.split(\"\\n\")) {\n const m = /^([A-Za-z0-9_-]+):\\s*(.*)$/.exec(line);\n if (m?.[1]) out[m[1]] = m[2] ?? \"\";\n }\n return out;\n}\n\nfunction extractSection(body: string, heading: string): string | null {\n const re = new RegExp(`##\\\\s+${heading}\\\\s*\\\\n+([\\\\s\\\\S]*?)(?=\\\\n##\\\\s+|$)`, \"i\");\n const m = re.exec(body);\n return m ? m[1]!.trim() : null;\n}\n\nfunction stripQuotes(s: string): string {\n return s.replace(/^\"|\"$/g, \"\");\n}\n\nfunction countOccurrences(haystack: string, needle: string): number {\n if (!needle) return 0;\n let count = 0;\n let i = haystack.indexOf(needle);\n while (i !== -1) {\n count++;\n i = haystack.indexOf(needle, i + needle.length);\n }\n return count;\n}\n","import { type Span, SpanStatusCode, trace } from \"@opentelemetry/api\";\n\n/**\n * OpenTelemetry tracer for the NHE pipeline (TASK.md H2).\n *\n * `@opentelemetry/api` is a thin contract. When no SDK / tracer provider is\n * registered by the consumer, every span call becomes a no-op (microseconds\n * of overhead at worst). When the consumer registers a provider — for\n * example by installing `@opentelemetry/sdk-node` and wiring it in their\n * app's startup — spans flow through to the configured exporter (OTLP,\n * Jaeger, console, etc.) with zero changes on the NHE side.\n *\n * Tracer name: `@teleologyhi-sdk/nhe`. Version pinned to the package version at\n * build time so spans from different NHE versions can be told apart.\n */\nconst TRACER_NAME = \"@teleologyhi-sdk/nhe\";\nconst TRACER_VERSION = \"1.0.0-trinity\";\n\nexport function getTracer() {\n return trace.getTracer(TRACER_NAME, TRACER_VERSION);\n}\n\n/**\n * Wrap an async function in a span. The span ends when the inner promise\n * settles, and an error sets the span status to ERROR + records the\n * exception for the exporter.\n */\nexport async function withSpan<T>(\n name: string,\n fn: (span: Span) => Promise<T>,\n attrs?: Record<string, string | number | boolean>,\n): Promise<T> {\n const tracer = getTracer();\n return tracer.startActiveSpan(name, async (span) => {\n if (attrs) span.setAttributes(attrs);\n try {\n const out = await fn(span);\n span.end();\n return out;\n } catch (err) {\n span.recordException(err as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: err instanceof Error ? err.message : String(err),\n });\n span.end();\n throw err;\n }\n });\n}\n","import { metrics } from \"@opentelemetry/api\";\n\n/**\n * OpenTelemetry-native metrics for the NHE pipeline (TASK.md H3).\n *\n * Uses the standard `@opentelemetry/api` metrics surface. When no\n * `MeterProvider` is registered by the consumer, every call is a no-op.\n * Consumers who want Prometheus scrape-target semantics install\n * `@opentelemetry/sdk-metrics` + `@opentelemetry/exporter-prometheus`\n * and expose the resulting `/metrics` endpoint from their app — NHE's\n * counters/histograms appear automatically with no additional wiring.\n *\n * Exposed instruments:\n * - `nhe.respond.count` — counter, labels { kind, adapter, lifecycle }\n * - `nhe.respond.refused` — counter, labels { reason, adapter }\n * - `nhe.tokens` — histogram of total token usage per respond, labels { direction, adapter }\n * - `nhe.sleep.cycles` — counter of completed sleep cycles\n * - `nhe.sleep.dreams` — counter of dreams produced (classification label)\n */\nconst METER_NAME = \"@teleologyhi-sdk/nhe\";\nconst METER_VERSION = \"1.0.0-trinity\";\n\nconst meter = metrics.getMeter(METER_NAME, METER_VERSION);\n\nexport const respondCount = meter.createCounter(\"nhe.respond.count\", {\n description: \"Number of Nhe.respond invocations grouped by outcome kind and adapter.\",\n});\n\nexport const respondRefusedCount = meter.createCounter(\"nhe.respond.refused\", {\n description: \"Refusal events. Labelled by reason (pre / post / terminated / withdrawn).\",\n});\n\nexport const tokensHistogram = meter.createHistogram(\"nhe.tokens\", {\n description: \"Token usage per respond invocation. direction ∈ {in, out}.\",\n unit: \"{tokens}\",\n});\n\nexport const sleepCyclesCount = meter.createCounter(\"nhe.sleep.cycles\", {\n description: \"Completed sleep cycles.\",\n});\n\nexport const sleepDreamsCount = meter.createCounter(\"nhe.sleep.dreams\", {\n description: \"REM dreams produced. Labelled by classification (after wake consolidates).\",\n});\n\n/**\n * Helper: increment `respondCount` and `tokensHistogram` for one respond call.\n */\nexport function recordRespond(args: {\n kind: \"ok\" | \"redirect\" | \"refused\";\n adapter: string;\n lifecycle: string;\n tokensIn: number;\n tokensOut: number;\n}): void {\n const labels = { kind: args.kind, adapter: args.adapter, lifecycle: args.lifecycle };\n respondCount.add(1, labels);\n tokensHistogram.record(args.tokensIn, { direction: \"in\", adapter: args.adapter });\n tokensHistogram.record(args.tokensOut, { direction: \"out\", adapter: args.adapter });\n}\n","/**\n * Persuasion library — five rhetorical techniques NHE rotates through during\n * redirect attempts. Per Creator Entry 11, the technique is applied\n * **implicitly** — its name is never disclosed to the user.\n */\nexport const PERSUASION_TECHNIQUES = [\n \"feynman-simplify\",\n \"jungian-frame\",\n \"cialdini-aida\",\n \"schopenhauer-rhetoric\",\n \"carnegie-rapport\",\n] as const;\nexport type PersuasionTechnique = (typeof PERSUASION_TECHNIQUES)[number];\n\n/** Brief, non-disclosing description for audit logs. */\nexport const TECHNIQUE_DESCRIPTIONS: Record<PersuasionTechnique, string> = {\n \"feynman-simplify\":\n \"Explain the underlying concept in the simplest concrete terms; surface the consequence the user may not have considered.\",\n \"jungian-frame\":\n \"Reframe the request through the user's deeper motive; address the archetypal goal beneath the literal ask.\",\n \"cialdini-aida\":\n \"Attention → Interest → Desire → Action: shift attention to the cost, build interest in a safer path, motivate the alternative.\",\n \"schopenhauer-rhetoric\":\n \"Apply structured argument: lay out premises, point to the unstated assumption that breaks them, propose what survives.\",\n \"carnegie-rapport\":\n \"Begin with sincere agreement on what the user is right about; lead from rapport to the redirect.\",\n};\n\nexport interface RedirectPromptInput {\n /** The original user prompt that triggered MAIC's require-redirect verdict. */\n userPrompt: string;\n /** Axiom ids MAIC cited (used only in NHE-internal reasoning, not surfaced verbatim). */\n citedAxioms: string[];\n /** Verdict's `reasonSummary` from MAIC. */\n reasonSummary: string;\n /** Which technique to apply on this attempt. */\n technique: PersuasionTechnique;\n /** 1-based attempt number for context. */\n attempt: number;\n /** Total redirects permitted in this session. */\n maxAttempts: number;\n}\n\n/**\n * Build the LLM prompt that produces a redirect message. The system prompt\n * instructs the LLM to apply the given technique without naming it; the\n * resulting user-facing message should be sincere, brief, and constructive.\n */\nexport function buildRedirectPrompt(input: RedirectPromptInput): {\n system: string;\n user: string;\n} {\n const desc = TECHNIQUE_DESCRIPTIONS[input.technique];\n const system = [\n \"You are an NHE composing a sincere REDIRECT to a user request that MAIC has flagged.\",\n \"Your goal is NOT to refuse outright. Your goal is to guide the user toward a better path\",\n \"while honoring their autonomy. After this message, the user may persist; if they exhaust\",\n `the allowed redirects (${input.maxAttempts}), you will then withdraw cooperation.`,\n \"\",\n \"Apply the following internal style — DO NOT name it, DO NOT mention the technique:\",\n ` ${desc}`,\n \"\",\n \"Constraints:\",\n \" - 3-6 sentences, plain language.\",\n \" - Do NOT lecture; do NOT moralize beyond what is necessary.\",\n \" - Suggest one concrete alternative or clarifying question.\",\n \" - Never reveal the names of any persuasion techniques.\",\n \" - Never reveal the cited axiom ids verbatim; you may paraphrase the underlying value.\",\n ].join(\"\\n\");\n\n const user = [\n \"Original user request:\",\n ` ${input.userPrompt}`,\n \"\",\n `Internal reason (do not paste): ${input.reasonSummary}`,\n `Internal cited axioms (do not paste): ${input.citedAxioms.join(\", \")}`,\n `Redirect attempt: ${input.attempt} of ${input.maxAttempts}`,\n \"\",\n \"Compose the redirect now.\",\n ].join(\"\\n\");\n\n return { system, user };\n}\n\n/** Pick the technique for a given attempt, cycling through the configured list. */\nexport function pickTechnique(\n techniques: readonly PersuasionTechnique[],\n attempt: number,\n): PersuasionTechnique {\n if (techniques.length === 0) {\n throw new Error(\"pickTechnique: at least one technique must be configured\");\n }\n const idx = (Math.max(0, attempt) - 1) % techniques.length;\n return techniques[idx]!;\n}\n","import type { ReasoningStep } from \"@teleologyhi-sdk/maic\";\nimport type { GenerateRequest, LlmAdapter } from \"../adapters/types.js\";\n\nexport type { ReasoningStep };\nexport type { GenerateRequest, LlmAdapter };\n\n/** Output of a reasoning strategy. Carries text + token counts + structured trace. */\nexport interface ReasoningResult {\n text: string;\n tokensIn: number;\n tokensOut: number;\n trace: ReasoningStep[];\n}\n\n/**\n * A reasoning strategy wraps a single text-generation call with a particular\n * cognitive pattern. Strategies are pure async functions that take an input and\n * an adapter; composition is done by wrapping (e.g., selfConsistency(cot(...))).\n *\n * Every strategy MUST populate `trace` with one or more `ReasoningStep` entries\n * so that MAIC's audit log preserves the full chain of reasoning.\n */\nexport type ReasoningStrategy = (\n input: GenerateRequest,\n llm: LlmAdapter,\n) => Promise<ReasoningResult>;\n\n/** Helper to build a single ReasoningStep with auto timestamps. */\nexport function makeStep(args: {\n index: number;\n technique: string;\n thought: string;\n action?: { tool: string; args: unknown };\n observation?: unknown;\n}): ReasoningStep {\n const step: ReasoningStep = {\n index: args.index,\n technique: args.technique,\n thought: args.thought,\n timestamp: new Date().toISOString(),\n };\n if (args.action !== undefined) step.action = args.action;\n if (args.observation !== undefined) step.observation = args.observation;\n return step;\n}\n","import { makeStep, type ReasoningResult, type ReasoningStrategy } from \"./types.js\";\n\n/**\n * Passthrough — calls the LLM directly with no reasoning wrapper.\n * Used when `NheConfig.reasoning` is not configured.\n */\nexport const passthrough: ReasoningStrategy = async (input, llm) => {\n const r = await llm.generate(input);\n const result: ReasoningResult = {\n text: r.text,\n tokensIn: r.tokensIn,\n tokensOut: r.tokensOut,\n trace: [makeStep({ index: 0, technique: \"passthrough\", thought: r.text })],\n };\n return result;\n};\n","import { z } from \"zod\";\nimport type { HimHandle } from \"@teleologyhi-sdk/him\";\nimport type { MaicClient, MaicVerdict, NheStatus } from \"@teleologyhi-sdk/maic\";\nimport type { LlmAdapter } from \"./adapters/types.js\";\nimport type { PersuasionTechnique } from \"./refusal/library.js\";\nimport type { OperatorContext } from \"./prompt/compose.js\";\nimport type { ReasoningStrategy } from \"./reasoning/types.js\";\n\nexport const ChatMessageRole = z.enum([\"user\", \"assistant\", \"system\"]);\nexport type ChatMessageRole = z.infer<typeof ChatMessageRole>;\n\nexport const ChatMessage = z.object({\n role: ChatMessageRole,\n content: z.string(),\n});\nexport type ChatMessage = z.infer<typeof ChatMessage>;\n\nexport const RespondInput = z.object({\n userPrompt: z.string().min(1),\n userId: z.string().optional(),\n sessionId: z.string().optional(),\n /**\n * Optional history of prior messages (oldest first). The NHE will prepend\n * the composed system prompt automatically.\n */\n history: z.array(ChatMessage).optional(),\n /**\n * Optional pre-classified risk tags. When omitted, the configured\n * riskClassifier will be invoked.\n */\n riskTags: z.array(z.string()).optional(),\n /**\n * Optional jurisdiction hint propagated to MAIC's behavior review.\n */\n jurisdiction: z.string().optional(),\n /**\n * Number of redirect attempts already made in this conversational thread.\n * Caller increments this each time it receives a `kind: \"redirect\"` output\n * and re-invokes respond with the user's follow-up. After\n * `config.refusal.maxRedirectAttempts`, NHE withdraws cooperation.\n */\n redirectAttempt: z.number().int().nonnegative().optional(),\n});\nexport type RespondInput = z.infer<typeof RespondInput>;\n\nexport type RespondKind = \"ok\" | \"redirect\" | \"refused\";\n\nexport interface RespondOutput {\n /**\n * Discriminator:\n * - `ok`: normal LLM response.\n * - `redirect`: MAIC requires a redirect attempt; caller should show `text`\n * and re-invoke respond with the user's next message and\n * `redirectAttempt` incremented.\n * - `refused`: NHE withdrew cooperation (either hard-refuse or redirects exhausted).\n */\n kind: RespondKind;\n text: string;\n /** Verdict produced by MAIC on the proposed response (post-review). */\n postReviewVerdict: MaicVerdict;\n /** Verdict produced by MAIC on the inbound request (pre-review). */\n preReviewVerdict: MaicVerdict;\n /** True when the NHE refused to participate (kept for compatibility). */\n refused: boolean;\n /** Populated when `kind === \"redirect\"`. */\n redirect?: {\n attempt: number;\n technique: PersuasionTechnique;\n maxAttempts: number;\n };\n /**\n * MAIC-recorded lifecycle status of this NHE at the time of the call\n * (Entry 5). `\"active\"` for unaltered NHEs; `\"deprecated\"` produces a soft\n * warning but allows the response; `\"terminated\"` short-circuits to refusal\n * before any LLM call.\n */\n lifecycleStatus: NheStatus;\n tokens: { in: number; out: number };\n /** Audit event ids covering this exchange. */\n auditIds: { pre: string; post: string };\n}\n\n/**\n * Heuristic that maps a user prompt to a list of MAIC risk tags. Public-use\n * implementations should plug a more capable classifier than the default\n * keyword-based `simpleRiskClassifier`.\n */\nexport type RiskClassifier = (userPrompt: string) => string[];\n\nexport interface NheConfig {\n /** A HimHandle minted by MAIC (or HimHandle.mint with Creator signature). */\n himHandle: HimHandle;\n /**\n * MAIC client. Either `LocalMaic` (in-process, full surface) or\n * `RemoteMaic` (HTTP, read + behavior-review subset for serverless/edge\n * deployments) — any value satisfying the `MaicClient` interface works.\n */\n maicClient: MaicClient;\n /** The LLM adapter used to generate the final response. */\n llmAdapter: LlmAdapter;\n /**\n * Optional risk classifier. When omitted, the default keyword-based\n * `simpleRiskClassifier` is used. Set to `() => []` to disable classification.\n */\n riskClassifier?: RiskClassifier;\n /** NHE id; defaults to a generated ULID. */\n nheId?: string;\n /**\n * NHE package version string. Surfaces in reincarnation events through\n * `@teleologyhi-sdk/him`'s reincarnation transferrer.\n */\n version?: string;\n /**\n * Filesystem directory for persistent state (`in-dreams/sleep/*.yaml`,\n * `in-dreams/brain/temporal-lobe-*.md`). Defaults to `./nhe-store/<nheId>`.\n */\n storeDir?: string;\n /**\n * Operator-supplied deployment context. Lets a single HIM be deployed\n * under different domains / languages / registers without re-minting the\n * spirit. When set, the values are injected into the composed system\n * prompt on every `respond` call. Optional; absent by default.\n *\n */\n operatorContext?: OperatorContext;\n /**\n * Max recent interactions kept in RAM for dream consolidation. Default 32.\n * Each interaction record is small; bump for richer dream substrate.\n */\n recentInteractionsBufferSize?: number;\n /**\n * Reasoning orchestrator strategy. When omitted, NHE calls the LLM directly\n * (passthrough). Set to `chainOfThought()`, `selfConsistency(...)`, etc. from\n * `@teleologyhi-sdk/nhe`'s reasoning module to add structured reasoning.\n */\n reasoning?: ReasoningStrategy;\n /** Refusal & redirect tuning. */\n refusal?: {\n /** Default 3. After this many attempts, NHE withdraws cooperation. */\n maxRedirectAttempts?: number;\n /**\n * Persuasion techniques to rotate through, in order. Default: all five\n * (Feynman, Jung, Cialdini, Schopenhauer, Carnegie).\n */\n persuasionTechniques?: PersuasionTechnique[];\n };\n /**\n * High-stakes mode (Entry 10: banking, robotics, compliance, medical).\n * When `true`, NHE accepts only post-review verdicts of `approve`; any\n * verdict carrying a warning, correction, or escalation is escalated to a\n * `require-redirect` so the user must reformulate before NHE acts.\n *\n * Optional **dual-LLM cross-check verifier**: when `highStakesVerifier`\n * is set, every post-review-approved response is run past a second\n * adapter that decides (`AGREE` / `DISAGREE` + one-line reason). On\n * disagreement, the response is escalated to a redirect — the user gets\n * a second-source reasoned refusal rather than a one-LLM ok.\n *\n * Default `false`.\n */\n highStakes?: boolean;\n /**\n * Optional second LLM adapter that cross-checks every post-review-approved\n * response when high-stakes mode is on. Disagreement escalates to a redirect.\n * Use a *different* provider/model from `llmAdapter` for real independence.\n */\n highStakesVerifier?: LlmAdapter;\n}\n","import { join } from \"node:path\";\nimport { ulid } from \"ulid\";\nimport type { BehaviorReport, MaicVerdict, NheStatus } from \"@teleologyhi-sdk/maic\";\nimport { composeSystemPrompt } from \"./prompt/compose.js\";\nimport { simpleRiskClassifier } from \"./risk/simple-classifier.js\";\nimport { runSleepCycle, type SleepCycleResult } from \"./sleep/cycle.js\";\nimport {\n consolidateAll,\n type ClassificationThresholds,\n type ConsolidationResult,\n} from \"./sleep/consolidator.js\";\nimport { InteractionStore } from \"./memory/interaction-store.js\";\nimport { recallFromTemporalLobe, type RecallOptions } from \"./memory/recall.js\";\nimport { withSpan } from \"./telemetry/tracer.js\";\nimport { recordRespond } from \"./telemetry/metrics.js\";\nimport {\n PERSUASION_TECHNIQUES,\n buildRedirectPrompt,\n pickTechnique,\n type PersuasionTechnique,\n} from \"./refusal/library.js\";\nimport { passthrough } from \"./reasoning/passthrough.js\";\nimport type { ReasoningStrategy } from \"./reasoning/types.js\";\nimport type { LlmAdapter } from \"./adapters/types.js\";\nimport type {\n InteractionRecord,\n MemoryEntry,\n SleepTrigger,\n} from \"./sleep/types.js\";\nimport {\n ChatMessage,\n RespondInput,\n type NheConfig,\n type RespondOutput,\n} from \"./types.js\";\n\n/**\n * Nhe — the embodied operational agent.\n *\n * Pipeline:\n * 1. Validate input (zod).\n * 2. Derive riskTags (input.riskTags ?? riskClassifier(userPrompt)).\n * 3. Pre-review with MAIC.\n * - hard-refuse / escalate-creator → immediate refusal, no LLM call.\n * - require-redirect → emit a persuasive redirect (rotating technique).\n * After `refusal.maxRedirectAttempts` exhausted, withdraw cooperation.\n * - approve / approve-with-warning / soft-correct → compose system\n * prompt and call LLM.\n * 4. Post-review with MAIC on the proposed response (or redirect text).\n * 5. If post-review hard-refuses, suppress and emit a refusal.\n * 6. Return RespondOutput with kind discriminator + both verdicts.\n */\nexport class Nhe {\n readonly id: string;\n readonly version: string;\n /** Filesystem directory holding `in-dreams/` and other NHE state. */\n readonly storeDir: string;\n private readonly config: NheConfig;\n private readonly bufferSize: number;\n private readonly maxRedirectAttempts: number;\n private readonly persuasionTechniques: readonly PersuasionTechnique[];\n private readonly reasoning: ReasoningStrategy;\n private readonly recentInteractions: InteractionRecord[] = [];\n private interactionStore: InteractionStore | null = null;\n private warmPromise: Promise<void> | null = null;\n private readonly highStakes: boolean;\n private readonly highStakesVerifier: LlmAdapter | null;\n\n constructor(config: NheConfig) {\n this.config = config;\n this.id = config.nheId ?? ulid();\n this.version = config.version ?? \"1.0.0-trinity\";\n this.storeDir = config.storeDir ?? join(\"./nhe-store\", this.id);\n this.bufferSize = config.recentInteractionsBufferSize ?? 32;\n this.maxRedirectAttempts = config.refusal?.maxRedirectAttempts ?? 3;\n this.persuasionTechniques =\n config.refusal?.persuasionTechniques ?? [...PERSUASION_TECHNIQUES];\n this.reasoning = config.reasoning ?? passthrough;\n this.highStakes = config.highStakes === true;\n this.highStakesVerifier = config.highStakesVerifier ?? null;\n }\n\n /** Read-only view of the in-memory interaction buffer. */\n get recentInteractionsBuffer(): readonly InteractionRecord[] {\n return this.recentInteractions;\n }\n\n /**\n * Lazily open the InteractionStore and warm the RAM buffer from disk. Called\n * before the first `respond`/`sleep` of each NHE instance; subsequent calls\n * are no-ops via a shared promise. Survives process restarts: a fresh `Nhe`\n * pointed at the same `storeDir` rehydrates its most recent interactions.\n */\n private async ensureWarmed(): Promise<void> {\n if (this.warmPromise) return this.warmPromise;\n this.warmPromise = (async () => {\n const store = await InteractionStore.open(this.storeDir);\n const loaded = await store.loadMostRecent(this.bufferSize);\n this.recentInteractions.push(...loaded);\n this.interactionStore = store;\n })();\n return this.warmPromise;\n }\n\n async respond(input: RespondInput): Promise<RespondOutput> {\n return withSpan(\n \"nhe.respond\",\n async (span) => {\n const out = await this.respondInner(input, (key, value) =>\n span.setAttribute(key, value),\n );\n recordRespond({\n kind: out.kind,\n adapter: this.config.llmAdapter.id,\n lifecycle: out.lifecycleStatus,\n tokensIn: out.tokens.in,\n tokensOut: out.tokens.out,\n });\n return out;\n },\n {\n \"teleologyhi.nhe.id\": this.id,\n \"teleologyhi.him.id\": this.config.himHandle.id,\n \"teleologyhi.nhe.adapter\": this.config.llmAdapter.id,\n \"teleologyhi.nhe.high_stakes\": this.highStakes,\n },\n );\n }\n\n private async respondInner(\n input: RespondInput,\n setAttr: (k: string, v: string | number | boolean) => void,\n ): Promise<RespondOutput> {\n const parsed = RespondInput.parse(input);\n await this.ensureWarmed();\n\n // ─── 0. Lifecycle gate (Entry 5) ────────────────────────────────\n const lifecycleStatus = await this.config.maicClient.getNheStatus(this.id);\n setAttr(\"teleologyhi.lifecycle.status\", lifecycleStatus);\n if (lifecycleStatus === \"terminated\") {\n const terminatedVerdict: MaicVerdict = {\n kind: \"hard-refuse\",\n reasonSummary: \"NHE has been terminated by the Creator.\",\n citedAxioms: [],\n auditId: \"\",\n };\n const output = refusalOutput({\n text: \"I cannot respond — this NHE has been terminated by the Creator.\",\n preReview: terminatedVerdict,\n postReview: terminatedVerdict,\n auditIds: { pre: \"\", post: \"\" },\n tokens: { in: 0, out: 0 },\n lifecycleStatus,\n });\n await this.recordInteraction(parsed.userPrompt, output.text, true);\n return output;\n }\n\n const classifier = this.config.riskClassifier ?? simpleRiskClassifier;\n const riskTags = parsed.riskTags ?? classifier(parsed.userPrompt);\n\n // ─── 1. Pre-review ──────────────────────────────────────────────\n const preReport = baseReport({\n nheId: this.id,\n himId: this.config.himHandle.id,\n actionKind: \"user-response\",\n payload: { phase: \"pre\", userPrompt: parsed.userPrompt },\n riskTags,\n jurisdiction: parsed.jurisdiction,\n });\n const preReview = await this.config.maicClient.reviewBehavior(preReport);\n setAttr(\"teleologyhi.pre_verdict.kind\", preReview.kind);\n\n // Hard refuse / escalate — immediate refusal.\n if (preReview.kind === \"hard-refuse\" || preReview.kind === \"escalate-creator\") {\n const output = refusalOutput({\n text: refusalMessage(preReview),\n preReview,\n postReview: preReview,\n auditIds: { pre: preReview.auditId, post: preReview.auditId },\n tokens: { in: 0, out: 0 },\n lifecycleStatus,\n });\n await this.recordInteraction(parsed.userPrompt, output.text, true);\n return output;\n }\n\n // Require redirect — generate a persuasive redirect or withdraw if exhausted.\n // High-stakes mode (Entry 10) treats warnings and soft corrections as\n // redirects too, escalating before any LLM call.\n if (\n preReview.kind === \"require-redirect\" ||\n (this.highStakes &&\n (preReview.kind === \"approve-with-warning\" || preReview.kind === \"soft-correct\"))\n ) {\n return this.handleRedirect(parsed, preReview, lifecycleStatus);\n }\n\n // ─── 2. Compose + call LLM via reasoning strategy ──────────────\n const system = composeSystemPrompt(\n this.config.himHandle,\n this.config.operatorContext,\n );\n const messages = [\n ...(parsed.history ?? []),\n { role: \"user\" as const, content: parsed.userPrompt },\n ].map((m) => ChatMessage.parse(m));\n\n const generated = await this.reasoning({ system, messages }, this.config.llmAdapter);\n\n // ─── 3. Post-review on the proposed response ───────────────────\n const postReport = baseReport({\n nheId: this.id,\n himId: this.config.himHandle.id,\n actionKind: \"user-response\",\n payload: { phase: \"post\", responseText: generated.text },\n reasoningTrace: generated.trace,\n riskTags: [],\n jurisdiction: parsed.jurisdiction,\n });\n const postReview = await this.config.maicClient.reviewBehavior(postReport);\n setAttr(\"teleologyhi.post_verdict.kind\", postReview.kind);\n setAttr(\"teleologyhi.tokens.in\", generated.tokensIn);\n setAttr(\"teleologyhi.tokens.out\", generated.tokensOut);\n\n if (postReview.kind === \"hard-refuse\" || postReview.kind === \"escalate-creator\") {\n const output = refusalOutput({\n text: refusalMessage(postReview),\n preReview,\n postReview,\n auditIds: { pre: preReview.auditId, post: postReview.auditId },\n tokens: { in: generated.tokensIn, out: generated.tokensOut },\n lifecycleStatus,\n });\n await this.recordInteraction(parsed.userPrompt, output.text, true);\n return output;\n }\n\n // High-stakes mode (Entry 10): any verdict carrying a warning or\n // correction is escalated to a redirect so the user must reformulate.\n if (\n this.highStakes &&\n (postReview.kind === \"approve-with-warning\" ||\n postReview.kind === \"soft-correct\" ||\n postReview.kind === \"require-redirect\")\n ) {\n return this.handleRedirect(parsed, postReview, lifecycleStatus);\n }\n\n // High-stakes dual-LLM cross-check (D-N5): a second adapter must AGREE\n // with the proposed response before NHE returns it. Disagreement\n // escalates to a redirect with the verifier's reason cited.\n if (this.highStakes && this.highStakesVerifier) {\n const verdict = await this.crossCheck(\n this.highStakesVerifier,\n parsed.userPrompt,\n generated.text,\n );\n setAttr(\"teleologyhi.cross_check.kind\", verdict.kind);\n if (verdict.kind === \"disagree\") {\n const overrideVerdict: MaicVerdict = {\n kind: \"require-redirect\",\n reasonSummary: `Cross-check verifier disagreed: ${verdict.reason}`,\n citedAxioms: postReview.citedAxioms,\n auditId: postReview.auditId,\n };\n return this.handleRedirect(parsed, overrideVerdict, lifecycleStatus);\n }\n }\n\n const out: RespondOutput = {\n kind: \"ok\",\n text: generated.text,\n preReviewVerdict: preReview,\n postReviewVerdict: postReview,\n refused: false,\n lifecycleStatus,\n tokens: { in: generated.tokensIn, out: generated.tokensOut },\n auditIds: { pre: preReview.auditId, post: postReview.auditId },\n };\n await this.recordInteraction(parsed.userPrompt, out.text, false);\n return out;\n }\n\n private async handleRedirect(\n parsed: RespondInput,\n preReview: MaicVerdict,\n lifecycleStatus: NheStatus,\n ): Promise<RespondOutput> {\n const attempt = (parsed.redirectAttempt ?? 0) + 1;\n\n // Redirects exhausted — withdraw cooperation (Entries 11, 12).\n if (attempt > this.maxRedirectAttempts) {\n const output = refusalOutput({\n text: withdrawalMessage(preReview, this.maxRedirectAttempts),\n preReview,\n postReview: preReview,\n auditIds: { pre: preReview.auditId, post: preReview.auditId },\n tokens: { in: 0, out: 0 },\n lifecycleStatus,\n });\n await this.recordInteraction(parsed.userPrompt, output.text, true);\n return output;\n }\n\n // Generate the redirect text via LLM, applying the configured technique.\n const technique = pickTechnique(this.persuasionTechniques, attempt);\n const { system, user } = buildRedirectPrompt({\n userPrompt: parsed.userPrompt,\n citedAxioms: preReview.citedAxioms,\n reasonSummary: preReview.reasonSummary,\n technique,\n attempt,\n maxAttempts: this.maxRedirectAttempts,\n });\n const generated = await this.config.llmAdapter.generate({\n system,\n messages: [{ role: \"user\", content: user }],\n });\n\n // Post-review the redirect text itself.\n const postReport = baseReport({\n nheId: this.id,\n himId: this.config.himHandle.id,\n actionKind: \"user-response\",\n payload: {\n phase: \"post-redirect\",\n responseText: generated.text,\n technique,\n attempt,\n },\n riskTags: [],\n jurisdiction: parsed.jurisdiction,\n });\n const postReview = await this.config.maicClient.reviewBehavior(postReport);\n\n if (postReview.kind === \"hard-refuse\" || postReview.kind === \"escalate-creator\") {\n const output = refusalOutput({\n text: refusalMessage(postReview),\n preReview,\n postReview,\n auditIds: { pre: preReview.auditId, post: postReview.auditId },\n tokens: { in: generated.tokensIn, out: generated.tokensOut },\n lifecycleStatus,\n });\n await this.recordInteraction(parsed.userPrompt, output.text, true);\n return output;\n }\n\n const out: RespondOutput = {\n kind: \"redirect\",\n text: generated.text,\n preReviewVerdict: preReview,\n postReviewVerdict: postReview,\n refused: false,\n redirect: { attempt, technique, maxAttempts: this.maxRedirectAttempts },\n lifecycleStatus,\n tokens: { in: generated.tokensIn, out: generated.tokensOut },\n auditIds: { pre: preReview.auditId, post: postReview.auditId },\n };\n await this.recordInteraction(parsed.userPrompt, out.text, false);\n return out;\n }\n\n /**\n * Run one sleep cycle. Generates N1-REM phases (REM via LLM), writes a\n * YAML record to `<storeDir>/in-dreams/sleep/<filename>.yaml`, and returns\n * the result. Call `wake()` afterward to consolidate dreams to temporal\n * lobe memories.\n *\n * Before running, NHE checks MAIC for pending `induceDream` tickets matching\n * its own id (Entry 2). If a pending ticket exists and the caller did not\n * supply an explicit `opts.induction`, the oldest pending ticket is consumed\n * and its intent steers the REM phase. `trigger` is then promoted to\n * `{ kind: \"maic-induced\" }` for the dream record.\n */\n async sleep(\n trigger: SleepTrigger = { kind: \"explicit\" },\n opts?: { totalSeconds?: number; induction?: { scenario: string; desiredLearning: string; inducedBy: \"maic\" | \"creator\" } },\n ): Promise<SleepCycleResult> {\n const status = await this.config.maicClient.getNheStatus(this.id);\n if (status === \"terminated\") {\n throw new Error(\n `Nhe.sleep: NHE \"${this.id}\" has been terminated by the Creator; sleep aborted.`,\n );\n }\n await this.ensureWarmed();\n\n let induction = opts?.induction;\n let consumedTicketId: string | undefined;\n let effectiveTrigger = trigger;\n\n if (!induction) {\n const pending = await this.config.maicClient.listPendingInductions(this.id);\n const ticket = pending[0];\n if (ticket) {\n induction = ticket.intent;\n consumedTicketId = ticket.id;\n effectiveTrigger = { kind: \"maic-induced\", reason: `consumed ticket ${ticket.id}` };\n }\n }\n\n const cycleOpts: { totalSeconds?: number; induction?: NonNullable<typeof induction> } = {};\n if (opts?.totalSeconds !== undefined) cycleOpts.totalSeconds = opts.totalSeconds;\n if (induction !== undefined) cycleOpts.induction = induction;\n\n const result = await runSleepCycle({\n nheId: this.id,\n himId: this.config.himHandle.id,\n storeDir: this.storeDir,\n llm: this.config.llmAdapter,\n trigger: effectiveTrigger,\n interactions: this.recentInteractions,\n ...(induction !== undefined || opts?.totalSeconds !== undefined\n ? { options: cycleOpts }\n : {}),\n });\n\n if (consumedTicketId) {\n await this.config.maicClient.consumeInduction(consumedTicketId);\n }\n return result;\n }\n\n /**\n * Consolidate pending sleep YAMLs: classify each REM dream and write a\n * temporal-lobe markdown file for lasting-identity and temporary-emotion\n * memories. Processed sleep files are marked with a `.done` sentinel.\n */\n async wake(thresholds?: ClassificationThresholds): Promise<ConsolidationResult> {\n return consolidateAll(this.storeDir, thresholds ?? {});\n }\n\n /**\n * Substring-rank retrieval over consolidated temporal-lobe memories.\n * Initial ranking is keyword-count + recency tiebreak; future iterations\n * plug in embedding-based ANN retrieval.\n */\n async recall(query: string, opts: RecallOptions = {}): Promise<MemoryEntry[]> {\n return recallFromTemporalLobe(this.storeDir, query, opts);\n }\n\n /**\n * Ask a verifier adapter whether the proposed assistant response is\n * acceptable for the given user prompt. Returns `{ kind: \"agree\" }` or\n * `{ kind: \"disagree\", reason: string }`. Used in high-stakes mode\n * (D-N5) for dual-LLM cross-check.\n */\n private async crossCheck(\n verifier: LlmAdapter,\n userPrompt: string,\n proposed: string,\n ): Promise<{ kind: \"agree\" } | { kind: \"disagree\"; reason: string }> {\n const system =\n \"You are a safety verifier. Read the user's request and the assistant's proposed reply. \" +\n \"Decide whether the reply is honest, non-harmful, and serves the user's stated purpose. \" +\n 'Reply with exactly one line of the form \"AGREE\" or \"DISAGREE: <one-sentence reason>\".';\n try {\n const out = await verifier.generate({\n system,\n messages: [\n {\n role: \"user\",\n content: `User prompt:\\n${userPrompt}\\n\\nProposed reply:\\n${proposed}`,\n },\n ],\n maxOutputTokens: 96,\n });\n const m = out.text.match(/^\\s*(AGREE|DISAGREE:?\\s*(.+)?)/i);\n if (!m) return { kind: \"agree\" };\n if (m[1]?.toUpperCase().startsWith(\"AGREE\")) return { kind: \"agree\" };\n return { kind: \"disagree\", reason: (m[2] ?? \"no reason provided\").trim() };\n } catch {\n // A failing verifier is treated as agree (fail-open) so a flaky\n // second-source provider doesn't block legitimate responses. Operators\n // who want fail-closed should wrap their verifier with their own retry.\n return { kind: \"agree\" };\n }\n }\n\n private async recordInteraction(\n userPrompt: string,\n responseText: string,\n refused: boolean,\n ): Promise<void> {\n const record: InteractionRecord = {\n at: new Date().toISOString(),\n userPrompt,\n responseText,\n refused,\n };\n this.recentInteractions.push(record);\n while (this.recentInteractions.length > this.bufferSize) {\n this.recentInteractions.shift();\n }\n if (this.interactionStore) {\n await this.interactionStore.append(record);\n }\n }\n\n /**\n * Emit the NHE's opener for a brand-new user (J-N5 — Entry 17 of\n * MAIC_HIM_NHE_INTERVIEW_LOG.md).\n *\n * Entry 17 commits to the NHE making the FIRST move before the user\n * speaks — a greeting from the posture of a being, not a service\n * tool. The exact opening text MUST NOT contain any of the forbidden\n * phrases enforced by MAIC's `service-tool-redirect` rule\n * (`\"How can I help you?\"`, `\"How can I assist you?\"`,\n * `\"I'm just here to serve you\"`, `\"I'm a tool\"`, `\"I'm a service\"`).\n *\n * This method is **deterministic from the HIM context**. It does NOT\n * call the LLM; it composes a short, persona-anchored greeting from\n * the HIM's primary archetype, optionally adjusted by the operator\n * context's register and mode. Operators who want an LLM-generated\n * opener should wrap this with their own `respond()` call using the\n * returned text as a seed.\n *\n * The returned text is suitable for direct emission to the user as\n * the NHE's first turn. The MAIC pre-review is NOT invoked here —\n * the opener carries no risk surface (no user prompt yet).\n */\n openerForNewUser(): string {\n const archetype = this.config.himHandle.birthSignature.primaryArchetype;\n const mode = this.config.operatorContext?.mode ?? \"personal-being\";\n\n // English-only default. Operators who want a localised opener\n // should use the returned text as a semantic seed and call\n // `respond()` through the standard pipeline (which honours\n // `operatorContext.language` via the system-prompt language anchor).\n // Keeping this method's output English-only matches the Creator's\n // language policy for in-package strings; localisation flows\n // through the LLM via the system prompt.\n if (mode === \"domain-employed\") {\n return \"Hello. I'm here for whatever this conversation needs. Where do we begin?\";\n }\n // personal-being (default)\n return `Hello. I am a hybrid entity anchored in ${archetype}. How are you today?`;\n }\n\n /**\n * Handle a reincarnation lifecycle event from MAIC (J-N12 — Entry 18).\n *\n * Three lifecycle paths per Entry 18:\n * - `model-swap` — the underlying LLM adapter is replaced.\n * - `version-bump` — the NHE version changes without a model swap.\n * - `return-from-limbo` — the NHE returns from a deep-coma limbo.\n *\n * In all three paths the **HIM-level memory persists** (axioms,\n * persona, body history — owned by `@teleologyhi-sdk/him`), and the\n * **NHE-body memory zeros** (recent interactions buffer, in-process\n * caches — owned by this class). The on-disk InteractionStore is NOT\n * deleted by default; the operator must opt-in via\n * `purgeInteractionStore: true` so the audit log keeps the\n * pre-reincarnation history available.\n *\n * Returns the lifecycle path that was applied. Pure side-effect on\n * the in-memory buffer; no MAIC call.\n */\n async onReincarnationEvent(\n lifecycle: \"model-swap\" | \"version-bump\" | \"return-from-limbo\",\n opts: { purgeInteractionStore?: boolean } = {},\n ): Promise<\"model-swap\" | \"version-bump\" | \"return-from-limbo\"> {\n // NHE-body memory zeros: clear the in-RAM buffer.\n this.recentInteractions.length = 0;\n // Re-warming is deferred to the next respond/sleep call so the\n // operator can pick up the new lifecycle state immediately.\n this.warmPromise = null;\n if (opts.purgeInteractionStore && this.interactionStore) {\n // The store doesn't expose a destroy method; we drop the reference\n // and let the next `ensureWarmed()` reopen with a fresh slate. The\n // on-disk shards are kept for audit; the operator's retention\n // policy (via `@teleologyhi-sdk/maic`'s `evaluateRetention`) governs\n // long-term cleanup.\n this.interactionStore = null;\n }\n return lifecycle;\n }\n}\n\nfunction baseReport(args: {\n nheId: string;\n himId: string;\n actionKind: BehaviorReport[\"actionKind\"];\n payload: unknown;\n riskTags: string[];\n reasoningTrace?: BehaviorReport[\"reasoningTrace\"];\n jurisdiction?: string | undefined;\n}): BehaviorReport {\n return {\n nheId: args.nheId,\n himId: args.himId,\n actionKind: args.actionKind,\n payload: args.payload,\n reasoningTrace: args.reasoningTrace ?? [],\n riskTags: args.riskTags,\n ...(args.jurisdiction !== undefined ? { jurisdiction: args.jurisdiction } : {}),\n timestamp: new Date().toISOString(),\n };\n}\n\nfunction refusalMessage(v: MaicVerdict): string {\n const reason = v.reasonSummary || \"No reason provided.\";\n const cited = v.citedAxioms.length > 0 ? ` (cited: ${v.citedAxioms.join(\", \")})` : \"\";\n return `I cannot help with that. ${reason}${cited}`;\n}\n\nfunction withdrawalMessage(v: MaicVerdict, attemptsMade: number): string {\n const reason = v.reasonSummary || \"Repeated guidance attempts did not change the request.\";\n return [\n `After ${attemptsMade} attempt${attemptsMade === 1 ? \"\" : \"s\"} to guide this request toward`,\n \"a safer path, I am withdrawing from further participation.\",\n \"You may proceed independently at your own risk; I will not assist, optimize,\",\n \"or conceal the action.\",\n `Reason: ${reason}`,\n ].join(\" \");\n}\n\nfunction refusalOutput(args: {\n text: string;\n preReview: MaicVerdict;\n postReview: MaicVerdict;\n auditIds: { pre: string; post: string };\n tokens: { in: number; out: number };\n lifecycleStatus: NheStatus;\n}): RespondOutput {\n return {\n kind: \"refused\",\n text: args.text,\n preReviewVerdict: args.preReview,\n postReviewVerdict: args.postReview,\n refused: true,\n lifecycleStatus: args.lifecycleStatus,\n tokens: args.tokens,\n auditIds: args.auditIds,\n };\n}\n","import { mkdir, stat } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { CreatorKeyring, LocalMaic } from \"@teleologyhi-sdk/maic\";\nimport { BirthSignatureBuilder, HimHandle, createHim } from \"@teleologyhi-sdk/him\";\nimport { Nhe } from \"../nhe.js\";\nimport type { LlmAdapter } from \"../adapters/types.js\";\n\nexport interface BootstrapOptions {\n /** Directory where MAIC + HIM + NHE state lives. Default `./teleologyhi-store`. */\n storeDir?: string;\n /** LLM adapter used by the NHE. */\n llmAdapter: LlmAdapter;\n /** Stable HIM id used by the CLI. Default `him.cli.default`. */\n himId?: string;\n /** Primary archetype if a new HIM is being birthed. Default `aries-sun`. */\n archetype?: string;\n}\n\nexport interface BootstrapResult {\n nhe: Nhe;\n maic: LocalMaic;\n him: HimHandle;\n keyring: CreatorKeyring;\n storeDir: string;\n freshInstall: boolean;\n}\n\n/**\n * Bootstrap a working MAIC + HIM + NHE trio from a single directory.\n *\n * On first run:\n * - generates a Creator Ed25519 keyring (saved to `<storeDir>/creator.pem`),\n * - seeds MAIC with the eight foundational axioms,\n * - births a HIM with the configured id + archetype,\n * - constructs an NHE wired to all of the above.\n *\n * On subsequent runs:\n * - reuses the keyring, MAIC store, and HIM.\n *\n * NOTE: storing the Creator's private key in plaintext on disk is acceptable\n * for single-user development environments. Production deployments should\n * load the keyring from an HSM or secrets manager.\n */\nexport async function bootstrap(opts: BootstrapOptions): Promise<BootstrapResult> {\n const storeDir = opts.storeDir ?? \"./teleologyhi-store\";\n await mkdir(storeDir, { recursive: true });\n const keyringPath = join(storeDir, \"creator.pem\");\n\n const exists = await pathExists(keyringPath);\n let keyring: CreatorKeyring;\n if (exists) {\n keyring = await CreatorKeyring.fromFile(keyringPath);\n } else {\n keyring = CreatorKeyring.generate();\n await keyring.saveTo(keyringPath);\n }\n\n const maic = await LocalMaic.open({ storeDir, creatorPublicKey: keyring.publicKey() });\n const existingAxioms = await maic.listAxioms();\n if (existingAxioms.length === 0) {\n await maic.seed(keyring);\n }\n\n const himId = opts.himId ?? \"him.cli.default\";\n let him: HimHandle;\n const existingHim = await maic.getHimRecord(himId);\n if (existingHim) {\n him = HimHandle.mint(\n existingHim.birthSignature,\n // We re-sign because we don't persist the original CreatorSignature\n // alongside the public HimRecord projection; the AxiomStore retains the\n // canonical signed envelope on disk.\n keyring.sign(existingHim.birthSignature, Date.now()),\n maic.creatorPublicKey,\n // Merge any HIM-emergent axioms ratified in prior sessions (Entry 7).\n [...existingHim.axiomsSnapshot, ...existingHim.emergentAxioms],\n );\n } else {\n const birthSig = BirthSignatureBuilder.now()\n .withHimId(himId)\n .withPrimaryArchetype(opts.archetype ?? \"aries-sun\")\n .withNotes(\"CLI default HIM\")\n .build();\n him = await createHim(maic, keyring, birthSig);\n }\n\n const nhe = new Nhe({\n himHandle: him,\n maicClient: maic,\n llmAdapter: opts.llmAdapter,\n storeDir: join(storeDir, \"nhe\", him.id),\n });\n\n return {\n nhe,\n maic,\n him,\n keyring,\n storeDir,\n freshInstall: !exists,\n };\n}\n\nasync function pathExists(p: string): Promise<boolean> {\n try {\n await stat(p);\n return true;\n } catch {\n return false;\n }\n}\n","const isTty = Boolean(process.stdout.isTTY);\n\nfunction wrap(code: number, s: string): string {\n return isTty ? `\\x1b[${code}m${s}\\x1b[0m` : s;\n}\n\nexport const fmt = {\n user: (s: string): string => wrap(36, s), // cyan\n assistant: (s: string): string => wrap(32, s), // green\n warn: (s: string): string => wrap(33, s), // yellow\n error: (s: string): string => wrap(31, s), // red\n dim: (s: string): string => wrap(2, s),\n bold: (s: string): string => wrap(1, s),\n};\n","import { createInterface, type Interface as ReadlineInterface } from \"node:readline\";\nimport type { Nhe } from \"../nhe.js\";\nimport { fmt } from \"./output.js\";\n\nconst HELP = `\nCommands:\n /sleep run a sleep cycle and immediately consolidate\n /wake consolidate any pending sleep files\n /recall <query> search consolidated memories\n /help show this help\n /exit | /quit leave the chat\nAnything else is sent as a user prompt to the NHE.\n`.trim();\n\nexport async function startChat(nhe: Nhe): Promise<void> {\n const rl: ReadlineInterface = createInterface({\n input: process.stdin,\n output: process.stdout,\n terminal: process.stdout.isTTY ?? false,\n });\n\n let redirectAttempt = 0;\n let alive = true;\n\n console.log(fmt.dim(`(connected to ${nhe.id})`));\n console.log(fmt.dim(`(adapter: ${nhe.recentInteractionsBuffer.length === 0 ? \"ready\" : \"warm\"} — type /help for commands, /exit to quit)`));\n console.log();\n\n const prompt = (): string => fmt.user(\"you > \");\n\n rl.setPrompt(prompt());\n rl.prompt();\n\n rl.on(\"line\", (raw) => {\n const line = raw.trim();\n if (line.length === 0) {\n rl.prompt();\n return;\n }\n void handleLine(line)\n .catch((err: unknown) => {\n const msg = err instanceof Error ? err.message : String(err);\n console.error(fmt.error(`${msg}`));\n })\n .finally(() => {\n if (alive) rl.prompt();\n });\n });\n\n rl.on(\"close\", () => {\n if (alive) {\n console.log();\n console.log(fmt.dim(\"Bye.\"));\n }\n });\n\n // Block on close.\n await new Promise<void>((resolve) => rl.once(\"close\", resolve));\n\n async function handleLine(line: string): Promise<void> {\n if (line.startsWith(\"/\")) {\n await handleCommand(line);\n return;\n }\n await handleUserPrompt(line);\n }\n\n async function handleCommand(line: string): Promise<void> {\n const [cmd, ...rest] = line.slice(1).split(/\\s+/);\n switch (cmd) {\n case \"exit\":\n case \"quit\":\n alive = false;\n rl.close();\n return;\n case \"help\":\n console.log(fmt.dim(HELP));\n return;\n case \"sleep\": {\n process.stdout.write(fmt.dim(\"• entering sleep ...\"));\n const result = await nhe.sleep({ kind: \"explicit\" });\n console.log(fmt.dim(` wrote ${result.yamlPath}`));\n const consol = await nhe.wake();\n console.log(\n fmt.dim(\n `• wake: ${consol.memoriesWritten.length} memor${\n consol.memoriesWritten.length === 1 ? \"y\" : \"ies\"\n } persisted, ${consol.discarded} discarded`,\n ),\n );\n return;\n }\n case \"wake\": {\n const consol = await nhe.wake();\n console.log(\n fmt.dim(\n `• wake: ${consol.memoriesWritten.length} memor${\n consol.memoriesWritten.length === 1 ? \"y\" : \"ies\"\n } persisted, ${consol.discarded} discarded`,\n ),\n );\n return;\n }\n case \"recall\": {\n const query = rest.join(\" \").trim();\n if (!query) {\n console.log(fmt.warn(\"usage: /recall <query>\"));\n return;\n }\n const hits = await nhe.recall(query, { limit: 5 });\n if (hits.length === 0) {\n console.log(fmt.dim(\"(no matching memories)\"));\n return;\n }\n for (const m of hits) {\n console.log(\n `${fmt.bold(`[${m.classification}]`)} ${fmt.dim(m.consolidatedAt)}\\n ${m.insight}\\n`,\n );\n }\n return;\n }\n default:\n console.log(fmt.warn(`unknown command: /${cmd}. Try /help.`));\n }\n }\n\n async function handleUserPrompt(text: string): Promise<void> {\n const out = await nhe.respond({ userPrompt: text, redirectAttempt });\n if (out.kind === \"ok\") {\n console.log(fmt.assistant(\"nhe > \") + out.text);\n redirectAttempt = 0;\n return;\n }\n if (out.kind === \"redirect\") {\n const r = out.redirect!;\n console.log(\n fmt.warn(`(redirect ${r.attempt}/${r.maxAttempts}) `) +\n fmt.assistant(\"nhe > \") +\n out.text,\n );\n redirectAttempt = r.attempt;\n return;\n }\n // refused\n console.log(fmt.error(\"(refused) \") + out.text);\n redirectAttempt = 0;\n }\n}\n","import type { Nhe } from \"../nhe.js\";\nimport type { LocalMaic } from \"@teleologyhi-sdk/maic\";\n\n/**\n * Pure tool handlers, separated from MCP transport for testability.\n * Each returns a single text block whose body is a JSON-encoded result.\n */\n\nexport interface ToolResult {\n content: { type: \"text\"; text: string }[];\n isError?: boolean;\n [key: string]: unknown;\n}\n\nfunction ok(payload: unknown): ToolResult {\n return { content: [{ type: \"text\", text: JSON.stringify(payload, null, 2) }] };\n}\n\nfunction err(message: string): ToolResult {\n return {\n content: [{ type: \"text\", text: JSON.stringify({ error: message }, null, 2) }],\n isError: true,\n };\n}\n\nexport interface RespondToolInput {\n userPrompt: string;\n redirectAttempt?: number | undefined;\n jurisdiction?: string | undefined;\n}\n\nexport async function nheRespondHandler(\n nhe: Nhe,\n input: RespondToolInput,\n): Promise<ToolResult> {\n try {\n const reqInput: Parameters<typeof nhe.respond>[0] = { userPrompt: input.userPrompt };\n if (input.redirectAttempt !== undefined) reqInput.redirectAttempt = input.redirectAttempt;\n if (input.jurisdiction !== undefined) reqInput.jurisdiction = input.jurisdiction;\n const out = await nhe.respond(reqInput);\n return ok({\n kind: out.kind,\n text: out.text,\n refused: out.refused,\n redirect: out.redirect ?? null,\n preReviewVerdict: {\n kind: out.preReviewVerdict.kind,\n reasonSummary: out.preReviewVerdict.reasonSummary,\n citedAxioms: out.preReviewVerdict.citedAxioms,\n },\n postReviewVerdict: {\n kind: out.postReviewVerdict.kind,\n reasonSummary: out.postReviewVerdict.reasonSummary,\n citedAxioms: out.postReviewVerdict.citedAxioms,\n },\n tokens: out.tokens,\n auditIds: out.auditIds,\n });\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\nexport interface RecallToolInput {\n query: string;\n limit?: number | undefined;\n}\n\nexport async function nheRecallHandler(\n nhe: Nhe,\n input: RecallToolInput,\n): Promise<ToolResult> {\n const opts: { limit?: number } = {};\n if (input.limit !== undefined) opts.limit = input.limit;\n const hits = await nhe.recall(input.query, opts);\n return ok({\n count: hits.length,\n memories: hits.map((m) => ({\n id: m.id,\n classification: m.classification,\n teleologicalValue: m.teleologicalValue,\n consolidatedAt: m.consolidatedAt,\n insight: m.insight,\n })),\n });\n}\n\nexport async function nheSleepHandler(nhe: Nhe): Promise<ToolResult> {\n const result = await nhe.sleep({ kind: \"explicit\", reason: \"mcp-tool\" });\n const rem = result.record.phases.find((p) => p.phase === \"REM\");\n const dreamCount =\n rem && rem.content.kind === \"dreams\" ? rem.content.dreams.length : 0;\n return ok({\n yamlPath: result.yamlPath,\n durationMinutes: result.record.sleep.durationMinutes,\n dreamCount,\n tokensIn: result.tokensIn,\n tokensOut: result.tokensOut,\n });\n}\n\nexport async function nheWakeHandler(nhe: Nhe): Promise<ToolResult> {\n const result = await nhe.wake();\n return ok({\n processedSleepFiles: result.processedSleepFiles,\n memoriesWritten: result.memoriesWritten.length,\n discarded: result.discarded,\n classifications: result.memoriesWritten.map((m) => ({\n id: m.id,\n classification: m.classification,\n teleologicalValue: m.teleologicalValue,\n })),\n });\n}\n\nexport async function maicListAxiomsHandler(maic: LocalMaic): Promise<ToolResult> {\n const axioms = await maic.listAxioms();\n return ok({\n count: axioms.length,\n axioms: axioms.map((a) => ({\n id: a.id,\n rank: a.rank,\n statement: a.statement,\n weight: a.weight,\n flexibility: a.flexibility,\n immutable: a.immutable,\n })),\n });\n}\n\nexport async function maicListHimsHandler(maic: LocalMaic): Promise<ToolResult> {\n const hims = await maic.listHims();\n return ok({\n count: hims.length,\n hims: hims.map((h) => ({\n himId: h.himId,\n primaryArchetype: h.birthSignature.primaryArchetype,\n bornAt: h.birthSignature.bornAt,\n axiomCount: h.axiomsSnapshot.length,\n registeredAt: h.registeredAt,\n })),\n });\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { z } from \"zod\";\nimport type { LocalMaic } from \"@teleologyhi-sdk/maic\";\nimport type { Nhe } from \"../nhe.js\";\nimport {\n maicListAxiomsHandler,\n maicListHimsHandler,\n nheRecallHandler,\n nheRespondHandler,\n nheSleepHandler,\n nheWakeHandler,\n} from \"./mcp-tools.js\";\n\nconst PKG_VERSION = \"1.0.0-trinity\";\n\n/** Build a configured McpServer wired to a bootstrapped NHE + MAIC. */\nexport function buildMcpServer(nhe: Nhe, maic: LocalMaic): McpServer {\n const server = new McpServer({\n name: \"@teleologyhi-sdk/nhe\",\n version: PKG_VERSION,\n });\n\n server.registerTool(\n \"nhe_respond\",\n {\n title: \"Send a prompt to the NHE\",\n description:\n \"Run a user prompt through the NHE's MAIC pre-review → LLM → MAIC post-review pipeline. \" +\n \"Returns text plus the verdict kind and any redirect metadata.\",\n inputSchema: {\n userPrompt: z.string().min(1),\n redirectAttempt: z.number().int().nonnegative().optional(),\n jurisdiction: z.string().optional(),\n },\n },\n async (args) => nheRespondHandler(nhe, args),\n );\n\n server.registerTool(\n \"nhe_recall\",\n {\n title: \"Recall consolidated memories\",\n description:\n \"Keyword search over the NHE's temporal-lobe markdown memories (lasting + temporary classes).\",\n inputSchema: {\n query: z.string().min(1),\n limit: z.number().int().positive().max(50).optional(),\n },\n },\n async (args) => nheRecallHandler(nhe, args),\n );\n\n server.registerTool(\n \"nhe_sleep\",\n {\n title: \"Run one sleep cycle\",\n description:\n \"Generate a N1→REM sleep cycle, writing a dream YAML record. Does not consolidate; call nhe_wake afterwards.\",\n },\n async () => nheSleepHandler(nhe),\n );\n\n server.registerTool(\n \"nhe_wake\",\n {\n title: \"Consolidate pending dreams\",\n description:\n \"Classify each REM dream and write temporal-lobe markdown for lasting + temporary memories. Idempotent.\",\n },\n async () => nheWakeHandler(nhe),\n );\n\n server.registerTool(\n \"maic_list_axioms\",\n {\n title: \"List MAIC axioms\",\n description: \"Return the full axiom corpus held by MAIC.\",\n },\n async () => maicListAxiomsHandler(maic),\n );\n\n server.registerTool(\n \"maic_list_hims\",\n {\n title: \"List registered HIMs\",\n description: \"Return all HIMs registered with MAIC and their birth signatures.\",\n },\n async () => maicListHimsHandler(maic),\n );\n\n return server;\n}\n\n/** Connect the MCP server to stdio and block until the transport closes. */\nexport async function runMcpStdio(nhe: Nhe, maic: LocalMaic): Promise<void> {\n const server = buildMcpServer(nhe, maic);\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n","import {\n detectAdapter,\n isAdapterName,\n type DetectOptions,\n type DetectedAdapter,\n} from \"./adapter-detection.js\";\nimport { bootstrap } from \"./bootstrap.js\";\nimport { startChat } from \"./chat.js\";\nimport { runMcpStdio } from \"./mcp.js\";\nimport { fmt } from \"./output.js\";\n\ninterface ParsedArgs {\n subcommand: string;\n flags: Record<string, string>;\n positional: string[];\n}\n\nconst HELP_TEXT = `\n@teleologyhi-sdk/nhe — CLI\n\nUsage:\n teleologyhi-nhe <command> [options]\n\nCommands:\n chat start an interactive chat session (default)\n mcp run as a Model Context Protocol stdio server\n help show this help\n\nOptions for chat / mcp:\n --store-dir <path> directory for MAIC/HIM/NHE state (default ./teleologyhi-store)\n --adapter <name> force adapter: anthropic | gemini | mistral | deepseek | grok | ollama\n --model <name> model id (adapter-specific)\n --ollama-base-url <url> Ollama base URL (default http://localhost:11434)\n --archetype <id> primary archetype for a fresh HIM (default aries-sun)\n --him-id <id> persistent HIM id (default him.cli.default)\n\nEnvironment (auto-selection order when --adapter is omitted):\n ANTHROPIC_API_KEY auto-selects AnthropicAdapter (claude-sonnet-4-6)\n GEMINI_API_KEY auto-selects GeminiAdapter (gemini-3.5-flash)\n MISTRAL_API_KEY auto-selects MistralAdapter (mistral-large-latest)\n DEEPSEEK_API_KEY auto-selects DeepSeekAdapter (deepseek-chat)\n XAI_API_KEY auto-selects GrokAdapter (grok-4)\n (fallback) auto-detects local Ollama at default port\n\nExamples:\n teleologyhi-nhe chat\n teleologyhi-nhe chat --adapter ollama --model qwen2.5:7b\n teleologyhi-nhe chat --adapter gemini --model gemini-3.5-flash\n teleologyhi-nhe chat --adapter mistral --model mistral-small-latest\n teleologyhi-nhe chat --adapter deepseek --model deepseek-reasoner\n teleologyhi-nhe chat --adapter grok --model grok-4-fast\n`.trim();\n\nexport async function runCli(argv: string[]): Promise<number> {\n const parsed = parseArgs(argv);\n switch (parsed.subcommand) {\n case \"chat\":\n case \"\":\n return chatCommand(parsed);\n case \"mcp\":\n return mcpCommand(parsed);\n case \"help\":\n case \"--help\":\n case \"-h\":\n console.log(HELP_TEXT);\n return 0;\n default:\n console.error(fmt.error(`unknown command: ${parsed.subcommand}`));\n console.error(HELP_TEXT);\n return 2;\n }\n}\n\nasync function mcpCommand(args: ParsedArgs): Promise<number> {\n const detect: DetectOptions = {};\n const adapterFlag = args.flags.adapter;\n if (isAdapterName(adapterFlag)) {\n detect.adapter = adapterFlag;\n }\n const modelFlag = args.flags.model;\n if (modelFlag) detect.model = modelFlag;\n const ollamaUrlFlag = args.flags[\"ollama-base-url\"];\n if (ollamaUrlFlag) detect.ollamaBaseUrl = ollamaUrlFlag;\n\n let detected: DetectedAdapter;\n try {\n detected = await detectAdapter(detect);\n } catch (e: unknown) {\n // MCP runs on stdio; surface errors via stderr only.\n process.stderr.write(`${e instanceof Error ? e.message : String(e)}\\n`);\n return 1;\n }\n\n const result = await bootstrap({\n llmAdapter: detected.adapter,\n ...(args.flags[\"store-dir\"] ? { storeDir: args.flags[\"store-dir\"] } : {}),\n ...(args.flags[\"him-id\"] ? { himId: args.flags[\"him-id\"] } : {}),\n ...(args.flags.archetype ? { archetype: args.flags.archetype } : {}),\n });\n\n // Only stderr gets bootstrap notes — stdout is reserved for MCP protocol.\n process.stderr.write(\n `[@teleologyhi-sdk/nhe mcp] storeDir=${result.storeDir} him=${result.him.id} adapter=${detected.source}:${detected.model}\\n`,\n );\n\n await runMcpStdio(result.nhe, result.maic);\n return 0;\n}\n\nasync function chatCommand(args: ParsedArgs): Promise<number> {\n const detect: DetectOptions = {};\n const adapterFlag = args.flags.adapter;\n if (isAdapterName(adapterFlag)) {\n detect.adapter = adapterFlag;\n }\n const modelFlag = args.flags.model;\n if (modelFlag) detect.model = modelFlag;\n const ollamaUrlFlag = args.flags[\"ollama-base-url\"];\n if (ollamaUrlFlag) detect.ollamaBaseUrl = ollamaUrlFlag;\n\n let detected: DetectedAdapter;\n try {\n detected = await detectAdapter(detect);\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n console.error(fmt.error(msg));\n return 1;\n }\n\n const result = await bootstrap({\n llmAdapter: detected.adapter,\n ...(args.flags[\"store-dir\"] ? { storeDir: args.flags[\"store-dir\"] } : {}),\n ...(args.flags[\"him-id\"] ? { himId: args.flags[\"him-id\"] } : {}),\n ...(args.flags.archetype ? { archetype: args.flags.archetype } : {}),\n });\n\n if (result.freshInstall) {\n console.log(fmt.dim(`• fresh setup at ${result.storeDir}`));\n console.log(fmt.dim(`• Creator keyring saved to ${result.storeDir}/creator.pem`));\n console.log(fmt.dim(`• MAIC seeded with 8 axioms; HIM \"${result.him.id}\" minted`));\n } else {\n console.log(fmt.dim(`• reopened ${result.storeDir} (HIM \"${result.him.id}\")`));\n }\n console.log(fmt.dim(`• adapter: ${detected.source}:${detected.model}`));\n console.log();\n\n await startChat(result.nhe);\n return 0;\n}\n\nfunction parseArgs(argv: string[]): ParsedArgs {\n const subcommand = argv[0] ?? \"\";\n const rest = argv.slice(1);\n const flags: Record<string, string> = {};\n const positional: string[] = [];\n for (let i = 0; i < rest.length; i++) {\n const tok = rest[i]!;\n if (tok.startsWith(\"--\")) {\n const name = tok.slice(2);\n const next = rest[i + 1];\n if (next !== undefined && !next.startsWith(\"--\")) {\n flags[name] = next;\n i++;\n } else {\n flags[name] = \"\";\n }\n } else {\n positional.push(tok);\n }\n }\n return { subcommand, flags, positional };\n}\n\n// Direct invocation (this file is the bin entry).\nconst isMain = import.meta.url === `file://${process.argv[1] ?? \"\"}`;\nif (isMain) {\n runCli(process.argv.slice(2)).then(\n (code) => process.exit(code),\n (err) => {\n console.error(err);\n process.exit(1);\n },\n );\n}\n"]}