@forgeax/engine-tool-runtime 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/errors.ts","../src/artifacts.ts","../src/capability.ts","../src/carrier.ts","../src/lease.ts","../src/migration.ts","../src/timing.ts","../src/runtime.ts","../src/snapshot.ts","../src/transport.ts"],"names":["performance","token"],"mappings":";AAEO,SAAS,gBAAA,CAAiB,SAAiB,KAAA,EAAoC;AACpF,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAU,mDAAA;AAAA,IACV,IAAA,EAAM,4DAAA;AAAA,IACN,MAAA,EAAQ,EAAE,OAAA,EAAS,KAAA;AAAM,GAC3B;AACF;AAEO,SAAS,0BAAA,CAA2B,YAAoB,KAAA,EAAoC;AACjG,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,6BAAA;AAAA,IACN,QAAA,EAAU,CAAA,WAAA,EAAc,UAAU,CAAA,UAAA,EAAa,KAAK,CAAA,CAAA;AAAA,IACpD,IAAA,EAAM,sEAAA;AAAA,IACN,MAAA,EAAQ,EAAE,UAAA,EAAY,KAAA;AAAM,GAC9B;AACF;AAEO,SAAS,kBAAA,CAAmB,gBAAwB,YAAA,EAAwC;AACjG,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAU,sDAAA;AAAA,IACV,IAAA,EAAM,qDAAA;AAAA,IACN,MAAA,EAAQ,EAAE,cAAA,EAAgB,YAAA;AAAa,GACzC;AACF;AAEO,SAAS,mBACd,IAAA,EACA,QAAA,GAAW,mCAAA,EACX,IAAA,GAAO,kEACP,OAAA,EACkB;AAClB,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,oBAAA;AAAA,IACN,QAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA,EAAQ,EAAE,IAAA,EAAM,GAAI,OAAA,KAAY,SAAY,EAAC,GAAI,EAAE,OAAA,EAAQ;AAAG,GAChE;AACF;AAEO,SAAS,uBAAA,CACd,SACA,KAAA,EACkB;AAClB,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,0BAAA;AAAA,IACN,QAAA,EAAU,iEAAA;AAAA,IACV,IAAA,EAAM,oFAAA;AAAA,IACN,QAAQ,EAAE,OAAA,EAAS,CAAC,GAAG,OAAO,GAAG,KAAA;AAAM,GACzC;AACF;AAEO,SAAS,kBAAkB,MAAA,EAAkC;AAClE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAU,kCAAA;AAAA,IACV,IAAA,EAAM,4DAAA;AAAA,IACN,MAAA,EAAQ,EAAE,MAAA;AAAO,GACnB;AACF;AAEO,SAAS,aAAa,UAAA,EAAsC;AACjE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,kBAAA;AAAA,IACN,QAAA,EAAU,mCAAmC,UAAU,CAAA,EAAA,CAAA;AAAA,IACvD,IAAA,EAAM,0EAAA;AAAA,IACN,MAAA,EAAQ,EAAE,UAAA;AAAW,GACvB;AACF;AAEO,SAAS,kBAAkB,SAAA,EAAqC;AACrE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,uBAAA;AAAA,IACN,QAAA,EAAU,wCAAA;AAAA,IACV,IAAA,EAAM,sEAAA;AAAA,IACN,MAAA,EAAQ,EAAE,SAAA;AAAU,GACtB;AACF;AAEO,SAAS,aAAA,CAAc,OAAe,OAAA,EAAmD;AAC9F,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,mBAAA;AAAA,IACN,QAAA,EAAU,wBAAA;AAAA,IACV,IAAA,EAAM,+DAAA;AAAA,IACN,MAAA,EAAQ,EAAE,KAAA,EAAO,OAAA;AAAQ,GAC3B;AACF;AAEO,SAAS,YAAA,CAAa,OAAe,OAAA,EAAmC;AAC7E,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,qBAAA;AAAA,IACN,QAAA,EAAU,2CAAA;AAAA,IACV,IAAA,EAAM,6DAAA;AAAA,IACN,MAAA,EAAQ,EAAE,KAAA,EAAO,OAAA;AAAQ,GAC3B;AACF;AAEO,SAAS,qBAAA,CACd,QAAA,EACA,IAAA,EACA,MAAA,EACkB;AAClB,EAAA,OAAO,EAAE,IAAA,EAAM,gCAAA,EAAkC,QAAA,EAAU,MAAM,MAAA,EAAO;AAC1E;;;AC9BO,SAAS,uBAAuB,QAAA,EAAsD;AAC3F,EAAA,MAAM,MAAA,GAAS,wBAAA,CAAyB,QAAA,EAAU,EAAE,CAAA;AACpD,EAAA,IAAI,CAAC,MAAA,CAAO,EAAA,EAAI,MAAM,IAAI,UAAU,8BAA8B,CAAA;AAClE,EAAA,OAAO;AAAA,IACL,aAAA,EAAe,OAAA;AAAA,IACf,QAAA,EAAU,EAAE,GAAG,QAAA,CAAS,QAAA,EAAS;AAAA,IACjC,SAAA,EAAW,SAAS,SAAA,CAAU,GAAA,CAAI,CAAC,QAAA,MAAc,EAAE,GAAG,QAAA,EAAS,CAAE;AAAA,GACnE;AACF;AAEO,SAAS,wBAAA,CACd,UACA,QAAA,EAC4B;AAC5B,EAAA,MAAM,IAAA,GAAO,CAAC,MAAA,EAAgB,QAAA,MAAkD;AAAA,IAC9E,EAAA,EAAI,KAAA;AAAA,IACJ,KAAA,EAAO,qBAAA;AAAA,MACL,QAAA;AAAA,MACA,4DAAA;AAAA,MACA;AAAA,QACE,MAAA;AAAA,QACA,GAAI,OAAO,QAAA,EAAU,QAAA,EAAU,KAAA,KAAU,QAAA,GACrC,EAAE,KAAA,EAAO,QAAA,CAAS,QAAA,CAAS,KAAA,EAAM,GACjC;AAAC;AACP;AACF,GACF,CAAA;AACA,EAAA,IAAI,UAAU,aAAA,KAAkB,OAAA;AAC9B,IAAA,OAAO,IAAA,CAAK,6BAA6B,2BAA2B,CAAA;AACtE,EAAA,MAAM,WAAW,QAAA,CAAS,QAAA;AAC1B,EAAA,IACE,QAAA,KAAa,MAAA,IACb,QAAA,CAAS,KAAA,CAAM,MAAA,KAAW,KAC1B,QAAA,CAAS,cAAA,CAAe,MAAA,KAAW,CAAA,IACnC,QAAA,CAAS,MAAA,CAAO,WAAW,CAAA,IAC3B,QAAA,CAAS,SAAA,CAAU,MAAA,KAAW,CAAA,IAC9B,CAAC,MAAA,CAAO,aAAA,CAAc,QAAA,CAAS,OAAO,CAAA,IACtC,QAAA,CAAS,OAAA,GAAU,CAAA;AAEnB,IAAA,OAAO,IAAA;AAAA,MACL,wBAAA;AAAA,MACA;AAAA,KACF;AACF,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAsB;AACvC,EAAA,KAAA,MAAW,QAAA,IAAY,SAAS,SAAA,EAAW;AACzC,IAAA,IACE,SAAS,KAAA,CAAM,MAAA,KAAW,KAC1B,QAAA,CAAS,GAAA,CAAI,WAAW,CAAA,IACxB,QAAA,CAAS,OAAO,MAAA,KAAW,CAAA,IAC3B,CAAC,MAAA,CAAO,aAAA,CAAc,SAAS,UAAU,CAAA,IACzC,SAAS,UAAA,GAAa,CAAA;AAEtB,MAAA,OAAO,IAAA;AAAA,QACL,CAAA,QAAA,EAAW,SAAS,IAAI,CAAA,eAAA,CAAA;AAAA,QACxB;AAAA,OACF;AACF,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,QAAA,CAAS,IAAI,CAAA;AACxB,MAAA,OAAO,IAAA;AAAA,QACL,CAAA,yBAAA,EAA4B,SAAS,IAAI,CAAA,CAAA,CAAA;AAAA,QACzC;AAAA,OACF;AACF,IAAA,IAAA,CAAK,GAAA,CAAI,SAAS,IAAI,CAAA;AAAA,EACxB;AACA,EAAA,KAAA,MAAW,IAAA,IAAQ,QAAA;AACjB,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA;AAChB,MAAA,OAAO,IAAA;AAAA,QACL,0BAA0B,IAAI,CAAA,CAAA,CAAA;AAAA,QAC9B,gCAAgC,IAAI,CAAA,UAAA;AAAA,OACtC;AACJ,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,QAAA,EAAS;AACrC;AAEA,IAAM,kBAAA,GAAiF;AAAA,EACrF,MAAA,EAAQ,QAAA;AAAA,EACR,UAAA,EAAY,UAAA;AAAA,EACZ,OAAA,EAAS,KAAA;AAAA,EACT,cAAA,EAAgB,KAAA;AAAA,EAChB,iBAAA,EAAmB,iBAAA;AAAA,EACnB,eAAA,EAAiB;AACnB,CAAA;AAEO,SAAS,8BACd,QAAA,EACyB;AACzB,EAAA,MAAM,MAAA,GAAS,+BAAA,CAAgC,QAAA,EAAU,EAAE,CAAA;AAC3D,EAAA,IAAI,CAAC,MAAA,CAAO,EAAA,EAAI,MAAM,IAAI,UAAU,sCAAsC,CAAA;AAC1E,EAAA,OAAO;AAAA,IACL,aAAA,EAAe,OAAA;AAAA,IACf,QAAA,EAAU,EAAE,GAAG,QAAA,CAAS,QAAA,EAAS;AAAA,IACjC,SAAA,EAAW,QAAA,CAAS,SAAA,CAAU,GAAA,CAAI,CAAC,QAAA,MAAc;AAAA,MAC/C,GAAG,QAAA;AAAA,MACH,WAAA,EAAa,CAAC,GAAG,QAAA,CAAS,WAAW;AAAA,KACvC,CAAE;AAAA,GACJ;AACF;AAEO,SAAS,+BAAA,CACd,UACA,aAAA,EACmC;AACnC,EAAA,MAAM,IAAA,GAAO,CAAC,MAAA,MAAuD;AAAA,IACnE,EAAA,EAAI,KAAA;AAAA,IACJ,KAAA,EAAO,qBAAA;AAAA,MACL,sEAAA;AAAA,MACA,oEAAA;AAAA,MACA;AAAA,QACE,MAAA;AAAA,QACA,GAAI,OAAO,QAAA,EAAU,QAAA,EAAU,KAAA,KAAU,QAAA,GACrC,EAAE,KAAA,EAAO,QAAA,CAAS,QAAA,CAAS,KAAA,EAAM,GACjC;AAAC;AACP;AACF,GACF,CAAA;AACA,EAAA,IAAI,QAAA,EAAU,aAAA,KAAkB,OAAA,EAAS,OAAO,KAAK,0CAA0C,CAAA;AAC/F,EAAA,MAAM,WAAW,QAAA,CAAS,QAAA;AAC1B,EAAA,IACE,aAAa,MAAA,IACb;AAAA,IACE,QAAA,CAAS,KAAA;AAAA,IACT,QAAA,CAAS,cAAA;AAAA,IACT,QAAA,CAAS,aAAA;AAAA,IACT,QAAA,CAAS,kBAAA;AAAA,IACT,QAAA,CAAS;AAAA,IACT,IAAA,CAAK,CAAC,UAAU,OAAO,KAAA,KAAU,YAAY,KAAA,CAAM,MAAA,KAAW,CAAC,CAAA,IACjE,CAAC,OAAO,aAAA,CAAc,QAAA,CAAS,OAAO,CAAA,IACtC,QAAA,CAAS,UAAU,CAAA,EACnB;AACA,IAAA,OAAO,KAAK,iCAAiC,CAAA;AAAA,EAC/C;AACA,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAyB;AAC/C,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,EAAA,KAAA,MAAW,QAAA,IAAY,SAAS,SAAA,EAAW;AACzC,IAAA,IAAI,SAAA,CAAU,GAAA,CAAI,QAAA,CAAS,IAAI,CAAA,SAAU,IAAA,CAAK,CAAA,gBAAA,EAAmB,QAAA,CAAS,IAAI,CAAA,CAAA,CAAG,CAAA;AACjF,IAAA,IAAI,kBAAA,CAAmB,QAAA,CAAS,IAAI,CAAA,KAAM,SAAS,IAAA,EAAM;AACvD,MAAA,OAAO,KAAK,CAAA,MAAA,EAAS,QAAA,CAAS,IAAI,CAAA,uBAAA,EAA0B,QAAA,CAAS,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,IAC9E;AACA,IAAA,IACE,QAAA,CAAS,KAAA,CAAM,MAAA,KAAW,CAAA,IAC1B,SAAS,GAAA,CAAI,MAAA,KAAW,CAAA,IACxB,QAAA,CAAS,MAAA,CAAO,MAAA,KAAW,CAAA,IAC3B,QAAA,CAAS,UAAU,MAAA,KAAW,CAAA,IAC9B,CAAC,MAAA,CAAO,aAAA,CAAc,QAAA,CAAS,UAAU,CAAA,IACzC,SAAS,UAAA,GAAa,CAAA,IACtB,QAAA,CAAS,WAAA,CAAY,KAAK,CAAC,MAAA,KAAW,MAAA,CAAO,MAAA,KAAW,CAAC,CAAA,EACzD;AACA,MAAA,OAAO,IAAA,CAAK,CAAA,YAAA,EAAe,QAAA,CAAS,IAAI,CAAA,UAAA,CAAY,CAAA;AAAA,IACtD;AACA,IAAA,SAAA,CAAU,GAAA,CAAI,SAAS,IAAI,CAAA;AAC3B,IAAA,OAAA,CAAQ,GAAA,CAAI,SAAS,MAAM,CAAA;AAAA,EAC7B;AACA,EAAA,KAAA,MAAW,QAAA,IAAY,SAAS,SAAA,EAAW;AACzC,IAAA,IAAI,QAAA,CAAS,WAAA,CAAY,IAAA,CAAK,CAAC,MAAA,KAAW,CAAC,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAC,CAAA,EAAG;AAC/D,MAAA,OAAO,IAAA,CAAK,CAAA,CAAA,EAAI,QAAA,CAAS,IAAI,CAAA,gDAAA,CAAkD,CAAA;AAAA,IACjF;AAAA,EACF;AACA,EAAA,KAAA,MAAW,QAAQ,aAAA,EAAe;AAChC,IAAA,IAAI,CAAC,UAAU,GAAA,CAAI,IAAI,GAAG,OAAO,IAAA,CAAK,CAAA,uBAAA,EAA0B,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,EACzE;AACA,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,QAAA,EAAS;AACrC;AAEO,SAAS,mBAAA,CAAoB,KAAA,EAAgB,IAAA,mBAAO,IAAI,KAAY,EAAuB;AAChG,EAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,OAAO,KAAA,KAAU,WAAW,OAAO,IAAA;AACtF,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,MAAA,CAAO,SAAS,KAAK,CAAA;AAC3D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,IAAI,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,EAAG,OAAO,KAAA;AAC5B,EAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AACd,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,KAAA,CAAM,KAAA,CAAM,CAAC,KAAA,KAAU,mBAAA,CAAoB,KAAA,EAAO,IAAI,CAAC,CAAA;AACxF,EAAA,IAAI,OAAO,cAAA,CAAe,KAAK,CAAA,KAAM,MAAA,CAAO,WAAW,OAAO,KAAA;AAC9D,EAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,KAAA;AAAA,IAC3B,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,OAAO,GAAA,KAAQ,QAAA,IAAY,mBAAA,CAAoB,KAAA,EAAO,IAAI;AAAA,GAC9E;AACF;AAEO,SAAS,kBAAkB,KAAA,EAMlB;AACd,EAAA,IAAI,MAAM,MAAA,CAAO,MAAA,KAAW,GAAG,MAAM,IAAI,UAAU,sCAAsC,CAAA;AACzF,EAAA,IACE,KAAA,CAAM,SAAA,KAAc,MAAA,KACnB,CAAC,MAAA,CAAO,aAAA,CAAc,KAAA,CAAM,SAAS,CAAA,IAAK,KAAA,CAAM,SAAA,GAAY,CAAA,CAAA,EAC7D;AACA,IAAA,MAAM,IAAI,UAAU,2DAA2D,CAAA;AAAA,EACjF;AACA,EAAA,OAAO,EAAE,GAAG,KAAA,EAAM;AACpB;AAEO,SAAS,kBAAkB,KAAA,EAAiC;AACjE,EAAA,IAAI,CAAC,OAAO,aAAA,CAAc,KAAA,CAAM,QAAQ,CAAA,IAAK,KAAA,CAAM,WAAW,CAAA,EAAG;AAC/D,IAAA,MAAM,IAAI,UAAU,0DAA0D,CAAA;AAAA,EAChF;AACA,EAAA,IAAI,MAAM,MAAA,CAAO,MAAA,KAAW,GAAG,MAAM,IAAI,UAAU,sCAAsC,CAAA;AACzF,EAAA,OAAO,EAAE,QAAA,EAAU,KAAA,CAAM,QAAA,EAAU,MAAA,EAAQ,MAAM,MAAA,EAAO;AAC1D;AAEO,SAAS,qBAAqB,KAAA,EAAiD;AACpF,EAAA,OACE,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IACnB,KAAA,CAAM,KAAA;AAAA,IACJ,CAAC,KAAA,KACC,OAAO,KAAA,KAAU,YACjB,KAAA,KAAU,IAAA,IACV,OAAO,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,MAAM,CAAA,KAAM,YACtC,OAAO,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,QAAQ,CAAA,KAAM,QAAA,KACvC,OAAA,CAAQ,IAAI,KAAA,EAAO,KAAK,CAAA,KAAM,MAAA,IAAa,OAAO,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,KAAK,CAAA,KAAM,QAAA;AAAA,GACrF;AAEJ;;;ACxRA,IAAM,mBAAA,GAAsB,qCAAA;AAGrB,SAAS,qBAAwB,EAAA,EAA+B;AACrE,EAAA,IAAI,CAAC,mBAAA,CAAoB,IAAA,CAAK,EAAE,CAAA,EAAG;AACjC,IAAA,MAAM,IAAI,SAAA,CAAU,CAAA,sDAAA,EAAyD,EAAE,CAAA,CAAE,CAAA;AAAA,EACnF;AACA,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,EAAE,EAAA,EAAI,CAAA;AAC7B;AAEO,SAAS,yBACd,OAAA,EACwB;AACxB,EAAA,OAAO,CAAI,UAAA,KAAkC;AAC3C,IAAA,MAAM,KAAA,GAAQ,QAAQ,UAAU,CAAA;AAChC,IAAA,OAAO,UAAU,MAAA,GAAY,MAAA,GAAY,EAAE,EAAA,EAAI,MAAe,KAAA,EAAM;AAAA,EACtE,CAAA;AACF;AA6DA,SAAS,gBAAA,CACP,WACA,QAAA,EACoB;AACpB,EAAA,IAAI,SAAA,KAAc,QAAW,OAAO,kDAAA;AACpC,EAAA,IACE,SAAA,CAAU,WAAW,uCAAA,IACrB,CAAC,wBAAwB,IAAA,CAAK,SAAA,CAAU,YAAY,CAAA,EACpD;AACA,IAAA,OAAO,sCAAA;AAAA,EACT;AACA,EAAA,KAAA,MAAW,GAAA,IAAO;AAAA,IAChB,QAAA;AAAA,IACA,kBAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA,YAAA;AAAA,IACA,gBAAA;AAAA,IACA;AAAA,GACF,EAAY;AACV,IAAA,IAAI,SAAA,CAAU,GAAG,CAAA,KAAM,QAAA,CAAS,GAAG,CAAA,EAAG,OAAO,aAAa,GAAG,CAAA,wBAAA,CAAA;AAAA,EAC/D;AACA,EAAA,IAAI,SAAA,CAAU,UAAA,GAAa,GAAA,EAAK,OAAO,8CAAA;AACvC,EAAA,IAAI,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,OAAO,CAAA,CAAE,KAAK,CAAC,KAAA,KAAU,KAAA,GAAQ,EAAE,CAAA,EAAG;AAChE,IAAA,OAAO,oCAAA;AAAA,EACT;AACA,EAAA,IACE,CAAC,UAAU,WAAA,CAAY,kBAAA,IACvB,CAAC,SAAA,CAAU,WAAA,CAAY,iBAAA,IACvB,CAAC,SAAA,CAAU,WAAA,CAAY,eACvB,CAAC,SAAA,CAAU,WAAA,CAAY,YAAA,IACvB,SAAA,CAAU,WAAA,CAAY,aAAa,CAAA,IACnC,SAAA,CAAU,WAAA,CAAY,cAAA,IAAkB,CAAA,EACxC;AACA,IAAA,OAAO,mCAAA;AAAA,EACT;AACA,EAAA,MAAMA,eAAc,SAAA,CAAU,WAAA;AAC9B,EAAA,IACE,MAAA,CAAO,MAAA,CAAOA,YAAW,CAAA,CAAE,KAAK,CAAC,KAAA,KAAU,CAAC,MAAA,CAAO,SAAS,KAAK,CAAA,IAAK,KAAA,IAAS,CAAC,KAChFA,YAAAA,CAAY,eAAA,GAAkBA,YAAAA,CAAY,eAAA,GAAkB,GAAA,IAC5DA,YAAAA,CAAY,YAAA,GAAeA,YAAAA,CAAY,eAAe,GAAA,IACtDA,YAAAA,CAAY,YAAA,GAAeA,YAAAA,CAAY,eAAe,GAAA,IACtDA,YAAAA,CAAY,eAAA,GAAkBA,YAAAA,CAAY,kBAAkB,IAAA,EAC5D;AACA,IAAA,OAAO,wCAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,SAAA,CAAU,aAAA,EAAe,OAAO,+BAAA;AACrC,EAAA,IAAI,CAAC,SAAA,CAAU,cAAA,EAAgB,OAAO,gCAAA;AACtC,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,uBAAA,CACd,WACA,QAAA,EACmB;AACnB,EAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,SAAA,EAAW,QAAQ,CAAA;AACnD,EAAA,IAAI,MAAA,KAAW,MAAA,IAAa,SAAA,KAAc,MAAA,EAAW;AACnD,IAAA,OAAO,EAAE,SAAA,EAAW,IAAA,EAAM,YAAA,EAAc,UAAU,YAAA,EAAa;AAAA,EACjE;AACA,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,KAAA;AAAA,IACX,IAAA,EAAM,gCAAA;AAAA,IACN,QAAA,EAAU,kCAAA;AAAA,IACV,IAAA,EAAM,iFAAA;AAAA,IACN,MAAA,EAAQ,EAAE,MAAA,EAAQ,MAAA,IAAU,kCAAA;AAAmC,GACjE;AACF;AAkBO,SAAS,4BAA4B,KAAA,EAAoD;AAC9F,EAAA,MAAM,MAAA,GAAU,CAAC,OAAA,EAAS,MAAA,EAAQ,QAAQ,CAAA,CAAY,MAAA;AAAA,IACpD,CAAC,QAAQ,KAAA,KAAU;AACjB,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,SAAA,CAAU,KAAK,CAAA;AACvC,MAAA,MAAA,CAAO,KAAK,CAAA,GAAI,SAAA,GACZ,EAAE,KAAA,EAAO,SAAA,EAAW,IAAA,EAAK,GACzB,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,QAAQ,8BAAA,EAA+B;AACtE,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAAA,IACA;AAAC,GACH;AACA,EAAA,OAAO,EAAE,aAAA,EAAe,KAAA,CAAM,aAAA,EAAe,MAAA,EAAO;AACtD;AAMA,SAAS,2BAA2B,MAAA,EAAwD;AAC1F,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,+BAAA;AAAA,IACN,QAAA,EAAU,uDAAA;AAAA,IACV,IAAA,EAAM,sFAAA;AAAA,IACN;AAAA,GACF;AACF;AAEO,SAAS,8BAA8B,KAAA,EAA0C;AACtF,EAAA,IAAI;AACF,IAAA,eAAA,CAAgB,KAAK,CAAA;AACrB,IAAA,OAAO,EAAE,IAAI,IAAA,EAAK;AAAA,EACpB,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,OAAO,0BAAA,CAA2B;AAAA,QAChC,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,OAC/D;AAAA,KACH;AAAA,EACF;AACF;;;AC5HA,SAAS,KAAA,GAAgB;AACvB,EAAA,OAAO,MAAA,CAAO,UAAA,EAAW,CAAE,UAAA,CAAW,KAAK,EAAE,CAAA;AAC/C;AAEA,SAAS,YAAA,CACP,IAAA,EACA,QAAA,EACA,IAAA,EACA,MAAA,EACc;AACd,EAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,MAAA,EAAO;AACxC;AAEA,SAAS,eAAA,CAAgB,KAAA,EAAgB,IAAA,mBAAO,IAAI,KAAY,EAAY;AAC1E,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,MAAM,OAAO,KAAA;AACxD,EAAA,IAAI,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,EAAG,OAAO,KAAA;AAC5B,EAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AACd,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,KAAA,CAAM,IAAA,CAAK,CAAC,KAAA,KAAU,eAAA,CAAgB,KAAA,EAAO,IAAI,CAAC,CAAA;AACnF,EAAA,OAAO,MAAA,CAAO,QAAQ,KAAK,CAAA,CAAE,KAAK,CAAC,CAAC,GAAA,EAAK,MAAM,CAAA,KAAM;AACnD,IAAA,IACE,CAAC,SAAS,UAAA,EAAY,QAAA,EAAU,MAAM,SAAA,EAAW,YAAA,EAAc,SAAA,EAAW,OAAO,CAAA,CAAE,QAAA;AAAA,MACjF;AAAA,KACF;AAEA,MAAA,OAAO,IAAA;AACT,IAAA,OAAO,eAAA,CAAgB,QAAQ,IAAI,CAAA;AAAA,EACrC,CAAC,CAAA;AACH;AAEA,SAAS,gBAAgB,OAAA,EAA2C;AAClE,EAAA,IAAI,QAAQ,SAAA,CAAU,MAAA,KAAW,KAAK,OAAA,CAAQ,UAAA,CAAW,WAAW,CAAA,EAAG;AACrE,IAAA,MAAM,IAAI,UAAU,oDAAoD,CAAA;AAAA,EAC1E;AACA,EAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,OAAA,CAAQ,QAAQ,CAAA;AACzC,EAAA,IAAI,QAAA,CAAS,QAAA,KAAa,OAAA,IAAW,CAAC,CAAC,WAAA,EAAa,WAAW,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,QAAQ,CAAA,EAAG;AAC5F,IAAA,MAAM,IAAI,UAAU,wCAAwC,CAAA;AAAA,EAC9D;AACA,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,GAAG,CAAA,IAAK,CAAC,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC1F,IAAA,MAAM,IAAI,UAAU,mDAAmD,CAAA;AAAA,EACzE;AACA,EAAA,IAAI,gBAAgB,OAAA,CAAQ,OAAO,GAAG,MAAM,IAAI,UAAU,4BAA4B,CAAA;AACxF;AAEO,SAAS,0BACd,OAAA,EACqB;AACrB,EAAA,eAAA,CAAgB,OAAO,CAAA;AACvB,EAAA,MAAM,KAAA,GAAsB;AAAA,IAC1B,aAAA,EAAe,OAAA;AAAA,IACf,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,OAAA,EAAS,CAAA,MAAA,EAAS,KAAA,EAAO,CAAA,CAAA;AAAA,IACzB,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,aAAa,KAAA,EAAM;AAAA,IACnB,eAAe,KAAA,EAAM;AAAA,IACrB,SAAA,EAAW,OAAA,CAAQ,GAAA,GAAM,OAAA,CAAQ,KAAA;AAAA,IACjC,GAAI,QAAQ,gBAAA,KAAqB,MAAA,GAC7B,EAAC,GACD,EAAE,gBAAA,EAAkB,OAAA,CAAQ,gBAAA,EAAiB;AAAA,IACjD,GAAI,QAAQ,YAAA,KAAiB,MAAA,GAAY,EAAC,GAAI,EAAE,YAAA,EAAc,OAAA,CAAQ,YAAA,EAAa;AAAA,IACnF,KAAA,EAAO;AAAA,GACT;AACA,EAAA,IAAI,KAAA,GAAsB,EAAE,KAAA,EAAO,SAAA,EAAU;AAC7C,EAAA,IAAI,KAAA;AAEJ,EAAA,MAAM,UAAA,GAAa,CACjB,WAAA,EACA,YAAA,KACgC;AAChC,IAAA,MAAM,OAAA,GAAU,OAAO,WAAA,KAAgB,QAAA,GAAW,YAAA,GAAe,WAAA;AACjE,IAAA,MAAM,gBAAA,GAAmB,OAAO,WAAA,KAAgB,QAAA,GAAW,WAAA,GAAc,MAAA;AACzE,IAAA,IAAI,YAAY,MAAA,EAAW;AACzB,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,KAAA,EAAO,YAAA;AAAA,UACL,uBAAA;AAAA,UACA,0BAAA;AAAA,UACA,4DAAA;AAAA,UACA;AAAC;AACH,OACF;AAAA,IACF;AACA,IAAA,IAAI,KAAA,CAAM,UAAU,SAAA,EAAW;AAC7B,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,KAAA,EAAO,YAAA;AAAA,UACL,iBAAA;AAAA,UACA,qCAAA;AAAA,UACA,sEAAA;AAAA,UACA;AAAC;AACH,OACF;AAAA,IACF;AACA,IAAA,IAAI,KAAA,CAAM,UAAU,QAAA,EAAU;AAC5B,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,KAAA,EAAO,YAAA;AAAA,UACL,gBAAA;AAAA,UACA,qCAAA;AAAA,UACA,kFAAA;AAAA,UACA;AAAC;AACH,OACF;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,UAAA,KAAe,KAAA,CAAM,UAAA,EAAY;AAC3C,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,KAAA,EAAO,YAAA;AAAA,UACL,2BAAA;AAAA,UACA,sCAAA;AAAA,UACA,0EAAA;AAAA,UACA,EAAE,QAAA,EAAU,KAAA,CAAM,UAAA,EAAY,MAAA,EAAQ,QAAQ,UAAA;AAAW;AAC3D,OACF;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,WAAA,KAAgB,KAAA,CAAM,WAAA,EAAa;AAC7C,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,KAAA,EAAO,YAAA;AAAA,UACL,uBAAA;AAAA,UACA,+CAAA;AAAA,UACA,sEAAA;AAAA,UACA;AAAC;AACH,OACF;AAAA,IACF;AACA,IAAA,IACE,MAAM,gBAAA,KAAqB,MAAA,IAC3B,OAAA,CAAQ,gBAAA,KAAqB,MAAM,gBAAA,EACnC;AACA,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,KAAA,EAAO,YAAA;AAAA,UACL,6BAAA;AAAA,UACA,wDAAA;AAAA,UACA,yEAAA;AAAA,UACA,EAAE,QAAA,EAAU,KAAA,CAAM,gBAAA,EAAkB,MAAA,EAAQ,QAAQ,gBAAA;AAAiB;AACvE,OACF;AAAA,IACF;AACA,IAAA,IAAI,MAAM,YAAA,KAAiB,MAAA,IAAa,OAAA,CAAQ,YAAA,KAAiB,MAAM,YAAA,EAAc;AACnF,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,KAAA,EAAO,YAAA;AAAA,UACL,yBAAA;AAAA,UACA,oDAAA;AAAA,UACA,mFAAA;AAAA,UACA,EAAE,QAAA,EAAU,KAAA,CAAM,YAAA,EAAc,MAAA,EAAQ,QAAQ,YAAA;AAAa;AAC/D,OACF;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,GAAA,IAAO,KAAA,CAAM,SAAA,EAAW;AAClC,MAAA,KAAA,GAAQ,EAAE,OAAO,SAAA,EAAU;AAC3B,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,KAAA,EAAO,YAAA;AAAA,UACL,uBAAA;AAAA,UACA,0CAAA;AAAA,UACA,4DAAA;AAAA,UACA,EAAE,SAAA,EAAW,KAAA,CAAM,SAAA,EAAW,GAAA,EAAK,QAAQ,GAAA;AAAI;AACjD,OACF;AAAA,IACF;AACA,IAAA,IAAI,gBAAA,KAAqB,MAAA,IAAa,gBAAA,KAAqB,KAAA,EAAO,OAAA,EAAS;AACzE,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,KAAA,EAAO,YAAA;AAAA,UACL,uBAAA;AAAA,UACA,+CAAA;AAAA,UACA,0DAAA;AAAA,UACA;AAAC;AACH,OACF;AAAA,IACF;AACA,IAAA,KAAA,GAAQ;AAAA,MACN,OAAA,EAAS,CAAA,MAAA,EAAS,KAAA,EAAO,CAAA,CAAA;AAAA,MACzB,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,KAAA,EAAO;AAAA,KACT;AACA,IAAA,KAAA,GAAQ,EAAE,KAAA,EAAO,QAAA,EAAU,OAAA,EAAS,MAAM,OAAA,EAAQ;AAClD,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,OAAO,QAAA,EAAS;AAAA,EACnD,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,CAAC,OAAA,KAAiD;AAChE,IAAA,IAAI,KAAA,EAAO,YAAY,OAAA,EAAS;AAC9B,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,KAAA,EAAO,YAAA;AAAA,UACL,wBAAA;AAAA,UACA,8BAAA;AAAA,UACA,kEAAA;AAAA,UACA;AAAC;AACH,OACF;AAAA,IACF;AACA,IAAA,KAAA,GAAQ,EAAE,KAAA,EAAO,SAAA,EAAW,OAAA,EAAQ;AACpC,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,OAAO,SAAA,EAAU;AAAA,EACpD,CAAA;AAEA,EAAA,MAAM,IAAA,GAAO,CAAC,OAAA,KAAiD;AAC7D,IAAA,IAAI,KAAA,EAAO,OAAA,KAAY,OAAA,IAAW,KAAA,CAAM,UAAU,SAAA,EAAW;AAC3D,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,KAAA,EAAO,YAAA;AAAA,UACL,wBAAA;AAAA,UACA,sCAAA;AAAA,UACA,qEAAA;AAAA,UACA;AAAC;AACH,OACF;AAAA,IACF;AACA,IAAA,KAAA,GAAQ,EAAE,KAAA,EAAO,QAAA,EAAU,OAAA,EAAQ;AACnC,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,OAAO,QAAA,EAAS;AAAA,EACnD,CAAA;AAEA,EAAA,MAAM,WAAW,MAAmC;AAClD,IAAA,IAAI,KAAA,CAAM,KAAA,KAAU,SAAA,IAAa,KAAA,CAAM,UAAU,QAAA,EAAU;AACzD,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,KAAA,EAAO,YAAA;AAAA,UACL,iBAAA;AAAA,UACA,4CAAA;AAAA,UACA,+EAAA;AAAA,UACA,EAAE,KAAA,EAAO,KAAA,CAAM,KAAA;AAAM;AACvB,OACF;AAAA,IACF;AACA,IAAA,KAAA,GAAQ,EAAE,OAAO,UAAA,EAAW;AAC5B,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,OAAO,UAAA,EAAW;AAAA,EACrD,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,KAAA,EAAO,UAAA;AAAA,IACP,OAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAU,MAAM;AAAA,GAClB;AACF;;;AC5SO,SAAS,mBAAmB,KAAA,EAA6B;AAC9D,EAAA,MAAM,WACJ,EAAC;AACH,EAAA,IAAI,KAAA,GAA+B,QAAA;AACnC,EAAA,IAAI,UAAA;AACJ,EAAA,IAAI,WAAA;AAEJ,EAAA,MAAM,SAAA,GAAY,CAAC,MAAA,KAA8D;AAC/E,IAAA,IAAI,WAAA,KAAgB,QAAW,OAAO,WAAA;AACtC,IAAA,UAAA,GAAa,CAAA,EAAG,KAAK,CAAA,UAAA,EAAa,MAAA,CAAO,YAAY,CAAA,CAAA;AACrD,IAAA,KAAA,GAAQ,aAAA;AACR,IAAA,WAAA,GAAA,CAAe,YAAY;AACzB,MAAA,MAAM,WAAkC,EAAC;AACzC,MAAA,KAAA,IAAS,QAAQ,QAAA,CAAS,MAAA,GAAS,GAAG,KAAA,IAAS,CAAA,EAAG,SAAS,CAAA,EAAG;AAC5D,QAAA,MAAM,KAAA,GAAQ,SAAS,KAAK,CAAA;AAC5B,QAAA,IAAI,UAAU,MAAA,EAAW;AACzB,QAAA,IAAI;AACF,UAAA,MAAM,MAAM,OAAA,EAAQ;AAAA,QACtB,SAAS,KAAA,EAAO;AACd,UAAA,QAAA,CAAS,IAAA,CAAK;AAAA,YACZ,OAAO,KAAA,CAAM,KAAA;AAAA,YACb,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,WAC/D,CAAA;AAAA,QACH;AAAA,MACF;AACA,MAAA,KAAA,GAAQ,YAAA;AACR,MAAA,OAAO,EAAE,UAAA,EAAkC,MAAA,EAAQ,QAAA,EAAS;AAAA,IAC9D,CAAA,GAAG;AACH,IAAA,OAAO,WAAA;AAAA,EACT,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,IAAI,KAAA,GAAQ;AACV,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AAAA,IACA,QAAA,CAAS,OAAO,OAAA,EAAS;AACvB,MAAA,IAAI,KAAA,KAAU,UAAU,OAAO,KAAA;AAC/B,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,KAAA,EAAO,OAAA,EAAS,CAAA;AAChC,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA;AAAA,GACF;AACF;;;ACjBA,IAAM,aAAA,uBAAoB,GAAA,CAAI;AAAA,EAC5B,OAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,SAAS,cAAA,CAAe,MAAc,GAAA,EAA+B;AACnE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,2BAAA;AAAA,IACN,QAAA,EAAU,6EAAA;AAAA,IACV,IAAA,EAAM,sFAAA;AAAA,IACN,MAAA,EAAQ,EAAE,IAAA,EAAM,GAAA;AAAI,GACtB;AACF;AAEO,SAAS,qBAAA,CACd,SAAA,EACA,MAAA,EACA,OAAA,EACA,MAAA,EACiB;AACjB,EAAA,IAAI,OAAO,aAAA,CAAc,MAAA,KAAW,CAAA,IAAK,MAAA,CAAO,cAAc,MAAA,KAAW,CAAA;AACvE,IAAA,MAAM,IAAI,UAAU,kDAAkD,CAAA;AACxE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,yBAAA;AAAA,IACN,OAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA,EAAQ,EAAE,GAAG,MAAA,EAAQ,UAAU,CAAC,GAAG,MAAA,CAAO,QAAQ,CAAA,EAAE;AAAA,IACpD,MAAA,EAAQ,EAAE,GAAG,MAAA,EAAQ,UAAU,CAAC,GAAG,MAAA,CAAO,QAAQ,CAAA;AAAE,GACtD;AACF;AAEO,SAAS,oBAAA,CACdC,QACA,MAAA,EAMI;AACJ,EAAA,MAAM,YAAA,GAAeA,MAAAA,CAAM,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,CAAC,IAAA,KAAS,MAAA,CAAO,QAAA,CAAS,QAAA,CAAS,IAAI,CAAC,CAAA;AACzF,EAAA,MAAM,OAAA,GACJA,MAAAA,CAAM,MAAA,CAAO,KAAA,KAAU,OAAO,KAAA,IAC9BA,MAAAA,CAAM,MAAA,CAAO,aAAA,KAAkB,OAAO,aAAA,IACtCA,MAAAA,CAAM,MAAA,CAAO,UAAA,KAAe,OAAO,UAAA,IACnC,YAAA;AACF,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAA;AAAA,MACJ,OAAO,0BAAA,CAA2B,CAAA,UAAA,EAAaA,OAAM,SAAS,CAAA,CAAA,EAAI,OAAO,KAAK;AAAA,KAChF;AAAA,EACF;AACA,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,EAAE,GAAG,MAAA,EAAQ,QAAA,EAAU,CAAC,GAAG,MAAA,CAAO,QAAQ,GAAE,EAAE;AAC1E;AAEO,SAAS,sBAAsB,KAAA,EAKlB;AAClB,EAAA,MAAM,MAAA,GAA0B;AAAA,IAC9B,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,GAAI,KAAA,CAAM,QAAA,KAAa,MAAA,GAAY,EAAC,GAAI,EAAE,QAAA,EAAU,EAAE,GAAG,KAAA,CAAM,QAAA,EAAS,EAAE;AAAA,IAC1E,SAAA,EAAA,CAAY,KAAA,CAAM,SAAA,IAAa,EAAC,EAAG,GAAA,CAAI,CAAC,QAAA,MAAc,EAAE,GAAG,QAAA,EAAS,CAAE;AAAA,GACxE;AACA,EAAA,MAAM,UAAA,GAAa,yBAAyB,MAAM,CAAA;AAClD,EAAA,IAAI,CAAC,WAAW,EAAA,EAAI;AAClB,IAAA,MAAM,IAAA,GACJ,WAAW,KAAA,CAAM,IAAA,KAAS,8BAA8B,UAAA,CAAW,KAAA,CAAM,OAAO,IAAA,GAAO,GAAA;AACzF,IAAA,MAAM,IAAI,UAAU,IAAI,CAAA;AAAA,EAC1B;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,yBAAyB,KAAA,EAA4C;AACnF,EAAA,MAAM,KAAA,GAAQ,CAAC,SAAA,EAAoB,IAAA,KAA6C;AAC9E,IAAA,IAAI,CAAC,mBAAA,CAAoB,SAAS,CAAA,EAAG;AACnC,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,eAAe,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,EAAA,CAAG,EAAE,CAAA,IAAK,QAAQ,CAAA,EAAE;AAAA,IACtF;AACA,IAAA,IAAI,SAAA,KAAc,QAAQ,OAAO,SAAA,KAAc,UAAU,OAAO,EAAE,IAAI,IAAA,EAAK;AAC3E,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC5B,MAAA,KAAA,MAAW,CAAC,KAAA,EAAO,KAAK,CAAA,IAAK,SAAA,CAAU,SAAQ,EAAG;AAChD,QAAA,MAAM,SAAS,KAAA,CAAM,KAAA,EAAO,GAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAG,CAAA;AAC/C,QAAA,IAAI,CAAC,MAAA,CAAO,EAAA,EAAI,OAAO,MAAA;AAAA,MACzB;AACA,MAAA,OAAO,EAAE,IAAI,IAAA,EAAK;AAAA,IACpB;AACA,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AACpD,MAAA,MAAM,UAAA,GAAa,GAAA,CAAI,UAAA,CAAW,GAAA,EAAK,EAAE,EAAE,UAAA,CAAW,GAAA,EAAK,EAAE,CAAA,CAAE,WAAA,EAAY;AAC3E,MAAA,IAAI,aAAA,CAAc,GAAA,CAAI,UAAU,CAAA,EAAG,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,cAAA,CAAe,IAAA,EAAM,GAAG,CAAA,EAAE;AACxF,MAAA,MAAM,SAAS,KAAA,CAAM,KAAA,EAAO,GAAG,IAAI,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA;AAC5C,MAAA,IAAI,CAAC,MAAA,CAAO,EAAA,EAAI,OAAO,MAAA;AAAA,IACzB;AACA,IAAA,OAAO,EAAE,IAAI,IAAA,EAAK;AAAA,EACpB,CAAA;AACA,EAAA,OAAO,KAAA,CAAM,OAAO,GAAG,CAAA;AACzB;;;AC7IA,IAAM,MAAA,GAAqC;AAAA,EACzC,QAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA;AAEO,SAAS,qBAAA,CACd,GAAA,GAAoB,MAAM,WAAA,CAAY,KAAI,EACzB;AACjB,EAAA,MAAM,SAAS,MAAA,CAAO,WAAA;AAAA,IACpB,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,CAAC,OAAO,EAAE,MAAA,EAAQ,gBAAA,EAAkB,CAAC;AAAA,GAC7D;AACA,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAqB;AACxC,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,WAAA;AACJ,EAAA,IAAI,SAAA;AACJ,EAAA,OAAO;AAAA,IACL,MAAM,KAAA,EAAO;AACX,MAAA,IAAI,MAAA,KAAW,QAAW,MAAM,IAAI,UAAU,CAAA,OAAA,EAAU,MAAA,CAAO,KAAK,CAAA,eAAA,CAAiB,CAAA;AACrF,MAAA,IAAI,MAAA,CAAO,IAAI,KAAK,CAAA,QAAS,IAAI,SAAA,CAAU,CAAA,OAAA,EAAU,KAAK,CAAA,oBAAA,CAAsB,CAAA;AAChF,MAAA,MAAM,KAAK,GAAA,EAAI;AACf,MAAA,WAAA,KAAgB,EAAA;AAChB,MAAA,MAAA,GAAS,EAAE,KAAA,EAAO,WAAA,EAAa,EAAA,EAAG;AAAA,IACpC,CAAA;AAAA,IACA,IAAI,KAAA,EAAO;AACT,MAAA,IAAI,MAAA,EAAQ,UAAU,KAAA,EAAO,MAAM,IAAI,SAAA,CAAU,CAAA,OAAA,EAAU,KAAK,CAAA,yBAAA,CAA2B,CAAA;AAC3F,MAAA,MAAM,KAAK,GAAA,EAAI;AACf,MAAA,MAAA,CAAO,KAAK,CAAA,GAAI,EAAE,MAAA,EAAQ,UAAA,EAAY,UAAA,EAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,EAAA,GAAK,MAAA,CAAO,WAAW,CAAA,EAAE;AACvF,MAAA,MAAA,CAAO,IAAI,KAAK,CAAA;AAChB,MAAA,MAAA,GAAS,MAAA;AACT,MAAA,SAAA,GAAY,EAAA;AAAA,IACd,CAAA;AAAA,IACA,MAAA,CAAO,OAAO,UAAA,EAAY;AACxB,MAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,UAAU,KAAK,UAAA,GAAa,CAAA;AAC/C,QAAA,MAAM,IAAI,UAAU,gDAAgD,CAAA;AACtE,MAAA,IAAI,MAAA,CAAO,IAAI,KAAK,CAAA,QAAS,IAAI,SAAA,CAAU,CAAA,OAAA,EAAU,KAAK,CAAA,oBAAA,CAAsB,CAAA;AAChF,MAAA,MAAM,KAAK,GAAA,EAAI;AACf,MAAA,WAAA,KAAgB,EAAA,GAAK,UAAA;AACrB,MAAA,MAAA,CAAO,KAAK,CAAA,GAAI,EAAE,MAAA,EAAQ,YAAY,UAAA,EAAW;AACjD,MAAA,MAAA,CAAO,IAAI,KAAK,CAAA;AAChB,MAAA,SAAA,GAAY,EAAA;AAAA,IACd,CAAA;AAAA,IACA,MAAA,GAAS;AACP,MAAA,IAAI,MAAA,KAAW,QAAW,MAAM,IAAI,UAAU,CAAA,OAAA,EAAU,MAAA,CAAO,KAAK,CAAA,eAAA,CAAiB,CAAA;AACrF,MAAA,MAAM,KAAA,GAAQ,eAAe,GAAA,EAAI;AACjC,MAAA,MAAM,MAAM,SAAA,IAAa,KAAA;AACzB,MAAA,OAAO;AAAA,QACL,WAAA,EAAa,KAAA;AAAA,QACb,SAAA,EAAW,GAAA;AAAA,QACX,OAAA,EAAS,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAM,KAAK,CAAA;AAAA,QAChC,MAAA,EAAQ,EAAE,GAAG,MAAA;AAAO,OACtB;AAAA,IACF;AAAA,GACF;AACF;AAEO,SAAS,eAAA,GAA0B;AACxC,EAAA,OAAO,YAAY,GAAA,EAAI;AACzB;AAEO,SAAS,gBAAA,CACd,aACA,eAAA,EACY;AACZ,EAAA,MAAM,SAAA,GAAY,YAAY,GAAA,EAAI;AAClC,EAAA,MAAM,MAAA,GAAS,iBAAiB,MAAA,EAAO;AACvC,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,YAAY,WAAW,CAAA;AACtD,EAAA,MAAM,YAAA,GACJ,WAAW,MAAA,GACP,CAAA,GACA,OAAO,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CAAE,MAAA;AAAA,IAC3B,CAAC,KAAK,WAAA,KACJ,WAAA,CAAY,WAAW,UAAA,GAAa,GAAA,GAAM,YAAY,UAAA,GAAa,GAAA;AAAA,IACrE;AAAA,GACF;AACN,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAI,MAAA,KAAW,MAAA,GACX,KACA,EAAE,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAQ,gBAAgB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,UAAA,GAAa,YAAY,CAAA;AAAE,GACtF;AACF;;;AC7DO,SAAS,UAAA,CACd,YACA,OAAA,EACkC;AAClC,EAAA,IAAI,CAAC,qCAAA,CAAsC,IAAA,CAAK,UAAA,CAAW,EAAE,CAAA,EAAG;AAC9D,IAAA,MAAM,IAAI,SAAA,CAAU,CAAA,2CAAA,EAA8C,UAAA,CAAW,EAAE,CAAA,CAAE,CAAA;AAAA,EACnF;AACA,EAAA,IAAI,UAAA,CAAW,KAAA,CAAM,IAAA,EAAK,CAAE,MAAA,KAAW,CAAA,IAAK,UAAA,CAAW,OAAA,CAAQ,IAAA,EAAK,CAAE,MAAA,KAAW,CAAA,EAAG;AAClF,IAAA,MAAM,IAAI,UAAU,0CAA0C,CAAA;AAAA,EAChE;AACA,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,UAAA,CAAW,QAAQ,CAAA,EAAG,MAAM,IAAI,SAAA,CAAU,gCAAgC,CAAA;AAC7F,EAAA,IAAI,WAAW,OAAA,KAAY,MAAA,IAAa,WAAW,OAAA,CAAQ,KAAA,KAAU,WAAW,KAAA,EAAO;AACrF,IAAA,MAAM,IAAI,SAAA;AAAA,MACR,CAAA,KAAA,EAAQ,WAAW,EAAE,CAAA,2BAAA,EAA8B,WAAW,OAAA,CAAQ,KAAK,CAAA,yBAAA,EAA4B,UAAA,CAAW,KAAK,CAAA;AAAA,KACzH;AAAA,EACF;AACA,EAAA,MAAM,aAAgC,UAAA,CAAW,UAAA;AACjD,EAAA,MAAM,eAAoC,UAAA,CAAW,YAAA;AACrD,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,EAAE,GAAG,UAAA,EAAY,UAAA,EAAY,YAAA,EAAc,QAAA,EAAU,CAAC,GAAG,UAAA,CAAW,QAAQ,CAAA,EAAE;AAAA,IAC1F;AAAA,GACF;AACF;AAEA,SAAS,YAAA,GAIP;AACA,EAAA,MAAM,QAAwB,EAAC;AAC/B,EAAA,MAAM,UAAiE,EAAC;AACxE,EAAA,IAAI,MAAA,GAAS,KAAA;AACb,EAAA,MAAM,IAAA,GAAO,CAAC,KAAA,KAA8B;AAC1C,IAAA,MAAM,MAAA,GAAS,QAAQ,KAAA,EAAM;AAC7B,IAAA,IAAI,MAAA,KAAW,QAAW,MAAA,CAAO,EAAE,MAAM,KAAA,EAAO,KAAA,EAAO,OAAO,CAAA;AAAA,SACzD,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,EACvB,CAAA;AACA,EAAA,MAAM,QAAQ,MAAY;AACxB,IAAA,MAAA,GAAS,IAAA;AACT,IAAA,OAAO,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG,OAAA,CAAQ,KAAA,EAAM,GAAI,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,MAAA,EAAW,CAAA;AAAA,EAC/E,CAAA;AACA,EAAA,MAAM,MAAA,GAAsC;AAAA,IAC1C,CAAC,MAAA,CAAO,aAAa,CAAA,GAAiC;AACpD,MAAA,OAAO;AAAA,QACL,MAAM,YAAmD;AACvD,UAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,EAAM;AAC1B,UAAA,IAAI,UAAU,MAAA,EAAW,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,OAAO,KAAA,EAAM;AAC5D,UAAA,IAAI,QAAQ,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,OAAO,MAAA,EAAU;AAClD,UAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,YAAY,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,QACvD;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACA,EAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,MAAA,EAAO;AAC/B;AAEA,SAAS,WAAoB,KAAA,EAAgD;AAC3E,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,MAAM,OAAO,KAAA;AACxD,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,SAAS,CAAA;AAC5C,EAAA,OAAO,OAAA,KAAY,eAAe,OAAA,KAAY,QAAA;AAChD;AAEA,SAAS,oBAAoB,KAAA,EAA2B;AACtD,EAAA,OAAO,mBAAA,CAAoB,KAAK,CAAA,GAAI,KAAA,GAAQ,IAAA;AAC9C;AAEA,SAAS,YAAY,KAAA,EAA4C;AAC/D,EAAA,OAAO,kBAAA;AAAA,IACL,KAAA,CAAM,IAAA;AAAA,IACN,MAAM,QAAA,IAAY,mCAAA;AAAA,IAClB,MAAM,IAAA,IAAQ,gEAAA;AAAA,IACd,KAAA,CAAM;AAAA,GACR;AACF;AAEA,SAAS,WAAW,KAAA,EAAmD;AACrE,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,IAAQ,OAAO,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,IAAI,CAAA,KAAM,SAAA;AAEvF;AAEA,SAAS,mBAAmB,KAAA,EAA2C;AACrE,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,UAAU,IAAA,IACV,OAAO,QAAQ,GAAA,CAAI,KAAA,EAAO,MAAM,CAAA,KAAM,YACtC,OAAA,CAAQ,GAAA,CAAI,OAAO,MAAM,CAAA,CAAE,WAAW,OAAO,CAAA;AAEjD;AAMO,SAAS,kBAAkB,aAAA,EAAgD;AAChF,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAgD;AACjE,EAAA,KAAA,MAAW,aAAa,aAAA,EAAe;AACrC,IAAA,IAAI,OAAO,SAAA,KAAc,QAAA,IAAY,SAAA,KAAc,IAAA,EAAM;AACvD,MAAA,MAAM,IAAI,UAAU,oCAAoC,CAAA;AAAA,IAC1D;AACA,IAAA,MAAM,YAAA,GAAe,SAAA;AACrB,IAAA,IAAI,OAAO,YAAA,CAAa,OAAA,KAAY,UAAA,EAAY;AAC9C,MAAA,MAAM,IAAI,UAAU,6CAA6C,CAAA;AAAA,IACnE;AACA,IAAA,MAAM,EAAA,GAAK,aAAa,UAAA,CAAW,EAAA;AACnC,IAAA,IAAI,IAAA,CAAK,IAAI,EAAE,CAAA,QAAS,IAAI,SAAA,CAAU,CAAA,gCAAA,EAAmC,EAAE,CAAA,CAAE,CAAA;AAC7E,IAAA,IAAA,CAAK,GAAA,CAAI,IAAI,YAAY,CAAA;AAAA,EAC3B;AAEA,EAAA,MAAM,IAAA,GAAO,MACX,CAAC,GAAG,IAAA,CAAK,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,YAAA,KAAiB,YAAA,CAAa,UAAU,CAAA;AAElE,EAAA,MAAM,MAAM,CACV,YAAA,EACA,IAAA,EACA,OAAA,GAA0B,EAAC,KACN;AACrB,IAAA,MAAM,KAAA,GAAQ,GAAG,YAAA,CAAa,UAAA,CAAW,EAAE,CAAA,CAAA,EAAI,MAAA,CAAO,YAAY,CAAA,CAAA;AAClE,IAAA,MAAM,UAAU,YAAA,EAAa;AAC7B,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,cAAc,eAAA,EAAgB;AACpC,IAAA,MAAM,kBAAkB,qBAAA,EAAsB;AAC9C,IAAA,MAAM,oBAAoB,eAAA,EAAgB;AAC1C,IAAA,eAAA,CAAgB,MAAA,CAAO,UAAU,IAAA,CAAK,GAAA,CAAI,GAAG,eAAA,EAAgB,GAAI,iBAAiB,CAAC,CAAA;AACnF,IAAA,MAAM,KAAA,GAAQ,mBAAmB,KAAK,CAAA;AACtC,IAAA,MAAM,mBAAmB,eAAA,EAAgB;AACzC,IAAA,eAAA,CAAgB,MAAA,CAAO,SAAS,IAAA,CAAK,GAAA,CAAI,GAAG,eAAA,EAAgB,GAAI,gBAAgB,CAAC,CAAA;AACjF,IAAA,IAAI,eAAA,GAAkB,KAAA;AACtB,IAAA,IAAI,aAAA,GAAmC;AAAA,MACrC,MAAA,EAAQ,EAAE,MAAA,EAAQ,CAAA,EAAG,WAAW,CAAA,EAAG,QAAA,EAAU,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAE;AAAA,MAC1D,UAAU;AAAC,KACb;AACA,IAAA,IAAI,YAAA,GAAe,qBAAA;AACnB,IAAA,IAAI,eAAA;AACJ,IAAA,MAAM,QAAA,GAAW,IAAI,OAAA,CAA+B,CAAC,OAAA,KAAY;AAC/D,MAAA,eAAA,GAAkB,OAAA;AAAA,IACpB,CAAC,CAAA;AAED,IAAA,MAAM,MAAA,GAAS,OACb,SAAA,EACA,MAAA,GAAiC,UAAA,KACf;AAClB,MAAA,IAAI,eAAA,EAAiB;AACrB,MAAA,eAAA,GAAkB,IAAA;AAClB,MAAA,UAAA,CAAW,KAAA,EAAM;AACjB,MAAA,MAAM,sBAAsB,eAAA,EAAgB;AAC5C,MAAA,MAAM,aAAA,GAAgB,MAAM,KAAA,CAAM,SAAA,CAAU,MAAM,CAAA;AAClD,MAAA,MAAM,cAAA,GAAiB,aAAA,CAAc,QAAA,CAAS,CAAC,CAAA;AAC/C,MAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,OAAA,CAAQ,aAAA,CAAc,MAAM,CAAA,CAAE,MAAA,CAAO,CAAC,GAAG,KAAK,CAAA,KAAM,UAAU,CAAC,CAAA;AAC5F,MAAA,MAAM,aAAA,GACJ,aAAA,CAAc,QAAA,CAAS,CAAC,CAAA,KACvB,cAAc,MAAA,KAAW,CAAA,GACtB,MAAA,GACA,CAAA,uBAAA,EAA0B,aAAA,CAAc,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,KAAM,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AACnG,MAAA,eAAA,CAAgB,MAAA,CAAO,YAAY,IAAA,CAAK,GAAA,CAAI,GAAG,eAAA,EAAgB,GAAI,mBAAmB,CAAC,CAAA;AACvF,MAAA,MAAM,gBACJ,cAAA,IAAmB,SAAA,CAAU,OAAA,KAAY,WAAA,IAAe,kBAAkB,MAAA,GACtE;AAAA,QACE,OAAA,EAAS,QAAA;AAAA,QACT,OAAA,EAAS,YAAA;AAAA,UACP,KAAA;AAAA,UACA,cAAA,KAAmB,SACd,aAAA,GACD,CAAA,EAAG,eAAe,KAAK,CAAA,EAAA,EAAK,eAAe,OAAO,CAAA;AAAA,SACxD;AAAA,QACA,WAAW,SAAA,CAAU,SAAA;AAAA,QACrB,OAAA,EAAS,aAAA;AAAA,QACT,GAAI,UAAU,aAAA,KAAkB,MAAA,GAC5B,EAAC,GACD,EAAE,aAAA,EAAe,SAAA,CAAU,aAAA,EAAc;AAAA,QAC7C,MAAA,EAAQ,gBAAA,CAAiB,WAAA,EAAa,eAAe;AAAA,OACvD,GACA;AAAA,QACE,GAAG,SAAA;AAAA,QACH,OAAA,EAAS,aAAA;AAAA,QACT,MAAA,EAAQ,gBAAA,CAAiB,WAAA,EAAa,eAAe;AAAA,OACvD;AACN,MAAA,eAAA,CAAgB,aAAa,CAAA;AAC7B,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,IAAA,EAAM,UAAA;AAAA,QACN,KAAA;AAAA,QACA,SAAS,aAAA,CAAc,OAAA;AAAA,QACvB,IAAA,EAAM,YAAY,GAAA;AAAI,OACvB,CAAA;AACD,MAAA,OAAA,CAAQ,KAAA,EAAM;AAAA,IAChB,CAAA;AAEA,IAAA,MAAM,OAAA,GAAgC;AAAA,MACpC,KAAA;AAAA,MACA,QAAQ,UAAA,CAAW,MAAA;AAAA,MACnB,GAAI,QAAQ,QAAA,KAAa,MAAA,GAAY,EAAC,GAAI,EAAE,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAS;AAAA,MACvE,IAAA,EAAM,CAAC,KAAA,KAAU;AACf,QAAA,IAAI,CAAC,iBAAiB,OAAA,CAAQ,IAAA,CAAK,EAAE,GAAG,KAAA,EAAO,OAAO,CAAA;AAAA,MACxD,CAAA;AAAA,MACA,UAAA,EAAY,CAAC,OAAA,KAAY;AACvB,QAAA,IAAI,CAAC,KAAA,CAAM,QAAA,CAAS,CAAA,QAAA,EAAW,KAAA,CAAM,KAAK,CAAA,CAAA,EAAI,OAAO,CAAA,EAAG,KAAK,OAAA,EAAQ;AAAA,MACvE,CAAA;AAAA,MACA,gBAAA,EAAkB,CAAC,MAAA,KAAW;AAC5B,QAAA,aAAA,GAAgB;AAAA,UACd,MAAA,EAAQ,EAAE,GAAG,MAAA,CAAO,MAAA,EAAO;AAAA,UAC3B,QAAA,EAAU,CAAC,GAAG,MAAA,CAAO,QAAQ;AAAA,SAC/B;AAAA,MACF,CAAA;AAAA,MACA,OAAA,EAAS,CAAI,UAAA,KAAkC;AAC7C,QAAA,IAAI,eAAA,EAAiB;AACnB,UAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAgB,OAAO,aAAA,CAAc,KAAA,EAAO,WAAW,CAAA,EAAE;AAAA,QACxE;AACA,QAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,kBAAA,GAAqB,UAAU,CAAA;AACxD,QAAA,IAAI,QAAA,KAAa,QAAW,OAAO,QAAA;AACnC,QAAA,OAAO;AAAA,UACL,EAAA,EAAI,KAAA;AAAA,UACJ,OAAO,0BAAA,CAA2B,UAAA,CAAW,EAAA,EAAI,YAAA,CAAa,WAAW,KAAK;AAAA,SAChF;AAAA,MACF,CAAA;AAAA,MACA,UAAU,OAAO,iBAAA,EAAmB,SAAA,EAAW,YAAA,GAAe,EAAC,KAAM;AACnE,QAAA,IAAI,eAAA,EAAiB;AACnB,UAAA,OAAO;AAAA,YACL,OAAA,EAAS,QAAA;AAAA,YACT,OAAA,EAAS,aAAA,CAAc,KAAA,EAAO,QAAQ,CAAA;AAAA,YACtC,WAAW;AAAC,WACd;AAAA,QACF;AACA,QAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,iBAAA,EAAmB,SAAA,EAAW;AAAA,UACzD,GAAG,YAAA;AAAA,UACH,QAAQ,UAAA,CAAW,MAAA;AAAA,UACnB,GAAI,YAAA,CAAa,kBAAA,KAAuB,MAAA,IACxC,OAAA,CAAQ,kBAAA,KAAuB,MAAA,GAC3B,EAAE,kBAAA,EAAoB,OAAA,CAAQ,kBAAA,EAAmB,GACjD,EAAC;AAAA,UACL,GAAI,QAAQ,QAAA,KAAa,MAAA,GAAY,EAAC,GAAI,EAAE,QAAA,EAAU,OAAA,CAAQ,QAAA;AAAS,SACxE,CAAA;AACD,QAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,UACX,IAAA,EAAM,eAAA;AAAA,UACN,KAAA;AAAA,UACA,YAAY,QAAA,CAAS,EAAA;AAAA,UACrB,IAAA,EAAM,YAAY,GAAA;AAAI,SACvB,CAAA;AACD,QAAA,KAAA,CAAM,QAAA,CAAS,CAAA,MAAA,EAAS,QAAA,CAAS,EAAE,IAAI,MAAM;AAC3C,UAAA,QAAA,CAAS,OAAO,iBAAiB,CAAA;AAAA,QACnC,CAAC,CAAA;AACD,QAAA,OAAO,QAAA,CAAS,QAAA;AAAA,MAClB;AAAA,KACF;AAEA,IAAA,MAAM,IAAA,GAAO,CAAC,OAAA,KAAoC;AAChD,MAAA,KAAK,MAAA,CAAO,EAAE,OAAA,EAAS,QAAA,EAAU,SAAS,SAAA,EAAW,IAAI,CAAA;AAAA,IAC3D,CAAA;AAEA,IAAA,MAAM,MAAA,GAAS,CAAC,MAAA,GAAS,qBAAA,KAAgC;AACvD,MAAA,YAAA,GAAe,MAAA;AACf,MAAA,KAAK,MAAA;AAAA,QACH,EAAE,SAAS,QAAA,EAAU,OAAA,EAAS,kBAAkB,MAAM,CAAA,EAAG,SAAA,EAAW,EAAC,EAAE;AAAA,QACvE;AAAA,OACF;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,UAAA,GAAa,CAAC,SAAA,GAAY,gBAAA,KAA2B;AACzD,MAAA,KAAK,MAAA;AAAA,QACH,EAAE,SAAS,QAAA,EAAU,OAAA,EAAS,kBAAkB,SAAS,CAAA,EAAG,SAAA,EAAW,EAAC,EAAE;AAAA,QAC1E;AAAA,OACF;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,YAAA,GAAe,CAAC,QAAA,GAAW,UAAA,KAAqB;AACpD,MAAA,KAAK,MAAA;AAAA,QACH;AAAA,UACE,OAAA,EAAS,QAAA;AAAA,UACT,OAAA,EAAS,kBAAA;AAAA,YACP,eAAA;AAAA,YACA,6CAAA;AAAA,YACA,8DAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,WAAW;AAAC,SACd;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,OAAA,GACJ,OAAA,CAAQ,UAAA,KAAe,MAAA,GACnB,MAAA,GACA,UAAA;AAAA,MACE,MACE,KAAK,MAAA;AAAA,QACH;AAAA,UACE,OAAA,EAAS,QAAA;AAAA,UACT,OAAA,EAAS,YAAA,CAAa,OAAA,CAAQ,UAAoB,CAAA;AAAA,UAClD,WAAW;AAAC,SACd;AAAA,QACA;AAAA,OACF;AAAA,MACF,OAAA,CAAQ;AAAA,KACV;AAEN,IAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,SAAA,EAAW,OAAO,IAAA,EAAM,WAAA,CAAY,GAAA,EAAI,EAAG,CAAA;AAChE,IAAA,KAAA,CAAM,YAAY;AAChB,MAAA,MAAM,UAAA,GAAa,YAAA,CAAa,UAAA,CAAW,UAAA,CAAW,MAAM,IAAI,CAAA;AAChE,MAAA,IAAI,CAAC,WAAW,EAAA,EAAI;AAClB,QAAA,IAAA,CAAK,iBAAiB,UAAA,CAAW,KAAA,EAAO,mBAAA,CAAoB,IAAI,CAAC,CAAC,CAAA;AAClE,QAAA;AAAA,MACF;AACA,MAAA,IAAI;AACF,QAAA,IAAI,OAAA,CAAQ,QAAQ,OAAA,EAAS;AAC3B,UAAA,YAAA,GAAe,mBAAA;AACf,UAAA,IAAA,CAAK,iBAAA,CAAkB,YAAY,CAAC,CAAA;AACpC,UAAA;AAAA,QACF;AACA,QAAA,MAAM,OAAA,GAAU,MAAY,MAAA,CAAO,mBAAmB,CAAA;AACtD,QAAA,OAAA,CAAQ,QAAQ,gBAAA,CAAiB,OAAA,EAAS,SAAS,EAAE,IAAA,EAAM,MAAM,CAAA;AACjE,QAAA,IAAI,QAAA;AACJ,QAAA,MAAM,qBAAqB,eAAA,EAAgB;AAC3C,QAAA,IAAI;AACF,UAAA,QAAA,GAAW,MAAM,YAAA,CAAa,OAAA,CAAQ,UAAA,CAAW,OAAO,OAAO,CAAA;AAAA,QACjE,CAAA,SAAE;AACA,UAAA,eAAA,CAAgB,MAAA,CAAO,WAAW,IAAA,CAAK,GAAA,CAAI,GAAG,eAAA,EAAgB,GAAI,kBAAkB,CAAC,CAAA;AACrF,UAAA,OAAA,CAAQ,MAAA,EAAQ,mBAAA,CAAoB,OAAA,EAAS,OAAO,CAAA;AAAA,QACtD;AACA,QAAA,IAAI,eAAA,EAAiB;AACrB,QAAA,IAAI,UAAA,CAAW,OAAO,OAAA,EAAS;AAC7B,UAAA,IAAA,CAAK,iBAAA,CAAkB,YAAY,CAAC,CAAA;AACpC,UAAA;AAAA,QACF;AACA,QAAA,IAAI,MAAA,GAAkB,QAAA;AACtB,QAAA,IAAI,gBAAgB,OAAA,CAAQ,QAAA;AAC5B,QAAA,IAAI,YAAyD,EAAC;AAC9D,QAAA,IAAI,UAAA,CAAoB,QAAQ,CAAA,EAAG;AACjC,UAAA,IAAI,QAAA,CAAS,YAAY,QAAA,EAAU;AACjC,YAAA,MAAM,OAAO,QAAQ,CAAA;AACrB,YAAA;AAAA,UACF;AACA,UAAA,MAAA,GAAS,QAAA,CAAS,MAAA;AAClB,UAAA,aAAA,GAAgB,QAAA,CAAS,aAAA;AACzB,UAAA,SAAA,GAAY,QAAA,CAAS,SAAA;AACrB,UAAA,aAAA,GAAgB,SAAS,OAAA,IAAW,aAAA;AAAA,QACtC,CAAA,MAAA,IAAW,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC/B,UAAA,IAAI,QAAA,CAAS,OAAO,KAAA,EAAO;AACzB,YAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,QAAA,EAAU,OAAO,CAAA;AAC3C,YAAA,IAAI,kBAAA,CAAmB,KAAK,CAAA,EAAG;AAC7B,cAAA,MAAM,MAAA,CAAO,EAAE,OAAA,EAAS,QAAA,EAAU,SAAS,KAAA,EAAO,SAAA,EAAW,EAAC,EAAG,CAAA;AACjE,cAAA;AAAA,YACF;AACA,YAAA,MAAM,MAAA,CAAO;AAAA,cACX,OAAA,EAAS,QAAA;AAAA,cACT,OAAA,EAAS,YAAY,KAA0B,CAAA;AAAA,cAC/C,WAAW;AAAC,aACb,CAAA;AACD,YAAA;AAAA,UACF;AACA,UAAA,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,QAAA,EAAU,OAAO,CAAA;AACtC,UAAA,aAAA,GAAgB,OAAA,CAAQ,GAAA,CAAI,QAAA,EAAU,eAAe,CAAA;AACrD,UAAA,SAAA,GAAY,OAAA,CAAQ,GAAA,CAAI,QAAA,EAAU,WAAW,KAAK,EAAC;AAAA,QACrD;AACA,QAAA,IAAI,CAAC,mBAAA,CAAoB,MAAM,CAAA,EAAG;AAChC,UAAA,MAAM,MAAA,CAAO;AAAA,YACX,OAAA,EAAS,QAAA;AAAA,YACT,OAAA,EAAS,kBAAA;AAAA,cACP,2BAAA;AAAA,cACA,oCAAA;AAAA,cACA;AAAA,aACF;AAAA,YACA,WAAW;AAAC,WACb,CAAA;AACD,UAAA;AAAA,QACF;AACA,QAAA,MAAM,YAAA,GAAe,YAAA,CAAa,UAAA,CAAW,YAAA,CAAa,MAAM,MAAM,CAAA;AACtE,QAAA,IAAI,CAAC,aAAa,EAAA,EAAI;AACpB,UAAA,MAAM,MAAA,CAAO;AAAA,YACX,OAAA,EAAS,QAAA;AAAA,YACT,OAAA,EAAS,kBAAA;AAAA,cACP,uBAAA;AAAA,cACA,oCAAA;AAAA,cACA,YAAA,CAAa;AAAA,aACf;AAAA,YACA,WAAW;AAAC,WACb,CAAA;AACD,UAAA;AAAA,QACF;AACA,QAAA,IAAI,CAAC,oBAAA,CAAqB,SAAS,CAAA,EAAG;AACpC,UAAA,MAAM,MAAA,CAAO;AAAA,YACX,OAAA,EAAS,QAAA;AAAA,YACT,OAAA,EAAS,kBAAA;AAAA,cACP,sBAAA;AAAA,cACA,qDAAA;AAAA,cACA;AAAA,aACF;AAAA,YACA,WAAW;AAAC,WACb,CAAA;AACD,UAAA;AAAA,QACF;AACA,QAAA,MAAM,gBAAA,GAAmB;AAAA,UACvB,mBAAG,IAAI,GAAA,CAAI,CAAC,GAAI,YAAA,CAAa,UAAA,CAAW,QAAA,IAAY,IAAK,GAAI,OAAA,CAAQ,QAAA,IAAY,EAAG,CAAC;AAAA,SACvF;AACA,QAAA,MAAM,kBAAkB,gBAAA,CAAiB,MAAA;AAAA,UACvC,CAAC,SAAS,CAAC,SAAA,CAAU,KAAK,CAAC,QAAA,KAAa,QAAA,CAAS,IAAA,KAAS,IAAI;AAAA,SAChE;AACA,QAAA,IAAI,eAAA,CAAgB,SAAS,CAAA,EAAG;AAC9B,UAAA,MAAM,MAAA,CAAO;AAAA,YACX,OAAA,EAAS,QAAA;AAAA,YACT,OAAA,EAAS,uBAAA,CAAwB,eAAA,EAAiB,KAAK,CAAA;AAAA,YACvD;AAAA,WACD,CAAA;AACD,UAAA;AAAA,QACF;AACA,QAAA,MAAM,MAAA,CAAO;AAAA,UACX,OAAA,EAAS,WAAA;AAAA,UACT,QAAQ,YAAA,CAAa,KAAA;AAAA,UACrB,SAAA;AAAA,UACA,GAAI,aAAA,KAAkB,KAAA,CAAA,GAAY,EAAC,GAAI,EAAE,aAAA;AAAc,SACxD,CAAA;AAAA,MACH,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,MAAA,CAAO;AAAA,UACX,OAAA,EAAS,QAAA;AAAA,UACT,OAAA,EAAS,kBAAA;AAAA,YACP,gBAAA;AAAA,YACA,8CAAA;AAAA,YACA,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,WACvD;AAAA,UACA,WAAW;AAAC,SACb,CAAA;AAAA,MACH,CAAA,SAAE;AACA,QAAA,IAAI,OAAA,KAAY,MAAA,EAAW,YAAA,CAAa,OAAO,CAAA;AAAA,MACjD;AAAA,IACF,CAAA,GAAG;AAEH,IAAA,MAAM,UAAA,GAA+B;AAAA,MACnC,EAAA,EAAI,KAAA;AAAA,MACJ,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,QAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,OAAO,UAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,OAAA,GAAuB;AAAA,IAC3B,IAAA;AAAA,IACA,UAAU,CAAC,EAAA,KAAO,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG,UAAA;AAAA,IAChC,GAAA,EAAK,CAAC,EAAA,KAAO,IAAA,CAAK,IAAI,EAAE,CAAA;AAAA,IACxB;AAAA,GACF;AACA,EAAA,OAAO,OAAA;AACT;;;ACneO,SAAS,iBACd,QAAA,EACyB;AACzB,EAAA,OAAO,QAAA,CAAS,aAAA;AAClB;AAEO,SAAS,cAAc,KAAA,EAAsC;AAClE,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,KAAA,KAAU,IAAA,IACV,MAAA,CAAO,aAAA,CAAc,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,UAAU,CAAC,KACnD,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,UAAU,CAAA,IAAK,CAAA,IAClC,OAAO,OAAA,CAAQ,IAAI,KAAA,EAAO,QAAQ,CAAA,KAAM,QAAA,IACxC,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,QAAQ,EAAE,MAAA,GAAS,CAAA;AAE1C;;;AC0BO,IAAM,qBAAA,GAAN,cAAoC,KAAA,CAAM;AAAA,EACtC,IAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EAET,YAAY,KAAA,EAKT;AACD,IAAA,KAAA,CAAM,MAAM,IAAI,CAAA;AAChB,IAAA,IAAA,CAAK,IAAA,GAAO,uBAAA;AACZ,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,IAAA;AAClB,IAAA,IAAI,KAAA,CAAM,QAAA,KAAa,MAAA,EAAW,IAAA,CAAK,WAAW,KAAA,CAAM,QAAA;AACxD,IAAA,IAAI,KAAA,CAAM,IAAA,KAAS,MAAA,EAAW,IAAA,CAAK,OAAO,KAAA,CAAM,IAAA;AAChD,IAAA,IAAI,KAAA,CAAM,MAAA,KAAW,MAAA,EAAW,IAAA,CAAK,SAAS,KAAA,CAAM,MAAA;AAAA,EACtD;AACF;AAEO,SAAS,oCACd,OAAA,EAC+B;AAC/B,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,OAAA,CAAQ,QAAQ,CAAA;AACpC,EAAA,IAAI,GAAA,CAAI,QAAA,KAAa,OAAA,IAAW,CAAC,CAAC,aAAa,WAAW,CAAA,CAAE,QAAA,CAAS,GAAA,CAAI,QAAQ,CAAA;AAC/E,IAAA,MAAM,IAAI,UAAU,kDAAkD,CAAA;AACxE,EAAA,IAAI,QAAQ,WAAA,CAAY,MAAA,GAAS,GAAG,MAAM,IAAI,UAAU,mCAAmC,CAAA;AAC3F,EAAA,IAAI,SAAA,GAAY,IAAA;AAChB,EAAA,eAAe,OAAA,CAAW,MAAc,OAAA,EAA8B;AACpE,IAAA,IAAI,CAAC,SAAA;AACH,MAAA,MAAM,IAAI,qBAAA,CAAsB;AAAA,QAC9B,IAAA,EAAM,gBAAA;AAAA,QACN,QAAA,EAAU,+BAAA;AAAA,QACV,IAAA,EAAM;AAAA,OACP,CAAA;AACH,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI;AACF,MAAA,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,QAAQ,QAAQ,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI;AAAA,QACnD,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,aAAA,EAAe,CAAA,OAAA,EAAU,OAAA,CAAQ,WAAW,CAAA,CAAA;AAAA,UAC5C,cAAA,EAAgB;AAAA,SAClB;AAAA,QACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,OAC7B,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,qBAAA,CAAsB;AAAA,QAC9B,IAAA,EAAM,uBAAA;AAAA,QACN,QAAA,EAAU,0CAAA;AAAA,QACV,IAAA,EAAM,uDAAA;AAAA,QACN,MAAA,EAAQ,EAAE,KAAA,EAAO,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAA;AAAE,OACzE,CAAA;AAAA,IACH;AACA,IAAA,MAAM,KAAA,GAAiB,MAAM,QAAA,CAAS,IAAA,GAAO,KAAA,CAAM,OAAO,EAAC,CAAE,CAAA;AAC7D,IAAA,IACE,CAAC,QAAA,CAAS,EAAA,IACV,OAAO,KAAA,KAAU,QAAA,IACjB,KAAA,KAAU,IAAA,IACV,EAAE,IAAA,IAAQ,KAAA,CAAA,IACV,KAAA,CAAM,OAAO,IAAA,EACb;AACA,MAAA,MAAM,QACJ,OAAO,KAAA,KAAU,QAAA,IACjB,KAAA,KAAU,QACV,OAAA,IAAW,KAAA,IACX,OAAO,KAAA,CAAM,UAAU,QAAA,IACvB,KAAA,CAAM,KAAA,KAAU,IAAA,GACX,MAAM,KAAA,GACP;AAAA,QACE,IAAA,EAAM,uBAAA;AAAA,QACN,QAAA,EAAU,+BAAA;AAAA,QACV,IAAA,EAAM;AAAA,OACR;AACN,MAAA,MAAM,UAAA,GAAa;AAAA,QACjB,MAAM,OAAO,KAAA,CAAM,IAAA,KAAS,QAAA,GAAW,MAAM,IAAA,GAAO,uBAAA;AAAA,QACpD,GAAI,OAAO,KAAA,CAAM,QAAA,KAAa,QAAA,GAAW,EAAE,QAAA,EAAU,KAAA,CAAM,QAAA,EAAS,GAAI,EAAC;AAAA,QACzE,GAAI,OAAO,KAAA,CAAM,IAAA,KAAS,QAAA,GAAW,EAAE,IAAA,EAAM,KAAA,CAAM,IAAA,EAAK,GAAI,EAAC;AAAA,QAC7D,GAAI,OAAO,KAAA,CAAM,MAAA,KAAW,QAAA,IAAY,KAAA,CAAM,MAAA,KAAW,IAAA,GACrD,EAAE,MAAA,EAAQ,KAAA,CAAM,MAAA,KAChB;AAAC,OACP;AACA,MAAA,MAAM,IAAI,sBAAsB,UAAU,CAAA;AAAA,IAC5C;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO;AAAA,IACL,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,IAAI,SAAA,GAAY;AACd,MAAA,OAAO,SAAA;AAAA,IACT,CAAA;AAAA,IACA,KAAA,EAAO,CAAC,OAAA,KAAY,OAAA,CAAQ,UAAU,OAAO,CAAA;AAAA,IAC7C,OAAA,EAAS,CAAC,OAAA,KAAY,OAAA,CAAQ,UAAU,OAAO,CAAA;AAAA,IAC/C,OAAA,EAAS,CAAC,OAAA,KAAY,OAAA,CAAQ,YAAY,OAAO,CAAA;AAAA,IACjD,IAAA,EAAM,CAAC,OAAA,KAAY,OAAA,CAAQ,SAAS,OAAO,CAAA;AAAA,IAC3C,KAAA,GAAQ;AACN,MAAA,SAAA,GAAY,KAAA;AAAA,IACd;AAAA,GACF;AACF;AAGO,SAAS,wBAAwB,QAAA,EAAoC;AAC1E,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,QAAQ,CAAA;AAC5B,EAAA,IAAI,GAAA,CAAI,QAAA,KAAa,OAAA,IAAW,CAAC,CAAC,WAAA,EAAa,WAAW,CAAA,CAAE,QAAA,CAAS,GAAA,CAAI,QAAQ,CAAA,EAAG;AAClF,IAAA,MAAM,IAAI,UAAU,kDAAkD,CAAA;AAAA,EACxE;AACA,EAAA,IAAI,SAAA,GAAY,IAAA;AAChB,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA,IAAI,SAAA,GAAY;AACd,MAAA,OAAO,SAAA;AAAA,IACT,CAAA;AAAA,IACA,KAAK,OAAA,EAAS;AACZ,MAAA,IAAI,CAAC,SAAA,IAAa,CAAC,8BAA8B,OAAO,CAAA,CAAE,IAAI,OAAO,KAAA;AACrE,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,KAAA,GAAQ;AACN,MAAA,SAAA,GAAY,KAAA;AAAA,IACd;AAAA,GACF;AACF;AA4BO,SAAS,qCACd,OAAA,EACgC;AAChC,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,OAAA,CAAQ,QAAQ,CAAA;AACpC,EAAA,IAAI,GAAA,CAAI,QAAA,KAAa,OAAA,IAAW,CAAC,CAAC,WAAA,EAAa,WAAW,CAAA,CAAE,QAAA,CAAS,GAAA,CAAI,QAAQ,CAAA,EAAG;AAClF,IAAA,MAAM,IAAI,UAAU,kDAAkD,CAAA;AAAA,EACxE;AACA,EAAA,IAAI,QAAQ,WAAA,CAAY,MAAA,GAAS,GAAG,MAAM,IAAI,UAAU,mCAAmC,CAAA;AAC3F,EAAA,IAAI,SAAA,GAAY,IAAA;AAChB,EAAA,OAAO;AAAA,IACL,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,IAAI,SAAA,GAAY;AACd,MAAA,OAAO,SAAA;AAAA,IACT,CAAA;AAAA,IACA,MAAM,OAAA,CAAQ,OAAA,EAAS,WAAA,EAAa,cAAA,GAAiB,EAAC,EAAG;AACvD,MAAA,IAAI,CAAC,SAAA,EAAW,MAAM,IAAI,MAAM,mCAAmC,CAAA;AACnE,MAAA,IAAI,gBAAgB,OAAA,CAAQ,WAAA,EAAa,MAAM,IAAI,MAAM,+BAA+B,CAAA;AACxF,MAAA,IAAI,CAAC,6BAAA,CAA8B,OAAO,CAAA,CAAE,EAAA,EAAI;AAC9C,QAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAAA,MAChE;AACA,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,QAAA,EAAU;AAAA,QAC7C,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,aAAA,EAAe,UAAU,WAAW,CAAA,CAAA;AAAA,UACpC,cAAA,EAAgB;AAAA,SAClB;AAAA,QACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AAAA,QAC5B,GAAI,eAAe,MAAA,KAAW,MAAA,GAAY,EAAC,GAAI,EAAE,MAAA,EAAQ,cAAA,CAAe,MAAA;AAAO,OAChF,CAAA;AACD,MAAA,MAAM,OAAA,GAAmB,MAAM,QAAA,CAAS,IAAA,EAAK;AAC7C,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,MAAA,GACJ,OAAO,OAAA,KAAY,QAAA,IAAY,YAAY,IAAA,IAAQ,OAAA,IAAW,OAAA,GAC1D,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,GACpB,CAAA,KAAA,EAAQ,SAAS,MAAM,CAAA,CAAA;AAC7B,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,MAAM,CAAA,CAAE,CAAA;AAAA,MACrD;AACA,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,KAAA,GAAQ;AACN,MAAA,SAAA,GAAY,KAAA;AAAA,IACd;AAAA,GACF;AACF","file":"index.mjs","sourcesContent":["import type { JsonValue, ToolEvidenceKind, ToolRealm, ToolRuntimeError } from './types.js';\n\nexport function invalidArgsError(message: string, value: JsonValue): ToolRuntimeError {\n return {\n code: 'tool-invalid-args',\n expected: 'arguments accepted by the contribution argsSchema',\n hint: 'Read the descriptor schema and retry with typed arguments.',\n detail: { message, value },\n };\n}\n\nexport function capabilityUnavailableError(capability: string, realm: ToolRealm): ToolRuntimeError {\n return {\n code: 'tool-capability-unavailable',\n expected: `capability ${capability} in realm ${realm}`,\n hint: 'Inspect the capability matrix and select an available realm or path.',\n detail: { capability, realm },\n };\n}\n\nexport function snapshotStaleError(expectedDigest: string, actualDigest: string): ToolRuntimeError {\n return {\n code: 'tool-snapshot-stale',\n expected: 'the supplied snapshot to match the current authority',\n hint: 'Refresh the authority snapshot and retry the write.',\n detail: { expectedDigest, actualDigest },\n };\n}\n\nexport function domainFailureError(\n code: string,\n expected = 'the producer operation to succeed',\n hint = 'Inspect detail and repair the owning producer before retrying.',\n payload?: JsonValue,\n): ToolRuntimeError {\n return {\n code: 'tool-domain-failed',\n expected,\n hint,\n detail: { code, ...(payload === undefined ? {} : { payload }) },\n };\n}\n\nexport function artifactIncompleteError(\n missing: readonly ToolEvidenceKind[],\n runId: string,\n): ToolRuntimeError {\n return {\n code: 'tool-artifact-incomplete',\n expected: 'the requested evidence artifacts to be produced by their owners',\n hint: 'Request only supported evidence and inspect the artifact manifest before retrying.',\n detail: { missing: [...missing], runId },\n };\n}\n\nexport function cancellationError(reason: string): ToolRuntimeError {\n return {\n code: 'tool-run-cancelled',\n expected: 'the tool run not to be cancelled',\n hint: 'Retry the command after resolving the cancellation source.',\n detail: { reason },\n };\n}\n\nexport function timeoutError(deadlineMs: number): ToolRuntimeError {\n return {\n code: 'tool-run-timeout',\n expected: `the tool run to complete within ${deadlineMs}ms`,\n hint: 'Increase the deadline only when the operation is expected to be bounded.',\n detail: { deadlineMs },\n };\n}\n\nexport function disconnectedError(transport: string): ToolRuntimeError {\n return {\n code: 'tool-run-disconnected',\n expected: 'the tool transport to remain connected',\n hint: 'Reconnect the transport and retry from the last serialized snapshot.',\n detail: { transport },\n };\n}\n\nexport function terminalError(runId: string, outcome: 'succeeded' | 'failed'): ToolRuntimeError {\n return {\n code: 'tool-run-terminal',\n expected: 'a non-terminal ToolRun',\n hint: 'Use the existing terminal and do not attach another executor.',\n detail: { runId, outcome },\n };\n}\n\nexport function cleanupError(runId: string, message: string): ToolRuntimeError {\n return {\n code: 'tool-cleanup-failed',\n expected: 'all ToolRun cleanup callbacks to complete',\n hint: 'Inspect the cleanup detail and release the owning resource.',\n detail: { runId, message },\n };\n}\n\nexport function artifactManifestError(\n expected: string,\n hint: string,\n detail: { readonly reason: string; readonly runId?: string },\n): ToolRuntimeError {\n return { code: 'tool-artifact-manifest-invalid', expected, hint, detail };\n}\n\nexport function timingError(reason: string): ToolRuntimeError {\n return {\n code: 'tool-timing-invalid',\n expected: 'exclusive timing phases to be opened and closed once without overlap',\n hint: 'close the current phase before starting the next phase and finish only after all phases close',\n detail: { reason },\n };\n}\n","import { artifactManifestError } from './errors.js';\nimport type { ArtifactRef, JsonValue, SnapshotRef, ToolEvidenceKind } from './types.js';\n\nexport type PreviewArtifactRole =\n | 'report'\n | 'rhi-tape'\n | 'capture'\n | 'fresh-replay'\n | 'profile-capture'\n | 'contact-sheet';\n\nexport type PreviewArtifactKind =\n | 'report'\n | 'rhi-tape'\n | 'png'\n | 'profile-capture'\n | 'contact-sheet';\n\nexport interface PreviewArtifactIdentity {\n readonly runId: string;\n readonly snapshotDigest: string;\n readonly subjectDigest: string;\n readonly presentationDigest: string;\n readonly captureId: string;\n readonly frameId: number;\n}\n\nexport interface PreviewArtifactManifestEntry {\n readonly owner: string;\n readonly kind: PreviewArtifactKind;\n readonly role: PreviewArtifactRole;\n readonly uri: string;\n readonly digest: string;\n readonly byteLength: number;\n readonly mediaType: string;\n readonly derivedFrom: readonly string[];\n}\n\nexport interface PreviewArtifactManifest {\n readonly schemaVersion: '2.0.0';\n readonly identity: PreviewArtifactIdentity;\n readonly artifacts: readonly PreviewArtifactManifestEntry[];\n}\n\nexport type PreviewArtifactManifestValidation =\n | { readonly ok: true; readonly value: PreviewArtifactManifest }\n | { readonly ok: false; readonly error: ReturnType<typeof artifactManifestError> };\n\nexport interface ToolArtifactIdentity {\n readonly runId: string;\n readonly snapshotDigest: string;\n readonly stepId: string;\n readonly frameId: number;\n readonly captureId: string;\n}\n\nexport interface ToolArtifactManifestEntry {\n readonly owner: string;\n readonly kind: ToolEvidenceKind;\n readonly uri: string;\n readonly digest: string;\n readonly byteLength: number;\n readonly mediaType?: string;\n readonly derivedFrom?: readonly string[];\n}\n\nexport interface ToolArtifactManifest {\n readonly schemaVersion: '1.0.0';\n readonly identity: ToolArtifactIdentity;\n readonly artifacts: readonly ToolArtifactManifestEntry[];\n}\n\nexport type ArtifactManifestValidation =\n | { readonly ok: true; readonly value: ToolArtifactManifest }\n | { readonly ok: false; readonly error: ReturnType<typeof artifactManifestError> };\n\nexport function createArtifactManifest(manifest: ToolArtifactManifest): ToolArtifactManifest {\n const result = validateArtifactManifest(manifest, []);\n if (!result.ok) throw new TypeError('artifact manifest is invalid');\n return {\n schemaVersion: '1.0.0',\n identity: { ...manifest.identity },\n artifacts: manifest.artifacts.map((artifact) => ({ ...artifact })),\n };\n}\n\nexport function validateArtifactManifest(\n manifest: ToolArtifactManifest,\n required: readonly ToolEvidenceKind[],\n): ArtifactManifestValidation {\n const fail = (reason: string, expected: string): ArtifactManifestValidation => ({\n ok: false,\n error: artifactManifestError(\n expected,\n 'regenerate the complete manifest from the owning producers',\n {\n reason,\n ...(typeof manifest?.identity?.runId === 'string'\n ? { runId: manifest.identity.runId }\n : {}),\n },\n ),\n });\n if (manifest?.schemaVersion !== '1.0.0')\n return fail('unsupported schemaVersion', 'schemaVersion === \"1.0.0\"');\n const identity = manifest.identity;\n if (\n identity === undefined ||\n identity.runId.length === 0 ||\n identity.snapshotDigest.length === 0 ||\n identity.stepId.length === 0 ||\n identity.captureId.length === 0 ||\n !Number.isSafeInteger(identity.frameId) ||\n identity.frameId < 0\n )\n return fail(\n 'identity is incomplete',\n 'runId/snapshotDigest/stepId/captureId and non-negative frameId',\n );\n const seen = new Set<ToolEvidenceKind>();\n for (const artifact of manifest.artifacts) {\n if (\n artifact.owner.length === 0 ||\n artifact.uri.length === 0 ||\n artifact.digest.length === 0 ||\n !Number.isSafeInteger(artifact.byteLength) ||\n artifact.byteLength < 0\n )\n return fail(\n `invalid ${artifact.kind} artifact entry`,\n 'owner/uri/digest and byteLength are complete',\n );\n if (seen.has(artifact.kind))\n return fail(\n `duplicate artifact kind '${artifact.kind}'`,\n 'one owner entry per evidence kind',\n );\n seen.add(artifact.kind);\n }\n for (const kind of required)\n if (!seen.has(kind))\n return fail(\n `missing artifact kind '${kind}'`,\n `manifest includes requested '${kind}' evidence`,\n );\n return { ok: true, value: manifest };\n}\n\nconst PREVIEW_ROLE_KINDS: Readonly<Record<PreviewArtifactRole, PreviewArtifactKind>> = {\n report: 'report',\n 'rhi-tape': 'rhi-tape',\n capture: 'png',\n 'fresh-replay': 'png',\n 'profile-capture': 'profile-capture',\n 'contact-sheet': 'contact-sheet',\n};\n\nexport function createPreviewArtifactManifest(\n manifest: PreviewArtifactManifest,\n): PreviewArtifactManifest {\n const result = validatePreviewArtifactManifest(manifest, []);\n if (!result.ok) throw new TypeError('preview artifact manifest is invalid');\n return {\n schemaVersion: '2.0.0',\n identity: { ...manifest.identity },\n artifacts: manifest.artifacts.map((artifact) => ({\n ...artifact,\n derivedFrom: [...artifact.derivedFrom],\n })),\n };\n}\n\nexport function validatePreviewArtifactManifest(\n manifest: PreviewArtifactManifest,\n requiredRoles: readonly PreviewArtifactRole[],\n): PreviewArtifactManifestValidation {\n const fail = (reason: string): PreviewArtifactManifestValidation => ({\n ok: false,\n error: artifactManifestError(\n 'schemaVersion 2.0.0 with one complete identity and role per artifact',\n 'regenerate the staged report and evidence from one lexical ToolRun',\n {\n reason,\n ...(typeof manifest?.identity?.runId === 'string'\n ? { runId: manifest.identity.runId }\n : {}),\n },\n ),\n });\n if (manifest?.schemaVersion !== '2.0.0') return fail('v1 manifest or unsupported schemaVersion');\n const identity = manifest.identity;\n if (\n identity === undefined ||\n [\n identity.runId,\n identity.snapshotDigest,\n identity.subjectDigest,\n identity.presentationDigest,\n identity.captureId,\n ].some((value) => typeof value !== 'string' || value.length === 0) ||\n !Number.isSafeInteger(identity.frameId) ||\n identity.frameId < 0\n ) {\n return fail('identity is incomplete or stale');\n }\n const seenRoles = new Set<PreviewArtifactRole>();\n const digests = new Set<string>();\n for (const artifact of manifest.artifacts) {\n if (seenRoles.has(artifact.role)) return fail(`duplicate role '${artifact.role}'`);\n if (PREVIEW_ROLE_KINDS[artifact.role] !== artifact.kind) {\n return fail(`role '${artifact.role}' does not match kind '${artifact.kind}'`);\n }\n if (\n artifact.owner.length === 0 ||\n artifact.uri.length === 0 ||\n artifact.digest.length === 0 ||\n artifact.mediaType.length === 0 ||\n !Number.isSafeInteger(artifact.byteLength) ||\n artifact.byteLength < 0 ||\n artifact.derivedFrom.some((digest) => digest.length === 0)\n ) {\n return fail(`incomplete '${artifact.role}' artifact`);\n }\n seenRoles.add(artifact.role);\n digests.add(artifact.digest);\n }\n for (const artifact of manifest.artifacts) {\n if (artifact.derivedFrom.some((digest) => !digests.has(digest))) {\n return fail(`'${artifact.role}' derivedFrom references an unpublished artifact`);\n }\n }\n for (const role of requiredRoles) {\n if (!seenRoles.has(role)) return fail(`missing required role '${role}'`);\n }\n return { ok: true, value: manifest };\n}\n\nexport function isSerializableValue(value: unknown, seen = new Set<object>()): value is JsonValue {\n if (value === null || typeof value === 'string' || typeof value === 'boolean') return true;\n if (typeof value === 'number') return Number.isFinite(value);\n if (typeof value !== 'object') return false;\n if (seen.has(value)) return false;\n seen.add(value);\n if (Array.isArray(value)) return value.every((entry) => isSerializableValue(entry, seen));\n if (Object.getPrototypeOf(value) !== Object.prototype) return false;\n return Object.entries(value).every(\n ([key, entry]) => typeof key === 'string' && isSerializableValue(entry, seen),\n );\n}\n\nexport function createArtifactRef(input: {\n readonly kind: ToolEvidenceKind | 'tool-result' | 'receipt';\n readonly digest: string;\n readonly uri?: string;\n readonly mediaType?: string;\n readonly sizeBytes?: number;\n}): ArtifactRef {\n if (input.digest.length === 0) throw new TypeError('ArtifactRef digest must not be empty');\n if (\n input.sizeBytes !== undefined &&\n (!Number.isSafeInteger(input.sizeBytes) || input.sizeBytes < 0)\n ) {\n throw new TypeError('ArtifactRef sizeBytes must be a non-negative safe integer');\n }\n return { ...input };\n}\n\nexport function createSnapshotRef(input: SnapshotRef): SnapshotRef {\n if (!Number.isSafeInteger(input.revision) || input.revision < 0) {\n throw new TypeError('SnapshotRef revision must be a non-negative safe integer');\n }\n if (input.digest.length === 0) throw new TypeError('SnapshotRef digest must not be empty');\n return { revision: input.revision, digest: input.digest };\n}\n\nexport function validateArtifactRefs(value: unknown): value is readonly ArtifactRef[] {\n return (\n Array.isArray(value) &&\n value.every(\n (entry) =>\n typeof entry === 'object' &&\n entry !== null &&\n typeof Reflect.get(entry, 'kind') === 'string' &&\n typeof Reflect.get(entry, 'digest') === 'string' &&\n (Reflect.get(entry, 'uri') === undefined || typeof Reflect.get(entry, 'uri') === 'string'),\n )\n );\n}\n","import type {\n ToolCapability,\n ToolCapabilityResolver,\n ToolRealm,\n ToolRuntimeError,\n} from './types.js';\n\nconst capabilityIdPattern = /^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/;\n\n/** A static service identity. The value and its lifecycle remain Fiber-local. */\nexport function defineToolCapability<T>(id: string): ToolCapability<T> {\n if (!capabilityIdPattern.test(id)) {\n throw new TypeError(`Tool capability id must use a stable lower-case path: ${id}`);\n }\n return Object.freeze({ id }) as ToolCapability<T>;\n}\n\nexport function createCapabilityResolver(\n resolve: <T>(capability: ToolCapability<T>) => T | undefined,\n): ToolCapabilityResolver {\n return <T>(capability: ToolCapability<T>) => {\n const value = resolve(capability);\n return value === undefined ? undefined : { ok: true as const, value };\n };\n}\n\nexport interface ServiceAdmissionRef {\n readonly schema: 'forgeax.tool-service-admission-ref.v1';\n readonly reportDigest: string;\n readonly toolId: string;\n readonly descriptorDigest: string;\n readonly recipeDigest: string;\n readonly workloadClass: string;\n readonly codeDigest: string;\n readonly browserVersion: string;\n readonly backend: 'webgpu';\n readonly frameCount: number;\n readonly samples: {\n readonly privateCold: number;\n readonly privateWarm: number;\n readonly serviceCold: number;\n readonly serviceWarm: number;\n };\n readonly correctness: {\n readonly terminalEquivalent: boolean;\n readonly artifactIntegrity: boolean;\n readonly freshReplay: boolean;\n readonly hiddenParity: boolean;\n readonly drawCalls: number;\n readonly nonBlackPixels: number;\n };\n readonly performance: {\n readonly privateMedianMs: number;\n readonly privateP95Ms: number;\n readonly privateMaxMs: number;\n readonly privateRssBytes: number;\n readonly serviceMedianMs: number;\n readonly serviceP95Ms: number;\n readonly serviceMaxMs: number;\n readonly serviceRssBytes: number;\n };\n readonly cleanupPassed: boolean;\n readonly evictionPassed: boolean;\n}\n\nexport interface ServiceAdmissionExpectation {\n readonly toolId: string;\n readonly descriptorDigest: string;\n readonly recipeDigest: string;\n readonly workloadClass: string;\n readonly codeDigest: string;\n readonly browserVersion: string;\n readonly backend: 'webgpu';\n}\n\nexport type ServiceCapability =\n | { readonly available: true; readonly reportDigest?: string }\n | {\n readonly available: false;\n readonly code: 'tool-service-capability-absent';\n readonly expected: 'an admitted acceleration service';\n readonly hint: 'Use the private executor and rerun benchmark admission before enabling service.';\n readonly detail: { readonly reason: string };\n };\n\nfunction admissionFailure(\n admission: ServiceAdmissionRef | undefined,\n expected: ServiceAdmissionExpectation,\n): string | undefined {\n if (admission === undefined) return 'no workload-scoped admission report was supplied';\n if (\n admission.schema !== 'forgeax.tool-service-admission-ref.v1' ||\n !/^sha256:[0-9a-f]{64}$/.test(admission.reportDigest)\n ) {\n return 'admission report identity is invalid';\n }\n for (const key of [\n 'toolId',\n 'descriptorDigest',\n 'recipeDigest',\n 'workloadClass',\n 'codeDigest',\n 'browserVersion',\n 'backend',\n ] as const) {\n if (admission[key] !== expected[key]) return `admission ${key} does not match this run`;\n }\n if (admission.frameCount < 300) return 'admission workload ran fewer than 300 frames';\n if (Object.values(admission.samples).some((count) => count < 30)) {\n return 'admission sample set is incomplete';\n }\n if (\n !admission.correctness.terminalEquivalent ||\n !admission.correctness.artifactIntegrity ||\n !admission.correctness.freshReplay ||\n !admission.correctness.hiddenParity ||\n admission.correctness.drawCalls <= 0 ||\n admission.correctness.nonBlackPixels <= 0\n ) {\n return 'admission correctness gate failed';\n }\n const performance = admission.performance;\n if (\n Object.values(performance).some((value) => !Number.isFinite(value) || value <= 0) ||\n performance.serviceMedianMs > performance.privateMedianMs * 0.8 ||\n performance.serviceP95Ms > performance.privateP95Ms * 0.9 ||\n performance.serviceMaxMs > performance.privateMaxMs * 1.1 ||\n performance.serviceRssBytes > performance.privateRssBytes * 1.25\n ) {\n return 'admission performance threshold failed';\n }\n if (!admission.cleanupPassed) return 'admission cleanup gate failed';\n if (!admission.evictionPassed) return 'admission eviction gate failed';\n return undefined;\n}\n\nexport function createServiceCapability(\n admission: ServiceAdmissionRef | undefined,\n expected: ServiceAdmissionExpectation,\n): ServiceCapability {\n const reason = admissionFailure(admission, expected);\n if (reason === undefined && admission !== undefined) {\n return { available: true, reportDigest: admission.reportDigest };\n }\n return {\n available: false,\n code: 'tool-service-capability-absent',\n expected: 'an admitted acceleration service',\n hint: 'Use the private executor and rerun benchmark admission before enabling service.',\n detail: { reason: reason ?? 'benchmark admission did not pass' },\n };\n}\n\nexport interface RealmCapability {\n readonly realm: ToolRealm;\n readonly supported: boolean;\n readonly reason?: 'realm-capability-unavailable';\n}\n\nexport interface RealmCapabilityMatrix {\n readonly catalogDigest: string;\n readonly realms: Readonly<Record<ToolRealm, RealmCapability>>;\n}\n\nexport interface RealmCapabilityInput {\n readonly catalogDigest: string;\n readonly supported: Readonly<Record<ToolRealm, boolean>>;\n}\n\nexport function createRealmCapabilityMatrix(input: RealmCapabilityInput): RealmCapabilityMatrix {\n const realms = (['build', 'host', 'engine'] as const).reduce(\n (result, realm) => {\n const supported = input.supported[realm];\n result[realm] = supported\n ? { realm, supported: true }\n : { realm, supported: false, reason: 'realm-capability-unavailable' };\n return result;\n },\n {} as Record<ToolRealm, RealmCapability>,\n );\n return { catalogDigest: input.catalogDigest, realms };\n}\n\nexport type RealmBootstrapValidation =\n | { readonly ok: true }\n | { readonly ok: false; readonly error: ToolRuntimeError };\n\nfunction bootstrapNotCloneSafeError(detail: { readonly message: string }): ToolRuntimeError {\n return {\n code: 'tool-bootstrap-not-clone-safe',\n expected: 'bootstrap input to contain structured-clone-safe data',\n hint: 'Remove live handles, functions, ports, and realm-owned objects from bootstrap input.',\n detail,\n };\n}\n\nexport function validateRealmBootstrapPayload(value: unknown): RealmBootstrapValidation {\n try {\n structuredClone(value);\n return { ok: true };\n } catch (cause) {\n return {\n ok: false,\n error: bootstrapNotCloneSafeError({\n message: cause instanceof Error ? cause.message : String(cause),\n }),\n };\n }\n}\n","export type CarrierPhase = 'offered' | 'leased' | 'started' | 'exited' | 'expired' | 'fallback';\n\nexport type CarrierErrorCode =\n | 'carrier-consumer-mismatch'\n | 'carrier-token-invalid'\n | 'carrier-offer-expired'\n | 'carrier-started'\n | 'carrier-exited'\n | 'carrier-lease-required'\n | 'carrier-payload-live-state'\n | 'carrier-descriptor-mismatch'\n | 'carrier-recipe-mismatch'\n | 'carrier-provider-exit'\n | 'carrier-capture-failed'\n | 'carrier-cleanup-failed';\n\nexport interface CarrierError {\n readonly code: CarrierErrorCode;\n readonly expected: string;\n readonly hint: string;\n readonly detail: Readonly<Record<string, unknown>>;\n}\n\nexport interface CarrierOffer {\n readonly schemaVersion: '1.0.0';\n readonly projectId: string;\n readonly consumerId: string;\n readonly offerId: string;\n readonly endpoint: string;\n readonly bearerToken: string;\n readonly livenessToken: string;\n readonly expiresAt: number;\n readonly descriptorDigest?: string;\n readonly recipeDigest?: string;\n readonly state: 'offered';\n}\n\nexport interface CarrierLease {\n readonly leaseId: string;\n readonly offerId: string;\n readonly consumerId: string;\n readonly state: 'leased';\n}\n\nexport interface CarrierState {\n readonly state: CarrierPhase;\n readonly leaseId?: string;\n}\n\nexport interface CarrierStateMachine {\n readonly offer: CarrierOffer;\n readonly lease: {\n (request: CarrierLeaseRequest): CarrierResult<CarrierLease>;\n (leaseId: string, request: CarrierLeaseRequest): CarrierResult<CarrierLease>;\n };\n readonly started: (leaseId: string) => CarrierResult<CarrierState>;\n readonly exit: (leaseId: string) => CarrierResult<CarrierState>;\n readonly fallback: () => CarrierResult<CarrierState>;\n readonly snapshot: () => CarrierState;\n}\n\nexport interface CarrierLeaseRequest {\n readonly consumerId: string;\n readonly bearerToken: string;\n readonly now: number;\n readonly descriptorDigest?: string;\n readonly recipeDigest?: string;\n}\n\nexport type CarrierResult<T> =\n | { readonly ok: true; readonly value: T; readonly state: CarrierPhase }\n | { readonly ok: false; readonly error: CarrierError };\n\nexport interface CarrierStateMachineOptions {\n readonly projectId: string;\n readonly consumerId: string;\n readonly endpoint: string;\n readonly now: number;\n readonly ttlMs: number;\n readonly payload?: unknown;\n readonly descriptorDigest?: string;\n readonly recipeDigest?: string;\n}\n\nfunction token(): string {\n return crypto.randomUUID().replaceAll('-', '');\n}\n\nfunction carrierError(\n code: CarrierErrorCode,\n expected: string,\n hint: string,\n detail: Readonly<Record<string, unknown>>,\n): CarrierError {\n return { code, expected, hint, detail };\n}\n\nfunction containsLiveKey(value: unknown, seen = new Set<object>()): boolean {\n if (typeof value !== 'object' || value === null) return false;\n if (seen.has(value)) return false;\n seen.add(value);\n if (Array.isArray(value)) return value.some((entry) => containsLiveKey(entry, seen));\n return Object.entries(value).some(([key, nested]) => {\n if (\n ['world', 'renderer', 'canvas', 'ui', 'profile', 'liveHandle', 'context', 'fiber'].includes(\n key,\n )\n )\n return true;\n return containsLiveKey(nested, seen);\n });\n}\n\nfunction validateOptions(options: CarrierStateMachineOptions): void {\n if (options.projectId.length === 0 || options.consumerId.length === 0) {\n throw new TypeError('carrier projectId and consumerId must not be empty');\n }\n const endpoint = new URL(options.endpoint);\n if (endpoint.protocol !== 'http:' || !['127.0.0.1', 'localhost'].includes(endpoint.hostname)) {\n throw new TypeError('carrier endpoint must be loopback HTTP');\n }\n if (!Number.isFinite(options.now) || !Number.isFinite(options.ttlMs) || options.ttlMs <= 0) {\n throw new TypeError('carrier clock and ttl must be finite and positive');\n }\n if (containsLiveKey(options.payload)) throw new TypeError('carrier-payload-live-state');\n}\n\nexport function createCarrierStateMachine(\n options: CarrierStateMachineOptions,\n): CarrierStateMachine {\n validateOptions(options);\n const offer: CarrierOffer = {\n schemaVersion: '1.0.0',\n projectId: options.projectId,\n consumerId: options.consumerId,\n offerId: `offer:${token()}`,\n endpoint: options.endpoint,\n bearerToken: token(),\n livenessToken: token(),\n expiresAt: options.now + options.ttlMs,\n ...(options.descriptorDigest === undefined\n ? {}\n : { descriptorDigest: options.descriptorDigest }),\n ...(options.recipeDigest === undefined ? {} : { recipeDigest: options.recipeDigest }),\n state: 'offered',\n };\n let state: CarrierState = { state: 'offered' };\n let lease: CarrierLease | undefined;\n\n const leaseOffer = (\n requestOrId: CarrierLeaseRequest | string,\n maybeRequest?: CarrierLeaseRequest,\n ): CarrierResult<CarrierLease> => {\n const request = typeof requestOrId === 'string' ? maybeRequest : requestOrId;\n const requestedLeaseId = typeof requestOrId === 'string' ? requestOrId : undefined;\n if (request === undefined) {\n return {\n ok: false,\n error: carrierError(\n 'carrier-token-invalid',\n 'a complete lease request',\n 'Provide consumer identity, bearer token, and current time.',\n {},\n ),\n };\n }\n if (state.state === 'started') {\n return {\n ok: false,\n error: carrierError(\n 'carrier-started',\n 'a started carrier not to be retried',\n 'Report one terminal failure and clean up the existing started lease.',\n {},\n ),\n };\n }\n if (state.state === 'exited') {\n return {\n ok: false,\n error: carrierError(\n 'carrier-exited',\n 'an exited carrier not to be retried',\n 'Re-run the operation from a serialized snapshot instead of migrating live state.',\n {},\n ),\n };\n }\n if (request.consumerId !== offer.consumerId) {\n return {\n ok: false,\n error: carrierError(\n 'carrier-consumer-mismatch',\n 'the offer consumer identity to match',\n 'Use the consumer identity that was authenticated for this project offer.',\n { expected: offer.consumerId, actual: request.consumerId },\n ),\n };\n }\n if (request.bearerToken !== offer.bearerToken) {\n return {\n ok: false,\n error: carrierError(\n 'carrier-token-invalid',\n 'the bearer token to match the ephemeral offer',\n 'Request a fresh visible offer; never persist or guess bearer tokens.',\n {},\n ),\n };\n }\n if (\n offer.descriptorDigest !== undefined &&\n request.descriptorDigest !== offer.descriptorDigest\n ) {\n return {\n ok: false,\n error: carrierError(\n 'carrier-descriptor-mismatch',\n 'the descriptor digest to match the authenticated offer',\n 'Refresh the descriptor and request a new visible offer before retrying.',\n { expected: offer.descriptorDigest, actual: request.descriptorDigest },\n ),\n };\n }\n if (offer.recipeDigest !== undefined && request.recipeDigest !== offer.recipeDigest) {\n return {\n ok: false,\n error: carrierError(\n 'carrier-recipe-mismatch',\n 'the recipe digest to match the authenticated offer',\n 'Serialize the current snapshot and request a fresh visible offer before retrying.',\n { expected: offer.recipeDigest, actual: request.recipeDigest },\n ),\n };\n }\n if (request.now >= offer.expiresAt) {\n state = { state: 'expired' };\n return {\n ok: false,\n error: carrierError(\n 'carrier-offer-expired',\n 'the offer to be within its expiry window',\n 'Fall back to the ordinary visible carrier before retrying.',\n { expiresAt: offer.expiresAt, now: request.now },\n ),\n };\n }\n if (requestedLeaseId !== undefined && requestedLeaseId !== lease?.leaseId) {\n return {\n ok: false,\n error: carrierError(\n 'carrier-token-invalid',\n 'the lease id to match the authenticated offer',\n 'Use the lease id returned by the first successful lease.',\n {},\n ),\n };\n }\n lease = {\n leaseId: `lease:${token()}`,\n offerId: offer.offerId,\n consumerId: request.consumerId,\n state: 'leased',\n };\n state = { state: 'leased', leaseId: lease.leaseId };\n return { ok: true, value: lease, state: 'leased' };\n };\n\n const started = (leaseId: string): CarrierResult<CarrierState> => {\n if (lease?.leaseId !== leaseId) {\n return {\n ok: false,\n error: carrierError(\n 'carrier-lease-required',\n 'a valid lease before started',\n 'Lease the authenticated offer before reporting provider started.',\n {},\n ),\n };\n }\n state = { state: 'started', leaseId };\n return { ok: true, value: state, state: 'started' };\n };\n\n const exit = (leaseId: string): CarrierResult<CarrierState> => {\n if (lease?.leaseId !== leaseId || state.state !== 'started') {\n return {\n ok: false,\n error: carrierError(\n 'carrier-lease-required',\n 'a started lease before provider exit',\n 'Provider exit is terminal only after started has been acknowledged.',\n {},\n ),\n };\n }\n state = { state: 'exited', leaseId };\n return { ok: true, value: state, state: 'exited' };\n };\n\n const fallback = (): CarrierResult<CarrierState> => {\n if (state.state === 'started' || state.state === 'exited') {\n return {\n ok: false,\n error: carrierError(\n 'carrier-started',\n 'fallback to happen before provider started',\n 'Do not retry or migrate a carrier after started; return its terminal failure.',\n { state: state.state },\n ),\n };\n }\n state = { state: 'fallback' };\n return { ok: true, value: state, state: 'fallback' };\n };\n\n return {\n offer,\n lease: leaseOffer,\n started,\n exit,\n fallback,\n snapshot: () => state,\n };\n}\n","export type LeaseTerminationReason =\n | 'terminal'\n | 'cancel'\n | 'timeout'\n | 'disconnect'\n | 'provider-exit';\n\nexport interface LeaseCleanupFailure {\n readonly owner: string;\n readonly message: string;\n}\n\nexport interface LeaseTermination {\n readonly terminalId: string;\n readonly reason: LeaseTerminationReason;\n readonly failures: readonly LeaseCleanupFailure[];\n}\n\nexport interface LexicalLease {\n readonly state: 'active' | 'terminating' | 'terminated';\n readonly register: (owner: string, cleanup: () => void | Promise<void>) => boolean;\n readonly terminate: (reason: LeaseTerminationReason) => Promise<LeaseTermination>;\n}\n\nexport function createLexicalLease(runId: string): LexicalLease {\n const cleanups: Array<{ readonly owner: string; readonly cleanup: () => void | Promise<void> }> =\n [];\n let state: LexicalLease['state'] = 'active';\n let terminalId: string | undefined;\n let termination: Promise<LeaseTermination> | undefined;\n\n const terminate = (reason: LeaseTerminationReason): Promise<LeaseTermination> => {\n if (termination !== undefined) return termination;\n terminalId = `${runId}:terminal:${crypto.randomUUID()}`;\n state = 'terminating';\n termination = (async () => {\n const failures: LeaseCleanupFailure[] = [];\n for (let index = cleanups.length - 1; index >= 0; index -= 1) {\n const entry = cleanups[index];\n if (entry === undefined) continue;\n try {\n await entry.cleanup();\n } catch (cause) {\n failures.push({\n owner: entry.owner,\n message: cause instanceof Error ? cause.message : String(cause),\n });\n }\n }\n state = 'terminated';\n return { terminalId: terminalId as string, reason, failures };\n })();\n return termination;\n };\n\n return {\n get state() {\n return state;\n },\n register(owner, cleanup) {\n if (state !== 'active') return false;\n cleanups.push({ owner, cleanup });\n return true;\n },\n terminate,\n };\n}\n","import { isSerializableValue } from './artifacts.js';\nimport { capabilityUnavailableError } from './errors.js';\nimport type {\n ArtifactRef,\n JsonValue,\n SnapshotRef,\n ToolEvidenceKind,\n ToolRealm,\n ToolRuntimeError,\n} from './types.js';\n\nexport type MigrationOperation =\n | 'project.build'\n | 'author.plugin-install'\n | 'preview.run'\n | 'project.preview'\n | 'material.preview'\n | 'mesh.preview'\n | 'vfx.preview'\n | 'texture.preview';\n\nexport interface MigrationCapabilityProbe {\n readonly realm: ToolRealm;\n readonly catalogDigest: string;\n readonly rhiBackend: 'webgpu' | 'null' | 'unknown';\n readonly evidence: readonly ToolEvidenceKind[];\n readonly carrier: boolean;\n readonly service: boolean;\n}\n\nexport interface CapabilityToken {\n readonly kind: 'forgeax-tool-capability';\n readonly version: '1.0.0';\n readonly operation: MigrationOperation;\n readonly source: MigrationCapabilityProbe;\n readonly target: MigrationCapabilityProbe;\n}\n\nexport interface MigrationRecipe {\n readonly operation: MigrationOperation;\n readonly args: JsonValue;\n readonly snapshot?: SnapshotRef;\n readonly artifacts: readonly ArtifactRef[];\n}\n\nexport type MigrationPayloadValidation =\n | { readonly ok: true }\n | { readonly ok: false; readonly error: ToolRuntimeError };\n\nconst liveStateKeys = new Set([\n 'world',\n 'renderer',\n 'canvas',\n 'context',\n 'fiber',\n 'page',\n 'carrier',\n 'ui',\n 'selection',\n 'draft',\n 'undo',\n 'session',\n]);\n\nfunction liveStateError(path: string, key: string): ToolRuntimeError {\n return {\n code: 'tool-migration-live-state',\n expected: 'migration payload to contain only recipe, snapshot, and artifact references',\n hint: 'Recreate the operation from serializable authority facts; do not migrate live state.',\n detail: { path, key },\n };\n}\n\nexport function createCapabilityToken(\n operation: MigrationOperation,\n source: MigrationCapabilityProbe,\n version: '1.0.0',\n target: MigrationCapabilityProbe,\n): CapabilityToken {\n if (source.catalogDigest.length === 0 || target.catalogDigest.length === 0)\n throw new TypeError('capability probe catalogDigest must not be empty');\n return {\n kind: 'forgeax-tool-capability',\n version,\n operation,\n source: { ...source, evidence: [...source.evidence] },\n target: { ...target, evidence: [...target.evidence] },\n };\n}\n\nexport function probeMigrationTarget(\n token: CapabilityToken,\n target: MigrationCapabilityProbe,\n):\n | { readonly ok: true; readonly value: MigrationCapabilityProbe }\n | {\n readonly ok: false;\n readonly error: ToolRuntimeError;\n } {\n const sameEvidence = token.target.evidence.every((kind) => target.evidence.includes(kind));\n const matches =\n token.target.realm === target.realm &&\n token.target.catalogDigest === target.catalogDigest &&\n token.target.rhiBackend === target.rhiBackend &&\n sameEvidence;\n if (!matches) {\n return {\n ok: false,\n error: capabilityUnavailableError(`migration:${token.operation}`, target.realm),\n };\n }\n return { ok: true, value: { ...target, evidence: [...target.evidence] } };\n}\n\nexport function createMigrationRecipe(input: {\n readonly operation: MigrationOperation;\n readonly args: JsonValue;\n readonly snapshot?: SnapshotRef;\n readonly artifacts?: readonly ArtifactRef[];\n}): MigrationRecipe {\n const recipe: MigrationRecipe = {\n operation: input.operation,\n args: input.args,\n ...(input.snapshot === undefined ? {} : { snapshot: { ...input.snapshot } }),\n artifacts: (input.artifacts ?? []).map((artifact) => ({ ...artifact })),\n };\n const validation = validateMigrationPayload(recipe);\n if (!validation.ok) {\n const path =\n validation.error.code === 'tool-migration-live-state' ? validation.error.detail.path : '$';\n throw new TypeError(path);\n }\n return recipe;\n}\n\nexport function validateMigrationPayload(value: unknown): MigrationPayloadValidation {\n const visit = (candidate: unknown, path: string): MigrationPayloadValidation => {\n if (!isSerializableValue(candidate)) {\n return { ok: false, error: liveStateError(path, path.split('.').at(-1) ?? '<root>') };\n }\n if (candidate === null || typeof candidate !== 'object') return { ok: true };\n if (Array.isArray(candidate)) {\n for (const [index, child] of candidate.entries()) {\n const result = visit(child, `${path}[${index}]`);\n if (!result.ok) return result;\n }\n return { ok: true };\n }\n for (const [key, child] of Object.entries(candidate)) {\n const normalized = key.replaceAll('_', '').replaceAll('-', '').toLowerCase();\n if (liveStateKeys.has(normalized)) return { ok: false, error: liveStateError(path, key) };\n const result = visit(child, `${path}.${key}`);\n if (!result.ok) return result;\n }\n return { ok: true };\n };\n return visit(value, '$');\n}\n","import type { ToolPhaseObservation, ToolTiming, ToolTimingPhase } from './types.js';\n\nexport interface ExclusiveTimingResult {\n readonly startedAtMs: number;\n readonly endedAtMs: number;\n readonly totalMs: number;\n readonly phases: Readonly<Record<ToolTimingPhase, ToolPhaseObservation>>;\n}\n\nexport interface ExclusiveTiming {\n begin(phase: ToolTimingPhase): void;\n end(phase: ToolTimingPhase): void;\n record(phase: ToolTimingPhase, durationMs: number): void;\n finish(): ExclusiveTimingResult;\n}\n\nconst PHASES: readonly ToolTimingPhase[] = [\n 'lookup',\n 'lease',\n 'transport',\n 'execute',\n 'capture',\n 'finalize',\n 'analyze',\n];\n\nexport function createExclusiveTiming(\n now: () => number = () => performance.now(),\n): ExclusiveTiming {\n const phases = Object.fromEntries(\n PHASES.map((phase) => [phase, { status: 'not-applicable' }]),\n ) as Record<ToolTimingPhase, ToolPhaseObservation>;\n const closed = new Set<ToolTimingPhase>();\n let active: { phase: ToolTimingPhase; startedAtMs: number } | undefined;\n let startedAtMs: number | undefined;\n let endedAtMs: number | undefined;\n return {\n begin(phase) {\n if (active !== undefined) throw new TypeError(`phase '${active.phase}' is still open`);\n if (closed.has(phase)) throw new TypeError(`phase '${phase}' was already closed`);\n const at = now();\n startedAtMs ??= at;\n active = { phase, startedAtMs: at };\n },\n end(phase) {\n if (active?.phase !== phase) throw new TypeError(`phase '${phase}' is not the active phase`);\n const at = now();\n phases[phase] = { status: 'observed', durationMs: Math.max(0, at - active.startedAtMs) };\n closed.add(phase);\n active = undefined;\n endedAtMs = at;\n },\n record(phase, durationMs) {\n if (!Number.isFinite(durationMs) || durationMs < 0)\n throw new TypeError('phase duration must be finite and non-negative');\n if (closed.has(phase)) throw new TypeError(`phase '${phase}' was already closed`);\n const at = now();\n startedAtMs ??= at - durationMs;\n phases[phase] = { status: 'observed', durationMs };\n closed.add(phase);\n endedAtMs = at;\n },\n finish() {\n if (active !== undefined) throw new TypeError(`phase '${active.phase}' is still open`);\n const start = startedAtMs ?? now();\n const end = endedAtMs ?? start;\n return {\n startedAtMs: start,\n endedAtMs: end,\n totalMs: Math.max(0, end - start),\n phases: { ...phases },\n };\n },\n };\n}\n\nexport function startToolTiming(): number {\n return performance.now();\n}\n\nexport function finishToolTiming(\n startedAtMs: number,\n operationTiming?: ExclusiveTiming,\n): ToolTiming {\n const endedAtMs = performance.now();\n const result = operationTiming?.finish();\n const durationMs = Math.max(0, endedAtMs - startedAtMs);\n const attributedMs =\n result === undefined\n ? 0\n : Object.values(result.phases).reduce(\n (sum, observation) =>\n observation.status === 'observed' ? sum + observation.durationMs : sum,\n 0,\n );\n return {\n startedAtMs,\n endedAtMs,\n durationMs,\n ...(result === undefined\n ? {}\n : { phases: result.phases, unattributedMs: Math.max(0, durationMs - attributedMs) }),\n };\n}\n","import { isSerializableValue, validateArtifactRefs } from './artifacts.js';\nimport {\n artifactIncompleteError,\n cancellationError,\n capabilityUnavailableError,\n cleanupError,\n disconnectedError,\n domainFailureError,\n invalidArgsError,\n terminalError,\n timeoutError,\n} from './errors.js';\nimport { createLexicalLease, type LeaseTerminationReason } from './lease.js';\nimport { createExclusiveTiming, finishToolTiming, startToolTiming } from './timing.js';\nimport type {\n JsonValue,\n ToolCapability,\n ToolCleanupReport,\n ToolContribution,\n ToolDescriptor,\n ToolDomainFailure,\n ToolExecutionContext,\n ToolExecutor,\n ToolRun,\n ToolRunEvent,\n ToolRunOptions,\n ToolRuntimeError,\n ToolSchema,\n ToolTerminal,\n} from './types.js';\n\nexport interface ToolRuntime {\n readonly list: () => readonly ToolDescriptor[];\n readonly describe: (id: string) => ToolDescriptor | undefined;\n readonly get: (id: string) => ToolContribution<unknown, unknown> | undefined;\n readonly run: <TArgs, TResult>(\n contribution: ToolContribution<TArgs, TResult>,\n args: TArgs,\n options?: ToolRunOptions,\n ) => ToolRun<TResult>;\n}\n\nexport function defineTool<TArgs, TResult>(\n descriptor: ToolDescriptor<TArgs, TResult>,\n execute: ToolExecutor<TArgs, TResult>,\n): ToolContribution<TArgs, TResult> {\n if (!/^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/.test(descriptor.id)) {\n throw new TypeError(`Tool id must use a stable lower-case path: ${descriptor.id}`);\n }\n if (descriptor.title.trim().length === 0 || descriptor.summary.trim().length === 0) {\n throw new TypeError('Tool title and summary must not be empty');\n }\n if (!Array.isArray(descriptor.evidence)) throw new TypeError('Tool evidence must be an array');\n if (descriptor.preview !== undefined && descriptor.preview.realm !== descriptor.realm) {\n throw new TypeError(\n `Tool ${descriptor.id} preview contract declares ${descriptor.preview.realm} but descriptor declares ${descriptor.realm}`,\n );\n }\n const argsSchema: ToolSchema<TArgs> = descriptor.argsSchema;\n const resultSchema: ToolSchema<TResult> = descriptor.resultSchema;\n return {\n descriptor: { ...descriptor, argsSchema, resultSchema, evidence: [...descriptor.evidence] },\n execute,\n };\n}\n\nfunction eventChannel(): {\n readonly emit: (event: ToolRunEvent) => void;\n readonly close: () => void;\n readonly events: AsyncIterable<ToolRunEvent>;\n} {\n const queue: ToolRunEvent[] = [];\n const waiters: Array<(result: IteratorResult<ToolRunEvent>) => void> = [];\n let closed = false;\n const emit = (event: ToolRunEvent): void => {\n const waiter = waiters.shift();\n if (waiter !== undefined) waiter({ done: false, value: event });\n else queue.push(event);\n };\n const close = (): void => {\n closed = true;\n while (waiters.length > 0) waiters.shift()?.({ done: true, value: undefined });\n };\n const events: AsyncIterable<ToolRunEvent> = {\n [Symbol.asyncIterator](): AsyncIterator<ToolRunEvent> {\n return {\n next: async (): Promise<IteratorResult<ToolRunEvent>> => {\n const event = queue.shift();\n if (event !== undefined) return { done: false, value: event };\n if (closed) return { done: true, value: undefined };\n return new Promise((resolve) => waiters.push(resolve));\n },\n };\n },\n };\n return { emit, close, events };\n}\n\nfunction isTerminal<TResult>(value: unknown): value is ToolTerminal<TResult> {\n if (typeof value !== 'object' || value === null) return false;\n const outcome = Reflect.get(value, 'outcome');\n return outcome === 'succeeded' || outcome === 'failed';\n}\n\nfunction serializablePreview(value: unknown): JsonValue {\n return isSerializableValue(value) ? value : null;\n}\n\nfunction domainError(error: ToolDomainFailure): ToolRuntimeError {\n return domainFailureError(\n error.code,\n error.expected ?? 'the producer operation to succeed',\n error.hint ?? 'Inspect detail and repair the owning producer before retrying.',\n error.detail,\n );\n}\n\nfunction hasOkField(value: unknown): value is { readonly ok: boolean } {\n return (\n typeof value === 'object' && value !== null && typeof Reflect.get(value, 'ok') === 'boolean'\n );\n}\n\nfunction isToolRuntimeError(value: unknown): value is ToolRuntimeError {\n return (\n typeof value === 'object' &&\n value !== null &&\n typeof Reflect.get(value, 'code') === 'string' &&\n Reflect.get(value, 'code').startsWith('tool-')\n );\n}\n\nexport function createToolRuntime<TArgs, TResult>(\n contributions: readonly ToolContribution<TArgs, TResult>[],\n): ToolRuntime;\nexport function createToolRuntime(contributions: readonly unknown[]): ToolRuntime;\nexport function createToolRuntime(contributions: readonly unknown[]): ToolRuntime {\n const byId = new Map<string, ToolContribution<unknown, unknown>>();\n for (const candidate of contributions) {\n if (typeof candidate !== 'object' || candidate === null) {\n throw new TypeError('Tool contributions must be objects');\n }\n const contribution = candidate as ToolContribution<unknown, unknown>;\n if (typeof contribution.execute !== 'function') {\n throw new TypeError('Tool contributions must provide an executor');\n }\n const id = contribution.descriptor.id;\n if (byId.has(id)) throw new TypeError(`Duplicate tool contribution id: ${id}`);\n byId.set(id, contribution);\n }\n\n const list = (): readonly ToolDescriptor[] =>\n [...byId.values()].map((contribution) => contribution.descriptor);\n\n const run = <TArgs, TResult>(\n contribution: ToolContribution<TArgs, TResult>,\n args: TArgs,\n options: ToolRunOptions = {},\n ): ToolRun<TResult> => {\n const runId = `${contribution.descriptor.id}:${crypto.randomUUID()}`;\n const channel = eventChannel();\n const controller = new AbortController();\n const startedAtMs = startToolTiming();\n const operationTiming = createExclusiveTiming();\n const lookupStartedAtMs = startToolTiming();\n operationTiming.record('lookup', Math.max(0, startToolTiming() - lookupStartedAtMs));\n const lease = createLexicalLease(runId);\n const leaseStartedAtMs = startToolTiming();\n operationTiming.record('lease', Math.max(0, startToolTiming() - leaseStartedAtMs));\n let terminalStarted = false;\n let cleanupReport: ToolCleanupReport = {\n census: { worlds: 0, renderers: 0, canvases: 0, leases: 0 },\n failures: [],\n };\n let cancelReason = 'cancelled by caller';\n let resolveTerminal!: (terminal: ToolTerminal<TResult>) => void;\n const terminal = new Promise<ToolTerminal<TResult>>((resolve) => {\n resolveTerminal = resolve;\n });\n\n const settle = async (\n candidate: ToolTerminal<TResult>,\n reason: LeaseTerminationReason = 'terminal',\n ): Promise<void> => {\n if (terminalStarted) return;\n terminalStarted = true;\n controller.abort();\n const finalizeStartedAtMs = startToolTiming();\n const cleanupResult = await lease.terminate(reason);\n const cleanupFailure = cleanupResult.failures[0];\n const liveResources = Object.entries(cleanupReport.census).filter(([, count]) => count !== 0);\n const reportFailure =\n cleanupReport.failures[0] ??\n (liveResources.length === 0\n ? undefined\n : `live resources remain: ${liveResources.map(([kind, count]) => `${kind}=${count}`).join(', ')}`);\n operationTiming.record('finalize', Math.max(0, startToolTiming() - finalizeStartedAtMs));\n const finalTerminal: ToolTerminal<TResult> =\n cleanupFailure || (candidate.outcome === 'succeeded' && reportFailure !== undefined)\n ? {\n outcome: 'failed',\n failure: cleanupError(\n runId,\n cleanupFailure === undefined\n ? (reportFailure as string)\n : `${cleanupFailure.owner}: ${cleanupFailure.message}`,\n ),\n artifacts: candidate.artifacts,\n cleanup: cleanupReport,\n ...(candidate.snapshotAfter === undefined\n ? {}\n : { snapshotAfter: candidate.snapshotAfter }),\n timing: finishToolTiming(startedAtMs, operationTiming),\n }\n : {\n ...candidate,\n cleanup: cleanupReport,\n timing: finishToolTiming(startedAtMs, operationTiming),\n };\n resolveTerminal(finalTerminal);\n channel.emit({\n kind: 'terminal',\n runId,\n outcome: finalTerminal.outcome,\n atMs: performance.now(),\n });\n channel.close();\n };\n\n const context: ToolExecutionContext = {\n runId,\n signal: controller.signal,\n ...(options.snapshot === undefined ? {} : { snapshot: options.snapshot }),\n emit: (event) => {\n if (!terminalStarted) channel.emit({ ...event, runId });\n },\n addCleanup: (cleanup) => {\n if (!lease.register(`cleanup:${lease.state}`, cleanup)) void cleanup();\n },\n setCleanupReport: (report) => {\n cleanupReport = {\n census: { ...report.census },\n failures: [...report.failures],\n };\n },\n require: <T>(capability: ToolCapability<T>) => {\n if (terminalStarted) {\n return { ok: false as const, error: terminalError(runId, 'succeeded') };\n }\n const resolved = options.capabilityResolver?.(capability);\n if (resolved !== undefined) return resolved;\n return {\n ok: false as const,\n error: capabilityUnavailableError(capability.id, contribution.descriptor.realm),\n };\n },\n runChild: async (childContribution, childArgs, childOptions = {}) => {\n if (terminalStarted) {\n return {\n outcome: 'failed',\n failure: terminalError(runId, 'failed'),\n artifacts: [],\n };\n }\n const childRun = runtime.run(childContribution, childArgs, {\n ...childOptions,\n signal: controller.signal,\n ...(childOptions.capabilityResolver === undefined &&\n options.capabilityResolver !== undefined\n ? { capabilityResolver: options.capabilityResolver }\n : {}),\n ...(options.snapshot === undefined ? {} : { snapshot: options.snapshot }),\n });\n channel.emit({\n kind: 'child-started',\n runId,\n childRunId: childRun.id,\n atMs: performance.now(),\n });\n lease.register(`child:${childRun.id}`, () => {\n childRun.cancel('parent terminal');\n });\n return childRun.terminal;\n },\n };\n\n const fail = (failure: ToolRuntimeError): void => {\n void settle({ outcome: 'failed', failure, artifacts: [] });\n };\n\n const cancel = (reason = 'cancelled by caller'): void => {\n cancelReason = reason;\n void settle(\n { outcome: 'failed', failure: cancellationError(reason), artifacts: [] },\n 'cancel',\n );\n };\n\n const disconnect = (transport = 'tool transport'): void => {\n void settle(\n { outcome: 'failed', failure: disconnectedError(transport), artifacts: [] },\n 'disconnect',\n );\n };\n\n const providerExit = (provider = 'provider'): void => {\n void settle(\n {\n outcome: 'failed',\n failure: domainFailureError(\n 'provider-exit',\n 'the provider to remain alive until terminal',\n 'Restart the provider and retry from the serialized snapshot.',\n provider,\n ),\n artifacts: [],\n },\n 'provider-exit',\n );\n };\n\n const timeout =\n options.deadlineMs === undefined\n ? undefined\n : setTimeout(\n () =>\n void settle(\n {\n outcome: 'failed',\n failure: timeoutError(options.deadlineMs as number),\n artifacts: [],\n },\n 'timeout',\n ),\n options.deadlineMs,\n );\n\n channel.emit({ kind: 'started', runId, atMs: performance.now() });\n void (async () => {\n const parsedArgs = contribution.descriptor.argsSchema.parse(args);\n if (!parsedArgs.ok) {\n fail(invalidArgsError(parsedArgs.error, serializablePreview(args)));\n return;\n }\n try {\n if (options.signal?.aborted) {\n cancelReason = 'aborted by caller';\n fail(cancellationError(cancelReason));\n return;\n }\n const onAbort = (): void => cancel('aborted by caller');\n options.signal?.addEventListener('abort', onAbort, { once: true });\n let produced: unknown;\n const executeStartedAtMs = startToolTiming();\n try {\n produced = await contribution.execute(parsedArgs.value, context);\n } finally {\n operationTiming.record('execute', Math.max(0, startToolTiming() - executeStartedAtMs));\n options.signal?.removeEventListener('abort', onAbort);\n }\n if (terminalStarted) return;\n if (controller.signal.aborted) {\n fail(cancellationError(cancelReason));\n return;\n }\n let result: unknown = produced;\n let snapshotAfter = options.snapshot;\n let artifacts: readonly import('./types.js').ArtifactRef[] = [];\n if (isTerminal<TResult>(produced)) {\n if (produced.outcome === 'failed') {\n await settle(produced);\n return;\n }\n result = produced.result;\n snapshotAfter = produced.snapshotAfter;\n artifacts = produced.artifacts;\n cleanupReport = produced.cleanup ?? cleanupReport;\n } else if (hasOkField(produced)) {\n if (produced.ok === false) {\n const error = Reflect.get(produced, 'error');\n if (isToolRuntimeError(error)) {\n await settle({ outcome: 'failed', failure: error, artifacts: [] });\n return;\n }\n await settle({\n outcome: 'failed',\n failure: domainError(error as ToolDomainFailure),\n artifacts: [],\n });\n return;\n }\n result = Reflect.get(produced, 'value');\n snapshotAfter = Reflect.get(produced, 'snapshotAfter');\n artifacts = Reflect.get(produced, 'artifacts') ?? [];\n }\n if (!isSerializableValue(result)) {\n await settle({\n outcome: 'failed',\n failure: domainFailureError(\n 'terminal-not-serializable',\n 'the result to be JSON serializable',\n 'Return plain JSON data and ArtifactRef values instead of live handles.',\n ),\n artifacts: [],\n });\n return;\n }\n const parsedResult = contribution.descriptor.resultSchema.parse(result);\n if (!parsedResult.ok) {\n await settle({\n outcome: 'failed',\n failure: domainFailureError(\n 'result-schema-invalid',\n 'the result to satisfy resultSchema',\n parsedResult.error,\n ),\n artifacts: [],\n });\n return;\n }\n if (!validateArtifactRefs(artifacts)) {\n await settle({\n outcome: 'failed',\n failure: domainFailureError(\n 'artifact-ref-invalid',\n 'artifact refs to be serializable ArtifactRef values',\n 'Return refs created by createArtifactRef.',\n ),\n artifacts: [],\n });\n return;\n }\n const requiredEvidence = [\n ...new Set([...(contribution.descriptor.evidence ?? []), ...(options.evidence ?? [])]),\n ];\n const missingEvidence = requiredEvidence.filter(\n (kind) => !artifacts.some((artifact) => artifact.kind === kind),\n );\n if (missingEvidence.length > 0) {\n await settle({\n outcome: 'failed',\n failure: artifactIncompleteError(missingEvidence, runId),\n artifacts,\n });\n return;\n }\n await settle({\n outcome: 'succeeded',\n result: parsedResult.value,\n artifacts,\n ...(snapshotAfter === undefined ? {} : { snapshotAfter }),\n });\n } catch (cause) {\n await settle({\n outcome: 'failed',\n failure: domainFailureError(\n 'executor-threw',\n 'the contribution executor to return a result',\n cause instanceof Error ? cause.message : String(cause),\n ),\n artifacts: [],\n });\n } finally {\n if (timeout !== undefined) clearTimeout(timeout);\n }\n })();\n\n const runtimeRun: ToolRun<TResult> = {\n id: runId,\n events: channel.events,\n terminal,\n cancel,\n disconnect,\n providerExit,\n };\n return runtimeRun;\n };\n\n const runtime: ToolRuntime = {\n list,\n describe: (id) => byId.get(id)?.descriptor,\n get: (id) => byId.get(id),\n run,\n };\n return runtime;\n}\n","import type { SnapshotRef, ToolTerminal } from './types.js';\n\nexport function terminalSnapshot<TResult>(\n terminal: ToolTerminal<TResult>,\n): SnapshotRef | undefined {\n return terminal.snapshotAfter;\n}\n\nexport function isSnapshotRef(value: unknown): value is SnapshotRef {\n return (\n typeof value === 'object' &&\n value !== null &&\n Number.isSafeInteger(Reflect.get(value, 'revision')) &&\n Reflect.get(value, 'revision') >= 0 &&\n typeof Reflect.get(value, 'digest') === 'string' &&\n Reflect.get(value, 'digest').length > 0\n );\n}\n","import { validateRealmBootstrapPayload } from './capability.js';\nimport type {\n CarrierLease,\n CarrierLeaseRequest,\n CarrierPhase,\n CarrierResult,\n CarrierState,\n} from './carrier.js';\nimport type { JsonValue, ToolTerminal } from './types.js';\n\nexport interface CarrierTransport {\n readonly endpoint: string;\n readonly connected: boolean;\n readonly send: (payload: unknown) => boolean;\n readonly close: () => void;\n}\n\nexport interface CarrierExecutionRequest {\n readonly leaseId: string;\n readonly descriptorDigest: string;\n readonly recipeDigest: string;\n readonly args: unknown;\n}\n\nexport interface AuthenticatedCarrierTransport {\n readonly endpoint: string;\n readonly connected: boolean;\n readonly lease: (request: CarrierLeaseRequest) => Promise<CarrierResult<CarrierLease>>;\n readonly started: (request: { readonly leaseId: string }) => Promise<CarrierResult<CarrierState>>;\n readonly execute: (request: CarrierExecutionRequest) => Promise<{\n readonly ok: true;\n readonly value: ToolTerminal<unknown>;\n readonly state: CarrierPhase;\n }>;\n readonly exit: (request: { readonly leaseId: string }) => Promise<CarrierResult<CarrierState>>;\n readonly close: () => void;\n}\n\nexport interface AuthenticatedCarrierTransportOptions {\n readonly endpoint: string;\n readonly bearerToken: string;\n}\n\nexport class CarrierTransportError extends Error {\n readonly code: string;\n readonly expected?: string;\n readonly hint?: string;\n readonly detail?: Readonly<Record<string, unknown>>;\n\n constructor(error: {\n readonly code: string;\n readonly expected?: string;\n readonly hint?: string;\n readonly detail?: Readonly<Record<string, unknown>>;\n }) {\n super(error.code);\n this.name = 'CarrierTransportError';\n this.code = error.code;\n if (error.expected !== undefined) this.expected = error.expected;\n if (error.hint !== undefined) this.hint = error.hint;\n if (error.detail !== undefined) this.detail = error.detail;\n }\n}\n\nexport function createAuthenticatedCarrierTransport(\n options: AuthenticatedCarrierTransportOptions,\n): AuthenticatedCarrierTransport {\n const url = new URL(options.endpoint);\n if (url.protocol !== 'http:' || !['127.0.0.1', 'localhost'].includes(url.hostname))\n throw new TypeError('carrier transport endpoint must be loopback HTTP');\n if (options.bearerToken.length < 8) throw new TypeError('carrier bearer token is too short');\n let connected = true;\n async function request<T>(path: string, payload: unknown): Promise<T> {\n if (!connected)\n throw new CarrierTransportError({\n code: 'carrier-exited',\n expected: 'a connected carrier transport',\n hint: 'Request a fresh visible offer after provider exit.',\n });\n let response: Response;\n try {\n response = await fetch(`${options.endpoint}${path}`, {\n method: 'POST',\n headers: {\n authorization: `Bearer ${options.bearerToken}`,\n 'content-type': 'application/json',\n },\n body: JSON.stringify(payload),\n });\n } catch (cause) {\n throw new CarrierTransportError({\n code: 'carrier-provider-exit',\n expected: 'the carrier provider to remain reachable',\n hint: 'Offer a fresh carrier; do not fallback after started.',\n detail: { cause: cause instanceof Error ? cause.message : String(cause) },\n });\n }\n const value: unknown = await response.json().catch(() => ({}));\n if (\n !response.ok ||\n typeof value !== 'object' ||\n value === null ||\n !('ok' in value) ||\n value.ok !== true\n ) {\n const error =\n typeof value === 'object' &&\n value !== null &&\n 'error' in value &&\n typeof value.error === 'object' &&\n value.error !== null\n ? (value.error as Record<string, unknown>)\n : {\n code: 'carrier-provider-exit',\n expected: 'a successful carrier response',\n hint: 'Offer a fresh carrier and retry from a serialized snapshot.',\n };\n const normalized = {\n code: typeof error.code === 'string' ? error.code : 'carrier-provider-exit',\n ...(typeof error.expected === 'string' ? { expected: error.expected } : {}),\n ...(typeof error.hint === 'string' ? { hint: error.hint } : {}),\n ...(typeof error.detail === 'object' && error.detail !== null\n ? { detail: error.detail as Readonly<Record<string, unknown>> }\n : {}),\n };\n throw new CarrierTransportError(normalized);\n }\n return value as T;\n }\n return {\n endpoint: options.endpoint,\n get connected() {\n return connected;\n },\n lease: (payload) => request('/lease', payload),\n started: (payload) => request('/start', payload),\n execute: (payload) => request('/execute', payload),\n exit: (payload) => request('/exit', payload),\n close() {\n connected = false;\n },\n };\n}\n\n/** Minimal loopback transport seam; it carries POD only and owns no operation state. */\nexport function createLoopbackTransport(endpoint: string): CarrierTransport {\n const url = new URL(endpoint);\n if (url.protocol !== 'http:' || !['127.0.0.1', 'localhost'].includes(url.hostname)) {\n throw new TypeError('carrier transport endpoint must be loopback HTTP');\n }\n let connected = true;\n return {\n endpoint,\n get connected() {\n return connected;\n },\n send(payload) {\n if (!connected || !validateRealmBootstrapPayload(payload).ok) return false;\n return true;\n },\n close() {\n connected = false;\n },\n };\n}\n\nexport interface ServiceWireRequest {\n readonly descriptorDigest: string;\n readonly recipeDigest: string;\n readonly args: JsonValue;\n}\n\nexport type ServiceWireHandler = (\n request: ServiceWireRequest,\n) => Promise<ToolTerminal<unknown>> | ToolTerminal<unknown>;\n\nexport interface AuthenticatedLoopbackTransport {\n readonly endpoint: string;\n readonly connected: boolean;\n readonly request: (\n request: ServiceWireRequest,\n bearerToken: string,\n options?: { readonly signal?: AbortSignal },\n ) => Promise<ToolTerminal<unknown>>;\n readonly close: () => void;\n}\n\nexport interface AuthenticatedLoopbackTransportOptions {\n readonly endpoint: string;\n readonly bearerToken: string;\n}\n\nexport function createAuthenticatedLoopbackTransport(\n options: AuthenticatedLoopbackTransportOptions,\n): AuthenticatedLoopbackTransport {\n const url = new URL(options.endpoint);\n if (url.protocol !== 'http:' || !['127.0.0.1', 'localhost'].includes(url.hostname)) {\n throw new TypeError('service transport endpoint must be loopback HTTP');\n }\n if (options.bearerToken.length < 8) throw new TypeError('service bearer token is too short');\n let connected = true;\n return {\n endpoint: options.endpoint,\n get connected() {\n return connected;\n },\n async request(request, bearerToken, requestOptions = {}) {\n if (!connected) throw new Error('service transport is disconnected');\n if (bearerToken !== options.bearerToken) throw new Error('service bearer token rejected');\n if (!validateRealmBootstrapPayload(request).ok) {\n throw new Error('service request is not structured-clone safe');\n }\n const response = await fetch(options.endpoint, {\n method: 'POST',\n headers: {\n authorization: `Bearer ${bearerToken}`,\n 'content-type': 'application/json',\n },\n body: JSON.stringify(request),\n ...(requestOptions.signal === undefined ? {} : { signal: requestOptions.signal }),\n });\n const payload: unknown = await response.json();\n if (!response.ok) {\n const detail =\n typeof payload === 'object' && payload !== null && 'error' in payload\n ? String(payload.error)\n : `HTTP ${response.status}`;\n throw new Error(`service request failed: ${detail}`);\n }\n return payload as ToolTerminal<unknown>;\n },\n close() {\n connected = false;\n },\n };\n}\n"]}
@@ -0,0 +1,16 @@
1
+ export type LeaseTerminationReason = 'terminal' | 'cancel' | 'timeout' | 'disconnect' | 'provider-exit';
2
+ export interface LeaseCleanupFailure {
3
+ readonly owner: string;
4
+ readonly message: string;
5
+ }
6
+ export interface LeaseTermination {
7
+ readonly terminalId: string;
8
+ readonly reason: LeaseTerminationReason;
9
+ readonly failures: readonly LeaseCleanupFailure[];
10
+ }
11
+ export interface LexicalLease {
12
+ readonly state: 'active' | 'terminating' | 'terminated';
13
+ readonly register: (owner: string, cleanup: () => void | Promise<void>) => boolean;
14
+ readonly terminate: (reason: LeaseTerminationReason) => Promise<LeaseTermination>;
15
+ }
16
+ export declare function createLexicalLease(runId: string): LexicalLease;
@@ -0,0 +1,44 @@
1
+ import type { ArtifactRef, JsonValue, SnapshotRef, ToolEvidenceKind, ToolRealm, ToolRuntimeError } from './types.js';
2
+ export type MigrationOperation = 'project.build' | 'author.plugin-install' | 'preview.run' | 'project.preview' | 'material.preview' | 'mesh.preview' | 'vfx.preview' | 'texture.preview';
3
+ export interface MigrationCapabilityProbe {
4
+ readonly realm: ToolRealm;
5
+ readonly catalogDigest: string;
6
+ readonly rhiBackend: 'webgpu' | 'null' | 'unknown';
7
+ readonly evidence: readonly ToolEvidenceKind[];
8
+ readonly carrier: boolean;
9
+ readonly service: boolean;
10
+ }
11
+ export interface CapabilityToken {
12
+ readonly kind: 'forgeax-tool-capability';
13
+ readonly version: '1.0.0';
14
+ readonly operation: MigrationOperation;
15
+ readonly source: MigrationCapabilityProbe;
16
+ readonly target: MigrationCapabilityProbe;
17
+ }
18
+ export interface MigrationRecipe {
19
+ readonly operation: MigrationOperation;
20
+ readonly args: JsonValue;
21
+ readonly snapshot?: SnapshotRef;
22
+ readonly artifacts: readonly ArtifactRef[];
23
+ }
24
+ export type MigrationPayloadValidation = {
25
+ readonly ok: true;
26
+ } | {
27
+ readonly ok: false;
28
+ readonly error: ToolRuntimeError;
29
+ };
30
+ export declare function createCapabilityToken(operation: MigrationOperation, source: MigrationCapabilityProbe, version: '1.0.0', target: MigrationCapabilityProbe): CapabilityToken;
31
+ export declare function probeMigrationTarget(token: CapabilityToken, target: MigrationCapabilityProbe): {
32
+ readonly ok: true;
33
+ readonly value: MigrationCapabilityProbe;
34
+ } | {
35
+ readonly ok: false;
36
+ readonly error: ToolRuntimeError;
37
+ };
38
+ export declare function createMigrationRecipe(input: {
39
+ readonly operation: MigrationOperation;
40
+ readonly args: JsonValue;
41
+ readonly snapshot?: SnapshotRef;
42
+ readonly artifacts?: readonly ArtifactRef[];
43
+ }): MigrationRecipe;
44
+ export declare function validateMigrationPayload(value: unknown): MigrationPayloadValidation;
@@ -0,0 +1,10 @@
1
+ import type { ToolContribution, ToolDescriptor, ToolExecutor, ToolRun, ToolRunOptions } from './types.js';
2
+ export interface ToolRuntime {
3
+ readonly list: () => readonly ToolDescriptor[];
4
+ readonly describe: (id: string) => ToolDescriptor | undefined;
5
+ readonly get: (id: string) => ToolContribution<unknown, unknown> | undefined;
6
+ readonly run: <TArgs, TResult>(contribution: ToolContribution<TArgs, TResult>, args: TArgs, options?: ToolRunOptions) => ToolRun<TResult>;
7
+ }
8
+ export declare function defineTool<TArgs, TResult>(descriptor: ToolDescriptor<TArgs, TResult>, execute: ToolExecutor<TArgs, TResult>): ToolContribution<TArgs, TResult>;
9
+ export declare function createToolRuntime<TArgs, TResult>(contributions: readonly ToolContribution<TArgs, TResult>[]): ToolRuntime;
10
+ export declare function createToolRuntime(contributions: readonly unknown[]): ToolRuntime;
@@ -0,0 +1,3 @@
1
+ import type { SnapshotRef, ToolTerminal } from './types.js';
2
+ export declare function terminalSnapshot<TResult>(terminal: ToolTerminal<TResult>): SnapshotRef | undefined;
3
+ export declare function isSnapshotRef(value: unknown): value is SnapshotRef;
@@ -0,0 +1,16 @@
1
+ import type { ToolPhaseObservation, ToolTiming, ToolTimingPhase } from './types.js';
2
+ export interface ExclusiveTimingResult {
3
+ readonly startedAtMs: number;
4
+ readonly endedAtMs: number;
5
+ readonly totalMs: number;
6
+ readonly phases: Readonly<Record<ToolTimingPhase, ToolPhaseObservation>>;
7
+ }
8
+ export interface ExclusiveTiming {
9
+ begin(phase: ToolTimingPhase): void;
10
+ end(phase: ToolTimingPhase): void;
11
+ record(phase: ToolTimingPhase, durationMs: number): void;
12
+ finish(): ExclusiveTimingResult;
13
+ }
14
+ export declare function createExclusiveTiming(now?: () => number): ExclusiveTiming;
15
+ export declare function startToolTiming(): number;
16
+ export declare function finishToolTiming(startedAtMs: number, operationTiming?: ExclusiveTiming): ToolTiming;
@@ -0,0 +1,69 @@
1
+ import type { CarrierLease, CarrierLeaseRequest, CarrierPhase, CarrierResult, CarrierState } from './carrier.js';
2
+ import type { JsonValue, ToolTerminal } from './types.js';
3
+ export interface CarrierTransport {
4
+ readonly endpoint: string;
5
+ readonly connected: boolean;
6
+ readonly send: (payload: unknown) => boolean;
7
+ readonly close: () => void;
8
+ }
9
+ export interface CarrierExecutionRequest {
10
+ readonly leaseId: string;
11
+ readonly descriptorDigest: string;
12
+ readonly recipeDigest: string;
13
+ readonly args: unknown;
14
+ }
15
+ export interface AuthenticatedCarrierTransport {
16
+ readonly endpoint: string;
17
+ readonly connected: boolean;
18
+ readonly lease: (request: CarrierLeaseRequest) => Promise<CarrierResult<CarrierLease>>;
19
+ readonly started: (request: {
20
+ readonly leaseId: string;
21
+ }) => Promise<CarrierResult<CarrierState>>;
22
+ readonly execute: (request: CarrierExecutionRequest) => Promise<{
23
+ readonly ok: true;
24
+ readonly value: ToolTerminal<unknown>;
25
+ readonly state: CarrierPhase;
26
+ }>;
27
+ readonly exit: (request: {
28
+ readonly leaseId: string;
29
+ }) => Promise<CarrierResult<CarrierState>>;
30
+ readonly close: () => void;
31
+ }
32
+ export interface AuthenticatedCarrierTransportOptions {
33
+ readonly endpoint: string;
34
+ readonly bearerToken: string;
35
+ }
36
+ export declare class CarrierTransportError extends Error {
37
+ readonly code: string;
38
+ readonly expected?: string;
39
+ readonly hint?: string;
40
+ readonly detail?: Readonly<Record<string, unknown>>;
41
+ constructor(error: {
42
+ readonly code: string;
43
+ readonly expected?: string;
44
+ readonly hint?: string;
45
+ readonly detail?: Readonly<Record<string, unknown>>;
46
+ });
47
+ }
48
+ export declare function createAuthenticatedCarrierTransport(options: AuthenticatedCarrierTransportOptions): AuthenticatedCarrierTransport;
49
+ /** Minimal loopback transport seam; it carries POD only and owns no operation state. */
50
+ export declare function createLoopbackTransport(endpoint: string): CarrierTransport;
51
+ export interface ServiceWireRequest {
52
+ readonly descriptorDigest: string;
53
+ readonly recipeDigest: string;
54
+ readonly args: JsonValue;
55
+ }
56
+ export type ServiceWireHandler = (request: ServiceWireRequest) => Promise<ToolTerminal<unknown>> | ToolTerminal<unknown>;
57
+ export interface AuthenticatedLoopbackTransport {
58
+ readonly endpoint: string;
59
+ readonly connected: boolean;
60
+ readonly request: (request: ServiceWireRequest, bearerToken: string, options?: {
61
+ readonly signal?: AbortSignal;
62
+ }) => Promise<ToolTerminal<unknown>>;
63
+ readonly close: () => void;
64
+ }
65
+ export interface AuthenticatedLoopbackTransportOptions {
66
+ readonly endpoint: string;
67
+ readonly bearerToken: string;
68
+ }
69
+ export declare function createAuthenticatedLoopbackTransport(options: AuthenticatedLoopbackTransportOptions): AuthenticatedLoopbackTransport;