{"version":3,"sources":["../../../src/harness/v1/events.ts","../../../src/harness/v1/request-context.ts","../../../src/harness/v1/skills.types.ts","../../../src/harness/v1/tools.ts","../../../src/harness/v1/session.ts","../../../src/harness/v1/harness.ts"],"names":["randomUUID","RequestContext","z","task","createTool","toStandardSchema","item","skill","augmentWithInit","Workspace","createHash"],"mappings":";;;;;;;;;;AA2EO,IAAM,uBAAA,GAA0B,YAAA;AAOhC,IAAM,sBAAA,GAAN,cAAqC,KAAA,CAAM;AAAA,EAChD,WAAA,CACW,MACT,OAAA,EACA;AACA,IAAA,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AAHlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAIT,IAAA,IAAA,CAAK,IAAA,GAAO,wBAAA;AAAA,EACd;AAAA,EALW,IAAA;AAMb,CAAA;AAEO,IAAM,8BAAA,GAAN,cAA6C,sBAAA,CAAuB;AAAA,EACzE,WAAA,CACW,SAAA,EACA,MAAA,EACA,SAAA,EACT;AACA,IAAA,KAAA,CAAM,eAAA,EAAiB,CAAA,cAAA,EAAiB,SAAS,CAAA,oCAAA,EAAuC,MAAM,CAAA,CAAE,CAAA;AAJvF,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AAGT,IAAA,IAAA,CAAK,IAAA,GAAO,gCAAA;AAAA,EACd;AAAA,EANW,SAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAKb,CAAA;AAwBO,SAAS,oBAAA,CAAqB,OAAe,QAAA,EAA0B;AAC5E,EAAA,IAAI,MAAM,MAAA,KAAW,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EAAG;AAC7C,IAAA,MAAM,IAAI,sBAAA,CAAuB,eAAA,EAAiB,kDAAkD,CAAA;AAAA,EACtG;AACA,EAAA,IAAI,CAAC,MAAA,CAAO,aAAA,CAAc,QAAQ,CAAA,IAAK,WAAW,CAAA,EAAG;AACnD,IAAA,MAAM,IAAI,sBAAA,CAAuB,kBAAA,EAAoB,8CAA8C,CAAA;AAAA,EACrG;AACA,EAAA,OAAO,CAAA,EAAG,uBAAuB,CAAA,CAAA,EAAI,KAAK,IAAI,QAAQ,CAAA,CAAA;AACxD;AAEO,SAAS,oBAAoB,OAAA,EAAuC;AACzE,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA;AAC/B,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,KAAM,uBAAA,IAA2B,KAAA,CAAM,CAAC,CAAA,KAAM,EAAA,IAAM,KAAA,CAAM,CAAC,MAAM,EAAA,EAAI;AACpG,IAAA,MAAM,IAAI,sBAAA,CAAuB,aAAA,EAAe,oDAAoD,CAAA;AAAA,EACtG;AAEA,EAAA,MAAM,YAAA,GAAe,MAAM,CAAC,CAAA;AAC5B,EAAA,IAAI,CAAC,mBAAA,CAAoB,IAAA,CAAK,YAAY,CAAA,EAAG;AAC3C,IAAA,MAAM,IAAI,sBAAA,CAAuB,aAAA,EAAe,uDAAuD,CAAA;AAAA,EACzG;AAEA,EAAA,MAAM,QAAA,GAAW,OAAO,YAAY,CAAA;AACpC,EAAA,IAAI,CAAC,MAAA,CAAO,aAAA,CAAc,QAAQ,CAAA,EAAG;AACnC,IAAA,MAAM,IAAI,sBAAA,CAAuB,aAAA,EAAe,gEAAgE,CAAA;AAAA,EAClH;AAEA,EAAA,OAAO,EAAE,KAAA,EAAO,KAAA,CAAM,CAAC,GAAI,QAAA,EAAS;AACtC;AAEO,SAAS,sBACd,MAAA,EAC4D;AAC5D,EAAA,OAAO;AAAA,IACL,YAAY,MAAA,CAAO,UAAA;AAAA,IACnB,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,iBAAiB,MAAA,CAAO,eAAA;AAAA,IACxB,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,SAAS,MAAA,CAAO;AAAA,GAClB;AACF;AAEO,SAAS,sBAAsB,SAAA,EAAyB;AAC7D,EAAA,IAAI,oBAAA,CAAqB,GAAA,CAAI,SAAS,CAAA,IAAK,uBAAA,CAAwB,IAAA,CAAK,CAAA,MAAA,KAAU,SAAA,CAAU,UAAA,CAAW,MAAM,CAAC,CAAA,EAAG;AAC/G,IAAA,MAAM,IAAI,sBAAA,CAAuB,YAAA,EAAc,CAAA,CAAA,EAAI,SAAS,CAAA,4BAAA,CAA8B,CAAA;AAAA,EAC5F;AACA,EAAA,IAAI,CAAC,SAAA,CAAU,QAAA,CAAS,GAAG,CAAA,EAAG;AAC5B,IAAA,MAAM,IAAI,sBAAA,CAAuB,YAAA,EAAc,kDAAkD,CAAA;AAAA,EACnG;AACF;AAEO,SAAS,sBAAA,CAAuB,SAAA,EAAmB,SAAA,EAA+B,KAAA,EAAsB;AAC7G,EAAA,cAAA,CAAe,SAAA,EAAW,SAAA,EAAW,KAAA,kBAAO,IAAI,SAAiB,CAAA;AACnE;AAEO,IAAM,YAAA,GAAN,MAAM,aAAA,CAAa;AAAA,EACP,YAAoC,EAAC;AAAA,EAC9C,KAAA;AAAA,EACA,GAAA;AAAA,EACS,KAAA;AAAA,EACA,OAAA;AAAA,EAEjB,YACE,KAAA,GAAsB,EAAC,EACvB,IAAA,GAAkF,EAAC,EACnF;AACA,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,UAAU,IAAA,CAAK,OAAA;AACpB,IAAA,IAAA,CAAK,QAAQ,IAAA,CAAK,KAAA;AAClB,IAAA,IAAA,CAAK,GAAA,GAAM,KAAK,YAAA,IAAgB,CAAA;AAChC,IAAA,oBAAA,CAAqB,IAAA,CAAK,KAAA,IAAS,eAAA,EAAiB,IAAA,CAAK,GAAG,CAAA;AAAA,EAC9D;AAAA,EAEA,OAAO,KAAA,EAAmC;AACxC,IAAA,OAAO,IAAI,aAAA;AAAA,MACT,EAAE,GAAG,IAAA,CAAK,KAAA,EAAO,GAAG,KAAA,EAAM;AAAA,MAC1B;AAAA,QACE,OAAA,EAAS,CAAA,KAAA,KAAS,IAAA,CAAK,OAAA,CAAQ,KAAK;AAAA;AACtC,KACF;AAAA,EACF;AAAA,EAEA,UAAU,QAAA,EAAyD;AACjE,IAAA,IAAA,CAAK,SAAA,CAAU,KAAK,QAAQ,CAAA;AAC5B,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,QAAQ,CAAA;AAC7C,MAAA,IAAI,UAAU,EAAA,EAAI,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,IAClD,CAAA;AAAA,EACF;AAAA,EAEA,IAAA,CAAK,OAAkB,SAAA,EAAkD;AACvE,IAAA,MAAM,SAAA,GAAY,SAAA,EAAW,SAAA,IAAa,IAAA,CAAK,KAAA,CAAM,SAAA;AACrD,IAAA,IAAA,CAAK,mBAAA,CAAoB,OAAO,SAAS,CAAA;AACzC,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,GAAG,KAAA;AAAA,MACH,EAAA,EAAI,oBAAA,CAAqB,IAAA,CAAK,OAAA,EAAS,KAAK,GAAA,EAAK,CAAA;AAAA,MACjD,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,GAAI,SAAA,KAAc,MAAA,IAAa,EAAE,SAAA;AAAU,KAC7C;AACA,IAAA,IAAA,CAAK,SAAS,OAAO,CAAA;AACrB,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEA,QAAQ,KAAA,EAA2B;AACjC,IAAA,IAAA,CAAK,SAAS,KAAK,CAAA;AAAA,EACrB;AAAA,EAEA,IAAI,aAAA,GAAwB;AAC1B,IAAA,OAAO,KAAK,SAAA,CAAU,MAAA;AAAA,EACxB;AAAA,EAEA,IAAI,OAAA,GAAkB;AACpB,IAAA,IAAA,CAAK,UAAUA,iBAAA,EAAW;AAC1B,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEQ,mBAAA,CAAoB,OAAkB,SAAA,EAAqC;AACjF,IAAA,MAAM,YAAa,KAAA,CAA6B,IAAA;AAChD,IAAA,IAAI,OAAO,SAAA,KAAc,QAAA,IAAY,oBAAA,CAAqB,GAAA,CAAI,SAAS,CAAA,EAAG;AAE1E,IAAA,qBAAA,CAAsB,SAAS,CAAA;AAC/B,IAAA,IAAI,OAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,KAAA,EAAO,SAAS,CAAA,EAAG;AAC1D,MAAA,sBAAA,CAAuB,SAAA,EAAW,SAAA,EAAY,KAAA,CAAgC,OAAO,CAAA;AAAA,IACvF;AAAA,EACF;AAAA,EAEQ,SAAS,KAAA,EAA2B;AAC1C,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA;AACjC,QAAA,IAAI,MAAA,IAAU,OAAQ,MAAA,CAAyB,KAAA,KAAU,UAAA,EAAY;AACnE,UAAC,OAAyB,KAAA,CAAM,CAAA,GAAA,KAAO,QAAQ,KAAA,CAAM,0CAAA,EAA4C,GAAG,CAAC,CAAA;AAAA,QACvG;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAA,CAAQ,KAAA,CAAM,yCAAyC,GAAG,CAAA;AAAA,MAC5D;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,QAAA,IAAY,CAAC,GAAG,IAAA,CAAK,SAAS,CAAA,EAAG;AAC1C,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,SAAS,KAAK,CAAA;AAC7B,QAAA,IAAI,MAAA,IAAU,OAAQ,MAAA,CAAyB,KAAA,KAAU,UAAA,EAAY;AACnE,UAAC,OAAyB,KAAA,CAAM,CAAA,GAAA,KAAO,QAAQ,KAAA,CAAM,uCAAA,EAAyC,GAAG,CAAC,CAAA;AAAA,QACpG;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAA,CAAQ,KAAA,CAAM,sCAAsC,GAAG,CAAA;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,oBAAA,uBAA2B,GAAA,CAAI;AAAA,EACnC,iBAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,IAAM,uBAAA,GAA0B,CAAC,UAAA,EAAY,SAAS,CAAA;AAEtD,SAAS,cAAA,CAAe,SAAA,EAAmB,SAAA,EAA+B,KAAA,EAAgB,IAAA,EAA6B;AACrH,EAAA,IAAI,KAAA,KAAU,MAAA,EAAW,kBAAA,CAAmB,SAAA,EAAW,WAAW,WAAW,CAAA;AAC7E,EAAA,IAAI,OAAO,KAAA,KAAU,UAAA,EAAY,kBAAA,CAAmB,SAAA,EAAW,WAAW,UAAU,CAAA;AACpF,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,kBAAA,CAAmB,SAAA,EAAW,WAAW,QAAQ,CAAA;AAChF,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,kBAAA,CAAmB,SAAA,EAAW,WAAW,QAAQ,CAAA;AAChF,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,SAAA,EAAW;AAC5G,EAAA,IAAI,KAAA,YAAiB,IAAA,EAAM,kBAAA,CAAmB,SAAA,EAAW,WAAW,MAAM,CAAA;AAC1E,EAAA,IAAI,KAAA,YAAiB,GAAA,EAAK,kBAAA,CAAmB,SAAA,EAAW,WAAW,KAAK,CAAA;AACxE,EAAA,IAAI,KAAA,YAAiB,GAAA,EAAK,kBAAA,CAAmB,SAAA,EAAW,WAAW,KAAK,CAAA;AACxE,EAAA,IAAI,YAAY,MAAA,CAAO,KAAK,GAAG,kBAAA,CAAmB,SAAA,EAAW,WAAW,aAAa,CAAA;AACrF,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAE/B,EAAA,IAAI,KAAK,GAAA,CAAI,KAAK,GAAG,kBAAA,CAAmB,SAAA,EAAW,WAAW,OAAO,CAAA;AACrE,EAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAEd,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO,cAAA,CAAe,SAAA,EAAW,SAAA,EAAW,MAAM,IAAI,CAAA;AACzE,IAAA,IAAA,CAAK,OAAO,KAAK,CAAA;AACjB,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,cAAA,CAAe,KAAK,CAAA;AAC7C,EAAA,IAAI,SAAA,KAAc,MAAA,CAAO,SAAA,IAAa,SAAA,KAAc,IAAA,EAAM;AACxD,IAAA,kBAAA,CAAmB,SAAA,EAAW,WAAW,kBAAkB,CAAA;AAAA,EAC7D;AAEA,EAAA,KAAA,MAAW,IAAA,IAAQ,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA,EAAG;AACvC,IAAA,cAAA,CAAe,SAAA,EAAW,SAAA,EAAW,IAAA,EAAM,IAAI,CAAA;AAAA,EACjD;AACA,EAAA,IAAA,CAAK,OAAO,KAAK,CAAA;AACnB;AAEA,SAAS,kBAAA,CAAmB,SAAA,EAAmB,SAAA,EAA+B,MAAA,EAAyC;AACrH,EAAA,MAAM,IAAI,8BAAA,CAA+B,SAAA,EAAW,MAAA,EAAQ,SAAS,CAAA;AACvE;;;ACvSO,SAAS,0BAAA,CAAmC;AAAA,EACjD;AACF,CAAA,EAA8D;AAC5D,EAAA,MAAM,cAAA,GAAiB,IAAIC,gCAAA,EAAwB;AACnD,EAAA,cAAA,CAAe,GAAA,CAAI,WAAW,cAAc,CAAA;AAC5C,EAAA,OAAO,cAAA;AACT;;;ACbO,IAAM,yBAAA,GAAN,cAAwC,KAAA,CAAM;AAAA,EAC1C,IAAA,GAAO,2BAAA;AAAA,EACP,SAAA;AAAA,EACA,eAAA;AAAA,EAET,YAAY,IAAA,EAAiE;AAC3E,IAAA,KAAA,CAAM,CAAA,yBAAA,EAA4B,IAAA,CAAK,IAAI,CAAA,YAAA,EAAe,IAAA,CAAK,gBAAgB,IAAA,CAAK,IAAI,CAAA,IAAK,MAAM,CAAA,CAAA,CAAG,CAAA;AACtG,IAAA,IAAA,CAAK,YAAY,IAAA,CAAK,IAAA;AACtB,IAAA,IAAA,CAAK,kBAAkB,IAAA,CAAK,eAAA;AAAA,EAC9B;AACF;ACwBA,IAAM,UAAA,GAAaC,MAAE,MAAA,CAAO;AAAA,EAC1B,EAAA,EAAIA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACxB,OAAA,EAASA,MAAE,MAAA,EAAO;AAAA,EAClB,QAAQA,KAAA,CAAE,IAAA,CAAK,CAAC,SAAA,EAAW,aAAA,EAAe,WAAW,CAAC,CAAA;AAAA,EACtD,UAAA,EAAYA,MAAE,MAAA;AAChB,CAAC,CAAA;AAED,IAAM,gBAAA,GAAmBA,MAAE,MAAA,CAAO;AAAA,EAChC,EAAA,EAAIA,MAAE,MAAA,EAAO;AAAA,EACb,OAAA,EAASA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,MAAA,EAAQA,MAAE,IAAA,CAAK,CAAC,WAAW,aAAA,EAAe,WAAW,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EACjE,UAAA,EAAYA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACzB,CAAC,CAAA;AAED,SAAS,kBAAkB,OAAA,EAAsD;AAC/E,EAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,cAAA,EAAgB,GAAA,CAAsC,SAAS,CAAA;AAC9F,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA,MAAM,IAAI,MAAM,uEAAuE,CAAA;AAAA,EACzF;AACA,EAAA,OAAO,cAAA;AACT;AAEA,SAAS,mBAAA,CAAoB,SAAqB,OAAA,EAAsD;AACtG,EAAA,MAAM,cAAA,GAAiB,kBAAkB,OAAO,CAAA;AAChD,EAAA,IAAI,cAAA,CAAe,SAAA,KAAc,OAAA,CAAQ,EAAA,EAAI;AAC3C,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,mDAAA,EAAsD,cAAA,CAAe,SAAS,CAAA,QAAA,EAAW,QAAQ,EAAE,CAAA,CAAA;AAAA,KACrG;AAAA,EACF;AACA,EAAA,OAAO,cAAA;AACT;AAEA,SAAS,gBAAA,CAAiB,KAAA,EAAgB,IAAA,GAAO,qBAAA,EAAuB;AACtE,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,IAAA;AAAA,IACT,IAAA;AAAA,IACA,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,GAChE;AACF;AAEA,SAAS,YAAY,KAAA,EAA4B;AAC/C,EAAA,MAAM,YAAY,KAAA,CAAM,MAAA,CAAO,UAAQ,IAAA,CAAK,MAAA,KAAW,WAAW,CAAA,CAAE,MAAA;AACpE,EAAA,MAAM,aAAa,KAAA,CAAM,MAAA,CAAO,UAAQ,IAAA,CAAK,MAAA,KAAW,aAAa,CAAA,CAAE,MAAA;AACvE,EAAA,MAAM,UAAU,KAAA,CAAM,MAAA,CAAO,UAAQ,IAAA,CAAK,MAAA,KAAW,SAAS,CAAA,CAAE,MAAA;AAChE,EAAA,MAAM,kBAAkB,KAAA,CAAM,MAAA,CAAO,CAAA,IAAA,KAAQ,IAAA,CAAK,WAAW,WAAW,CAAA;AACxE,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,OAAA,EAAS;AAAA,MACP,OAAO,KAAA,CAAM,MAAA;AAAA,MACb,SAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAA;AAAA,MACA,YAAY,eAAA,CAAgB,MAAA;AAAA,MAC5B,QAAA,EAAU,MAAM,MAAA,GAAS,CAAA;AAAA,MACzB,YAAA,EAAc,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,gBAAgB,MAAA,KAAW;AAAA,KAC/D;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,SAAS,OAAA,EAA0C;AAC1D,EAAA,MAAM,KAAA,GAAQ,QAAQ,QAAA,EAAS;AAC/B,EAAA,OAAA,CAAQ,KAAA,CAAM,SAAS,EAAC,EAAG,IAAI,CAAA,IAAA,MAAS,EAAE,GAAG,IAAA,EAAK,CAAE,CAAA;AACtD;AAEA,eAAe,YAAA,CAAa,SAAqB,KAAA,EAA0D;AACzG,EAAA,OAAO,OAAA,CAAQ,YAAY,OAAO;AAAA,IAChC,OAAA,EAAS,EAAE,KAAA,EAAO,KAAA,CAAM,GAAA,CAAI,WAAS,EAAE,GAAG,IAAA,EAAK,CAAE,CAAA,EAAE;AAAA,IACnD,QAAQ,KAAA,CAAM,GAAA,CAAI,WAAS,EAAE,GAAG,MAAK,CAAE;AAAA,GACzC,CAAE,CAAA;AACJ;AAEA,eAAe,UAAA,CACb,OAAA,EACA,MAAA,EACA,OAAA,EAC8B;AAC9B,EAAA,OAAO,OAAA,CAAQ,WAAA,CAAY,CAAC,KAAA,KAA+B;AACzD,IAAA,MAAM,KAAA,GAAA,CAAS,KAAA,CAAM,KAAA,IAAS,EAAC,EAAG,GAAA,CAAI,CAAAC,KAAAA,MAAS,EAAE,GAAGA,KAAAA,EAAK,CAAE,CAAA;AAC3D,IAAA,MAAM,OAAO,KAAA,CAAM,IAAA,CAAK,CAAAA,KAAAA,KAAQA,KAAAA,CAAK,OAAO,MAAM,CAAA;AAClD,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,cAAA,EAAiB,MAAM,CAAA,4BAAA,EAA+B,OAAA,CAAQ,EAAE,CAAA,CAAA,CAAG,CAAA;AAAA,IACrF;AACA,IAAA,MAAA,CAAO,MAAA,CAAO,MAAM,OAAO,CAAA;AAC3B,IAAA,OAAO,EAAE,OAAA,EAAS,EAAE,KAAA,EAAM,EAAG,QAAQ,KAAA,EAAM;AAAA,EAC7C,CAAC,CAAA;AACH;AAEO,SAAS,yBAAyB,OAAA,EAAiC;AACxE,EAAA,OAAO;AAAA,IACL,YAAYC,4BAAA,CAAW;AAAA,MACrB,EAAA,EAAI,YAAA;AAAA,MACJ,WAAA,EAAa,wDAAA;AAAA,MACb,WAAA,EAAaF,KAAA,CAAE,MAAA,CAAO,EAAE,KAAA,EAAOA,KAAA,CAAE,KAAA,CAAM,UAAU,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA;AAAA,MAC3D,OAAA,EAAS,OAAO,EAAE,KAAA,IAAS,OAAA,KAAY;AACrC,QAAA,IAAI;AACF,UAAA,mBAAA,CAAoB,SAAS,OAAO,CAAA;AACpC,UAAA,MAAM,aAAa,MAAM,YAAA;AAAA,YACvB,OAAA;AAAA,YACA,KAAA,CAAM,GAAA,CAAI,CAAA,IAAA,MAAS,EAAE,GAAG,IAAA,EAAM,EAAA,EAAI,IAAA,CAAK,EAAA,IAAMF,iBAAAA,EAAW,EAAE,CAAE;AAAA,WAC9D;AACA,UAAA,OAAO,YAAY,UAAU,CAAA;AAAA,QAC/B,SAAS,KAAA,EAAO;AACd,UAAA,OAAO,iBAAiB,KAAK,CAAA;AAAA,QAC/B;AAAA,MACF;AAAA,KACD,CAAA;AAAA,IACD,aAAaI,4BAAA,CAAW;AAAA,MACtB,EAAA,EAAI,aAAA;AAAA,MACJ,WAAA,EAAa,iDAAA;AAAA,MACb,WAAA,EAAa,gBAAA;AAAA,MACb,SAAS,OAAO,EAAE,IAAI,GAAG,OAAA,IAAW,OAAA,KAAY;AAC9C,QAAA,IAAI;AACF,UAAA,mBAAA,CAAoB,SAAS,OAAO,CAAA;AACpC,UAAA,OAAO,YAAY,MAAM,UAAA,CAAW,OAAA,EAAS,EAAA,EAAI,OAAO,CAAC,CAAA;AAAA,QAC3D,SAAS,KAAA,EAAO;AACd,UAAA,OAAO,iBAAiB,KAAK,CAAA;AAAA,QAC/B;AAAA,MACF;AAAA,KACD,CAAA;AAAA,IACD,eAAeA,4BAAA,CAAW;AAAA,MACxB,EAAA,EAAI,eAAA;AAAA,MACJ,WAAA,EAAa,yDAAA;AAAA,MACb,WAAA,EAAaF,MAAE,MAAA,CAAO,EAAE,IAAIA,KAAA,CAAE,MAAA,IAAU,CAAA;AAAA,MACxC,OAAA,EAAS,OAAO,EAAE,EAAA,IAAM,OAAA,KAAY;AAClC,QAAA,IAAI;AACF,UAAA,mBAAA,CAAoB,SAAS,OAAO,CAAA;AACpC,UAAA,OAAO,WAAA,CAAY,MAAM,UAAA,CAAW,OAAA,EAAS,IAAI,EAAE,MAAA,EAAQ,WAAA,EAAa,CAAC,CAAA;AAAA,QAC3E,SAAS,KAAA,EAAO;AACd,UAAA,OAAO,iBAAiB,KAAK,CAAA;AAAA,QAC/B;AAAA,MACF;AAAA,KACD,CAAA;AAAA,IACD,YAAYE,4BAAA,CAAW;AAAA,MACrB,EAAA,EAAI,YAAA;AAAA,MACJ,WAAA,EAAa,iEAAA;AAAA,MACb,aAAaF,KAAA,CAAE,MAAA,CAAO,EAAE,EAAE,QAAA,EAAS;AAAA,MACnC,OAAA,EAAS,OAAO,MAAA,EAAQ,OAAA,KAAY;AAClC,QAAA,IAAI;AACF,UAAA,mBAAA,CAAoB,SAAS,OAAO,CAAA;AACpC,UAAA,OAAO,WAAA,CAAY,QAAA,CAAS,OAAO,CAAC,CAAA;AAAA,QACtC,SAAS,KAAA,EAAO;AACd,UAAA,OAAO,iBAAiB,KAAK,CAAA;AAAA,QAC/B;AAAA,MACF;AAAA,KACD,CAAA;AAAA,IACD,UAAUE,4BAAA,CAAW;AAAA,MACnB,EAAA,EAAI,UAAA;AAAA,MACJ,WAAA,EAAa,8DAAA;AAAA,MACb,WAAA,EAAaF,MAAE,MAAA,CAAO;AAAA,QACpB,QAAA,EAAUA,MAAE,MAAA,EAAO;AAAA,QACnB,OAAA,EAASA,KAAA,CACN,KAAA,CAAMA,KAAA,CAAE,MAAA,CAAO,EAAE,KAAA,EAAOA,KAAA,CAAE,MAAA,EAAO,EAAG,WAAA,EAAaA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS,EAAG,CAAC,CAAA,CACpF,GAAA,CAAI,CAAC,CAAA,CACL,GAAA,CAAI,CAAC,CAAA,CACL,QAAA,GACA,QAAA,EAAS;AAAA,QACZ,aAAA,EAAeA,MAAE,IAAA,CAAK,CAAC,iBAAiB,cAAc,CAAC,EAAE,QAAA;AAAS,OACnE,CAAA;AAAA,MACD,OAAA,EAAS,OAAO,KAAA,EAAO,OAAA,KAAY;AACjC,QAAA,IAAI;AACF,UAAA,mBAAA,CAAoB,SAAS,OAAO,CAAA;AACpC,UAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,mBAAA,CAAoB;AAAA,YAChD,IAAIF,iBAAAA,EAAW;AAAA,YACf,IAAA,EAAM,UAAA;AAAA,YACN,MAAA,EAAQ,SAAA;AAAA,YACR,OAAO,OAAA,CAAQ,KAAA,EAAO,KAAA,IAAS,OAAA,CAAQ,UAAU,KAAA,IAAS,IAAA;AAAA,YAC1D,OAAA,EAAS,QAAQ,OAAA,IAAW,IAAA;AAAA,YAC5B,OAAA,EAAS;AAAA,WACV,CAAA;AACD,UAAA,OAAO,EAAE,SAAS,KAAA,EAAO,aAAA,EAAe,QAAQ,EAAA,EAAI,MAAA,EAAQ,QAAQ,MAAA,EAAO;AAAA,QAC7E,SAAS,KAAA,EAAO;AACd,UAAA,OAAO,iBAAiB,KAAK,CAAA;AAAA,QAC/B;AAAA,MACF;AAAA,KACD,CAAA;AAAA,IACD,aAAaI,4BAAA,CAAW;AAAA,MACtB,EAAA,EAAI,aAAA;AAAA,MACJ,WAAA,EAAa,mEAAA;AAAA,MACb,aAAaF,KAAA,CAAE,MAAA,CAAO,EAAE,KAAA,EAAOA,MAAE,MAAA,EAAO,CAAE,QAAA,EAAS,CAAE,UAAS,EAAG,IAAA,EAAMA,KAAA,CAAE,MAAA,IAAU,CAAA;AAAA,MACnF,OAAA,EAAS,OAAO,KAAA,EAAO,OAAA,KAAY;AACjC,QAAA,IAAI;AACF,UAAA,mBAAA,CAAoB,SAAS,OAAO,CAAA;AACpC,UAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,mBAAA,CAAoB;AAAA,YAChD,IAAIF,iBAAAA,EAAW;AAAA,YACf,IAAA,EAAM,eAAA;AAAA,YACN,MAAA,EAAQ,SAAA;AAAA,YACR,OAAO,OAAA,CAAQ,KAAA,EAAO,KAAA,IAAS,OAAA,CAAQ,UAAU,KAAA,IAAS,IAAA;AAAA,YAC1D,OAAA,EAAS,QAAQ,OAAA,IAAW,IAAA;AAAA,YAC5B,OAAA,EAAS,EAAE,GAAG,KAAA,EAAO,kBAAkB,OAAA,CAAQ,OAAA,GAAU,aAAA;AAAc,WACxE,CAAA;AACD,UAAA,OAAO,EAAE,SAAS,KAAA,EAAO,aAAA,EAAe,QAAQ,EAAA,EAAI,MAAA,EAAQ,QAAQ,MAAA,EAAO;AAAA,QAC7E,SAAS,KAAA,EAAO;AACd,UAAA,OAAO,iBAAiB,KAAK,CAAA;AAAA,QAC/B;AAAA,MACF;AAAA,KACD,CAAA;AAAA,IACD,UAAUI,4BAAA,CAAW;AAAA,MACnB,EAAA,EAAI,UAAA;AAAA,MACJ,WAAA,EAAa,wEAAA;AAAA,MACb,WAAA,EAAaF,MAAE,MAAA,CAAO;AAAA,QACpB,SAAA,EAAWA,MAAE,MAAA,EAAO;AAAA,QACpB,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA,QACjB,SAASA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,QACxC,QAAQA,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,GAAW,QAAA;AAAS,OACzC,CAAA;AAAA,MACD,OAAA,EAAS,OAAO,KAAA,EAAO,OAAA,KAAY;AACjC,QAAA,IAAI;AACF,UAAA,mBAAA,CAAoB,SAAS,OAAO,CAAA;AACpC,UAAA,OAAO,MAAM,QAAQ,oBAAA,CAAqB;AAAA,YACxC,WAAW,KAAA,CAAM,SAAA;AAAA,YACjB,QAAQ,KAAA,CAAM,MAAA;AAAA,YACd,GAAI,MAAM,OAAA,GAAU,EAAE,SAAS,KAAA,CAAM,OAAA,KAAY,EAAC;AAAA,YAClD,GAAI,KAAA,CAAM,MAAA,KAAW,MAAA,IAAa,KAAA,CAAM,MAAA,KAAW,IAAA,GAAO,EAAE,MAAA,EAAQ,KAAA,CAAM,MAAA,EAAO,GAAI;AAAC,WACvF,CAAA;AAAA,QACH,SAAS,KAAA,EAAO;AACd,UAAA,OAAO,iBAAiB,KAAK,CAAA;AAAA,QAC/B;AAAA,MACF;AAAA,KACD,CAAA;AAAA,IACD,UAAUE,4BAAA,CAAW;AAAA,MACnB,EAAA,EAAI,UAAA;AAAA,MACJ,WAAA,EAAa,kDAAA;AAAA,MACb,WAAA,EAAaF,MAAE,MAAA,CAAO,EAAE,KAAKA,KAAA,CAAE,MAAA,IAAU,CAAA;AAAA,MACzC,OAAA,EAAS,OAAO,EAAE,GAAA,IAAO,OAAA,KAAY;AACnC,QAAA,IAAI;AACF,UAAA,mBAAA,CAAoB,SAAS,OAAO,CAAA;AACpC,UAAA,OAAO,EAAE,YAAA,EAAc,MAAM,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAE;AAAA,QACrD,SAAS,KAAA,EAAO;AACd,UAAA,OAAO,iBAAiB,KAAK,CAAA;AAAA,QAC/B;AAAA,MACF;AAAA,KACD;AAAA,GACH;AACF;AAYO,SAAS,oBAAA,CAAqB,IAAA,GAAoC,EAAC,EAAe;AACvF,EAAA,MAAM,EAAE,UAAA,EAAY,aAAA,EAAe,YAAA,EAAc,eAAA,EAAiB,eAAc,GAAI,IAAA;AAEpF,EAAA,MAAM,IAAA,GAAgC,aAAA,EAAe,KAAA,GACjD,EAAE,GAAI,cAAc,KAAA,EAAkC,GACtD,EAAE,GAAI,UAAA,EAAmD;AAE7D,EAAA,IAAI,aAAA,EAAe,eAAA,IAAmB,CAAC,aAAA,CAAc,KAAA,EAAO;AAC1D,IAAA,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,aAAA,CAAc,eAAe,CAAA;AAAA,EACnD;AAEA,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,MAAA,CAAO,MAAA,CAAO,MAAM,YAAY,CAAA;AAAA,EAClC;AAEA,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAY,aAAA,IAAiB,EAAE,CAAA;AACnD,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,MAAM,CAAA,IAAK,MAAA,CAAO,QAAQ,eAAA,EAAiB,KAAA,IAAS,EAAE,CAAA,EAAG;AACzE,IAAA,IAAI,MAAA,KAAW,MAAA,EAAQ,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AAAA,EACzC;AAEA,EAAA,KAAA,MAAW,QAAQ,OAAA,EAAS;AAC1B,IAAA,OAAO,KAAK,IAAI,CAAA;AAAA,EAClB;AAEA,EAAA,OAAO,IAAA;AACT;;;ACtSO,IAAM,OAAA,GAAN,MAAM,QAAA,CAAqB;AAAA;AAAA,EAEvB,GAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACT,eAAA;AAAA,EACS,MAAA;AAAA,EACA,QAAA;AAAA,EACA,+BAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,OAAA;AAAA,EACT,QAAA;AAAA,EACA,UAAA,GAAuE,MAAA;AAAA,EACvE,aAAA,GAA+B,IAAA;AAAA,EAC/B,eAAA,GAAiC,IAAA;AAAA,EACxB,OAAA;AAAA,EACA,OAAA;AAAA,EACA,iBAAA;AAAA,EACA,YAAA;AAAA,EACT,MAAA;AAAA,EACA,iBAAA,GAAmC,QAAQ,OAAA,EAAQ;AAAA,EAC1C,UAAA;AAAA,EACT,kBAAA;AAAA,EACA,kBAAA,GAAqB,KAAA;AAAA,EACZ,aAAA;AAAA,EACA,YAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMT,uBAAA;AAAA,EACS,UAAA;AAAA,EACA,aAAA;AAAA,EACA,wBAAA;AAAA,EACA,qBAAA;AAAA;AAAA;AAAA,EAIT,QAAA;AAAA,EACA,KAAA;AAAA,EAEA,YAAY,MAAA,EAA+B;AACzC,IAAA,IAAA,CAAK,MAAM,MAAA,CAAO,EAAA;AAClB,IAAA,IAAA,CAAK,WAAW,MAAA,CAAO,OAAA;AACvB,IAAA,IAAA,CAAK,cAAc,MAAA,CAAO,UAAA;AAC1B,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,QAAA;AACxB,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,IAAA;AACpB,IAAA,IAAA,CAAK,WAAW,MAAA,CAAO,KAAA;AACvB,IAAA,IAAA,CAAK,aAAa,MAAA,CAAO,SAAA;AACzB,IAAA,IAAA,CAAK,kBAAkB,MAAA,CAAO,cAAA;AAC9B,IAAA,IAAA,CAAK,WAAW,MAAA,CAAO,OAAA;AACvB,IAAA,IAAA,CAAK,kCAAkC,MAAA,CAAO,8BAAA;AAC9C,IAAA,IAAA,CAAK,gBAAA,GAAmB,OAAO,MAAA,EAAQ,eAAA;AACvC,IAAA,IAAA,CAAK,cAAA,GAAiB,MAAA,CAAO,MAAA,EAAQ,aAAA,IAAiB,CAAA;AACtD,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA,CAAO,MAAA,EAAQ,MAAA,GAC1B,EAAE,MAAM,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,eAAA,EAAiB,MAAA,CAAO,OAAO,MAAA,CAAO,eAAA,EAAgB,GACzF,EAAE,IAAA,EAAM,MAAA,CAAO,MAAA,EAAQ,MAAA,IAAU,WAAA,EAAa,eAAA,EAAiB,MAAA,CAAO,MAAA,EAAQ,eAAA,EAAgB;AAClG,IAAA,IAAA,CAAK,QAAA,GAAA,CAAY,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,MAAA,EAAQ,OAAA,IAAW,EAAC,EAAG,GAAA,CAAI,CAAA,IAAA,MAAS,EAAE,GAAG,MAAK,CAAE,CAAA;AAC1F,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,MAAA;AACtB,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,MAAA;AACtB,IAAA,IAAA,CAAK,oBAAoB,MAAA,CAAO,WAAA;AAChC,IAAA,IAAA,CAAK,eAAe,MAAA,CAAO,WAAA,GAAcG,kCAAA,CAAiB,MAAA,CAAO,WAAW,CAAA,GAAI,MAAA;AAChF,IAAA,IAAA,CAAK,gBAAgB,MAAA,CAAO,YAAA;AAC5B,IAAA,IAAA,CAAK,eAAe,MAAA,CAAO,WAAA;AAC3B,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,GAAG,KAAK,kBAAA,EAAmB;AAAA,MAC3B,GAAG,MAAA,CAAO,YAAA;AAAA,MACV,GAAI,OAAO,MAAA,EAAQ;AAAA,KACrB;AACA,IAAA,IAAA,CAAK,aAAa,MAAA,CAAO,SAAA;AACzB,IAAA,IAAA,CAAK,aAAa,MAAA,CAAO,SAAA;AACzB,IAAA,IAAA,CAAK,gBAAgB,MAAA,CAAO,YAAA;AAC5B,IAAA,IAAA,CAAK,wBAAA,GAA2B,OAAO,uBAAA,IAA2B,KAAA;AAClE,IAAA,IAAA,CAAK,wBAAwB,MAAA,CAAO,oBAAA;AACpC,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,KAAA;AAAA,EACvB;AAAA,EAEA,IAAI,EAAA,GAAa;AACf,IAAA,OAAO,IAAA,CAAK,GAAA;AAAA,EACd;AAAA,EAEA,IAAI,OAAA,GAAkB;AACpB,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA,EAEA,IAAI,UAAA,GAAqB;AACvB,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA,EAEA,IAAI,QAAA,GAAmB;AACrB,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA,EAEA,IAAI,SAAA,GAAkB;AACpB,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAAA,EAEA,IAAI,cAAA,GAAuB;AACzB,IAAA,OAAO,IAAA,CAAK,eAAA;AAAA,EACd;AAAA,EAEA,IAAI,eAAA,GAAsC;AACxC,IAAA,OAAO,IAAA,CAAK,gBAAA;AAAA,EACd;AAAA,EAEA,IAAI,aAAA,GAAwB;AAC1B,IAAA,OAAO,IAAA,CAAK,cAAA;AAAA,EACd;AAAA,EAEA,MAAA,GAAkB;AAChB,IAAA,OAAO,KAAK,eAAA,EAAgB;AAAA,EAC9B;AAAA,EAEA,MAAM,WAAA,CAAY,IAAA,GAA6B,EAAC,EAAkB;AAChE,IAAA,MAAM,OAAA,GAAU,KAAK,OAAA,IAAW,GAAA;AAChC,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,IAAA,OAAO,IAAA,CAAK,iBAAgB,EAAG;AAC7B,MAAA,IAAI,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA,IAAa,OAAA,EAAS;AACrC,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iBAAA,EAAoB,KAAK,GAAG,CAAA,6BAAA,EAAgC,OAAO,CAAA,EAAA,CAAI,CAAA;AAAA,MACzF;AACA,MAAA,MAAM,IAAI,OAAA,CAAQ,CAAA,OAAA,KAAW,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AAAA,IACtD;AAAA,EACF;AAAA,EAEA,aAAA,GAAwB;AACtB,IAAA,OAAO,KAAK,QAAA,CAAS,MAAA,CAAO,UAAQ,IAAA,CAAK,MAAA,KAAW,SAAS,CAAA,CAAE,MAAA;AAAA,EACjE;AAAA,EAEA,eAAA,GAAiC;AAC/B,IAAA,OAAO,IAAA,CAAK,aAAA;AAAA,EACd;AAAA,EAEA,iBAAA,GAAmC;AACjC,IAAA,OAAO,IAAA,CAAK,eAAA;AAAA,EACd;AAAA,EAEA,gBAAA,GAA+C;AAC7C,IAAA,OAAO,KAAK,QAAA,CAAS,GAAA,CAAI,WAAS,EAAE,GAAG,MAAK,CAAE,CAAA;AAAA,EAChD;AAAA,EAEA,MAAM,qBAAqB,IAAA,EAezB;AACA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,UAAA,EAAY,QAAA,IAAY,CAAA;AAC9C,IAAA,MAAM,cAAA,GAAiB,KAAK,cAAA,GAAiB,CAAA;AAC7C,IAAA,IAAI,iBAAiB,QAAA,EAAU;AAC7B,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,IAAA,EAAM,iCAAA;AAAA,QACN,OAAA,EAAS,CAAA,uBAAA,EAA0B,cAAc,CAAA,mCAAA,EAAsC,QAAQ,CAAA,CAAA;AAAA,QAC/F,OAAA,EAAS,EAAE,QAAA,EAAU,cAAA;AAAe,OACtC;AAAA,IACF;AAEA,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,UAAA,EAAY,KAAA,GAAQ,KAAK,SAAS,CAAA;AAC1D,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,IAAA,CAAK,SAAS,CAAA,eAAA,CAAiB,CAAA;AAAA,IAC3E;AAEA,IAAA,IAAI,CAAC,KAAK,aAAA,EAAe;AACvB,MAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA,IACrE;AACA,IAAA,MAAM,IAAA,CAAK,aAAA,CAAc,UAAA,CAAW,OAAO,CAAA;AAE3C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,IAAW,UAAA,CAAW,kBAAkB,IAAA,CAAK,QAAA;AAClE,IAAA,IAAI,CAAC,KAAK,aAAA,EAAe;AACvB,MAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,IAC3E;AACA,IAAA,MAAM,IAAA,CAAK,cAAc,OAAO,CAAA;AAEhC,IAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,IAAA,MAAM,MAAA,GAAwB;AAAA,MAC5B,EAAA,EAAI,CAAA,KAAA,EAAQL,iBAAAA,EAAY,CAAA,CAAA;AAAA,MACxB,SAAS,IAAA,CAAK,QAAA;AAAA,MACd,YAAY,IAAA,CAAK,WAAA;AAAA,MACjB,QAAA,EAAU,CAAA,OAAA,EAAUA,iBAAAA,EAAY,CAAA,CAAA;AAAA,MAChC,iBAAiB,IAAA,CAAK,GAAA;AAAA,MACtB,MAAA,EAAQ,eAAA;AAAA,MACR,QAAQ,EAAE,IAAA,EAAM,eAAA,EAAiB,eAAA,EAAiB,KAAK,GAAA,EAAI;AAAA,MAC3D,aAAA,EAAe,cAAA;AAAA,MACf,gCAAgC,IAAA,CAAK,+BAAA;AAAA,MACrC,MAAA,EAAQ,KAAK,KAAA,CAAM,EAAA;AAAA,MACnB,OAAA;AAAA,MACA,QAAA,EAAU;AAAA,QACR,WAAW,IAAA,CAAK,SAAA;AAAA,QAChB,SAAS,UAAA,CAAW,OAAA;AAAA,QACpB,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,MAAA,EAAQ,IAAA,CAAK,MAAA,IAAU,UAAA,CAAW,MAAA,IAAU;AAAA,OAC9C;AAAA,MACA,KAAA,EAAO,KAAK,QAAA,EAAS;AAAA,MACrB,SAAS,EAAC;AAAA,MACV,SAAA,EAAW,GAAA;AAAA,MACX,cAAA,EAAgB;AAAA,KAClB;AAEA,IAAA,MAAM,IAAA,CAAK,QAAA,CAAS,WAAA,CAAY,MAAM,CAAA;AACtC,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,mBAAmB,GAAG,qBAAA,CAAsB,MAAM,CAAA,EAAE,EAAG,EAAE,SAAA,EAAW,MAAA,CAAO,IAAI,CAAA;AACzG,IAAA,IAAA,CAAK,QAAQ,IAAA,CAAK;AAAA,MAChB,IAAA,EAAM,gBAAA;AAAA,MACN,mBAAmB,MAAA,CAAO,EAAA;AAAA,MAC1B,OAAA,EAAS,EAAE,SAAA,EAAW,IAAA,CAAK,WAAW,eAAA,EAAiB,IAAA,CAAK,GAAA,EAAK,KAAA,EAAO,cAAA;AAAe,KACxF,CAAA;AAED,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,mBAAmB,MAAA,CAAO,EAAA;AAAA,MAC1B,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,YAAY,MAAA,CAAO,UAAA;AAAA,MACnB,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AAAA,EAEA,MAAM,oBACJ,IAAA,EAImC;AACnC,IAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,IAAA,MAAM,MAAA,GAAmC;AAAA,MACvC,GAAG,IAAA;AAAA,MACH,WAAW,IAAA,CAAK,GAAA;AAAA,MAChB,8BAAA,EAAgC,IAAA,CAAK,8BAAA,IAAkC,IAAA,CAAK,+BAAA;AAAA,MAC5E,SAAA,EAAW,KAAK,SAAA,IAAa,GAAA;AAAA,MAC7B,SAAA,EAAW,KAAK,SAAA,IAAa;AAAA,KAC/B;AACA,IAAA,IAAA,CAAK,QAAA,GAAW,CAAC,GAAG,IAAA,CAAK,UAAU,MAAM,CAAA;AACzC,IAAA,MAAM,IAAA,CAAK,QAAA,CAAS,iBAAA,CAAkB,IAAA,CAAK,KAAK,MAAM,CAAA;AACtD,IAAA,MAAM,KAAK,uBAAA,EAAwB;AACnC,IAAA,OAAO,EAAE,GAAG,MAAA,EAAO;AAAA,EACrB;AAAA,EAEA,MAAM,iBAAA,CACJ,aAAA,EACA,OAAA,EACmC;AACnC,IAAA,MAAM,KAAK,QAAA,CAAS,iBAAA,CAAkB,IAAA,CAAK,GAAA,EAAK,eAAe,OAAO,CAAA;AACtE,IAAA,MAAM,KAAK,uBAAA,EAAwB;AACnC,IAAA,MAAM,IAAA,GAAO,KAAK,QAAA,CAAS,IAAA,CAAK,CAAAM,KAAAA,KAAQA,KAAAA,CAAK,OAAO,aAAa,CAAA;AACjE,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,aAAa,CAAA,4BAAA,EAA+B,IAAA,CAAK,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,IAClG;AACA,IAAA,OAAO,EAAE,GAAG,IAAA,EAAK;AAAA,EACnB;AAAA,EAEA,MAAM,kBAAkB,aAAA,EAAsC;AAC5D,IAAA,MAAM,IAAA,CAAK,QAAA,CAAS,iBAAA,CAAkB,IAAA,CAAK,KAAK,aAAa,CAAA;AAC7D,IAAA,MAAM,KAAK,uBAAA,EAAwB;AAAA,EACrC;AAAA,EAEA,MAAM,qBAAA,CACJ,aAAA,EACA,QAAA,EACmC;AACnC,IAAA,OAAO,IAAA,CAAK,qBAAA,CAAsB,aAAA,EAAe,eAAA,EAAiB,QAAQ,CAAA;AAAA,EAC5E;AAAA,EAEA,MAAM,uBAAA,CACJ,aAAA,EACA,QAAA,EACmC;AACnC,IAAA,OAAO,IAAA,CAAK,qBAAA,CAAsB,aAAA,EAAe,iBAAA,EAAmB,QAAQ,CAAA;AAAA,EAC9E;AAAA,EAEA,MAAM,iBAAA,CAAkB,aAAA,EAAuB,QAAA,EAAsE;AACnH,IAAA,OAAO,IAAA,CAAK,qBAAA,CAAsB,aAAA,EAAe,UAAA,EAAY,QAAQ,CAAA;AAAA,EACvE;AAAA,EAEA,MAAM,qBAAA,CACJ,aAAA,EACA,QAAA,EACmC;AACnC,IAAA,OAAO,IAAA,CAAK,qBAAA,CAAsB,aAAA,EAAe,eAAA,EAAiB,QAAQ,CAAA;AAAA,EAC5E;AAAA,EAEA,MAAM,KAAA,CAAM,IAAA,GAA4B,EAAC,EAA6B;AACpE,IAAA,MAAM,SAAS,MAAA,CACb,MAAM,IAAA,CAAK,cAAA,IACX,WAAA,CAAY;AAAA,MACZ,gBAAgB,IAAA,CAAK,SAAA;AAAA,MACrB,aAAa,IAAA,CAAK,QAAA;AAAA,MAClB,UAAA,EAAY,IAAA,CAAK,UAAA,IAAc,IAAA,CAAK,WAAA;AAAA,MACpC,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,OAAA,EAAS,KAAK,YAAA,KAAiB,MAAA,GAAY,EAAE,YAAA,EAAc,IAAA,CAAK,cAAa,GAAI;AAAA,KAClF,CAAA;AAED,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,IAAaN,iBAAAA,EAAW;AAC7C,IAAA,MAAM,KAAA,GAAQ,IAAI,QAAA,CAAgB;AAAA,MAChC,EAAA,EAAI,OAAA;AAAA,MACJ,SAAS,IAAA,CAAK,QAAA;AAAA,MACd,QAAA,EAAU,OAAO,MAAA,CAAO,EAAA;AAAA,MACxB,UAAA,EAAY,OAAO,MAAA,CAAO,UAAA;AAAA,MAC1B,IAAA,EAAM,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,KAAA;AAAA,MACxB,KAAA,EAAO,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,QAAA;AAAA,MAC5B,SAAA,EAAW,OAAO,MAAA,CAAO,SAAA;AAAA,MACzB,cAAA,EAAgB,OAAO,MAAA,CAAO,SAAA;AAAA,MAC9B,OAAO,IAAA,CAAK,MAAA;AAAA,MACZ,QAAQ,IAAA,CAAK,OAAA;AAAA,MACb,SAAS,IAAA,CAAK,QAAA;AAAA,MACd,QAAQ,IAAA,CAAK,OAAA,CAAQ,OAAO,EAAE,SAAA,EAAW,SAAS,CAAA;AAAA,MAClD,aAAa,IAAA,CAAK,iBAAA;AAAA,MAClB,YAAA,EAAc,KAAK,QAAA,EAAS;AAAA,MAC5B,WAAW,IAAA,CAAK,UAAA;AAAA,MAChB,WAAW,IAAA,CAAK,UAAA;AAAA,MAChB,cAAc,IAAA,CAAK,aAAA;AAAA,MACnB,aAAa,IAAA,CAAK,YAAA;AAAA,MAClB,cAAc,IAAA,CAAK,aAAA;AAAA,MACnB,yBAAyB,IAAA,CAAK,wBAAA;AAAA,MAC9B,sBAAsB,IAAA,CAAK;AAAA,KAC5B,CAAA;AAED,IAAA,IAAA,CAAK,QAAQ,IAAA,CAAK;AAAA,MAChB,IAAA,EAAM,eAAA;AAAA,MACN,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,gBAAgB,IAAA,CAAK,SAAA;AAAA,MACrB,OAAO,IAAA,CAAK;AAAA,KACb,CAAA;AAED,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,MAAM,SAAA,GAA+C;AACnD,IAAA,OAAA,CAAQ,MAAM,KAAK,cAAA,EAAe,EAAG,cAAc,EAAE,QAAA,EAAU,IAAA,CAAK,SAAA,EAAW,CAAA;AAAA,EACjF;AAAA,EAEA,MAAM,WAAA,GAA0C;AAC9C,IAAA,MAAM,MAAA,GAAS,MAAA,CACb,MAAM,IAAA,CAAK,gBAAe,EAC1B,MAAA,CAAO,EAAE,QAAA,EAAU,IAAA,CAAK,SAAA,EAAW,UAAA,EAAY,IAAA,CAAK,aAAa,CAAA;AACnE,IAAA,OAAO,MAAA,CAAO,QAAA;AAAA,EAChB;AAAA,EAEA,MAAM,aACJ,QAAA,EACsE;AACtE,IAAA,OAAA,CAAQ,MAAM,IAAA,CAAK,cAAA,IAAkB,YAAA,CAAa,EAAE,UAAU,CAAA;AAAA,EAChE;AAAA,EAEA,QAAA,GAA6B;AAC3B,IAAA,OAAO,OAAO,MAAA,CAAO,EAAE,GAAI,IAAA,CAAK,QAAoC,CAAA;AAAA,EACtE;AAAA,EAEA,MAAM,SAAS,OAAA,EAAyC;AACtD,IAAA,MAAM,GAAA,GAAM,KAAK,iBAAA,CAAkB,IAAA,CAAK,MAAM,IAAA,CAAK,kBAAA,CAAmB,OAAO,CAAC,CAAA;AAC9E,IAAA,IAAA,CAAK,oBAAoB,GAAA,CAAI,IAAA;AAAA,MAC3B,MAAM,MAAA;AAAA,MACN,MAAM;AAAA,KACR;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,MAAM,YACJ,OAAA,EAKkB;AAClB,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,YAAY;AAClD,MAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAC5C,MAAA,IAAI,MAAA,CAAO,WAAW,MAAA,CAAO,IAAA,CAAK,OAAO,OAAO,CAAA,CAAE,SAAS,CAAA,EAAG;AAC5D,QAAA,MAAM,IAAA,CAAK,kBAAA,CAAmB,MAAA,CAAO,OAAO,CAAA;AAAA,MAC9C;AACA,MAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,IAAU,EAAC,EAAG;AACvC,QAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,MACzB;AACA,MAAA,OAAO,MAAA,CAAO,MAAA;AAAA,IAChB,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,oBAAoB,GAAA,CAAI,IAAA;AAAA,MAC3B,MAAM,MAAA;AAAA,MACN,MAAM;AAAA,KACR;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,UAAA,GAAqB;AACnB,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA,EAEA,WAAW,OAAA,EAAiB;AAC1B,IAAA,MAAM,kBAAkB,IAAA,CAAK,QAAA;AAC7B,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA;AAChB,IAAA,IAAI,YAAY,eAAA,EAAiB;AAC/B,MAAA,KAAK,IAAA,CAAK,eAAA,CAAgB,EAAE,OAAA,EAAS,CAAA;AACrC,MAAA,IAAA,CAAK,QAAQ,IAAA,CAAK,EAAE,MAAM,eAAA,EAAiB,OAAA,EAAS,iBAAiB,CAAA;AAAA,IACvE;AAAA,EACF;AAAA,EAEA,OAAA,GAAuB;AACrB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEA,iBAAA,GAA0E;AACxE,IAAA,OAAO,EAAE,OAAO,IAAA,CAAK,KAAA,CAAM,OAAO,eAAA,EAAiB,IAAA,CAAK,MAAM,eAAA,EAAgB;AAAA,EAChF;AAAA,EAEA,MAAM,MAAA,CAAO,EAAE,QAAA,EAAU,GAAG,SAAQ,EAA2C;AAC7E,IAAA,IAAI,CAAC,KAAK,aAAA,EAAe;AACvB,MAAA,MAAM,IAAI,MAAM,uEAAuE,CAAA;AAAA,IACzF;AAEA,IAAA,MAAM,QAAQ,IAAA,CAAK,MAAA;AACnB,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,IAASA,iBAAAA,EAAW;AAC1C,IAAA,IAAA,CAAK,aAAa,KAAK,CAAA;AAEvB,IAAA,IAAI;AACF,MAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,oBAAA,EAAqB;AACvD,MAAA,MAAM,aAAa,MAAM,KAAA,CAAM,SAAA,CAAU,EAAE,gBAAgB,CAAA;AAC3D,MAAA,MAAM,QAAQ,oBAAA,CAAqB;AAAA,QACjC,UAAA;AAAA,QACA,aAAA,EAAe,KAAK,iBAAA,EAAkB;AAAA,QACtC,YAAA,EAAc,yBAAyB,IAAI;AAAA,OAC5C,CAAA;AACD,MAAA,MAAM,KAAA,GAAQ,KAAK,aAAA,GAAgB,MAAM,KAAK,aAAA,CAAc,IAAA,CAAK,QAAQ,CAAA,GAAI,MAAA;AAC7E,MAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,QAAA,CAAS,QAAA,EAAU;AAAA,QAC5C,GAAG,OAAA;AAAA,QACH,KAAA;AAAA,QACA,cAAA;AAAA,QACA,GAAI,KAAA,GAAQ,EAAE,KAAA,KAAU,EAAC;AAAA,QACzB,QAAA,EAAU,EAAE,OAAA,EAAS,KAAA,EAAM;AAAA,QAC3B,WAAA,EAAa,QAAQ,WAAA,GACjB,CAAC,mBAAG,IAAI,GAAA,CAAI,CAAC,GAAG,OAAA,CAAQ,aAAa,GAAG,MAAA,CAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAA,GAC5D,MAAA,CAAO,IAAA,CAAK,KAAK;AAAA,OACtB,CAAA;AACD,MAAA,IAAA,CAAK,SAAA,EAAU;AACf,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,SAAA,EAAU;AACf,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,QAAQ,IAAA,EAAmB;AACzB,IAAA,MAAM,cAAA,GAAiB,KAAK,KAAA,CAAM,EAAA;AAClC,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,IAAA,IAAI,IAAA,CAAK,OAAO,cAAA,EAAgB;AAC9B,MAAA,KAAK,KAAK,eAAA,CAAgB,EAAE,MAAA,EAAQ,IAAA,CAAK,IAAI,CAAA;AAC7C,MAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,EAAE,IAAA,EAAM,gBAAgB,MAAA,EAAQ,IAAA,CAAK,EAAA,EAAI,cAAA,EAAgB,CAAA;AAAA,IAC7E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,UAAA,GAAsC;AAC1C,IAAA,OAAO,KAAK,2BAAA,EAA4B;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,SAAS,IAAA,EAA4C;AACzD,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,qBAAA,EAAsB;AACnD,IAAA,IAAI,CAAC,SAAA,EAAW,MAAA,EAAQ,OAAO,IAAA;AAI/B,IAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,2BAAA,EAA4B;AAC/D,IAAA,IAAI,CAAC,gBAAgB,IAAA,CAAK,CAAAO,WAASA,MAAAA,CAAM,IAAA,KAAS,IAAI,CAAA,EAAG,OAAO,IAAA;AAEhE,IAAA,MAAM,KAAA,GAAQ,MAAM,SAAA,CAAU,MAAA,CAAO,IAAI,IAAI,CAAA;AAC7C,IAAA,OAAO,KAAA,GAAQ,IAAA,CAAK,eAAA,CAAgB,KAAK,CAAA,GAAI,IAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,SAAS,IAAA,EAA+B;AAC5C,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA;AACtC,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,yBAAA,CAA0B;AAAA,QAClC,IAAA;AAAA,QACA,eAAA,EAAiB,KAAK,gBAAA;AAAiB,OACxC,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,KAAA,CAAM,YAAA;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAA,GAAsB;AACpB,IAAA,IAAA,CAAK,uBAAA,GAA0B,MAAA;AAAA,EACjC;AAAA,EAEA,gBAAgB,KAAA,EAA8D;AAC5E,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,cAAA,CAAe,KAAA,CAAM,QAAQ,CAAA;AACnD,IAAA,MAAM,WAAW,OAAO,QAAA,EAAU,QAAA,KAAa,QAAA,GAAW,SAAS,QAAA,GAAW,MAAA;AAC9E,IAAA,MAAM,WAAW,KAAA,CAAM,IAAA;AACvB,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iBAAA,EAAoB,KAAA,CAAM,IAAI,CAAA,wBAAA,CAA0B,CAAA;AAAA,IAC1E;AACA,IAAA,OAAO;AAAA,MACL,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,YAAA,EAAc,cAAA,IAAkB,KAAA,GAAQ,KAAA,CAAM,YAAA,GAAe,EAAA;AAAA,MAC7D,QAAA;AAAA,MACA,GAAI,QAAA,GAAW,EAAE,QAAA,KAAa,EAAC;AAAA,MAC/B,GAAI,QAAA,GAAW,EAAE,QAAA,KAAa;AAAC,KACjC;AAAA,EACF;AAAA,EAEA,eAAe,QAAA,EAAqF;AAClG,IAAA,IAAI,CAAC,UAAU,OAAO,MAAA;AACtB,IAAA,MAAM,OAAgC,EAAC;AACvC,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACnD,MAAA,IAAI,QAAQ,MAAA,EAAQ;AACpB,MAAA,IAAI,KAAK,mBAAA,CAAoB,KAAK,CAAA,EAAG,IAAA,CAAK,GAAG,CAAA,GAAI,KAAA;AAAA,IACnD;AACA,IAAA,OAAO,OAAO,IAAA,CAAK,IAAI,CAAA,CAAE,MAAA,GAAS,IAAK,IAAA,GAAoC,MAAA;AAAA,EAC7E;AAAA,EAEA,eAAe,KAAA,EAAkD;AAC/D,IAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,KAAA,KAAU,QACV,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IACpB,MAAA,CAAO,cAAA,CAAe,KAAK,MAAM,MAAA,CAAO,SAAA;AAAA,EAE5C;AAAA,EAEA,oBAAoB,KAAA,EAAyB;AAC3C,IAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,OAAO,KAAA,KAAU,WAAW,OAAO,IAAA;AACtF,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,MAAA,CAAO,SAAS,KAAK,CAAA;AAC3D,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,KAAA,CAAM,KAAA,CAAM,CAAA,IAAA,KAAQ,IAAA,CAAK,mBAAA,CAAoB,IAAI,CAAC,CAAA;AACnF,IAAA,IAAI,IAAA,CAAK,eAAe,KAAK,CAAA;AAC3B,MAAA,OAAO,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA,CAAE,KAAA,CAAM,CAAA,IAAA,KAAQ,IAAA,KAAS,MAAA,IAAa,IAAA,CAAK,mBAAA,CAAoB,IAAI,CAAC,CAAA;AAChG,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,gBAAA,GAAkC;AAChC,IAAA,OAAO,KAAK,UAAA,KAAe,MAAA,GAAY,CAAC,WAAW,IAAI,EAAC;AAAA,EAC1D;AAAA,EAEA,MAAM,2BAAA,GAAuD;AAC3D,IAAA,IAAI,CAAC,KAAK,uBAAA,EAAyB;AACjC,MAAA,IAAA,CAAK,uBAAA,GAA0B,IAAA,CAAK,+BAAA,EAAgC,CAAE,MAAM,CAAA,GAAA,KAAO;AAGjF,QAAA,IAAA,CAAK,uBAAA,GAA0B,MAAA;AAC/B,QAAA,MAAM,GAAA;AAAA,MACR,CAAC,CAAA;AAAA,IACH;AACA,IAAA,OAAO,IAAA,CAAK,uBAAA;AAAA,EACd;AAAA,EAEA,MAAM,+BAAA,GAA2D;AAC/D,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,qBAAA,EAAsB;AACnD,IAAA,MAAM,YAAY,SAAA,EAAW,MAAA;AAC7B,IAAA,IAAI,CAAC,SAAA,EAAW,OAAO,EAAC;AACxB,IAAA,MAAM,aAAA,GAAgB,MAAM,SAAA,CAAU,IAAA,EAAK;AAC3C,IAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,GAAA;AAAA,MAC3B,aAAA,CAAc,GAAA,CAAI,OAAM,QAAA,KAAa,MAAM,UAAU,GAAA,CAAI,QAAA,CAAS,IAAI,CAAA,IAAM,QAAQ;AAAA,KACtF;AACA,IAAA,OAAO,OAAO,GAAA,CAAI,CAAA,KAAA,KAAS,IAAA,CAAK,eAAA,CAAgB,KAAK,CAAC,CAAA;AAAA,EACxD;AAAA,EAEA,MAAM,sBAAsB,cAAA,EAAiE;AAC3F,IAAA,MAAM,YAAY,IAAA,CAAK,UAAA;AACvB,IAAA,IAAI,CAAC,WAAW,OAAO,MAAA;AACvB,IAAA,IAAI,OAAO,SAAA,KAAc,UAAA,EAAY,OAAO,SAAA;AAC5C,IAAA,IAAI,IAAA,CAAK,kBAAA,EAAoB,OAAO,IAAA,CAAK,kBAAA;AAEzC,IAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,EAAE,gBAAgB,cAAA,IAAkB,IAAIN,gCAAA,EAAe,EAAG,CAAA;AAC3F,IAAA,IAAA,CAAK,kBAAA,GAAqB,QAAA;AAC1B,IAAA,IAAA,CAAK,kBAAA,GAAqB,IAAA;AAC1B,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,MAAM,mBAAmB,OAAA,EAAyC;AAChE,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACvC,IAAA,MAAM,WAAW,EAAE,GAAI,IAAA,CAAK,MAAA,EAAoC,GAAI,OAAA,EAAoC;AAExG,IAAA,IAAI,KAAK,YAAA,EAAc;AACrB,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,aAAa,WAAW,CAAA,CAAE,SAAS,QAAQ,CAAA;AACrE,MAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,QAAA,MAAM,QAAA,GAAW,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,CAAC,UAAgC,KAAA,CAAM,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAC5F,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,QAAQ,CAAA,CAAE,CAAA;AAAA,MACrD;AACA,MAAA,IAAA,CAAK,SAAS,MAAA,CAAO,KAAA;AAAA,IACvB,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,MAAA,GAAS,QAAA;AAAA,IAChB;AAEA,IAAA,MAAM,KAAK,eAAA,CAAgB,EAAE,KAAA,EAAO,IAAA,CAAK,QAAmC,CAAA;AAE5E,IAAA,IAAA,CAAK,QAAQ,IAAA,CAAK;AAAA,MAChB,IAAA,EAAM,eAAA;AAAA,MACN,OAAO,IAAA,CAAK,MAAA;AAAA,MACZ;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,eAAA,GAA2B;AACzB,IAAA,MAAM,YAAA,GACJ,IAAA,CAAK,UAAA,KAAe,UAAA,IACpB,IAAA,CAAK,UAAA,KAAe,SAAA,IACpB,IAAA,CAAK,UAAA,KAAe,SAAA,IACpB,IAAA,CAAK,UAAA,KAAe,UAAA;AACtB,IAAA,OAAO,gBAAgB,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA,IAAA,KAAQ,IAAA,CAAK,WAAW,SAAS,CAAA;AAAA,EAC7E;AAAA,EAEA,YAAA,CAAa,KAAA,EAAe,OAAA,GAAyB,IAAA,EAAY;AAC/D,IAAA,IAAA,CAAK,UAAA,GAAa,SAAA;AAClB,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AACrB,IAAA,IAAA,CAAK,eAAA,GAAkB,OAAA;AAAA,EACzB;AAAA,EAEA,SAAA,GAAkB;AAChB,IAAA,IAAA,CAAK,UAAA,GAAa,MAAA;AAClB,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AACrB,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AAAA,EACzB;AAAA,EAEA,MAAM,gBAAgB,OAAA,EAA6C;AACjE,IAAA,IAAA,CAAK,eAAA,GAAkB,OAAA,CAAQ,cAAA,oBAAkB,IAAI,IAAA,EAAK;AAC1D,IAAA,MAAM,IAAA,CAAK,QAAA,CAAS,aAAA,CAAc,IAAA,CAAK,GAAA,EAAK;AAAA,MAC1C,GAAG,OAAA;AAAA,MACH,gBAAgB,IAAA,CAAK;AAAA,KACtB,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,qBAAA,CACJ,aAAA,EACA,YAAA,EACA,QAAA,EACmC;AACnC,IAAA,MAAM,IAAA,GAAO,KAAK,QAAA,CAAS,IAAA,CAAK,CAAAK,KAAAA,KAAQA,KAAAA,CAAK,OAAO,aAAa,CAAA;AACjE,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,aAAa,CAAA,4BAAA,EAA+B,IAAA,CAAK,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,IAClG;AACA,IAAA,IAAI,IAAA,CAAK,SAAS,YAAA,EAAc;AAC9B,MAAA,MAAM,IAAI,MAAM,CAAA,sBAAA,EAAyB,aAAa,cAAc,IAAA,CAAK,IAAI,CAAA,QAAA,EAAW,YAAY,CAAA,CAAA,CAAG,CAAA;AAAA,IACzG;AACA,IAAA,IAAI,IAAA,CAAK,WAAW,SAAA,EAAW;AAC7B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,aAAa,CAAA,aAAA,EAAgB,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA;AAAA,IACrF;AACA,IAAA,IAAI,IAAA,CAAK,8BAAA,KAAmC,IAAA,CAAK,+BAAA,EAAiC;AAChF,MAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,IACtD;AAEA,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,sBAAA,CAAuB,MAAM,QAAQ,CAAA;AACrE,IAAA,MAAM,mBAAmB,YAAA,KAAiB,MAAA,GAAY,WAAW,EAAE,GAAG,UAAU,YAAA,EAAa;AAE7F,IAAA,MAAM,IAAA,CAAK,QAAA,CAAS,iBAAA,CAAkB,IAAA,CAAK,GAAA,EAAK,aAAA,EAAe,EAAE,MAAA,EAAQ,WAAA,EAAa,QAAA,EAAU,gBAAA,EAAkB,CAAA;AAClH,IAAA,MAAM,KAAK,uBAAA,EAAwB;AACnC,IAAA,MAAM,OAAA,GAAU,KAAK,QAAA,CAAS,IAAA,CAAK,CAAAA,KAAAA,KAAQA,KAAAA,CAAK,OAAO,aAAa,CAAA;AACpE,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,aAAa,CAAA,4BAAA,EAA+B,IAAA,CAAK,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,IAClG;AACA,IAAA,OAAO,EAAE,GAAG,OAAA,EAAQ;AAAA,EACtB;AAAA,EAEA,MAAM,sBAAA,CACJ,IAAA,EACA,QAAA,EAC8C;AAC9C,IAAA,MAAM,UAAU,IAAA,CAAK,OAAA;AACrB,IAAA,IAAI,CAAC,IAAA,CAAK,cAAA,CAAe,OAAO,GAAG,OAAO,MAAA;AAE1C,IAAA,IAAI,IAAA,CAAK,SAAS,eAAA,EAAiB;AACjC,MAAA,MAAM,WAAW,QAAA,CAAS,QAAA;AAC1B,MAAA,MAAM,QAAQ,OAAO,OAAA,CAAQ,UAAU,QAAA,GAAW,OAAA,CAAQ,QAAQ,IAAA,CAAK,KAAA;AACvE,MAAA,MAAM,aAAa,OAAO,OAAA,CAAQ,UAAA,KAAe,QAAA,GAAW,QAAQ,UAAA,GAAa,MAAA;AACjF,MAAA,MAAM,KAAA,GACJ,OAAO,OAAA,CAAQ,OAAA,KAAY,QAAA,IAAY,IAAA,CAAK,aAAA,GACxC,MAAM,IAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,OAAO,IACxC,IAAA,CAAK,MAAA;AACX,MAAA,IAAI,OAAO,aAAa,SAAA,IAAa,CAAC,SAAS,CAAC,IAAA,CAAK,eAAe,OAAO,MAAA;AAE3E,MAAA,MAAM,MAAA,GAAS,QAAA,GACX,MAAM,KAAA,CAAM,uBAAA,CAAwB,EAAE,KAAA,EAAO,UAAA,EAAY,cAAA,EAAgB,MAAM,IAAA,CAAK,oBAAA,EAAqB,EAAG,CAAA,GAC5G,MAAM,KAAA,CAAM,uBAAA,CAAwB,EAAE,KAAA,EAAO,UAAA,EAAY,cAAA,EAAgB,MAAM,IAAA,CAAK,oBAAA,EAAqB,EAAG,CAAA;AAChH,MAAA,OAAO,KAAK,mBAAA,CAAoB,MAAM,IAAK,MAAA,GAAqC,EAAE,SAAS,IAAA,EAAK;AAAA,IAClG;AAEA,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,eAAA,IAAmB,QAAA,CAAS,aAAa,IAAA,EAAM;AAC/D,MAAA,MAAM,mBAAmB,OAAO,OAAA,CAAQ,gBAAA,KAAqB,QAAA,GAAW,QAAQ,gBAAA,GAAmB,MAAA;AACnG,MAAA,IAAI,oBAAoB,gBAAA,KAAqB,IAAA,CAAK,KAAA,CAAM,EAAA,IAAM,KAAK,YAAA,EAAc;AAC/E,QAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,YAAA,CAAa,gBAAgB,CAAA;AACrD,QAAA,IAAA,CAAK,QAAQ,IAAI,CAAA;AACjB,QAAA,OAAO,EAAE,gBAAA,EAAkB,WAAA,EAAa,IAAA,EAAK;AAAA,MAC/C;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAM,uBAAA,GAAyC;AAC7C,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,QAAA,CAAS,WAAA,CAAY,KAAK,GAAG,CAAA;AACvD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iBAAA,EAAoB,IAAA,CAAK,GAAG,CAAA,eAAA,CAAiB,CAAA;AAAA,IAC/D;AACA,IAAA,IAAA,CAAK,kBAAkB,MAAA,CAAO,cAAA;AAC9B,IAAA,IAAA,CAAK,QAAA,GAAA,CAAY,MAAA,CAAO,OAAA,IAAW,EAAC,EAAG,IAAI,CAAA,IAAA,MAAS,EAAE,GAAG,IAAA,EAAK,CAAE,CAAA;AAAA,EAClE;AAAA,EAEA,kBAAA,GAAsC;AACpC,IAAA,IAAI,CAAC,IAAA,CAAK,YAAA,EAAc,OAAO,EAAC;AAEhC,IAAA,MAAM,WAAoC,EAAC;AAE3C,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,YAAA,CAAa,WAAW,CAAA,CAAE,WAAW,MAAA,CAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,CAAA;AAG1F,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,IAAI,CAAA,IAAK,MAAA,CAAO,QAAQ,UAAA,CAAW,UAAA,IAAc,EAAE,CAAA,EAAG;AACrE,QAAA,IAAI,IAAA,CAAK,YAAY,MAAA,EAAW;AAC9B,UAAA,QAAA,CAAS,GAAG,IAAI,IAAA,CAAK,OAAA;AAAA,QACvB;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,MAAM,oBAAA,GAAgD;AACpD,IAAA,MAAM,UAAU,0BAAA,CAA2B,EAAE,gBAAgB,IAAA,CAAK,qBAAA,IAAyB,CAAA;AAC3F,IAAA,MAAM,IAAA,CAAK,sBAAsB,OAAO,CAAA;AAExC,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEA,qBAAA,GAAuD;AACrD,IAAA,OAAO;AAAA,MACL,WAAW,IAAA,CAAK,QAAA;AAAA,MAChB,WAAW,IAAA,CAAK,GAAA;AAAA,MAChB,SAAS,IAAA,CAAK,QAAA;AAAA,MACd,YAAY,IAAA,CAAK,WAAA;AAAA,MACjB,UAAU,IAAA,CAAK,SAAA;AAAA,MACf,MAAA,EAAQ,KAAK,KAAA,CAAM,EAAA;AAAA,MACnB,SAAS,IAAA,CAAK,QAAA;AAAA,MACd,iBAAiB,IAAA,CAAK,gBAAA;AAAA,MACtB,eAAe,IAAA,CAAK,cAAA;AAAA,MACpB,QAAQ,IAAA,CAAK,OAAA;AAAA,MACb,QAAA,EAAU,MAAM,IAAA,CAAK,QAAA;AAAS,KAChC;AAAA,EACF;AAAA,EAEA,MAAM,cAAA,GAAwC;AAC5C,IAAA,MAAM,MAAM,IAAA,CAAK,OAAA;AACjB,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,IAC5D;AACA,IAAA,IAAI,OAAO,QAAQ,UAAA,EAAY;AAC7B,MAAA,OAAO,GAAA;AAAA,IACT;AACA,IAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,oBAAA,EAAqB;AACvD,IAAA,MAAM,QAAA,GAAW,MAAM,GAAA,CAAI,EAAE,gBAAgB,CAAA;AAC7C,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,IAC/D;AACA,IAAA,OAAO,QAAA;AAAA,EACT;AACF;;;AC5wBA,SAAS,iBAAiB,OAAA,EAA2E;AACnG,EAAA,OAAO,OAAQ,QAAsC,WAAA,KAAgB,UAAA;AACvE;AAEO,IAAM,UAAN,MAAwD;AAAA,EACpD,QAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA,uBAAiB,GAAA,EAA2B;AAAA,EAC5C,QAAA;AAAA,EACA,iBAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,+BAAA;AAAA,EACA,wBAAA;AAAA,EACA,qBAAA;AAAA,EAET,YAAY,MAAA,EAAsC;AAChD,IAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,MAAA,EAAQ;AACxB,MAAA,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAAA,IACvD;AAEA,IAAA,IAAA,CAAK,QAAA,GAAW,MAAA,CAAO,OAAA,IAAWN,iBAAAA,EAAW;AAC7C,IAAA,IAAA,CAAK,eAAe,MAAA,CAAO,aAAA,IAAiB,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,CAAG,EAAA;AAC7D,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,MAAA;AACtB,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,IAAI,gBAAA,CAAiB,MAAA,CAAO,OAAO,CAAA,EAAG;AACpC,QAAA,IAAA,CAAK,WAAW,MAAA,CAAO,OAAA;AAAA,MACzB,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,iBAAA,GAAoBQ,iCAAA,CAAgB,MAAA,CAAO,OAAO,CAAA;AAAA,MACzD;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,iBAAA,GAAoB,MAAA,CAAO,MAAA,EAAQ,UAAA,EAAW;AAAA,IACrD;AACA,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,MAAA;AACtB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,YAAA,EAAa;AAChC,IAAA,IAAI,OAAO,8BAAA,KAAmC,MAAA,IAAa,MAAA,CAAO,8BAAA,CAA+B,WAAW,CAAA,EAAG;AAC7G,MAAA,MAAM,IAAI,MAAM,mFAAmF,CAAA;AAAA,IACrG;AACA,IAAA,IAAA,CAAK,+BAAA,GAAkC,OAAO,8BAAA,IAAkC,IAAA;AAChF,IAAA,IAAA,CAAK,eAAe,MAAA,CAAO,WAAA;AAC3B,IAAA,IAAA,CAAK,gBAAgB,MAAA,CAAO,YAAA;AAE5B,IAAA,IAAI,OAAO,SAAA,YAAqBC,2BAAA,IAAa,OAAO,MAAA,CAAO,cAAc,UAAA,EAAY;AACnF,MAAA,IAAA,CAAK,aAAa,MAAA,CAAO,SAAA;AAAA,IAC3B,CAAA,MAAA,IAAW,OAAO,SAAA,EAAW;AAC3B,MAAA,IAAA,CAAK,UAAA,GAAa,IAAIA,2BAAA,CAAU,MAAA,CAAO,SAAS,CAAA;AAAA,IAClD;AAEA,IAAA,IAAA,CAAK,MAAA,GAAS,KAAK,OAAA,GAAU,IAAA,CAAK,QAAQ,YAAA,CAAa,MAAA,CAAO,KAAK,CAAA,GAAK,MAAA,CAAO,KAAA;AAE/E,IAAA,IAAI,OAAO,SAAA,EAAW;AACpB,MAAA,MAAM,UAAU,MAAA,CAAO,OAAA,CAAQ,OAAO,SAAA,CAAU,KAAA,IAAS,EAAE,CAAA;AAC3D,MAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,CAAA,IAAK,CAAC,OAAO,YAAA,EAAc;AAC9C,QAAA,MAAM,IAAI,MAAM,uFAAuF,CAAA;AAAA,MACzG;AACA,MAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,GAAG,CAAA,IAAK,OAAA,EAAS;AACnC,QAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACjB,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,UAAA,EAAa,MAAM,CAAA,2BAAA,CAA6B,CAAA;AAAA,QAClE;AAAA,MAOF;AACA,MAAA,MAAM,WAAW,MAAA,CAAO,QAAA,EAAU,gBAAA,IAAoB,MAAA,CAAO,UAAU,QAAA,IAAY,CAAA;AACnF,MAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,QAAQ,CAAA,IAAK,WAAW,CAAA,EAAG;AAC/C,QAAA,MAAM,IAAI,MAAM,kEAAkE,CAAA;AAAA,MACpF;AACA,MAAA,IAAA,CAAK,UAAA,GAAa,EAAE,GAAG,MAAA,CAAO,WAAW,QAAA,EAAS;AAAA,IACpD;AACA,IAAA,IAAA,CAAK,gBAAgB,MAAA,CAAO,YAAA;AAE5B,IAAA,IAAA,CAAK,wBAAA,GAA2B,OAAO,uBAAA,IAA2B,KAAA;AAClE,IAAA,IAAI,OAAO,oBAAA,EAAsB;AAC/B,MAAA,IAAA,CAAK,wBAAwB,MAAA,CAAO,oBAAA;AAAA,IACtC,CAAA,MAAA,IAAW,OAAO,cAAA,EAAgB;AAChC,MAAA,MAAM,aAAa,MAAA,CAAO,cAAA;AAC1B,MAAA,IAAA,CAAK,qBAAA,GAAwB,CAAC,QAAA,KAAqB,UAAA,CAAW,QAAQ,CAAA,IAAK,IAAA;AAAA,IAC7E;AAEA,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,IAAS,EAAC;AAC/B,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,EAAG;AAChC,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,EAAE,CAAA,iCAAA,CAAmC,CAAA;AAAA,MAClF;AAEA,MAAA,IAAI,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,eAAA,EAAiB;AACtC,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,MAAA,EAAS,IAAA,CAAK,EAAE,CAAA,0EAAA,CAA4E,CAAA;AAAA,MAC9G;AACA,MAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,IAAI,CAAA;AAAA,IACnC;AAAA,EACF;AAAA,EAEA,IAAI,OAAA,GAAkB;AACpB,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA,EAEA,UAAU,QAAA,EAAyD;AACjE,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,QAAQ,CAAA;AAAA,EACxC;AAAA,EAEA,KAAK,KAAA,EAA8E;AACjF,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA;AAAA,EAChC;AAAA,EAEA,MAAM,IAAA,GAAsB;AAC1B,IAAA,MAAM,KAAK,eAAA,EAAgB;AAAA,EAC7B;AAAA,EAEA,MAAM,QAAA,GAA0B;AAAA,EAAC;AAAA,EAEjC,SAAA,GAA2B;AACzB,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,MAAA,EAAyC;AAC/C,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,MAAM,CAAA;AAAA,EACnC;AAAA,EAEA,MAAM,YAAA,GAAyC;AAC7C,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,eAAA,EAAgB;AAC3C,IAAA,OAAO,QAAQ,YAAA,EAAa;AAAA,EAC9B;AAAA,EAEA,MAAM,QAAQ,IAAA,EAAgD;AAC5D,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,eAAA,EAAgB;AAE3C,IAAA,IAAI,cAAc,IAAA,EAAM;AACtB,MAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,OAAA,EAAS,IAAI,CAAA;AAAA,IAC5C;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,kBAAA,CAAmB,SAAS,IAAA,CAAK,SAAA,EAAW,KAAK,UAAU,CAAA;AACrF,IAAA,OAAO,IAAA,CAAK,kBAAA,CAAmB,MAAA,EAAQ,OAAO,CAAA;AAAA,EAChD;AAAA,EAEA,MAAM,YAAA,CAAa,OAAA,EAA0B,IAAA,GAA4B,EAAC,EAA6B;AACrG,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,eAAA,EAAgB;AAC3C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,kBAAA,CAAmB,SAAS,OAAA,CAAQ,EAAA,EAAI,QAAQ,UAAU,CAAA;AACpF,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,IAAU,MAAA,CAAO,MAAA;AACrC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,MAAM,CAAA;AACvC,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iBAAA,EAAoB,OAAO,EAAE,CAAA,kCAAA,EAAqC,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,IAC7F;AAEA,IAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,KAAA,CAAM;AAAA,MAChC,GAAG,IAAA;AAAA,MACH,UAAA,EAAY,IAAA,CAAK,UAAA,IAAc,MAAA,CAAO,UAAA;AAAA,MACtC,IAAA;AAAA,MACA,OAAA,EAAS,IAAA,CAAK,OAAA,IAAW,MAAA,CAAO;AAAA,KACjC,CAAA;AACD,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,eAAA,IAAmB,MAAA,CAAO,EAAA;AACvD,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,MAAA,IAAU,MAAA,CAAO,MAAA;AAC1C,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,OAAA,IAAW,MAAA,CAAO,OAAA;AAC5C,IAAA,MAAM,MAAA,GAAwB;AAAA,MAC5B,IAAI,KAAA,CAAM,EAAA;AAAA,MACV,SAAS,IAAA,CAAK,QAAA;AAAA,MACd,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,eAAA;AAAA,MACA,MAAA,EAAQ,IAAA,CAAK,MAAA,IAAU,MAAA,CAAO,MAAA;AAAA,MAC9B,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,IAAA,CAAK,MAAA,IAAU,MAAA,CAAO,MAAA;AAAA,QAC5B;AAAA,OACF;AAAA,MACA,aAAA,EAAA,CAAgB,MAAA,CAAO,aAAA,IAAiB,CAAA,IAAK,CAAA;AAAA,MAC7C,gCAAgC,IAAA,CAAK,+BAAA;AAAA,MACrC,MAAA,EAAQ,WAAA;AAAA,MACR,OAAA,EAAS,YAAA;AAAA,MACT,KAAA,EAAO,IAAA,CAAK,KAAA,IAAS,MAAA,CAAO,KAAA;AAAA,MAC5B,QAAA,EAAU,IAAA,CAAK,QAAA,IAAY,MAAA,CAAO,QAAA;AAAA,MAClC,KAAA,EAAO,MAAM,QAAA,EAAS;AAAA,MACtB,SAAS,EAAC;AAAA,MACV,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,gBAAgB,KAAA,CAAM;AAAA,KACxB;AAEA,IAAA,MAAM,OAAA,CAAQ,YAAY,MAAM,CAAA;AAChC,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,EAAE,IAAA,EAAM,mBAAmB,GAAG,qBAAA,CAAsB,MAAM,CAAA,EAAG,CAAA;AAC/E,IAAA,OAAO,IAAA,CAAK,kBAAA,CAAmB,MAAA,EAAQ,OAAO,CAAA;AAAA,EAChD;AAAA,EAEA,MAAM,gBAAA,CAAiB,OAAA,EAAyB,IAAA,EAAwD;AACtG,IAAA,MAAM,KAAK,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,UAAA,EAAY,KAAK,QAAQ,CAAA;AAC5D,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,WAAA,CAAY,EAAE,CAAA;AAC7C,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAO,IAAA,CAAK,kBAAA,CAAmB,QAAA,EAAU,OAAO,CAAA;AAAA,IAClD;AAEA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,YAAA;AACnC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,MAAM,CAAA;AACvC,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4BAAA,EAA+B,KAAK,QAAQ,CAAA,2BAAA,EAA8B,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,IACrG;AAEA,IAAA,MAAM,MAAA,GAAwB;AAAA,MAC5B,EAAA;AAAA,MACA,SAAS,IAAA,CAAK,QAAA;AAAA,MACd,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,MAAA,EAAQ,WAAA;AAAA,MACR,MAAA;AAAA,MACA,OAAA,EAAS,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,cAAA;AAAA,MAC9B,MAAA,EAAQ,EAAE,IAAA,EAAM,WAAA,EAAY;AAAA,MAC5B,aAAA,EAAe,CAAA;AAAA,MACf,gCAAgC,IAAA,CAAK,+BAAA;AAAA,MACrC,GAAI,KAAK,aAAA,GAAgB,EAAE,OAAO,IAAA,CAAK,aAAA,KAA6C,EAAC;AAAA,MACrF,SAAS,EAAC;AAAA,MACV,SAAA,sBAAe,IAAA,EAAK;AAAA,MACpB,cAAA,sBAAoB,IAAA;AAAK,KAC3B;AAEA,IAAA,MAAM,OAAA,CAAQ,YAAY,MAAM,CAAA;AAChC,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,EAAE,IAAA,EAAM,mBAAmB,GAAG,qBAAA,CAAsB,MAAM,CAAA,EAAG,CAAA;AAC/E,IAAA,OAAO,IAAA,CAAK,kBAAA,CAAmB,MAAA,EAAQ,OAAO,CAAA;AAAA,EAChD;AAAA,EAEA,MAAM,kBAAA,CAAmB,OAAA,EAAyB,SAAA,EAAmB,UAAA,EAA6C;AAChH,IAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,WAAA,CAAY,SAAS,CAAA;AAClD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iBAAA,EAAoB,SAAS,CAAA,eAAA,CAAiB,CAAA;AAAA,IAChE;AACA,IAAA,IAAI,UAAA,IAAc,MAAA,CAAO,UAAA,KAAe,UAAA,EAAY;AAClD,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iBAAA,EAAoB,SAAS,CAAA,+BAAA,EAAkC,UAAU,CAAA,CAAA,CAAG,CAAA;AAAA,IAC9F;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAM,eAAA,GAA2C;AAC/C,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,OAAO,IAAA,CAAK,QAAA;AAAA,IACd;AAEA,IAAA,IAAI,CAAC,KAAK,iBAAA,EAAmB;AAC3B,MAAA,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAAA,IAC7D;AAEA,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,iBAAA,CAAkB,SAAS,SAAS,CAAA;AAC/D,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAAA,IAC7D;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEA,kBAAA,CAAmB,QAAuB,OAAA,EAA0C;AAClF,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,MAAA,GAAS,IAAA,CAAK,WAAW,GAAA,CAAI,MAAA,CAAO,MAAM,CAAA,GAAI,IAAA,CAAK,UAAA,CAAW,MAAA,EAAO,CAAE,MAAK,CAAE,KAAA;AAClG,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,IAAI,MAAM,CAAA,iBAAA,EAAoB,MAAA,CAAO,EAAE,CAAA,2BAAA,EAA8B,MAAA,CAAO,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,IAC7F;AAEA,IAAA,OAAO,IAAI,OAAA,CAAgB;AAAA,MACzB,IAAI,MAAA,CAAO,EAAA;AAAA,MACX,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,YAAY,MAAA,CAAO,UAAA;AAAA,MACnB,IAAA;AAAA,MACA,OAAO,MAAA,CAAO,OAAA;AAAA,MACd,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,gBAAgB,MAAA,CAAO,cAAA;AAAA,MACvB,OAAO,IAAA,CAAK,MAAA;AAAA,MACZ,QAAQ,IAAA,CAAK,OAAA;AAAA,MACb,OAAA;AAAA,MACA,MAAA;AAAA,MACA,gCAAgC,IAAA,CAAK,+BAAA;AAAA,MACrC,MAAA,EAAQ,KAAK,OAAA,CAAQ,MAAA,CAAO,EAAE,SAAA,EAAW,MAAA,CAAO,IAAI,CAAA;AAAA,MACpD,aAAa,IAAA,CAAK,YAAA;AAAA,MAClB,cAAc,IAAA,CAAK,aAAA;AAAA,MACnB,WAAW,IAAA,CAAK,UAAA;AAAA,MAChB,WAAW,IAAA,CAAK,UAAA;AAAA,MAChB,YAAA,EAAc,CAAA,OAAA,KAAW,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA;AAAA,MACnD,WAAA,EAAa,CAAA,MAAA,KAAU,IAAA,CAAK,YAAA,CAAa,MAAM,CAAA;AAAA,MAC/C,cAAc,IAAA,CAAK,aAAA;AAAA,MACnB,yBAAyB,IAAA,CAAK,wBAAA;AAAA,MAC9B,sBAAsB,IAAA,CAAK;AAAA,KAC5B,CAAA;AAAA,EACH;AAAA,EAEA,cAAc,OAAA,EAAwB;AACpC,IAAA,IAAI,KAAK,OAAA,EAAS,OAAO,IAAA,CAAK,OAAA,CAAQ,aAAa,OAAO,CAAA;AAC1D,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uCAAA,EAA0C,OAAO,CAAA,CAAA,CAAG,CAAA;AAAA,EACtE;AAAA,EAEA,aAAa,MAAA,EAA6B;AACxC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,MAAM,CAAA;AACvC,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,cAAA,EAAiB,MAAM,CAAA,eAAA,CAAiB,CAAA;AAAA,IAC1D;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,aAAA,CAAc,YAAoB,QAAA,EAA0B;AAC1D,IAAA,MAAM,OAAOC,iBAAA,CAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,GAAG,UAAU,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAE,EAAE,MAAA,CAAO,KAAK,CAAA,CAAE,KAAA,CAAM,GAAG,EAAE,CAAA;AAChG,IAAA,OAAO,QAAQ,IAAI,CAAA,CAAA;AAAA,EACrB;AACF","file":"index.cjs","sourcesContent":["import { randomUUID } from 'node:crypto';\n\nimport type { SessionRecord } from '../../storage/domains/harness';\n\nexport interface HarnessEventBase {\n  id: string;\n  timestamp: number;\n  sessionId?: string;\n  subagentSessionId?: string;\n  runId?: string;\n  signalId?: string;\n  queuedItemId?: string;\n}\n\nexport interface SessionCreatedEvent extends HarnessEventBase {\n  type: 'session_created';\n  resourceId: string;\n  threadId: string;\n  parentSessionId?: string;\n  modeId: string;\n  modelId: string;\n}\n\nexport interface ModeChangedEvent extends HarnessEventBase {\n  type: 'mode_changed';\n  modeId: string;\n  previousModeId: string;\n}\n\nexport interface ModelChangedEvent extends HarnessEventBase {\n  type: 'model_changed';\n  modelId: string;\n  previousModelId: string;\n}\n\nexport interface ThreadClonedEvent extends HarnessEventBase {\n  type: 'thread_cloned';\n  threadId: string;\n  resourceId: string;\n  sourceThreadId: string;\n  title?: string;\n}\n\nexport interface StateChangedEvent extends HarnessEventBase {\n  type: 'state_changed';\n  state: Record<string, unknown>;\n  changedKeys: string[];\n}\n\nexport interface SubagentStartEvent extends HarnessEventBase {\n  type: 'subagent_start';\n  subagentSessionId: string;\n  payload: {\n    agentType: string;\n    parentSessionId: string;\n    depth: number;\n  };\n}\n\nexport interface CustomEvent extends HarnessEventBase {\n  type: string;\n  payload?: JsonSerializable;\n}\n\nexport type HarnessEvent =\n  | SessionCreatedEvent\n  | ModeChangedEvent\n  | ModelChangedEvent\n  | ThreadClonedEvent\n  | StateChangedEvent\n  | SubagentStartEvent\n  | CustomEvent;\nexport type HarnessEventListener = (event: HarnessEvent) => void | Promise<void>;\nexport type HarnessEventUnsubscribe = () => void;\n\nexport const HARNESS_EVENT_ID_PREFIX = 'harness-v1';\n\nexport interface ParsedHarnessEventId {\n  epoch: string;\n  sequence: number;\n}\n\nexport class HarnessValidationError extends Error {\n  constructor(\n    readonly path: string,\n    message: string,\n  ) {\n    super(`${path}: ${message}`);\n    this.name = 'HarnessValidationError';\n  }\n}\n\nexport class HarnessEventSerializationError extends HarnessValidationError {\n  constructor(\n    readonly eventType: string,\n    readonly reason: EventSerializationReason,\n    readonly sessionId?: string,\n  ) {\n    super('event.payload', `custom event \"${eventType}\" payload is not JSON-serializable: ${reason}`);\n    this.name = 'HarnessEventSerializationError';\n  }\n}\n\nexport type EventSerializationReason =\n  | 'undefined'\n  | 'function'\n  | 'symbol'\n  | 'bigint'\n  | 'date'\n  | 'map'\n  | 'set'\n  | 'typed-array'\n  | 'non-plain-object'\n  | 'cycle';\n\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonSerializable = JsonPrimitive | JsonSerializable[] | { [key: string]: JsonSerializable };\n\ntype DistributiveOmit<T, K extends keyof never> = T extends unknown ? Omit<T, K> : never;\nexport type EmitInput = DistributiveOmit<HarnessEvent, 'id' | 'timestamp' | 'sessionId'>;\n\nexport interface EmitterScope {\n  sessionId?: string;\n}\n\nexport function formatHarnessEventId(epoch: string, sequence: number): string {\n  if (epoch.length === 0 || epoch.includes(':')) {\n    throw new HarnessValidationError('eventId.epoch', 'epoch must be non-empty and must not contain \":\"');\n  }\n  if (!Number.isSafeInteger(sequence) || sequence < 0) {\n    throw new HarnessValidationError('eventId.sequence', 'sequence must be a non-negative safe integer');\n  }\n  return `${HARNESS_EVENT_ID_PREFIX}:${epoch}:${sequence}`;\n}\n\nexport function parseHarnessEventId(eventId: string): ParsedHarnessEventId {\n  const parts = eventId.split(':');\n  if (parts.length !== 3 || parts[0] !== HARNESS_EVENT_ID_PREFIX || parts[1] === '' || parts[2] === '') {\n    throw new HarnessValidationError('lastEventId', 'expected event id grammar harness-v1:<epoch>:<seq>');\n  }\n\n  const sequenceText = parts[2]!;\n  if (!/^(0|[1-9][0-9]*)$/.test(sequenceText)) {\n    throw new HarnessValidationError('lastEventId', 'event id sequence must be an unsigned decimal integer');\n  }\n\n  const sequence = Number(sequenceText);\n  if (!Number.isSafeInteger(sequence)) {\n    throw new HarnessValidationError('lastEventId', 'event id sequence must be within JavaScript safe integer range');\n  }\n\n  return { epoch: parts[1]!, sequence };\n}\n\nexport function sessionCreatedPayload(\n  record: SessionRecord,\n): Omit<SessionCreatedEvent, keyof HarnessEventBase | 'type'> {\n  return {\n    resourceId: record.resourceId,\n    threadId: record.threadId,\n    parentSessionId: record.parentSessionId,\n    modeId: record.modeId,\n    modelId: record.modelId,\n  };\n}\n\nexport function assertCustomEventType(eventType: string): void {\n  if (RESERVED_EVENT_TYPES.has(eventType) || RESERVED_EVENT_PREFIXES.some(prefix => eventType.startsWith(prefix))) {\n    throw new HarnessValidationError('event.type', `\"${eventType}\" is reserved by the harness`);\n  }\n  if (!eventType.includes('.')) {\n    throw new HarnessValidationError('event.type', 'custom event types must be namespaced with a dot');\n  }\n}\n\nexport function assertJsonSerializable(eventType: string, sessionId: string | undefined, value: unknown): void {\n  visitJsonValue(eventType, sessionId, value, new WeakSet<object>());\n}\n\nexport class EventEmitter {\n  private readonly listeners: HarnessEventListener[] = [];\n  private epoch?: string;\n  private seq: number;\n  private readonly scope: EmitterScope;\n  private readonly onEvent?: HarnessEventListener;\n\n  constructor(\n    scope: EmitterScope = {},\n    opts: { onEvent?: HarnessEventListener; epoch?: string; nextSequence?: number } = {},\n  ) {\n    this.scope = scope;\n    this.onEvent = opts.onEvent;\n    this.epoch = opts.epoch;\n    this.seq = opts.nextSequence ?? 0;\n    formatHarnessEventId(this.epoch ?? 'pending-epoch', this.seq);\n  }\n\n  scoped(scope: EmitterScope): EventEmitter {\n    return new EventEmitter(\n      { ...this.scope, ...scope },\n      {\n        onEvent: event => this.forward(event),\n      },\n    );\n  }\n\n  subscribe(listener: HarnessEventListener): HarnessEventUnsubscribe {\n    this.listeners.push(listener);\n    return () => {\n      const index = this.listeners.indexOf(listener);\n      if (index !== -1) this.listeners.splice(index, 1);\n    };\n  }\n\n  emit(event: EmitInput, overrides?: { sessionId?: string }): HarnessEvent {\n    const sessionId = overrides?.sessionId ?? this.scope.sessionId;\n    this.validateCustomEvent(event, sessionId);\n    const stamped = {\n      ...event,\n      id: formatHarnessEventId(this.epochId, this.seq++),\n      timestamp: Date.now(),\n      ...(sessionId !== undefined && { sessionId }),\n    } as HarnessEvent;\n    this.dispatch(stamped);\n    return stamped;\n  }\n\n  forward(event: HarnessEvent): void {\n    this.dispatch(event);\n  }\n\n  get listenerCount(): number {\n    return this.listeners.length;\n  }\n\n  get epochId(): string {\n    this.epoch ??= randomUUID();\n    return this.epoch;\n  }\n\n  private validateCustomEvent(event: EmitInput, sessionId: string | undefined): void {\n    const eventType = (event as { type?: unknown }).type;\n    if (typeof eventType !== 'string' || RESERVED_EVENT_TYPES.has(eventType)) return;\n\n    assertCustomEventType(eventType);\n    if (Object.prototype.hasOwnProperty.call(event, 'payload')) {\n      assertJsonSerializable(eventType, sessionId, (event as { payload?: unknown }).payload);\n    }\n  }\n\n  private dispatch(event: HarnessEvent): void {\n    if (this.onEvent) {\n      try {\n        const result = this.onEvent(event);\n        if (result && typeof (result as Promise<void>).catch === 'function') {\n          (result as Promise<void>).catch(err => console.error('[harness/v1] event persistence rejected:', err));\n        }\n      } catch (err) {\n        console.error('[harness/v1] event persistence threw:', err);\n      }\n    }\n\n    for (const listener of [...this.listeners]) {\n      try {\n        const result = listener(event);\n        if (result && typeof (result as Promise<void>).catch === 'function') {\n          (result as Promise<void>).catch(err => console.error('[harness/v1] event listener rejected:', err));\n        }\n      } catch (err) {\n        console.error('[harness/v1] event listener threw:', err);\n      }\n    }\n  }\n}\n\nconst RESERVED_EVENT_TYPES = new Set([\n  'session_created',\n  'mode_changed',\n  'model_changed',\n  'thread_cloned',\n  'state_changed',\n  'subagent_start',\n]);\n\nconst RESERVED_EVENT_PREFIXES = ['session_', 'thread_'];\n\nfunction visitJsonValue(eventType: string, sessionId: string | undefined, value: unknown, seen: WeakSet<object>): void {\n  if (value === undefined) throwSerialization(eventType, sessionId, 'undefined');\n  if (typeof value === 'function') throwSerialization(eventType, sessionId, 'function');\n  if (typeof value === 'symbol') throwSerialization(eventType, sessionId, 'symbol');\n  if (typeof value === 'bigint') throwSerialization(eventType, sessionId, 'bigint');\n  if (value === null || typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') return;\n  if (value instanceof Date) throwSerialization(eventType, sessionId, 'date');\n  if (value instanceof Map) throwSerialization(eventType, sessionId, 'map');\n  if (value instanceof Set) throwSerialization(eventType, sessionId, 'set');\n  if (ArrayBuffer.isView(value)) throwSerialization(eventType, sessionId, 'typed-array');\n  if (typeof value !== 'object') return;\n\n  if (seen.has(value)) throwSerialization(eventType, sessionId, 'cycle');\n  seen.add(value);\n\n  if (Array.isArray(value)) {\n    for (const item of value) visitJsonValue(eventType, sessionId, item, seen);\n    seen.delete(value);\n    return;\n  }\n\n  const prototype = Object.getPrototypeOf(value);\n  if (prototype !== Object.prototype && prototype !== null) {\n    throwSerialization(eventType, sessionId, 'non-plain-object');\n  }\n\n  for (const item of Object.values(value)) {\n    visitJsonValue(eventType, sessionId, item, seen);\n  }\n  seen.delete(value);\n}\n\nfunction throwSerialization(eventType: string, sessionId: string | undefined, reason: EventSerializationReason): never {\n  throw new HarnessEventSerializationError(eventType, reason, sessionId);\n}\n","import { RequestContext } from '@internal/core/request-context';\n\nexport type HarnessRequestContextSource = {\n  type: 'top-level' | 'subagent-tool' | 'direct-local' | 'remote-resolve';\n  parentSessionId?: string;\n};\n\nexport interface HarnessRequestContext<TState = unknown> {\n  harnessId: string;\n  sessionId: string;\n  ownerId: string;\n  resourceId: string;\n  threadId: string;\n  modeId: string;\n  modelId: string;\n  parentSessionId?: string;\n  subagentDepth: number;\n  source: HarnessRequestContextSource;\n  getState(): Readonly<TState>;\n}\n\nexport type BuildHarnessRequestContextOptions<TState> = {\n  harnessContext: HarnessRequestContext<TState>;\n};\n\nexport function buildHarnessRequestContext<TState>({\n  harnessContext,\n}: BuildHarnessRequestContextOptions<TState>): RequestContext {\n  const requestContext = new RequestContext<unknown>();\n  requestContext.set('harness', harnessContext);\n  return requestContext;\n}\n","export type SkillSource = 'workspace';\n\ntype JsonPrimitive = string | number | boolean | null;\nexport type HarnessSkillMetadata = Record<string, JsonPrimitive | JsonPrimitive[] | { [key: string]: unknown }>;\n\nexport interface HarnessSkill {\n  name: string;\n  description: string;\n  instructions: string;\n  category?: string;\n  filePath: string;\n  metadata?: HarnessSkillMetadata;\n}\n\n/**\n * Thrown by `session.useSkill` when the named skill is not present in any\n * workspace skill catalog.\n */\nexport class HarnessSkillNotFoundError extends Error {\n  readonly name = 'HarnessSkillNotFoundError';\n  readonly skillName: string;\n  readonly searchedSources: readonly SkillSource[];\n\n  constructor(opts: { name: string; searchedSources: readonly SkillSource[] }) {\n    super(`Harness skill not found: ${opts.name} (searched: ${opts.searchedSources.join(', ') || 'none'})`);\n    this.skillName = opts.name;\n    this.searchedSources = opts.searchedSources;\n  }\n}\n","// ---------------------------------------------------------------------------\n// Tool composition (v1).\n//\n// Combines an agent's tool surface with mode overrides, harness built-in\n// tools, and permission-rule filtering. The Session/Harness layer never\n// imports the legacy `buildToolsets` pipeline — this composer is the v1\n// surface for \"what tools does this request see?\".\n// ---------------------------------------------------------------------------\n\nimport { randomUUID } from 'node:crypto';\n\nimport { z } from 'zod';\n\nimport type { ToolsInput } from '../../agent/types';\nimport { createTool } from '../../tools';\nimport type { ToolExecutionContext } from '../../tools';\nimport type { PermissionPolicy } from './permissions.types';\nimport type { HarnessRequestContext } from './request-context';\nimport type { Session } from './session';\n\ntype AnySession = Session<any>;\n\ntype HarnessTaskRecord = {\n  id: string;\n  content: string;\n  status: 'pending' | 'in_progress' | 'completed';\n  activeForm: string;\n};\n\ntype TaskState = { tasks?: HarnessTaskRecord[] };\n\nexport interface PermissionRules {\n  /**\n   * Per-tool override map. `'allow'` exposes the tool unconditionally,\n   * `'deny'` strips it from the toolset, `'ask'` defers to the runtime gate.\n   */\n  tools?: Record<string, PermissionPolicy>;\n}\n\nexport interface BuildSessionToolsetsOptions {\n  /** Tools declared by the backing agent (already resolved for this request). */\n  agentTools?: ToolsInput;\n  /** Mode-level overrides. `tools` replaces; `additionalTools` augments. */\n  modeOverrides?: { tools?: ToolsInput; additionalTools?: ToolsInput };\n  /** Harness built-in tools (ask_user, submit_plan, task_*, subagent, etc). */\n  builtInTools?: ToolsInput;\n  /** Optional per-tool permission policy. `deny` filters the tool out. */\n  permissionRules?: PermissionRules;\n  /** Tool ids the caller has explicitly disabled. */\n  disabledTools?: readonly string[];\n}\n\nconst taskSchema = z.object({\n  id: z.string().optional(),\n  content: z.string(),\n  status: z.enum(['pending', 'in_progress', 'completed']),\n  activeForm: z.string(),\n});\n\nconst taskUpdateSchema = z.object({\n  id: z.string(),\n  content: z.string().optional(),\n  status: z.enum(['pending', 'in_progress', 'completed']).optional(),\n  activeForm: z.string().optional(),\n});\n\nfunction getHarnessContext(context: ToolExecutionContext): HarnessRequestContext {\n  const harnessContext = context.requestContext?.get<'harness', HarnessRequestContext>('harness');\n  if (!harnessContext) {\n    throw new Error('Harness tool execution requires context.requestContext.get(\"harness\")');\n  }\n  return harnessContext;\n}\n\nfunction assertOwningSession(session: AnySession, context: ToolExecutionContext): HarnessRequestContext {\n  const harnessContext = getHarnessContext(context);\n  if (harnessContext.sessionId !== session.id) {\n    throw new Error(\n      `Harness tool execution context belongs to session \"${harnessContext.sessionId}\", not \"${session.id}\"`,\n    );\n  }\n  return harnessContext;\n}\n\nfunction recoverableError(error: unknown, code = 'harness.tool_failed') {\n  return {\n    isError: true,\n    code,\n    message: error instanceof Error ? error.message : String(error),\n  };\n}\n\nfunction taskSummary(tasks: HarnessTaskRecord[]) {\n  const completed = tasks.filter(task => task.status === 'completed').length;\n  const inProgress = tasks.filter(task => task.status === 'in_progress').length;\n  const pending = tasks.filter(task => task.status === 'pending').length;\n  const incompleteTasks = tasks.filter(task => task.status !== 'completed');\n  return {\n    tasks,\n    summary: {\n      total: tasks.length,\n      completed,\n      inProgress,\n      pending,\n      incomplete: incompleteTasks.length,\n      hasTasks: tasks.length > 0,\n      allCompleted: tasks.length > 0 && incompleteTasks.length === 0,\n    },\n    incompleteTasks,\n  };\n}\n\nfunction getTasks(session: AnySession): HarnessTaskRecord[] {\n  const state = session.getState() as TaskState;\n  return (state.tasks ?? []).map(task => ({ ...task }));\n}\n\nasync function replaceTasks(session: AnySession, tasks: HarnessTaskRecord[]): Promise<HarnessTaskRecord[]> {\n  return session.updateState(() => ({\n    updates: { tasks: tasks.map(task => ({ ...task })) },\n    result: tasks.map(task => ({ ...task })),\n  }));\n}\n\nasync function updateTask(\n  session: AnySession,\n  taskId: string,\n  updates: Partial<Omit<HarnessTaskRecord, 'id'>>,\n): Promise<HarnessTaskRecord[]> {\n  return session.updateState((state: Readonly<TaskState>) => {\n    const tasks = (state.tasks ?? []).map(task => ({ ...task }));\n    const task = tasks.find(task => task.id === taskId);\n    if (!task) {\n      throw new Error(`Harness task \"${taskId}\" was not found on session \"${session.id}\"`);\n    }\n    Object.assign(task, updates);\n    return { updates: { tasks }, result: tasks };\n  });\n}\n\nexport function buildHarnessBuiltInTools(session: AnySession): ToolsInput {\n  return {\n    task_write: createTool({\n      id: 'task_write',\n      description: 'Replace the task list for the current harness session.',\n      inputSchema: z.object({ tasks: z.array(taskSchema).min(1) }),\n      execute: async ({ tasks }, context) => {\n        try {\n          assertOwningSession(session, context);\n          const savedTasks = await replaceTasks(\n            session,\n            tasks.map(task => ({ ...task, id: task.id ?? randomUUID() })),\n          );\n          return taskSummary(savedTasks);\n        } catch (error) {\n          return recoverableError(error);\n        }\n      },\n    }),\n    task_update: createTool({\n      id: 'task_update',\n      description: 'Update one task in the current harness session.',\n      inputSchema: taskUpdateSchema,\n      execute: async ({ id, ...updates }, context) => {\n        try {\n          assertOwningSession(session, context);\n          return taskSummary(await updateTask(session, id, updates));\n        } catch (error) {\n          return recoverableError(error);\n        }\n      },\n    }),\n    task_complete: createTool({\n      id: 'task_complete',\n      description: 'Mark one task completed in the current harness session.',\n      inputSchema: z.object({ id: z.string() }),\n      execute: async ({ id }, context) => {\n        try {\n          assertOwningSession(session, context);\n          return taskSummary(await updateTask(session, id, { status: 'completed' }));\n        } catch (error) {\n          return recoverableError(error);\n        }\n      },\n    }),\n    task_check: createTool({\n      id: 'task_check',\n      description: 'Read the task completion state for the current harness session.',\n      inputSchema: z.object({}).optional(),\n      execute: async (_input, context) => {\n        try {\n          assertOwningSession(session, context);\n          return taskSummary(getTasks(session));\n        } catch (error) {\n          return recoverableError(error);\n        }\n      },\n    }),\n    ask_user: createTool({\n      id: 'ask_user',\n      description: 'Register a pending question for the current harness session.',\n      inputSchema: z.object({\n        question: z.string(),\n        options: z\n          .array(z.object({ label: z.string(), description: z.string().nullable().optional() }))\n          .min(2)\n          .max(4)\n          .optional()\n          .nullable(),\n        selectionMode: z.enum(['single_select', 'multi_select']).optional(),\n      }),\n      execute: async (input, context) => {\n        try {\n          assertOwningSession(session, context);\n          const pending = await session.registerPendingItem({\n            id: randomUUID(),\n            kind: 'question',\n            status: 'pending',\n            runId: context.agent?.runId ?? context.workflow?.runId ?? null,\n            traceId: context.traceId ?? null,\n            payload: input,\n          });\n          return { isError: false, pendingItemId: pending.id, status: pending.status };\n        } catch (error) {\n          return recoverableError(error);\n        }\n      },\n    }),\n    submit_plan: createTool({\n      id: 'submit_plan',\n      description: 'Register a pending plan approval for the current harness session.',\n      inputSchema: z.object({ title: z.string().nullable().optional(), plan: z.string() }),\n      execute: async (input, context) => {\n        try {\n          assertOwningSession(session, context);\n          const pending = await session.registerPendingItem({\n            id: randomUUID(),\n            kind: 'plan-approval',\n            status: 'pending',\n            runId: context.agent?.runId ?? context.workflow?.runId ?? null,\n            traceId: context.traceId ?? null,\n            payload: { ...input, transitionModeId: session.getMode().transitionsTo },\n          });\n          return { isError: false, pendingItemId: pending.id, status: pending.status };\n        } catch (error) {\n          return recoverableError(error);\n        }\n      },\n    }),\n    subagent: createTool({\n      id: 'subagent',\n      description: 'Create a durable child harness session for a configured subagent type.',\n      inputSchema: z.object({\n        agentType: z.string(),\n        prompt: z.string(),\n        modelId: z.string().optional().nullable(),\n        forked: z.boolean().optional().nullable(),\n      }),\n      execute: async (input, context) => {\n        try {\n          assertOwningSession(session, context);\n          return await session.spawnSubagentSession({\n            agentType: input.agentType,\n            prompt: input.prompt,\n            ...(input.modelId ? { modelId: input.modelId } : {}),\n            ...(input.forked !== undefined && input.forked !== null ? { forked: input.forked } : {}),\n          });\n        } catch (error) {\n          return recoverableError(error);\n        }\n      },\n    }),\n    useSkill: createTool({\n      id: 'useSkill',\n      description: 'Activate a skill in the current harness session.',\n      inputSchema: z.object({ ref: z.string() }),\n      execute: async ({ ref }, context) => {\n        try {\n          assertOwningSession(session, context);\n          return { instructions: await session.useSkill(ref) };\n        } catch (error) {\n          return recoverableError(error);\n        }\n      },\n    }),\n  } as ToolsInput;\n}\n\n/**\n * Produce the final toolset visible to the agent on this request. Pure\n * function — no IO, no side effects.\n *\n * Layering order:\n *  1. Agent tools (or mode `tools` replacement)\n *  2. Mode `additionalTools` (when not in replacement mode)\n *  3. Built-in harness tools (last so they cannot be shadowed)\n *  4. Apply `permissionRules.deny` + `disabledTools` filters\n */\nexport function buildSessionToolsets(opts: BuildSessionToolsetsOptions = {}): ToolsInput {\n  const { agentTools, modeOverrides, builtInTools, permissionRules, disabledTools } = opts;\n\n  const base: Record<string, unknown> = modeOverrides?.tools\n    ? { ...(modeOverrides.tools as Record<string, unknown>) }\n    : { ...(agentTools as Record<string, unknown> | undefined) };\n\n  if (modeOverrides?.additionalTools && !modeOverrides.tools) {\n    Object.assign(base, modeOverrides.additionalTools);\n  }\n\n  if (builtInTools) {\n    Object.assign(base, builtInTools);\n  }\n\n  const denySet = new Set<string>(disabledTools ?? []);\n  for (const [name, policy] of Object.entries(permissionRules?.tools ?? {})) {\n    if (policy === 'deny') denySet.add(name);\n  }\n\n  for (const name of denySet) {\n    delete base[name];\n  }\n\n  return base as ToolsInput;\n}\n","import { randomUUID } from 'node:crypto';\n\nimport { RequestContext } from '@internal/core/request-context';\nimport type { Agent, ToolsInput } from '../../agent';\nimport type { MastraDBMessage } from '../../agent/message-list';\nimport type { MastraMemory, StorageThreadType } from '../../memory';\nimport { toStandardSchema } from '../../schema';\nimport type { PublicSchema, StandardSchemaWithJSON } from '../../schema';\nimport type {\n  HarnessPendingItemRecord,\n  HarnessStorage,\n  SessionRecord,\n  SessionRecordUpdate,\n} from '../../storage/domains/harness';\nimport type { DynamicArgument } from '../../types';\nimport type { Workspace } from '../../workspace';\nimport type { Skill as WorkspaceSkill, SkillMetadata as WorkspaceSkillMetadata } from '../../workspace/skills/types';\nimport { sessionCreatedPayload } from './events';\nimport type { EventEmitter } from './events';\nimport type { HarnessMode } from './mode';\nimport type { PermissionPolicy, ToolCategoryResolver } from './permissions.types';\nimport { buildHarnessRequestContext } from './request-context';\nimport type { HarnessRequestContext, HarnessRequestContextSource } from './request-context';\nimport type { CloneSessionOptions, SessionConfig, SessionSignalOptions } from './session.types';\nimport { HarnessSkillNotFoundError } from './skills.types';\nimport type { HarnessSkill, SkillSource } from './skills.types';\nimport type { ModelResolver, SubagentRegistryConfig } from './subagents.types';\nimport { buildHarnessBuiltInTools, buildSessionToolsets } from './tools';\n\nexport class Session<TState = {}> {\n  /** Stable identity. Frozen at construction. */\n  readonly #id: string;\n  readonly #ownerId: string;\n  readonly #resourceId: string;\n  readonly #threadId: string;\n  readonly #createdAt: Date;\n  #lastActivityAt: Date;\n  readonly #agent: Agent;\n  readonly #storage: HarnessStorage;\n  readonly #runtimeCompatibilityGeneration?: string | null;\n  readonly #parentSessionId?: string;\n  readonly #subagentDepth: number;\n  readonly #source: HarnessRequestContextSource;\n  #pending: HarnessPendingItemRecord[];\n  #runStatus: 'idle' | 'starting' | 'running' | 'waiting' | 'resuming' = 'idle';\n  #currentRunId: string | null = null;\n  #currentTraceId: string | null = null;\n  readonly #memory: MastraMemory | DynamicArgument<MastraMemory>;\n  readonly #events: EventEmitter;\n  readonly #stateSchemaInput?: PublicSchema<TState>;\n  readonly #stateSchema?: StandardSchemaWithJSON<TState>;\n  #state: TState;\n  #stateUpdateQueue: Promise<void> = Promise.resolve();\n  readonly #workspace?: DynamicArgument<Workspace | undefined>;\n  #resolvedWorkspace?: Workspace;\n  #workspaceResolved = false;\n  readonly #resolveAgent?: (agentId: string) => Agent | Promise<Agent>;\n  readonly #resolveMode?: (modeId: string) => HarnessMode | Promise<HarnessMode>;\n  /**\n   * Single-flight cache for workspace skill discovery (spec §4.6: concurrent\n   * `listSkills`/`useSkill` calls must share the same in-flight promise so we\n   * don't re-scan the workspace per call).\n   */\n  #workspaceSkillsPromise?: Promise<HarnessSkill[]>;\n  readonly #subagents?: SubagentRegistryConfig;\n  readonly #resolveModel?: ModelResolver;\n  readonly #defaultPermissionPolicy: PermissionPolicy;\n  readonly #toolCategoryResolver?: ToolCategoryResolver;\n  // readonly parentSessionId?: string;\n  // readonly subagentDepth: number;\n\n  #modelId: string;\n  #mode: HarnessMode;\n\n  constructor(config: SessionConfig<TState>) {\n    this.#id = config.id;\n    this.#ownerId = config.ownerId;\n    this.#resourceId = config.resourceId;\n    this.#threadId = config.threadId;\n    this.#mode = config.mode;\n    this.#modelId = config.model;\n    this.#createdAt = config.createdAt;\n    this.#lastActivityAt = config.lastActivityAt;\n    this.#storage = config.storage;\n    this.#runtimeCompatibilityGeneration = config.runtimeCompatibilityGeneration;\n    this.#parentSessionId = config.record?.parentSessionId;\n    this.#subagentDepth = config.record?.subagentDepth ?? 0;\n    this.#source = config.record?.source\n      ? { type: config.record.source.type, parentSessionId: config.record.source.parentSessionId }\n      : { type: config.record?.origin ?? 'top-level', parentSessionId: config.record?.parentSessionId };\n    this.#pending = (config.pending ?? config.record?.pending ?? []).map(item => ({ ...item }));\n    this.#memory = config.memory;\n    this.#events = config.events;\n    this.#stateSchemaInput = config.stateSchema;\n    this.#stateSchema = config.stateSchema ? toStandardSchema(config.stateSchema) : undefined;\n    this.#resolveAgent = config.resolveAgent;\n    this.#resolveMode = config.resolveMode;\n    this.#state = {\n      ...this.#getSchemaDefaults(),\n      ...config.initialState,\n      ...(config.record?.state as Partial<TState> | undefined),\n    } as TState;\n    this.#workspace = config.workspace;\n    this.#subagents = config.subagents;\n    this.#resolveModel = config.resolveModel;\n    this.#defaultPermissionPolicy = config.defaultPermissionPolicy ?? 'ask';\n    this.#toolCategoryResolver = config.toolCategoryResolver;\n    this.#agent = config.agent;\n  }\n\n  get id(): string {\n    return this.#id;\n  }\n\n  get ownerId(): string {\n    return this.#ownerId;\n  }\n\n  get resourceId(): string {\n    return this.#resourceId;\n  }\n\n  get threadId(): string {\n    return this.#threadId;\n  }\n\n  get createdAt(): Date {\n    return this.#createdAt;\n  }\n\n  get lastActivityAt(): Date {\n    return this.#lastActivityAt;\n  }\n\n  get parentSessionId(): string | undefined {\n    return this.#parentSessionId;\n  }\n\n  get subagentDepth(): number {\n    return this.#subagentDepth;\n  }\n\n  isBusy(): boolean {\n    return this.#isBusySnapshot();\n  }\n\n  async waitForIdle(opts: { timeout?: number } = {}): Promise<void> {\n    const timeout = opts.timeout ?? 30_000;\n    const startedAt = Date.now();\n\n    while (this.#isBusySnapshot()) {\n      if (Date.now() - startedAt >= timeout) {\n        throw new Error(`Harness session \"${this.#id}\" did not become idle within ${timeout}ms`);\n      }\n      await new Promise(resolve => setTimeout(resolve, 25));\n    }\n  }\n\n  getQueueDepth(): number {\n    return this.#pending.filter(item => item.status === 'pending').length;\n  }\n\n  getCurrentRunId(): string | null {\n    return this.#currentRunId;\n  }\n\n  getCurrentTraceId(): string | null {\n    return this.#currentTraceId;\n  }\n\n  listPendingItems(): HarnessPendingItemRecord[] {\n    return this.#pending.map(item => ({ ...item }));\n  }\n\n  async spawnSubagentSession(opts: { agentType: string; prompt: string; modelId?: string; forked?: boolean }): Promise<\n    | {\n        isError: false;\n        subagentSessionId: string;\n        threadId: string;\n        resourceId: string;\n        agentType: string;\n        depth: number;\n      }\n    | {\n        isError: true;\n        code: 'harness.subagent_depth_exceeded';\n        message: string;\n        details: { maxDepth: number; attemptedDepth: number };\n      }\n  > {\n    const maxDepth = this.#subagents?.maxDepth ?? 1;\n    const attemptedDepth = this.#subagentDepth + 1;\n    if (attemptedDepth > maxDepth) {\n      return {\n        isError: true,\n        code: 'harness.subagent_depth_exceeded',\n        message: `Harness subagent depth ${attemptedDepth} exceeds the configured maximum of ${maxDepth}`,\n        details: { maxDepth, attemptedDepth },\n      };\n    }\n\n    const definition = this.#subagents?.types?.[opts.agentType];\n    if (!definition) {\n      throw new Error(`Harness subagent type \"${opts.agentType}\" was not found`);\n    }\n\n    if (!this.#resolveAgent) {\n      throw new Error('Harness subagent spawn requires an agent resolver');\n    }\n    await this.#resolveAgent(definition.agentId);\n\n    const modelId = opts.modelId ?? definition.defaultModelId ?? this.#modelId;\n    if (!this.#resolveModel) {\n      throw new Error('Harness subagent spawn requires a resolveModel function');\n    }\n    await this.#resolveModel(modelId);\n\n    const now = new Date();\n    const record: SessionRecord = {\n      id: `sess-${randomUUID()}`,\n      ownerId: this.#ownerId,\n      resourceId: this.#resourceId,\n      threadId: `thread-${randomUUID()}`,\n      parentSessionId: this.#id,\n      origin: 'subagent-tool',\n      source: { type: 'subagent-tool', parentSessionId: this.#id },\n      subagentDepth: attemptedDepth,\n      runtimeCompatibilityGeneration: this.#runtimeCompatibilityGeneration,\n      modeId: this.#mode.id,\n      modelId,\n      metadata: {\n        agentType: opts.agentType,\n        agentId: definition.agentId,\n        prompt: opts.prompt,\n        forked: opts.forked ?? definition.forked ?? false,\n      },\n      state: this.getState() as Record<string, unknown>,\n      pending: [],\n      createdAt: now,\n      lastActivityAt: now,\n    };\n\n    await this.#storage.saveSession(record);\n    this.#events.emit({ type: 'session_created', ...sessionCreatedPayload(record) }, { sessionId: record.id });\n    this.#events.emit({\n      type: 'subagent_start',\n      subagentSessionId: record.id,\n      payload: { agentType: opts.agentType, parentSessionId: this.#id, depth: attemptedDepth },\n    });\n\n    return {\n      isError: false,\n      subagentSessionId: record.id,\n      threadId: record.threadId,\n      resourceId: record.resourceId,\n      agentType: opts.agentType,\n      depth: attemptedDepth,\n    };\n  }\n\n  async registerPendingItem(\n    item: Omit<HarnessPendingItemRecord, 'sessionId' | 'createdAt' | 'updatedAt'> & {\n      createdAt?: Date;\n      updatedAt?: Date;\n    },\n  ): Promise<HarnessPendingItemRecord> {\n    const now = new Date();\n    const record: HarnessPendingItemRecord = {\n      ...item,\n      sessionId: this.#id,\n      runtimeCompatibilityGeneration: item.runtimeCompatibilityGeneration ?? this.#runtimeCompatibilityGeneration,\n      createdAt: item.createdAt ?? now,\n      updatedAt: item.updatedAt ?? now,\n    };\n    this.#pending = [...this.#pending, record];\n    await this.#storage.appendPendingItem(this.#id, record);\n    await this.#reloadRecordProjection();\n    return { ...record };\n  }\n\n  async updatePendingItem(\n    pendingItemId: string,\n    updates: Partial<Omit<HarnessPendingItemRecord, 'id' | 'sessionId' | 'createdAt'>>,\n  ): Promise<HarnessPendingItemRecord> {\n    await this.#storage.updatePendingItem(this.#id, pendingItemId, updates);\n    await this.#reloadRecordProjection();\n    const item = this.#pending.find(item => item.id === pendingItemId);\n    if (!item) {\n      throw new Error(`Harness pending item \"${pendingItemId}\" was not found on session \"${this.#id}\"`);\n    }\n    return { ...item };\n  }\n\n  async removePendingItem(pendingItemId: string): Promise<void> {\n    await this.#storage.removePendingItem(this.#id, pendingItemId);\n    await this.#reloadRecordProjection();\n  }\n\n  async respondToToolApproval(\n    pendingItemId: string,\n    response: Record<string, unknown>,\n  ): Promise<HarnessPendingItemRecord> {\n    return this.#respondToPendingItem(pendingItemId, 'tool-approval', response);\n  }\n\n  async respondToToolSuspension(\n    pendingItemId: string,\n    response: Record<string, unknown>,\n  ): Promise<HarnessPendingItemRecord> {\n    return this.#respondToPendingItem(pendingItemId, 'tool-suspension', response);\n  }\n\n  async respondToQuestion(pendingItemId: string, response: Record<string, unknown>): Promise<HarnessPendingItemRecord> {\n    return this.#respondToPendingItem(pendingItemId, 'question', response);\n  }\n\n  async respondToPlanApproval(\n    pendingItemId: string,\n    response: Record<string, unknown>,\n  ): Promise<HarnessPendingItemRecord> {\n    return this.#respondToPendingItem(pendingItemId, 'plan-approval', response);\n  }\n\n  async clone(opts: CloneSessionOptions = {}): Promise<Session<TState>> {\n    const result = await (\n      await this.#resolveMemory()\n    ).cloneThread({\n      sourceThreadId: this.#threadId,\n      newThreadId: opts.threadId,\n      resourceId: opts.resourceId ?? this.#resourceId,\n      title: opts.title,\n      metadata: opts.metadata,\n      options: opts.messageLimit !== undefined ? { messageLimit: opts.messageLimit } : undefined,\n    });\n\n    const cloneId = opts.sessionId ?? randomUUID();\n    const clone = new Session<TState>({\n      id: cloneId,\n      ownerId: this.#ownerId,\n      threadId: result.thread.id,\n      resourceId: result.thread.resourceId,\n      mode: opts.mode ?? this.#mode,\n      model: opts.modelId ?? this.#modelId,\n      createdAt: result.thread.createdAt,\n      lastActivityAt: result.thread.updatedAt,\n      agent: this.#agent,\n      memory: this.#memory,\n      storage: this.#storage,\n      events: this.#events.scoped({ sessionId: cloneId }),\n      stateSchema: this.#stateSchemaInput,\n      initialState: this.getState() as Partial<TState>,\n      workspace: this.#workspace,\n      subagents: this.#subagents,\n      resolveAgent: this.#resolveAgent,\n      resolveMode: this.#resolveMode,\n      resolveModel: this.#resolveModel,\n      defaultPermissionPolicy: this.#defaultPermissionPolicy,\n      toolCategoryResolver: this.#toolCategoryResolver,\n    });\n\n    this.#events.emit({\n      type: 'thread_cloned',\n      threadId: clone.threadId,\n      resourceId: clone.resourceId,\n      sourceThreadId: this.#threadId,\n      title: opts.title,\n    });\n\n    return clone;\n  }\n\n  async getThread(): Promise<StorageThreadType | null> {\n    return (await this.#resolveMemory()).getThreadById({ threadId: this.#threadId });\n  }\n\n  async getMessages(): Promise<MastraDBMessage[]> {\n    const result = await (\n      await this.#resolveMemory()\n    ).recall({ threadId: this.#threadId, resourceId: this.#resourceId });\n    return result.messages;\n  }\n\n  async saveMessages(\n    messages: MastraDBMessage[],\n  ): Promise<{ messages: MastraDBMessage[]; usage?: { tokens: number } }> {\n    return (await this.#resolveMemory()).saveMessages({ messages });\n  }\n\n  getState(): Readonly<TState> {\n    return Object.freeze({ ...(this.#state as Record<string, unknown>) }) as Readonly<TState>;\n  }\n\n  async setState(updates: Partial<TState>): Promise<void> {\n    const run = this.#stateUpdateQueue.then(() => this.#applyStateUpdates(updates));\n    this.#stateUpdateQueue = run.then(\n      () => undefined,\n      () => undefined,\n    );\n    return run;\n  }\n\n  async updateState<TResult>(\n    updater: (\n      state: Readonly<TState>,\n    ) =>\n      | { updates?: Partial<TState>; events?: Parameters<EventEmitter['emit']>[0][]; result: TResult }\n      | Promise<{ updates?: Partial<TState>; events?: Parameters<EventEmitter['emit']>[0][]; result: TResult }>,\n  ): Promise<TResult> {\n    const run = this.#stateUpdateQueue.then(async () => {\n      const update = await updater(this.getState());\n      if (update.updates && Object.keys(update.updates).length > 0) {\n        await this.#applyStateUpdates(update.updates);\n      }\n      for (const event of update.events ?? []) {\n        this.#events.emit(event);\n      }\n      return update.result;\n    });\n\n    this.#stateUpdateQueue = run.then(\n      () => undefined,\n      () => undefined,\n    );\n    return run;\n  }\n\n  getModelId(): string {\n    return this.#modelId;\n  }\n\n  setModelId(modelId: string) {\n    const previousModelId = this.#modelId;\n    this.#modelId = modelId;\n    if (modelId !== previousModelId) {\n      void this.#persistSession({ modelId });\n      this.#events.emit({ type: 'model_changed', modelId, previousModelId });\n    }\n  }\n\n  getMode(): HarnessMode {\n    return this.#mode;\n  }\n\n  #getToolOverrides(): { tools?: ToolsInput; additionalTools?: ToolsInput } {\n    return { tools: this.#mode.tools, additionalTools: this.#mode.additionalTools };\n  }\n\n  async signal({ messages, ...options }: SessionSignalOptions): Promise<unknown> {\n    if (!this.#resolveAgent) {\n      throw new Error('Harness session cannot signal because no agent resolver is configured');\n    }\n\n    const agent = this.#agent;\n    const runId = options.runId ?? randomUUID();\n    this.#markRunning(runId);\n\n    try {\n      const requestContext = await this.#buildRequestContext();\n      const agentTools = await agent.listTools({ requestContext });\n      const tools = buildSessionToolsets({\n        agentTools,\n        modeOverrides: this.#getToolOverrides(),\n        builtInTools: buildHarnessBuiltInTools(this),\n      });\n      const model = this.#resolveModel ? await this.#resolveModel(this.#modelId) : undefined;\n      const result = await agent.generate(messages, {\n        ...options,\n        runId,\n        requestContext,\n        ...(model ? { model } : {}),\n        toolsets: { harness: tools },\n        activeTools: options.activeTools\n          ? [...new Set([...options.activeTools, ...Object.keys(tools)])]\n          : Object.keys(tools),\n      });\n      this.#markIdle();\n      return result;\n    } catch (error) {\n      this.#markIdle();\n      throw error;\n    }\n  }\n\n  setMode(mode: HarnessMode) {\n    const previousModeId = this.#mode.id;\n    this.#mode = mode;\n    if (mode.id !== previousModeId) {\n      void this.#persistSession({ modeId: mode.id });\n      this.#events.emit({ type: 'mode_changed', modeId: mode.id, previousModeId });\n    }\n  }\n\n  /**\n   * Returns the workspace skill catalog. Workspace discovery is async on first\n   * call and cached for the lifetime of the session (use `refreshSkills` to\n   * invalidate).\n   */\n  async listSkills(): Promise<HarnessSkill[]> {\n    return this.#loadWorkspaceSkillMetadata();\n  }\n\n  /**\n   * Look up a single skill by name. Returns `null` when no skill matches;\n   * use `useSkill` when a missing skill should be a hard error.\n   */\n  async getSkill(name: string): Promise<HarnessSkill | null> {\n    const workspace = await this.#getResolvedWorkspace();\n    if (!workspace?.skills) return null;\n\n    // Use the cached metadata list before materialising a full skill so\n    // concurrent discovery stays single-flight.\n    const workspaceSkills = await this.#loadWorkspaceSkillMetadata();\n    if (!workspaceSkills.some(skill => skill.name === name)) return null;\n\n    const skill = await workspace.skills.get(name);\n    return skill ? this.#toHarnessSkill(skill) : null;\n  }\n\n  /**\n   * Activate a skill by name and return the canonical skill instructions string.\n   *\n   * Throws `HarnessSkillNotFoundError` when the skill cannot be resolved.\n   */\n  async useSkill(name: string): Promise<string> {\n    const skill = await this.getSkill(name);\n    if (!skill) {\n      throw new HarnessSkillNotFoundError({\n        name,\n        searchedSources: this.#searchedSources(),\n      });\n    }\n\n    return skill.instructions;\n  }\n\n  /**\n   * Invalidate the workspace skill discovery cache. The next `listSkills` or\n   * `useSkill` call will re-query the workspace.\n   */\n  refreshSkills(): void {\n    this.#workspaceSkillsPromise = undefined;\n  }\n\n  #toHarnessSkill(skill: WorkspaceSkill | WorkspaceSkillMetadata): HarnessSkill {\n    const metadata = this.#plainMetadata(skill.metadata);\n    const category = typeof metadata?.category === 'string' ? metadata.category : undefined;\n    const filePath = skill.path;\n    if (!filePath) {\n      throw new Error(`Workspace skill \"${skill.name}\" is missing a file path`);\n    }\n    return {\n      name: skill.name,\n      description: skill.description,\n      instructions: 'instructions' in skill ? skill.instructions : '',\n      filePath,\n      ...(category ? { category } : {}),\n      ...(metadata ? { metadata } : {}),\n    };\n  }\n\n  #plainMetadata(metadata: Record<string, unknown> | undefined): HarnessSkill['metadata'] | undefined {\n    if (!metadata) return undefined;\n    const copy: Record<string, unknown> = {};\n    for (const [key, value] of Object.entries(metadata)) {\n      if (key === 'args') continue;\n      if (this.#isJsonSerializable(value)) copy[key] = value;\n    }\n    return Object.keys(copy).length > 0 ? (copy as HarnessSkill['metadata']) : undefined;\n  }\n\n  #isPlainObject(value: unknown): value is Record<string, unknown> {\n    return (\n      typeof value === 'object' &&\n      value !== null &&\n      !Array.isArray(value) &&\n      Object.getPrototypeOf(value) === Object.prototype\n    );\n  }\n\n  #isJsonSerializable(value: unknown): boolean {\n    if (value === null || typeof value === 'string' || typeof value === 'boolean') return true;\n    if (typeof value === 'number') return Number.isFinite(value);\n    if (Array.isArray(value)) return value.every(item => this.#isJsonSerializable(item));\n    if (this.#isPlainObject(value))\n      return Object.values(value).every(item => item !== undefined && this.#isJsonSerializable(item));\n    return false;\n  }\n\n  #searchedSources(): SkillSource[] {\n    return this.#workspace !== undefined ? ['workspace'] : [];\n  }\n\n  async #loadWorkspaceSkillMetadata(): Promise<HarnessSkill[]> {\n    if (!this.#workspaceSkillsPromise) {\n      this.#workspaceSkillsPromise = this.#discoverWorkspaceSkillMetadata().catch(err => {\n        // Reset on failure so a later call can retry instead of poisoning the\n        // cache. Re-throw to surface the original error to the current caller.\n        this.#workspaceSkillsPromise = undefined;\n        throw err;\n      });\n    }\n    return this.#workspaceSkillsPromise;\n  }\n\n  async #discoverWorkspaceSkillMetadata(): Promise<HarnessSkill[]> {\n    const workspace = await this.#getResolvedWorkspace();\n    const skillsApi = workspace?.skills;\n    if (!skillsApi) return [];\n    const skillMetadata = await skillsApi.list();\n    const skills = await Promise.all(\n      skillMetadata.map(async metadata => (await skillsApi.get(metadata.name)) ?? metadata),\n    );\n    return skills.map(skill => this.#toHarnessSkill(skill));\n  }\n\n  async #getResolvedWorkspace(requestContext?: RequestContext): Promise<Workspace | undefined> {\n    const workspace = this.#workspace;\n    if (!workspace) return undefined;\n    if (typeof workspace !== 'function') return workspace;\n    if (this.#workspaceResolved) return this.#resolvedWorkspace;\n\n    const resolved = await workspace({ requestContext: requestContext ?? new RequestContext() });\n    this.#resolvedWorkspace = resolved;\n    this.#workspaceResolved = true;\n    return resolved;\n  }\n\n  async #applyStateUpdates(updates: Partial<TState>): Promise<void> {\n    const changedKeys = Object.keys(updates);\n    const newState = { ...(this.#state as Record<string, unknown>), ...(updates as Record<string, unknown>) };\n\n    if (this.#stateSchema) {\n      const result = await this.#stateSchema['~standard'].validate(newState);\n      if (result.issues) {\n        const messages = result.issues.map((issue: { message?: string }) => issue.message).join('; ');\n        throw new Error(`Invalid state update: ${messages}`);\n      }\n      this.#state = result.value as TState;\n    } else {\n      this.#state = newState as TState;\n    }\n\n    await this.#persistSession({ state: this.#state as Record<string, unknown> });\n\n    this.#events.emit({\n      type: 'state_changed',\n      state: this.#state as Record<string, unknown>,\n      changedKeys,\n    });\n  }\n\n  #isBusySnapshot(): boolean {\n    const hasActiveRun =\n      this.#runStatus === 'starting' ||\n      this.#runStatus === 'running' ||\n      this.#runStatus === 'waiting' ||\n      this.#runStatus === 'resuming';\n    return hasActiveRun || this.#pending.some(item => item.status === 'pending');\n  }\n\n  #markRunning(runId: string, traceId: string | null = null): void {\n    this.#runStatus = 'running';\n    this.#currentRunId = runId;\n    this.#currentTraceId = traceId;\n  }\n\n  #markIdle(): void {\n    this.#runStatus = 'idle';\n    this.#currentRunId = null;\n    this.#currentTraceId = null;\n  }\n\n  async #persistSession(updates: SessionRecordUpdate): Promise<void> {\n    this.#lastActivityAt = updates.lastActivityAt ?? new Date();\n    await this.#storage.updateSession(this.#id, {\n      ...updates,\n      lastActivityAt: this.#lastActivityAt,\n    });\n  }\n\n  async #respondToPendingItem(\n    pendingItemId: string,\n    expectedKind: HarnessPendingItemRecord['kind'],\n    response: Record<string, unknown>,\n  ): Promise<HarnessPendingItemRecord> {\n    const item = this.#pending.find(item => item.id === pendingItemId);\n    if (!item) {\n      throw new Error(`Harness pending item \"${pendingItemId}\" was not found on session \"${this.#id}\"`);\n    }\n    if (item.kind !== expectedKind) {\n      throw new Error(`Harness pending item \"${pendingItemId}\" is kind \"${item.kind}\", not \"${expectedKind}\"`);\n    }\n    if (item.status !== 'pending') {\n      throw new Error(`Harness pending item \"${pendingItemId}\" is already ${item.status}`);\n    }\n    if (item.runtimeCompatibilityGeneration !== this.#runtimeCompatibilityGeneration) {\n      throw new Error('harness.runtime_dependency_drifted');\n    }\n\n    const resumeResult = await this.#resumePendingBoundary(item, response);\n    const recordedResponse = resumeResult === undefined ? response : { ...response, resumeResult };\n\n    await this.#storage.updatePendingItem(this.#id, pendingItemId, { status: 'responded', response: recordedResponse });\n    await this.#reloadRecordProjection();\n    const updated = this.#pending.find(item => item.id === pendingItemId);\n    if (!updated) {\n      throw new Error(`Harness pending item \"${pendingItemId}\" was not found on session \"${this.#id}\"`);\n    }\n    return { ...updated };\n  }\n\n  async #resumePendingBoundary(\n    item: HarnessPendingItemRecord,\n    response: Record<string, unknown>,\n  ): Promise<Record<string, unknown> | undefined> {\n    const payload = item.payload;\n    if (!this.#isPlainObject(payload)) return undefined;\n\n    if (item.kind === 'tool-approval') {\n      const approved = response.approved;\n      const runId = typeof payload.runId === 'string' ? payload.runId : item.runId;\n      const toolCallId = typeof payload.toolCallId === 'string' ? payload.toolCallId : undefined;\n      const agent =\n        typeof payload.agentId === 'string' && this.#resolveAgent\n          ? await this.#resolveAgent(payload.agentId)\n          : this.#agent;\n      if (typeof approved !== 'boolean' || !runId || !this.#resolveAgent) return undefined;\n\n      const result = approved\n        ? await agent.approveToolCallGenerate({ runId, toolCallId, requestContext: await this.#buildRequestContext() })\n        : await agent.declineToolCallGenerate({ runId, toolCallId, requestContext: await this.#buildRequestContext() });\n      return this.#isJsonSerializable(result) ? (result as Record<string, unknown>) : { resumed: true };\n    }\n\n    if (item.kind === 'plan-approval' && response.approved === true) {\n      const transitionModeId = typeof payload.transitionModeId === 'string' ? payload.transitionModeId : undefined;\n      if (transitionModeId && transitionModeId !== this.#mode.id && this.#resolveMode) {\n        const mode = await this.#resolveMode(transitionModeId);\n        this.setMode(mode);\n        return { transitionModeId, modeChanged: true };\n      }\n    }\n\n    return undefined;\n  }\n\n  async #reloadRecordProjection(): Promise<void> {\n    const record = await this.#storage.loadSession(this.#id);\n    if (!record) {\n      throw new Error(`Harness session \"${this.#id}\" was not found`);\n    }\n    this.#lastActivityAt = record.lastActivityAt;\n    this.#pending = (record.pending ?? []).map(item => ({ ...item }));\n  }\n\n  #getSchemaDefaults(): Partial<TState> {\n    if (!this.#stateSchema) return {};\n\n    const defaults: Record<string, unknown> = {};\n\n    try {\n      const jsonSchema = this.#stateSchema['~standard'].jsonSchema.output({ target: 'draft-07' }) as {\n        properties?: Record<string, { default?: unknown }>;\n      };\n      for (const [key, prop] of Object.entries(jsonSchema.properties ?? {})) {\n        if (prop.default !== undefined) {\n          defaults[key] = prop.default;\n        }\n      }\n    } catch {\n      // Schema doesn't support JSON Schema extraction.\n    }\n\n    return defaults as Partial<TState>;\n  }\n\n  async #buildRequestContext(): Promise<RequestContext> {\n    const overlay = buildHarnessRequestContext({ harnessContext: this.#createHarnessContext() });\n    await this.#getResolvedWorkspace(overlay);\n\n    return overlay;\n  }\n\n  #createHarnessContext(): HarnessRequestContext<TState> {\n    return {\n      harnessId: this.#ownerId,\n      sessionId: this.#id,\n      ownerId: this.#ownerId,\n      resourceId: this.#resourceId,\n      threadId: this.#threadId,\n      modeId: this.#mode.id,\n      modelId: this.#modelId,\n      parentSessionId: this.#parentSessionId,\n      subagentDepth: this.#subagentDepth,\n      source: this.#source,\n      getState: () => this.getState(),\n    };\n  }\n\n  async #resolveMemory(): Promise<MastraMemory> {\n    const mem = this.#memory;\n    if (!mem) {\n      throw new Error('Memory is not configured on this Harness');\n    }\n    if (typeof mem !== 'function') {\n      return mem;\n    }\n    const requestContext = await this.#buildRequestContext();\n    const resolved = await mem({ requestContext });\n    if (!resolved) {\n      throw new Error('Dynamic memory factory returned empty value');\n    }\n    return resolved;\n  }\n}\n","import { createHash, randomUUID } from 'node:crypto';\n\nimport type { Agent } from '../../agent';\nimport type { Mastra } from '../../mastra';\nimport type { MastraMemory } from '../../memory';\nimport type { MastraCompositeStore } from '../../storage';\nimport type { HarnessStorage, SessionRecord } from '../../storage/domains/harness';\nimport { augmentWithInit } from '../../storage/storageWithInit';\nimport type { DynamicArgument } from '../../types';\nimport { Workspace } from '../../workspace';\nimport { EventEmitter, sessionCreatedPayload } from './events';\nimport type { HarnessEventListener, HarnessEventUnsubscribe } from './events';\nimport type { HarnessConfig } from './harness.types';\nimport type { HarnessMode } from './mode';\nimport type { PermissionPolicy, ToolCategoryResolver } from './permissions.types';\nimport { Session } from './session';\nimport type { CloneSessionOptions } from './session.types';\nimport type { ModelResolver, SubagentRegistryConfig } from './subagents.types';\n\ntype SessionByIdOptions = {\n  sessionId: string;\n  resourceId?: string;\n};\n\ntype SessionByThreadOptions = {\n  sessionId?: undefined;\n  threadId: string;\n  resourceId: string;\n  modeId?: string;\n  modelId?: string;\n};\n\ntype SessionOptions = SessionByIdOptions | SessionByThreadOptions;\n\nfunction isHarnessStorage(storage: HarnessStorage | MastraCompositeStore): storage is HarnessStorage {\n  return typeof (storage as { loadSession?: unknown }).loadSession === 'function';\n}\n\nexport class Harness<MODES extends HarnessMode[], TState = {}> {\n  readonly #ownerId: string;\n  readonly #defaultMode: string;\n  readonly #modesById = new Map<string, MODES[number]>();\n  readonly #storage?: HarnessStorage;\n  readonly #compositeStorage?: MastraCompositeStore;\n  readonly #mastra?: Mastra;\n  readonly #memory: MastraMemory | DynamicArgument<MastraMemory>;\n  readonly #events: EventEmitter;\n  readonly #stateSchema?: HarnessConfig<MODES, TState>['stateSchema'];\n  readonly #initialState?: Partial<TState>;\n  readonly #workspace?: DynamicArgument<Workspace | undefined>;\n  readonly #agent: Agent;\n  readonly #subagents?: SubagentRegistryConfig;\n  readonly #resolveModel?: ModelResolver;\n  readonly #runtimeCompatibilityGeneration?: string | null;\n  readonly #defaultPermissionPolicy: PermissionPolicy;\n  readonly #toolCategoryResolver?: ToolCategoryResolver;\n\n  constructor(config: HarnessConfig<MODES, TState>) {\n    if (!config.modes.length) {\n      throw new Error('The harness needs modes to operate.');\n    }\n\n    this.#ownerId = config.ownerId ?? randomUUID();\n    this.#defaultMode = config.defaultModeId ?? config.modes[0]!.id;\n    this.#mastra = config.mastra;\n    if (config.storage) {\n      if (isHarnessStorage(config.storage)) {\n        this.#storage = config.storage;\n      } else {\n        this.#compositeStorage = augmentWithInit(config.storage);\n      }\n    } else {\n      this.#compositeStorage = config.mastra?.getStorage();\n    }\n    this.#memory = config.memory;\n    this.#events = new EventEmitter();\n    if (config.runtimeCompatibilityGeneration !== undefined && config.runtimeCompatibilityGeneration.length === 0) {\n      throw new Error('Harness runtimeCompatibilityGeneration must be a non-empty string when configured');\n    }\n    this.#runtimeCompatibilityGeneration = config.runtimeCompatibilityGeneration ?? null;\n    this.#stateSchema = config.stateSchema;\n    this.#initialState = config.initialState;\n\n    if (config.workspace instanceof Workspace || typeof config.workspace === 'function') {\n      this.#workspace = config.workspace;\n    } else if (config.workspace) {\n      this.#workspace = new Workspace(config.workspace);\n    }\n\n    this.#agent = this.#mastra ? this.#mastra.getAgentById(config.agent) : (config.agent as Agent);\n\n    if (config.subagents) {\n      const entries = Object.entries(config.subagents.types ?? {});\n      if (entries.length > 0 && !config.resolveModel) {\n        throw new Error('Harness \"subagents\" requires a \"resolveModel\" function to instantiate subagent models');\n      }\n      for (const [typeId, def] of entries) {\n        if (!def?.agentId) {\n          throw new Error(`Subagent \"${typeId}\" must declare an \"agentId\"`);\n        }\n        // When using an inline `agents` map, validate eagerly. When backed by\n        // a Mastra instance, the agent registry may grow over time; defer the\n        // check to resolution time.\n        // if (!config.mastra && !this.#agents[def.agentId]) {\n        //   throw new Error(`Subagent \"${typeId}\" references unknown agent \"${def.agentId}\"`);\n        // }\n      }\n      const maxDepth = config.sessions?.maxSubagentDepth ?? config.subagents.maxDepth ?? 1;\n      if (!Number.isInteger(maxDepth) || maxDepth < 0) {\n        throw new Error('Harness sessions.maxSubagentDepth must be a non-negative integer');\n      }\n      this.#subagents = { ...config.subagents, maxDepth };\n    }\n    this.#resolveModel = config.resolveModel;\n\n    this.#defaultPermissionPolicy = config.defaultPermissionPolicy ?? 'ask';\n    if (config.toolCategoryResolver) {\n      this.#toolCategoryResolver = config.toolCategoryResolver;\n    } else if (config.toolCategories) {\n      const categories = config.toolCategories;\n      this.#toolCategoryResolver = (toolName: string) => categories[toolName] ?? null;\n    }\n\n    const modes = config.modes ?? [];\n    for (const mode of modes) {\n      if (this.#modesById.has(mode.id)) {\n        throw new Error(`Duplicate mode id \"${mode.id}\" found when creating the Harness`);\n      }\n\n      if (mode.tools && mode.additionalTools) {\n        throw new Error(`Mode \"${mode.id} cannot set both \"tools\" and \"additionalTools\" - choose replace OR augment`);\n      }\n      this.#modesById.set(mode.id, mode);\n    }\n  }\n\n  get ownerId(): string {\n    return this.#ownerId;\n  }\n\n  subscribe(listener: HarnessEventListener): HarnessEventUnsubscribe {\n    return this.#events.subscribe(listener);\n  }\n\n  emit(event: Parameters<EventEmitter['emit']>[0]): ReturnType<EventEmitter['emit']> {\n    return this.#events.emit(event);\n  }\n\n  async init(): Promise<void> {\n    await this.#requireStorage();\n  }\n\n  async shutdown(): Promise<void> {}\n\n  listModes(): HarnessMode[] {\n    return [...this.#modesById.values()];\n  }\n\n  /**\n   * Look up a single mode by id. Returns `undefined` if no mode with that id\n   * is registered. For the throwing variant used during request resolution,\n   * see the internal `_getMode` helper.\n   */\n  getMode(modeId: string): HarnessMode | undefined {\n    return this.#modesById.get(modeId);\n  }\n\n  async listSessions(): Promise<SessionRecord[]> {\n    const storage = await this.#requireStorage();\n    return storage.listSessions();\n  }\n\n  async session(opts: SessionOptions): Promise<Session<TState>> {\n    const storage = await this.#requireStorage();\n\n    if ('threadId' in opts) {\n      return this.#sessionByThread(storage, opts);\n    }\n\n    const record = await this.#loadSessionRecord(storage, opts.sessionId, opts.resourceId);\n    return this.#sessionFromRecord(record, storage);\n  }\n\n  async cloneSession(session: Session<TState>, opts: CloneSessionOptions = {}): Promise<Session<TState>> {\n    const storage = await this.#requireStorage();\n    const source = await this.#loadSessionRecord(storage, session.id, session.resourceId);\n    const modeId = opts.modeId ?? source.modeId;\n    const mode = this.#modesById.get(modeId);\n    if (!mode) {\n      throw new Error(`Harness session \"${source.id}\" cannot clone into unknown mode \"${modeId}\"`);\n    }\n\n    const clone = await session.clone({\n      ...opts,\n      resourceId: opts.resourceId ?? source.resourceId,\n      mode,\n      modelId: opts.modelId ?? source.modelId,\n    });\n    const parentSessionId = opts.parentSessionId ?? source.id;\n    const cloneModeId = opts.modeId ?? source.modeId;\n    const cloneModelId = opts.modelId ?? source.modelId;\n    const record: SessionRecord = {\n      id: clone.id,\n      ownerId: this.#ownerId,\n      threadId: clone.threadId,\n      resourceId: clone.resourceId,\n      parentSessionId,\n      origin: opts.origin ?? source.origin,\n      source: {\n        type: opts.origin ?? source.origin,\n        parentSessionId,\n      },\n      subagentDepth: (source.subagentDepth ?? 0) + 1,\n      runtimeCompatibilityGeneration: this.#runtimeCompatibilityGeneration,\n      modeId: cloneModeId,\n      modelId: cloneModelId,\n      title: opts.title ?? source.title,\n      metadata: opts.metadata ?? source.metadata,\n      state: clone.getState() as Record<string, unknown>,\n      pending: [],\n      createdAt: clone.createdAt,\n      lastActivityAt: clone.lastActivityAt,\n    };\n\n    await storage.saveSession(record);\n    this.#events.emit({ type: 'session_created', ...sessionCreatedPayload(record) });\n    return this.#sessionFromRecord(record, storage);\n  }\n\n  async #sessionByThread(storage: HarnessStorage, opts: SessionByThreadOptions): Promise<Session<TState>> {\n    const id = this.#sessionIdFor(opts.resourceId, opts.threadId);\n    const existing = await storage.loadSession(id);\n    if (existing) {\n      return this.#sessionFromRecord(existing, storage);\n    }\n\n    const modeId = opts.modeId ?? this.#defaultMode;\n    const mode = this.#modesById.get(modeId);\n    if (!mode) {\n      throw new Error(`Harness session for thread \"${opts.threadId}\" cannot use unknown mode \"${modeId}\"`);\n    }\n\n    const record: SessionRecord = {\n      id,\n      ownerId: this.#ownerId,\n      threadId: opts.threadId,\n      resourceId: opts.resourceId,\n      origin: 'top-level',\n      modeId,\n      modelId: opts.modelId ?? mode.defaultModelId,\n      source: { type: 'top-level' },\n      subagentDepth: 0,\n      runtimeCompatibilityGeneration: this.#runtimeCompatibilityGeneration,\n      ...(this.#initialState ? { state: this.#initialState as Record<string, unknown> } : {}),\n      pending: [],\n      createdAt: new Date(),\n      lastActivityAt: new Date(),\n    };\n\n    await storage.saveSession(record);\n    this.#events.emit({ type: 'session_created', ...sessionCreatedPayload(record) });\n    return this.#sessionFromRecord(record, storage);\n  }\n\n  async #loadSessionRecord(storage: HarnessStorage, sessionId: string, resourceId?: string): Promise<SessionRecord> {\n    const record = await storage.loadSession(sessionId);\n    if (!record) {\n      throw new Error(`Harness session \"${sessionId}\" was not found`);\n    }\n    if (resourceId && record.resourceId !== resourceId) {\n      throw new Error(`Harness session \"${sessionId}\" does not belong to resource \"${resourceId}\"`);\n    }\n    return record;\n  }\n\n  async #requireStorage(): Promise<HarnessStorage> {\n    if (this.#storage) {\n      return this.#storage;\n    }\n\n    if (!this.#compositeStorage) {\n      throw new Error('Harness session storage is not configured');\n    }\n\n    const storage = await this.#compositeStorage.getStore('harness');\n    if (!storage) {\n      throw new Error('Harness session storage is not configured');\n    }\n    return storage;\n  }\n\n  #sessionFromRecord(record: SessionRecord, storage: HarnessStorage): Session<TState> {\n    const mode = record.modeId ? this.#modesById.get(record.modeId) : this.#modesById.values().next().value;\n    if (!mode) {\n      throw new Error(`Harness session \"${record.id}\" references unknown mode \"${record.modeId}\"`);\n    }\n\n    return new Session<TState>({\n      id: record.id,\n      ownerId: record.ownerId,\n      threadId: record.threadId,\n      resourceId: record.resourceId,\n      mode: mode,\n      model: record.modelId,\n      createdAt: record.createdAt,\n      lastActivityAt: record.lastActivityAt,\n      agent: this.#agent,\n      memory: this.#memory,\n      storage,\n      record,\n      runtimeCompatibilityGeneration: this.#runtimeCompatibilityGeneration,\n      events: this.#events.scoped({ sessionId: record.id }),\n      stateSchema: this.#stateSchema,\n      initialState: this.#initialState,\n      workspace: this.#workspace,\n      subagents: this.#subagents,\n      resolveAgent: agentId => this.#resolveAgent(agentId),\n      resolveMode: modeId => this.#resolveMode(modeId),\n      resolveModel: this.#resolveModel,\n      defaultPermissionPolicy: this.#defaultPermissionPolicy,\n      toolCategoryResolver: this.#toolCategoryResolver,\n    });\n  }\n\n  #resolveAgent(agentId: string): Agent {\n    if (this.#mastra) return this.#mastra.getAgentById(agentId) as Agent;\n    throw new Error(`Harness mode references unknown agent \"${agentId}\"`);\n  }\n\n  #resolveMode(modeId: string): HarnessMode {\n    const mode = this.#modesById.get(modeId);\n    if (!mode) {\n      throw new Error(`Harness mode \"${modeId}\" was not found`);\n    }\n    return mode;\n  }\n\n  #sessionIdFor(resourceId: string, threadId: string): string {\n    const hash = createHash('sha256').update(`${resourceId}\\0${threadId}`).digest('hex').slice(0, 32);\n    return `sess-${hash}`;\n  }\n}\n"]}