@peac/cli 0.14.1 → 0.14.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/bridge/start.d.ts.map +1 -1
- package/dist/commands/bridge/status.d.ts.map +1 -1
- package/dist/commands/bridge/stop.d.ts.map +1 -1
- package/dist/commands/bundle.d.ts.map +1 -1
- package/dist/commands/policy.d.ts.map +1 -1
- package/dist/commands/reconcile.d.ts.map +1 -1
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/index.cjs +96 -22
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +97 -23
- package/dist/index.mjs.map +1 -1
- package/dist/lib/bridge-url.d.ts +25 -0
- package/dist/lib/bridge-url.d.ts.map +1 -0
- package/dist/lib/safe-file.d.ts +88 -0
- package/dist/lib/safe-file.d.ts.map +1 -0
- package/package.json +8 -8
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/policy.ts","../src/lib/conformance/digest.ts","../src/lib/conformance/manifest.ts","../src/lib/conformance/profiles.ts","../src/lib/policy-document-discovery.ts","../src/lib/conformance/validators.ts","../src/lib/conformance-runner.ts","../src/lib/version.ts","../src/commands/conformance.ts","../src/lib/samples-loader.ts","../src/commands/samples.ts","../src/commands/reconcile.ts","../src/commands/doctor.ts","../src/utils.ts","../src/commands/discover.ts","../src/lib/cli-limits.ts","../src/lib/capture.ts","../src/lib/output-preflight.ts","../src/lib/secret-scan.ts","../src/lib/observation-builder.ts","../src/lib/observation-pipeline.ts","../src/lib/command-option-validation.ts","../src/commands/observe-command.ts","../src/lib/issuer-key-loader.ts","../src/commands/record-command.ts","../src/commands/emit-lifecycle.ts","../src/index.ts"],"names":["fs","issue","path","fs2","path2","path3","fs3","PolicyValidationError","PolicyLoadError","fs4","path4","result","join","existsSync","readFileSync","getGlobalOptions","outputError","fs5","path5","Command","samples","path7","fs7","output","fs8","formatReportText","path8","fs9","program","createHash","resolve","pathResolve","statSync","fsConstants","SHA256_PREFIX","out","byteLen","preflightOutputWritable","basenameAny","writeFileSync","base64urlEncode","sha256Hex","ARGV_MODES","CWD_MODES","BINARY_PATH_MODES","STDIN_MODES","ENV_MODES","EXIT_CODE_MODES","EXECUTION_MODES","DEFAULT_OPTIONS","generateKeypair","CLI_COMMAND_EXECUTION_TYPE","Option","isCanonicalIss","resolveIssuerKey","IssueError","fs10","decode"],"mappings":";;;;;;;;;;;;;;;;;;AA8DA,SAAS,iBAAiB,GAAA,EAAmC;AAC3D,EAAA,MAAM,SAAS,GAAA,CAAI,MAAA;AACnB,EAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,EAAC;AACrB,EAAA,OAAO,OAAO,IAAA,EAAK;AACrB;AAKA,SAAS,MAAA,CACP,IAAA,EACA,IAAA,EACA,YAAA,EACM;AACN,EAAA,IAAI,KAAK,IAAA,EAAM;AACb,IAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,EAC3C;AAGF;AAKA,SAAS,WAAA,CACP,KAAA,EACA,OAAA,EACA,IAAA,EACM;AACN,EAAA,IAAI,KAAK,IAAA,EAAM;AACb,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,GAAG,OAAA,EAAQ,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,EAC5E,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,CAAA;AAAA,EACjC;AACF;AAEA,IAAM,SAAS,IAAI,OAAA,CAAQ,QAAQ,CAAA,CAChC,WAAA,CAAY,wBAAwB,CAAA,CACpC,MAAA,CAAO,QAAA,EAAU,wCAAwC,EACzD,MAAA,CAAO,OAAA,EAAS,0CAA0C,CAAA,CAC1D,MAAA,CAAO,YAAY,2BAA2B,CAAA;AAOjD,MAAA,CACG,OAAA,CAAQ,MAAM,CAAA,CACd,WAAA,CAAY,+BAA+B,CAAA,CAC3C,MAAA,CAAO,uBAAA,EAAyB,8BAAA,EAAgC,MAAM,CAAA,CACtE,OAAO,qBAAA,EAAuB,kBAAkB,EAChD,MAAA,CAAO,SAAA,EAAW,yBAAyB,CAAA,CAC3C,MAAA,CAAO,gBAAA,EAAkB,qCAAqC,CAAA,CAC9D,MAAA;AAAA,EACC,CACE,SACA,GAAA,KACG;AACH,IAAA,MAAM,UAAA,GAAa,iBAAiB,GAAG,CAAA;AAEvC,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,EAAQ,WAAA,EAAY,IAAK,MAAA;AAChD,MAAA,MAAM,UAAA,GACJ,OAAA,CAAQ,MAAA,KAAW,MAAA,KAAW,SAAS,kBAAA,GAAqB,kBAAA,CAAA;AAG9D,MAAA,IAAOA,GAAA,CAAA,UAAA,CAAW,UAAU,CAAA,IAAK,CAAC,QAAQ,KAAA,IAAS,CAAC,WAAW,GAAA,EAAK;AAClE,QAAA,WAAA;AAAA,UACE,wBAAwB,UAAU,CAAA,CAAA;AAAA,UAClC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,mCAAA,EAAoC;AAAA,UAC9D;AAAA,SACF;AACA,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAEA,MAAA,IAAI,OAAA;AACJ,MAAA,IAAI,UAAA;AAEJ,MAAA,IAAI,QAAQ,OAAA,EAAS;AAEnB,QAAA,IAAI;AACF,UAAA,MAAM,OAAA,GAAU,WAAA,CAAY,OAAA,CAAQ,OAAoB,CAAA;AACxD,UAAA,MAAM,YAAY,OAAA,CAAQ,MAAA;AAC1B,UAAA,OAAA,GACE,WAAW,MAAA,GAAS,mBAAA,CAAoB,SAAS,CAAA,GAAI,oBAAoB,SAAS,CAAA;AACpF,UAAA,UAAA,GAAa,OAAA,CAAQ,IAAA;AAAA,QACvB,SAAS,GAAA,EAAK;AACZ,UAAA,IAAI,eAAe,YAAA,EAAc;AAC/B,YAAA,WAAA,CAAY,GAAA,CAAI,OAAA,EAAS,EAAE,IAAA,EAAM,GAAA,CAAI,MAAM,OAAA,EAAS,OAAA,CAAQ,OAAA,EAAQ,EAAG,UAAU,CAAA;AACjF,YAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,UAChB;AACA,UAAA,MAAM,GAAA;AAAA,QACR;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAM,UAAU,mBAAA,EAAoB;AACpC,QAAA,OAAA,GAAU,WAAW,MAAA,GAAS,mBAAA,CAAoB,OAAO,CAAA,GAAI,oBAAoB,OAAO,CAAA;AACxF,QAAA,UAAA,GAAa,gBAAA;AAAA,MACf;AAEA,MAAGA,GAAA,CAAA,aAAA,CAAc,UAAA,EAAY,OAAA,EAAS,OAAO,CAAA;AAE7C,MAAA,IAAI,WAAW,IAAA,EAAM;AACnB,QAAA,MAAA;AAAA,UACE;AAAA,YACE,OAAA,EAAS,IAAA;AAAA,YACT,IAAA,EAAM,UAAA;AAAA,YACN,MAAA;AAAA,YACA,OAAA,EAAS,QAAQ,OAAA,IAAW,IAAA;AAAA,YAC5B;AAAA,WACF;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,qBAAA,EAAwB,UAAU,CAAA,CAAE,CAAA;AAChD,QAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,kBAAA,EAAqB,OAAA,CAAQ,OAAO,CAAA,CAAE,CAAA;AAAA,QACpD;AACA,QAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,QAAA,OAAA,CAAQ,IAAI,aAAa,CAAA;AACzB,QAAA,OAAA,CAAQ,IAAI,uDAAuD,CAAA;AACnE,QAAA,OAAA,CAAQ,GAAA,CAAI,8CAA8C,UAAU,CAAA;AACpE,QAAA,OAAA,CAAQ,GAAA,CAAI,wDAAwD,UAAU,CAAA;AAAA,MAChF;AAEA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB,SAAS,GAAA,EAAK;AACZ,MAAA,WAAA,CAAY,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA,EAAG,EAAC,EAAG,UAAU,CAAA;AAC5E,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AACF,CAAA;AAKF,MAAA,CACG,QAAQ,UAAU,CAAA,CAClB,YAAY,4CAA4C,CAAA,CACxD,SAAS,QAAA,EAAU,qBAAqB,CAAA,CACxC,MAAA,CAAO,iBAAiB,iCAAiC,CAAA,CACzD,OAAO,CAAC,IAAA,EAAc,SAAgC,GAAA,KAAiB;AACtE,EAAA,MAAM,UAAA,GAAa,iBAAiB,GAAG,CAAA;AACvC,EAAA,MAAM,WAAqB,EAAC;AAE5B,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,WAAW,IAAI,CAAA;AAKjC,IAAA,MAAM,MAAA,GAAS;AAAA,MACb,OAAA,EAAS,IAAA;AAAA,MACT,IAAA;AAAA,MACA,KAAA,EAAO,IAAA;AAAA,MACP,QAAA;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,SAAS,SAAA,CAAU,OAAA;AAAA,QACnB,IAAA,EAAM,UAAU,IAAA,IAAQ,IAAA;AAAA,QACxB,eAAA,EAAiB,UAAU,QAAA,CAAS,QAAA;AAAA,QACpC,SAAA,EAAW,UAAU,KAAA,CAAM,MAAA;AAAA,QAC3B,OAAO,OAAA,CAAQ,OAAA,GACX,UAAU,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,UAC1B,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,UAAU,CAAA,CAAE,QAAA;AAAA,UACZ,OAAA,EAAS,EAAE,OAAA,IAAW,IAAA;AAAA,UACtB,OAAA,EAAS,EAAE,OAAA,IAAW,IAAA;AAAA,UACtB,aAAA,EAAe,EAAE,cAAA,IAAkB;AAAA,UACnC,CAAA,GACF,KAAA;AAAA;AACN,KACF;AAEA,IAAA,IAAI,WAAW,IAAA,EAAM;AACnB,MAAA,MAAA,CAAO,QAAQ,UAAU,CAAA;AAAA,IAC3B,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,GAAA,CAAI,2BAA2B,IAAI;AAAA,CAAI,CAAA;AAC/C,MAAA,OAAA,CAAQ,IAAI,oBAAoB,CAAA;AAEhC,MAAA,OAAA,CAAQ,IAAI,qBAAqB,CAAA;AACjC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,SAAA,CAAU,OAAO,CAAA,CAAE,CAAA;AAC/C,MAAA,IAAI,UAAU,IAAA,EAAM;AAClB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,SAAA,CAAU,IAAI,CAAA,CAAE,CAAA;AAAA,MAC9C;AACA,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,SAAA,CAAU,QAAA,CAAS,QAAQ,CAAA,CAAE,CAAA;AACzD,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,SAAA,CAAU,KAAA,CAAM,MAAM,CAAA,CAAE,CAAA;AAEpD,MAAA,IAAI,OAAA,CAAQ,OAAA,IAAW,SAAA,CAAU,KAAA,CAAM,SAAS,CAAA,EAAG;AACjD,QAAA,OAAA,CAAQ,IAAI,UAAU,CAAA;AACtB,QAAA,KAAA,MAAW,IAAA,IAAQ,UAAU,KAAA,EAAO;AAClC,UAAA,OAAA,CAAQ,IAAI,CAAA,KAAA,EAAQ,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,IAAA,CAAK,QAAQ,CAAA,CAAE,CAAA;AACjD,UAAA,IAAI,KAAK,OAAA,EAAS;AAChB,YAAA,MAAM,QAAkB,EAAC;AACzB,YAAA,IAAI,IAAA,CAAK,QAAQ,IAAA,EAAM;AACrB,cAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,QAAQ,IAAI,CAAA,GACzC,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA,GAC1B,KAAK,OAAA,CAAQ,IAAA;AACjB,cAAA,KAAA,CAAM,IAAA,CAAK,CAAA,KAAA,EAAQ,KAAK,CAAA,CAAE,CAAA;AAAA,YAC5B;AACA,YAAA,IAAI,IAAA,CAAK,QAAQ,MAAA,EAAQ;AACvB,cAAA,KAAA,CAAM,IAAA,CAAK,WAAW,IAAA,CAAK,OAAA,CAAQ,OAAO,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,YACxD;AACA,YAAA,IAAI,IAAA,CAAK,QAAQ,EAAA,EAAI;AACnB,cAAA,KAAA,CAAM,IAAA,CAAK,CAAA,GAAA,EAAM,IAAA,CAAK,OAAA,CAAQ,EAAE,CAAA,CAAE,CAAA;AAAA,YACpC;AACA,YAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,cAAA,OAAA,CAAQ,IAAI,CAAA,gBAAA,EAAmB,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,YACnD;AAAA,UACF;AACA,UAAA,IAAI,KAAK,OAAA,EAAS;AAChB,YAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,GAAI,IAAA,CAAK,OAAA;AAC7E,YAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,gBAAA,EAAmB,QAAQ,CAAA,CAAE,CAAA;AAAA,UAC3C;AACA,UAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,YAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,cAAc,CAAA,GAC3C,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,GAAG,CAAA,GAC5B,IAAA,CAAK,cAAA;AACT,YAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,uBAAA,EAA0B,KAAK,CAAA,CAAE,CAAA;AAAA,UAC/C;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,QAAA,OAAA,CAAQ,IAAI,aAAa,CAAA;AACzB,QAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,KAAA,EAAQ,OAAO,CAAA,CAAE,CAAA;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,UAAA,CAAW,MAAA,IAAU,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAC5C,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,eAAe,qBAAA,EAAuB;AACxC,MAAA,MAAM,MAAA,GAAS,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACpC,IAAA,EAAM,CAAA,CAAE,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAAA,QACrB,SAAS,CAAA,CAAE;AAAA,OACb,CAAE,CAAA;AAEF,MAAA,IAAI,WAAW,IAAA,EAAM;AACnB,QAAA,MAAA;AAAA,UACE;AAAA,YACE,OAAA,EAAS,KAAA;AAAA,YACT,IAAA;AAAA,YACA,KAAA,EAAO,KAAA;AAAA,YACP,KAAA,EAAO,mBAAA;AAAA,YACP;AAAA,WACF;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,MAAM,6BAA6B,CAAA;AAC3C,QAAA,KAAA,MAAWC,MAAAA,IAAS,IAAI,MAAA,EAAQ;AAC9B,UAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,KAAA,EAAQA,MAAAA,CAAM,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA,EAAA,EAAKA,MAAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,QAChE;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB,CAAA,MAAA,IAAW,eAAe,eAAA,EAAiB;AACzC,MAAA,WAAA,CAAY,0BAA0B,GAAA,CAAI,OAAO,IAAI,EAAE,IAAA,IAAQ,UAAU,CAAA;AACzE,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB,CAAA,MAAO;AACL,MAAA,WAAA,CAAY,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA,EAAG,EAAC,EAAG,UAAU,CAAA;AAC5E,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AACF,CAAC,CAAA;AAWH,MAAA,CACG,OAAA,CAAQ,UAAU,CAAA,CAClB,WAAA,CAAY,kDAAkD,EAC9D,QAAA,CAAS,QAAA,EAAU,qBAAqB,CAAA,CACxC,MAAA,CAAO,iBAAA,EAAmB,yCAAyC,MAAM,CAAA,CACzE,MAAA,CAAO,cAAA,EAAgB,8CAA8C,CAAA,CACrE,MAAA,CAAO,WAAA,EAAa,oDAAoD,CAAA,CACxE,MAAA,CAAO,0BAAA,EAA4B,sCAAsC,CAAA,CACzE,OAAO,kBAAA,EAAoB,uBAAuB,CAAA,CAClD,MAAA,CAAO,mBAAA,EAAqB,oCAAoC,EAChE,MAAA,CAAO,sBAAA,EAAwB,oDAAoD,CAAA,CACnF,MAAA,CAAO,mBAAA,EAAqB,iDAAiD,CAAA,CAC7E,MAAA,CAAO,sBAAA,EAAwB,mDAAmD,CAAA,CAClF,MAAA,CAAO,mBAAA,EAAqB,wBAAwB,CAAA,CACpD,MAAA,CAAO,eAAA,EAAiB,oCAAoC,CAAA,CAC5D,MAAA;AAAA,EACC,CACE,IAAA,EACA,OAAA,EAaA,GAAA,KACG;AACH,IAAA,MAAM,UAAA,GAAa,iBAAiB,GAAG,CAAA;AACvC,IAAA,MAAM,QAAA,GAAW,QAAQ,GAAA,KAAQ,GAAA;AAEjC,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,UAAA,CAAW,IAAA,IAAQ,CAAC,QAAA,EAAU;AACjC,QAAA,OAAA,CAAQ,GAAA,CAAI,mBAAmB,IAAI;AAAA,CAAI,CAAA;AAAA,MACzC;AAEA,MAAA,MAAM,SAAA,GAAY,WAAW,IAAI,CAAA;AAEjC,MAAA,MAAM,cAAA,GAAiB;AAAA,QACrB,aAAa,OAAA,CAAQ,WAAA;AAAA,QACrB,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,aAAa,OAAA,CAAQ,WAAA;AAAA,QACrB,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,cAAc,OAAA,CAAQ,SAAA;AAAA,QACtB,eAAA,EAAiB,QAAQ,QAAA,KAAa;AAAA,OACxC;AAGA,MAAA,MAAM,OAAA,GAAU,cAAA,CAAe,SAAA,EAAW,cAAc,CAAA;AACxD,MAAA,MAAM,SAAA,GAAY,oBAAA,CAAqB,SAAA,EAAW,cAAc,CAAA;AAChE,MAAA,MAAM,eAAA,GAAkB,sBAAA,CAAuB,SAAA,EAAW,cAAc,CAAA;AACxE,MAAA,MAAM,QAAA,GAAW,oBAAA,CAAqB,SAAA,EAAW,cAAc,CAAA;AAG/D,MAAA,IAAI,QAAA,IAAY,WAAW,IAAA,EAAM;AAC/B,QAAA,MAAM,MAAA,GAAS;AAAA,UACb,OAAA,EAAS,IAAA;AAAA,UACT,MAAA,EAAQ,IAAA;AAAA,UACR,SAAA,EAAW;AAAA,YACT,UAAA,EAAY,OAAA;AAAA,YACZ,uBAAA,EAAyB,SAAA;AAAA,YACzB,qBAAA,EAAuB,eAAA;AAAA,YACvB,cAAA,EAAgB;AAAA;AAClB,SACF;AAEA,QAAA,IAAI,QAAA,IAAY,CAAC,UAAA,CAAW,IAAA,EAAM;AAEhC,UAAA,OAAA,CAAQ,IAAI,OAAO,CAAA;AAAA,QACrB,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,MAAA,EAAQ,EAAE,IAAA,EAAM,IAAA,EAAM,CAAA;AAAA,QAC/B;AAEA,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAGA,MAAA,MAAM,SAAS,OAAA,CAAQ,GAAA;AACvB,MAAA,IAAI,WAAA;AACJ,MAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,QAAA,WAAA,GAAmBC,KAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,aAAA,EAAe,UAAU,CAAA;AAAA,MAC3D,CAAA,MAAO;AACL,QAAA,WAAA,GAAmBA,KAAA,CAAA,IAAA,CAAK,QAAQ,UAAU,CAAA;AAAA,MAC5C;AACA,MAAA,MAAM,UAAA,GAAkBA,KAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,uBAAuB,CAAA;AAC5D,MAAA,MAAM,UAAA,GAAkBA,KAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,qBAAqB,CAAA;AAC1D,MAAA,MAAM,MAAA,GAAcA,KAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,cAAc,CAAA;AAE/C,MAAA,IAAI,QAAQ,MAAA,EAAQ;AAElB,QAAA,OAAA,CAAQ,IAAI,4CAA4C,CAAA;AACxD,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,WAAW,CAAA,IAAA,CAAM,CAAA;AACpC,QAAA,OAAA,CAAQ,IAAI,OAAO,CAAA;AACnB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,UAAU,CAAA,IAAA,CAAM,CAAA;AACnC,QAAA,OAAA,CAAQ,IAAI,SAAS,CAAA;AACrB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,UAAU,CAAA,IAAA,CAAM,CAAA;AACnC,QAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,eAAA,EAAiB,IAAA,EAAM,CAAC,CAAC,CAAA;AACpD,QAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,IAAA,EAAS,MAAM,CAAA,IAAA,CAAM,CAAA;AACjC,QAAA,OAAA,CAAQ,IAAI,QAAQ,CAAA;AACpB,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAGA,MAAA,IAAI,CAAIF,GAAA,CAAA,UAAA,CAAW,MAAM,CAAA,EAAG;AAC1B,QAAGA,GAAA,CAAA,SAAA,CAAU,MAAA,EAAQ,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,MAC1C;AACA,MAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,QAAA,MAAM,YAAA,GAAoBE,KAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,aAAa,CAAA;AACpD,QAAA,IAAI,CAAIF,GAAA,CAAA,UAAA,CAAW,YAAY,CAAA,EAAG;AAChC,UAAGA,GAAA,CAAA,SAAA,CAAU,YAAA,EAAc,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,QAChD;AAAA,MACF;AAGA,MAAGA,GAAA,CAAA,aAAA,CAAc,WAAA,EAAa,OAAA,EAAS,OAAO,CAAA;AAC9C,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,WAAW,CAAA,CAAE,CAAA;AAEvC,MAAGA,GAAA,CAAA,aAAA,CAAc,UAAA,EAAY,SAAA,EAAW,OAAO,CAAA;AAC/C,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,UAAU,CAAA,CAAE,CAAA;AAEtC,MAAGA,GAAA,CAAA,aAAA,CAAc,YAAY,IAAA,CAAK,SAAA,CAAU,iBAAiB,IAAA,EAAM,CAAC,GAAG,OAAO,CAAA;AAC9E,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,UAAU,CAAA,CAAE,CAAA;AAEtC,MAAGA,GAAA,CAAA,aAAA,CAAc,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAA;AAC1C,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,MAAM,CAAA,CAAE,CAAA;AAElC,MAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,MAAA,OAAA,CAAQ,IAAI,0BAA0B,CAAA;AACtC,MAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,YAAA,EAAe,WAAW,CAAA,kCAAA,CAAoC,CAAA;AAAA,MAC5E,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,UAAA,EAAa,WAAW,CAAA,yBAAA,CAA2B,CAAA;AAAA,MACjE;AACA,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,YAAA,EAAe,UAAU,CAAA,mBAAA,CAAqB,CAAA;AAC1D,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,sBAAA,EAAyB,UAAU,CAAA,sBAAA,CAAwB,CAAA;AACvE,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,MAAM,CAAA,oBAAA,CAAsB,CAAA;AAExD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,eAAe,eAAA,EAAiB;AAClC,QAAA,WAAA,CAAY,0BAA0B,GAAA,CAAI,OAAO,IAAI,EAAE,IAAA,IAAQ,UAAU,CAAA;AACzE,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB,CAAA,MAAO;AACL,QAAA,WAAA,CAAY,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA,EAAG,EAAC,EAAG,UAAU,CAAA;AAC5E,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AACF,CAAA;AAOF,MAAA,CACG,OAAA,CAAQ,SAAS,CAAA,CACjB,WAAA,CAAY,oDAAoD,CAAA,CAChE,QAAA,CAAS,UAAU,qBAAqB,CAAA,CACxC,OAAO,mBAAA,EAAqB,kCAAkC,EAC9D,MAAA,CAAO,uBAAA,EAAyB,kCAAkC,CAAA,CAClE,MAAA,CAAO,eAAA,EAAiB,YAAY,CAAA,CACpC,MAAA;AAAA,EACC,yBAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA;AAAA,EACC,6BAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA,CAAO,eAAA,EAAiB,6CAA6C,CAAA,CACrE,MAAA;AAAA,EACC,CACE,IAAA,EACA,OAAA,EAQA,GAAA,KACG;AACH,IAAA,MAAM,UAAA,GAAa,iBAAiB,GAAG,CAAA;AAEvC,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,WAAW,IAAI,CAAA;AAGjC,MAAA,MAAM,UAA6B,EAAC;AAEpC,MAAA,IAAI,OAAA,CAAQ,IAAA,IAAQ,OAAA,CAAQ,MAAA,IAAU,QAAQ,EAAA,EAAI;AAChD,QAAA,OAAA,CAAQ,UAAU,EAAC;AACnB,QAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,UAAA,OAAA,CAAQ,OAAA,CAAQ,OAAO,OAAA,CAAQ,IAAA;AAAA,QACjC;AACA,QAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,UAAA,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA;AAAA,QACxE;AACA,QAAA,IAAI,QAAQ,EAAA,EAAI;AACd,UAAA,OAAA,CAAQ,OAAA,CAAQ,KAAK,OAAA,CAAQ,EAAA;AAAA,QAC/B;AAAA,MACF;AAEA,MAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,QAAA,OAAA,CAAQ,UAAU,OAAA,CAAQ,OAAA;AAAA,MAC5B;AAEA,MAAA,IAAI,QAAQ,aAAA,EAAe;AACzB,QAAA,OAAA,CAAQ,iBAAiB,OAAA,CAAQ,aAAA;AAAA,MACnC;AAEA,MAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,QAAA,MAAM,OAAA,GAAU,cAAA,CAAe,SAAA,EAAW,OAAO,CAAA;AAEjD,QAAA,IAAI,WAAW,IAAA,EAAM;AACnB,UAAA,MAAA;AAAA,YACE;AAAA,cACE,OAAA,EAAS,IAAA;AAAA,cACT,OAAA;AAAA,cACA,OAAA,EAAS,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM;AAC1B,gBAAA,IAAI,MAAM,WAAA,EAAa;AACrB,kBAAA,OAAO;AAAA,oBACL,IAAA,EAAM,WAAA;AAAA,oBACN,QAAA,EAAU,UAAU,QAAA,CAAS;AAAA,mBAC/B;AAAA,gBACF;AACA,gBAAA,MAAM,IAAA,GAAO,UAAU,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,CAAC,CAAA;AACrD,gBAAA,OAAO,IAAA,GACH,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,QAAA,EAAU,IAAA,CAAK,QAAA,EAAS,GAC3C,EAAE,IAAA,EAAM,CAAA,EAAG,UAAU,IAAA,EAAK;AAAA,cAChC,CAAC;AAAA,aACH;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,IAAI,qBAAqB,CAAA;AACjC,UAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,YAAA,OAAA,CAAQ,IAAI,CAAA,YAAA,EAAe,IAAA,CAAK,UAAU,OAAA,CAAQ,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,UAC9D,CAAA,MAAO;AACL,YAAA,OAAA,CAAQ,IAAI,mBAAmB,CAAA;AAAA,UACjC;AACA,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,YAAA,EAAe,OAAA,CAAQ,OAAA,IAAW,OAAO,CAAA,CAAE,CAAA;AACvD,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,mBAAA,EAAsB,OAAA,CAAQ,cAAA,IAAkB,OAAO,CAAA,CAAE,CAAA;AACrE,UAAA,OAAA,CAAQ,GAAA,EAAI;AAEZ,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,gBAAA,EAAmB,OAAA,CAAQ,MAAM,CAAA,EAAA,CAAI,CAAA;AACjD,UAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,YAAA,IAAI,UAAU,WAAA,EAAa;AACzB,cAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,kBAAA,EAAqB,SAAA,CAAU,QAAA,CAAS,QAAQ,CAAA,CAAE,CAAA;AAAA,YAChE,CAAA,MAAO;AACL,cAAA,MAAM,IAAA,GAAO,UAAU,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,KAAK,CAAA;AACzD,cAAA,IAAI,IAAA,EAAM;AACR,gBAAA,OAAA,CAAQ,IAAI,CAAA,KAAA,EAAQ,IAAA,CAAK,IAAI,CAAA,IAAA,EAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,CAAA;AAAA,cACrD;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAM,MAAA,GAAS,QAAA,CAAS,SAAA,EAAW,OAAO,CAAA;AAE1C,QAAA,IAAI,WAAW,IAAA,EAAM;AACnB,UAAA,MAAA;AAAA,YACE;AAAA,cACE,OAAA,EAAS,IAAA;AAAA,cACT,OAAA;AAAA,cACA,MAAA,EAAQ;AAAA,gBACN,UAAU,MAAA,CAAO,QAAA;AAAA,gBACjB,WAAA,EAAa,OAAO,YAAA,IAAgB,WAAA;AAAA,gBACpC,MAAA,EAAQ,OAAO,MAAA,IAAU;AAAA;AAC3B,aACF;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,IAAI,qBAAqB,CAAA;AACjC,UAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,YAAA,OAAA,CAAQ,IAAI,CAAA,YAAA,EAAe,IAAA,CAAK,UAAU,OAAA,CAAQ,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,UAC9D,CAAA,MAAO;AACL,YAAA,OAAA,CAAQ,IAAI,mBAAmB,CAAA;AAAA,UACjC;AACA,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,YAAA,EAAe,OAAA,CAAQ,OAAA,IAAW,OAAO,CAAA,CAAE,CAAA;AACvD,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,mBAAA,EAAsB,OAAA,CAAQ,cAAA,IAAkB,OAAO,CAAA,CAAE,CAAA;AACrE,UAAA,OAAA,CAAQ,GAAA,EAAI;AAEZ,UAAA,OAAA,CAAQ,IAAI,SAAS,CAAA;AACrB,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,MAAA,CAAO,QAAQ,CAAA,CAAE,CAAA;AAC7C,UAAA,IAAI,OAAO,YAAA,EAAc;AACvB,YAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,iBAAA,EAAoB,MAAA,CAAO,YAAY,CAAA,CAAE,CAAA;AAAA,UACvD,CAAA,MAAO;AACL,YAAA,OAAA,CAAQ,IAAI,4BAA4B,CAAA;AAAA,UAC1C;AACA,UAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,YAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,MAAA,CAAO,MAAM,CAAA,CAAE,CAAA;AAAA,UAC3C;AAAA,QACF;AAAA,MACF;AAEA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,eAAe,eAAA,EAAiB;AAClC,QAAA,WAAA,CAAY,0BAA0B,GAAA,CAAI,OAAO,IAAI,EAAE,IAAA,IAAQ,UAAU,CAAA;AACzE,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB,CAAA,MAAO;AACL,QAAA,WAAA,CAAY,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA,EAAG,EAAC,EAAG,UAAU,CAAA;AAC5E,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AACF,CAAA;AAOF,MAAA,CACG,OAAA,CAAQ,eAAe,CAAA,CACvB,WAAA,CAAY,0CAA0C,CAAA,CACtD,MAAA,CAAO,CAAC,OAAA,EAAgC,GAAA,KAAiB;AACxD,EAAA,MAAM,UAAA,GAAa,iBAAiB,GAAG,CAAA;AAEvC,EAAA,IAAI;AACF,IAAA,MAAM,aAAa,YAAA,EAAa;AAChC,IAAA,MAAM,WAAW,UAAA,CAAW,GAAA,CAAI,CAAC,EAAA,KAAO,iBAAA,CAAkB,EAAE,CAAC,CAAA;AAE7D,IAAA,IAAI,WAAW,IAAA,EAAM;AACnB,MAAA,MAAA;AAAA,QACE;AAAA,UACE,OAAA,EAAS,IAAA;AAAA,UACT,QAAA,EAAU,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,YAC7B,IAAI,CAAA,CAAE,EAAA;AAAA,YACN,MAAM,CAAA,CAAE,IAAA;AAAA,YACR,aAAa,CAAA,CAAE,WAAA;AAAA,YACf,iBAAiB,CAAA,CAAE,eAAA;AAAA,YACnB,WAAW,CAAA,CAAE,SAAA;AAAA,YACb,iBAAiB,CAAA,CAAE,eAAA;AAAA,YACnB,gBAAgB,CAAA,CAAE,cAAA;AAAA,YAClB,gBAAgB,CAAA,CAAE;AAAA,WACpB,CAAE;AAAA,SACJ;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAI,8BAA8B,CAAA;AAC1C,MAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,OAAA,CAAQ,EAAE,CAAA,CAAE,CAAA;AAC7B,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,UAAA,EAAa,OAAA,CAAQ,IAAI,CAAA,CAAE,CAAA;AACvC,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,OAAA,CAAQ,eAAe,CAAA,CAAE,CAAA;AACrD,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,OAAA,CAAQ,SAAS,CAAA,CAAE,CAAA;AAC7C,QAAA,IAAI,QAAQ,eAAA,EAAiB;AAC3B,UAAA,OAAA,CAAQ,IAAI,2BAA2B,CAAA;AAAA,QACzC;AACA,QAAA,IAAI,OAAA,CAAQ,cAAA,CAAe,MAAA,GAAS,CAAA,EAAG;AACrC,UAAA,OAAA,CAAQ,IAAI,CAAA,qBAAA,EAAwB,OAAA,CAAQ,eAAe,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,QACzE;AACA,QAAA,OAAA,CAAQ,GAAA,EAAI;AAAA,MACd;AAEA,MAAA,OAAA,CAAQ,IAAI,sDAAsD,CAAA;AAClE,MAAA,OAAA,CAAQ,IAAI,yEAAyE,CAAA;AAAA,IACvF;AAEA,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB,SAAS,GAAA,EAAK;AACZ,IAAA,WAAA,CAAY,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA,EAAG,EAAC,EAAG,UAAU,CAAA;AAC5E,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACF,CAAC,CAAA;AAOH,MAAA,CACG,OAAA,CAAQ,cAAc,CAAA,CACtB,WAAA,CAAY,2CAA2C,CAAA,CACvD,QAAA,CAAS,MAAA,EAAQ,YAAY,CAAA,CAC7B,MAAA,CAAO,CAAC,EAAA,EAAY,SAAgC,GAAA,KAAiB;AACpE,EAAA,MAAM,UAAA,GAAa,iBAAiB,GAAG,CAAA;AAEvC,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,YAAY,EAAe,CAAA;AAC3C,IAAA,MAAM,OAAA,GAAU,kBAAkB,EAAe,CAAA;AAEjD,IAAA,IAAI,WAAW,IAAA,EAAM;AACnB,MAAA,MAAA;AAAA,QACE;AAAA,UACE,OAAA,EAAS,IAAA;AAAA,UACT,OAAA,EAAS;AAAA,YACP,IAAI,OAAA,CAAQ,EAAA;AAAA,YACZ,MAAM,OAAA,CAAQ,IAAA;AAAA,YACd,aAAa,OAAA,CAAQ,WAAA;AAAA,YACrB,QAAQ,OAAA,CAAQ,MAAA;AAAA,YAChB,YAAY,OAAA,CAAQ,UAAA;AAAA,YACpB,UAAU,OAAA,CAAQ;AAAA;AACpB,SACF;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,SAAA,EAAY,OAAA,CAAQ,IAAI,CAAA,CAAE,CAAA;AACtC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,OAAA,CAAQ,EAAE,CAAA,CAAE,CAAA;AAC/B,MAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,MAAA,OAAA,CAAQ,IAAI,cAAc,CAAA;AAC1B,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,OAAA,CAAQ,WAAA,CACL,KAAA,CAAM,IAAI,CAAA,CACV,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,EAAA,EAAK,CAAC,CAAA,CAAE,CAAA,CACnB,KAAK,IAAI;AAAA,OACd;AACA,MAAA,OAAA,CAAQ,GAAA,EAAI;AAEZ,MAAA,OAAA,CAAQ,IAAI,SAAS,CAAA;AACrB,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAClD,MAAA,OAAA,CAAQ,IAAI,CAAA,oBAAA,EAAuB,OAAA,CAAQ,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,CAAE,CAAA;AACrE,MAAA,OAAA,CAAQ,IAAI,CAAA,SAAA,EAAY,OAAA,CAAQ,OAAO,KAAA,EAAO,MAAA,IAAU,CAAC,CAAA,CAAE,CAAA;AAE3D,MAAA,IAAI,QAAQ,MAAA,CAAO,KAAA,IAAS,QAAQ,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AAC3D,QAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,QAAA,OAAA,CAAQ,IAAI,QAAQ,CAAA;AACpB,QAAA,KAAA,MAAW,IAAA,IAAQ,OAAA,CAAQ,MAAA,CAAO,KAAA,EAAO;AACvC,UAAA,OAAA,CAAQ,IAAI,CAAA,IAAA,EAAO,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,IAAA,CAAK,QAAQ,CAAA,CAAE,CAAA;AAChD,UAAA,IAAI,KAAK,OAAA,EAAS;AAChB,YAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA,CAAK,OAAA;AAC9E,YAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,eAAA,EAAkB,QAAQ,CAAA,CAAE,CAAA;AAAA,UAC1C;AACA,UAAA,IAAI,KAAK,MAAA,EAAQ;AACf,YAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA;AAAA,UAC5C;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,MAAA,CAAO,KAAK,OAAA,CAAQ,UAAA,IAAc,EAAE,CAAA,CAAE,SAAS,CAAA,EAAG;AACpD,QAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,QAAA,OAAA,CAAQ,IAAI,aAAa,CAAA;AACzB,QAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,MAAA,CAAO,QAAQ,OAAA,CAAQ,UAAA,IAAc,EAAE,CAAA,EAAG;AACnE,UAAA,MAAM,QAAA,GAAW,KAAA,CAAM,QAAA,GAAW,aAAA,GAAgB,EAAA;AAClD,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,GAAG,CAAA,EAAG,QAAQ,CAAA,CAAE,CAAA;AACjC,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,KAAA,CAAM,WAAW,CAAA,CAAE,CAAA;AACtC,UAAA,IAAI,MAAM,OAAA,EAAS;AACjB,YAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,UAC7C;AACA,UAAA,IAAI,MAAM,OAAA,EAAS;AACjB,YAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,UAC7C;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,QAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,QAAA,OAAA,CAAQ,IAAI,WAAW,CAAA;AACvB,QAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,YAAA,EAAc,OAAA,EAAS;AAC1C,UAAA,OAAA,CAAQ,IAAI,yBAAyB,CAAA;AAAA,QACvC;AACA,QAAA,IAAI,OAAA,CAAQ,SAAS,UAAA,EAAY;AAC/B,UAAA,OAAA,CAAQ,GAAA;AAAA,YACN,CAAA,cAAA,EAAiB,QAAQ,QAAA,CAAS,UAAA,CAAW,KAAK,CAAA,CAAA,EAAI,OAAA,CAAQ,QAAA,CAAS,UAAA,CAAW,cAAc,CAAA,CAAA;AAAA,WAClG;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,eAAe,YAAA,EAAc;AAC/B,MAAA,WAAA,CAAY,GAAA,CAAI,SAAS,EAAE,IAAA,EAAM,IAAI,IAAA,EAAM,OAAA,EAAS,EAAA,EAAG,EAAG,UAAU,CAAA;AACpE,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AACA,IAAA,WAAA,CAAY,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA,EAAG,EAAC,EAAG,UAAU,CAAA;AAC5E,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACF,CAAC,CAAA;ACzyBI,SAAS,OAAO,OAAA,EAAyB;AAC9C,EAAA,OAAO,UAAA,CAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,SAAS,MAAM,CAAA,CAAE,OAAO,KAAK,CAAA;AAClE;AAQO,SAAS,qBAAqBE,KAAAA,EAAmC;AACtE,EAAA,IAAIA,KAAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAE9B,EAAA,OACE,GAAA,GACAA,KAAAA,CACG,GAAA,CAAI,CAAC,OAAA,KAAY;AAChB,IAAA,MAAM,GAAA,GAAM,OAAO,OAAO,CAAA;AAE1B,IAAA,OAAO,IAAI,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAA,CAAE,OAAA,CAAQ,OAAO,IAAI,CAAA;AAAA,EACpD,CAAC,CAAA,CACA,IAAA,CAAK,GAAG,CAAA;AAEf;AAWO,SAAS,uBAAuB,KAAA,EAAgD;AACrF,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,aAAa,KAAK,CAAA;AACpC,IAAA,OAAO,EAAE,GAAA,EAAK,aAAA,EAAe,KAAA,EAAO,MAAA,CAAO,SAAS,CAAA,EAAE;AAAA,EACxD,CAAA,CAAA,MAAQ;AAIN,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,IAAK,MAAA;AAC5C,IAAA,OAAO,EAAE,GAAA,EAAK,cAAA,EAAgB,KAAA,EAAO,MAAA,CAAO,UAAU,CAAA,EAAE;AAAA,EAC1D;AACF;AAYA,IAAM,uBAAA,uBAA8B,GAAA,CAAI,CAAC,SAAS,MAAA,EAAQ,OAAA,EAAS,MAAA,EAAQ,MAAM,CAAC,CAAA;AAKlF,IAAM,wCAAwB,IAAI,GAAA,CAAI,CAAC,WAAA,EAAa,UAAA,EAAY,WAAW,CAAC,CAAA;AAK5E,SAAS,qBAAA,CACP,GAAA,EACA,QAAA,GAAmB,EAAA,EAC+B;AAClD,EAAA,MAAM,QAA0D,EAAC;AAEjE,EAAA,IAAI,CAAIC,GAAA,CAAA,UAAA,CAAW,GAAG,CAAA,EAAG,OAAO,KAAA;AAEhC,EAAA,MAAM,UAAaA,GAAA,CAAA,WAAA,CAAY,GAAA,EAAK,EAAE,aAAA,EAAe,MAAM,CAAA;AAE3D,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAE3B,IAAA,IAAI,qBAAA,CAAsB,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA,EAAG;AAE3C,IAAA,MAAM,YAAA,GAAe,WAAW,CAAA,EAAG,QAAQ,IAAI,KAAA,CAAM,IAAI,KAAK,KAAA,CAAM,IAAA;AACpE,IAAA,MAAM,QAAA,GAAgBC,KAAA,CAAA,IAAA,CAAK,GAAA,EAAK,KAAA,CAAM,IAAI,CAAA;AAE1C,IAAA,IAAI,KAAA,CAAM,aAAY,EAAG;AAEvB,MAAA,KAAA,CAAM,IAAA,CAAK,GAAG,qBAAA,CAAsB,QAAA,EAAU,YAAY,CAAC,CAAA;AAAA,IAC7D,CAAA,MAAO;AAEL,MAAA,MAAM,GAAA,GAAWA,KAAA,CAAA,OAAA,CAAQ,KAAA,CAAM,IAAI,EAAE,WAAA,EAAY;AACjD,MAAA,IAAI,uBAAA,CAAwB,GAAA,CAAI,GAAG,CAAA,EAAG;AACpC,QAAA,KAAA,CAAM,IAAA,CAAK;AAAA,UACT,YAAA;AAAA,UACA,OAAA,EAAYD,GAAA,CAAA,YAAA,CAAa,QAAA,EAAU,MAAM;AAAA,SAC1C,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AAmCO,SAAS,oBAAA,CAAqB,aAAqB,UAAA,EAA8B;AACtF,EAAA,MAAM,IAAA,GAAO,WAAW,QAAQ,CAAA;AAChC,EAAA,MAAM,WAA6D,EAAC;AAGpE,EAAA,MAAM,YAAA,GAAoBC,KAAA,CAAA,IAAA,CAAK,WAAA,EAAa,eAAe,CAAA;AAC3D,EAAA,IAAOD,GAAA,CAAA,UAAA,CAAW,YAAY,CAAA,EAAG;AAC/B,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,YAAA,EAAc,eAAA;AAAA,MACd,OAAA,EAAYA,GAAA,CAAA,YAAA,CAAa,YAAA,EAAc,MAAM;AAAA,KAC9C,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,gBAAA,GAAmB,CAAC,GAAG,UAAU,EAAE,IAAA,EAAK;AAE9C,EAAA,KAAA,MAAW,OAAO,gBAAA,EAAkB;AAClC,IAAA,MAAM,YAAA,GAAoBC,KAAA,CAAA,IAAA,CAAK,WAAA,EAAa,GAAG,CAAA;AAE/C,IAAA,MAAM,aAAA,GAAgB,qBAAA,CAAsB,YAAA,EAAc,GAAG,CAAA;AAC7D,IAAA,QAAA,CAAS,IAAA,CAAK,GAAG,aAAa,CAAA;AAAA,EAChC;AAGA,EAAA,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,YAAA,CAAa,aAAA,CAAc,CAAA,CAAE,YAAY,CAAC,CAAA;AAEpE,EAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AAEpC,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,YAAY,CAAA;AAC7B,IAAA,IAAA,CAAK,OAAO,IAAI,CAAA;AAChB,IAAA,IAAA,CAAK,OAAO,QAAQ,CAAA;AAAA,EACtB;AAEA,EAAA,OAAO,IAAA,CAAK,OAAO,KAAK,CAAA;AAC1B;AC3KO,SAAS,aAAa,WAAA,EAA+B;AAC1D,EAAA,MAAM,YAAA,GAAoBC,KAAA,CAAA,IAAA,CAAK,WAAA,EAAa,eAAe,CAAA;AAC3D,EAAA,IAAI,CAAIC,GAAA,CAAA,UAAA,CAAW,YAAY,CAAA,EAAG;AAChC,IAAA,OAAO,EAAC;AAAA,EACV;AACA,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,KAAA,CAASA,GAAA,CAAA,YAAA,CAAa,YAAA,EAAc,MAAM,CAAC,CAAA;AAAA,EACzD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAC;AAAA,EACV;AACF;AAKO,SAAS,gBAAA,CACd,QAAA,EACA,QAAA,EACA,QAAA,EAC2B;AAC3B,EAAA,OAAO,QAAA,CAAS,QAAQ,CAAA,GAAI,QAAQ,CAAA;AACtC;;;ACjBO,IAAM,oBAAA,GAAsD;AAAA,EACjE,KAAA,EAAO;AAAA,IACL,OAAA,EAAS,uBAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,uBAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,uBAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,OAAA,EAAS,+BAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,WAAA,EAAa;AAAA,IACX,OAAA,EAAS,4BAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,cAAA;AAAA,IACT,KAAA,EAAO,OAAA;AAAA,IACP,SAAA,EAAW,kBAAA;AAAA,IACX,KAAA,EAAO;AAAA,GACT;AAAA,EACA,SAAA,EAAW;AAAA,IACT,OAAA,EAAS,kBAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,wBAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,WAAA,EAAa;AAAA,IACX,OAAA,EAAS,4BAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,KAAA,EAAO;AAAA,IACL,OAAA,EAAS,eAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,WAAA,EAAa;AAAA,IACX,OAAA,EAAS,4BAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,iBAAA;AAAA,IACT,KAAA,EAAO,OAAA;AAAA,IACP,SAAA,EAAW,kBAAA;AAAA,IACX,KAAA,EAAO;AAAA,GACT;AAAA,EACA,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,wBAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,QAAA,EAAU;AAAA,IACR,OAAA,EAAS,gBAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,QAAA,EAAU;AAAA,IACR,OAAA,EAAS,mBAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,sBAAA;AAAA,IACT,KAAA,EAAO,OAAA;AAAA,IACP,SAAA,EAAW,kBAAA;AAAA,IACX,KAAA,EAAO;AAAA,GACT;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,cAAA;AAAA,IACT,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW,yBAAA;AAAA,IACX,KAAA,EAAO;AAAA,GACT;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,OAAA,EAAS,qBAAA;AAAA,IACT,KAAA,EAAO,OAAA;AAAA,IACP,SAAA,EAAW,2BAAA;AAAA,IACX,KAAA,EAAO;AAAA;AAEX,CAAA;AASO,SAAS,sBAAsB,QAAA,EAAiC;AACrE,EAAA,OACE,oBAAA,CAAqB,QAAQ,CAAA,IAAK;AAAA,IAChC,OAAA,EAAS,kBAAkB,QAAQ,CAAA,CAAA;AAAA,IACnC,KAAA,EAAO,UAAA;AAAA,IACP,SAAA,EAAW,8CAAA;AAAA,IACX,KAAA,EAAO;AAAA,GACT;AAEJ;AAKO,SAAS,mBAAmB,QAAA,EAA0B;AAC3D,EAAA,OAAO,qBAAA,CAAsB,QAAQ,CAAA,CAAE,OAAA;AACzC;AAKO,SAAS,gBAAA,CACd,gBACA,KAAA,EACS;AACT,EAAA,IAAI,CAAC,gBAAgB,OAAO,IAAA;AAE5B,EAAA,MAAM,CAAC,OAAO,KAAK,CAAA,GAAI,eAAe,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,MAAM,CAAA;AAC3D,EAAA,MAAM,YAAA,GACJ,QAAQ,CAAA,IAAK,KAAA,IAAS,KAAK,MAAA,GAAS,KAAA,IAAS,IAAI,UAAA,GAAa,OAAA;AAEhE,EAAA,MAAM,UAAA,GAAiC,CAAC,OAAA,EAAS,UAAA,EAAY,MAAM,CAAA;AACnE,EAAA,OAAO,WAAW,OAAA,CAAQ,YAAY,CAAA,IAAK,UAAA,CAAW,QAAQ,KAAK,CAAA;AACrE;ACrHO,IAAM,mBAAA,GAAsB,GAAA;AAC5B,IAAM,qBAAqB,MAAA,CAAO,QAAA;AAClC,IAAM,gBAAgB,MAAA,CAAO,YAAA;AACpC,IAAM,kBAAA,GAAqB,UAAA;AAE3B,IAAM,eAAA,GAAkB,oCAAA;AACxB,IAAM,2BAAA,GAA8B,6CAAA;AAEpC,IAAI,kBAAA,GAAqB,KAAA;AAEzB,SAAS,kBAAkB,KAAA,EAAqB;AAC9C,EAAA,IAAI,kBAAA,EAAoB;AACxB,EAAA,kBAAA,GAAqB,IAAA;AACrB,EAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAO,OAAA,CAAQ,gBAAgB,UAAA,EAAY;AAC/E,IAAA,OAAA,CAAQ,WAAA;AAAA,MACN,wCAAwC,KAAK,CAAA,0KAAA,CAAA;AAAA,MAG7C,EAAE,IAAA,EAAM,gCAAA,EAAkC,IAAA,EAAM,oBAAA;AAAqB,KACvE;AAAA,EACF;AACF;AAcA,SAAS,qBAAA,CAAsB,MAAc,QAAA,EAA0B;AACrE,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAChC,EAAA,IAAI,UAAA,GAA4B,IAAA;AAChC,EAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,EAAM,GAAA,KAAQ;AAC3B,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,mCAAmC,CAAA;AACxD,IAAA,IAAI,CAAA,EAAG;AACL,MAAA,IAAI,UAAA,KAAe,IAAA,EAAM,UAAA,GAAa,CAAA,CAAE,CAAC,CAAA;AACzC,MAAA,QAAA,CAAS,IAAA;AAAA,QACP,QAAQ,GAAA,GAAM,CAAC,CAAA,8BAAA,EAAiC,CAAA,CAAE,CAAC,CAAC,CAAA,kEAAA;AAAA,OAEtD;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACD,EAAA,IAAI,UAAA,oBAA8B,UAAU,CAAA;AAC9C;AAEA,SAAS,WAAA,CAAY,KAAc,QAAA,EAAuC;AACxE,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,IAAI,eAAeC,qBAAAA,EAAuB;AACxC,IAAA,MAAM,SAAS,GAAA,CAAI,MAAA,CAAO,IAAI,CAAC,CAAA,KAAM,GAAG,CAAA,CAAE,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AACnF,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,0BAAA,EAA6B,MAAM,CAAA,CAAE,CAAA;AAAA,EACnD,CAAA,MAAA,IAAW,eAAeC,eAAAA,EAAiB;AACzC,IAAA,MAAA,CAAO,IAAA,CAAK,IAAI,OAAO,CAAA;AAAA,EACzB,CAAA,MAAO;AACL,IAAA,MAAA,CAAO,IAAA,CAAK,2BAA2B,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,EAC3F;AACA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,MAAA;AAAA,IACA,QAAA,EAAU,QAAA,CAAS,MAAA,GAAS,CAAA,GAAI,QAAA,GAAW;AAAA,GAC7C;AACF;AAgBO,SAAS,0BAA0B,IAAA,EAAiC;AACzE,EAAA,IAAI,IAAA,CAAK,IAAA,EAAK,CAAE,MAAA,KAAW,CAAA,EAAG;AAC5B,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,MAAA,EAAQ,CAAC,+DAA+D;AAAA,KAC1E;AAAA,EACF;AAEA,EAAA,MAAM,cAAA,GAAiB,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA;AAChD,EAAA,MAAM,WAAqB,EAAC;AAE5B,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,oBAAoB,IAAI,CAAA;AACrC,IAAA,IAAI,cAAA,EAAgB,qBAAA,CAAsB,IAAA,EAAM,QAAQ,CAAA;AACxD,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,IAAA;AAAA,MACP,IAAA;AAAA,MACA,QAAA,EAAU,QAAA,CAAS,MAAA,GAAS,CAAA,GAAI,QAAA,GAAW,KAAA;AAAA,KAC7C;AAAA,EACF,SAAS,QAAA,EAAU;AACjB,IAAA,IAAI,CAAC,cAAA,EAAgB,OAAO,WAAA,CAAY,UAAU,QAAQ,CAAA;AAC1D,IAAA,qBAAA,CAAsB,MAAM,QAAQ,CAAA;AACpC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,2BAAA,EAA6B,EAAE,CAAA;AAC7D,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,oBAAoB,QAAQ,CAAA;AACzC,MAAA,OAAO,EAAE,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM,QAAA,EAAS;AAAA,IACvC,SAAS,SAAA,EAAW;AAClB,MAAA,OAAO,WAAA,CAAY,WAAW,QAAQ,CAAA;AAAA,IACxC;AAAA,EACF;AACF;AA+BA,eAAsB,uBAAA,CACpB,MAAA,EACA,OAAA,GAAsC,EAAC,EACH;AACpC,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAI,GAAA,CAAI,aAAA,EAAe,MAAM,CAAA;AAAA,EACxC,SAAS,GAAA,EAAK;AACZ,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,IAAA,EAAM,aAAA;AAAA,MACN,KAAA,EAAO,mBAAmB,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,KAC5E;AAAA,EACF;AAEA,EAAA,MAAM,YAAA,GAAiC;AAAA,IACrC,SAAA,EAAW,QAAQ,SAAA,IAAa,mBAAA;AAAA,IAChC,gBAAA,EAAkB,QAAQ,QAAA,IAAY,kBAAA;AAAA,IACtC,OAAA,EAAS,EAAE,YAAA,EAAc,OAAA,CAAQ,aAAa,kBAAA,EAAmB;AAAA,IACjE,cAAA,EAAgB,CAAC,KAAK;AAAA,GACxB;AAKA,EAAA,MAAM,EAAE,YAAA,EAAa,GAAI,MAAM,OAAO,gBAAgB,CAAA;AAEtD,EAAA,MAAM,MAAM,MAAM,YAAA,CAAa,MAAA,CAAO,QAAA,IAAY,YAAY,CAAA;AAC9D,EAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,OAAO,CAAA,EAAG,GAAA,CAAI,IAAI,CAAA,EAAA,EAAK,IAAI,KAAK,CAAA;AAAA,KAClC;AAAA,EACF;AACA,EAAA,IAAI;AACF,IAAA,IAAI,CAAC,GAAA,CAAI,QAAA,CAAS,EAAA,EAAI;AACpB,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,IAAA,EAAM,CAAA,KAAA,EAAQ,GAAA,CAAI,QAAA,CAAS,MAAM,CAAA,CAAA;AAAA,QACjC,KAAA,EAAO,QAAQ,GAAA,CAAI,QAAA,CAAS,MAAM,CAAA,EAAA,EAAK,GAAA,CAAI,SAAS,UAAU,CAAA;AAAA,OAChE;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,QAAA,CAAS,IAAA,EAAK;AACrC,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU,IAAI,QAAA,EAAS;AAAA,EAClD,CAAA,SAAE;AACA,IAAA,MAAM,IAAI,KAAA,EAAM;AAAA,EAClB;AACF;;;AC1MA,SAAS,iBAAiB,IAAA,EAAsB;AAC9C,EAAA,MAAM,OAAA,GAAkC;AAAA,IACtC,YAAA,EAAc,MAAA;AAAA,IACd,eAAA,EAAiB,OAAA;AAAA,IACjB,iBAAA,EAAmB,sBAAA;AAAA,IACnB,aAAA,EAAe,OAAA;AAAA,IACf,kBAAA,EAAoB,MAAA;AAAA,IACpB,cAAA,EAAgB,QAAA;AAAA,IAChB,SAAA,EAAW,WAAA;AAAA,IACX,OAAA,EAAS,WAAA;AAAA,IACT,MAAA,EAAQ;AAAA,GACV;AACA,EAAA,OAAO,OAAA,CAAQ,IAAI,CAAA,IAAK,IAAA;AAC1B;AAKO,SAAS,uBAAuB,OAAA,EAA4C;AACjF,EAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,SAAA,CAAU,OAAO,CAAA;AAEpD,EAAA,IAAI,OAAO,OAAA,EAAS;AAClB,IAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,EACvB;AAEA,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA;AACxC,EAAA,MAAM,OAAA,GAAU,UAAA,EAAY,IAAA,IAAQ,EAAC;AACrC,EAAA,MAAM,SAAA,GAAY,qBAAqB,OAA8B,CAAA;AACrE,EAAA,MAAM,YAAA,GAAe,gBAAA,CAAiB,UAAA,EAAY,IAAA,IAAQ,SAAS,CAAA;AAGnE,EAAA,IAAI,SAAA,GAAY,kBAAA;AAChB,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA;AAChC,EAAA,IAAI,YAAY,KAAA,IAAS,OAAA,CAAQ,UAAA,CAAW,MAAM,GAAG,SAAA,GAAY,kBAAA;AAAA,OAAA,IACxD,YAAY,KAAA,IAAS,OAAA,CAAQ,UAAA,CAAW,MAAM,GAAG,SAAA,GAAY,oBAAA;AAAA,OAAA,IAC7D,OAAA,KAAY,OAAO,SAAA,GAAY,eAAA;AAAA,OAAA,IAC/B,OAAA,KAAY,OAAO,SAAA,GAAY,eAAA;AAAA,OAAA,IAC/B,OAAA,KAAY,OAAO,SAAA,GAAY,eAAA;AAAA,OAAA,IAC/B,UAAA,EAAY,IAAA,KAAS,cAAA,IAAkB,OAAA,CAAQ,SAAS,CAAA,EAAG;AAElE,IAAA,SAAA,GAAY,YAAA;AAAA,EACd;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,UAAA,EAAY,SAAA;AAAA,IACZ,aAAA,EAAe,YAAY,OAAA,IAAW,0BAAA;AAAA,IACtC,UAAA,EAAY,SAAA;AAAA,IACZ,aAAA,EAAe;AAAA,GACjB;AACF;AASO,SAAS,2BAA2B,OAAA,EAA4C;AACrF,EAAA,MAAM,EAAA,GAAK,mBAAmB,OAAO,CAAA;AACrC,EAAA,IAAI,GAAG,EAAA,EAAI;AACT,IAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,EACvB;AACA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,UAAA,EAAY,GAAG,KAAA,CAAM,IAAA;AAAA,IACrB,aAAA,EAAe,GAAG,KAAA,CAAM;AAAA,GAC1B;AACF;AAKA,SAAS,uBAAuB,KAAA,EAAkC;AAChE,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAG7B,IAAA,MAAM,MAAA,GAAS,0BAA0B,KAAK,CAAA;AAC9C,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,IACvB;AACA,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,UAAA,EAAY,yBAAA;AAAA,MACZ,aAAA,EAAe,MAAA,CAAO,MAAA,EAAQ,IAAA,CAAK,IAAI,CAAA,IAAK;AAAA,KAC9C;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAC/C,IAAA,MAAM,GAAA,GAAM,KAAA;AACZ,IAAA,IAAI,CAAC,GAAA,CAAI,MAAA,IAAU,OAAO,GAAA,CAAI,WAAW,QAAA,EAAU;AACjD,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,KAAA;AAAA,QACP,UAAA,EAAY,kBAAA;AAAA,QACZ,aAAA,EAAe;AAAA,OACjB;AAAA,IACF;AACA,IAAA,IAAI,CAAC,GAAA,CAAI,QAAA,IAAY,OAAO,GAAA,CAAI,aAAa,QAAA,EAAU;AACrD,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,KAAA;AAAA,QACP,UAAA,EAAY,oBAAA;AAAA,QACZ,aAAA,EAAe;AAAA,OACjB;AAAA,IACF;AACA,IAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,EACvB;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,UAAA,EAAY,qBAAA;AAAA,IACZ,aAAA,EAAe;AAAA,GACjB;AACF;AAKA,SAAS,2BAA2B,KAAA,EAAkC;AACpE,EAAA,MAAM,MAAA,GAAS,iCAAiC,KAAK,CAAA;AACrD,EAAA,IAAI,OAAO,EAAA,EAAI;AACb,IAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,EACvB;AACA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,UAAA,EAAY,0BAAA;AAAA,IACZ,eAAe,MAAA,CAAO;AAAA,GACxB;AACF;AAKA,SAAS,yBAAyB,KAAA,EAAkC;AAClE,EAAA,MAAM,MAAA,GAAS,+BAA+B,KAAK,CAAA;AACnD,EAAA,IAAI,OAAO,EAAA,EAAI;AACb,IAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,EACvB;AACA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,UAAA,EAAY,uBAAA;AAAA,IACZ,eAAe,MAAA,CAAO;AAAA,GACxB;AACF;AAKA,SAAS,qBAAqB,KAAA,EAAkC;AAC9D,EAAA,MAAM,MAAA,GAAS,2BAA2B,KAAK,CAAA;AAC/C,EAAA,IAAI,OAAO,EAAA,EAAI;AACb,IAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,EACvB;AACA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,UAAA,EAAY,mBAAA;AAAA,IACZ,eAAe,MAAA,CAAO;AAAA,GACxB;AACF;AAKA,SAAS,yBAAyB,KAAA,EAAkC;AAClE,EAAA,MAAM,MAAA,GAAsC,2BAA2B,KAAK,CAAA;AAC5E,EAAA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,IAAA;AAAA,MACP,UAAU,MAAA,CAAO,QAAA,CAAS,IAAI,CAAC,CAAA,KAAM,EAAE,OAAO;AAAA,KAChD;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA;AAClC,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,UAAA,EAAY,YAAY,IAAA,IAAQ,uBAAA;AAAA,IAChC,aAAA,EAAe,YAAY,OAAA,IAAW;AAAA,GACxC;AACF;AAKA,SAAS,sBAAsB,KAAA,EAAkC;AAC/D,EAAA,MAAM,MAAA,GAAmC,+BAA+B,KAAK,CAAA;AAC7E,EAAA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,EACvB;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,YAAY,MAAA,CAAO,UAAA;AAAA,IACnB,eAAe,MAAA,CAAO;AAAA,GACxB;AACF;AAKA,SAAS,yBAAyB,KAAA,EAAkC;AAClE,EAAA,MAAM,MAAA,GAAS,6BAA6B,KAAK,CAAA;AACjD,EAAA,IAAI,OAAO,EAAA,EAAI;AACb,IAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,EACvB;AACA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,UAAA,EAAY,uBAAA;AAAA,IACZ,eAAe,MAAA,CAAO;AAAA,GACxB;AACF;AAKA,SAAS,qBAAqB,KAAA,EAAkC;AAC9D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAC/C,IAAA,MAAM,GAAA,GAAM,KAAA;AAGZ,IAAA,IAAI,IAAI,gBAAA,IAAoB,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,gBAAgB,CAAA,EAAG;AAC/D,MAAA,KAAA,MAAW,CAAA,IAAK,IAAI,gBAAA,EAAkB;AACpC,QAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,CAAC,mBAAA,CAAoB,CAAC,CAAA,IAAK,CAAC,kBAAA,CAAmB,CAAC,CAAA,EAAG;AAC9E,UAAA,OAAO;AAAA,YACL,KAAA,EAAO,KAAA;AAAA,YACP,UAAA,EAAY,yBAAA;AAAA,YACZ,aAAA,EAAe,0BAA0B,CAAC,CAAA;AAAA,WAC5C;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,GAAA,CAAI,gBAAA,IAAoB,OAAO,GAAA,CAAI,qBAAqB,QAAA,EAAU;AACpE,MAAA,IAAI,CAAC,oBAAoB,GAAA,CAAI,gBAAgB,KAAK,CAAC,kBAAA,CAAmB,GAAA,CAAI,gBAAgB,CAAA,EAAG;AAC3F,QAAA,OAAO;AAAA,UACL,KAAA,EAAO,KAAA;AAAA,UACP,UAAA,EAAY,4BAAA;AAAA,UACZ,aAAA,EAAe,CAAA,0BAAA,EAA6B,GAAA,CAAI,gBAAgB,CAAA;AAAA,SAClE;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,EACvB;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,UAAA,EAAY,mBAAA;AAAA,IACZ,aAAA,EAAe;AAAA,GACjB;AACF;AAKA,SAAS,oBAAoB,KAAA,EAAkC;AAC7D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAC/C,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,UAAA,EAAY,kBAAA;AAAA,MACZ,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AAEA,EAAA,MAAM,GAAA,GAAM,KAAA;AAGZ,EAAA,IAAI,CAAC,GAAA,CAAI,OAAA,IAAW,OAAO,GAAA,CAAI,YAAY,QAAA,EAAU;AACnD,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,UAAA,EAAY,mBAAA;AAAA,MACZ,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AAGA,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,IAAK,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC/D,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,UAAA,EAAY,mBAAA;AAAA,MACZ,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AACvB;AAKA,SAAS,kBAAkB,KAAA,EAAkC;AAC3D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAC/C,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,UAAA,EAAY,gBAAA;AAAA,MACZ,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AAEA,EAAA,MAAM,GAAA,GAAM,KAAA;AAGZ,EAAA,IAAI,IAAI,OAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,EAAG;AAE7C,IAAA,KAAA,MAAW,MAAA,IAAU,IAAI,OAAA,EAAS;AAChC,MAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,KAAW,IAAA,EAAM;AACjD,QAAA,OAAO;AAAA,UACL,KAAA,EAAO,KAAA;AAAA,UACP,UAAA,EAAY,mBAAA;AAAA,UACZ,aAAA,EAAe;AAAA,SACjB;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,EACvB;AAGA,EAAA,IAAI,GAAA,CAAI,IAAA,IAAQ,GAAA,CAAI,SAAA,EAAW;AAC7B,IAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,EACvB;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,UAAA,EAAY,0BAAA;AAAA,IACZ,aAAA,EAAe;AAAA,GACjB;AACF;AAKA,SAAS,oBAAoB,KAAA,EAAkC;AAC7D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAC/C,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,UAAA,EAAY,kBAAA;AAAA,MACZ,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AAGA,EAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AACvB;AAKA,SAAS,mBAAmB,KAAA,EAAkC;AAE5D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAC/C,IAAA,MAAM,GAAA,GAAM,KAAA;AAGZ,IAAA,IAAI,IAAI,MAAA,EAAQ;AACd,MAAA,OAAO,sBAAA,CAAuB,IAAI,MAAM,CAAA;AAAA,IAC1C;AAGA,IAAA,IAAI,IAAI,OAAA,EAAS;AACf,MAAA,OAAO,sBAAA,CAAuB,IAAI,OAAO,CAAA;AAAA,IAC3C;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AACvB;AAKA,IAAM,kBAAA,uBAAyB,GAAA,CAAI;AAAA,EACjC,mBAAA;AAAA,EACA,0BAAA;AAAA,EACA,4BAAA;AAAA,EACA,qBAAA;AAAA,EACA,gBAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAC,CAAA;AASD,SAAS,wBAAwB,KAAA,EAAkC;AACjE,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAC/C,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,UAAA,EAAY,uBAAA;AAAA,MACZ,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AAEA,EAAA,MAAM,GAAA,GAAM,KAAA;AACZ,EAAA,IAAI,CAAC,GAAA,CAAI,KAAA,IAAS,OAAO,GAAA,CAAI,UAAU,QAAA,EAAU;AAC/C,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,UAAA,EAAY,iBAAA;AAAA,MACZ,aAAA,EAAe;AAAA,KACjB;AAAA,EACF;AAEA,EAAA,MAAM,QAAQ,GAAA,CAAI,KAAA;AAClB,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,IAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,IAAA,EAAM;AAC7C,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,KAAA;AAAA,QACP,UAAA,EAAY,gBAAA;AAAA,QACZ,aAAA,EAAe,YAAY,IAAI,CAAA,kBAAA;AAAA,OACjC;AAAA,IACF;AACA,IAAA,MAAM,CAAA,GAAI,IAAA;AACV,IAAA,IAAI,CAAC,kBAAA,CAAmB,GAAA,CAAI,CAAA,CAAE,WAAqB,CAAA,EAAG;AACpD,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,KAAA;AAAA,QACP,UAAA,EAAY,uBAAA;AAAA,QACZ,eAAe,CAAA,SAAA,EAAY,IAAI,6BAA6B,MAAA,CAAO,CAAA,CAAE,WAAW,CAAC,CAAA;AAAA,OACnF;AAAA,IACF;AACA,IAAA,IAAI,OAAO,CAAA,CAAE,SAAA,KAAc,SAAA,EAAW;AACpC,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,KAAA;AAAA,QACP,UAAA,EAAY,qBAAA;AAAA,QACZ,eAAe,CAAA,SAAA,EAAY,IAAI,+BAA+B,MAAA,CAAO,CAAA,CAAE,SAAS,CAAC,CAAA;AAAA,OACnF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AACvB;AAQA,SAAS,0BAA0B,KAAA,EAAkC;AACnE,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,EACvB;AACA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,UAAA,EAAY,yBAAA;AAAA,IACZ,aAAA,EAAe;AAAA,GACjB;AACF;AAKO,IAAM,mBAAA,GAAyD;AAAA;AAAA,EAEpE,KAAA,EAAO,CAAC,KAAA,KAAU;AAChB,IAAA,MAAM,GAAA,GAAM,KAAA;AACZ,IAAA,OAAO,sBAAA,CAAuB,GAAA,CAAI,OAAA,IAAW,GAAA,CAAI,UAAU,KAAK,CAAA;AAAA,EAClE,CAAA;AAAA,EACA,OAAA,EAAS,CAAC,KAAA,KAAU;AAClB,IAAA,MAAM,GAAA,GAAM,KAAA;AACZ,IAAA,OAAO,sBAAA,CAAuB,GAAA,CAAI,OAAA,IAAW,GAAA,CAAI,UAAU,KAAK,CAAA;AAAA,EAClE,CAAA;AAAA,EACA,IAAA,EAAM,CAAC,KAAA,KAAU;AACf,IAAA,MAAM,GAAA,GAAM,KAAA;AACZ,IAAA,OAAO,sBAAA,CAAuB,GAAA,CAAI,OAAA,IAAW,GAAA,CAAI,UAAU,KAAK,CAAA;AAAA,EAClE,CAAA;AAAA;AAAA;AAAA,EAIA,KAAA,EAAO,CAAC,KAAA,KAAU;AAChB,IAAA,MAAM,GAAA,GAAM,KAAA;AACZ,IAAA,OAAO,0BAAA,CAA2B,GAAA,CAAI,MAAA,IAAU,GAAA,CAAI,WAAW,KAAK,CAAA;AAAA,EACtE,CAAA;AAAA;AAAA,EAGA,gBAAA,EAAkB,0BAAA;AAAA,EAClB,WAAA,EAAa,wBAAA;AAAA,EACb,MAAA,EAAQ,mBAAA;AAAA,EACR,SAAA,EAAW,sBAAA;AAAA,EACX,OAAA,EAAS,oBAAA;AAAA,EACT,WAAA,EAAa,wBAAA;AAAA,EACb,KAAA,EAAO,kBAAA;AAAA,EACP,WAAA,EAAa,wBAAA;AAAA,EACb,MAAA,EAAQ,mBAAA;AAAA,EACR,OAAA,EAAS,oBAAA;AAAA,EACT,QAAA,EAAU,CAAC,KAAA,KAAU;AACnB,IAAA,MAAM,GAAA,GAAM,KAAA;AACZ,IAAA,OAAO,sBAAA,CAAuB,GAAA,CAAI,OAAA,IAAW,GAAA,CAAI,UAAU,KAAK,CAAA;AAAA,EAClE,CAAA;AAAA,EACA,QAAA,EAAU,qBAAA;AAAA,EACV,IAAA,EAAM,iBAAA;AAAA,EACN,MAAA,EAAQ,uBAAA;AAAA,EACR,eAAA,EAAiB;AACnB,CAAA;AAKO,SAAS,aAAa,QAAA,EAAqC;AAChE,EAAA,OACE,mBAAA,CAAoB,QAAQ,CAAA,KAC3B,CAAC,KAAA,KAAU;AAGV,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAC/C,MAAA,MAAM,GAAA,GAAM,KAAA;AAEZ,MAAA,IAAI,GAAA,CAAI,OAAA,IAAW,GAAA,CAAI,MAAA,EAAQ;AAC7B,QAAA,OAAO,sBAAA,CAAuB,GAAA,CAAI,OAAA,IAAW,GAAA,CAAI,MAAM,CAAA;AAAA,MACzD;AAEA,MAAA,IAAI,SAAS,GAAA,IAAO,KAAA,IAAS,OAAO,KAAA,IAAS,GAAA,IAAO,SAAS,GAAA,EAAK;AAChE,QAAA,OAAO,uBAAuB,KAAK,CAAA;AAAA,MACrC;AAAA,IACF;AACA,IAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AAAA,EACvB,CAAA,CAAA;AAEJ;;;AC3eA,SAAS,SAAA,GAAgC;AACvC,EAAA,IAAI;AACF,IAAA,OAAO,SAAS,4BAAA,EAA8B,EAAE,UAAU,OAAA,EAAS,EAAE,IAAA,EAAK;AAAA,EAC5E,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAMO,SAAS,cAAA,CACd,SACA,SAAA,EACmB;AACnB,EAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,EAAA,MAAM,EAAE,WAAA,EAAa,KAAA,EAAO,QAAA,EAAU,kBAAA,EAAoB,uBAAsB,GAAI,OAAA;AAGpF,EAAA,MAAM,QAAA,GAAW,aAAa,WAAW,CAAA;AAGzC,EAAA,MAAM,UAAaC,GAAA,CAAA,WAAA,CAAY,WAAA,EAAa,EAAE,aAAA,EAAe,MAAM,CAAA;AACnE,EAAA,IAAI,UAAA,GAAa,QACd,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,WAAA,MAAiB,CAAC,CAAA,CAAE,KAAK,UAAA,CAAW,GAAG,CAAC,CAAA,CACxD,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAA,CACjB,IAAA,EAAK;AAER,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,IAAI,CAAC,UAAA,CAAW,QAAA,CAAS,QAAQ,CAAA,EAAG;AAClC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,QAAQ,CAAA,CAAE,CAAA;AAAA,IACnD;AACA,IAAA,UAAA,GAAa,CAAC,QAAQ,CAAA;AAAA,EACxB;AAGA,EAAA,MAAM,aAAA,GAAgB,oBAAA,CAAqB,WAAA,EAAa,UAAU,CAAA;AAGlE,EAAA,MAAM,QAAA,uBAAe,GAAA,EAAY;AAGjC,EAAA,MAAM,UAAwB,EAAC;AAC/B,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAI,OAAA,GAAU,CAAA;AAEd,EAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,IAAA,MAAM,YAAA,GAAoBC,KAAA,CAAA,IAAA,CAAK,WAAA,EAAa,GAAG,CAAA;AAC/C,IAAA,MAAM,OAAA,GAAU,mBAAmB,GAAG,CAAA;AACtC,IAAA,QAAA,CAAS,IAAI,OAAO,CAAA;AAEpB,IAAA,MAAM,SAAA,GAAY,aAAa,GAAG,CAAA;AAElC,IAAA,MAAM,KAAA,GACHD,GAAA,CAAA,WAAA,CAAY,YAAY,CAAA,CACxB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,OAAO,CAAC,CAAA,CACjC,IAAA,EAAK;AAER,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,QAAA,GAAgBC,KAAA,CAAA,IAAA,CAAK,YAAA,EAAc,IAAI,CAAA;AAC7C,MAAA,MAAM,OAAA,GAAaD,GAAA,CAAA,YAAA,CAAa,QAAA,EAAU,MAAM,CAAA;AAChD,MAAA,IAAI,OAAA;AAEJ,MAAA,MAAM,UAAA,GAAa,GAAG,GAAG,CAAA,CAAA,EAAI,KAAK,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAC,CAAA,CAAA;AACtD,MAAA,SAAA,EAAW,cAAc,UAAU,CAAA;AAEnC,MAAA,IAAI;AACF,QAAA,OAAA,GAAU,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,MAC9B,SAAS,GAAA,EAAK;AAEZ,QAAA,MAAA,EAAA;AACA,QAAA,MAAM,MAAA,GAAqB;AAAA,UACzB,EAAA,EAAI,GAAG,UAAU,CAAA,MAAA,CAAA;AAAA,UACjB,QAAA,EAAU,OAAA;AAAA,UACV,MAAA,EAAQ,MAAA;AAAA,UACR,QAAA,EAAU;AAAA,YACR,KAAA,EAAO,KAAA;AAAA,YACP,UAAA,EAAY,gBAAA;AAAA,YACZ,eAAgB,GAAA,CAAc;AAAA,WAChC;AAAA,UACA,WAAA,EAAa;AAAA,YACX,UAAA,EAAY,gBAAA;AAAA,YACZ,eAAgB,GAAA,CAAc;AAAA;AAChC,SACF;AACA,QAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AACnB,QAAA,SAAA,EAAW,iBAAiB,MAAM,CAAA;AAClC,QAAA;AAAA,MACF;AAGA,MAAA,MAAM,UAAA,GAAa,OAAA;AACnB,MAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,QAAQ,CAAA;AAEvD,MAAA,IAAI,aAAA,EAAe;AAEjB,QAAA,MAAM,IAAA,GAAO,OAAA;AAEb,QAAA,IAAI,CAAC,gBAAA,CAAiB,IAAA,CAAK,OAAA,EAAS,KAAK,CAAA,EAAG;AAC1C,UAAA,OAAA,EAAA;AACA,UAAA,MAAM,MAAA,GAAqB;AAAA,YACzB,EAAA,EAAI,UAAA;AAAA,YACJ,QAAA,EAAU,OAAA;AAAA,YACV,MAAA,EAAQ,MAAA;AAAA,YACR,WAAA,EAAa;AAAA,cACX,WAAA,EAAa,CAAA,gBAAA,EAAmB,IAAA,CAAK,OAAO,kBAAkB,KAAK,CAAA;AAAA;AACrE,WACF;AACA,UAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AACnB,UAAA,SAAA,EAAW,iBAAiB,MAAM,CAAA;AAClC,UAAA;AAAA,QACF;AAEA,QAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AAC7C,UAAA,MAAM,CAAA,GAAI,IAAA,CAAK,QAAA,CAAS,CAAC,CAAA;AACzB,UAAA,MAAM,WAAA,GAAc,CAAA,CAAE,IAAA,IAAQ,CAAA,QAAA,EAAW,CAAC,CAAA,CAAA;AAC1C,UAAA,MAAM,MAAA,GAAS,GAAG,UAAU,CAAA,CAAA,EAAI,YAAY,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAC,CAAA,CAAA;AAEhE,UAAA,SAAA,EAAW,cAAc,MAAM,CAAA;AAI/B,UAAA,IAAI,CAAC,CAAA,CAAE,QAAA,IAAY,OAAO,CAAA,CAAE,QAAA,CAAS,UAAU,SAAA,EAAW;AACxD,YAAA,OAAA,EAAA;AACA,YAAA,MAAME,OAAAA,GAAqB;AAAA,cACzB,EAAA,EAAI,MAAA;AAAA,cACJ,QAAA,EAAU,OAAA;AAAA,cACV,MAAA,EAAQ,MAAA;AAAA,cACR,WAAA,EAAa;AAAA,gBACX,WAAA,EAAa;AAAA;AACf,aACF;AACA,YAAA,OAAA,CAAQ,KAAKA,OAAM,CAAA;AACnB,YAAA,SAAA,EAAW,iBAAiBA,OAAM,CAAA;AAClC,YAAA;AAAA,UACF;AAGA,UAAA,MAAM,WAAA,GAAc,sBAAA,CAAuB,CAAA,CAAE,KAAK,CAAA;AAKlD,UAAA,IAAI,OAAO,CAAA,CAAE,KAAA,KAAU,QAAA,IAAY,CAAA,CAAE,UAAU,IAAA,EAAM;AACnD,YAAA,MAAM,WAAW,CAAA,CAAE,KAAA;AACnB,YAAA,IAAI,QAAA,CAAS,MAAA,KAAW,MAAA,IAAa,QAAA,CAAS,YAAY,MAAA,EAAW;AACnE,cAAA,MAAA,EAAA;AACA,cAAA,MAAMA,OAAAA,GAAqB;AAAA,gBACzB,EAAA,EAAI,MAAA;AAAA,gBACJ,QAAA,EAAU,OAAA;AAAA,gBACV,MAAA,EAAQ,MAAA;AAAA,gBACR,WAAA,EAAa;AAAA,kBACX,aAAA,EAAe;AAAA;AACjB,eACF;AACA,cAAA,OAAA,CAAQ,KAAKA,OAAM,CAAA;AACnB,cAAA,SAAA,EAAW,iBAAiBA,OAAM,CAAA;AAClC,cAAA;AAAA,YACF;AAAA,UACF;AAEA,UAAA,MAAM,QAAA,GAAW,SAAA,CAAU,CAAA,CAAE,KAAK,CAAA;AAGlC,UAAA,MAAM,aAAA,GAAgB,EAAE,QAAA,CAAS,KAAA;AACjC,UAAA,MAAM,cAAc,QAAA,CAAS,KAAA;AAC7B,UAAA,MAAM,aAAA,GAAgB,CAAA,CAAE,QAAA,CAAS,UAAA,IAAc,EAAE,QAAA,CAAS,KAAA;AAC1D,UAAA,MAAM,cAAc,QAAA,CAAS,UAAA;AAE7B,UAAA,IAAI,MAAA;AACJ,UAAA,IAAI,iBAAiB,WAAA,EAAa;AAChC,YAAA,MAAA,GAAS,MAAA;AACT,YAAA,MAAA,EAAA;AAAA,UACF,CAAA,MAAA,IAAW,CAAC,aAAA,IAAiB,CAAC,WAAA,EAAa;AAEzC,YAAA,IAAI,aAAA,IAAiB,WAAA,IAAe,aAAA,KAAkB,WAAA,EAAa;AACjE,cAAA,MAAA,GAAS,MAAA;AACT,cAAA,MAAA,EAAA;AAAA,YACF,CAAA,MAAO;AACL,cAAA,MAAA,GAAS,MAAA;AACT,cAAA,MAAA,EAAA;AAAA,YACF;AAAA,UACF,CAAA,MAAO;AACL,YAAA,MAAA,GAAS,MAAA;AACT,YAAA,MAAA,EAAA;AAAA,UACF;AAEA,UAAA,MAAM,MAAA,GAAqB;AAAA,YACzB,EAAA,EAAI,MAAA;AAAA,YACJ,QAAA,EAAU,OAAA;AAAA,YACV,MAAA;AAAA,YACA,QAAA,EAAU;AAAA,cACR,KAAA,EAAO,aAAA;AAAA,cACP,UAAA,EAAY;AAAA,aACd;AAAA,YACA,QAAA,EAAU;AAAA,cACR,KAAA,EAAO,WAAA;AAAA,cACP,UAAA,EAAY,WAAA;AAAA,cACZ,eAAe,QAAA,CAAS;AAAA,aAC1B;AAAA,YACA,WAAA,EAAa;AAAA,cACX,YAAA,EAAc,WAAA;AAAA,cACd,UAAU,QAAA,CAAS;AAAA;AACrB,WACF;AACA,UAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AACnB,UAAA,SAAA,EAAW,iBAAiB,MAAM,CAAA;AAAA,QACpC;AAAA,MACF,CAAA,MAAO;AAEL,QAAA,MAAM,aAAA,GAAgB,OAAA;AACtB,QAAA,MAAM,MAAA,GAAS,UAAA;AAGf,QAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,QAAA,EAAU,GAAA,EAAK,IAAI,CAAA;AAG1D,QAAA,MAAM,eAAA,GAAkB,cAAc,OAAA,IAAW,OAAA;AACjD,QAAA,MAAM,WAAA,GAAc,aAAA,CAAc,OAAA,GAC9B,sBAAA,CAAuB,eAAe,CAAA,GACtC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,MAAA,CAAO,OAAO,CAAA,EAAE;AAG7C,QAAA,MAAM,gBACJ,aAAA,CAAc,cAAA,IACd,eAAe,cAAA,KACd,GAAA,KAAQ,WAAW,GAAA,KAAQ,MAAA,CAAA;AAG9B,QAAA,MAAM,aAAA,GAAgB,aAAA,CAAc,cAAA,IAAkB,aAAA,EAAe,mBAAA;AAGrE,QAAA,MAAM,eAAe,aAAA,EAAe,aAAA;AACpC,QAAA,MAAM,kBAAkB,aAAA,EAAe,gBAAA;AAEvC,QAAA,MAAM,QAAA,GAAW,UAAU,eAAe,CAAA;AAE1C,QAAA,IAAI,MAAA;AACJ,QAAA,IAAI,aAAA,IAAiB,SAAS,KAAA,EAAO;AACnC,UAAA,MAAA,GAAS,MAAA;AACT,UAAA,MAAA,EAAA;AAAA,QACF,CAAA,MAAA,IAAW,CAAC,aAAA,IAAiB,CAAC,SAAS,KAAA,EAAO;AAE5C,UAAA,IAAI,QAAA,GAAW,KAAA;AACf,UAAA,IAAI,aAAA,IAAiB,QAAA,CAAS,UAAA,IAAc,aAAA,KAAkB,SAAS,UAAA,EAAY;AACjF,YAAA,QAAA,GAAW,IAAA;AAAA,UACb;AAEA,UAAA,IAAI,YAAA,IAAgB,QAAA,CAAS,UAAA,IAAc,YAAA,KAAiB,SAAS,UAAA,EAAY;AAC/E,YAAA,QAAA,GAAW,IAAA;AAAA,UACb;AAEA,UAAA,IACE,eAAA,IACA,QAAA,CAAS,aAAA,IACT,eAAA,KAAoB,SAAS,aAAA,EAC7B;AACA,YAAA,QAAA,GAAW,IAAA;AAAA,UACb;AACA,UAAA,IAAI,QAAA,EAAU;AACZ,YAAA,MAAA,GAAS,MAAA;AACT,YAAA,MAAA,EAAA;AAAA,UACF,CAAA,MAAO;AACL,YAAA,MAAA,GAAS,MAAA;AACT,YAAA,MAAA,EAAA;AAAA,UACF;AAAA,QACF,CAAA,MAAO;AACL,UAAA,MAAA,GAAS,MAAA;AACT,UAAA,MAAA,EAAA;AAAA,QACF;AAEA,QAAA,MAAM,MAAA,GAAqB;AAAA,UACzB,EAAA,EAAI,MAAA;AAAA,UACJ,QAAA,EAAU,OAAA;AAAA,UACV,MAAA;AAAA,UACA,QAAA,EAAU;AAAA,YACR,KAAA,EAAO,aAAA;AAAA,YACP,UAAA,EAAY,aAAA;AAAA,YACZ,UAAA,EAAY,YAAA;AAAA,YACZ,aAAA,EAAe;AAAA,WACjB;AAAA,UACA,QAAA,EAAU;AAAA,YACR,OAAO,QAAA,CAAS,KAAA;AAAA,YAChB,YAAY,QAAA,CAAS,UAAA;AAAA,YACrB,YAAY,QAAA,CAAS,UAAA;AAAA,YACrB,eAAe,QAAA,CAAS,aAAA;AAAA,YACxB,eAAe,QAAA,CAAS;AAAA,WAC1B;AAAA,UACA,WAAA,EAAa;AAAA,YACX,YAAA,EAAc,WAAA;AAAA,YACd,UAAU,QAAA,CAAS;AAAA;AACrB,SACF;AACA,QAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AACnB,QAAA,SAAA,EAAW,iBAAiB,MAAM,CAAA;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AAGA,EAAA,MAAM,eAAgC,EAAC;AACvC,EAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,IAAA,MAAM,UAAA,GAAa,sBAAsB,GAAG,CAAA;AAE5C,IAAA,IAAI,CAAC,aAAa,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,OAAA,KAAY,UAAA,CAAW,OAAO,CAAA,EAAG;AAC/D,MAAA,YAAA,CAAa,KAAK,UAAU,CAAA;AAAA,IAC9B;AAAA,EACF;AACA,EAAA,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,OAAA,CAAQ,aAAA,CAAc,CAAA,CAAE,OAAO,CAAC,CAAA;AAE9D,EAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AAGzB,EAAA,MAAM,MAAA,GAA4B;AAAA,IAChC,cAAA,EAAgB,6BAAA;AAAA,IAChB,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,uBAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,cAAA,EAAgB;AAAA,QACd,GAAA,EAAK,SAAA;AAAA,QACL,KAAA,EAAO;AAAA,OACT;AAAA,MACA,QAAA,EAAU,KAAA,CAAM,IAAA,CAAK,QAAQ,EAAE,IAAA,EAAK;AAAA,MACpC;AAAA,KACF;AAAA,IACA,cAAA,EAAgB;AAAA,MACd,MAAM,kBAAA,IAAsB,WAAA;AAAA,MAC5B,SAAS,qBAAA,IAAyB;AAAA,KACpC;AAAA,IACA,OAAA,EAAS;AAAA,MACP,MAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,KAAA,EAAO,SAAS,MAAA,GAAS,OAAA;AAAA,MACzB,MAAA,EAAQ,MAAA,KAAW,CAAA,GAAI,MAAA,GAAS;AAAA,KAClC;AAAA,IACA,OAAA;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,YAAA,EAAA,iBAAc,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,MACrC,aAAa,OAAA,GAAU,SAAA;AAAA,MACvB,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,WAAA;AAAA,QACN,SAAS,qBAAA,IAAyB,OAAA;AAAA,QAClC,SAAS,SAAA;AAAU;AACrB;AACF,GACF;AAEA,EAAA,OAAO,MAAA;AACT;AAKO,SAAS,iBAAiB,MAAA,EAAmC;AAClE,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,KAAA,CAAM,KAAK,+BAA+B,CAAA;AAC1C,EAAA,KAAA,CAAM,KAAK,+BAA+B,CAAA;AAC1C,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,KAAK,CAAA,QAAA,EAAW,MAAA,CAAO,QAAQ,MAAA,CAAO,WAAA,EAAa,CAAA,CAAE,CAAA;AAC3D,EAAA,KAAA,CAAM,IAAA,CAAK,aAAa,MAAA,CAAO,KAAA,CAAM,SAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAC1D,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,KAAK,UAAU,CAAA;AACrB,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,WAAA,EAAc,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAAE,CAAA;AAChD,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,WAAA,EAAc,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAAE,CAAA;AAChD,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,WAAA,EAAc,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,CAAA;AACjD,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,WAAA,EAAc,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,CAAA;AAE/C,EAAA,MAAM,QAAA,GAAW,OAAO,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,MAAM,CAAA;AACjE,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,KAAK,WAAW,CAAA;AACtB,IAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,EAAO,CAAA,CAAE,EAAE,CAAA,CAAE,CAAA;AACxB,MAAA,IAAI,EAAE,QAAA,EAAU;AACd,QAAA,KAAA,CAAM,IAAA;AAAA,UACJ,CAAA,oBAAA,EAAuB,CAAA,CAAE,QAAA,CAAS,KAAK,CAAA,EAAG,CAAA,CAAE,QAAA,CAAS,UAAA,GAAa,CAAA,QAAA,EAAW,CAAA,CAAE,QAAA,CAAS,UAAU,KAAK,EAAE,CAAA;AAAA,SAC3G;AAAA,MACF;AACA,MAAA,IAAI,EAAE,QAAA,EAAU;AACd,QAAA,KAAA,CAAM,IAAA;AAAA,UACJ,CAAA,oBAAA,EAAuB,CAAA,CAAE,QAAA,CAAS,KAAK,CAAA,EAAG,CAAA,CAAE,QAAA,CAAS,UAAA,GAAa,CAAA,QAAA,EAAW,CAAA,CAAE,QAAA,CAAS,UAAU,KAAK,EAAE,CAAA;AAAA,SAC3G;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAKO,SAAS,qBAAqB,MAAA,EAAmC;AACtE,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,KAAA,CAAM,KAAK,2BAA2B,CAAA;AACtC,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,KAAK,CAAA,YAAA,EAAe,MAAA,CAAO,QAAQ,MAAA,CAAO,WAAA,EAAa,CAAA,CAAE,CAAA;AAC/D,EAAA,KAAA,CAAM,IAAA,CAAK,iBAAiB,MAAA,CAAO,KAAA,CAAM,SAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAC9D,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,KAAK,YAAY,CAAA;AACvB,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,KAAK,oBAAoB,CAAA;AAC/B,EAAA,KAAA,CAAM,KAAK,oBAAoB,CAAA;AAC/B,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,WAAA,EAAc,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAA,CAAI,CAAA;AAClD,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,WAAA,EAAc,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAA,CAAI,CAAA;AAClD,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,YAAA,EAAe,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAA,CAAI,CAAA;AACpD,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAA,CAAI,CAAA;AAEhD,EAAA,MAAM,QAAA,GAAW,OAAO,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,MAAM,CAAA;AACjE,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,KAAK,aAAa,CAAA;AACxB,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,EAAO,CAAA,CAAE,EAAE,CAAA,CAAE,CAAA;AACxB,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,MAAA,IAAI,EAAE,QAAA,EAAU;AACd,QAAA,KAAA,CAAM,IAAA;AAAA,UACJ,CAAA,sBAAA,EAAyB,CAAA,CAAE,QAAA,CAAS,KAAK,CAAA,EAAG,CAAA,CAAE,QAAA,CAAS,UAAA,GAAa,CAAA,QAAA,EAAW,CAAA,CAAE,QAAA,CAAS,UAAU,KAAK,EAAE,CAAA;AAAA,SAC7G;AAAA,MACF;AACA,MAAA,IAAI,EAAE,QAAA,EAAU;AACd,QAAA,KAAA,CAAM,IAAA;AAAA,UACJ,CAAA,sBAAA,EAAyB,CAAA,CAAE,QAAA,CAAS,KAAK,CAAA,EAAG,CAAA,CAAE,QAAA,CAAS,UAAA,GAAa,CAAA,QAAA,EAAW,CAAA,CAAE,QAAA,CAAS,UAAU,KAAK,EAAE,CAAA;AAAA,SAC7G;AAAA,MACF;AACA,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AC5dO,SAAS,UAAA,GAAqB;AAEnC,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAUC,IAAAA,CAAK,SAAA,EAAW,IAAA,EAAM,MAAM,cAAc,CAAA;AAC1D,IAAA,IAAIC,UAAAA,CAAW,OAAO,CAAA,EAAG;AACvB,MAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAMC,YAAAA,CAAa,OAAA,EAAS,MAAM,CAAC,CAAA;AACpD,MAAA,IAAI,GAAA,CAAI,OAAA,EAAS,OAAO,GAAA,CAAI,OAAA;AAAA,IAC9B;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AAGA,EAAA,IAAI;AACF,IAAA,MAAM,UAAUF,IAAAA,CAAK,OAAA,CAAQ,KAAI,EAAG,UAAA,EAAY,OAAO,cAAc,CAAA;AACrE,IAAA,IAAIC,UAAAA,CAAW,OAAO,CAAA,EAAG;AACvB,MAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAMC,YAAAA,CAAa,OAAA,EAAS,MAAM,CAAC,CAAA;AACpD,MAAA,IAAI,GAAA,CAAI,OAAA,EAAS,OAAO,GAAA,CAAI,OAAA;AAAA,IAC9B;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AAGA,EAAA,OAAO,eAAA;AACT;AAKO,SAAS,UAAA,GAAqB;AACnC,EAAA,OAAO,CAAA,KAAA,EAAQ,OAAA,CAAQ,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AACzC;AAKO,SAAS,SAAA,GAAgC;AAE9C,EAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,UAAA,IAAc,OAAA,CAAQ,GAAA,CAAI,UAAA;AAC/C;;;ACpBA,SAASC,kBAAiB,GAAA,EAAwC;AAChE,EAAA,MAAM,SAAS,GAAA,CAAI,MAAA;AACnB,EAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,EAAC;AACrB,EAAA,OAAO,OAAO,IAAA,EAAK;AACrB;AAKA,SAASC,YAAAA,CACP,KAAA,EACA,OAAA,EACA,IAAA,EACM;AACN,EAAA,IAAI,KAAK,IAAA,EAAM;AACb,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,GAAG,OAAA,EAAQ,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,EAC5E,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,CAAA;AAC/B,IAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,MAAA,EAAS,OAAA,CAAQ,IAAI,CAAA,CAAE,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,MAAA,EAAS,OAAA,CAAQ,IAAI,CAAA,CAAE,CAAA;AAAA,IACvC;AAAA,EACF;AACF;AAKA,SAAS,gBAAgB,UAAA,EAAoC;AAE3D,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,IAAOC,GAAA,CAAA,UAAA,CAAW,UAAU,CAAA,EAAG;AAC7B,MAAA,OAAO,UAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,MAAM,OAAA,GAAeC,KAAA,CAAA,OAAA,CAAQ,SAAA,EAAW,wCAAwC,CAAA;AAChF,EAAA,IAAOD,GAAA,CAAA,UAAA,CAAW,OAAO,CAAA,EAAG;AAC1B,IAAA,OAAO,OAAA;AAAA,EACT;AAGA,EAAA,MAAM,QAAA,GAAgBC,KAAA,CAAA,OAAA,CAAQ,OAAA,CAAQ,GAAA,IAAO,4BAA4B,CAAA;AACzE,EAAA,IAAOD,GAAA,CAAA,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3B,IAAA,OAAO,QAAA;AAAA,EACT;AAGA,EAAA,MAAM,MAAA,GAAcC,KAAA,CAAA,OAAA,CAAQ,OAAA,CAAQ,GAAA,IAAO,kCAAkC,CAAA;AAC7E,EAAA,IAAOD,GAAA,CAAA,UAAA,CAAW,MAAM,CAAA,EAAG;AACzB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA;AACT;AAKA,SAAS,eAAe,WAAA,EAA+B;AACrD,EAAA,MAAM,UAAaA,GAAA,CAAA,WAAA,CAAY,WAAA,EAAa,EAAE,aAAA,EAAe,MAAM,CAAA;AACnE,EAAA,OAAO,QAAQ,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,WAAA,MAAiB,CAAC,CAAA,CAAE,IAAA,CAAK,UAAA,CAAW,GAAG,CAAC,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAC5F;AAKA,SAAS,cAAc,YAAA,EAA8B;AACnD,EAAA,IAAI,CAAIA,GAAA,CAAA,UAAA,CAAW,YAAY,CAAA,EAAG,OAAO,CAAA;AACzC,EAAA,MAAM,KAAA,GAAWA,gBAAY,YAAY,CAAA;AACzC,EAAA,OAAO,KAAA,CAAM,OAAO,CAAC,CAAA,KAAM,EAAE,QAAA,CAAS,OAAO,CAAC,CAAA,CAAE,MAAA;AAClD;AAEA,IAAM,WAAA,GAAc,IAAIE,OAAAA,CAAQ,aAAa,CAAA,CAC1C,YAAY,qCAAqC,CAAA,CACjD,MAAA,CAAO,QAAA,EAAU,uBAAuB,CAAA;AAK3C,WAAA,CACG,QAAQ,KAAK,CAAA,CACb,WAAA,CAAY,uBAAuB,EACnC,MAAA,CAAO,qBAAA,EAAuB,0CAAA,EAA4C,UAAU,EACpF,MAAA,CAAO,2BAAA,EAA6B,6BAA6B,CAAA,CACjE,OAAO,uBAAA,EAAyB,qCAAA,EAAuC,MAAM,CAAA,CAC7E,OAAO,eAAA,EAAiB,2BAA2B,CAAA,CACnD,MAAA,CAAO,qBAAqB,4BAA4B,CAAA,CACxD,MAAA,CAAO,yBAAA,EAA2B,kCAAkC,WAAW,CAAA,CAC/E,MAAA,CAAO,OAAO,SAAS,GAAA,KAAQ;AAC9B,EAAA,MAAM,UAAA,GAAaJ,kBAAiB,GAAG,CAAA;AACvC,EAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,EAAA,IAAI;AAEF,IAAA,MAAM,WAAA,GAAc,eAAA,CAAgB,OAAA,CAAQ,QAAQ,CAAA;AACpD,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAAC,YAAAA;AAAA,QACE,8BAAA;AAAA,QACA;AAAA,UACE,MAAM,OAAA,CAAQ,QAAA,GACV,CAAA,+BAAA,EAAkC,OAAA,CAAQ,QAAQ,CAAA,CAAA,GAClD;AAAA,SACN;AAAA,QACA;AAAA,OACF;AACA,MAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,WAAA,GAAkC,CAAC,OAAA,EAAS,UAAA,EAAY,MAAM,CAAA;AACpE,IAAA,IAAI,CAAC,WAAA,CAAY,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxC,MAAAA,YAAAA;AAAA,QACE,2BAAA;AAAA,QACA;AAAA,UACE,OAAO,OAAA,CAAQ,KAAA;AAAA,UACf,KAAA,EAAO;AAAA,SACT;AAAA,QACA;AAAA,OACF;AACA,MAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,SAAA,GAAyC,QAAQ,OAAA,GACnD;AAAA,MACE,WAAA,EAAa,CAAC,MAAA,KAAmB;AAC/B,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,SAAA,EAAY,MAAM,CAAA,CAAE,CAAA;AAAA,MAClC,CAAA;AAAA,MACA,cAAA,EAAgB,CAAC,MAAA,KAAuB;AACtC,QAAA,MAAM,MAAA,GACJ,OAAO,MAAA,KAAW,MAAA,GAAS,SAAS,MAAA,CAAO,MAAA,KAAW,SAAS,MAAA,GAAS,MAAA;AAC1E,QAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,MAAM,CAAA,EAAA,EAAK,MAAA,CAAO,EAAE,CAAA,CAAE,CAAA;AAAA,MACzC;AAAA,KACF,GACA,KAAA,CAAA;AAGJ,IAAA,MAAM,MAAA,GAAS,cAAA;AAAA,MACb;AAAA,QACE,WAAA;AAAA,QACA,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,oBAAoB,OAAA,CAAQ,cAAA;AAAA,QAC5B,uBAAuB,UAAA;AAAW,OACpC;AAAA,MACA;AAAA,KACF;AAGA,IAAA,MAAA,CAAO,cAAA,CAAe,UAAU,UAAA,EAAW;AAC3C,IAAA,MAAM,SAAS,SAAA,EAAU;AACzB,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAA,CAAO,eAAe,MAAA,GAAS,MAAA;AAAA,IACjC;AAGA,IAAA,MAAA,CAAO,IAAA,GAAO;AAAA,MACZ,YAAA,EAAA,iBAAc,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,MACrC,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,UAAA;AAAA,QACN,SAAS,UAAA;AAAW,OACtB;AAAA,MACA,WAAA,EAAa,IAAA,CAAK,GAAA,EAAI,GAAI;AAAA,KAC5B;AAGA,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,MAAA,IAAU,UAAA,CAAW,IAAA,EAAM;AAChD,MAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,IAC7C,CAAA,MAAA,IAAW,OAAA,CAAQ,MAAA,KAAW,UAAA,EAAY;AACxC,MAAA,OAAA,CAAQ,GAAA,CAAI,oBAAA,CAAqB,MAAM,CAAC,CAAA;AAAA,IAC1C,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,GAAA,CAAI,gBAAA,CAAiB,MAAM,CAAC,CAAA;AAAA,IACtC;AAEA,IAAA,OAAA,CAAQ,QAAA,GAAW,MAAA,CAAO,OAAA,CAAQ,MAAA,KAAW,IAAI,CAAA,GAAI,CAAA;AAAA,EACvD,SAAS,GAAA,EAAK;AACZ,IAAAA,YAAAA,CAAa,GAAA,CAAc,OAAA,EAAS,IAAI,UAAU,CAAA;AAClD,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB;AACF,CAAC,CAAA;AAKH,WAAA,CACG,QAAQ,MAAM,CAAA,CACd,WAAA,CAAY,0CAA0C,EACtD,MAAA,CAAO,2BAAA,EAA6B,oCAAoC,CAAA,CACxE,OAAO,mBAAA,EAAqB,4BAA4B,EACxD,MAAA,CAAO,CAAC,SAAS,GAAA,KAAQ;AACxB,EAAA,MAAM,UAAA,GAAaD,kBAAiB,GAAG,CAAA;AAEvC,EAAA,IAAI;AAEF,IAAA,MAAM,WAAA,GAAc,eAAA,CAAgB,OAAA,CAAQ,QAAQ,CAAA;AACpD,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAAC,YAAAA;AAAA,QACE,8BAAA;AAAA,QACA;AAAA,UACE,MAAM,OAAA,CAAQ,QAAA,GACV,CAAA,+BAAA,EAAkC,OAAA,CAAQ,QAAQ,CAAA,CAAA,GAClD;AAAA,SACN;AAAA,QACA;AAAA,OACF;AACA,MAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,YAAA,GAAoBE,KAAA,CAAA,IAAA,CAAK,WAAA,EAAa,eAAe,CAAA;AAC3D,IAAA,MAAM,QAAA,GAAcD,GAAA,CAAA,UAAA,CAAW,YAAY,CAAA,GACvC,IAAA,CAAK,KAAA,CAASA,GAAA,CAAA,YAAA,CAAa,YAAA,EAAc,MAAM,CAAC,CAAA,GAChD,EAAC;AAGL,IAAA,MAAM,UAAA,GAAa,eAAe,WAAW,CAAA;AAE7C,IAAA,IAAI,QAAQ,QAAA,EAAU;AAEpB,MAAA,IAAI,CAAC,UAAA,CAAW,QAAA,CAAS,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC1C,QAAAD,YAAAA;AAAA,UACE,oBAAA;AAAA,UACA;AAAA,YACE,UAAU,OAAA,CAAQ,QAAA;AAAA,YAClB,SAAA,EAAW;AAAA,WACb;AAAA,UACA;AAAA,SACF;AACA,QAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,YAAA,GAAoBE,KAAA,CAAA,IAAA,CAAK,WAAA,EAAa,OAAA,CAAQ,QAAQ,CAAA;AAC5D,MAAA,MAAM,KAAA,GAAWD,GAAA,CAAA,WAAA,CAAY,YAAY,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,OAAO,CAAC,CAAA;AAC5E,MAAA,MAAM,gBAAA,GAAmB,QAAA,CAAS,OAAA,CAAQ,QAAQ,CAAA;AAIlD,MAAA,IAAI,WAAW,IAAA,EAAM;AACnB,QAAA,MAAM,QAAA,GAAW,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,UACjC,IAAA,EAAM,CAAA;AAAA,UACN,WAAA,EAAc,gBAAA,GAAmB,CAAC,CAAA,EAAG,WAAA,IAA0B;AAAA,SACjE,CAAE,CAAA;AACF,QAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,EAAE,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAU,QAAA,EAAS,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,MAC/E,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,YAAA,EAAe,OAAA,CAAQ,QAAQ,CAAA;AAAA,CAAK,CAAA;AAChD,QAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,UAAA,MAAM,IAAA,GAAO,gBAAA,GAAmB,IAAI,CAAA,IAAK,EAAC;AAC1C,UAAA,MAAM,IAAA,GAAQ,KAAK,WAAA,IAA0B,gBAAA;AAC7C,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,IAAI,CAAA,CAAE,CAAA;AACvB,UAAA,OAAA,CAAQ,GAAA,CAAI,OAAO,IAAI;AAAA,CAAI,CAAA;AAAA,QAC7B;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AAEL,MAAA,IAAI,WAAW,IAAA,EAAM;AACnB,QAAA,MAAM,eAAA,GAAkB,UAAA,CAAW,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,UAC/C,IAAA,EAAM,GAAA;AAAA,UACN,aAAA,EAAe,aAAA,CAAmBC,KAAA,CAAA,IAAA,CAAK,WAAA,EAAa,GAAG,CAAC;AAAA,SAC1D,CAAE,CAAA;AACF,QAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,SAAA,CAAU,EAAE,YAAY,eAAA,EAAgB,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,MACtE,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA;AAAA,CAA0C,CAAA;AACtD,QAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,UAAA,MAAM,KAAA,GAAQ,aAAA,CAAmBA,KAAA,CAAA,IAAA,CAAK,WAAA,EAAa,GAAG,CAAC,CAAA;AACvD,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,GAAG,CAAA,EAAA,EAAK,KAAK,CAAA,UAAA,CAAY,CAAA;AAAA,QAC5C;AACA,QAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,wEAAA,CAA4E,CAAA;AAAA,MAC1F;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB,SAAS,GAAA,EAAK;AACZ,IAAAF,YAAAA,CAAa,GAAA,CAAc,OAAA,EAAS,IAAI,UAAU,CAAA;AAClD,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB;AACF,CAAC,CAAA;AC/RH,IAAM,gBAAA,GAAuC;AAAA,EAC3C;AAAA,IACE,EAAA,EAAI,eAAA;AAAA,IACJ,IAAA,EAAM,eAAA;AAAA,IACN,WAAA,EAAa,sDAAA;AAAA,IACb,QAAA,EAAU,OAAA;AAAA,IACV,MAAA,EAAQ;AAAA,MACN,GAAA,EAAK,kCAAA;AAAA,MACL,GAAA,EAAK,qBAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA;AAAA,MACL,GAAA,EAAK;AAAA;AACP,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAI,cAAA;AAAA,IACJ,IAAA,EAAM,cAAA;AAAA,IACN,WAAA,EAAa,iDAAA;AAAA,IACb,QAAA,EAAU,OAAA;AAAA,IACV,MAAA,EAAQ;AAAA,MACN,GAAA,EAAK,kCAAA;AAAA,MACL,GAAA,EAAK,yBAAA;AAAA,MACL,GAAA,EAAK,gBAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,iBAAA;AAAA,MACL,gBAAA,EAAkB,CAAC,QAAA,EAAU,OAAO,CAAA;AAAA,MACpC,gBAAA,EAAkB,QAAA;AAAA,MAClB,cAAA,EAAgB;AAAA;AAClB,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAI,sBAAA;AAAA,IACJ,IAAA,EAAM,sBAAA;AAAA,IACN,WAAA,EAAa,+DAAA;AAAA,IACb,QAAA,EAAU,OAAA;AAAA,IACV,MAAA,EAAQ;AAAA,MACN,GAAA,EAAK,kCAAA;AAAA,MACL,GAAA,EAAK,2BAAA;AAAA,MACL,GAAA,EAAK,qBAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,eAAA;AAAA,MACL,GAAA,EAAK;AAAA,QACH,kCAAA,EAAoC;AAAA,UAClC,OAAA,EAAS,KAAA;AAAA,UACT,cAAA,EAAgB,gBAAA;AAAA,UAChB,UAAA,EAAY,0BAAA;AAAA,UACZ,YAAA,EAAc,0BAAA;AAAA,UACd,OAAA,EAAS,EAAE,IAAA,EAAM,SAAA,EAAU;AAAA,UAC3B,KAAA,EAAO,EAAE,IAAA,EAAM,kBAAA,EAAoB,aAAa,IAAA,EAAK;AAAA,UACrD,MAAA,EAAQ,EAAE,IAAA,EAAM,kBAAA,EAAoB,aAAa,IAAA;AAAK;AACxD;AACF;AACF,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAI,kBAAA;AAAA,IACJ,IAAA,EAAM,kBAAA;AAAA,IACN,WAAA,EAAa,0CAAA;AAAA,IACb,QAAA,EAAU,OAAA;AAAA,IACV,MAAA,EAAQ;AAAA,MACN,GAAA,EAAK,kCAAA;AAAA,MACL,GAAA,EAAK,yBAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,oBAAA;AAAA,MACL,GAAA,EAAK,KAAA;AAAA,MACL,GAAA,EAAK,KAAA;AAAA,MACL,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,MAAA;AAAA,QACN,SAAA,EAAW,gBAAA;AAAA,QACX,MAAA,EAAQ,KAAA;AAAA,QACR,QAAA,EAAU;AAAA;AACZ;AACF,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAI,aAAA;AAAA,IACJ,IAAA,EAAM,aAAA;AAAA,IACN,WAAA,EAAa,iCAAA;AAAA,IACb,QAAA,EAAU,OAAA;AAAA,IACV,MAAA,EAAQ;AAAA,MACN,GAAA,EAAK,kCAAA;AAAA,MACL,GAAA,EAAK,qBAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA;AAAA,MACL,GAAA,EAAK;AAAA;AACP,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAI,SAAA;AAAA,IACJ,IAAA,EAAM,iBAAA;AAAA,IACN,WAAA,EAAa,0DAAA;AAAA,IACb,QAAA,EAAU,SAAA;AAAA,IACV,MAAA,EAAQ;AAAA,MACN,GAAA,EAAK,kCAAA;AAAA,MACL,GAAA,EAAK,qBAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA;AAAA,MACL,GAAA,EAAK;AAAA,KACP;AAAA,IACA,aAAA,EAAe;AAAA,GACjB;AAAA,EACA;AAAA,IACE,EAAA,EAAI,YAAA;AAAA,IACJ,IAAA,EAAM,YAAA;AAAA,IACN,WAAA,EAAa,qDAAA;AAAA,IACb,QAAA,EAAU,SAAA;AAAA,IACV,MAAA,EAAQ;AAAA,MACN,GAAA,EAAK,kCAAA;AAAA,MACL,GAAA,EAAK,qBAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA;AAAA,MACL,GAAA,EAAK;AAAA,KACP;AAAA,IACA,aAAA,EAAe;AAAA,GACjB;AAAA,EACA;AAAA,IACE,EAAA,EAAI,aAAA;AAAA,IACJ,IAAA,EAAM,gBAAA;AAAA,IACN,WAAA,EAAa,6DAAA;AAAA,IACb,QAAA,EAAU,SAAA;AAAA,IACV,MAAA,EAAQ;AAAA,MACN,GAAA,EAAK,qBAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK;AAAA,KACP;AAAA,IACA,aAAA,EAAe;AAAA;AAEnB,CAAA;AAKO,SAAS,eAAe,UAAA,EAAoC;AAEjE,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,IAAO,GAAA,CAAA,UAAA,CAAW,UAAU,CAAA,EAAG;AAC7B,MAAA,OAAO,UAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,MAAM,OAAA,GAAe,KAAA,CAAA,OAAA,CAAQ,SAAA,EAAW,uCAAuC,CAAA;AAC/E,EAAA,IAAO,GAAA,CAAA,UAAA,CAAW,OAAO,CAAA,EAAG;AAC1B,IAAA,OAAO,OAAA;AAAA,EACT;AAGA,EAAA,MAAM,QAAA,GAAgB,KAAA,CAAA,OAAA,CAAQ,OAAA,CAAQ,GAAA,IAAO,2BAA2B,CAAA;AACxE,EAAA,IAAO,GAAA,CAAA,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3B,IAAA,OAAO,QAAA;AAAA,EACT;AAGA,EAAA,MAAM,MAAA,GAAc,KAAA,CAAA,OAAA,CAAQ,OAAA,CAAQ,GAAA,IAAO,iCAAiC,CAAA;AAC5E,EAAA,IAAO,GAAA,CAAA,UAAA,CAAW,MAAM,CAAA,EAAG;AACzB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA;AACT;AAKA,SAAS,kBAAA,CACP,QAAA,EACA,EAAA,EACA,QAAA,EACyB;AACzB,EAAA,IAAI;AACF,IAAA,MAAM,UAAU,IAAA,CAAK,KAAA,CAAS,GAAA,CAAA,YAAA,CAAa,QAAA,EAAU,MAAM,CAAC,CAAA;AAG5D,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,MAAA,IAAU,OAAA;AACpD,IAAA,MAAM,cAAc,OAAA,CAAQ,QAAA,IAAY,OAAA,CAAQ,WAAA,IAAe,UAAU,EAAE,CAAA,CAAA;AAE3E,IAAA,OAAO;AAAA,MACL,EAAA;AAAA,MACA,IAAA,EAAM,GACH,KAAA,CAAM,GAAG,EACT,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,KAAgB,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,CACjD,KAAK,GAAG,CAAA;AAAA,MACX,WAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,eAAe,OAAA,CAAQ;AAAA,KACzB;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAKA,SAAS,mBAAmB,UAAA,EAAwC;AAClE,EAAA,MAAMI,WAA8B,EAAC;AAGrC,EAAA,MAAM,QAAA,GAAgB,KAAA,CAAA,IAAA,CAAK,UAAA,EAAY,OAAO,CAAA;AAC9C,EAAA,IAAO,GAAA,CAAA,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3B,IAAA,MAAM,KAAA,GAAW,GAAA,CAAA,WAAA,CAAY,QAAQ,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,OAAO,CAAC,CAAA;AACxE,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA;AACnC,MAAA,MAAM,SAAS,kBAAA,CAAwB,KAAA,CAAA,IAAA,CAAK,UAAU,IAAI,CAAA,EAAG,IAAI,OAAO,CAAA;AACxE,MAAA,IAAI,MAAA,EAAQA,QAAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAAA,IACjC;AAAA,EACF;AAGA,EAAA,MAAM,UAAA,GAAkB,KAAA,CAAA,IAAA,CAAK,UAAA,EAAY,SAAS,CAAA;AAClD,EAAA,IAAO,GAAA,CAAA,UAAA,CAAW,UAAU,CAAA,EAAG;AAC7B,IAAA,MAAM,KAAA,GAAW,GAAA,CAAA,WAAA,CAAY,UAAU,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,OAAO,CAAC,CAAA;AAC1E,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA;AACnC,MAAA,MAAM,SAAS,kBAAA,CAAwB,KAAA,CAAA,IAAA,CAAK,YAAY,IAAI,CAAA,EAAG,IAAI,SAAS,CAAA;AAC5E,MAAA,IAAI,MAAA,EAAQA,QAAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAAA,IACjC;AAAA,EACF;AAGA,EAAA,MAAM,OAAA,GAAe,KAAA,CAAA,IAAA,CAAK,UAAA,EAAY,MAAM,CAAA;AAC5C,EAAA,IAAO,GAAA,CAAA,UAAA,CAAW,OAAO,CAAA,EAAG;AAC1B,IAAA,MAAM,KAAA,GAAW,GAAA,CAAA,WAAA,CAAY,OAAO,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,OAAO,CAAC,CAAA;AACvE,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA;AACnC,MAAA,MAAM,SAAS,kBAAA,CAAwB,KAAA,CAAA,IAAA,CAAK,SAAS,IAAI,CAAA,EAAG,IAAI,MAAM,CAAA;AACtE,MAAA,IAAI,MAAA,EAAQA,QAAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAAA,IACjC;AAAA,EACF;AAEA,EAAA,OAAOA,QAAAA;AACT;AAQO,SAAS,WAAW,iBAAA,EAAgD;AACzE,EAAA,MAAM,UAAA,GAAa,eAAe,iBAAiB,CAAA;AAEnD,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAM,UAAA,GAAa,mBAAmB,UAAU,CAAA;AAChD,IAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,MAAA,OAAO,UAAA;AAAA,IACT;AAAA,EACF;AAGA,EAAA,OAAO,gBAAA;AACT;AAKO,SAAS,aAAA,CAAc,IAAY,iBAAA,EAAqD;AAC7F,EAAA,MAAMA,QAAAA,GAAU,WAAW,iBAAiB,CAAA;AAC5C,EAAA,OAAOA,SAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,EAAE,CAAA,IAAK,IAAA;AAC7C;;;AC5QA,SAASL,kBAAiB,GAAA,EAAoC;AAC5D,EAAA,MAAM,SAAS,GAAA,CAAI,MAAA;AACnB,EAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,EAAC;AACrB,EAAA,OAAO,OAAO,IAAA,EAAK;AACrB;AAKA,SAASC,YAAAA,CACP,KAAA,EACA,OAAA,EACA,IAAA,EACM;AACN,EAAA,IAAI,KAAK,IAAA,EAAM;AACb,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,GAAG,OAAA,EAAQ,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,EAC5E,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,CAAA;AAC/B,IAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,MAAA,EAAS,OAAA,CAAQ,IAAI,CAAA,CAAE,CAAA;AAAA,IACvC;AAAA,EACF;AACF;AAKA,SAAS,oBAAA,CACP,MAAA,EACA,QAAA,EACA,GAAA,EACyB;AACzB,EAAA,MAAM,QAAA,GAAW,EAAE,GAAG,MAAA,EAAO;AAG7B,EAAA,MAAM,cAAA,GAAiB,IAAA;AAEvB,EAAA,MAAM,UAAA,GAAa,KAAA;AAEnB,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,SAAA;AAEH,MAAA,QAAA,CAAS,MAAM,GAAA,GAAM,IAAA;AACrB,MAAA,QAAA,CAAS,MAAM,GAAA,GAAM,IAAA;AACrB,MAAA;AAAA,IACF,KAAK,YAAA;AAEH,MAAA,QAAA,CAAS,MAAM,GAAA,GAAM,IAAA;AACrB,MAAA,QAAA,CAAS,MAAM,GAAA,GAAM,IAAA;AACrB,MAAA;AAAA,IACF,KAAK,aAAA;AACH,MAAA,QAAA,CAAS,GAAA,GAAM,GAAA;AACf,MAAA,QAAA,CAAS,MAAM,GAAA,GAAM,UAAA;AACrB,MAAA;AAAA,IACF;AAEE,MAAA,IAAI,QAAA,CAAS,GAAA,KAAQ,CAAA,IAAK,CAAC,SAAS,GAAA,EAAK;AACvC,QAAA,QAAA,CAAS,GAAA,GAAM,GAAA;AAAA,MACjB;AACA,MAAA,IAAI,QAAA,CAAS,GAAA,KAAQ,CAAA,IAAK,CAAC,SAAS,GAAA,EAAK;AACvC,QAAA,QAAA,CAAS,MAAM,GAAA,GAAM,cAAA;AAAA,MACvB;AAAA;AAGJ,EAAA,OAAO,QAAA;AACT;AAEA,IAAM,OAAA,GAAU,IAAIG,OAAAA,CAAQ,SAAS,CAAA,CAClC,YAAY,2CAA2C,CAAA,CACvD,MAAA,CAAO,QAAA,EAAU,uBAAuB,CAAA;AAK3C,OAAA,CACG,QAAQ,MAAM,CAAA,CACd,WAAA,CAAY,gCAAgC,EAC5C,MAAA,CAAO,2BAAA,EAA6B,0CAA0C,CAAA,CAC9E,OAAO,kBAAA,EAAoB,2BAA2B,EACtD,MAAA,CAAO,CAAC,SAAS,GAAA,KAAQ;AACxB,EAAA,MAAM,UAAA,GAAaJ,kBAAiB,GAAG,CAAA;AAEvC,EAAA,IAAI;AACF,IAAA,MAAM,UAAA,GAAa,UAAA,CAAW,OAAA,CAAQ,OAAO,CAAA;AAC7C,IAAA,IAAI,eAAA,GAAkB,UAAA;AAEtB,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,eAAA,GAAkB,WAAW,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,QAAA,KAAa,QAAQ,QAAQ,CAAA;AAC1E,MAAA,IAAI,eAAA,CAAgB,WAAW,CAAA,EAAG;AAChC,QAAAC,aAAY,wBAAA,EAA0B,EAAE,UAAU,OAAA,CAAQ,QAAA,IAAY,UAAU,CAAA;AAChF,QAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,WAAW,IAAA,EAAM;AACnB,MAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACvC,IAAI,CAAA,CAAE,EAAA;AAAA,QACN,MAAM,CAAA,CAAE,IAAA;AAAA,QACR,aAAa,CAAA,CAAE,WAAA;AAAA,QACf,UAAU,CAAA,CAAE;AAAA,OACd,CAAE,CAAA;AACF,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,SAAA,CAAU,EAAE,SAAS,IAAA,EAAK,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,IACxD,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAI,kCAAkC,CAAA;AAC9C,MAAA,OAAA,CAAQ,IAAI,gBAAgB,CAAA;AAC5B,MAAA,KAAA,MAAW,CAAA,IAAK,gBAAgB,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,QAAA,KAAa,OAAO,CAAA,EAAG;AACrE,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,EAAE,CAAA,CAAE,CAAA;AACvB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,CAAA,CAAE,WAAW;AAAA,CAAI,CAAA;AAAA,MACtC;AAEA,MAAA,MAAM,UAAU,eAAA,CAAgB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,SAAS,CAAA;AACtE,MAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,QAAA,OAAA,CAAQ,IAAI,4CAA4C,CAAA;AACxD,QAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,EAAE,CAAA,CAAE,CAAA;AACvB,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,CAAA,CAAE,WAAW;AAAA,CAAI,CAAA;AAAA,QACtC;AAAA,MACF;AAEA,MAAA,MAAM,OAAO,eAAA,CAAgB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,MAAM,CAAA;AAChE,MAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,QAAA,OAAA,CAAQ,IAAI,sBAAsB,CAAA;AAClC,QAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,EAAE,CAAA,CAAE,CAAA;AACvB,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,CAAA,CAAE,WAAW;AAAA,CAAI,CAAA;AAAA,QACtC;AAAA,MACF;AAEA,MAAA,OAAA,CAAQ,IAAI,uDAAuD,CAAA;AACnE,MAAA,OAAA,CAAQ,IAAI,gEAAgE,CAAA;AAAA,IAC9E;AAEA,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB,SAAS,GAAA,EAAK;AACZ,IAAAA,YAAAA,CAAa,GAAA,CAAc,OAAA,EAAS,IAAI,UAAU,CAAA;AAClD,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB;AACF,CAAC,CAAA;AAKH,OAAA,CACG,QAAQ,MAAM,CAAA,CACd,YAAY,mCAAmC,CAAA,CAC/C,SAAS,MAAA,EAAQ,WAAW,CAAA,CAC5B,MAAA,CAAO,oBAAoB,2BAA2B,CAAA,CACtD,OAAO,CAAC,EAAA,EAAI,SAAS,GAAA,KAAQ;AAC5B,EAAA,MAAM,UAAA,GAAaD,kBAAiB,GAAG,CAAA;AAEvC,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,aAAA,CAAc,EAAA,EAAI,OAAA,CAAQ,OAAO,CAAA;AAChD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,UAAA,GAAa,UAAA,CAAW,OAAA,CAAQ,OAAO,CAAA;AAC7C,MAAA,MAAM,YAAY,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAC5C,MAAAC,aAAY,kBAAA,EAAoB,EAAE,EAAA,EAAI,SAAA,IAAa,UAAU,CAAA;AAC7D,MAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,WAAW,IAAA,EAAM;AACnB,MAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,IAC7C,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,MAAA,CAAO,IAAI;AAAA,CAAI,CAAA;AACtC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,MAAA,CAAO,EAAE,CAAA,CAAE,CAAA;AAC9B,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,UAAA,EAAa,MAAA,CAAO,QAAQ,CAAA,CAAE,CAAA;AAC1C,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,MAAA,CAAO,WAAW;AAAA,CAAI,CAAA;AAClD,MAAA,OAAA,CAAQ,IAAI,SAAS,CAAA;AACrB,MAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,OAAO,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAClD,MAAA,IAAI,OAAO,aAAA,EAAe;AACxB,QAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,gBAAA,EAAqB,MAAA,CAAO,aAAa,CAAA,CAAE,CAAA;AAAA,MACzD;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB,SAAS,GAAA,EAAK;AACZ,IAAAA,YAAAA,CAAa,GAAA,CAAc,OAAA,EAAS,IAAI,UAAU,CAAA;AAClD,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB;AACF,CAAC,CAAA;AAKH,OAAA,CACG,OAAA,CAAQ,UAAU,CAAA,CAClB,WAAA,CAAY,+BAA+B,CAAA,CAC3C,cAAA,CAAe,oBAAA,EAAsB,kBAAkB,EACvD,MAAA,CAAO,uBAAA,EAAyB,kCAAA,EAAoC,KAAK,EACzE,MAAA,CAAO,uBAAA,EAAyB,iCAAiC,CAAA,CACjE,MAAA,CAAO,kBAAA,EAAoB,2BAA2B,CAAA,CACtD,OAAO,mBAAA,EAAqB,2DAA2D,CAAA,CACvF,MAAA,CAAO,eAAe,eAAe,CAAA,CACrC,MAAA,CAAO,OAAO,SAAS,GAAA,KAAQ;AAC9B,EAAA,MAAM,UAAA,GAAaD,kBAAiB,GAAG,CAAA;AAEvC,EAAA,IAAI;AACF,IAAA,MAAM,YAAY,OAAA,CAAQ,MAAA;AAG1B,IAAA,MAAM,QAAA,GAAgBM,KAAA,CAAA,IAAA,CAAK,SAAA,EAAW,OAAO,CAAA;AAC7C,IAAA,MAAM,UAAA,GAAkBA,KAAA,CAAA,IAAA,CAAK,SAAA,EAAW,SAAS,CAAA;AACjD,IAAA,MAAM,OAAA,GAAeA,KAAA,CAAA,IAAA,CAAK,SAAA,EAAW,MAAM,CAAA;AAC3C,IAAA,MAAM,UAAA,GAAkBA,KAAA,CAAA,IAAA,CAAK,SAAA,EAAW,SAAS,CAAA;AAEjD,IAAGC,GAAA,CAAA,SAAA,CAAU,QAAA,EAAU,EAAE,SAAA,EAAW,MAAM,CAAA;AAC1C,IAAGA,GAAA,CAAA,SAAA,CAAU,UAAA,EAAY,EAAE,SAAA,EAAW,MAAM,CAAA;AAC5C,IAAGA,GAAA,CAAA,SAAA,CAAU,OAAA,EAAS,EAAE,SAAA,EAAW,MAAM,CAAA;AACzC,IAAGA,GAAA,CAAA,SAAA,CAAU,UAAA,EAAY,EAAE,SAAA,EAAW,MAAM,CAAA;AAG5C,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,GAAM,QAAA,CAAS,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAIlF,IAAA,MAAM,OAAA,GAAU,MAAM,eAAA,EAAgB;AACtC,IAAA,MAAM,iBAAiB,OAAA,CAAQ,SAAA;AAC/B,IAAA,MAAM,kBAAkB,OAAA,CAAQ,UAAA;AAGhC,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,IAAO,CAAA,QAAA,EAAW,IAAI,IAAA,CAAK,GAAA,GAAM,GAAI,CAAA,CAAE,WAAA,EAAY,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAGpF,IAAA,MAAM,SAAA,GAAY;AAAA,MAChB,GAAA,EAAK,KAAA;AAAA,MACL,GAAA,EAAK,SAAA;AAAA,MACL,CAAA,EAAG,gBAAgB,cAAc,CAAA;AAAA,MACjC,GAAA;AAAA,MACA,GAAA,EAAK,KAAA;AAAA,MACL,GAAA,EAAK;AAAA,KACP;AAEA,IAAA,MAAM,iBAA2B,EAAC;AAGlC,IAAA,IAAI,iBAAA,GAAoB,UAAA,CAAW,OAAA,CAAQ,OAAO,CAAA;AAClD,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,iBAAA,GAAoB,kBAAkB,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,QAAA,KAAa,QAAQ,QAAQ,CAAA;AAAA,IACrF;AAEA,IAAA,KAAA,MAAW,UAAU,iBAAA,EAAmB;AACtC,MAAA,MAAM,SAAA,GACJ,OAAO,QAAA,KAAa,OAAA,GAChB,WACA,MAAA,CAAO,QAAA,KAAa,SAClB,OAAA,GACA,UAAA;AACR,MAAA,MAAM,QAAA,GAAW,GAAG,MAAA,CAAO,EAAE,IAAI,OAAA,CAAQ,MAAA,KAAW,MAAA,GAAS,MAAA,GAAS,KAAK,CAAA,CAAA;AAC3E,MAAA,MAAM,QAAA,GAAgBD,KAAA,CAAA,IAAA,CAAK,SAAA,EAAW,QAAQ,CAAA;AAG9C,MAAA,MAAM,iBAAiB,oBAAA,CAAqB,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,IAAI,GAAG,CAAA;AAEzE,MAAA,IAAI,OAAA,CAAQ,WAAW,MAAA,EAAQ;AAE7B,QAAA,MAAME,OAAAA,GAAS;AAAA,UACb,UAAU,MAAA,CAAO,WAAA;AAAA,UACjB,MAAA,EAAQ;AAAA,YACN,GAAA,EAAK,OAAA;AAAA,YACL,GAAA,EAAK,wBAAA;AAAA,YACL;AAAA,WACF;AAAA,UACA,OAAA,EAAS,cAAA;AAAA,UACT,GAAI,OAAO,aAAA,GAAgB,EAAE,gBAAgB,MAAA,CAAO,aAAA,KAAkB;AAAC,SACzE;AACA,QAAGD,kBAAc,QAAA,EAAU,IAAA,CAAK,UAAUC,OAAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,MAC5D,CAAA,MAAO;AAEL,QAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,cAAA,EAAgB,iBAAiB,GAAG,CAAA;AAC3D,QAAGD,GAAA,CAAA,aAAA,CAAc,UAAU,GAAG,CAAA;AAAA,MAChC;AAEA,MAAA,cAAA,CAAe,KAAK,QAAQ,CAAA;AAAA,IAC9B;AAGA,IAAA,MAAM,QAAA,GAAgBD,KAAA,CAAA,IAAA,CAAK,UAAA,EAAY,mBAAmB,CAAA;AAC1D,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,IAAA,EAAM,CAAC,SAAS;AAAA,KAClB;AACA,IAAGC,kBAAc,QAAA,EAAU,IAAA,CAAK,UAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAC,CAAA;AACxD,IAAA,cAAA,CAAe,KAAK,QAAQ,CAAA;AAG5B,IAAA,MAAM,UAAA,GAAkBD,KAAA,CAAA,IAAA,CAAK,UAAA,EAAY,2BAA2B,CAAA;AACpE,IAAA,MAAM,MAAA,GAAS;AAAA,MACb,QAAA,EAAU,2DAAA;AAAA,MACV,WAAA,EACE,kFAAA;AAAA,MACF,cAAc,IAAI,IAAA,CAAK,GAAA,GAAM,GAAI,EAAE,WAAA,EAAY;AAAA,MAC/C,SAAA,EAAW;AAAA,QACT,IAAA,EAAM,UAAA;AAAA,QACN,SAAS,UAAA;AAAW,OACtB;AAAA,MACA,IAAA;AAAA,MACA,OAAA,EAAS,iBAAA,CAAkB,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACrC,IAAI,CAAA,CAAE,EAAA;AAAA,QACN,aAAa,CAAA,CAAE,WAAA;AAAA,QACf,UAAU,CAAA,CAAE;AAAA,OACd,CAAE,CAAA;AAAA,MACF,KAAA,EAAO;AAAA,QACL,oEAAA;AAAA,QACA;AAAA;AACF,KACF;AACA,IAAGC,kBAAc,UAAA,EAAY,IAAA,CAAK,UAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAC5D,IAAA,cAAA,CAAe,KAAK,UAAU,CAAA;AAE9B,IAAA,IAAI,WAAW,IAAA,EAAM;AACnB,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,IAAA,CAAK,SAAA;AAAA,UACH;AAAA,YACE,OAAA,EAAS,IAAA;AAAA,YACT,UAAA,EAAY,SAAA;AAAA,YACZ,iBAAiB,cAAA,CAAe,MAAA;AAAA,YAChC,KAAA,EAAO,cAAA;AAAA,YACP,SAAA,EAAW,GAAA;AAAA,YACX;AAAA,WACF;AAAA,UACA,IAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA;AAAA,CAA2C,CAAA;AACvD,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,kBAAA,EAAqB,SAAS,CAAA,CAAE,CAAA;AAC5C,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,iBAAA,EAAoB,cAAA,CAAe,MAAM,CAAA,CAAE,CAAA;AACvD,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,GAAG,CAAA,EAAA,EAAK,IAAI,IAAA,CAAK,GAAA,GAAM,GAAI,CAAA,CAAE,WAAA,EAAa,CAAA,CAAA,CAAG,CAAA;AACvE,MAAA,OAAA,CAAQ,GAAA,CAAI,WAAW,GAAG;AAAA,CAAI,CAAA;AAC9B,MAAA,OAAA,CAAQ,IAAI,kBAAkB,CAAA;AAC9B,MAAA,KAAA,MAAW,KAAK,cAAA,EAAgB;AAC9B,QAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAUD,KAAA,CAAA,QAAA,CAAS,SAAA,EAAW,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,MAChD;AACA,MAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,uBAAA,EAAiCA,KAAA,CAAA,QAAA,CAAS,SAAA,EAAW,QAAQ,CAAC,CAAA,CAAE,CAAA;AAAA,IAC9E;AAEA,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB,SAAS,GAAA,EAAK;AACZ,IAAAL,YAAAA,CAAa,GAAA,CAAc,OAAA,EAAS,IAAI,UAAU,CAAA;AAClD,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB;AACF,CAAC,CAAA;ACzTH,IAAM,eAAA,GAAkB,KAAK,IAAA,GAAO,IAAA;AAMpC,SAASD,kBAAiB,GAAA,EAAsC;AAC9D,EAAA,MAAM,SAAS,GAAA,CAAI,MAAA;AACnB,EAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,EAAC;AACrB,EAAA,OAAO,OAAO,IAAA,EAAK;AACrB;AAEA,SAASC,YAAAA,CACP,KAAA,EACA,OAAA,EACA,IAAA,EACM;AACN,EAAA,IAAI,KAAK,IAAA,EAAM;AACb,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,GAAG,OAAA,EAAQ,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,EAC5E,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,CAAA;AAAA,EACjC;AACF;AAMA,SAAS,iBAAiB,GAAA,EAA6C;AACrE,EAAA,IAAI;AACF,IAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,MAAA,CAAgC,GAAG,CAAA;AACvD,IAAA,OAAO,OAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAMA,SAAS,kBAAA,CAAmB,KAAa,UAAA,EAA4B;AACnE,EAAA,MAAM,OAAA,GAAU,iBAAiB,GAAG,CAAA;AACpC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,WAAW,UAAU,CAAA,CAAA;AAAA,EAC9B;AAEA,EAAA,MAAM,MAAM,OAAO,OAAA,CAAQ,GAAA,KAAQ,QAAA,GAAW,QAAQ,GAAA,GAAM,SAAA;AAG5D,EAAA,IAAI,OAAO,OAAA,CAAQ,GAAA,KAAQ,YAAY,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA,EAAG;AAC7D,IAAA,OAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,OAAA,CAAQ,GAAG,CAAA,CAAA;AAAA,EAC9B;AAGA,EAAA,IAAI,OAAO,OAAA,CAAQ,GAAA,KAAQ,YAAY,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA,EAAG;AAC7D,IAAA,OAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,OAAA,CAAQ,GAAG,CAAA,CAAA;AAAA,EAC9B;AAGA,EAAA,OAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA;AAC7B;AAMA,eAAe,eAAA,CACb,UACA,WAAA,EAC0B;AAC1B,EAAA,MAAM,UAA2B,EAAC;AAClC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,GAAG,CAAA,IAAK,SAAS,QAAA,EAAU;AAC1C,IAAA,MAAM,UAAA,GAAa,MAAM,iBAAA,CAAkB,GAAG,CAAA;AAC9C,IAAA,MAAM,GAAA,GAAM,kBAAA,CAAmB,GAAA,EAAK,UAAU,CAAA;AAC9C,IAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,GAAA,EAAK,GAAA,EAAK,aAAa,UAAA,EAAY,MAAA,EAAQ,aAAa,CAAA;AAAA,EACzE;AACA,EAAA,OAAO,OAAA;AACT;AAKA,SAAS,cAAA,CAAe,MAAc,IAAA,EAAwB;AAC5D,EAAA,MAAM,QAAA,GAAW,iBAAiB,IAAI,CAAA;AACtC,EAAA,MAAM,QAAA,GAAW,iBAAiB,IAAI,CAAA;AACtC,EAAA,IAAI,CAAC,QAAA,IAAY,CAAC,QAAA,EAAU,OAAO,CAAC,uBAAuB,CAAA;AAE3D,EAAA,MAAM,OAAA,mBAAU,IAAI,GAAA,CAAI,CAAC,GAAG,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,EAAG,GAAG,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAC,CAAC,CAAA;AAC5E,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,CAAC,CAAC,CAAA,KAAM,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,CAAC,CAAC,CAAA,EAAG;AAC/D,MAAA,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,IACd;AAAA,EACF;AACA,EAAA,OAAO,MAAM,IAAA,EAAK;AACpB;AAKA,eAAe,UAAA,CACb,YACA,KAAA,EACoF;AACpF,EAAA,IAAI,CAAIQ,GAAA,CAAA,UAAA,CAAW,UAAU,CAAA,EAAG;AAC9B,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,CAAA,uBAAA,EAA0B,UAAU,CAAA,CAAA,EAAG;AAAA,EACpE;AAEA,EAAA,MAAM,IAAA,GAAUA,aAAS,UAAU,CAAA;AACnC,EAAA,IAAI,IAAA,CAAK,OAAO,eAAA,EAAiB;AAC/B,IAAA,OAAO,EAAE,IAAI,KAAA,EAAO,KAAA,EAAO,UAAU,KAAK,CAAA,2BAAA,EAA8B,IAAA,CAAK,IAAI,CAAA,OAAA,CAAA,EAAU;AAAA,EAC7F;AAGA,EAAA,MAAM,QAAA,GAAcA,iBAAa,UAAU,CAAA;AAC3C,EAAA,IAAI,QAAA,KAAa,cAAc,CAAC,QAAA,CAAS,WAAW,OAAA,CAAQ,GAAA,EAAK,CAAA,EAAG;AAElE,IAAA,IAAI,CAAIA,GAAA,CAAA,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC5B,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,CAAA,4BAAA,EAA+B,KAAK,CAAA,CAAA,EAAG;AAAA,IACpE;AAAA,EACF;AAEA,EAAA,MAAM,SAAA,GAAeA,iBAAa,UAAU,CAAA;AAC5C,EAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,CAAkB,SAAS,CAAA;AAChD,EAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,CAAA,eAAA,EAAkB,KAAK,CAAA,EAAA,EAAK,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,CAAA,EAAG;AAAA,EAChF;AACA,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,OAAO,KAAA,EAAM;AACzC;AAKA,SAASC,kBAAiB,MAAA,EAAiC;AACzD,EAAA,MAAM,KAAA,GAAkB;AAAA,IACtB,4BAAA;AAAA,IACA,4BAAA;AAAA,IACA,EAAA;AAAA,IACA,CAAA,WAAA,EAAc,OAAO,YAAY,CAAA,CAAA;AAAA,IACjC,CAAA,SAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,IACrC,CAAA,gBAAA,EAAmB,OAAO,cAAc,CAAA,CAAA;AAAA,IACxC,CAAA,iBAAA,EAAoB,OAAO,eAAe,CAAA,CAAA;AAAA,IAC1C,CAAA,WAAA,EAAc,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA,CAAA;AAAA,IACrC;AAAA,GACF;AAEA,EAAA,IAAI,MAAA,CAAO,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG;AACjC,IAAA,KAAA,CAAM,KAAK,+CAA+C,CAAA;AAAA,EAC5D,CAAA,MAAO;AACL,IAAA,KAAA,CAAM,KAAK,YAAY,CAAA;AACvB,IAAA,KAAA,CAAM,KAAK,WAAW,CAAA;AACtB,IAAA,KAAA,MAAW,QAAA,IAAY,OAAO,SAAA,EAAW;AACvC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,OAAA,EAAU,QAAA,CAAS,GAAG,CAAA,CAAE,CAAA;AACnC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,kBAAA,EAAqB,QAAA,CAAS,oBAAoB,CAAA,CAAE,CAAA;AAC/D,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,kBAAA,EAAqB,QAAA,CAAS,oBAAoB,CAAA,CAAE,CAAA;AAC/D,MAAA,KAAA,CAAM,KAAK,CAAA,sBAAA,EAAyB,QAAA,CAAS,YAAY,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACrE,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAMO,SAAS,gBAAA,GAA4B;AAC1C,EAAA,MAAM,SAAA,GAAY,IAAIN,OAAAA,CAAQ,WAAW,CAAA,CAAE,WAAA;AAAA,IACzC;AAAA,GACF;AAEA,EAAA,SAAA,CACG,SAAS,WAAA,EAAa,+BAA+B,CAAA,CACrD,QAAA,CAAS,aAAa,gCAAgC,CAAA,CACtD,MAAA,CAAO,uBAAA,EAAyB,+BAA+B,MAAM,CAAA,CACrE,OAAO,oBAAA,EAAsB,wCAAA,EAA0C,KAAK,CAAA,CAC5E,MAAA;AAAA,IACC,OACE,WAAA,EACA,WAAA,EACA,OAAA,EACA,GAAA,KACG;AACH,MAAA,MAAM,UAAA,GAAaJ,kBAAiB,GAAG,CAAA;AACvC,MAAA,MAAM,MAAA,GAAU,QAAQ,MAAA,IAAqB,MAAA;AAC7C,MAAA,MAAM,cAAA,GAAiB,CAAC,CAAC,OAAA,CAAQ,cAAA;AAEjC,MAAA,IAAI;AAEF,QAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,UAC3C,UAAA,CAAW,aAAa,SAAS,CAAA;AAAA,UACjC,UAAA,CAAW,aAAa,SAAS;AAAA,SAClC,CAAA;AAED,QAAA,IAAI,CAAC,QAAQ,EAAA,EAAI;AACf,UAAAC,YAAAA,CAAY,OAAA,CAAQ,KAAA,EAAO,IAAI,UAAU,CAAA;AACzC,UAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,UAAA;AAAA,QACF;AACA,QAAA,IAAI,CAAC,QAAQ,EAAA,EAAI;AACf,UAAAA,YAAAA,CAAY,OAAA,CAAQ,KAAA,EAAO,IAAI,UAAU,CAAA;AACzC,UAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,UAAA;AAAA,QACF;AAGA,QAAA,MAAM,CAAC,SAAA,EAAW,SAAS,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,UAC/C,eAAA,CAAgB,OAAA,CAAQ,KAAA,EAAO,WAAW,CAAA;AAAA,UAC1C,eAAA,CAAgB,OAAA,CAAQ,KAAA,EAAO,WAAW;AAAA,SAC3C,CAAA;AAGD,QAAA,MAAM,KAAA,uBAAY,GAAA,EAA6B;AAC/C,QAAA,KAAA,MAAW,KAAK,CAAC,GAAG,SAAA,EAAW,GAAG,SAAS,CAAA,EAAG;AAC5C,UAAA,MAAM,WAAW,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,GAAG,KAAK,EAAC;AACtC,UAAA,QAAA,CAAS,KAAK,CAAC,CAAA;AACf,UAAA,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,GAAA,EAAK,QAAQ,CAAA;AAAA,QAC3B;AAGA,QAAA,MAAM,YAA6B,EAAC;AACpC,QAAA,IAAI,WAAA,GAAc,CAAA;AAGlB,QAAA,MAAM,aAAa,CAAC,GAAG,MAAM,IAAA,EAAM,EAAE,IAAA,EAAK;AAE1C,QAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,UAAA,MAAM,OAAA,GAAU,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AAG7B,UAAA,MAAM,QAAQ,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,WAAW,CAAA;AAC5D,UAAA,MAAM,QAAQ,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,WAAW,CAAA;AAE5D,UAAA,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,KAAA,CAAM,SAAS,CAAA,EAAG;AAExC,YAAA,MAAM,CAAA,GAAI,MAAM,CAAC,CAAA;AACjB,YAAA,MAAM,CAAA,GAAI,MAAM,CAAC,CAAA;AACjB,YAAA,IAAI,CAAA,CAAE,WAAA,KAAgB,CAAA,CAAE,WAAA,EAAa;AAEnC,cAAA,SAAA,CAAU,IAAA,CAAK;AAAA,gBACb,GAAA;AAAA,gBACA,sBAAsB,CAAA,CAAE,WAAA;AAAA,gBACxB,sBAAsB,CAAA,CAAE,WAAA;AAAA,gBACxB,WAAA,EAAa,cAAA,CAAe,CAAA,CAAE,GAAA,EAAK,EAAE,GAAG;AAAA,eACzC,CAAA;AAAA,YACH;AAEA,YAAA,WAAA,EAAA;AAAA,UACF,CAAA,MAAO;AAEL,YAAA,WAAA,EAAA;AAAA,UACF;AAAA,QACF;AAGA,QAAA,MAAM,MAAA,GAA0B;AAAA,UAC9B,OAAA,EAAS,KAAA;AAAA,UACT,YAAA,EAAA,iBAAc,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,UACrC,OAAA,EAAS,CAAC,WAAA,EAAa,WAAW,CAAA;AAAA,UAClC,cAAA,EAAgB,SAAA,CAAU,MAAA,GAAS,SAAA,CAAU,MAAA;AAAA,UAC7C,eAAA,EAAiB,WAAA;AAAA,UACjB;AAAA,SACF;AAGA,QAAA,IAAI,MAAA,KAAW,MAAA,IAAU,UAAA,CAAW,IAAA,EAAM;AACxC,UAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,QAC7C,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,GAAA,CAAIS,iBAAAA,CAAiB,MAAM,CAAC,CAAA;AAAA,QACtC;AAGA,QAAA,IAAI,cAAA,IAAkB,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG;AAC1C,UAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,QACrB,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,QACrB;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAAT,YAAAA,CAAa,GAAA,CAAc,OAAA,EAAS,IAAI,UAAU,CAAA;AAClD,QAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,MACrB;AAAA,IACF;AAAA,GACF;AAEF,EAAA,OAAO,SAAA;AACT;ACxUA,IAAM,cAAc,aAAA,CAAmBU,KAAA,CAAA,IAAA,CAAK,QAAQ,GAAA,EAAI,EAAG,cAAc,CAAC,CAAA;AAU1E,SAAS,KAAA,CAAM,QAAgB,GAAA,EAAqB;AAClD,EAAA,MAAM,MAAA,GAAiC;AAAA,IACrC,KAAA,EAAO,MAAA;AAAA,IACP,MAAA,EAAQ,MAAA;AAAA,IACR,GAAA,EAAK;AAAA,GACP;AACA,EAAA,OAAO,CAAA,CAAA,EAAI,MAAA,CAAO,MAAM,CAAC,KAAK,GAAG,CAAA,CAAA;AACnC;AAEA,SAAS,WAAW,WAAA,EAA6B;AAE/C,EAAA,MAAM,CAAA,GAAI,WAAA,CAAY,IAAA,CAAK,WAAW,CAAA;AACtC,EAAA,OAAO,IAAI,QAAA,CAAS,CAAA,CAAE,CAAC,CAAA,EAAI,EAAE,CAAA,GAAI,CAAA;AACnC;AAEA,SAAS,gBAAA,GAAgC;AACvC,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,OAAA,CAAQ,OAAO,CAAA;AACxC,EAAA,IAAI,SAAS,EAAA,EAAI;AACf,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,cAAA;AAAA,MACN,MAAA,EAAQ,OAAA;AAAA,MACR,MAAA,EAAQ,CAAA,EAAG,OAAA,CAAQ,OAAO,CAAA,iBAAA;AAAA,KAC5B;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,cAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,MAAA,EAAQ,CAAA,EAAG,OAAA,CAAQ,OAAO,CAAA,iCAAA;AAAA,GAC5B;AACF;AAEA,SAAS,sBAAA,GAAsC;AAC7C,EAAA,MAAM,QAAA,GAAW,CAAC,gBAAA,EAAkB,cAAA,EAAgB,gBAAgB,cAAc,CAAA;AAClF,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,IAAA,IAAI;AACF,MAAA,WAAA,CAAY,QAAQ,GAAG,CAAA;AAAA,IACzB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAA,CAAQ,KAAK,GAAG,CAAA;AAAA,IAClB;AAAA,EACF;AACA,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,oBAAA;AAAA,MACN,MAAA,EAAQ,OAAA;AAAA,MACR,MAAA,EAAQ,CAAA,EAAG,QAAA,CAAS,MAAM,CAAA,6BAAA;AAAA,KAC5B;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,oBAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,MAAA,EAAQ,GAAG,OAAA,CAAQ,MAAM,aAAa,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,GAC1D;AACF;AAEA,SAAS,iBAAiB,GAAA,EAA0B;AAClD,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,CAAI,eAAA,IAAmB,EAAA;AAC3C,EAAA,IAAI,GAAA,EAAK;AACP,IAAA,IAAI,IAAI,UAAA,CAAW,MAAM,KAAK,GAAA,CAAI,UAAA,CAAW,OAAO,CAAA,EAAG;AACrD,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,qBAAA;AAAA,QACN,MAAA,EAAQ,OAAA;AAAA,QACR,QAAQ,CAAA,wBAAA,EAA2B,GAAA,CAAI,MAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA,WAAA;AAAA,OACtD;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,qBAAA;AAAA,MACN,MAAA,EAAQ,QAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AAEA,EAAA,MAAM,cAAA,GAAiB;AAAA,IAChBA,KAAA,CAAA,IAAA,CAAK,KAAK,iBAAiB,CAAA;AAAA,IAC3BA,KAAA,CAAA,IAAA,CAAK,KAAK,uBAAuB;AAAA,GACxC;AACA,EAAA,KAAA,MAAW,KAAK,cAAA,EAAgB;AAC9B,IAAA,IAAOC,GAAA,CAAA,UAAA,CAAW,CAAC,CAAA,EAAG;AACpB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,qBAAA;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAQ,CAAA,MAAA,EAAcD,KAAA,CAAA,QAAA,CAAS,GAAA,EAAK,CAAC,CAAC,CAAA,gCAAA;AAAA,OACxC;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,qBAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AACF;AAEA,SAAS,aAAa,GAAA,EAA0B;AAC9C,EAAA,MAAM,CAAA,GAASA,KAAA,CAAA,IAAA,CAAK,GAAA,EAAK,sBAAsB,CAAA;AAC/C,EAAA,IAAOC,GAAA,CAAA,UAAA,CAAW,CAAC,CAAA,EAAG;AACpB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,mBAAA;AAAA,MACN,MAAA,EAAQ,OAAA;AAAA,MACR,MAAA,EAAQ,mCAAmC,CAAC,CAAA;AAAA,KAC9C;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,mBAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AACF;AAEA,eAAe,eAAA,CAAgB,WAAmB,SAAA,EAAyC;AACzF,EAAA,MAAM,IAAA,GAAO,IAAI,eAAA,EAAgB;AACjC,EAAA,MAAM,QAAQ,UAAA,CAAW,MAAM,IAAA,CAAK,KAAA,IAAS,SAAS,CAAA;AACtD,EAAA,IAAI;AACF,IAAA,MAAM,SAAS,IAAI,GAAA,CAAI,+BAAA,EAAiC,SAAS,EAAE,QAAA,EAAS;AAC5E,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,MAAA,EAAQ,EAAE,MAAA,EAAQ,IAAA,CAAK,QAAQ,CAAA;AACvD,IAAA,IAAI,GAAA,CAAI,WAAW,GAAA,EAAK;AACtB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,sBAAA;AAAA,QACN,MAAA,EAAQ,KAAA;AAAA,QACR,MAAA,EAAQ,CAAA,EAAG,MAAM,CAAA,UAAA,EAAa,IAAI,MAAM,CAAA;AAAA,OAC1C;AAAA,IACF;AACA,IAAA,MAAM,GAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,IAAA,MAAM,UAAU,GAAA,CAAI,QAAA;AACpB,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,sBAAA;AAAA,QACN,MAAA,EAAQ,KAAA;AAAA,QACR,MAAA,EAAQ,GAAG,MAAM,CAAA,iBAAA;AAAA,OACnB;AAAA,IACF;AACA,IAAA,MAAM,OAAA,GAAU,MAAM,KAAA,CAAM,OAAA,EAAS,EAAE,MAAA,EAAQ,IAAA,CAAK,QAAQ,CAAA;AAC5D,IAAA,IAAI,OAAA,CAAQ,WAAW,GAAA,EAAK;AAC1B,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,sBAAA;AAAA,QACN,MAAA,EAAQ,KAAA;AAAA,QACR,MAAA,EAAQ,CAAA,SAAA,EAAY,OAAO,CAAA,UAAA,EAAa,QAAQ,MAAM,CAAA;AAAA,OACxD;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAQ,MAAM,OAAA,CAAQ,IAAA,EAAK;AACjC,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA,CAAK,KAAK,MAAA,GAAS,CAAA;AAC/D,IAAA,IAAI,aAAa,CAAA,EAAG;AAClB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,sBAAA;AAAA,QACN,MAAA,EAAQ,KAAA;AAAA,QACR,MAAA,EAAQ,YAAY,OAAO,CAAA,0BAAA;AAAA,OAC7B;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,sBAAA;AAAA,MACN,MAAA,EAAQ,OAAA;AAAA,MACR,MAAA,EAAQ,CAAA,EAAG,MAAM,CAAA,4BAAA,EAA+B,QAAQ,CAAA,OAAA;AAAA,KAC1D;AAAA,EACF,SAAS,GAAA,EAAc;AACrB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,sBAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,MAAA,EAAQ,iBAAiB,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,KAC3E;AAAA,EACF,CAAA,SAAE;AACA,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB;AACF;AAEA,eAAsB,UAAU,OAAA,EAKZ;AAClB,EAAA,MAAM,UAAyB,EAAC;AAChC,EAAA,OAAA,CAAQ,IAAA,CAAK,kBAAkB,CAAA;AAC/B,EAAA,OAAA,CAAQ,IAAA,CAAK,wBAAwB,CAAA;AACrC,EAAA,OAAA,CAAQ,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,GAAG,CAAC,CAAA;AAC1C,EAAA,OAAA,CAAQ,IAAA,CAAK,YAAA,CAAa,OAAA,CAAQ,GAAG,CAAC,CAAA;AAEtC,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AACnB,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,IAAA,EAAM,sBAAA;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACT,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,KAAK,MAAM,eAAA,CAAgB,QAAQ,MAAA,EAAQ,OAAA,CAAQ,OAAO,CAAC,CAAA;AAAA,IACrE;AAAA,EACF,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,IAAA,EAAM,sBAAA;AAAA,MACN,MAAA,EAAQ,QAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAEA,EAAA,OAAA,CAAQ,IAAI,eAAe,CAAA;AAC3B,EAAA,OAAA,CAAQ,IAAI,aAAa,CAAA;AACzB,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,CAAA,CAAE,MAAA,EAAQ,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,MAAM,CAAA,CAAE,CAAC,CAAA;AAAA,EACvD;AAEA,EAAA,MAAM,SAAS,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,KAAK,CAAA;AACrD,EAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,GAAS,qCAAA,GAAwC,sBAAsB,CAAA;AACnF,EAAA,OAAO,SAAS,CAAA,GAAI,CAAA;AACtB;AAEO,SAAS,OAAOC,QAAAA,EAAwB;AAC7C,EAAAA,QAAAA,CACG,OAAA,CAAQ,QAAQ,CAAA,CAChB,YAAY,0DAA0D,CAAA,CACtE,MAAA,CAAO,UAAA,EAAY,qDAAqD,KAAK,CAAA,CAC7E,MAAA,CAAO,gBAAA,EAAkB,8CAA8C,CAAA,CACvE,MAAA;AAAA,IACC,gBAAA;AAAA,IACA,2CAAA;AAAA,IACA,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,EAAG,EAAE,CAAA;AAAA,IACrB;AAAA,GACF,CACC,MAAA,CAAO,OAAO,IAAA,KAAgE;AAC7E,IAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU;AAAA,MAC/B,MAAA,EAAQ,CAAC,CAAC,IAAA,CAAK,MAAA;AAAA,MACf,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,GAAA,EAAK,QAAQ,GAAA;AAAI,KAClB,CAAA;AACD,IAAA,OAAA,CAAQ,KAAK,QAAQ,CAAA;AAAA,EACvB,CAAC,CAAA;AACL;ACvPO,SAAS,YAAA,CAAa,MAAA,EAAuB,IAAA,GAAO,KAAA,EAAe;AACxE,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA;AAAA,EACvC;AAEA,EAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,IAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAA,OAAA,EAAU,MAAA,CAAO,KAAK,CAAA,CAAE,CAAA;AAAA,EAC3C;AAGA,EAAA,IAAI,MAAA,CAAO,IAAA,IAAQ,OAAO,MAAA,CAAO,SAAS,QAAA,EAAU;AAClD,IAAA,IAAI,MAAA,CAAO,KAAK,OAAA,EAAS;AAEvB,MAAA,OAAO,qBAAA,CAAsB,OAAO,IAAI,CAAA;AAAA,IAC1C,CAAA,MAAA,IAAW,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ;AAE7B,MAAA,OAAO,gBAAA,CAAiB,OAAO,IAAI,CAAA;AAAA,IACrC,CAAA,MAAA,IAAW,MAAA,CAAO,IAAA,CAAK,KAAA,KAAU,MAAA,EAAW;AAE1C,MAAA,OAAO,kBAAA,CAAmB,OAAO,IAAI,CAAA;AAAA,IACvC;AAAA,EACF;AAEA,EAAA,OAAO,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,IAAA,EAAM,MAAM,CAAC,CAAA;AAC5C;AAEA,SAAS,sBAAsB,IAAA,EAAmB;AAChD,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,eAAA,EAAkB,KAAA,CAAM,KAAK,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,EAAI,EAAE,CAAA;AAE3D,EAAA,KAAA,MAAW,MAAA,IAAU,KAAK,OAAA,EAAS;AACjC,IAAA,MAAM,SACJ,MAAA,CAAO,MAAA,KAAW,OAAA,GACd,KAAA,CAAM,MAAM,SAAS,CAAA,GACrB,MAAA,CAAO,MAAA,KAAW,cAChB,KAAA,CAAM,MAAA,CAAO,aAAa,CAAA,GAC1B,KAAA,CAAM,IAAI,SAAS,CAAA;AAE3B,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,MAAM,CAAA,CAAA,EAAI,OAAO,IAAI,CAAA,EAAA,EAAK,MAAA,CAAO,GAAG,CAAA,CAAE,CAAA;AACpD,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,QAAA,EAAW,MAAA,CAAO,IAAI,CAAA,CAAE,CAAA;AAAA,IACrC;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,KAAK,CAAA;AACzB;AAEA,SAAS,iBAAiB,IAAA,EAAmB;AAC3C,EAAA,OAAO;AAAA,IACL,CAAA,WAAA,EAAc,KAAK,SAAS,CAAA,CAAA;AAAA,IAC5B,CAAA,QAAA,EAAW,KAAK,MAAM,CAAA,CAAA;AAAA,IACtB,CAAA,QAAA,EAAW,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,MAAM,CAAC,CAAA,CAAA;AAAA,IACnC,CAAA,YAAA,EAAe,KAAK,UAAU,CAAA,MAAA;AAAA,GAChC,CAAE,KAAK,KAAK,CAAA;AACd;AAEA,SAAS,mBAAmB,IAAA,EAAmB;AAC7C,EAAA,IAAI,KAAK,KAAA,EAAO;AACd,IAAA,MAAM,QAAQ,CAAC,KAAA,CAAM,KAAA,CAAM,+BAA+B,GAAG,EAAE,CAAA;AAE/D,IAAA,IAAI,KAAK,WAAA,EAAa;AACpB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,aAAA,EAAgB,IAAA,CAAK,WAAW,CAAA,CAAE,CAAA;AAAA,IAC/C;AAEA,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,IAAA,CAAK,QAAQ,CAAA,CAAE,CAAA;AAAA,IACzC;AAEA,IAAA,OAAO,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,EACzB,CAAA,MAAO;AACL,IAAA,OAAO,MAAM,GAAA,CAAI,CAAA,qBAAA,EAAwB,IAAA,CAAK,KAAA,IAAS,eAAe,CAAA,CAAE,CAAA;AAAA,EAC1E;AACF;AAQO,SAAS,YAAY,KAAA,EAA6B;AACvD,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,KAAA;AAAA,IACT,OAAO,KAAA,CAAM;AAAA,GACf;AACF;AAEO,SAAS,MAAA,GAAS;AACvB,EAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AACzB,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,KAAK,MAAM;AACT,MAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,MAAA,OAAO;AAAA,QACL,OAAA;AAAA,QACA,SAAA;AAAA,QACA,UAAU,SAAA,GAAY;AAAA,OACxB;AAAA,IACF;AAAA,GACF;AACF;;;AClFO,IAAM,kBAAN,MAAsB;AAAA,EAC3B,MAAM,OAAA,CAAQ,GAAA,EAAa,QAAA,GAAuB,EAAC,EAA2B;AAC5E,IAAA,MAAM,QAAQ,MAAA,EAAO;AAErB,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,IAAI,GAAA,CAAI,GAAG,CAAA;AAC7B,MAAA,IAAI,CAAC,CAAC,OAAA,EAAS,QAAQ,EAAE,QAAA,CAAS,SAAA,CAAU,QAAQ,CAAA,EAAG;AACrD,QAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,MACzD;AAEA,MAAA,MAAM,OAAA,GAAU,MAAM,uBAAA,CAAwB,GAAG,CAAA;AACjD,MAAA,IAAI,CAAC,QAAQ,EAAA,EAAI;AACf,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,KAAA;AAAA,UACT,OAAO,OAAA,CAAQ,KAAA;AAAA,UACf,MAAA,EAAQ,MAAM,GAAA;AAAI,SACpB;AAAA,MACF;AAEA,MAAA,MAAM,MAAA,GAAS,yBAAA,CAA0B,OAAA,CAAQ,IAAI,CAAA;AACrD,MAAA,MAAM,IAAA,GAAqB,EAAE,GAAG,MAAA,EAAO;AACvC,MAAA,IAAI,OAAA,CAAQ,QAAA,IAAY,OAAA,CAAQ,QAAA,CAAS,SAAS,CAAA,EAAG;AACnD,QAAA,IAAA,CAAK,QAAA,GAAW,CAAC,GAAI,MAAA,CAAO,YAAY,EAAC,EAAI,GAAG,OAAA,CAAQ,QAAQ,CAAA;AAAA,MAClE;AACA,MAAA,IAAI,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA,EAAG;AAC7C,QAAA,IAAA,CAAK,KAAA,GAAQ;AAAA,UACX;AAAA,SAEF;AAAA,MACF;AAEA,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,IAAA;AAAA,QACA,MAAA,EAAQ,MAAM,GAAA;AAAI,OACpB;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAO;AAAA,QACL,GAAG,YAAY,KAAc,CAAA;AAAA,QAC7B,MAAA,EAAQ,MAAM,GAAA;AAAI,OACpB;AAAA,IACF;AAAA,EACF;AACF,CAAA;;;ACrDO,IAAM,UAAA,GAAa;AAAA;AAAA,EAExB,wBAAA,EAA0B,KAAA;AAAA;AAAA,EAE1B,wBAAA,EAA0B,KAAA;AAAA;AAAA,EAE1B,oBAAA,EAAsB,KAAA;AAAA,EACtB,oBAAA,EAAsB,KAAA;AAAA;AAAA,EAGtB,uBAAA,EAAyB,IAAA;AAAA;AAAA,EAEzB,mBAAA,EAAqB,KAAA;AAAA;AAAA,EAGrB,aAAA,EAAe,EAAA;AAAA;AAAA,EAGf,gBAAA,EAAkB,GAAA;AAAA;AAAA,EAElB,YAAA,EAAc,KAAA;AAAA;AAAA,EAEd,YAAA,EAAc,CAAA;AAAA;AAAA,EAGd,kBAAA,EAAoB,GAAA;AAAA;AAAA,EAEpB,cAAA,EAAgB,GAAA;AAAA;AAAA,EAEhB,cAAA,EAAgB;AAClB,CAAA;AAOO,IAAM,sBAAA,uBAA6B,GAAA,CAAY;AAAA,EACpD,IAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAC,CAAA;AAGM,SAAS,cAAc,eAAA,EAAkC;AAC9D,EAAA,OAAO,sBAAA,CAAuB,GAAA,CAAI,eAAA,CAAgB,WAAA,EAAa,CAAA;AACjE;ACtBO,IAAM,mBAAA,GAAN,cAAkC,KAAA,CAAM;AAAA,EAE7C,WAAA,CACE,SACS,KAAA,EACT;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAFJ,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAGT,IAAA,IAAA,CAAK,IAAA,GAAO,qBAAA;AAAA,EACd;AAAA,EAPS,IAAA,GAAO,kBAAA;AAQlB,CAAA;AAqBA,SAAS,mBAAA,CAAoBA,UAAkB,IAAA,EAAoD;AACjG,EAAA,IAAI,OAAOA,QAAAA,KAAY,QAAA,IAAYA,QAAAA,CAAQ,WAAW,CAAA,EAAG;AACvD,IAAA,MAAM,IAAI,oBAAoB,0CAA0C,CAAA;AAAA,EAC1E;AACA,EAAA,IAAIA,QAAAA,CAAQ,QAAA,CAAS,IAAI,CAAA,EAAG;AAC1B,IAAA,MAAM,IAAI,oBAAoB,2CAA2C,CAAA;AAAA,EAC3E;AACA,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACxB,IAAA,MAAM,IAAI,oBAAoB,kCAAkC,CAAA;AAAA,EAClE;AACA,EAAA,MAAM,gBAA0B,EAAC;AACjC,EAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,IAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AACzB,MAAA,MAAM,IAAI,oBAAoB,kCAAkC,CAAA;AAAA,IAClE;AACA,IAAA,IAAI,CAAA,CAAE,QAAA,CAAS,IAAI,CAAA,EAAG;AACpB,MAAA,MAAM,IAAI,oBAAoB,iCAAiC,CAAA;AAAA,IACjE;AACA,IAAA,aAAA,CAAc,KAAK,CAAC,CAAA;AAAA,EACtB;AACA,EAAA,OAAO,EAAE,OAAA,EAAAA,QAAAA,EAAS,IAAA,EAAM,aAAA,EAAc;AACxC;AAuEA,IAAM,aAAA,GAAgB,SAAA;AAOtB,IAAM,iBAAA,GAA4C;AAAA,EAChD,MAAA,EAAQ,GAAA;AAAA,EACR,MAAA,EAAQ,GAAA;AAAA,EACR,OAAA,EAAS,GAAA;AAAA,EACT,OAAA,EAAS,GAAA;AAAA,EACT,OAAA,EAAS,GAAA;AAAA,EACT,OAAA,EAAS,GAAA;AAAA,EACT,OAAA,EAAS,GAAA;AAAA,EACT,OAAA,EAAS,GAAA;AAAA,EACT,OAAA,EAAS,GAAA;AAAA,EACT,OAAA,EAAS;AACX,CAAA;AAEO,SAAS,kBAAkB,MAAA,EAA2C;AAC3E,EAAA,IAAI,CAAC,QAAQ,OAAO,GAAA;AACpB,EAAA,OAAO,iBAAA,CAAkB,MAAM,CAAA,IAAK,GAAA;AACtC;AAUA,SAAS,eAAA,GAAgC;AACvC,EAAA,OAAO;AAAA,IACL,MAAA,EAAQC,WAAW,QAAQ,CAAA;AAAA,IAC3B,MAAA,EAAQ,CAAA;AAAA,IACR,SAAA,EAAW,KAAA;AAAA,IACX,cAAc,EAAC;AAAA,IACf,WAAA,EAAa;AAAA,GACf;AACF;AAYA,SAAS,UAAA,CAAW,KAAA,EAAqB,KAAA,EAAe,SAAA,EAAmB,UAAA,EAAqB;AAC9F,EAAA,KAAA,CAAM,MAAA,CAAO,OAAO,KAAK,CAAA;AACzB,EAAA,KAAA,CAAM,UAAU,KAAA,CAAM,MAAA;AACtB,EAAA,IAAI,UAAA,IAAc,KAAA,CAAM,WAAA,GAAc,SAAA,EAAW;AAC/C,IAAA,MAAM,SAAA,GAAY,YAAY,KAAA,CAAM,WAAA;AACpC,IAAA,IAAI,KAAA,CAAM,UAAU,SAAA,EAAW;AAC7B,MAAA,KAAA,CAAM,YAAA,CAAa,KAAK,KAAK,CAAA;AAC7B,MAAA,KAAA,CAAM,eAAe,KAAA,CAAM,MAAA;AAAA,IAC7B,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,aAAa,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,CAAA,EAAG,SAAS,CAAC,CAAA;AACpD,MAAA,KAAA,CAAM,WAAA,IAAe,SAAA;AACrB,MAAA,KAAA,CAAM,SAAA,GAAY,IAAA;AAAA,IACpB;AAAA,EACF,CAAA,MAAA,IAAW,UAAA,IAAc,KAAA,CAAM,WAAA,IAAe,SAAA,EAAW;AACvD,IAAA,KAAA,CAAM,SAAA,GAAY,IAAA;AAAA,EACpB;AACF;AAEA,SAAS,iBAAA,CAAkB,OAAqB,UAAA,EAAuC;AACrF,EAAA,MAAM,GAAA,GAAwB;AAAA,IAC5B,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,MAAA,EAAQ,aAAA,GAAgB,KAAA,CAAM,MAAA,CAAO,OAAO,KAAK,CAAA;AAAA,IACjD,WAAW,KAAA,CAAM;AAAA,GACnB;AACA,EAAA,IAAI,UAAA,IAAc,KAAA,CAAM,YAAA,CAAa,MAAA,GAAS,CAAA,EAAG;AAC/C,IAAA,GAAA,CAAI,aAAA,GAAgB,OAAO,MAAA,CAAO,KAAA,CAAM,cAAc,KAAA,CAAM,WAAW,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAA;AAAA,EAC5F;AACA,EAAA,OAAO,GAAA;AACT;AAaA,eAAe,SAAA,CACb,MAAA,EACA,UAAA,EACA,IAAA,EACA,WAAA,EACkE;AAClE,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,MAAM,SAAA,GAAY,KAAA;AAClB,EAAA,MAAM,MAAA,GAAS,IAAA,KAAS,QAAA,GAAWA,UAAAA,CAAW,QAAQ,CAAA,GAAI,IAAA;AAe1D,EAAA,OAAO,IAAI,OAAA,CAAQ,CAACC,QAAAA,KAAY;AAC9B,IAAA,IAAI,OAAA,GAAU,KAAA;AACd,IAAA,IAAI,WAAA,GAAmD,IAAA;AAEvD,IAAA,MAAM,WAAW,MAA+D;AAC9E,MAAA,MAAM,GAAA,GAA+D,EAAE,MAAA,EAAQ,SAAA,EAAU;AACzF,MAAA,IAAI,QAAQ,GAAA,CAAI,MAAA,GAAS,aAAA,GAAgB,MAAA,CAAO,OAAO,KAAK,CAAA;AAC5D,MAAA,OAAO,GAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAM,UAAU,MAAM;AACpB,MAAA,MAAA,CAAO,GAAA,CAAI,QAAQ,MAAM,CAAA;AACzB,MAAA,MAAA,CAAO,GAAA,CAAI,OAAO,KAAK,CAAA;AACvB,MAAA,MAAA,CAAO,GAAA,CAAI,SAAS,aAAa,CAAA;AACjC,MAAA,UAAA,CAAW,GAAA,CAAI,SAAS,OAAO,CAAA;AAC/B,MAAA,UAAA,CAAW,GAAA,CAAI,SAAS,YAAY,CAAA;AACpC,MAAA,WAAA,CAAY,mBAAA,CAAoB,SAAS,OAAO,CAAA;AAAA,IAClD,CAAA;AAEA,IAAA,MAAM,SAAS,MAAM;AACnB,MAAA,IAAI,OAAA,EAAS;AACb,MAAA,OAAA,GAAU,IAAA;AACV,MAAA,OAAA,EAAQ;AAER,MAAA,IAAI;AACF,QAAA,UAAA,CAAW,GAAA,EAAI;AAAA,MACjB,CAAA,CAAA,MAAQ;AAAA,MAER;AAEA,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,MAAM,MAAA,GAAS,WAAA;AACf,QAAA,WAAA,GAAc,IAAA;AACd,QAAA,IAAI;AACF,UAAA,MAAA,CAAO,IAAI,KAAA,CAAM,cAAc,CAAC,CAAA;AAAA,QAClC,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AACA,MAAAA,QAAAA,CAAQ,UAAU,CAAA;AAAA,IACpB,CAAA;AAEA,IAAA,MAAM,MAAA,GAAS,CAAC,KAAA,KAA2B;AACzC,MAAA,IAAI,OAAA,EAAS;AACb,MAAA,MAAM,GAAA,GAAM,OAAO,QAAA,CAAS,KAAK,IAAI,KAAA,GAAQ,MAAA,CAAO,KAAK,KAAK,CAAA;AAC9D,MAAA,MAAA,IAAU,GAAA,CAAI,MAAA;AACd,MAAA,IAAI,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AAC7B,MAAA,IAAI,QAAA,GAAW,KAAA;AACf,MAAA,IAAI;AACF,QAAA,QAAA,GAAW,UAAA,CAAW,MAAM,GAAG,CAAA;AAAA,MACjC,CAAA,CAAA,MAAQ;AAEN,QAAA,MAAA,EAAO;AACP,QAAA;AAAA,MACF;AACA,MAAA,IAAI,CAAC,QAAA,EAAU;AAEb,QAAA,IAAI;AACF,UAAA,MAAA,CAAO,KAAA,EAAM;AAAA,QACf,CAAA,CAAA,MAAQ;AAAA,QAER;AACA,QAAA,MAAM,MAAA,GAAS,IAAI,OAAA,CAAc,CAAC,KAAK,GAAA,KAAQ;AAC7C,UAAA,WAAA,GAAc,GAAA;AACd,UAAA,UAAA,CAAW,IAAA,CAAK,SAAS,MAAM;AAC7B,YAAA,WAAA,GAAc,IAAA;AACd,YAAA,GAAA,EAAI;AAAA,UACN,CAAC,CAAA;AAAA,QACH,CAAC,CAAA;AACD,QAAA,MAAA,CACG,KAAK,MAAM;AACV,UAAA,IAAI,OAAA,EAAS;AACb,UAAA,IAAI;AACF,YAAA,MAAA,CAAO,MAAA,EAAO;AAAA,UAChB,CAAA,CAAA,MAAQ;AAAA,UAER;AAAA,QACF,CAAC,CAAA,CACA,KAAA,CAAM,MAAM;AAAA,QAEb,CAAC,CAAA;AAAA,MACL;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,EAAO;AAC3B,IAAA,MAAM,aAAA,GAAgB,MAAM,MAAA,EAAO;AACnC,IAAA,MAAM,YAAA,GAAe,MAAM,MAAA,EAAO;AAClC,IAAA,MAAM,UAAU,MAAM;AAAA,IAItB,CAAA;AACA,IAAA,MAAM,UAAU,MAAM;AAGpB,MAAA,IAAI;AACF,QAAA,MAAA,CAAO,KAAA,EAAM;AAAA,MACf,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,MAAA,EAAO;AAAA,IACT,CAAA;AAEA,IAAA,MAAA,CAAO,EAAA,CAAG,QAAQ,MAAM,CAAA;AACxB,IAAA,MAAA,CAAO,EAAA,CAAG,OAAO,KAAK,CAAA;AACtB,IAAA,MAAA,CAAO,EAAA,CAAG,SAAS,aAAa,CAAA;AAChC,IAAA,UAAA,CAAW,EAAA,CAAG,SAAS,OAAO,CAAA;AAC9B,IAAA,UAAA,CAAW,EAAA,CAAG,SAAS,YAAY,CAAA;AACnC,IAAA,IAAI,YAAY,OAAA,EAAS;AACvB,MAAA,OAAA,EAAQ;AAAA,IACV,CAAA,MAAO;AACL,MAAA,WAAA,CAAY,iBAAiB,OAAA,EAAS,OAAA,EAAS,EAAE,IAAA,EAAM,MAAM,CAAA;AAAA,IAC/D;AAAA,EACF,CAAC,CAAA;AACH;AAEA,SAAS,MAAA,GAAiB;AACxB,EAAA,OAAA,iBAAO,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAChC;AAOA,eAAsB,eAAe,IAAA,EAA8C;AACjF,EAAA,MAAM,YAAY,MAAA,EAAO;AACzB,EAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AAEzB,EAAA,MAAM,cAAc,eAAA,EAAgB;AACpC,EAAA,MAAM,cAAc,eAAA,EAAgB;AAIpC,EAAA,MAAM,WAAA,GACJ,IAAA,CAAK,SAAA,KAAc,MAAA,GAAS,CAAC,QAAA,EAAU,MAAA,EAAQ,MAAM,CAAA,GAAI,CAAC,MAAA,EAAQ,MAAA,EAAQ,MAAM,CAAA;AAUlF,EAAA,MAAM,EAAE,SAAAF,QAAAA,EAAS,IAAA,KAAS,mBAAA,CAAoB,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,IAAI,CAAA;AACrE,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAMA,QAAAA,EAAS,IAAA,EAAM;AAAA,IACjC,KAAK,IAAA,CAAK,GAAA;AAAA,IACV,KAAK,IAAA,CAAK,GAAA;AAAA,IACV,KAAA,EAAO,WAAA;AAAA,IACP,KAAA,EAAO,KAAA;AAAA,IACP,WAAA,EAAa;AAAA,GACd,CAAA;AAGD,EAAA,KAAA,CAAM,MAAA,CAAO,EAAA,CAAG,MAAA,EAAQ,CAAC,KAAA,KAAkB;AACzC,IAAA,UAAA,CAAW,WAAA,EAAa,KAAA,EAAO,IAAA,CAAK,iBAAA,EAAmB,KAAK,iBAAiB,CAAA;AAAA,EAC/E,CAAC,CAAA;AACD,EAAA,KAAA,CAAM,MAAA,CAAO,EAAA,CAAG,MAAA,EAAQ,CAAC,KAAA,KAAkB;AACzC,IAAA,UAAA,CAAW,WAAA,EAAa,KAAA,EAAO,IAAA,CAAK,iBAAA,EAAmB,KAAK,iBAAiB,CAAA;AAAA,EAC/E,CAAC,CAAA;AAKD,EAAA,IAAI,YAAA,GAAwE;AAAA,IAC1E,MAAA,EAAQ,CAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AACA,EAAA,IAAI,YAAA,GAAoD,IAAA;AACxD,EAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,EAAA,IAAI,IAAA,CAAK,cAAc,MAAA,EAAQ;AAC7B,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,WAAA,IAAe,OAAA,CAAQ,KAAA;AAC3C,IAAA,YAAA,GAAe,UAAU,MAAA,EAAQ,KAAA,CAAM,OAAO,IAAA,CAAK,SAAA,EAAW,WAAW,MAAM,CAAA;AAAA,EACjF;AAOA,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,IAAI,iBAAA,GAAmC,IAAA;AACvC,EAAA,IAAI,UAAA;AACJ,EAAA,MAAM,aAAA,GAAgB,WAAW,MAAM;AACrC,IAAA,QAAA,GAAW,IAAA;AACX,IAAA,iBAAA,GAAoB,SAAA;AACpB,IAAA,IAAI;AACF,MAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AAAA,IACtB,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,UAAA,GAAa,WAAW,MAAM;AAC5B,MAAA,IAAI,KAAA,CAAM,QAAA,KAAa,IAAA,IAAQ,KAAA,CAAM,eAAe,IAAA,EAAM;AACxD,QAAA,iBAAA,GAAoB,SAAA;AACpB,QAAA,IAAI;AACF,UAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AAAA,QACtB,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF,CAAA,EAAG,KAAK,WAAW,CAAA;AAAA,EACrB,CAAA,EAAG,KAAK,SAAS,CAAA;AAMjB,EAAA,MAAM,QAAA,GAAW,MAAM,IAAI,OAAA;AAAA,IACzB,CAACE,UAAS,MAAA,KAAW;AACnB,MAAA,IAAI,OAAA,GAAU,KAAA;AACd,MAAA,KAAA,CAAM,EAAA,CAAG,OAAA,EAAS,CAAC,IAAA,EAAM,MAAA,KAAW;AAClC,QAAA,IAAI,OAAA,EAAS;AACb,QAAA,OAAA,GAAU,IAAA;AACV,QAAA,YAAA,CAAa,aAAa,CAAA;AAC1B,QAAA,IAAI,UAAA,eAAyB,UAAU,CAAA;AACvC,QAAA,UAAA,CAAW,KAAA,EAAM;AAGjB,QAAA,MAAM,QAAA,GAAW,IAAA,KAAS,IAAA,GAAO,iBAAA,CAAkB,MAAM,CAAA,GAAI,IAAA;AAC7D,QAAAA,SAAQ,EAAE,QAAA,EAAU,MAAA,EAAQ,MAAA,IAAU,MAAM,CAAA;AAAA,MAC9C,CAAC,CAAA;AACD,MAAA,KAAA,CAAM,EAAA,CAAG,OAAA,EAAS,CAAC,GAAA,KAAQ;AACzB,QAAA,IAAI,OAAA,EAAS;AACb,QAAA,OAAA,GAAU,IAAA;AACV,QAAA,YAAA,CAAa,aAAa,CAAA;AAC1B,QAAA,IAAI,UAAA,eAAyB,UAAU,CAAA;AACvC,QAAA,UAAA,CAAW,KAAA,EAAM;AACjB,QAAA,MAAA;AAAA,UACE,IAAI,mBAAA;AAAA,YACF,kCAAkC,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA;AAAA,YAClF;AAAA;AACF,SACF;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAAA,GACF;AAEA,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,YAAA,GAAe,MAAM,YAAA;AAAA,EACvB;AAEA,EAAA,MAAM,aAAa,MAAA,EAAO;AAC1B,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,EAAI,GAAI,OAAA;AAEhC,EAAA,MAAM,QAAA,GACJ,KAAK,SAAA,KAAc,MAAA,GACf,EAAE,IAAA,EAAM,MAAA,KACR,IAAA,CAAK,SAAA,KAAc,gBACjB,EAAE,IAAA,EAAM,eAAe,MAAA,EAAQ,YAAA,CAAa,QAAQ,SAAA,EAAW,YAAA,CAAa,WAAU,GACtF;AAAA,IACE,IAAA,EAAM,QAAA;AAAA,IACN,QAAQ,YAAA,CAAa,MAAA;AAAA,IACrB,QAAQ,YAAA,CAAa,MAAA;AAAA,IACrB,WAAW,YAAA,CAAa;AAAA,GAC1B;AAER,EAAA,OAAO;AAAA,IACL,UAAU,QAAA,CAAS,QAAA;AAAA,IACnB,QAAQ,QAAA,CAAS,MAAA;AAAA,IACjB,QAAA;AAAA,IACA,iBAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA,EAAQ,iBAAA,CAAkB,WAAA,EAAa,IAAA,CAAK,iBAAiB,CAAA;AAAA,IAC7D,MAAA,EAAQ,iBAAA,CAAkB,WAAA,EAAa,IAAA,CAAK,iBAAiB,CAAA;AAAA,IAC7D,KAAA,EAAO;AAAA,GACT;AACF;ACvgBO,SAAS,wBAAwBP,OAAAA,EAA+B;AACrE,EAAA,IAAIA,OAAAA,KAAW,GAAA,IAAOA,OAAAA,KAAW,EAAA,EAAI,OAAO,IAAA;AAC5C,EAAA,MAAM,OAAA,GAAUQ,QAAYR,OAAM,CAAA;AAClC,EAAA,MAAM,MAAA,GAAS,QAAQ,OAAO,CAAA;AAC9B,EAAA,IAAI;AACF,IAAA,MAAM,EAAA,GAAKS,SAAS,MAAM,CAAA;AAC1B,IAAA,IAAI,CAAC,EAAA,CAAG,WAAA,EAAY,EAAG;AACrB,MAAA,OAAO,gBAAgB,MAAM,CAAA,oBAAA,CAAA;AAAA,IAC/B;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,OAAO,CAAA,kBAAA,EAAqB,MAAM,CAAA,kBAAA,EAAsB,GAAA,EAA+B,IAAA,KAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAA,CAAE,CAAA,CAAA,CAAA;AAAA,EACnJ;AASA,EAAA,IAAI,UAAA;AACJ,EAAA,IAAI;AACF,IAAA,UAAA,GAAa,QAAA,CAAS,OAAA,EAASC,SAAA,CAAY,QAAA,GAAWA,UAAY,QAAQ,CAAA;AAAA,EAC5E,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,OAAQ,GAAA,EAA+B,IAAA;AAC7C,IAAA,IAAI,SAAS,QAAA,EAAU;AACrB,MAAA,OAAO,CAAA,aAAA,EAAgB,OAAO,CAAA,aAAA,EAAgB,IAAA,KAAS,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAA,CAAE,CAAA,CAAA,CAAA;AAAA,IAC1G;AAAA,EAEF;AACA,EAAA,IAAI,eAAe,MAAA,EAAW;AAC5B,IAAA,IAAI;AACF,MAAA,SAAA,CAAU,UAAU,CAAA;AAAA,IACtB,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAKA,EAAA,MAAM,WAAW,CAAA,gBAAA,EAAmB,WAAA,CAAY,CAAC,CAAA,CAAE,QAAA,CAAS,KAAK,CAAC,CAAA,IAAA,CAAA;AAClE,EAAA,MAAM,QAAA,GAAWrB,IAAAA,CAAK,MAAA,EAAQ,QAAQ,CAAA;AACtC,EAAA,IAAI,EAAA;AACJ,EAAA,IAAI;AACF,IAAA,EAAA,GAAK,QAAA,CAAS,UAAUqB,SAAA,CAAY,QAAA,GAAWA,UAAY,OAAA,GAAUA,SAAA,CAAY,QAAQ,GAAK,CAAA;AAAA,EAChG,SAAS,GAAA,EAAK;AACZ,IAAA,OAAO,CAAA,kBAAA,EAAqB,MAAM,CAAA,mBAAA,EAAuB,GAAA,EAA+B,IAAA,KAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAA,CAAE,CAAA,CAAA,CAAA;AAAA,EACpJ,CAAA,SAAE;AACA,IAAA,IAAI,OAAO,MAAA,EAAW;AACpB,MAAA,IAAI;AACF,QAAA,SAAA,CAAU,EAAE,CAAA;AAAA,MACd,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AACA,EAAA,IAAI;AACF,IAAA,UAAA,CAAW,QAAQ,CAAA;AAAA,EACrB,CAAA,CAAA,MAAQ;AAAA,EAGR;AACA,EAAA,OAAO,IAAA;AACT;;;AC3DA,IAAM,eAAA,GAAgD;AAAA;AAAA;AAAA,EAGpD;AAAA,IACE,QAAA,EAAU,KAAA;AAAA,IACV,OAAA,EAAS;AAAA,GACX;AAAA;AAAA,EAEA;AAAA,IACE,QAAA,EAAU,cAAA;AAAA,IACV,OAAA,EAAS;AAAA,GACX;AAAA;AAAA,EAEA;AAAA,IACE,QAAA,EAAU,gBAAA;AAAA,IACV,OAAA,EAAS;AAAA,GACX;AAAA;AAAA,EAEA;AAAA,IACE,QAAA,EAAU,SAAA;AAAA,IACV,OAAA,EAAS;AAAA,GACX;AAAA;AAAA;AAAA,EAGA;AAAA,IACE,QAAA,EAAU,sBAAA;AAAA,IACV,OAAA,EAAS;AAAA;AAEb,CAAA;AAWO,SAAS,eAAe,KAAA,EAAgD;AAC7E,EAAA,MAAM,IAAA,GAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,OAAO,IAAA,CAAK,KAAK,CAAA,CAAE,QAAA,CAAS,MAAM,CAAA;AACnF,EAAA,KAAA,MAAW,EAAE,QAAA,EAAU,OAAA,EAAQ,IAAK,eAAA,EAAiB;AACnD,IAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,EAAG;AACtB,MAAA,OAAO,EAAE,QAAA,EAAS;AAAA,IACpB;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAMO,SAAS,gBAAgB,KAAA,EAAmC;AACjE,EAAA,OAAO,eAAe,KAAK,CAAA;AAC7B;;;ACtEO,IAAM,0BAAA,GAAN,cAAyC,KAAA,CAAM;AAAA,EAC3C,IAAA;AAAA,EACT,WAAA,CAAY,MAAc,OAAA,EAAiB;AACzC,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,4BAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EACd;AACF,CAAA;AAWA,SAAS,YAAY,CAAA,EAAmB;AACtC,EAAA,OAAO,CAAA,CAAE,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA;AACjC;AAKA,IAAMC,cAAAA,GAAgB,SAAA;AA2DtB,SAAS,UAAU,KAAA,EAAgC;AACjD,EAAA,OAAOA,cAAAA,GAAgBL,WAAW,QAAQ,CAAA,CAAE,OAAO,KAAK,CAAA,CAAE,OAAO,KAAK,CAAA;AACxE;AAOA,eAAe,aAAa3B,KAAAA,EAA+B;AACzD,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC4B,QAAAA,EAAS,MAAA,KAAW;AACtC,IAAA,MAAM,MAAA,GAASD,WAAW,QAAQ,CAAA;AAClC,IAAA,MAAM,MAAA,GAAS,iBAAiB3B,KAAI,CAAA;AACpC,IAAA,MAAA,CAAO,EAAA,CAAG,MAAA,EAAQ,CAAC,KAAA,KAAU;AAC3B,MAAA,MAAA,CAAO,OAAO,KAAK,CAAA;AAAA,IACrB,CAAC,CAAA;AACD,IAAA,MAAA,CAAO,EAAA,CAAG,OAAO,MAAM;AACrB,MAAA4B,QAAAA,CAAQI,cAAAA,GAAgB,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IAC9C,CAAC,CAAA;AACD,IAAA,MAAA,CAAO,EAAA,CAAG,SAAS,MAAM,CAAA;AAAA,EAC3B,CAAC,CAAA;AACH;AAEA,SAAS,sBAAsB,KAAA,EAAwB;AACrD,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,IAAA;AAC3B,EAAA,IAAI,iBAAA,CAAkB,IAAA,CAAK,KAAK,CAAA,EAAG,OAAO,IAAA;AAC1C,EAAA,IAAI,4BAAA,CAA6B,IAAA,CAAK,KAAK,CAAA,EAAG,OAAO,IAAA;AACrD,EAAA,OAAO,KAAA;AACT;AAaA,SAAS,UAAA,CACP,OAAA,EACA,IAAA,EACA,gBAAA,EACA,iBAAA,EACqE;AACrE,EAAA,MAAM,aAAa,OAAA,CAAQ,MAAA;AAC3B,EAAA,IAAI,SAAS,QAAA,EAAU;AACrB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AACpC,IAAA,OAAO,EAAE,WAAA,EAAa,SAAA,CAAU,KAAK,CAAA,EAAG,kBAAkB,UAAA,EAAW;AAAA,EACvE;AACA,EAAA,IAAI,SAAS,UAAA,EAAY;AACvB,IAAA,MAAMC,IAAAA,GAAgB,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,KAAQ;AACzC,MAAA,IAAI,qBAAA,CAAsB,GAAG,CAAA,EAAG,OAAO,GAAA;AAEvC,MAAA,MAAM,EAAA,GAAK,GAAA,CAAI,KAAA,CAAM,mCAAmC,CAAA;AACxD,MAAA,IAAI,EAAA,EAAI;AACN,QAAA,MAAM,KAAA,GAAQ,GAAG,CAAC,CAAA;AAClB,QAAA,MAAMC,QAAAA,GAAU,MAAA,CAAO,UAAA,CAAW,KAAA,EAAO,MAAM,CAAA;AAC/C,QAAA,OAAO,CAAA,EAAG,EAAA,CAAG,CAAC,CAAC,aAAaA,QAAO,CAAA,CAAA,CAAA;AAAA,MACrC;AACA,MAAA,MAAM,OAAA,GAAU,MAAA,CAAO,UAAA,CAAW,GAAA,EAAK,MAAM,CAAA;AAC7C,MAAA,OAAO,aAAa,OAAO,CAAA,CAAA,CAAA;AAAA,IAC7B,CAAC,CAAA;AACD,IAAA,OAAO,EAAE,IAAA,EAAMD,IAAAA,EAAK,gBAAA,EAAkB,UAAA,EAAW;AAAA,EACnD;AAEA,EAAA,MAAM,GAAA,GAAgB,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAK,GAAA,KAAQ;AAC9C,IAAA,IAAI,MAAA,CAAO,UAAA,CAAW,GAAA,EAAK,MAAM,IAAI,gBAAA,EAAkB;AACrD,MAAA,MAAM,IAAI,0BAAA;AAAA,QACR,yBAAA;AAAA,QACA,CAAA,aAAA,EAAgB,GAAG,CAAA,GAAA,EAAM,MAAA,CAAO,WAAW,GAAA,EAAK,MAAM,CAAC,CAAA,gCAAA,EAAmC,gBAAgB,CAAA,mEAAA;AAAA,OAC5G;AAAA,IACF;AACA,IAAA,IAAI,UAAA,GAA0C,IAAA;AAC9C,IAAA,IAAI,iBAAA,EAAmB;AACrB,MAAA,UAAA,GAAa,gBAAgB,GAAG,CAAA;AAAA,IAClC;AACA,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,OAAO,CAAA,mBAAA,EAAsB,WAAW,QAAQ,CAAA,CAAA,CAAA;AAAA,IAClD;AACA,IAAA,OAAO,GAAA;AAAA,EACT,CAAC,CAAA;AACD,EAAA,OAAO,EAAE,IAAA,EAAM,GAAA,EAAK,gBAAA,EAAkB,UAAA,EAAW;AACnD;AAEA,SAAS,aAAA,CACP,SAAA,EACA,SAAA,EACA,IAAA,EACA,aAAA,EACuF;AAIvF,EAAA,IAAI,IAAA,KAAS,KAAA,IAAS,CAAC,aAAA,EAAe;AACpC,IAAA,MAAM,IAAI,0BAAA;AAAA,MACR,2BAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,MAAM,UAAqE,EAAC;AAC5E,EAAA,KAAA,MAAW,OAAO,SAAA,EAAW;AAC3B,IAAA,MAAM,GAAA,GAAM,UAAU,GAAG,CAAA;AACzB,IAAA,IAAI,QAAQ,MAAA,EAAW;AACvB,IAAA,IAAI,SAAS,QAAA,EAAU;AACrB,MAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,EAAE,YAAA,EAAc,SAAA,CAAU,GAAG,CAAA,EAAE;AAAA,IAChD,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,EAAE,KAAA,EAAO,GAAA,EAAI;AAAA,IAC9B;AAAA,EACF;AACA,EAAA,OAAO,EAAE,MAAM,OAAA,EAAQ;AACzB;AASA,SAAS,QAAA,CAAS,KAAa,IAAA,EAA4B;AACzD,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,MAAA;AACH,MAAA,OAAO,EAAE,UAAU,MAAA,EAAO;AAAA,IAC5B,KAAK,QAAA;AACH,MAAA,OAAO,EAAE,QAAA,EAAU,QAAA,EAAU,UAAA,EAAY,SAAA,CAAU,GAAG,CAAA,EAAE;AAAA,IAC1D,KAAK,UAAA;AACH,MAAA,OAAO,EAAE,QAAA,EAAU,UAAA,EAAY,YAAA,EAAc,WAAA,CAAY,GAAG,CAAA,EAAE;AAAA,IAChE,KAAK,UAAA;AACH,MAAA,OAAO,EAAE,QAAA,EAAU,UAAA,EAAY,YAAA,EAAc,GAAA,EAAI;AAAA;AAEvD;AAaA,eAAe,WAAA,CACb,eAAA,EACA,QAAA,EACA,SAAA,EACyB;AACzB,EAAA,MAAM,KAAA,GAAwB,EAAE,SAAA,EAAW,QAAA,EAAS;AACpD,EAAA,IAAI,aAAA,GAAgB,KAAA;AACpB,EAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,IAAA,IAAI;AACF,MAAA,MAAM,EAAA,GAAKH,SAAS,eAAe,CAAA;AACnC,MAAA,KAAA,CAAM,aAAa,EAAA,CAAG,IAAA;AACtB,MAAA,KAAA,CAAM,UAAA,GAAA,CAAc,GAAG,IAAA,GAAO,IAAA,EAAQ,SAAS,CAAC,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA;AACjE,MAAA,aAAA,GAAgB,GAAG,MAAA,EAAO;AAAA,IAC5B,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACA,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,MAAA;AACH,MAAA;AAAA,IACF,KAAK,QAAA;AACH,MAAA,KAAA,CAAM,WAAA,GAAc,UAAU,eAAe,CAAA;AAC7C,MAAA;AAAA,IACF,KAAK,UAAA;AACH,MAAA,KAAA,CAAM,aAAA,GAAgB,eAAA;AACtB,MAAA;AAAA;AAGJ,EAAA,IAAI,QAAA,KAAa,UAAU,aAAA,EAAe;AACxC,IAAA,IAAI;AACF,MAAA,KAAA,CAAM,MAAA,GAAS,MAAM,YAAA,CAAa,eAAe,CAAA;AAAA,IACnD,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACA,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,MAAA,MAAM,IAAI,0BAAA;AAAA,QACR,yBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAMA,IAAA,KAAA,CAAM,SAAA,GAAY,KAAA,CAAM,WAAA,IAAe,SAAA,CAAU,eAAe,CAAA;AAAA,EAClE;AACA,EAAA,OAAO,KAAA;AACT;AAOA,SAAS,eAAA,CACP,KACA,WAAA,EAIA;AACA,EAAA,IAAI,CAAC,WAAA,IAAe,GAAA,CAAI,aAAA,KAAkB,MAAA,EAAW;AACnD,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAA,GAAU,OAAO,IAAA,CAAK,GAAA,CAAI,eAAe,QAAQ,CAAA,CAAE,SAAS,MAAM,CAAA;AACxE,EAAA,MAAM,KAAA,GAAQ,eAAe,OAAO,CAAA;AACpC,EAAA,IAAI,CAAC,OAAO,OAAO,GAAA;AAEnB,EAAA,MAAM,EAAE,aAAA,EAAe,KAAA,EAAO,GAAG,MAAK,GAAI,GAAA;AAE1C,EAAA,OAAO;AAAA,IACL,GAAI,IAAA;AAAA,IACJ,wBAAA,EAA0B,yBAAA;AAAA,IAC1B,0BAA0B,KAAA,CAAM;AAAA,GAClC;AACF;AAEA,eAAsB,iBAAiB,KAAA,EAAuD;AAC5F,EAAA,MAAM,WAAA,GAAc,UAAA;AAAA,IAClB,KAAA,CAAM,OAAA;AAAA,IACN,KAAA,CAAM,QAAA;AAAA,IACN,KAAA,CAAM,gBAAA;AAAA,IACN,KAAA,CAAM;AAAA,GACR;AAMA,EAAA,MAAM,WAAA,GAAc,WAAA,CAAY,KAAA,CAAM,YAAY,CAAA;AAClD,EAAA,MAAM,OAAA,GACJ,KAAA,CAAM,QAAA,KAAa,QAAA,GACf;AAAA,IACE,OAAA,EAAS,WAAA;AAAA,IACT,SAAA,EAAW,QAAA;AAAA,IACX,aAAa,WAAA,CAAY,WAAA;AAAA,IACzB,kBAAkB,WAAA,CAAY;AAAA,GAChC,GACA,KAAA,CAAM,QAAA,KAAa,UAAA,GACjB;AAAA,IACE,OAAA,EAAS,WAAA;AAAA,IACT,SAAA,EAAW,UAAA;AAAA,IACX,MAAM,WAAA,CAAY,IAAA;AAAA,IAClB,kBAAkB,WAAA,CAAY;AAAA,GAChC,GACA;AAAA,IACE,OAAA,EAAS,WAAA;AAAA,IACT,SAAA,EAAW,KAAA;AAAA,IACX,MAAM,WAAA,CAAY,IAAA;AAAA,IAClB,kBAAkB,WAAA,CAAY;AAAA,GAChC;AAER,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,KAAA,CAAM,GAAA,EAAK,MAAM,OAAO,CAAA;AAC7C,EAAA,MAAM,SAAS,MAAM,WAAA;AAAA,IACnB,KAAA,CAAM,mBAAA;AAAA,IACN,KAAA,CAAM,cAAA;AAAA,IACN,KAAA,CAAM;AAAA,GACR;AAEA,EAAA,MAAM,GAAA,GAAM,aAAA;AAAA,IACV,KAAA,CAAM,SAAA;AAAA,IACN,KAAA,CAAM,YAAA;AAAA,IACN,KAAA,CAAM,OAAA;AAAA,IACN,KAAA,CAAM;AAAA,GACR;AAEA,EAAA,MAAM,YAAY,eAAA,CAAgB,KAAA,CAAM,OAAA,CAAQ,MAAA,EAAQ,MAAM,iBAAiB,CAAA;AAC/E,EAAA,MAAM,YAAY,eAAA,CAAgB,KAAA,CAAM,OAAA,CAAQ,MAAA,EAAQ,MAAM,iBAAiB,CAAA;AAE/E,EAAA,MAAM,WAAA,GAAuC;AAAA,IAC3C,IAAA,EAAM,0BAAA;AAAA,IACN,OAAA,EAAS,EAAE,IAAA,EAAM,KAAA,EAAM;AAAA,IACvB,OAAA;AAAA,IACA,GAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA,EAAW,MAAM,OAAA,CAAQ,KAAA;AAAA,IACzB,UAAA,EAAY,SAAA;AAAA,IACZ,UAAA,EAAY,SAAA;AAAA,IACZ,GAAA;AAAA,IACA,UAAA,EAAY,MAAM,OAAA,CAAQ,SAAA;AAAA,IAC1B,WAAA,EAAa,MAAM,OAAA,CAAQ,UAAA;AAAA,IAC3B,WAAA,EAAa,MAAM,OAAA,CAAQ,UAAA;AAAA,IAC3B,SAAA,EAAW,MAAM,OAAA,CAAQ,QAAA;AAAA,IACzB,GAAI,KAAA,CAAM,OAAA,CAAQ,MAAA,GAAS,EAAE,QAAQ,KAAA,CAAM,OAAA,CAAQ,MAAA,EAAO,GAAI,EAAC;AAAA,IAC/D,SAAA,EAAW,MAAM,OAAA,CAAQ,QAAA;AAAA,IACzB,YAAY,KAAA,CAAM,SAAA;AAAA,IAClB,eAAe,KAAA,CAAM,WAAA;AAAA,IACrB,GAAI,KAAA,CAAM,OAAA,CAAQ,iBAAA,GACd,EAAE,oBAAoB,KAAA,CAAM,OAAA,CAAQ,iBAAA,EAAkB,GACtD,EAAC;AAAA,IACL,gBAAgB,KAAA,CAAM,YAAA;AAAA,IACtB,YAAY,KAAA,CAAM,SAAA;AAAA,IAClB,gBAAgB,KAAA,CAAM,aAAA;AAAA,IACtB,cAAA,EAAgB;AAAA,MACd,kBAAkB,KAAA,CAAM,iBAAA;AAAA,MACxB,kBAAkB,KAAA,CAAM,iBAAA;AAAA,MACxB,gBAAgB,KAAA,CAAM,gBAAA;AAAA,MACtB,eAAe,KAAA,CAAM,YAAA;AAAA,MACrB,YAAY,KAAA,CAAM,SAAA;AAAA,MAClB,UAAU,KAAA,CAAM,OAAA;AAAA,MAChB,kBAAkB,KAAA,CAAM,cAAA;AAAA,MACxB,aAAa,KAAA,CAAM,iBAAA;AAAA,MACnB,8BAA8B,KAAA,CAAM,iBAAA;AAAA,MACpC,0BAA0B,KAAA,CAAM,aAAA;AAAA,MAChC,+BAA+B,KAAA,CAAM,0BAAA;AAAA,MACrC,YAAY,KAAA,CAAM,SAAA;AAAA,MAClB,eAAe,KAAA,CAAM,WAAA;AAAA,MACrB,gBAAgB,KAAA,CAAM;AAAA,KACxB;AAAA,IACA,QAAA,EAAU;AAAA,MACR,IAAI,OAAA,CAAQ,QAAA;AAAA,MACZ,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,kBAAkB,KAAA,CAAM;AAAA,KAC1B;AAAA,IACA,GAAI,MAAM,YAAA,GAAe,EAAE,eAAe,KAAA,CAAM,YAAA,KAAiB,EAAC;AAAA,IAClE,GAAI,MAAM,YAAA,GAAe,EAAE,eAAe,KAAA,CAAM,YAAA,KAAiB,EAAC;AAAA,IAClE,GAAI,MAAM,WAAA,GAAc,EAAE,cAAc,KAAA,CAAM,WAAA,KAAgB;AAAC,GACjE;AAEA,EAAA,OAAO,WAAA;AACT;;;AChWO,SAAS,kBAAA,CAAmB,OAAe,QAAA,EAAqC;AACrF,EAAA,IAAI,MAAM,QAAA,CAAS,GAAG,KAAK,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA,EAAG;AAC/C,IAAA,OAAOD,QAAY,KAAK,CAAA;AAAA,EAC1B;AACA,EAAA,MAAM,IAAA,GAAO,SAAS,IAAA,IAAQ,EAAA;AAC9B,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AACjC,EAAA,MAAM,IAAA,GACJ,OAAA,CAAQ,QAAA,KAAa,OAAA,GAAA,CAAW,QAAA,CAAS,OAAA,IAAW,gBAAA,EAAkB,KAAA,CAAM,GAAG,CAAA,GAAI,CAAC,EAAE,CAAA;AACxF,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,MAAM,SAAA,GAAYnB,IAAAA,CAAK,GAAA,EAAK,KAAA,GAAQ,GAAG,CAAA;AACvC,MAAA,IAAI;AACF,QAAA,MAAM,EAAA,GAAKoB,SAAS,SAAS,CAAA;AAC7B,QAAA,IAAI,CAAC,EAAA,CAAG,MAAA,EAAO,EAAG;AAClB,QAAA,IAAI,QAAQ,QAAA,KAAa,OAAA,IAAA,CAAY,EAAA,CAAG,IAAA,GAAO,QAAW,CAAA,EAAG;AAC7D,QAAA,OAAO,SAAA;AAAA,MACT,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAQO,IAAMK,wBAAAA,GAA0B,uBAAA;AAgBvC,eAAsB,kBAAA,CACpB,IAAA,EACA,YAAA,EACA,IAAA,EACA,EAAA,EACgC;AAChC,EAAA,MAAM,mBAAA,GAAsB,kBAAA,CAAmB,YAAA,EAAc,EAAA,CAAG,QAAQ,CAAA;AAExE,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,OAAA,GAAU,MAAM,cAAA,CAAe;AAAA,MAC7B,OAAA,EAAS,mBAAA;AAAA,MACT,IAAA;AAAA,MACA,KAAK,EAAA,CAAG,GAAA;AAAA,MACR,KAAK,EAAA,CAAG,QAAA;AAAA,MACR,WAAW,IAAA,CAAK,gBAAA;AAAA,MAChB,iBAAA,EAAmB,IAAA,CAAK,WAAA,KAAgB,KAAA,IAAS,IAAA,CAAK,qBAAA;AAAA,MACtD,mBAAmB,IAAA,CAAK,kBAAA;AAAA,MACxB,mBAAmB,IAAA,CAAK,kBAAA;AAAA,MACxB,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,aAAa,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACH,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,eAAe,mBAAA,EAAqB;AACtC,MAAA,OAAO,EAAE,IAAI,KAAA,EAAO,IAAA,EAAM,IAAI,IAAA,EAAM,OAAA,EAAS,IAAI,OAAA,EAAQ;AAAA,IAC3D;AACA,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,IAAA,EAAM,kBAAA;AAAA,MACN,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG;AAAA,KAC1D;AAAA,EACF;AAEA,EAAA,IAAI,WAAA;AACJ,EAAA,IAAI;AACF,IAAA,WAAA,GAAc,MAAM,gBAAA,CAAiB;AAAA,MACnC,OAAA;AAAA,MACA,YAAA;AAAA,MACA,mBAAA;AAAA,MACA,OAAA,EAAS,IAAA;AAAA,MACT,KAAK,EAAA,CAAG,GAAA;AAAA,MACR,UAAU,IAAA,CAAK,WAAA;AAAA,MACf,SAAS,IAAA,CAAK,cAAA;AAAA,MACd,gBAAgB,IAAA,CAAK,iBAAA;AAAA,MACrB,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,WAAW,IAAA,CAAK,gBAAA;AAAA,MAChB,cAAc,IAAA,CAAK,QAAA;AAAA,MACnB,WAAW,EAAA,CAAG,UAAA;AAAA,MACd,iBAAA,EAAmB,IAAA,CAAK,WAAA,KAAgB,KAAA,IAAS,IAAA,CAAK,qBAAA;AAAA,MACtD,aAAA,EAAe,IAAA,CAAK,OAAA,KAAY,KAAA,IAAS,IAAA,CAAK,iBAAA;AAAA,MAC9C,mBAAmB,IAAA,CAAK,UAAA;AAAA,MACxB,4BAA4B,IAAA,CAAK,uBAAA;AAAA,MACjC,kBAAkB,IAAA,CAAK,gBAAA;AAAA,MACvB,mBAAmB,IAAA,CAAK,kBAAA;AAAA,MACxB,mBAAmB,IAAA,CAAK,kBAAA;AAAA,MACxB,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,cAAc,IAAA,CAAK,YAAA;AAAA,MACnB,eAAe,IAAA,CAAK,aAAA;AAAA,MACpB,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,cAAc,IAAA,CAAK,YAAA;AAAA,MACnB,cAAc,IAAA,CAAK,YAAA;AAAA,MACnB,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,gBAAgB,EAAA,CAAG;AAAA,KACpB,CAAA;AAAA,EACH,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,eAAe,0BAAA,EAA4B;AAC7C,MAAA,OAAO,EAAE,IAAI,KAAA,EAAO,IAAA,EAAM,IAAI,IAAA,EAAM,OAAA,EAAS,IAAI,OAAA,EAAQ;AAAA,IAC3D;AACA,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,IAAA,EAAM,oBAAA;AAAA,MACN,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG;AAAA,KAC1D;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,SAAA,CAAU,WAAW,CAAA;AACvD,EAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA;AACnC,IAAA,MAAMnC,KAAAA,GAAO,KAAA,EAAO,IAAA,EAAM,IAAA,CAAK,GAAG,CAAA,IAAK,EAAA;AACvC,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,IAAA,EAAM,sBAAA;AAAA,MACN,OAAA,EAAS,CAAA,EAAGA,KAAAA,GAAO,GAAA,GAAMA,KAAAA,GAAO,OAAO,EAAE,CAAA,EAAG,KAAA,EAAO,OAAA,IAAW,0BAA0B,CAAA;AAAA,KAC1F;AAAA,EACF;AACA,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,WAAA,EAAa,MAAA,CAAO,MAAM,OAAA,EAAQ;AACvD;ACtLO,IAAM,0BAAA,GAA6B;AAAA,EACxC,eAAA,EAAiB,sBAAA;AAAA,EACjB,kBAAA,EAAoB,0BAAA;AAAA,EACpB,mCAAA,EAAqC,8CAAA;AAAA,EACrC,iBAAA,EAAmB,yBAAA;AAAA,EACnB,gBAAA,EAAkB,yBAAA;AAAA,EAClB,UAAA,EAAY,kBAAA;AAAA,EACZ,mBAAA,EAAqB,2BAAA;AAAA,EACrB,mBAAA,EAAqB,2BAAA;AAAA,EACrB,kBAAA,EAAoB,0BAAA;AAAA,EACpB,aAAA,EAAe,qBAAA;AAAA;AAAA,EAEf,oBAAA,EAAsB,4BAAA;AAAA,EACtB,oBAAA,EAAsB,4BAAA;AAAA,EACtB,gBAAA,EAAkB,wBAAA;AAAA,EAClB,eAAA,EAAiB;AACnB,CAAA;AAuCA,IAAM,aAAA,GAAgB,uBAAA;AACtB,IAAM,eAAA,GAAkB,0BAAA;AACxB,IAAM,iBAAA,GAAoB,GAAA;AAGnB,SAAS,iBAAA,CAAkB,CAAA,EAAY,GAAA,EAAa,GAAA,EAAsB;AAC/E,EAAA,OAAO,OAAO,CAAA,KAAM,QAAA,IAAY,MAAA,CAAO,SAAA,CAAU,CAAC,CAAA,IAAK,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,IAAK,CAAA,IAAK,OAAO,CAAA,IAAK,GAAA;AAChG;AAGO,SAAS,UAAU,CAAA,EAAmB;AAC3C,EAAA,OAAO,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,CAAC,CAAA,CAAE,UAAA;AACrC;AAGO,SAASoC,aAAY,CAAA,EAAmB;AAC7C,EAAA,OAAO,CAAA,CAAE,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA;AACjC;AAQO,SAAS,0BAAA,CACd,MACA,SAAA,EACqB;AACrB,EAAA,MAAM,WAAgC,EAAC;AAEvC,EAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,eAAA;AAAA,MACjC,OAAA,EAAS;AAAA,KACV,CAAA;AACD,IAAA,OAAO,QAAA;AAAA,EACT;AAIA,EAAA,IAAI,CAAC,kBAAkB,IAAA,CAAK,SAAA,EAAW,WAAW,YAAA,EAAc,UAAA,CAAW,YAAY,CAAA,EAAG;AACxF,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,UAAA;AAAA,MACjC,SAAS,CAAA,0CAAA,EAA6C,UAAA,CAAW,YAAY,CAAA,EAAA,EAAK,WAAW,YAAY,CAAA,CAAA;AAAA,KAC1G,CAAA;AAAA,EACH;AACA,EAAA,IAAI,CAAC,kBAAkB,IAAA,CAAK,WAAA,EAAa,WAAW,cAAA,EAAgB,UAAA,CAAW,cAAc,CAAA,EAAG;AAC9F,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,UAAA;AAAA,MACjC,SAAS,CAAA,6CAAA,EAAgD,UAAA,CAAW,cAAc,CAAA,EAAA,EAAK,WAAW,cAAc,CAAA,CAAA;AAAA,KACjH,CAAA;AAAA,EACH;AACA,EAAA,IAAI,CAAC,iBAAA,CAAkB,IAAA,CAAK,oBAAoB,CAAA,EAAG,UAAA,CAAW,oBAAoB,CAAA,EAAG;AACnF,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,UAAA;AAAA,MACjC,OAAA,EAAS,CAAA,uDAAA,EAA0D,UAAA,CAAW,oBAAoB,CAAA,CAAA;AAAA,KACnG,CAAA;AAAA,EACH;AACA,EAAA,IAAI,CAAC,iBAAA,CAAkB,IAAA,CAAK,oBAAoB,CAAA,EAAG,UAAA,CAAW,oBAAoB,CAAA,EAAG;AACnF,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,UAAA;AAAA,MACjC,OAAA,EAAS,CAAA,uDAAA,EAA0D,UAAA,CAAW,oBAAoB,CAAA,CAAA;AAAA,KACnG,CAAA;AAAA,EACH;AACA,EAAA,IAAI,CAAC,iBAAA,CAAkB,IAAA,CAAK,kBAAkB,CAAA,EAAG,UAAA,CAAW,mBAAmB,CAAA,EAAG;AAChF,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,UAAA;AAAA,MACjC,OAAA,EAAS,CAAA,qDAAA,EAAwD,UAAA,CAAW,mBAAmB,CAAA,CAAA;AAAA,KAChG,CAAA;AAAA,EACH;AACA,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,MAAA,GAAS,UAAA,CAAW,aAAA,EAAe;AACnD,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,UAAA;AAAA,MACjC,OAAA,EAAS,CAAA,4BAAA,EAA+B,UAAA,CAAW,aAAa,CAAA,KAAA;AAAA,KACjE,CAAA;AAAA,EACH;AAGA,EAAA,KAAA,MAAW,GAAA,IAAO,KAAK,QAAA,EAAU;AAC/B,IAAA,IAAI,CAAC,eAAA,CAAgB,IAAA,CAAK,GAAG,CAAA,EAAG;AAC9B,MAAA,QAAA,CAAS,IAAA,CAAK;AAAA,QACZ,MAAM,0BAAA,CAA2B,aAAA;AAAA,QACjC,OAAA,EAAS,CAAA,iBAAA,EAAoB,GAAG,CAAA,aAAA,EAAgB,eAAe,CAAA;AAAA,OAChE,CAAA;AAAA,IACH,CAAA,MAAA,IAAW,SAAA,CAAU,GAAG,CAAA,GAAI,iBAAA,EAAmB;AAC7C,MAAA,QAAA,CAAS,IAAA,CAAK;AAAA,QACZ,MAAM,0BAAA,CAA2B,aAAA;AAAA,QACjC,OAAA,EAAS,CAAA,iBAAA,EAAoB,GAAG,CAAA,UAAA,EAAa,iBAAiB,CAAA,YAAA;AAAA,OAC/D,CAAA;AAAA,IACH;AAAA,EACF;AAGA,EAAA,IAAI,IAAA,CAAK,iBAAiB,MAAA,IAAa,CAAC,cAAc,IAAA,CAAK,IAAA,CAAK,YAAY,CAAA,EAAG;AAC7E,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,mBAAA;AAAA,MACjC,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH;AACA,EAAA,IAAI,IAAA,CAAK,iBAAiB,MAAA,IAAa,CAAC,cAAc,IAAA,CAAK,IAAA,CAAK,YAAY,CAAA,EAAG;AAC7E,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,mBAAA;AAAA,MACjC,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH;AACA,EAAA,IAAI,IAAA,CAAK,gBAAgB,MAAA,EAAW;AAClC,IAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,SAAA,CAAU,IAAA,CAAK,WAAW,CAAA;AACtD,IAAA,IAAI,CAAC,IAAI,OAAA,EAAS;AAChB,MAAA,QAAA,CAAS,IAAA,CAAK;AAAA,QACZ,MAAM,0BAAA,CAA2B,kBAAA;AAAA,QACjC,OAAA,EAAS,CAAA,0DAAA,EAA6D,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,OACxH,CAAA;AAAA,IACH;AAAA,EACF;AAGA,EAAA,IAAI,IAAA,CAAK,WAAA,KAAgB,KAAA,IAAS,CAAC,KAAK,qBAAA,EAAuB;AAC7D,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,kBAAA;AAAA,MACjC,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH;AACA,EAAA,IAAI,IAAA,CAAK,OAAA,KAAY,KAAA,IAAS,CAAC,KAAK,iBAAA,EAAmB;AACrD,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,kBAAA;AAAA,MACjC,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH;AACA,EAAA,IAAI,KAAK,qBAAA,IAAyB,CAAC,KAAK,UAAA,IAAc,CAAC,KAAK,uBAAA,EAAyB;AACnF,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,mCAAA;AAAA,MACjC,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH;AAIA,EAAA,IAAI,IAAA,CAAK,WAAA,KAAgB,KAAA,IAAS,IAAA,CAAK,qBAAA,EAAuB;AAC5D,IAAA,MAAM,MAAA,GAAS,SAAA,CAAU,KAAA,CAAM,CAAC,CAAA;AAChC,IAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AACxB,MAAA,IAAI,SAAA,CAAU,GAAG,CAAA,GAAI,IAAA,CAAK,gBAAA,EAAkB;AAC1C,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,UACZ,MAAM,0BAAA,CAA2B,gBAAA;AAAA,UACjC,SAAS,CAAA,gBAAA,EAAmB,SAAA,CAAU,GAAG,CAAC,CAAA,sCAAA,EAAyC,KAAK,gBAAgB,CAAA,CAAA;AAAA,SACzG,CAAA;AACD,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAIA,EAAA,MAAM,YAAA,GAAe,UAAU,CAAC,CAAA;AAChC,EAAA,MAAM,eAAA,GAAkBA,aAAY,YAAY,CAAA;AAChD,EAAA,IAAI,aAAA,CAAc,eAAe,CAAA,IAAK,CAAC,KAAK,SAAA,EAAW;AACrD,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,iBAAA;AAAA,MACjC,OAAA,EAAS,YAAY,eAAe,CAAA,wGAAA;AAAA,KACrC,CAAA;AAAA,EACH;AACA,EAAA,IAAI,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,iBAAA,KAAsB,MAAA,EAAQ;AACvD,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,iBAAA;AAAA,MACjC,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,QAAA;AACT;AAQO,SAAS,uBAAuB,IAAA,EAA2C;AAChF,EAAA,MAAM,WAAgC,EAAC;AACvC,EAAA,MAAM,eAAe,OAAO,IAAA,CAAK,cAAc,QAAA,IAAY,IAAA,CAAK,UAAU,MAAA,GAAS,CAAA;AACnF,EAAA,MAAM,YAAA,GAAe,KAAK,kBAAA,KAAuB,IAAA;AACjD,EAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,YAAA,EAAc;AAClC,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,oBAAA;AAAA,MACjC,OAAA,EACE;AAAA,KACH,CAAA;AAAA,EACH;AACA,EAAA,IAAI,gBAAgB,YAAA,EAAc;AAChC,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,oBAAA;AAAA,MACjC,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH;AACA,EAAA,IAAI,OAAO,IAAA,CAAK,QAAA,KAAa,YAAY,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AACnE,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,gBAAA;AAAA,MACjC,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH,CAAA,MAAA,IAAW,CAAC,cAAA,CAAe,IAAA,CAAK,QAAQ,CAAA,EAAG;AACzC,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,eAAA;AAAA,MACjC,OAAA,EAAS,CAAA,aAAA,EAAgB,IAAA,CAAK,QAAQ,CAAA,sEAAA;AAAA,KACvC,CAAA;AAAA,EACH;AACA,EAAA,OAAO,QAAA;AACT;;;ACtPA,IAAM,UAAA,GAAa,CAAC,QAAA,EAAU,UAAA,EAAY,KAAK,CAAA;AAC/C,IAAM,SAAA,GAAY,CAAC,MAAA,EAAQ,QAAA,EAAU,YAAY,UAAU,CAAA;AAC3D,IAAM,iBAAA,GAAoB,CAAC,MAAA,EAAQ,QAAA,EAAU,UAAU,CAAA;AACvD,IAAM,WAAA,GAAc,CAAC,MAAA,EAAQ,aAAA,EAAe,QAAQ,CAAA;AACpD,IAAM,SAAA,GAAY,CAAC,QAAA,EAAU,KAAK,CAAA;AAClC,IAAM,eAAA,GAAkB,CAAC,OAAA,EAAS,QAAQ,CAAA;AAC1C,IAAM,eAAA,GAAkB;AAAA,EACtB,sBAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA;AASO,IAAM,2BAAA,GAA8B;AAAA,EAMzC,iBAAA,EAAmB;AACrB,CAAA;AAsDA,IAAM,eAAA,GAAyC;AAAA,EAC7C,WAAA,EAAa,QAAA;AAAA,EACb,qBAAA,EAAuB,KAAA;AAAA,EACvB,gBAAA,EAAkB,MAAA;AAAA,EAClB,oBAAoB,UAAA,CAAW,wBAAA;AAAA,EAC/B,oBAAoB,UAAA,CAAW,wBAAA;AAAA,EAC/B,kBAAkB,UAAA,CAAW,uBAAA;AAAA,EAC7B,UAAU,EAAC;AAAA,EACX,OAAA,EAAS,QAAA;AAAA,EACT,iBAAA,EAAmB,KAAA;AAAA,EACnB,cAAA,EAAgB,QAAA;AAAA,EAChB,iBAAA,EAAmB,QAAA;AAAA,EACnB,UAAA,EAAY,IAAA;AAAA,EACZ,uBAAA,EAAyB,KAAA;AAAA,EACzB,aAAA,EAAe,sBAAA;AAAA,EACf,SAAA,EAAW,KAAA;AAAA,EACX,MAAA,EAAQ,GAAA;AAAA,EACR,WAAW,UAAA,CAAW,gBAAA;AAAA,EACtB,aAAa,UAAA,CAAW,kBAAA;AAAA,EACxB,YAAA,EAAc;AAChB,CAAA;AAQO,SAAS,iBAAiB,GAAA,EAAqB;AAEpD,EAAA,IAAI,GAAA,CAAI,IAAA,EAAK,KAAM,EAAA,SAAW,MAAA,CAAO,GAAA;AACrC,EAAA,MAAM,CAAA,GAAI,OAAO,GAAG,CAAA;AACpB,EAAA,OAAO,MAAA,CAAO,UAAU,CAAC,CAAA,IAAK,OAAO,QAAA,CAAS,CAAC,CAAA,GAAI,CAAA,GAAI,MAAA,CAAO,GAAA;AAChE;AAOO,SAAS,sBAAA,CACd,MACA,SAAA,EACqB;AACrB,EAAA,OAAO,0BAAA,CAA2B,MAAM,SAAS,CAAA;AACnD;AAOA,eAAsB,iBAAA,CACpB,OAAA,EACA,SAAA,EACA,EAAA,GAAgC,EAAC,EACF;AAC/B,EAAA,MAAM,IAAA,GAA8B,EAAE,GAAG,eAAA,EAAiB,GAAG,OAAA,EAAQ;AACrE,EAAA,MAAM,WAAA,GAAc,GAAG,WAAA,KAAgB,CAAC,MAAc,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA;AAC5E,EAAA,MAAM,WAAA,GAAc,GAAG,WAAA,KAAgB,CAAC,MAAc,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA;AAC5E,EAAA,MAAM,QAAA,GAAW,EAAA,CAAG,QAAA,IAAY,OAAA,CAAQ,GAAA;AACxC,EAAA,MAAM,UAAA,GAAa,EAAA,CAAG,UAAA,IAAc,OAAA,CAAQ,GAAA;AAC5C,EAAA,MAAM,GAAA,GAAM,EAAA,CAAG,GAAA,IAAO,OAAA,CAAQ,GAAA,EAAI;AAClC,EAAA,MAAM,cAAA,GAAiB,GAAG,cAAA,IAAkB,QAAA;AAE5C,EAAA,MAAM,QAAA,GAAW,sBAAA,CAAuB,IAAA,EAAM,SAAS,CAAA;AACvD,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,IAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,MAAA,WAAA,CAAY,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,EAAE,OAAO;AAAA,CAAI,CAAA;AAAA,IACzC;AACA,IAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,EACvB;AAEA,EAAA,MAAM,YAAA,GAAe,UAAU,CAAC,CAAA;AAChC,EAAA,MAAM,IAAA,GAAO,SAAA,CAAU,KAAA,CAAM,CAAC,CAAA;AAK9B,EAAA,MAAM,SAAA,GAAYD,wBAAAA,CAAwB,IAAA,CAAK,MAAM,CAAA;AACrD,EAAA,IAAI,cAAc,IAAA,EAAM;AACtB,IAAA,WAAA,CAAY,CAAA,EAAG,2BAAA,CAA4B,iBAAiB,CAAA,EAAA,EAAK,SAAS;AAAA,CAAI,CAAA;AAC9E,IAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,EACvB;AAEA,EAAA,MAAM,IAAA,GAAO,MAAM,kBAAA,CAAmB,IAAA,EAAM,cAAc,IAAA,EAAM;AAAA,IAC9D,QAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,IAAI,CAAC,KAAK,EAAA,EAAI;AACZ,IAAA,WAAA,CAAY,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,KAAK,OAAO;AAAA,CAAI,CAAA;AAC7C,IAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,EACvB;AAEA,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,WAAW,CAAA;AAC5C,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,GAAA,IAAO,IAAA,CAAK,WAAW,EAAA,EAAI;AAC7C,IAAA,WAAA,CAAY,OAAO,IAAI,CAAA;AAAA,EACzB,CAAA,MAAO;AACL,IAAA,IAAI;AACF,MAAAE,aAAAA,CAAc,IAAA,CAAK,MAAA,EAAQ,IAAA,GAAO,IAAI,CAAA;AAAA,IACxC,SAAS,GAAA,EAAK;AACZ,MAAA,WAAA;AAAA,QACE,CAAA,EAAG,2BAAA,CAA4B,iBAAiB,CAAA,mBAAA,EAAsB,IAAA,CAAK,MAAM,CAAA,GAAA,EAAM,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC;AAAA;AAAA,OACzI;AACA,MAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,IACvB;AAAA,EACF;AAGA,EAAA,IAAI,IAAA,CAAK,iBAAiB,QAAA,EAAU;AAClC,IAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,EACvB;AAEA,EAAA,OAAO,EAAE,QAAA,EAAU,IAAA,CAAK,OAAA,CAAQ,QAAA,EAAS;AAC3C;AAOO,SAAS,wBAAA,GAAoC;AAClD,EAAA,MAAM,GAAA,GAAM,IAAIpB,OAAAA,CAAQ,SAAS,CAAA;AACjC,EAAA,GAAA,CACG,WAAA;AAAA,IACC;AAAA,GAIF,CACC,SAAA;AAAA,IACC,IAAI,MAAA,CAAO,uBAAA,EAAyB,mBAAmB,CAAA,CACpD,OAAA,CAAQ,CAAC,GAAG,UAAU,CAAC,CAAA,CACvB,OAAA,CAAQ,QAAQ;AAAA,GACrB,CACC,MAAA;AAAA,IACC,4BAAA;AAAA,IACA,iFAAA;AAAA,IACA;AAAA,GACF,CACC,SAAA;AAAA,IACC,IAAI,MAAA,CAAO,6BAAA,EAA+B,uCAAuC,CAAA,CAC9E,OAAA,CAAQ,CAAC,GAAG,WAAW,CAAC,CAAA,CACxB,OAAA,CAAQ,MAAM;AAAA,GACnB,CACC,MAAA;AAAA,IACC,4BAAA;AAAA,IACA,CAAA,uCAAA,EAA0C,WAAW,oBAAoB,CAAA,CAAA;AAAA,IACzE,gBAAA;AAAA,IACA,UAAA,CAAW;AAAA,GACb,CACC,MAAA;AAAA,IACC,4BAAA;AAAA,IACA,CAAA,uCAAA,EAA0C,WAAW,oBAAoB,CAAA,CAAA;AAAA,IACzE,gBAAA;AAAA,IACA,UAAA,CAAW;AAAA,GACb,CACC,MAAA;AAAA,IACC,0BAAA;AAAA,IACA,CAAA,6CAAA,EAAgD,WAAW,mBAAmB,CAAA,CAAA;AAAA,IAC9E,gBAAA;AAAA,IACA,UAAA,CAAW;AAAA,GACb,CACC,MAAA;AAAA,IACC,oBAAA;AAAA,IACA,mEAAA;AAAA,IACA,CAAC,CAAA,EAAG,IAAA,KACF,IAAA,CAAK,MAAA;AAAA,MACH,CAAA,CACG,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA,CACnB,MAAA,CAAO,OAAO;AAAA,KACnB;AAAA,IACF;AAAC,GACH,CACC,SAAA;AAAA,IACC,IAAI,MAAA,CAAO,mBAAA,EAAqB,wBAAwB,CAAA,CACrD,OAAA,CAAQ,CAAC,GAAG,SAAS,CAAC,CAAA,CACtB,OAAA,CAAQ,QAAQ;AAAA,GACrB,CACC,MAAA;AAAA,IACC,wBAAA;AAAA,IACA,wEAAA;AAAA,IACA;AAAA,GACF,CACC,SAAA;AAAA,IACC,IAAI,MAAA,CAAO,2BAAA,EAA6B,kBAAkB,CAAA,CACvD,OAAA,CAAQ,CAAC,GAAG,SAAS,CAAC,CAAA,CACtB,OAAA,CAAQ,QAAQ;AAAA,GACrB,CACC,SAAA;AAAA,IACC,IAAI,MAAA,CAAO,8BAAA,EAAgC,0BAA0B,CAAA,CAClE,OAAA,CAAQ,CAAC,GAAG,iBAAiB,CAAC,CAAA,CAC9B,OAAA,CAAQ,QAAQ;AAAA,GACrB,CACC,SAAA;AAAA,IACC,IAAI,MAAA,CAAO,uBAAA,EAAyB,8BAA8B,CAAA,CAC/D,OAAA,CAAQ,CAAC,IAAA,EAAM,KAAK,CAAC,CAAA,CACrB,OAAA,CAAQ,IAAI;AAAA,GACjB,CACC,MAAA;AAAA,IACC,8BAAA;AAAA,IACA,6DAAA;AAAA,IACA;AAAA,GACF,CACC,MAAA,CAAO,0BAAA,EAA4B,uCAAuC,CAAA,CAC1E,MAAA,CAAO,0BAAA,EAA4B,uCAAuC,CAAA,CAC1E,MAAA,CAAO,yBAAA,EAA2B,oCAAoC,CAAA,CACtE,SAAA;AAAA,IACC,IAAI,MAAA,CAAO,yBAAA,EAA2B,oCAAoC,CAAA,CACvE,OAAA,CAAQ,CAAC,GAAG,eAAe,CAAC,CAAA,CAC5B,OAAA,CAAQ,sBAAsB;AAAA,GACnC,CACC,MAAA;AAAA,IACC,cAAA;AAAA,IACA,mFAAA;AAAA,IACA;AAAA,GACF,CACC,MAAA,CAAO,iBAAA,EAAmB,mDAAA,EAAqD,GAAG,CAAA,CAClF,MAAA;AAAA,IACC,kBAAA;AAAA,IACA,CAAA,2BAAA,EAA8B,WAAW,YAAY,CAAA,MAAA,CAAA;AAAA,IACrD,gBAAA;AAAA,IACA,UAAA,CAAW;AAAA,GACb,CACC,MAAA;AAAA,IACC,qBAAA;AAAA,IACA,CAAA,oCAAA,EAAuC,WAAW,cAAc,CAAA,CAAA;AAAA,IAChE,gBAAA;AAAA,IACA,UAAA,CAAW;AAAA,GACb,CACC,SAAA;AAAA,IACC,IAAI,MAAA,CAAO,yBAAA,EAA2B,0BAA0B,CAAA,CAC7D,OAAA,CAAQ,CAAC,GAAG,eAAe,CAAC,CAAA,CAC5B,OAAA,CAAQ,OAAO;AAAA,GACpB,CACC,kBAAA,CAAmB,KAAK,CAAA,CACxB,qBAAqB,IAAI,CAAA;AAE5B,EAAA,GAAA,CAAI,MAAA,CAAO,OAAO,OAAA,EAAkC,WAAA,KAAyB;AAI3E,IAAA,MAAM,YAAY,WAAA,CAAY,IAAA;AAE9B,IAAA,MAAM,OAAA,GAA0C;AAAA,MAC9C,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,qBAAA,EAAuB,OAAA,CAAQ,OAAA,CAAQ,qBAAqB,CAAA;AAAA,MAC5D,kBAAkB,OAAA,CAAQ,gBAAA;AAAA,MAC1B,oBAAoB,OAAA,CAAQ,kBAAA;AAAA,MAC5B,oBAAoB,OAAA,CAAQ,kBAAA;AAAA,MAC5B,kBAAkB,OAAA,CAAQ,gBAAA;AAAA,MAC1B,QAAA,EAAW,OAAA,CAAQ,QAAA,IAAyB,EAAC;AAAA,MAC7C,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,iBAAA,EAAmB,OAAA,CAAQ,OAAA,CAAQ,iBAAiB,CAAA;AAAA,MACpD,gBAAgB,OAAA,CAAQ,cAAA;AAAA,MACxB,mBAAmB,OAAA,CAAQ,iBAAA;AAAA,MAC3B,UAAA,EAAY,QAAQ,UAAA,KAAe,IAAA;AAAA,MACnC,uBAAA,EAAyB,OAAA,CAAQ,OAAA,CAAQ,uBAAuB,CAAA;AAAA,MAChE,cAAc,OAAA,CAAQ,YAAA;AAAA,MACtB,cAAc,OAAA,CAAQ,YAAA;AAAA,MACtB,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,eAAe,OAAA,CAAQ,aAAA;AAAA,MACvB,SAAA,EAAW,OAAA,CAAQ,OAAA,CAAQ,SAAS,CAAA;AAAA,MACpC,MAAA,EAAS,QAAQ,MAAA,IAAqB,GAAA;AAAA,MACtC,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,cAAc,OAAA,CAAQ;AAAA,KACxB;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,CAAkB,OAAA,EAAS,SAAS,CAAA;AAGzD,IAAA,OAAA,CAAQ,WAAW,MAAA,CAAO,QAAA;AAAA,EAC5B,CAAC,CAAA;AAED,EAAA,OAAO,GAAA;AACT;AAQO,SAAS,cAAA,GAA0B;AACxC,EAAA,MAAM,OAAA,GAAU,IAAIA,OAAAA,CAAQ,SAAS,CAAA,CAAE,WAAA;AAAA,IACrC;AAAA,GACF;AACA,EAAA,OAAA,CAAQ,UAAA,CAAW,0BAA0B,CAAA;AAC7C,EAAA,OAAO,OAAA;AACT;ACpYO,IAAM,kBAAA,GAAN,cAAiC,KAAA,CAAM;AAAA,EAE5C,WAAA,CACE,SACS,KAAA,EACT;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAFJ,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAGT,IAAA,IAAA,CAAK,IAAA,GAAO,oBAAA;AAAA,EACd;AAAA,EAPS,IAAA,GAAO,4BAAA;AAQlB,CAAA;AAEO,IAAM,qBAAA,GAAN,cAAoC,KAAA,CAAM;AAAA,EAE/C,WAAA,CACE,SACS,KAAA,EACT;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAFJ,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAGT,IAAA,IAAA,CAAK,IAAA,GAAO,uBAAA;AAAA,EACd;AAAA,EAPS,IAAA,GAAO,wBAAA;AAQlB,CAAA;AAeA,eAAsB,aAAA,CACpB,SAAA,EACA,GAAA,GAAyB,OAAA,CAAQ,GAAA,EACP;AAC1B,EAAA,IAAI,GAAA;AAEJ,EAAA,IAAI,SAAA,CAAU,UAAA,CAAW,MAAM,CAAA,EAAG;AAChC,IAAA,MAAM,OAAA,GAAU,SAAA,CAAU,KAAA,CAAM,CAAC,CAAA;AACjC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,MAAM,QAAA,GAAW,IAAI,OAAO,CAAA;AAC5B,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,qBAAA,EAAwB,OAAO,CAAA,oBAAA,CAAsB,CAAA;AAAA,IACpF;AACA,IAAA,GAAA,GAAM,QAAA;AAAA,EACR,CAAA,MAAA,IAAW,SAAA,CAAU,UAAA,CAAW,OAAO,CAAA,EAAG;AACxC,IAAA,MAAM,QAAA,GAAW,SAAA,CAAU,KAAA,CAAM,CAAC,CAAA;AAClC,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,mBAAmB,6DAA6D,CAAA;AAAA,IAC5F;AACA,IAAA,IAAI;AACF,MAAA,GAAA,GAAM,MAAM,QAAA,CAAS,QAAA,EAAU,OAAO,CAAA;AAAA,IACxC,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,CAAA,yBAAA,EAA4B,QAAQ,CAAA,EAAA,EAAM,GAAA,EAA+B,IAAA,KAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAA,CAAE,CAAA,CAAA,CAAA;AAAA,QACnI;AAAA,OACF;AAAA,IACF;AAAA,EACF,CAAA,MAAO;AACL,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,oCAAoC,SAAS,CAAA,sCAAA;AAAA,KAC/C;AAAA,EACF;AAEA,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AACF,IAAA,GAAA,GAAM,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACtB,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,IAAI,qBAAA,CAAsB,8BAAA,EAAgC,GAAG,CAAA;AAAA,EACrE;AAEA,EAAA,IACE,OAAO,GAAA,KAAQ,QAAA,IACf,GAAA,KAAQ,IAAA,IACR,EAAE,KAAA,IAAS,GAAA,CAAA,IACX,EAAE,KAAA,IAAS,GAAA,CAAA,IACX,EAAE,OAAO,GAAA,CAAA,EACT;AACA,IAAA,MAAM,IAAI,sBAAsB,yCAAyC,CAAA;AAAA,EAC3E;AACA,EAAA,MAAM,CAAA,GAAI,GAAA;AACV,EAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,KAAA,IAAS,CAAA,CAAE,QAAQ,SAAA,EAAW;AAC1C,IAAA,MAAM,IAAI,qBAAA;AAAA,MACR,CAAA,sDAAA,EAAyD,OAAO,CAAA,CAAE,GAAG,CAAC,CAAA,KAAA,EAAQ,MAAA,CAAO,CAAA,CAAE,GAAG,CAAC,CAAA;AAAA,KAC7F;AAAA,EACF;AACA,EAAA,IAAI,OAAO,CAAA,CAAE,CAAA,KAAM,YAAY,OAAO,CAAA,CAAE,MAAM,QAAA,EAAU;AACtD,IAAA,MAAM,IAAI,sBAAsB,8CAA8C,CAAA;AAAA,EAChF;AAEA,EAAA,MAAM,UAAA,GAAgC;AAAA,IACpC,GAAA,EAAK,KAAA;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,GAAG,CAAA,CAAE,CAAA;AAAA,IACL,GAAG,CAAA,CAAE;AAAA,GACP;AAEA,EAAA,MAAM,KAAA,GAAQ,MAAM,eAAA,CAAgB,UAAU,CAAA;AAC9C,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,sBAAsB,uDAAuD,CAAA;AAAA,EACzF;AAEA,EAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,UAAA,CAAW,CAAC,CAAA;AAC/C,EAAA,MAAM,SAAA,GAAY,MAAM,eAAA,CAAgB,UAAU,CAAA;AAElD,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI,OAAO,CAAA,CAAE,GAAA,KAAQ,YAAY,CAAA,CAAE,GAAA,CAAI,SAAS,CAAA,EAAG;AACjD,IAAA,GAAA,GAAM,CAAA,CAAE,GAAA;AAAA,EACV,CAAA,MAAO;AACL,IAAA,MAAM,MAAA,GAASqB,gBAAgB,SAAS,CAAA;AACxC,IAAA,MAAM,IAAA,GAAO,MAAMC,WAAAA,CAAU,MAAM,CAAA;AACnC,IAAA,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,EACxB;AAEA,EAAA,OAAO,EAAE,UAAA,EAAY,SAAA,EAAW,GAAA,EAAI;AACtC;AAOA,eAAsB,uBAAuB,SAAA,EAAwC;AACnF,EAAA,MAAM,MAAA,GAASD,gBAAgB,SAAS,CAAA;AACxC,EAAA,MAAM,IAAA,GAAO,MAAMC,WAAAA,CAAU,MAAM,CAAA;AACnC,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACzB;;;ACpHA,IAAMC,WAAAA,GAAa,CAAC,QAAA,EAAU,UAAA,EAAY,KAAK,CAAA;AAC/C,IAAMC,UAAAA,GAAY,CAAC,MAAA,EAAQ,QAAA,EAAU,YAAY,UAAU,CAAA;AAC3D,IAAMC,kBAAAA,GAAoB,CAAC,MAAA,EAAQ,QAAA,EAAU,UAAU,CAAA;AACvD,IAAMC,YAAAA,GAAc,CAAC,MAAA,EAAQ,aAAA,EAAe,QAAQ,CAAA;AACpD,IAAMC,UAAAA,GAAY,CAAC,QAAA,EAAU,KAAK,CAAA;AAClC,IAAMC,gBAAAA,GAAkB,CAAC,OAAA,EAAS,QAAQ,CAAA;AAC1C,IAAMC,gBAAAA,GAAkB;AAAA,EACtB,sBAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA;AAOO,IAAM,0BAAA,GAA6B;AAAA,EAExC,iBAAA,EAAmB,yBAAA;AAAA;AAAA,EAEnB,mBAAA,EAAqB,4BAAA;AAAA,EAErB,aAAA,EAAe;AACjB,CAAA;AA4BA,IAAMC,gBAAAA,GAAwC;AAAA,EAC5C,WAAA,EAAa,QAAA;AAAA,EACb,qBAAA,EAAuB,KAAA;AAAA,EACvB,gBAAA,EAAkB,MAAA;AAAA,EAClB,oBAAoB,UAAA,CAAW,wBAAA;AAAA,EAC/B,oBAAoB,UAAA,CAAW,wBAAA;AAAA,EAC/B,kBAAkB,UAAA,CAAW,uBAAA;AAAA,EAC7B,UAAU,EAAC;AAAA,EACX,OAAA,EAAS,QAAA;AAAA,EACT,iBAAA,EAAmB,KAAA;AAAA,EACnB,cAAA,EAAgB,QAAA;AAAA,EAChB,iBAAA,EAAmB,QAAA;AAAA,EACnB,UAAA,EAAY,IAAA;AAAA,EACZ,uBAAA,EAAyB,KAAA;AAAA,EACzB,aAAA,EAAe,sBAAA;AAAA,EACf,SAAA,EAAW,KAAA;AAAA,EACX,MAAA,EAAQ,GAAA;AAAA,EACR,WAAW,UAAA,CAAW,gBAAA;AAAA,EACtB,aAAa,UAAA,CAAW,kBAAA;AAAA,EACxB,YAAA,EAAc,OAAA;AAAA,EACd,kBAAA,EAAoB;AACtB,CAAA;AASO,SAAS,qBAAA,CACd,MACA,SAAA,EACqB;AACrB,EAAA,MAAM,IAAA,GAAO,0BAAA,CAA2B,IAAA,EAAM,SAAS,CAAA;AAIvD,EAAA,MAAM,eAAA,GAAkB,KAAK,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,2BAA2B,eAAe,CAAA;AAC9F,EAAA,IAAI,iBAAiB,OAAO,IAAA;AAC5B,EAAA,OAAO,CAAC,GAAG,IAAA,EAAM,GAAG,sBAAA,CAAuB,IAAI,CAAC,CAAA;AAClD;AAOA,eAAe,gBAAA,CACb,MACA,YAAA,EAGA;AACA,EAAA,IAAI,KAAK,kBAAA,EAAoB;AAC3B,IAAA,MAAM,EAAE,UAAA,EAAY,SAAA,EAAU,GAAI,MAAMC,eAAAA,EAAgB;AACxD,IAAA,MAAM,GAAA,GAAM,MAAM,sBAAA,CAAuB,SAAS,CAAA;AAClD,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,UAAA,EAAY,GAAA,EAAI;AAAA,EACrC;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAM,aAAA,CAAc,IAAA,CAAK,WAAY,YAAY,CAAA;AAChE,IAAA,OAAO,EAAE,IAAI,IAAA,EAAM,UAAA,EAAY,OAAO,UAAA,EAAY,GAAA,EAAK,OAAO,GAAA,EAAI;AAAA,EACpE,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,eAAe,qBAAA,EAAuB;AACxC,MAAA,OAAO,EAAE,IAAI,KAAA,EAAO,IAAA,EAAM,IAAI,IAAA,EAAM,OAAA,EAAS,IAAI,OAAA,EAAQ;AAAA,IAC3D;AACA,IAAA,IAAI,eAAe,kBAAA,EAAoB;AACrC,MAAA,OAAO,EAAE,IAAI,KAAA,EAAO,IAAA,EAAM,IAAI,IAAA,EAAM,OAAA,EAAS,IAAI,OAAA,EAAQ;AAAA,IAC3D;AACA,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,MAAM,0BAAA,CAA2B,mBAAA;AAAA,MACjC,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG;AAAA,KAC1D;AAAA,EACF;AACF;AAMA,eAAsB,gBAAA,CACpB,OAAA,EACA,SAAA,EACA,EAAA,GAA+B,EAAC,EACF;AAC9B,EAAA,MAAM,IAAA,GAA6B,EAAE,GAAGD,gBAAAA,EAAiB,GAAG,OAAA,EAAQ;AACpE,EAAA,MAAM,WAAA,GAAc,GAAG,WAAA,KAAgB,CAAC,MAAc,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA;AAC5E,EAAA,MAAM,WAAA,GAAc,GAAG,WAAA,KAAgB,CAAC,MAAc,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA;AAC5E,EAAA,MAAM,QAAA,GAAW,EAAA,CAAG,QAAA,IAAY,OAAA,CAAQ,GAAA;AACxC,EAAA,MAAM,UAAA,GAAa,EAAA,CAAG,UAAA,IAAc,OAAA,CAAQ,GAAA;AAC5C,EAAA,MAAM,YAAA,GAAe,EAAA,CAAG,YAAA,IAAgB,OAAA,CAAQ,GAAA;AAChD,EAAA,MAAM,GAAA,GAAM,EAAA,CAAG,GAAA,IAAO,OAAA,CAAQ,GAAA,EAAI;AAClC,EAAA,MAAM,cAAA,GAAiB,GAAG,cAAA,IAAkB,QAAA;AAE5C,EAAA,MAAM,QAAA,GAAW,qBAAA,CAAsB,IAAA,EAAM,SAAS,CAAA;AACtD,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,IAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,MAAA,WAAA,CAAY,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,EAAE,OAAO;AAAA,CAAI,CAAA;AAAA,IACzC;AACA,IAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,EACvB;AAEA,EAAA,MAAM,YAAA,GAAe,UAAU,CAAC,CAAA;AAChC,EAAA,MAAM,IAAA,GAAO,SAAA,CAAU,KAAA,CAAM,CAAC,CAAA;AAG9B,EAAA,MAAM,SAAA,GAAYZ,wBAAAA,CAAwB,IAAA,CAAK,MAAM,CAAA;AACrD,EAAA,IAAI,cAAc,IAAA,EAAM;AACtB,IAAA,WAAA,CAAY,CAAA,EAAG,0BAAA,CAA2B,iBAAiB,CAAA,EAAA,EAAK,SAAS;AAAA,CAAI,CAAA;AAC7E,IAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,EACvB;AAKA,EAAA,MAAM,SAAA,GAAY,MAAM,gBAAA,CAAiB,IAAA,EAAM,YAAY,CAAA;AAC3D,EAAA,IAAI,CAAC,UAAU,EAAA,EAAI;AACjB,IAAA,WAAA,CAAY,CAAA,EAAG,SAAA,CAAU,IAAI,CAAA,EAAA,EAAK,UAAU,OAAO;AAAA,CAAI,CAAA;AACvD,IAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,EACvB;AAEA,EAAA,MAAM,IAAA,GAAO,MAAM,kBAAA,CAAmB,IAAA,EAAM,cAAc,IAAA,EAAM;AAAA,IAC9D,QAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,IAAI,CAAC,KAAK,EAAA,EAAI;AACZ,IAAA,WAAA,CAAY,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,KAAK,OAAO;AAAA,CAAI,CAAA;AAC7C,IAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,EACvB;AAMA,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM;AAAA,MACzB,KAAK,IAAA,CAAK,QAAA;AAAA,MACV,IAAA,EAAM,UAAA;AAAA,MACN,IAAA,EAAMc,0BAAAA;AAAA,MACN,YAAY,SAAA,CAAU,UAAA;AAAA,MACtB,KAAK,SAAA,CAAU,GAAA;AAAA,MACf,UAAA,EAAY;AAAA,QACV,CAAC,2BAA2B,GAAG,IAAA,CAAK;AAAA;AACtC,KACD,CAAA;AACD,IAAA,GAAA,GAAM,MAAA,CAAO,GAAA;AAAA,EACf,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,OAAA,GACJ,GAAA,YAAe,UAAA,GAAa,GAAA,CAAI,OAAA,GAAU,eAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAA;AAC3F,IAAA,WAAA,CAAY,CAAA,EAAG,0BAAA,CAA2B,aAAa,CAAA,EAAA,EAAK,OAAO;AAAA,CAAI,CAAA;AACvE,IAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,EACvB;AAEA,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,GAAA,IAAO,IAAA,CAAK,WAAW,EAAA,EAAI;AAC7C,IAAA,WAAA,CAAY,MAAM,IAAI,CAAA;AAAA,EACxB,CAAA,MAAO;AACL,IAAA,IAAI;AACF,MAAAZ,aAAAA,CAAc,IAAA,CAAK,MAAA,EAAQ,GAAA,GAAM,IAAI,CAAA;AAAA,IACvC,SAAS,GAAA,EAAK;AACZ,MAAA,WAAA;AAAA,QACE,CAAA,EAAG,0BAAA,CAA2B,iBAAiB,CAAA,mBAAA,EAAsB,IAAA,CAAK,MAAM,CAAA,GAAA,EAAM,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC;AAAA;AAAA,OACxI;AACA,MAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,IACvB;AAAA,EACF;AAEA,EAAA,IAAI,IAAA,CAAK,iBAAiB,QAAA,EAAU;AAClC,IAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,EACvB;AACA,EAAA,OAAO,EAAE,QAAA,EAAU,IAAA,CAAK,OAAA,CAAQ,QAAA,EAAS;AAC3C;AAOO,SAAS,uBAAA,GAAmC;AACjD,EAAA,MAAM,GAAA,GAAM,IAAIpB,OAAAA,CAAQ,SAAS,CAAA;AACjC,EAAA,GAAA,CACG,WAAA;AAAA,IACC;AAAA,GAMF,CACC,SAAA;AAAA,IACC,IAAIiC,MAAAA,CAAO,uBAAA,EAAyB,mBAAmB,CAAA,CACpD,OAAA,CAAQ,CAAC,GAAGV,WAAU,CAAC,CAAA,CACvB,OAAA,CAAQ,QAAQ;AAAA,GACrB,CACC,MAAA,CAAO,4BAAA,EAA8B,uCAAA,EAAyC,KAAK,CAAA,CACnF,SAAA;AAAA,IACC,IAAIU,MAAAA,CAAO,6BAAA,EAA+B,uCAAuC,CAAA,CAC9E,OAAA,CAAQ,CAAC,GAAGP,YAAW,CAAC,CAAA,CACxB,OAAA,CAAQ,MAAM;AAAA,GACnB,CACC,MAAA;AAAA,IACC,4BAAA;AAAA,IACA,CAAA,uCAAA,EAA0C,WAAW,oBAAoB,CAAA,CAAA;AAAA,IACzE,gBAAA;AAAA,IACA,UAAA,CAAW;AAAA,GACb,CACC,MAAA;AAAA,IACC,4BAAA;AAAA,IACA,CAAA,uCAAA,EAA0C,WAAW,oBAAoB,CAAA,CAAA;AAAA,IACzE,gBAAA;AAAA,IACA,UAAA,CAAW;AAAA,GACb,CACC,MAAA;AAAA,IACC,0BAAA;AAAA,IACA,CAAA,6CAAA,EAAgD,WAAW,mBAAmB,CAAA,CAAA;AAAA,IAC9E,gBAAA;AAAA,IACA,UAAA,CAAW;AAAA,GACb,CACC,MAAA;AAAA,IACC,oBAAA;AAAA,IACA,mEAAA;AAAA,IACA,CAAC,CAAA,EAAG,IAAA,KACF,IAAA,CAAK,MAAA;AAAA,MACH,CAAA,CACG,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA,CACnB,MAAA,CAAO,OAAO;AAAA,KACnB;AAAA,IACF;AAAC,GACH,CACC,SAAA;AAAA,IACC,IAAIO,MAAAA,CAAO,mBAAA,EAAqB,wBAAwB,CAAA,CACrD,OAAA,CAAQ,CAAC,GAAGN,UAAS,CAAC,CAAA,CACtB,OAAA,CAAQ,QAAQ;AAAA,GACrB,CACC,MAAA,CAAO,wBAAA,EAA0B,mCAAA,EAAqC,KAAK,CAAA,CAC3E,SAAA;AAAA,IACC,IAAIM,MAAAA,CAAO,2BAAA,EAA6B,kBAAkB,CAAA,CACvD,OAAA,CAAQ,CAAC,GAAGT,UAAS,CAAC,CAAA,CACtB,OAAA,CAAQ,QAAQ;AAAA,GACrB,CACC,SAAA;AAAA,IACC,IAAIS,MAAAA,CAAO,8BAAA,EAAgC,0BAA0B,CAAA,CAClE,OAAA,CAAQ,CAAC,GAAGR,kBAAiB,CAAC,CAAA,CAC9B,OAAA,CAAQ,QAAQ;AAAA,GACrB,CACC,SAAA;AAAA,IACC,IAAIQ,MAAAA,CAAO,uBAAA,EAAyB,8BAA8B,CAAA,CAC/D,OAAA,CAAQ,CAAC,IAAA,EAAM,KAAK,CAAC,CAAA,CACrB,OAAA,CAAQ,IAAI;AAAA,GACjB,CACC,MAAA;AAAA,IACC,8BAAA;AAAA,IACA,6DAAA;AAAA,IACA;AAAA,GACF,CACC,MAAA,CAAO,0BAAA,EAA4B,uCAAuC,CAAA,CAC1E,MAAA,CAAO,0BAAA,EAA4B,uCAAuC,CAAA,CAC1E,MAAA,CAAO,yBAAA,EAA2B,oCAAoC,CAAA,CACtE,SAAA;AAAA,IACC,IAAIA,MAAAA,CAAO,yBAAA,EAA2B,oCAAoC,CAAA,CACvE,OAAA,CAAQ,CAAC,GAAGJ,gBAAe,CAAC,CAAA,CAC5B,OAAA,CAAQ,sBAAsB;AAAA,GACnC,CACC,MAAA;AAAA,IACC,cAAA;AAAA,IACA,mFAAA;AAAA,IACA;AAAA,GACF,CACC,MAAA,CAAO,iBAAA,EAAmB,2CAAA,EAA6C,GAAG,CAAA,CAC1E,MAAA;AAAA,IACC,kBAAA;AAAA,IACA,CAAA,2BAAA,EAA8B,WAAW,YAAY,CAAA,MAAA,CAAA;AAAA,IACrD,gBAAA;AAAA,IACA,UAAA,CAAW;AAAA,GACb,CACC,MAAA;AAAA,IACC,qBAAA;AAAA,IACA,CAAA,oCAAA,EAAuC,WAAW,cAAc,CAAA,CAAA;AAAA,IAChE,gBAAA;AAAA,IACA,UAAA,CAAW;AAAA,GACb,CACC,SAAA;AAAA,IACC,IAAII,MAAAA,CAAO,yBAAA,EAA2B,0BAA0B,CAAA,CAC7D,OAAA,CAAQ,CAAC,GAAGL,gBAAe,CAAC,CAAA,CAC5B,OAAA,CAAQ,OAAO;AAAA,GACpB,CAEC,OAAO,oBAAA,EAAsB,8DAA8D,EAC3F,MAAA,CAAO,mBAAA,EAAqB,wCAAwC,CAAA,CACpE,MAAA;AAAA,IACC,wBAAA;AAAA,IACA,0JAAA;AAAA,IACA;AAAA,GACF,CACC,kBAAA,CAAmB,KAAK,CAAA,CACxB,qBAAqB,IAAI,CAAA;AAE5B,EAAA,GAAA,CAAI,MAAA,CAAO,OAAO,OAAA,EAAkC,WAAA,KAAyB;AAC3E,IAAA,MAAM,YAAY,WAAA,CAAY,IAAA;AAE9B,IAAA,MAAM,OAAA,GAAyC;AAAA,MAC7C,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,qBAAA,EAAuB,OAAA,CAAQ,OAAA,CAAQ,qBAAqB,CAAA;AAAA,MAC5D,kBAAkB,OAAA,CAAQ,gBAAA;AAAA,MAC1B,oBAAoB,OAAA,CAAQ,kBAAA;AAAA,MAC5B,oBAAoB,OAAA,CAAQ,kBAAA;AAAA,MAC5B,kBAAkB,OAAA,CAAQ,gBAAA;AAAA,MAC1B,QAAA,EAAW,OAAA,CAAQ,QAAA,IAAyB,EAAC;AAAA,MAC7C,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,iBAAA,EAAmB,OAAA,CAAQ,OAAA,CAAQ,iBAAiB,CAAA;AAAA,MACpD,gBAAgB,OAAA,CAAQ,cAAA;AAAA,MACxB,mBAAmB,OAAA,CAAQ,iBAAA;AAAA,MAC3B,UAAA,EAAY,QAAQ,UAAA,KAAe,IAAA;AAAA,MACnC,uBAAA,EAAyB,OAAA,CAAQ,OAAA,CAAQ,uBAAuB,CAAA;AAAA,MAChE,cAAc,OAAA,CAAQ,YAAA;AAAA,MACtB,cAAc,OAAA,CAAQ,YAAA;AAAA,MACtB,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,eAAe,OAAA,CAAQ,aAAA;AAAA,MACvB,SAAA,EAAW,OAAA,CAAQ,OAAA,CAAQ,SAAS,CAAA;AAAA,MACpC,MAAA,EAAS,QAAQ,MAAA,IAAqB,GAAA;AAAA,MACtC,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,cAAc,OAAA,CAAQ,YAAA;AAAA,MACtB,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,kBAAA,EAAoB,OAAA,CAAQ,OAAA,CAAQ,kBAAkB;AAAA,KACxD;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,gBAAA,CAAiB,OAAA,EAAS,SAAS,CAAA;AACxD,IAAA,OAAA,CAAQ,WAAW,MAAA,CAAO,QAAA;AAAA,EAC5B,CAAC,CAAA;AAED,EAAA,OAAO,GAAA;AACT;AAQO,SAAS,aAAA,GAAyB;AACvC,EAAA,MAAM,MAAA,GAAS,IAAI5B,OAAAA,CAAQ,QAAQ,CAAA,CAAE,WAAA;AAAA,IACnC;AAAA,GACF;AACA,EAAA,MAAA,CAAO,UAAA,CAAW,yBAAyB,CAAA;AAC3C,EAAA,OAAO,MAAA;AACT;AC5YA,IAAM,WAAA,GAA6C;AAAA,EACjD,8BAAA;AAAA,EACA,4BAAA;AAAA,EACA,2BAAA;AAAA,EACA,8BAAA;AAAA,EACA,gCAAA;AAAA,EACA,+BAAA;AAAA,EACA,6BAAA;AAAA,EACA,+BAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,0BAAwE,MAAM;AAClF,EAAA,MAAM,MAAM,EAAC;AACb,EAAA,KAAA,MAAW,KAAK,WAAA,EAAa;AAC3B,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA,iBAAA,EAAoB,CAAC,CAAA,CAAA;AAAA,EAChC;AAEA,EAAA,KAAA,MAAW,OAAO,+BAAA,EAAiC;AACjD,IAAA,MAAM,CAAA,GAAI,GAAA,CAAI,OAAA,CAAQ,sBAAA,EAAwB,EAAE,CAAA;AAChD,IAAA,IAAI,CAAC,WAAA,CAAY,QAAA,CAAS,CAAC,CAAA,EAAG;AAC5B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,GAAG,CAAA,yCAAA,CAA2C,CAAA;AAAA,IAC5F;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT,CAAA,GAAG;AAEH,IAAM,cAAA,GAAiB;AAAA,EACrB,sBAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA;AAGO,IAAM,0BAAA,GAA6B;AAAA,EACxC,oBAAA,EAAsB,kCAAA;AAAA,EACtB,gBAAA,EAAkB,8BAAA;AAAA,EAClB,iBAAA,EAAmB,+BAAA;AAAA,EACnB,mBAAA,EAAqB,iCAAA;AAAA,EACrB,YAAA,EAAc,yBAAA;AAAA,EACd,iBAAA,EAAmB,yBAAA;AAAA,EACnB,gBAAA,EAAkB,wBAAA;AAAA,EAClB,eAAA,EAAiB,uBAAA;AAAA,EACjB,uBAAA,EAAyB,gCAAA;AAAA,EACzB,mBAAA,EAAqB,4BAAA;AAAA,EAErB,aAAA,EAAe,oBAAA;AAAA,EACf,iBAAA,EAAmB;AACrB,CAAA;AAoDA,IAAM,oBAAA,GAAuB,sEAAA;AAOtB,SAAS,6BAA6B,IAAA,EAAiD;AAC5F,EAAA,MAAM,WAAgC,EAAC;AAMvC,EAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,oBAAA;AAAA,MACjC,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH,WAAW,CAAE,WAAA,CAAkC,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA,EAAG;AACvE,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,gBAAA;AAAA,MACjC,OAAA,EAAS,CAAA,6BAAA,EAAgC,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KAChE,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,CAAC,KAAK,UAAA,EAAY;AACpB,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,oBAAA;AAAA,MACjC,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,CAAC,KAAK,UAAA,EAAY;AACpB,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,oBAAA;AAAA,MACjC,OAAA,EACE;AAAA,KACH,CAAA;AAAA,EACH,WAAW,CAAC,oBAAA,CAAqB,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA,EAAG;AACtD,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,iBAAA;AAAA,MACjC,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,KAAK,IAAA,CAAK,SAAA;AAChB,EAAA,IAAI,EAAA,IAAO,WAAA,CAAkC,QAAA,CAAS,EAAE,CAAA,EAAG;AACzD,IAAA,IACE,EAAA,KAAO,8BAAA,IACP,EAAA,KAAO,4BAAA,IACP,OAAO,2BAAA,EACP;AACA,MAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,UACZ,MAAM,0BAAA,CAA2B,oBAAA;AAAA,UACjC,OAAA,EAAS,6CAA6C,EAAE,CAAA;AAAA,SACzD,CAAA;AAAA,MACH;AACA,MAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,UACZ,MAAM,0BAAA,CAA2B,oBAAA;AAAA,UACjC,OAAA,EAAS,6CAA6C,EAAE,CAAA;AAAA,SACzD,CAAA;AAAA,MACH;AAAA,IACF,CAAA,MAAA,IAAW,OAAO,gCAAA,EAAkC;AAClD,MAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,UACZ,MAAM,0BAAA,CAA2B,oBAAA;AAAA,UACjC,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH;AAAA,IACF,CAAA,MAAA,IAAW,OAAO,+BAAA,EAAiC;AACjD,MAAA,IAAI,CAAC,KAAK,aAAA,EAAe;AACvB,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,UACZ,MAAM,0BAAA,CAA2B,oBAAA;AAAA,UACjC,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH;AAAA,IACF,CAAA,MAAA,IAAW,OAAO,6BAAA,EAA+B;AAC/C,MAAA,IAAI,CAAC,KAAK,aAAA,EAAe;AACvB,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,UACZ,MAAM,0BAAA,CAA2B,oBAAA;AAAA,UACjC,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH;AACA,MAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,UACZ,MAAM,0BAAA,CAA2B,oBAAA;AAAA,UACjC,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH;AAAA,IACF,CAAA,MAAA,IAAW,OAAO,+BAAA,EAAiC;AACjD,MAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,UACZ,MAAM,0BAAA,CAA2B,oBAAA;AAAA,UACjC,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH;AACA,MAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACjB,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,UACZ,MAAM,0BAAA,CAA2B,oBAAA;AAAA,UACjC,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH;AAAA,IACF,CAAA,MAAA,IAAW,OAAO,yBAAA,EAA2B;AAC3C,MAAA,IAAI,CAAC,KAAK,YAAA,EAAc;AACtB,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,UACZ,MAAM,0BAAA,CAA2B,oBAAA;AAAA,UACjC,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAKA,EAAA,IAAI,KAAK,YAAA,IAAgB,CAAE,eAAqC,QAAA,CAAS,IAAA,CAAK,YAAY,CAAA,EAAG;AAC3F,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,mBAAA;AAAA,MACjC,OAAA,EAAS,CAAA,gCAAA,EAAmC,cAAA,CAAe,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KACtE,CAAA;AAAA,EACH;AAIA,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK;AAAA,IAC1B,CAAC,cAAA,EAAgB,IAAA,CAAK,SAAS,CAAA;AAAA,IAC/B,CAAC,YAAA,EAAc,IAAA,CAAK,OAAO;AAAA,GAC7B,EAAY;AACV,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,UACZ,MAAM,0BAAA,CAA2B,YAAA;AAAA,UACjC,OAAA,EAAS,GAAG,IAAI,CAAA,kBAAA;AAAA,SACjB,CAAA;AAAA,MACH,CAAA,MAAA,IAAW,SAAA,CAAU,IAAA,CAAK,KAAK,CAAA,EAAG;AAChC,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,UACZ,MAAM,0BAAA,CAA2B,YAAA;AAAA,UACjC,OAAA,EAAS,GAAG,IAAI,CAAA,6CAAA;AAAA,SACjB,CAAA;AAAA,MACH,CAAA,MAAA,IAAW,IAAI,WAAA,EAAY,CAAE,OAAO,KAAK,CAAA,CAAE,aAAa,GAAA,EAAK;AAC3D,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,UACZ,MAAM,0BAAA,CAA2B,YAAA;AAAA,UACjC,OAAA,EAAS,GAAG,IAAI,CAAA,2BAAA;AAAA,SACjB,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAGA,EAAA,MAAM,YAAA,GAAe,CAAC,CAAC,IAAA,CAAK,SAAA;AAC5B,EAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,IAAA,CAAK,kBAAA,EAAoB;AAC7C,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,iBAAA;AAAA,MACjC,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH,CAAA,MAAA,IAAW,YAAA,IAAgB,IAAA,CAAK,kBAAA,EAAoB;AAClD,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,uBAAA;AAAA,MACjC,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH;AAMA,EAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAClB,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,gBAAA;AAAA,MACjC,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH,CAAA,MAAA,IAAW,CAACkC,cAAAA,CAAe,IAAA,CAAK,QAAQ,CAAA,EAAG;AACzC,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAM,0BAAA,CAA2B,eAAA;AAAA,MACjC,OAAA,EACE;AAAA,KACH,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,QAAA;AACT;AAcA,eAAeC,iBAAAA,CACb,MACA,YAAA,EAC2D;AAC3D,EAAA,IAAI,KAAK,kBAAA,EAAoB;AAC3B,IAAA,MAAM,EAAE,UAAA,EAAY,SAAA,EAAU,GAAI,MAAMJ,eAAAA,EAAgB;AACxD,IAAA,MAAM,GAAA,GAAM,MAAM,sBAAA,CAAuB,SAAS,CAAA;AAClD,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,UAAA,EAAY,GAAA,EAAI;AAAA,EACrC;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAM,aAAA,CAAc,IAAA,CAAK,WAAY,YAAY,CAAA;AAChE,IAAA,OAAO,EAAE,IAAI,IAAA,EAAM,UAAA,EAAY,OAAO,UAAA,EAAY,GAAA,EAAK,OAAO,GAAA,EAAI;AAAA,EACpE,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,eAAe,qBAAA,EAAuB;AACxC,MAAA,OAAO,EAAE,IAAI,KAAA,EAAO,IAAA,EAAM,IAAI,IAAA,EAAM,OAAA,EAAS,IAAI,OAAA,EAAQ;AAAA,IAC3D;AACA,IAAA,IAAI,eAAe,kBAAA,EAAoB;AACrC,MAAA,OAAO,EAAE,IAAI,KAAA,EAAO,IAAA,EAAM,IAAI,IAAA,EAAM,OAAA,EAAS,IAAI,OAAA,EAAQ;AAAA,IAC3D;AACA,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,MAAM,0BAAA,CAA2B,mBAAA;AAAA,MACjC,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG;AAAA,KAC1D;AAAA,EACF;AACF;AAOO,SAAS,0BAA0B,IAAA,EAAqD;AAE7F,EAAA,MAAM,GAAA,GAA+B;AAAA,IACnC,YAAY,IAAA,CAAK,SAAA;AAAA,IACjB,aAAa,IAAA,CAAK,UAAA;AAAA,IAClB,aAAa,IAAA,CAAK;AAAA,GACpB;AAGA,EAAA,IAAI,IAAA,CAAK,SAAA,EAAW,GAAA,CAAI,UAAA,GAAa,IAAA,CAAK,SAAA;AAC1C,EAAA,IAAI,IAAA,CAAK,mBAAA,EAAqB,GAAA,CAAI,qBAAA,GAAwB,IAAA,CAAK,mBAAA;AAC/D,EAAA,IAAI,IAAA,CAAK,sBAAA,EAAwB,GAAA,CAAI,wBAAA,GAA2B,IAAA,CAAK,sBAAA;AACrE,EAAA,IAAI,IAAA,CAAK,SAAA,EAAW,GAAA,CAAI,UAAA,GAAa,IAAA,CAAK,SAAA;AAC1C,EAAA,IAAI,IAAA,CAAK,YAAA,EAAc,GAAA,CAAI,aAAA,GAAgB,IAAA,CAAK,YAAA;AAChD,EAAA,IAAI,IAAA,CAAK,SAAA,EAAW,GAAA,CAAI,UAAA,GAAa,IAAA,CAAK,SAAA;AAC1C,EAAA,IAAI,IAAA,CAAK,QAAA,EAAU,GAAA,CAAI,SAAA,GAAY,IAAA,CAAK,QAAA;AACxC,EAAA,IAAI,IAAA,CAAK,YAAA,EAAc,GAAA,CAAI,aAAA,GAAgB,IAAA,CAAK,YAAA;AAGhD,EAAA,MAAM,KAAK,IAAA,CAAK,SAAA;AAChB,EAAA,IACE,EAAA,KAAO,8BAAA,IACP,EAAA,KAAO,4BAAA,IACP,OAAO,2BAAA,EACP;AACA,IAAA,GAAA,CAAI,eAAe,IAAA,CAAK,WAAA;AACxB,IAAA,GAAA,CAAI,eAAe,IAAA,CAAK,WAAA;AAAA,EAC1B,CAAA,MAAA,IAAW,OAAO,gCAAA,EAAkC;AAClD,IAAA,GAAA,CAAI,aAAa,IAAA,CAAK,SAAA;AAAA,EACxB,CAAA,MAAA,IAAW,OAAO,+BAAA,EAAiC;AACjD,IAAA,GAAA,CAAI,iBAAiB,IAAA,CAAK,aAAA;AAC1B,IAAA,IAAI,IAAA,CAAK,SAAA,EAAW,GAAA,CAAI,UAAA,GAAa,IAAA,CAAK,SAAA;AAC1C,IAAA,IAAI,IAAA,CAAK,UAAA,EAAY,GAAA,CAAI,WAAA,GAAc,IAAA,CAAK,UAAA;AAAA,EAC9C,CAAA,MAAA,IAAW,OAAO,6BAAA,EAA+B;AAC/C,IAAA,GAAA,CAAI,iBAAiB,IAAA,CAAK,aAAA;AAC1B,IAAA,GAAA,CAAI,aAAa,IAAA,CAAK,SAAA;AACtB,IAAA,IAAI,IAAA,CAAK,SAAA,EAAW,GAAA,CAAI,UAAA,GAAa,IAAA,CAAK,SAAA;AAC1C,IAAA,IAAI,IAAA,CAAK,UAAA,EAAY,GAAA,CAAI,WAAA,GAAc,IAAA,CAAK,UAAA;AAAA,EAC9C,CAAA,MAAA,IAAW,OAAO,+BAAA,EAAiC;AACjD,IAAA,GAAA,CAAI,aAAa,IAAA,CAAK,SAAA;AACtB,IAAA,GAAA,CAAI,WAAW,IAAA,CAAK,OAAA;AAAA,EACtB,CAAA,MAAA,IAAW,OAAO,yBAAA,EAA2B;AAC3C,IAAA,GAAA,CAAI,gBAAgB,IAAA,CAAK,YAAA;AAAA,EAC3B;AAGA,EAAA,IAAI,EAAA,KAAO,yBAAA,IAA6B,IAAA,CAAK,YAAA,EAAc;AACzD,IAAA,GAAA,CAAI,gBAAgB,IAAA,CAAK,YAAA;AAAA,EAC3B;AAEA,EAAA,OAAO,GAAA;AACT;AAOA,eAAsB,gBAAA,CACpB,OAAA,EACA,EAAA,GAA+B,EAAC,EACF;AAC9B,EAAA,MAAM,IAAA,GAA6B;AAAA,IACjC,kBAAA,EAAoB,KAAA;AAAA,IACpB,MAAA,EAAQ,GAAA;AAAA,IACR,GAAG;AAAA,GACL;AACA,EAAA,MAAM,WAAA,GAAc,GAAG,WAAA,KAAgB,CAAC,MAAc,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA;AAC5E,EAAA,MAAM,WAAA,GAAc,GAAG,WAAA,KAAgB,CAAC,MAAc,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA;AAC5E,EAAA,MAAM,YAAA,GAAe,EAAA,CAAG,YAAA,IAAgB,OAAA,CAAQ,GAAA;AAEhD,EAAA,MAAM,QAAA,GAAW,6BAA6B,IAAI,CAAA;AAClD,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,IAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,MAAA,WAAA,CAAY,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,EAAE,OAAO;AAAA,CAAI,CAAA;AAAA,IACzC;AACA,IAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,EACvB;AAGA,EAAA,MAAM,SAAA,GAAY,uBAAA,CAAwB,IAAA,CAAK,MAAM,CAAA;AACrD,EAAA,IAAI,cAAc,IAAA,EAAM;AACtB,IAAA,WAAA,CAAY,CAAA,EAAG,0BAAA,CAA2B,iBAAiB,CAAA,EAAA,EAAK,SAAS;AAAA,CAAI,CAAA;AAC7E,IAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,EACvB;AAGA,EAAA,MAAM,SAAA,GAAY,MAAMI,iBAAAA,CAAiB,IAAA,EAAM,YAAY,CAAA;AAC3D,EAAA,IAAI,CAAC,UAAU,EAAA,EAAI;AACjB,IAAA,WAAA,CAAY,CAAA,EAAG,SAAA,CAAU,IAAI,CAAA,EAAA,EAAK,UAAU,OAAO;AAAA,CAAI,CAAA;AACvD,IAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,EACvB;AAGA,EAAA,MAAM,WAAA,GAAc,0BAA0B,IAAI,CAAA;AAClD,EAAA,MAAM,UAAA,GAAa,6BAA6B,WAAW,CAAA;AAC3D,EAAA,IAAI,CAAC,WAAW,EAAA,EAAI;AAClB,IAAA,KAAA,MAAW,CAAA,IAAK,WAAW,MAAA,EAAQ;AACjC,MAAA,WAAA,CAAY,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,EAAE,OAAO;AAAA,CAAI,CAAA;AAAA,IACzC;AACA,IAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,EACvB;AAGA,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAM,UAAA,GAAa,sBAAA,CAAuB,IAAA,CAAK,SAA+B,CAAA;AAC9E,IAAA,MAAM,MAAA,GAAS,MAAMrD,KAAAA,CAAM;AAAA,MACzB,KAAK,IAAA,CAAK,QAAA;AAAA,MACV,IAAA,EAAM,UAAA;AAAA,MACN,IAAA,EAAM,UAAA;AAAA,MACN,YAAY,SAAA,CAAU,UAAA;AAAA,MACtB,KAAK,SAAA,CAAU,GAAA;AAAA,MACf,UAAA,EAAY;AAAA,QACV,CAAC,mCAAmC,GAAG,UAAA,CAAW;AAAA;AACpD,KACD,CAAA;AACD,IAAA,GAAA,GAAM,MAAA,CAAO,GAAA;AAAA,EACf,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,OAAA,GACJ,GAAA,YAAesD,UAAAA,GAAa,GAAA,CAAI,OAAA,GAAU,eAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAA;AAC3F,IAAA,WAAA,CAAY,CAAA,EAAG,0BAAA,CAA2B,aAAa,CAAA,EAAA,EAAK,OAAO;AAAA,CAAI,CAAA;AACvE,IAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,EACvB;AAEA,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,GAAA,IAAO,IAAA,CAAK,WAAW,EAAA,EAAI;AAC7C,IAAA,WAAA,CAAY,MAAM,IAAI,CAAA;AAAA,EACxB,CAAA,MAAO;AACL,IAAA,IAAI;AACF,MAAAhB,aAAAA,CAAc,IAAA,CAAK,MAAA,EAAQ,GAAA,GAAM,IAAI,CAAA;AAAA,IACvC,SAAS,GAAA,EAAK;AACZ,MAAA,WAAA;AAAA,QACE,CAAA,EAAG,0BAAA,CAA2B,iBAAiB,CAAA,mBAAA,EAAsB,IAAA,CAAK,MAAM,CAAA,GAAA,EAAM,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC;AAAA;AAAA,OACxI;AACA,MAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,IACvB;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AACvB;AAMO,SAAS,uBAAA,GAAmC;AACjD,EAAA,MAAM,GAAA,GAAM,IAAIpB,OAAAA,CAAQ,WAAW,CAAA;AACnC,EAAA,GAAA,CACG,WAAA;AAAA,IACC;AAAA,GAOF,CACC,MAAA;AAAA,IACC,qBAAA;AAAA,IACA,CAAA,wDAAA,EAA2D,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,GACnF,CACC,MAAA,CAAO,wBAAA,EAA0B,oDAAoD,CAAA,CACrF,MAAA,CAAO,uBAAA,EAAyB,mDAAmD,CAAA,CACnF,MAAA,CAAO,kCAAA,EAAoC,mDAAmD,CAAA,CAC9F,MAAA;AAAA,IACC,qCAAA;AAAA,IACA;AAAA,GACF,CACC,MAAA,CAAO,uBAAA,EAAyB,0DAA0D,CAAA,CAC1F,MAAA,CAAO,0BAAA,EAA4B,yDAAyD,CAAA,CAC5F,MAAA,CAAO,uBAAA,EAAyB,mDAAmD,CAAA,CACnF,MAAA;AAAA,IACC,yBAAA;AAAA,IACA;AAAA,GACF,CACC,MAAA;AAAA,IACC,yBAAA;AAAA,IACA;AAAA,GACF,CACC,MAAA;AAAA,IACC,2BAAA;AAAA,IACA;AAAA,IAED,MAAA,CAAO,uBAAA,EAAyB,oDAAoD,CAAA,CACpF,OAAO,wBAAA,EAA0B,qDAAqD,CAAA,CACtF,MAAA,CAAO,0BAA0B,CAAA,2BAAA,EAA8B,cAAA,CAAe,KAAK,IAAI,CAAC,EAAE,CAAA,CAC1F,MAAA;AAAA,IACC,uBAAA;AAAA,IACA;AAAA,GACF,CACC,MAAA,CAAO,0BAAA,EAA4B,yDAAyD,CAAA,CAC5F,MAAA;AAAA,IACC,sBAAA;AAAA,IACA;AAAA,GACF,CACC,MAAA;AAAA,IACC,qBAAA;AAAA,IACA;AAAA,GACF,CACC,MAAA;AAAA,IACC,mBAAA;AAAA,IACA;AAAA,GACF,CACC,MAAA;AAAA,IACC,yBAAA;AAAA,IACA;AAAA,GACF,CACC,OAAO,oBAAA,EAAsB,8DAA8D,EAC3F,MAAA,CAAO,mBAAA,EAAqB,wCAAwC,CAAA,CACpE,MAAA;AAAA,IACC,wBAAA;AAAA,IACA,yJAAA;AAAA,IACA;AAAA,GACF,CACC,MAAA,CAAO,iBAAA,EAAmB,2CAAA,EAA6C,GAAG,CAAA;AAE7E,EAAA,GAAA,CAAI,MAAA,CAAO,OAAO,OAAA,KAAqC;AACrD,IAAA,MAAM,OAAA,GAAyC;AAAA,MAC7C,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,qBAAqB,OAAA,CAAQ,mBAAA;AAAA,MAC7B,wBAAwB,OAAA,CAAQ,sBAAA;AAAA,MAChC,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,cAAc,OAAA,CAAQ,YAAA;AAAA,MACtB,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,eAAe,OAAA,CAAQ,aAAA;AAAA,MACvB,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,cAAc,OAAA,CAAQ,YAAA;AAAA,MACtB,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,cAAc,OAAA,CAAQ,YAAA;AAAA,MACtB,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,kBAAA,EAAoB,OAAA,CAAQ,OAAA,CAAQ,kBAAkB,CAAA;AAAA,MACtD,MAAA,EAAS,QAAQ,MAAA,IAAqB;AAAA,KACxC;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,gBAAA,CAAiB,OAAO,CAAA;AAC7C,IAAA,OAAA,CAAQ,WAAW,MAAA,CAAO,QAAA;AAAA,EAC5B,CAAC,CAAA;AAED,EAAA,OAAO,GAAA;AACT;AAOO,SAAS,WAAA,GAAuB;AACrC,EAAA,MAAM,IAAA,GAAO,IAAIA,OAAAA,CAAQ,MAAM,CAAA,CAAE,WAAA;AAAA,IAC/B;AAAA,GACF;AACA,EAAA,IAAA,CAAK,UAAA,CAAW,yBAAyB,CAAA;AACzC,EAAA,OAAO,IAAA;AACT;;;AC9nBA,IAAM,OAAA,GAAU,IAAIA,OAAAA,EAAQ;AAE5B,OAAA,CACG,IAAA,CAAK,MAAM,CAAA,CACX,WAAA,CAAY,kCAAkC,EAC9C,OAAA,CAAQ,UAAA,EAAY,CAAA,CACpB,YAAA,EAAa;AAKhB,OAAA,CACG,QAAQ,QAAQ,CAAA,CAChB,WAAA,CAAY,2BAA2B,EACvC,QAAA,CAAS,OAAA,EAAS,0DAA0D,CAAA,CAC5E,OAAO,eAAA,EAAiB,sBAAsB,EAC9C,MAAA,CAAO,OAAO,UAAkB,OAAA,KAAmC;AAClE,EAAA,IAAI;AAEF,IAAA,IAAI,GAAA,GAAM,QAAA;AACV,IAAA,IAAOqC,GAAA,CAAA,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3B,MAAA,GAAA,GAASA,GAAA,CAAA,YAAA,CAAa,QAAA,EAAU,OAAO,CAAA,CAAE,IAAA,EAAK;AAAA,IAChD;AAEA,IAAA,OAAA,CAAQ,IAAI,6BAA6B,CAAA;AAGzC,IAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAQ,GAAIC,OAA0B,GAAG,CAAA;AAEzD,IAAA,OAAA,CAAQ,IAAI,sBAAsB,CAAA;AAClC,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,eAAA,EAAkB,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AAC3C,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,eAAA,EAAkB,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AAC3C,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,eAAA,EAAkB,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AAC3C,IAAA,OAAA,CAAQ,IAAI,CAAA,eAAA,EAAkB,OAAA,CAAQ,GAAG,CAAA,CAAA,EAAI,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AAC1D,IAAA,OAAA,CAAQ,GAAA,CAAI,kBAAkB,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,OAAA,CAAQ,OAAA,CAAQ,SAAS,CAAA,CAAA,CAAG,CAAA;AACnF,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,eAAA,EAAkB,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAM,GAAI,CAAA,CAAE,WAAA,EAAa,CAAA,CAAE,CAAA;AAC1E,IAAA,IAAI,QAAQ,GAAA,EAAK;AACf,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,eAAA,EAAkB,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAM,GAAI,CAAA,CAAE,WAAA,EAAa,CAAA,CAAE,CAAA;AAAA,IAC5E;AACA,IAAA,OAAA,CAAQ,GAAA,EAAI;AAGZ,IAAA,OAAA,CAAQ,IAAI,wBAAwB,CAAA;AACpC,IAAA,MAAM,MAAA,GAAS,MAAM,aAAA,CAAc,GAAG,CAAA;AAEtC,IAAA,IAAI,OAAO,EAAA,EAAI;AACb,MAAA,OAAA,CAAQ,IAAI,kBAAkB,CAAA;AAC9B,MAAA,IAAI,OAAO,IAAA,EAAM;AACf,QAAA,OAAA,CAAQ,GAAA,CAAI,yBAAyB,MAAA,CAAO,IAAA,CAAK,UAAU,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,CAAI,CAAA;AACzE,QAAA,IAAI,MAAA,CAAO,KAAK,aAAA,EAAe;AAC7B,UAAA,OAAA,CAAQ,GAAA,CAAI,uBAAuB,MAAA,CAAO,IAAA,CAAK,cAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,QAC7E;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,IACrB,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,qBAAA,EAAwB,MAAA,CAAO,MAAM,CAAA,CAAE,CAAA;AACnD,MAAA,IAAI,OAAO,OAAA,EAAS;AAClB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,YAAA,EAAe,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAAA,MAC7C;AACA,MAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,IACrB;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,OAAA,CAAQ,KAAA,CAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA;AACxE,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB;AACF,CAAC,CAAA;AAOH,OAAA,CACG,OAAA,CAAQ,iBAAiB,CAAA,CACzB,WAAA,CAAY,sCAAsC,CAAA,CAClD,QAAA,CAAS,SAAA,EAAW,6CAA6C,CAAA,CACjE,MAAA,CAAO,OAAO,KAAA,KAAkB;AAC/B,EAAA,IAAI;AACF,IAAA,OAAA,CAAQ,IAAI,sCAAsC,CAAA;AAElD,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI,MAAM,UAAA,CAAW,SAAS,KAAK,KAAA,CAAM,UAAA,CAAW,UAAU,CAAA,EAAG;AAE/D,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,KAAK,CAAA,GAAA,CAAK,CAAA;AACvC,MAAA,MAAA,GAAS,MAAM,kBAAkB,KAAK,CAAA;AAAA,IACxC,CAAA,MAAO;AAEL,MAAA,MAAM,IAAA,GAAUD,GAAA,CAAA,YAAA,CAAa,KAAA,EAAO,OAAO,CAAA;AAC3C,MAAA,MAAA,GAAS,kBAAkB,IAAI,CAAA;AAAA,IACjC;AAEA,IAAA,OAAA,CAAQ,IAAI,kCAAkC,CAAA;AAE9C,IAAA,OAAA,CAAQ,IAAI,uBAAuB,CAAA;AACnC,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAC7C,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,MAAA,CAAO,MAAM,CAAA,CAAE,CAAA;AAC5C,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,MAAA,CAAO,QAAQ,CAAA,CAAE,CAAA;AAE9C,IAAA,IAAI,OAAO,eAAA,EAAiB;AAC1B,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,MAAA,CAAO,eAAe,CAAA,CAAE,CAAA;AAAA,IACvD;AAEA,IAAA,IAAI,MAAA,CAAO,gBAAA,IAAoB,MAAA,CAAO,gBAAA,CAAiB,SAAS,CAAA,EAAG;AACjE,MAAA,OAAA,CAAQ,IAAI,CAAA,cAAA,EAAiB,MAAA,CAAO,iBAAiB,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,IACnE;AAEA,IAAA,IAAI,MAAA,CAAO,UAAA,IAAc,MAAA,CAAO,UAAA,CAAW,SAAS,CAAA,EAAG;AACrD,MAAA,OAAA,CAAQ,IAAI,CAAA,eAAA,EAAkB,MAAA,CAAO,WAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,IAC9D;AAEA,IAAA,IAAI,MAAA,CAAO,aAAA,IAAiB,MAAA,CAAO,aAAA,CAAc,SAAS,CAAA,EAAG;AAC3D,MAAA,OAAA,CAAQ,IAAI,CAAA,cAAA,EAAiB,MAAA,CAAO,cAAc,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,IAChE;AAEA,IAAA,IAAI,OAAO,gBAAA,EAAkB;AAC3B,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,MAAA,CAAO,gBAAgB,CAAA,CAAE,CAAA;AAAA,IACxD;AAEA,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB,SAAS,GAAA,EAAK;AACZ,IAAA,OAAA,CAAQ,KAAA,CAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA;AACxE,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB;AACF,CAAC,CAAA;AAKH,OAAA,CACG,QAAQ,QAAQ,CAAA,CAChB,WAAA,CAAY,kDAAkD,EAC9D,QAAA,CAAS,OAAA,EAAS,0DAA0D,CAAA,CAC5E,OAAO,QAAA,EAAU,gBAAgB,EACjC,MAAA,CAAO,CAAC,UAAkB,OAAA,KAAgC;AACzD,EAAA,IAAI;AAEF,IAAA,IAAI,GAAA,GAAM,QAAA;AACV,IAAA,IAAOA,GAAA,CAAA,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3B,MAAA,GAAA,GAASA,GAAA,CAAA,YAAA,CAAa,QAAA,EAAU,OAAO,CAAA,CAAE,IAAA,EAAK;AAAA,IAChD;AAEA,IAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAQ,GAAIC,OAA0B,GAAG,CAAA;AAEzD,IAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,SAAA,CAAU,EAAE,QAAQ,OAAA,EAAQ,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,IAC1D,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAI,wCAAwC,CAAA;AAEpD,MAAA,OAAA,CAAQ,IAAI,SAAS,CAAA;AACrB,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,MAAA,CAAO,GAAG,CAAA,CAAE,CAAA;AACnC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,MAAA,CAAO,GAAG,CAAA,CAAE,CAAA;AACnC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,MAAA,CAAO,GAAG,CAAA,CAAE,CAAA;AACnC,MAAA,OAAA,CAAQ,GAAA,EAAI;AAEZ,MAAA,OAAA,CAAQ,IAAI,SAAS,CAAA;AACrB,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AACpC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AACpC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,OAAA,CAAQ,GAAG,CAAA,EAAA,EAAK,IAAI,IAAA,CAAK,OAAA,CAAQ,GAAA,GAAM,GAAI,CAAA,CAAE,WAAA,EAAa,CAAA,CAAA,CAAG,CAAA;AACpF,MAAA,IAAI,QAAQ,GAAA,EAAK;AACf,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,OAAA,CAAQ,GAAG,CAAA,EAAA,EAAK,IAAI,IAAA,CAAK,OAAA,CAAQ,GAAA,GAAM,GAAI,CAAA,CAAE,WAAA,EAAa,CAAA,CAAA,CAAG,CAAA;AAAA,MACtF;AACA,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AACpC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AACpC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AACpC,MAAA,OAAA,CAAQ,GAAA,EAAI;AAEZ,MAAA,OAAA,CAAQ,IAAI,UAAU,CAAA;AACtB,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAA,CAAE,CAAA;AACnD,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,OAAA,CAAQ,OAAA,CAAQ,SAAS,CAAA,CAAE,CAAA;AACxD,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA,CAAE,CAAA;AACrD,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,OAAA,CAAQ,OAAA,CAAQ,QAAQ,CAAA,CAAE,CAAA;AAEvD,MAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,QAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,QAAA,OAAA,CAAQ,IAAI,UAAU,CAAA;AACtB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AAAA,MAC9C;AAEA,MAAA,IAAI,QAAQ,GAAA,EAAK;AACf,QAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,QAAA,OAAA,CAAQ,IAAI,aAAa,CAAA;AACzB,QAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,QAAQ,GAAA,EAAK,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,MAClD;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB,SAAS,GAAA,EAAK;AACZ,IAAA,OAAA,CAAQ,KAAA,CAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA;AACxE,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB;AACF,CAAC,CAAA;AAGH,OAAA,CAAQ,WAAW,MAAM,CAAA;AAGzB,OAAA,CAAQ,WAAW,WAAW,CAAA;AAG9B,OAAA,CAAQ,WAAW,OAAO,CAAA;AAG1B,OAAA,CAAQ,UAAA,CAAW,kBAAkB,CAAA;AAGrC,OAAA,CAAQ,UAAA,CAAW,gBAAgB,CAAA;AAGnC,OAAA,CAAQ,UAAA,CAAW,eAAe,CAAA;AAGlC,OAAA,CAAQ,UAAA,CAAW,aAAa,CAAA;AAGhC,MAAA,CAAO,OAAO,CAAA;AASd,OAAA,CACG,QAAQ,UAAU,CAAA,CAClB,WAAA,CAAY,mEAAmE,EAC/E,QAAA,CAAS,OAAA,EAAS,8DAA8D,CAAA,CAChF,OAAO,YAAA,EAAc,uBAAuB,EAC5C,MAAA,CAAO,OAAO,KAAa,IAAA,KAA6B;AACvD,EAAA,MAAM,GAAA,GAAM,IAAI,eAAA,EAAgB;AAChC,EAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,OAAA,CAAQ,KAAK,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,CAAA;AACzD,EAAA,OAAA,CAAQ,GAAA,CAAI,YAAA,CAAa,MAAA,EAAQ,IAAA,CAAK,IAAI,CAAC,CAAA;AAC3C,EAAA,OAAA,CAAQ,QAAA,GAAW,MAAA,CAAO,OAAA,GAAU,CAAA,GAAI,CAAA;AAC1C,CAAC,CAAA;AAGH,IAAI;AACF,EAAA,OAAA,CAAQ,KAAA,EAAM;AAChB,CAAA,CAAA,OAAS,GAAA,EAAK;AACZ,EAAA,IAAI,eAAe,cAAA,EAAgB;AAEjC,IAAA,OAAA,CAAQ,WAAW,GAAA,CAAI,QAAA;AAAA,EACzB,CAAA,MAAO;AACL,IAAA,MAAM,GAAA;AAAA,EACR;AACF","file":"index.mjs","sourcesContent":["/**\n * PEAC Policy CLI Commands\n *\n * Commands for managing policy files:\n * - init: Create a new policy file\n * - validate: Validate policy syntax and schema\n * - explain: Debug rule matching\n * - generate: Compile policy to deployment artifacts\n * - list-profiles: List available policy profiles (v0.9.23+)\n * - show-profile: Show profile details (v0.9.23+)\n *\n * Automation flags (v0.9.23+):\n * - --json: Machine-readable JSON output\n * - --yes: Skip confirmation prompts (auto-confirm)\n * - --strict: Exit non-zero on warnings\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport {\n loadPolicy,\n parsePolicy,\n validatePolicy,\n evaluate,\n explainMatches,\n createExamplePolicy,\n serializePolicyYaml,\n serializePolicyJson,\n compilePeacTxt,\n compileRobotsSnippet,\n compileAiprefTemplates,\n renderPolicyMarkdown,\n PolicyLoadError,\n PolicyValidationError,\n POLICY_VERSION,\n EvaluationContext,\n ControlPurpose,\n ControlLicensingMode,\n SubjectType,\n // Profile system (v0.9.23+)\n listProfiles,\n loadProfile,\n getProfileSummary,\n validateProfileParams,\n customizeProfile,\n ProfileError,\n type ProfileId,\n} from '@peac/policy-kit';\n\n/**\n * Global options for policy commands\n */\ninterface PolicyGlobalOptions {\n json?: boolean;\n yes?: boolean;\n strict?: boolean;\n}\n\n/**\n * Get global options from parent command\n */\nfunction getGlobalOptions(cmd: Command): PolicyGlobalOptions {\n const parent = cmd.parent;\n if (!parent) return {};\n return parent.opts() as PolicyGlobalOptions;\n}\n\n/**\n * Output result - handles JSON vs human-readable format\n */\nfunction output(\n data: Record<string, unknown>,\n opts: PolicyGlobalOptions,\n humanMessage?: string\n): void {\n if (opts.json) {\n console.log(JSON.stringify(data, null, 2));\n } else if (humanMessage) {\n console.log(humanMessage);\n }\n}\n\n/**\n * Output error - handles JSON vs human-readable format\n */\nfunction outputError(\n error: string,\n details: Record<string, unknown>,\n opts: PolicyGlobalOptions\n): void {\n if (opts.json) {\n console.log(JSON.stringify({ success: false, error, ...details }, null, 2));\n } else {\n console.error(`Error: ${error}`);\n }\n}\n\nconst policy = new Command('policy')\n .description('Policy file operations')\n .option('--json', 'Output in machine-readable JSON format')\n .option('--yes', 'Skip confirmation prompts (auto-confirm)')\n .option('--strict', 'Exit non-zero on warnings');\n\n/**\n * peac policy init\n *\n * Create a new peac-policy.yaml file in the current directory.\n */\npolicy\n .command('init')\n .description('Create a new PEAC policy file')\n .option('-f, --format <format>', 'Output format (yaml or json)', 'yaml')\n .option('-o, --output <file>', 'Output file path')\n .option('--force', 'Overwrite existing file')\n .option('--profile <id>', 'Use a pre-built profile as template')\n .action(\n (\n options: { format?: string; output?: string; force?: boolean; profile?: string },\n cmd: Command\n ) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const format = options.format?.toLowerCase() || 'yaml';\n const outputPath =\n options.output || (format === 'json' ? 'peac-policy.json' : 'peac-policy.yaml');\n\n // Check if file exists and --force/--yes not set\n if (fs.existsSync(outputPath) && !options.force && !globalOpts.yes) {\n outputError(\n `File already exists: ${outputPath}`,\n { path: outputPath, hint: 'Use --force or --yes to overwrite' },\n globalOpts\n );\n process.exit(1);\n }\n\n let content: string;\n let policyName: string;\n\n if (options.profile) {\n // Use profile as template\n try {\n const profile = loadProfile(options.profile as ProfileId);\n const policyDoc = profile.policy;\n content =\n format === 'json' ? serializePolicyJson(policyDoc) : serializePolicyYaml(policyDoc);\n policyName = profile.name;\n } catch (err) {\n if (err instanceof ProfileError) {\n outputError(err.message, { code: err.code, profile: options.profile }, globalOpts);\n process.exit(1);\n }\n throw err;\n }\n } else {\n const example = createExamplePolicy();\n content = format === 'json' ? serializePolicyJson(example) : serializePolicyYaml(example);\n policyName = 'Example Policy';\n }\n\n fs.writeFileSync(outputPath, content, 'utf-8');\n\n if (globalOpts.json) {\n output(\n {\n success: true,\n file: outputPath,\n format,\n profile: options.profile || null,\n policyName,\n },\n globalOpts\n );\n } else {\n console.log(`Created policy file: ${outputPath}`);\n if (options.profile) {\n console.log(`Based on profile: ${options.profile}`);\n }\n console.log('');\n console.log('Next steps:');\n console.log(' 1. Edit the policy file to define your access rules');\n console.log(' 2. Validate with: peac policy validate ' + outputPath);\n console.log(' 3. Generate artifacts with: peac policy generate ' + outputPath);\n }\n\n process.exit(0);\n } catch (err) {\n outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n process.exit(1);\n }\n }\n );\n\n/**\n * peac policy validate <file>\n */\npolicy\n .command('validate')\n .description('Validate a PEAC policy file (YAML or JSON)')\n .argument('<file>', 'Path to policy file')\n .option('-v, --verbose', 'Show detailed validation output')\n .action((file: string, options: { verbose?: boolean }, cmd: Command) => {\n const globalOpts = getGlobalOptions(cmd);\n const warnings: string[] = [];\n\n try {\n const policyDoc = loadPolicy(file);\n\n // Collect any warnings (e.g., deprecated features)\n // Currently no warnings defined, but this is the pattern for future use\n\n const result = {\n success: true,\n file,\n valid: true,\n warnings,\n policy: {\n version: policyDoc.version,\n name: policyDoc.name || null,\n defaultDecision: policyDoc.defaults.decision,\n ruleCount: policyDoc.rules.length,\n rules: options.verbose\n ? policyDoc.rules.map((r) => ({\n name: r.name,\n decision: r.decision,\n subject: r.subject || null,\n purpose: r.purpose || null,\n licensingMode: r.licensing_mode || null,\n }))\n : undefined,\n },\n };\n\n if (globalOpts.json) {\n output(result, globalOpts);\n } else {\n console.log(`Validating policy file: ${file}\\n`);\n console.log('Policy is valid!\\n');\n\n console.log('Policy Information:');\n console.log(` Version: ${policyDoc.version}`);\n if (policyDoc.name) {\n console.log(` Name: ${policyDoc.name}`);\n }\n console.log(` Default: ${policyDoc.defaults.decision}`);\n console.log(` Rules: ${policyDoc.rules.length}`);\n\n if (options.verbose && policyDoc.rules.length > 0) {\n console.log('\\nRules:');\n for (const rule of policyDoc.rules) {\n console.log(` - ${rule.name}: ${rule.decision}`);\n if (rule.subject) {\n const parts: string[] = [];\n if (rule.subject.type) {\n const types = Array.isArray(rule.subject.type)\n ? rule.subject.type.join('|')\n : rule.subject.type;\n parts.push(`type=${types}`);\n }\n if (rule.subject.labels) {\n parts.push(`labels=[${rule.subject.labels.join(',')}]`);\n }\n if (rule.subject.id) {\n parts.push(`id=${rule.subject.id}`);\n }\n if (parts.length > 0) {\n console.log(` subject: ${parts.join(', ')}`);\n }\n }\n if (rule.purpose) {\n const purposes = Array.isArray(rule.purpose) ? rule.purpose.join('|') : rule.purpose;\n console.log(` purpose: ${purposes}`);\n }\n if (rule.licensing_mode) {\n const modes = Array.isArray(rule.licensing_mode)\n ? rule.licensing_mode.join('|')\n : rule.licensing_mode;\n console.log(` licensing_mode: ${modes}`);\n }\n }\n }\n\n if (warnings.length > 0) {\n console.log('\\nWarnings:');\n for (const warning of warnings) {\n console.log(` - ${warning}`);\n }\n }\n }\n\n // Exit with non-zero if --strict and there are warnings\n if (globalOpts.strict && warnings.length > 0) {\n process.exit(1);\n }\n\n process.exit(0);\n } catch (err) {\n if (err instanceof PolicyValidationError) {\n const issues = err.issues.map((i) => ({\n path: i.path.join('.'),\n message: i.message,\n }));\n\n if (globalOpts.json) {\n output(\n {\n success: false,\n file,\n valid: false,\n error: 'Validation failed',\n issues,\n },\n globalOpts\n );\n } else {\n console.error('Policy validation failed:\\n');\n for (const issue of err.issues) {\n console.error(` - ${issue.path.join('.')}: ${issue.message}`);\n }\n }\n process.exit(1);\n } else if (err instanceof PolicyLoadError) {\n outputError(`Failed to load policy: ${err.message}`, { file }, globalOpts);\n process.exit(1);\n } else {\n outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n process.exit(1);\n }\n }\n });\n\n/**\n * peac policy generate <file>\n *\n * Generate deployment artifacts from a policy file:\n * - peac.txt (PEAC discovery file)\n * - robots.txt snippet\n * - AIPREF header templates\n * - ai-policy.md (human-readable summary)\n */\npolicy\n .command('generate')\n .description('Generate deployment artifacts from a policy file')\n .argument('<file>', 'Path to policy file')\n .option('-o, --out <dir>', 'Output directory (use \"-\" for stdout)', 'dist')\n .option('--well-known', 'Output peac.txt to .well-known/ subdirectory')\n .option('--dry-run', 'Show what would be generated without writing files')\n .option('--peac-version <version>', 'PEAC protocol version (default: 0.9)')\n .option('--site-url <url>', 'Site URL for peac.txt')\n .option('--contact <email>', 'Contact email for policy questions')\n .option('--attribution <mode>', 'Attribution requirement (required, optional, none)')\n .option('--receipts <mode>', 'Receipts requirement (required, optional, omit)')\n .option('--rate-limit <limit>', 'Rate limit string (e.g., \"100/hour\", \"unlimited\")')\n .option('--negotiate <url>', 'Negotiate endpoint URL')\n .option('--no-comments', 'Omit comments from generated files')\n .action(\n (\n file: string,\n options: {\n out: string;\n wellKnown?: boolean;\n dryRun?: boolean;\n peacVersion?: string;\n siteUrl?: string;\n contact?: string;\n attribution?: 'required' | 'optional' | 'none';\n receipts?: 'required' | 'optional' | 'omit';\n rateLimit?: string;\n negotiate?: string;\n comments?: boolean;\n },\n cmd: Command\n ) => {\n const globalOpts = getGlobalOptions(cmd);\n const isStdout = options.out === '-';\n\n try {\n if (!globalOpts.json && !isStdout) {\n console.log(`Loading policy: ${file}\\n`);\n }\n\n const policyDoc = loadPolicy(file);\n\n const compileOptions = {\n peacVersion: options.peacVersion,\n siteUrl: options.siteUrl,\n contact: options.contact,\n attribution: options.attribution,\n receipts: options.receipts,\n rateLimit: options.rateLimit,\n negotiateUrl: options.negotiate,\n includeComments: options.comments !== false,\n };\n\n // Generate content\n const peacTxt = compilePeacTxt(policyDoc, compileOptions);\n const robotsTxt = compileRobotsSnippet(policyDoc, compileOptions);\n const aiprefTemplates = compileAiprefTemplates(policyDoc, compileOptions);\n const markdown = renderPolicyMarkdown(policyDoc, compileOptions);\n\n // Stdout mode: output all content as JSON\n if (isStdout || globalOpts.json) {\n const result = {\n success: true,\n source: file,\n artifacts: {\n 'peac.txt': peacTxt,\n 'robots-ai-snippet.txt': robotsTxt,\n 'aipref-headers.json': aiprefTemplates,\n 'ai-policy.md': markdown,\n },\n };\n\n if (isStdout && !globalOpts.json) {\n // Plain stdout: just output peac.txt\n console.log(peacTxt);\n } else {\n output(result, { json: true });\n }\n\n process.exit(0);\n }\n\n // Determine output paths\n const outDir = options.out;\n let peacTxtPath: string;\n if (options.wellKnown) {\n peacTxtPath = path.join(outDir, '.well-known', 'peac.txt');\n } else {\n peacTxtPath = path.join(outDir, 'peac.txt');\n }\n const robotsPath = path.join(outDir, 'robots-ai-snippet.txt');\n const aiprefPath = path.join(outDir, 'aipref-headers.json');\n const mdPath = path.join(outDir, 'ai-policy.md');\n\n if (options.dryRun) {\n // Dry run: show what would be generated\n console.log('Dry run - files that would be generated:\\n');\n console.log(`--- ${peacTxtPath} ---`);\n console.log(peacTxt);\n console.log(`--- ${robotsPath} ---`);\n console.log(robotsTxt);\n console.log(`--- ${aiprefPath} ---`);\n console.log(JSON.stringify(aiprefTemplates, null, 2));\n console.log(`\\n--- ${mdPath} ---`);\n console.log(markdown);\n process.exit(0);\n }\n\n // Create output directories\n if (!fs.existsSync(outDir)) {\n fs.mkdirSync(outDir, { recursive: true });\n }\n if (options.wellKnown) {\n const wellKnownDir = path.join(outDir, '.well-known');\n if (!fs.existsSync(wellKnownDir)) {\n fs.mkdirSync(wellKnownDir, { recursive: true });\n }\n }\n\n // Write files\n fs.writeFileSync(peacTxtPath, peacTxt, 'utf-8');\n console.log(`Generated: ${peacTxtPath}`);\n\n fs.writeFileSync(robotsPath, robotsTxt, 'utf-8');\n console.log(`Generated: ${robotsPath}`);\n\n fs.writeFileSync(aiprefPath, JSON.stringify(aiprefTemplates, null, 2), 'utf-8');\n console.log(`Generated: ${aiprefPath}`);\n\n fs.writeFileSync(mdPath, markdown, 'utf-8');\n console.log(`Generated: ${mdPath}`);\n\n console.log('');\n console.log('Deployment instructions:');\n if (options.wellKnown) {\n console.log(` 1. Deploy ${peacTxtPath} to serve at /.well-known/peac.txt`);\n } else {\n console.log(` 1. Copy ${peacTxtPath} to /.well-known/peac.txt`);\n }\n console.log(` 2. Append ${robotsPath} to your robots.txt`);\n console.log(` 3. Add headers from ${aiprefPath} to your server config`);\n console.log(` 4. Publish ${mdPath} for human reference`);\n\n process.exit(0);\n } catch (err) {\n if (err instanceof PolicyLoadError) {\n outputError(`Failed to load policy: ${err.message}`, { file }, globalOpts);\n process.exit(1);\n } else {\n outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n process.exit(1);\n }\n }\n }\n );\n\n/**\n * peac policy explain <file>\n *\n * Debug tool: explain which rule would apply for a given context.\n */\npolicy\n .command('explain')\n .description('Explain which rule would apply for a given context')\n .argument('<file>', 'Path to policy file')\n .option('-t, --type <type>', 'Subject type (human, org, agent)')\n .option('-l, --labels <labels>', 'Subject labels (comma-separated)')\n .option('-i, --id <id>', 'Subject ID')\n .option(\n '-p, --purpose <purpose>',\n 'Access purpose (crawl, index, train, inference, ai_input, ai_index, search)'\n )\n .option(\n '-m, --licensing-mode <mode>',\n 'Licensing mode (subscription, pay_per_crawl, pay_per_inference)'\n )\n .option('--all-matches', 'Show all matching rules, not just the first')\n .action(\n (\n file: string,\n options: {\n type?: string;\n labels?: string;\n id?: string;\n purpose?: string;\n licensingMode?: string;\n allMatches?: boolean;\n },\n cmd: Command\n ) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const policyDoc = loadPolicy(file);\n\n // Build evaluation context from options\n const context: EvaluationContext = {};\n\n if (options.type || options.labels || options.id) {\n context.subject = {};\n if (options.type) {\n context.subject.type = options.type as SubjectType;\n }\n if (options.labels) {\n context.subject.labels = options.labels.split(',').map((l) => l.trim());\n }\n if (options.id) {\n context.subject.id = options.id;\n }\n }\n\n if (options.purpose) {\n context.purpose = options.purpose as ControlPurpose;\n }\n\n if (options.licensingMode) {\n context.licensing_mode = options.licensingMode as ControlLicensingMode;\n }\n\n if (options.allMatches) {\n const matches = explainMatches(policyDoc, context);\n\n if (globalOpts.json) {\n output(\n {\n success: true,\n context,\n matches: matches.map((m) => {\n if (m === '[default]') {\n return {\n rule: '[default]',\n decision: policyDoc.defaults.decision,\n };\n }\n const rule = policyDoc.rules.find((r) => r.name === m);\n return rule\n ? { rule: rule.name, decision: rule.decision }\n : { rule: m, decision: null };\n }),\n },\n globalOpts\n );\n } else {\n console.log('Evaluation Context:');\n if (context.subject) {\n console.log(` Subject: ${JSON.stringify(context.subject)}`);\n } else {\n console.log(' Subject: (any)');\n }\n console.log(` Purpose: ${context.purpose || '(any)'}`);\n console.log(` Licensing Mode: ${context.licensing_mode || '(any)'}`);\n console.log();\n\n console.log(`Matching Rules (${matches.length}):`);\n for (const match of matches) {\n if (match === '[default]') {\n console.log(` - [default] -> ${policyDoc.defaults.decision}`);\n } else {\n const rule = policyDoc.rules.find((r) => r.name === match);\n if (rule) {\n console.log(` - ${rule.name} -> ${rule.decision}`);\n }\n }\n }\n }\n } else {\n const result = evaluate(policyDoc, context);\n\n if (globalOpts.json) {\n output(\n {\n success: true,\n context,\n result: {\n decision: result.decision,\n matchedRule: result.matched_rule || '[default]',\n reason: result.reason || null,\n },\n },\n globalOpts\n );\n } else {\n console.log('Evaluation Context:');\n if (context.subject) {\n console.log(` Subject: ${JSON.stringify(context.subject)}`);\n } else {\n console.log(' Subject: (any)');\n }\n console.log(` Purpose: ${context.purpose || '(any)'}`);\n console.log(` Licensing Mode: ${context.licensing_mode || '(any)'}`);\n console.log();\n\n console.log('Result:');\n console.log(` Decision: ${result.decision}`);\n if (result.matched_rule) {\n console.log(` Matched Rule: ${result.matched_rule}`);\n } else {\n console.log(' Matched Rule: (default)');\n }\n if (result.reason) {\n console.log(` Reason: ${result.reason}`);\n }\n }\n }\n\n process.exit(0);\n } catch (err) {\n if (err instanceof PolicyLoadError) {\n outputError(`Failed to load policy: ${err.message}`, { file }, globalOpts);\n process.exit(1);\n } else {\n outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n process.exit(1);\n }\n }\n }\n );\n\n/**\n * peac policy list-profiles\n *\n * List available pre-built policy profiles (v0.9.23+)\n */\npolicy\n .command('list-profiles')\n .description('List available pre-built policy profiles')\n .action((options: Record<string, never>, cmd: Command) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const profileIds = listProfiles();\n const profiles = profileIds.map((id) => getProfileSummary(id));\n\n if (globalOpts.json) {\n output(\n {\n success: true,\n profiles: profiles.map((p) => ({\n id: p.id,\n name: p.name,\n description: p.description,\n defaultDecision: p.defaultDecision,\n ruleCount: p.ruleCount,\n requiresReceipt: p.requiresReceipt,\n requiredParams: p.requiredParams,\n optionalParams: p.optionalParams,\n })),\n },\n globalOpts\n );\n } else {\n console.log('Available Policy Profiles:\\n');\n for (const profile of profiles) {\n console.log(` ${profile.id}`);\n console.log(` Name: ${profile.name}`);\n console.log(` Default: ${profile.defaultDecision}`);\n console.log(` Rules: ${profile.ruleCount}`);\n if (profile.requiresReceipt) {\n console.log(' Requires receipt: yes');\n }\n if (profile.requiredParams.length > 0) {\n console.log(` Required params: ${profile.requiredParams.join(', ')}`);\n }\n console.log();\n }\n\n console.log('Use \"peac policy show-profile <id>\" for full details');\n console.log('Use \"peac policy init --profile <id>\" to create a policy from a profile');\n }\n\n process.exit(0);\n } catch (err) {\n outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n process.exit(1);\n }\n });\n\n/**\n * peac policy show-profile <id>\n *\n * Show details of a specific profile (v0.9.23+)\n */\npolicy\n .command('show-profile')\n .description('Show details of a specific policy profile')\n .argument('<id>', 'Profile ID')\n .action((id: string, options: Record<string, never>, cmd: Command) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const profile = loadProfile(id as ProfileId);\n const summary = getProfileSummary(id as ProfileId);\n\n if (globalOpts.json) {\n output(\n {\n success: true,\n profile: {\n id: profile.id,\n name: profile.name,\n description: profile.description,\n policy: profile.policy,\n parameters: profile.parameters,\n defaults: profile.defaults,\n },\n },\n globalOpts\n );\n } else {\n console.log(`Profile: ${profile.name}`);\n console.log(`ID: ${profile.id}`);\n console.log();\n console.log('Description:');\n console.log(\n profile.description\n .split('\\n')\n .map((l) => ` ${l}`)\n .join('\\n')\n );\n console.log();\n\n console.log('Policy:');\n console.log(` Version: ${profile.policy.version}`);\n console.log(` Default decision: ${profile.policy.defaults.decision}`);\n console.log(` Rules: ${profile.policy.rules?.length || 0}`);\n\n if (profile.policy.rules && profile.policy.rules.length > 0) {\n console.log();\n console.log('Rules:');\n for (const rule of profile.policy.rules) {\n console.log(` - ${rule.name}: ${rule.decision}`);\n if (rule.purpose) {\n const purposes = Array.isArray(rule.purpose) ? rule.purpose.join(', ') : rule.purpose;\n console.log(` purpose: ${purposes}`);\n }\n if (rule.reason) {\n console.log(` reason: ${rule.reason}`);\n }\n }\n }\n\n if (Object.keys(profile.parameters || {}).length > 0) {\n console.log();\n console.log('Parameters:');\n for (const [key, param] of Object.entries(profile.parameters || {})) {\n const required = param.required ? ' (required)' : '';\n console.log(` ${key}${required}`);\n console.log(` ${param.description}`);\n if (param.default) {\n console.log(` Default: ${param.default}`);\n }\n if (param.example) {\n console.log(` Example: ${param.example}`);\n }\n }\n }\n\n if (profile.defaults) {\n console.log();\n console.log('Defaults:');\n if (profile.defaults.requirements?.receipt) {\n console.log(' Receipt required: yes');\n }\n if (profile.defaults.rate_limit) {\n console.log(\n ` Rate limit: ${profile.defaults.rate_limit.limit}/${profile.defaults.rate_limit.window_seconds}s`\n );\n }\n }\n }\n\n process.exit(0);\n } catch (err) {\n if (err instanceof ProfileError) {\n outputError(err.message, { code: err.code, profile: id }, globalOpts);\n process.exit(1);\n }\n outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n process.exit(1);\n }\n });\n\nexport { policy };\n","/**\n * Conformance Digest Computation\n *\n * Handles SHA-256 hashing, JCS canonicalization, and vectors digest computation.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { createHash } from 'crypto';\nimport { canonicalize } from '@peac/crypto';\n\n/**\n * Compute SHA-256 digest of a string\n */\nexport function sha256(content: string): string {\n return createHash('sha256').update(content, 'utf8').digest('hex');\n}\n\n/**\n * Convert Zod path array to JSON Pointer (RFC 6901)\n *\n * @param path - Array of path segments from Zod (string for keys, number for array indices)\n * @returns JSON Pointer string (e.g., \"/evidence/attestations/0/scope\")\n */\nexport function zodPathToJsonPointer(path: (string | number)[]): string {\n if (path.length === 0) return '';\n\n return (\n '/' +\n path\n .map((segment) => {\n const str = String(segment);\n // RFC 6901 escaping: ~ -> ~0, / -> ~1\n return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n })\n .join('/')\n );\n}\n\n/**\n * Compute canonical input digest using JCS (RFC 8785)\n *\n * Uses JSON Canonicalization Scheme for deterministic serialization,\n * ensuring consistent digests across implementations regardless of\n * JSON key ordering from JSON.parse.\n *\n * @returns Object with alg and value (alg differs if fallback was used)\n */\nexport function computeCanonicalDigest(input: unknown): { alg: string; value: string } {\n try {\n const canonical = canonicalize(input);\n return { alg: 'sha-256+jcs', value: sha256(canonical) };\n } catch {\n // Fallback to JSON.stringify if canonicalize fails (e.g., for non-JSON values)\n // Use different alg to indicate fallback was used.\n // JSON.stringify(undefined) returns undefined, so coerce to 'null' for safety.\n const serialized = JSON.stringify(input) ?? 'null';\n return { alg: 'sha-256+json', value: sha256(serialized) };\n }\n}\n\n/**\n * File extensions to include in vectors digest\n *\n * This allowlist ensures we capture all conformance-relevant files:\n * - .json: Fixtures, manifests, JWKS\n * - .txt: Policy files (peac.txt)\n * - .jwks: JWKS key files\n * - .pem: PEM-encoded keys\n * - .zip: Bundle archives (if used)\n */\nconst VECTORS_FILE_EXTENSIONS = new Set(['.json', '.txt', '.jwks', '.pem', '.zip']);\n\n/**\n * Files to exclude from vectors digest\n */\nconst VECTORS_EXCLUDE_FILES = new Set(['.DS_Store', '.gitkeep', 'Thumbs.db']);\n\n/**\n * Recursively collect all conformance-relevant files in a directory\n */\nfunction collectFilesRecursive(\n dir: string,\n basePath: string = ''\n): Array<{ relativePath: string; content: string }> {\n const files: Array<{ relativePath: string; content: string }> = [];\n\n if (!fs.existsSync(dir)) return files;\n\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n // Skip excluded files\n if (VECTORS_EXCLUDE_FILES.has(entry.name)) continue;\n\n const relativePath = basePath ? `${basePath}/${entry.name}` : entry.name;\n const fullPath = path.join(dir, entry.name);\n\n if (entry.isDirectory()) {\n // Recurse into subdirectories\n files.push(...collectFilesRecursive(fullPath, relativePath));\n } else {\n // Check if extension is in allowlist\n const ext = path.extname(entry.name).toLowerCase();\n if (VECTORS_FILE_EXTENSIONS.has(ext)) {\n files.push({\n relativePath,\n content: fs.readFileSync(fullPath, 'utf8'),\n });\n }\n }\n }\n\n return files;\n}\n\n/**\n * Compute comprehensive vectors digest by hashing all fixture files\n *\n * VECTORS DIGEST CONTRACT (NORMATIVE):\n * ====================================\n *\n * 1. FILE SELECTION:\n * - INCLUDES: manifest.json (if present) at root level\n * - INCLUDES: All files in category directories with extensions: .json, .txt, .jwks, .pem, .zip\n * - EXCLUDES: .DS_Store, .gitkeep, Thumbs.db\n *\n * 2. RECURSION:\n * - Hashes files in nested directories (e.g., bundle/vectors/*.json)\n *\n * 3. ORDERING:\n * - All files sorted lexicographically by normalized relative path\n * - Path separator is always forward slash (/)\n * - Comparison uses default string comparison (ASCII/Unicode code point order)\n *\n * 4. HASH INPUT FORMAT (per file):\n * - relativePath + NUL byte (\\x00) + sha256(fileBytes)\n * - relativePath uses forward slashes, no leading slash\n * - fileBytes are raw bytes, NO newline normalization\n *\n * 5. FINAL DIGEST:\n * - SHA-256 of all concatenated (path + NUL + hash) entries\n * - Reported as lowercase hex string\n *\n * This contract ensures:\n * - Digest changes when any fixture content changes\n * - Digest is reproducible across platforms\n * - Digest can be verified by other implementations\n */\nexport function computeVectorsDigest(fixturesDir: string, categories: string[]): string {\n const hash = createHash('sha256');\n const allFiles: Array<{ relativePath: string; content: string }> = [];\n\n // Include manifest.json if present (it's part of the conformance vectors)\n const manifestPath = path.join(fixturesDir, 'manifest.json');\n if (fs.existsSync(manifestPath)) {\n allFiles.push({\n relativePath: 'manifest.json',\n content: fs.readFileSync(manifestPath, 'utf8'),\n });\n }\n\n // Sort categories for determinism\n const sortedCategories = [...categories].sort();\n\n for (const cat of sortedCategories) {\n const categoryPath = path.join(fixturesDir, cat);\n // Recursively collect all conformance-relevant files in the category\n const categoryFiles = collectFilesRecursive(categoryPath, cat);\n allFiles.push(...categoryFiles);\n }\n\n // Sort all files by relative path for deterministic ordering\n allFiles.sort((a, b) => a.relativePath.localeCompare(b.relativePath));\n\n for (const file of allFiles) {\n const fileHash = sha256(file.content);\n // Hash: relativePath + NUL + fileHash\n hash.update(file.relativePath);\n hash.update('\\0');\n hash.update(fileHash);\n }\n\n return hash.digest('hex');\n}\n","/**\n * Conformance Manifest Loading and Matching\n *\n * Handles loading manifest.json and retrieving fixture metadata.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport type { Manifest, ManifestEntry } from './types.js';\n\n/**\n * Load manifest.json from fixtures directory\n */\nexport function loadManifest(fixturesDir: string): Manifest {\n const manifestPath = path.join(fixturesDir, 'manifest.json');\n if (!fs.existsSync(manifestPath)) {\n return {};\n }\n try {\n return JSON.parse(fs.readFileSync(manifestPath, 'utf8'));\n } catch {\n return {};\n }\n}\n\n/**\n * Get manifest entry for a fixture\n */\nexport function getManifestEntry(\n manifest: Manifest,\n category: string,\n filename: string\n): ManifestEntry | undefined {\n return manifest[category]?.[filename];\n}\n","/**\n * Conformance Profile Capabilities\n *\n * Maps categories to their profile details for capabilities reporting.\n */\n\nimport type { ProfileDetail, ProfileLevel, ConformanceLevel } from './types.js';\n\n/**\n * Profile capability registry\n *\n * Maps categories to their profile details including:\n * - profile: The profile name for the report\n * - level: 'semantic' for full validation, 'shape' for structural-only\n * - validator: The validator used (for transparency)\n * - notes: Any caveats about validation scope\n */\nexport const PROFILE_CAPABILITIES: Record<string, ProfileDetail> = {\n valid: {\n profile: 'receipt.verify.claims',\n level: 'semantic',\n validator: '@peac/schema:ReceiptClaimsSchema',\n },\n invalid: {\n profile: 'receipt.verify.claims',\n level: 'semantic',\n validator: '@peac/schema:ReceiptClaimsSchema',\n },\n edge: {\n profile: 'receipt.verify.claims',\n level: 'semantic',\n validator: '@peac/schema:ReceiptClaimsSchema',\n },\n 'agent-identity': {\n profile: 'receipt.verify.agent-identity',\n level: 'semantic',\n validator: '@peac/schema:validateAgentIdentityAttestation',\n },\n attribution: {\n profile: 'receipt.verify.attribution',\n level: 'semantic',\n validator: '@peac/schema:validateAttributionAttestation',\n },\n bundle: {\n profile: 'bundle.shape',\n level: 'shape',\n validator: 'structural-check',\n notes: 'Structure-only; no cryptographic integrity verification',\n },\n discovery: {\n profile: 'discovery.config',\n level: 'semantic',\n validator: '@peac/policy-kit:parsePolicyDocument (via cli compat helper)',\n },\n dispute: {\n profile: 'receipt.verify.dispute',\n level: 'semantic',\n validator: '@peac/schema:validateDisputeAttestation',\n },\n interaction: {\n profile: 'receipt.verify.interaction',\n level: 'semantic',\n validator: '@peac/schema:validateInteractionOrdered',\n },\n issue: {\n profile: 'receipt.issue',\n level: 'semantic',\n validator: '@peac/schema:ReceiptClaimsSchema',\n },\n obligations: {\n profile: 'receipt.verify.obligations',\n level: 'semantic',\n validator: '@peac/schema:validateObligationsExtension',\n },\n policy: {\n profile: 'policy.evaluate',\n level: 'shape',\n validator: 'structural-check',\n notes: 'Structure-only; no policy evaluation logic',\n },\n purpose: {\n profile: 'receipt.verify.purpose',\n level: 'semantic',\n validator: '@peac/schema:isValidPurposeToken',\n },\n verifier: {\n profile: 'receipt.verify',\n level: 'semantic',\n validator: '@peac/schema:ReceiptClaimsSchema',\n },\n workflow: {\n profile: 'workflow.validate',\n level: 'semantic',\n validator: '@peac/schema:validateWorkflowContextOrdered',\n },\n x402: {\n profile: 'transport.x402.shape',\n level: 'shape',\n validator: 'structural-check',\n notes: 'Structure-only; no offer/receipt verification or term matching',\n },\n errors: {\n profile: 'errors.hints',\n level: 'semantic',\n validator: 'validateErrorHintsInput',\n notes: 'Validates next_action hint table shape and vocabulary',\n },\n 'content-usage': {\n profile: 'content-usage.parse',\n level: 'shape',\n validator: 'validateContentUsageInput',\n notes: 'Validates Content-Usage fixture input type; full parsing tested in dedicated suite',\n },\n};\n\n/**\n * Get profile capability for a category\n *\n * For unknown categories, honestly reports that the default validator uses\n * heuristic semantic receipt validation (ReceiptClaimsSchema) when input\n * looks like claims. This prevents capability misrepresentation.\n */\nexport function getCategoryCapability(category: string): ProfileDetail {\n return (\n PROFILE_CAPABILITIES[category] ?? {\n profile: `receipt.verify.${category}`,\n level: 'semantic' as ProfileLevel,\n validator: '@peac/schema:ReceiptClaimsSchema (heuristic)',\n notes: 'Unknown category - uses semantic receipt validation when input looks like claims',\n }\n );\n}\n\n/**\n * Get profile name based on category\n */\nexport function getCategoryProfile(category: string): string {\n return getCategoryCapability(category).profile;\n}\n\n/**\n * Determine if a fixture should run at a given level\n */\nexport function shouldRunAtLevel(\n fixtureVersion: string | undefined,\n level: ConformanceLevel\n): boolean {\n if (!fixtureVersion) return true; // Default to basic\n\n const [major, minor] = fixtureVersion.split('.').map(Number);\n const fixtureLevel: ConformanceLevel =\n major > 0 || minor >= 10 ? 'full' : minor >= 9 ? 'standard' : 'basic';\n\n const levelOrder: ConformanceLevel[] = ['basic', 'standard', 'full'];\n return levelOrder.indexOf(fixtureLevel) <= levelOrder.indexOf(level);\n}\n","/**\n * CLI-internal helper. Preserves the v0.13.0 @peac/disc behavior contract\n * (tolerant two-pass parse + SSRF-aware remote fetch) using public\n * @peac/policy-kit and @peac/net-node primitives, plus PUBLIC @peac/kernel\n * constants where the fields exist.\n *\n * NOT exported from @peac/cli's public surface. Used by:\n * - packages/cli/src/commands/discover.ts\n * - packages/cli/src/lib/conformance/validators.ts (validateDiscoveryInput)\n *\n * External consumers needing the same compatibility behavior should copy\n * this pattern; a packaged public helper may land in a later release if\n * external demand surfaces.\n */\n\n// `@peac/net-node` is ESM-only (no \"require\" exports entry). The CLI bin\n// emits a CommonJS bundle that loads this helper transitively via the\n// conformance validator import chain, but only the conformance use case\n// (parsePolicyDocumentCompat) is reachable from the bin -- not the\n// fetch path. Importing `safeFetchRaw` at module load would force a CJS\n// require() of an ESM-only package and fail at startup. Instead, load\n// `@peac/net-node` lazily inside fetchPolicyDocumentText() via dynamic\n// import so the conformance path resolves without touching it.\nimport type { SafeFetchOptions } from '@peac/net-node';\nimport {\n parsePolicyDocument,\n PolicyLoadError,\n PolicyValidationError,\n type PolicyDocument,\n} from '@peac/policy-kit';\n// @peac/kernel.POLICY exposes manifestPath + maxBytes (and other discovery\n// surface defaults). @peac/kernel.DISCOVERY does NOT carry timeoutMs in\n// v0.13.x; the CLI keeps its own DISCOVER_TIMEOUT_MS pinned to the value\n// the retired @peac/disc used.\nimport { POLICY } from '@peac/kernel';\n\n// CLI-local constants. These mirror v0.13.0 @peac/disc behavior verbatim.\n// Pinned by tests in packages/cli/__tests__/discover-command.test.ts.\nexport const DISCOVER_TIMEOUT_MS = 5_000;\nexport const DISCOVER_MAX_BYTES = POLICY.maxBytes; // 262144 bytes (256 KiB)\nexport const PEAC_TXT_PATH = POLICY.manifestPath; // '/.well-known/peac.txt'\nconst DEFAULT_USER_AGENT = 'peac-cli';\n\nconst LEGACY_KEY_LINE = /^\\s*(verify|public_keys|jwks)\\s*:/m;\nconst LEGACY_KEY_FULL_LINE_GLOBAL = /^\\s*(verify|public_keys|jwks)\\s*:.*\\r?\\n?/gm;\n\nlet legacyWarningFired = false;\n\nfunction fireLegacyWarning(field: string): void {\n if (legacyWarningFired) return;\n legacyWarningFired = true;\n if (typeof process !== 'undefined' && typeof process.emitWarning === 'function') {\n process.emitWarning(\n `peac.txt legacy key-discovery field \"${field}\" is deprecated and ignored. ` +\n `peac.txt is a policy-document surface (docs/specs/PEAC-TXT.md). ` +\n `Key resolution uses iss -> /.well-known/peac-issuer.json -> jwks_uri -> JWKS.`,\n { code: 'PEAC_LEGACY_PEAC_TXT_KEY_FIELD', type: 'DeprecationWarning' }\n );\n }\n}\n\n/** @internal - tests only; resets the one-shot legacy-warning flag. */\nexport function __resetLegacyWarningForTests(): void {\n legacyWarningFired = false;\n}\n\nexport interface CompatParseResult {\n valid: boolean;\n data?: PolicyDocument;\n errors?: string[];\n warnings?: string[];\n}\n\nfunction collectLegacyWarnings(text: string, warnings: string[]): void {\n const lines = text.split(/\\r?\\n/);\n let firstField: string | null = null;\n lines.forEach((line, idx) => {\n const m = line.match(/^\\s*(verify|public_keys|jwks)\\s*:/);\n if (m) {\n if (firstField === null) firstField = m[1];\n warnings.push(\n `Line ${idx + 1}: legacy key-discovery field \"${m[1]}\" ignored ` +\n `(peac.txt is policy-only; use peac-issuer.json for keys)`\n );\n }\n });\n if (firstField) fireLegacyWarning(firstField);\n}\n\nfunction failureFrom(err: unknown, warnings: string[]): CompatParseResult {\n const errors: string[] = [];\n if (err instanceof PolicyValidationError) {\n const issues = err.issues.map((i) => `${i.path.join('.')}: ${i.message}`).join('; ');\n errors.push(`Policy validation failed: ${issues}`);\n } else if (err instanceof PolicyLoadError) {\n errors.push(err.message);\n } else {\n errors.push(`Unexpected parse error: ${err instanceof Error ? err.message : String(err)}`);\n }\n return {\n valid: false,\n errors,\n warnings: warnings.length > 0 ? warnings : undefined,\n };\n}\n\n/**\n * Tolerant two-pass parser preserving v0.13.0 @peac/disc.parse semantics.\n *\n * Pass 1: hand the raw text to parsePolicyDocument unmodified. Legacy-looking\n * substrings inside YAML comments / block scalars / rule text remain intact.\n *\n * Pass 2 (only if Pass 1 throws AND legacy `verify:` / `public_keys:` /\n * `jwks:` lines are present at top level): strip those lines and retry.\n * Detected legacy lines surface as warnings + a once-per-process structured\n * DeprecationWarning with code PEAC_LEGACY_PEAC_TXT_KEY_FIELD.\n *\n * Returns a structured ParseResult; never throws on policy validation /\n * load failure (those become `errors`). Throws only on programming errors.\n */\nexport function parsePolicyDocumentCompat(text: string): CompatParseResult {\n if (text.trim().length === 0) {\n return {\n valid: false,\n errors: ['Empty policy document. Expected peac-policy/0.1 YAML or JSON.'],\n };\n }\n\n const hasLegacyLines = LEGACY_KEY_LINE.test(text);\n const warnings: string[] = [];\n\n try {\n const data = parsePolicyDocument(text);\n if (hasLegacyLines) collectLegacyWarnings(text, warnings);\n return {\n valid: true,\n data,\n warnings: warnings.length > 0 ? warnings : undefined,\n };\n } catch (firstErr) {\n if (!hasLegacyLines) return failureFrom(firstErr, warnings);\n collectLegacyWarnings(text, warnings);\n const stripped = text.replace(LEGACY_KEY_FULL_LINE_GLOBAL, '');\n try {\n const data = parsePolicyDocument(stripped);\n return { valid: true, data, warnings };\n } catch (secondErr) {\n return failureFrom(secondErr, warnings);\n }\n }\n}\n\nexport interface FetchPolicyDocumentSuccess {\n ok: true;\n text: string;\n warnings?: string[];\n}\n\nexport interface FetchPolicyDocumentFailure {\n ok: false;\n error: string;\n code?: string;\n}\n\nexport type FetchPolicyDocumentResult = FetchPolicyDocumentSuccess | FetchPolicyDocumentFailure;\n\nexport interface FetchPolicyDocumentOptions {\n /** Override the v0.13.0-equivalent 5_000 ms total timeout. */\n timeoutMs?: number;\n /** Override the v0.13.0-equivalent 256 KiB body cap. */\n maxBytes?: number;\n /** Override the User-Agent header. Defaults to `peac-cli`. */\n userAgent?: string;\n}\n\n/**\n * Fetch a peac.txt policy document via SSRF-aware HTTP with a body cap and\n * timeout. Returns the raw response text on success. Caller is responsible\n * for parsing via `parsePolicyDocumentCompat`. Always closes the underlying\n * raw response in a `finally` block (no socket leak).\n */\nexport async function fetchPolicyDocumentText(\n origin: string,\n options: FetchPolicyDocumentOptions = {}\n): Promise<FetchPolicyDocumentResult> {\n let target: URL;\n try {\n target = new URL(PEAC_TXT_PATH, origin);\n } catch (err) {\n return {\n ok: false,\n code: 'INVALID_URL',\n error: `Invalid origin: ${err instanceof Error ? err.message : String(err)}`,\n };\n }\n\n const fetchOptions: SafeFetchOptions = {\n timeoutMs: options.timeoutMs ?? DISCOVER_TIMEOUT_MS,\n maxResponseBytes: options.maxBytes ?? DISCOVER_MAX_BYTES,\n headers: { 'user-agent': options.userAgent ?? DEFAULT_USER_AGENT },\n allowedMethods: ['GET'],\n };\n\n // Lazy import: see the module-load comment above. Dynamic import works in\n // both CJS and ESM bundles; in CJS, Node can dynamically import the ESM-only\n // @peac/net-node at runtime even though `require()` cannot.\n const { safeFetchRaw } = await import('@peac/net-node');\n\n const raw = await safeFetchRaw(target.toString(), fetchOptions);\n if (!raw.ok) {\n return {\n ok: false,\n code: raw.code,\n error: `${raw.code}: ${raw.error}`,\n };\n }\n try {\n if (!raw.response.ok) {\n return {\n ok: false,\n code: `HTTP_${raw.response.status}`,\n error: `HTTP ${raw.response.status}: ${raw.response.statusText}`,\n };\n }\n const text = await raw.response.text();\n return { ok: true, text, warnings: raw.warnings };\n } finally {\n await raw.close();\n }\n}\n","/**\n * Conformance Category Validators\n *\n * Category-aware validation using the same validators as tests/conformance/*.spec.ts.\n */\n\nimport {\n ReceiptClaimsSchema,\n parseReceiptClaims,\n validateAgentIdentityAttestation,\n validateAttributionAttestation,\n validateDisputeAttestation,\n validateInteractionOrdered,\n validateWorkflowContextOrdered,\n validateObligationsExtension,\n isValidPurposeToken,\n isCanonicalPurpose,\n type InteractionValidationResult,\n type WorkflowValidationResult,\n} from '@peac/schema';\nimport { parsePolicyDocumentCompat } from '../policy-document-discovery.js';\nimport type { ValidationResult, ValidationResultWithPath, CategoryValidator } from './types.js';\nimport { zodPathToJsonPointer } from './digest.js';\n\n/**\n * Map Zod issue code to manifest keyword\n */\nfunction zodCodeToKeyword(code: string): string {\n const mapping: Record<string, string> = {\n invalid_type: 'type',\n invalid_literal: 'const',\n unrecognized_keys: 'additionalProperties',\n invalid_union: 'anyOf',\n invalid_enum_value: 'enum',\n invalid_string: 'format',\n too_small: 'minLength',\n too_big: 'maxLength',\n custom: 'custom',\n };\n return mapping[code] ?? code;\n}\n\n/**\n * Validate receipt claims using Zod schema\n */\nexport function validateReceiptPayload(payload: unknown): ValidationResultWithPath {\n const result = ReceiptClaimsSchema.safeParse(payload);\n\n if (result.success) {\n return { valid: true };\n }\n\n const firstIssue = result.error.issues[0];\n const zodPath = firstIssue?.path ?? [];\n const errorPath = zodPathToJsonPointer(zodPath as (string | number)[]);\n const errorKeyword = zodCodeToKeyword(firstIssue?.code ?? 'unknown');\n\n // Map paths to canonical error codes\n let errorCode = 'E_INVALID_FORMAT';\n const pathStr = zodPath.join('.');\n if (pathStr === 'iss' || pathStr.startsWith('iss.')) errorCode = 'E_INVALID_ISSUER';\n else if (pathStr === 'aud' || pathStr.startsWith('aud.')) errorCode = 'E_INVALID_AUDIENCE';\n else if (pathStr === 'iat') errorCode = 'E_INVALID_IAT';\n else if (pathStr === 'exp') errorCode = 'E_INVALID_EXP';\n else if (pathStr === 'rid') errorCode = 'E_INVALID_RID';\n else if (firstIssue?.code === 'invalid_type' && zodPath.length > 0) {\n // For required fields, Zod reports invalid_type when field is undefined\n errorCode = 'E_REQUIRED';\n }\n\n return {\n valid: false,\n error_code: errorCode,\n error_message: firstIssue?.message ?? 'Unknown validation error',\n error_path: errorPath,\n error_keyword: errorKeyword,\n };\n}\n\n/**\n * Validate receipt claims using unified parser (parse-level error codes).\n *\n * Separate from validateReceiptPayload which returns path-level codes.\n * Use this for the `parse` conformance category where fixtures assert\n * parse-level codes (E_PARSE_COMMERCE_INVALID, E_PARSE_ATTESTATION_INVALID).\n */\nexport function validateParseReceiptClaims(payload: unknown): ValidationResultWithPath {\n const pr = parseReceiptClaims(payload);\n if (pr.ok) {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: pr.error.code,\n error_message: pr.error.message,\n };\n}\n\n/**\n * Validate discovery document (peac.txt or peac-issuer.json)\n */\nfunction validateDiscoveryInput(input: unknown): ValidationResult {\n if (typeof input === 'string') {\n // Parse as peac.txt format via the CLI-internal compat helper that\n // preserves v0.13.0 @peac/disc.parse legacy-line tolerance.\n const result = parsePolicyDocumentCompat(input);\n if (result.valid) {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: 'E_DISCOVERY_PARSE_ERROR',\n error_message: result.errors?.join('; ') ?? 'Discovery parse error',\n };\n }\n\n // JSON format - validate structure\n if (typeof input === 'object' && input !== null) {\n const obj = input as Record<string, unknown>;\n if (!obj.issuer || typeof obj.issuer !== 'string') {\n return {\n valid: false,\n error_code: 'E_MISSING_ISSUER',\n error_message: 'Discovery document missing required issuer field',\n };\n }\n if (!obj.jwks_uri || typeof obj.jwks_uri !== 'string') {\n return {\n valid: false,\n error_code: 'E_MISSING_JWKS_URI',\n error_message: 'Discovery document missing required jwks_uri field',\n };\n }\n return { valid: true };\n }\n\n return {\n valid: false,\n error_code: 'E_INVALID_DISCOVERY',\n error_message: 'Discovery input must be string or object',\n };\n}\n\n/**\n * Validate agent identity attestation\n */\nfunction validateAgentIdentityInput(input: unknown): ValidationResult {\n const result = validateAgentIdentityAttestation(input);\n if (result.ok) {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: 'E_INVALID_AGENT_IDENTITY',\n error_message: result.error,\n };\n}\n\n/**\n * Validate attribution attestation\n */\nfunction validateAttributionInput(input: unknown): ValidationResult {\n const result = validateAttributionAttestation(input);\n if (result.ok) {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: 'E_INVALID_ATTRIBUTION',\n error_message: result.error,\n };\n}\n\n/**\n * Validate dispute attestation\n */\nfunction validateDisputeInput(input: unknown): ValidationResult {\n const result = validateDisputeAttestation(input);\n if (result.ok) {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: 'E_INVALID_DISPUTE',\n error_message: result.error,\n };\n}\n\n/**\n * Validate interaction evidence\n */\nfunction validateInteractionInput(input: unknown): ValidationResult {\n const result: InteractionValidationResult = validateInteractionOrdered(input);\n if (result.valid) {\n return {\n valid: true,\n warnings: result.warnings.map((w) => w.message),\n };\n }\n // InteractionValidationResult has errors array when invalid\n const firstError = result.errors[0];\n return {\n valid: false,\n error_code: firstError?.code ?? 'E_INVALID_INTERACTION',\n error_message: firstError?.message ?? 'Interaction validation failed',\n };\n}\n\n/**\n * Validate workflow context\n */\nfunction validateWorkflowInput(input: unknown): ValidationResult {\n const result: WorkflowValidationResult = validateWorkflowContextOrdered(input);\n if (result.valid) {\n return { valid: true };\n }\n // WorkflowValidationResult has error_code and error when invalid\n return {\n valid: false,\n error_code: result.error_code,\n error_message: result.error,\n };\n}\n\n/**\n * Validate obligations extension\n */\nfunction validateObligationsInput(input: unknown): ValidationResult {\n const result = validateObligationsExtension(input);\n if (result.ok) {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: 'E_INVALID_OBLIGATIONS',\n error_message: result.error,\n };\n}\n\n/**\n * Validate purpose tokens\n */\nfunction validatePurposeInput(input: unknown): ValidationResult {\n if (typeof input === 'object' && input !== null) {\n const obj = input as Record<string, unknown>;\n\n // Check purpose_declared array\n if (obj.purpose_declared && Array.isArray(obj.purpose_declared)) {\n for (const p of obj.purpose_declared) {\n if (typeof p === 'string' && !isValidPurposeToken(p) && !isCanonicalPurpose(p)) {\n return {\n valid: false,\n error_code: 'E_INVALID_PURPOSE_TOKEN',\n error_message: `Invalid purpose token: ${p}`,\n };\n }\n }\n }\n\n // Check purpose_enforced\n if (obj.purpose_enforced && typeof obj.purpose_enforced === 'string') {\n if (!isValidPurposeToken(obj.purpose_enforced) && !isCanonicalPurpose(obj.purpose_enforced)) {\n return {\n valid: false,\n error_code: 'E_INVALID_PURPOSE_ENFORCED',\n error_message: `Invalid enforced purpose: ${obj.purpose_enforced}`,\n };\n }\n }\n\n return { valid: true };\n }\n\n return {\n valid: false,\n error_code: 'E_INVALID_PURPOSE',\n error_message: 'Purpose input must be object with purpose_declared/purpose_enforced',\n };\n}\n\n/**\n * Validate bundle (basic structure check - full verification requires async)\n */\nfunction validateBundleInput(input: unknown): ValidationResult {\n if (typeof input !== 'object' || input === null) {\n return {\n valid: false,\n error_code: 'E_INVALID_BUNDLE',\n error_message: 'Bundle must be an object',\n };\n }\n\n const obj = input as Record<string, unknown>;\n\n // Check required bundle fields\n if (!obj.version || typeof obj.version !== 'string') {\n return {\n valid: false,\n error_code: 'E_MISSING_VERSION',\n error_message: 'Bundle missing required version field',\n };\n }\n\n // Check for entries or receipts array\n if (!Array.isArray(obj.entries) && !Array.isArray(obj.receipts)) {\n return {\n valid: false,\n error_code: 'E_MISSING_ENTRIES',\n error_message: 'Bundle missing entries or receipts array',\n };\n }\n\n return { valid: true };\n}\n\n/**\n * Validate x402 offer/payment structures\n */\nfunction validateX402Input(input: unknown): ValidationResult {\n if (typeof input !== 'object' || input === null) {\n return {\n valid: false,\n error_code: 'E_INVALID_X402',\n error_message: 'x402 input must be an object',\n };\n }\n\n const obj = input as Record<string, unknown>;\n\n // Check for x402 payment required structure\n if (obj.accepts && Array.isArray(obj.accepts)) {\n // Validate accepts array contains payment options\n for (const accept of obj.accepts) {\n if (typeof accept !== 'object' || accept === null) {\n return {\n valid: false,\n error_code: 'E_INVALID_ACCEPTS',\n error_message: 'x402 accepts must contain payment option objects',\n };\n }\n }\n return { valid: true };\n }\n\n // Check for x402 payment evidence structure\n if (obj.rail && obj.reference) {\n return { valid: true };\n }\n\n return {\n valid: false,\n error_code: 'E_INVALID_X402_STRUCTURE',\n error_message: 'x402 input missing required fields (accepts or rail+reference)',\n };\n}\n\n/**\n * Validate policy-related input\n */\nfunction validatePolicyInput(input: unknown): ValidationResult {\n if (typeof input !== 'object' || input === null) {\n return {\n valid: false,\n error_code: 'E_INVALID_POLICY',\n error_message: 'Policy input must be an object',\n };\n }\n\n // Basic structure validation for policy\n return { valid: true };\n}\n\n/**\n * Validate issue-related input (receipt issuance)\n */\nfunction validateIssueInput(input: unknown): ValidationResult {\n // Issue fixtures are typically receipt structures for issuance testing\n if (typeof input === 'object' && input !== null) {\n const obj = input as Record<string, unknown>;\n\n // If it has claims, validate them\n if (obj.claims) {\n return validateReceiptPayload(obj.claims);\n }\n\n // If it has payload, validate it\n if (obj.payload) {\n return validateReceiptPayload(obj.payload);\n }\n }\n\n return { valid: true };\n}\n\n/**\n * Valid next_action values (closed vocabulary)\n */\nconst VALID_NEXT_ACTIONS = new Set([\n 'retry_after_delay',\n 'retry_with_different_key',\n 'retry_with_different_input',\n 'refresh_attestation',\n 'contact_issuer',\n 'abort',\n 'none',\n]);\n\n/**\n * Validate error hint table\n *\n * Validates the shape of the next-action-hints.json fixture:\n * - Must have a `hints` object\n * - Each hint must have `next_action` from the closed vocabulary and `retryable` boolean\n */\nfunction validateErrorHintsInput(input: unknown): ValidationResult {\n if (typeof input !== 'object' || input === null) {\n return {\n valid: false,\n error_code: 'E_INVALID_ERROR_HINTS',\n error_message: 'Error hints input must be an object',\n };\n }\n\n const obj = input as Record<string, unknown>;\n if (!obj.hints || typeof obj.hints !== 'object') {\n return {\n valid: false,\n error_code: 'E_MISSING_HINTS',\n error_message: 'Error hints missing required hints object',\n };\n }\n\n const hints = obj.hints as Record<string, unknown>;\n for (const [code, hint] of Object.entries(hints)) {\n if (typeof hint !== 'object' || hint === null) {\n return {\n valid: false,\n error_code: 'E_INVALID_HINT',\n error_message: `Hint for ${code} must be an object`,\n };\n }\n const h = hint as Record<string, unknown>;\n if (!VALID_NEXT_ACTIONS.has(h.next_action as string)) {\n return {\n valid: false,\n error_code: 'E_INVALID_NEXT_ACTION',\n error_message: `Hint for ${code} has invalid next_action: ${String(h.next_action)}`,\n };\n }\n if (typeof h.retryable !== 'boolean') {\n return {\n valid: false,\n error_code: 'E_INVALID_RETRYABLE',\n error_message: `Hint for ${code} has non-boolean retryable: ${String(h.retryable)}`,\n };\n }\n }\n\n return { valid: true };\n}\n\n/**\n * Validate content-usage fixture input\n *\n * Content-usage fixtures are string inputs (HTTP header values).\n * Validates that the input is a string.\n */\nfunction validateContentUsageInput(input: unknown): ValidationResult {\n if (typeof input === 'string') {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: 'E_INVALID_CONTENT_USAGE',\n error_message: 'Content-Usage input must be a string (HTTP header value)',\n };\n}\n\n/**\n * Category validator registry\n */\nexport const CATEGORY_VALIDATORS: Record<string, CategoryValidator> = {\n // Receipt claim validation\n valid: (input) => {\n const obj = input as Record<string, unknown>;\n return validateReceiptPayload(obj.payload ?? obj.claims ?? input);\n },\n invalid: (input) => {\n const obj = input as Record<string, unknown>;\n return validateReceiptPayload(obj.payload ?? obj.claims ?? input);\n },\n edge: (input) => {\n const obj = input as Record<string, unknown>;\n return validateReceiptPayload(obj.payload ?? obj.claims ?? input);\n },\n\n // Parse-level validation (unified parser, parse-level error codes).\n // The claims/payload ambiguity guard lives in the runner (test-harness concern).\n parse: (input) => {\n const obj = input as Record<string, unknown>;\n return validateParseReceiptClaims(obj.claims ?? obj.payload ?? input);\n },\n\n // Category-specific validators\n 'agent-identity': validateAgentIdentityInput,\n attribution: validateAttributionInput,\n bundle: validateBundleInput,\n discovery: validateDiscoveryInput,\n dispute: validateDisputeInput,\n interaction: validateInteractionInput,\n issue: validateIssueInput,\n obligations: validateObligationsInput,\n policy: validatePolicyInput,\n purpose: validatePurposeInput,\n verifier: (input) => {\n const obj = input as Record<string, unknown>;\n return validateReceiptPayload(obj.payload ?? obj.claims ?? input);\n },\n workflow: validateWorkflowInput,\n x402: validateX402Input,\n errors: validateErrorHintsInput,\n 'content-usage': validateContentUsageInput,\n};\n\n/**\n * Get validator for a category\n */\nexport function getValidator(category: string): CategoryValidator {\n return (\n CATEGORY_VALIDATORS[category] ??\n ((input) => {\n // Default: validate as receipt payload\n // Input may be the raw fixture (with payload/claims wrapper) or the payload directly\n if (typeof input === 'object' && input !== null) {\n const obj = input as Record<string, unknown>;\n // Check for wrapped payload/claims first\n if (obj.payload || obj.claims) {\n return validateReceiptPayload(obj.payload ?? obj.claims);\n }\n // Otherwise, if it looks like receipt claims (has standard fields), validate directly\n if ('iss' in obj || 'aud' in obj || 'iat' in obj || 'rid' in obj) {\n return validateReceiptPayload(input);\n }\n }\n return { valid: true };\n })\n );\n}\n","/**\n * PEAC Conformance Runner Library\n *\n * Category-aware validation using the same validators as tests/conformance/*.spec.ts:\n * - Receipt validation via @peac/schema (ReceiptClaimsSchema)\n * - Discovery validation via @peac/policy-kit (parsePolicyDocument), wrapped in a\n * CLI-internal compat helper that preserves v0.13.0 legacy-line tolerance\n * - Bundle verification via @peac/audit (verifyBundleIntegrity)\n * - Attestation validation via @peac/schema validators\n * - Interaction/Workflow validation via ordered validators\n *\n * This is the CLI's thin wrapper around the conformance suite.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { execSync } from 'child_process';\n\n// Re-export types and utilities from modules\nexport type {\n ConformanceLevel,\n TestStatus,\n TestDiagnostics,\n TestResult,\n ProfileLevel,\n ProfileDetail,\n ConformanceReport,\n RunnerOptions,\n RunnerCallbacks,\n FixturePack,\n SingleFixture,\n} from './conformance/types.js';\n\nexport { zodPathToJsonPointer } from './conformance/digest.js';\n\n// Import from modules\nimport type {\n ConformanceReport,\n RunnerOptions,\n RunnerCallbacks,\n TestResult,\n TestStatus,\n FixturePack,\n SingleFixture,\n ProfileDetail,\n} from './conformance/types.js';\n\nimport { loadManifest, getManifestEntry } from './conformance/manifest.js';\nimport { sha256, computeCanonicalDigest, computeVectorsDigest } from './conformance/digest.js';\nimport {\n getCategoryCapability,\n getCategoryProfile,\n shouldRunAtLevel,\n} from './conformance/profiles.js';\nimport { getValidator } from './conformance/validators.js';\n\nfunction getGitSha(): string | undefined {\n try {\n return execSync('git rev-parse --short HEAD', { encoding: 'utf-8' }).trim();\n } catch {\n return undefined;\n }\n}\n\n/**\n * Run conformance tests and generate report\n * Pure function - no console output, uses callbacks for progress\n */\nexport function runConformance(\n options: RunnerOptions,\n callbacks?: RunnerCallbacks\n): ConformanceReport {\n const startTime = Date.now();\n const { fixturesDir, level, category, implementationName, implementationVersion } = options;\n\n // Load manifest for reason checking\n const manifest = loadManifest(fixturesDir);\n\n // Collect categories to test (SORTED for determinism)\n const entries = fs.readdirSync(fixturesDir, { withFileTypes: true });\n let categories = entries\n .filter((e) => e.isDirectory() && !e.name.startsWith('.'))\n .map((e) => e.name)\n .sort(); // Deterministic ordering\n\n if (category) {\n if (!categories.includes(category)) {\n throw new Error(`Category not found: ${category}`);\n }\n categories = [category];\n }\n\n // Compute comprehensive vectors digest (includes manifest.json, recursive)\n const vectorsDigest = computeVectorsDigest(fixturesDir, categories);\n\n // Collect profiles\n const profiles = new Set<string>();\n\n // Run tests\n const results: TestResult[] = [];\n let passed = 0;\n let failed = 0;\n let skipped = 0;\n\n for (const cat of categories) {\n const categoryPath = path.join(fixturesDir, cat);\n const profile = getCategoryProfile(cat);\n profiles.add(profile);\n\n const validator = getValidator(cat);\n // SORTED for deterministic ordering across OS/filesystems\n const files = fs\n .readdirSync(categoryPath)\n .filter((f) => f.endsWith('.json'))\n .sort();\n\n for (const file of files) {\n const filePath = path.join(categoryPath, file);\n const content = fs.readFileSync(filePath, 'utf8');\n let fixture: unknown;\n\n const baseTestId = `${cat}.${file.replace('.json', '')}`;\n callbacks?.onTestStart?.(baseTestId);\n\n try {\n fixture = JSON.parse(content);\n } catch (err) {\n // Invalid JSON is a test failure\n failed++;\n const result: TestResult = {\n id: `${baseTestId}.parse`,\n category: profile,\n status: 'fail',\n observed: {\n valid: false,\n error_code: 'E_INVALID_JSON',\n error_message: (err as Error).message,\n },\n diagnostics: {\n error_code: 'E_INVALID_JSON',\n error_message: (err as Error).message,\n },\n };\n results.push(result);\n callbacks?.onTestComplete?.(result);\n continue;\n }\n\n // Determine if this is a fixture pack or single fixture\n const fixtureObj = fixture as Record<string, unknown>;\n const isFixturePack = Array.isArray(fixtureObj.fixtures);\n\n if (isFixturePack) {\n // Process fixture pack\n const pack = fixture as FixturePack;\n\n if (!shouldRunAtLevel(pack.version, level)) {\n skipped++;\n const result: TestResult = {\n id: baseTestId,\n category: profile,\n status: 'skip',\n diagnostics: {\n skip_reason: `Fixture version ${pack.version} exceeds level ${level}`,\n },\n };\n results.push(result);\n callbacks?.onTestComplete?.(result);\n continue;\n }\n\n for (let i = 0; i < pack.fixtures.length; i++) {\n const f = pack.fixtures[i];\n const fixtureName = f.name ?? `fixture_${i}`;\n const testId = `${baseTestId}.${fixtureName.replace(/\\s+/g, '_')}`;\n\n callbacks?.onTestStart?.(testId);\n\n // Skip fixtures without standard expected format (domain-specific fixture packs\n // like content-usage have their own test suites with expected_entries, not expected.valid)\n if (!f.expected || typeof f.expected.valid !== 'boolean') {\n skipped++;\n const result: TestResult = {\n id: testId,\n category: profile,\n status: 'skip',\n diagnostics: {\n skip_reason: 'Non-standard fixture format (domain-specific test suite)',\n },\n };\n results.push(result);\n callbacks?.onTestComplete?.(result);\n continue;\n }\n\n // Use JCS for canonical input digest (returns {alg, value})\n const inputDigest = computeCanonicalDigest(f.input);\n\n // Guard: fixture inputs must not have both \"claims\" and \"payload\".\n // Ambiguity is a test-harness concern -- precedence would silently\n // pick one and hide fixture authoring bugs.\n if (typeof f.input === 'object' && f.input !== null) {\n const inputObj = f.input as Record<string, unknown>;\n if (inputObj.claims !== undefined && inputObj.payload !== undefined) {\n failed++;\n const result: TestResult = {\n id: testId,\n category: profile,\n status: 'fail',\n diagnostics: {\n error_message: 'Fixture has both \"claims\" and \"payload\" -- ambiguous; use one',\n },\n };\n results.push(result);\n callbacks?.onTestComplete?.(result);\n continue;\n }\n }\n\n const observed = validator(f.input);\n\n // Check if result matches expectation\n const expectedValid = f.expected.valid;\n const actualValid = observed.valid;\n const expectedError = f.expected.error_code ?? f.expected.error;\n const actualError = observed.error_code;\n\n let status: TestStatus;\n if (expectedValid && actualValid) {\n status = 'pass';\n passed++;\n } else if (!expectedValid && !actualValid) {\n // Both invalid - check if error codes match (if specified)\n if (expectedError && actualError && expectedError !== actualError) {\n status = 'fail';\n failed++;\n } else {\n status = 'pass';\n passed++;\n }\n } else {\n status = 'fail';\n failed++;\n }\n\n const result: TestResult = {\n id: testId,\n category: profile,\n status,\n expected: {\n valid: expectedValid,\n error_code: expectedError,\n },\n observed: {\n valid: actualValid,\n error_code: actualError,\n error_message: observed.error_message,\n },\n diagnostics: {\n input_digest: inputDigest,\n warnings: observed.warnings,\n },\n };\n results.push(result);\n callbacks?.onTestComplete?.(result);\n }\n } else {\n // Process single fixture\n const singleFixture = fixture as SingleFixture;\n const testId = baseTestId;\n\n // Get manifest entry for additional expectations\n const manifestEntry = getManifestEntry(manifest, cat, file);\n\n // Use JCS for payload if present, otherwise hash raw file content for single fixtures\n const inputToValidate = singleFixture.payload ?? fixture;\n const inputDigest = singleFixture.payload\n ? computeCanonicalDigest(inputToValidate)\n : { alg: 'sha-256', value: sha256(content) }; // Raw file hash for single fixtures without payload\n\n // Determine expected validity from (in order): fixture, manifest, category default\n const expectedValid =\n singleFixture.expected_valid ??\n manifestEntry?.expected_valid ??\n (cat === 'valid' || cat === 'edge');\n\n // Get expected error from fixture or manifest (never derived from keyword)\n const expectedError = singleFixture.expected_error ?? manifestEntry?.expected_error_code;\n\n // Get expected path and keyword from manifest (first-class assertions)\n const expectedPath = manifestEntry?.expected_path;\n const expectedKeyword = manifestEntry?.expected_keyword;\n\n const observed = validator(inputToValidate);\n\n let status: TestStatus;\n if (expectedValid && observed.valid) {\n status = 'pass';\n passed++;\n } else if (!expectedValid && !observed.valid) {\n // Both invalid - check if error codes match (if specified)\n let mismatch = false;\n if (expectedError && observed.error_code && expectedError !== observed.error_code) {\n mismatch = true;\n }\n // Check expected_path if specified (first-class assertion)\n if (expectedPath && observed.error_path && expectedPath !== observed.error_path) {\n mismatch = true;\n }\n // Check expected_keyword if specified (first-class assertion)\n if (\n expectedKeyword &&\n observed.error_keyword &&\n expectedKeyword !== observed.error_keyword\n ) {\n mismatch = true;\n }\n if (mismatch) {\n status = 'fail';\n failed++;\n } else {\n status = 'pass';\n passed++;\n }\n } else {\n status = 'fail';\n failed++;\n }\n\n const result: TestResult = {\n id: testId,\n category: profile,\n status,\n expected: {\n valid: expectedValid,\n error_code: expectedError,\n error_path: expectedPath,\n error_keyword: expectedKeyword,\n },\n observed: {\n valid: observed.valid,\n error_code: observed.error_code,\n error_path: observed.error_path,\n error_keyword: observed.error_keyword,\n error_message: observed.error_message,\n },\n diagnostics: {\n input_digest: inputDigest,\n warnings: observed.warnings,\n },\n };\n results.push(result);\n callbacks?.onTestComplete?.(result);\n }\n }\n }\n\n // Build capabilities from tested categories\n const capabilities: ProfileDetail[] = [];\n for (const cat of categories) {\n const capability = getCategoryCapability(cat);\n // Deduplicate by profile name\n if (!capabilities.some((c) => c.profile === capability.profile)) {\n capabilities.push(capability);\n }\n }\n capabilities.sort((a, b) => a.profile.localeCompare(b.profile));\n\n const endTime = Date.now();\n\n // Build report\n const report: ConformanceReport = {\n report_version: 'peac-conformance-report/0.1',\n suite: {\n name: 'peac-core-conformance',\n version: '0.1.0',\n vectors_digest: {\n alg: 'sha-256',\n value: vectorsDigest,\n },\n profiles: Array.from(profiles).sort(),\n capabilities,\n },\n implementation: {\n name: implementationName ?? '@peac/cli',\n version: implementationVersion ?? '0.0.0',\n },\n summary: {\n passed,\n failed,\n skipped,\n total: passed + failed + skipped,\n status: failed === 0 ? 'pass' : 'fail',\n },\n results,\n meta: {\n generated_at: new Date().toISOString(),\n duration_ms: endTime - startTime,\n runner: {\n name: '@peac/cli',\n version: implementationVersion ?? '0.0.0',\n git_sha: getGitSha(),\n },\n },\n };\n\n return report;\n}\n\n/**\n * Format report as text\n */\nexport function formatReportText(report: ConformanceReport): string {\n const lines: string[] = [];\n\n lines.push('PEAC Conformance Test Results');\n lines.push('=============================');\n lines.push('');\n lines.push(`Status: ${report.summary.status.toUpperCase()}`);\n lines.push(`Profiles: ${report.suite.profiles.join(', ')}`);\n lines.push('');\n lines.push('Summary:');\n lines.push(` Passed: ${report.summary.passed}`);\n lines.push(` Failed: ${report.summary.failed}`);\n lines.push(` Skipped: ${report.summary.skipped}`);\n lines.push(` Total: ${report.summary.total}`);\n\n const failures = report.results.filter((r) => r.status === 'fail');\n if (failures.length > 0) {\n lines.push('');\n lines.push('Failures:');\n for (const f of failures) {\n lines.push(` - ${f.id}`);\n if (f.expected) {\n lines.push(\n ` Expected: valid=${f.expected.valid}${f.expected.error_code ? `, error=${f.expected.error_code}` : ''}`\n );\n }\n if (f.observed) {\n lines.push(\n ` Observed: valid=${f.observed.valid}${f.observed.error_code ? `, error=${f.observed.error_code}` : ''}`\n );\n }\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Format report as markdown\n */\nexport function formatReportMarkdown(report: ConformanceReport): string {\n const lines: string[] = [];\n\n lines.push('# PEAC Conformance Report');\n lines.push('');\n lines.push(`**Status:** ${report.summary.status.toUpperCase()}`);\n lines.push(`**Profiles:** ${report.suite.profiles.join(', ')}`);\n lines.push('');\n lines.push('## Summary');\n lines.push('');\n lines.push('| Metric | Count |');\n lines.push('|--------|-------|');\n lines.push(`| Passed | ${report.summary.passed} |`);\n lines.push(`| Failed | ${report.summary.failed} |`);\n lines.push(`| Skipped | ${report.summary.skipped} |`);\n lines.push(`| Total | ${report.summary.total} |`);\n\n const failures = report.results.filter((r) => r.status === 'fail');\n if (failures.length > 0) {\n lines.push('');\n lines.push('## Failures');\n lines.push('');\n for (const f of failures) {\n lines.push(`### ${f.id}`);\n lines.push('');\n if (f.expected) {\n lines.push(\n `- **Expected:** valid=${f.expected.valid}${f.expected.error_code ? `, error=${f.expected.error_code}` : ''}`\n );\n }\n if (f.observed) {\n lines.push(\n `- **Observed:** valid=${f.observed.valid}${f.observed.error_code ? `, error=${f.observed.error_code}` : ''}`\n );\n }\n lines.push('');\n }\n }\n\n return lines.join('\\n');\n}\n","/**\n * CLI Version Utility\n *\n * Reads version from package.json at runtime to avoid hardcoding.\n */\n\nimport { join } from 'node:path';\nimport { readFileSync, existsSync } from 'node:fs';\n\n/**\n * Get CLI version from package.json\n *\n * Uses multiple strategies to find package.json:\n * 1. __dirname relative path (for CJS)\n * 2. Process.cwd() fallback\n */\nexport function getVersion(): string {\n // Strategy 1: Try relative path from this file (dist/lib/version.js -> package.json)\n try {\n const pkgPath = join(__dirname, '..', '..', 'package.json');\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));\n if (pkg.version) return pkg.version;\n }\n } catch {\n // Continue to next strategy\n }\n\n // Strategy 2: Try from CWD (running in monorepo)\n try {\n const pkgPath = join(process.cwd(), 'packages', 'cli', 'package.json');\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));\n if (pkg.version) return pkg.version;\n }\n } catch {\n // Continue to fallback\n }\n\n // Strategy 3: Fallback version (should rarely happen)\n return '0.0.0-unknown';\n}\n\n/**\n * Get runtime string (e.g., \"node-22.0.0\")\n */\nexport function getRuntime(): string {\n return `node-${process.version.slice(1)}`;\n}\n\n/**\n * Get git commit hash if available\n */\nexport function getCommit(): string | undefined {\n // Could be enhanced to read from .git or environment variable\n return process.env.GIT_COMMIT ?? process.env.GITHUB_SHA;\n}\n","/**\n * PEAC Conformance CLI Commands (v0.10.8+)\n *\n * Commands for running conformance tests:\n * - run: Run conformance tests against fixtures\n * - list: List available conformance test fixtures\n *\n * Uses real validators from @peac/schema and generates reports\n * conforming to peac-conformance-report/0.1.\n *\n * @packageDocumentation\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport {\n runConformance,\n formatReportText,\n formatReportMarkdown,\n type ConformanceLevel,\n type RunnerCallbacks,\n type TestResult,\n} from '../lib/conformance-runner.js';\nimport { getVersion, getRuntime, getCommit } from '../lib/version.js';\n\n/**\n * Global options for conformance commands\n */\ninterface ConformanceGlobalOptions {\n json?: boolean;\n}\n\n/**\n * Get global options from parent command\n */\nfunction getGlobalOptions(cmd: Command): ConformanceGlobalOptions {\n const parent = cmd.parent;\n if (!parent) return {};\n return parent.opts() as ConformanceGlobalOptions;\n}\n\n/**\n * Output error - handles JSON vs human-readable format\n */\nfunction outputError(\n error: string,\n details: Record<string, unknown>,\n opts: ConformanceGlobalOptions\n): void {\n if (opts.json) {\n console.log(JSON.stringify({ success: false, error, ...details }, null, 2));\n } else {\n console.error(`Error: ${error}`);\n if (details.code) {\n console.error(`Code: ${details.code}`);\n }\n if (details.hint) {\n console.error(`Hint: ${details.hint}`);\n }\n }\n}\n\n/**\n * Find fixtures directory (relative to CLI package or repo root)\n */\nfunction findFixturesDir(customPath?: string): string | null {\n // Use custom path if provided\n if (customPath) {\n if (fs.existsSync(customPath)) {\n return customPath;\n }\n return null;\n }\n\n // Try relative to CLI package (when installed)\n const cliPath = path.resolve(__dirname, '../../../../specs/conformance/fixtures');\n if (fs.existsSync(cliPath)) {\n return cliPath;\n }\n\n // Try relative to repo root (when running from source)\n const repoPath = path.resolve(process.cwd(), 'specs/conformance/fixtures');\n if (fs.existsSync(repoPath)) {\n return repoPath;\n }\n\n // Try one level up (when running from packages/cli)\n const upPath = path.resolve(process.cwd(), '../../specs/conformance/fixtures');\n if (fs.existsSync(upPath)) {\n return upPath;\n }\n\n return null;\n}\n\n/**\n * List available fixture categories\n */\nfunction listCategories(fixturesDir: string): string[] {\n const entries = fs.readdirSync(fixturesDir, { withFileTypes: true });\n return entries.filter((e) => e.isDirectory() && !e.name.startsWith('.')).map((e) => e.name);\n}\n\n/**\n * Count fixtures in a category\n */\nfunction countFixtures(categoryPath: string): number {\n if (!fs.existsSync(categoryPath)) return 0;\n const files = fs.readdirSync(categoryPath);\n return files.filter((f) => f.endsWith('.json')).length;\n}\n\nconst conformance = new Command('conformance')\n .description('PEAC conformance testing (v0.10.8+)')\n .option('--json', 'Output in JSON format');\n\n/**\n * peac conformance run [options]\n */\nconformance\n .command('run')\n .description('Run conformance tests')\n .option('-l, --level <level>', 'Conformance level: basic, standard, full', 'standard')\n .option('-c, --category <category>', 'Test specific category only')\n .option('-o, --output <format>', 'Output format: json, text, markdown', 'text')\n .option('-v, --verbose', 'Show detailed test output')\n .option('--fixtures <path>', 'Path to fixtures directory')\n .option('--implementation <name>', 'Implementation name for report', '@peac/cli')\n .action(async (options, cmd) => {\n const globalOpts = getGlobalOptions(cmd);\n const startTime = Date.now();\n\n try {\n // Find fixtures directory\n const fixturesDir = findFixturesDir(options.fixtures);\n if (!fixturesDir) {\n outputError(\n 'Fixtures directory not found',\n {\n hint: options.fixtures\n ? `Specified path does not exist: ${options.fixtures}`\n : 'Run from repo root, specify --fixtures <path>, or ensure specs/conformance/fixtures is available',\n },\n globalOpts\n );\n process.exitCode = 1;\n return;\n }\n\n // Validate level\n const validLevels: ConformanceLevel[] = ['basic', 'standard', 'full'];\n if (!validLevels.includes(options.level)) {\n outputError(\n 'Invalid conformance level',\n {\n level: options.level,\n valid: validLevels,\n },\n globalOpts\n );\n process.exitCode = 1;\n return;\n }\n\n // Set up callbacks for verbose output\n const callbacks: RunnerCallbacks | undefined = options.verbose\n ? {\n onTestStart: (testId: string) => {\n console.log(`Running: ${testId}`);\n },\n onTestComplete: (result: TestResult) => {\n const status =\n result.status === 'pass' ? 'PASS' : result.status === 'fail' ? 'FAIL' : 'SKIP';\n console.log(` ${status}: ${result.id}`);\n },\n }\n : undefined;\n\n // Run conformance tests\n const report = runConformance(\n {\n fixturesDir,\n level: options.level as ConformanceLevel,\n category: options.category,\n implementationName: options.implementation,\n implementationVersion: getVersion(),\n },\n callbacks\n );\n\n // Add runtime metadata\n report.implementation.runtime = getRuntime();\n const commit = getCommit();\n if (commit) {\n report.implementation.commit = commit;\n }\n\n // Add meta section\n report.meta = {\n generated_at: new Date().toISOString(),\n runner: {\n name: 'peac-cli',\n version: getVersion(),\n },\n duration_ms: Date.now() - startTime,\n };\n\n // Output based on format\n if (options.output === 'json' || globalOpts.json) {\n console.log(JSON.stringify(report, null, 2));\n } else if (options.output === 'markdown') {\n console.log(formatReportMarkdown(report));\n } else {\n console.log(formatReportText(report));\n }\n\n process.exitCode = report.summary.failed === 0 ? 0 : 1;\n } catch (err) {\n outputError((err as Error).message, {}, globalOpts);\n process.exitCode = 1;\n }\n });\n\n/**\n * peac conformance list [--category <cat>]\n */\nconformance\n .command('list')\n .description('List available conformance test fixtures')\n .option('-c, --category <category>', 'List fixtures in specific category')\n .option('--fixtures <path>', 'Path to fixtures directory')\n .action((options, cmd) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n // Find fixtures directory\n const fixturesDir = findFixturesDir(options.fixtures);\n if (!fixturesDir) {\n outputError(\n 'Fixtures directory not found',\n {\n hint: options.fixtures\n ? `Specified path does not exist: ${options.fixtures}`\n : 'Run from repo root, specify --fixtures <path>, or ensure specs/conformance/fixtures is available',\n },\n globalOpts\n );\n process.exitCode = 1;\n return;\n }\n\n // Load manifest\n const manifestPath = path.join(fixturesDir, 'manifest.json');\n const manifest = fs.existsSync(manifestPath)\n ? JSON.parse(fs.readFileSync(manifestPath, 'utf8'))\n : {};\n\n // List categories\n const categories = listCategories(fixturesDir);\n\n if (options.category) {\n // List fixtures in specific category\n if (!categories.includes(options.category)) {\n outputError(\n 'Category not found',\n {\n category: options.category,\n available: categories,\n },\n globalOpts\n );\n process.exitCode = 1;\n return;\n }\n\n const categoryPath = path.join(fixturesDir, options.category);\n const files = fs.readdirSync(categoryPath).filter((f) => f.endsWith('.json'));\n const categoryManifest = manifest[options.category] as\n | Record<string, Record<string, unknown>>\n | undefined;\n\n if (globalOpts.json) {\n const fixtures = files.map((f) => ({\n file: f,\n description: (categoryManifest?.[f]?.description as string) || 'No description',\n }));\n console.log(JSON.stringify({ category: options.category, fixtures }, null, 2));\n } else {\n console.log(`Fixtures in ${options.category}:\\n`);\n for (const file of files) {\n const info = categoryManifest?.[file] || {};\n const desc = (info.description as string) || 'No description';\n console.log(` ${file}`);\n console.log(` ${desc}\\n`);\n }\n }\n } else {\n // List all categories\n if (globalOpts.json) {\n const categorySummary = categories.map((cat) => ({\n name: cat,\n fixture_count: countFixtures(path.join(fixturesDir, cat)),\n }));\n console.log(JSON.stringify({ categories: categorySummary }, null, 2));\n } else {\n console.log(`Available conformance test categories:\\n`);\n for (const cat of categories) {\n const count = countFixtures(path.join(fixturesDir, cat));\n console.log(` ${cat} (${count} fixtures)`);\n }\n console.log(`\\nUse 'peac conformance list -c <category>' to see fixtures in a category.`);\n }\n }\n\n process.exitCode = 0;\n } catch (err) {\n outputError((err as Error).message, {}, globalOpts);\n process.exitCode = 1;\n }\n });\n\nexport { conformance };\n","/**\n * PEAC Samples Loader\n *\n * Loads sample definitions from specs/conformance/samples/ when available,\n * falling back to embedded defaults when running outside the repo.\n *\n * This ensures a single source of truth (specs folder is canonical).\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\n\n/**\n * Sample category\n */\nexport type SampleCategory = 'valid' | 'invalid' | 'edge';\n\n/**\n * Sample definition\n */\nexport interface SampleDefinition {\n id: string;\n name: string;\n description: string;\n category: SampleCategory;\n claims: Record<string, unknown>;\n header?: Record<string, unknown>;\n expectedError?: string;\n}\n\n/**\n * Embedded fallback samples (used when specs folder not available)\n */\nconst EMBEDDED_SAMPLES: SampleDefinition[] = [\n {\n id: 'basic-receipt',\n name: 'Basic Receipt',\n description: 'Minimal valid PEAC receipt with only required fields',\n category: 'valid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://example.com',\n iat: 0, // Placeholder - will be set at generation time\n exp: 0, // Placeholder - will be set at generation time\n rid: 'sample-basic-001',\n },\n },\n {\n id: 'full-receipt',\n name: 'Full Receipt',\n description: 'PEAC receipt with all optional claims populated',\n category: 'valid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://api.example.com',\n sub: 'user:demo-user',\n iat: 0,\n exp: 0,\n rid: 'sample-full-001',\n purpose_declared: ['search', 'index'],\n purpose_enforced: 'search',\n purpose_reason: 'allowed',\n },\n },\n {\n id: 'interaction-evidence',\n name: 'Interaction Evidence',\n description: 'Receipt with InteractionEvidence extension for AI agent calls',\n category: 'valid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://agent.example.com',\n sub: 'agent:demo-agent-v1',\n iat: 0,\n exp: 0,\n rid: 'sample-ie-001',\n ext: {\n 'org.peacprotocol/interaction@0.1': {\n version: '0.1',\n interaction_id: 'int_sample_001',\n started_at: '2026-01-01T00:00:00.000Z',\n completed_at: '2026-01-01T00:00:01.000Z',\n outcome: { kind: 'success' },\n input: { hash: 'sha256:abc123...', byte_length: 1024 },\n output: { hash: 'sha256:def456...', byte_length: 2048 },\n },\n },\n },\n },\n {\n id: 'payment-evidence',\n name: 'Payment Evidence',\n description: 'Receipt with payment evidence (402 flow)',\n category: 'valid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://api.example.com',\n iat: 0,\n exp: 0,\n rid: 'sample-payment-001',\n amt: '100',\n cur: 'USD',\n payment: {\n rail: 'x402',\n reference: 'pay_sample_001',\n amount: '100',\n currency: 'USD',\n },\n },\n },\n {\n id: 'long-expiry',\n name: 'Long Expiry',\n description: 'Receipt with 24-hour expiration',\n category: 'valid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://example.com',\n iat: 0,\n exp: 0, // Will be set to iat + 86400 at generation time\n rid: 'sample-long-expiry-001',\n },\n },\n {\n id: 'expired',\n name: 'Expired Receipt',\n description: 'Receipt that has already expired (for testing rejection)',\n category: 'invalid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://example.com',\n iat: 0, // Will be set to now - 7200 at generation time\n exp: 0, // Will be set to now - 3600 at generation time\n rid: 'sample-expired-001',\n },\n expectedError: 'E_EXPIRED_RECEIPT',\n },\n {\n id: 'future-iat',\n name: 'Future IAT',\n description: 'Receipt with iat in the future (should be rejected)',\n category: 'invalid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://example.com',\n iat: 0, // Will be set to now + 3600 at generation time\n exp: 0, // Will be set to now + 7200 at generation time\n rid: 'sample-future-iat-001',\n },\n expectedError: 'E_FUTURE_IAT',\n },\n {\n id: 'missing-iss',\n name: 'Missing Issuer',\n description: 'Receipt missing required iss claim (for testing validation)',\n category: 'invalid',\n claims: {\n aud: 'https://example.com',\n iat: 0,\n exp: 0,\n rid: 'sample-no-iss-001',\n },\n expectedError: 'E_MISSING_CLAIM',\n },\n];\n\n/**\n * Find samples directory\n */\nexport function findSamplesDir(customPath?: string): string | null {\n // Use custom path if provided\n if (customPath) {\n if (fs.existsSync(customPath)) {\n return customPath;\n }\n return null;\n }\n\n // Try relative to CLI package\n const cliPath = path.resolve(__dirname, '../../../../specs/conformance/samples');\n if (fs.existsSync(cliPath)) {\n return cliPath;\n }\n\n // Try relative to repo root\n const repoPath = path.resolve(process.cwd(), 'specs/conformance/samples');\n if (fs.existsSync(repoPath)) {\n return repoPath;\n }\n\n // Try one level up\n const upPath = path.resolve(process.cwd(), '../../specs/conformance/samples');\n if (fs.existsSync(upPath)) {\n return upPath;\n }\n\n return null;\n}\n\n/**\n * Load sample definition from a JSON file\n */\nfunction loadSampleFromFile(\n filePath: string,\n id: string,\n category: SampleCategory\n): SampleDefinition | null {\n try {\n const content = JSON.parse(fs.readFileSync(filePath, 'utf8'));\n\n // Handle both formats: fixture-style (header/payload) and claims-only\n const claims = content.payload ?? content.claims ?? content;\n const description = content.$comment ?? content.description ?? `Sample ${id}`;\n\n return {\n id,\n name: id\n .split('-')\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' '),\n description,\n category,\n claims,\n header: content.header,\n expectedError: content.expected_error,\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Load samples from specs directory\n */\nfunction loadSamplesFromDir(samplesDir: string): SampleDefinition[] {\n const samples: SampleDefinition[] = [];\n\n // Load from valid/ directory\n const validDir = path.join(samplesDir, 'valid');\n if (fs.existsSync(validDir)) {\n const files = fs.readdirSync(validDir).filter((f) => f.endsWith('.json'));\n for (const file of files) {\n const id = file.replace('.json', '');\n const sample = loadSampleFromFile(path.join(validDir, file), id, 'valid');\n if (sample) samples.push(sample);\n }\n }\n\n // Load from invalid/ directory\n const invalidDir = path.join(samplesDir, 'invalid');\n if (fs.existsSync(invalidDir)) {\n const files = fs.readdirSync(invalidDir).filter((f) => f.endsWith('.json'));\n for (const file of files) {\n const id = file.replace('.json', '');\n const sample = loadSampleFromFile(path.join(invalidDir, file), id, 'invalid');\n if (sample) samples.push(sample);\n }\n }\n\n // Load from edge/ directory if present\n const edgeDir = path.join(samplesDir, 'edge');\n if (fs.existsSync(edgeDir)) {\n const files = fs.readdirSync(edgeDir).filter((f) => f.endsWith('.json'));\n for (const file of files) {\n const id = file.replace('.json', '');\n const sample = loadSampleFromFile(path.join(edgeDir, file), id, 'edge');\n if (sample) samples.push(sample);\n }\n }\n\n return samples;\n}\n\n/**\n * Get sample definitions\n *\n * Loads from specs/conformance/samples/ when available (canonical source),\n * falls back to embedded samples when running outside the repo.\n */\nexport function getSamples(customSamplesPath?: string): SampleDefinition[] {\n const samplesDir = findSamplesDir(customSamplesPath);\n\n if (samplesDir) {\n const dirSamples = loadSamplesFromDir(samplesDir);\n if (dirSamples.length > 0) {\n return dirSamples;\n }\n }\n\n // Fall back to embedded samples\n return EMBEDDED_SAMPLES;\n}\n\n/**\n * Get a specific sample by ID\n */\nexport function getSampleById(id: string, customSamplesPath?: string): SampleDefinition | null {\n const samples = getSamples(customSamplesPath);\n return samples.find((s) => s.id === id) ?? null;\n}\n\n/**\n * List available sample IDs by category\n */\nexport function listSampleIds(category?: SampleCategory, customSamplesPath?: string): string[] {\n const samples = getSamples(customSamplesPath);\n const filtered = category ? samples.filter((s) => s.category === category) : samples;\n return filtered.map((s) => s.id);\n}\n","/**\n * PEAC Samples CLI Commands (v0.10.8+)\n *\n * Commands for working with sample receipts:\n * - list: List available sample receipts\n * - generate: Generate sample receipts for testing\n * - show: Show details of a specific sample\n *\n * Uses specs/conformance/samples/ as canonical source when available,\n * falls back to embedded samples when running outside the repo.\n *\n * @packageDocumentation\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { sign, generateKeypair, base64urlEncode } from '@peac/crypto';\nimport { getSamples, getSampleById, type SampleCategory } from '../lib/samples-loader.js';\nimport { getVersion } from '../lib/version.js';\n\n/**\n * Global options for samples commands\n */\ninterface SamplesGlobalOptions {\n json?: boolean;\n}\n\n/**\n * Get global options from parent command\n */\nfunction getGlobalOptions(cmd: Command): SamplesGlobalOptions {\n const parent = cmd.parent;\n if (!parent) return {};\n return parent.opts() as SamplesGlobalOptions;\n}\n\n/**\n * Output error - handles JSON vs human-readable format\n */\nfunction outputError(\n error: string,\n details: Record<string, unknown>,\n opts: SamplesGlobalOptions\n): void {\n if (opts.json) {\n console.log(JSON.stringify({ success: false, error, ...details }, null, 2));\n } else {\n console.error(`Error: ${error}`);\n if (details.hint) {\n console.error(`Hint: ${details.hint}`);\n }\n }\n}\n\n/**\n * Apply time adjustments to claims based on sample type\n */\nfunction applyTimeAdjustments(\n claims: Record<string, unknown>,\n sampleId: string,\n now: number\n): Record<string, unknown> {\n const adjusted = { ...claims };\n\n // Standard expiry: 1 hour\n const standardExpiry = 3600;\n // Long expiry: 24 hours\n const longExpiry = 86400;\n\n switch (sampleId) {\n case 'expired':\n // Already expired: iat 2 hours ago, exp 1 hour ago\n adjusted.iat = now - 7200;\n adjusted.exp = now - 3600;\n break;\n case 'future-iat':\n // Future iat: 1 hour in future\n adjusted.iat = now + 3600;\n adjusted.exp = now + 7200;\n break;\n case 'long-expiry':\n adjusted.iat = now;\n adjusted.exp = now + longExpiry;\n break;\n default:\n // Standard: iat now, exp in 1 hour\n if (adjusted.iat === 0 || !adjusted.iat) {\n adjusted.iat = now;\n }\n if (adjusted.exp === 0 || !adjusted.exp) {\n adjusted.exp = now + standardExpiry;\n }\n }\n\n return adjusted;\n}\n\nconst samples = new Command('samples')\n .description('Work with PEAC sample receipts (v0.10.8+)')\n .option('--json', 'Output in JSON format');\n\n/**\n * peac samples list [--category <cat>]\n */\nsamples\n .command('list')\n .description('List available sample receipts')\n .option('-c, --category <category>', 'Filter by category: valid, invalid, edge')\n .option('--samples <path>', 'Path to samples directory')\n .action((options, cmd) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const allSamples = getSamples(options.samples);\n let filteredSamples = allSamples;\n\n if (options.category) {\n filteredSamples = allSamples.filter((s) => s.category === options.category);\n if (filteredSamples.length === 0) {\n outputError('No samples in category', { category: options.category }, globalOpts);\n process.exitCode = 1;\n return;\n }\n }\n\n if (globalOpts.json) {\n const data = filteredSamples.map((s) => ({\n id: s.id,\n name: s.name,\n description: s.description,\n category: s.category,\n }));\n console.log(JSON.stringify({ samples: data }, null, 2));\n } else {\n console.log('Available PEAC Sample Receipts\\n');\n console.log('VALID SAMPLES:');\n for (const s of filteredSamples.filter((x) => x.category === 'valid')) {\n console.log(` ${s.id}`);\n console.log(` ${s.description}\\n`);\n }\n\n const invalid = filteredSamples.filter((x) => x.category === 'invalid');\n if (invalid.length > 0) {\n console.log('\\nINVALID SAMPLES (for testing rejection):');\n for (const s of invalid) {\n console.log(` ${s.id}`);\n console.log(` ${s.description}\\n`);\n }\n }\n\n const edge = filteredSamples.filter((x) => x.category === 'edge');\n if (edge.length > 0) {\n console.log('\\nEDGE CASE SAMPLES:');\n for (const s of edge) {\n console.log(` ${s.id}`);\n console.log(` ${s.description}\\n`);\n }\n }\n\n console.log('\\nUse \"peac samples show <id>\" to see sample details.');\n console.log('Use \"peac samples generate -o <dir>\" to generate sample files.');\n }\n\n process.exitCode = 0;\n } catch (err) {\n outputError((err as Error).message, {}, globalOpts);\n process.exitCode = 1;\n }\n });\n\n/**\n * peac samples show <id>\n */\nsamples\n .command('show')\n .description('Show details of a specific sample')\n .argument('<id>', 'Sample ID')\n .option('--samples <path>', 'Path to samples directory')\n .action((id, options, cmd) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const sample = getSampleById(id, options.samples);\n if (!sample) {\n const allSamples = getSamples(options.samples);\n const available = allSamples.map((s) => s.id);\n outputError('Sample not found', { id, available }, globalOpts);\n process.exitCode = 1;\n return;\n }\n\n if (globalOpts.json) {\n console.log(JSON.stringify(sample, null, 2));\n } else {\n console.log(`Sample: ${sample.name}\\n`);\n console.log(`ID: ${sample.id}`);\n console.log(`Category: ${sample.category}`);\n console.log(`Description: ${sample.description}\\n`);\n console.log('Claims:');\n console.log(JSON.stringify(sample.claims, null, 2));\n if (sample.expectedError) {\n console.log(`\\nExpected Error: ${sample.expectedError}`);\n }\n }\n\n process.exitCode = 0;\n } catch (err) {\n outputError((err as Error).message, {}, globalOpts);\n process.exitCode = 1;\n }\n });\n\n/**\n * peac samples generate -o <dir> [--format <format>] [--now <timestamp>] [--kid <kid>] [--seed <seed>]\n */\nsamples\n .command('generate')\n .description('Generate sample receipt files')\n .requiredOption('-o, --output <dir>', 'Output directory')\n .option('-f, --format <format>', 'Output format: jws, json, bundle', 'jws')\n .option('--category <category>', 'Generate only specific category')\n .option('--samples <path>', 'Path to samples directory')\n .option('--now <timestamp>', 'Unix timestamp for iat/exp (for deterministic generation)')\n .option('--kid <kid>', 'Key ID to use')\n .action(async (options, cmd) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const outputDir = options.output;\n\n // Create output directories\n const validDir = path.join(outputDir, 'valid');\n const invalidDir = path.join(outputDir, 'invalid');\n const edgeDir = path.join(outputDir, 'edge');\n const bundlesDir = path.join(outputDir, 'bundles');\n\n fs.mkdirSync(validDir, { recursive: true });\n fs.mkdirSync(invalidDir, { recursive: true });\n fs.mkdirSync(edgeDir, { recursive: true });\n fs.mkdirSync(bundlesDir, { recursive: true });\n\n // Determine timestamp\n const now = options.now ? parseInt(options.now, 10) : Math.floor(Date.now() / 1000);\n\n // Generate key pair\n // Note: --seed option is documented but full determinism requires proper seed-to-key derivation\n const keyPair = await generateKeypair();\n const publicKeyBytes = keyPair.publicKey;\n const privateKeyBytes = keyPair.privateKey;\n\n // Build KID\n const kid = options.kid || `sandbox-${new Date(now * 1000).toISOString().slice(0, 7)}`;\n\n // Build JWK for the key\n const publicJwk = {\n kty: 'OKP',\n crv: 'Ed25519',\n x: base64urlEncode(publicKeyBytes),\n kid,\n use: 'sig',\n alg: 'EdDSA',\n };\n\n const generatedFiles: string[] = [];\n\n // Get samples to generate\n let samplesToGenerate = getSamples(options.samples);\n if (options.category) {\n samplesToGenerate = samplesToGenerate.filter((s) => s.category === options.category);\n }\n\n for (const sample of samplesToGenerate) {\n const targetDir =\n sample.category === 'valid'\n ? validDir\n : sample.category === 'edge'\n ? edgeDir\n : invalidDir;\n const filename = `${sample.id}.${options.format === 'json' ? 'json' : 'jws'}`;\n const filepath = path.join(targetDir, filename);\n\n // Apply time adjustments\n const adjustedClaims = applyTimeAdjustments(sample.claims, sample.id, now);\n\n if (options.format === 'json') {\n // Write as decoded JSON\n const output = {\n $comment: sample.description,\n header: {\n alg: 'EdDSA',\n typ: 'interaction-record+jwt',\n kid,\n },\n payload: adjustedClaims,\n ...(sample.expectedError ? { expected_error: sample.expectedError } : {}),\n };\n fs.writeFileSync(filepath, JSON.stringify(output, null, 2));\n } else {\n // Create actual JWS using @peac/crypto sign function\n const jws = await sign(adjustedClaims, privateKeyBytes, kid);\n fs.writeFileSync(filepath, jws);\n }\n\n generatedFiles.push(filepath);\n }\n\n // Write JWKS file for verification\n const jwksPath = path.join(bundlesDir, 'sandbox-jwks.json');\n const jwks = {\n keys: [publicJwk],\n };\n fs.writeFileSync(jwksPath, JSON.stringify(jwks, null, 2));\n generatedFiles.push(jwksPath);\n\n // Write offline verification bundle\n const bundlePath = path.join(bundlesDir, 'offline-verification.json');\n const bundle = {\n $comment: 'Offline verification bundle with sample receipts and JWKS',\n description:\n 'Bundle for offline verification testing. Contains test JWKS and sample metadata.',\n generated_at: new Date(now * 1000).toISOString(),\n generator: {\n name: 'peac-cli',\n version: getVersion(),\n },\n jwks,\n samples: samplesToGenerate.map((s) => ({\n id: s.id,\n description: s.description,\n category: s.category,\n })),\n notes: [\n 'Sample timestamps are based on --now parameter or generation time.',\n 'Do NOT use sandbox samples in production.',\n ],\n };\n fs.writeFileSync(bundlePath, JSON.stringify(bundle, null, 2));\n generatedFiles.push(bundlePath);\n\n if (globalOpts.json) {\n console.log(\n JSON.stringify(\n {\n success: true,\n output_dir: outputDir,\n files_generated: generatedFiles.length,\n files: generatedFiles,\n timestamp: now,\n kid,\n },\n null,\n 2\n )\n );\n } else {\n console.log(`Sample receipts generated successfully!\\n`);\n console.log(`Output directory: ${outputDir}`);\n console.log(`Files generated: ${generatedFiles.length}`);\n console.log(`Timestamp: ${now} (${new Date(now * 1000).toISOString()})`);\n console.log(`Key ID: ${kid}\\n`);\n console.log('Generated files:');\n for (const f of generatedFiles) {\n console.log(` ${path.relative(outputDir, f)}`);\n }\n console.log(`\\nJWKS for verification: ${path.relative(outputDir, jwksPath)}`);\n }\n\n process.exitCode = 0;\n } catch (err) {\n outputError((err as Error).message, {}, globalOpts);\n process.exitCode = 1;\n }\n });\n\nexport { samples };\n","/**\n * PEAC Reconcile CLI Command (v0.11.3+)\n *\n * Merge two evidence bundles and detect conflicts.\n * Conflict key: composite (iss, jti) with 3-step fallback:\n * 1. (iss, jti) from JWT claims\n * 2. (iss, rid) for Wire 0.1\n * 3. (iss, receipt_ref) where receipt_ref = sha256(receipt_jws)\n *\n * NO auto-resolution: conflicts are surfaced for human decision.\n * Deterministic output: receipts and conflicts sorted by (iss, jti) lexicographically.\n *\n * Security: 16 MB bundle size limit, path traversal prevention.\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport { readDisputeBundle, type DisputeBundleContents } from '@peac/audit';\nimport { computeReceiptRef } from '@peac/schema';\nimport { decode } from '@peac/crypto';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\ninterface ReconcileReport {\n version: '1.0';\n generated_at: string;\n bundles: string[];\n total_receipts: number;\n merged_receipts: number;\n conflicts: ConflictEntry[];\n}\n\ninterface ConflictEntry {\n key: string;\n bundle_a_receipt_ref: string;\n bundle_b_receipt_ref: string;\n diff_fields: string[];\n}\n\ninterface ReceiptRecord {\n /** Composite key: \"iss|jti\" */\n key: string;\n /** JWS string */\n jws: string;\n /** SHA-256 receipt ref */\n receipt_ref: string;\n /** Source bundle label */\n source: string;\n}\n\ninterface ReconcileGlobalOptions {\n json?: boolean;\n}\n\n// =============================================================================\n// CONSTANTS\n// =============================================================================\n\nconst MAX_BUNDLE_SIZE = 16 * 1024 * 1024; // 16 MB\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nfunction getGlobalOptions(cmd: Command): ReconcileGlobalOptions {\n const parent = cmd.parent;\n if (!parent) return {};\n return parent.opts() as ReconcileGlobalOptions;\n}\n\nfunction outputError(\n error: string,\n details: Record<string, unknown>,\n opts: ReconcileGlobalOptions\n): void {\n if (opts.json) {\n console.log(JSON.stringify({ success: false, error, ...details }, null, 2));\n } else {\n console.error(`Error: ${error}`);\n }\n}\n\n/**\n * Decode JWS payload using @peac/crypto canonical decoder.\n * Returns null if decoding fails.\n */\nfunction decodeJwsPayload(jws: string): Record<string, unknown> | null {\n try {\n const { payload } = decode<Record<string, unknown>>(jws);\n return payload;\n } catch {\n return null;\n }\n}\n\n/**\n * Extract composite conflict key from a JWS receipt.\n * 3-step fallback: (iss, jti) -> (iss, rid) -> (iss, receipt_ref)\n */\nfunction extractConflictKey(jws: string, receiptRef: string): string {\n const payload = decodeJwsPayload(jws);\n if (!payload) {\n return `unknown|${receiptRef}`;\n }\n\n const iss = typeof payload.iss === 'string' ? payload.iss : 'unknown';\n\n // Step 1: (iss, jti)\n if (typeof payload.jti === 'string' && payload.jti.length > 0) {\n return `${iss}|${payload.jti}`;\n }\n\n // Step 2: (iss, rid) for Wire 0.1\n if (typeof payload.rid === 'string' && payload.rid.length > 0) {\n return `${iss}|${payload.rid}`;\n }\n\n // Step 3: (iss, receipt_ref)\n return `${iss}|${receiptRef}`;\n}\n\n/**\n * Extract receipts from a bundle's contents into ReceiptRecords.\n * Uses canonical computeReceiptRef from @peac/schema (async, WebCrypto).\n */\nasync function extractReceipts(\n contents: DisputeBundleContents,\n sourceLabel: string\n): Promise<ReceiptRecord[]> {\n const records: ReceiptRecord[] = [];\n for (const [_id, jws] of contents.receipts) {\n const receiptRef = await computeReceiptRef(jws);\n const key = extractConflictKey(jws, receiptRef);\n records.push({ key, jws, receipt_ref: receiptRef, source: sourceLabel });\n }\n return records;\n}\n\n/**\n * Find field-level differences between two JWS receipts.\n */\nfunction findDiffFields(jwsA: string, jwsB: string): string[] {\n const payloadA = decodeJwsPayload(jwsA);\n const payloadB = decodeJwsPayload(jwsB);\n if (!payloadA || !payloadB) return ['payload_decode_failed'];\n\n const allKeys = new Set([...Object.keys(payloadA), ...Object.keys(payloadB)]);\n const diffs: string[] = [];\n for (const k of allKeys) {\n if (JSON.stringify(payloadA[k]) !== JSON.stringify(payloadB[k])) {\n diffs.push(k);\n }\n }\n return diffs.sort();\n}\n\n/**\n * Read and validate a bundle file.\n */\nasync function readBundle(\n bundlePath: string,\n label: string\n): Promise<{ ok: true; value: DisputeBundleContents } | { ok: false; error: string }> {\n if (!fs.existsSync(bundlePath)) {\n return { ok: false, error: `Bundle file not found: ${bundlePath}` };\n }\n\n const stat = fs.statSync(bundlePath);\n if (stat.size > MAX_BUNDLE_SIZE) {\n return { ok: false, error: `Bundle ${label} exceeds 16 MB size limit (${stat.size} bytes)` };\n }\n\n // Path traversal prevention: resolve to absolute and check it stays within expected directory\n const resolved = fs.realpathSync(bundlePath);\n if (resolved !== bundlePath && !resolved.startsWith(process.cwd())) {\n // Allow if the path is a valid absolute path\n if (!fs.existsSync(resolved)) {\n return { ok: false, error: `Path traversal detected for ${label}` };\n }\n }\n\n const zipBuffer = fs.readFileSync(bundlePath);\n const result = await readDisputeBundle(zipBuffer);\n if (!result.ok) {\n return { ok: false, error: `Failed to read ${label}: ${result.error.message}` };\n }\n return { ok: true, value: result.value };\n}\n\n/**\n * Format a ReconcileReport as human-readable text.\n */\nfunction formatReportText(report: ReconcileReport): string {\n const lines: string[] = [\n 'PEAC Reconciliation Report',\n '==========================',\n '',\n `Generated: ${report.generated_at}`,\n `Bundles: ${report.bundles.join(', ')}`,\n `Total receipts: ${report.total_receipts}`,\n `Merged receipts: ${report.merged_receipts}`,\n `Conflicts: ${report.conflicts.length}`,\n '',\n ];\n\n if (report.conflicts.length === 0) {\n lines.push('No conflicts detected. Bundles merge cleanly.');\n } else {\n lines.push('Conflicts:');\n lines.push('---------');\n for (const conflict of report.conflicts) {\n lines.push(` Key: ${conflict.key}`);\n lines.push(` Bundle A ref: ${conflict.bundle_a_receipt_ref}`);\n lines.push(` Bundle B ref: ${conflict.bundle_b_receipt_ref}`);\n lines.push(` Different fields: ${conflict.diff_fields.join(', ')}`);\n lines.push('');\n }\n }\n\n return lines.join('\\n');\n}\n\n// =============================================================================\n// COMMAND\n// =============================================================================\n\nexport function reconcileCommand(): Command {\n const reconcile = new Command('reconcile').description(\n 'Merge evidence bundles and detect conflicts (v0.11.3+)'\n );\n\n reconcile\n .argument('<bundle1>', 'Path to first bundle ZIP file')\n .argument('<bundle2>', 'Path to second bundle ZIP file')\n .option('-f, --format <format>', 'Output format: json or text', 'text')\n .option('--fail-on-conflict', 'Exit code 1 when any conflict detected', false)\n .action(\n async (\n bundle1Path: string,\n bundle2Path: string,\n options: Record<string, unknown>,\n cmd: Command\n ) => {\n const globalOpts = getGlobalOptions(cmd);\n const format = (options.format as string) || 'text';\n const failOnConflict = !!options.failOnConflict;\n\n try {\n // Read both bundles\n const [result1, result2] = await Promise.all([\n readBundle(bundle1Path, 'bundle1'),\n readBundle(bundle2Path, 'bundle2'),\n ]);\n\n if (!result1.ok) {\n outputError(result1.error, {}, globalOpts);\n process.exitCode = 1;\n return;\n }\n if (!result2.ok) {\n outputError(result2.error, {}, globalOpts);\n process.exitCode = 1;\n return;\n }\n\n // Extract receipts\n const [receipts1, receipts2] = await Promise.all([\n extractReceipts(result1.value, bundle1Path),\n extractReceipts(result2.value, bundle2Path),\n ]);\n\n // Build index: key -> ReceiptRecord[]\n const index = new Map<string, ReceiptRecord[]>();\n for (const r of [...receipts1, ...receipts2]) {\n const existing = index.get(r.key) ?? [];\n existing.push(r);\n index.set(r.key, existing);\n }\n\n // Detect conflicts and count merged receipts\n const conflicts: ConflictEntry[] = [];\n let mergedCount = 0;\n\n // Sort keys deterministically\n const sortedKeys = [...index.keys()].sort();\n\n for (const key of sortedKeys) {\n const records = index.get(key)!;\n\n // Find records from each bundle\n const fromA = records.filter((r) => r.source === bundle1Path);\n const fromB = records.filter((r) => r.source === bundle2Path);\n\n if (fromA.length > 0 && fromB.length > 0) {\n // Both bundles have this key: check for conflict\n const a = fromA[0];\n const b = fromB[0];\n if (a.receipt_ref !== b.receipt_ref) {\n // Same key, different content: CONFLICT\n conflicts.push({\n key,\n bundle_a_receipt_ref: a.receipt_ref,\n bundle_b_receipt_ref: b.receipt_ref,\n diff_fields: findDiffFields(a.jws, b.jws),\n });\n }\n // Same key, same content: merged (deduplicated)\n mergedCount++;\n } else {\n // Only in one bundle: merged directly\n mergedCount++;\n }\n }\n\n // Sort conflicts by key (already sorted since we iterate sorted keys)\n const report: ReconcileReport = {\n version: '1.0',\n generated_at: new Date().toISOString(),\n bundles: [bundle1Path, bundle2Path],\n total_receipts: receipts1.length + receipts2.length,\n merged_receipts: mergedCount,\n conflicts,\n };\n\n // Output\n if (format === 'json' || globalOpts.json) {\n console.log(JSON.stringify(report, null, 2));\n } else {\n console.log(formatReportText(report));\n }\n\n // Exit code\n if (failOnConflict && conflicts.length > 0) {\n process.exitCode = 1;\n } else {\n process.exitCode = 0;\n }\n } catch (err) {\n outputError((err as Error).message, {}, globalOpts);\n process.exitCode = 1;\n }\n }\n );\n\n return reconcile;\n}\n","/**\n * `peac doctor`: installability diagnostics.\n *\n * Runs a fixed set of offline-first checks that flag common PEAC\n * installation problems (Node version, required package resolution,\n * tracked config presence). Remote checks (JWKS reachability, reference\n * verifier reachability) are opt-in via the --online flag; by default\n * the command performs zero network calls.\n *\n * Each check reports green / yellow / red. Exit code is 0 when all\n * required checks are green or yellow; 1 when any required check is\n * red.\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { createRequire } from 'module';\n\nconst requireFrom = createRequire(path.join(process.cwd(), 'package.json'));\n\ntype Status = 'green' | 'yellow' | 'red';\n\ninterface CheckResult {\n name: string;\n status: Status;\n detail: string;\n}\n\nfunction paint(status: Status, msg: string): string {\n const labels: Record<Status, string> = {\n green: 'PASS',\n yellow: 'WARN',\n red: 'FAIL',\n };\n return `[${labels[status]}] ${msg}`;\n}\n\nfunction parseMajor(nodeVersion: string): number {\n // process.version is e.g. \"v22.19.0\"\n const m = /^v(\\d+)\\./.exec(nodeVersion);\n return m ? parseInt(m[1]!, 10) : 0;\n}\n\nfunction checkNodeVersion(): CheckResult {\n const major = parseMajor(process.version);\n if (major >= 22) {\n return {\n name: 'Node version',\n status: 'green',\n detail: `${process.version} (>= 22 required)`,\n };\n }\n return {\n name: 'Node version',\n status: 'red',\n detail: `${process.version} is below the required Node >= 22`,\n };\n}\n\nfunction checkPackageResolution(): CheckResult {\n const required = ['@peac/protocol', '@peac/crypto', '@peac/schema', '@peac/kernel'];\n const missing: string[] = [];\n for (const pkg of required) {\n try {\n requireFrom.resolve(pkg);\n } catch {\n missing.push(pkg);\n }\n }\n if (missing.length === 0) {\n return {\n name: 'Package resolution',\n status: 'green',\n detail: `${required.length} required packages resolvable`,\n };\n }\n return {\n name: 'Package resolution',\n status: 'red',\n detail: `${missing.length} missing: ${missing.join(', ')}`,\n };\n}\n\nfunction checkKeyMaterial(cwd: string): CheckResult {\n const env = process.env.PEAC_ISSUER_KEY || '';\n if (env) {\n if (env.startsWith('env:') || env.startsWith('file:')) {\n return {\n name: 'Issuer key material',\n status: 'green',\n detail: `PEAC_ISSUER_KEY set via ${env.split(':')[0]}:... scheme`,\n };\n }\n return {\n name: 'Issuer key material',\n status: 'yellow',\n detail: 'PEAC_ISSUER_KEY set but not using env: or file: scheme',\n };\n }\n // Also look for a conventional ed25519 JWK file at the project root.\n const candidatePaths = [\n path.join(cwd, 'issuer.jwk.json'),\n path.join(cwd, '.peac/issuer.jwk.json'),\n ];\n for (const p of candidatePaths) {\n if (fs.existsSync(p)) {\n return {\n name: 'Issuer key material',\n status: 'yellow',\n detail: `found ${path.relative(cwd, p)}; prefer PEAC_ISSUER_KEY env var`,\n };\n }\n }\n return {\n name: 'Issuer key material',\n status: 'yellow',\n detail: 'not found (issuance disabled; read-only tools still work)',\n };\n}\n\nfunction checkPeacTxt(cwd: string): CheckResult {\n const p = path.join(cwd, '.well-known/peac.txt');\n if (fs.existsSync(p)) {\n return {\n name: 'peac.txt presence',\n status: 'green',\n detail: `.well-known/peac.txt present at ${p}`,\n };\n }\n return {\n name: 'peac.txt presence',\n status: 'yellow',\n detail: 'no .well-known/peac.txt (discovery-layer check; optional for tool callers)',\n };\n}\n\nasync function checkOnlineJwks(issuerUrl: string, timeoutMs: number): Promise<CheckResult> {\n const ctrl = new AbortController();\n const timer = setTimeout(() => ctrl.abort(), timeoutMs);\n try {\n const cfgUrl = new URL('/.well-known/peac-issuer.json', issuerUrl).toString();\n const res = await fetch(cfgUrl, { signal: ctrl.signal });\n if (res.status !== 200) {\n return {\n name: 'Issuer configuration',\n status: 'red',\n detail: `${cfgUrl} returned ${res.status}`,\n };\n }\n const cfg = (await res.json()) as { jwks_uri?: string };\n const jwksUri = cfg.jwks_uri;\n if (!jwksUri) {\n return {\n name: 'Issuer configuration',\n status: 'red',\n detail: `${cfgUrl} missing jwks_uri`,\n };\n }\n const jwksRes = await fetch(jwksUri, { signal: ctrl.signal });\n if (jwksRes.status !== 200) {\n return {\n name: 'Issuer configuration',\n status: 'red',\n detail: `jwks_uri ${jwksUri} returned ${jwksRes.status}`,\n };\n }\n const jwks = (await jwksRes.json()) as { keys?: unknown[] };\n const keyCount = Array.isArray(jwks.keys) ? jwks.keys.length : 0;\n if (keyCount === 0) {\n return {\n name: 'Issuer configuration',\n status: 'red',\n detail: `jwks_uri ${jwksUri} returned empty keys array`,\n };\n }\n return {\n name: 'Issuer configuration',\n status: 'green',\n detail: `${cfgUrl} + jwks_uri resolvable with ${keyCount} key(s)`,\n };\n } catch (err: unknown) {\n return {\n name: 'Issuer configuration',\n status: 'red',\n detail: `fetch failed: ${err instanceof Error ? err.message : String(err)}`,\n };\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function runDoctor(options: {\n online: boolean;\n issuer?: string;\n timeout: number;\n cwd: string;\n}): Promise<number> {\n const results: CheckResult[] = [];\n results.push(checkNodeVersion());\n results.push(checkPackageResolution());\n results.push(checkKeyMaterial(options.cwd));\n results.push(checkPeacTxt(options.cwd));\n\n if (options.online) {\n if (!options.issuer) {\n results.push({\n name: 'Issuer configuration',\n status: 'yellow',\n detail: '--online set but --issuer <url> not provided; skipping remote check',\n });\n } else {\n results.push(await checkOnlineJwks(options.issuer, options.timeout));\n }\n } else {\n results.push({\n name: 'Issuer configuration',\n status: 'yellow',\n detail: 'offline mode (default); pass --online --issuer <url> to enable remote check',\n });\n }\n\n console.log('\\npeac doctor');\n console.log('-----------');\n for (const r of results) {\n console.log(paint(r.status, `${r.name}: ${r.detail}`));\n }\n\n const hasRed = results.some((r) => r.status === 'red');\n console.log(hasRed ? '\\nFAIL: one or more checks are red.' : '\\nOK: no red checks.');\n return hasRed ? 1 : 0;\n}\n\nexport function doctor(program: Command): void {\n program\n .command('doctor')\n .description('Run PEAC installability diagnostics (offline by default)')\n .option('--online', 'enable remote checks (issuer configuration, JWKS)', false)\n .option('--issuer <url>', 'issuer URL for --online checks (https://...)')\n .option(\n '--timeout <ms>',\n 'timeout for remote checks in milliseconds',\n (v) => parseInt(v, 10),\n 5000\n )\n .action(async (opts: { online: boolean; issuer?: string; timeout: number }) => {\n const exitCode = await runDoctor({\n online: !!opts.online,\n issuer: opts.issuer,\n timeout: opts.timeout,\n cwd: process.cwd(),\n });\n process.exit(exitCode);\n });\n}\n","/**\n * CLI utilities and formatting\n */\n\nimport chalk from 'chalk';\nimport type { CommandResult } from './types.js';\n\nexport function formatOutput(result: CommandResult, json = false): string {\n if (json) {\n return JSON.stringify(result, null, 2);\n }\n\n if (!result.success) {\n return chalk.red(`Error: ${result.error}`);\n }\n\n // Format based on data type\n if (result.data && typeof result.data === 'object') {\n if (result.data.sources) {\n // Discovery result\n return formatDiscoveryResult(result.data);\n } else if (result.data.digest) {\n // Hash result\n return formatHashResult(result.data);\n } else if (result.data.valid !== undefined) {\n // Verify result\n return formatVerifyResult(result.data);\n }\n }\n\n return JSON.stringify(result.data, null, 2);\n}\n\nfunction formatDiscoveryResult(data: any): string {\n const lines = [`Discovery for: ${chalk.blue(data.url)}`, ''];\n\n for (const source of data.sources) {\n const status =\n source.status === 'found'\n ? chalk.green('[found]')\n : source.status === 'not_found'\n ? chalk.yellow('[not found]')\n : chalk.red('[error]');\n\n lines.push(`${status} ${source.type}: ${source.url}`);\n if (source.etag) {\n lines.push(` ETag: ${source.etag}`);\n }\n }\n\n return lines.join('\\\\n');\n}\n\nfunction formatHashResult(data: any): string {\n return [\n `Algorithm: ${data.algorithm}`,\n `Format: ${data.format}`,\n `Digest: ${chalk.green(data.digest)}`,\n `Input size: ${data.input_size} bytes`,\n ].join('\\\\n');\n}\n\nfunction formatVerifyResult(data: any): string {\n if (data.valid) {\n const lines = [chalk.green('Receipt verified successfully'), ''];\n\n if (data.policy_hash) {\n lines.push(`Policy hash: ${data.policy_hash}`);\n }\n\n if (data.resource) {\n lines.push(`Resource: ${data.resource}`);\n }\n\n return lines.join('\\\\n');\n } else {\n return chalk.red(`Verification failed: ${data.error || 'Unknown error'}`);\n }\n}\n\nexport function createExitHandler() {\n return (code: number) => {\n process.exit(code);\n };\n}\n\nexport function handleError(error: Error): CommandResult {\n return {\n success: false,\n error: error.message,\n };\n}\n\nexport function timing() {\n const started = Date.now();\n return {\n started,\n end: () => {\n const completed = Date.now();\n return {\n started,\n completed,\n duration: completed - started,\n };\n },\n };\n}\n","/**\n * peac discover <url> command\n *\n * Performs SSRF-aware retrieval of /.well-known/peac.txt and parses it as a\n * peac-policy/0.1 policy document. Implementation lives in the CLI-internal\n * helper at ../lib/policy-document-discovery.ts (not a public surface).\n *\n * peac.txt is a policy-document surface per docs/specs/PEAC-TXT.md. For\n * cryptographic key discovery, callers should use\n * /.well-known/peac-issuer.json (see docs/specs/PEAC-ISSUER.md).\n */\n\nimport {\n fetchPolicyDocumentText,\n parsePolicyDocumentCompat,\n type CompatParseResult,\n} from '../lib/policy-document-discovery.js';\nimport type { CLIOptions, CommandResult } from '../types.js';\nimport { handleError, timing } from '../utils.js';\n\ninterface DiscoverData extends CompatParseResult {\n hints?: string[];\n}\n\nexport class DiscoverCommand {\n async execute(url: string, _options: CLIOptions = {}): Promise<CommandResult> {\n const timer = timing();\n\n try {\n const parsedUrl = new URL(url);\n if (!['http:', 'https:'].includes(parsedUrl.protocol)) {\n throw new Error('URL must use http: or https: protocol');\n }\n\n const fetched = await fetchPolicyDocumentText(url);\n if (!fetched.ok) {\n return {\n success: false,\n error: fetched.error,\n timing: timer.end(),\n };\n }\n\n const parsed = parsePolicyDocumentCompat(fetched.text);\n const data: DiscoverData = { ...parsed };\n if (fetched.warnings && fetched.warnings.length > 0) {\n data.warnings = [...(parsed.warnings ?? []), ...fetched.warnings];\n }\n if (data.warnings && data.warnings.length > 0) {\n data.hints = [\n 'peac.txt is a policy-document surface (docs/specs/PEAC-TXT.md). ' +\n 'For key discovery, use /.well-known/peac-issuer.json (docs/specs/PEAC-ISSUER.md).',\n ];\n }\n\n return {\n success: true,\n data,\n timing: timer.end(),\n };\n } catch (error) {\n return {\n ...handleError(error as Error),\n timing: timer.end(),\n };\n }\n }\n}\n","/**\n * CLI capture limits and security defaults.\n *\n * Centralizes the bounded-capture caps and security-default constants\n * used by `peac observe command` and `peac record command`. Mirrored\n * (but enforced separately) by the Zod ranges in\n * `@peac/schema/src/extensions/cli-execution.ts`; keep both sides in\n * sync when changing.\n *\n * All values are POSIX-first. Windows behavior is not guaranteed by\n * the current CLI carrier profile; see `docs/specs/CLI-CARRIER-PROFILE.md`.\n */\n\n/** Bounded-capture caps. */\nexport const CLI_LIMITS = {\n /** Default max bytes retained in the stdout sample buffer (raw mode only). */\n defaultStdoutSampleBytes: 16_384,\n /** Default max bytes retained in the stderr sample buffer (raw mode only). */\n defaultStderrSampleBytes: 16_384,\n /** Hard ceiling for the stdout / stderr sample buffer (raw mode only). */\n maxStdoutSampleBytes: 65_536,\n maxStderrSampleBytes: 65_536,\n\n /** Default max bytes recorded in argv (raw mode only). */\n defaultArgvCaptureBytes: 4_096,\n /** Hard ceiling for argv bytes (raw mode only). */\n maxArgvCaptureBytes: 16_384,\n\n /** Hard ceiling for env entry count (deny-by-default; allowlist <= this). */\n maxEnvEntries: 32,\n\n /** Default wrapper timeout (10 minutes). */\n defaultTimeoutMs: 600_000,\n /** Wrapper timeout hard ceiling (24 hours). */\n maxTimeoutMs: 86_400_000,\n /** Wrapper timeout floor (1 ms). */\n minTimeoutMs: 1,\n\n /** Default SIGTERM-to-SIGKILL grace (5 seconds). */\n defaultKillGraceMs: 5_000,\n /** SIGTERM-to-SIGKILL grace hard ceiling (60 seconds). */\n maxKillGraceMs: 60_000,\n /** SIGTERM-to-SIGKILL grace floor. */\n minKillGraceMs: 0,\n} as const;\n\n/**\n * Shell binaries that, when detected as the program basename, REQUIRE\n * the explicit `--shell-mode` acknowledgement. PEAC NEVER synthesizes\n * shell syntax; the wrapper is an observer, not a shell orchestrator.\n */\nexport const SHELL_BINARY_BASENAMES = new Set<string>([\n 'sh',\n 'bash',\n 'zsh',\n 'dash',\n 'fish',\n 'pwsh',\n 'cmd',\n]);\n\n/** Returns true when the resolved program basename is a known shell binary. */\nexport function isShellBinary(programBasename: string): boolean {\n return SHELL_BINARY_BASENAMES.has(programBasename.toLowerCase());\n}\n","/**\n * CLI subprocess capture.\n *\n * Implements the bounded-capture wrapper used by `peac observe command`\n * and `peac record command`. Hard implementation invariants:\n *\n * - Spawn discipline: `spawn(prog, args, { shell: false })`\n * exclusively. NEVER `exec()`. The wrapper does NOT synthesize\n * shell syntax or rewrite the command. `--shell-mode` is\n * acknowledgement only.\n * - Streaming capture: `node:crypto.createHash` updated chunk-by-chunk.\n * Byte counter incremented chunk-by-chunk. Bounded sample buffer\n * is the ONLY buffer retained, and ONLY when raw capture is\n * double-opted-in. Full streams NEVER held in memory.\n * - Stdin: `--capture-stdin-mode` controls BOTH whether the wrapper\n * pipes parent stdin to the child AND what the wrapper records.\n * `none` (default) closes child stdin and does NOT read parent stdin.\n * The stdin pump must terminate when the child exits even if the\n * parent stream is still open.\n * - Timeout: `--timeout-ms` / `--kill-grace-ms` cascade SIGTERM then\n * SIGKILL; the record IS still emitted. The nested SIGKILL timer\n * is cleared on child close so it cannot keep the event loop alive.\n * - Signal exit codes follow POSIX `128 + signal-num`: SIGINT=130,\n * SIGTERM=143, SIGKILL=137; unknown signals fall back to 128.\n * - Stdin pumping is listener-based (event handlers attached to the\n * parent stream and child stdin). Backpressure pauses the parent\n * until child stdin emits 'drain'. The pump is reliably abortable\n * via an external AbortSignal even if the parent stream stays\n * open and idle, and removes ONLY pump-owned listeners on cleanup\n * (the parent is caller-owned).\n */\n\nimport { spawn, type ChildProcessWithoutNullStreams } from 'node:child_process';\nimport { createHash, type Hash } from 'node:crypto';\nimport type { Readable, Writable } from 'node:stream';\n\n/**\n * Thrown by `captureCommand` when the child process fails to spawn\n * (missing binary, ENOENT, EACCES, etc.). Node emits the `'error'`\n * event in this case and never emits `'spawn'`/`'close'` -- without\n * explicit handling the wrapper would hang waiting for `'close'`.\n */\nexport class CliSpawnFailedError extends Error {\n readonly code = 'cli.spawn_failed';\n constructor(\n message: string,\n readonly cause?: unknown\n ) {\n super(message);\n this.name = 'CliSpawnFailedError';\n }\n}\n\nexport type StdinMode = 'none' | 'length-only' | 'hashed';\nexport type CaptureMode = 'hashed' | 'redacted' | 'raw';\n\n/**\n * Spawn-input barrier. Asserts the program token is a non-empty\n * string with no NUL byte (POSIX exec rejects NUL anyway, but better\n * to fail loudly with a stable error than to surface a NodeJS\n * ERR_INVALID_ARG_VALUE). Args must be a string array with no NUL.\n *\n * The barrier deliberately does NOT block shell metacharacters in\n * tokens: per CLI-CARRIER-PROFILE.md the wrapper is an OBSERVER,\n * not a sandbox; operators may legitimately pass tokens such as\n * `;`, `|`, or `$VAR` as program arguments and `shell: false`\n * guarantees they are NOT interpreted as shell syntax.\n *\n * Returns the validated tokens. Centralising the spawn-input\n * checks here also gives static-analysis tools an explicit\n * sanitization step between caller-supplied input and `spawn()`.\n */\nfunction validateSpawnInputs(program: unknown, args: unknown): { program: string; args: string[] } {\n if (typeof program !== 'string' || program.length === 0) {\n throw new CliSpawnFailedError('program token must be a non-empty string');\n }\n if (program.includes('\\0')) {\n throw new CliSpawnFailedError('program token must not contain a NUL byte');\n }\n if (!Array.isArray(args)) {\n throw new CliSpawnFailedError('args must be an array of strings');\n }\n const validatedArgs: string[] = [];\n for (const a of args) {\n if (typeof a !== 'string') {\n throw new CliSpawnFailedError('args must be an array of strings');\n }\n if (a.includes('\\0')) {\n throw new CliSpawnFailedError('args must not contain NUL bytes');\n }\n validatedArgs.push(a);\n }\n return { program, args: validatedArgs };\n}\n\nexport interface CaptureOptions {\n /** Resolved program path (passed verbatim to `spawn`). */\n program: string;\n /** Argv tail (passed verbatim to `spawn`; never wrapped in a shell). */\n args: string[];\n /** Working directory for the child (passed to `spawn`); not the recorded cwd. */\n cwd: string;\n /**\n * Environment passed to the child. REQUIRED. Callers (the\n * pipeline / pure handler) must construct the env explicitly so\n * the env source is auditable; this function does NOT silently\n * fall back to `process.env`.\n */\n env: NodeJS.ProcessEnv;\n stdinMode: StdinMode;\n /**\n * Whether raw sample emission is enabled (requires `--capture-mode raw`\n * AND `--unsafe-allow-raw-capture`). When false, no `sample_base64` is\n * retained for stdout / stderr and the bounded sample buffer stays\n * empty even though the streams are still hashed and counted.\n */\n rawCaptureEnabled: boolean;\n /** Bounded sample cap for stdout (raw mode only). */\n stdoutSampleBytes: number;\n /** Bounded sample cap for stderr (raw mode only). */\n stderrSampleBytes: number;\n /** Wrapper timeout (ms). After this, the wrapper sends SIGTERM. */\n timeoutMs: number;\n /** SIGTERM-to-SIGKILL grace (ms). */\n killGraceMs: number;\n /**\n * Optional readable from which to source parent stdin. Defaults to\n * `process.stdin`. Tests inject a custom stream.\n */\n parentStdin?: Readable;\n}\n\nexport interface StreamCaptureRef {\n length: number;\n /** sha256 hex digest with the canonical `sha256:` prefix. */\n sha256: string;\n truncated: boolean;\n /** Present only when raw capture is enabled and the secret-scan does not suppress it. */\n sample_base64?: string;\n}\n\nexport interface StdinCaptureRef {\n mode: StdinMode;\n length?: number;\n sha256?: string;\n truncated?: boolean;\n}\n\nexport interface CaptureResult {\n exitCode: number;\n /** OS-reported child exit signal. Distinct from `terminationSignal`. */\n signal: string | null;\n /** True when the wrapper sent termination signals due to `--timeout-ms` elapsing. */\n timedOut: boolean;\n /** Signal sent BY THE WRAPPER after timeout. */\n terminationSignal: string | null;\n startedAt: string;\n finishedAt: string;\n durationMs: number;\n stdout: StreamCaptureRef;\n stderr: StreamCaptureRef;\n stdin: StdinCaptureRef;\n}\n\nconst SHA256_PREFIX = 'sha256:';\n\n/**\n * POSIX `128 + signal-num` mapping. Unknown signals fall back to 128\n * so the wrapper never returns NaN. Tests pin SIGINT=130, SIGTERM=143,\n * SIGKILL=137.\n */\nconst SIGNAL_EXIT_CODES: Record<string, number> = {\n SIGHUP: 129,\n SIGINT: 130,\n SIGQUIT: 131,\n SIGABRT: 134,\n SIGKILL: 137,\n SIGUSR1: 138,\n SIGUSR2: 140,\n SIGPIPE: 141,\n SIGALRM: 142,\n SIGTERM: 143,\n};\n\nexport function exitCodeForSignal(signal: string | null | undefined): number {\n if (!signal) return 128;\n return SIGNAL_EXIT_CODES[signal] ?? 128;\n}\n\ninterface StreamHasher {\n hasher: Hash;\n length: number;\n truncated: boolean;\n sampleBuffer: Buffer[];\n sampleBytes: number;\n}\n\nfunction newStreamHasher(): StreamHasher {\n return {\n hasher: createHash('sha256'),\n length: 0,\n truncated: false,\n sampleBuffer: [],\n sampleBytes: 0,\n };\n}\n\n/**\n * Update the streaming hasher and append to the bounded sample buffer\n * iff raw capture is enabled. Streaming-capture invariants:\n * - bytes are ALWAYS hashed and counted (`length` is exact, `sha256`\n * is computed over the full stream)\n * - the sample buffer is appended to ONLY when raw capture is enabled\n * AND the cap has not yet been reached; once the cap is reached the\n * `truncated` flag is set and additional bytes are NOT appended\n * - the full stream is NEVER held in memory\n */\nfunction feedHasher(state: StreamHasher, chunk: Buffer, sampleCap: number, rawEnabled: boolean) {\n state.hasher.update(chunk);\n state.length += chunk.length;\n if (rawEnabled && state.sampleBytes < sampleCap) {\n const remaining = sampleCap - state.sampleBytes;\n if (chunk.length <= remaining) {\n state.sampleBuffer.push(chunk);\n state.sampleBytes += chunk.length;\n } else {\n state.sampleBuffer.push(chunk.subarray(0, remaining));\n state.sampleBytes += remaining;\n state.truncated = true;\n }\n } else if (rawEnabled && state.sampleBytes >= sampleCap) {\n state.truncated = true;\n }\n}\n\nfunction finalizeStreamRef(state: StreamHasher, rawEnabled: boolean): StreamCaptureRef {\n const ref: StreamCaptureRef = {\n length: state.length,\n sha256: SHA256_PREFIX + state.hasher.digest('hex'),\n truncated: state.truncated,\n };\n if (rawEnabled && state.sampleBuffer.length > 0) {\n ref.sample_base64 = Buffer.concat(state.sampleBuffer, state.sampleBytes).toString('base64');\n }\n return ref;\n}\n\n/**\n * Pump parent stdin to child stdin via explicit event listeners,\n * optionally hashing/counting per stdin mode. Resolves when the\n * parent emits 'end' / 'error', when child stdin emits 'error', or\n * when the abort signal fires. The pump installs ONLY pump-owned\n * listeners and removes ONLY those listeners on resolve / abort, so\n * caller-owned listeners on the parent stream stay intact. An idle,\n * never-ending parent stream never hangs the wrapper because the\n * abort-signal path resolves immediately without waiting for parent\n * data.\n */\nasync function pumpStdin(\n parent: Readable,\n childStdin: Writable,\n mode: Exclude<StdinMode, 'none'>,\n abortSignal: AbortSignal\n): Promise<{ length: number; sha256?: string; truncated: boolean }> {\n let length = 0;\n const truncated = false;\n const hasher = mode === 'hashed' ? createHash('sha256') : null;\n\n // Listener-based pump. We attach pump-owned listeners to the parent\n // stream and remove ONLY those listeners on resolve / abort. The\n // parent (typically process.stdin) is caller-owned; we never call\n // removeAllListeners() and we never destroy or end the parent. The\n // resolution conditions are explicit:\n // - abort signal fires (child exited; wrapper aborts the pump)\n // - parent emits 'end'\n // - parent emits 'error'\n // - child stdin emits 'error' (e.g., EPIPE)\n // An idle, never-ending parent that emits no more data must NOT\n // hang the wrapper: when the abort signal fires, the pump removes\n // its listeners and resolves immediately even though the parent\n // stream is still open.\n return new Promise((resolve) => {\n let settled = false;\n let drainWaiter: ((reason?: unknown) => void) | null = null;\n\n const finalize = (): { length: number; sha256?: string; truncated: boolean } => {\n const out: { length: number; sha256?: string; truncated: boolean } = { length, truncated };\n if (hasher) out.sha256 = SHA256_PREFIX + hasher.digest('hex');\n return out;\n };\n\n const cleanup = () => {\n parent.off('data', onData);\n parent.off('end', onEnd);\n parent.off('error', onParentError);\n childStdin.off('drain', onDrain);\n childStdin.off('error', onChildError);\n abortSignal.removeEventListener('abort', onAbort);\n };\n\n const settle = () => {\n if (settled) return;\n settled = true;\n cleanup();\n // End child stdin so the child sees EOF; ignore if already closed.\n try {\n childStdin.end();\n } catch {\n // ignore\n }\n // Reject any pending drain waiter so the data path unwinds.\n if (drainWaiter) {\n const reject = drainWaiter;\n drainWaiter = null;\n try {\n reject(new Error('pump-aborted'));\n } catch {\n // ignore\n }\n }\n resolve(finalize());\n };\n\n const onData = (chunk: Buffer | string) => {\n if (settled) return;\n const buf = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n length += buf.length;\n if (hasher) hasher.update(buf);\n let writable = false;\n try {\n writable = childStdin.write(buf);\n } catch {\n // child closed stdin early; abandon further forwarding.\n settle();\n return;\n }\n if (!writable) {\n // Backpressure: pause parent until child drains, abort, or error.\n try {\n parent.pause();\n } catch {\n // ignore\n }\n const waiter = new Promise<void>((res, rej) => {\n drainWaiter = rej;\n childStdin.once('drain', () => {\n drainWaiter = null;\n res();\n });\n });\n waiter\n .then(() => {\n if (settled) return;\n try {\n parent.resume();\n } catch {\n // ignore\n }\n })\n .catch(() => {\n // pump-aborted: settle() already cleaned up.\n });\n }\n };\n\n const onEnd = () => settle();\n const onParentError = () => settle();\n const onChildError = () => settle();\n const onDrain = () => {\n // 'drain' is consumed by the once-handler installed above; this\n // attached handler exists only so we can off() it on cleanup if\n // it never fired. No-op body.\n };\n const onAbort = () => {\n // Pause parent so no further data is delivered (best-effort);\n // do not destroy or remove listeners belonging to other consumers.\n try {\n parent.pause();\n } catch {\n // ignore\n }\n settle();\n };\n\n parent.on('data', onData);\n parent.on('end', onEnd);\n parent.on('error', onParentError);\n childStdin.on('drain', onDrain);\n childStdin.on('error', onChildError);\n if (abortSignal.aborted) {\n onAbort();\n } else {\n abortSignal.addEventListener('abort', onAbort, { once: true });\n }\n });\n}\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\n/**\n * Run the bounded-capture wrapper. The promise resolves when the child\n * exits OR is killed by the wrapper after timeout; it does NOT reject\n * on non-zero exit; the record IS still emitted regardless of child exit code.\n */\nexport async function captureCommand(opts: CaptureOptions): Promise<CaptureResult> {\n const startedAt = nowIso();\n const startMs = Date.now();\n\n const stdoutState = newStreamHasher();\n const stderrState = newStreamHasher();\n\n // Configure spawn stdio per stdin mode. `none` closes child stdin\n // (wrapper does NOT read parent stdin); other modes pipe.\n const stdioConfig: ('ignore' | 'pipe')[] =\n opts.stdinMode === 'none' ? ['ignore', 'pipe', 'pipe'] : ['pipe', 'pipe', 'pipe'];\n\n // Validate the spawn inputs through an explicit barrier. The\n // wrapper's documented purpose (CLI-CARRIER-PROFILE.md section 2)\n // is to spawn a caller-supplied child process; the security floor\n // is `shell: false` (no metacharacter expansion). The barrier\n // additionally rejects empty program tokens, NUL bytes, and\n // non-string argv tokens. It intentionally permits shell\n // metacharacters as ordinary argv bytes because spawn() is called\n // with shell: false and PEAC does not synthesize shell syntax.\n const { program, args } = validateSpawnInputs(opts.program, opts.args);\n const child = spawn(program, args, {\n cwd: opts.cwd,\n env: opts.env,\n stdio: stdioConfig,\n shell: false,\n windowsHide: true,\n }) as ChildProcessWithoutNullStreams;\n\n // Stream capture (always hashed and counted; sample only when raw enabled).\n child.stdout.on('data', (chunk: Buffer) => {\n feedHasher(stdoutState, chunk, opts.stdoutSampleBytes, opts.rawCaptureEnabled);\n });\n child.stderr.on('data', (chunk: Buffer) => {\n feedHasher(stderrState, chunk, opts.stderrSampleBytes, opts.rawCaptureEnabled);\n });\n\n // Stdin handling. The pump runs concurrently with the child; when the\n // child closes we abort the pump so the wrapper cannot hang on a\n // never-ending parent stream (TTY, infinite pipe, etc.).\n let stdinCapture: { length: number; sha256?: string; truncated: boolean } = {\n length: 0,\n truncated: false,\n };\n let stdinPromise: Promise<typeof stdinCapture> | null = null;\n const stdinAbort = new AbortController();\n if (opts.stdinMode !== 'none') {\n const parent = opts.parentStdin ?? process.stdin;\n stdinPromise = pumpStdin(parent, child.stdin, opts.stdinMode, stdinAbort.signal);\n } else {\n // 'none': child stdin already closed via stdio: 'ignore'. Wrapper\n // does NOT read parent stdin (no parent.read, no parent.on('data')).\n }\n\n // Timeout / kill cascade. The nested SIGKILL timer is stored and\n // cleared on child close so it cannot keep the event loop alive.\n let timedOut = false;\n let terminationSignal: string | null = null;\n let killHandle: NodeJS.Timeout | undefined;\n const timeoutHandle = setTimeout(() => {\n timedOut = true;\n terminationSignal = 'SIGTERM';\n try {\n child.kill('SIGTERM');\n } catch {\n // ignore\n }\n killHandle = setTimeout(() => {\n if (child.exitCode === null && child.signalCode === null) {\n terminationSignal = 'SIGKILL';\n try {\n child.kill('SIGKILL');\n } catch {\n // ignore\n }\n }\n }, opts.killGraceMs);\n }, opts.timeoutMs);\n\n // Race the child's `'close'` event against `'error'`. Per Node docs,\n // a child that fails to spawn (ENOENT / EACCES / non-executable)\n // emits `'error'` and NEVER emits `'spawn'` / `'close'`; without\n // explicit handling the wrapper would hang waiting for `'close'`.\n const exitInfo = await new Promise<{ exitCode: number; signal: string | null }>(\n (resolve, reject) => {\n let settled = false;\n child.on('close', (code, signal) => {\n if (settled) return;\n settled = true;\n clearTimeout(timeoutHandle);\n if (killHandle) clearTimeout(killHandle);\n stdinAbort.abort();\n // Synthesize POSIX `128 + signal-num` for signal exits; pass\n // through normal exit codes verbatim.\n const exitCode = code === null ? exitCodeForSignal(signal) : code;\n resolve({ exitCode, signal: signal ?? null });\n });\n child.on('error', (err) => {\n if (settled) return;\n settled = true;\n clearTimeout(timeoutHandle);\n if (killHandle) clearTimeout(killHandle);\n stdinAbort.abort();\n reject(\n new CliSpawnFailedError(\n `failed to spawn child process: ${err instanceof Error ? err.message : String(err)}`,\n err\n )\n );\n });\n }\n );\n\n if (stdinPromise) {\n stdinCapture = await stdinPromise;\n }\n\n const finishedAt = nowIso();\n const durationMs = Date.now() - startMs;\n\n const stdinRef: StdinCaptureRef =\n opts.stdinMode === 'none'\n ? { mode: 'none' }\n : opts.stdinMode === 'length-only'\n ? { mode: 'length-only', length: stdinCapture.length, truncated: stdinCapture.truncated }\n : {\n mode: 'hashed',\n length: stdinCapture.length,\n sha256: stdinCapture.sha256!,\n truncated: stdinCapture.truncated,\n };\n\n return {\n exitCode: exitInfo.exitCode,\n signal: exitInfo.signal,\n timedOut,\n terminationSignal,\n startedAt,\n finishedAt,\n durationMs,\n stdout: finalizeStreamRef(stdoutState, opts.rawCaptureEnabled),\n stderr: finalizeStreamRef(stderrState, opts.rawCaptureEnabled),\n stdin: stdinRef,\n };\n}\n","/**\n * Race-free output-path writability preflight (neutral, surface-agnostic).\n *\n * Used by every CLI surface that supports `--output <file>` to verify the\n * target path is writable BEFORE doing any side-effecting work (spawning a\n * child process, loading an issuer key, signing, etc.). A record-producing\n * wrapper must never do that work only to discover the record cannot be\n * persisted.\n *\n * The preflight is deliberately non-invasive on the final target path:\n * - if the final target exists, open it for append/write check and\n * close it; never unlink the existing target\n * - if the final target does NOT exist, create a uniquely-named\n * sibling temp file in the parent directory with O_EXCL and\n * immediately unlink that temp file; the final target path is\n * not created or touched until the actual write step\n *\n * Result: between preflight and the eventual write, the CLI has NOT\n * created or modified the final output path. Concurrent observers cannot\n * race against a transient zero-byte target file produced by the preflight.\n */\n\nimport { closeSync, constants as fsConstants, openSync, statSync, unlinkSync } from 'node:fs';\nimport { dirname, join, resolve as pathResolve } from 'node:path';\nimport { randomBytes } from 'node:crypto';\n\n/**\n * Verify that `--output <file>` will be writable. Returns null on\n * success; otherwise an error message suitable for pairing with\n * `cli.output_write_failed`.\n */\nexport function preflightOutputWritable(output: string): string | null {\n if (output === '-' || output === '') return null;\n const absPath = pathResolve(output);\n const parent = dirname(absPath);\n try {\n const st = statSync(parent);\n if (!st.isDirectory()) {\n return `parent path '${parent}' is not a directory`;\n }\n } catch (err) {\n return `parent directory '${parent}' does not exist (${(err as NodeJS.ErrnoException)?.code ?? (err instanceof Error ? err.message : String(err))})`;\n }\n\n // Race-free target discrimination. We do NOT call existsSync() before\n // open() because that introduces a TOCTOU window between the check and\n // the use. Instead we open the path for append WITHOUT O_CREAT: a\n // successful open proves the file exists and is writable; an ENOENT\n // error proves the file does not exist; any other errno surfaces a\n // real preflight failure. The single open() syscall makes the\n // discrimination atomic.\n let existingFd: number | undefined;\n try {\n existingFd = openSync(absPath, fsConstants.O_WRONLY | fsConstants.O_APPEND);\n } catch (err) {\n const code = (err as NodeJS.ErrnoException)?.code;\n if (code !== 'ENOENT') {\n return `cannot open '${absPath}' for write (${code ?? (err instanceof Error ? err.message : String(err))})`;\n }\n // ENOENT: target does not exist. Fall through to the temp-file probe.\n }\n if (existingFd !== undefined) {\n try {\n closeSync(existingFd);\n } catch {\n // ignore\n }\n return null;\n }\n\n // Missing target: probe writability via a uniquely-named sibling temp\n // file, then immediately unlink the temp file. The final target path\n // is NOT touched.\n const tempName = `.peac-preflight-${randomBytes(8).toString('hex')}.tmp`;\n const tempPath = join(parent, tempName);\n let fd: number | undefined;\n try {\n fd = openSync(tempPath, fsConstants.O_WRONLY | fsConstants.O_CREAT | fsConstants.O_EXCL, 0o600);\n } catch (err) {\n return `parent directory '${parent}' is not writable (${(err as NodeJS.ErrnoException)?.code ?? (err instanceof Error ? err.message : String(err))})`;\n } finally {\n if (fd !== undefined) {\n try {\n closeSync(fd);\n } catch {\n // ignore\n }\n }\n }\n try {\n unlinkSync(tempPath);\n } catch {\n // not fatal; the temp file will linger but the final target was\n // never touched and the eventual write will succeed.\n }\n return null;\n}\n","/**\n * Secret-scan regex set for bounded-capture samples.\n *\n * Secret-scan is ON by default. When raw sample emission is possible\n * (`--capture-mode raw && --unsafe-allow-raw-capture`), the wrapper\n * runs this regex set against each candidate sample BEFORE emission.\n * If a token-like pattern matches, the sample is suppressed and\n * replaced with `{ sample_suppressed_reason: \"secret_pattern_detected\",\n * matched_pattern_category: <category> }`. The literal match is NEVER\n * recorded.\n *\n * The regex set is intentionally small (5 named patterns). False\n * positives are tolerated; the suppression itself is observable so a\n * verifier can detect over-suppression.\n *\n * Disabling secret-scan under raw capture requires the third unsafe\n * flag (`--unsafe-disable-secret-scan`); enforcement lives in the\n * subcommand flag-parse layer, not here.\n */\n\nexport type SecretCategory =\n | 'bearer-token'\n | 'api-key'\n | 'jwt'\n | 'aws-access-key'\n | 'generic-high-entropy';\n\ninterface SecretPattern {\n category: SecretCategory;\n pattern: RegExp;\n}\n\n/**\n * Patterns are deliberately broad. Each pattern targets the SHAPE of\n * a credential rather than a specific issuer; the goal is suppression\n * not classification accuracy.\n */\nconst SECRET_PATTERNS: ReadonlyArray<SecretPattern> = [\n // JWS / JWT (three base64url segments separated by dots; first segment\n // starts with a base64-encoded `{\"`).\n {\n category: 'jwt',\n pattern: /eyJ[A-Za-z0-9_-]{8,}\\.[A-Za-z0-9_-]{8,}\\.[A-Za-z0-9_-]{8,}/,\n },\n // Bearer token in HTTP-auth shape.\n {\n category: 'bearer-token',\n pattern: /\\bBearer\\s+[A-Za-z0-9._~+/-]{16,}=*/i,\n },\n // AWS access key (AKIA / ASIA prefix + 16 uppercase alnum).\n {\n category: 'aws-access-key',\n pattern: /\\b(?:AKIA|ASIA)[0-9A-Z]{16}\\b/,\n },\n // Generic API-key shape (sk_ / pk_ / api[-_]?key= prefix + >=20 alnum).\n {\n category: 'api-key',\n pattern: /\\b(?:sk|pk|sk-live|sk-test|pk-live|pk-test)[_-][A-Za-z0-9]{20,}/,\n },\n // High-entropy token (>=32 contiguous base64url-ish chars). Conservative\n // length to reduce false positives on random hex IDs.\n {\n category: 'generic-high-entropy',\n pattern: /[A-Za-z0-9_-]{32,}/,\n },\n];\n\nexport interface SecretMatch {\n category: SecretCategory;\n}\n\n/**\n * Scan a buffer or string for token-like patterns. Returns the first\n * match (by pattern declaration order); the literal match is NEVER\n * returned to callers.\n */\nexport function scanForSecrets(input: string | Uint8Array): SecretMatch | null {\n const text = typeof input === 'string' ? input : Buffer.from(input).toString('utf8');\n for (const { category, pattern } of SECRET_PATTERNS) {\n if (pattern.test(text)) {\n return { category };\n }\n }\n return null;\n}\n\n/**\n * Scan an argv element. Same shape as `scanForSecrets` but documents\n * intent: argv elements are scanned independently of stream samples.\n */\nexport function scanArgvElement(token: string): SecretMatch | null {\n return scanForSecrets(token);\n}\n","/**\n * CLI observation record builder.\n *\n * Assembles the final `org.peacprotocol/cli-execution` observation\n * record from the raw capture result + the flag-derived capture policy.\n * Applies argv encoding, env filtering (captures only what the policy\n * records; never mutates the child's execution env), cwd / binary-path\n * encoding, and secret-scan suppression on stdout / stderr samples.\n *\n * Builder hard-fail invariants (mirrors of the schema invariants;\n * surface the failure before emission so a flag-layer bug cannot\n * produce a misleading record):\n * - command.program is basename-only; path-bearing tokens are\n * reduced to their basename. Path disclosure is governed by\n * --capture-binary-path and lives only under binary.path_*.\n * - raw argv tokens that exceed argv_max_bytes hard-fail with\n * `cli.argv_token_too_long`; raw mode never silently truncates.\n * - env.mode='raw' with rawEnvEnabled=false hard-fails with\n * `cli.env_mode_inconsistent` rather than silently downgrading\n * to hashed.\n */\n\nexport class CliObservationBuilderError extends Error {\n readonly code: string;\n constructor(code: string, message: string) {\n super(message);\n this.name = 'CliObservationBuilderError';\n this.code = code;\n }\n}\n\nimport { createHash } from 'node:crypto';\nimport { createReadStream, statSync } from 'node:fs';\n\n/**\n * Platform-agnostic basename. Strips everything up through the LAST\n * forward-slash or backslash so the output is the same on POSIX and\n * Windows. Mirrors the schema-level `command.program` invariant\n * (rejects `/` and `\\`).\n */\nfunction basenameAny(p: string): string {\n return p.replace(/^.*[\\\\/]/, '');\n}\nimport { CLI_COMMAND_EXECUTION_TYPE, type CliExecutionObservation } from '@peac/schema';\nimport type { CaptureResult } from './capture.js';\nimport { scanArgvElement, scanForSecrets } from './secret-scan.js';\n\nconst SHA256_PREFIX = 'sha256:';\n\nexport type ArgvMode = 'hashed' | 'redacted' | 'raw';\nexport type CwdMode = 'none' | 'hashed' | 'basename' | 'absolute';\nexport type BinaryPathMode = 'none' | 'hashed' | 'absolute';\nexport type EnvMode = 'hashed' | 'raw';\nexport type StdinMode = 'none' | 'length-only' | 'hashed';\nexport type ExitCodeMode = 'child' | 'record';\nexport type ExecutionMode =\n | 'deterministic_script'\n | 'templated_flow'\n | 'agent_loop'\n | 'human_step'\n | 'hybrid';\n\nexport interface BuilderInput {\n capture: CaptureResult;\n /**\n * The program token AS THE USER SUPPLIED IT (e.g. `node`, `./script.sh`,\n * `/usr/bin/env`). This is what `command.program` records -- it does NOT\n * leak the resolved absolute path. Path disclosure is governed\n * exclusively by `--capture-binary-path` (recorded in `binary.path_*`).\n */\n programToken: string;\n /**\n * The resolved absolute path the wrapper actually spawned. Used\n * internally for stat metadata and content digest under\n * `--capture-binary-path hashed|absolute` -- NEVER recorded under\n * `command.program`.\n */\n resolvedProgramPath: string;\n /** Argv tail as supplied (post-`--`); never modified. */\n rawArgv: string[];\n cwd: string;\n argvMode: ArgvMode;\n cwdMode: CwdMode;\n binaryPathMode: BinaryPathMode;\n envMode: EnvMode;\n stdinMode: StdinMode;\n envAllowlist: string[];\n parentEnv: NodeJS.ProcessEnv;\n rawCaptureEnabled: boolean;\n rawEnvEnabled: boolean;\n secretScanEnabled: boolean;\n secretScanDisabledUnsafely: boolean;\n argvCaptureBytes: number;\n stdoutSampleBytes: number;\n stderrSampleBytes: number;\n timeoutMs: number;\n killGraceMs: number;\n exitCodeMode: ExitCodeMode;\n executionMode: ExecutionMode;\n shellMode: boolean;\n policyDigest?: string;\n configDigest?: string;\n approvalRef?: string;\n peacCliVersion: string;\n}\n\nfunction sha256Hex(input: string | Buffer): string {\n return SHA256_PREFIX + createHash('sha256').update(input).digest('hex');\n}\n\n/**\n * Streaming sha256 of a file's content. Never holds the full file in\n * memory; suitable for capturing the binary content digest of large\n * executables.\n */\nasync function sha256OfFile(path: string): Promise<string> {\n return new Promise((resolve, reject) => {\n const hasher = createHash('sha256');\n const stream = createReadStream(path);\n stream.on('data', (chunk) => {\n hasher.update(chunk);\n });\n stream.on('end', () => {\n resolve(SHA256_PREFIX + hasher.digest('hex'));\n });\n stream.on('error', reject);\n });\n}\n\nfunction isStructuralArgvToken(token: string): boolean {\n if (token === '--') return true;\n if (/^-[A-Za-z0-9?]$/.test(token)) return true; // -f\n if (/^--[A-Za-z][A-Za-z0-9_-]*$/.test(token)) return true; // --flag-name\n return false;\n}\n\n/**\n * Encode argv per --capture-mode.\n * hashed -> single sha256 over the JSON-canonical argv array\n * redacted -> preserve only structural tokens; redact values as\n * `<redacted:N>` (UTF-8 byte length); preserve `--key=`\n * prefix and redact only the value portion\n * raw -> verbatim, with secret-scan suppression replacing token\n * text with `<secret-suppressed:CATEGORY>`; tokens that\n * exceed argv_max_bytes HARD-FAIL with\n * `cli.argv_token_too_long` (no silent truncation)\n */\nfunction encodeArgv(\n rawArgv: string[],\n mode: ArgvMode,\n argvCaptureBytes: number,\n secretScanEnabled: boolean\n): { argv?: string[]; argv_sha256?: string; argv_token_count: number } {\n const tokenCount = rawArgv.length;\n if (mode === 'hashed') {\n const canon = JSON.stringify(rawArgv);\n return { argv_sha256: sha256Hex(canon), argv_token_count: tokenCount };\n }\n if (mode === 'redacted') {\n const out: string[] = rawArgv.map((tok) => {\n if (isStructuralArgvToken(tok)) return tok;\n // `--key=value` -> preserve `--key=`; redact value\n const eq = tok.match(/^(--[A-Za-z][A-Za-z0-9_-]*=)(.*)$/);\n if (eq) {\n const value = eq[2];\n const byteLen = Buffer.byteLength(value, 'utf8');\n return `${eq[1]}<redacted:${byteLen}>`;\n }\n const byteLen = Buffer.byteLength(tok, 'utf8');\n return `<redacted:${byteLen}>`;\n });\n return { argv: out, argv_token_count: tokenCount };\n }\n // raw: hard-fail on oversized token rather than silently truncate.\n const out: string[] = rawArgv.map((tok, idx) => {\n if (Buffer.byteLength(tok, 'utf8') > argvCaptureBytes) {\n throw new CliObservationBuilderError(\n 'cli.argv_token_too_long',\n `command.argv[${idx}] (${Buffer.byteLength(tok, 'utf8')} bytes) exceeds argv_max_bytes (${argvCaptureBytes}); raise --capture-argv-bytes or use --capture-mode hashed/redacted`\n );\n }\n let scanResult: { category: string } | null = null;\n if (secretScanEnabled) {\n scanResult = scanArgvElement(tok);\n }\n if (scanResult) {\n return `<secret-suppressed:${scanResult.category}>`;\n }\n return tok;\n });\n return { argv: out, argv_token_count: tokenCount };\n}\n\nfunction buildEnvBlock(\n parentEnv: NodeJS.ProcessEnv,\n allowlist: string[],\n mode: EnvMode,\n rawEnvEnabled: boolean\n): { mode: EnvMode; entries: Record<string, { value_sha256?: string; value?: string }> } {\n // Hard-fail on inconsistent state: env.mode='raw' without the\n // double-opt-in flag is a flag-layer bug; never silently downgrade\n // to hashed (would mask the bug AND emit a misleading record).\n if (mode === 'raw' && !rawEnvEnabled) {\n throw new CliObservationBuilderError(\n 'cli.env_mode_inconsistent',\n 'env.mode=raw requires --unsafe-allow-raw-env; refusing to silently downgrade to hashed'\n );\n }\n const entries: Record<string, { value_sha256?: string; value?: string }> = {};\n for (const key of allowlist) {\n const val = parentEnv[key];\n if (val === undefined) continue;\n if (mode === 'hashed') {\n entries[key] = { value_sha256: sha256Hex(val) };\n } else {\n entries[key] = { value: val };\n }\n }\n return { mode, entries };\n}\n\ninterface CwdRefBuilt {\n cwd_mode: CwdMode;\n cwd_sha256?: string;\n cwd_basename?: string;\n cwd_absolute?: string;\n}\n\nfunction buildCwd(cwd: string, mode: CwdMode): CwdRefBuilt {\n switch (mode) {\n case 'none':\n return { cwd_mode: 'none' };\n case 'hashed':\n return { cwd_mode: 'hashed', cwd_sha256: sha256Hex(cwd) };\n case 'basename':\n return { cwd_mode: 'basename', cwd_basename: basenameAny(cwd) };\n case 'absolute':\n return { cwd_mode: 'absolute', cwd_absolute: cwd };\n }\n}\n\ninterface BinaryRefBuilt {\n path_mode: BinaryPathMode;\n path_sha256?: string;\n path_absolute?: string;\n size_bytes?: number;\n mode_octal?: string;\n sha256?: string;\n version?: string;\n shell_ref?: string;\n}\n\nasync function buildBinary(\n resolvedProgram: string,\n pathMode: BinaryPathMode,\n shellMode: boolean\n): Promise<BinaryRefBuilt> {\n const built: BinaryRefBuilt = { path_mode: pathMode };\n let isRegularFile = false;\n if (pathMode !== 'none') {\n try {\n const st = statSync(resolvedProgram);\n built.size_bytes = st.size;\n built.mode_octal = (st.mode & 0o7777).toString(8).padStart(4, '0');\n isRegularFile = st.isFile();\n } catch {\n // Shell builtins / non-file targets: skip stat metadata.\n }\n }\n switch (pathMode) {\n case 'none':\n break;\n case 'hashed':\n built.path_sha256 = sha256Hex(resolvedProgram);\n break;\n case 'absolute':\n built.path_absolute = resolvedProgram;\n break;\n }\n // Content digest: streaming; never read the full binary into memory.\n if (pathMode !== 'none' && isRegularFile) {\n try {\n built.sha256 = await sha256OfFile(resolvedProgram);\n } catch {\n // ignore (race: binary moved/deleted between stat and read)\n }\n }\n if (shellMode) {\n if (pathMode === 'none') {\n throw new CliObservationBuilderError(\n 'cli.shell_mode_required',\n 'shell_mode=true requires --capture-binary-path != none so shell_ref has a defined source'\n );\n }\n // shell_ref is ALWAYS a sha256 digest of the resolved shell binary\n // path. Under hashed mode it equals path_sha256 by construction;\n // under absolute mode it is still a digest (path disclosure stays\n // in binary.path_absolute, never in shell_ref). shell_mode is\n // biconditional with the presence of shell_ref (enforced by schema).\n built.shell_ref = built.path_sha256 ?? sha256Hex(resolvedProgram);\n }\n return built;\n}\n\n/**\n * Apply secret-scan suppression to a stream sample. If scan detects a\n * token-like pattern, the sample is OMITTED and\n * `sample_suppressed_reason` + `matched_pattern_category` are recorded.\n */\nfunction applySecretScan<T extends { sample_base64?: string }>(\n ref: T,\n scanEnabled: boolean\n): T & {\n sample_suppressed_reason?: 'secret_pattern_detected';\n matched_pattern_category?: string;\n} {\n if (!scanEnabled || ref.sample_base64 === undefined) {\n return ref;\n }\n const decoded = Buffer.from(ref.sample_base64, 'base64').toString('utf8');\n const match = scanForSecrets(decoded);\n if (!match) return ref;\n // Suppress: omit sample_base64; record reason + category.\n const { sample_base64: _omit, ...rest } = ref;\n void _omit;\n return {\n ...(rest as T),\n sample_suppressed_reason: 'secret_pattern_detected' as const,\n matched_pattern_category: match.category,\n };\n}\n\nexport async function buildObservation(input: BuilderInput): Promise<CliExecutionObservation> {\n const argvEncoded = encodeArgv(\n input.rawArgv,\n input.argvMode,\n input.argvCaptureBytes,\n input.secretScanEnabled\n );\n\n // command.program is ALWAYS basename-only. The resolved absolute path\n // is governed by --capture-binary-path and recorded only under\n // binary.path_*. Reduce path-bearing user tokens to their basename\n // using a platform-agnostic helper (handles both / and \\ on any OS).\n const programName = basenameAny(input.programToken);\n const command =\n input.argvMode === 'hashed'\n ? {\n program: programName,\n argv_mode: 'hashed' as const,\n argv_sha256: argvEncoded.argv_sha256!,\n argv_token_count: argvEncoded.argv_token_count,\n }\n : input.argvMode === 'redacted'\n ? {\n program: programName,\n argv_mode: 'redacted' as const,\n argv: argvEncoded.argv!,\n argv_token_count: argvEncoded.argv_token_count,\n }\n : {\n program: programName,\n argv_mode: 'raw' as const,\n argv: argvEncoded.argv!,\n argv_token_count: argvEncoded.argv_token_count,\n };\n\n const cwd = buildCwd(input.cwd, input.cwdMode);\n const binary = await buildBinary(\n input.resolvedProgramPath,\n input.binaryPathMode,\n input.shellMode\n );\n\n const env = buildEnvBlock(\n input.parentEnv,\n input.envAllowlist,\n input.envMode,\n input.rawEnvEnabled\n );\n\n const stdoutRef = applySecretScan(input.capture.stdout, input.secretScanEnabled);\n const stderrRef = applySecretScan(input.capture.stderr, input.secretScanEnabled);\n\n const observation: CliExecutionObservation = {\n type: CLI_COMMAND_EXECUTION_TYPE,\n surface: { kind: 'cli' },\n command,\n cwd: cwd as CliExecutionObservation['cwd'],\n binary: binary as CliExecutionObservation['binary'],\n stdin_ref: input.capture.stdin as CliExecutionObservation['stdin_ref'],\n stdout_ref: stdoutRef as CliExecutionObservation['stdout_ref'],\n stderr_ref: stderrRef as CliExecutionObservation['stderr_ref'],\n env,\n started_at: input.capture.startedAt,\n finished_at: input.capture.finishedAt,\n duration_ms: input.capture.durationMs,\n exit_code: input.capture.exitCode,\n ...(input.capture.signal ? { signal: input.capture.signal } : {}),\n timed_out: input.capture.timedOut,\n timeout_ms: input.timeoutMs,\n kill_grace_ms: input.killGraceMs,\n ...(input.capture.terminationSignal\n ? { termination_signal: input.capture.terminationSignal }\n : {}),\n exit_code_mode: input.exitCodeMode,\n shell_mode: input.shellMode,\n execution_mode: input.executionMode,\n capture_policy: {\n stdout_max_bytes: input.stdoutSampleBytes,\n stderr_max_bytes: input.stderrSampleBytes,\n argv_max_bytes: input.argvCaptureBytes,\n env_allowlist: input.envAllowlist,\n stdin_mode: input.stdinMode,\n cwd_mode: input.cwdMode,\n binary_path_mode: input.binaryPathMode,\n secret_scan: input.secretScanEnabled,\n raw_capture_unsafely_allowed: input.rawCaptureEnabled,\n raw_env_unsafely_allowed: input.rawEnvEnabled,\n secret_scan_disabled_unsafely: input.secretScanDisabledUnsafely,\n timeout_ms: input.timeoutMs,\n kill_grace_ms: input.killGraceMs,\n exit_code_mode: input.exitCodeMode,\n },\n platform: {\n os: process.platform,\n arch: process.arch,\n peac_cli_version: input.peacCliVersion,\n },\n ...(input.policyDigest ? { policy_digest: input.policyDigest } : {}),\n ...(input.configDigest ? { config_digest: input.configDigest } : {}),\n ...(input.approvalRef ? { approval_ref: input.approvalRef } : {}),\n };\n\n return observation;\n}\n","/**\n * Shared CLI execution observation pipeline.\n *\n * Both `peac observe command` (unsigned JSON emission) and `peac\n * record command` (Wire 0.2 JWS signing) reuse the same capture +\n * build + validate pipeline so a record produced by one is\n * indistinguishable from a record produced by the other (modulo the\n * outer signing envelope). This module is the single source of truth\n * for that shared behavior.\n *\n * Public surface intentionally narrow:\n * - resolveProgramPath(token, childEnv) -- childEnv-aware PATH lookup\n * - preflightOutputWritable(output) -- writability check before spawn\n * - runObservationCore(opts, ...) -- capture + build + validate\n *\n * The pipeline is an OBSERVER, not a sandbox / permission system /\n * shell orchestrator / process supervisor / job scheduler.\n */\n\nimport { delimiter, join, resolve as pathResolve } from 'node:path';\nimport { statSync } from 'node:fs';\nimport { CliExecutionSchema, type CliExecutionObservation } from '@peac/schema';\nimport { captureCommand, CliSpawnFailedError, type CaptureResult } from './capture.js';\nimport { preflightOutputWritable as neutralPreflightOutputWritable } from './output-preflight.js';\nimport {\n buildObservation,\n CliObservationBuilderError,\n type ArgvMode,\n type CwdMode,\n type BinaryPathMode,\n type EnvMode,\n type StdinMode,\n type ExitCodeMode,\n type ExecutionMode,\n} from './observation-builder.js';\n\n/** Capture-pipeline options shared by both subcommands. */\nexport interface CoreObservationOptions {\n captureMode: ArgvMode;\n unsafeAllowRawCapture: boolean;\n captureStdinMode: StdinMode;\n captureStdoutBytes: number;\n captureStderrBytes: number;\n captureArgvBytes: number;\n envAllow: string[];\n envMode: EnvMode;\n unsafeAllowRawEnv: boolean;\n captureCwdMode: CwdMode;\n captureBinaryPath: BinaryPathMode;\n secretScan: boolean;\n unsafeDisableSecretScan: boolean;\n policyDigest?: string;\n configDigest?: string;\n approvalRef?: string;\n executionMode: ExecutionMode;\n shellMode: boolean;\n timeoutMs: number;\n killGraceMs: number;\n exitCodeMode: ExitCodeMode;\n}\n\nexport interface CoreObservationIO {\n /** Environment passed to the spawned child (what the child RECEIVES). */\n childEnv: NodeJS.ProcessEnv;\n /** Environment inspected by --env-allow for record entries. */\n captureEnv: NodeJS.ProcessEnv;\n cwd: string;\n peacCliVersion: string;\n}\n\nexport type CoreObservationResult =\n | { ok: true; observation: CliExecutionObservation; capture: CaptureResult }\n | { ok: false; code: string; message: string };\n\n/**\n * Resolve a program token to its absolute path. Resolution honors the\n * supplied `childEnv` ONLY (the environment that will be passed to\n * spawn). The ambient `process.env` is not consulted: callers must\n * pass `childEnv` explicitly so the execution-environment source is\n * auditable at the call site. When no executable is found in\n * `childEnv.PATH`, returns the token unchanged so spawn surfaces a\n * clear ENOENT error.\n */\nexport function resolveProgramPath(token: string, childEnv: NodeJS.ProcessEnv): string {\n if (token.includes('/') || token.includes('\\\\')) {\n return pathResolve(token);\n }\n const PATH = childEnv.PATH ?? '';\n const dirs = PATH.split(delimiter);\n const exts =\n process.platform === 'win32' ? (childEnv.PATHEXT ?? '.EXE;.CMD;.BAT').split(';') : [''];\n for (const dir of dirs) {\n if (!dir) continue;\n for (const ext of exts) {\n const candidate = join(dir, token + ext);\n try {\n const st = statSync(candidate);\n if (!st.isFile()) continue;\n if (process.platform !== 'win32' && (st.mode & 0o111) === 0) continue;\n return candidate;\n } catch {\n // not found; try next\n }\n }\n }\n return token;\n}\n\n/**\n * Re-export of the neutral output-path preflight from\n * `lib/output-preflight.ts`. Kept here so PR 2 callers\n * (`observe command`, `record command`) and any future callers that\n * already import this name from this module continue to work.\n */\nexport const preflightOutputWritable = neutralPreflightOutputWritable;\n\n/**\n * Run the shared capture + build + validate pipeline.\n *\n * Returns `{ ok: true, observation, capture }` when all stages succeed\n * (observation is the schema-validated record; capture carries the\n * child's exit info for downstream exit-code-mode handling).\n * Returns `{ ok: false, code, message }` for any structured failure.\n *\n * Stages:\n * 1. resolveProgramPath(programToken, childEnv)\n * 2. captureCommand(...) (raises CliSpawnFailedError)\n * 3. buildObservation(...) (raises CliObservationBuilderError)\n * 4. CliExecutionSchema.safeParse(observation)\n */\nexport async function runObservationCore(\n opts: CoreObservationOptions,\n programToken: string,\n args: string[],\n io: CoreObservationIO\n): Promise<CoreObservationResult> {\n const resolvedProgramPath = resolveProgramPath(programToken, io.childEnv);\n\n let capture: CaptureResult;\n try {\n capture = await captureCommand({\n program: resolvedProgramPath,\n args,\n cwd: io.cwd,\n env: io.childEnv,\n stdinMode: opts.captureStdinMode,\n rawCaptureEnabled: opts.captureMode === 'raw' && opts.unsafeAllowRawCapture,\n stdoutSampleBytes: opts.captureStdoutBytes,\n stderrSampleBytes: opts.captureStderrBytes,\n timeoutMs: opts.timeoutMs,\n killGraceMs: opts.killGraceMs,\n });\n } catch (err) {\n if (err instanceof CliSpawnFailedError) {\n return { ok: false, code: err.code, message: err.message };\n }\n return {\n ok: false,\n code: 'cli.spawn_failed',\n message: err instanceof Error ? err.message : String(err),\n };\n }\n\n let observation: CliExecutionObservation;\n try {\n observation = await buildObservation({\n capture,\n programToken,\n resolvedProgramPath,\n rawArgv: args,\n cwd: io.cwd,\n argvMode: opts.captureMode,\n cwdMode: opts.captureCwdMode,\n binaryPathMode: opts.captureBinaryPath,\n envMode: opts.envMode,\n stdinMode: opts.captureStdinMode,\n envAllowlist: opts.envAllow,\n parentEnv: io.captureEnv,\n rawCaptureEnabled: opts.captureMode === 'raw' && opts.unsafeAllowRawCapture,\n rawEnvEnabled: opts.envMode === 'raw' && opts.unsafeAllowRawEnv,\n secretScanEnabled: opts.secretScan,\n secretScanDisabledUnsafely: opts.unsafeDisableSecretScan,\n argvCaptureBytes: opts.captureArgvBytes,\n stdoutSampleBytes: opts.captureStdoutBytes,\n stderrSampleBytes: opts.captureStderrBytes,\n timeoutMs: opts.timeoutMs,\n killGraceMs: opts.killGraceMs,\n exitCodeMode: opts.exitCodeMode,\n executionMode: opts.executionMode,\n shellMode: opts.shellMode,\n policyDigest: opts.policyDigest,\n configDigest: opts.configDigest,\n approvalRef: opts.approvalRef,\n peacCliVersion: io.peacCliVersion,\n });\n } catch (err) {\n if (err instanceof CliObservationBuilderError) {\n return { ok: false, code: err.code, message: err.message };\n }\n return {\n ok: false,\n code: 'cli.builder_failed',\n message: err instanceof Error ? err.message : String(err),\n };\n }\n\n const parsed = CliExecutionSchema.safeParse(observation);\n if (!parsed.success) {\n const first = parsed.error.issues[0];\n const path = first?.path?.join('.') ?? '';\n return {\n ok: false,\n code: 'cli.schema_rejection',\n message: `${path ? '[' + path + '] ' : ''}${first?.message ?? 'schema validation failed'}`,\n };\n }\n return { ok: true, observation: parsed.data, capture };\n}\n","/**\n * Shared command-option validation for `observe command` and\n * `record command`. Single source of truth for:\n *\n * - numeric flag range / NaN-safe checks\n * - env-allowlist key grammar + byte cap\n * - record-only digest / opaque-ref preflights\n * - raw capture / raw env / secret-scan unsafe-flag pairing\n * - shell-binary detection acknowledgement\n * - raw argv per-token cap\n *\n * Both commands consume `validateCoreCommandOptions` so their\n * preflight semantics never drift. Record-command additionally calls\n * `validateSigningOptions` for the signing-input mutex and canonical\n * issuer URL check.\n */\n\nimport { OpaqueRefSchema, isCanonicalIss } from '@peac/schema';\nimport { CLI_LIMITS, isShellBinary } from './cli-limits.js';\nimport type {\n ArgvMode,\n CwdMode,\n BinaryPathMode,\n EnvMode,\n StdinMode,\n ExitCodeMode,\n ExecutionMode,\n} from './observation-builder.js';\n\n/**\n * Stable error codes shared by observe command and record command. The\n * subcommands re-export the relevant subset under their own\n * `OBSERVE_COMMAND_ERROR_CODES` / `RECORD_COMMAND_ERROR_CODES` for\n * call-site clarity; both names point at these strings.\n */\nexport const COMMAND_OPTION_ERROR_CODES = {\n programRequired: 'cli.program_required',\n unsafeFlagRequired: 'cli.unsafe_flag_required',\n secretScanDisableRequiresUnsafeFlag: 'cli.secret_scan_disable_requires_unsafe_flag',\n shellModeRequired: 'cli.shell_mode_required',\n argvTokenTooLong: 'cli.argv_token_too_long',\n outOfRange: 'cli.out_of_range',\n invalidPolicyDigest: 'cli.invalid_policy_digest',\n invalidConfigDigest: 'cli.invalid_config_digest',\n invalidApprovalRef: 'cli.invalid_approval_ref',\n invalidEnvKey: 'cli.invalid_env_key',\n // Signing-only (used by validateSigningOptions).\n signingInputRequired: 'cli.signing_input_required',\n signingInputConflict: 'cli.signing_input_conflict',\n issuerIdRequired: 'cli.issuer_id_required',\n issuerIdInvalid: 'cli.issuer_id_invalid',\n} as const;\n\nexport interface ValidationFailure {\n code: string;\n message: string;\n}\n\n/** Common option shape both subcommands share (no signing fields). */\nexport interface CoreCommandOptions {\n captureMode: ArgvMode;\n unsafeAllowRawCapture: boolean;\n captureStdinMode: StdinMode;\n captureStdoutBytes: number;\n captureStderrBytes: number;\n captureArgvBytes: number;\n envAllow: string[];\n envMode: EnvMode;\n unsafeAllowRawEnv: boolean;\n captureCwdMode: CwdMode;\n captureBinaryPath: BinaryPathMode;\n secretScan: boolean;\n unsafeDisableSecretScan: boolean;\n policyDigest?: string;\n configDigest?: string;\n approvalRef?: string;\n executionMode: ExecutionMode;\n shellMode: boolean;\n timeoutMs: number;\n killGraceMs: number;\n exitCodeMode: ExitCodeMode;\n}\n\n/** Signing-input shape consumed by record command. */\nexport interface SigningOptions {\n issuerKey?: string;\n issuerId?: string;\n unsafeEphemeralKey: boolean;\n}\n\nconst SHA256_DIGEST = /^sha256:[a-f0-9]{64}$/;\nconst ENV_KEY_GRAMMAR = /^[A-Za-z_][A-Za-z0-9_]*$/;\nconst ENV_KEY_BYTES_MAX = 256;\n\n/** True iff `n` is a finite, in-range integer (rejects NaN, Infinity, floats). */\nexport function isValidIntInRange(n: unknown, min: number, max: number): boolean {\n return typeof n === 'number' && Number.isInteger(n) && Number.isFinite(n) && n >= min && n <= max;\n}\n\n/** UTF-8 byte length of a string. */\nexport function utf8Bytes(s: string): number {\n return new TextEncoder().encode(s).byteLength;\n}\n\n/** Platform-agnostic basename -- strips both `/` and `\\`. */\nexport function basenameAny(p: string): string {\n return p.replace(/^.*[\\\\/]/, '');\n}\n\n/**\n * Validate flags shared by observe command and record command. Returns\n * an array of failures; empty when the options + child argv are\n * acceptable. Caller surfaces failures to stderr and exits 2 BEFORE\n * spawning the child.\n */\nexport function validateCoreCommandOptions(\n opts: CoreCommandOptions,\n childArgv: string[]\n): ValidationFailure[] {\n const failures: ValidationFailure[] = [];\n\n if (childArgv.length === 0) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.programRequired,\n message: 'a program after `--` is required (e.g., -- echo hi)',\n });\n return failures;\n }\n\n // Numeric range checks. `isValidIntInRange` rejects NaN, Infinity,\n // floats, and out-of-range integers with one stable error code.\n if (!isValidIntInRange(opts.timeoutMs, CLI_LIMITS.minTimeoutMs, CLI_LIMITS.maxTimeoutMs)) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.outOfRange,\n message: `--timeout-ms must be a finite integer in [${CLI_LIMITS.minTimeoutMs}, ${CLI_LIMITS.maxTimeoutMs}]`,\n });\n }\n if (!isValidIntInRange(opts.killGraceMs, CLI_LIMITS.minKillGraceMs, CLI_LIMITS.maxKillGraceMs)) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.outOfRange,\n message: `--kill-grace-ms must be a finite integer in [${CLI_LIMITS.minKillGraceMs}, ${CLI_LIMITS.maxKillGraceMs}]`,\n });\n }\n if (!isValidIntInRange(opts.captureStdoutBytes, 0, CLI_LIMITS.maxStdoutSampleBytes)) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.outOfRange,\n message: `--capture-stdout-bytes must be a finite integer in [0, ${CLI_LIMITS.maxStdoutSampleBytes}]`,\n });\n }\n if (!isValidIntInRange(opts.captureStderrBytes, 0, CLI_LIMITS.maxStderrSampleBytes)) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.outOfRange,\n message: `--capture-stderr-bytes must be a finite integer in [0, ${CLI_LIMITS.maxStderrSampleBytes}]`,\n });\n }\n if (!isValidIntInRange(opts.captureArgvBytes, 0, CLI_LIMITS.maxArgvCaptureBytes)) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.outOfRange,\n message: `--capture-argv-bytes must be a finite integer in [0, ${CLI_LIMITS.maxArgvCaptureBytes}]`,\n });\n }\n if (opts.envAllow.length > CLI_LIMITS.maxEnvEntries) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.outOfRange,\n message: `--env-allow accepts at most ${CLI_LIMITS.maxEnvEntries} keys`,\n });\n }\n\n // Env key grammar + byte cap.\n for (const key of opts.envAllow) {\n if (!ENV_KEY_GRAMMAR.test(key)) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.invalidEnvKey,\n message: `--env-allow key '${key}' must match ${ENV_KEY_GRAMMAR}`,\n });\n } else if (utf8Bytes(key) > ENV_KEY_BYTES_MAX) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.invalidEnvKey,\n message: `--env-allow key '${key}' exceeds ${ENV_KEY_BYTES_MAX} UTF-8 bytes`,\n });\n }\n }\n\n // Record-only opaque references.\n if (opts.policyDigest !== undefined && !SHA256_DIGEST.test(opts.policyDigest)) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.invalidPolicyDigest,\n message: '--policy-digest must match sha256:<64 lowercase hex>',\n });\n }\n if (opts.configDigest !== undefined && !SHA256_DIGEST.test(opts.configDigest)) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.invalidConfigDigest,\n message: '--config-digest must match sha256:<64 lowercase hex>',\n });\n }\n if (opts.approvalRef !== undefined) {\n const ref = OpaqueRefSchema.safeParse(opts.approvalRef);\n if (!ref.success) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.invalidApprovalRef,\n message: `--approval-ref must satisfy the opaque-reference grammar: ${ref.error.issues.map((i) => i.message).join('; ')}`,\n });\n }\n }\n\n // Unsafe-flag pairing.\n if (opts.captureMode === 'raw' && !opts.unsafeAllowRawCapture) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.unsafeFlagRequired,\n message: '--capture-mode raw requires --unsafe-allow-raw-capture',\n });\n }\n if (opts.envMode === 'raw' && !opts.unsafeAllowRawEnv) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.unsafeFlagRequired,\n message: '--env-mode raw requires --unsafe-allow-raw-env',\n });\n }\n if (opts.unsafeAllowRawCapture && !opts.secretScan && !opts.unsafeDisableSecretScan) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.secretScanDisableRequiresUnsafeFlag,\n message: '--secret-scan off under raw capture requires --unsafe-disable-secret-scan',\n });\n }\n\n // Raw argv per-token cap (skip the cap-only-meaningful-in-raw logic\n // when not in raw mode).\n if (opts.captureMode === 'raw' && opts.unsafeAllowRawCapture) {\n const tokens = childArgv.slice(1);\n for (const tok of tokens) {\n if (utf8Bytes(tok) > opts.captureArgvBytes) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.argvTokenTooLong,\n message: `raw argv token (${utf8Bytes(tok)} bytes) exceeds --capture-argv-bytes (${opts.captureArgvBytes})`,\n });\n break;\n }\n }\n }\n\n // Shell-binary acknowledgement: hard fail if a known shell binary\n // is supplied without --shell-mode.\n const programToken = childArgv[0];\n const programBasename = basenameAny(programToken);\n if (isShellBinary(programBasename) && !opts.shellMode) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.shellModeRequired,\n message: `program '${programBasename}' is a shell binary; --shell-mode is required to acknowledge that the user intentionally invoked a shell`,\n });\n }\n if (opts.shellMode && opts.captureBinaryPath === 'none') {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.shellModeRequired,\n message: '--shell-mode requires --capture-binary-path != none',\n });\n }\n\n return failures;\n}\n\n/**\n * Validate signing-input flags consumed by record command. Enforces\n * mutex (--issuer-key XOR --unsafe-ephemeral-key), required\n * --issuer-id, and canonical-issuer-URL form. Caller appends these\n * failures to the core failures and exits 2 BEFORE running the child.\n */\nexport function validateSigningOptions(opts: SigningOptions): ValidationFailure[] {\n const failures: ValidationFailure[] = [];\n const hasIssuerKey = typeof opts.issuerKey === 'string' && opts.issuerKey.length > 0;\n const hasEphemeral = opts.unsafeEphemeralKey === true;\n if (!hasIssuerKey && !hasEphemeral) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.signingInputRequired,\n message:\n 'record command requires exactly one of --issuer-key <env:VAR|file:/path> or --unsafe-ephemeral-key',\n });\n }\n if (hasIssuerKey && hasEphemeral) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.signingInputConflict,\n message: '--issuer-key and --unsafe-ephemeral-key are mutually exclusive',\n });\n }\n if (typeof opts.issuerId !== 'string' || opts.issuerId.length === 0) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.issuerIdRequired,\n message: '--issuer-id <url> is required (canonical issuer URL)',\n });\n } else if (!isCanonicalIss(opts.issuerId)) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.issuerIdInvalid,\n message: `--issuer-id '${opts.issuerId}' is not canonical (expected https:// ASCII origin or did: identifier)`,\n });\n }\n return failures;\n}\n","/**\n * `peac observe command` subcommand.\n *\n * Wraps a child process and emits an unsigned CLI execution observation\n * record to stdout (or `--output <file>`). Hard security defaults:\n * - argv hashed\n * - stdout/stderr length + sha256 + truncated only (no sample without\n * double-opt-in raw mode)\n * - stdin closed (none)\n * - env capture deny-by-default\n * - cwd hashed; binary path hashed\n * - secret-scan on\n * - shell binary detected without --shell-mode hard-fails\n *\n * The wrapper is an OBSERVER, not a sandbox / permission system / shell\n * orchestrator / process supervisor / job scheduler. It does not\n * synthesize shell syntax; the command after `--` is spawned exactly as\n * supplied with `shell: false`.\n */\n\nimport { Command, Option } from 'commander';\nimport { writeFileSync } from 'node:fs';\nimport { CLI_LIMITS } from '../lib/cli-limits.js';\nimport {\n preflightOutputWritable,\n resolveProgramPath,\n runObservationCore,\n type CoreObservationOptions,\n type CoreObservationIO,\n} from '../lib/observation-pipeline.js';\nimport {\n COMMAND_OPTION_ERROR_CODES,\n validateCoreCommandOptions,\n type ValidationFailure,\n} from '../lib/command-option-validation.js';\nimport type {\n ArgvMode,\n CwdMode,\n BinaryPathMode,\n EnvMode,\n StdinMode,\n ExitCodeMode,\n ExecutionMode,\n} from '../lib/observation-builder.js';\n\n// Re-export the helpers that the lib now owns so existing tests + any\n// future consumers continue to import them from the subcommand module.\nexport { preflightOutputWritable, resolveProgramPath, runObservationCore };\nexport type { CoreObservationOptions, CoreObservationIO };\n\nconst ARGV_MODES = ['hashed', 'redacted', 'raw'] as const;\nconst CWD_MODES = ['none', 'hashed', 'basename', 'absolute'] as const;\nconst BINARY_PATH_MODES = ['none', 'hashed', 'absolute'] as const;\nconst STDIN_MODES = ['none', 'length-only', 'hashed'] as const;\nconst ENV_MODES = ['hashed', 'raw'] as const;\nconst EXIT_CODE_MODES = ['child', 'record'] as const;\nconst EXECUTION_MODES = [\n 'deterministic_script',\n 'templated_flow',\n 'agent_loop',\n 'human_step',\n 'hybrid',\n] as const;\n\n/**\n * Stable error codes surfaced to the user via stderr + non-zero exit.\n * Mirrors the shared `COMMAND_OPTION_ERROR_CODES` set plus a few\n * subcommand-specific codes (spawn-failed, schema-rejection,\n * output-write-failed) that originate inside `runObservationCore` or\n * the emit step rather than the option-validation layer.\n */\nexport const OBSERVE_COMMAND_ERROR_CODES = {\n ...COMMAND_OPTION_ERROR_CODES,\n envModeInconsistent: 'cli.env_mode_inconsistent',\n schemaRejection: 'cli.schema_rejection',\n unsupportedFlag: 'cli.unsupported_flag',\n spawnFailed: 'cli.spawn_failed',\n outputWriteFailed: 'cli.output_write_failed',\n} as const;\n\nexport interface ObserveCommandOptions {\n /** Resolved CLI flag values; tests construct this directly. */\n captureMode: ArgvMode;\n unsafeAllowRawCapture: boolean;\n captureStdinMode: StdinMode;\n captureStdoutBytes: number;\n captureStderrBytes: number;\n captureArgvBytes: number;\n envAllow: string[];\n envMode: EnvMode;\n unsafeAllowRawEnv: boolean;\n captureCwdMode: CwdMode;\n captureBinaryPath: BinaryPathMode;\n secretScan: boolean;\n unsafeDisableSecretScan: boolean;\n policyDigest?: string;\n configDigest?: string;\n approvalRef?: string;\n executionMode: ExecutionMode;\n shellMode: boolean;\n output: string;\n timeoutMs: number;\n killGraceMs: number;\n exitCodeMode: ExitCodeMode;\n}\n\nexport interface ObserveCommandIO {\n /** Defaults to process.stdout.write. */\n writeStdout: (chunk: string) => void;\n /** Defaults to process.stderr.write. */\n writeStderr: (chunk: string) => void;\n /**\n * Environment passed to the child process. Defaults to process.env.\n * Distinct from `captureEnv` so env-capture policy (what PEAC RECORDS)\n * stays decoupled from execution env (what the child RECEIVES).\n */\n childEnv: NodeJS.ProcessEnv;\n /**\n * Environment inspected by --env-allow for record entries. Defaults\n * to process.env. Tests override either side independently.\n */\n captureEnv: NodeJS.ProcessEnv;\n /** Defaults to process.cwd(). */\n cwd: string;\n /** Defaults to a tiny version constant. */\n peacCliVersion: string;\n}\n\nexport interface ObserveCommandResult {\n exitCode: number;\n}\n\nconst DEFAULT_OPTIONS: ObserveCommandOptions = {\n captureMode: 'hashed',\n unsafeAllowRawCapture: false,\n captureStdinMode: 'none',\n captureStdoutBytes: CLI_LIMITS.defaultStdoutSampleBytes,\n captureStderrBytes: CLI_LIMITS.defaultStderrSampleBytes,\n captureArgvBytes: CLI_LIMITS.defaultArgvCaptureBytes,\n envAllow: [],\n envMode: 'hashed',\n unsafeAllowRawEnv: false,\n captureCwdMode: 'hashed',\n captureBinaryPath: 'hashed',\n secretScan: true,\n unsafeDisableSecretScan: false,\n executionMode: 'deterministic_script',\n shellMode: false,\n output: '-',\n timeoutMs: CLI_LIMITS.defaultTimeoutMs,\n killGraceMs: CLI_LIMITS.defaultKillGraceMs,\n exitCodeMode: 'child',\n};\n\n/**\n * Commander integer flag parser that surfaces NaN / non-integer input\n * as `Number.NaN` instead of silently coercing. The shared option\n * validator rejects NaN via `isValidIntInRange` and emits\n * `cli.out_of_range`.\n */\nexport function parseIntegerFlag(raw: string): number {\n // Reject empty strings explicitly: `Number('')` is 0, not NaN.\n if (raw.trim() === '') return Number.NaN;\n const n = Number(raw);\n return Number.isInteger(n) && Number.isFinite(n) ? n : Number.NaN;\n}\n\n/**\n * Validate flag combinations BEFORE spawning the child. Delegates to\n * `validateCoreCommandOptions` so observe command and record command\n * share one source of truth for option validation.\n */\nexport function validateObserveOptions(\n opts: ObserveCommandOptions,\n childArgv: string[]\n): ValidationFailure[] {\n return validateCoreCommandOptions(opts, childArgv);\n}\n\n/**\n * Pure handler: validates flags, runs the child, builds the\n * observation, validates against the schema, emits JSON. Tests drive\n * this directly without going through commander.\n */\nexport async function runObserveCommand(\n options: Partial<ObserveCommandOptions>,\n childArgv: string[],\n io: Partial<ObserveCommandIO> = {}\n): Promise<ObserveCommandResult> {\n const opts: ObserveCommandOptions = { ...DEFAULT_OPTIONS, ...options };\n const writeStdout = io.writeStdout ?? ((c: string) => process.stdout.write(c));\n const writeStderr = io.writeStderr ?? ((c: string) => process.stderr.write(c));\n const childEnv = io.childEnv ?? process.env;\n const captureEnv = io.captureEnv ?? process.env;\n const cwd = io.cwd ?? process.cwd();\n const peacCliVersion = io.peacCliVersion ?? '0.14.1';\n\n const failures = validateObserveOptions(opts, childArgv);\n if (failures.length > 0) {\n for (const f of failures) {\n writeStderr(`${f.code}: ${f.message}\\n`);\n }\n return { exitCode: 2 };\n }\n\n const programToken = childArgv[0];\n const args = childArgv.slice(1);\n\n // Preflight --output writability BEFORE the child runs. A\n // record-producing wrapper must never run a child only to discover\n // the record cannot be persisted.\n const outputErr = preflightOutputWritable(opts.output);\n if (outputErr !== null) {\n writeStderr(`${OBSERVE_COMMAND_ERROR_CODES.outputWriteFailed}: ${outputErr}\\n`);\n return { exitCode: 2 };\n }\n\n const core = await runObservationCore(opts, programToken, args, {\n childEnv,\n captureEnv,\n cwd,\n peacCliVersion,\n });\n if (!core.ok) {\n writeStderr(`${core.code}: ${core.message}\\n`);\n return { exitCode: 2 };\n }\n\n const json = JSON.stringify(core.observation);\n if (opts.output === '-' || opts.output === '') {\n writeStdout(json + '\\n');\n } else {\n try {\n writeFileSync(opts.output, json + '\\n');\n } catch (err) {\n writeStderr(\n `${OBSERVE_COMMAND_ERROR_CODES.outputWriteFailed}: failed to write '${opts.output}': ${err instanceof Error ? err.message : String(err)}\\n`\n );\n return { exitCode: 2 };\n }\n }\n\n // Exit-code policy.\n if (opts.exitCodeMode === 'record') {\n return { exitCode: 0 };\n }\n // 'child' mode: mirror the child exit code (synthetic 128+sig if signal).\n return { exitCode: core.capture.exitCode };\n}\n\n/**\n * Commander factory for the inner `command` subcommand of the\n * `peac observe` group. Wires --flag parsing and delegates to the pure\n * handler. Public invocation: `peac observe command -- <program> [args...]`.\n */\nexport function observeCommandSubcommand(): Command {\n const cmd = new Command('command');\n cmd\n .description(\n 'Wrap a command and emit an unsigned CLI execution observation record. ' +\n 'observe command is an OBSERVER, not a sandbox, permission system, ' +\n 'shell orchestrator, or process supervisor. The command after `--` ' +\n 'is spawned exactly as supplied (shell: false).'\n )\n .addOption(\n new Option('--capture-mode <mode>', 'argv capture mode')\n .choices([...ARGV_MODES])\n .default('hashed')\n )\n .option(\n '--unsafe-allow-raw-capture',\n 'required alongside --capture-mode raw to acknowledge raw stream sample emission',\n false\n )\n .addOption(\n new Option('--capture-stdin-mode <mode>', 'stdin capture (and pass-through) mode')\n .choices([...STDIN_MODES])\n .default('none')\n )\n .option(\n '--capture-stdout-bytes <n>',\n `stdout sample cap (raw mode only); max ${CLI_LIMITS.maxStdoutSampleBytes}`,\n parseIntegerFlag,\n CLI_LIMITS.defaultStdoutSampleBytes\n )\n .option(\n '--capture-stderr-bytes <n>',\n `stderr sample cap (raw mode only); max ${CLI_LIMITS.maxStderrSampleBytes}`,\n parseIntegerFlag,\n CLI_LIMITS.defaultStderrSampleBytes\n )\n .option(\n '--capture-argv-bytes <n>',\n `argv per-token byte cap (raw mode only); max ${CLI_LIMITS.maxArgvCaptureBytes}`,\n parseIntegerFlag,\n CLI_LIMITS.defaultArgvCaptureBytes\n )\n .option(\n '--env-allow <KEYS>',\n 'comma-separated allowlist of env vars to record (deny-by-default)',\n (v, prev: string[]) =>\n prev.concat(\n v\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean)\n ),\n [] as string[]\n )\n .addOption(\n new Option('--env-mode <mode>', 'env value capture mode')\n .choices([...ENV_MODES])\n .default('hashed')\n )\n .option(\n '--unsafe-allow-raw-env',\n 'required alongside --env-mode raw to acknowledge raw env value capture',\n false\n )\n .addOption(\n new Option('--capture-cwd-mode <mode>', 'cwd capture mode')\n .choices([...CWD_MODES])\n .default('hashed')\n )\n .addOption(\n new Option('--capture-binary-path <mode>', 'binary path capture mode')\n .choices([...BINARY_PATH_MODES])\n .default('hashed')\n )\n .addOption(\n new Option('--secret-scan <state>', 'secret-scan over raw samples')\n .choices(['on', 'off'])\n .default('on')\n )\n .option(\n '--unsafe-disable-secret-scan',\n 'required to disable secret-scan when raw capture is enabled',\n false\n )\n .option('--policy-digest <sha256>', 'optional policy digest (sha256:<hex>)')\n .option('--config-digest <sha256>', 'optional config digest (sha256:<hex>)')\n .option('--approval-ref <opaque>', 'optional opaque approval reference')\n .addOption(\n new Option('--execution-mode <mode>', 'execution-mode tag for this record')\n .choices([...EXECUTION_MODES])\n .default('deterministic_script')\n )\n .option(\n '--shell-mode',\n 'acknowledge that the program is a shell binary; PEAC does NOT rewrite the command',\n false\n )\n .option('--output <file>', 'output path for the JSON record (default: stdout)', '-')\n .option(\n '--timeout-ms <n>',\n `wrapper timeout in ms; max ${CLI_LIMITS.maxTimeoutMs} (24h)`,\n parseIntegerFlag,\n CLI_LIMITS.defaultTimeoutMs\n )\n .option(\n '--kill-grace-ms <n>',\n `SIGTERM-to-SIGKILL grace in ms; max ${CLI_LIMITS.maxKillGraceMs}`,\n parseIntegerFlag,\n CLI_LIMITS.defaultKillGraceMs\n )\n .addOption(\n new Option('--exit-code-mode <mode>', 'wrapper exit-code policy')\n .choices([...EXIT_CODE_MODES])\n .default('child')\n )\n .allowUnknownOption(false)\n .allowExcessArguments(true);\n\n cmd.action(async (rawOpts: Record<string, unknown>, cmdInstance: Command) => {\n // Commander consumes options before `--` and exposes everything\n // after it (the post-`--` positionals) via `cmd.args`. This keeps\n // the wrapper free of `process.argv` indexing.\n const childArgv = cmdInstance.args;\n\n const options: Partial<ObserveCommandOptions> = {\n captureMode: rawOpts.captureMode as ArgvMode,\n unsafeAllowRawCapture: Boolean(rawOpts.unsafeAllowRawCapture),\n captureStdinMode: rawOpts.captureStdinMode as StdinMode,\n captureStdoutBytes: rawOpts.captureStdoutBytes as number,\n captureStderrBytes: rawOpts.captureStderrBytes as number,\n captureArgvBytes: rawOpts.captureArgvBytes as number,\n envAllow: (rawOpts.envAllow as string[]) ?? [],\n envMode: rawOpts.envMode as EnvMode,\n unsafeAllowRawEnv: Boolean(rawOpts.unsafeAllowRawEnv),\n captureCwdMode: rawOpts.captureCwdMode as CwdMode,\n captureBinaryPath: rawOpts.captureBinaryPath as BinaryPathMode,\n secretScan: rawOpts.secretScan === 'on',\n unsafeDisableSecretScan: Boolean(rawOpts.unsafeDisableSecretScan),\n policyDigest: rawOpts.policyDigest as string | undefined,\n configDigest: rawOpts.configDigest as string | undefined,\n approvalRef: rawOpts.approvalRef as string | undefined,\n executionMode: rawOpts.executionMode as ExecutionMode,\n shellMode: Boolean(rawOpts.shellMode),\n output: (rawOpts.output as string) ?? '-',\n timeoutMs: rawOpts.timeoutMs as number,\n killGraceMs: rawOpts.killGraceMs as number,\n exitCodeMode: rawOpts.exitCodeMode as ExitCodeMode,\n };\n\n const result = await runObserveCommand(options, childArgv);\n // Use process.exitCode rather than process.exit() so any pending\n // stdout/stderr writes drain cleanly before Node exits.\n process.exitCode = result.exitCode;\n });\n\n return cmd;\n}\n\n/**\n * Commander factory for the public `peac observe` parent group. Adds\n * the `command` subcommand. Future observation surfaces (e.g.,\n * `peac observe mcp`, `peac observe http`) attach here without\n * widening the verb namespace.\n */\nexport function observeCommand(): Command {\n const observe = new Command('observe').description(\n 'Observe local activity and emit unsigned observation records.'\n );\n observe.addCommand(observeCommandSubcommand());\n return observe;\n}\n","/**\n * Issuer-key loader for `peac record command`.\n *\n * Implements the same issuer-key reference convention used by other\n * PEAC tools: env:VAR_NAME and file:/path. Keeps the CLI signing UX\n * aligned with the existing PEAC convention without coupling\n * @peac/cli to any other package's loader implementation.\n *\n * Supported schemes:\n * env:VAR_NAME loads JSON from process.env.VAR_NAME (or\n * caller-supplied env)\n * file:/path loads JSON from the file path\n *\n * The value at the resolved location is a JSON-encoded\n * Ed25519PrivateJwk:\n *\n * { \"kty\": \"OKP\", \"crv\": \"Ed25519\", \"x\": <b64url>, \"d\": <b64url>,\n * \"kid\": \"optional\" }\n *\n * `kid` is extracted from the JWK if present, otherwise derived from\n * the public key (truncated SHA-256 of the base64url-encoded public\n * key) so runs are reproducible.\n *\n * The loader NEVER logs key bytes; error messages reference field\n * names and structural problems only.\n */\n\nimport { readFile } from 'node:fs/promises';\nimport {\n base64urlDecode,\n base64urlEncode,\n derivePublicKey,\n validateKeypair,\n sha256Hex,\n} from '@peac/crypto';\nimport type { Ed25519PrivateJwk } from '@peac/crypto';\n\nexport class IssuerKeyLoadError extends Error {\n readonly code = 'cli.issuer_key_load_failed';\n constructor(\n message: string,\n readonly cause?: unknown\n ) {\n super(message);\n this.name = 'IssuerKeyLoadError';\n }\n}\n\nexport class IssuerKeyInvalidError extends Error {\n readonly code = 'cli.issuer_key_invalid';\n constructor(\n message: string,\n readonly cause?: unknown\n ) {\n super(message);\n this.name = 'IssuerKeyInvalidError';\n }\n}\n\nexport interface LoadedIssuerKey {\n privateKey: Uint8Array;\n publicKey: Uint8Array;\n kid: string;\n}\n\n/**\n * Load the issuer key from a `--issuer-key` reference.\n *\n * @param schemeUri - One of `env:VAR` or `file:/path`.\n * @param env - Environment to consult for `env:` references.\n * Defaults to `process.env`. Tests inject custom env.\n */\nexport async function loadIssuerKey(\n schemeUri: string,\n env: NodeJS.ProcessEnv = process.env\n): Promise<LoadedIssuerKey> {\n let raw: string;\n\n if (schemeUri.startsWith('env:')) {\n const varName = schemeUri.slice(4);\n if (!varName) {\n throw new IssuerKeyLoadError(\n 'env: scheme requires a variable name (e.g., env:PEAC_ISSUER_KEY)'\n );\n }\n const envValue = env[varName];\n if (!envValue) {\n throw new IssuerKeyLoadError(`environment variable ${varName} is not set or empty`);\n }\n raw = envValue;\n } else if (schemeUri.startsWith('file:')) {\n const filePath = schemeUri.slice(5);\n if (!filePath) {\n throw new IssuerKeyLoadError('file: scheme requires a path (e.g., file:/path/to/key.json)');\n }\n try {\n raw = await readFile(filePath, 'utf-8');\n } catch (err) {\n throw new IssuerKeyLoadError(\n `failed to read key file: ${filePath} (${(err as NodeJS.ErrnoException)?.code ?? (err instanceof Error ? err.message : String(err))})`,\n err\n );\n }\n } else {\n throw new IssuerKeyLoadError(\n `unsupported --issuer-key scheme: ${schemeUri} (expected env:VAR_NAME or file:/path)`\n );\n }\n\n let jwk: unknown;\n try {\n jwk = JSON.parse(raw);\n } catch (err) {\n throw new IssuerKeyInvalidError('issuer key is not valid JSON', err);\n }\n\n if (\n typeof jwk !== 'object' ||\n jwk === null ||\n !('kty' in jwk) ||\n !('crv' in jwk) ||\n !('d' in jwk)\n ) {\n throw new IssuerKeyInvalidError('JWK must contain kty, crv, and d fields');\n }\n const j = jwk as Record<string, unknown>;\n if (j.kty !== 'OKP' || j.crv !== 'Ed25519') {\n throw new IssuerKeyInvalidError(\n `JWK must be Ed25519 (kty: OKP, crv: Ed25519); got kty=${String(j.kty)} crv=${String(j.crv)}`\n );\n }\n if (typeof j.d !== 'string' || typeof j.x !== 'string') {\n throw new IssuerKeyInvalidError('JWK d and x fields must be base64url strings');\n }\n\n const ed25519Jwk: Ed25519PrivateJwk = {\n kty: 'OKP',\n crv: 'Ed25519',\n x: j.x as string,\n d: j.d as string,\n };\n\n const valid = await validateKeypair(ed25519Jwk);\n if (!valid) {\n throw new IssuerKeyInvalidError('JWK keypair validation failed: d does not derive to x');\n }\n\n const privateKey = base64urlDecode(ed25519Jwk.d);\n const publicKey = await derivePublicKey(privateKey);\n\n let kid: string;\n if (typeof j.kid === 'string' && j.kid.length > 0) {\n kid = j.kid;\n } else {\n const pubB64 = base64urlEncode(publicKey);\n const hash = await sha256Hex(pubB64);\n kid = hash.slice(0, 16);\n }\n\n return { privateKey, publicKey, kid };\n}\n\n/**\n * Derive a `kid` from a freshly-generated ephemeral public key. Same\n * formula as the loader's fallback so observation records are\n * consistent with the JWK-based path.\n */\nexport async function deriveKidFromPublicKey(publicKey: Uint8Array): Promise<string> {\n const pubB64 = base64urlEncode(publicKey);\n const hash = await sha256Hex(pubB64);\n return hash.slice(0, 16);\n}\n","/**\n * `peac record command` subcommand.\n *\n * Wraps a child process and emits a Wire 0.2 compact JWS containing\n * the same `org.peacprotocol/cli-execution` observation as\n * `observe command`, signed by the supplied issuer key. Reuses the\n * shared capture / build / validate pipeline from\n * `lib/observation-pipeline.ts` so a record produced by record command\n * is identical to one from observe command (modulo the outer signing\n * envelope).\n *\n * Signing UX uses the existing PEAC issuer-key reference convention:\n *\n * --issuer-key <env:VAR | file:/path>\n * --issuer-id <url>\n * --unsafe-ephemeral-key\n *\n * The wrapper is an OBSERVER, not a sandbox / permission system /\n * shell orchestrator / process supervisor / job scheduler. PEAC does\n * NOT publish or distribute the issuer key; --unsafe-ephemeral-key\n * produces a structurally valid record whose public key is not\n * published through normal issuer-key discovery (use only for local\n * development and tests).\n */\n\nimport { Command, Option } from 'commander';\nimport { writeFileSync } from 'node:fs';\nimport { CLI_COMMAND_EXECUTION_TYPE, CLI_EXECUTION_EXTENSION_KEY } from '@peac/schema';\nimport { issue, IssueError } from '@peac/protocol';\nimport { generateKeypair } from '@peac/crypto';\nimport { CLI_LIMITS } from '../lib/cli-limits.js';\nimport { runObservationCore, preflightOutputWritable } from '../lib/observation-pipeline.js';\nimport { parseIntegerFlag, type ObserveCommandOptions } from './observe-command.js';\nimport {\n COMMAND_OPTION_ERROR_CODES,\n validateCoreCommandOptions,\n validateSigningOptions,\n type ValidationFailure,\n} from '../lib/command-option-validation.js';\nimport {\n loadIssuerKey,\n deriveKidFromPublicKey,\n IssuerKeyLoadError,\n IssuerKeyInvalidError,\n} from '../lib/issuer-key-loader.js';\nimport type {\n ArgvMode,\n CwdMode,\n BinaryPathMode,\n EnvMode,\n StdinMode,\n ExitCodeMode,\n ExecutionMode,\n} from '../lib/observation-builder.js';\n\nconst ARGV_MODES = ['hashed', 'redacted', 'raw'] as const;\nconst CWD_MODES = ['none', 'hashed', 'basename', 'absolute'] as const;\nconst BINARY_PATH_MODES = ['none', 'hashed', 'absolute'] as const;\nconst STDIN_MODES = ['none', 'length-only', 'hashed'] as const;\nconst ENV_MODES = ['hashed', 'raw'] as const;\nconst EXIT_CODE_MODES = ['child', 'record'] as const;\nconst EXECUTION_MODES = [\n 'deterministic_script',\n 'templated_flow',\n 'agent_loop',\n 'human_step',\n 'hybrid',\n] as const;\n\n/**\n * Stable error codes surfaced before the child runs OR after signing\n * fails. Inherits the shared option-validation set so observe command\n * and record command never disagree on validation-layer codes.\n */\nexport const RECORD_COMMAND_ERROR_CODES = {\n ...COMMAND_OPTION_ERROR_CODES,\n outputWriteFailed: 'cli.output_write_failed',\n // Signing-specific (not part of the shared option-validation set).\n issuerKeyLoadFailed: 'cli.issuer_key_load_failed',\n issuerKeyInvalid: 'cli.issuer_key_invalid',\n signingFailed: 'cli.signing_failed',\n} as const;\n\n/** Record-command options = observe command options + signing inputs. */\nexport interface RecordCommandOptions extends ObserveCommandOptions {\n issuerKey?: string;\n issuerId?: string;\n unsafeEphemeralKey: boolean;\n}\n\nexport interface RecordCommandIO {\n writeStdout: (chunk: string) => void;\n writeStderr: (chunk: string) => void;\n childEnv: NodeJS.ProcessEnv;\n captureEnv: NodeJS.ProcessEnv;\n /**\n * Environment used to resolve `env:VAR` issuer-key references.\n * Defaults to `process.env`. Distinct from `childEnv` and `captureEnv`\n * because issuer-key access policy is independent of capture policy.\n */\n issuerKeyEnv: NodeJS.ProcessEnv;\n cwd: string;\n peacCliVersion: string;\n}\n\nexport interface RecordCommandResult {\n exitCode: number;\n}\n\nconst DEFAULT_OPTIONS: RecordCommandOptions = {\n captureMode: 'hashed',\n unsafeAllowRawCapture: false,\n captureStdinMode: 'none',\n captureStdoutBytes: CLI_LIMITS.defaultStdoutSampleBytes,\n captureStderrBytes: CLI_LIMITS.defaultStderrSampleBytes,\n captureArgvBytes: CLI_LIMITS.defaultArgvCaptureBytes,\n envAllow: [],\n envMode: 'hashed',\n unsafeAllowRawEnv: false,\n captureCwdMode: 'hashed',\n captureBinaryPath: 'hashed',\n secretScan: true,\n unsafeDisableSecretScan: false,\n executionMode: 'deterministic_script',\n shellMode: false,\n output: '-',\n timeoutMs: CLI_LIMITS.defaultTimeoutMs,\n killGraceMs: CLI_LIMITS.defaultKillGraceMs,\n exitCodeMode: 'child',\n unsafeEphemeralKey: false,\n};\n\n/**\n * Validate flag combinations (observe + signing) BEFORE spawning the\n * child or loading the issuer key. Delegates to the shared\n * `validateCoreCommandOptions` for observe-style checks and\n * `validateSigningOptions` for the signing-input mutex and canonical\n * issuer URL preflight.\n */\nexport function validateRecordOptions(\n opts: RecordCommandOptions,\n childArgv: string[]\n): ValidationFailure[] {\n const core = validateCoreCommandOptions(opts, childArgv);\n // Skip signing checks when the program-required failure is already\n // present (record command requires a child too); short-circuit\n // matches the observe command early-exit shape.\n const programRequired = core.find((f) => f.code === COMMAND_OPTION_ERROR_CODES.programRequired);\n if (programRequired) return core;\n return [...core, ...validateSigningOptions(opts)];\n}\n\n/**\n * Resolve the issuer key per the validated options. Returns the\n * loaded key and `kid`, or a structured failure for the caller to\n * surface as `cli.issuer_key_load_failed` / `cli.issuer_key_invalid`.\n */\nasync function resolveIssuerKey(\n opts: RecordCommandOptions,\n issuerKeyEnv: NodeJS.ProcessEnv\n): Promise<\n { ok: true; privateKey: Uint8Array; kid: string } | { ok: false; code: string; message: string }\n> {\n if (opts.unsafeEphemeralKey) {\n const { privateKey, publicKey } = await generateKeypair();\n const kid = await deriveKidFromPublicKey(publicKey);\n return { ok: true, privateKey, kid };\n }\n // hasIssuerKey is guaranteed by validateRecordOptions.\n try {\n const loaded = await loadIssuerKey(opts.issuerKey!, issuerKeyEnv);\n return { ok: true, privateKey: loaded.privateKey, kid: loaded.kid };\n } catch (err) {\n if (err instanceof IssuerKeyInvalidError) {\n return { ok: false, code: err.code, message: err.message };\n }\n if (err instanceof IssuerKeyLoadError) {\n return { ok: false, code: err.code, message: err.message };\n }\n return {\n ok: false,\n code: RECORD_COMMAND_ERROR_CODES.issuerKeyLoadFailed,\n message: err instanceof Error ? err.message : String(err),\n };\n }\n}\n\n/**\n * Pure handler: validates flags, preflights output and key, runs the\n * child, builds the observation, signs as Wire 0.2 JWS, emits.\n */\nexport async function runRecordCommand(\n options: Partial<RecordCommandOptions>,\n childArgv: string[],\n io: Partial<RecordCommandIO> = {}\n): Promise<RecordCommandResult> {\n const opts: RecordCommandOptions = { ...DEFAULT_OPTIONS, ...options };\n const writeStdout = io.writeStdout ?? ((c: string) => process.stdout.write(c));\n const writeStderr = io.writeStderr ?? ((c: string) => process.stderr.write(c));\n const childEnv = io.childEnv ?? process.env;\n const captureEnv = io.captureEnv ?? process.env;\n const issuerKeyEnv = io.issuerKeyEnv ?? process.env;\n const cwd = io.cwd ?? process.cwd();\n const peacCliVersion = io.peacCliVersion ?? '0.14.1';\n\n const failures = validateRecordOptions(opts, childArgv);\n if (failures.length > 0) {\n for (const f of failures) {\n writeStderr(`${f.code}: ${f.message}\\n`);\n }\n return { exitCode: 2 };\n }\n\n const programToken = childArgv[0];\n const args = childArgv.slice(1);\n\n // Preflight --output writability BEFORE the child runs OR the key is loaded.\n const outputErr = preflightOutputWritable(opts.output);\n if (outputErr !== null) {\n writeStderr(`${RECORD_COMMAND_ERROR_CODES.outputWriteFailed}: ${outputErr}\\n`);\n return { exitCode: 2 };\n }\n\n // Load (or generate) the issuer key BEFORE the child runs. A\n // record-producing wrapper must never run a child only to discover\n // the key cannot be loaded.\n const keyResult = await resolveIssuerKey(opts, issuerKeyEnv);\n if (!keyResult.ok) {\n writeStderr(`${keyResult.code}: ${keyResult.message}\\n`);\n return { exitCode: 2 };\n }\n\n const core = await runObservationCore(opts, programToken, args, {\n childEnv,\n captureEnv,\n cwd,\n peacCliVersion,\n });\n if (!core.ok) {\n writeStderr(`${core.code}: ${core.message}\\n`);\n return { exitCode: 2 };\n }\n\n // Sign the observation as a Wire 0.2 interaction record. The\n // observation lives under the org.peacprotocol/cli-execution\n // extension namespace; the record's `type` is the canonical CLI\n // command-execution type URI.\n let jws: string;\n try {\n const result = await issue({\n iss: opts.issuerId!,\n kind: 'evidence',\n type: CLI_COMMAND_EXECUTION_TYPE,\n privateKey: keyResult.privateKey,\n kid: keyResult.kid,\n extensions: {\n [CLI_EXECUTION_EXTENSION_KEY]: core.observation,\n },\n });\n jws = result.jws;\n } catch (err) {\n const message =\n err instanceof IssueError ? err.message : err instanceof Error ? err.message : String(err);\n writeStderr(`${RECORD_COMMAND_ERROR_CODES.signingFailed}: ${message}\\n`);\n return { exitCode: 2 };\n }\n\n if (opts.output === '-' || opts.output === '') {\n writeStdout(jws + '\\n');\n } else {\n try {\n writeFileSync(opts.output, jws + '\\n');\n } catch (err) {\n writeStderr(\n `${RECORD_COMMAND_ERROR_CODES.outputWriteFailed}: failed to write '${opts.output}': ${err instanceof Error ? err.message : String(err)}\\n`\n );\n return { exitCode: 2 };\n }\n }\n\n if (opts.exitCodeMode === 'record') {\n return { exitCode: 0 };\n }\n return { exitCode: core.capture.exitCode };\n}\n\n/**\n * Commander factory for the `command` subcommand under the `record`\n * parent group. Mirrors `observeCommandSubcommand()` flag set + adds\n * the three signing inputs.\n */\nexport function recordCommandSubcommand(): Command {\n const cmd = new Command('command');\n cmd\n .description(\n 'Wrap a command and emit a signed CLI execution record. ' +\n 'record command is an OBSERVER, not a sandbox, permission system, ' +\n 'shell orchestrator, or process supervisor. The command after `--` ' +\n 'is spawned exactly as supplied (shell: false). Use --unsafe-ephemeral-key ' +\n 'only for local development and tests; the public key is not published ' +\n 'through normal issuer-key discovery.'\n )\n .addOption(\n new Option('--capture-mode <mode>', 'argv capture mode')\n .choices([...ARGV_MODES])\n .default('hashed')\n )\n .option('--unsafe-allow-raw-capture', 'required alongside --capture-mode raw', false)\n .addOption(\n new Option('--capture-stdin-mode <mode>', 'stdin capture (and pass-through) mode')\n .choices([...STDIN_MODES])\n .default('none')\n )\n .option(\n '--capture-stdout-bytes <n>',\n `stdout sample cap (raw mode only); max ${CLI_LIMITS.maxStdoutSampleBytes}`,\n parseIntegerFlag,\n CLI_LIMITS.defaultStdoutSampleBytes\n )\n .option(\n '--capture-stderr-bytes <n>',\n `stderr sample cap (raw mode only); max ${CLI_LIMITS.maxStderrSampleBytes}`,\n parseIntegerFlag,\n CLI_LIMITS.defaultStderrSampleBytes\n )\n .option(\n '--capture-argv-bytes <n>',\n `argv per-token byte cap (raw mode only); max ${CLI_LIMITS.maxArgvCaptureBytes}`,\n parseIntegerFlag,\n CLI_LIMITS.defaultArgvCaptureBytes\n )\n .option(\n '--env-allow <KEYS>',\n 'comma-separated allowlist of env vars to record (deny-by-default)',\n (v, prev: string[]) =>\n prev.concat(\n v\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean)\n ),\n [] as string[]\n )\n .addOption(\n new Option('--env-mode <mode>', 'env value capture mode')\n .choices([...ENV_MODES])\n .default('hashed')\n )\n .option('--unsafe-allow-raw-env', 'required alongside --env-mode raw', false)\n .addOption(\n new Option('--capture-cwd-mode <mode>', 'cwd capture mode')\n .choices([...CWD_MODES])\n .default('hashed')\n )\n .addOption(\n new Option('--capture-binary-path <mode>', 'binary path capture mode')\n .choices([...BINARY_PATH_MODES])\n .default('hashed')\n )\n .addOption(\n new Option('--secret-scan <state>', 'secret-scan over raw samples')\n .choices(['on', 'off'])\n .default('on')\n )\n .option(\n '--unsafe-disable-secret-scan',\n 'required to disable secret-scan when raw capture is enabled',\n false\n )\n .option('--policy-digest <sha256>', 'optional policy digest (sha256:<hex>)')\n .option('--config-digest <sha256>', 'optional config digest (sha256:<hex>)')\n .option('--approval-ref <opaque>', 'optional opaque approval reference')\n .addOption(\n new Option('--execution-mode <mode>', 'execution-mode tag for this record')\n .choices([...EXECUTION_MODES])\n .default('deterministic_script')\n )\n .option(\n '--shell-mode',\n 'acknowledge that the program is a shell binary; PEAC does NOT rewrite the command',\n false\n )\n .option('--output <file>', 'output path for the JWS (default: stdout)', '-')\n .option(\n '--timeout-ms <n>',\n `wrapper timeout in ms; max ${CLI_LIMITS.maxTimeoutMs} (24h)`,\n parseIntegerFlag,\n CLI_LIMITS.defaultTimeoutMs\n )\n .option(\n '--kill-grace-ms <n>',\n `SIGTERM-to-SIGKILL grace in ms; max ${CLI_LIMITS.maxKillGraceMs}`,\n parseIntegerFlag,\n CLI_LIMITS.defaultKillGraceMs\n )\n .addOption(\n new Option('--exit-code-mode <mode>', 'wrapper exit-code policy')\n .choices([...EXIT_CODE_MODES])\n .default('child')\n )\n // Signing inputs.\n .option('--issuer-key <ref>', 'issuer key reference: env:VAR_NAME or file:/path/to/jwk.json')\n .option('--issuer-id <url>', 'canonical issuer URL recorded as `iss`')\n .option(\n '--unsafe-ephemeral-key',\n 'Generates an ephemeral local signing key. The public key is not published through normal issuer-key discovery. Use only for local development and tests.',\n false\n )\n .allowUnknownOption(false)\n .allowExcessArguments(true);\n\n cmd.action(async (rawOpts: Record<string, unknown>, cmdInstance: Command) => {\n const childArgv = cmdInstance.args;\n\n const options: Partial<RecordCommandOptions> = {\n captureMode: rawOpts.captureMode as ArgvMode,\n unsafeAllowRawCapture: Boolean(rawOpts.unsafeAllowRawCapture),\n captureStdinMode: rawOpts.captureStdinMode as StdinMode,\n captureStdoutBytes: rawOpts.captureStdoutBytes as number,\n captureStderrBytes: rawOpts.captureStderrBytes as number,\n captureArgvBytes: rawOpts.captureArgvBytes as number,\n envAllow: (rawOpts.envAllow as string[]) ?? [],\n envMode: rawOpts.envMode as EnvMode,\n unsafeAllowRawEnv: Boolean(rawOpts.unsafeAllowRawEnv),\n captureCwdMode: rawOpts.captureCwdMode as CwdMode,\n captureBinaryPath: rawOpts.captureBinaryPath as BinaryPathMode,\n secretScan: rawOpts.secretScan === 'on',\n unsafeDisableSecretScan: Boolean(rawOpts.unsafeDisableSecretScan),\n policyDigest: rawOpts.policyDigest as string | undefined,\n configDigest: rawOpts.configDigest as string | undefined,\n approvalRef: rawOpts.approvalRef as string | undefined,\n executionMode: rawOpts.executionMode as ExecutionMode,\n shellMode: Boolean(rawOpts.shellMode),\n output: (rawOpts.output as string) ?? '-',\n timeoutMs: rawOpts.timeoutMs as number,\n killGraceMs: rawOpts.killGraceMs as number,\n exitCodeMode: rawOpts.exitCodeMode as ExitCodeMode,\n issuerKey: rawOpts.issuerKey as string | undefined,\n issuerId: rawOpts.issuerId as string | undefined,\n unsafeEphemeralKey: Boolean(rawOpts.unsafeEphemeralKey),\n };\n\n const result = await runRecordCommand(options, childArgv);\n process.exitCode = result.exitCode;\n });\n\n return cmd;\n}\n\n/**\n * Commander factory for the public `peac record` parent group. Adds\n * the `command` subcommand. Future signed-record surfaces (e.g.,\n * `peac record mcp`, `peac record http`) attach here without widening\n * the verb namespace.\n */\nexport function recordCommand(): Command {\n const record = new Command('record').description(\n 'Sign and emit signed records over locally observed activity.'\n );\n record.addCommand(recordCommandSubcommand());\n return record;\n}\n","/**\n * `peac emit lifecycle` subcommand.\n *\n * Issues a Wire 0.2 compact JWS lifecycle observation record from\n * caller-supplied flags. The caller observed the lifecycle event (an\n * external approval, evaluation, experiment, workflow transition, or\n * mode tag); the CLI is the issuance path; the caller's issuer is the\n * signer-of-record. PEAC provides the record format, validation, and\n * signing path. PEAC does not capture, observe, decide, evaluate,\n * score, transition, orchestrate, schedule, or vouch for the truth of\n * the event.\n *\n * Signing UX uses the existing PEAC issuer-key reference convention\n * (mirrors `peac record command`):\n *\n * --issuer-key <env:VAR | file:/path>\n * --issuer-id <url>\n * --unsafe-ephemeral-key\n *\n * `--observed-at` is REQUIRED. The wrapper does not silently default the\n * external event time to the wrapper-invocation time; that would\n * misrepresent when the external system observed the event.\n *\n * Stable error codes:\n * lifecycle.missing_required_field (missing flag for required field)\n * lifecycle.event_kind_unknown (--event-kind not in the 9 enum)\n * lifecycle.invalid_observed_at (--observed-at not RFC 3339)\n * lifecycle.opaque_ref_grammar_violation\n * lifecycle.approver_ref_pii_blocked\n * lifecycle.ref_must_be_string\n * lifecycle.inline_value_blocked\n * cli.issuer_key_required (no signing input supplied)\n * cli.issuer_id_required\n * cli.issuer_id_invalid\n * cli.unsafe_ephemeral_key_mutex (--issuer-key and --unsafe-ephemeral-key both supplied)\n * cli.issuer_key_load_failed (from the shared issuer-key loader)\n * cli.issuer_key_invalid (from the shared issuer-key loader)\n * cli.signing_failed\n * cli.output_write_failed\n */\n\nimport { Command } from 'commander';\nimport { writeFileSync } from 'node:fs';\nimport {\n LIFECYCLE_OBSERVATION_EXTENSION_KEY,\n LIFECYCLE_OBSERVATION_TYPE_URIS,\n isCanonicalIss,\n validateLifecycleObservation,\n type LifecycleEventKind,\n type LifecycleObservation,\n} from '@peac/schema';\nimport { issue, IssueError } from '@peac/protocol';\nimport { generateKeypair } from '@peac/crypto';\nimport { preflightOutputWritable } from '../lib/output-preflight.js';\nimport {\n loadIssuerKey,\n deriveKidFromPublicKey,\n IssuerKeyLoadError,\n IssuerKeyInvalidError,\n} from '../lib/issuer-key-loader.js';\n\n/**\n * Discriminator literal -> canonical record-type URI. The two arrays move\n * together; this is a defense-in-depth check.\n */\nconst EVENT_KINDS: readonly LifecycleEventKind[] = [\n 'lifecycle-approval-requested',\n 'lifecycle-approval-granted',\n 'lifecycle-approval-denied',\n 'lifecycle-evaluation-started',\n 'lifecycle-evaluation-completed',\n 'lifecycle-experiment-assigned',\n 'lifecycle-experiment-result',\n 'lifecycle-workflow-transition',\n 'lifecycle-mode-observed',\n] as const;\n\nconst TYPE_URI_BY_EVENT_KIND: Readonly<Record<LifecycleEventKind, string>> = (() => {\n const map = {} as Record<LifecycleEventKind, string>;\n for (const k of EVENT_KINDS) {\n map[k] = `org.peacprotocol/${k}`;\n }\n // Sanity check that the type-URI list matches.\n for (const uri of LIFECYCLE_OBSERVATION_TYPE_URIS) {\n const k = uri.replace(/^org\\.peacprotocol\\//, '') as LifecycleEventKind;\n if (!EVENT_KINDS.includes(k)) {\n throw new Error(`emit-lifecycle: type URI ${uri} has no matching event_kind discriminator`);\n }\n }\n return map;\n})();\n\nconst OBSERVED_MODES = [\n 'deterministic_script',\n 'templated_flow',\n 'agent_loop',\n 'human_step',\n 'hybrid',\n] as const;\ntype ObservedMode = (typeof OBSERVED_MODES)[number];\n\nexport const EMIT_LIFECYCLE_ERROR_CODES = {\n missingRequiredField: 'lifecycle.missing_required_field',\n eventKindUnknown: 'lifecycle.event_kind_unknown',\n invalidObservedAt: 'lifecycle.invalid_observed_at',\n invalidObservedMode: 'lifecycle.invalid_observed_mode',\n invalidState: 'lifecycle.invalid_state',\n issuerKeyRequired: 'cli.issuer_key_required',\n issuerIdRequired: 'cli.issuer_id_required',\n issuerIdInvalid: 'cli.issuer_id_invalid',\n unsafeEphemeralKeyMutex: 'cli.unsafe_ephemeral_key_mutex',\n issuerKeyLoadFailed: 'cli.issuer_key_load_failed',\n issuerKeyInvalid: 'cli.issuer_key_invalid',\n signingFailed: 'cli.signing_failed',\n outputWriteFailed: 'cli.output_write_failed',\n} as const;\n\nexport interface EmitLifecycleOptions {\n eventKind?: string;\n subjectRef?: string;\n parentRef?: string;\n upstreamArtifactRef?: string;\n upstreamArtifactDigest?: string;\n policyRef?: string;\n policyDigest?: string;\n rubricRef?: string;\n approvalRef?: string;\n approverRef?: string;\n experimentRef?: string;\n cohortRef?: string;\n variantRef?: string;\n observedMode?: string;\n resultRef?: string;\n resultDigest?: string;\n scoreRef?: string;\n fromState?: string;\n toState?: string;\n observedAt?: string;\n issuerKey?: string;\n issuerId?: string;\n unsafeEphemeralKey: boolean;\n output: string;\n}\n\nexport interface EmitLifecycleIO {\n writeStdout: (chunk: string) => void;\n writeStderr: (chunk: string) => void;\n /**\n * Environment used to resolve `env:VAR` issuer-key references.\n * Defaults to `process.env`. Tests inject custom env.\n */\n issuerKeyEnv: NodeJS.ProcessEnv;\n}\n\nexport interface EmitLifecycleResult {\n exitCode: number;\n}\n\ninterface ValidationFailure {\n code: string;\n message: string;\n}\n\n/**\n * RFC 3339 datetime with timezone offset. Matches the schema-side\n * `z.string().datetime({ offset: true })` shape.\n */\nconst RFC_3339_WITH_OFFSET = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})$/;\n\n/**\n * Validate flag combinations BEFORE building the observation, loading\n * the key, or signing. Surfaces stable codes that match the schema's\n * lifecycle.* codes for schema-domain failures.\n */\nexport function validateEmitLifecycleOptions(opts: EmitLifecycleOptions): ValidationFailure[] {\n const failures: ValidationFailure[] = [];\n\n // event_kind: presence + enum membership.\n // Commander emits its own generic error if `.choices()` is used. We do\n // NOT use `.choices()` for this flag so a stable lifecycle code surfaces\n // for invalid values (matches the schema-side `lifecycle.event_kind_unknown`).\n if (!opts.eventKind) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n message: '--event-kind is required',\n });\n } else if (!(EVENT_KINDS as readonly string[]).includes(opts.eventKind)) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.eventKindUnknown,\n message: `--event-kind must be one of: ${EVENT_KINDS.join(', ')}`,\n });\n }\n\n // subject_ref\n if (!opts.subjectRef) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n message: '--subject-ref is required',\n });\n }\n\n // observed_at: presence then RFC 3339 shape\n if (!opts.observedAt) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n message:\n '--observed-at is required (no default-now; provide the wall-clock time at which the EXTERNAL system observed the event)',\n });\n } else if (!RFC_3339_WITH_OFFSET.test(opts.observedAt)) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.invalidObservedAt,\n message: '--observed-at must be RFC 3339 with timezone offset (e.g., 2026-05-12T10:00:00Z)',\n });\n }\n\n // Per-event-kind required fields (CLI-side preflight; schema repeats this).\n const ek = opts.eventKind as LifecycleEventKind | undefined;\n if (ek && (EVENT_KINDS as readonly string[]).includes(ek)) {\n if (\n ek === 'lifecycle-approval-requested' ||\n ek === 'lifecycle-approval-granted' ||\n ek === 'lifecycle-approval-denied'\n ) {\n if (!opts.approvalRef) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n message: `--approval-ref is required for event-kind ${ek}`,\n });\n }\n if (!opts.approverRef) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n message: `--approver-ref is required for event-kind ${ek}`,\n });\n }\n } else if (ek === 'lifecycle-evaluation-completed') {\n if (!opts.resultRef) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n message: '--result-ref is required for event-kind lifecycle-evaluation-completed',\n });\n }\n } else if (ek === 'lifecycle-experiment-assigned') {\n if (!opts.experimentRef) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n message: '--experiment-ref is required for event-kind lifecycle-experiment-assigned',\n });\n }\n } else if (ek === 'lifecycle-experiment-result') {\n if (!opts.experimentRef) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n message: '--experiment-ref is required for event-kind lifecycle-experiment-result',\n });\n }\n if (!opts.resultRef) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n message: '--result-ref is required for event-kind lifecycle-experiment-result',\n });\n }\n } else if (ek === 'lifecycle-workflow-transition') {\n if (!opts.fromState) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n message: '--from-state is required for event-kind lifecycle-workflow-transition',\n });\n }\n if (!opts.toState) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n message: '--to-state is required for event-kind lifecycle-workflow-transition',\n });\n }\n } else if (ek === 'lifecycle-mode-observed') {\n if (!opts.observedMode) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n message: '--observed-mode is required for event-kind lifecycle-mode-observed',\n });\n }\n }\n }\n\n // observed_mode value check (when supplied). `.choices()` is not used\n // on this flag so a stable lifecycle code surfaces for invalid values\n // (matches the schema-side `lifecycle.invalid_observed_mode`).\n if (opts.observedMode && !(OBSERVED_MODES as readonly string[]).includes(opts.observedMode)) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.invalidObservedMode,\n message: `--observed-mode must be one of: ${OBSERVED_MODES.join(', ')}`,\n });\n }\n\n // from_state / to_state value checks (preserve exact caller-reported\n // strings; reject empty / whitespace-bounded / over-length).\n for (const [flag, value] of [\n ['--from-state', opts.fromState],\n ['--to-state', opts.toState],\n ] as const) {\n if (value !== undefined) {\n if (value.length === 0) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.invalidState,\n message: `${flag} must not be empty`,\n });\n } else if (/^\\s|\\s$/.test(value)) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.invalidState,\n message: `${flag} must not have leading or trailing whitespace`,\n });\n } else if (new TextEncoder().encode(value).byteLength > 256) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.invalidState,\n message: `${flag} must be <= 256 UTF-8 bytes`,\n });\n }\n }\n }\n\n // Signing inputs: exactly one of (issuer-key, unsafe-ephemeral-key) must be present.\n const hasIssuerKey = !!opts.issuerKey;\n if (!hasIssuerKey && !opts.unsafeEphemeralKey) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.issuerKeyRequired,\n message: 'one of --issuer-key or --unsafe-ephemeral-key is required',\n });\n } else if (hasIssuerKey && opts.unsafeEphemeralKey) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.unsafeEphemeralKeyMutex,\n message: '--issuer-key and --unsafe-ephemeral-key are mutually exclusive',\n });\n }\n\n // issuer_id is required and must pass the canonical-issuer validator\n // shared with `peac record command` and `@peac/protocol.issue()`.\n // Reuses isCanonicalIss from @peac/schema so CLI preflight semantics\n // match the protocol issuance path exactly.\n if (!opts.issuerId) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.issuerIdRequired,\n message: '--issuer-id is required',\n });\n } else if (!isCanonicalIss(opts.issuerId)) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.issuerIdInvalid,\n message:\n '--issuer-id must be a canonical https://<origin> URL or did:<method>:<id> identifier',\n });\n }\n\n return failures;\n}\n\ninterface IssuerKeyResolution {\n ok: true;\n privateKey: Uint8Array;\n kid: string;\n}\n\ninterface IssuerKeyResolutionFailure {\n ok: false;\n code: string;\n message: string;\n}\n\nasync function resolveIssuerKey(\n opts: EmitLifecycleOptions,\n issuerKeyEnv: NodeJS.ProcessEnv\n): Promise<IssuerKeyResolution | IssuerKeyResolutionFailure> {\n if (opts.unsafeEphemeralKey) {\n const { privateKey, publicKey } = await generateKeypair();\n const kid = await deriveKidFromPublicKey(publicKey);\n return { ok: true, privateKey, kid };\n }\n // hasIssuerKey is guaranteed by validateEmitLifecycleOptions.\n try {\n const loaded = await loadIssuerKey(opts.issuerKey!, issuerKeyEnv);\n return { ok: true, privateKey: loaded.privateKey, kid: loaded.kid };\n } catch (err) {\n if (err instanceof IssuerKeyInvalidError) {\n return { ok: false, code: err.code, message: err.message };\n }\n if (err instanceof IssuerKeyLoadError) {\n return { ok: false, code: err.code, message: err.message };\n }\n return {\n ok: false,\n code: EMIT_LIFECYCLE_ERROR_CODES.issuerKeyLoadFailed,\n message: err instanceof Error ? err.message : String(err),\n };\n }\n}\n\n/**\n * Build the lifecycle observation object from validated CLI options.\n * Only fields populated by flags are included; the schema validator\n * accepts the discriminated-union shape per event_kind.\n */\nexport function buildLifecycleObservation(opts: EmitLifecycleOptions): Record<string, unknown> {\n // observation always carries event_kind, subject_ref, observed_at.\n const obs: Record<string, unknown> = {\n event_kind: opts.eventKind!,\n subject_ref: opts.subjectRef!,\n observed_at: opts.observedAt!,\n };\n\n // Common optional fields (all event kinds may carry these).\n if (opts.parentRef) obs.parent_ref = opts.parentRef;\n if (opts.upstreamArtifactRef) obs.upstream_artifact_ref = opts.upstreamArtifactRef;\n if (opts.upstreamArtifactDigest) obs.upstream_artifact_digest = opts.upstreamArtifactDigest;\n if (opts.policyRef) obs.policy_ref = opts.policyRef;\n if (opts.policyDigest) obs.policy_digest = opts.policyDigest;\n if (opts.rubricRef) obs.rubric_ref = opts.rubricRef;\n if (opts.scoreRef) obs.score_ref = opts.scoreRef;\n if (opts.resultDigest) obs.result_digest = opts.resultDigest;\n\n // Per-event-kind fields.\n const ek = opts.eventKind as LifecycleEventKind;\n if (\n ek === 'lifecycle-approval-requested' ||\n ek === 'lifecycle-approval-granted' ||\n ek === 'lifecycle-approval-denied'\n ) {\n obs.approval_ref = opts.approvalRef!;\n obs.approver_ref = opts.approverRef!;\n } else if (ek === 'lifecycle-evaluation-completed') {\n obs.result_ref = opts.resultRef!;\n } else if (ek === 'lifecycle-experiment-assigned') {\n obs.experiment_ref = opts.experimentRef!;\n if (opts.cohortRef) obs.cohort_ref = opts.cohortRef;\n if (opts.variantRef) obs.variant_ref = opts.variantRef;\n } else if (ek === 'lifecycle-experiment-result') {\n obs.experiment_ref = opts.experimentRef!;\n obs.result_ref = opts.resultRef!;\n if (opts.cohortRef) obs.cohort_ref = opts.cohortRef;\n if (opts.variantRef) obs.variant_ref = opts.variantRef;\n } else if (ek === 'lifecycle-workflow-transition') {\n obs.from_state = opts.fromState!;\n obs.to_state = opts.toState!;\n } else if (ek === 'lifecycle-mode-observed') {\n obs.observed_mode = opts.observedMode!;\n }\n\n // observed_mode may appear OPTIONALLY on any event kind (REQUIRED only on mode-observed; that case sets it above).\n if (ek !== 'lifecycle-mode-observed' && opts.observedMode) {\n obs.observed_mode = opts.observedMode;\n }\n\n return obs;\n}\n\n/**\n * Pure handler: validates flags, preflights output and key, builds the\n * observation, validates against the schema, signs as Wire 0.2 JWS, emits.\n * Tests drive this directly without going through commander.\n */\nexport async function runEmitLifecycle(\n options: Partial<EmitLifecycleOptions>,\n io: Partial<EmitLifecycleIO> = {}\n): Promise<EmitLifecycleResult> {\n const opts: EmitLifecycleOptions = {\n unsafeEphemeralKey: false,\n output: '-',\n ...options,\n };\n const writeStdout = io.writeStdout ?? ((c: string) => process.stdout.write(c));\n const writeStderr = io.writeStderr ?? ((c: string) => process.stderr.write(c));\n const issuerKeyEnv = io.issuerKeyEnv ?? process.env;\n\n const failures = validateEmitLifecycleOptions(opts);\n if (failures.length > 0) {\n for (const f of failures) {\n writeStderr(`${f.code}: ${f.message}\\n`);\n }\n return { exitCode: 2 };\n }\n\n // Preflight --output writability before key load and signing.\n const outputErr = preflightOutputWritable(opts.output);\n if (outputErr !== null) {\n writeStderr(`${EMIT_LIFECYCLE_ERROR_CODES.outputWriteFailed}: ${outputErr}\\n`);\n return { exitCode: 2 };\n }\n\n // Resolve (or generate) the issuer key before building the observation.\n const keyResult = await resolveIssuerKey(opts, issuerKeyEnv);\n if (!keyResult.ok) {\n writeStderr(`${keyResult.code}: ${keyResult.message}\\n`);\n return { exitCode: 2 };\n }\n\n // Build and validate the observation.\n const observation = buildLifecycleObservation(opts);\n const validation = validateLifecycleObservation(observation);\n if (!validation.ok) {\n for (const e of validation.errors) {\n writeStderr(`${e.code}: ${e.message}\\n`);\n }\n return { exitCode: 2 };\n }\n\n // Sign as Wire 0.2 record.\n let jws: string;\n try {\n const recordType = TYPE_URI_BY_EVENT_KIND[opts.eventKind as LifecycleEventKind];\n const result = await issue({\n iss: opts.issuerId!,\n kind: 'evidence',\n type: recordType,\n privateKey: keyResult.privateKey,\n kid: keyResult.kid,\n extensions: {\n [LIFECYCLE_OBSERVATION_EXTENSION_KEY]: validation.value as LifecycleObservation,\n },\n });\n jws = result.jws;\n } catch (err) {\n const message =\n err instanceof IssueError ? err.message : err instanceof Error ? err.message : String(err);\n writeStderr(`${EMIT_LIFECYCLE_ERROR_CODES.signingFailed}: ${message}\\n`);\n return { exitCode: 2 };\n }\n\n if (opts.output === '-' || opts.output === '') {\n writeStdout(jws + '\\n');\n } else {\n try {\n writeFileSync(opts.output, jws + '\\n');\n } catch (err) {\n writeStderr(\n `${EMIT_LIFECYCLE_ERROR_CODES.outputWriteFailed}: failed to write '${opts.output}': ${err instanceof Error ? err.message : String(err)}\\n`\n );\n return { exitCode: 2 };\n }\n }\n\n return { exitCode: 0 };\n}\n\n/**\n * Commander factory for the `lifecycle` subcommand under the `emit`\n * parent group. Wires --flag parsing and delegates to the pure handler.\n */\nexport function emitLifecycleSubcommand(): Command {\n const cmd = new Command('lifecycle');\n cmd\n .description(\n 'Issue a signed lifecycle observation record from caller-supplied flags. ' +\n 'The caller is the observer (the lifecycle event was emitted by an external ' +\n 'orchestrator, workflow engine, evaluation system, approval system, or agent ' +\n 'runtime); the CLI is the issuance path; the caller-provided issuer key is the ' +\n 'signer-of-record. PEAC does not approve, evaluate, score, transition, ' +\n 'orchestrate, schedule, or vouch for the truth of the event. The full contract ' +\n 'is specified in docs/specs/LIFECYCLE-OBSERVATION-PROFILE.md.'\n )\n .option(\n '--event-kind <kind>',\n `one of the 9 lifecycle event-kind discriminator values: ${EVENT_KINDS.join(', ')}`\n )\n .option('--subject-ref <opaque>', 'opaque reference to the subject of the observation')\n .option('--parent-ref <opaque>', 'optional opaque reference to a parent observation')\n .option('--upstream-artifact-ref <opaque>', 'optional opaque reference to an upstream artifact')\n .option(\n '--upstream-artifact-digest <sha256>',\n 'optional canonical sha256 digest of the upstream artifact'\n )\n .option('--policy-ref <opaque>', 'optional opaque reference to an upstream policy document')\n .option('--policy-digest <sha256>', 'optional canonical sha256 digest of the policy document')\n .option('--rubric-ref <opaque>', 'optional opaque reference to an evaluation rubric')\n .option(\n '--approval-ref <opaque>',\n 'opaque reference to the approval (REQUIRED for approval-* event kinds)'\n )\n .option(\n '--approver-ref <opaque>',\n 'opaque pseudonymous reference to the approver (REQUIRED for approval-* event kinds; @-containing values reject as PII)'\n )\n .option(\n '--experiment-ref <opaque>',\n 'opaque reference to the experiment (REQUIRED for experiment-* event kinds)'\n )\n .option('--cohort-ref <opaque>', 'optional opaque reference to the experiment cohort')\n .option('--variant-ref <opaque>', 'optional opaque reference to the experiment variant')\n .option('--observed-mode <mode>', `observed runtime-mode tag: ${OBSERVED_MODES.join(', ')}`)\n .option(\n '--result-ref <opaque>',\n 'opaque reference to a stored result artifact (REQUIRED for evaluation-completed and experiment-result)'\n )\n .option('--result-digest <sha256>', 'optional canonical sha256 digest of the result artifact')\n .option(\n '--score-ref <opaque>',\n 'optional opaque reference to a stored score artifact (score values are NEVER inlined)'\n )\n .option(\n '--from-state <name>',\n 'free-form source state name (REQUIRED for workflow-transition; max 128 chars)'\n )\n .option(\n '--to-state <name>',\n 'free-form destination state name (REQUIRED for workflow-transition; max 128 chars)'\n )\n .option(\n '--observed-at <rfc3339>',\n 'RFC 3339 timestamp at which the EXTERNAL system observed the event (REQUIRED; no default-now)'\n )\n .option('--issuer-key <ref>', 'issuer key reference: env:VAR_NAME or file:/path/to/jwk.json')\n .option('--issuer-id <url>', 'canonical issuer URL recorded as `iss`')\n .option(\n '--unsafe-ephemeral-key',\n 'Generate an ephemeral local signing key. The public key is not published through normal issuer-key discovery. Use only for local development and tests.',\n false\n )\n .option('--output <file>', 'output path for the JWS (default: stdout)', '-');\n\n cmd.action(async (rawOpts: Record<string, unknown>) => {\n const options: Partial<EmitLifecycleOptions> = {\n eventKind: rawOpts.eventKind as string | undefined,\n subjectRef: rawOpts.subjectRef as string | undefined,\n parentRef: rawOpts.parentRef as string | undefined,\n upstreamArtifactRef: rawOpts.upstreamArtifactRef as string | undefined,\n upstreamArtifactDigest: rawOpts.upstreamArtifactDigest as string | undefined,\n policyRef: rawOpts.policyRef as string | undefined,\n policyDigest: rawOpts.policyDigest as string | undefined,\n rubricRef: rawOpts.rubricRef as string | undefined,\n approvalRef: rawOpts.approvalRef as string | undefined,\n approverRef: rawOpts.approverRef as string | undefined,\n experimentRef: rawOpts.experimentRef as string | undefined,\n cohortRef: rawOpts.cohortRef as string | undefined,\n variantRef: rawOpts.variantRef as string | undefined,\n observedMode: rawOpts.observedMode as string | undefined,\n resultRef: rawOpts.resultRef as string | undefined,\n resultDigest: rawOpts.resultDigest as string | undefined,\n scoreRef: rawOpts.scoreRef as string | undefined,\n fromState: rawOpts.fromState as string | undefined,\n toState: rawOpts.toState as string | undefined,\n observedAt: rawOpts.observedAt as string | undefined,\n issuerKey: rawOpts.issuerKey as string | undefined,\n issuerId: rawOpts.issuerId as string | undefined,\n unsafeEphemeralKey: Boolean(rawOpts.unsafeEphemeralKey),\n output: (rawOpts.output as string) ?? '-',\n };\n\n const result = await runEmitLifecycle(options);\n process.exitCode = result.exitCode;\n });\n\n return cmd;\n}\n\n/**\n * Commander factory for the public `peac emit` parent group. Adds the\n * `lifecycle` subcommand. Additional `emit` subcommands can be\n * registered by their own profiles.\n */\nexport function emitCommand(): Command {\n const emit = new Command('emit').description(\n 'Issue signed records over events emitted by external systems (caller-supplied event emission/export surface).'\n );\n emit.addCommand(emitLifecycleSubcommand());\n return emit;\n}\n\n/** Re-exports for tests. */\nexport { TYPE_URI_BY_EVENT_KIND, EVENT_KINDS, OBSERVED_MODES };\nexport type { ObservedMode };\n","#!/usr/bin/env node\n/**\n * PEAC Protocol CLI\n * Command-line tools for receipt verification and conformance testing\n */\n\nimport { Command, CommanderError } from 'commander';\nimport { verifyReceipt } from '@peac/protocol';\nimport { parseIssuerConfig, fetchIssuerConfig } from '@peac/protocol';\nimport { decode } from '@peac/crypto';\nimport { PEACReceiptClaims } from '@peac/schema';\nimport * as fs from 'fs';\nimport { policy } from './commands/policy.js';\nimport { conformance } from './commands/conformance.js';\nimport { samples } from './commands/samples.js';\nimport { reconcileCommand } from './commands/reconcile.js';\nimport { doctor } from './commands/doctor.js';\nimport { DiscoverCommand } from './commands/discover.js';\nimport { observeCommand } from './commands/observe-command.js';\nimport { recordCommand } from './commands/record-command.js';\nimport { emitCommand } from './commands/emit-lifecycle.js';\nimport { formatOutput } from './utils.js';\nimport { getVersion } from './lib/version.js';\n\nconst program = new Command();\n\nprogram\n .name('peac')\n .description('PEAC protocol command-line tools')\n .version(getVersion())\n .exitOverride(); // Throws CommanderError instead of calling process.exit()\n\n/**\n * peac verify <jws>\n */\nprogram\n .command('verify')\n .description('Verify a PEAC receipt JWS')\n .argument('<jws>', 'JWS compact serialization or path to file containing JWS')\n .option('-v, --verbose', 'Show detailed output')\n .action(async (jwsInput: string, options: { verbose?: boolean }) => {\n try {\n // Check if input is a file path\n let jws = jwsInput;\n if (fs.existsSync(jwsInput)) {\n jws = fs.readFileSync(jwsInput, 'utf-8').trim();\n }\n\n console.log('Verifying PEAC receipt...\\n');\n\n // First, decode to show receipt info\n const { header, payload } = decode<PEACReceiptClaims>(jws);\n\n console.log('Receipt Information:');\n console.log(` Receipt ID: ${payload.rid}`);\n console.log(` Issuer: ${payload.iss}`);\n console.log(` Audience: ${payload.aud}`);\n console.log(` Amount: ${payload.amt} ${payload.cur}`);\n console.log(` Payment: ${payload.payment.rail} (${payload.payment.reference})`);\n console.log(` Issued: ${new Date(payload.iat * 1000).toISOString()}`);\n if (payload.exp) {\n console.log(` Expires: ${new Date(payload.exp * 1000).toISOString()}`);\n }\n console.log();\n\n // Verify signature\n console.log('Verifying signature...');\n const result = await verifyReceipt(jws);\n\n if (result.ok) {\n console.log('Signature valid!');\n if (result.perf) {\n console.log(` Verification time: ${result.perf.verify_ms.toFixed(2)}ms`);\n if (result.perf.jwks_fetch_ms) {\n console.log(` JWKS fetch time: ${result.perf.jwks_fetch_ms.toFixed(2)}ms`);\n }\n }\n process.exitCode = 0;\n } else {\n console.log(`Verification failed: ${result.reason}`);\n if (result.details) {\n console.log(` Details: ${result.details}`);\n }\n process.exitCode = 1;\n }\n } catch (err) {\n console.error('Error:', err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n });\n\n/**\n * peac validate-issuer <path|url>\n *\n * Validates a PEAC issuer configuration (/.well-known/peac-issuer.json)\n */\nprogram\n .command('validate-issuer')\n .description('Validate a PEAC issuer configuration')\n .argument('<input>', 'Path to peac-issuer.json file or issuer URL')\n .action(async (input: string) => {\n try {\n console.log('Validating issuer configuration...\\n');\n\n let config;\n if (input.startsWith('http://') || input.startsWith('https://')) {\n // Fetch from URL\n console.log(`Fetching from ${input}...`);\n config = await fetchIssuerConfig(input);\n } else {\n // Read from file\n const text = fs.readFileSync(input, 'utf-8');\n config = parseIssuerConfig(text);\n }\n\n console.log('Issuer configuration is valid!\\n');\n\n console.log('Issuer Configuration:');\n console.log(` Version: ${config.version}`);\n console.log(` Issuer: ${config.issuer}`);\n console.log(` JWKS URI: ${config.jwks_uri}`);\n\n if (config.verify_endpoint) {\n console.log(` Verify: ${config.verify_endpoint}`);\n }\n\n if (config.receipt_versions && config.receipt_versions.length > 0) {\n console.log(` Receipts: ${config.receipt_versions.join(', ')}`);\n }\n\n if (config.algorithms && config.algorithms.length > 0) {\n console.log(` Algorithms: ${config.algorithms.join(', ')}`);\n }\n\n if (config.payment_rails && config.payment_rails.length > 0) {\n console.log(` Rails: ${config.payment_rails.join(', ')}`);\n }\n\n if (config.security_contact) {\n console.log(` Security: ${config.security_contact}`);\n }\n\n process.exitCode = 0;\n } catch (err) {\n console.error('Error:', err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n });\n\n/**\n * peac decode <jws>\n */\nprogram\n .command('decode')\n .description('Decode a PEAC receipt JWS (without verification)')\n .argument('<jws>', 'JWS compact serialization or path to file containing JWS')\n .option('--json', 'Output as JSON')\n .action((jwsInput: string, options: { json?: boolean }) => {\n try {\n // Check if input is a file path\n let jws = jwsInput;\n if (fs.existsSync(jwsInput)) {\n jws = fs.readFileSync(jwsInput, 'utf-8').trim();\n }\n\n const { header, payload } = decode<PEACReceiptClaims>(jws);\n\n if (options.json) {\n console.log(JSON.stringify({ header, payload }, null, 2));\n } else {\n console.log('PEAC Receipt (Decoded, Not Verified)\\n');\n\n console.log('Header:');\n console.log(` typ: ${header.typ}`);\n console.log(` alg: ${header.alg}`);\n console.log(` kid: ${header.kid}`);\n console.log();\n\n console.log('Claims:');\n console.log(` iss: ${payload.iss}`);\n console.log(` aud: ${payload.aud}`);\n console.log(` iat: ${payload.iat} (${new Date(payload.iat * 1000).toISOString()})`);\n if (payload.exp) {\n console.log(` exp: ${payload.exp} (${new Date(payload.exp * 1000).toISOString()})`);\n }\n console.log(` rid: ${payload.rid}`);\n console.log(` amt: ${payload.amt}`);\n console.log(` cur: ${payload.cur}`);\n console.log();\n\n console.log('Payment:');\n console.log(` rail: ${payload.payment.rail}`);\n console.log(` reference: ${payload.payment.reference}`);\n console.log(` amount: ${payload.payment.amount}`);\n console.log(` currency: ${payload.payment.currency}`);\n\n if (payload.subject) {\n console.log();\n console.log('Subject:');\n console.log(` uri: ${payload.subject.uri}`);\n }\n\n if (payload.ext) {\n console.log();\n console.log('Extensions:');\n console.log(JSON.stringify(payload.ext, null, 2));\n }\n }\n\n process.exitCode = 0;\n } catch (err) {\n console.error('Error:', err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n });\n\n// Policy commands (v0.9.17+)\nprogram.addCommand(policy);\n\n// Conformance testing commands (v0.10.8+)\nprogram.addCommand(conformance);\n\n// Sample receipts commands (v0.10.8+)\nprogram.addCommand(samples);\n\n// Reconcile evidence bundles (v0.11.3+)\nprogram.addCommand(reconcileCommand());\n\n// CLI execution observation\nprogram.addCommand(observeCommand());\n\n// CLI execution record (signed Wire 0.2 JWS)\nprogram.addCommand(recordCommand());\n\n// Lifecycle observation emission (signed Wire 0.2 JWS for external lifecycle events)\nprogram.addCommand(emitCommand());\n\n// Installability diagnostics (v0.12.11+)\ndoctor(program);\n\n/**\n * peac discover <url>\n *\n * Fetches /.well-known/peac.txt with SSRF-aware HTTP and parses it as a\n * peac-policy/0.1 document. Implementation lives in\n * packages/cli/src/lib/policy-document-discovery.ts (CLI-internal helper).\n */\nprogram\n .command('discover')\n .description('Discover and parse a remote /.well-known/peac.txt policy document')\n .argument('<url>', 'Origin URL (http/https) whose /.well-known/peac.txt to fetch')\n .option('-j, --json', 'output in JSON format')\n .action(async (url: string, opts: { json?: boolean }) => {\n const cmd = new DiscoverCommand();\n const result = await cmd.execute(url, { json: opts.json });\n console.log(formatOutput(result, opts.json));\n process.exitCode = result.success ? 0 : 1;\n });\n\n// Parse and handle Commander errors (exitOverride causes CommanderError on --help, --version, etc.)\ntry {\n program.parse();\n} catch (err) {\n if (err instanceof CommanderError) {\n // CommanderError from --help, --version, or validation errors\n process.exitCode = err.exitCode;\n } else {\n throw err;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/safe-file.ts","../src/commands/policy.ts","../src/lib/conformance/digest.ts","../src/lib/conformance/manifest.ts","../src/lib/conformance/profiles.ts","../src/lib/policy-document-discovery.ts","../src/lib/conformance/validators.ts","../src/lib/conformance-runner.ts","../src/lib/version.ts","../src/commands/conformance.ts","../src/lib/samples-loader.ts","../src/commands/samples.ts","../src/commands/reconcile.ts","../src/commands/doctor.ts","../src/utils.ts","../src/commands/discover.ts","../src/lib/cli-limits.ts","../src/lib/capture.ts","../src/lib/output-preflight.ts","../src/lib/secret-scan.ts","../src/lib/observation-builder.ts","../src/lib/observation-pipeline.ts","../src/lib/command-option-validation.ts","../src/commands/observe-command.ts","../src/lib/issuer-key-loader.ts","../src/commands/record-command.ts","../src/commands/emit-lifecycle.ts","../src/index.ts"],"names":["path","fsConstants","fs","issue","fs2","path2","path3","fs3","PolicyValidationError","PolicyLoadError","fs4","path4","result","join","existsSync","readFileSync","getGlobalOptions","outputError","fs5","path5","Command","samples","path7","fs7","output","fs8","formatReportText","path8","fs9","program","createHash","resolve","pathResolve","dirname","openSync","closeSync","randomBytes","unlinkSync","SHA256_PREFIX","out","byteLen","statSync","preflightOutputWritable","basenameAny","writeFileSync","base64urlEncode","sha256Hex","ARGV_MODES","CWD_MODES","BINARY_PATH_MODES","STDIN_MODES","ENV_MODES","EXIT_CODE_MODES","EXECUTION_MODES","DEFAULT_OPTIONS","generateKeypair","CLI_COMMAND_EXECUTION_TYPE","Option","isCanonicalIss","resolveIssuerKey","IssueError","fs10","decode"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Internal file-IO helpers for @peac/cli command handlers.\n *\n * Package-private; not exported from any package barrel and not part of\n * the public CLI API. Mirrors the syscall-style conventions already in\n * use in `output-preflight.ts`: named imports from `node:fs`,\n * fd-bound reads, errno discrimination via `NodeJS.ErrnoException`, and\n * `closeSync` always wrapped in `try`/`finally` with secondary errors\n * swallowed so they do not mask the primary error.\n *\n * The helpers exist to remove TOCTOU patterns where an existence probe\n * (`existsSync` / `accessSync` / `statSync`) is followed by a file\n * operation (`readFileSync` / `writeFileSync` / `openSync` / `unlinkSync`)\n * on the same path. The atomic alternative is a single syscall that\n * discriminates outcome via errno: success means the operation worked;\n * `ENOENT` means the file is missing; `EACCES` means the file is\n * unreadable / unwritable; `EISDIR` / `ENOTDIR` means the path is the\n * wrong type.\n *\n * Each helper takes a path string. Internal use of file descriptors is\n * hidden from the caller. Callers receive plain return values on success\n * and `NodeJS.ErrnoException`-shaped errors on failure that they can\n * inspect via `e.code === 'ENOENT' | 'EACCES' | 'EEXIST' | 'EISDIR' |\n * 'ENOTDIR'` and translate into user-facing wording.\n */\n\nimport {\n closeSync,\n constants as fsConstants,\n fstatSync,\n openSync,\n readFileSync,\n renameSync,\n unlinkSync,\n writeFileSync,\n} from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { randomBytes } from 'node:crypto';\n\n/**\n * Read the entire file at `path` as a UTF-8 string via a single\n * fd-bound `open`/`fstat`/`read`/`close` sequence.\n *\n * Throws an `ErrnoException`-shaped error on failure. Callers\n * discriminate via `e.code`:\n * - `ENOENT`: file does not exist\n * - `EISDIR`: path resolves to a directory\n * - `EACCES`: not readable\n */\nexport function readFileUtf8Snapshot(path: string): string {\n let fd: number | undefined;\n try {\n fd = openSync(path, fsConstants.O_RDONLY);\n const stat = fstatSync(fd);\n if (stat.isDirectory()) {\n throw makeErrnoError('EISDIR', `is a directory: ${path}`);\n }\n return readFileSync(fd, 'utf8');\n } finally {\n if (fd !== undefined) {\n try {\n closeSync(fd);\n } catch {\n // ignore close-on-cleanup errors\n }\n }\n }\n}\n\n/**\n * Read the entire file at `path` as a `Buffer` via a single fd-bound\n * `open`/`fstat`/`read`/`close` sequence. Optionally enforces a maximum\n * byte size. The size limit is checked twice: once against the `fstat`\n * size before reading (cheap fast-fail) and once against the actual\n * read length (defends against the file growing between `fstat` and the\n * subsequent `readFileSync`).\n *\n * Throws on failure:\n * - `ENOENT`: file does not exist\n * - `EISDIR`: path resolves to a directory\n * - `EACCES`: not readable\n * - `E_PEAC_FILE_TOO_LARGE`: file exceeds `options.maxBytes`\n */\nexport function readFileBufferSnapshot(path: string, options?: { maxBytes?: number }): Buffer {\n let fd: number | undefined;\n try {\n fd = openSync(path, fsConstants.O_RDONLY);\n const stat = fstatSync(fd);\n if (stat.isDirectory()) {\n throw makeErrnoError('EISDIR', `is a directory: ${path}`);\n }\n if (options?.maxBytes !== undefined && stat.size > options.maxBytes) {\n throw makeFileTooLargeError(path, stat.size, options.maxBytes);\n }\n const data = readFileSync(fd);\n if (options?.maxBytes !== undefined && data.length > options.maxBytes) {\n throw makeFileTooLargeError(path, data.length, options.maxBytes);\n }\n return data;\n } finally {\n if (fd !== undefined) {\n try {\n closeSync(fd);\n } catch {\n // ignore close-on-cleanup errors\n }\n }\n }\n}\n\nfunction makeFileTooLargeError(\n path: string,\n actualSize: number,\n maxBytes: number\n): NodeJS.ErrnoException & { actualSize?: number; maxBytes?: number } {\n const err = new Error(\n `file size ${actualSize} bytes exceeds limit ${maxBytes} bytes: ${path}`\n ) as NodeJS.ErrnoException & { actualSize?: number; maxBytes?: number };\n err.code = 'E_PEAC_FILE_TOO_LARGE';\n err.actualSize = actualSize;\n err.maxBytes = maxBytes;\n return err;\n}\n\n/**\n * Write `data` to `path` atomically without overwriting an existing\n * file. Uses POSIX `O_CREAT | O_EXCL | O_WRONLY` semantics via Node's\n * `'wx'` flag. The path either gets created with the supplied content\n * or the call throws `EEXIST`.\n *\n * Callers translate `EEXIST` into user-facing wording (e.g. \"use --force\n * to overwrite\").\n */\nexport function writeFileNoOverwrite(\n path: string,\n data: string | Buffer,\n options?: { encoding?: BufferEncoding; mode?: number }\n): void {\n const encoding: BufferEncoding | null =\n typeof data === 'string' ? (options?.encoding ?? 'utf8') : null;\n writeFileSync(path, data, {\n encoding,\n flag: 'wx',\n mode: options?.mode,\n });\n}\n\n/**\n * Rewrite a JSON config file atomically. If the file does not exist\n * (ENOENT), returns silently: there is no config to rewrite. Otherwise\n * the existing content is parsed, `mutate(config)` is invoked, and the\n * mutated config is written via a sibling temp file plus\n * `renameSync`. The final target path is never partially written.\n *\n * Existing file permissions on the target are preserved across the\n * rename. If the existing mode cannot be observed, the temp file is\n * created with a restrictive `0o600` fallback so a config rewrite never\n * accidentally widens the permission set.\n *\n * Cleans up the temp file if rename fails. Read failures other than\n * `ENOENT` propagate to the caller.\n */\nexport function rewriteJsonFileAtomic(\n path: string,\n mutate: (config: Record<string, unknown>) => void\n): void {\n let raw: string;\n let preservedMode = 0o600;\n let fd: number | undefined;\n try {\n fd = openSync(path, fsConstants.O_RDONLY);\n const stat = fstatSync(fd);\n if (stat.isDirectory()) {\n throw makeErrnoError('EISDIR', `is a directory: ${path}`);\n }\n const observedMode = stat.mode & 0o777;\n if (observedMode !== 0) preservedMode = observedMode;\n raw = readFileSync(fd, 'utf8');\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') return;\n throw err;\n } finally {\n if (fd !== undefined) {\n try {\n closeSync(fd);\n } catch {\n // ignore close-on-cleanup errors\n }\n }\n }\n\n const config = JSON.parse(raw) as Record<string, unknown>;\n\n mutate(config);\n\n const parent = dirname(path);\n const tempName = `.${process.pid}.${Date.now()}.${randomBytes(6).toString('hex')}.tmp`;\n const tempPath = join(parent, tempName);\n\n try {\n writeFileSync(tempPath, JSON.stringify(config, null, 2), {\n encoding: 'utf8',\n flag: 'wx',\n mode: preservedMode,\n });\n renameSync(tempPath, path);\n } catch (err) {\n try {\n unlinkSync(tempPath);\n } catch {\n // best-effort temp cleanup; ignore secondary errors\n }\n throw err;\n }\n}\n\n/**\n * Remove the file at `path` if it exists. Swallows `ENOENT`. All\n * other errors propagate to the caller.\n */\nexport function unlinkIfExists(path: string): void {\n try {\n unlinkSync(path);\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n }\n}\n\nfunction makeErrnoError(code: string, message: string): NodeJS.ErrnoException {\n const err = new Error(message) as NodeJS.ErrnoException;\n err.code = code;\n return err;\n}\n","/**\n * PEAC Policy CLI Commands\n *\n * Commands for managing policy files:\n * - init: Create a new policy file\n * - validate: Validate policy syntax and schema\n * - explain: Debug rule matching\n * - generate: Compile policy to deployment artifacts\n * - list-profiles: List available policy profiles (v0.9.23+)\n * - show-profile: Show profile details (v0.9.23+)\n *\n * Automation flags (v0.9.23+):\n * - --json: Machine-readable JSON output\n * - --yes: Skip confirmation prompts (auto-confirm)\n * - --strict: Exit non-zero on warnings\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport {\n loadPolicy,\n evaluate,\n explainMatches,\n createExamplePolicy,\n serializePolicyYaml,\n serializePolicyJson,\n compilePeacTxt,\n compileRobotsSnippet,\n compileAiprefTemplates,\n renderPolicyMarkdown,\n PolicyLoadError,\n PolicyValidationError,\n EvaluationContext,\n ControlPurpose,\n ControlLicensingMode,\n SubjectType,\n // Profile system (v0.9.23+)\n listProfiles,\n loadProfile,\n getProfileSummary,\n ProfileError,\n type ProfileId,\n} from '@peac/policy-kit';\nimport { writeFileNoOverwrite } from '../lib/safe-file.js';\n\n/**\n * Global options for policy commands\n */\ninterface PolicyGlobalOptions {\n json?: boolean;\n yes?: boolean;\n strict?: boolean;\n}\n\n/**\n * Get global options from parent command\n */\nfunction getGlobalOptions(cmd: Command): PolicyGlobalOptions {\n const parent = cmd.parent;\n if (!parent) return {};\n return parent.opts() as PolicyGlobalOptions;\n}\n\n/**\n * Output result - handles JSON vs human-readable format\n */\nfunction output(\n data: Record<string, unknown>,\n opts: PolicyGlobalOptions,\n humanMessage?: string\n): void {\n if (opts.json) {\n console.log(JSON.stringify(data, null, 2));\n } else if (humanMessage) {\n console.log(humanMessage);\n }\n}\n\n/**\n * Output error - handles JSON vs human-readable format\n */\nfunction outputError(\n error: string,\n details: Record<string, unknown>,\n opts: PolicyGlobalOptions\n): void {\n if (opts.json) {\n console.log(JSON.stringify({ success: false, error, ...details }, null, 2));\n } else {\n console.error(`Error: ${error}`);\n }\n}\n\nconst policy = new Command('policy')\n .description('Policy file operations')\n .option('--json', 'Output in machine-readable JSON format')\n .option('--yes', 'Skip confirmation prompts (auto-confirm)')\n .option('--strict', 'Exit non-zero on warnings');\n\n/**\n * peac policy init\n *\n * Create a new peac-policy.yaml file in the current directory.\n */\npolicy\n .command('init')\n .description('Create a new PEAC policy file')\n .option('-f, --format <format>', 'Output format (yaml or json)', 'yaml')\n .option('-o, --output <file>', 'Output file path')\n .option('--force', 'Overwrite existing file')\n .option('--profile <id>', 'Use a pre-built profile as template')\n .action(\n (\n options: { format?: string; output?: string; force?: boolean; profile?: string },\n cmd: Command\n ) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const format = options.format?.toLowerCase() || 'yaml';\n const outputPath =\n options.output || (format === 'json' ? 'peac-policy.json' : 'peac-policy.yaml');\n\n let content: string;\n let policyName: string;\n\n if (options.profile) {\n // Use profile as template\n try {\n const profile = loadProfile(options.profile as ProfileId);\n const policyDoc = profile.policy;\n content =\n format === 'json' ? serializePolicyJson(policyDoc) : serializePolicyYaml(policyDoc);\n policyName = profile.name;\n } catch (err) {\n if (err instanceof ProfileError) {\n outputError(err.message, { code: err.code, profile: options.profile }, globalOpts);\n process.exit(1);\n }\n throw err;\n }\n } else {\n const example = createExamplePolicy();\n content = format === 'json' ? serializePolicyJson(example) : serializePolicyYaml(example);\n policyName = 'Example Policy';\n }\n\n // Atomic write: refuse to overwrite an existing target unless --force or\n // --yes is set. The no-overwrite path uses POSIX O_CREAT | O_EXCL via\n // writeFileNoOverwrite, which surfaces EEXIST without ever inspecting\n // the target with a separate existence probe.\n const allowOverwrite = options.force === true || globalOpts.yes === true;\n try {\n if (allowOverwrite) {\n fs.writeFileSync(outputPath, content, { encoding: 'utf-8', flag: 'w' });\n } else {\n writeFileNoOverwrite(outputPath, content, { encoding: 'utf-8' });\n }\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'EEXIST') {\n outputError(\n `File already exists: ${outputPath}`,\n { path: outputPath, hint: 'Use --force or --yes to overwrite' },\n globalOpts\n );\n process.exit(1);\n }\n throw err;\n }\n\n if (globalOpts.json) {\n output(\n {\n success: true,\n file: outputPath,\n format,\n profile: options.profile || null,\n policyName,\n },\n globalOpts\n );\n } else {\n console.log(`Created policy file: ${outputPath}`);\n if (options.profile) {\n console.log(`Based on profile: ${options.profile}`);\n }\n console.log('');\n console.log('Next steps:');\n console.log(' 1. Edit the policy file to define your access rules');\n console.log(' 2. Validate with: peac policy validate ' + outputPath);\n console.log(' 3. Generate artifacts with: peac policy generate ' + outputPath);\n }\n\n process.exit(0);\n } catch (err) {\n outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n process.exit(1);\n }\n }\n );\n\n/**\n * peac policy validate <file>\n */\npolicy\n .command('validate')\n .description('Validate a PEAC policy file (YAML or JSON)')\n .argument('<file>', 'Path to policy file')\n .option('-v, --verbose', 'Show detailed validation output')\n .action((file: string, options: { verbose?: boolean }, cmd: Command) => {\n const globalOpts = getGlobalOptions(cmd);\n const warnings: string[] = [];\n\n try {\n const policyDoc = loadPolicy(file);\n\n // Collect any warnings (e.g., deprecated features)\n // Currently no warnings defined, but this is the pattern for future use\n\n const result = {\n success: true,\n file,\n valid: true,\n warnings,\n policy: {\n version: policyDoc.version,\n name: policyDoc.name || null,\n defaultDecision: policyDoc.defaults.decision,\n ruleCount: policyDoc.rules.length,\n rules: options.verbose\n ? policyDoc.rules.map((r) => ({\n name: r.name,\n decision: r.decision,\n subject: r.subject || null,\n purpose: r.purpose || null,\n licensingMode: r.licensing_mode || null,\n }))\n : undefined,\n },\n };\n\n if (globalOpts.json) {\n output(result, globalOpts);\n } else {\n console.log(`Validating policy file: ${file}\\n`);\n console.log('Policy is valid!\\n');\n\n console.log('Policy Information:');\n console.log(` Version: ${policyDoc.version}`);\n if (policyDoc.name) {\n console.log(` Name: ${policyDoc.name}`);\n }\n console.log(` Default: ${policyDoc.defaults.decision}`);\n console.log(` Rules: ${policyDoc.rules.length}`);\n\n if (options.verbose && policyDoc.rules.length > 0) {\n console.log('\\nRules:');\n for (const rule of policyDoc.rules) {\n console.log(` - ${rule.name}: ${rule.decision}`);\n if (rule.subject) {\n const parts: string[] = [];\n if (rule.subject.type) {\n const types = Array.isArray(rule.subject.type)\n ? rule.subject.type.join('|')\n : rule.subject.type;\n parts.push(`type=${types}`);\n }\n if (rule.subject.labels) {\n parts.push(`labels=[${rule.subject.labels.join(',')}]`);\n }\n if (rule.subject.id) {\n parts.push(`id=${rule.subject.id}`);\n }\n if (parts.length > 0) {\n console.log(` subject: ${parts.join(', ')}`);\n }\n }\n if (rule.purpose) {\n const purposes = Array.isArray(rule.purpose) ? rule.purpose.join('|') : rule.purpose;\n console.log(` purpose: ${purposes}`);\n }\n if (rule.licensing_mode) {\n const modes = Array.isArray(rule.licensing_mode)\n ? rule.licensing_mode.join('|')\n : rule.licensing_mode;\n console.log(` licensing_mode: ${modes}`);\n }\n }\n }\n\n if (warnings.length > 0) {\n console.log('\\nWarnings:');\n for (const warning of warnings) {\n console.log(` - ${warning}`);\n }\n }\n }\n\n // Exit with non-zero if --strict and there are warnings\n if (globalOpts.strict && warnings.length > 0) {\n process.exit(1);\n }\n\n process.exit(0);\n } catch (err) {\n if (err instanceof PolicyValidationError) {\n const issues = err.issues.map((i) => ({\n path: i.path.join('.'),\n message: i.message,\n }));\n\n if (globalOpts.json) {\n output(\n {\n success: false,\n file,\n valid: false,\n error: 'Validation failed',\n issues,\n },\n globalOpts\n );\n } else {\n console.error('Policy validation failed:\\n');\n for (const issue of err.issues) {\n console.error(` - ${issue.path.join('.')}: ${issue.message}`);\n }\n }\n process.exit(1);\n } else if (err instanceof PolicyLoadError) {\n outputError(`Failed to load policy: ${err.message}`, { file }, globalOpts);\n process.exit(1);\n } else {\n outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n process.exit(1);\n }\n }\n });\n\n/**\n * peac policy generate <file>\n *\n * Generate deployment artifacts from a policy file:\n * - peac.txt (PEAC discovery file)\n * - robots.txt snippet\n * - AIPREF header templates\n * - ai-policy.md (human-readable summary)\n */\npolicy\n .command('generate')\n .description('Generate deployment artifacts from a policy file')\n .argument('<file>', 'Path to policy file')\n .option('-o, --out <dir>', 'Output directory (use \"-\" for stdout)', 'dist')\n .option('--well-known', 'Output peac.txt to .well-known/ subdirectory')\n .option('--dry-run', 'Show what would be generated without writing files')\n .option('--peac-version <version>', 'PEAC protocol version (default: 0.9)')\n .option('--site-url <url>', 'Site URL for peac.txt')\n .option('--contact <email>', 'Contact email for policy questions')\n .option('--attribution <mode>', 'Attribution requirement (required, optional, none)')\n .option('--receipts <mode>', 'Receipts requirement (required, optional, omit)')\n .option('--rate-limit <limit>', 'Rate limit string (e.g., \"100/hour\", \"unlimited\")')\n .option('--negotiate <url>', 'Negotiate endpoint URL')\n .option('--no-comments', 'Omit comments from generated files')\n .action(\n (\n file: string,\n options: {\n out: string;\n wellKnown?: boolean;\n dryRun?: boolean;\n peacVersion?: string;\n siteUrl?: string;\n contact?: string;\n attribution?: 'required' | 'optional' | 'none';\n receipts?: 'required' | 'optional' | 'omit';\n rateLimit?: string;\n negotiate?: string;\n comments?: boolean;\n },\n cmd: Command\n ) => {\n const globalOpts = getGlobalOptions(cmd);\n const isStdout = options.out === '-';\n\n try {\n if (!globalOpts.json && !isStdout) {\n console.log(`Loading policy: ${file}\\n`);\n }\n\n const policyDoc = loadPolicy(file);\n\n const compileOptions = {\n peacVersion: options.peacVersion,\n siteUrl: options.siteUrl,\n contact: options.contact,\n attribution: options.attribution,\n receipts: options.receipts,\n rateLimit: options.rateLimit,\n negotiateUrl: options.negotiate,\n includeComments: options.comments !== false,\n };\n\n // Generate content\n const peacTxt = compilePeacTxt(policyDoc, compileOptions);\n const robotsTxt = compileRobotsSnippet(policyDoc, compileOptions);\n const aiprefTemplates = compileAiprefTemplates(policyDoc, compileOptions);\n const markdown = renderPolicyMarkdown(policyDoc, compileOptions);\n\n // Stdout mode: output all content as JSON\n if (isStdout || globalOpts.json) {\n const result = {\n success: true,\n source: file,\n artifacts: {\n 'peac.txt': peacTxt,\n 'robots-ai-snippet.txt': robotsTxt,\n 'aipref-headers.json': aiprefTemplates,\n 'ai-policy.md': markdown,\n },\n };\n\n if (isStdout && !globalOpts.json) {\n // Plain stdout: just output peac.txt\n console.log(peacTxt);\n } else {\n output(result, { json: true });\n }\n\n process.exit(0);\n }\n\n // Determine output paths\n const outDir = options.out;\n let peacTxtPath: string;\n if (options.wellKnown) {\n peacTxtPath = path.join(outDir, '.well-known', 'peac.txt');\n } else {\n peacTxtPath = path.join(outDir, 'peac.txt');\n }\n const robotsPath = path.join(outDir, 'robots-ai-snippet.txt');\n const aiprefPath = path.join(outDir, 'aipref-headers.json');\n const mdPath = path.join(outDir, 'ai-policy.md');\n\n if (options.dryRun) {\n // Dry run: show what would be generated\n console.log('Dry run - files that would be generated:\\n');\n console.log(`--- ${peacTxtPath} ---`);\n console.log(peacTxt);\n console.log(`--- ${robotsPath} ---`);\n console.log(robotsTxt);\n console.log(`--- ${aiprefPath} ---`);\n console.log(JSON.stringify(aiprefTemplates, null, 2));\n console.log(`\\n--- ${mdPath} ---`);\n console.log(markdown);\n process.exit(0);\n }\n\n // Create output directories\n if (!fs.existsSync(outDir)) {\n fs.mkdirSync(outDir, { recursive: true });\n }\n if (options.wellKnown) {\n const wellKnownDir = path.join(outDir, '.well-known');\n if (!fs.existsSync(wellKnownDir)) {\n fs.mkdirSync(wellKnownDir, { recursive: true });\n }\n }\n\n // Write files\n fs.writeFileSync(peacTxtPath, peacTxt, 'utf-8');\n console.log(`Generated: ${peacTxtPath}`);\n\n fs.writeFileSync(robotsPath, robotsTxt, 'utf-8');\n console.log(`Generated: ${robotsPath}`);\n\n fs.writeFileSync(aiprefPath, JSON.stringify(aiprefTemplates, null, 2), 'utf-8');\n console.log(`Generated: ${aiprefPath}`);\n\n fs.writeFileSync(mdPath, markdown, 'utf-8');\n console.log(`Generated: ${mdPath}`);\n\n console.log('');\n console.log('Deployment instructions:');\n if (options.wellKnown) {\n console.log(` 1. Deploy ${peacTxtPath} to serve at /.well-known/peac.txt`);\n } else {\n console.log(` 1. Copy ${peacTxtPath} to /.well-known/peac.txt`);\n }\n console.log(` 2. Append ${robotsPath} to your robots.txt`);\n console.log(` 3. Add headers from ${aiprefPath} to your server config`);\n console.log(` 4. Publish ${mdPath} for human reference`);\n\n process.exit(0);\n } catch (err) {\n if (err instanceof PolicyLoadError) {\n outputError(`Failed to load policy: ${err.message}`, { file }, globalOpts);\n process.exit(1);\n } else {\n outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n process.exit(1);\n }\n }\n }\n );\n\n/**\n * peac policy explain <file>\n *\n * Debug tool: explain which rule would apply for a given context.\n */\npolicy\n .command('explain')\n .description('Explain which rule would apply for a given context')\n .argument('<file>', 'Path to policy file')\n .option('-t, --type <type>', 'Subject type (human, org, agent)')\n .option('-l, --labels <labels>', 'Subject labels (comma-separated)')\n .option('-i, --id <id>', 'Subject ID')\n .option(\n '-p, --purpose <purpose>',\n 'Access purpose (crawl, index, train, inference, ai_input, ai_index, search)'\n )\n .option(\n '-m, --licensing-mode <mode>',\n 'Licensing mode (subscription, pay_per_crawl, pay_per_inference)'\n )\n .option('--all-matches', 'Show all matching rules, not just the first')\n .action(\n (\n file: string,\n options: {\n type?: string;\n labels?: string;\n id?: string;\n purpose?: string;\n licensingMode?: string;\n allMatches?: boolean;\n },\n cmd: Command\n ) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const policyDoc = loadPolicy(file);\n\n // Build evaluation context from options\n const context: EvaluationContext = {};\n\n if (options.type || options.labels || options.id) {\n context.subject = {};\n if (options.type) {\n context.subject.type = options.type as SubjectType;\n }\n if (options.labels) {\n context.subject.labels = options.labels.split(',').map((l) => l.trim());\n }\n if (options.id) {\n context.subject.id = options.id;\n }\n }\n\n if (options.purpose) {\n context.purpose = options.purpose as ControlPurpose;\n }\n\n if (options.licensingMode) {\n context.licensing_mode = options.licensingMode as ControlLicensingMode;\n }\n\n if (options.allMatches) {\n const matches = explainMatches(policyDoc, context);\n\n if (globalOpts.json) {\n output(\n {\n success: true,\n context,\n matches: matches.map((m) => {\n if (m === '[default]') {\n return {\n rule: '[default]',\n decision: policyDoc.defaults.decision,\n };\n }\n const rule = policyDoc.rules.find((r) => r.name === m);\n return rule\n ? { rule: rule.name, decision: rule.decision }\n : { rule: m, decision: null };\n }),\n },\n globalOpts\n );\n } else {\n console.log('Evaluation Context:');\n if (context.subject) {\n console.log(` Subject: ${JSON.stringify(context.subject)}`);\n } else {\n console.log(' Subject: (any)');\n }\n console.log(` Purpose: ${context.purpose || '(any)'}`);\n console.log(` Licensing Mode: ${context.licensing_mode || '(any)'}`);\n console.log();\n\n console.log(`Matching Rules (${matches.length}):`);\n for (const match of matches) {\n if (match === '[default]') {\n console.log(` - [default] -> ${policyDoc.defaults.decision}`);\n } else {\n const rule = policyDoc.rules.find((r) => r.name === match);\n if (rule) {\n console.log(` - ${rule.name} -> ${rule.decision}`);\n }\n }\n }\n }\n } else {\n const result = evaluate(policyDoc, context);\n\n if (globalOpts.json) {\n output(\n {\n success: true,\n context,\n result: {\n decision: result.decision,\n matchedRule: result.matched_rule || '[default]',\n reason: result.reason || null,\n },\n },\n globalOpts\n );\n } else {\n console.log('Evaluation Context:');\n if (context.subject) {\n console.log(` Subject: ${JSON.stringify(context.subject)}`);\n } else {\n console.log(' Subject: (any)');\n }\n console.log(` Purpose: ${context.purpose || '(any)'}`);\n console.log(` Licensing Mode: ${context.licensing_mode || '(any)'}`);\n console.log();\n\n console.log('Result:');\n console.log(` Decision: ${result.decision}`);\n if (result.matched_rule) {\n console.log(` Matched Rule: ${result.matched_rule}`);\n } else {\n console.log(' Matched Rule: (default)');\n }\n if (result.reason) {\n console.log(` Reason: ${result.reason}`);\n }\n }\n }\n\n process.exit(0);\n } catch (err) {\n if (err instanceof PolicyLoadError) {\n outputError(`Failed to load policy: ${err.message}`, { file }, globalOpts);\n process.exit(1);\n } else {\n outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n process.exit(1);\n }\n }\n }\n );\n\n/**\n * peac policy list-profiles\n *\n * List available pre-built policy profiles (v0.9.23+)\n */\npolicy\n .command('list-profiles')\n .description('List available pre-built policy profiles')\n .action((options: Record<string, never>, cmd: Command) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const profileIds = listProfiles();\n const profiles = profileIds.map((id) => getProfileSummary(id));\n\n if (globalOpts.json) {\n output(\n {\n success: true,\n profiles: profiles.map((p) => ({\n id: p.id,\n name: p.name,\n description: p.description,\n defaultDecision: p.defaultDecision,\n ruleCount: p.ruleCount,\n requiresReceipt: p.requiresReceipt,\n requiredParams: p.requiredParams,\n optionalParams: p.optionalParams,\n })),\n },\n globalOpts\n );\n } else {\n console.log('Available Policy Profiles:\\n');\n for (const profile of profiles) {\n console.log(` ${profile.id}`);\n console.log(` Name: ${profile.name}`);\n console.log(` Default: ${profile.defaultDecision}`);\n console.log(` Rules: ${profile.ruleCount}`);\n if (profile.requiresReceipt) {\n console.log(' Requires receipt: yes');\n }\n if (profile.requiredParams.length > 0) {\n console.log(` Required params: ${profile.requiredParams.join(', ')}`);\n }\n console.log();\n }\n\n console.log('Use \"peac policy show-profile <id>\" for full details');\n console.log('Use \"peac policy init --profile <id>\" to create a policy from a profile');\n }\n\n process.exit(0);\n } catch (err) {\n outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n process.exit(1);\n }\n });\n\n/**\n * peac policy show-profile <id>\n *\n * Show details of a specific profile (v0.9.23+)\n */\npolicy\n .command('show-profile')\n .description('Show details of a specific policy profile')\n .argument('<id>', 'Profile ID')\n .action((id: string, options: Record<string, never>, cmd: Command) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const profile = loadProfile(id as ProfileId);\n\n if (globalOpts.json) {\n output(\n {\n success: true,\n profile: {\n id: profile.id,\n name: profile.name,\n description: profile.description,\n policy: profile.policy,\n parameters: profile.parameters,\n defaults: profile.defaults,\n },\n },\n globalOpts\n );\n } else {\n console.log(`Profile: ${profile.name}`);\n console.log(`ID: ${profile.id}`);\n console.log();\n console.log('Description:');\n console.log(\n profile.description\n .split('\\n')\n .map((l) => ` ${l}`)\n .join('\\n')\n );\n console.log();\n\n console.log('Policy:');\n console.log(` Version: ${profile.policy.version}`);\n console.log(` Default decision: ${profile.policy.defaults.decision}`);\n console.log(` Rules: ${profile.policy.rules?.length || 0}`);\n\n if (profile.policy.rules && profile.policy.rules.length > 0) {\n console.log();\n console.log('Rules:');\n for (const rule of profile.policy.rules) {\n console.log(` - ${rule.name}: ${rule.decision}`);\n if (rule.purpose) {\n const purposes = Array.isArray(rule.purpose) ? rule.purpose.join(', ') : rule.purpose;\n console.log(` purpose: ${purposes}`);\n }\n if (rule.reason) {\n console.log(` reason: ${rule.reason}`);\n }\n }\n }\n\n if (Object.keys(profile.parameters || {}).length > 0) {\n console.log();\n console.log('Parameters:');\n for (const [key, param] of Object.entries(profile.parameters || {})) {\n const required = param.required ? ' (required)' : '';\n console.log(` ${key}${required}`);\n console.log(` ${param.description}`);\n if (param.default) {\n console.log(` Default: ${param.default}`);\n }\n if (param.example) {\n console.log(` Example: ${param.example}`);\n }\n }\n }\n\n if (profile.defaults) {\n console.log();\n console.log('Defaults:');\n if (profile.defaults.requirements?.receipt) {\n console.log(' Receipt required: yes');\n }\n if (profile.defaults.rate_limit) {\n console.log(\n ` Rate limit: ${profile.defaults.rate_limit.limit}/${profile.defaults.rate_limit.window_seconds}s`\n );\n }\n }\n }\n\n process.exit(0);\n } catch (err) {\n if (err instanceof ProfileError) {\n outputError(err.message, { code: err.code, profile: id }, globalOpts);\n process.exit(1);\n }\n outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n process.exit(1);\n }\n });\n\nexport { policy };\n","/**\n * Conformance Digest Computation\n *\n * Handles SHA-256 hashing, JCS canonicalization, and vectors digest computation.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { createHash } from 'crypto';\nimport { canonicalize } from '@peac/crypto';\n\n/**\n * Compute SHA-256 digest of a string\n */\nexport function sha256(content: string): string {\n return createHash('sha256').update(content, 'utf8').digest('hex');\n}\n\n/**\n * Convert Zod path array to JSON Pointer (RFC 6901)\n *\n * @param path - Array of path segments from Zod (string for keys, number for array indices)\n * @returns JSON Pointer string (e.g., \"/evidence/attestations/0/scope\")\n */\nexport function zodPathToJsonPointer(path: (string | number)[]): string {\n if (path.length === 0) return '';\n\n return (\n '/' +\n path\n .map((segment) => {\n const str = String(segment);\n // RFC 6901 escaping: ~ -> ~0, / -> ~1\n return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n })\n .join('/')\n );\n}\n\n/**\n * Compute canonical input digest using JCS (RFC 8785)\n *\n * Uses JSON Canonicalization Scheme for deterministic serialization,\n * ensuring consistent digests across implementations regardless of\n * JSON key ordering from JSON.parse.\n *\n * @returns Object with alg and value (alg differs if fallback was used)\n */\nexport function computeCanonicalDigest(input: unknown): { alg: string; value: string } {\n try {\n const canonical = canonicalize(input);\n return { alg: 'sha-256+jcs', value: sha256(canonical) };\n } catch {\n // Fallback to JSON.stringify if canonicalize fails (e.g., for non-JSON values)\n // Use different alg to indicate fallback was used.\n // JSON.stringify(undefined) returns undefined, so coerce to 'null' for safety.\n const serialized = JSON.stringify(input) ?? 'null';\n return { alg: 'sha-256+json', value: sha256(serialized) };\n }\n}\n\n/**\n * File extensions to include in vectors digest\n *\n * This allowlist ensures we capture all conformance-relevant files:\n * - .json: Fixtures, manifests, JWKS\n * - .txt: Policy files (peac.txt)\n * - .jwks: JWKS key files\n * - .pem: PEM-encoded keys\n * - .zip: Bundle archives (if used)\n */\nconst VECTORS_FILE_EXTENSIONS = new Set(['.json', '.txt', '.jwks', '.pem', '.zip']);\n\n/**\n * Files to exclude from vectors digest\n */\nconst VECTORS_EXCLUDE_FILES = new Set(['.DS_Store', '.gitkeep', 'Thumbs.db']);\n\n/**\n * Recursively collect all conformance-relevant files in a directory\n */\nfunction collectFilesRecursive(\n dir: string,\n basePath: string = ''\n): Array<{ relativePath: string; content: string }> {\n const files: Array<{ relativePath: string; content: string }> = [];\n\n if (!fs.existsSync(dir)) return files;\n\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n // Skip excluded files\n if (VECTORS_EXCLUDE_FILES.has(entry.name)) continue;\n\n const relativePath = basePath ? `${basePath}/${entry.name}` : entry.name;\n const fullPath = path.join(dir, entry.name);\n\n if (entry.isDirectory()) {\n // Recurse into subdirectories\n files.push(...collectFilesRecursive(fullPath, relativePath));\n } else {\n // Check if extension is in allowlist\n const ext = path.extname(entry.name).toLowerCase();\n if (VECTORS_FILE_EXTENSIONS.has(ext)) {\n files.push({\n relativePath,\n content: fs.readFileSync(fullPath, 'utf8'),\n });\n }\n }\n }\n\n return files;\n}\n\n/**\n * Compute comprehensive vectors digest by hashing all fixture files\n *\n * VECTORS DIGEST CONTRACT (NORMATIVE):\n * ====================================\n *\n * 1. FILE SELECTION:\n * - INCLUDES: manifest.json (if present) at root level\n * - INCLUDES: All files in category directories with extensions: .json, .txt, .jwks, .pem, .zip\n * - EXCLUDES: .DS_Store, .gitkeep, Thumbs.db\n *\n * 2. RECURSION:\n * - Hashes files in nested directories (e.g., bundle/vectors/*.json)\n *\n * 3. ORDERING:\n * - All files sorted lexicographically by normalized relative path\n * - Path separator is always forward slash (/)\n * - Comparison uses default string comparison (ASCII/Unicode code point order)\n *\n * 4. HASH INPUT FORMAT (per file):\n * - relativePath + NUL byte (\\x00) + sha256(fileBytes)\n * - relativePath uses forward slashes, no leading slash\n * - fileBytes are raw bytes, NO newline normalization\n *\n * 5. FINAL DIGEST:\n * - SHA-256 of all concatenated (path + NUL + hash) entries\n * - Reported as lowercase hex string\n *\n * This contract ensures:\n * - Digest changes when any fixture content changes\n * - Digest is reproducible across platforms\n * - Digest can be verified by other implementations\n */\nexport function computeVectorsDigest(fixturesDir: string, categories: string[]): string {\n const hash = createHash('sha256');\n const allFiles: Array<{ relativePath: string; content: string }> = [];\n\n // Include manifest.json if present (it's part of the conformance vectors)\n const manifestPath = path.join(fixturesDir, 'manifest.json');\n if (fs.existsSync(manifestPath)) {\n allFiles.push({\n relativePath: 'manifest.json',\n content: fs.readFileSync(manifestPath, 'utf8'),\n });\n }\n\n // Sort categories for determinism\n const sortedCategories = [...categories].sort();\n\n for (const cat of sortedCategories) {\n const categoryPath = path.join(fixturesDir, cat);\n // Recursively collect all conformance-relevant files in the category\n const categoryFiles = collectFilesRecursive(categoryPath, cat);\n allFiles.push(...categoryFiles);\n }\n\n // Sort all files by relative path for deterministic ordering\n allFiles.sort((a, b) => a.relativePath.localeCompare(b.relativePath));\n\n for (const file of allFiles) {\n const fileHash = sha256(file.content);\n // Hash: relativePath + NUL + fileHash\n hash.update(file.relativePath);\n hash.update('\\0');\n hash.update(fileHash);\n }\n\n return hash.digest('hex');\n}\n","/**\n * Conformance Manifest Loading and Matching\n *\n * Handles loading manifest.json and retrieving fixture metadata.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport type { Manifest, ManifestEntry } from './types.js';\n\n/**\n * Load manifest.json from fixtures directory\n */\nexport function loadManifest(fixturesDir: string): Manifest {\n const manifestPath = path.join(fixturesDir, 'manifest.json');\n if (!fs.existsSync(manifestPath)) {\n return {};\n }\n try {\n return JSON.parse(fs.readFileSync(manifestPath, 'utf8'));\n } catch {\n return {};\n }\n}\n\n/**\n * Get manifest entry for a fixture\n */\nexport function getManifestEntry(\n manifest: Manifest,\n category: string,\n filename: string\n): ManifestEntry | undefined {\n return manifest[category]?.[filename];\n}\n","/**\n * Conformance Profile Capabilities\n *\n * Maps categories to their profile details for capabilities reporting.\n */\n\nimport type { ProfileDetail, ProfileLevel, ConformanceLevel } from './types.js';\n\n/**\n * Profile capability registry\n *\n * Maps categories to their profile details including:\n * - profile: The profile name for the report\n * - level: 'semantic' for full validation, 'shape' for structural-only\n * - validator: The validator used (for transparency)\n * - notes: Any caveats about validation scope\n */\nexport const PROFILE_CAPABILITIES: Record<string, ProfileDetail> = {\n valid: {\n profile: 'receipt.verify.claims',\n level: 'semantic',\n validator: '@peac/schema:ReceiptClaimsSchema',\n },\n invalid: {\n profile: 'receipt.verify.claims',\n level: 'semantic',\n validator: '@peac/schema:ReceiptClaimsSchema',\n },\n edge: {\n profile: 'receipt.verify.claims',\n level: 'semantic',\n validator: '@peac/schema:ReceiptClaimsSchema',\n },\n 'agent-identity': {\n profile: 'receipt.verify.agent-identity',\n level: 'semantic',\n validator: '@peac/schema:validateAgentIdentityAttestation',\n },\n attribution: {\n profile: 'receipt.verify.attribution',\n level: 'semantic',\n validator: '@peac/schema:validateAttributionAttestation',\n },\n bundle: {\n profile: 'bundle.shape',\n level: 'shape',\n validator: 'structural-check',\n notes: 'Structure-only; no cryptographic integrity verification',\n },\n discovery: {\n profile: 'discovery.config',\n level: 'semantic',\n validator: '@peac/policy-kit:parsePolicyDocument (via cli compat helper)',\n },\n dispute: {\n profile: 'receipt.verify.dispute',\n level: 'semantic',\n validator: '@peac/schema:validateDisputeAttestation',\n },\n interaction: {\n profile: 'receipt.verify.interaction',\n level: 'semantic',\n validator: '@peac/schema:validateInteractionOrdered',\n },\n issue: {\n profile: 'receipt.issue',\n level: 'semantic',\n validator: '@peac/schema:ReceiptClaimsSchema',\n },\n obligations: {\n profile: 'receipt.verify.obligations',\n level: 'semantic',\n validator: '@peac/schema:validateObligationsExtension',\n },\n policy: {\n profile: 'policy.evaluate',\n level: 'shape',\n validator: 'structural-check',\n notes: 'Structure-only; no policy evaluation logic',\n },\n purpose: {\n profile: 'receipt.verify.purpose',\n level: 'semantic',\n validator: '@peac/schema:isValidPurposeToken',\n },\n verifier: {\n profile: 'receipt.verify',\n level: 'semantic',\n validator: '@peac/schema:ReceiptClaimsSchema',\n },\n workflow: {\n profile: 'workflow.validate',\n level: 'semantic',\n validator: '@peac/schema:validateWorkflowContextOrdered',\n },\n x402: {\n profile: 'transport.x402.shape',\n level: 'shape',\n validator: 'structural-check',\n notes: 'Structure-only; no offer/receipt verification or term matching',\n },\n errors: {\n profile: 'errors.hints',\n level: 'semantic',\n validator: 'validateErrorHintsInput',\n notes: 'Validates next_action hint table shape and vocabulary',\n },\n 'content-usage': {\n profile: 'content-usage.parse',\n level: 'shape',\n validator: 'validateContentUsageInput',\n notes: 'Validates Content-Usage fixture input type; full parsing tested in dedicated suite',\n },\n};\n\n/**\n * Get profile capability for a category\n *\n * For unknown categories, honestly reports that the default validator uses\n * heuristic semantic receipt validation (ReceiptClaimsSchema) when input\n * looks like claims. This prevents capability misrepresentation.\n */\nexport function getCategoryCapability(category: string): ProfileDetail {\n return (\n PROFILE_CAPABILITIES[category] ?? {\n profile: `receipt.verify.${category}`,\n level: 'semantic' as ProfileLevel,\n validator: '@peac/schema:ReceiptClaimsSchema (heuristic)',\n notes: 'Unknown category - uses semantic receipt validation when input looks like claims',\n }\n );\n}\n\n/**\n * Get profile name based on category\n */\nexport function getCategoryProfile(category: string): string {\n return getCategoryCapability(category).profile;\n}\n\n/**\n * Determine if a fixture should run at a given level\n */\nexport function shouldRunAtLevel(\n fixtureVersion: string | undefined,\n level: ConformanceLevel\n): boolean {\n if (!fixtureVersion) return true; // Default to basic\n\n const [major, minor] = fixtureVersion.split('.').map(Number);\n const fixtureLevel: ConformanceLevel =\n major > 0 || minor >= 10 ? 'full' : minor >= 9 ? 'standard' : 'basic';\n\n const levelOrder: ConformanceLevel[] = ['basic', 'standard', 'full'];\n return levelOrder.indexOf(fixtureLevel) <= levelOrder.indexOf(level);\n}\n","/**\n * CLI-internal helper. Preserves the v0.13.0 @peac/disc behavior contract\n * (tolerant two-pass parse + SSRF-aware remote fetch) using public\n * @peac/policy-kit and @peac/net-node primitives, plus PUBLIC @peac/kernel\n * constants where the fields exist.\n *\n * NOT exported from @peac/cli's public surface. Used by:\n * - packages/cli/src/commands/discover.ts\n * - packages/cli/src/lib/conformance/validators.ts (validateDiscoveryInput)\n *\n * External consumers needing the same compatibility behavior should copy\n * this pattern; a packaged public helper may land in a later release if\n * external demand surfaces.\n */\n\n// `@peac/net-node` is ESM-only (no \"require\" exports entry). The CLI bin\n// emits a CommonJS bundle that loads this helper transitively via the\n// conformance validator import chain, but only the conformance use case\n// (parsePolicyDocumentCompat) is reachable from the bin -- not the\n// fetch path. Importing `safeFetchRaw` at module load would force a CJS\n// require() of an ESM-only package and fail at startup. Instead, load\n// `@peac/net-node` lazily inside fetchPolicyDocumentText() via dynamic\n// import so the conformance path resolves without touching it.\nimport type { SafeFetchOptions } from '@peac/net-node';\nimport {\n parsePolicyDocument,\n PolicyLoadError,\n PolicyValidationError,\n type PolicyDocument,\n} from '@peac/policy-kit';\n// @peac/kernel.POLICY exposes manifestPath + maxBytes (and other discovery\n// surface defaults). @peac/kernel.DISCOVERY does NOT carry timeoutMs in\n// v0.13.x; the CLI keeps its own DISCOVER_TIMEOUT_MS pinned to the value\n// the retired @peac/disc used.\nimport { POLICY } from '@peac/kernel';\n\n// CLI-local constants. These mirror v0.13.0 @peac/disc behavior verbatim.\n// Pinned by tests in packages/cli/__tests__/discover-command.test.ts.\nexport const DISCOVER_TIMEOUT_MS = 5_000;\nexport const DISCOVER_MAX_BYTES = POLICY.maxBytes; // 262144 bytes (256 KiB)\nexport const PEAC_TXT_PATH = POLICY.manifestPath; // '/.well-known/peac.txt'\nconst DEFAULT_USER_AGENT = 'peac-cli';\n\nconst LEGACY_KEY_LINE = /^\\s*(verify|public_keys|jwks)\\s*:/m;\nconst LEGACY_KEY_FULL_LINE_GLOBAL = /^\\s*(verify|public_keys|jwks)\\s*:.*\\r?\\n?/gm;\n\nlet legacyWarningFired = false;\n\nfunction fireLegacyWarning(field: string): void {\n if (legacyWarningFired) return;\n legacyWarningFired = true;\n if (typeof process !== 'undefined' && typeof process.emitWarning === 'function') {\n process.emitWarning(\n `peac.txt legacy key-discovery field \"${field}\" is deprecated and ignored. ` +\n `peac.txt is a policy-document surface (docs/specs/PEAC-TXT.md). ` +\n `Key resolution uses iss -> /.well-known/peac-issuer.json -> jwks_uri -> JWKS.`,\n { code: 'PEAC_LEGACY_PEAC_TXT_KEY_FIELD', type: 'DeprecationWarning' }\n );\n }\n}\n\n/** @internal - tests only; resets the one-shot legacy-warning flag. */\nexport function __resetLegacyWarningForTests(): void {\n legacyWarningFired = false;\n}\n\nexport interface CompatParseResult {\n valid: boolean;\n data?: PolicyDocument;\n errors?: string[];\n warnings?: string[];\n}\n\nfunction collectLegacyWarnings(text: string, warnings: string[]): void {\n const lines = text.split(/\\r?\\n/);\n let firstField: string | null = null;\n lines.forEach((line, idx) => {\n const m = line.match(/^\\s*(verify|public_keys|jwks)\\s*:/);\n if (m) {\n if (firstField === null) firstField = m[1];\n warnings.push(\n `Line ${idx + 1}: legacy key-discovery field \"${m[1]}\" ignored ` +\n `(peac.txt is policy-only; use peac-issuer.json for keys)`\n );\n }\n });\n if (firstField) fireLegacyWarning(firstField);\n}\n\nfunction failureFrom(err: unknown, warnings: string[]): CompatParseResult {\n const errors: string[] = [];\n if (err instanceof PolicyValidationError) {\n const issues = err.issues.map((i) => `${i.path.join('.')}: ${i.message}`).join('; ');\n errors.push(`Policy validation failed: ${issues}`);\n } else if (err instanceof PolicyLoadError) {\n errors.push(err.message);\n } else {\n errors.push(`Unexpected parse error: ${err instanceof Error ? err.message : String(err)}`);\n }\n return {\n valid: false,\n errors,\n warnings: warnings.length > 0 ? warnings : undefined,\n };\n}\n\n/**\n * Tolerant two-pass parser preserving v0.13.0 @peac/disc.parse semantics.\n *\n * Pass 1: hand the raw text to parsePolicyDocument unmodified. Legacy-looking\n * substrings inside YAML comments / block scalars / rule text remain intact.\n *\n * Pass 2 (only if Pass 1 throws AND legacy `verify:` / `public_keys:` /\n * `jwks:` lines are present at top level): strip those lines and retry.\n * Detected legacy lines surface as warnings + a once-per-process structured\n * DeprecationWarning with code PEAC_LEGACY_PEAC_TXT_KEY_FIELD.\n *\n * Returns a structured ParseResult; never throws on policy validation /\n * load failure (those become `errors`). Throws only on programming errors.\n */\nexport function parsePolicyDocumentCompat(text: string): CompatParseResult {\n if (text.trim().length === 0) {\n return {\n valid: false,\n errors: ['Empty policy document. Expected peac-policy/0.1 YAML or JSON.'],\n };\n }\n\n const hasLegacyLines = LEGACY_KEY_LINE.test(text);\n const warnings: string[] = [];\n\n try {\n const data = parsePolicyDocument(text);\n if (hasLegacyLines) collectLegacyWarnings(text, warnings);\n return {\n valid: true,\n data,\n warnings: warnings.length > 0 ? warnings : undefined,\n };\n } catch (firstErr) {\n if (!hasLegacyLines) return failureFrom(firstErr, warnings);\n collectLegacyWarnings(text, warnings);\n const stripped = text.replace(LEGACY_KEY_FULL_LINE_GLOBAL, '');\n try {\n const data = parsePolicyDocument(stripped);\n return { valid: true, data, warnings };\n } catch (secondErr) {\n return failureFrom(secondErr, warnings);\n }\n }\n}\n\nexport interface FetchPolicyDocumentSuccess {\n ok: true;\n text: string;\n warnings?: string[];\n}\n\nexport interface FetchPolicyDocumentFailure {\n ok: false;\n error: string;\n code?: string;\n}\n\nexport type FetchPolicyDocumentResult = FetchPolicyDocumentSuccess | FetchPolicyDocumentFailure;\n\nexport interface FetchPolicyDocumentOptions {\n /** Override the v0.13.0-equivalent 5_000 ms total timeout. */\n timeoutMs?: number;\n /** Override the v0.13.0-equivalent 256 KiB body cap. */\n maxBytes?: number;\n /** Override the User-Agent header. Defaults to `peac-cli`. */\n userAgent?: string;\n}\n\n/**\n * Fetch a peac.txt policy document via SSRF-aware HTTP with a body cap and\n * timeout. Returns the raw response text on success. Caller is responsible\n * for parsing via `parsePolicyDocumentCompat`. Always closes the underlying\n * raw response in a `finally` block (no socket leak).\n */\nexport async function fetchPolicyDocumentText(\n origin: string,\n options: FetchPolicyDocumentOptions = {}\n): Promise<FetchPolicyDocumentResult> {\n let target: URL;\n try {\n target = new URL(PEAC_TXT_PATH, origin);\n } catch (err) {\n return {\n ok: false,\n code: 'INVALID_URL',\n error: `Invalid origin: ${err instanceof Error ? err.message : String(err)}`,\n };\n }\n\n const fetchOptions: SafeFetchOptions = {\n timeoutMs: options.timeoutMs ?? DISCOVER_TIMEOUT_MS,\n maxResponseBytes: options.maxBytes ?? DISCOVER_MAX_BYTES,\n headers: { 'user-agent': options.userAgent ?? DEFAULT_USER_AGENT },\n allowedMethods: ['GET'],\n };\n\n // Lazy import: see the module-load comment above. Dynamic import works in\n // both CJS and ESM bundles; in CJS, Node can dynamically import the ESM-only\n // @peac/net-node at runtime even though `require()` cannot.\n const { safeFetchRaw } = await import('@peac/net-node');\n\n const raw = await safeFetchRaw(target.toString(), fetchOptions);\n if (!raw.ok) {\n return {\n ok: false,\n code: raw.code,\n error: `${raw.code}: ${raw.error}`,\n };\n }\n try {\n if (!raw.response.ok) {\n return {\n ok: false,\n code: `HTTP_${raw.response.status}`,\n error: `HTTP ${raw.response.status}: ${raw.response.statusText}`,\n };\n }\n const text = await raw.response.text();\n return { ok: true, text, warnings: raw.warnings };\n } finally {\n await raw.close();\n }\n}\n","/**\n * Conformance Category Validators\n *\n * Category-aware validation using the same validators as tests/conformance/*.spec.ts.\n */\n\nimport {\n ReceiptClaimsSchema,\n parseReceiptClaims,\n validateAgentIdentityAttestation,\n validateAttributionAttestation,\n validateDisputeAttestation,\n validateInteractionOrdered,\n validateWorkflowContextOrdered,\n validateObligationsExtension,\n isValidPurposeToken,\n isCanonicalPurpose,\n type InteractionValidationResult,\n type WorkflowValidationResult,\n} from '@peac/schema';\nimport { parsePolicyDocumentCompat } from '../policy-document-discovery.js';\nimport type { ValidationResult, ValidationResultWithPath, CategoryValidator } from './types.js';\nimport { zodPathToJsonPointer } from './digest.js';\n\n/**\n * Map Zod issue code to manifest keyword\n */\nfunction zodCodeToKeyword(code: string): string {\n const mapping: Record<string, string> = {\n invalid_type: 'type',\n invalid_literal: 'const',\n unrecognized_keys: 'additionalProperties',\n invalid_union: 'anyOf',\n invalid_enum_value: 'enum',\n invalid_string: 'format',\n too_small: 'minLength',\n too_big: 'maxLength',\n custom: 'custom',\n };\n return mapping[code] ?? code;\n}\n\n/**\n * Validate receipt claims using Zod schema\n */\nexport function validateReceiptPayload(payload: unknown): ValidationResultWithPath {\n const result = ReceiptClaimsSchema.safeParse(payload);\n\n if (result.success) {\n return { valid: true };\n }\n\n const firstIssue = result.error.issues[0];\n const zodPath = firstIssue?.path ?? [];\n const errorPath = zodPathToJsonPointer(zodPath as (string | number)[]);\n const errorKeyword = zodCodeToKeyword(firstIssue?.code ?? 'unknown');\n\n // Map paths to canonical error codes\n let errorCode = 'E_INVALID_FORMAT';\n const pathStr = zodPath.join('.');\n if (pathStr === 'iss' || pathStr.startsWith('iss.')) errorCode = 'E_INVALID_ISSUER';\n else if (pathStr === 'aud' || pathStr.startsWith('aud.')) errorCode = 'E_INVALID_AUDIENCE';\n else if (pathStr === 'iat') errorCode = 'E_INVALID_IAT';\n else if (pathStr === 'exp') errorCode = 'E_INVALID_EXP';\n else if (pathStr === 'rid') errorCode = 'E_INVALID_RID';\n else if (firstIssue?.code === 'invalid_type' && zodPath.length > 0) {\n // For required fields, Zod reports invalid_type when field is undefined\n errorCode = 'E_REQUIRED';\n }\n\n return {\n valid: false,\n error_code: errorCode,\n error_message: firstIssue?.message ?? 'Unknown validation error',\n error_path: errorPath,\n error_keyword: errorKeyword,\n };\n}\n\n/**\n * Validate receipt claims using unified parser (parse-level error codes).\n *\n * Separate from validateReceiptPayload which returns path-level codes.\n * Use this for the `parse` conformance category where fixtures assert\n * parse-level codes (E_PARSE_COMMERCE_INVALID, E_PARSE_ATTESTATION_INVALID).\n */\nexport function validateParseReceiptClaims(payload: unknown): ValidationResultWithPath {\n const pr = parseReceiptClaims(payload);\n if (pr.ok) {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: pr.error.code,\n error_message: pr.error.message,\n };\n}\n\n/**\n * Validate discovery document (peac.txt or peac-issuer.json)\n */\nfunction validateDiscoveryInput(input: unknown): ValidationResult {\n if (typeof input === 'string') {\n // Parse as peac.txt format via the CLI-internal compat helper that\n // preserves v0.13.0 @peac/disc.parse legacy-line tolerance.\n const result = parsePolicyDocumentCompat(input);\n if (result.valid) {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: 'E_DISCOVERY_PARSE_ERROR',\n error_message: result.errors?.join('; ') ?? 'Discovery parse error',\n };\n }\n\n // JSON format - validate structure\n if (typeof input === 'object' && input !== null) {\n const obj = input as Record<string, unknown>;\n if (!obj.issuer || typeof obj.issuer !== 'string') {\n return {\n valid: false,\n error_code: 'E_MISSING_ISSUER',\n error_message: 'Discovery document missing required issuer field',\n };\n }\n if (!obj.jwks_uri || typeof obj.jwks_uri !== 'string') {\n return {\n valid: false,\n error_code: 'E_MISSING_JWKS_URI',\n error_message: 'Discovery document missing required jwks_uri field',\n };\n }\n return { valid: true };\n }\n\n return {\n valid: false,\n error_code: 'E_INVALID_DISCOVERY',\n error_message: 'Discovery input must be string or object',\n };\n}\n\n/**\n * Validate agent identity attestation\n */\nfunction validateAgentIdentityInput(input: unknown): ValidationResult {\n const result = validateAgentIdentityAttestation(input);\n if (result.ok) {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: 'E_INVALID_AGENT_IDENTITY',\n error_message: result.error,\n };\n}\n\n/**\n * Validate attribution attestation\n */\nfunction validateAttributionInput(input: unknown): ValidationResult {\n const result = validateAttributionAttestation(input);\n if (result.ok) {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: 'E_INVALID_ATTRIBUTION',\n error_message: result.error,\n };\n}\n\n/**\n * Validate dispute attestation\n */\nfunction validateDisputeInput(input: unknown): ValidationResult {\n const result = validateDisputeAttestation(input);\n if (result.ok) {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: 'E_INVALID_DISPUTE',\n error_message: result.error,\n };\n}\n\n/**\n * Validate interaction evidence\n */\nfunction validateInteractionInput(input: unknown): ValidationResult {\n const result: InteractionValidationResult = validateInteractionOrdered(input);\n if (result.valid) {\n return {\n valid: true,\n warnings: result.warnings.map((w) => w.message),\n };\n }\n // InteractionValidationResult has errors array when invalid\n const firstError = result.errors[0];\n return {\n valid: false,\n error_code: firstError?.code ?? 'E_INVALID_INTERACTION',\n error_message: firstError?.message ?? 'Interaction validation failed',\n };\n}\n\n/**\n * Validate workflow context\n */\nfunction validateWorkflowInput(input: unknown): ValidationResult {\n const result: WorkflowValidationResult = validateWorkflowContextOrdered(input);\n if (result.valid) {\n return { valid: true };\n }\n // WorkflowValidationResult has error_code and error when invalid\n return {\n valid: false,\n error_code: result.error_code,\n error_message: result.error,\n };\n}\n\n/**\n * Validate obligations extension\n */\nfunction validateObligationsInput(input: unknown): ValidationResult {\n const result = validateObligationsExtension(input);\n if (result.ok) {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: 'E_INVALID_OBLIGATIONS',\n error_message: result.error,\n };\n}\n\n/**\n * Validate purpose tokens\n */\nfunction validatePurposeInput(input: unknown): ValidationResult {\n if (typeof input === 'object' && input !== null) {\n const obj = input as Record<string, unknown>;\n\n // Check purpose_declared array\n if (obj.purpose_declared && Array.isArray(obj.purpose_declared)) {\n for (const p of obj.purpose_declared) {\n if (typeof p === 'string' && !isValidPurposeToken(p) && !isCanonicalPurpose(p)) {\n return {\n valid: false,\n error_code: 'E_INVALID_PURPOSE_TOKEN',\n error_message: `Invalid purpose token: ${p}`,\n };\n }\n }\n }\n\n // Check purpose_enforced\n if (obj.purpose_enforced && typeof obj.purpose_enforced === 'string') {\n if (!isValidPurposeToken(obj.purpose_enforced) && !isCanonicalPurpose(obj.purpose_enforced)) {\n return {\n valid: false,\n error_code: 'E_INVALID_PURPOSE_ENFORCED',\n error_message: `Invalid enforced purpose: ${obj.purpose_enforced}`,\n };\n }\n }\n\n return { valid: true };\n }\n\n return {\n valid: false,\n error_code: 'E_INVALID_PURPOSE',\n error_message: 'Purpose input must be object with purpose_declared/purpose_enforced',\n };\n}\n\n/**\n * Validate bundle (basic structure check - full verification requires async)\n */\nfunction validateBundleInput(input: unknown): ValidationResult {\n if (typeof input !== 'object' || input === null) {\n return {\n valid: false,\n error_code: 'E_INVALID_BUNDLE',\n error_message: 'Bundle must be an object',\n };\n }\n\n const obj = input as Record<string, unknown>;\n\n // Check required bundle fields\n if (!obj.version || typeof obj.version !== 'string') {\n return {\n valid: false,\n error_code: 'E_MISSING_VERSION',\n error_message: 'Bundle missing required version field',\n };\n }\n\n // Check for entries or receipts array\n if (!Array.isArray(obj.entries) && !Array.isArray(obj.receipts)) {\n return {\n valid: false,\n error_code: 'E_MISSING_ENTRIES',\n error_message: 'Bundle missing entries or receipts array',\n };\n }\n\n return { valid: true };\n}\n\n/**\n * Validate x402 offer/payment structures\n */\nfunction validateX402Input(input: unknown): ValidationResult {\n if (typeof input !== 'object' || input === null) {\n return {\n valid: false,\n error_code: 'E_INVALID_X402',\n error_message: 'x402 input must be an object',\n };\n }\n\n const obj = input as Record<string, unknown>;\n\n // Check for x402 payment required structure\n if (obj.accepts && Array.isArray(obj.accepts)) {\n // Validate accepts array contains payment options\n for (const accept of obj.accepts) {\n if (typeof accept !== 'object' || accept === null) {\n return {\n valid: false,\n error_code: 'E_INVALID_ACCEPTS',\n error_message: 'x402 accepts must contain payment option objects',\n };\n }\n }\n return { valid: true };\n }\n\n // Check for x402 payment evidence structure\n if (obj.rail && obj.reference) {\n return { valid: true };\n }\n\n return {\n valid: false,\n error_code: 'E_INVALID_X402_STRUCTURE',\n error_message: 'x402 input missing required fields (accepts or rail+reference)',\n };\n}\n\n/**\n * Validate policy-related input\n */\nfunction validatePolicyInput(input: unknown): ValidationResult {\n if (typeof input !== 'object' || input === null) {\n return {\n valid: false,\n error_code: 'E_INVALID_POLICY',\n error_message: 'Policy input must be an object',\n };\n }\n\n // Basic structure validation for policy\n return { valid: true };\n}\n\n/**\n * Validate issue-related input (receipt issuance)\n */\nfunction validateIssueInput(input: unknown): ValidationResult {\n // Issue fixtures are typically receipt structures for issuance testing\n if (typeof input === 'object' && input !== null) {\n const obj = input as Record<string, unknown>;\n\n // If it has claims, validate them\n if (obj.claims) {\n return validateReceiptPayload(obj.claims);\n }\n\n // If it has payload, validate it\n if (obj.payload) {\n return validateReceiptPayload(obj.payload);\n }\n }\n\n return { valid: true };\n}\n\n/**\n * Valid next_action values (closed vocabulary)\n */\nconst VALID_NEXT_ACTIONS = new Set([\n 'retry_after_delay',\n 'retry_with_different_key',\n 'retry_with_different_input',\n 'refresh_attestation',\n 'contact_issuer',\n 'abort',\n 'none',\n]);\n\n/**\n * Validate error hint table\n *\n * Validates the shape of the next-action-hints.json fixture:\n * - Must have a `hints` object\n * - Each hint must have `next_action` from the closed vocabulary and `retryable` boolean\n */\nfunction validateErrorHintsInput(input: unknown): ValidationResult {\n if (typeof input !== 'object' || input === null) {\n return {\n valid: false,\n error_code: 'E_INVALID_ERROR_HINTS',\n error_message: 'Error hints input must be an object',\n };\n }\n\n const obj = input as Record<string, unknown>;\n if (!obj.hints || typeof obj.hints !== 'object') {\n return {\n valid: false,\n error_code: 'E_MISSING_HINTS',\n error_message: 'Error hints missing required hints object',\n };\n }\n\n const hints = obj.hints as Record<string, unknown>;\n for (const [code, hint] of Object.entries(hints)) {\n if (typeof hint !== 'object' || hint === null) {\n return {\n valid: false,\n error_code: 'E_INVALID_HINT',\n error_message: `Hint for ${code} must be an object`,\n };\n }\n const h = hint as Record<string, unknown>;\n if (!VALID_NEXT_ACTIONS.has(h.next_action as string)) {\n return {\n valid: false,\n error_code: 'E_INVALID_NEXT_ACTION',\n error_message: `Hint for ${code} has invalid next_action: ${String(h.next_action)}`,\n };\n }\n if (typeof h.retryable !== 'boolean') {\n return {\n valid: false,\n error_code: 'E_INVALID_RETRYABLE',\n error_message: `Hint for ${code} has non-boolean retryable: ${String(h.retryable)}`,\n };\n }\n }\n\n return { valid: true };\n}\n\n/**\n * Validate content-usage fixture input\n *\n * Content-usage fixtures are string inputs (HTTP header values).\n * Validates that the input is a string.\n */\nfunction validateContentUsageInput(input: unknown): ValidationResult {\n if (typeof input === 'string') {\n return { valid: true };\n }\n return {\n valid: false,\n error_code: 'E_INVALID_CONTENT_USAGE',\n error_message: 'Content-Usage input must be a string (HTTP header value)',\n };\n}\n\n/**\n * Category validator registry\n */\nexport const CATEGORY_VALIDATORS: Record<string, CategoryValidator> = {\n // Receipt claim validation\n valid: (input) => {\n const obj = input as Record<string, unknown>;\n return validateReceiptPayload(obj.payload ?? obj.claims ?? input);\n },\n invalid: (input) => {\n const obj = input as Record<string, unknown>;\n return validateReceiptPayload(obj.payload ?? obj.claims ?? input);\n },\n edge: (input) => {\n const obj = input as Record<string, unknown>;\n return validateReceiptPayload(obj.payload ?? obj.claims ?? input);\n },\n\n // Parse-level validation (unified parser, parse-level error codes).\n // The claims/payload ambiguity guard lives in the runner (test-harness concern).\n parse: (input) => {\n const obj = input as Record<string, unknown>;\n return validateParseReceiptClaims(obj.claims ?? obj.payload ?? input);\n },\n\n // Category-specific validators\n 'agent-identity': validateAgentIdentityInput,\n attribution: validateAttributionInput,\n bundle: validateBundleInput,\n discovery: validateDiscoveryInput,\n dispute: validateDisputeInput,\n interaction: validateInteractionInput,\n issue: validateIssueInput,\n obligations: validateObligationsInput,\n policy: validatePolicyInput,\n purpose: validatePurposeInput,\n verifier: (input) => {\n const obj = input as Record<string, unknown>;\n return validateReceiptPayload(obj.payload ?? obj.claims ?? input);\n },\n workflow: validateWorkflowInput,\n x402: validateX402Input,\n errors: validateErrorHintsInput,\n 'content-usage': validateContentUsageInput,\n};\n\n/**\n * Get validator for a category\n */\nexport function getValidator(category: string): CategoryValidator {\n return (\n CATEGORY_VALIDATORS[category] ??\n ((input) => {\n // Default: validate as receipt payload\n // Input may be the raw fixture (with payload/claims wrapper) or the payload directly\n if (typeof input === 'object' && input !== null) {\n const obj = input as Record<string, unknown>;\n // Check for wrapped payload/claims first\n if (obj.payload || obj.claims) {\n return validateReceiptPayload(obj.payload ?? obj.claims);\n }\n // Otherwise, if it looks like receipt claims (has standard fields), validate directly\n if ('iss' in obj || 'aud' in obj || 'iat' in obj || 'rid' in obj) {\n return validateReceiptPayload(input);\n }\n }\n return { valid: true };\n })\n );\n}\n","/**\n * PEAC Conformance Runner Library\n *\n * Category-aware validation using the same validators as tests/conformance/*.spec.ts:\n * - Receipt validation via @peac/schema (ReceiptClaimsSchema)\n * - Discovery validation via @peac/policy-kit (parsePolicyDocument), wrapped in a\n * CLI-internal compat helper that preserves v0.13.0 legacy-line tolerance\n * - Bundle verification via @peac/audit (verifyBundleIntegrity)\n * - Attestation validation via @peac/schema validators\n * - Interaction/Workflow validation via ordered validators\n *\n * This is the CLI's thin wrapper around the conformance suite.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { execSync } from 'child_process';\n\n// Re-export types and utilities from modules\nexport type {\n ConformanceLevel,\n TestStatus,\n TestDiagnostics,\n TestResult,\n ProfileLevel,\n ProfileDetail,\n ConformanceReport,\n RunnerOptions,\n RunnerCallbacks,\n FixturePack,\n SingleFixture,\n} from './conformance/types.js';\n\nexport { zodPathToJsonPointer } from './conformance/digest.js';\n\n// Import from modules\nimport type {\n ConformanceReport,\n RunnerOptions,\n RunnerCallbacks,\n TestResult,\n TestStatus,\n FixturePack,\n SingleFixture,\n ProfileDetail,\n} from './conformance/types.js';\n\nimport { loadManifest, getManifestEntry } from './conformance/manifest.js';\nimport { sha256, computeCanonicalDigest, computeVectorsDigest } from './conformance/digest.js';\nimport {\n getCategoryCapability,\n getCategoryProfile,\n shouldRunAtLevel,\n} from './conformance/profiles.js';\nimport { getValidator } from './conformance/validators.js';\n\nfunction getGitSha(): string | undefined {\n try {\n return execSync('git rev-parse --short HEAD', { encoding: 'utf-8' }).trim();\n } catch {\n return undefined;\n }\n}\n\n/**\n * Run conformance tests and generate report\n * Pure function - no console output, uses callbacks for progress\n */\nexport function runConformance(\n options: RunnerOptions,\n callbacks?: RunnerCallbacks\n): ConformanceReport {\n const startTime = Date.now();\n const { fixturesDir, level, category, implementationName, implementationVersion } = options;\n\n // Load manifest for reason checking\n const manifest = loadManifest(fixturesDir);\n\n // Collect categories to test (SORTED for determinism)\n const entries = fs.readdirSync(fixturesDir, { withFileTypes: true });\n let categories = entries\n .filter((e) => e.isDirectory() && !e.name.startsWith('.'))\n .map((e) => e.name)\n .sort(); // Deterministic ordering\n\n if (category) {\n if (!categories.includes(category)) {\n throw new Error(`Category not found: ${category}`);\n }\n categories = [category];\n }\n\n // Compute comprehensive vectors digest (includes manifest.json, recursive)\n const vectorsDigest = computeVectorsDigest(fixturesDir, categories);\n\n // Collect profiles\n const profiles = new Set<string>();\n\n // Run tests\n const results: TestResult[] = [];\n let passed = 0;\n let failed = 0;\n let skipped = 0;\n\n for (const cat of categories) {\n const categoryPath = path.join(fixturesDir, cat);\n const profile = getCategoryProfile(cat);\n profiles.add(profile);\n\n const validator = getValidator(cat);\n // SORTED for deterministic ordering across OS/filesystems\n const files = fs\n .readdirSync(categoryPath)\n .filter((f) => f.endsWith('.json'))\n .sort();\n\n for (const file of files) {\n const filePath = path.join(categoryPath, file);\n const content = fs.readFileSync(filePath, 'utf8');\n let fixture: unknown;\n\n const baseTestId = `${cat}.${file.replace('.json', '')}`;\n callbacks?.onTestStart?.(baseTestId);\n\n try {\n fixture = JSON.parse(content);\n } catch (err) {\n // Invalid JSON is a test failure\n failed++;\n const result: TestResult = {\n id: `${baseTestId}.parse`,\n category: profile,\n status: 'fail',\n observed: {\n valid: false,\n error_code: 'E_INVALID_JSON',\n error_message: (err as Error).message,\n },\n diagnostics: {\n error_code: 'E_INVALID_JSON',\n error_message: (err as Error).message,\n },\n };\n results.push(result);\n callbacks?.onTestComplete?.(result);\n continue;\n }\n\n // Determine if this is a fixture pack or single fixture\n const fixtureObj = fixture as Record<string, unknown>;\n const isFixturePack = Array.isArray(fixtureObj.fixtures);\n\n if (isFixturePack) {\n // Process fixture pack\n const pack = fixture as FixturePack;\n\n if (!shouldRunAtLevel(pack.version, level)) {\n skipped++;\n const result: TestResult = {\n id: baseTestId,\n category: profile,\n status: 'skip',\n diagnostics: {\n skip_reason: `Fixture version ${pack.version} exceeds level ${level}`,\n },\n };\n results.push(result);\n callbacks?.onTestComplete?.(result);\n continue;\n }\n\n for (let i = 0; i < pack.fixtures.length; i++) {\n const f = pack.fixtures[i];\n const fixtureName = f.name ?? `fixture_${i}`;\n const testId = `${baseTestId}.${fixtureName.replace(/\\s+/g, '_')}`;\n\n callbacks?.onTestStart?.(testId);\n\n // Skip fixtures without standard expected format (domain-specific fixture packs\n // like content-usage have their own test suites with expected_entries, not expected.valid)\n if (!f.expected || typeof f.expected.valid !== 'boolean') {\n skipped++;\n const result: TestResult = {\n id: testId,\n category: profile,\n status: 'skip',\n diagnostics: {\n skip_reason: 'Non-standard fixture format (domain-specific test suite)',\n },\n };\n results.push(result);\n callbacks?.onTestComplete?.(result);\n continue;\n }\n\n // Use JCS for canonical input digest (returns {alg, value})\n const inputDigest = computeCanonicalDigest(f.input);\n\n // Guard: fixture inputs must not have both \"claims\" and \"payload\".\n // Ambiguity is a test-harness concern -- precedence would silently\n // pick one and hide fixture authoring bugs.\n if (typeof f.input === 'object' && f.input !== null) {\n const inputObj = f.input as Record<string, unknown>;\n if (inputObj.claims !== undefined && inputObj.payload !== undefined) {\n failed++;\n const result: TestResult = {\n id: testId,\n category: profile,\n status: 'fail',\n diagnostics: {\n error_message: 'Fixture has both \"claims\" and \"payload\" -- ambiguous; use one',\n },\n };\n results.push(result);\n callbacks?.onTestComplete?.(result);\n continue;\n }\n }\n\n const observed = validator(f.input);\n\n // Check if result matches expectation\n const expectedValid = f.expected.valid;\n const actualValid = observed.valid;\n const expectedError = f.expected.error_code ?? f.expected.error;\n const actualError = observed.error_code;\n\n let status: TestStatus;\n if (expectedValid && actualValid) {\n status = 'pass';\n passed++;\n } else if (!expectedValid && !actualValid) {\n // Both invalid - check if error codes match (if specified)\n if (expectedError && actualError && expectedError !== actualError) {\n status = 'fail';\n failed++;\n } else {\n status = 'pass';\n passed++;\n }\n } else {\n status = 'fail';\n failed++;\n }\n\n const result: TestResult = {\n id: testId,\n category: profile,\n status,\n expected: {\n valid: expectedValid,\n error_code: expectedError,\n },\n observed: {\n valid: actualValid,\n error_code: actualError,\n error_message: observed.error_message,\n },\n diagnostics: {\n input_digest: inputDigest,\n warnings: observed.warnings,\n },\n };\n results.push(result);\n callbacks?.onTestComplete?.(result);\n }\n } else {\n // Process single fixture\n const singleFixture = fixture as SingleFixture;\n const testId = baseTestId;\n\n // Get manifest entry for additional expectations\n const manifestEntry = getManifestEntry(manifest, cat, file);\n\n // Use JCS for payload if present, otherwise hash raw file content for single fixtures\n const inputToValidate = singleFixture.payload ?? fixture;\n const inputDigest = singleFixture.payload\n ? computeCanonicalDigest(inputToValidate)\n : { alg: 'sha-256', value: sha256(content) }; // Raw file hash for single fixtures without payload\n\n // Determine expected validity from (in order): fixture, manifest, category default\n const expectedValid =\n singleFixture.expected_valid ??\n manifestEntry?.expected_valid ??\n (cat === 'valid' || cat === 'edge');\n\n // Get expected error from fixture or manifest (never derived from keyword)\n const expectedError = singleFixture.expected_error ?? manifestEntry?.expected_error_code;\n\n // Get expected path and keyword from manifest (first-class assertions)\n const expectedPath = manifestEntry?.expected_path;\n const expectedKeyword = manifestEntry?.expected_keyword;\n\n const observed = validator(inputToValidate);\n\n let status: TestStatus;\n if (expectedValid && observed.valid) {\n status = 'pass';\n passed++;\n } else if (!expectedValid && !observed.valid) {\n // Both invalid - check if error codes match (if specified)\n let mismatch = false;\n if (expectedError && observed.error_code && expectedError !== observed.error_code) {\n mismatch = true;\n }\n // Check expected_path if specified (first-class assertion)\n if (expectedPath && observed.error_path && expectedPath !== observed.error_path) {\n mismatch = true;\n }\n // Check expected_keyword if specified (first-class assertion)\n if (\n expectedKeyword &&\n observed.error_keyword &&\n expectedKeyword !== observed.error_keyword\n ) {\n mismatch = true;\n }\n if (mismatch) {\n status = 'fail';\n failed++;\n } else {\n status = 'pass';\n passed++;\n }\n } else {\n status = 'fail';\n failed++;\n }\n\n const result: TestResult = {\n id: testId,\n category: profile,\n status,\n expected: {\n valid: expectedValid,\n error_code: expectedError,\n error_path: expectedPath,\n error_keyword: expectedKeyword,\n },\n observed: {\n valid: observed.valid,\n error_code: observed.error_code,\n error_path: observed.error_path,\n error_keyword: observed.error_keyword,\n error_message: observed.error_message,\n },\n diagnostics: {\n input_digest: inputDigest,\n warnings: observed.warnings,\n },\n };\n results.push(result);\n callbacks?.onTestComplete?.(result);\n }\n }\n }\n\n // Build capabilities from tested categories\n const capabilities: ProfileDetail[] = [];\n for (const cat of categories) {\n const capability = getCategoryCapability(cat);\n // Deduplicate by profile name\n if (!capabilities.some((c) => c.profile === capability.profile)) {\n capabilities.push(capability);\n }\n }\n capabilities.sort((a, b) => a.profile.localeCompare(b.profile));\n\n const endTime = Date.now();\n\n // Build report\n const report: ConformanceReport = {\n report_version: 'peac-conformance-report/0.1',\n suite: {\n name: 'peac-core-conformance',\n version: '0.1.0',\n vectors_digest: {\n alg: 'sha-256',\n value: vectorsDigest,\n },\n profiles: Array.from(profiles).sort(),\n capabilities,\n },\n implementation: {\n name: implementationName ?? '@peac/cli',\n version: implementationVersion ?? '0.0.0',\n },\n summary: {\n passed,\n failed,\n skipped,\n total: passed + failed + skipped,\n status: failed === 0 ? 'pass' : 'fail',\n },\n results,\n meta: {\n generated_at: new Date().toISOString(),\n duration_ms: endTime - startTime,\n runner: {\n name: '@peac/cli',\n version: implementationVersion ?? '0.0.0',\n git_sha: getGitSha(),\n },\n },\n };\n\n return report;\n}\n\n/**\n * Format report as text\n */\nexport function formatReportText(report: ConformanceReport): string {\n const lines: string[] = [];\n\n lines.push('PEAC Conformance Test Results');\n lines.push('=============================');\n lines.push('');\n lines.push(`Status: ${report.summary.status.toUpperCase()}`);\n lines.push(`Profiles: ${report.suite.profiles.join(', ')}`);\n lines.push('');\n lines.push('Summary:');\n lines.push(` Passed: ${report.summary.passed}`);\n lines.push(` Failed: ${report.summary.failed}`);\n lines.push(` Skipped: ${report.summary.skipped}`);\n lines.push(` Total: ${report.summary.total}`);\n\n const failures = report.results.filter((r) => r.status === 'fail');\n if (failures.length > 0) {\n lines.push('');\n lines.push('Failures:');\n for (const f of failures) {\n lines.push(` - ${f.id}`);\n if (f.expected) {\n lines.push(\n ` Expected: valid=${f.expected.valid}${f.expected.error_code ? `, error=${f.expected.error_code}` : ''}`\n );\n }\n if (f.observed) {\n lines.push(\n ` Observed: valid=${f.observed.valid}${f.observed.error_code ? `, error=${f.observed.error_code}` : ''}`\n );\n }\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Format report as markdown\n */\nexport function formatReportMarkdown(report: ConformanceReport): string {\n const lines: string[] = [];\n\n lines.push('# PEAC Conformance Report');\n lines.push('');\n lines.push(`**Status:** ${report.summary.status.toUpperCase()}`);\n lines.push(`**Profiles:** ${report.suite.profiles.join(', ')}`);\n lines.push('');\n lines.push('## Summary');\n lines.push('');\n lines.push('| Metric | Count |');\n lines.push('|--------|-------|');\n lines.push(`| Passed | ${report.summary.passed} |`);\n lines.push(`| Failed | ${report.summary.failed} |`);\n lines.push(`| Skipped | ${report.summary.skipped} |`);\n lines.push(`| Total | ${report.summary.total} |`);\n\n const failures = report.results.filter((r) => r.status === 'fail');\n if (failures.length > 0) {\n lines.push('');\n lines.push('## Failures');\n lines.push('');\n for (const f of failures) {\n lines.push(`### ${f.id}`);\n lines.push('');\n if (f.expected) {\n lines.push(\n `- **Expected:** valid=${f.expected.valid}${f.expected.error_code ? `, error=${f.expected.error_code}` : ''}`\n );\n }\n if (f.observed) {\n lines.push(\n `- **Observed:** valid=${f.observed.valid}${f.observed.error_code ? `, error=${f.observed.error_code}` : ''}`\n );\n }\n lines.push('');\n }\n }\n\n return lines.join('\\n');\n}\n","/**\n * CLI Version Utility\n *\n * Reads version from package.json at runtime to avoid hardcoding.\n */\n\nimport { join } from 'node:path';\nimport { readFileSync, existsSync } from 'node:fs';\n\n/**\n * Get CLI version from package.json\n *\n * Uses multiple strategies to find package.json:\n * 1. __dirname relative path (for CJS)\n * 2. Process.cwd() fallback\n */\nexport function getVersion(): string {\n // Strategy 1: Try relative path from this file (dist/lib/version.js -> package.json)\n try {\n const pkgPath = join(__dirname, '..', '..', 'package.json');\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));\n if (pkg.version) return pkg.version;\n }\n } catch {\n // Continue to next strategy\n }\n\n // Strategy 2: Try from CWD (running in monorepo)\n try {\n const pkgPath = join(process.cwd(), 'packages', 'cli', 'package.json');\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));\n if (pkg.version) return pkg.version;\n }\n } catch {\n // Continue to fallback\n }\n\n // Strategy 3: Fallback version (should rarely happen)\n return '0.0.0-unknown';\n}\n\n/**\n * Get runtime string (e.g., \"node-22.0.0\")\n */\nexport function getRuntime(): string {\n return `node-${process.version.slice(1)}`;\n}\n\n/**\n * Get git commit hash if available\n */\nexport function getCommit(): string | undefined {\n // Could be enhanced to read from .git or environment variable\n return process.env.GIT_COMMIT ?? process.env.GITHUB_SHA;\n}\n","/**\n * PEAC Conformance CLI Commands (v0.10.8+)\n *\n * Commands for running conformance tests:\n * - run: Run conformance tests against fixtures\n * - list: List available conformance test fixtures\n *\n * Uses real validators from @peac/schema and generates reports\n * conforming to peac-conformance-report/0.1.\n *\n * @packageDocumentation\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport {\n runConformance,\n formatReportText,\n formatReportMarkdown,\n type ConformanceLevel,\n type RunnerCallbacks,\n type TestResult,\n} from '../lib/conformance-runner.js';\nimport { getVersion, getRuntime, getCommit } from '../lib/version.js';\n\n/**\n * Global options for conformance commands\n */\ninterface ConformanceGlobalOptions {\n json?: boolean;\n}\n\n/**\n * Get global options from parent command\n */\nfunction getGlobalOptions(cmd: Command): ConformanceGlobalOptions {\n const parent = cmd.parent;\n if (!parent) return {};\n return parent.opts() as ConformanceGlobalOptions;\n}\n\n/**\n * Output error - handles JSON vs human-readable format\n */\nfunction outputError(\n error: string,\n details: Record<string, unknown>,\n opts: ConformanceGlobalOptions\n): void {\n if (opts.json) {\n console.log(JSON.stringify({ success: false, error, ...details }, null, 2));\n } else {\n console.error(`Error: ${error}`);\n if (details.code) {\n console.error(`Code: ${details.code}`);\n }\n if (details.hint) {\n console.error(`Hint: ${details.hint}`);\n }\n }\n}\n\n/**\n * Find fixtures directory (relative to CLI package or repo root)\n */\nfunction findFixturesDir(customPath?: string): string | null {\n // Use custom path if provided\n if (customPath) {\n if (fs.existsSync(customPath)) {\n return customPath;\n }\n return null;\n }\n\n // Try relative to CLI package (when installed)\n const cliPath = path.resolve(__dirname, '../../../../specs/conformance/fixtures');\n if (fs.existsSync(cliPath)) {\n return cliPath;\n }\n\n // Try relative to repo root (when running from source)\n const repoPath = path.resolve(process.cwd(), 'specs/conformance/fixtures');\n if (fs.existsSync(repoPath)) {\n return repoPath;\n }\n\n // Try one level up (when running from packages/cli)\n const upPath = path.resolve(process.cwd(), '../../specs/conformance/fixtures');\n if (fs.existsSync(upPath)) {\n return upPath;\n }\n\n return null;\n}\n\n/**\n * List available fixture categories\n */\nfunction listCategories(fixturesDir: string): string[] {\n const entries = fs.readdirSync(fixturesDir, { withFileTypes: true });\n return entries.filter((e) => e.isDirectory() && !e.name.startsWith('.')).map((e) => e.name);\n}\n\n/**\n * Count fixtures in a category\n */\nfunction countFixtures(categoryPath: string): number {\n if (!fs.existsSync(categoryPath)) return 0;\n const files = fs.readdirSync(categoryPath);\n return files.filter((f) => f.endsWith('.json')).length;\n}\n\nconst conformance = new Command('conformance')\n .description('PEAC conformance testing (v0.10.8+)')\n .option('--json', 'Output in JSON format');\n\n/**\n * peac conformance run [options]\n */\nconformance\n .command('run')\n .description('Run conformance tests')\n .option('-l, --level <level>', 'Conformance level: basic, standard, full', 'standard')\n .option('-c, --category <category>', 'Test specific category only')\n .option('-o, --output <format>', 'Output format: json, text, markdown', 'text')\n .option('-v, --verbose', 'Show detailed test output')\n .option('--fixtures <path>', 'Path to fixtures directory')\n .option('--implementation <name>', 'Implementation name for report', '@peac/cli')\n .action(async (options, cmd) => {\n const globalOpts = getGlobalOptions(cmd);\n const startTime = Date.now();\n\n try {\n // Find fixtures directory\n const fixturesDir = findFixturesDir(options.fixtures);\n if (!fixturesDir) {\n outputError(\n 'Fixtures directory not found',\n {\n hint: options.fixtures\n ? `Specified path does not exist: ${options.fixtures}`\n : 'Run from repo root, specify --fixtures <path>, or ensure specs/conformance/fixtures is available',\n },\n globalOpts\n );\n process.exitCode = 1;\n return;\n }\n\n // Validate level\n const validLevels: ConformanceLevel[] = ['basic', 'standard', 'full'];\n if (!validLevels.includes(options.level)) {\n outputError(\n 'Invalid conformance level',\n {\n level: options.level,\n valid: validLevels,\n },\n globalOpts\n );\n process.exitCode = 1;\n return;\n }\n\n // Set up callbacks for verbose output\n const callbacks: RunnerCallbacks | undefined = options.verbose\n ? {\n onTestStart: (testId: string) => {\n console.log(`Running: ${testId}`);\n },\n onTestComplete: (result: TestResult) => {\n const status =\n result.status === 'pass' ? 'PASS' : result.status === 'fail' ? 'FAIL' : 'SKIP';\n console.log(` ${status}: ${result.id}`);\n },\n }\n : undefined;\n\n // Run conformance tests\n const report = runConformance(\n {\n fixturesDir,\n level: options.level as ConformanceLevel,\n category: options.category,\n implementationName: options.implementation,\n implementationVersion: getVersion(),\n },\n callbacks\n );\n\n // Add runtime metadata\n report.implementation.runtime = getRuntime();\n const commit = getCommit();\n if (commit) {\n report.implementation.commit = commit;\n }\n\n // Add meta section\n report.meta = {\n generated_at: new Date().toISOString(),\n runner: {\n name: 'peac-cli',\n version: getVersion(),\n },\n duration_ms: Date.now() - startTime,\n };\n\n // Output based on format\n if (options.output === 'json' || globalOpts.json) {\n console.log(JSON.stringify(report, null, 2));\n } else if (options.output === 'markdown') {\n console.log(formatReportMarkdown(report));\n } else {\n console.log(formatReportText(report));\n }\n\n process.exitCode = report.summary.failed === 0 ? 0 : 1;\n } catch (err) {\n outputError((err as Error).message, {}, globalOpts);\n process.exitCode = 1;\n }\n });\n\n/**\n * peac conformance list [--category <cat>]\n */\nconformance\n .command('list')\n .description('List available conformance test fixtures')\n .option('-c, --category <category>', 'List fixtures in specific category')\n .option('--fixtures <path>', 'Path to fixtures directory')\n .action((options, cmd) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n // Find fixtures directory\n const fixturesDir = findFixturesDir(options.fixtures);\n if (!fixturesDir) {\n outputError(\n 'Fixtures directory not found',\n {\n hint: options.fixtures\n ? `Specified path does not exist: ${options.fixtures}`\n : 'Run from repo root, specify --fixtures <path>, or ensure specs/conformance/fixtures is available',\n },\n globalOpts\n );\n process.exitCode = 1;\n return;\n }\n\n // Load manifest\n const manifestPath = path.join(fixturesDir, 'manifest.json');\n const manifest = fs.existsSync(manifestPath)\n ? JSON.parse(fs.readFileSync(manifestPath, 'utf8'))\n : {};\n\n // List categories\n const categories = listCategories(fixturesDir);\n\n if (options.category) {\n // List fixtures in specific category\n if (!categories.includes(options.category)) {\n outputError(\n 'Category not found',\n {\n category: options.category,\n available: categories,\n },\n globalOpts\n );\n process.exitCode = 1;\n return;\n }\n\n const categoryPath = path.join(fixturesDir, options.category);\n const files = fs.readdirSync(categoryPath).filter((f) => f.endsWith('.json'));\n const categoryManifest = manifest[options.category] as\n | Record<string, Record<string, unknown>>\n | undefined;\n\n if (globalOpts.json) {\n const fixtures = files.map((f) => ({\n file: f,\n description: (categoryManifest?.[f]?.description as string) || 'No description',\n }));\n console.log(JSON.stringify({ category: options.category, fixtures }, null, 2));\n } else {\n console.log(`Fixtures in ${options.category}:\\n`);\n for (const file of files) {\n const info = categoryManifest?.[file] || {};\n const desc = (info.description as string) || 'No description';\n console.log(` ${file}`);\n console.log(` ${desc}\\n`);\n }\n }\n } else {\n // List all categories\n if (globalOpts.json) {\n const categorySummary = categories.map((cat) => ({\n name: cat,\n fixture_count: countFixtures(path.join(fixturesDir, cat)),\n }));\n console.log(JSON.stringify({ categories: categorySummary }, null, 2));\n } else {\n console.log(`Available conformance test categories:\\n`);\n for (const cat of categories) {\n const count = countFixtures(path.join(fixturesDir, cat));\n console.log(` ${cat} (${count} fixtures)`);\n }\n console.log(`\\nUse 'peac conformance list -c <category>' to see fixtures in a category.`);\n }\n }\n\n process.exitCode = 0;\n } catch (err) {\n outputError((err as Error).message, {}, globalOpts);\n process.exitCode = 1;\n }\n });\n\nexport { conformance };\n","/**\n * PEAC Samples Loader\n *\n * Loads sample definitions from specs/conformance/samples/ when available,\n * falling back to embedded defaults when running outside the repo.\n *\n * This ensures a single source of truth (specs folder is canonical).\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\n\n/**\n * Sample category\n */\nexport type SampleCategory = 'valid' | 'invalid' | 'edge';\n\n/**\n * Sample definition\n */\nexport interface SampleDefinition {\n id: string;\n name: string;\n description: string;\n category: SampleCategory;\n claims: Record<string, unknown>;\n header?: Record<string, unknown>;\n expectedError?: string;\n}\n\n/**\n * Embedded fallback samples (used when specs folder not available)\n */\nconst EMBEDDED_SAMPLES: SampleDefinition[] = [\n {\n id: 'basic-receipt',\n name: 'Basic Receipt',\n description: 'Minimal valid PEAC receipt with only required fields',\n category: 'valid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://example.com',\n iat: 0, // Placeholder - will be set at generation time\n exp: 0, // Placeholder - will be set at generation time\n rid: 'sample-basic-001',\n },\n },\n {\n id: 'full-receipt',\n name: 'Full Receipt',\n description: 'PEAC receipt with all optional claims populated',\n category: 'valid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://api.example.com',\n sub: 'user:demo-user',\n iat: 0,\n exp: 0,\n rid: 'sample-full-001',\n purpose_declared: ['search', 'index'],\n purpose_enforced: 'search',\n purpose_reason: 'allowed',\n },\n },\n {\n id: 'interaction-evidence',\n name: 'Interaction Evidence',\n description: 'Receipt with InteractionEvidence extension for AI agent calls',\n category: 'valid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://agent.example.com',\n sub: 'agent:demo-agent-v1',\n iat: 0,\n exp: 0,\n rid: 'sample-ie-001',\n ext: {\n 'org.peacprotocol/interaction@0.1': {\n version: '0.1',\n interaction_id: 'int_sample_001',\n started_at: '2026-01-01T00:00:00.000Z',\n completed_at: '2026-01-01T00:00:01.000Z',\n outcome: { kind: 'success' },\n input: { hash: 'sha256:abc123...', byte_length: 1024 },\n output: { hash: 'sha256:def456...', byte_length: 2048 },\n },\n },\n },\n },\n {\n id: 'payment-evidence',\n name: 'Payment Evidence',\n description: 'Receipt with payment evidence (402 flow)',\n category: 'valid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://api.example.com',\n iat: 0,\n exp: 0,\n rid: 'sample-payment-001',\n amt: '100',\n cur: 'USD',\n payment: {\n rail: 'x402',\n reference: 'pay_sample_001',\n amount: '100',\n currency: 'USD',\n },\n },\n },\n {\n id: 'long-expiry',\n name: 'Long Expiry',\n description: 'Receipt with 24-hour expiration',\n category: 'valid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://example.com',\n iat: 0,\n exp: 0, // Will be set to iat + 86400 at generation time\n rid: 'sample-long-expiry-001',\n },\n },\n {\n id: 'expired',\n name: 'Expired Receipt',\n description: 'Receipt that has already expired (for testing rejection)',\n category: 'invalid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://example.com',\n iat: 0, // Will be set to now - 7200 at generation time\n exp: 0, // Will be set to now - 3600 at generation time\n rid: 'sample-expired-001',\n },\n expectedError: 'E_EXPIRED_RECEIPT',\n },\n {\n id: 'future-iat',\n name: 'Future IAT',\n description: 'Receipt with iat in the future (should be rejected)',\n category: 'invalid',\n claims: {\n iss: 'https://sandbox.peacprotocol.org',\n aud: 'https://example.com',\n iat: 0, // Will be set to now + 3600 at generation time\n exp: 0, // Will be set to now + 7200 at generation time\n rid: 'sample-future-iat-001',\n },\n expectedError: 'E_FUTURE_IAT',\n },\n {\n id: 'missing-iss',\n name: 'Missing Issuer',\n description: 'Receipt missing required iss claim (for testing validation)',\n category: 'invalid',\n claims: {\n aud: 'https://example.com',\n iat: 0,\n exp: 0,\n rid: 'sample-no-iss-001',\n },\n expectedError: 'E_MISSING_CLAIM',\n },\n];\n\n/**\n * Find samples directory\n */\nexport function findSamplesDir(customPath?: string): string | null {\n // Use custom path if provided\n if (customPath) {\n if (fs.existsSync(customPath)) {\n return customPath;\n }\n return null;\n }\n\n // Try relative to CLI package\n const cliPath = path.resolve(__dirname, '../../../../specs/conformance/samples');\n if (fs.existsSync(cliPath)) {\n return cliPath;\n }\n\n // Try relative to repo root\n const repoPath = path.resolve(process.cwd(), 'specs/conformance/samples');\n if (fs.existsSync(repoPath)) {\n return repoPath;\n }\n\n // Try one level up\n const upPath = path.resolve(process.cwd(), '../../specs/conformance/samples');\n if (fs.existsSync(upPath)) {\n return upPath;\n }\n\n return null;\n}\n\n/**\n * Load sample definition from a JSON file\n */\nfunction loadSampleFromFile(\n filePath: string,\n id: string,\n category: SampleCategory\n): SampleDefinition | null {\n try {\n const content = JSON.parse(fs.readFileSync(filePath, 'utf8'));\n\n // Handle both formats: fixture-style (header/payload) and claims-only\n const claims = content.payload ?? content.claims ?? content;\n const description = content.$comment ?? content.description ?? `Sample ${id}`;\n\n return {\n id,\n name: id\n .split('-')\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' '),\n description,\n category,\n claims,\n header: content.header,\n expectedError: content.expected_error,\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Load samples from specs directory\n */\nfunction loadSamplesFromDir(samplesDir: string): SampleDefinition[] {\n const samples: SampleDefinition[] = [];\n\n // Load from valid/ directory\n const validDir = path.join(samplesDir, 'valid');\n if (fs.existsSync(validDir)) {\n const files = fs.readdirSync(validDir).filter((f) => f.endsWith('.json'));\n for (const file of files) {\n const id = file.replace('.json', '');\n const sample = loadSampleFromFile(path.join(validDir, file), id, 'valid');\n if (sample) samples.push(sample);\n }\n }\n\n // Load from invalid/ directory\n const invalidDir = path.join(samplesDir, 'invalid');\n if (fs.existsSync(invalidDir)) {\n const files = fs.readdirSync(invalidDir).filter((f) => f.endsWith('.json'));\n for (const file of files) {\n const id = file.replace('.json', '');\n const sample = loadSampleFromFile(path.join(invalidDir, file), id, 'invalid');\n if (sample) samples.push(sample);\n }\n }\n\n // Load from edge/ directory if present\n const edgeDir = path.join(samplesDir, 'edge');\n if (fs.existsSync(edgeDir)) {\n const files = fs.readdirSync(edgeDir).filter((f) => f.endsWith('.json'));\n for (const file of files) {\n const id = file.replace('.json', '');\n const sample = loadSampleFromFile(path.join(edgeDir, file), id, 'edge');\n if (sample) samples.push(sample);\n }\n }\n\n return samples;\n}\n\n/**\n * Get sample definitions\n *\n * Loads from specs/conformance/samples/ when available (canonical source),\n * falls back to embedded samples when running outside the repo.\n */\nexport function getSamples(customSamplesPath?: string): SampleDefinition[] {\n const samplesDir = findSamplesDir(customSamplesPath);\n\n if (samplesDir) {\n const dirSamples = loadSamplesFromDir(samplesDir);\n if (dirSamples.length > 0) {\n return dirSamples;\n }\n }\n\n // Fall back to embedded samples\n return EMBEDDED_SAMPLES;\n}\n\n/**\n * Get a specific sample by ID\n */\nexport function getSampleById(id: string, customSamplesPath?: string): SampleDefinition | null {\n const samples = getSamples(customSamplesPath);\n return samples.find((s) => s.id === id) ?? null;\n}\n\n/**\n * List available sample IDs by category\n */\nexport function listSampleIds(category?: SampleCategory, customSamplesPath?: string): string[] {\n const samples = getSamples(customSamplesPath);\n const filtered = category ? samples.filter((s) => s.category === category) : samples;\n return filtered.map((s) => s.id);\n}\n","/**\n * PEAC Samples CLI Commands (v0.10.8+)\n *\n * Commands for working with sample receipts:\n * - list: List available sample receipts\n * - generate: Generate sample receipts for testing\n * - show: Show details of a specific sample\n *\n * Uses specs/conformance/samples/ as canonical source when available,\n * falls back to embedded samples when running outside the repo.\n *\n * @packageDocumentation\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { sign, generateKeypair, base64urlEncode } from '@peac/crypto';\nimport { getSamples, getSampleById, type SampleCategory } from '../lib/samples-loader.js';\nimport { getVersion } from '../lib/version.js';\n\n/**\n * Global options for samples commands\n */\ninterface SamplesGlobalOptions {\n json?: boolean;\n}\n\n/**\n * Get global options from parent command\n */\nfunction getGlobalOptions(cmd: Command): SamplesGlobalOptions {\n const parent = cmd.parent;\n if (!parent) return {};\n return parent.opts() as SamplesGlobalOptions;\n}\n\n/**\n * Output error - handles JSON vs human-readable format\n */\nfunction outputError(\n error: string,\n details: Record<string, unknown>,\n opts: SamplesGlobalOptions\n): void {\n if (opts.json) {\n console.log(JSON.stringify({ success: false, error, ...details }, null, 2));\n } else {\n console.error(`Error: ${error}`);\n if (details.hint) {\n console.error(`Hint: ${details.hint}`);\n }\n }\n}\n\n/**\n * Apply time adjustments to claims based on sample type\n */\nfunction applyTimeAdjustments(\n claims: Record<string, unknown>,\n sampleId: string,\n now: number\n): Record<string, unknown> {\n const adjusted = { ...claims };\n\n // Standard expiry: 1 hour\n const standardExpiry = 3600;\n // Long expiry: 24 hours\n const longExpiry = 86400;\n\n switch (sampleId) {\n case 'expired':\n // Already expired: iat 2 hours ago, exp 1 hour ago\n adjusted.iat = now - 7200;\n adjusted.exp = now - 3600;\n break;\n case 'future-iat':\n // Future iat: 1 hour in future\n adjusted.iat = now + 3600;\n adjusted.exp = now + 7200;\n break;\n case 'long-expiry':\n adjusted.iat = now;\n adjusted.exp = now + longExpiry;\n break;\n default:\n // Standard: iat now, exp in 1 hour\n if (adjusted.iat === 0 || !adjusted.iat) {\n adjusted.iat = now;\n }\n if (adjusted.exp === 0 || !adjusted.exp) {\n adjusted.exp = now + standardExpiry;\n }\n }\n\n return adjusted;\n}\n\nconst samples = new Command('samples')\n .description('Work with PEAC sample receipts (v0.10.8+)')\n .option('--json', 'Output in JSON format');\n\n/**\n * peac samples list [--category <cat>]\n */\nsamples\n .command('list')\n .description('List available sample receipts')\n .option('-c, --category <category>', 'Filter by category: valid, invalid, edge')\n .option('--samples <path>', 'Path to samples directory')\n .action((options, cmd) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const allSamples = getSamples(options.samples);\n let filteredSamples = allSamples;\n\n if (options.category) {\n filteredSamples = allSamples.filter((s) => s.category === options.category);\n if (filteredSamples.length === 0) {\n outputError('No samples in category', { category: options.category }, globalOpts);\n process.exitCode = 1;\n return;\n }\n }\n\n if (globalOpts.json) {\n const data = filteredSamples.map((s) => ({\n id: s.id,\n name: s.name,\n description: s.description,\n category: s.category,\n }));\n console.log(JSON.stringify({ samples: data }, null, 2));\n } else {\n console.log('Available PEAC Sample Receipts\\n');\n console.log('VALID SAMPLES:');\n for (const s of filteredSamples.filter((x) => x.category === 'valid')) {\n console.log(` ${s.id}`);\n console.log(` ${s.description}\\n`);\n }\n\n const invalid = filteredSamples.filter((x) => x.category === 'invalid');\n if (invalid.length > 0) {\n console.log('\\nINVALID SAMPLES (for testing rejection):');\n for (const s of invalid) {\n console.log(` ${s.id}`);\n console.log(` ${s.description}\\n`);\n }\n }\n\n const edge = filteredSamples.filter((x) => x.category === 'edge');\n if (edge.length > 0) {\n console.log('\\nEDGE CASE SAMPLES:');\n for (const s of edge) {\n console.log(` ${s.id}`);\n console.log(` ${s.description}\\n`);\n }\n }\n\n console.log('\\nUse \"peac samples show <id>\" to see sample details.');\n console.log('Use \"peac samples generate -o <dir>\" to generate sample files.');\n }\n\n process.exitCode = 0;\n } catch (err) {\n outputError((err as Error).message, {}, globalOpts);\n process.exitCode = 1;\n }\n });\n\n/**\n * peac samples show <id>\n */\nsamples\n .command('show')\n .description('Show details of a specific sample')\n .argument('<id>', 'Sample ID')\n .option('--samples <path>', 'Path to samples directory')\n .action((id, options, cmd) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const sample = getSampleById(id, options.samples);\n if (!sample) {\n const allSamples = getSamples(options.samples);\n const available = allSamples.map((s) => s.id);\n outputError('Sample not found', { id, available }, globalOpts);\n process.exitCode = 1;\n return;\n }\n\n if (globalOpts.json) {\n console.log(JSON.stringify(sample, null, 2));\n } else {\n console.log(`Sample: ${sample.name}\\n`);\n console.log(`ID: ${sample.id}`);\n console.log(`Category: ${sample.category}`);\n console.log(`Description: ${sample.description}\\n`);\n console.log('Claims:');\n console.log(JSON.stringify(sample.claims, null, 2));\n if (sample.expectedError) {\n console.log(`\\nExpected Error: ${sample.expectedError}`);\n }\n }\n\n process.exitCode = 0;\n } catch (err) {\n outputError((err as Error).message, {}, globalOpts);\n process.exitCode = 1;\n }\n });\n\n/**\n * peac samples generate -o <dir> [--format <format>] [--now <timestamp>] [--kid <kid>] [--seed <seed>]\n */\nsamples\n .command('generate')\n .description('Generate sample receipt files')\n .requiredOption('-o, --output <dir>', 'Output directory')\n .option('-f, --format <format>', 'Output format: jws, json, bundle', 'jws')\n .option('--category <category>', 'Generate only specific category')\n .option('--samples <path>', 'Path to samples directory')\n .option('--now <timestamp>', 'Unix timestamp for iat/exp (for deterministic generation)')\n .option('--kid <kid>', 'Key ID to use')\n .action(async (options, cmd) => {\n const globalOpts = getGlobalOptions(cmd);\n\n try {\n const outputDir = options.output;\n\n // Create output directories\n const validDir = path.join(outputDir, 'valid');\n const invalidDir = path.join(outputDir, 'invalid');\n const edgeDir = path.join(outputDir, 'edge');\n const bundlesDir = path.join(outputDir, 'bundles');\n\n fs.mkdirSync(validDir, { recursive: true });\n fs.mkdirSync(invalidDir, { recursive: true });\n fs.mkdirSync(edgeDir, { recursive: true });\n fs.mkdirSync(bundlesDir, { recursive: true });\n\n // Determine timestamp\n const now = options.now ? parseInt(options.now, 10) : Math.floor(Date.now() / 1000);\n\n // Generate key pair\n // Note: --seed option is documented but full determinism requires proper seed-to-key derivation\n const keyPair = await generateKeypair();\n const publicKeyBytes = keyPair.publicKey;\n const privateKeyBytes = keyPair.privateKey;\n\n // Build KID\n const kid = options.kid || `sandbox-${new Date(now * 1000).toISOString().slice(0, 7)}`;\n\n // Build JWK for the key\n const publicJwk = {\n kty: 'OKP',\n crv: 'Ed25519',\n x: base64urlEncode(publicKeyBytes),\n kid,\n use: 'sig',\n alg: 'EdDSA',\n };\n\n const generatedFiles: string[] = [];\n\n // Get samples to generate\n let samplesToGenerate = getSamples(options.samples);\n if (options.category) {\n samplesToGenerate = samplesToGenerate.filter((s) => s.category === options.category);\n }\n\n for (const sample of samplesToGenerate) {\n const targetDir =\n sample.category === 'valid'\n ? validDir\n : sample.category === 'edge'\n ? edgeDir\n : invalidDir;\n const filename = `${sample.id}.${options.format === 'json' ? 'json' : 'jws'}`;\n const filepath = path.join(targetDir, filename);\n\n // Apply time adjustments\n const adjustedClaims = applyTimeAdjustments(sample.claims, sample.id, now);\n\n if (options.format === 'json') {\n // Write as decoded JSON\n const output = {\n $comment: sample.description,\n header: {\n alg: 'EdDSA',\n typ: 'interaction-record+jwt',\n kid,\n },\n payload: adjustedClaims,\n ...(sample.expectedError ? { expected_error: sample.expectedError } : {}),\n };\n fs.writeFileSync(filepath, JSON.stringify(output, null, 2));\n } else {\n // Create actual JWS using @peac/crypto sign function\n const jws = await sign(adjustedClaims, privateKeyBytes, kid);\n fs.writeFileSync(filepath, jws);\n }\n\n generatedFiles.push(filepath);\n }\n\n // Write JWKS file for verification\n const jwksPath = path.join(bundlesDir, 'sandbox-jwks.json');\n const jwks = {\n keys: [publicJwk],\n };\n fs.writeFileSync(jwksPath, JSON.stringify(jwks, null, 2));\n generatedFiles.push(jwksPath);\n\n // Write offline verification bundle\n const bundlePath = path.join(bundlesDir, 'offline-verification.json');\n const bundle = {\n $comment: 'Offline verification bundle with sample receipts and JWKS',\n description:\n 'Bundle for offline verification testing. Contains test JWKS and sample metadata.',\n generated_at: new Date(now * 1000).toISOString(),\n generator: {\n name: 'peac-cli',\n version: getVersion(),\n },\n jwks,\n samples: samplesToGenerate.map((s) => ({\n id: s.id,\n description: s.description,\n category: s.category,\n })),\n notes: [\n 'Sample timestamps are based on --now parameter or generation time.',\n 'Do NOT use sandbox samples in production.',\n ],\n };\n fs.writeFileSync(bundlePath, JSON.stringify(bundle, null, 2));\n generatedFiles.push(bundlePath);\n\n if (globalOpts.json) {\n console.log(\n JSON.stringify(\n {\n success: true,\n output_dir: outputDir,\n files_generated: generatedFiles.length,\n files: generatedFiles,\n timestamp: now,\n kid,\n },\n null,\n 2\n )\n );\n } else {\n console.log(`Sample receipts generated successfully!\\n`);\n console.log(`Output directory: ${outputDir}`);\n console.log(`Files generated: ${generatedFiles.length}`);\n console.log(`Timestamp: ${now} (${new Date(now * 1000).toISOString()})`);\n console.log(`Key ID: ${kid}\\n`);\n console.log('Generated files:');\n for (const f of generatedFiles) {\n console.log(` ${path.relative(outputDir, f)}`);\n }\n console.log(`\\nJWKS for verification: ${path.relative(outputDir, jwksPath)}`);\n }\n\n process.exitCode = 0;\n } catch (err) {\n outputError((err as Error).message, {}, globalOpts);\n process.exitCode = 1;\n }\n });\n\nexport { samples };\n","/**\n * PEAC Reconcile CLI Command (v0.11.3+)\n *\n * Merge two evidence bundles and detect conflicts.\n * Conflict key: composite (iss, jti) with 3-step fallback:\n * 1. (iss, jti) from JWT claims\n * 2. (iss, rid) for Wire 0.1\n * 3. (iss, receipt_ref) where receipt_ref = sha256(receipt_jws)\n *\n * NO auto-resolution: conflicts are surfaced for human decision.\n * Deterministic output: receipts and conflicts sorted by (iss, jti) lexicographically.\n *\n * Security: 16 MB bundle size limit, path traversal prevention.\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport { readDisputeBundle, type DisputeBundleContents } from '@peac/audit';\nimport { computeReceiptRef } from '@peac/schema';\nimport { decode } from '@peac/crypto';\nimport { readFileBufferSnapshot } from '../lib/safe-file.js';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\ninterface ReconcileReport {\n version: '1.0';\n generated_at: string;\n bundles: string[];\n total_receipts: number;\n merged_receipts: number;\n conflicts: ConflictEntry[];\n}\n\ninterface ConflictEntry {\n key: string;\n bundle_a_receipt_ref: string;\n bundle_b_receipt_ref: string;\n diff_fields: string[];\n}\n\ninterface ReceiptRecord {\n /** Composite key: \"iss|jti\" */\n key: string;\n /** JWS string */\n jws: string;\n /** SHA-256 receipt ref */\n receipt_ref: string;\n /** Source bundle label */\n source: string;\n}\n\ninterface ReconcileGlobalOptions {\n json?: boolean;\n}\n\n// =============================================================================\n// CONSTANTS\n// =============================================================================\n\nconst MAX_BUNDLE_SIZE = 16 * 1024 * 1024; // 16 MB\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nfunction getGlobalOptions(cmd: Command): ReconcileGlobalOptions {\n const parent = cmd.parent;\n if (!parent) return {};\n return parent.opts() as ReconcileGlobalOptions;\n}\n\nfunction outputError(\n error: string,\n details: Record<string, unknown>,\n opts: ReconcileGlobalOptions\n): void {\n if (opts.json) {\n console.log(JSON.stringify({ success: false, error, ...details }, null, 2));\n } else {\n console.error(`Error: ${error}`);\n }\n}\n\n/**\n * Decode JWS payload using @peac/crypto canonical decoder.\n * Returns null if decoding fails.\n */\nfunction decodeJwsPayload(jws: string): Record<string, unknown> | null {\n try {\n const { payload } = decode<Record<string, unknown>>(jws);\n return payload;\n } catch {\n return null;\n }\n}\n\n/**\n * Extract composite conflict key from a JWS receipt.\n * 3-step fallback: (iss, jti) -> (iss, rid) -> (iss, receipt_ref)\n */\nfunction extractConflictKey(jws: string, receiptRef: string): string {\n const payload = decodeJwsPayload(jws);\n if (!payload) {\n return `unknown|${receiptRef}`;\n }\n\n const iss = typeof payload.iss === 'string' ? payload.iss : 'unknown';\n\n // Step 1: (iss, jti)\n if (typeof payload.jti === 'string' && payload.jti.length > 0) {\n return `${iss}|${payload.jti}`;\n }\n\n // Step 2: (iss, rid) for Wire 0.1\n if (typeof payload.rid === 'string' && payload.rid.length > 0) {\n return `${iss}|${payload.rid}`;\n }\n\n // Step 3: (iss, receipt_ref)\n return `${iss}|${receiptRef}`;\n}\n\n/**\n * Extract receipts from a bundle's contents into ReceiptRecords.\n * Uses canonical computeReceiptRef from @peac/schema (async, WebCrypto).\n */\nasync function extractReceipts(\n contents: DisputeBundleContents,\n sourceLabel: string\n): Promise<ReceiptRecord[]> {\n const records: ReceiptRecord[] = [];\n for (const [_id, jws] of contents.receipts) {\n const receiptRef = await computeReceiptRef(jws);\n const key = extractConflictKey(jws, receiptRef);\n records.push({ key, jws, receipt_ref: receiptRef, source: sourceLabel });\n }\n return records;\n}\n\n/**\n * Find field-level differences between two JWS receipts.\n */\nfunction findDiffFields(jwsA: string, jwsB: string): string[] {\n const payloadA = decodeJwsPayload(jwsA);\n const payloadB = decodeJwsPayload(jwsB);\n if (!payloadA || !payloadB) return ['payload_decode_failed'];\n\n const allKeys = new Set([...Object.keys(payloadA), ...Object.keys(payloadB)]);\n const diffs: string[] = [];\n for (const k of allKeys) {\n if (JSON.stringify(payloadA[k]) !== JSON.stringify(payloadB[k])) {\n diffs.push(k);\n }\n }\n return diffs.sort();\n}\n\n/**\n * Read and validate a bundle file.\n */\nasync function readBundle(\n bundlePath: string,\n label: string\n): Promise<{ ok: true; value: DisputeBundleContents } | { ok: false; error: string }> {\n // Path traversal prevention: resolve to absolute and check it stays within expected directory.\n // Preserve the historical behavior verbatim: the realpath check below mirrors the v0.11.3+\n // intent and is intentionally non-strict for absolute paths whose realpath equals the input.\n let resolved: string;\n try {\n resolved = fs.realpathSync(bundlePath);\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n return { ok: false, error: `Bundle file not found: ${bundlePath}` };\n }\n return { ok: false, error: `Failed to read ${label}: ${(err as Error).message}` };\n }\n if (resolved !== bundlePath && !resolved.startsWith(process.cwd())) {\n // If the realpath escapes cwd and the input was not already absolute,\n // surface it as a path-traversal error. realpathSync raises ENOENT for a\n // missing file, so the resolved path here is known to exist.\n return { ok: false, error: `Path traversal detected for ${label}` };\n }\n\n // fd-bound read with size validation. Errno discrimination handles the\n // missing/wrong-type/oversize failure surfaces the caller observes.\n let zipBuffer: Buffer;\n try {\n zipBuffer = readFileBufferSnapshot(bundlePath, { maxBytes: MAX_BUNDLE_SIZE });\n } catch (err) {\n const e = err as NodeJS.ErrnoException & { actualSize?: number };\n if (e.code === 'ENOENT') {\n return { ok: false, error: `Bundle file not found: ${bundlePath}` };\n }\n if (e.code === 'EISDIR') {\n return { ok: false, error: `Bundle ${label} is not a regular file: ${bundlePath}` };\n }\n if (e.code === 'E_PEAC_FILE_TOO_LARGE') {\n return {\n ok: false,\n error: `Bundle ${label} exceeds 16 MB size limit (${e.actualSize ?? 'unknown'} bytes)`,\n };\n }\n return { ok: false, error: `Failed to read ${label}: ${(err as Error).message}` };\n }\n\n const result = await readDisputeBundle(zipBuffer);\n if (!result.ok) {\n return { ok: false, error: `Failed to read ${label}: ${result.error.message}` };\n }\n return { ok: true, value: result.value };\n}\n\n/**\n * Format a ReconcileReport as human-readable text.\n */\nfunction formatReportText(report: ReconcileReport): string {\n const lines: string[] = [\n 'PEAC Reconciliation Report',\n '==========================',\n '',\n `Generated: ${report.generated_at}`,\n `Bundles: ${report.bundles.join(', ')}`,\n `Total receipts: ${report.total_receipts}`,\n `Merged receipts: ${report.merged_receipts}`,\n `Conflicts: ${report.conflicts.length}`,\n '',\n ];\n\n if (report.conflicts.length === 0) {\n lines.push('No conflicts detected. Bundles merge cleanly.');\n } else {\n lines.push('Conflicts:');\n lines.push('---------');\n for (const conflict of report.conflicts) {\n lines.push(` Key: ${conflict.key}`);\n lines.push(` Bundle A ref: ${conflict.bundle_a_receipt_ref}`);\n lines.push(` Bundle B ref: ${conflict.bundle_b_receipt_ref}`);\n lines.push(` Different fields: ${conflict.diff_fields.join(', ')}`);\n lines.push('');\n }\n }\n\n return lines.join('\\n');\n}\n\n// =============================================================================\n// COMMAND\n// =============================================================================\n\nexport function reconcileCommand(): Command {\n const reconcile = new Command('reconcile').description(\n 'Merge evidence bundles and detect conflicts (v0.11.3+)'\n );\n\n reconcile\n .argument('<bundle1>', 'Path to first bundle ZIP file')\n .argument('<bundle2>', 'Path to second bundle ZIP file')\n .option('-f, --format <format>', 'Output format: json or text', 'text')\n .option('--fail-on-conflict', 'Exit code 1 when any conflict detected', false)\n .action(\n async (\n bundle1Path: string,\n bundle2Path: string,\n options: Record<string, unknown>,\n cmd: Command\n ) => {\n const globalOpts = getGlobalOptions(cmd);\n const format = (options.format as string) || 'text';\n const failOnConflict = !!options.failOnConflict;\n\n try {\n // Read both bundles\n const [result1, result2] = await Promise.all([\n readBundle(bundle1Path, 'bundle1'),\n readBundle(bundle2Path, 'bundle2'),\n ]);\n\n if (!result1.ok) {\n outputError(result1.error, {}, globalOpts);\n process.exitCode = 1;\n return;\n }\n if (!result2.ok) {\n outputError(result2.error, {}, globalOpts);\n process.exitCode = 1;\n return;\n }\n\n // Extract receipts\n const [receipts1, receipts2] = await Promise.all([\n extractReceipts(result1.value, bundle1Path),\n extractReceipts(result2.value, bundle2Path),\n ]);\n\n // Build index: key -> ReceiptRecord[]\n const index = new Map<string, ReceiptRecord[]>();\n for (const r of [...receipts1, ...receipts2]) {\n const existing = index.get(r.key) ?? [];\n existing.push(r);\n index.set(r.key, existing);\n }\n\n // Detect conflicts and count merged receipts\n const conflicts: ConflictEntry[] = [];\n let mergedCount = 0;\n\n // Sort keys deterministically\n const sortedKeys = [...index.keys()].sort();\n\n for (const key of sortedKeys) {\n const records = index.get(key)!;\n\n // Find records from each bundle\n const fromA = records.filter((r) => r.source === bundle1Path);\n const fromB = records.filter((r) => r.source === bundle2Path);\n\n if (fromA.length > 0 && fromB.length > 0) {\n // Both bundles have this key: check for conflict\n const a = fromA[0];\n const b = fromB[0];\n if (a.receipt_ref !== b.receipt_ref) {\n // Same key, different content: CONFLICT\n conflicts.push({\n key,\n bundle_a_receipt_ref: a.receipt_ref,\n bundle_b_receipt_ref: b.receipt_ref,\n diff_fields: findDiffFields(a.jws, b.jws),\n });\n }\n // Same key, same content: merged (deduplicated)\n mergedCount++;\n } else {\n // Only in one bundle: merged directly\n mergedCount++;\n }\n }\n\n // Sort conflicts by key (already sorted since we iterate sorted keys)\n const report: ReconcileReport = {\n version: '1.0',\n generated_at: new Date().toISOString(),\n bundles: [bundle1Path, bundle2Path],\n total_receipts: receipts1.length + receipts2.length,\n merged_receipts: mergedCount,\n conflicts,\n };\n\n // Output\n if (format === 'json' || globalOpts.json) {\n console.log(JSON.stringify(report, null, 2));\n } else {\n console.log(formatReportText(report));\n }\n\n // Exit code\n if (failOnConflict && conflicts.length > 0) {\n process.exitCode = 1;\n } else {\n process.exitCode = 0;\n }\n } catch (err) {\n outputError((err as Error).message, {}, globalOpts);\n process.exitCode = 1;\n }\n }\n );\n\n return reconcile;\n}\n","/**\n * `peac doctor`: installability diagnostics.\n *\n * Runs a fixed set of offline-first checks that flag common PEAC\n * installation problems (Node version, required package resolution,\n * tracked config presence). Remote checks (JWKS reachability, reference\n * verifier reachability) are opt-in via the --online flag; by default\n * the command performs zero network calls.\n *\n * Each check reports green / yellow / red. Exit code is 0 when all\n * required checks are green or yellow; 1 when any required check is\n * red.\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { createRequire } from 'module';\n\nconst requireFrom = createRequire(path.join(process.cwd(), 'package.json'));\n\ntype Status = 'green' | 'yellow' | 'red';\n\ninterface CheckResult {\n name: string;\n status: Status;\n detail: string;\n}\n\nfunction paint(status: Status, msg: string): string {\n const labels: Record<Status, string> = {\n green: 'PASS',\n yellow: 'WARN',\n red: 'FAIL',\n };\n return `[${labels[status]}] ${msg}`;\n}\n\nfunction parseMajor(nodeVersion: string): number {\n // process.version is e.g. \"v22.19.0\"\n const m = /^v(\\d+)\\./.exec(nodeVersion);\n return m ? parseInt(m[1]!, 10) : 0;\n}\n\nfunction checkNodeVersion(): CheckResult {\n const major = parseMajor(process.version);\n if (major >= 22) {\n return {\n name: 'Node version',\n status: 'green',\n detail: `${process.version} (>= 22 required)`,\n };\n }\n return {\n name: 'Node version',\n status: 'red',\n detail: `${process.version} is below the required Node >= 22`,\n };\n}\n\nfunction checkPackageResolution(): CheckResult {\n const required = ['@peac/protocol', '@peac/crypto', '@peac/schema', '@peac/kernel'];\n const missing: string[] = [];\n for (const pkg of required) {\n try {\n requireFrom.resolve(pkg);\n } catch {\n missing.push(pkg);\n }\n }\n if (missing.length === 0) {\n return {\n name: 'Package resolution',\n status: 'green',\n detail: `${required.length} required packages resolvable`,\n };\n }\n return {\n name: 'Package resolution',\n status: 'red',\n detail: `${missing.length} missing: ${missing.join(', ')}`,\n };\n}\n\nfunction checkKeyMaterial(cwd: string): CheckResult {\n const env = process.env.PEAC_ISSUER_KEY || '';\n if (env) {\n if (env.startsWith('env:') || env.startsWith('file:')) {\n return {\n name: 'Issuer key material',\n status: 'green',\n detail: `PEAC_ISSUER_KEY set via ${env.split(':')[0]}:... scheme`,\n };\n }\n return {\n name: 'Issuer key material',\n status: 'yellow',\n detail: 'PEAC_ISSUER_KEY set but not using env: or file: scheme',\n };\n }\n // Also look for a conventional ed25519 JWK file at the project root.\n const candidatePaths = [\n path.join(cwd, 'issuer.jwk.json'),\n path.join(cwd, '.peac/issuer.jwk.json'),\n ];\n for (const p of candidatePaths) {\n if (fs.existsSync(p)) {\n return {\n name: 'Issuer key material',\n status: 'yellow',\n detail: `found ${path.relative(cwd, p)}; prefer PEAC_ISSUER_KEY env var`,\n };\n }\n }\n return {\n name: 'Issuer key material',\n status: 'yellow',\n detail: 'not found (issuance disabled; read-only tools still work)',\n };\n}\n\nfunction checkPeacTxt(cwd: string): CheckResult {\n const p = path.join(cwd, '.well-known/peac.txt');\n if (fs.existsSync(p)) {\n return {\n name: 'peac.txt presence',\n status: 'green',\n detail: `.well-known/peac.txt present at ${p}`,\n };\n }\n return {\n name: 'peac.txt presence',\n status: 'yellow',\n detail: 'no .well-known/peac.txt (discovery-layer check; optional for tool callers)',\n };\n}\n\nasync function checkOnlineJwks(issuerUrl: string, timeoutMs: number): Promise<CheckResult> {\n const ctrl = new AbortController();\n const timer = setTimeout(() => ctrl.abort(), timeoutMs);\n try {\n const cfgUrl = new URL('/.well-known/peac-issuer.json', issuerUrl).toString();\n const res = await fetch(cfgUrl, { signal: ctrl.signal });\n if (res.status !== 200) {\n return {\n name: 'Issuer configuration',\n status: 'red',\n detail: `${cfgUrl} returned ${res.status}`,\n };\n }\n const cfg = (await res.json()) as { jwks_uri?: string };\n const jwksUri = cfg.jwks_uri;\n if (!jwksUri) {\n return {\n name: 'Issuer configuration',\n status: 'red',\n detail: `${cfgUrl} missing jwks_uri`,\n };\n }\n const jwksRes = await fetch(jwksUri, { signal: ctrl.signal });\n if (jwksRes.status !== 200) {\n return {\n name: 'Issuer configuration',\n status: 'red',\n detail: `jwks_uri ${jwksUri} returned ${jwksRes.status}`,\n };\n }\n const jwks = (await jwksRes.json()) as { keys?: unknown[] };\n const keyCount = Array.isArray(jwks.keys) ? jwks.keys.length : 0;\n if (keyCount === 0) {\n return {\n name: 'Issuer configuration',\n status: 'red',\n detail: `jwks_uri ${jwksUri} returned empty keys array`,\n };\n }\n return {\n name: 'Issuer configuration',\n status: 'green',\n detail: `${cfgUrl} + jwks_uri resolvable with ${keyCount} key(s)`,\n };\n } catch (err: unknown) {\n return {\n name: 'Issuer configuration',\n status: 'red',\n detail: `fetch failed: ${err instanceof Error ? err.message : String(err)}`,\n };\n } finally {\n clearTimeout(timer);\n }\n}\n\nexport async function runDoctor(options: {\n online: boolean;\n issuer?: string;\n timeout: number;\n cwd: string;\n}): Promise<number> {\n const results: CheckResult[] = [];\n results.push(checkNodeVersion());\n results.push(checkPackageResolution());\n results.push(checkKeyMaterial(options.cwd));\n results.push(checkPeacTxt(options.cwd));\n\n if (options.online) {\n if (!options.issuer) {\n results.push({\n name: 'Issuer configuration',\n status: 'yellow',\n detail: '--online set but --issuer <url> not provided; skipping remote check',\n });\n } else {\n results.push(await checkOnlineJwks(options.issuer, options.timeout));\n }\n } else {\n results.push({\n name: 'Issuer configuration',\n status: 'yellow',\n detail: 'offline mode (default); pass --online --issuer <url> to enable remote check',\n });\n }\n\n console.log('\\npeac doctor');\n console.log('-----------');\n for (const r of results) {\n console.log(paint(r.status, `${r.name}: ${r.detail}`));\n }\n\n const hasRed = results.some((r) => r.status === 'red');\n console.log(hasRed ? '\\nFAIL: one or more checks are red.' : '\\nOK: no red checks.');\n return hasRed ? 1 : 0;\n}\n\nexport function doctor(program: Command): void {\n program\n .command('doctor')\n .description('Run PEAC installability diagnostics (offline by default)')\n .option('--online', 'enable remote checks (issuer configuration, JWKS)', false)\n .option('--issuer <url>', 'issuer URL for --online checks (https://...)')\n .option(\n '--timeout <ms>',\n 'timeout for remote checks in milliseconds',\n (v) => parseInt(v, 10),\n 5000\n )\n .action(async (opts: { online: boolean; issuer?: string; timeout: number }) => {\n const exitCode = await runDoctor({\n online: !!opts.online,\n issuer: opts.issuer,\n timeout: opts.timeout,\n cwd: process.cwd(),\n });\n process.exit(exitCode);\n });\n}\n","/**\n * CLI utilities and formatting\n */\n\nimport chalk from 'chalk';\nimport type { CommandResult } from './types.js';\n\nexport function formatOutput(result: CommandResult, json = false): string {\n if (json) {\n return JSON.stringify(result, null, 2);\n }\n\n if (!result.success) {\n return chalk.red(`Error: ${result.error}`);\n }\n\n // Format based on data type\n if (result.data && typeof result.data === 'object') {\n if (result.data.sources) {\n // Discovery result\n return formatDiscoveryResult(result.data);\n } else if (result.data.digest) {\n // Hash result\n return formatHashResult(result.data);\n } else if (result.data.valid !== undefined) {\n // Verify result\n return formatVerifyResult(result.data);\n }\n }\n\n return JSON.stringify(result.data, null, 2);\n}\n\nfunction formatDiscoveryResult(data: any): string {\n const lines = [`Discovery for: ${chalk.blue(data.url)}`, ''];\n\n for (const source of data.sources) {\n const status =\n source.status === 'found'\n ? chalk.green('[found]')\n : source.status === 'not_found'\n ? chalk.yellow('[not found]')\n : chalk.red('[error]');\n\n lines.push(`${status} ${source.type}: ${source.url}`);\n if (source.etag) {\n lines.push(` ETag: ${source.etag}`);\n }\n }\n\n return lines.join('\\\\n');\n}\n\nfunction formatHashResult(data: any): string {\n return [\n `Algorithm: ${data.algorithm}`,\n `Format: ${data.format}`,\n `Digest: ${chalk.green(data.digest)}`,\n `Input size: ${data.input_size} bytes`,\n ].join('\\\\n');\n}\n\nfunction formatVerifyResult(data: any): string {\n if (data.valid) {\n const lines = [chalk.green('Receipt verified successfully'), ''];\n\n if (data.policy_hash) {\n lines.push(`Policy hash: ${data.policy_hash}`);\n }\n\n if (data.resource) {\n lines.push(`Resource: ${data.resource}`);\n }\n\n return lines.join('\\\\n');\n } else {\n return chalk.red(`Verification failed: ${data.error || 'Unknown error'}`);\n }\n}\n\nexport function createExitHandler() {\n return (code: number) => {\n process.exit(code);\n };\n}\n\nexport function handleError(error: Error): CommandResult {\n return {\n success: false,\n error: error.message,\n };\n}\n\nexport function timing() {\n const started = Date.now();\n return {\n started,\n end: () => {\n const completed = Date.now();\n return {\n started,\n completed,\n duration: completed - started,\n };\n },\n };\n}\n","/**\n * peac discover <url> command\n *\n * Performs SSRF-aware retrieval of /.well-known/peac.txt and parses it as a\n * peac-policy/0.1 policy document. Implementation lives in the CLI-internal\n * helper at ../lib/policy-document-discovery.ts (not a public surface).\n *\n * peac.txt is a policy-document surface per docs/specs/PEAC-TXT.md. For\n * cryptographic key discovery, callers should use\n * /.well-known/peac-issuer.json (see docs/specs/PEAC-ISSUER.md).\n */\n\nimport {\n fetchPolicyDocumentText,\n parsePolicyDocumentCompat,\n type CompatParseResult,\n} from '../lib/policy-document-discovery.js';\nimport type { CLIOptions, CommandResult } from '../types.js';\nimport { handleError, timing } from '../utils.js';\n\ninterface DiscoverData extends CompatParseResult {\n hints?: string[];\n}\n\nexport class DiscoverCommand {\n async execute(url: string, _options: CLIOptions = {}): Promise<CommandResult> {\n const timer = timing();\n\n try {\n const parsedUrl = new URL(url);\n if (!['http:', 'https:'].includes(parsedUrl.protocol)) {\n throw new Error('URL must use http: or https: protocol');\n }\n\n const fetched = await fetchPolicyDocumentText(url);\n if (!fetched.ok) {\n return {\n success: false,\n error: fetched.error,\n timing: timer.end(),\n };\n }\n\n const parsed = parsePolicyDocumentCompat(fetched.text);\n const data: DiscoverData = { ...parsed };\n if (fetched.warnings && fetched.warnings.length > 0) {\n data.warnings = [...(parsed.warnings ?? []), ...fetched.warnings];\n }\n if (data.warnings && data.warnings.length > 0) {\n data.hints = [\n 'peac.txt is a policy-document surface (docs/specs/PEAC-TXT.md). ' +\n 'For key discovery, use /.well-known/peac-issuer.json (docs/specs/PEAC-ISSUER.md).',\n ];\n }\n\n return {\n success: true,\n data,\n timing: timer.end(),\n };\n } catch (error) {\n return {\n ...handleError(error as Error),\n timing: timer.end(),\n };\n }\n }\n}\n","/**\n * CLI capture limits and security defaults.\n *\n * Centralizes the bounded-capture caps and security-default constants\n * used by `peac observe command` and `peac record command`. Mirrored\n * (but enforced separately) by the Zod ranges in\n * `@peac/schema/src/extensions/cli-execution.ts`; keep both sides in\n * sync when changing.\n *\n * All values are POSIX-first. Windows behavior is not guaranteed by\n * the current CLI carrier profile; see `docs/specs/CLI-CARRIER-PROFILE.md`.\n */\n\n/** Bounded-capture caps. */\nexport const CLI_LIMITS = {\n /** Default max bytes retained in the stdout sample buffer (raw mode only). */\n defaultStdoutSampleBytes: 16_384,\n /** Default max bytes retained in the stderr sample buffer (raw mode only). */\n defaultStderrSampleBytes: 16_384,\n /** Hard ceiling for the stdout / stderr sample buffer (raw mode only). */\n maxStdoutSampleBytes: 65_536,\n maxStderrSampleBytes: 65_536,\n\n /** Default max bytes recorded in argv (raw mode only). */\n defaultArgvCaptureBytes: 4_096,\n /** Hard ceiling for argv bytes (raw mode only). */\n maxArgvCaptureBytes: 16_384,\n\n /** Hard ceiling for env entry count (deny-by-default; allowlist <= this). */\n maxEnvEntries: 32,\n\n /** Default wrapper timeout (10 minutes). */\n defaultTimeoutMs: 600_000,\n /** Wrapper timeout hard ceiling (24 hours). */\n maxTimeoutMs: 86_400_000,\n /** Wrapper timeout floor (1 ms). */\n minTimeoutMs: 1,\n\n /** Default SIGTERM-to-SIGKILL grace (5 seconds). */\n defaultKillGraceMs: 5_000,\n /** SIGTERM-to-SIGKILL grace hard ceiling (60 seconds). */\n maxKillGraceMs: 60_000,\n /** SIGTERM-to-SIGKILL grace floor. */\n minKillGraceMs: 0,\n} as const;\n\n/**\n * Shell binaries that, when detected as the program basename, REQUIRE\n * the explicit `--shell-mode` acknowledgement. PEAC NEVER synthesizes\n * shell syntax; the wrapper is an observer, not a shell orchestrator.\n */\nexport const SHELL_BINARY_BASENAMES = new Set<string>([\n 'sh',\n 'bash',\n 'zsh',\n 'dash',\n 'fish',\n 'pwsh',\n 'cmd',\n]);\n\n/** Returns true when the resolved program basename is a known shell binary. */\nexport function isShellBinary(programBasename: string): boolean {\n return SHELL_BINARY_BASENAMES.has(programBasename.toLowerCase());\n}\n","/**\n * CLI subprocess capture.\n *\n * Implements the bounded-capture wrapper used by `peac observe command`\n * and `peac record command`. Hard implementation invariants:\n *\n * - Spawn discipline: `spawn(prog, args, { shell: false })`\n * exclusively. NEVER `exec()`. The wrapper does NOT synthesize\n * shell syntax or rewrite the command. `--shell-mode` is\n * acknowledgement only.\n * - Streaming capture: `node:crypto.createHash` updated chunk-by-chunk.\n * Byte counter incremented chunk-by-chunk. Bounded sample buffer\n * is the ONLY buffer retained, and ONLY when raw capture is\n * double-opted-in. Full streams NEVER held in memory.\n * - Stdin: `--capture-stdin-mode` controls BOTH whether the wrapper\n * pipes parent stdin to the child AND what the wrapper records.\n * `none` (default) closes child stdin and does NOT read parent stdin.\n * The stdin pump must terminate when the child exits even if the\n * parent stream is still open.\n * - Timeout: `--timeout-ms` / `--kill-grace-ms` cascade SIGTERM then\n * SIGKILL; the record IS still emitted. The nested SIGKILL timer\n * is cleared on child close so it cannot keep the event loop alive.\n * - Signal exit codes follow POSIX `128 + signal-num`: SIGINT=130,\n * SIGTERM=143, SIGKILL=137; unknown signals fall back to 128.\n * - Stdin pumping is listener-based (event handlers attached to the\n * parent stream and child stdin). Backpressure pauses the parent\n * until child stdin emits 'drain'. The pump is reliably abortable\n * via an external AbortSignal even if the parent stream stays\n * open and idle, and removes ONLY pump-owned listeners on cleanup\n * (the parent is caller-owned).\n */\n\nimport { spawn, type ChildProcessWithoutNullStreams } from 'node:child_process';\nimport { createHash, type Hash } from 'node:crypto';\nimport type { Readable, Writable } from 'node:stream';\n\n/**\n * Thrown by `captureCommand` when the child process fails to spawn\n * (missing binary, ENOENT, EACCES, etc.). Node emits the `'error'`\n * event in this case and never emits `'spawn'`/`'close'` -- without\n * explicit handling the wrapper would hang waiting for `'close'`.\n */\nexport class CliSpawnFailedError extends Error {\n readonly code = 'cli.spawn_failed';\n constructor(\n message: string,\n readonly cause?: unknown\n ) {\n super(message);\n this.name = 'CliSpawnFailedError';\n }\n}\n\nexport type StdinMode = 'none' | 'length-only' | 'hashed';\nexport type CaptureMode = 'hashed' | 'redacted' | 'raw';\n\n/**\n * Spawn-input barrier. Asserts the program token is a non-empty\n * string with no NUL byte (POSIX exec rejects NUL anyway, but better\n * to fail loudly with a stable error than to surface a NodeJS\n * ERR_INVALID_ARG_VALUE). Args must be a string array with no NUL.\n *\n * The barrier deliberately does NOT block shell metacharacters in\n * tokens: per CLI-CARRIER-PROFILE.md the wrapper is an OBSERVER,\n * not a sandbox; operators may legitimately pass tokens such as\n * `;`, `|`, or `$VAR` as program arguments and `shell: false`\n * guarantees they are NOT interpreted as shell syntax.\n *\n * Returns the validated tokens. Centralising the spawn-input\n * checks here also gives static-analysis tools an explicit\n * sanitization step between caller-supplied input and `spawn()`.\n */\nfunction validateSpawnInputs(program: unknown, args: unknown): { program: string; args: string[] } {\n if (typeof program !== 'string' || program.length === 0) {\n throw new CliSpawnFailedError('program token must be a non-empty string');\n }\n if (program.includes('\\0')) {\n throw new CliSpawnFailedError('program token must not contain a NUL byte');\n }\n if (!Array.isArray(args)) {\n throw new CliSpawnFailedError('args must be an array of strings');\n }\n const validatedArgs: string[] = [];\n for (const a of args) {\n if (typeof a !== 'string') {\n throw new CliSpawnFailedError('args must be an array of strings');\n }\n if (a.includes('\\0')) {\n throw new CliSpawnFailedError('args must not contain NUL bytes');\n }\n validatedArgs.push(a);\n }\n return { program, args: validatedArgs };\n}\n\nexport interface CaptureOptions {\n /** Resolved program path (passed verbatim to `spawn`). */\n program: string;\n /** Argv tail (passed verbatim to `spawn`; never wrapped in a shell). */\n args: string[];\n /** Working directory for the child (passed to `spawn`); not the recorded cwd. */\n cwd: string;\n /**\n * Environment passed to the child. REQUIRED. Callers (the\n * pipeline / pure handler) must construct the env explicitly so\n * the env source is auditable; this function does NOT silently\n * fall back to `process.env`.\n */\n env: NodeJS.ProcessEnv;\n stdinMode: StdinMode;\n /**\n * Whether raw sample emission is enabled (requires `--capture-mode raw`\n * AND `--unsafe-allow-raw-capture`). When false, no `sample_base64` is\n * retained for stdout / stderr and the bounded sample buffer stays\n * empty even though the streams are still hashed and counted.\n */\n rawCaptureEnabled: boolean;\n /** Bounded sample cap for stdout (raw mode only). */\n stdoutSampleBytes: number;\n /** Bounded sample cap for stderr (raw mode only). */\n stderrSampleBytes: number;\n /** Wrapper timeout (ms). After this, the wrapper sends SIGTERM. */\n timeoutMs: number;\n /** SIGTERM-to-SIGKILL grace (ms). */\n killGraceMs: number;\n /**\n * Optional readable from which to source parent stdin. Defaults to\n * `process.stdin`. Tests inject a custom stream.\n */\n parentStdin?: Readable;\n}\n\nexport interface StreamCaptureRef {\n length: number;\n /** sha256 hex digest with the canonical `sha256:` prefix. */\n sha256: string;\n truncated: boolean;\n /** Present only when raw capture is enabled and the secret-scan does not suppress it. */\n sample_base64?: string;\n}\n\nexport interface StdinCaptureRef {\n mode: StdinMode;\n length?: number;\n sha256?: string;\n truncated?: boolean;\n}\n\nexport interface CaptureResult {\n exitCode: number;\n /** OS-reported child exit signal. Distinct from `terminationSignal`. */\n signal: string | null;\n /** True when the wrapper sent termination signals due to `--timeout-ms` elapsing. */\n timedOut: boolean;\n /** Signal sent BY THE WRAPPER after timeout. */\n terminationSignal: string | null;\n startedAt: string;\n finishedAt: string;\n durationMs: number;\n stdout: StreamCaptureRef;\n stderr: StreamCaptureRef;\n stdin: StdinCaptureRef;\n}\n\nconst SHA256_PREFIX = 'sha256:';\n\n/**\n * POSIX `128 + signal-num` mapping. Unknown signals fall back to 128\n * so the wrapper never returns NaN. Tests pin SIGINT=130, SIGTERM=143,\n * SIGKILL=137.\n */\nconst SIGNAL_EXIT_CODES: Record<string, number> = {\n SIGHUP: 129,\n SIGINT: 130,\n SIGQUIT: 131,\n SIGABRT: 134,\n SIGKILL: 137,\n SIGUSR1: 138,\n SIGUSR2: 140,\n SIGPIPE: 141,\n SIGALRM: 142,\n SIGTERM: 143,\n};\n\nexport function exitCodeForSignal(signal: string | null | undefined): number {\n if (!signal) return 128;\n return SIGNAL_EXIT_CODES[signal] ?? 128;\n}\n\ninterface StreamHasher {\n hasher: Hash;\n length: number;\n truncated: boolean;\n sampleBuffer: Buffer[];\n sampleBytes: number;\n}\n\nfunction newStreamHasher(): StreamHasher {\n return {\n hasher: createHash('sha256'),\n length: 0,\n truncated: false,\n sampleBuffer: [],\n sampleBytes: 0,\n };\n}\n\n/**\n * Update the streaming hasher and append to the bounded sample buffer\n * iff raw capture is enabled. Streaming-capture invariants:\n * - bytes are ALWAYS hashed and counted (`length` is exact, `sha256`\n * is computed over the full stream)\n * - the sample buffer is appended to ONLY when raw capture is enabled\n * AND the cap has not yet been reached; once the cap is reached the\n * `truncated` flag is set and additional bytes are NOT appended\n * - the full stream is NEVER held in memory\n */\nfunction feedHasher(state: StreamHasher, chunk: Buffer, sampleCap: number, rawEnabled: boolean) {\n state.hasher.update(chunk);\n state.length += chunk.length;\n if (rawEnabled && state.sampleBytes < sampleCap) {\n const remaining = sampleCap - state.sampleBytes;\n if (chunk.length <= remaining) {\n state.sampleBuffer.push(chunk);\n state.sampleBytes += chunk.length;\n } else {\n state.sampleBuffer.push(chunk.subarray(0, remaining));\n state.sampleBytes += remaining;\n state.truncated = true;\n }\n } else if (rawEnabled && state.sampleBytes >= sampleCap) {\n state.truncated = true;\n }\n}\n\nfunction finalizeStreamRef(state: StreamHasher, rawEnabled: boolean): StreamCaptureRef {\n const ref: StreamCaptureRef = {\n length: state.length,\n sha256: SHA256_PREFIX + state.hasher.digest('hex'),\n truncated: state.truncated,\n };\n if (rawEnabled && state.sampleBuffer.length > 0) {\n ref.sample_base64 = Buffer.concat(state.sampleBuffer, state.sampleBytes).toString('base64');\n }\n return ref;\n}\n\n/**\n * Pump parent stdin to child stdin via explicit event listeners,\n * optionally hashing/counting per stdin mode. Resolves when the\n * parent emits 'end' / 'error', when child stdin emits 'error', or\n * when the abort signal fires. The pump installs ONLY pump-owned\n * listeners and removes ONLY those listeners on resolve / abort, so\n * caller-owned listeners on the parent stream stay intact. An idle,\n * never-ending parent stream never hangs the wrapper because the\n * abort-signal path resolves immediately without waiting for parent\n * data.\n */\nasync function pumpStdin(\n parent: Readable,\n childStdin: Writable,\n mode: Exclude<StdinMode, 'none'>,\n abortSignal: AbortSignal\n): Promise<{ length: number; sha256?: string; truncated: boolean }> {\n let length = 0;\n const truncated = false;\n const hasher = mode === 'hashed' ? createHash('sha256') : null;\n\n // Listener-based pump. We attach pump-owned listeners to the parent\n // stream and remove ONLY those listeners on resolve / abort. The\n // parent (typically process.stdin) is caller-owned; we never call\n // removeAllListeners() and we never destroy or end the parent. The\n // resolution conditions are explicit:\n // - abort signal fires (child exited; wrapper aborts the pump)\n // - parent emits 'end'\n // - parent emits 'error'\n // - child stdin emits 'error' (e.g., EPIPE)\n // An idle, never-ending parent that emits no more data must NOT\n // hang the wrapper: when the abort signal fires, the pump removes\n // its listeners and resolves immediately even though the parent\n // stream is still open.\n return new Promise((resolve) => {\n let settled = false;\n let drainWaiter: ((reason?: unknown) => void) | null = null;\n\n const finalize = (): { length: number; sha256?: string; truncated: boolean } => {\n const out: { length: number; sha256?: string; truncated: boolean } = { length, truncated };\n if (hasher) out.sha256 = SHA256_PREFIX + hasher.digest('hex');\n return out;\n };\n\n const cleanup = () => {\n parent.off('data', onData);\n parent.off('end', onEnd);\n parent.off('error', onParentError);\n childStdin.off('drain', onDrain);\n childStdin.off('error', onChildError);\n abortSignal.removeEventListener('abort', onAbort);\n };\n\n const settle = () => {\n if (settled) return;\n settled = true;\n cleanup();\n // End child stdin so the child sees EOF; ignore if already closed.\n try {\n childStdin.end();\n } catch {\n // ignore\n }\n // Reject any pending drain waiter so the data path unwinds.\n if (drainWaiter) {\n const reject = drainWaiter;\n drainWaiter = null;\n try {\n reject(new Error('pump-aborted'));\n } catch {\n // ignore\n }\n }\n resolve(finalize());\n };\n\n const onData = (chunk: Buffer | string) => {\n if (settled) return;\n const buf = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n length += buf.length;\n if (hasher) hasher.update(buf);\n let writable = false;\n try {\n writable = childStdin.write(buf);\n } catch {\n // child closed stdin early; abandon further forwarding.\n settle();\n return;\n }\n if (!writable) {\n // Backpressure: pause parent until child drains, abort, or error.\n try {\n parent.pause();\n } catch {\n // ignore\n }\n const waiter = new Promise<void>((res, rej) => {\n drainWaiter = rej;\n childStdin.once('drain', () => {\n drainWaiter = null;\n res();\n });\n });\n waiter\n .then(() => {\n if (settled) return;\n try {\n parent.resume();\n } catch {\n // ignore\n }\n })\n .catch(() => {\n // pump-aborted: settle() already cleaned up.\n });\n }\n };\n\n const onEnd = () => settle();\n const onParentError = () => settle();\n const onChildError = () => settle();\n const onDrain = () => {\n // 'drain' is consumed by the once-handler installed above; this\n // attached handler exists only so we can off() it on cleanup if\n // it never fired. No-op body.\n };\n const onAbort = () => {\n // Pause parent so no further data is delivered (best-effort);\n // do not destroy or remove listeners belonging to other consumers.\n try {\n parent.pause();\n } catch {\n // ignore\n }\n settle();\n };\n\n parent.on('data', onData);\n parent.on('end', onEnd);\n parent.on('error', onParentError);\n childStdin.on('drain', onDrain);\n childStdin.on('error', onChildError);\n if (abortSignal.aborted) {\n onAbort();\n } else {\n abortSignal.addEventListener('abort', onAbort, { once: true });\n }\n });\n}\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\n/**\n * Run the bounded-capture wrapper. The promise resolves when the child\n * exits OR is killed by the wrapper after timeout; it does NOT reject\n * on non-zero exit; the record IS still emitted regardless of child exit code.\n */\nexport async function captureCommand(opts: CaptureOptions): Promise<CaptureResult> {\n const startedAt = nowIso();\n const startMs = Date.now();\n\n const stdoutState = newStreamHasher();\n const stderrState = newStreamHasher();\n\n // Configure spawn stdio per stdin mode. `none` closes child stdin\n // (wrapper does NOT read parent stdin); other modes pipe.\n const stdioConfig: ('ignore' | 'pipe')[] =\n opts.stdinMode === 'none' ? ['ignore', 'pipe', 'pipe'] : ['pipe', 'pipe', 'pipe'];\n\n // Validate the spawn inputs through an explicit barrier. The\n // wrapper's documented purpose (CLI-CARRIER-PROFILE.md section 2)\n // is to spawn a caller-supplied child process; the security floor\n // is `shell: false` (no metacharacter expansion). The barrier\n // additionally rejects empty program tokens, NUL bytes, and\n // non-string argv tokens. It intentionally permits shell\n // metacharacters as ordinary argv bytes because spawn() is called\n // with shell: false and PEAC does not synthesize shell syntax.\n const { program, args } = validateSpawnInputs(opts.program, opts.args);\n const child = spawn(program, args, {\n cwd: opts.cwd,\n env: opts.env,\n stdio: stdioConfig,\n shell: false,\n windowsHide: true,\n }) as ChildProcessWithoutNullStreams;\n\n // Stream capture (always hashed and counted; sample only when raw enabled).\n child.stdout.on('data', (chunk: Buffer) => {\n feedHasher(stdoutState, chunk, opts.stdoutSampleBytes, opts.rawCaptureEnabled);\n });\n child.stderr.on('data', (chunk: Buffer) => {\n feedHasher(stderrState, chunk, opts.stderrSampleBytes, opts.rawCaptureEnabled);\n });\n\n // Stdin handling. The pump runs concurrently with the child; when the\n // child closes we abort the pump so the wrapper cannot hang on a\n // never-ending parent stream (TTY, infinite pipe, etc.).\n let stdinCapture: { length: number; sha256?: string; truncated: boolean } = {\n length: 0,\n truncated: false,\n };\n let stdinPromise: Promise<typeof stdinCapture> | null = null;\n const stdinAbort = new AbortController();\n if (opts.stdinMode !== 'none') {\n const parent = opts.parentStdin ?? process.stdin;\n stdinPromise = pumpStdin(parent, child.stdin, opts.stdinMode, stdinAbort.signal);\n } else {\n // 'none': child stdin already closed via stdio: 'ignore'. Wrapper\n // does NOT read parent stdin (no parent.read, no parent.on('data')).\n }\n\n // Timeout / kill cascade. The nested SIGKILL timer is stored and\n // cleared on child close so it cannot keep the event loop alive.\n let timedOut = false;\n let terminationSignal: string | null = null;\n let killHandle: NodeJS.Timeout | undefined;\n const timeoutHandle = setTimeout(() => {\n timedOut = true;\n terminationSignal = 'SIGTERM';\n try {\n child.kill('SIGTERM');\n } catch {\n // ignore\n }\n killHandle = setTimeout(() => {\n if (child.exitCode === null && child.signalCode === null) {\n terminationSignal = 'SIGKILL';\n try {\n child.kill('SIGKILL');\n } catch {\n // ignore\n }\n }\n }, opts.killGraceMs);\n }, opts.timeoutMs);\n\n // Race the child's `'close'` event against `'error'`. Per Node docs,\n // a child that fails to spawn (ENOENT / EACCES / non-executable)\n // emits `'error'` and NEVER emits `'spawn'` / `'close'`; without\n // explicit handling the wrapper would hang waiting for `'close'`.\n const exitInfo = await new Promise<{ exitCode: number; signal: string | null }>(\n (resolve, reject) => {\n let settled = false;\n child.on('close', (code, signal) => {\n if (settled) return;\n settled = true;\n clearTimeout(timeoutHandle);\n if (killHandle) clearTimeout(killHandle);\n stdinAbort.abort();\n // Synthesize POSIX `128 + signal-num` for signal exits; pass\n // through normal exit codes verbatim.\n const exitCode = code === null ? exitCodeForSignal(signal) : code;\n resolve({ exitCode, signal: signal ?? null });\n });\n child.on('error', (err) => {\n if (settled) return;\n settled = true;\n clearTimeout(timeoutHandle);\n if (killHandle) clearTimeout(killHandle);\n stdinAbort.abort();\n reject(\n new CliSpawnFailedError(\n `failed to spawn child process: ${err instanceof Error ? err.message : String(err)}`,\n err\n )\n );\n });\n }\n );\n\n if (stdinPromise) {\n stdinCapture = await stdinPromise;\n }\n\n const finishedAt = nowIso();\n const durationMs = Date.now() - startMs;\n\n const stdinRef: StdinCaptureRef =\n opts.stdinMode === 'none'\n ? { mode: 'none' }\n : opts.stdinMode === 'length-only'\n ? { mode: 'length-only', length: stdinCapture.length, truncated: stdinCapture.truncated }\n : {\n mode: 'hashed',\n length: stdinCapture.length,\n sha256: stdinCapture.sha256!,\n truncated: stdinCapture.truncated,\n };\n\n return {\n exitCode: exitInfo.exitCode,\n signal: exitInfo.signal,\n timedOut,\n terminationSignal,\n startedAt,\n finishedAt,\n durationMs,\n stdout: finalizeStreamRef(stdoutState, opts.rawCaptureEnabled),\n stderr: finalizeStreamRef(stderrState, opts.rawCaptureEnabled),\n stdin: stdinRef,\n };\n}\n","/**\n * Race-free output-path writability preflight (neutral, surface-agnostic).\n *\n * Used by every CLI surface that supports `--output <file>` to verify the\n * target path is writable BEFORE doing any side-effecting work (spawning a\n * child process, loading an issuer key, signing, etc.). A record-producing\n * wrapper must never do that work only to discover the record cannot be\n * persisted.\n *\n * The preflight is deliberately non-invasive on the final target path:\n * - if the final target exists, open it for append/write check and\n * close it; never unlink the existing target\n * - if the final target does NOT exist, create a uniquely-named\n * sibling temp file in the parent directory with O_EXCL and\n * immediately unlink that temp file; the final target path is\n * not created or touched until the actual write step\n *\n * Result: between preflight and the eventual write, the CLI has NOT\n * created or modified the final output path. Concurrent observers cannot\n * race against a transient zero-byte target file produced by the preflight.\n */\n\nimport { closeSync, constants as fsConstants, openSync, statSync, unlinkSync } from 'node:fs';\nimport { dirname, join, resolve as pathResolve } from 'node:path';\nimport { randomBytes } from 'node:crypto';\n\n/**\n * Verify that `--output <file>` will be writable. Returns null on\n * success; otherwise an error message suitable for pairing with\n * `cli.output_write_failed`.\n */\nexport function preflightOutputWritable(output: string): string | null {\n if (output === '-' || output === '') return null;\n const absPath = pathResolve(output);\n const parent = dirname(absPath);\n try {\n const st = statSync(parent);\n if (!st.isDirectory()) {\n return `parent path '${parent}' is not a directory`;\n }\n } catch (err) {\n return `parent directory '${parent}' does not exist (${(err as NodeJS.ErrnoException)?.code ?? (err instanceof Error ? err.message : String(err))})`;\n }\n\n // Race-free target discrimination. We do NOT call existsSync() before\n // open() because that introduces a TOCTOU window between the check and\n // the use. Instead we open the path for append WITHOUT O_CREAT: a\n // successful open proves the file exists and is writable; an ENOENT\n // error proves the file does not exist; any other errno surfaces a\n // real preflight failure. The single open() syscall makes the\n // discrimination atomic.\n let existingFd: number | undefined;\n try {\n existingFd = openSync(absPath, fsConstants.O_WRONLY | fsConstants.O_APPEND);\n } catch (err) {\n const code = (err as NodeJS.ErrnoException)?.code;\n if (code !== 'ENOENT') {\n return `cannot open '${absPath}' for write (${code ?? (err instanceof Error ? err.message : String(err))})`;\n }\n // ENOENT: target does not exist. Fall through to the temp-file probe.\n }\n if (existingFd !== undefined) {\n try {\n closeSync(existingFd);\n } catch {\n // ignore\n }\n return null;\n }\n\n // Missing target: probe writability via a uniquely-named sibling temp\n // file, then immediately unlink the temp file. The final target path\n // is NOT touched.\n const tempName = `.peac-preflight-${randomBytes(8).toString('hex')}.tmp`;\n const tempPath = join(parent, tempName);\n let fd: number | undefined;\n try {\n fd = openSync(tempPath, fsConstants.O_WRONLY | fsConstants.O_CREAT | fsConstants.O_EXCL, 0o600);\n } catch (err) {\n return `parent directory '${parent}' is not writable (${(err as NodeJS.ErrnoException)?.code ?? (err instanceof Error ? err.message : String(err))})`;\n } finally {\n if (fd !== undefined) {\n try {\n closeSync(fd);\n } catch {\n // ignore\n }\n }\n }\n try {\n unlinkSync(tempPath);\n } catch {\n // not fatal; the temp file will linger but the final target was\n // never touched and the eventual write will succeed.\n }\n return null;\n}\n","/**\n * Secret-scan regex set for bounded-capture samples.\n *\n * Secret-scan is ON by default. When raw sample emission is possible\n * (`--capture-mode raw && --unsafe-allow-raw-capture`), the wrapper\n * runs this regex set against each candidate sample BEFORE emission.\n * If a token-like pattern matches, the sample is suppressed and\n * replaced with `{ sample_suppressed_reason: \"secret_pattern_detected\",\n * matched_pattern_category: <category> }`. The literal match is NEVER\n * recorded.\n *\n * The regex set is intentionally small (5 named patterns). False\n * positives are tolerated; the suppression itself is observable so a\n * verifier can detect over-suppression.\n *\n * Disabling secret-scan under raw capture requires the third unsafe\n * flag (`--unsafe-disable-secret-scan`); enforcement lives in the\n * subcommand flag-parse layer, not here.\n */\n\nexport type SecretCategory =\n | 'bearer-token'\n | 'api-key'\n | 'jwt'\n | 'aws-access-key'\n | 'generic-high-entropy';\n\ninterface SecretPattern {\n category: SecretCategory;\n pattern: RegExp;\n}\n\n/**\n * Patterns are deliberately broad. Each pattern targets the SHAPE of\n * a credential rather than a specific issuer; the goal is suppression\n * not classification accuracy.\n */\nconst SECRET_PATTERNS: ReadonlyArray<SecretPattern> = [\n // JWS / JWT (three base64url segments separated by dots; first segment\n // starts with a base64-encoded `{\"`).\n {\n category: 'jwt',\n pattern: /eyJ[A-Za-z0-9_-]{8,}\\.[A-Za-z0-9_-]{8,}\\.[A-Za-z0-9_-]{8,}/,\n },\n // Bearer token in HTTP-auth shape.\n {\n category: 'bearer-token',\n pattern: /\\bBearer\\s+[A-Za-z0-9._~+/-]{16,}=*/i,\n },\n // AWS access key (AKIA / ASIA prefix + 16 uppercase alnum).\n {\n category: 'aws-access-key',\n pattern: /\\b(?:AKIA|ASIA)[0-9A-Z]{16}\\b/,\n },\n // Generic API-key shape (sk_ / pk_ / api[-_]?key= prefix + >=20 alnum).\n {\n category: 'api-key',\n pattern: /\\b(?:sk|pk|sk-live|sk-test|pk-live|pk-test)[_-][A-Za-z0-9]{20,}/,\n },\n // High-entropy token (>=32 contiguous base64url-ish chars). Conservative\n // length to reduce false positives on random hex IDs.\n {\n category: 'generic-high-entropy',\n pattern: /[A-Za-z0-9_-]{32,}/,\n },\n];\n\nexport interface SecretMatch {\n category: SecretCategory;\n}\n\n/**\n * Scan a buffer or string for token-like patterns. Returns the first\n * match (by pattern declaration order); the literal match is NEVER\n * returned to callers.\n */\nexport function scanForSecrets(input: string | Uint8Array): SecretMatch | null {\n const text = typeof input === 'string' ? input : Buffer.from(input).toString('utf8');\n for (const { category, pattern } of SECRET_PATTERNS) {\n if (pattern.test(text)) {\n return { category };\n }\n }\n return null;\n}\n\n/**\n * Scan an argv element. Same shape as `scanForSecrets` but documents\n * intent: argv elements are scanned independently of stream samples.\n */\nexport function scanArgvElement(token: string): SecretMatch | null {\n return scanForSecrets(token);\n}\n","/**\n * CLI observation record builder.\n *\n * Assembles the final `org.peacprotocol/cli-execution` observation\n * record from the raw capture result + the flag-derived capture policy.\n * Applies argv encoding, env filtering (captures only what the policy\n * records; never mutates the child's execution env), cwd / binary-path\n * encoding, and secret-scan suppression on stdout / stderr samples.\n *\n * Builder hard-fail invariants (mirrors of the schema invariants;\n * surface the failure before emission so a flag-layer bug cannot\n * produce a misleading record):\n * - command.program is basename-only; path-bearing tokens are\n * reduced to their basename. Path disclosure is governed by\n * --capture-binary-path and lives only under binary.path_*.\n * - raw argv tokens that exceed argv_max_bytes hard-fail with\n * `cli.argv_token_too_long`; raw mode never silently truncates.\n * - env.mode='raw' with rawEnvEnabled=false hard-fails with\n * `cli.env_mode_inconsistent` rather than silently downgrading\n * to hashed.\n */\n\nexport class CliObservationBuilderError extends Error {\n readonly code: string;\n constructor(code: string, message: string) {\n super(message);\n this.name = 'CliObservationBuilderError';\n this.code = code;\n }\n}\n\nimport { createHash } from 'node:crypto';\nimport { createReadStream, statSync } from 'node:fs';\n\n/**\n * Platform-agnostic basename. Strips everything up through the LAST\n * forward-slash or backslash so the output is the same on POSIX and\n * Windows. Mirrors the schema-level `command.program` invariant\n * (rejects `/` and `\\`).\n */\nfunction basenameAny(p: string): string {\n return p.replace(/^.*[\\\\/]/, '');\n}\nimport { CLI_COMMAND_EXECUTION_TYPE, type CliExecutionObservation } from '@peac/schema';\nimport type { CaptureResult } from './capture.js';\nimport { scanArgvElement, scanForSecrets } from './secret-scan.js';\n\nconst SHA256_PREFIX = 'sha256:';\n\nexport type ArgvMode = 'hashed' | 'redacted' | 'raw';\nexport type CwdMode = 'none' | 'hashed' | 'basename' | 'absolute';\nexport type BinaryPathMode = 'none' | 'hashed' | 'absolute';\nexport type EnvMode = 'hashed' | 'raw';\nexport type StdinMode = 'none' | 'length-only' | 'hashed';\nexport type ExitCodeMode = 'child' | 'record';\nexport type ExecutionMode =\n | 'deterministic_script'\n | 'templated_flow'\n | 'agent_loop'\n | 'human_step'\n | 'hybrid';\n\nexport interface BuilderInput {\n capture: CaptureResult;\n /**\n * The program token AS THE USER SUPPLIED IT (e.g. `node`, `./script.sh`,\n * `/usr/bin/env`). This is what `command.program` records -- it does NOT\n * leak the resolved absolute path. Path disclosure is governed\n * exclusively by `--capture-binary-path` (recorded in `binary.path_*`).\n */\n programToken: string;\n /**\n * The resolved absolute path the wrapper actually spawned. Used\n * internally for stat metadata and content digest under\n * `--capture-binary-path hashed|absolute` -- NEVER recorded under\n * `command.program`.\n */\n resolvedProgramPath: string;\n /** Argv tail as supplied (post-`--`); never modified. */\n rawArgv: string[];\n cwd: string;\n argvMode: ArgvMode;\n cwdMode: CwdMode;\n binaryPathMode: BinaryPathMode;\n envMode: EnvMode;\n stdinMode: StdinMode;\n envAllowlist: string[];\n parentEnv: NodeJS.ProcessEnv;\n rawCaptureEnabled: boolean;\n rawEnvEnabled: boolean;\n secretScanEnabled: boolean;\n secretScanDisabledUnsafely: boolean;\n argvCaptureBytes: number;\n stdoutSampleBytes: number;\n stderrSampleBytes: number;\n timeoutMs: number;\n killGraceMs: number;\n exitCodeMode: ExitCodeMode;\n executionMode: ExecutionMode;\n shellMode: boolean;\n policyDigest?: string;\n configDigest?: string;\n approvalRef?: string;\n peacCliVersion: string;\n}\n\nfunction sha256Hex(input: string | Buffer): string {\n return SHA256_PREFIX + createHash('sha256').update(input).digest('hex');\n}\n\n/**\n * Streaming sha256 of a file's content. Never holds the full file in\n * memory; suitable for capturing the binary content digest of large\n * executables.\n */\nasync function sha256OfFile(path: string): Promise<string> {\n return new Promise((resolve, reject) => {\n const hasher = createHash('sha256');\n const stream = createReadStream(path);\n stream.on('data', (chunk) => {\n hasher.update(chunk);\n });\n stream.on('end', () => {\n resolve(SHA256_PREFIX + hasher.digest('hex'));\n });\n stream.on('error', reject);\n });\n}\n\nfunction isStructuralArgvToken(token: string): boolean {\n if (token === '--') return true;\n if (/^-[A-Za-z0-9?]$/.test(token)) return true; // -f\n if (/^--[A-Za-z][A-Za-z0-9_-]*$/.test(token)) return true; // --flag-name\n return false;\n}\n\n/**\n * Encode argv per --capture-mode.\n * hashed -> single sha256 over the JSON-canonical argv array\n * redacted -> preserve only structural tokens; redact values as\n * `<redacted:N>` (UTF-8 byte length); preserve `--key=`\n * prefix and redact only the value portion\n * raw -> verbatim, with secret-scan suppression replacing token\n * text with `<secret-suppressed:CATEGORY>`; tokens that\n * exceed argv_max_bytes HARD-FAIL with\n * `cli.argv_token_too_long` (no silent truncation)\n */\nfunction encodeArgv(\n rawArgv: string[],\n mode: ArgvMode,\n argvCaptureBytes: number,\n secretScanEnabled: boolean\n): { argv?: string[]; argv_sha256?: string; argv_token_count: number } {\n const tokenCount = rawArgv.length;\n if (mode === 'hashed') {\n const canon = JSON.stringify(rawArgv);\n return { argv_sha256: sha256Hex(canon), argv_token_count: tokenCount };\n }\n if (mode === 'redacted') {\n const out: string[] = rawArgv.map((tok) => {\n if (isStructuralArgvToken(tok)) return tok;\n // `--key=value` -> preserve `--key=`; redact value\n const eq = tok.match(/^(--[A-Za-z][A-Za-z0-9_-]*=)(.*)$/);\n if (eq) {\n const value = eq[2];\n const byteLen = Buffer.byteLength(value, 'utf8');\n return `${eq[1]}<redacted:${byteLen}>`;\n }\n const byteLen = Buffer.byteLength(tok, 'utf8');\n return `<redacted:${byteLen}>`;\n });\n return { argv: out, argv_token_count: tokenCount };\n }\n // raw: hard-fail on oversized token rather than silently truncate.\n const out: string[] = rawArgv.map((tok, idx) => {\n if (Buffer.byteLength(tok, 'utf8') > argvCaptureBytes) {\n throw new CliObservationBuilderError(\n 'cli.argv_token_too_long',\n `command.argv[${idx}] (${Buffer.byteLength(tok, 'utf8')} bytes) exceeds argv_max_bytes (${argvCaptureBytes}); raise --capture-argv-bytes or use --capture-mode hashed/redacted`\n );\n }\n let scanResult: { category: string } | null = null;\n if (secretScanEnabled) {\n scanResult = scanArgvElement(tok);\n }\n if (scanResult) {\n return `<secret-suppressed:${scanResult.category}>`;\n }\n return tok;\n });\n return { argv: out, argv_token_count: tokenCount };\n}\n\nfunction buildEnvBlock(\n parentEnv: NodeJS.ProcessEnv,\n allowlist: string[],\n mode: EnvMode,\n rawEnvEnabled: boolean\n): { mode: EnvMode; entries: Record<string, { value_sha256?: string; value?: string }> } {\n // Hard-fail on inconsistent state: env.mode='raw' without the\n // double-opt-in flag is a flag-layer bug; never silently downgrade\n // to hashed (would mask the bug AND emit a misleading record).\n if (mode === 'raw' && !rawEnvEnabled) {\n throw new CliObservationBuilderError(\n 'cli.env_mode_inconsistent',\n 'env.mode=raw requires --unsafe-allow-raw-env; refusing to silently downgrade to hashed'\n );\n }\n const entries: Record<string, { value_sha256?: string; value?: string }> = {};\n for (const key of allowlist) {\n const val = parentEnv[key];\n if (val === undefined) continue;\n if (mode === 'hashed') {\n entries[key] = { value_sha256: sha256Hex(val) };\n } else {\n entries[key] = { value: val };\n }\n }\n return { mode, entries };\n}\n\ninterface CwdRefBuilt {\n cwd_mode: CwdMode;\n cwd_sha256?: string;\n cwd_basename?: string;\n cwd_absolute?: string;\n}\n\nfunction buildCwd(cwd: string, mode: CwdMode): CwdRefBuilt {\n switch (mode) {\n case 'none':\n return { cwd_mode: 'none' };\n case 'hashed':\n return { cwd_mode: 'hashed', cwd_sha256: sha256Hex(cwd) };\n case 'basename':\n return { cwd_mode: 'basename', cwd_basename: basenameAny(cwd) };\n case 'absolute':\n return { cwd_mode: 'absolute', cwd_absolute: cwd };\n }\n}\n\ninterface BinaryRefBuilt {\n path_mode: BinaryPathMode;\n path_sha256?: string;\n path_absolute?: string;\n size_bytes?: number;\n mode_octal?: string;\n sha256?: string;\n version?: string;\n shell_ref?: string;\n}\n\nasync function buildBinary(\n resolvedProgram: string,\n pathMode: BinaryPathMode,\n shellMode: boolean\n): Promise<BinaryRefBuilt> {\n const built: BinaryRefBuilt = { path_mode: pathMode };\n let isRegularFile = false;\n if (pathMode !== 'none') {\n try {\n const st = statSync(resolvedProgram);\n built.size_bytes = st.size;\n built.mode_octal = (st.mode & 0o7777).toString(8).padStart(4, '0');\n isRegularFile = st.isFile();\n } catch {\n // Shell builtins / non-file targets: skip stat metadata.\n }\n }\n switch (pathMode) {\n case 'none':\n break;\n case 'hashed':\n built.path_sha256 = sha256Hex(resolvedProgram);\n break;\n case 'absolute':\n built.path_absolute = resolvedProgram;\n break;\n }\n // Content digest: streaming; never read the full binary into memory.\n if (pathMode !== 'none' && isRegularFile) {\n try {\n built.sha256 = await sha256OfFile(resolvedProgram);\n } catch {\n // ignore (race: binary moved/deleted between stat and read)\n }\n }\n if (shellMode) {\n if (pathMode === 'none') {\n throw new CliObservationBuilderError(\n 'cli.shell_mode_required',\n 'shell_mode=true requires --capture-binary-path != none so shell_ref has a defined source'\n );\n }\n // shell_ref is ALWAYS a sha256 digest of the resolved shell binary\n // path. Under hashed mode it equals path_sha256 by construction;\n // under absolute mode it is still a digest (path disclosure stays\n // in binary.path_absolute, never in shell_ref). shell_mode is\n // biconditional with the presence of shell_ref (enforced by schema).\n built.shell_ref = built.path_sha256 ?? sha256Hex(resolvedProgram);\n }\n return built;\n}\n\n/**\n * Apply secret-scan suppression to a stream sample. If scan detects a\n * token-like pattern, the sample is OMITTED and\n * `sample_suppressed_reason` + `matched_pattern_category` are recorded.\n */\nfunction applySecretScan<T extends { sample_base64?: string }>(\n ref: T,\n scanEnabled: boolean\n): T & {\n sample_suppressed_reason?: 'secret_pattern_detected';\n matched_pattern_category?: string;\n} {\n if (!scanEnabled || ref.sample_base64 === undefined) {\n return ref;\n }\n const decoded = Buffer.from(ref.sample_base64, 'base64').toString('utf8');\n const match = scanForSecrets(decoded);\n if (!match) return ref;\n // Suppress: omit sample_base64; record reason + category.\n const { sample_base64: _omit, ...rest } = ref;\n void _omit;\n return {\n ...(rest as T),\n sample_suppressed_reason: 'secret_pattern_detected' as const,\n matched_pattern_category: match.category,\n };\n}\n\nexport async function buildObservation(input: BuilderInput): Promise<CliExecutionObservation> {\n const argvEncoded = encodeArgv(\n input.rawArgv,\n input.argvMode,\n input.argvCaptureBytes,\n input.secretScanEnabled\n );\n\n // command.program is ALWAYS basename-only. The resolved absolute path\n // is governed by --capture-binary-path and recorded only under\n // binary.path_*. Reduce path-bearing user tokens to their basename\n // using a platform-agnostic helper (handles both / and \\ on any OS).\n const programName = basenameAny(input.programToken);\n const command =\n input.argvMode === 'hashed'\n ? {\n program: programName,\n argv_mode: 'hashed' as const,\n argv_sha256: argvEncoded.argv_sha256!,\n argv_token_count: argvEncoded.argv_token_count,\n }\n : input.argvMode === 'redacted'\n ? {\n program: programName,\n argv_mode: 'redacted' as const,\n argv: argvEncoded.argv!,\n argv_token_count: argvEncoded.argv_token_count,\n }\n : {\n program: programName,\n argv_mode: 'raw' as const,\n argv: argvEncoded.argv!,\n argv_token_count: argvEncoded.argv_token_count,\n };\n\n const cwd = buildCwd(input.cwd, input.cwdMode);\n const binary = await buildBinary(\n input.resolvedProgramPath,\n input.binaryPathMode,\n input.shellMode\n );\n\n const env = buildEnvBlock(\n input.parentEnv,\n input.envAllowlist,\n input.envMode,\n input.rawEnvEnabled\n );\n\n const stdoutRef = applySecretScan(input.capture.stdout, input.secretScanEnabled);\n const stderrRef = applySecretScan(input.capture.stderr, input.secretScanEnabled);\n\n const observation: CliExecutionObservation = {\n type: CLI_COMMAND_EXECUTION_TYPE,\n surface: { kind: 'cli' },\n command,\n cwd: cwd as CliExecutionObservation['cwd'],\n binary: binary as CliExecutionObservation['binary'],\n stdin_ref: input.capture.stdin as CliExecutionObservation['stdin_ref'],\n stdout_ref: stdoutRef as CliExecutionObservation['stdout_ref'],\n stderr_ref: stderrRef as CliExecutionObservation['stderr_ref'],\n env,\n started_at: input.capture.startedAt,\n finished_at: input.capture.finishedAt,\n duration_ms: input.capture.durationMs,\n exit_code: input.capture.exitCode,\n ...(input.capture.signal ? { signal: input.capture.signal } : {}),\n timed_out: input.capture.timedOut,\n timeout_ms: input.timeoutMs,\n kill_grace_ms: input.killGraceMs,\n ...(input.capture.terminationSignal\n ? { termination_signal: input.capture.terminationSignal }\n : {}),\n exit_code_mode: input.exitCodeMode,\n shell_mode: input.shellMode,\n execution_mode: input.executionMode,\n capture_policy: {\n stdout_max_bytes: input.stdoutSampleBytes,\n stderr_max_bytes: input.stderrSampleBytes,\n argv_max_bytes: input.argvCaptureBytes,\n env_allowlist: input.envAllowlist,\n stdin_mode: input.stdinMode,\n cwd_mode: input.cwdMode,\n binary_path_mode: input.binaryPathMode,\n secret_scan: input.secretScanEnabled,\n raw_capture_unsafely_allowed: input.rawCaptureEnabled,\n raw_env_unsafely_allowed: input.rawEnvEnabled,\n secret_scan_disabled_unsafely: input.secretScanDisabledUnsafely,\n timeout_ms: input.timeoutMs,\n kill_grace_ms: input.killGraceMs,\n exit_code_mode: input.exitCodeMode,\n },\n platform: {\n os: process.platform,\n arch: process.arch,\n peac_cli_version: input.peacCliVersion,\n },\n ...(input.policyDigest ? { policy_digest: input.policyDigest } : {}),\n ...(input.configDigest ? { config_digest: input.configDigest } : {}),\n ...(input.approvalRef ? { approval_ref: input.approvalRef } : {}),\n };\n\n return observation;\n}\n","/**\n * Shared CLI execution observation pipeline.\n *\n * Both `peac observe command` (unsigned JSON emission) and `peac\n * record command` (Wire 0.2 JWS signing) reuse the same capture +\n * build + validate pipeline so a record produced by one is\n * indistinguishable from a record produced by the other (modulo the\n * outer signing envelope). This module is the single source of truth\n * for that shared behavior.\n *\n * Public surface intentionally narrow:\n * - resolveProgramPath(token, childEnv) -- childEnv-aware PATH lookup\n * - preflightOutputWritable(output) -- writability check before spawn\n * - runObservationCore(opts, ...) -- capture + build + validate\n *\n * The pipeline is an OBSERVER, not a sandbox / permission system /\n * shell orchestrator / process supervisor / job scheduler.\n */\n\nimport { delimiter, join, resolve as pathResolve } from 'node:path';\nimport { statSync } from 'node:fs';\nimport { CliExecutionSchema, type CliExecutionObservation } from '@peac/schema';\nimport { captureCommand, CliSpawnFailedError, type CaptureResult } from './capture.js';\nimport { preflightOutputWritable as neutralPreflightOutputWritable } from './output-preflight.js';\nimport {\n buildObservation,\n CliObservationBuilderError,\n type ArgvMode,\n type CwdMode,\n type BinaryPathMode,\n type EnvMode,\n type StdinMode,\n type ExitCodeMode,\n type ExecutionMode,\n} from './observation-builder.js';\n\n/** Capture-pipeline options shared by both subcommands. */\nexport interface CoreObservationOptions {\n captureMode: ArgvMode;\n unsafeAllowRawCapture: boolean;\n captureStdinMode: StdinMode;\n captureStdoutBytes: number;\n captureStderrBytes: number;\n captureArgvBytes: number;\n envAllow: string[];\n envMode: EnvMode;\n unsafeAllowRawEnv: boolean;\n captureCwdMode: CwdMode;\n captureBinaryPath: BinaryPathMode;\n secretScan: boolean;\n unsafeDisableSecretScan: boolean;\n policyDigest?: string;\n configDigest?: string;\n approvalRef?: string;\n executionMode: ExecutionMode;\n shellMode: boolean;\n timeoutMs: number;\n killGraceMs: number;\n exitCodeMode: ExitCodeMode;\n}\n\nexport interface CoreObservationIO {\n /** Environment passed to the spawned child (what the child RECEIVES). */\n childEnv: NodeJS.ProcessEnv;\n /** Environment inspected by --env-allow for record entries. */\n captureEnv: NodeJS.ProcessEnv;\n cwd: string;\n peacCliVersion: string;\n}\n\nexport type CoreObservationResult =\n | { ok: true; observation: CliExecutionObservation; capture: CaptureResult }\n | { ok: false; code: string; message: string };\n\n/**\n * Resolve a program token to its absolute path. Resolution honors the\n * supplied `childEnv` ONLY (the environment that will be passed to\n * spawn). The ambient `process.env` is not consulted: callers must\n * pass `childEnv` explicitly so the execution-environment source is\n * auditable at the call site. When no executable is found in\n * `childEnv.PATH`, returns the token unchanged so spawn surfaces a\n * clear ENOENT error.\n */\nexport function resolveProgramPath(token: string, childEnv: NodeJS.ProcessEnv): string {\n if (token.includes('/') || token.includes('\\\\')) {\n return pathResolve(token);\n }\n const PATH = childEnv.PATH ?? '';\n const dirs = PATH.split(delimiter);\n const exts =\n process.platform === 'win32' ? (childEnv.PATHEXT ?? '.EXE;.CMD;.BAT').split(';') : [''];\n for (const dir of dirs) {\n if (!dir) continue;\n for (const ext of exts) {\n const candidate = join(dir, token + ext);\n try {\n const st = statSync(candidate);\n if (!st.isFile()) continue;\n if (process.platform !== 'win32' && (st.mode & 0o111) === 0) continue;\n return candidate;\n } catch {\n // not found; try next\n }\n }\n }\n return token;\n}\n\n/**\n * Re-export of the neutral output-path preflight from\n * `lib/output-preflight.ts`. Kept here so PR 2 callers\n * (`observe command`, `record command`) and any future callers that\n * already import this name from this module continue to work.\n */\nexport const preflightOutputWritable = neutralPreflightOutputWritable;\n\n/**\n * Run the shared capture + build + validate pipeline.\n *\n * Returns `{ ok: true, observation, capture }` when all stages succeed\n * (observation is the schema-validated record; capture carries the\n * child's exit info for downstream exit-code-mode handling).\n * Returns `{ ok: false, code, message }` for any structured failure.\n *\n * Stages:\n * 1. resolveProgramPath(programToken, childEnv)\n * 2. captureCommand(...) (raises CliSpawnFailedError)\n * 3. buildObservation(...) (raises CliObservationBuilderError)\n * 4. CliExecutionSchema.safeParse(observation)\n */\nexport async function runObservationCore(\n opts: CoreObservationOptions,\n programToken: string,\n args: string[],\n io: CoreObservationIO\n): Promise<CoreObservationResult> {\n const resolvedProgramPath = resolveProgramPath(programToken, io.childEnv);\n\n let capture: CaptureResult;\n try {\n capture = await captureCommand({\n program: resolvedProgramPath,\n args,\n cwd: io.cwd,\n env: io.childEnv,\n stdinMode: opts.captureStdinMode,\n rawCaptureEnabled: opts.captureMode === 'raw' && opts.unsafeAllowRawCapture,\n stdoutSampleBytes: opts.captureStdoutBytes,\n stderrSampleBytes: opts.captureStderrBytes,\n timeoutMs: opts.timeoutMs,\n killGraceMs: opts.killGraceMs,\n });\n } catch (err) {\n if (err instanceof CliSpawnFailedError) {\n return { ok: false, code: err.code, message: err.message };\n }\n return {\n ok: false,\n code: 'cli.spawn_failed',\n message: err instanceof Error ? err.message : String(err),\n };\n }\n\n let observation: CliExecutionObservation;\n try {\n observation = await buildObservation({\n capture,\n programToken,\n resolvedProgramPath,\n rawArgv: args,\n cwd: io.cwd,\n argvMode: opts.captureMode,\n cwdMode: opts.captureCwdMode,\n binaryPathMode: opts.captureBinaryPath,\n envMode: opts.envMode,\n stdinMode: opts.captureStdinMode,\n envAllowlist: opts.envAllow,\n parentEnv: io.captureEnv,\n rawCaptureEnabled: opts.captureMode === 'raw' && opts.unsafeAllowRawCapture,\n rawEnvEnabled: opts.envMode === 'raw' && opts.unsafeAllowRawEnv,\n secretScanEnabled: opts.secretScan,\n secretScanDisabledUnsafely: opts.unsafeDisableSecretScan,\n argvCaptureBytes: opts.captureArgvBytes,\n stdoutSampleBytes: opts.captureStdoutBytes,\n stderrSampleBytes: opts.captureStderrBytes,\n timeoutMs: opts.timeoutMs,\n killGraceMs: opts.killGraceMs,\n exitCodeMode: opts.exitCodeMode,\n executionMode: opts.executionMode,\n shellMode: opts.shellMode,\n policyDigest: opts.policyDigest,\n configDigest: opts.configDigest,\n approvalRef: opts.approvalRef,\n peacCliVersion: io.peacCliVersion,\n });\n } catch (err) {\n if (err instanceof CliObservationBuilderError) {\n return { ok: false, code: err.code, message: err.message };\n }\n return {\n ok: false,\n code: 'cli.builder_failed',\n message: err instanceof Error ? err.message : String(err),\n };\n }\n\n const parsed = CliExecutionSchema.safeParse(observation);\n if (!parsed.success) {\n const first = parsed.error.issues[0];\n const path = first?.path?.join('.') ?? '';\n return {\n ok: false,\n code: 'cli.schema_rejection',\n message: `${path ? '[' + path + '] ' : ''}${first?.message ?? 'schema validation failed'}`,\n };\n }\n return { ok: true, observation: parsed.data, capture };\n}\n","/**\n * Shared command-option validation for `observe command` and\n * `record command`. Single source of truth for:\n *\n * - numeric flag range / NaN-safe checks\n * - env-allowlist key grammar + byte cap\n * - record-only digest / opaque-ref preflights\n * - raw capture / raw env / secret-scan unsafe-flag pairing\n * - shell-binary detection acknowledgement\n * - raw argv per-token cap\n *\n * Both commands consume `validateCoreCommandOptions` so their\n * preflight semantics never drift. Record-command additionally calls\n * `validateSigningOptions` for the signing-input mutex and canonical\n * issuer URL check.\n */\n\nimport { OpaqueRefSchema, isCanonicalIss } from '@peac/schema';\nimport { CLI_LIMITS, isShellBinary } from './cli-limits.js';\nimport type {\n ArgvMode,\n CwdMode,\n BinaryPathMode,\n EnvMode,\n StdinMode,\n ExitCodeMode,\n ExecutionMode,\n} from './observation-builder.js';\n\n/**\n * Stable error codes shared by observe command and record command. The\n * subcommands re-export the relevant subset under their own\n * `OBSERVE_COMMAND_ERROR_CODES` / `RECORD_COMMAND_ERROR_CODES` for\n * call-site clarity; both names point at these strings.\n */\nexport const COMMAND_OPTION_ERROR_CODES = {\n programRequired: 'cli.program_required',\n unsafeFlagRequired: 'cli.unsafe_flag_required',\n secretScanDisableRequiresUnsafeFlag: 'cli.secret_scan_disable_requires_unsafe_flag',\n shellModeRequired: 'cli.shell_mode_required',\n argvTokenTooLong: 'cli.argv_token_too_long',\n outOfRange: 'cli.out_of_range',\n invalidPolicyDigest: 'cli.invalid_policy_digest',\n invalidConfigDigest: 'cli.invalid_config_digest',\n invalidApprovalRef: 'cli.invalid_approval_ref',\n invalidEnvKey: 'cli.invalid_env_key',\n // Signing-only (used by validateSigningOptions).\n signingInputRequired: 'cli.signing_input_required',\n signingInputConflict: 'cli.signing_input_conflict',\n issuerIdRequired: 'cli.issuer_id_required',\n issuerIdInvalid: 'cli.issuer_id_invalid',\n} as const;\n\nexport interface ValidationFailure {\n code: string;\n message: string;\n}\n\n/** Common option shape both subcommands share (no signing fields). */\nexport interface CoreCommandOptions {\n captureMode: ArgvMode;\n unsafeAllowRawCapture: boolean;\n captureStdinMode: StdinMode;\n captureStdoutBytes: number;\n captureStderrBytes: number;\n captureArgvBytes: number;\n envAllow: string[];\n envMode: EnvMode;\n unsafeAllowRawEnv: boolean;\n captureCwdMode: CwdMode;\n captureBinaryPath: BinaryPathMode;\n secretScan: boolean;\n unsafeDisableSecretScan: boolean;\n policyDigest?: string;\n configDigest?: string;\n approvalRef?: string;\n executionMode: ExecutionMode;\n shellMode: boolean;\n timeoutMs: number;\n killGraceMs: number;\n exitCodeMode: ExitCodeMode;\n}\n\n/** Signing-input shape consumed by record command. */\nexport interface SigningOptions {\n issuerKey?: string;\n issuerId?: string;\n unsafeEphemeralKey: boolean;\n}\n\nconst SHA256_DIGEST = /^sha256:[a-f0-9]{64}$/;\nconst ENV_KEY_GRAMMAR = /^[A-Za-z_][A-Za-z0-9_]*$/;\nconst ENV_KEY_BYTES_MAX = 256;\n\n/** True iff `n` is a finite, in-range integer (rejects NaN, Infinity, floats). */\nexport function isValidIntInRange(n: unknown, min: number, max: number): boolean {\n return typeof n === 'number' && Number.isInteger(n) && Number.isFinite(n) && n >= min && n <= max;\n}\n\n/** UTF-8 byte length of a string. */\nexport function utf8Bytes(s: string): number {\n return new TextEncoder().encode(s).byteLength;\n}\n\n/** Platform-agnostic basename -- strips both `/` and `\\`. */\nexport function basenameAny(p: string): string {\n return p.replace(/^.*[\\\\/]/, '');\n}\n\n/**\n * Validate flags shared by observe command and record command. Returns\n * an array of failures; empty when the options + child argv are\n * acceptable. Caller surfaces failures to stderr and exits 2 BEFORE\n * spawning the child.\n */\nexport function validateCoreCommandOptions(\n opts: CoreCommandOptions,\n childArgv: string[]\n): ValidationFailure[] {\n const failures: ValidationFailure[] = [];\n\n if (childArgv.length === 0) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.programRequired,\n message: 'a program after `--` is required (e.g., -- echo hi)',\n });\n return failures;\n }\n\n // Numeric range checks. `isValidIntInRange` rejects NaN, Infinity,\n // floats, and out-of-range integers with one stable error code.\n if (!isValidIntInRange(opts.timeoutMs, CLI_LIMITS.minTimeoutMs, CLI_LIMITS.maxTimeoutMs)) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.outOfRange,\n message: `--timeout-ms must be a finite integer in [${CLI_LIMITS.minTimeoutMs}, ${CLI_LIMITS.maxTimeoutMs}]`,\n });\n }\n if (!isValidIntInRange(opts.killGraceMs, CLI_LIMITS.minKillGraceMs, CLI_LIMITS.maxKillGraceMs)) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.outOfRange,\n message: `--kill-grace-ms must be a finite integer in [${CLI_LIMITS.minKillGraceMs}, ${CLI_LIMITS.maxKillGraceMs}]`,\n });\n }\n if (!isValidIntInRange(opts.captureStdoutBytes, 0, CLI_LIMITS.maxStdoutSampleBytes)) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.outOfRange,\n message: `--capture-stdout-bytes must be a finite integer in [0, ${CLI_LIMITS.maxStdoutSampleBytes}]`,\n });\n }\n if (!isValidIntInRange(opts.captureStderrBytes, 0, CLI_LIMITS.maxStderrSampleBytes)) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.outOfRange,\n message: `--capture-stderr-bytes must be a finite integer in [0, ${CLI_LIMITS.maxStderrSampleBytes}]`,\n });\n }\n if (!isValidIntInRange(opts.captureArgvBytes, 0, CLI_LIMITS.maxArgvCaptureBytes)) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.outOfRange,\n message: `--capture-argv-bytes must be a finite integer in [0, ${CLI_LIMITS.maxArgvCaptureBytes}]`,\n });\n }\n if (opts.envAllow.length > CLI_LIMITS.maxEnvEntries) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.outOfRange,\n message: `--env-allow accepts at most ${CLI_LIMITS.maxEnvEntries} keys`,\n });\n }\n\n // Env key grammar + byte cap.\n for (const key of opts.envAllow) {\n if (!ENV_KEY_GRAMMAR.test(key)) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.invalidEnvKey,\n message: `--env-allow key '${key}' must match ${ENV_KEY_GRAMMAR}`,\n });\n } else if (utf8Bytes(key) > ENV_KEY_BYTES_MAX) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.invalidEnvKey,\n message: `--env-allow key '${key}' exceeds ${ENV_KEY_BYTES_MAX} UTF-8 bytes`,\n });\n }\n }\n\n // Record-only opaque references.\n if (opts.policyDigest !== undefined && !SHA256_DIGEST.test(opts.policyDigest)) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.invalidPolicyDigest,\n message: '--policy-digest must match sha256:<64 lowercase hex>',\n });\n }\n if (opts.configDigest !== undefined && !SHA256_DIGEST.test(opts.configDigest)) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.invalidConfigDigest,\n message: '--config-digest must match sha256:<64 lowercase hex>',\n });\n }\n if (opts.approvalRef !== undefined) {\n const ref = OpaqueRefSchema.safeParse(opts.approvalRef);\n if (!ref.success) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.invalidApprovalRef,\n message: `--approval-ref must satisfy the opaque-reference grammar: ${ref.error.issues.map((i) => i.message).join('; ')}`,\n });\n }\n }\n\n // Unsafe-flag pairing.\n if (opts.captureMode === 'raw' && !opts.unsafeAllowRawCapture) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.unsafeFlagRequired,\n message: '--capture-mode raw requires --unsafe-allow-raw-capture',\n });\n }\n if (opts.envMode === 'raw' && !opts.unsafeAllowRawEnv) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.unsafeFlagRequired,\n message: '--env-mode raw requires --unsafe-allow-raw-env',\n });\n }\n if (opts.unsafeAllowRawCapture && !opts.secretScan && !opts.unsafeDisableSecretScan) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.secretScanDisableRequiresUnsafeFlag,\n message: '--secret-scan off under raw capture requires --unsafe-disable-secret-scan',\n });\n }\n\n // Raw argv per-token cap (skip the cap-only-meaningful-in-raw logic\n // when not in raw mode).\n if (opts.captureMode === 'raw' && opts.unsafeAllowRawCapture) {\n const tokens = childArgv.slice(1);\n for (const tok of tokens) {\n if (utf8Bytes(tok) > opts.captureArgvBytes) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.argvTokenTooLong,\n message: `raw argv token (${utf8Bytes(tok)} bytes) exceeds --capture-argv-bytes (${opts.captureArgvBytes})`,\n });\n break;\n }\n }\n }\n\n // Shell-binary acknowledgement: hard fail if a known shell binary\n // is supplied without --shell-mode.\n const programToken = childArgv[0];\n const programBasename = basenameAny(programToken);\n if (isShellBinary(programBasename) && !opts.shellMode) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.shellModeRequired,\n message: `program '${programBasename}' is a shell binary; --shell-mode is required to acknowledge that the user intentionally invoked a shell`,\n });\n }\n if (opts.shellMode && opts.captureBinaryPath === 'none') {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.shellModeRequired,\n message: '--shell-mode requires --capture-binary-path != none',\n });\n }\n\n return failures;\n}\n\n/**\n * Validate signing-input flags consumed by record command. Enforces\n * mutex (--issuer-key XOR --unsafe-ephemeral-key), required\n * --issuer-id, and canonical-issuer-URL form. Caller appends these\n * failures to the core failures and exits 2 BEFORE running the child.\n */\nexport function validateSigningOptions(opts: SigningOptions): ValidationFailure[] {\n const failures: ValidationFailure[] = [];\n const hasIssuerKey = typeof opts.issuerKey === 'string' && opts.issuerKey.length > 0;\n const hasEphemeral = opts.unsafeEphemeralKey === true;\n if (!hasIssuerKey && !hasEphemeral) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.signingInputRequired,\n message:\n 'record command requires exactly one of --issuer-key <env:VAR|file:/path> or --unsafe-ephemeral-key',\n });\n }\n if (hasIssuerKey && hasEphemeral) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.signingInputConflict,\n message: '--issuer-key and --unsafe-ephemeral-key are mutually exclusive',\n });\n }\n if (typeof opts.issuerId !== 'string' || opts.issuerId.length === 0) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.issuerIdRequired,\n message: '--issuer-id <url> is required (canonical issuer URL)',\n });\n } else if (!isCanonicalIss(opts.issuerId)) {\n failures.push({\n code: COMMAND_OPTION_ERROR_CODES.issuerIdInvalid,\n message: `--issuer-id '${opts.issuerId}' is not canonical (expected https:// ASCII origin or did: identifier)`,\n });\n }\n return failures;\n}\n","/**\n * `peac observe command` subcommand.\n *\n * Wraps a child process and emits an unsigned CLI execution observation\n * record to stdout (or `--output <file>`). Hard security defaults:\n * - argv hashed\n * - stdout/stderr length + sha256 + truncated only (no sample without\n * double-opt-in raw mode)\n * - stdin closed (none)\n * - env capture deny-by-default\n * - cwd hashed; binary path hashed\n * - secret-scan on\n * - shell binary detected without --shell-mode hard-fails\n *\n * The wrapper is an OBSERVER, not a sandbox / permission system / shell\n * orchestrator / process supervisor / job scheduler. It does not\n * synthesize shell syntax; the command after `--` is spawned exactly as\n * supplied with `shell: false`.\n */\n\nimport { Command, Option } from 'commander';\nimport { writeFileSync } from 'node:fs';\nimport { CLI_LIMITS } from '../lib/cli-limits.js';\nimport {\n preflightOutputWritable,\n resolveProgramPath,\n runObservationCore,\n type CoreObservationOptions,\n type CoreObservationIO,\n} from '../lib/observation-pipeline.js';\nimport {\n COMMAND_OPTION_ERROR_CODES,\n validateCoreCommandOptions,\n type ValidationFailure,\n} from '../lib/command-option-validation.js';\nimport type {\n ArgvMode,\n CwdMode,\n BinaryPathMode,\n EnvMode,\n StdinMode,\n ExitCodeMode,\n ExecutionMode,\n} from '../lib/observation-builder.js';\n\n// Re-export the helpers that the lib now owns so existing tests + any\n// future consumers continue to import them from the subcommand module.\nexport { preflightOutputWritable, resolveProgramPath, runObservationCore };\nexport type { CoreObservationOptions, CoreObservationIO };\n\nconst ARGV_MODES = ['hashed', 'redacted', 'raw'] as const;\nconst CWD_MODES = ['none', 'hashed', 'basename', 'absolute'] as const;\nconst BINARY_PATH_MODES = ['none', 'hashed', 'absolute'] as const;\nconst STDIN_MODES = ['none', 'length-only', 'hashed'] as const;\nconst ENV_MODES = ['hashed', 'raw'] as const;\nconst EXIT_CODE_MODES = ['child', 'record'] as const;\nconst EXECUTION_MODES = [\n 'deterministic_script',\n 'templated_flow',\n 'agent_loop',\n 'human_step',\n 'hybrid',\n] as const;\n\n/**\n * Stable error codes surfaced to the user via stderr + non-zero exit.\n * Mirrors the shared `COMMAND_OPTION_ERROR_CODES` set plus a few\n * subcommand-specific codes (spawn-failed, schema-rejection,\n * output-write-failed) that originate inside `runObservationCore` or\n * the emit step rather than the option-validation layer.\n */\nexport const OBSERVE_COMMAND_ERROR_CODES = {\n ...COMMAND_OPTION_ERROR_CODES,\n envModeInconsistent: 'cli.env_mode_inconsistent',\n schemaRejection: 'cli.schema_rejection',\n unsupportedFlag: 'cli.unsupported_flag',\n spawnFailed: 'cli.spawn_failed',\n outputWriteFailed: 'cli.output_write_failed',\n} as const;\n\nexport interface ObserveCommandOptions {\n /** Resolved CLI flag values; tests construct this directly. */\n captureMode: ArgvMode;\n unsafeAllowRawCapture: boolean;\n captureStdinMode: StdinMode;\n captureStdoutBytes: number;\n captureStderrBytes: number;\n captureArgvBytes: number;\n envAllow: string[];\n envMode: EnvMode;\n unsafeAllowRawEnv: boolean;\n captureCwdMode: CwdMode;\n captureBinaryPath: BinaryPathMode;\n secretScan: boolean;\n unsafeDisableSecretScan: boolean;\n policyDigest?: string;\n configDigest?: string;\n approvalRef?: string;\n executionMode: ExecutionMode;\n shellMode: boolean;\n output: string;\n timeoutMs: number;\n killGraceMs: number;\n exitCodeMode: ExitCodeMode;\n}\n\nexport interface ObserveCommandIO {\n /** Defaults to process.stdout.write. */\n writeStdout: (chunk: string) => void;\n /** Defaults to process.stderr.write. */\n writeStderr: (chunk: string) => void;\n /**\n * Environment passed to the child process. Defaults to process.env.\n * Distinct from `captureEnv` so env-capture policy (what PEAC RECORDS)\n * stays decoupled from execution env (what the child RECEIVES).\n */\n childEnv: NodeJS.ProcessEnv;\n /**\n * Environment inspected by --env-allow for record entries. Defaults\n * to process.env. Tests override either side independently.\n */\n captureEnv: NodeJS.ProcessEnv;\n /** Defaults to process.cwd(). */\n cwd: string;\n /** Defaults to a tiny version constant. */\n peacCliVersion: string;\n}\n\nexport interface ObserveCommandResult {\n exitCode: number;\n}\n\nconst DEFAULT_OPTIONS: ObserveCommandOptions = {\n captureMode: 'hashed',\n unsafeAllowRawCapture: false,\n captureStdinMode: 'none',\n captureStdoutBytes: CLI_LIMITS.defaultStdoutSampleBytes,\n captureStderrBytes: CLI_LIMITS.defaultStderrSampleBytes,\n captureArgvBytes: CLI_LIMITS.defaultArgvCaptureBytes,\n envAllow: [],\n envMode: 'hashed',\n unsafeAllowRawEnv: false,\n captureCwdMode: 'hashed',\n captureBinaryPath: 'hashed',\n secretScan: true,\n unsafeDisableSecretScan: false,\n executionMode: 'deterministic_script',\n shellMode: false,\n output: '-',\n timeoutMs: CLI_LIMITS.defaultTimeoutMs,\n killGraceMs: CLI_LIMITS.defaultKillGraceMs,\n exitCodeMode: 'child',\n};\n\n/**\n * Commander integer flag parser that surfaces NaN / non-integer input\n * as `Number.NaN` instead of silently coercing. The shared option\n * validator rejects NaN via `isValidIntInRange` and emits\n * `cli.out_of_range`.\n */\nexport function parseIntegerFlag(raw: string): number {\n // Reject empty strings explicitly: `Number('')` is 0, not NaN.\n if (raw.trim() === '') return Number.NaN;\n const n = Number(raw);\n return Number.isInteger(n) && Number.isFinite(n) ? n : Number.NaN;\n}\n\n/**\n * Validate flag combinations BEFORE spawning the child. Delegates to\n * `validateCoreCommandOptions` so observe command and record command\n * share one source of truth for option validation.\n */\nexport function validateObserveOptions(\n opts: ObserveCommandOptions,\n childArgv: string[]\n): ValidationFailure[] {\n return validateCoreCommandOptions(opts, childArgv);\n}\n\n/**\n * Pure handler: validates flags, runs the child, builds the\n * observation, validates against the schema, emits JSON. Tests drive\n * this directly without going through commander.\n */\nexport async function runObserveCommand(\n options: Partial<ObserveCommandOptions>,\n childArgv: string[],\n io: Partial<ObserveCommandIO> = {}\n): Promise<ObserveCommandResult> {\n const opts: ObserveCommandOptions = { ...DEFAULT_OPTIONS, ...options };\n const writeStdout = io.writeStdout ?? ((c: string) => process.stdout.write(c));\n const writeStderr = io.writeStderr ?? ((c: string) => process.stderr.write(c));\n const childEnv = io.childEnv ?? process.env;\n const captureEnv = io.captureEnv ?? process.env;\n const cwd = io.cwd ?? process.cwd();\n const peacCliVersion = io.peacCliVersion ?? '0.14.1';\n\n const failures = validateObserveOptions(opts, childArgv);\n if (failures.length > 0) {\n for (const f of failures) {\n writeStderr(`${f.code}: ${f.message}\\n`);\n }\n return { exitCode: 2 };\n }\n\n const programToken = childArgv[0];\n const args = childArgv.slice(1);\n\n // Preflight --output writability BEFORE the child runs. A\n // record-producing wrapper must never run a child only to discover\n // the record cannot be persisted.\n const outputErr = preflightOutputWritable(opts.output);\n if (outputErr !== null) {\n writeStderr(`${OBSERVE_COMMAND_ERROR_CODES.outputWriteFailed}: ${outputErr}\\n`);\n return { exitCode: 2 };\n }\n\n const core = await runObservationCore(opts, programToken, args, {\n childEnv,\n captureEnv,\n cwd,\n peacCliVersion,\n });\n if (!core.ok) {\n writeStderr(`${core.code}: ${core.message}\\n`);\n return { exitCode: 2 };\n }\n\n const json = JSON.stringify(core.observation);\n if (opts.output === '-' || opts.output === '') {\n writeStdout(json + '\\n');\n } else {\n try {\n writeFileSync(opts.output, json + '\\n');\n } catch (err) {\n writeStderr(\n `${OBSERVE_COMMAND_ERROR_CODES.outputWriteFailed}: failed to write '${opts.output}': ${err instanceof Error ? err.message : String(err)}\\n`\n );\n return { exitCode: 2 };\n }\n }\n\n // Exit-code policy.\n if (opts.exitCodeMode === 'record') {\n return { exitCode: 0 };\n }\n // 'child' mode: mirror the child exit code (synthetic 128+sig if signal).\n return { exitCode: core.capture.exitCode };\n}\n\n/**\n * Commander factory for the inner `command` subcommand of the\n * `peac observe` group. Wires --flag parsing and delegates to the pure\n * handler. Public invocation: `peac observe command -- <program> [args...]`.\n */\nexport function observeCommandSubcommand(): Command {\n const cmd = new Command('command');\n cmd\n .description(\n 'Wrap a command and emit an unsigned CLI execution observation record. ' +\n 'observe command is an OBSERVER, not a sandbox, permission system, ' +\n 'shell orchestrator, or process supervisor. The command after `--` ' +\n 'is spawned exactly as supplied (shell: false).'\n )\n .addOption(\n new Option('--capture-mode <mode>', 'argv capture mode')\n .choices([...ARGV_MODES])\n .default('hashed')\n )\n .option(\n '--unsafe-allow-raw-capture',\n 'required alongside --capture-mode raw to acknowledge raw stream sample emission',\n false\n )\n .addOption(\n new Option('--capture-stdin-mode <mode>', 'stdin capture (and pass-through) mode')\n .choices([...STDIN_MODES])\n .default('none')\n )\n .option(\n '--capture-stdout-bytes <n>',\n `stdout sample cap (raw mode only); max ${CLI_LIMITS.maxStdoutSampleBytes}`,\n parseIntegerFlag,\n CLI_LIMITS.defaultStdoutSampleBytes\n )\n .option(\n '--capture-stderr-bytes <n>',\n `stderr sample cap (raw mode only); max ${CLI_LIMITS.maxStderrSampleBytes}`,\n parseIntegerFlag,\n CLI_LIMITS.defaultStderrSampleBytes\n )\n .option(\n '--capture-argv-bytes <n>',\n `argv per-token byte cap (raw mode only); max ${CLI_LIMITS.maxArgvCaptureBytes}`,\n parseIntegerFlag,\n CLI_LIMITS.defaultArgvCaptureBytes\n )\n .option(\n '--env-allow <KEYS>',\n 'comma-separated allowlist of env vars to record (deny-by-default)',\n (v, prev: string[]) =>\n prev.concat(\n v\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean)\n ),\n [] as string[]\n )\n .addOption(\n new Option('--env-mode <mode>', 'env value capture mode')\n .choices([...ENV_MODES])\n .default('hashed')\n )\n .option(\n '--unsafe-allow-raw-env',\n 'required alongside --env-mode raw to acknowledge raw env value capture',\n false\n )\n .addOption(\n new Option('--capture-cwd-mode <mode>', 'cwd capture mode')\n .choices([...CWD_MODES])\n .default('hashed')\n )\n .addOption(\n new Option('--capture-binary-path <mode>', 'binary path capture mode')\n .choices([...BINARY_PATH_MODES])\n .default('hashed')\n )\n .addOption(\n new Option('--secret-scan <state>', 'secret-scan over raw samples')\n .choices(['on', 'off'])\n .default('on')\n )\n .option(\n '--unsafe-disable-secret-scan',\n 'required to disable secret-scan when raw capture is enabled',\n false\n )\n .option('--policy-digest <sha256>', 'optional policy digest (sha256:<hex>)')\n .option('--config-digest <sha256>', 'optional config digest (sha256:<hex>)')\n .option('--approval-ref <opaque>', 'optional opaque approval reference')\n .addOption(\n new Option('--execution-mode <mode>', 'execution-mode tag for this record')\n .choices([...EXECUTION_MODES])\n .default('deterministic_script')\n )\n .option(\n '--shell-mode',\n 'acknowledge that the program is a shell binary; PEAC does NOT rewrite the command',\n false\n )\n .option('--output <file>', 'output path for the JSON record (default: stdout)', '-')\n .option(\n '--timeout-ms <n>',\n `wrapper timeout in ms; max ${CLI_LIMITS.maxTimeoutMs} (24h)`,\n parseIntegerFlag,\n CLI_LIMITS.defaultTimeoutMs\n )\n .option(\n '--kill-grace-ms <n>',\n `SIGTERM-to-SIGKILL grace in ms; max ${CLI_LIMITS.maxKillGraceMs}`,\n parseIntegerFlag,\n CLI_LIMITS.defaultKillGraceMs\n )\n .addOption(\n new Option('--exit-code-mode <mode>', 'wrapper exit-code policy')\n .choices([...EXIT_CODE_MODES])\n .default('child')\n )\n .allowUnknownOption(false)\n .allowExcessArguments(true);\n\n cmd.action(async (rawOpts: Record<string, unknown>, cmdInstance: Command) => {\n // Commander consumes options before `--` and exposes everything\n // after it (the post-`--` positionals) via `cmd.args`. This keeps\n // the wrapper free of `process.argv` indexing.\n const childArgv = cmdInstance.args;\n\n const options: Partial<ObserveCommandOptions> = {\n captureMode: rawOpts.captureMode as ArgvMode,\n unsafeAllowRawCapture: Boolean(rawOpts.unsafeAllowRawCapture),\n captureStdinMode: rawOpts.captureStdinMode as StdinMode,\n captureStdoutBytes: rawOpts.captureStdoutBytes as number,\n captureStderrBytes: rawOpts.captureStderrBytes as number,\n captureArgvBytes: rawOpts.captureArgvBytes as number,\n envAllow: (rawOpts.envAllow as string[]) ?? [],\n envMode: rawOpts.envMode as EnvMode,\n unsafeAllowRawEnv: Boolean(rawOpts.unsafeAllowRawEnv),\n captureCwdMode: rawOpts.captureCwdMode as CwdMode,\n captureBinaryPath: rawOpts.captureBinaryPath as BinaryPathMode,\n secretScan: rawOpts.secretScan === 'on',\n unsafeDisableSecretScan: Boolean(rawOpts.unsafeDisableSecretScan),\n policyDigest: rawOpts.policyDigest as string | undefined,\n configDigest: rawOpts.configDigest as string | undefined,\n approvalRef: rawOpts.approvalRef as string | undefined,\n executionMode: rawOpts.executionMode as ExecutionMode,\n shellMode: Boolean(rawOpts.shellMode),\n output: (rawOpts.output as string) ?? '-',\n timeoutMs: rawOpts.timeoutMs as number,\n killGraceMs: rawOpts.killGraceMs as number,\n exitCodeMode: rawOpts.exitCodeMode as ExitCodeMode,\n };\n\n const result = await runObserveCommand(options, childArgv);\n // Use process.exitCode rather than process.exit() so any pending\n // stdout/stderr writes drain cleanly before Node exits.\n process.exitCode = result.exitCode;\n });\n\n return cmd;\n}\n\n/**\n * Commander factory for the public `peac observe` parent group. Adds\n * the `command` subcommand. Future observation surfaces (e.g.,\n * `peac observe mcp`, `peac observe http`) attach here without\n * widening the verb namespace.\n */\nexport function observeCommand(): Command {\n const observe = new Command('observe').description(\n 'Observe local activity and emit unsigned observation records.'\n );\n observe.addCommand(observeCommandSubcommand());\n return observe;\n}\n","/**\n * Issuer-key loader for `peac record command`.\n *\n * Implements the same issuer-key reference convention used by other\n * PEAC tools: env:VAR_NAME and file:/path. Keeps the CLI signing UX\n * aligned with the existing PEAC convention without coupling\n * @peac/cli to any other package's loader implementation.\n *\n * Supported schemes:\n * env:VAR_NAME loads JSON from process.env.VAR_NAME (or\n * caller-supplied env)\n * file:/path loads JSON from the file path\n *\n * The value at the resolved location is a JSON-encoded\n * Ed25519PrivateJwk:\n *\n * { \"kty\": \"OKP\", \"crv\": \"Ed25519\", \"x\": <b64url>, \"d\": <b64url>,\n * \"kid\": \"optional\" }\n *\n * `kid` is extracted from the JWK if present, otherwise derived from\n * the public key (truncated SHA-256 of the base64url-encoded public\n * key) so runs are reproducible.\n *\n * The loader NEVER logs key bytes; error messages reference field\n * names and structural problems only.\n */\n\nimport { readFile } from 'node:fs/promises';\nimport {\n base64urlDecode,\n base64urlEncode,\n derivePublicKey,\n validateKeypair,\n sha256Hex,\n} from '@peac/crypto';\nimport type { Ed25519PrivateJwk } from '@peac/crypto';\n\nexport class IssuerKeyLoadError extends Error {\n readonly code = 'cli.issuer_key_load_failed';\n constructor(\n message: string,\n readonly cause?: unknown\n ) {\n super(message);\n this.name = 'IssuerKeyLoadError';\n }\n}\n\nexport class IssuerKeyInvalidError extends Error {\n readonly code = 'cli.issuer_key_invalid';\n constructor(\n message: string,\n readonly cause?: unknown\n ) {\n super(message);\n this.name = 'IssuerKeyInvalidError';\n }\n}\n\nexport interface LoadedIssuerKey {\n privateKey: Uint8Array;\n publicKey: Uint8Array;\n kid: string;\n}\n\n/**\n * Load the issuer key from a `--issuer-key` reference.\n *\n * @param schemeUri - One of `env:VAR` or `file:/path`.\n * @param env - Environment to consult for `env:` references.\n * Defaults to `process.env`. Tests inject custom env.\n */\nexport async function loadIssuerKey(\n schemeUri: string,\n env: NodeJS.ProcessEnv = process.env\n): Promise<LoadedIssuerKey> {\n let raw: string;\n\n if (schemeUri.startsWith('env:')) {\n const varName = schemeUri.slice(4);\n if (!varName) {\n throw new IssuerKeyLoadError(\n 'env: scheme requires a variable name (e.g., env:PEAC_ISSUER_KEY)'\n );\n }\n const envValue = env[varName];\n if (!envValue) {\n throw new IssuerKeyLoadError(`environment variable ${varName} is not set or empty`);\n }\n raw = envValue;\n } else if (schemeUri.startsWith('file:')) {\n const filePath = schemeUri.slice(5);\n if (!filePath) {\n throw new IssuerKeyLoadError('file: scheme requires a path (e.g., file:/path/to/key.json)');\n }\n try {\n raw = await readFile(filePath, 'utf-8');\n } catch (err) {\n throw new IssuerKeyLoadError(\n `failed to read key file: ${filePath} (${(err as NodeJS.ErrnoException)?.code ?? (err instanceof Error ? err.message : String(err))})`,\n err\n );\n }\n } else {\n throw new IssuerKeyLoadError(\n `unsupported --issuer-key scheme: ${schemeUri} (expected env:VAR_NAME or file:/path)`\n );\n }\n\n let jwk: unknown;\n try {\n jwk = JSON.parse(raw);\n } catch (err) {\n throw new IssuerKeyInvalidError('issuer key is not valid JSON', err);\n }\n\n if (\n typeof jwk !== 'object' ||\n jwk === null ||\n !('kty' in jwk) ||\n !('crv' in jwk) ||\n !('d' in jwk)\n ) {\n throw new IssuerKeyInvalidError('JWK must contain kty, crv, and d fields');\n }\n const j = jwk as Record<string, unknown>;\n if (j.kty !== 'OKP' || j.crv !== 'Ed25519') {\n throw new IssuerKeyInvalidError(\n `JWK must be Ed25519 (kty: OKP, crv: Ed25519); got kty=${String(j.kty)} crv=${String(j.crv)}`\n );\n }\n if (typeof j.d !== 'string' || typeof j.x !== 'string') {\n throw new IssuerKeyInvalidError('JWK d and x fields must be base64url strings');\n }\n\n const ed25519Jwk: Ed25519PrivateJwk = {\n kty: 'OKP',\n crv: 'Ed25519',\n x: j.x as string,\n d: j.d as string,\n };\n\n const valid = await validateKeypair(ed25519Jwk);\n if (!valid) {\n throw new IssuerKeyInvalidError('JWK keypair validation failed: d does not derive to x');\n }\n\n const privateKey = base64urlDecode(ed25519Jwk.d);\n const publicKey = await derivePublicKey(privateKey);\n\n let kid: string;\n if (typeof j.kid === 'string' && j.kid.length > 0) {\n kid = j.kid;\n } else {\n const pubB64 = base64urlEncode(publicKey);\n const hash = await sha256Hex(pubB64);\n kid = hash.slice(0, 16);\n }\n\n return { privateKey, publicKey, kid };\n}\n\n/**\n * Derive a `kid` from a freshly-generated ephemeral public key. Same\n * formula as the loader's fallback so observation records are\n * consistent with the JWK-based path.\n */\nexport async function deriveKidFromPublicKey(publicKey: Uint8Array): Promise<string> {\n const pubB64 = base64urlEncode(publicKey);\n const hash = await sha256Hex(pubB64);\n return hash.slice(0, 16);\n}\n","/**\n * `peac record command` subcommand.\n *\n * Wraps a child process and emits a Wire 0.2 compact JWS containing\n * the same `org.peacprotocol/cli-execution` observation as\n * `observe command`, signed by the supplied issuer key. Reuses the\n * shared capture / build / validate pipeline from\n * `lib/observation-pipeline.ts` so a record produced by record command\n * is identical to one from observe command (modulo the outer signing\n * envelope).\n *\n * Signing UX uses the existing PEAC issuer-key reference convention:\n *\n * --issuer-key <env:VAR | file:/path>\n * --issuer-id <url>\n * --unsafe-ephemeral-key\n *\n * The wrapper is an OBSERVER, not a sandbox / permission system /\n * shell orchestrator / process supervisor / job scheduler. PEAC does\n * NOT publish or distribute the issuer key; --unsafe-ephemeral-key\n * produces a structurally valid record whose public key is not\n * published through normal issuer-key discovery (use only for local\n * development and tests).\n */\n\nimport { Command, Option } from 'commander';\nimport { writeFileSync } from 'node:fs';\nimport { CLI_COMMAND_EXECUTION_TYPE, CLI_EXECUTION_EXTENSION_KEY } from '@peac/schema';\nimport { issue, IssueError } from '@peac/protocol';\nimport { generateKeypair } from '@peac/crypto';\nimport { CLI_LIMITS } from '../lib/cli-limits.js';\nimport { runObservationCore, preflightOutputWritable } from '../lib/observation-pipeline.js';\nimport { parseIntegerFlag, type ObserveCommandOptions } from './observe-command.js';\nimport {\n COMMAND_OPTION_ERROR_CODES,\n validateCoreCommandOptions,\n validateSigningOptions,\n type ValidationFailure,\n} from '../lib/command-option-validation.js';\nimport {\n loadIssuerKey,\n deriveKidFromPublicKey,\n IssuerKeyLoadError,\n IssuerKeyInvalidError,\n} from '../lib/issuer-key-loader.js';\nimport type {\n ArgvMode,\n CwdMode,\n BinaryPathMode,\n EnvMode,\n StdinMode,\n ExitCodeMode,\n ExecutionMode,\n} from '../lib/observation-builder.js';\n\nconst ARGV_MODES = ['hashed', 'redacted', 'raw'] as const;\nconst CWD_MODES = ['none', 'hashed', 'basename', 'absolute'] as const;\nconst BINARY_PATH_MODES = ['none', 'hashed', 'absolute'] as const;\nconst STDIN_MODES = ['none', 'length-only', 'hashed'] as const;\nconst ENV_MODES = ['hashed', 'raw'] as const;\nconst EXIT_CODE_MODES = ['child', 'record'] as const;\nconst EXECUTION_MODES = [\n 'deterministic_script',\n 'templated_flow',\n 'agent_loop',\n 'human_step',\n 'hybrid',\n] as const;\n\n/**\n * Stable error codes surfaced before the child runs OR after signing\n * fails. Inherits the shared option-validation set so observe command\n * and record command never disagree on validation-layer codes.\n */\nexport const RECORD_COMMAND_ERROR_CODES = {\n ...COMMAND_OPTION_ERROR_CODES,\n outputWriteFailed: 'cli.output_write_failed',\n // Signing-specific (not part of the shared option-validation set).\n issuerKeyLoadFailed: 'cli.issuer_key_load_failed',\n issuerKeyInvalid: 'cli.issuer_key_invalid',\n signingFailed: 'cli.signing_failed',\n} as const;\n\n/** Record-command options = observe command options + signing inputs. */\nexport interface RecordCommandOptions extends ObserveCommandOptions {\n issuerKey?: string;\n issuerId?: string;\n unsafeEphemeralKey: boolean;\n}\n\nexport interface RecordCommandIO {\n writeStdout: (chunk: string) => void;\n writeStderr: (chunk: string) => void;\n childEnv: NodeJS.ProcessEnv;\n captureEnv: NodeJS.ProcessEnv;\n /**\n * Environment used to resolve `env:VAR` issuer-key references.\n * Defaults to `process.env`. Distinct from `childEnv` and `captureEnv`\n * because issuer-key access policy is independent of capture policy.\n */\n issuerKeyEnv: NodeJS.ProcessEnv;\n cwd: string;\n peacCliVersion: string;\n}\n\nexport interface RecordCommandResult {\n exitCode: number;\n}\n\nconst DEFAULT_OPTIONS: RecordCommandOptions = {\n captureMode: 'hashed',\n unsafeAllowRawCapture: false,\n captureStdinMode: 'none',\n captureStdoutBytes: CLI_LIMITS.defaultStdoutSampleBytes,\n captureStderrBytes: CLI_LIMITS.defaultStderrSampleBytes,\n captureArgvBytes: CLI_LIMITS.defaultArgvCaptureBytes,\n envAllow: [],\n envMode: 'hashed',\n unsafeAllowRawEnv: false,\n captureCwdMode: 'hashed',\n captureBinaryPath: 'hashed',\n secretScan: true,\n unsafeDisableSecretScan: false,\n executionMode: 'deterministic_script',\n shellMode: false,\n output: '-',\n timeoutMs: CLI_LIMITS.defaultTimeoutMs,\n killGraceMs: CLI_LIMITS.defaultKillGraceMs,\n exitCodeMode: 'child',\n unsafeEphemeralKey: false,\n};\n\n/**\n * Validate flag combinations (observe + signing) BEFORE spawning the\n * child or loading the issuer key. Delegates to the shared\n * `validateCoreCommandOptions` for observe-style checks and\n * `validateSigningOptions` for the signing-input mutex and canonical\n * issuer URL preflight.\n */\nexport function validateRecordOptions(\n opts: RecordCommandOptions,\n childArgv: string[]\n): ValidationFailure[] {\n const core = validateCoreCommandOptions(opts, childArgv);\n // Skip signing checks when the program-required failure is already\n // present (record command requires a child too); short-circuit\n // matches the observe command early-exit shape.\n const programRequired = core.find((f) => f.code === COMMAND_OPTION_ERROR_CODES.programRequired);\n if (programRequired) return core;\n return [...core, ...validateSigningOptions(opts)];\n}\n\n/**\n * Resolve the issuer key per the validated options. Returns the\n * loaded key and `kid`, or a structured failure for the caller to\n * surface as `cli.issuer_key_load_failed` / `cli.issuer_key_invalid`.\n */\nasync function resolveIssuerKey(\n opts: RecordCommandOptions,\n issuerKeyEnv: NodeJS.ProcessEnv\n): Promise<\n { ok: true; privateKey: Uint8Array; kid: string } | { ok: false; code: string; message: string }\n> {\n if (opts.unsafeEphemeralKey) {\n const { privateKey, publicKey } = await generateKeypair();\n const kid = await deriveKidFromPublicKey(publicKey);\n return { ok: true, privateKey, kid };\n }\n // hasIssuerKey is guaranteed by validateRecordOptions.\n try {\n const loaded = await loadIssuerKey(opts.issuerKey!, issuerKeyEnv);\n return { ok: true, privateKey: loaded.privateKey, kid: loaded.kid };\n } catch (err) {\n if (err instanceof IssuerKeyInvalidError) {\n return { ok: false, code: err.code, message: err.message };\n }\n if (err instanceof IssuerKeyLoadError) {\n return { ok: false, code: err.code, message: err.message };\n }\n return {\n ok: false,\n code: RECORD_COMMAND_ERROR_CODES.issuerKeyLoadFailed,\n message: err instanceof Error ? err.message : String(err),\n };\n }\n}\n\n/**\n * Pure handler: validates flags, preflights output and key, runs the\n * child, builds the observation, signs as Wire 0.2 JWS, emits.\n */\nexport async function runRecordCommand(\n options: Partial<RecordCommandOptions>,\n childArgv: string[],\n io: Partial<RecordCommandIO> = {}\n): Promise<RecordCommandResult> {\n const opts: RecordCommandOptions = { ...DEFAULT_OPTIONS, ...options };\n const writeStdout = io.writeStdout ?? ((c: string) => process.stdout.write(c));\n const writeStderr = io.writeStderr ?? ((c: string) => process.stderr.write(c));\n const childEnv = io.childEnv ?? process.env;\n const captureEnv = io.captureEnv ?? process.env;\n const issuerKeyEnv = io.issuerKeyEnv ?? process.env;\n const cwd = io.cwd ?? process.cwd();\n const peacCliVersion = io.peacCliVersion ?? '0.14.1';\n\n const failures = validateRecordOptions(opts, childArgv);\n if (failures.length > 0) {\n for (const f of failures) {\n writeStderr(`${f.code}: ${f.message}\\n`);\n }\n return { exitCode: 2 };\n }\n\n const programToken = childArgv[0];\n const args = childArgv.slice(1);\n\n // Preflight --output writability BEFORE the child runs OR the key is loaded.\n const outputErr = preflightOutputWritable(opts.output);\n if (outputErr !== null) {\n writeStderr(`${RECORD_COMMAND_ERROR_CODES.outputWriteFailed}: ${outputErr}\\n`);\n return { exitCode: 2 };\n }\n\n // Load (or generate) the issuer key BEFORE the child runs. A\n // record-producing wrapper must never run a child only to discover\n // the key cannot be loaded.\n const keyResult = await resolveIssuerKey(opts, issuerKeyEnv);\n if (!keyResult.ok) {\n writeStderr(`${keyResult.code}: ${keyResult.message}\\n`);\n return { exitCode: 2 };\n }\n\n const core = await runObservationCore(opts, programToken, args, {\n childEnv,\n captureEnv,\n cwd,\n peacCliVersion,\n });\n if (!core.ok) {\n writeStderr(`${core.code}: ${core.message}\\n`);\n return { exitCode: 2 };\n }\n\n // Sign the observation as a Wire 0.2 interaction record. The\n // observation lives under the org.peacprotocol/cli-execution\n // extension namespace; the record's `type` is the canonical CLI\n // command-execution type URI.\n let jws: string;\n try {\n const result = await issue({\n iss: opts.issuerId!,\n kind: 'evidence',\n type: CLI_COMMAND_EXECUTION_TYPE,\n privateKey: keyResult.privateKey,\n kid: keyResult.kid,\n extensions: {\n [CLI_EXECUTION_EXTENSION_KEY]: core.observation,\n },\n });\n jws = result.jws;\n } catch (err) {\n const message =\n err instanceof IssueError ? err.message : err instanceof Error ? err.message : String(err);\n writeStderr(`${RECORD_COMMAND_ERROR_CODES.signingFailed}: ${message}\\n`);\n return { exitCode: 2 };\n }\n\n if (opts.output === '-' || opts.output === '') {\n writeStdout(jws + '\\n');\n } else {\n try {\n writeFileSync(opts.output, jws + '\\n');\n } catch (err) {\n writeStderr(\n `${RECORD_COMMAND_ERROR_CODES.outputWriteFailed}: failed to write '${opts.output}': ${err instanceof Error ? err.message : String(err)}\\n`\n );\n return { exitCode: 2 };\n }\n }\n\n if (opts.exitCodeMode === 'record') {\n return { exitCode: 0 };\n }\n return { exitCode: core.capture.exitCode };\n}\n\n/**\n * Commander factory for the `command` subcommand under the `record`\n * parent group. Mirrors `observeCommandSubcommand()` flag set + adds\n * the three signing inputs.\n */\nexport function recordCommandSubcommand(): Command {\n const cmd = new Command('command');\n cmd\n .description(\n 'Wrap a command and emit a signed CLI execution record. ' +\n 'record command is an OBSERVER, not a sandbox, permission system, ' +\n 'shell orchestrator, or process supervisor. The command after `--` ' +\n 'is spawned exactly as supplied (shell: false). Use --unsafe-ephemeral-key ' +\n 'only for local development and tests; the public key is not published ' +\n 'through normal issuer-key discovery.'\n )\n .addOption(\n new Option('--capture-mode <mode>', 'argv capture mode')\n .choices([...ARGV_MODES])\n .default('hashed')\n )\n .option('--unsafe-allow-raw-capture', 'required alongside --capture-mode raw', false)\n .addOption(\n new Option('--capture-stdin-mode <mode>', 'stdin capture (and pass-through) mode')\n .choices([...STDIN_MODES])\n .default('none')\n )\n .option(\n '--capture-stdout-bytes <n>',\n `stdout sample cap (raw mode only); max ${CLI_LIMITS.maxStdoutSampleBytes}`,\n parseIntegerFlag,\n CLI_LIMITS.defaultStdoutSampleBytes\n )\n .option(\n '--capture-stderr-bytes <n>',\n `stderr sample cap (raw mode only); max ${CLI_LIMITS.maxStderrSampleBytes}`,\n parseIntegerFlag,\n CLI_LIMITS.defaultStderrSampleBytes\n )\n .option(\n '--capture-argv-bytes <n>',\n `argv per-token byte cap (raw mode only); max ${CLI_LIMITS.maxArgvCaptureBytes}`,\n parseIntegerFlag,\n CLI_LIMITS.defaultArgvCaptureBytes\n )\n .option(\n '--env-allow <KEYS>',\n 'comma-separated allowlist of env vars to record (deny-by-default)',\n (v, prev: string[]) =>\n prev.concat(\n v\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean)\n ),\n [] as string[]\n )\n .addOption(\n new Option('--env-mode <mode>', 'env value capture mode')\n .choices([...ENV_MODES])\n .default('hashed')\n )\n .option('--unsafe-allow-raw-env', 'required alongside --env-mode raw', false)\n .addOption(\n new Option('--capture-cwd-mode <mode>', 'cwd capture mode')\n .choices([...CWD_MODES])\n .default('hashed')\n )\n .addOption(\n new Option('--capture-binary-path <mode>', 'binary path capture mode')\n .choices([...BINARY_PATH_MODES])\n .default('hashed')\n )\n .addOption(\n new Option('--secret-scan <state>', 'secret-scan over raw samples')\n .choices(['on', 'off'])\n .default('on')\n )\n .option(\n '--unsafe-disable-secret-scan',\n 'required to disable secret-scan when raw capture is enabled',\n false\n )\n .option('--policy-digest <sha256>', 'optional policy digest (sha256:<hex>)')\n .option('--config-digest <sha256>', 'optional config digest (sha256:<hex>)')\n .option('--approval-ref <opaque>', 'optional opaque approval reference')\n .addOption(\n new Option('--execution-mode <mode>', 'execution-mode tag for this record')\n .choices([...EXECUTION_MODES])\n .default('deterministic_script')\n )\n .option(\n '--shell-mode',\n 'acknowledge that the program is a shell binary; PEAC does NOT rewrite the command',\n false\n )\n .option('--output <file>', 'output path for the JWS (default: stdout)', '-')\n .option(\n '--timeout-ms <n>',\n `wrapper timeout in ms; max ${CLI_LIMITS.maxTimeoutMs} (24h)`,\n parseIntegerFlag,\n CLI_LIMITS.defaultTimeoutMs\n )\n .option(\n '--kill-grace-ms <n>',\n `SIGTERM-to-SIGKILL grace in ms; max ${CLI_LIMITS.maxKillGraceMs}`,\n parseIntegerFlag,\n CLI_LIMITS.defaultKillGraceMs\n )\n .addOption(\n new Option('--exit-code-mode <mode>', 'wrapper exit-code policy')\n .choices([...EXIT_CODE_MODES])\n .default('child')\n )\n // Signing inputs.\n .option('--issuer-key <ref>', 'issuer key reference: env:VAR_NAME or file:/path/to/jwk.json')\n .option('--issuer-id <url>', 'canonical issuer URL recorded as `iss`')\n .option(\n '--unsafe-ephemeral-key',\n 'Generates an ephemeral local signing key. The public key is not published through normal issuer-key discovery. Use only for local development and tests.',\n false\n )\n .allowUnknownOption(false)\n .allowExcessArguments(true);\n\n cmd.action(async (rawOpts: Record<string, unknown>, cmdInstance: Command) => {\n const childArgv = cmdInstance.args;\n\n const options: Partial<RecordCommandOptions> = {\n captureMode: rawOpts.captureMode as ArgvMode,\n unsafeAllowRawCapture: Boolean(rawOpts.unsafeAllowRawCapture),\n captureStdinMode: rawOpts.captureStdinMode as StdinMode,\n captureStdoutBytes: rawOpts.captureStdoutBytes as number,\n captureStderrBytes: rawOpts.captureStderrBytes as number,\n captureArgvBytes: rawOpts.captureArgvBytes as number,\n envAllow: (rawOpts.envAllow as string[]) ?? [],\n envMode: rawOpts.envMode as EnvMode,\n unsafeAllowRawEnv: Boolean(rawOpts.unsafeAllowRawEnv),\n captureCwdMode: rawOpts.captureCwdMode as CwdMode,\n captureBinaryPath: rawOpts.captureBinaryPath as BinaryPathMode,\n secretScan: rawOpts.secretScan === 'on',\n unsafeDisableSecretScan: Boolean(rawOpts.unsafeDisableSecretScan),\n policyDigest: rawOpts.policyDigest as string | undefined,\n configDigest: rawOpts.configDigest as string | undefined,\n approvalRef: rawOpts.approvalRef as string | undefined,\n executionMode: rawOpts.executionMode as ExecutionMode,\n shellMode: Boolean(rawOpts.shellMode),\n output: (rawOpts.output as string) ?? '-',\n timeoutMs: rawOpts.timeoutMs as number,\n killGraceMs: rawOpts.killGraceMs as number,\n exitCodeMode: rawOpts.exitCodeMode as ExitCodeMode,\n issuerKey: rawOpts.issuerKey as string | undefined,\n issuerId: rawOpts.issuerId as string | undefined,\n unsafeEphemeralKey: Boolean(rawOpts.unsafeEphemeralKey),\n };\n\n const result = await runRecordCommand(options, childArgv);\n process.exitCode = result.exitCode;\n });\n\n return cmd;\n}\n\n/**\n * Commander factory for the public `peac record` parent group. Adds\n * the `command` subcommand. Future signed-record surfaces (e.g.,\n * `peac record mcp`, `peac record http`) attach here without widening\n * the verb namespace.\n */\nexport function recordCommand(): Command {\n const record = new Command('record').description(\n 'Sign and emit signed records over locally observed activity.'\n );\n record.addCommand(recordCommandSubcommand());\n return record;\n}\n","/**\n * `peac emit lifecycle` subcommand.\n *\n * Issues a Wire 0.2 compact JWS lifecycle observation record from\n * caller-supplied flags. The caller observed the lifecycle event (an\n * external approval, evaluation, experiment, workflow transition, or\n * mode tag); the CLI is the issuance path; the caller's issuer is the\n * signer-of-record. PEAC provides the record format, validation, and\n * signing path. PEAC does not capture, observe, decide, evaluate,\n * score, transition, orchestrate, schedule, or vouch for the truth of\n * the event.\n *\n * Signing UX uses the existing PEAC issuer-key reference convention\n * (mirrors `peac record command`):\n *\n * --issuer-key <env:VAR | file:/path>\n * --issuer-id <url>\n * --unsafe-ephemeral-key\n *\n * `--observed-at` is REQUIRED. The wrapper does not silently default the\n * external event time to the wrapper-invocation time; that would\n * misrepresent when the external system observed the event.\n *\n * Stable error codes:\n * lifecycle.missing_required_field (missing flag for required field)\n * lifecycle.event_kind_unknown (--event-kind not in the 9 enum)\n * lifecycle.invalid_observed_at (--observed-at not RFC 3339)\n * lifecycle.opaque_ref_grammar_violation\n * lifecycle.approver_ref_pii_blocked\n * lifecycle.ref_must_be_string\n * lifecycle.inline_value_blocked\n * cli.issuer_key_required (no signing input supplied)\n * cli.issuer_id_required\n * cli.issuer_id_invalid\n * cli.unsafe_ephemeral_key_mutex (--issuer-key and --unsafe-ephemeral-key both supplied)\n * cli.issuer_key_load_failed (from the shared issuer-key loader)\n * cli.issuer_key_invalid (from the shared issuer-key loader)\n * cli.signing_failed\n * cli.output_write_failed\n */\n\nimport { Command } from 'commander';\nimport { writeFileSync } from 'node:fs';\nimport {\n LIFECYCLE_OBSERVATION_EXTENSION_KEY,\n LIFECYCLE_OBSERVATION_TYPE_URIS,\n isCanonicalIss,\n validateLifecycleObservation,\n type LifecycleEventKind,\n type LifecycleObservation,\n} from '@peac/schema';\nimport { issue, IssueError } from '@peac/protocol';\nimport { generateKeypair } from '@peac/crypto';\nimport { preflightOutputWritable } from '../lib/output-preflight.js';\nimport {\n loadIssuerKey,\n deriveKidFromPublicKey,\n IssuerKeyLoadError,\n IssuerKeyInvalidError,\n} from '../lib/issuer-key-loader.js';\n\n/**\n * Discriminator literal -> canonical record-type URI. The two arrays move\n * together; this is a defense-in-depth check.\n */\nconst EVENT_KINDS: readonly LifecycleEventKind[] = [\n 'lifecycle-approval-requested',\n 'lifecycle-approval-granted',\n 'lifecycle-approval-denied',\n 'lifecycle-evaluation-started',\n 'lifecycle-evaluation-completed',\n 'lifecycle-experiment-assigned',\n 'lifecycle-experiment-result',\n 'lifecycle-workflow-transition',\n 'lifecycle-mode-observed',\n] as const;\n\nconst TYPE_URI_BY_EVENT_KIND: Readonly<Record<LifecycleEventKind, string>> = (() => {\n const map = {} as Record<LifecycleEventKind, string>;\n for (const k of EVENT_KINDS) {\n map[k] = `org.peacprotocol/${k}`;\n }\n // Sanity check that the type-URI list matches.\n for (const uri of LIFECYCLE_OBSERVATION_TYPE_URIS) {\n const k = uri.replace(/^org\\.peacprotocol\\//, '') as LifecycleEventKind;\n if (!EVENT_KINDS.includes(k)) {\n throw new Error(`emit-lifecycle: type URI ${uri} has no matching event_kind discriminator`);\n }\n }\n return map;\n})();\n\nconst OBSERVED_MODES = [\n 'deterministic_script',\n 'templated_flow',\n 'agent_loop',\n 'human_step',\n 'hybrid',\n] as const;\ntype ObservedMode = (typeof OBSERVED_MODES)[number];\n\nexport const EMIT_LIFECYCLE_ERROR_CODES = {\n missingRequiredField: 'lifecycle.missing_required_field',\n eventKindUnknown: 'lifecycle.event_kind_unknown',\n invalidObservedAt: 'lifecycle.invalid_observed_at',\n invalidObservedMode: 'lifecycle.invalid_observed_mode',\n invalidState: 'lifecycle.invalid_state',\n issuerKeyRequired: 'cli.issuer_key_required',\n issuerIdRequired: 'cli.issuer_id_required',\n issuerIdInvalid: 'cli.issuer_id_invalid',\n unsafeEphemeralKeyMutex: 'cli.unsafe_ephemeral_key_mutex',\n issuerKeyLoadFailed: 'cli.issuer_key_load_failed',\n issuerKeyInvalid: 'cli.issuer_key_invalid',\n signingFailed: 'cli.signing_failed',\n outputWriteFailed: 'cli.output_write_failed',\n} as const;\n\nexport interface EmitLifecycleOptions {\n eventKind?: string;\n subjectRef?: string;\n parentRef?: string;\n upstreamArtifactRef?: string;\n upstreamArtifactDigest?: string;\n policyRef?: string;\n policyDigest?: string;\n rubricRef?: string;\n approvalRef?: string;\n approverRef?: string;\n experimentRef?: string;\n cohortRef?: string;\n variantRef?: string;\n observedMode?: string;\n resultRef?: string;\n resultDigest?: string;\n scoreRef?: string;\n fromState?: string;\n toState?: string;\n observedAt?: string;\n issuerKey?: string;\n issuerId?: string;\n unsafeEphemeralKey: boolean;\n output: string;\n}\n\nexport interface EmitLifecycleIO {\n writeStdout: (chunk: string) => void;\n writeStderr: (chunk: string) => void;\n /**\n * Environment used to resolve `env:VAR` issuer-key references.\n * Defaults to `process.env`. Tests inject custom env.\n */\n issuerKeyEnv: NodeJS.ProcessEnv;\n}\n\nexport interface EmitLifecycleResult {\n exitCode: number;\n}\n\ninterface ValidationFailure {\n code: string;\n message: string;\n}\n\n/**\n * RFC 3339 datetime with timezone offset. Matches the schema-side\n * `z.string().datetime({ offset: true })` shape.\n */\nconst RFC_3339_WITH_OFFSET = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})$/;\n\n/**\n * Validate flag combinations BEFORE building the observation, loading\n * the key, or signing. Surfaces stable codes that match the schema's\n * lifecycle.* codes for schema-domain failures.\n */\nexport function validateEmitLifecycleOptions(opts: EmitLifecycleOptions): ValidationFailure[] {\n const failures: ValidationFailure[] = [];\n\n // event_kind: presence + enum membership.\n // Commander emits its own generic error if `.choices()` is used. We do\n // NOT use `.choices()` for this flag so a stable lifecycle code surfaces\n // for invalid values (matches the schema-side `lifecycle.event_kind_unknown`).\n if (!opts.eventKind) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n message: '--event-kind is required',\n });\n } else if (!(EVENT_KINDS as readonly string[]).includes(opts.eventKind)) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.eventKindUnknown,\n message: `--event-kind must be one of: ${EVENT_KINDS.join(', ')}`,\n });\n }\n\n // subject_ref\n if (!opts.subjectRef) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n message: '--subject-ref is required',\n });\n }\n\n // observed_at: presence then RFC 3339 shape\n if (!opts.observedAt) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n message:\n '--observed-at is required (no default-now; provide the wall-clock time at which the EXTERNAL system observed the event)',\n });\n } else if (!RFC_3339_WITH_OFFSET.test(opts.observedAt)) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.invalidObservedAt,\n message: '--observed-at must be RFC 3339 with timezone offset (e.g., 2026-05-12T10:00:00Z)',\n });\n }\n\n // Per-event-kind required fields (CLI-side preflight; schema repeats this).\n const ek = opts.eventKind as LifecycleEventKind | undefined;\n if (ek && (EVENT_KINDS as readonly string[]).includes(ek)) {\n if (\n ek === 'lifecycle-approval-requested' ||\n ek === 'lifecycle-approval-granted' ||\n ek === 'lifecycle-approval-denied'\n ) {\n if (!opts.approvalRef) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n message: `--approval-ref is required for event-kind ${ek}`,\n });\n }\n if (!opts.approverRef) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n message: `--approver-ref is required for event-kind ${ek}`,\n });\n }\n } else if (ek === 'lifecycle-evaluation-completed') {\n if (!opts.resultRef) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n message: '--result-ref is required for event-kind lifecycle-evaluation-completed',\n });\n }\n } else if (ek === 'lifecycle-experiment-assigned') {\n if (!opts.experimentRef) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n message: '--experiment-ref is required for event-kind lifecycle-experiment-assigned',\n });\n }\n } else if (ek === 'lifecycle-experiment-result') {\n if (!opts.experimentRef) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n message: '--experiment-ref is required for event-kind lifecycle-experiment-result',\n });\n }\n if (!opts.resultRef) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n message: '--result-ref is required for event-kind lifecycle-experiment-result',\n });\n }\n } else if (ek === 'lifecycle-workflow-transition') {\n if (!opts.fromState) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n message: '--from-state is required for event-kind lifecycle-workflow-transition',\n });\n }\n if (!opts.toState) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n message: '--to-state is required for event-kind lifecycle-workflow-transition',\n });\n }\n } else if (ek === 'lifecycle-mode-observed') {\n if (!opts.observedMode) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n message: '--observed-mode is required for event-kind lifecycle-mode-observed',\n });\n }\n }\n }\n\n // observed_mode value check (when supplied). `.choices()` is not used\n // on this flag so a stable lifecycle code surfaces for invalid values\n // (matches the schema-side `lifecycle.invalid_observed_mode`).\n if (opts.observedMode && !(OBSERVED_MODES as readonly string[]).includes(opts.observedMode)) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.invalidObservedMode,\n message: `--observed-mode must be one of: ${OBSERVED_MODES.join(', ')}`,\n });\n }\n\n // from_state / to_state value checks (preserve exact caller-reported\n // strings; reject empty / whitespace-bounded / over-length).\n for (const [flag, value] of [\n ['--from-state', opts.fromState],\n ['--to-state', opts.toState],\n ] as const) {\n if (value !== undefined) {\n if (value.length === 0) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.invalidState,\n message: `${flag} must not be empty`,\n });\n } else if (/^\\s|\\s$/.test(value)) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.invalidState,\n message: `${flag} must not have leading or trailing whitespace`,\n });\n } else if (new TextEncoder().encode(value).byteLength > 256) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.invalidState,\n message: `${flag} must be <= 256 UTF-8 bytes`,\n });\n }\n }\n }\n\n // Signing inputs: exactly one of (issuer-key, unsafe-ephemeral-key) must be present.\n const hasIssuerKey = !!opts.issuerKey;\n if (!hasIssuerKey && !opts.unsafeEphemeralKey) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.issuerKeyRequired,\n message: 'one of --issuer-key or --unsafe-ephemeral-key is required',\n });\n } else if (hasIssuerKey && opts.unsafeEphemeralKey) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.unsafeEphemeralKeyMutex,\n message: '--issuer-key and --unsafe-ephemeral-key are mutually exclusive',\n });\n }\n\n // issuer_id is required and must pass the canonical-issuer validator\n // shared with `peac record command` and `@peac/protocol.issue()`.\n // Reuses isCanonicalIss from @peac/schema so CLI preflight semantics\n // match the protocol issuance path exactly.\n if (!opts.issuerId) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.issuerIdRequired,\n message: '--issuer-id is required',\n });\n } else if (!isCanonicalIss(opts.issuerId)) {\n failures.push({\n code: EMIT_LIFECYCLE_ERROR_CODES.issuerIdInvalid,\n message:\n '--issuer-id must be a canonical https://<origin> URL or did:<method>:<id> identifier',\n });\n }\n\n return failures;\n}\n\ninterface IssuerKeyResolution {\n ok: true;\n privateKey: Uint8Array;\n kid: string;\n}\n\ninterface IssuerKeyResolutionFailure {\n ok: false;\n code: string;\n message: string;\n}\n\nasync function resolveIssuerKey(\n opts: EmitLifecycleOptions,\n issuerKeyEnv: NodeJS.ProcessEnv\n): Promise<IssuerKeyResolution | IssuerKeyResolutionFailure> {\n if (opts.unsafeEphemeralKey) {\n const { privateKey, publicKey } = await generateKeypair();\n const kid = await deriveKidFromPublicKey(publicKey);\n return { ok: true, privateKey, kid };\n }\n // hasIssuerKey is guaranteed by validateEmitLifecycleOptions.\n try {\n const loaded = await loadIssuerKey(opts.issuerKey!, issuerKeyEnv);\n return { ok: true, privateKey: loaded.privateKey, kid: loaded.kid };\n } catch (err) {\n if (err instanceof IssuerKeyInvalidError) {\n return { ok: false, code: err.code, message: err.message };\n }\n if (err instanceof IssuerKeyLoadError) {\n return { ok: false, code: err.code, message: err.message };\n }\n return {\n ok: false,\n code: EMIT_LIFECYCLE_ERROR_CODES.issuerKeyLoadFailed,\n message: err instanceof Error ? err.message : String(err),\n };\n }\n}\n\n/**\n * Build the lifecycle observation object from validated CLI options.\n * Only fields populated by flags are included; the schema validator\n * accepts the discriminated-union shape per event_kind.\n */\nexport function buildLifecycleObservation(opts: EmitLifecycleOptions): Record<string, unknown> {\n // observation always carries event_kind, subject_ref, observed_at.\n const obs: Record<string, unknown> = {\n event_kind: opts.eventKind!,\n subject_ref: opts.subjectRef!,\n observed_at: opts.observedAt!,\n };\n\n // Common optional fields (all event kinds may carry these).\n if (opts.parentRef) obs.parent_ref = opts.parentRef;\n if (opts.upstreamArtifactRef) obs.upstream_artifact_ref = opts.upstreamArtifactRef;\n if (opts.upstreamArtifactDigest) obs.upstream_artifact_digest = opts.upstreamArtifactDigest;\n if (opts.policyRef) obs.policy_ref = opts.policyRef;\n if (opts.policyDigest) obs.policy_digest = opts.policyDigest;\n if (opts.rubricRef) obs.rubric_ref = opts.rubricRef;\n if (opts.scoreRef) obs.score_ref = opts.scoreRef;\n if (opts.resultDigest) obs.result_digest = opts.resultDigest;\n\n // Per-event-kind fields.\n const ek = opts.eventKind as LifecycleEventKind;\n if (\n ek === 'lifecycle-approval-requested' ||\n ek === 'lifecycle-approval-granted' ||\n ek === 'lifecycle-approval-denied'\n ) {\n obs.approval_ref = opts.approvalRef!;\n obs.approver_ref = opts.approverRef!;\n } else if (ek === 'lifecycle-evaluation-completed') {\n obs.result_ref = opts.resultRef!;\n } else if (ek === 'lifecycle-experiment-assigned') {\n obs.experiment_ref = opts.experimentRef!;\n if (opts.cohortRef) obs.cohort_ref = opts.cohortRef;\n if (opts.variantRef) obs.variant_ref = opts.variantRef;\n } else if (ek === 'lifecycle-experiment-result') {\n obs.experiment_ref = opts.experimentRef!;\n obs.result_ref = opts.resultRef!;\n if (opts.cohortRef) obs.cohort_ref = opts.cohortRef;\n if (opts.variantRef) obs.variant_ref = opts.variantRef;\n } else if (ek === 'lifecycle-workflow-transition') {\n obs.from_state = opts.fromState!;\n obs.to_state = opts.toState!;\n } else if (ek === 'lifecycle-mode-observed') {\n obs.observed_mode = opts.observedMode!;\n }\n\n // observed_mode may appear OPTIONALLY on any event kind (REQUIRED only on mode-observed; that case sets it above).\n if (ek !== 'lifecycle-mode-observed' && opts.observedMode) {\n obs.observed_mode = opts.observedMode;\n }\n\n return obs;\n}\n\n/**\n * Pure handler: validates flags, preflights output and key, builds the\n * observation, validates against the schema, signs as Wire 0.2 JWS, emits.\n * Tests drive this directly without going through commander.\n */\nexport async function runEmitLifecycle(\n options: Partial<EmitLifecycleOptions>,\n io: Partial<EmitLifecycleIO> = {}\n): Promise<EmitLifecycleResult> {\n const opts: EmitLifecycleOptions = {\n unsafeEphemeralKey: false,\n output: '-',\n ...options,\n };\n const writeStdout = io.writeStdout ?? ((c: string) => process.stdout.write(c));\n const writeStderr = io.writeStderr ?? ((c: string) => process.stderr.write(c));\n const issuerKeyEnv = io.issuerKeyEnv ?? process.env;\n\n const failures = validateEmitLifecycleOptions(opts);\n if (failures.length > 0) {\n for (const f of failures) {\n writeStderr(`${f.code}: ${f.message}\\n`);\n }\n return { exitCode: 2 };\n }\n\n // Preflight --output writability before key load and signing.\n const outputErr = preflightOutputWritable(opts.output);\n if (outputErr !== null) {\n writeStderr(`${EMIT_LIFECYCLE_ERROR_CODES.outputWriteFailed}: ${outputErr}\\n`);\n return { exitCode: 2 };\n }\n\n // Resolve (or generate) the issuer key before building the observation.\n const keyResult = await resolveIssuerKey(opts, issuerKeyEnv);\n if (!keyResult.ok) {\n writeStderr(`${keyResult.code}: ${keyResult.message}\\n`);\n return { exitCode: 2 };\n }\n\n // Build and validate the observation.\n const observation = buildLifecycleObservation(opts);\n const validation = validateLifecycleObservation(observation);\n if (!validation.ok) {\n for (const e of validation.errors) {\n writeStderr(`${e.code}: ${e.message}\\n`);\n }\n return { exitCode: 2 };\n }\n\n // Sign as Wire 0.2 record.\n let jws: string;\n try {\n const recordType = TYPE_URI_BY_EVENT_KIND[opts.eventKind as LifecycleEventKind];\n const result = await issue({\n iss: opts.issuerId!,\n kind: 'evidence',\n type: recordType,\n privateKey: keyResult.privateKey,\n kid: keyResult.kid,\n extensions: {\n [LIFECYCLE_OBSERVATION_EXTENSION_KEY]: validation.value as LifecycleObservation,\n },\n });\n jws = result.jws;\n } catch (err) {\n const message =\n err instanceof IssueError ? err.message : err instanceof Error ? err.message : String(err);\n writeStderr(`${EMIT_LIFECYCLE_ERROR_CODES.signingFailed}: ${message}\\n`);\n return { exitCode: 2 };\n }\n\n if (opts.output === '-' || opts.output === '') {\n writeStdout(jws + '\\n');\n } else {\n try {\n writeFileSync(opts.output, jws + '\\n');\n } catch (err) {\n writeStderr(\n `${EMIT_LIFECYCLE_ERROR_CODES.outputWriteFailed}: failed to write '${opts.output}': ${err instanceof Error ? err.message : String(err)}\\n`\n );\n return { exitCode: 2 };\n }\n }\n\n return { exitCode: 0 };\n}\n\n/**\n * Commander factory for the `lifecycle` subcommand under the `emit`\n * parent group. Wires --flag parsing and delegates to the pure handler.\n */\nexport function emitLifecycleSubcommand(): Command {\n const cmd = new Command('lifecycle');\n cmd\n .description(\n 'Issue a signed lifecycle observation record from caller-supplied flags. ' +\n 'The caller is the observer (the lifecycle event was emitted by an external ' +\n 'orchestrator, workflow engine, evaluation system, approval system, or agent ' +\n 'runtime); the CLI is the issuance path; the caller-provided issuer key is the ' +\n 'signer-of-record. PEAC does not approve, evaluate, score, transition, ' +\n 'orchestrate, schedule, or vouch for the truth of the event. The full contract ' +\n 'is specified in docs/specs/LIFECYCLE-OBSERVATION-PROFILE.md.'\n )\n .option(\n '--event-kind <kind>',\n `one of the 9 lifecycle event-kind discriminator values: ${EVENT_KINDS.join(', ')}`\n )\n .option('--subject-ref <opaque>', 'opaque reference to the subject of the observation')\n .option('--parent-ref <opaque>', 'optional opaque reference to a parent observation')\n .option('--upstream-artifact-ref <opaque>', 'optional opaque reference to an upstream artifact')\n .option(\n '--upstream-artifact-digest <sha256>',\n 'optional canonical sha256 digest of the upstream artifact'\n )\n .option('--policy-ref <opaque>', 'optional opaque reference to an upstream policy document')\n .option('--policy-digest <sha256>', 'optional canonical sha256 digest of the policy document')\n .option('--rubric-ref <opaque>', 'optional opaque reference to an evaluation rubric')\n .option(\n '--approval-ref <opaque>',\n 'opaque reference to the approval (REQUIRED for approval-* event kinds)'\n )\n .option(\n '--approver-ref <opaque>',\n 'opaque pseudonymous reference to the approver (REQUIRED for approval-* event kinds; @-containing values reject as PII)'\n )\n .option(\n '--experiment-ref <opaque>',\n 'opaque reference to the experiment (REQUIRED for experiment-* event kinds)'\n )\n .option('--cohort-ref <opaque>', 'optional opaque reference to the experiment cohort')\n .option('--variant-ref <opaque>', 'optional opaque reference to the experiment variant')\n .option('--observed-mode <mode>', `observed runtime-mode tag: ${OBSERVED_MODES.join(', ')}`)\n .option(\n '--result-ref <opaque>',\n 'opaque reference to a stored result artifact (REQUIRED for evaluation-completed and experiment-result)'\n )\n .option('--result-digest <sha256>', 'optional canonical sha256 digest of the result artifact')\n .option(\n '--score-ref <opaque>',\n 'optional opaque reference to a stored score artifact (score values are NEVER inlined)'\n )\n .option(\n '--from-state <name>',\n 'free-form source state name (REQUIRED for workflow-transition; max 128 chars)'\n )\n .option(\n '--to-state <name>',\n 'free-form destination state name (REQUIRED for workflow-transition; max 128 chars)'\n )\n .option(\n '--observed-at <rfc3339>',\n 'RFC 3339 timestamp at which the EXTERNAL system observed the event (REQUIRED; no default-now)'\n )\n .option('--issuer-key <ref>', 'issuer key reference: env:VAR_NAME or file:/path/to/jwk.json')\n .option('--issuer-id <url>', 'canonical issuer URL recorded as `iss`')\n .option(\n '--unsafe-ephemeral-key',\n 'Generate an ephemeral local signing key. The public key is not published through normal issuer-key discovery. Use only for local development and tests.',\n false\n )\n .option('--output <file>', 'output path for the JWS (default: stdout)', '-');\n\n cmd.action(async (rawOpts: Record<string, unknown>) => {\n const options: Partial<EmitLifecycleOptions> = {\n eventKind: rawOpts.eventKind as string | undefined,\n subjectRef: rawOpts.subjectRef as string | undefined,\n parentRef: rawOpts.parentRef as string | undefined,\n upstreamArtifactRef: rawOpts.upstreamArtifactRef as string | undefined,\n upstreamArtifactDigest: rawOpts.upstreamArtifactDigest as string | undefined,\n policyRef: rawOpts.policyRef as string | undefined,\n policyDigest: rawOpts.policyDigest as string | undefined,\n rubricRef: rawOpts.rubricRef as string | undefined,\n approvalRef: rawOpts.approvalRef as string | undefined,\n approverRef: rawOpts.approverRef as string | undefined,\n experimentRef: rawOpts.experimentRef as string | undefined,\n cohortRef: rawOpts.cohortRef as string | undefined,\n variantRef: rawOpts.variantRef as string | undefined,\n observedMode: rawOpts.observedMode as string | undefined,\n resultRef: rawOpts.resultRef as string | undefined,\n resultDigest: rawOpts.resultDigest as string | undefined,\n scoreRef: rawOpts.scoreRef as string | undefined,\n fromState: rawOpts.fromState as string | undefined,\n toState: rawOpts.toState as string | undefined,\n observedAt: rawOpts.observedAt as string | undefined,\n issuerKey: rawOpts.issuerKey as string | undefined,\n issuerId: rawOpts.issuerId as string | undefined,\n unsafeEphemeralKey: Boolean(rawOpts.unsafeEphemeralKey),\n output: (rawOpts.output as string) ?? '-',\n };\n\n const result = await runEmitLifecycle(options);\n process.exitCode = result.exitCode;\n });\n\n return cmd;\n}\n\n/**\n * Commander factory for the public `peac emit` parent group. Adds the\n * `lifecycle` subcommand. Additional `emit` subcommands can be\n * registered by their own profiles.\n */\nexport function emitCommand(): Command {\n const emit = new Command('emit').description(\n 'Issue signed records over events emitted by external systems (caller-supplied event emission/export surface).'\n );\n emit.addCommand(emitLifecycleSubcommand());\n return emit;\n}\n\n/** Re-exports for tests. */\nexport { TYPE_URI_BY_EVENT_KIND, EVENT_KINDS, OBSERVED_MODES };\nexport type { ObservedMode };\n","#!/usr/bin/env node\n/**\n * PEAC Protocol CLI\n * Command-line tools for receipt verification and conformance testing\n */\n\nimport { Command, CommanderError } from 'commander';\nimport { verifyReceipt } from '@peac/protocol';\nimport { parseIssuerConfig, fetchIssuerConfig } from '@peac/protocol';\nimport { decode } from '@peac/crypto';\nimport { PEACReceiptClaims } from '@peac/schema';\nimport * as fs from 'fs';\nimport { policy } from './commands/policy.js';\nimport { conformance } from './commands/conformance.js';\nimport { samples } from './commands/samples.js';\nimport { reconcileCommand } from './commands/reconcile.js';\nimport { doctor } from './commands/doctor.js';\nimport { DiscoverCommand } from './commands/discover.js';\nimport { observeCommand } from './commands/observe-command.js';\nimport { recordCommand } from './commands/record-command.js';\nimport { emitCommand } from './commands/emit-lifecycle.js';\nimport { formatOutput } from './utils.js';\nimport { getVersion } from './lib/version.js';\n\nconst program = new Command();\n\nprogram\n .name('peac')\n .description('PEAC protocol command-line tools')\n .version(getVersion())\n .exitOverride(); // Throws CommanderError instead of calling process.exit()\n\n/**\n * peac verify <jws>\n */\nprogram\n .command('verify')\n .description('Verify a PEAC receipt JWS')\n .argument('<jws>', 'JWS compact serialization or path to file containing JWS')\n .option('-v, --verbose', 'Show detailed output')\n .action(async (jwsInput: string, options: { verbose?: boolean }) => {\n try {\n // Check if input is a file path\n let jws = jwsInput;\n if (fs.existsSync(jwsInput)) {\n jws = fs.readFileSync(jwsInput, 'utf-8').trim();\n }\n\n console.log('Verifying PEAC receipt...\\n');\n\n // First, decode to show receipt info\n const { payload } = decode<PEACReceiptClaims>(jws);\n\n console.log('Receipt Information:');\n console.log(` Receipt ID: ${payload.rid}`);\n console.log(` Issuer: ${payload.iss}`);\n console.log(` Audience: ${payload.aud}`);\n console.log(` Amount: ${payload.amt} ${payload.cur}`);\n console.log(` Payment: ${payload.payment.rail} (${payload.payment.reference})`);\n console.log(` Issued: ${new Date(payload.iat * 1000).toISOString()}`);\n if (payload.exp) {\n console.log(` Expires: ${new Date(payload.exp * 1000).toISOString()}`);\n }\n console.log();\n\n // Verify signature\n console.log('Verifying signature...');\n const result = await verifyReceipt(jws);\n\n if (result.ok) {\n console.log('Signature valid!');\n if (result.perf) {\n console.log(` Verification time: ${result.perf.verify_ms.toFixed(2)}ms`);\n if (result.perf.jwks_fetch_ms) {\n console.log(` JWKS fetch time: ${result.perf.jwks_fetch_ms.toFixed(2)}ms`);\n }\n }\n process.exitCode = 0;\n } else {\n console.log(`Verification failed: ${result.reason}`);\n if (result.details) {\n console.log(` Details: ${result.details}`);\n }\n process.exitCode = 1;\n }\n } catch (err) {\n console.error('Error:', err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n });\n\n/**\n * peac validate-issuer <path|url>\n *\n * Validates a PEAC issuer configuration (/.well-known/peac-issuer.json)\n */\nprogram\n .command('validate-issuer')\n .description('Validate a PEAC issuer configuration')\n .argument('<input>', 'Path to peac-issuer.json file or issuer URL')\n .action(async (input: string) => {\n try {\n console.log('Validating issuer configuration...\\n');\n\n let config;\n if (input.startsWith('http://') || input.startsWith('https://')) {\n // Fetch from URL\n console.log(`Fetching from ${input}...`);\n config = await fetchIssuerConfig(input);\n } else {\n // Read from file\n const text = fs.readFileSync(input, 'utf-8');\n config = parseIssuerConfig(text);\n }\n\n console.log('Issuer configuration is valid!\\n');\n\n console.log('Issuer Configuration:');\n console.log(` Version: ${config.version}`);\n console.log(` Issuer: ${config.issuer}`);\n console.log(` JWKS URI: ${config.jwks_uri}`);\n\n if (config.verify_endpoint) {\n console.log(` Verify: ${config.verify_endpoint}`);\n }\n\n if (config.receipt_versions && config.receipt_versions.length > 0) {\n console.log(` Receipts: ${config.receipt_versions.join(', ')}`);\n }\n\n if (config.algorithms && config.algorithms.length > 0) {\n console.log(` Algorithms: ${config.algorithms.join(', ')}`);\n }\n\n if (config.payment_rails && config.payment_rails.length > 0) {\n console.log(` Rails: ${config.payment_rails.join(', ')}`);\n }\n\n if (config.security_contact) {\n console.log(` Security: ${config.security_contact}`);\n }\n\n process.exitCode = 0;\n } catch (err) {\n console.error('Error:', err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n });\n\n/**\n * peac decode <jws>\n */\nprogram\n .command('decode')\n .description('Decode a PEAC receipt JWS (without verification)')\n .argument('<jws>', 'JWS compact serialization or path to file containing JWS')\n .option('--json', 'Output as JSON')\n .action((jwsInput: string, options: { json?: boolean }) => {\n try {\n // Check if input is a file path\n let jws = jwsInput;\n if (fs.existsSync(jwsInput)) {\n jws = fs.readFileSync(jwsInput, 'utf-8').trim();\n }\n\n const { header, payload } = decode<PEACReceiptClaims>(jws);\n\n if (options.json) {\n console.log(JSON.stringify({ header, payload }, null, 2));\n } else {\n console.log('PEAC Receipt (Decoded, Not Verified)\\n');\n\n console.log('Header:');\n console.log(` typ: ${header.typ}`);\n console.log(` alg: ${header.alg}`);\n console.log(` kid: ${header.kid}`);\n console.log();\n\n console.log('Claims:');\n console.log(` iss: ${payload.iss}`);\n console.log(` aud: ${payload.aud}`);\n console.log(` iat: ${payload.iat} (${new Date(payload.iat * 1000).toISOString()})`);\n if (payload.exp) {\n console.log(` exp: ${payload.exp} (${new Date(payload.exp * 1000).toISOString()})`);\n }\n console.log(` rid: ${payload.rid}`);\n console.log(` amt: ${payload.amt}`);\n console.log(` cur: ${payload.cur}`);\n console.log();\n\n console.log('Payment:');\n console.log(` rail: ${payload.payment.rail}`);\n console.log(` reference: ${payload.payment.reference}`);\n console.log(` amount: ${payload.payment.amount}`);\n console.log(` currency: ${payload.payment.currency}`);\n\n if (payload.subject) {\n console.log();\n console.log('Subject:');\n console.log(` uri: ${payload.subject.uri}`);\n }\n\n if (payload.ext) {\n console.log();\n console.log('Extensions:');\n console.log(JSON.stringify(payload.ext, null, 2));\n }\n }\n\n process.exitCode = 0;\n } catch (err) {\n console.error('Error:', err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n });\n\n// Policy commands (v0.9.17+)\nprogram.addCommand(policy);\n\n// Conformance testing commands (v0.10.8+)\nprogram.addCommand(conformance);\n\n// Sample receipts commands (v0.10.8+)\nprogram.addCommand(samples);\n\n// Reconcile evidence bundles (v0.11.3+)\nprogram.addCommand(reconcileCommand());\n\n// CLI execution observation\nprogram.addCommand(observeCommand());\n\n// CLI execution record (signed Wire 0.2 JWS)\nprogram.addCommand(recordCommand());\n\n// Lifecycle observation emission (signed Wire 0.2 JWS for external lifecycle events)\nprogram.addCommand(emitCommand());\n\n// Installability diagnostics (v0.12.11+)\ndoctor(program);\n\n/**\n * peac discover <url>\n *\n * Fetches /.well-known/peac.txt with SSRF-aware HTTP and parses it as a\n * peac-policy/0.1 document. Implementation lives in\n * packages/cli/src/lib/policy-document-discovery.ts (CLI-internal helper).\n */\nprogram\n .command('discover')\n .description('Discover and parse a remote /.well-known/peac.txt policy document')\n .argument('<url>', 'Origin URL (http/https) whose /.well-known/peac.txt to fetch')\n .option('-j, --json', 'output in JSON format')\n .action(async (url: string, opts: { json?: boolean }) => {\n const cmd = new DiscoverCommand();\n const result = await cmd.execute(url, { json: opts.json });\n console.log(formatOutput(result, opts.json));\n process.exitCode = result.success ? 0 : 1;\n });\n\n// Parse and handle Commander errors (exitOverride causes CommanderError on --help, --version, etc.)\ntry {\n program.parse();\n} catch (err) {\n if (err instanceof CommanderError) {\n // CommanderError from --help, --version, or validation errors\n process.exitCode = err.exitCode;\n } else {\n throw err;\n }\n}\n"]}
|