arrowbase 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/errors.ts","../src/schema/types.ts","../src/schema/schema.ts","../src/sab/atomics.ts","../src/sab/segment.ts","../src/query/ir.ts","../src/query/ref-proxy.ts","../src/query/expressions.ts","../src/geo/point-column.ts","../src/geo/bbox.ts","../src/geo/distance.ts","../src/geo/polygon-column.ts","../src/geo/point-in-polygon.ts","../src/indexes/reverse-index.ts","../src/indexes/index-optimization.ts","../src/query/kernel.ts","../src/query/compiler.ts","../src/indexes/comparison.ts","../src/indexes/base-index.ts","../src/indexes/basic-index.ts","../src/indexes/index-registry.ts","../src/indexes/auto-index.ts","../src/collection/rowIndex.ts","../src/collection/undoRing.ts","../src/collection/events.ts","../src/collection/typedEmitter.ts","../src/transactions.ts","../src/collection/varlen.ts","../src/collection/listChild.ts","../src/collection/metadata.ts","../src/geo/linestring-column.ts","../src/geo/rtree.ts","../src/collection/collection.ts","../src/collection/createCollection.ts","../src/optimistic-action.ts","../src/paced-mutations.ts","../src/strategies.ts","../src/local-only.ts","../src/local-storage.ts","../src/query/trackRow.ts","../src/query/filter.ts","../src/query/fnCompile.ts","../src/query/query.ts","../src/query/builder.ts","../src/query/predicate-utils.ts","../src/query/subset-dedupe.ts","../src/query/query-once.ts","../src/query/ivm/delta.ts","../src/query/ivm/expressions.ts","../src/query/ivm/columnar-row.ts","../src/query/ivm/columnar-backend.ts","../src/query/ivm/join-backend.ts","../src/query/ivm/aggregate-backend.ts","../src/query/live-query-collection.ts","../src/indexes/btree-index.ts","../src/live-query-adapter.ts","../src/safe-random-uuid.ts","../src/geo/expressions.ts","../src/query/expression-helpers.ts","../src/query/join.ts","../src/persist/snapshot-format.ts","../src/persist/snapshot.ts","../src/sync/change-log.ts","../src/sync/memory.ts","../src/devtools/describe.ts","../src/pushdown.ts","../src/query/effect.ts","../src/utils.ts","../src/SortedMap.ts","../src/proxy.ts","../src/virtual-props.ts"],"names":["joinType","f","length","query","min","max","sum","lit","arr","out","materialize","join","filter","column","clamp","map","isFunc","run","matches","total","whereExpression","val","isPromiseLike","filterCollectionMutations","eq","gt","gte","lt","lte","and","or","not","isNull","inArray","like","Query","isPlainObject","isWrappedWhere","cloneRecord","stableKey","evaluateExpression","readPath","evaluateFunc","isUnknown","valuesEqual","compareMaybe","evaluateLike","isCaseWhenConditionTrue","evalGeoBboxArg","pointBboxOrNull","evalGeoPointArg","evalGeoRadiusMeters","pointOrNull","polygonOrNull","isBasicExpression","compareForOrder","toBooleanPredicate","containsAggregate","comparePrimitive","differentialDistinct","output","changes","differentialJoin","rowToObject","D2","previousValue","MultiSet","add","dependencyColumns","evaluateGroupSelect","evaluateGroupExpression","isAggregate","computeAggregate","numberValue","count","collectCollections","isCollection","contains","comparisonOps","deepEquals","deepEqualsInternal","groupKey"],"mappings":";;;;;;;;;;AACO,IAAM,cAAA,GAAN,cAA6B,KAAA,CAAM;AAAA,EACxC,WAAA,CAAY,SAAiC,IAAA,EAAc;AACzD,IAAA,KAAA,CAAM,OAAO,CAAA;AAD8B,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAE3C,IAAA,IAAA,CAAK,IAAA,GAAO,gBAAA;AAAA,EACd;AAAA,EAH6C,IAAA;AAI/C;AAEO,IAAM,eAAA,GAAN,cAA8B,cAAA,CAAe;AAAA,EAClD,WAAA,CAAY,OAAA,EAAiB,IAAA,GAAO,eAAA,EAAiB;AACnD,IAAA,KAAA,CAAM,SAAS,IAAI,CAAA;AACnB,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AAAA,EACd;AACF;AAEO,IAAM,iBAAA,GAAN,cAAgC,eAAA,CAAgB;AAAA,EACrD,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,mBAAA;AAAA,EACd;AACF;AAOO,IAAM,qBAAA,GAAN,cAAoC,eAAA,CAAgB;AAAA,EAChD,IAAA;AAAA,EACA,MAAA;AAAA,EAET,WAAA,CAAY,IAAA,EAA2B,MAAA,EAA4B,OAAA,EAAkB;AACnF,IAAA,MAAM,cAAA,GAAiB,CAAA,EAAG,IAAA,KAAS,QAAA,GAAW,QAAA,GAAW,QAAQ,CAAA,oBAAA,EAAuB,MAAA,CACrF,GAAA,CAAI,CAAC,KAAA,KAAU;AAAA,EAAA,EAAO,KAAA,CAAM,OAAO,CAAA,SAAA,EAAY,KAAA,CAAM,IAAI,CAAA,CAAE,CAAA,CAC3D,IAAA,CAAK,EAAE,CAAC,CAAA,CAAA;AACX,IAAA,KAAA,CAAM,WAAW,cAAc,CAAA;AAC/B,IAAA,IAAA,CAAK,IAAA,GAAO,uBAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AACF;AAEO,IAAM,wBAAA,GAAN,cAAuC,eAAA,CAAgB;AAAA,EAC5D,WAAA,GAAc;AACZ,IAAA,KAAA,CAAM,CAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA,4EAAA,CAoBmE,CAAA;AACzE,IAAA,IAAA,CAAK,IAAA,GAAO,0BAAA;AAAA,EACd;AACF;AAEO,IAAM,WAAA,GAAN,cAA0B,cAAA,CAAe;AAAA,EAC9C,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,SAAS,UAAU,CAAA;AACzB,IAAA,IAAA,CAAK,IAAA,GAAO,aAAA;AAAA,EACd;AACF;AAEO,IAAM,cAAA,GAAN,cAA6B,cAAA,CAAe;AAAA,EACjD,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,SAAS,SAAS,CAAA;AACxB,IAAA,IAAA,CAAK,IAAA,GAAO,gBAAA;AAAA,EACd;AACF;AAEO,IAAM,eAAA,GAAN,cAA8B,cAAA,CAAe;AAAA,EAClD,WAAA,CAAY,UAAU,sBAAA,EAAwB;AAC5C,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AAAA,EACd;AACF;AAEO,IAAM,aAAA,GAAN,cAA4B,cAAA,CAAe;AAAA,EAChD,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,SAAS,aAAa,CAAA;AAC5B,IAAA,IAAA,CAAK,IAAA,GAAO,eAAA;AAAA,EACd;AACF;AAEO,IAAM,SAAA,GAAN,cAAwB,cAAA,CAAe;AAAA,EAC5C,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,SAAS,QAAQ,CAAA;AACvB,IAAA,IAAA,CAAK,IAAA,GAAO,WAAA;AAAA,EACd;AACF;AAEO,IAAM,eAAA,GAAN,cAA8B,cAAA,CAAe;AAAA,EAClD,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,SAAS,cAAc,CAAA;AAC7B,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AAAA,EACd;AACF;AAEO,IAAM,gBAAA,GAAN,cAA+B,cAAA,CAAe;AAAA,EACnD,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,SAAS,WAAW,CAAA;AAC1B,IAAA,IAAA,CAAK,IAAA,GAAO,kBAAA;AAAA,EACd;AACF;AAEO,IAAM,4BAAA,GAAN,cAA2C,eAAA,CAAgB;AAAA,EAChE,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,SAAS,qBAAqB,CAAA;AACpC,IAAA,IAAA,CAAK,IAAA,GAAO,8BAAA;AAAA,EACd;AACF;AACO,IAAM,6BAAA,GAAN,cAA4C,4BAAA,CAA6B;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,8BAA8B,CAAA;AAAA,EAAG;AAAE;AACpI,IAAM,iCAAA,GAAN,cAAgD,4BAAA,CAA6B;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,mCAAmC,CAAA;AAAA,EAAG;AAAE;AAC7I,IAAM,kBAAA,GAAN,cAAiC,4BAAA,CAA6B;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,qDAAqD,CAAA;AAAA,EAAG;AAAE;AAChJ,IAAM,4BAAA,GAAN,cAA2C,4BAAA,CAA6B;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,uCAAuC,CAAA;AAAA,EAAG;AAAE;AAE5I,IAAM,oBAAA,GAAN,cAAmC,eAAA,CAAgB;AAAA,EACxD,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,SAAS,oBAAoB,CAAA;AACnC,IAAA,IAAA,CAAK,IAAA,GAAO,sBAAA;AAAA,EACd;AACF;AACO,IAAM,2BAAA,GAAN,cAA0C,oBAAA,CAAqB;AAAA,EACpE,WAAA,CAAY,WAAmB,YAAA,EAAsB;AACnD,IAAA,KAAA,CAAM,CAAA,eAAA,EAAkB,SAAS,CAAA,gBAAA,EAAmB,YAAY,CAAA,sFAAA,CAAwF,CAAA;AAAA,EAC1J;AACF;AACO,IAAM,sCAAA,GAAN,cAAqD,oBAAA,CAAqB;AAAA,EAC/E,WAAA,CAAY,IAAA,EAAc,EAAA,EAAY,YAAA,EAAsB;AAC1D,IAAA,KAAA,CAAM,8CAA8C,IAAI,CAAA,MAAA,EAAS,EAAE,CAAA,kBAAA,EAAqB,YAAY,CAAA,CAAA,CAAG,CAAA;AAAA,EACzG;AACF;AACO,IAAM,6BAAA,GAAN,cAA4C,oBAAA,CAAqB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,8BAA8B,CAAA;AAAA,EAAG;AAAE;AAC5H,IAAM,8BAAA,GAAN,cAA6C,oBAAA,CAAqB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,iEAAiE,CAAA;AAAA,EAAG;AAAE;AAEhK,IAAM,wBAAA,GAAN,cAAuC,eAAA,CAAgB;AAAA,EAC5D,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,SAAS,wBAAwB,CAAA;AACvC,IAAA,IAAA,CAAK,IAAA,GAAO,0BAAA;AAAA,EACd;AACF;AACO,IAAM,iBAAA,GAAN,cAAgC,wBAAA,CAAyB;AAAA,EAAE,YAAY,IAAA,EAAe;AAAE,IAAA,KAAA,CAAM,CAAA,6CAAA,EAAgD,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,EAAG;AAAE;AACzK,IAAM,eAAA,GAAN,cAA8B,wBAAA,CAAyB;AAAA,EAC5D,WAAA,CAAY,KAAc,IAAA,EAAe;AACvC,IAAA,MAAM,OAAA,GAAU,GAAA,KAAQ,IAAA,GAAO,MAAA,GAAS,OAAO,GAAA;AAC/C,IAAA,KAAA,CAAM,CAAA,wEAAA,EAA2E,OAAO,CAAA,EAAA,EAAK,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC,CAAA,QAAA,EAAW,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,EACnJ;AACF;AACO,IAAM,iBAAA,GAAN,cAAgC,wBAAA,CAAyB;AAAA,EAAE,YAAY,GAAA,EAAsB;AAAE,IAAA,KAAA,CAAM,CAAA,gCAAA,EAAmC,GAAG,CAAA,6CAAA,CAA+C,CAAA;AAAA,EAAG;AAAE;AAC/L,IAAM,qBAAA,GAAN,cAAoC,wBAAA,CAAyB;AAAA,EAClE,WAAA,CAAY,GAAA,EAAsB,YAAA,EAAsB,OAAA,EAAoF;AAC1I,IAAA,MAAM,WAAA,GAAc,CAAA,iCAAA,EAAoC,GAAG,CAAA,yDAAA,EAA4D,YAAY,CAAA,CAAA,CAAA;AACnI,IAAA,IAAI,OAAA,EAAS,eAAA,IAAmB,OAAA,CAAQ,WAAA,EAAa;AACnD,MAAA,KAAA,CAAM,CAAA,EAAG,WAAW,CAAA,qiBAAA,CAAuiB,CAAA;AAAA,IAC7jB,CAAA,MAAA,IAAW,OAAA,EAAS,eAAA,IAAmB,OAAA,CAAQ,QAAA,EAAU;AACvD,MAAA,KAAA,CAAM,CAAA,EAAG,WAAW,CAAA,6XAAA,CAA+X,CAAA;AAAA,IACrZ,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,WAAW,CAAA;AAAA,IACnB;AAAA,EACF;AACF;AACO,IAAM,0BAAA,GAAN,cAAyC,wBAAA,CAAyB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,yCAAyC,CAAA;AAAA,EAAG;AAAE;AACxI,IAAM,yBAAA,GAAN,cAAwC,wBAAA,CAAyB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,+BAA+B,CAAA;AAAA,EAAG;AAAE;AAC7H,IAAM,sBAAA,GAAN,cAAqC,wBAAA,CAAyB;AAAA,EAAE,YAAY,GAAA,EAAsB;AAAE,IAAA,KAAA,CAAM,CAAA,SAAA,EAAY,GAAG,CAAA,iFAAA,CAAmF,CAAA;AAAA,EAAG;AAAE;AACjN,IAAM,wBAAA,GAAN,cAAuC,wBAAA,CAAyB;AAAA,EAAE,WAAA,CAAY,aAA8B,MAAA,EAAyB;AAAE,IAAA,KAAA,CAAM,CAAA,2DAAA,EAA8D,WAAW,CAAA,uBAAA,EAA0B,MAAM,CAAA,gFAAA,CAAkF,CAAA;AAAA,EAAG;AAAE;AAC7U,IAAM,yBAAA,GAAN,cAAwC,wBAAA,CAAyB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,+BAA+B,CAAA;AAAA,EAAG;AAAE;AAC7H,IAAM,sBAAA,GAAN,cAAqC,wBAAA,CAAyB;AAAA,EAAE,YAAY,GAAA,EAAsB;AAAE,IAAA,KAAA,CAAM,CAAA,uCAAA,EAA0C,GAAG,CAAA,sDAAA,CAAwD,CAAA;AAAA,EAAG;AAAE;AAEpN,IAAM,mBAAA,GAAN,cAAkC,eAAA,CAAgB;AAAA,EAAE,YAAY,OAAA,EAAiB;AAAE,IAAA,KAAA,CAAM,SAAS,mBAAmB,CAAA;AAAG,IAAA,IAAA,CAAK,IAAA,GAAO,qBAAA;AAAA,EAAuB;AAAE;AAC7J,IAAM,yBAAA,GAAN,cAAwC,mBAAA,CAAoB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,iHAAiH,CAAA;AAAA,EAAG;AAAE;AAC1M,IAAM,yBAAA,GAAN,cAAwC,mBAAA,CAAoB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,iHAAiH,CAAA;AAAA,EAAG;AAAE;AAC1M,IAAM,yBAAA,GAAN,cAAwC,mBAAA,CAAoB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,iHAAiH,CAAA;AAAA,EAAG;AAAE;AAE1M,IAAM,gBAAA,GAAN,cAA+B,eAAA,CAAgB;AAAA,EAAE,YAAY,OAAA,EAAiB;AAAE,IAAA,KAAA,CAAM,SAAS,eAAe,CAAA;AAAG,IAAA,IAAA,CAAK,IAAA,GAAO,kBAAA;AAAA,EAAoB;AAAE;AACnJ,IAAM,4BAAA,GAAN,cAA2C,gBAAA,CAAiB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,oDAAoD,CAAA;AAAA,EAAG;AAAE;AAC7I,IAAM,8BAAA,GAAN,cAA6C,gBAAA,CAAiB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,kHAAkH,CAAA;AAAA,EAAG;AAAE;AAC7M,IAAM,gCAAA,GAAN,cAA+C,gBAAA,CAAiB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,0EAA0E,CAAA;AAAA,EAAG;AAAE;AACvK,IAAM,wCAAA,GAAN,cAAuD,gBAAA,CAAiB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,4EAA4E,CAAA;AAAA,EAAG;AAAE;AACjL,IAAM,gCAAA,GAAN,cAA+C,gBAAA,CAAiB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,0EAA0E,CAAA;AAAA,EAAG;AAAE;AACvK,IAAM,kCAAA,GAAN,cAAiD,gBAAA,CAAiB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,yCAAyC,CAAA;AAAA,EAAG;AAAE;AACxI,IAAM,yCAAA,GAAN,cAAwD,gBAAA,CAAiB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,iFAAiF,CAAA;AAAA,EAAG;AAAE;AACvL,IAAM,mCAAA,GAAN,cAAkD,gBAAA,CAAiB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,uCAAuC,CAAA;AAAA,EAAG;AAAE;AACvI,IAAM,oCAAA,GAAN,cAAmD,gBAAA,CAAiB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,+EAA+E,CAAA;AAAA,EAAG;AAAE;AAEhL,IAAM,iBAAA,GAAN,cAAgC,eAAA,CAAgB;AAAA,EAAE,YAAY,OAAA,EAAiB;AAAE,IAAA,KAAA,CAAM,SAAS,iBAAiB,CAAA;AAAG,IAAA,IAAA,CAAK,IAAA,GAAO,mBAAA;AAAA,EAAqB;AAAE;AACvJ,IAAM,yBAAA,GAAN,cAAwC,iBAAA,CAAkB;AAAA,EAAE,YAAY,OAAA,EAAiB;AAAE,IAAA,KAAA,CAAM,CAAA,kCAAA,EAAqC,OAAO,CAAA,CAAE,CAAA;AAAA,EAAG;AAAE;AACpJ,IAAM,+BAAA,GAAN,cAA8C,iBAAA,CAAkB;AAAA,EAAE,YAAY,OAAA,EAAiB;AAAE,IAAA,KAAA,CAAM,CAAA,wBAAA,EAA2B,OAAO,CAAA,+BAAA,CAAiC,CAAA;AAAA,EAAG;AAAE;AAC/K,IAAM,kBAAA,GAAN,cAAiC,iBAAA,CAAkB;AAAA,EAAE,YAAY,KAAA,EAAe;AAAE,IAAA,KAAA,CAAM,CAAA,6DAAA,EAAgE,KAAK,CAAA,sMAAA,CAAwM,CAAA;AAAA,EAAG;AAAE;AAC1W,IAAM,sBAAA,GAAN,cAAqC,iBAAA,CAAkB;AAAA,EAAE,WAAA,CAAY,SAAiB,IAAA,EAAc;AAAE,IAAA,KAAA,CAAM,CAAA,mBAAA,EAAsB,OAAO,CAAA,mIAAA,EAAsI,IAAI,CAAA,CAAE,CAAA;AAAA,EAAG;AAAE;AAC1R,IAAM,gCAAA,GAAN,cAA+C,iBAAA,CAAkB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,+CAA+C,CAAA;AAAA,EAAG;AAAE;AAC7I,IAAM,4BAAA,GAAN,cAA2C,iBAAA,CAAkB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,+BAA+B,CAAA;AAAA,EAAG;AAAE;AACzH,IAAM,2BAAA,GAAN,cAA0C,iBAAA,CAAkB;AAAA,EACjE,YAAY,SAAA,EAAmB;AAC7B,IAAA,KAAA,CAAM,2EAA2E,SAAS,CAAA;;AAAA;AAAA;;AAAA,oGAAA,CAAqV,CAAA;AAAA,EACjb;AACF;AAEO,IAAM,qBAAA,GAAN,cAAoC,eAAA,CAAgB;AAAA,EAAE,YAAY,OAAA,EAAiB;AAAE,IAAA,KAAA,CAAM,SAAS,qBAAqB,CAAA;AAAG,IAAA,IAAA,CAAK,IAAA,GAAO,uBAAA;AAAA,EAAyB;AAAE;AACnK,IAAM,oBAAA,GAAN,cAAmC,qBAAA,CAAsB;AAAA,EAC9D,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA;AAAA,MACE,8BAA8B,OAAO,CAAA,mGAAA;AAAA,KAEvC;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,sBAAA;AAAA,EACd;AACF;AACO,IAAM,2BAAA,GAAN,cAA0C,qBAAA,CAAsB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,oCAAoC,CAAA;AAAA,EAAG;AAAE;AACjI,IAAM,wBAAA,GAAN,cAAuC,qBAAA,CAAsB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,8SAA8S,CAAA;AAAA,EAAG;AAAE;AACxY,IAAM,gCAAA,GAAN,cAA+C,qBAAA,CAAsB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,iMAAiM,CAAA;AAAA,EAAG;AAAE;AACnS,IAAM,0BAAA,GAAN,cAAyC,qBAAA,CAAsB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,wCAAwC,CAAA;AAAA,EAAG;AAAE;AACpI,IAAM,8BAAA,GAAN,cAA6C,qBAAA,CAAsB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,6EAA6E,CAAA;AAAA,EAAG;AAAE;AAC7K,IAAM,4BAAA,GAAN,cAA2C,qBAAA,CAAsB;AAAA,EAAE,WAAA,CAAY,KAAA,EAAe,YAAA,EAAuB,aAAA,EAA+B;AAAE,IAAA,MAAM,OAAA,GAAU,eAAe,CAAA,OAAA,EAAU,KAAK,kBAAkB,YAAY,CAAA,EAAA,CAAA,GAAO,eAAe,KAAK,CAAA,CAAA,CAAA;AAAK,IAAA,MAAM,gBAAA,GAAmB,eAAe,MAAA,GAAS,CAAA,kBAAA,EAAqB,cAAc,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,GAAK,EAAA;AAAI,IAAA,KAAA,CAAM,CAAA,UAAA,EAAa,OAAO,CAAA,wBAAA,EAA2B,gBAAgB,CAAA,CAAE,CAAA;AAAA,EAAG;AAAE;AACrb,IAAM,6BAAA,GAAN,cAA4C,qBAAA,CAAsB;AAAA,EAAE,WAAA,CAAY,OAAe,aAAA,EAA8B;AAAE,IAAA,KAAA,CAAM,CAAA,qBAAA,EAAwB,KAAK,CAAA,kIAAA,EAAqI,aAAA,CAAc,KAAK,IAAI,CAAC,CAAA,iBAAA,EAAoB,KAAK,CAAA,4DAAA,CAA8D,CAAA;AAAA,EAAG;AAAE;AAC3Z,IAAM,wBAAA,GAAN,cAAuC,qBAAA,CAAsB;AAAA,EAAE,YAAY,IAAA,EAAc;AAAE,IAAA,KAAA,CAAM,CAAA,uBAAA,EAA0B,IAAI,CAAA,CAAE,CAAA;AAAA,EAAG;AAAE;AACtI,IAAM,0BAAA,GAAN,cAAyC,qBAAA,CAAsB;AAAA,EAAE,YAAY,IAAA,EAAc;AAAE,IAAA,KAAA,CAAM,CAAA,yBAAA,EAA4B,IAAI,CAAA,CAAE,CAAA;AAAA,EAAG;AAAE;AAC1I,IAAM,uBAAA,GAAN,cAAsC,qBAAA,CAAsB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,gCAAgC,CAAA;AAAA,EAAG;AAAE;AACzH,IAAM,oBAAA,GAAN,cAAmC,qBAAA,CAAsB;AAAA,EAAE,YAAY,YAAA,EAAsB;AAAE,IAAA,KAAA,CAAM,CAAA,kBAAA,EAAqB,YAAY,CAAA,CAAE,CAAA;AAAA,EAAG;AAAE;AAC7I,IAAM,2BAAA,GAAN,cAA0C,qBAAA,CAAsB;AAAA,EAAE,YAAY,YAAA,EAAsB;AAAE,IAAA,KAAA,CAAM,CAAA,YAAA,EAAe,YAAY,CAAA,sCAAA,CAAwC,CAAA;AAAA,EAAG;AAAE;AAEpL,IAAM,SAAA,GAAN,cAAwB,eAAA,CAAgB;AAAA,EAAE,YAAY,OAAA,EAAiB;AAAE,IAAA,KAAA,CAAM,SAAS,QAAQ,CAAA;AAAG,IAAA,IAAA,CAAK,IAAA,GAAO,WAAA;AAAA,EAAa;AAAE;AAC9H,IAAM,wBAAA,GAAN,cAAuC,SAAA,CAAU;AAAA,EAAE,YAAYA,SAAAA,EAAkB;AAAE,IAAA,KAAA,CAAM,CAAA,uBAAA,EAA0BA,SAAQ,CAAA,CAAE,CAAA;AAAA,EAAG;AAAE;AAClI,IAAM,mCAAA,GAAN,cAAkD,SAAA,CAAU;AAAA,EAAE,YAAY,WAAA,EAAqB;AAAE,IAAA,KAAA,CAAM,CAAA,mEAAA,EAAsE,WAAW,CAAA,CAAA,CAAG,CAAA;AAAA,EAAG;AAAE;AAChM,IAAM,uCAAA,GAAN,cAAsD,SAAA,CAAU;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,mEAAmE,CAAA;AAAA,EAAG;AAAE;AAChK,IAAM,mCAAA,GAAN,cAAkD,SAAA,CAAU;AAAA,EAAE,YAAY,WAAA,EAAqB;AAAE,IAAA,KAAA,CAAM,CAAA,yEAAA,EAA4E,WAAW,CAAA,CAAA,CAAG,CAAA;AAAA,EAAG;AAAE;AACtM,IAAM,oCAAA,GAAN,cAAmD,SAAA,CAAU;AAAA,EAAE,YAAY,WAAA,EAAqB;AAAE,IAAA,KAAA,CAAM,CAAA,8EAAA,EAAiF,WAAW,CAAA,CAAA,CAAG,CAAA;AAAA,EAAG;AAAE;AAC5M,IAAM,oBAAA,GAAN,cAAmC,SAAA,CAAU;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,wBAAwB,CAAA;AAAA,EAAG;AAAE;AAClG,IAAM,8BAAA,GAAN,cAA6C,SAAA,CAAU;AAAA,EAAE,YAAY,IAAA,EAAc;AAAE,IAAA,KAAA,CAAM,CAAA,8BAAA,EAAiC,IAAI,CAAA,CAAE,CAAA;AAAA,EAAG;AAAE;AAEvI,IAAM,YAAA,GAAN,cAA2B,eAAA,CAAgB;AAAA,EAAE,YAAY,OAAA,EAAiB;AAAE,IAAA,KAAA,CAAM,SAAS,YAAY,CAAA;AAAG,IAAA,IAAA,CAAK,IAAA,GAAO,cAAA;AAAA,EAAgB;AAAE;AACxI,IAAM,uCAAA,GAAN,cAAsD,YAAA,CAAa;AAAA,EAAE,YAAY,KAAA,EAAe;AAAE,IAAA,KAAA,CAAM,CAAA,0BAAA,EAA6B,KAAK,CAAA,+CAAA,CAAiD,CAAA;AAAA,EAAG;AAAE;AAChM,IAAM,iCAAA,GAAN,cAAgD,YAAA,CAAa;AAAA,EAAE,YAAY,YAAA,EAAsB;AAAE,IAAA,KAAA,CAAM,CAAA,gCAAA,EAAmC,YAAY,CAAA,CAAE,CAAA;AAAA,EAAG;AAAE;AAC/J,IAAM,iCAAA,GAAN,cAAgD,YAAA,CAAa;AAAA,EAAE,YAAY,YAAA,EAAsB;AAAE,IAAA,KAAA,CAAM,CAAA,mEAAA,EAAsE,YAAY,CAAA,CAAE,CAAA;AAAA,EAAG;AAAE;AAClM,IAAM,gCAAA,GAAN,cAA+C,YAAA,CAAa;AAAA,EAAE,YAAY,IAAA,EAAc;AAAE,IAAA,KAAA,CAAM,CAAA,0CAAA,EAA6C,IAAI,CAAA,CAAE,CAAA;AAAA,EAAG;AAAE;AAExJ,IAAM,YAAA,GAAN,cAA2B,eAAA,CAAgB;AAAA,EAAE,YAAY,OAAA,EAAiB;AAAE,IAAA,KAAA,CAAM,SAAS,WAAW,CAAA;AAAG,IAAA,IAAA,CAAK,IAAA,GAAO,cAAA;AAAA,EAAgB;AAAE;AACvI,IAAM,kBAAA,GAAN,cAAiC,YAAA,CAAa;AAAA,EAAE,WAAA,CAAY,WAAmB,aAAA,EAAwB;AAAE,IAAA,KAAA,CAAM,CAAA,OAAA,EAAU,SAAS,CAAA,4CAAA,EAA+C,aAAa,CAAA,CAAE,CAAA;AAAA,EAAG;AAAE;AACrM,IAAM,2BAAA,GAAN,cAA0C,YAAA,CAAa;AAAA,EAAE,YAAY,OAAA,EAAiB;AAAE,IAAA,KAAA,CAAM,OAAO,CAAA;AAAG,IAAA,IAAA,CAAK,IAAA,GAAO,6BAAA;AAAA,EAA+B;AAAE;AACrJ,IAAM,uBAAA,GAAN,cAAsC,2BAAA,CAA4B;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,uDAAuD,CAAA;AAAA,EAAG;AAAE;AACtJ,IAAM,6BAAA,GAAN,cAA4C,2BAAA,CAA4B;AAAA,EAAE,WAAA,CAAY,YAAoB,GAAA,EAAa;AAAE,IAAA,KAAA,CAAM,CAAA,6DAAA,EAAgE,UAAU,CAAA,WAAA,EAAc,GAAG,CAAA,EAAA,CAAI,CAAA;AAAA,EAAG;AAAE;AACnO,IAAM,+BAAA,GAAN,cAA8C,2BAAA,CAA4B;AAAA,EAAE,YAAY,UAAA,EAAoB;AAAE,IAAA,KAAA,CAAM,CAAA,6DAAA,EAAgE,UAAU,CAAA,0BAAA,CAA4B,CAAA;AAAA,EAAG;AAAE;AAE/N,IAAM,gBAAA,GAAN,cAA+B,eAAA,CAAgB;AAAA,EAAE,WAAA,CAAY,cAAsB,KAAA,EAAgB;AAAE,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AAAG,IAAA,KAAA,CAAM,CAAA,YAAA,EAAe,YAAY,CAAA,wCAAA,EAA2C,OAAO,CAAA,CAAE,CAAA;AAAG,IAAA,IAAA,CAAK,IAAA,GAAO,kBAAA;AAAA,EAAoB;AAAE;AACvS,IAAM,mBAAA,GAAN,cAAkC,eAAA,CAAgB;AAAA,EAAE,YAAY,OAAA,EAAiB;AAAE,IAAA,KAAA,CAAM,SAAS,mBAAmB,CAAA;AAAG,IAAA,IAAA,CAAK,IAAA,GAAO,qBAAA;AAAA,EAAuB;AAAE;AAC7J,IAAM,qCAAA,GAAN,cAAoD,mBAAA,CAAoB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,sCAAsC,CAAA;AAAA,EAAG;AAAE;AAC3I,IAAM,0BAAA,GAAN,cAAyC,mBAAA,CAAoB;AAAA,EAAE,WAAA,CAAY,cAAsB,KAAA,EAAe;AAAE,IAAA,KAAA,CAAM,CAAA,oEAAA,EAAuE,YAAY,CAAA,SAAA,EAAY,KAAK,CAAA,wDAAA,CAA0D,CAAA;AAAA,EAAG;AAAE;AAC3R,IAAM,yBAAA,GAAN,cAAwC,qBAAA,CAAsB;AAAA,EAAE,WAAA,CAAY,aAAA,EAAuB,aAAA,EAAuB,YAAA,EAAsB,gBAAA,EAAiC;AAAE,IAAA,KAAA,CAAM,CAAA,wCAAA,EAA2C,aAAa,CAAA,kBAAA,EAAqB,aAAa,CAAA,eAAA,EAAkB,YAAY,CAAA,mDAAA,EAAsD,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAC,CAAA,yCAAA,CAA2C,CAAA;AAAA,EAAG;AAAE;AAClb,IAAM,0BAAA,GAAN,cAAyC,qBAAA,CAAsB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,8FAA8F,CAAA;AAAA,EAAG;AAAE;AAC1L,IAAM,uBAAA,GAAN,cAAsC,qBAAA,CAAsB;AAAA,EAAE,YAAY,cAAA,EAA+B;AAAE,IAAA,KAAA,CAAM,CAAA,0DAAA,EAA6D,cAAA,CAAe,IAAA,CAAK,IAAI,CAAC,CAAA,sEAAA,CAAwE,CAAA;AAAA,EAAG;AAAE;AACpR,IAAM,6BAAA,GAAN,cAA4C,qBAAA,CAAsB;AAAA,EAAE,WAAA,GAAc;AAAE,IAAA,KAAA,CAAM,gIAAgI,CAAA;AAAA,EAAG;AAAE;;;ACxP/N,IAAM,cAAA,GAAiB;AAAA,EAC5B,IAAA,EAAM,CAAA;AAAA,EACN,IAAA,EAAM,CAAA;AAAA,EACN,KAAA,EAAO,CAAA;AAAA,EACP,KAAA,EAAO,CAAA;AAAA,EACP,KAAA,EAAO,CAAA;AAAA,EACP,KAAA,EAAO,CAAA;AAAA,EACP,MAAA,EAAQ,CAAA;AAAA,EACR,MAAA,EAAQ,CAAA;AAAA,EACR,MAAA,EAAQ,CAAA;AAAA,EACR,OAAA,EAAS,EAAA;AAAA,EACT,OAAA,EAAS,EAAA;AAAA,EACT,IAAA,EAAM,EAAA;AAAA,EACN,QAAA,EAAU,EAAA;AAAA,EACV,MAAA,EAAQ,EAAA;AAAA,EACR,IAAA,EAAM,EAAA;AAAA,EACN,MAAA,EAAQ,EAAA;AAAA,EACR,KAAA,EAAO,EAAA;AAAA,EACP,UAAA,EAAY,EAAA;AAAA,EACZ,OAAA,EAAS;AACX;AA0BO,IAAM,iBAAA,GAA4D;AAAA,EACvE,MAAM,cAAA,CAAe,IAAA;AAAA,EACrB,MAAM,cAAA,CAAe,IAAA;AAAA,EACrB,OAAO,cAAA,CAAe,KAAA;AAAA,EACtB,OAAO,cAAA,CAAe,KAAA;AAAA,EACtB,OAAO,cAAA,CAAe,KAAA;AAAA,EACtB,OAAO,cAAA,CAAe,KAAA;AAAA,EACtB,QAAQ,cAAA,CAAe,MAAA;AAAA,EACvB,QAAQ,cAAA,CAAe,MAAA;AAAA,EACvB,QAAQ,cAAA,CAAe,MAAA;AAAA,EACvB,SAAS,cAAA,CAAe,OAAA;AAAA,EACxB,SAAS,cAAA,CAAe,OAAA;AAAA,EACxB,MAAM,cAAA,CAAe,IAAA;AAAA,EACrB,WAAW,cAAA,CAAe,QAAA;AAAA,EAC1B,QAAQ,cAAA,CAAe,MAAA;AAAA,EACvB,MAAM,cAAA,CAAe,IAAA;AAAA,EACrB,QAAQ,cAAA,CAAe,MAAA;AAAA,EACvB,OAAO,cAAA,CAAe,KAAA;AAAA,EACtB,YAAY,cAAA,CAAe,UAAA;AAAA,EAC3B,SAAS,cAAA,CAAe;AAC1B,CAAA;AAGO,SAAS,gBAAgB,IAAA,EAA+B;AAC7D,EAAA,OAAO,IAAA,KAAS,cAAA,CAAe,IAAA,IAAQ,IAAA,KAAS,cAAA,CAAe,MAAA;AACjE;AAGO,SAAS,aAAa,IAAA,EAA+B;AAC1D,EAAA,OAAO,SAAS,cAAA,CAAe,QAAA;AACjC;AAGO,SAAS,WAAW,IAAA,EAA+B;AACxD,EAAA,OAAO,SAAS,cAAA,CAAe,IAAA;AACjC;AAGO,SAAS,aAAa,IAAA,EAA+B;AAC1D,EAAA,OAAO,SAAS,cAAA,CAAe,MAAA;AACjC;AAGO,SAAS,UAAU,IAAA,EAA+B;AACvD,EAAA,OACE,SAAS,cAAA,CAAe,KAAA,IACxB,SAAS,cAAA,CAAe,UAAA,IACxB,SAAS,cAAA,CAAe,OAAA;AAE5B;AAGO,SAAS,WAAW,IAAA,EAA+B;AACxD,EAAA,OAAO,CAAC,UAAA,CAAW,IAAI,CAAA,IAAK,CAAC,aAAa,IAAI,CAAA,IAAK,CAAC,SAAA,CAAU,IAAI,CAAA;AACpE;AAOO,SAAS,YAAY,IAAA,EAA8B;AACxD,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,cAAA,CAAe,IAAA;AAAA,IACpB,KAAK,cAAA,CAAe,IAAA;AAAA,IACpB,KAAK,cAAA,CAAe,KAAA;AAClB,MAAA,OAAO,CAAA;AAAA,IACT,KAAK,cAAA,CAAe,KAAA;AAAA,IACpB,KAAK,cAAA,CAAe,MAAA;AAClB,MAAA,OAAO,CAAA;AAAA,IACT,KAAK,cAAA,CAAe,KAAA;AAAA,IACpB,KAAK,cAAA,CAAe,MAAA;AAAA,IACpB,KAAK,cAAA,CAAe,OAAA;AAAA,IACpB,KAAK,cAAA,CAAe,IAAA;AAAA;AAAA,IACpB,KAAK,cAAA,CAAe,MAAA;AAAA;AAAA,IACpB,KAAK,cAAA,CAAe,QAAA;AAAA,IACpB,KAAK,cAAA,CAAe,IAAA;AAAA;AAAA,IACpB,KAAK,cAAA,CAAe,UAAA;AAAA;AAAA,IACpB,KAAK,cAAA,CAAe,OAAA;AAClB,MAAA,OAAO,CAAA;AAAA,IACT,KAAK,cAAA,CAAe,KAAA;AAAA,IACpB,KAAK,cAAA,CAAe,MAAA;AAAA,IACpB,KAAK,cAAA,CAAe,OAAA;AAClB,MAAA,OAAO,CAAA;AAAA,IACT,KAAK,cAAA,CAAe,KAAA;AAElB,MAAA,OAAO,EAAA;AAAA,IACT,KAAK,cAAA,CAAe,MAAA;AAIlB,MAAA,OAAO,CAAA;AAAA;AAEb;;;AC5DA,IAAM,UAAA,GAAa,MAAA;AAUZ,SAAS,aAAa,KAAA,EAAoC;AAC/D,EAAA,IAAI,CAAC,KAAA,CAAM,IAAA,IAAQ,KAAA,CAAM,IAAA,CAAK,WAAW,CAAA,EAAG;AAC1C,IAAA,MAAM,IAAI,YAAY,yBAAyB,CAAA;AAAA,EACjD;AAEA,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAM,OAAO,CAAA;AAC5C,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,MAAM,IAAI,WAAA,CAAY,CAAA,QAAA,EAAW,KAAA,CAAM,IAAI,CAAA,kCAAA,CAAoC,CAAA;AAAA,EACjF;AAEA,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,MAAM,UAA4B,EAAC;AACnC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,IAAA,MAAM,CAAC,IAAA,EAAM,GAAG,CAAA,GAAI,QAAQ,CAAC,CAAA;AAC7B,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,EAAG;AAClB,MAAA,MAAM,IAAI,WAAA,CAAY,CAAA,kBAAA,EAAqB,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,IACpD;AACA,IAAA,IAAA,CAAK,IAAI,IAAI,CAAA;AACb,IAAA,MAAM,QAAA,GAAW,aAAA,CAAc,IAAA,EAAM,GAAA,EAAK,CAAA,EAAG;AAAA,MAC3C,SAAA,EAAW,IAAA;AAAA,MACX,WAAA,EAAa,IAAA;AAAA,MACb,OAAA,EAAS;AAAA,KACV,CAAA;AACD,IAAA,OAAA,CAAQ,KAAK,QAAQ,CAAA;AAAA,EACvB;AAEA,EAAA,MAAM,MAAA,GAAS,MAAM,UAAA,IAAc,UAAA;AACnC,EAAA,MAAM,KAAK,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,MAAM,CAAA;AAChD,EAAA,IAAI,CAAC,EAAA,EAAI;AACP,IAAA,MAAM,IAAI,WAAA;AAAA,MACR,CAAA,oBAAA,EAAuB,MAAM,CAAA,6BAAA,EAAgC,KAAA,CAAM,IAAI,CAAA,CAAA;AAAA,KACzE;AAAA,EACF;AACA,EAAA,IAAI,EAAA,CAAG,SAAS,QAAA,EAAU;AACxB,IAAA,MAAM,IAAI,WAAA;AAAA,MACR,CAAA,4CAAA,EAA+C,EAAA,CAAG,IAAI,CAAA,KAAA,EAAQ,GAAG,IAAI,CAAA;AAAA,KACvE;AAAA,EACF;AACA,EAAA,IAAI,GAAG,QAAA,EAAU;AACf,IAAA,MAAM,IAAI,WAAA,CAAY,CAAA,aAAA,EAAgB,EAAA,CAAG,IAAI,CAAA,oBAAA,CAAsB,CAAA;AAAA,EACrE;AAEA,EAAA,MAAM,WAAA,GAAc,kBAAA,CAAmB,KAAA,CAAM,IAAA,EAAM,OAAO,CAAA;AAE1D,EAAA,OAAO;AAAA,IACL,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,YAAY,EAAA,CAAG,IAAA;AAAA,IACf,iBAAiB,EAAA,CAAG,KAAA;AAAA,IACpB,OAAA;AAAA,IACA,aAAA,EAAe,IAAI,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,IAAA,EAAM,CAAC,CAAC,CAAC,CAAA;AAAA,IACtD;AAAA,GACF;AACF;AAOA,SAAS,kBAAA,CACP,MACA,OAAA,EACQ;AAER,EAAA,IAAI,CAAA,GAAI,mBAAA;AACR,EAAA,MAAM,KAAA,GAAQ,cAAA;AACd,EAAA,MAAM,IAAA,GAAO,mBAAA;AAEb,EAAA,MAAM,GAAA,GAAM,CAAC,CAAA,KAAoB;AAC/B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,QAAQ,CAAA,EAAA,EAAK;AACjC,MAAA,CAAA,GAAA,CAAM,IAAI,MAAA,CAAO,CAAA,CAAE,WAAW,CAAC,CAAC,KAAK,KAAA,GAAS,IAAA;AAAA,IAChD;AACA,IAAA,CAAA,GAAA,CAAM,CAAA,GAAI,SAAS,KAAA,GAAS,IAAA;AAAA,EAC9B,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,CAAC,CAAA,KAA4B;AAC7C,IAAA,GAAA,CAAI,EAAE,IAAI,CAAA;AACV,IAAA,CAAA,GAAA,CAAM,CAAA,GAAI,MAAA,CAAO,CAAA,CAAE,QAAQ,KAAK,KAAA,GAAS,IAAA;AACzC,IAAA,CAAA,GAAA,CAAM,CAAA,IAAK,CAAA,CAAE,QAAA,GAAW,EAAA,GAAK,OAAO,KAAA,GAAS,IAAA;AAC7C,IAAA,IAAI,CAAA,CAAE,cAAA,EAAgB,CAAA,GAAA,CAAM,CAAA,GAAI,MAAM,KAAA,GAAS,IAAA;AAC/C,IAAA,IAAI,CAAA,CAAE,WAAA,EAAa,SAAA,CAAU,CAAA,CAAE,WAAW,CAAA;AAC1C,IAAA,IAAI,EAAE,MAAA,EAAQ;AACZ,MAAA,KAAA,MAAWC,EAAAA,IAAK,CAAA,CAAE,MAAA,EAAQ,SAAA,CAAUA,EAAC,CAAA;AAAA,IACvC;AAAA,EACF,CAAA;AAEA,EAAA,GAAA,CAAI,IAAI,CAAA;AACR,EAAA,KAAA,MAAW,CAAA,IAAK,OAAA,EAAS,SAAA,CAAU,CAAC,CAAA;AACpC,EAAA,OAAO,CAAA;AACT;AAQA,SAAS,aAAA,CACP,IAAA,EACA,GAAA,EACA,KAAA,EACA,GAAA,EACgB;AAChB,EAAA,MAAM,QAAA,GAAW,iBAAA,CAAkB,GAAA,CAAI,IAAI,CAAA;AAC3C,EAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,IAAA,MAAM,IAAI,WAAA,CAAY,CAAA,qBAAA,EAAwB,IAAI,IAAI,CAAA,MAAA,EAAS,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,EACxE;AAGA,EAAA,IAAI,GAAA,CAAI,OAAA,IAAW,SAAA,CAAU,QAAQ,CAAA,EAAG;AACtC,IAAA,MAAM,IAAI,WAAA;AAAA,MACR,4DAA4D,IAAI,CAAA,EAAA;AAAA,KAClE;AAAA,EACF;AACA,EAAA,IAAI,UAAA,CAAW,QAAQ,CAAA,IAAK,CAAC,IAAI,SAAA,EAAW;AAC1C,IAAA,MAAM,IAAI,WAAA;AAAA,MACR,qEAAqE,IAAI,CAAA,EAAA;AAAA,KAC3E;AAAA,EACF;AACA,EAAA,IAAI,YAAA,CAAa,QAAQ,CAAA,IAAK,CAAC,IAAI,WAAA,EAAa;AAC9C,IAAA,MAAM,IAAI,WAAA;AAAA,MACR,uEAAuE,IAAI,CAAA,EAAA;AAAA,KAC7E;AAAA,EACF;AAGA,EAAA,IAAI,GAAA,CAAI,mBAAmB,MAAA,EAAW;AACpC,IAAA,IAAI,QAAA,KAAa,eAAS,OAAA,EAAS;AACjC,MAAA,MAAM,IAAI,WAAA;AAAA,QACR,CAAA,kDAAA,EAAqD,IAAI,CAAA,KAAA,EAAQ,GAAA,CAAI,IAAI,CAAA;AAAA,OAC3E;AAAA,IACF;AACA,IAAA,IAAI,OAAO,GAAA,CAAI,cAAA,KAAmB,SAAA,EAAW;AAC3C,MAAA,MAAM,IAAI,WAAA,CAAY,CAAA,mBAAA,EAAsB,IAAI,CAAA,iBAAA,CAAmB,CAAA;AAAA,IACrE;AAAA,EACF;AAEA,EAAA,IAAI,GAAA,CAAI,oBAAoB,MAAA,EAAW;AACrC,IAAA,MAAM,KAAA,GACJ,gBAAgB,QAAQ,CAAA;AAAA,IAEvB,UAAA,CAAW,QAAQ,CAAA,IAClB,GAAA,CAAI,KAAA,KAAU,MAAA,IACd,eAAA,CAAgB,iBAAA,CAAkB,GAAA,CAAI,KAAA,CAAM,IAAI,CAAE,CAAA;AACtD,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,WAAA;AAAA,QACR,CAAA,4EAAA,EAA+E,IAAI,CAAA,KAAA,EAAQ,GAAA,CAAI,IAAI,CAAA;AAAA,OACrG;AAAA,IACF;AACA,IAAA,IAAI,CAAC,OAAO,SAAA,CAAU,GAAA,CAAI,eAAe,CAAA,IAAK,GAAA,CAAI,mBAAmB,CAAA,EAAG;AACtE,MAAA,MAAM,IAAI,WAAA;AAAA,QACR,uBAAuB,IAAI,CAAA,4BAAA;AAAA,OAC7B;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,WAAA;AACJ,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,YAAA;AAEJ,EAAA,IAAI,UAAA,CAAW,QAAQ,CAAA,EAAG;AACxB,IAAA,IAAI,CAAC,IAAI,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,WAAA,CAAY,CAAA,aAAA,EAAgB,IAAI,CAAA,0BAAA,CAA4B,CAAA;AAAA,IACxE;AACA,IAAA,MAAM,SAAA,GAAY,iBAAA,CAAkB,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AAClD,IAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,MAAA,MAAM,IAAI,WAAA;AAAA,QACR,CAAA,wBAAA,EAA2B,GAAA,CAAI,KAAA,CAAM,IAAI,SAAS,IAAI,CAAA,CAAA;AAAA,OACxD;AAAA,IACF;AACA,IAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,MAAA,MAAM,IAAI,WAAA;AAAA,QACR,4DAA4D,IAAI,CAAA,QAAA;AAAA,OAClE;AAAA,IACF;AACA,IAAA,IAAI,CAAC,UAAA,CAAW,SAAS,CAAA,EAAG;AAC1B,MAAA,MAAM,IAAI,WAAA;AAAA,QACR,CAAA,6EAAA,EAAgF,IAAI,CAAA,WAAA,EAAc,GAAA,CAAI,MAAM,IAAI,CAAA;AAAA,OAClH;AAAA,IACF;AAGA,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,eAAA,IAAmB,GAAA,CAAI,KAAA,CAAM,eAAA;AAC9C,IAAA,MAAM,QAAA,GAAsB;AAAA,MAC1B,GAAG,GAAA,CAAI,KAAA;AAAA,MACP,GAAI,IAAA,KAAS,MAAA,GAAY,EAAE,eAAA,EAAiB,IAAA,KAAS;AAAC,KACxD;AACA,IAAA,WAAA,GAAc,aAAA,CAAc,CAAA,EAAG,IAAI,CAAA,MAAA,CAAA,EAAU,UAAU,EAAA,EAAI;AAAA,MACzD,SAAA,EAAW,KAAA;AAAA,MACX,WAAA,EAAa,KAAA;AAAA,MACb,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH,CAAA,MAAA,IAAW,YAAA,CAAa,QAAQ,CAAA,EAAG;AACjC,IAAA,IAAI,CAAC,IAAI,MAAA,IAAU,MAAA,CAAO,KAAK,GAAA,CAAI,MAAM,CAAA,CAAE,MAAA,KAAW,CAAA,EAAG;AACvD,MAAA,MAAM,IAAI,WAAA;AAAA,QACR,kBAAkB,IAAI,CAAA,mCAAA;AAAA,OACxB;AAAA,IACF;AACA,IAAA,MAAM,YAA8B,EAAC;AACrC,IAAA,MAAM,MAAA,uBAAa,GAAA,EAA4B;AAC/C,IAAA,IAAI,EAAA,GAAK,CAAA;AACT,IAAA,KAAA,MAAW,CAAC,OAAO,IAAI,CAAA,IAAK,OAAO,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,EAAG;AACtD,MAAA,IAAI,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA,EAAG;AACrB,QAAA,MAAM,IAAI,WAAA;AAAA,UACR,CAAA,iBAAA,EAAoB,KAAK,CAAA,oBAAA,EAAuB,IAAI,CAAA,CAAA;AAAA,SACtD;AAAA,MACF;AACA,MAAA,MAAM,QAAA,GAAW,cAAc,CAAA,EAAG,IAAI,IAAI,KAAK,CAAA,CAAA,EAAI,MAAM,EAAA,EAAA,EAAM;AAAA,QAC7D,SAAA,EAAW,KAAA;AAAA,QACX,WAAA,EAAa,KAAA;AAAA,QACb,OAAA,EAAS;AAAA,OACV,CAAA;AACD,MAAA,SAAA,CAAU,KAAK,QAAQ,CAAA;AACvB,MAAA,MAAA,CAAO,GAAA,CAAI,OAAO,QAAQ,CAAA;AAAA,IAC5B;AACA,IAAA,MAAA,GAAS,SAAA;AACT,IAAA,YAAA,GAAe,MAAA;AAAA,EACjB,CAAA,MAAA,IAAW,GAAA,CAAI,KAAA,KAAU,MAAA,EAAW;AAClC,IAAA,MAAM,IAAI,WAAA;AAAA,MACR,CAAA,mCAAA,EAAsC,IAAI,CAAA,KAAA,EAAQ,GAAA,CAAI,IAAI,CAAA;AAAA,KAC5D;AAAA,EACF,CAAA,MAAA,IAAW,GAAA,CAAI,MAAA,KAAW,MAAA,EAAW;AACnC,IAAA,MAAM,IAAI,WAAA;AAAA,MACR,CAAA,sCAAA,EAAyC,IAAI,CAAA,KAAA,EAAQ,GAAA,CAAI,IAAI,CAAA;AAAA,KAC/D;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,QAAA;AAAA,IACA,SAAA,EAAW,YAAY,QAAQ,CAAA;AAAA,IAC/B,QAAA,EAAU,IAAI,QAAA,IAAY,KAAA;AAAA,IAC1B,iBAAiB,GAAA,CAAI,eAAA;AAAA,IACrB,GAAI,IAAI,cAAA,KAAmB,MAAA,GAAY,EAAE,cAAA,EAAgB,GAAA,CAAI,cAAA,EAAe,GAAI,EAAC;AAAA,IACjF,GAAI,WAAA,GAAc,EAAE,WAAA,KAAgB,EAAC;AAAA,IACrC,GAAI,MAAA,GAAS,EAAE,MAAA,KAAW,EAAC;AAAA,IAC3B,GAAI,YAAA,GAAe,EAAE,YAAA,KAAiB;AAAC,GACzC;AACF;;;AC9UO,SAAS,OAAA,CAAQ,OAAe,SAAA,EAA2B;AAChE,EAAA,IAAA,CAAK,SAAA,GAAa,SAAA,GAAY,CAAA,MAAQ,CAAA,EAAG;AACvC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sCAAA,EAAyC,SAAS,CAAA,CAAE,CAAA;AAAA,EACtE;AACA,EAAA,OAAQ,KAAA,GAAQ,SAAA,GAAY,CAAA,GAAK,EAAE,SAAA,GAAY,CAAA,CAAA;AACjD;AAGO,IAAM,WAAA,GAAc;;;ACPpB,IAAM,UAAN,MAAc;AAAA,EACV,MAAA;AAAA,EACA,UAAA;AAAA,EACD,MAAA;AAAA,EAER,WAAA,CACE,MAAA,EAEA,aAAA,GAAgB,CAAA,EAChB;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,aAAa,MAAA,CAAO,UAAA;AACzB,IAAA,IAAI,aAAA,GAAgB,CAAA,IAAK,aAAA,GAAgB,IAAA,CAAK,UAAA,EAAY;AACxD,MAAA,MAAM,IAAI,UAAA;AAAA,QACR,CAAA,cAAA,EAAiB,aAAa,CAAA,kBAAA,EAAqB,IAAA,CAAK,UAAU,CAAA,CAAA;AAAA,OACpE;AAAA,IACF;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,aAAA;AAAA,EAChB;AAAA;AAAA,EAGA,IAAI,SAAA,GAAoB;AACtB,IAAA,OAAO,IAAA,CAAK,aAAa,IAAA,CAAK,MAAA;AAAA,EAChC;AAAA;AAAA,EAGA,IAAI,IAAA,GAAe;AACjB,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAA,CAAS,UAAA,EAAoB,SAAA,GAAoB,WAAA,EAAqB;AACpE,IAAA,IAAI,aAAa,CAAA,IAAK,CAAC,MAAA,CAAO,SAAA,CAAU,UAAU,CAAA,EAAG;AACnD,MAAA,MAAM,IAAI,WAAW,CAAA,yCAAA,CAA2C,CAAA;AAAA,IAClE;AACA,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,IAAA,CAAK,MAAA,EAAQ,SAAS,CAAA;AAC9C,IAAA,MAAM,MAAM,OAAA,GAAU,UAAA;AACtB,IAAA,IAAI,GAAA,GAAM,KAAK,UAAA,EAAY;AACzB,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,oBAAoB,UAAU,CAAA,eAAA,EAAkB,KAAK,MAAM,CAAA,MAAA,EAAS,KAAK,UAAU,CAAA;AAAA,OACrF;AAAA,IACF;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,GAAA;AACd,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA,EAGA,OAAO,MAAA,GAAS,CAAA,EAAG,UAAA,GAAa,IAAA,CAAK,aAAa,MAAA,EAAoB;AACpE,IAAA,OAAO,IAAI,UAAA,CAAW,IAAA,CAAK,MAAA,EAAQ,QAAQ,UAAU,CAAA;AAAA,EACvD;AAAA,EAEA,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAGC,OAAAA,EAA6B;AAC/C,IAAA,MAAM,CAAA,GAAIA,OAAAA,IAAW,IAAA,CAAK,UAAA,GAAa,MAAA,KAAY,CAAA;AACnD,IAAA,OAAO,IAAI,UAAA,CAAW,IAAA,CAAK,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAAA,EAC9C;AACF;AAGO,SAAS,cAAc,UAAA,EAA6B;AACzD,EAAA,MAAM,GAAA,GAAM,WAAU,GAClB,IAAI,kBAAkB,UAAU,CAAA,GAChC,IAAI,WAAA,CAAY,UAAU,CAAA;AAC9B,EAAA,OAAO,IAAI,QAAQ,GAAG,CAAA;AACxB;AAEA,SAAS,SAAA,GAAqB;AAE5B,EAAA,OAAO,OAAO,iBAAA,KAAsB,WAAA;AACtC;;;AClFA,IAAA,UAAA,GAAA;AAAA,QAAA,CAAA,UAAA,EAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,IAAA,EAAA,MAAA,IAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,KAAA,EAAA,MAAA,KAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,kBAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,eAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAsEO,IAAM,qBAAA,GAAwB;AA+DrC,IAAe,iBAAf,MAA2C;AAAA;AAAA,EAGhC,YAAA;AACX,CAAA;AAGO,IAAM,aAAA,GAAN,cAA4B,cAAA,CAAe;AAAA,EAEhD,WAAA,CACS,YACA,KAAA,EACP;AACA,IAAA,KAAA,EAAM;AAHC,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AACA,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAAA,EAGT;AAAA,EAJS,UAAA;AAAA,EACA,KAAA;AAAA,EAHA,IAAA,GAAO,eAAA;AAOlB;AAGO,IAAM,QAAA,GAAN,cAAuB,cAAA,CAAe;AAAA,EAE3C,WAAA,CACSC,QACA,KAAA,EACP;AACA,IAAA,KAAA,EAAM;AAHC,IAAA,IAAA,CAAA,KAAA,GAAAA,MAAAA;AACA,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAAA,EAGT;AAAA,EAJS,KAAA;AAAA,EACA,KAAA;AAAA,EAHA,IAAA,GAAO,UAAA;AAOlB;AAGO,IAAM,OAAA,GAAN,cAAmC,cAAA,CAAkB;AAAA,EAE1D,YAAmB,IAAA,EAAqB;AACtC,IAAA,KAAA,EAAM;AADW,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAEnB;AAAA,EAFmB,IAAA;AAAA,EADV,IAAA,GAAO,KAAA;AAIlB;AAGO,IAAM,KAAA,GAAN,cAAiC,cAAA,CAAkB;AAAA,EAExD,YAAmB,KAAA,EAAU;AAC3B,IAAA,KAAA,EAAM;AADW,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAAA,EAEnB;AAAA,EAFmB,KAAA;AAAA,EADV,IAAA,GAAO,KAAA;AAIlB;AAMO,IAAM,IAAA,GAAN,cAAgC,cAAA,CAAkB;AAAA,EAEvD,WAAA,CACS,MACA,IAAA,EACP;AACA,IAAA,KAAA,EAAM;AAHC,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAGT;AAAA,EAJS,IAAA;AAAA,EACA,IAAA;AAAA,EAHA,IAAA,GAAO,MAAA;AAOlB;AASO,IAAM,SAAA,GAAN,cAAqC,cAAA,CAAkB;AAAA,EAE5D,WAAA,CACS,MACA,IAAA,EACP;AACA,IAAA,KAAA,EAAM;AAHC,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAGT;AAAA,EAJS,IAAA;AAAA,EACA,IAAA;AAAA,EAHA,IAAA,GAAO,KAAA;AAOlB;AAOO,IAAM,gBAAA,GAAN,cAA+B,cAAA,CAAe;AAAA,EAEnD,WAAA,CAESA,QAEA,gBAAA,EAEA,qBAAA,EAEA,WAEA,aAAA,EAEA,gBAAA,EAEA,eAAA,GAA2C,YAAA,EAE3C,WAAA,EACP;AACA,IAAA,KAAA,EAAM;AAhBC,IAAA,IAAA,CAAA,KAAA,GAAAA,MAAAA;AAEA,IAAA,IAAA,CAAA,gBAAA,GAAA,gBAAA;AAEA,IAAA,IAAA,CAAA,qBAAA,GAAA,qBAAA;AAEA,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AAEA,IAAA,IAAA,CAAA,aAAA,GAAA,aAAA;AAEA,IAAA,IAAA,CAAA,gBAAA,GAAA,gBAAA;AAEA,IAAA,IAAA,CAAA,eAAA,GAAA,eAAA;AAEA,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AAAA,EAGT;AAAA,EAjBS,KAAA;AAAA,EAEA,gBAAA;AAAA,EAEA,qBAAA;AAAA,EAEA,SAAA;AAAA,EAEA,aAAA;AAAA,EAEA,gBAAA;AAAA,EAEA,eAAA;AAAA,EAEA,WAAA;AAAA,EAjBA,IAAA,GAAO,kBAAA;AAqBlB;AAUO,SAAS,iBAAiB,KAAA,EAAyB;AACxD,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,KAAA;AACxD,EAAA,MAAM,IAAK,KAAA,CAA6B,IAAA;AACxC,EAAA,OACE,CAAA,KAAM,KAAA,IACN,CAAA,KAAM,KAAA,IACN,CAAA,KAAM,MAAA,IACN,CAAA,KAAM,KAAA,IACN,CAAA,KAAM,eAAA,IACN,CAAA,KAAM,UAAA,IACN,CAAA,KAAM,kBAAA;AAEV;AAEA,SAAS,eAAe,KAAA,EAAqF;AAC3G,EAAA,OAAO,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,KAAA,EAAO,YAAY,CAAA;AAChH;AAGO,SAAS,mBAAmB,KAAA,EAAwC;AACzE,EAAA,IAAI,cAAA,CAAe,KAAK,CAAA,EAAG;AACzB,IAAA,OAAO,KAAA,CAAM,UAAA;AAAA,EACf;AACA,EAAA,OAAO,KAAA;AACT;AAMO,SAAS,oBACd,MAAA,EAC6B;AAC7B,EAAA,IAAI,cAAA,CAAe,MAAM,CAAA,EAAG;AAC1B,IAAA,OAAO,MAAA,CAAO,UAAA;AAAA,EAChB;AACA,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,gBAAgB,KAAA,EAAuB;AACrD,EAAA,OACE,KAAA,KAAU,QACV,OAAO,KAAA,KAAU,YACjB,YAAA,IAAgB,KAAA,IAChB,MAAM,QAAA,KAAa,IAAA;AAEvB;AAGO,SAAS,oBACd,UAAA,EACO;AACP,EAAA,OAAO,EAAE,UAAA,EAAY,QAAA,EAAU,IAAA,EAAK;AACtC;AASO,SAAS,SAAA,CACdA,MAAAA,EACA,GAAA,EACA,UAAA,EAMY;AACZ,EAAA,IAAI,GAAA,CAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AAClC,EAAA,MAAM,CAAC,KAAA,EAAO,GAAG,IAAI,IAAI,GAAA,CAAI,IAAA;AAC7B,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,MAAA;AAEhC,EAAA,MAAM,OAAOA,MAAAA,CAAM,IAAA;AACnB,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,eAAA,IAAmB,IAAA,CAAK,UAAU,KAAA,EAAO;AACzD,IAAA,OAAO,EAAE,UAAA,EAAY,IAAA,CAAK,UAAA,EAAY,MAAM,IAAA,EAAK;AAAA,EACnD;AACA,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,UAAA,IAAc,IAAA,CAAK,UAAU,KAAA,EAAO;AAIpD,IAAA,MAAM,KAAA,GAA0B,IAAI,OAAA,CAAQ,IAAI,CAAA;AAChD,IAAA,OAAO,SAAA,CAAU,IAAA,CAAK,KAAA,EAAO,KAAiB,CAAA;AAAA,EAChD;AAEA,EAAA,IAAIA,OAAM,IAAA,EAAM;AACd,IAAA,KAAA,MAAW,CAAA,IAAKA,OAAM,IAAA,EAAM;AAC1B,MAAA,IAAI,EAAE,IAAA,CAAK,IAAA,KAAS,mBAAmB,CAAA,CAAE,IAAA,CAAK,UAAU,KAAA,EAAO;AAC7D,QAAA,OAAO,EAAE,UAAA,EAAY,CAAA,CAAE,IAAA,CAAK,UAAA,EAAY,MAAM,IAAA,EAAK;AAAA,MACrD;AACA,MAAA,IAAI,EAAE,IAAA,CAAK,IAAA,KAAS,cAAc,CAAA,CAAE,IAAA,CAAK,UAAU,KAAA,EAAO;AACxD,QAAA,MAAM,KAAA,GAA0B,IAAI,OAAA,CAAQ,IAAI,CAAA;AAChD,QAAA,OAAO,SAAA,CAAU,CAAA,CAAE,IAAA,CAAK,KAAA,EAAO,KAAiB,CAAA;AAAA,MAClD;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;;;ACrPO,SAAS,uBAAA,GAEU;AACxB,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAqB;AACvC,EAAA,SAAS,YAAY,IAAA,EAA8B;AACjD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAC7B,IAAA,IAAI,KAAA,CAAM,GAAA,CAAI,OAAO,CAAA,EAAG;AACtB,MAAA,OAAO,KAAA,CAAM,IAAI,OAAO,CAAA;AAAA,IAC1B;AACA,IAAA,MAAM,QAAQ,IAAI,KAAA;AAAA,MAChB,EAAC;AAAA,MACD;AAAA,QACE,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU;AAC1B,UAAA,IAAI,IAAA,KAAS,cAAc,OAAO,IAAA;AAClC,UAAA,IAAI,IAAA,KAAS,UAAU,OAAO,IAAA;AAC9B,UAAA,IAAI,IAAA,KAAS,UAAU,OAAO,MAAA;AAC9B,UAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,YAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAQ,CAAA;AAAA,UAC3C;AACA,UAAA,OAAO,YAAY,CAAC,GAAG,MAAM,MAAA,CAAO,IAAI,CAAC,CAAC,CAAA;AAAA,QAC5C,CAAA;AAAA,QACA,GAAA,CAAI,QAAQ,IAAA,EAAM;AAChB,UAAA,IAAI,IAAA,KAAS,YAAA,IAAgB,IAAA,KAAS,QAAA,IAAY,SAAS,QAAA,EAAU;AACnE,YAAA,OAAO,IAAA;AAAA,UACT;AACA,UAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,IAAI,CAAA;AAAA,QACjC,CAAA;AAAA,QACA,QAAQ,MAAA,EAAQ;AACd,UAAA,OAAO,OAAA,CAAQ,QAAQ,MAAM,CAAA;AAAA,QAC/B,CAAA;AAAA,QACA,wBAAA,CAAyB,QAAQ,IAAA,EAAM;AACrC,UAAA,IAAI,IAAA,KAAS,YAAA,IAAgB,IAAA,KAAS,QAAA,IAAY,SAAS,QAAA,EAAU;AACnE,YAAA,OAAO,EAAE,UAAA,EAAY,KAAA,EAAO,YAAA,EAAc,IAAA,EAAK;AAAA,UACjD;AACA,UAAA,OAAO,OAAA,CAAQ,wBAAA,CAAyB,MAAA,EAAQ,IAAI,CAAA;AAAA,QACtD;AAAA;AACF,KACF;AACA,IAAA,KAAA,CAAM,GAAA,CAAI,SAAS,KAAK,CAAA;AACxB,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,WAAA,CAAY,EAAE,CAAA;AACvB;AAoBO,SAAS,eAKd,OAAA,EAAyC;AACzC,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAqB;AACvC,EAAA,IAAI,QAAA,GAAW,CAAA;AAEf,EAAA,SAAS,YAAY,IAAA,EAA8B;AACjD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAC7B,IAAA,IAAI,KAAA,CAAM,GAAA,CAAI,OAAO,CAAA,EAAG;AACtB,MAAA,OAAO,KAAA,CAAM,IAAI,OAAO,CAAA;AAAA,IAC1B;AACA,IAAA,MAAM,QAAQ,IAAI,KAAA;AAAA,MAChB,EAAC;AAAA,MACD;AAAA,QACE,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU;AAC1B,UAAA,IAAI,IAAA,KAAS,cAAc,OAAO,IAAA;AAClC,UAAA,IAAI,IAAA,KAAS,UAAU,OAAO,IAAA;AAC9B,UAAA,IAAI,IAAA,KAAS,UAAU,OAAO,MAAA;AAC9B,UAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,YAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAQ,CAAA;AAAA,UAC3C;AACA,UAAA,OAAO,YAAY,CAAC,GAAG,MAAM,MAAA,CAAO,IAAI,CAAC,CAAC,CAAA;AAAA,QAC5C,CAAA;AAAA,QACA,GAAA,CAAI,QAAQ,IAAA,EAAM;AAChB,UAAA,IAAI,IAAA,KAAS,YAAA,IAAgB,IAAA,KAAS,QAAA,IAAY,SAAS,QAAA,EAAU;AACnE,YAAA,OAAO,IAAA;AAAA,UACT;AACA,UAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,IAAI,CAAA;AAAA,QACjC,CAAA;AAAA,QACA,QAAQ,MAAA,EAAQ;AAKd,UAAA,MAAM,KAAK,EAAE,QAAA;AACb,UAAA,MAAM,cAAc,CAAA,mBAAA,EAAsB,IAAA,CAAK,KAAK,GAAG,CAAC,KAAK,EAAE,CAAA,CAAA;AAC/D,UAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,eAAe,IAAA,CAAK,MAAA,EAAQ,WAAW,CAAA,EAAG;AAC9D,YAAA,MAAA,CAAO,cAAA,CAAe,QAAQ,WAAA,EAAa;AAAA,cACzC,UAAA,EAAY,IAAA;AAAA,cACZ,YAAA,EAAc,IAAA;AAAA,cACd,KAAA,EAAO;AAAA,aACR,CAAA;AAAA,UACH;AACA,UAAA,OAAO,OAAA,CAAQ,QAAQ,MAAM,CAAA;AAAA,QAC/B,CAAA;AAAA,QACA,wBAAA,CAAyB,QAAQ,IAAA,EAAM;AACrC,UAAA,IAAI,IAAA,KAAS,YAAA,IAAgB,IAAA,KAAS,QAAA,IAAY,SAAS,QAAA,EAAU;AACnE,YAAA,OAAO,EAAE,UAAA,EAAY,KAAA,EAAO,YAAA,EAAc,IAAA,EAAK;AAAA,UACjD;AACA,UAAA,OAAO,OAAA,CAAQ,wBAAA,CAAyB,MAAA,EAAQ,IAAI,CAAA;AAAA,QACtD;AAAA;AACF,KACF;AACA,IAAA,KAAA,CAAM,GAAA,CAAI,SAAS,KAAK,CAAA;AACxB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,YAAY,IAAI,KAAA;AAAA,IACpB,EAAC;AAAA,IACD;AAAA,MACE,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU;AAC1B,QAAA,IAAI,IAAA,KAAS,cAAc,OAAO,IAAA;AAClC,QAAA,IAAI,IAAA,KAAS,QAAA,EAAU,OAAO,EAAC;AAC/B,QAAA,IAAI,IAAA,KAAS,UAAU,OAAO,MAAA;AAC9B,QAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,UAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAQ,CAAA;AAAA,QAC3C;AACA,QAAA,MAAM,OAAA,GAAU,OAAO,IAAI,CAAA;AAC3B,QAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,EAAG;AAC7B,UAAA,OAAO,WAAA,CAAY,CAAC,OAAO,CAAC,CAAA;AAAA,QAC9B;AACA,QAAA,OAAO,MAAA;AAAA,MACT,CAAA;AAAA,MACA,GAAA,CAAI,QAAQ,IAAA,EAAM;AAChB,QAAA,IAAI,IAAA,KAAS,YAAA,IAAgB,IAAA,KAAS,QAAA,IAAY,SAAS,QAAA,EAAU;AACnE,UAAA,OAAO,IAAA;AAAA,QACT;AACA,QAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,QAAQ,QAAA,CAAS,IAAI,GAAG,OAAO,IAAA;AAC/D,QAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,IAAI,CAAA;AAAA,MACjC,CAAA;AAAA,MACA,OAAA,GAAU;AACR,QAAA,OAAO,CAAC,GAAG,OAAA,EAAS,YAAA,EAAc,UAAU,QAAQ,CAAA;AAAA,MACtD,CAAA;AAAA,MACA,wBAAA,CAAyB,SAAS,IAAA,EAAM;AACtC,QAAA,IAAI,IAAA,KAAS,YAAA,IAAgB,IAAA,KAAS,QAAA,IAAY,SAAS,QAAA,EAAU;AACnE,UAAA,OAAO,EAAE,UAAA,EAAY,KAAA,EAAO,YAAA,EAAc,IAAA,EAAK;AAAA,QACjD;AACA,QAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA,EAAG;AACtD,UAAA,OAAO,EAAE,UAAA,EAAY,IAAA,EAAM,YAAA,EAAc,IAAA,EAAK;AAAA,QAChD;AACA,QAAA,OAAO,MAAA;AAAA,MACT;AAAA;AACF,GACF;AACA,EAAA,OAAO,SAAA;AACT;AAWO,SAAS,2BAMd,OAAA,EAC6E;AAC7E,EAAA,MAAM,SAAA,GAAY,eAAkB,OAAO,CAAA;AAC3C,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAqB;AAEvC,EAAA,SAAS,oBAAoB,IAAA,EAA8B;AACzD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAC7B,IAAA,IAAI,KAAA,CAAM,GAAA,CAAI,OAAO,CAAA,EAAG;AACtB,MAAA,OAAO,KAAA,CAAM,IAAI,OAAO,CAAA;AAAA,IAC1B;AACA,IAAA,MAAM,QAAQ,IAAI,KAAA;AAAA,MAChB,EAAC;AAAA,MACD;AAAA,QACE,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU;AAC1B,UAAA,IAAI,IAAA,KAAS,cAAc,OAAO,IAAA;AAClC,UAAA,IAAI,SAAS,QAAA,EAAU,OAAO,CAAC,WAAA,EAAa,GAAG,IAAI,CAAA;AACnD,UAAA,IAAI,IAAA,KAAS,UAAU,OAAO,MAAA;AAC9B,UAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,YAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAQ,CAAA;AAAA,UAC3C;AACA,UAAA,OAAO,oBAAoB,CAAC,GAAG,MAAM,MAAA,CAAO,IAAI,CAAC,CAAC,CAAA;AAAA,QACpD,CAAA;AAAA,QACA,GAAA,CAAI,QAAQ,IAAA,EAAM;AAChB,UAAA,IACE,IAAA,KAAS,YAAA,IACT,IAAA,KAAS,QAAA,IACT,SAAS,QAAA,EACT;AACA,YAAA,OAAO,IAAA;AAAA,UACT;AACA,UAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,IAAI,CAAA;AAAA,QACjC,CAAA;AAAA,QACA,QAAQ,MAAA,EAAQ;AACd,UAAA,OAAO,OAAA,CAAQ,QAAQ,MAAM,CAAA;AAAA,QAC/B,CAAA;AAAA,QACA,wBAAA,CAAyB,QAAQ,IAAA,EAAM;AACrC,UAAA,IACE,IAAA,KAAS,YAAA,IACT,IAAA,KAAS,QAAA,IACT,SAAS,QAAA,EACT;AACA,YAAA,OAAO,EAAE,UAAA,EAAY,KAAA,EAAO,YAAA,EAAc,IAAA,EAAK;AAAA,UACjD;AACA,UAAA,OAAO,OAAA,CAAQ,wBAAA,CAAyB,MAAA,EAAQ,IAAI,CAAA;AAAA,QACtD;AAAA;AACF,KACF;AACA,IAAA,KAAA,CAAM,GAAA,CAAI,SAAS,KAAK,CAAA;AACxB,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,oBAAA,GAAuB,mBAAA,CAAoB,EAAE,CAAA;AAEnD,EAAA,OAAO,IAAI,MAAM,SAAA,EAA0D;AAAA,IACzE,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU;AAC1B,MAAA,IAAI,IAAA,KAAS,aAAa,OAAO,oBAAA;AACjC,MAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAQ,CAAA;AAAA,IAC3C,CAAA;AAAA,IACA,GAAA,CAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,IAAI,IAAA,KAAS,aAAa,OAAO,IAAA;AACjC,MAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,IAAI,CAAA;AAAA,IACjC,CAAA;AAAA,IACA,QAAQ,MAAA,EAAQ;AACd,MAAA,OAAO,CAAC,GAAG,OAAA,CAAQ,OAAA,CAAQ,MAAM,GAAG,WAAW,CAAA;AAAA,IACjD,CAAA;AAAA,IACA,wBAAA,CAAyB,QAAQ,IAAA,EAAM;AACrC,MAAA,IAAI,SAAS,WAAA,EAAa;AACxB,QAAA,OAAO;AAAA,UACL,UAAA,EAAY,IAAA;AAAA,UACZ,YAAA,EAAc,IAAA;AAAA,UACd,KAAA,EAAO;AAAA,SACT;AAAA,MACF;AACA,MAAA,OAAO,OAAA,CAAQ,wBAAA,CAAyB,MAAA,EAAQ,IAAI,CAAA;AAAA,IACtD;AAAA,GACD,CAAA;AAGH;AAKO,SAAS,WAAW,KAAA,EAAmC;AAC5D,EAAA,OACE,UAAU,IAAA,IACV,OAAO,KAAA,KAAU,QAAA,IAChB,MAAmC,UAAA,KAAe,IAAA;AAEvD;AAYO,SAAS,aAA0B,KAAA,EAA2B;AACnE,EAAA,IAAI,UAAA,CAAW,KAAK,CAAA,EAAG;AACrB,IAAA,OAAO,IAAI,OAAA,CAAQ,KAAA,CAAM,MAAM,CAAA;AAAA,EACjC;AACA,EAAA,IACE,KAAA,KAAU,IAAA,IACV,OAAO,KAAA,KAAU,QAAA;AAAA,GAEf,MAAc,OAAA,KAAY,gBAAA;AAAA,EAEzB,KAAA,CAAc,OAAA,KAAY,sBAAA,IAC1B,KAAA,CAAc,YAAY,oBAAA,CAAA,EAC7B;AAEA,IAAA,MAAM,QAAS,KAAA,CAAc,OAAA;AAC7B,IAAA,MAAM,OAAO,KAAA,KAAU,gBAAA,GACnB,WAAA,GACA,KAAA,KAAU,uBACR,eAAA,GACA,mBAAA;AACN,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,EAAG,IAAI,CAAA,wEAAA,EACE,IAAI,CAAA,0CAAA;AAAA,KACf;AAAA,EACF;AACA,EAAA,IAAI,gBAAA,CAAiB,KAAK,CAAA,EAAG;AAC3B,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAI,MAAM,KAAK,CAAA;AACxB;AAUO,SAAS,IAAO,KAAA,EAA8B;AACnD,EAAA,OAAO,IAAI,MAAM,KAAK,CAAA;AACxB;;;ACpYO,SAAS,EAAA,CAAG,MAAe,KAAA,EAA0C;AAC1E,EAAA,OAAO,IAAI,IAAA,CAAK,IAAA,EAAM,CAAC,YAAA,CAAa,IAAI,CAAA,EAAG,YAAA,CAAa,KAAK,CAAC,CAAC,CAAA;AACjE;AACO,SAAS,EAAA,CAAG,MAAe,KAAA,EAA0C;AAC1E,EAAA,OAAO,IAAI,IAAA,CAAK,IAAA,EAAM,CAAC,YAAA,CAAa,IAAI,CAAA,EAAG,YAAA,CAAa,KAAK,CAAC,CAAC,CAAA;AACjE;AACO,SAAS,GAAA,CAAI,MAAe,KAAA,EAA0C;AAC3E,EAAA,OAAO,IAAI,IAAA,CAAK,KAAA,EAAO,CAAC,YAAA,CAAa,IAAI,CAAA,EAAG,YAAA,CAAa,KAAK,CAAC,CAAC,CAAA;AAClE;AACO,SAAS,EAAA,CAAG,MAAe,KAAA,EAA0C;AAC1E,EAAA,OAAO,IAAI,IAAA,CAAK,IAAA,EAAM,CAAC,YAAA,CAAa,IAAI,CAAA,EAAG,YAAA,CAAa,KAAK,CAAC,CAAC,CAAA;AACjE;AACO,SAAS,GAAA,CAAI,MAAe,KAAA,EAA0C;AAC3E,EAAA,OAAO,IAAI,IAAA,CAAK,KAAA,EAAO,CAAC,YAAA,CAAa,IAAI,CAAA,EAAG,YAAA,CAAa,KAAK,CAAC,CAAC,CAAA;AAClE;AAMO,SAAS,GAAA,CACd,IAAA,EACA,KAAA,EAAA,GACG,IAAA,EACuB;AAC1B,EAAA,OAAO,IAAI,IAAA;AAAA,IACT,KAAA;AAAA,IACA,CAAC,IAAA,EAAM,KAAA,EAAO,GAAG,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,YAAA,CAAa,CAAC,CAAC;AAAA,GACnD;AACF;AAEO,SAAS,EAAA,CACd,IAAA,EACA,KAAA,EAAA,GACG,IAAA,EACuB;AAC1B,EAAA,OAAO,IAAI,IAAA;AAAA,IACT,IAAA;AAAA,IACA,CAAC,IAAA,EAAM,KAAA,EAAO,GAAG,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,YAAA,CAAa,CAAC,CAAC;AAAA,GACnD;AACF;AAEO,SAAS,IAAI,KAAA,EAA0C;AAC5D,EAAA,OAAO,IAAI,IAAA,CAAK,KAAA,EAAO,CAAC,YAAA,CAAa,KAAK,CAAC,CAAC,CAAA;AAC9C;AAMO,SAAS,YAAY,KAAA,EAA0C;AACpE,EAAA,OAAO,IAAI,IAAA,CAAK,aAAA,EAAe,CAAC,YAAA,CAAa,KAAK,CAAC,CAAC,CAAA;AACtD;AAEO,SAAS,OAAO,KAAA,EAA0C;AAC/D,EAAA,OAAO,IAAI,IAAA,CAAK,QAAA,EAAU,CAAC,YAAA,CAAa,KAAK,CAAC,CAAC,CAAA;AACjD;AAMO,SAAS,OAAA,CACd,OACA,KAAA,EAC0B;AAC1B,EAAA,OAAO,IAAI,IAAA,CAAK,IAAA,EAAM,CAAC,YAAA,CAAa,KAAK,CAAA,EAAG,YAAA,CAAa,KAAK,CAAC,CAAC,CAAA;AAClE;AAMO,SAAS,IAAA,CAAK,MAAe,KAAA,EAA0C;AAC5E,EAAA,OAAO,IAAI,IAAA,CAAK,MAAA,EAAQ,CAAC,YAAA,CAAa,IAAI,CAAA,EAAG,YAAA,CAAa,KAAK,CAAC,CAAC,CAAA;AACnE;AAEO,SAAS,KAAA,CAAM,MAAe,KAAA,EAA0C;AAC7E,EAAA,OAAO,IAAI,IAAA,CAAK,OAAA,EAAS,CAAC,YAAA,CAAa,IAAI,CAAA,EAAG,YAAA,CAAa,KAAK,CAAC,CAAC,CAAA;AACpE;AAEO,SAAS,MAAM,GAAA,EAA0D;AAC9E,EAAA,OAAO,IAAI,IAAA,CAAK,OAAA,EAAS,CAAC,YAAA,CAAa,GAAG,CAAC,CAAC,CAAA;AAC9C;AAEO,SAAS,MAAM,GAAA,EAA0D;AAC9E,EAAA,OAAO,IAAI,IAAA,CAAK,OAAA,EAAS,CAAC,YAAA,CAAa,GAAG,CAAC,CAAC,CAAA;AAC9C;AAEO,SAAS,OAAO,GAAA,EAA0D;AAC/E,EAAA,OAAO,IAAI,IAAA,CAAK,QAAA,EAAU,CAAC,YAAA,CAAa,GAAG,CAAC,CAAC,CAAA;AAC/C;AASO,SAAS,UACX,IAAA,EAC6C;AAChD,EAAA,MAAM,aAAa,IAAA,CAAK,IAAA;AAAA,IACtB,CAAC,QACC,GAAA,KAAQ,IAAA,IACR,OAAO,GAAA,KAAQ,QAAA,IACd,IAA8B,OAAA,KAAY;AAAA,GAC/C;AACA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,IAAI,oBAAA,CAAqB,UAAA,CAAW,KAAK,CAAA;AAAA,EAClD;AACA,EAAA,OAAO,IAAI,IAAA;AAAA,IACT,QAAA;AAAA,IACA,KAAK,GAAA,CAAI,CAAC,GAAA,KAAQ,YAAA,CAAa,GAAG,CAAC;AAAA,GACrC;AACF;AAMO,SAAS,GAAA,CAAI,MAAe,KAAA,EAA4D;AAC7F,EAAA,OAAO,IAAI,IAAA,CAAK,KAAA,EAAO,CAAC,YAAA,CAAa,IAAI,CAAA,EAAG,YAAA,CAAa,KAAK,CAAC,CAAC,CAAA;AAGlE;AAEO,SAAS,QAAA,CAAS,MAAe,KAAA,EAAyC;AAC/E,EAAA,OAAO,IAAI,IAAA,CAAK,UAAA,EAAY,CAAC,YAAA,CAAa,IAAI,CAAA,EAAG,YAAA,CAAa,KAAK,CAAC,CAAC,CAAA;AACvE;AAEO,SAAS,QAAA,CAAS,MAAe,KAAA,EAAyC;AAC/E,EAAA,OAAO,IAAI,IAAA,CAAK,UAAA,EAAY,CAAC,YAAA,CAAa,IAAI,CAAA,EAAG,YAAA,CAAa,KAAK,CAAC,CAAC,CAAA;AACvE;AAEO,SAAS,MAAA,CAAO,MAAe,KAAA,EAAgD;AACpF,EAAA,OAAO,IAAI,IAAA,CAAK,QAAA,EAAU,CAAC,YAAA,CAAa,IAAI,CAAA,EAAG,YAAA,CAAa,KAAK,CAAC,CAAC,CAAA;AAGrE;AAEO,SAAS,QAAA,CACd,UACG,IAAA,EACc;AACjB,EAAA,OAAO,IAAI,IAAA;AAAA,IACT,UAAA;AAAA,IACA,CAAC,KAAA,EAAO,GAAG,IAAI,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,YAAA,CAAa,CAAC,CAAC;AAAA,GAC7C;AACF;AAIO,SAAS,YAAY,IAAA,EAAuC;AACjE,EAAA,IAAI,KAAK,MAAA,GAAS,CAAA,EAAG,MAAM,IAAI,MAAM,4CAA4C,CAAA;AACjF,EAAA,OAAO,IAAI,IAAA,CAAK,UAAA,EAAY,IAAA,CAAK,GAAA,CAAI,CAAC,KAAA,KAAU,YAAA,CAAa,KAAK,CAAC,CAAC,CAAA;AACtE;AAMO,SAAS,MAAM,GAAA,EAAiC;AACrD,EAAA,OAAO,IAAI,SAAA,CAAU,OAAA,EAAS,CAAC,YAAA,CAAa,GAAG,CAAC,CAAC,CAAA;AACnD;AAEO,SAAS,IAAI,GAAA,EAAoD;AACtE,EAAA,OAAO,IAAI,SAAA,CAAU,KAAA,EAAO,CAAC,YAAA,CAAa,GAAG,CAAC,CAAC,CAAA;AAGjD;AAEO,SAAS,IAAI,GAAA,EAAoD;AACtE,EAAA,OAAO,IAAI,SAAA,CAAU,KAAA,EAAO,CAAC,YAAA,CAAa,GAAG,CAAC,CAAC,CAAA;AAGjD;AAEO,SAAS,IAAI,GAAA,EAAyB;AAC3C,EAAA,OAAO,IAAI,SAAA,CAAU,KAAA,EAAO,CAAC,YAAA,CAAa,GAAG,CAAC,CAAC,CAAA;AACjD;AAEO,SAAS,IAAI,GAAA,EAAyB;AAC3C,EAAA,OAAO,IAAI,SAAA,CAAU,KAAA,EAAO,CAAC,YAAA,CAAa,GAAG,CAAC,CAAC,CAAA;AACjD;AAOO,IAAM,mBAAA,GAAsB;AAAA,EACjC,IAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF;AAGO,IAAM,SAAA,GAAY;AAAA;AAAA,EAEvB,IAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA;AAAA,EAEA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA;AAAA,EAEA,QAAA;AAAA,EACA,aAAA;AAAA;AAAA,EAEA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA;AAAA,EAEA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA;AAAA,EAEA,UAAA;AAAA,EACA,UAAA;AAAA;AAAA,EAEA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF;AAcO,IAAM,iBAAN,MAAmC;AAAA,EAIxC,YAA4BA,MAAAA,EAAgB;AAAhB,IAAA,IAAA,CAAA,KAAA,GAAAA,MAAAA;AAAA,EAAiB;AAAA,EAAjB,KAAA;AAAA,EAHnB,OAAA,GAAU,gBAAA;AAIrB;AAMO,IAAM,uBAAN,MAAyC;AAAA,EAI9C,YAA4BA,MAAAA,EAAgB;AAAhB,IAAA,IAAA,CAAA,KAAA,GAAAA,MAAAA;AAAA,EAAiB;AAAA,EAAjB,KAAA;AAAA,EAHnB,OAAA,GAAU,sBAAA;AAIrB;AAEO,IAAM,qBAAN,MAA4E;AAAA,EAKjF,YAA4BA,MAAAA,EAAgB;AAAhB,IAAA,IAAA,CAAA,KAAA,GAAAA,MAAAA;AAAA,EAAiB;AAAA,EAAjB,KAAA;AAAA,EAJnB,OAAA,GAAU,oBAAA;AAKrB;AAOO,SAAS,QAAQA,MAAAA,EAAgC;AACtD,EAAA,OAAO,IAAI,eAAeA,MAAK,CAAA;AACjC;AAEO,SAAS,YAAYA,MAAAA,EAAoC;AAC9D,EAAA,OAAO,IAAI,mBAAmBA,MAAK,CAAA;AACrC;;;ACnUA,SAAS,cAAc,KAAA,EAAwB;AAC7C,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AACjE,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEO,SAAS,gBAAA,CAAiB,KAAA,EAAgB,KAAA,GAAQ,OAAA,EAAiC;AACxF,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,WAAW,CAAA,EAAG;AAC/C,IAAA,MAAM,IAAI,gBAAgB,CAAA,EAAG,KAAK,4BAA4B,aAAA,CAAc,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,EACtF;AACA,EAAA,MAAM,CAAC,GAAA,EAAK,GAAG,CAAA,GAAI,KAAA;AACnB,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,OAAO,QAAQ,QAAA,EAAU;AACtD,IAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,EAAG,KAAK,CAAA,4BAAA,CAA8B,CAAA;AAAA,EAClE;AACA,EAAA,IAAI,CAAC,OAAO,QAAA,CAAS,GAAG,KAAK,CAAC,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA,EAAG;AAClD,IAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,EAAG,KAAK,CAAA,2BAAA,CAA6B,CAAA;AAAA,EACjE;AACA,EAAA,IAAI,GAAA,GAAM,IAAA,IAAQ,GAAA,GAAM,GAAA,EAAK;AAC3B,IAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,EAAG,KAAK,CAAA,6CAAA,EAAgD,GAAG,CAAA,CAAE,CAAA;AAAA,EACzF;AACA,EAAA,IAAI,GAAA,GAAM,GAAA,IAAO,GAAA,GAAM,EAAA,EAAI;AACzB,IAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,EAAG,KAAK,CAAA,0CAAA,EAA6C,GAAG,CAAA,CAAE,CAAA;AAAA,EACtF;AACF;AAEO,IAAM,cAAN,MAAkB;AAAA,EACd,MAAA;AAAA,EACA,SAAA;AAAA,EAET,WAAA,CACE,QAAA,EACA,MAAA,GAAuB,IAAI,YAAA,CAAa,QAAA,GAAW,CAAC,CAAA,EACpD,SAAA,GAA0B,IAAI,YAAA,CAAa,QAAA,GAAW,CAAC,CAAA,EACvD;AACA,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,QAAQ,CAAA,IAAK,WAAW,CAAA,EAAG;AAC/C,MAAA,MAAM,IAAI,WAAW,yCAAyC,CAAA;AAAA,IAChE;AACA,IAAA,IAAI,MAAA,CAAO,MAAA,GAAS,QAAA,GAAW,CAAA,EAAG;AAChC,MAAA,MAAM,IAAI,WAAW,+CAA+C,CAAA;AAAA,IACtE;AACA,IAAA,IAAI,SAAA,CAAU,MAAA,GAAS,QAAA,GAAW,CAAA,EAAG;AACnC,MAAA,MAAM,IAAI,WAAW,kDAAkD,CAAA;AAAA,IACzE;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,KAAA,IAAS,MAAM,CAAA,EAAG,GAAA,GAAM,UAAU,GAAA,EAAA,EAAO,IAAA,CAAK,QAAQ,GAAG,CAAA;AAAA,EAC3D;AAAA,EAEA,GAAA,CAAI,KAAa,KAAA,EAAoB;AACnC,IAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,IAAA,MAAM,cAAc,GAAA,GAAM,CAAA;AAC1B,IAAA,IAAA,CAAK,MAAA,CAAO,WAAW,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA;AAClC,IAAA,IAAA,CAAK,MAAA,CAAO,WAAA,GAAc,CAAC,CAAA,GAAI,MAAM,CAAC,CAAA;AACtC,IAAA,IAAA,CAAK,WAAW,GAAG,CAAA;AAAA,EACrB;AAAA,EAEA,IAAI,GAAA,EAAoB;AACtB,IAAA,MAAM,cAAc,GAAA,GAAM,CAAA;AAC1B,IAAA,OAAO,CAAC,IAAA,CAAK,MAAA,CAAO,WAAW,CAAA,IAAK,MAAA,CAAO,GAAA,EAAK,IAAA,CAAK,MAAA,CAAO,WAAA,GAAc,CAAC,CAAA,IAAK,OAAO,GAAG,CAAA;AAAA,EAC5F;AAAA,EAEA,QAAQ,GAAA,EAAmB;AACzB,IAAA,MAAM,cAAc,GAAA,GAAM,CAAA;AAC1B,IAAA,IAAA,CAAK,MAAA,CAAO,WAAW,CAAA,GAAI,MAAA,CAAO,GAAA;AAClC,IAAA,IAAA,CAAK,MAAA,CAAO,WAAA,GAAc,CAAC,CAAA,GAAI,MAAA,CAAO,GAAA;AACtC,IAAA,MAAM,aAAa,GAAA,GAAM,CAAA;AACzB,IAAA,IAAA,CAAK,SAAA,CAAU,UAAU,CAAA,GAAI,MAAA,CAAO,GAAA;AACpC,IAAA,IAAA,CAAK,SAAA,CAAU,UAAA,GAAa,CAAC,CAAA,GAAI,MAAA,CAAO,GAAA;AACxC,IAAA,IAAA,CAAK,SAAA,CAAU,UAAA,GAAa,CAAC,CAAA,GAAI,MAAA,CAAO,GAAA;AACxC,IAAA,IAAA,CAAK,SAAA,CAAU,UAAA,GAAa,CAAC,CAAA,GAAI,MAAA,CAAO,GAAA;AAAA,EAC1C;AAAA,EAEA,WAAW,GAAA,EAAmB;AAC5B,IAAA,MAAM,cAAc,GAAA,GAAM,CAAA;AAC1B,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,WAAW,KAAK,MAAA,CAAO,GAAA;AAC/C,IAAA,MAAM,MAAM,IAAA,CAAK,MAAA,CAAO,WAAA,GAAc,CAAC,KAAK,MAAA,CAAO,GAAA;AACnD,IAAA,MAAM,aAAa,GAAA,GAAM,CAAA;AACzB,IAAA,IAAA,CAAK,SAAA,CAAU,UAAU,CAAA,GAAI,GAAA;AAC7B,IAAA,IAAA,CAAK,SAAA,CAAU,UAAA,GAAa,CAAC,CAAA,GAAI,GAAA;AACjC,IAAA,IAAA,CAAK,SAAA,CAAU,UAAA,GAAa,CAAC,CAAA,GAAI,GAAA;AACjC,IAAA,IAAA,CAAK,SAAA,CAAU,UAAA,GAAa,CAAC,CAAA,GAAI,GAAA;AAAA,EACnC;AAAA,EAEA,IAAA,CAAK,SAAiB,KAAA,EAAqB;AACzC,IAAA,MAAM,YAAY,OAAA,GAAU,CAAA;AAC5B,IAAA,MAAM,UAAU,KAAA,GAAQ,CAAA;AACxB,IAAA,IAAA,CAAK,OAAO,OAAO,CAAA,GAAI,KAAK,MAAA,CAAO,SAAS,KAAK,MAAA,CAAO,GAAA;AACxD,IAAA,IAAA,CAAK,MAAA,CAAO,UAAU,CAAC,CAAA,GAAI,KAAK,MAAA,CAAO,SAAA,GAAY,CAAC,CAAA,IAAK,MAAA,CAAO,GAAA;AAChE,IAAA,MAAM,WAAW,OAAA,GAAU,CAAA;AAC3B,IAAA,MAAM,SAAS,KAAA,GAAQ,CAAA;AACvB,IAAA,IAAA,CAAK,UAAU,MAAM,CAAA,GAAI,KAAK,SAAA,CAAU,QAAQ,KAAK,MAAA,CAAO,GAAA;AAC5D,IAAA,IAAA,CAAK,SAAA,CAAU,SAAS,CAAC,CAAA,GAAI,KAAK,SAAA,CAAU,QAAA,GAAW,CAAC,CAAA,IAAK,MAAA,CAAO,GAAA;AACpE,IAAA,IAAA,CAAK,SAAA,CAAU,SAAS,CAAC,CAAA,GAAI,KAAK,SAAA,CAAU,QAAA,GAAW,CAAC,CAAA,IAAK,MAAA,CAAO,GAAA;AACpE,IAAA,IAAA,CAAK,SAAA,CAAU,SAAS,CAAC,CAAA,GAAI,KAAK,SAAA,CAAU,QAAA,GAAW,CAAC,CAAA,IAAK,MAAA,CAAO,GAAA;AAAA,EACtE;AACF,CAAA;;;AC5FO,IAAM,mBAAA,GAAsB,WAAA;AAEnC,SAAS,aAAa,KAAA,EAAwB;AAC5C,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AACjE,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEO,SAAS,eAAA,CAAgB,KAAA,EAAgB,KAAA,GAAQ,MAAA,EAA+B;AACrF,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,WAAW,CAAA,EAAG;AAC/C,IAAA,MAAM,IAAI,gBAAgB,CAAA,EAAG,KAAK,0CAA0C,YAAA,CAAa,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,EACnG;AACA,EAAA,MAAM,CAAC,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,GAAI,KAAA;AACjC,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK;AAAA,IAC1B,CAAC,QAAQ,IAAI,CAAA;AAAA,IACb,CAAC,QAAQ,IAAI,CAAA;AAAA,IACb,CAAC,QAAQ,IAAI,CAAA;AAAA,IACb,CAAC,QAAQ,IAAI;AAAA,GACf,EAAY;AACV,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,EAAG;AACxD,MAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,eAAA,CAAiB,CAAA;AAAA,IAC7D;AAAA,EACF;AACA,EAAA,IAAI,OAAO,IAAA,IAAQ,IAAA,GAAO,OAAO,IAAA,GAAO,IAAA,IAAQ,OAAO,GAAA,EAAK;AAC1D,IAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,EAAG,KAAK,CAAA,8CAAA,CAAgD,CAAA;AAAA,EACpF;AACA,EAAA,IAAI,OAAO,GAAA,IAAO,IAAA,GAAO,MAAM,IAAA,GAAO,GAAA,IAAO,OAAO,EAAA,EAAI;AACtD,IAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,EAAG,KAAK,CAAA,2CAAA,CAA6C,CAAA;AAAA,EACjF;AACA,EAAA,IAAI,OAAO,IAAA,EAAM;AACf,IAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,EAAG,KAAK,CAAA,iEAAA,CAAmE,CAAA;AAAA,EACvG;AACA,EAAA,IAAI,OAAO,IAAA,EAAM;AACf,IAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,EAAG,KAAK,CAAA,qBAAA,CAAuB,CAAA;AAAA,EAC3D;AACF;AAEO,SAAS,UAAU,KAAA,EAAoB;AAC5C,EAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,EAAA,MAAM,CAAC,GAAA,EAAK,GAAG,CAAA,GAAI,KAAA;AACnB,EAAA,OAAO,CAAC,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAC5B;AAEO,SAAS,iBAAA,CAAkB,GAAS,CAAA,EAAkB;AAC3D,EAAA,eAAA,CAAgB,GAAG,GAAG,CAAA;AACtB,EAAA,eAAA,CAAgB,GAAG,GAAG,CAAA;AACtB,EAAA,OAAO,CAAA,CAAE,CAAC,CAAA,IAAK,CAAA,CAAE,CAAC,CAAA,IAAK,CAAA,CAAE,CAAC,CAAA,IAAK,CAAA,CAAE,CAAC,KAAK,CAAA,CAAE,CAAC,KAAK,CAAA,CAAE,CAAC,KAAK,CAAA,CAAE,CAAC,CAAA,IAAK,CAAA,CAAE,CAAC,CAAA;AACpE;AAEO,SAAS,aAAA,CAAc,OAAa,KAAA,EAAsB;AAC/D,EAAA,eAAA,CAAgB,OAAO,OAAO,CAAA;AAC9B,EAAA,eAAA,CAAgB,OAAO,OAAO,CAAA;AAC9B,EAAA,OAAO,KAAA,CAAM,CAAC,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,IAAK,KAAA,CAAM,CAAC,KAAK,KAAA,CAAM,CAAC,KAAK,KAAA,CAAM,CAAC,KAAK,KAAA,CAAM,CAAC,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA;AACpG;AAEO,SAAS,uBAAA,CAAwB,OAAc,MAAA,EAAsB;AAC1E,EAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,CAAC,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,EAAG;AAC1D,IAAA,MAAM,IAAI,gBAAgB,8BAA8B,CAAA;AAAA,EAC1D;AACA,EAAA,IAAI,SAAS,CAAA,EAAG;AACd,IAAA,MAAM,IAAI,gBAAgB,4BAA4B,CAAA;AAAA,EACxD;AAEA,EAAA,MAAM,CAAC,GAAA,EAAK,GAAG,CAAA,GAAI,KAAA;AACnB,EAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,MAAA,GAAS,mBAAmB,CAAA;AAC9D,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,gBAAA,CAAiB,GAAG,CAAC,CAAA;AAC7C,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,GAAI,KAAA,GAChC,GAAA,GACA,gBAAA,CAAiB,MAAA,IAAU,mBAAA,GAAsB,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,CAAE,CAAA;AAEtE,EAAA,OAAO;AAAA,IACL,KAAA,CAAM,GAAA,GAAM,QAAA,EAAU,IAAA,EAAM,GAAG,CAAA;AAAA,IAC/B,KAAA,CAAM,GAAA,GAAM,QAAA,EAAU,GAAA,EAAK,EAAE,CAAA;AAAA,IAC7B,KAAA,CAAM,GAAA,GAAM,QAAA,EAAU,IAAA,EAAM,GAAG,CAAA;AAAA,IAC/B,KAAA,CAAM,GAAA,GAAM,QAAA,EAAU,GAAA,EAAK,EAAE;AAAA,GAC/B;AACF;AAEA,SAAS,KAAA,CAAM,KAAA,EAAeC,IAAAA,EAAaC,IAAAA,EAAqB;AAC9D,EAAA,OAAO,KAAK,GAAA,CAAIA,IAAAA,EAAK,KAAK,GAAA,CAAID,IAAAA,EAAK,KAAK,CAAC,CAAA;AAC3C;AAEO,SAAS,iBAAiB,OAAA,EAAyB;AACxD,EAAA,OAAQ,OAAA,GAAU,KAAK,EAAA,GAAM,GAAA;AAC/B;AAEO,SAAS,iBAAiB,OAAA,EAAyB;AACxD,EAAA,OAAQ,OAAA,GAAU,MAAO,IAAA,CAAK,EAAA;AAChC;;;AC3FO,SAAS,uBAAA,CAAwB,GAAU,CAAA,EAAkB;AAClE,EAAA,gBAAA,CAAiB,GAAG,GAAG,CAAA;AACvB,EAAA,gBAAA,CAAiB,GAAG,GAAG,CAAA;AAEvB,EAAA,MAAM,CAAC,IAAA,EAAM,IAAI,CAAA,GAAI,CAAA;AACrB,EAAA,MAAM,CAAC,IAAA,EAAM,IAAI,CAAA,GAAI,CAAA;AACrB,EAAA,OAAO,yBAAA,CAA0B,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AACzD;AAGO,SAAS,yBAAA,CACd,IAAA,EACA,IAAA,EACA,IAAA,EACA,IAAA,EACQ;AACR,EAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,IAAA,KAAS,IAAA,EAAM,OAAO,CAAA;AAE3C,EAAA,MAAM,IAAA,GAAO,iBAAiB,IAAI,CAAA;AAClC,EAAA,MAAM,IAAA,GAAO,iBAAiB,IAAI,CAAA;AAClC,EAAA,MAAM,IAAA,GAAO,gBAAA,CAAiB,IAAA,GAAO,IAAI,CAAA;AACzC,EAAA,MAAM,OAAA,GAAU,gBAAA,CAAiB,IAAA,GAAO,IAAI,CAAA;AAE5C,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,IAAA,GAAO,CAAC,CAAA;AACjC,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,OAAA,GAAU,CAAC,CAAA;AACvC,EAAA,MAAM,CAAA,GACJ,OAAA,GAAU,OAAA,GACV,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,GAAI,UAAA,GAAa,UAAA;AACjD,EAAA,OAAO,CAAA,GAAI,mBAAA,GAAsB,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,CAAA,GAAI,CAAC,CAAC,CAAA;AAC5E;;;ACjBA,SAAS,gBAAgB,KAAA,EAAwB;AAC/C,EAAA,IAAI,MAAM,OAAA,CAAQ,KAAK,GAAG,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AACrD,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,SAAA,CAAU,GAAU,CAAA,EAAmB;AAC9C,EAAA,OAAO,CAAA,CAAE,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,KAAK,CAAA,CAAE,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA;AACtC;AAEA,SAAS,WAAW,KAAA,EAAqB;AACvC,EAAA,OAAO,CAAC,KAAA,CAAM,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,CAAA;AAC5B;AAEA,SAAS,aAAA,CACP,KAAA,EACA,KAAA,EACA,cAAA,EACS;AACT,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzB,IAAA,MAAM,IAAI,gBAAgB,CAAA,EAAG,KAAK,oCAAoC,eAAA,CAAgB,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,EAChG;AAEA,EAAA,MAAM,OAAgB,EAAC;AACvB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,gBAAA,CAAiB,MAAM,CAAC,CAAA,EAAG,GAAG,KAAK,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AAC3C,IAAA,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,CAAC,CAAC,CAAC,CAAA;AAAA,EAChC;AAEA,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,IAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,EAAG,KAAK,CAAA,kCAAA,CAAoC,CAAA;AAAA,EACxE;AAEA,EAAA,MAAM,KAAA,GAAQ,KAAK,CAAC,CAAA;AACpB,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AACjC,EAAA,IAAI,CAAC,SAAA,CAAU,KAAA,EAAO,IAAI,CAAA,EAAG;AAC3B,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,EAAG,KAAK,CAAA,mDAAA,CAAqD,CAAA;AAAA,IACzF;AACA,IAAA,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,KAAK,CAAC,CAAA;AAAA,EAC7B;AAEA,EAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,IAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,EAAG,KAAK,CAAA,kCAAA,CAAoC,CAAA;AAAA,EACxE;AAEA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,iBACd,KAAA,EACA,OAAA,GAAiD,EAAC,EAClD,QAAQ,SAAA,EACC;AACT,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzB,IAAA,MAAM,IAAI,gBAAgB,CAAA,EAAG,KAAK,mCAAmC,eAAA,CAAgB,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,EAC/F;AACA,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,EAAG,KAAK,CAAA,+BAAA,CAAiC,CAAA;AAAA,EACrE;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,KAAmB,IAAA;AAClD,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,KAAM,aAAA,CAAc,IAAA,EAAM,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,CAAA,EAAK,cAAc,CAAC,CAAA;AACrF;AAUO,IAAM,gBAAN,MAAoB;AAAA,EAChB,MAAA;AAAA,EACT,UAAA;AAAA,EACA,MAAA;AAAA,EACS,SAAA;AAAA,EACT,MAAA,GAAS,CAAA;AAAA,EACT,UAAA,GAAa,CAAA;AAAA,EACL,YAAA;AAAA,EACA,cAAA;AAAA,EACS,cAAA;AAAA,EAEjB,WAAA,CAAY,QAAA,EAAkB,OAAA,GAAgC,EAAC,EAAG;AAChE,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,QAAQ,CAAA,IAAK,WAAW,CAAA,EAAG;AAC/C,MAAA,MAAM,IAAI,WAAW,yCAAyC,CAAA;AAAA,IAChE;AAEA,IAAA,MAAM,SAAS,OAAA,CAAQ,MAAA,IAAU,IAAI,UAAA,CAAW,WAAW,CAAC,CAAA;AAC5D,IAAA,IAAI,MAAA,CAAO,MAAA,GAAS,QAAA,GAAW,CAAA,EAAG;AAChC,MAAA,MAAM,IAAI,WAAW,iDAAiD,CAAA;AAAA,IACxE;AAEA,IAAA,MAAM,sBAAsB,OAAA,CAAQ,mBAAA,IAAuB,KAAK,GAAA,CAAI,EAAA,EAAI,WAAW,CAAC,CAAA;AACpF,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,mBAAmB,CAAA,IAAK,sBAAsB,CAAA,EAAG;AACrE,MAAA,MAAM,IAAI,WAAW,oDAAoD,CAAA;AAAA,IAC3E;AACA,IAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,UAAA,IAAc,IAAI,UAAA,CAAW,KAAK,GAAA,CAAI,CAAA,EAAG,mBAAmB,CAAA,GAAI,CAAC,CAAA;AAC5F,IAAA,IAAI,WAAW,MAAA,GAAS,IAAA,CAAK,IAAI,CAAA,EAAG,mBAAmB,IAAI,CAAA,EAAG;AAC5D,MAAA,MAAM,IAAI,WAAW,0DAA0D,CAAA;AAAA,IACjF;AAEA,IAAA,MAAM,wBAAwB,OAAA,CAAQ,qBAAA,IAAyB,KAAK,GAAA,CAAI,EAAA,EAAI,WAAW,CAAC,CAAA;AACxF,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,qBAAqB,CAAA,IAAK,wBAAwB,CAAA,EAAG;AACzE,MAAA,MAAM,IAAI,WAAW,sDAAsD,CAAA;AAAA,IAC7E;AAEA,IAAA,MAAM,YAAY,OAAA,CAAQ,SAAA,IAAa,IAAI,YAAA,CAAa,WAAW,CAAC,CAAA;AACpE,IAAA,IAAI,SAAA,CAAU,MAAA,GAAS,QAAA,GAAW,CAAA,EAAG;AACnC,MAAA,MAAM,IAAI,WAAW,oDAAoD,CAAA;AAAA,IAC3E;AAEA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,mBAAmB,CAAA;AACnD,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,qBAAqB,CAAA;AACvD,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,YAAA,CAAa,IAAA,CAAK,iBAAiB,CAAC,CAAA;AACtD,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,IAAA,CAAK,cAAA,GAAiB,QAAQ,cAAA,KAAmB,IAAA;AACjD,IAAA,KAAA,IAAS,MAAM,CAAA,EAAG,GAAA,GAAM,UAAU,GAAA,EAAA,EAAO,IAAA,CAAK,QAAQ,GAAG,CAAA;AAAA,EAC3D;AAAA,EAEA,GAAA,CAAI,KAAa,KAAA,EAAsB;AACrC,IAAA,MAAM,UAAU,gBAAA,CAAiB,KAAA,EAAO,EAAE,cAAA,EAAgB,IAAA,CAAK,gBAAgB,CAAA;AAC/E,IAAA,MAAM,YAAY,OAAA,CAAQ,MAAA;AAC1B,IAAA,MAAM,WAAA,GAAc,QAAQ,MAAA,CAAO,CAACE,MAAK,IAAA,KAASA,IAAAA,GAAM,IAAA,CAAK,MAAA,EAAQ,CAAC,CAAA;AACtE,IAAA,IAAA,CAAK,mBAAmB,SAAS,CAAA;AACjC,IAAA,IAAA,CAAK,qBAAqB,WAAW,CAAA;AAErC,IAAA,MAAM,YAAY,IAAA,CAAK,UAAA;AACvB,IAAA,IAAI,SAAS,IAAA,CAAK,MAAA;AAClB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,MAAA,MAAM,IAAA,GAAO,QAAQ,CAAC,CAAA;AACtB,MAAA,MAAM,WAAA,GAAc,MAAA;AACpB,MAAA,KAAA,MAAW,SAAS,IAAA,EAAM;AACxB,QAAA,MAAM,SAAS,MAAA,GAAS,CAAA;AACxB,QAAA,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA;AAC7B,QAAA,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,GAAI,MAAM,CAAC,CAAA;AACjC,QAAA,MAAA,EAAA;AAAA,MACF;AACA,MAAA,MAAM,UAAA,GAAA,CAAc,YAAY,CAAA,IAAK,CAAA;AACrC,MAAA,IAAA,CAAK,UAAA,CAAW,UAAU,CAAA,GAAI,WAAA;AAC9B,MAAA,IAAA,CAAK,UAAA,CAAW,UAAA,GAAa,CAAC,CAAA,GAAI,MAAA;AAAA,IACpC;AAEA,IAAA,IAAA,CAAK,UAAA,IAAc,SAAA;AACnB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,GAAM,CAAC,CAAA,GAAI,SAAA;AACvB,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,GAAM,CAAA,GAAI,CAAC,IAAI,IAAA,CAAK,UAAA;AAChC,IAAA,IAAA,CAAK,UAAA,CAAW,KAAK,OAAO,CAAA;AAAA,EAC9B;AAAA,EAEA,IAAI,GAAA,EAAsB;AACxB,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,GAAA,GAAM,CAAC,CAAA,IAAK,CAAA;AAC1C,IAAA,MAAM,UAAU,IAAA,CAAK,MAAA,CAAO,GAAA,GAAM,CAAA,GAAI,CAAC,CAAA,IAAK,CAAA;AAC5C,IAAA,MAAM,MAAiB,EAAC;AACxB,IAAA,KAAA,IAAS,IAAA,GAAO,SAAA,EAAW,IAAA,GAAO,OAAA,EAAS,IAAA,EAAA,EAAQ;AACjD,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,UAAA,CAAW,IAAA,GAAO,CAAC,CAAA,IAAK,CAAA;AACjD,MAAA,MAAM,YAAY,IAAA,CAAK,UAAA,CAAW,IAAA,GAAO,CAAA,GAAI,CAAC,CAAA,IAAK,CAAA;AACnD,MAAA,MAAM,UAAmB,EAAC;AAC1B,MAAA,KAAA,IAAS,MAAA,GAAS,WAAA,EAAa,MAAA,GAAS,SAAA,EAAW,MAAA,EAAA,EAAU;AAC3D,QAAA,MAAM,SAAS,MAAA,GAAS,CAAA;AACxB,QAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,UACX,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,IAAK,MAAA,CAAO,GAAA;AAAA,UAC9B,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,CAAC,KAAK,MAAA,CAAO;AAAA,SACnC,CAAA;AAAA,MACH;AACA,MAAA,GAAA,CAAI,KAAK,OAAO,CAAA;AAAA,IAClB;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,QAAQ,GAAA,EAAmB;AACzB,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,GAAM,CAAC,CAAA,GAAI,CAAA;AACvB,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,GAAM,CAAA,GAAI,CAAC,CAAA,GAAI,CAAA;AAC3B,IAAA,MAAM,aAAa,GAAA,GAAM,CAAA;AACzB,IAAA,IAAA,CAAK,SAAA,CAAU,UAAU,CAAA,GAAI,MAAA,CAAO,GAAA;AACpC,IAAA,IAAA,CAAK,SAAA,CAAU,UAAA,GAAa,CAAC,CAAA,GAAI,MAAA,CAAO,GAAA;AACxC,IAAA,IAAA,CAAK,SAAA,CAAU,UAAA,GAAa,CAAC,CAAA,GAAI,MAAA,CAAO,GAAA;AACxC,IAAA,IAAA,CAAK,SAAA,CAAU,UAAA,GAAa,CAAC,CAAA,GAAI,MAAA,CAAO,GAAA;AAAA,EAC1C;AAAA,EAEA,IAAA,CAAK,SAAiB,KAAA,EAAqB;AACzC,IAAA,MAAM,aAAa,OAAA,GAAU,CAAA;AAC7B,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,SAAA,CAAU,UAAU,CAAC,CAAA,EAAG;AAChD,MAAA,IAAA,CAAK,QAAQ,KAAK,CAAA;AAClB,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,OAAO,CAAC,CAAA;AAAA,EACnC;AAAA,EAEQ,mBAAmB,UAAA,EAA0B;AACnD,IAAA,MAAM,MAAA,GAAS,KAAK,UAAA,GAAa,UAAA;AACjC,IAAA,IAAI,MAAA,IAAU,KAAK,YAAA,EAAc;AACjC,IAAA,IAAI,eAAe,IAAA,CAAK,YAAA;AACxB,IAAA,OAAO,YAAA,GAAe,QAAQ,YAAA,IAAgB,CAAA;AAC9C,IAAA,MAAM,IAAA,GAAO,IAAI,UAAA,CAAW,YAAA,GAAe,CAAC,CAAA;AAC5C,IAAA,IAAA,CAAK,GAAA,CAAI,KAAK,UAAA,CAAW,QAAA,CAAS,GAAG,IAAA,CAAK,UAAA,GAAa,CAAC,CAAC,CAAA;AACzD,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAClB,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AAAA,EACtB;AAAA,EAEQ,qBAAqB,aAAA,EAA6B;AACxD,IAAA,MAAM,MAAA,GAAS,KAAK,MAAA,GAAS,aAAA;AAC7B,IAAA,IAAI,MAAA,IAAU,KAAK,cAAA,EAAgB;AACnC,IAAA,IAAI,eAAe,IAAA,CAAK,cAAA;AACxB,IAAA,OAAO,YAAA,GAAe,QAAQ,YAAA,IAAgB,CAAA;AAC9C,IAAA,MAAM,IAAA,GAAO,IAAI,YAAA,CAAa,YAAA,GAAe,CAAC,CAAA;AAC9C,IAAA,IAAA,CAAK,GAAA,CAAI,KAAK,MAAA,CAAO,QAAA,CAAS,GAAG,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,CAAA;AACjD,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,IAAA,CAAK,cAAA,GAAiB,YAAA;AAAA,EACxB;AAAA,EAEQ,UAAA,CAAW,KAAa,KAAA,EAAsB;AACpD,IAAA,IAAI,OAAO,MAAA,CAAO,iBAAA;AAClB,IAAA,IAAI,OAAO,MAAA,CAAO,iBAAA;AAClB,IAAA,IAAI,OAAO,MAAA,CAAO,iBAAA;AAClB,IAAA,IAAI,OAAO,MAAA,CAAO,iBAAA;AAClB,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,GAAG,CAAA,IAAK,IAAA,EAAM;AAC7B,QAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,GAAG,CAAA;AACzB,QAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,GAAG,CAAA;AACzB,QAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,GAAG,CAAA;AACzB,QAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,GAAG,CAAA;AAAA,MAC3B;AAAA,IACF;AACA,IAAA,MAAM,aAAa,GAAA,GAAM,CAAA;AACzB,IAAA,IAAA,CAAK,SAAA,CAAU,UAAU,CAAA,GAAI,IAAA;AAC7B,IAAA,IAAA,CAAK,SAAA,CAAU,UAAA,GAAa,CAAC,CAAA,GAAI,IAAA;AACjC,IAAA,IAAA,CAAK,SAAA,CAAU,UAAA,GAAa,CAAC,CAAA,GAAI,IAAA;AACjC,IAAA,IAAA,CAAK,SAAA,CAAU,UAAA,GAAa,CAAC,CAAA,GAAI,IAAA;AAAA,EACnC;AACF,CAAA;;;ACpPA,IAAM,OAAA,GAAU,KAAA;AAQT,SAAS,cAAA,CAAe,OAAc,OAAA,EAA2B;AACtE,EAAA,gBAAA,CAAiB,OAAO,OAAO,CAAA;AAC/B,EAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,OAAA,EAAS,IAAI,SAAS,CAAA;AACrD,EAAA,MAAM,QAAA,GAAW,MAAM,CAAC,CAAA;AACxB,EAAA,IAAI,aAAa,MAAA,IAAa,CAAC,YAAY,KAAA,EAAO,QAAQ,GAAG,OAAO,KAAA;AAEpE,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,IAAI,YAAY,KAAA,EAAO,KAAA,CAAM,CAAC,CAAE,GAAG,OAAO,KAAA;AAAA,EAC5C;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,WAAA,CAAY,OAAc,IAAA,EAAiC;AAClE,EAAA,IAAI,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG,OAAO,KAAA;AAE5B,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,GAAG,CAAA,EAAA,EAAK;AACxC,IAAA,IAAI,cAAA,CAAe,KAAA,EAAO,IAAA,CAAK,CAAC,CAAA,EAAI,KAAK,CAAA,GAAI,CAAC,CAAE,CAAA,EAAG,OAAO,IAAA;AAAA,EAC5D;AAEA,EAAA,MAAM,CAAC,EAAA,EAAI,EAAE,CAAA,GAAI,KAAA;AACjB,EAAA,IAAI,MAAA,GAAS,KAAA;AACb,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,GAAG,CAAA,GAAI,IAAA,CAAK,MAAA,EAAQ,CAAA,GAAI,CAAA,EAAA,EAAK;AAC7D,IAAA,MAAM,CAAC,EAAA,EAAI,EAAE,CAAA,GAAI,KAAK,CAAC,CAAA;AACvB,IAAA,MAAM,CAAC,EAAA,EAAI,EAAE,CAAA,GAAI,KAAK,CAAC,CAAA;AACvB,IAAA,MAAM,UAAA,GAAc,EAAA,GAAK,EAAA,KAAS,EAAA,GAAK,EAAA,IAClC,EAAA,GAAA,CAAO,EAAA,GAAK,EAAA,KAAO,EAAA,GAAK,EAAA,CAAA,IAAQ,EAAA,GAAK,EAAA,CAAA,GAAM,EAAA;AAChD,IAAA,IAAI,UAAA,WAAqB,CAAC,MAAA;AAAA,EAC5B;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,cAAA,CAAe,KAAA,EAAc,KAAA,EAAc,GAAA,EAAqB;AACvE,EAAA,MAAM,CAAC,EAAA,EAAI,EAAE,CAAA,GAAI,KAAA;AACjB,EAAA,MAAM,CAAC,EAAA,EAAI,EAAE,CAAA,GAAI,KAAA;AACjB,EAAA,MAAM,CAAC,EAAA,EAAI,EAAE,CAAA,GAAI,GAAA;AACjB,EAAA,MAAM,SAAS,EAAA,GAAK,EAAA,KAAO,KAAK,EAAA,CAAA,GAAA,CAAO,EAAA,GAAK,OAAO,EAAA,GAAK,EAAA,CAAA;AACxD,EAAA,IAAI,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,GAAI,SAAS,OAAO,KAAA;AAEtC,EAAA,OAAO,EAAA,IAAM,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,EAAE,CAAA,GAAI,OAAA,IAC3B,EAAA,IAAM,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,EAAE,CAAA,GAAI,WACzB,EAAA,IAAM,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,EAAE,CAAA,GAAI,OAAA,IACzB,EAAA,IAAM,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,EAAE,CAAA,GAAI,OAAA;AAChC;;;ACjDO,IAAM,eAAN,MAEP;AAAA,EACE,YAA6B,aAAA,EAAqC;AAArC,IAAA,IAAA,CAAA,aAAA,GAAA,aAAA;AAAA,EAAsC;AAAA,EAAtC,aAAA;AAAA,EAE7B,MAAA,CAAO,WAA2B,KAAA,EAA2B;AAC3D,IAAA,OAAO,KAAK,aAAA,CAAc,MAAA,CAAO,gBAAA,CAAiB,SAAS,GAAG,KAAK,CAAA;AAAA,EACrE;AAAA,EAEA,WAAW,OAAA,EAAwC;AACjD,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,kBAAA,CAAmB,OAAO,CAAA;AAAA,EACtD;AAAA,EAEA,mBAAmB,OAAA,EAAwC;AACzD,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,UAAA,CAAW,OAAO,CAAA;AAAA,EAC9C;AAAA,EAEA,IAAA,CAAK,CAAA,EAAW,IAAA,EAAgB,QAAA,EAAgD;AAC9E,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,YAAA,CAAa,CAAA,EAAG,MAAM,QAAQ,CAAA;AAAA,EAC1D;AAAA,EAEA,aAAA,CAAc,GAAW,QAAA,EAAgD;AACvE,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,mBAAA,CAAoB,CAAA,EAAG,QAAQ,CAAA;AAAA,EAC3D;AAAA,EAEA,YAAA,CAAa,CAAA,EAAW,IAAA,EAAgB,QAAA,EAAgD;AACtF,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,CAAA,EAAG,MAAM,QAAQ,CAAA;AAAA,EAClD;AAAA,EAEA,mBAAA,CAAoB,GAAW,QAAA,EAAgD;AAC7E,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,aAAA,CAAc,CAAA,EAAG,QAAQ,CAAA;AAAA,EACrD;AAAA,EAEA,IAAI,mBAAA,GAAmD;AACrD,IAAA,OAAO,KAAK,aAAA,CAAc,2BAAA;AAAA,EAC5B;AAAA,EAEA,IAAI,2BAAA,GAA2D;AAC7D,IAAA,OAAO,KAAK,aAAA,CAAc,mBAAA;AAAA,EAC5B;AAAA,EAEA,SAAS,SAAA,EAAoC;AAC3C,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,QAAA,CAAS,SAAS,CAAA;AAAA,EAC9C;AAAA,EAEA,aAAa,SAAA,EAAmC;AAC9C,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,YAAA,CAAa,SAAS,CAAA;AAAA,EAClD;AAAA,EAEA,sBAAsB,cAAA,EAAyC;AAC7D,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,qBAAA,CAAsB,cAAc,CAAA;AAAA,EAChE;AAAA,EAEA,iBAAiB,SAAA,EAAsC;AACrD,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,gBAAA,CAAiB,SAAS,CAAA;AAAA,EACtD;AAAA,EAEA,QAAA,GAAuB;AACrB,IAAA,OAAO,IAAA,CAAK,cAAc,QAAA,EAAS;AAAA,EACrC;AAAA,EAEA,GAAA,CAAI,KAAW,IAAA,EAAqB;AAClC,IAAA,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,GAAA,EAAK,IAAI,CAAA;AAAA,EAClC;AAAA,EAEA,MAAA,CAAO,KAAW,IAAA,EAAqB;AACrC,IAAA,IAAA,CAAK,aAAA,CAAc,MAAA,CAAO,GAAA,EAAK,IAAI,CAAA;AAAA,EACrC;AAAA,EAEA,MAAA,CAAO,GAAA,EAAW,OAAA,EAAkB,OAAA,EAAwB;AAC1D,IAAA,IAAA,CAAK,aAAA,CAAc,MAAA,CAAO,GAAA,EAAK,OAAA,EAAS,OAAO,CAAA;AAAA,EACjD;AAAA,EAEA,MAAM,OAAA,EAA0C;AAC9C,IAAA,IAAA,CAAK,aAAA,CAAc,MAAM,OAAO,CAAA;AAAA,EAClC;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,cAAc,KAAA,EAAM;AAAA,EAC3B;AAAA,EAEA,IAAI,QAAA,GAAmB;AACrB,IAAA,OAAO,KAAK,aAAA,CAAc,QAAA;AAAA,EAC5B;AAAA,EAEA,eAAe,KAAA,EAA2B;AACxC,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,cAAA,CAAe,KAAK,CAAA;AAAA,EAChD;AAAA,EAEA,cAAc,MAAA,EAAmC;AAC/C,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,aAAA,CAAc,MAAM,CAAA;AAAA,EAChD;AAAA,EAEA,IAAI,cAAA,GAA4B;AAC9B,IAAA,OAAO,KAAK,aAAA,CAAc,cAAA;AAAA,EAC5B;AAAA,EAEA,IAAI,YAAA,GAAwC;AAC1C,IAAA,OAAO,KAAK,aAAA,CAAc,YAAA;AAAA,EAC5B;AACF;AAEA,SAAS,iBAAiB,SAAA,EAA2C;AACnE,EAAA,QAAQ,SAAA;AAAW,IACjB,KAAK,IAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,KAAA;AACH,MAAA,OAAO,KAAA;AAAA,IACT,KAAK,IAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,KAAA;AACH,MAAA,OAAO,KAAA;AAAA,IACT;AACE,MAAA,OAAO,SAAA;AAAA;AAEb;;;ACzFA,IAAM,aAAA,mBAAgB,IAAI,GAAA,CAAoB,CAAC,IAAA,EAAM,MAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAI,CAAC,CAAA;AAE7E,SAAS,iBAAA,CACd,MAAA,EACA,SAAA,EACA,qBAAA,EACA,WACA,cAAA,EACoC;AACpC,EAAA,MAAM,SAAA,GAAY,mBAAmB,SAAS,CAAA;AAC9C,EAAA,IAAI,CAAC,oBAAA,CAAqB,SAAS,CAAA,EAAG,OAAO,MAAA;AAE7C,EAAA,MAAM,qBAAqB,SAAA,IAAa,IAAA;AACxC,EAAA,MAAM,uBAAA,GAA0B,qBAAA,CAAsB,qBAAA,EAAuB,SAAA,EAAW,cAAc,CAAA;AAEtG,EAAA,KAAA,MAAW,SAAA,IAAa,cAAA,CAAe,MAAM,CAAA,EAAG;AAC9C,IAAA,MAAM,KAAA,GAAQ,YAAY,SAAS,CAAA;AACnC,IAAA,IAAI,CAAC,KAAA,CAAM,QAAA,CAAS,kBAAkB,CAAA,EAAG;AACzC,IAAA,IAAI,CAAC,KAAA,CAAM,YAAA,CAAa,SAAS,CAAA,EAAG;AACpC,IAAA,IAAI,uBAAA,IAA2B,CAAC,KAAA,CAAM,qBAAA,CAAsB,uBAAuB,CAAA,EAAG;AAEtF,IAAA,IAAI,2BAA2B,CAAC,KAAA,CAAM,gBAAA,CAAiB,uBAAA,CAAwB,SAAS,CAAA,EAAG;AACzF,MAAA,OAAO,IAAI,aAAa,KAAK,CAAA;AAAA,IAC/B;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,6BAAA,CACd,UAAA,EACA,MAAA,EACA,OAAA,EACA,aACA,eAAA,EACuB;AACvB,EAAA,MAAM,SAAA,GAAY,kBAAA,CAAmB,UAAA,EAAY,MAAM,CAAA;AACvD,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO;AAAA,MACL,WAAA,EAAa,KAAA;AAAA,MACb,YAAA,sBAAkB,GAAA,EAAY;AAAA,MAC9B,SAAS,EAAC;AAAA,MACV,kBAAA,EAAoB;AAAA,KACtB;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAAgC;AAAA,IACpC,WAAA,EAAa,IAAA;AAAA,IACb,cAAc,SAAA,CAAU,IAAA;AAAA,IACxB,SAAS,SAAA,CAAU;AAAA,GACrB;AACA,EAAA,IAAI,SAAA,CAAU,uBAAuB,MAAA,EAAW;AAC9C,IAAA,MAAA,CAAO,qBAAqB,SAAA,CAAU,kBAAA;AAAA,EACxC;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,kBAAA,CACP,YACA,MAAA,EACiH;AACjH,EAAA,IAAI,CAAC,MAAA,CAAO,UAAU,CAAA,EAAG,OAAO,MAAA;AAEhC,EAAA,IAAI,UAAA,CAAW,SAAS,KAAA,EAAO;AAC7B,IAAA,MAAM,iBAAA,GAAoB,WAAW,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ,kBAAA,CAAmB,GAAA,EAAK,MAAM,CAAC,CAAA;AACtF,IAAA,MAAM,SAAA,GAAY,iBAAA,CAAkB,MAAA,CAAO,SAAS,CAAA;AACpD,IAAA,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AAEnC,IAAA,MAAM,CAAC,KAAA,EAAO,GAAG,IAAI,CAAA,GAAI,SAAA;AACzB,IAAA,IAAI,IAAA,GAAO,IAAI,GAAA,CAAI,KAAA,CAAO,IAAI,CAAA;AAC9B,IAAA,KAAA,MAAW,SAAS,IAAA,EAAM,IAAA,GAAO,aAAA,CAAc,IAAA,EAAM,MAAM,IAAI,CAAA;AAE/D,IAAA,MAAM,YAAA,GAAe,UAAA,CAAW,IAAA,CAAK,MAAA,CAAO,CAAC,MAAM,KAAA,KAAU,iBAAA,CAAkB,KAAK,CAAA,KAAM,MAAS,CAAA;AACnG,IAAA,MAAM,kBAAA,GAAqB,YAAA,CAAa,MAAA,KAAW,CAAA,GAC/C,SACA,YAAA,CAAa,MAAA,KAAW,CAAA,GACtB,YAAA,CAAa,CAAC,CAAA,GACd,IAAI,IAAA,CAAK,OAAO,YAAY,CAAA;AAElC,IAAA,MAAM,MAAA,GAA8G;AAAA,MAClH,IAAA;AAAA,MACA,SAAS,SAAA,CAAU,OAAA,CAAQ,CAAC,KAAA,KAAU,MAAM,OAAO;AAAA,KACrD;AACA,IAAA,IAAI,uBAAuB,MAAA,EAAW;AACpC,MAAA,MAAA,CAAO,kBAAA,GAAqB,kBAAA;AAAA,IAC9B;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,UAAA,CAAW,SAAS,IAAA,EAAM;AAC5B,IAAA,MAAM,iBAAA,GAAoB,WAAW,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ,kBAAA,CAAmB,GAAA,EAAK,MAAM,CAAC,CAAA;AACtF,IAAA,IAAI,iBAAA,CAAkB,WAAW,CAAA,IAAK,iBAAA,CAAkB,KAAK,CAAC,KAAA,KAAU,KAAA,KAAU,MAAS,CAAA,EAAG;AAC5F,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,IAAA,MAAM,UAAyC,EAAC;AAChD,IAAA,KAAA,MAAW,SAAS,iBAAA,EAA2F;AAC7G,MAAA,KAAA,MAAW,GAAA,IAAO,KAAA,CAAM,IAAA,EAAM,IAAA,CAAK,IAAI,GAAG,CAAA;AAC1C,MAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,KAAA,CAAM,OAAO,CAAA;AAAA,IAC/B;AACA,IAAA,OAAO,EAAE,MAAM,OAAA,EAAQ;AAAA,EACzB;AAEA,EAAA,IAAI,CAAC,aAAA,CAAc,GAAA,CAAI,UAAA,CAAW,IAAsB,GAAG,OAAO,MAAA;AAClE,EAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,UAAA,EAAY,MAAM,CAAA;AACrD,EAAA,OAAO,MAAA,GAAS,EAAE,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,SAAS,CAAC,MAAA,CAAO,KAAK,CAAA,EAAE,GAAI,MAAA;AACnE;AAEA,SAAS,mBAAA,CACP,YACA,MAAA,EACkE;AAClE,EAAA,MAAM,YAAY,UAAA,CAAW,IAAA;AAE7B,EAAA,IAAI,cAAc,IAAA,EAAM;AACtB,IAAA,MAAM,KAAA,GAAQ,sBAAA,CAAuB,UAAA,CAAW,IAAA,CAAK,CAAC,CAAC,CAAA;AACvD,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,UAAA,CAAW,IAAA,CAAK,CAAC,CAAC,CAAA;AAC9C,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,MAAM,OAAA,CAAQ,MAAM,GAAG,OAAO,MAAA;AAC7C,IAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,MAAA,EAAQ,KAAA,EAAO,QAAQ,IAAI,CAAA;AAC3D,IAAA,OAAO,KAAA,GAAQ,EAAE,IAAA,EAAM,KAAA,CAAM,OAAO,IAAA,EAAM,MAAM,CAAA,EAAG,KAAA,EAAM,GAAI,MAAA;AAAA,EAC/D;AAEA,EAAA,MAAM,WAAA,GAAc,sBAAA,CAAuB,UAAA,CAAW,IAAA,CAAK,CAAC,CAAC,CAAA;AAC7D,EAAA,MAAM,WAAA,GAAc,YAAA,CAAa,UAAA,CAAW,IAAA,CAAK,CAAC,CAAC,CAAA;AACnD,EAAA,IAAI,WAAA,IAAe,gBAAgB,UAAA,EAAY;AAC7C,IAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,MAAA,EAAQ,WAAA,EAAa,aAAa,SAAS,CAAA;AAC3E,IAAA,OAAO,KAAA,GAAQ,EAAE,IAAA,EAAM,KAAA,CAAM,OAAO,SAAA,EAAW,WAAW,CAAA,EAAG,KAAA,EAAM,GAAI,MAAA;AAAA,EACzE;AAEA,EAAA,MAAM,YAAA,GAAe,sBAAA,CAAuB,UAAA,CAAW,IAAA,CAAK,CAAC,CAAC,CAAA;AAC9D,EAAA,MAAM,YAAA,GAAe,YAAA,CAAa,UAAA,CAAW,IAAA,CAAK,CAAC,CAAC,CAAA;AACpD,EAAA,IAAI,YAAA,IAAgB,iBAAiB,UAAA,EAAY;AAC/C,IAAA,MAAM,iBAAA,GAAoB,2BAA2B,SAAS,CAAA;AAC9D,IAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,MAAA,EAAQ,YAAA,EAAc,cAAc,iBAAiB,CAAA;AACrF,IAAA,OAAO,KAAA,GAAQ,EAAE,IAAA,EAAM,KAAA,CAAM,OAAO,iBAAA,EAAmB,YAAY,CAAA,EAAG,KAAA,EAAM,GAAI,MAAA;AAAA,EAClF;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,UAAU,eACR,MAAA,EACiD;AACjD,EAAA,IAAI,uBAAA,CAAwB,MAAM,CAAA,EAAG;AACnC,IAAA,OAAO,MAAA,CAAO,QAAQ,MAAA,EAAO;AAC7B,IAAA;AAAA,EACF;AACA,EAAA,OAAO,OAAO,MAAA,EAAO;AACvB;AAEA,SAAS,wBACP,MAAA,EACiG;AACjG,EAAA,OAAO,SAAA,IAAa,MAAA;AACtB;AAEA,SAAS,YAA8B,SAAA,EAA0E;AAC/G,EAAA,OAAO,WAAA,CAAY,SAAS,CAAA,GAAI,SAAA,CAAU,KAAA,GAAQ,SAAA;AACpD;AAEA,SAAS,YAA8B,SAAA,EAA6E;AAClH,EAAA,OAAO,OAAO,SAAA,KAAc,QAAA,IAAY,SAAA,KAAc,QAAQ,OAAA,IAAW,SAAA;AAC3E;AAEA,SAAS,mBAAmB,SAAA,EAAkD;AAC5E,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,GAAI,SAAA,GAAY,UAAU,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AACnF;AAEA,SAAS,qBAAqB,IAAA,EAA8B;AAC1D,EAAA,OAAO,IAAA,CAAK,SAAS,CAAA,IAAK,CAAC,KAAK,CAAC,CAAA,CAAG,WAAW,GAAG,CAAA;AACpD;AAEA,SAAS,qBAAA,CACP,qBAAA,EACA,SAAA,EACA,cAAA,EAC4B;AAC5B,EAAA,IAAI,gBAAgB,OAAO,cAAA;AAC3B,EAAA,IAAI,SAAA,KAAc,QAAW,OAAO,MAAA;AACpC,EAAA,OAAO,gBAAA,CAAiB,qBAAqB,CAAA,GAAI,qBAAA,GAAwB,MAAA;AAC3E;AAEA,SAAS,iBAAiB,KAAA,EAAyC;AACjE,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,KAAA;AACxD,EAAA,MAAM,SAAA,GAAY,KAAA;AAClB,EAAA,OAAA,CACG,SAAA,CAAU,SAAA,KAAc,KAAA,IAAS,SAAA,CAAU,cAAc,MAAA,MACzD,SAAA,CAAU,KAAA,KAAU,OAAA,IAAW,SAAA,CAAU,KAAA,KAAU,MAAA,CAAA,IACpD,OAAO,UAAU,UAAA,KAAe,QAAA;AAEpC;AAEA,SAAS,uBAAuB,UAAA,EAAoE;AAClG,EAAA,IAAI,CAAC,YAAY,OAAO,MAAA;AACxB,EAAA,IAAI,UAAA,YAAsB,OAAA,EAAS,OAAO,UAAA,CAAW,IAAA;AACrD,EAAA,IAAI,gBAAA,CAAiB,UAAU,CAAA,IAAM,UAAA,CAAkC,SAAS,KAAA,EAAO;AACrF,IAAA,OAAQ,UAAA,CAAkC,IAAA;AAAA,EAC5C;AACA,EAAA,OAAO,MAAA;AACT;AAEA,IAAM,UAAA,0BAAoB,YAAY,CAAA;AAEtC,SAAS,aAAa,UAAA,EAAsE;AAC1F,EAAA,IAAI,CAAC,YAAY,OAAO,UAAA;AACxB,EAAA,IAAI,UAAA,YAAsB,KAAA,EAAO,OAAO,UAAA,CAAW,KAAA;AACnD,EAAA,IAAI,gBAAA,CAAiB,UAAU,CAAA,IAAM,UAAA,CAAkC,SAAS,KAAA,EAAO;AACrF,IAAA,OAAQ,UAAA,CAAgC,KAAA;AAAA,EAC1C;AACA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,OAAO,UAAA,EAAiD;AAC/D,EAAA,OAAO,sBAAsB,IAAA,IAAS,gBAAA,CAAiB,UAAU,CAAA,IAAM,WAAkC,IAAA,KAAS,MAAA;AACpH;AAEA,SAAS,2BAA2B,SAAA,EAA2C;AAC7E,EAAA,QAAQ,SAAA;AAAW,IACjB,KAAK,IAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,KAAA;AACH,MAAA,OAAO,KAAA;AAAA,IACT,KAAK,IAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,KAAA;AACH,MAAA,OAAO,KAAA;AAAA,IACT;AACE,MAAA,OAAO,SAAA;AAAA;AAEb;AAEA,SAAS,aAAA,CAAc,MAAmB,KAAA,EAAiC;AACzE,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAY;AAC/B,EAAA,MAAM,CAAC,KAAA,EAAO,KAAK,CAAA,GAAI,KAAK,IAAA,IAAQ,KAAA,CAAM,IAAA,GAAO,CAAC,IAAA,EAAM,KAAK,CAAA,GAAI,CAAC,OAAO,IAAI,CAAA;AAC7E,EAAA,KAAA,MAAW,SAAS,KAAA,EAAO;AACzB,IAAA,IAAI,MAAM,GAAA,CAAI,KAAK,CAAA,EAAG,MAAA,CAAO,IAAI,KAAK,CAAA;AAAA,EACxC;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,UAAa,KAAA,EAAkC;AACtD,EAAA,OAAO,KAAA,KAAU,MAAA;AACnB;;;ACvPA,SAAS,OAAA,CAAQ,UAA6B,GAAA,EAAsB;AAClE,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,GAAA,KAAQ,CAAC,CAAA,IAAK,CAAA;AACpC,EAAA,OAAA,CAAQ,IAAA,GAAQ,CAAA,KAAM,GAAA,GAAM,CAAA,CAAA,MAAS,CAAA;AACvC;AAQO,IAAM,kBAAA,GAAN,cAAiC,KAAA,CAAM;AAAC,CAAA;AAQxC,SAAS,aAAA,CACd,MACA,UAAA,EACgB;AAChB,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,EAAE,IAAA,EAAM,MAAM,MAAM,OAAA,kBAAS,IAAI,KAAI,EAAE;AAAA,EAChD;AACA,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,MAAM,IAAA,GAAO,WAAA,CAAY,IAAA,EAAM,UAAA,EAAY,IAAI,CAAA;AAC/C,EAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAK;AAC/B;AAEA,SAAS,WAAA,CACP,IAAA,EACA,UAAA,EACA,IAAA,EACS;AACT,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,KAAA,EAAO;AAEV,MAAA,MAAM,EAAA,GAAK,UAAA,CAAW,IAAA,EAAM,UAAA,EAAY,IAAI,CAAA;AAC5C,MAAA,IAAI,EAAA,CAAG,QAAA,KAAa,cAAA,CAAe,IAAA,EAAM;AACvC,QAAA,MAAM,IAAI,kBAAA;AAAA,UACR,CAAA,YAAA,EAAe,KAAK,IAAI,CAAA,2CAAA;AAAA,SAC1B;AAAA,MACF;AACA,MAAA,MAAM,SAAS,EAAA,CAAG,MAAA;AAClB,MAAA,MAAM,WAAW,EAAA,CAAG,QAAA;AACpB,MAAA,OAAO,CAAC,GAAA,KAAQ;AACd,QAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,EAAU,GAAG,GAAG,OAAO,KAAA;AACpC,QAAA,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA,IAAK,CAAA,MAAO,CAAA;AAAA,MAChC,CAAA;AAAA,IACF;AAAA,IACA,KAAK,KAAA,EAAO;AACV,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAC,MAAM,WAAA,CAAY,CAAA,EAAG,UAAA,EAAY,IAAI,CAAC,CAAA;AACtE,MAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAO,MAAM,IAAA;AACxC,MAAA,OAAO,CAAC,GAAA,KAAQ;AACd,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AACxC,UAAA,IAAI,CAAC,QAAA,CAAS,CAAC,CAAA,CAAG,GAAG,GAAG,OAAO,KAAA;AAAA,QACjC;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAA;AAAA,IACF;AAAA,IACA,KAAK,IAAA,EAAM;AACT,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAC,MAAM,WAAA,CAAY,CAAA,EAAG,UAAA,EAAY,IAAI,CAAC,CAAA;AACtE,MAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAO,MAAM,KAAA;AACxC,MAAA,OAAO,CAAC,GAAA,KAAQ;AACd,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AACxC,UAAA,IAAI,QAAA,CAAS,CAAC,CAAA,CAAG,GAAG,GAAG,OAAO,IAAA;AAAA,QAChC;AACA,QAAA,OAAO,KAAA;AAAA,MACT,CAAA;AAAA,IACF;AAAA,IACA,KAAK,KAAA,EAAO;AACV,MAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,IAAA,CAAK,GAAA,EAAK,YAAY,IAAI,CAAA;AACpD,MAAA,OAAO,CAAC,GAAA,KAAQ,CAAC,KAAA,CAAM,GAAG,CAAA;AAAA,IAC5B;AAAA,IACA,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,EAAA,GAAK,UAAA,CAAW,IAAA,CAAK,GAAA,EAAK,YAAY,IAAI,CAAA;AAChD,MAAA,MAAM,WAAW,EAAA,CAAG,QAAA;AACpB,MAAA,IAAI,CAAC,QAAA,EAAU;AAEb,QAAA,OAAO,IAAA,CAAK,OAAA,GAAU,MAAM,IAAA,GAAO,MAAM,KAAA;AAAA,MAC3C;AACA,MAAA,IAAI,KAAK,OAAA,EAAS,OAAO,CAAC,GAAA,KAAQ,OAAA,CAAQ,UAAU,GAAG,CAAA;AACvD,MAAA,OAAO,CAAC,GAAA,KAAQ,CAAC,OAAA,CAAQ,UAAU,GAAG,CAAA;AAAA,IACxC;AAAA,IACA,KAAK,IAAA,EAAM;AACT,MAAA,MAAM,KAAA,GAAQ,KAAK,MAAA,CAAO,GAAA;AAAA,QAAI,CAAC,KAAA,KAC7B,UAAA;AAAA,UACE,IAAA;AAAA,UACA,IAAA,CAAK,GAAA;AAAA,UACL,EAAE,IAAA,EAAM,KAAA,EAAO,KAAA,EAAM;AAAA,UACrB,UAAA;AAAA,UACA;AAAA;AACF,OACF;AACA,MAAA,OAAO,CAAC,GAAA,KAAQ;AACd,QAAA,KAAA,MAAW,QAAQ,KAAA,EAAO,IAAI,IAAA,CAAK,GAAG,GAAG,OAAO,IAAA;AAChD,QAAA,OAAO,KAAA;AAAA,MACT,CAAA;AAAA,IACF;AAAA,IACA,KAAK,KAAA;AACH,MAAA,OAAO,UAAA,CAAW,KAAK,EAAA,EAAI,IAAA,CAAK,MAAM,IAAA,CAAK,KAAA,EAAO,YAAY,IAAI,CAAA;AAAA,IACpE,KAAK,KAAA;AACH,MAAA,OAAO,aAAA,CAAc,IAAA,EAAM,UAAA,EAAY,IAAI,CAAA;AAAA;AAEjD;AAEA,SAAS,UAAA,CACP,GAAA,EACA,UAAA,EACA,IAAA,EACY;AACZ,EAAA,MAAM,EAAA,GAAK,UAAA,CAAW,GAAA,CAAI,GAAA,CAAI,IAAI,CAAA;AAClC,EAAA,IAAI,CAAC,IAAI,MAAM,IAAI,mBAAmB,CAAA,gBAAA,EAAmB,GAAA,CAAI,IAAI,CAAA,CAAA,CAAG,CAAA;AACpE,EAAA,IAAA,CAAK,GAAA,CAAI,IAAI,IAAI,CAAA;AACjB,EAAA,OAAO,EAAA;AACT;AAEA,SAAS,UAAA,CACP,EAAA,EACA,IAAA,EACA,KAAA,EACA,YACA,IAAA,EACS;AAGT,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,KAAA,IAAS,KAAA,CAAM,SAAS,KAAA,EAAO;AAC/C,IAAA,GAAA,GAAM,IAAA;AACN,IAAA,OAAA,GAAU,KAAA,CAAM,KAAA;AAChB,IAAA,OAAA,GAAU,KAAA;AAAA,EACZ,WAAW,IAAA,CAAK,IAAA,KAAS,KAAA,IAAS,KAAA,CAAM,SAAS,KAAA,EAAO;AACtD,IAAA,GAAA,GAAM,KAAA;AACN,IAAA,OAAA,GAAU,IAAA,CAAK,KAAA;AACf,IAAA,OAAA,GAAU,IAAA;AAAA,EACZ,CAAA,MAAO;AACL,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAGA,EAAA,MAAM,SAAA,GAAY,OAAA,GAAU,OAAA,CAAQ,EAAE,CAAA,GAAI,EAAA;AAC1C,EAAA,OAAO,SAAS,SAAA,EAAW,UAAA,CAAW,KAAK,UAAA,EAAY,IAAI,GAAG,OAAO,CAAA;AACvE;AAEA,SAAS,QAAQ,EAAA,EAA2D;AAC1E,EAAA,QAAQ,EAAA;AAAI,IACV,KAAK,IAAA;AAAA,IACL,KAAK,KAAA;AACH,MAAA,OAAO,EAAA;AAAA,IACT,KAAK,IAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,KAAA;AACH,MAAA,OAAO,KAAA;AAAA,IACT,KAAK,IAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,KAAA;AACH,MAAA,OAAO,KAAA;AAAA;AAEb;AAEA,SAAS,QAAA,CACP,EAAA,EACA,EAAA,EACA,OAAA,EACS;AACT,EAAA,MAAM,OAAO,EAAA,CAAG,QAAA;AAChB,EAAA,MAAM,WAAW,EAAA,CAAG,QAAA;AAGpB,EAAA,IAAI,iBAAA,CAAkB,IAAI,CAAA,EAAG;AAC3B,IAAA,MAAM,SAAS,EAAA,CAAG,MAAA;AAClB,IAAA,IAAI,YAAY,IAAA,EAAM;AAIpB,MAAA,IAAI,OAAO,IAAA,EAAM;AACf,QAAA,IAAI,CAAC,QAAA,EAAU,OAAO,MAAM,KAAA;AAC5B,QAAA,OAAO,CAAC,GAAA,KAAQ,CAAC,OAAA,CAAQ,UAAU,GAAG,CAAA;AAAA,MACxC;AACA,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,IAAI,CAAC,QAAA,EAAU,OAAO,MAAM,IAAA;AAC5B,QAAA,OAAO,CAAC,GAAA,KAAQ,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA;AAAA,MACvC;AACA,MAAA,OAAO,MAAM,KAAA;AAAA,IACf;AACA,IAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,CAAA,QAAA,EAAW,EAAA,CAAG,IAAI,CAAA,+BAAA,EAAkC,OAAO,OAAO,CAAA;AAAA,OACpE;AAAA,IACF;AACA,IAAA,MAAMC,IAAAA,GAAM,OAAA;AACZ,IAAA,MAAM,GAAA,GAAM,WAAW,EAAE,CAAA;AACzB,IAAA,IAAI,CAAC,QAAA,EAAU,OAAO,CAAC,GAAA,KAAQ,IAAI,MAAA,CAAO,GAAG,CAAA,IAAK,CAAA,EAAGA,IAAG,CAAA;AACxD,IAAA,OAAO,CAAC,GAAA,KAAQ,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA,IAAK,GAAA,CAAI,MAAA,CAAO,GAAG,CAAA,IAAK,CAAA,EAAGA,IAAG,CAAA;AAAA,EACrE;AAEA,EAAA,IAAI,IAAA,KAAS,eAAe,IAAA,EAAM;AAChC,IAAA,MAAM,SAAS,EAAA,CAAG,MAAA;AAClB,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,IAAI,OAAO,IAAA,EAAM;AACf,QAAA,IAAI,CAAC,QAAA,EAAU,OAAO,MAAM,KAAA;AAC5B,QAAA,OAAO,CAAC,GAAA,KAAQ,CAAC,OAAA,CAAQ,UAAU,GAAG,CAAA;AAAA,MACxC;AACA,MAAA,IAAI,EAAA,KAAO,KAAA,EAAO,OAAO,QAAA,GAAW,CAAC,QAAQ,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA,GAAI,MAAM,IAAA;AAC5E,MAAA,OAAO,MAAM,KAAA;AAAA,IACf;AACA,IAAA,IAAI,OAAO,YAAY,SAAA,EAAW;AAChC,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,CAAA,QAAA,EAAW,EAAA,CAAG,IAAI,CAAA,+BAAA,EAAkC,OAAO,OAAO,CAAA;AAAA,OACpE;AAAA,IACF;AACA,IAAA,MAAM,OAAA,GAAU,UAAU,CAAA,GAAI,CAAA;AAC9B,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAI,CAAC,UAAU,OAAO,CAAC,SAAS,MAAA,CAAO,GAAG,KAAK,CAAA,MAAO,OAAA;AACtD,MAAA,OAAO,CAAC,QAAQ,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA,IAAA,CAAM,MAAA,CAAO,GAAG,CAAA,IAAK,CAAA,MAAO,OAAA;AAAA,IACnE;AACA,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,IAAI,CAAC,UAAU,OAAO,CAAC,SAAS,MAAA,CAAO,GAAG,KAAK,CAAA,MAAO,OAAA;AACtD,MAAA,OAAO,CAAC,QAAQ,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA,IAAA,CAAM,MAAA,CAAO,GAAG,CAAA,IAAK,CAAA,MAAO,OAAA;AAAA,IACnE;AACA,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,yCAAyC,EAAE,CAAA,CAAA;AAAA,KAC7C;AAAA,EACF;AAEA,EAAA,IAAI,IAAA,KAAS,cAAA,CAAe,KAAA,IAAS,IAAA,KAAS,eAAe,MAAA,EAAQ;AACnE,IAAA,MAAM,SAAS,EAAA,CAAG,MAAA;AAClB,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,IAAI,EAAA,KAAO,IAAA,EAAM,OAAO,QAAA,GAAW,CAAC,GAAA,KAAQ,CAAC,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA,GAAI,MAAM,KAAA;AAC5E,MAAA,IAAI,EAAA,KAAO,KAAA,EAAO,OAAO,QAAA,GAAW,CAAC,QAAQ,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA,GAAI,MAAM,IAAA;AAC5E,MAAA,OAAO,MAAM,KAAA;AAAA,IACf;AACA,IAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,MAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,MAAA,CAAO,SAAA,CAAU,OAAO,CAAA,EAAG;AAC5D,QAAA,OAAA,GAAU,OAAO,OAAO,CAAA;AAAA,MAC1B,CAAA,MAAO;AACL,QAAA,MAAM,IAAI,kBAAA;AAAA,UACR,CAAA,QAAA,EAAW,EAAA,CAAG,IAAI,CAAA,8BAAA,EAAiC,OAAO,OAAO,CAAA;AAAA,SACnE;AAAA,MACF;AAAA,IACF;AACA,IAAA,MAAMA,IAAAA,GAAM,OAAA;AACZ,IAAA,MAAM,GAAA,GAAM,UAAU,EAAE,CAAA;AACxB,IAAA,IAAI,CAAC,UAAU,OAAO,CAAC,QAAQ,GAAA,CAAI,MAAA,CAAO,GAAG,CAAA,EAAaA,IAAG,CAAA;AAC7D,IAAA,OAAO,CAAC,GAAA,KAAQ,OAAA,CAAQ,QAAA,EAAU,GAAG,KAAK,GAAA,CAAI,MAAA,CAAO,GAAG,CAAA,EAAaA,IAAG,CAAA;AAAA,EAC1E;AAEA,EAAA,IAAI,IAAA,KAAS,eAAe,QAAA,EAAU;AAEpC,IAAA,MAAM,OAAO,EAAA,CAAG,UAAA;AAChB,IAAA,MAAM,QAAQ,EAAA,CAAG,MAAA;AACjB,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,IAAI,EAAA,KAAO,IAAA,EAAM,OAAO,QAAA,GAAW,CAAC,GAAA,KAAQ,CAAC,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA,GAAI,MAAM,KAAA;AAC5E,MAAA,IAAI,EAAA,KAAO,KAAA,EAAO,OAAO,QAAA,GAAW,CAAC,QAAQ,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA,GAAI,MAAM,IAAA;AAC5E,MAAA,OAAO,MAAM,KAAA;AAAA,IACf;AACA,IAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,CAAA,QAAA,EAAW,EAAA,CAAG,IAAI,CAAA,8BAAA,EAAiC,OAAO,OAAO,CAAA;AAAA,OACnE;AAAA,IACF;AACA,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AACrC,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAI,cAAc,MAAA,EAAW;AAE3B,QAAA,OAAO,MAAM,KAAA;AAAA,MACf;AACA,MAAA,IAAI,CAAC,QAAA,EAAU,OAAO,CAAC,GAAA,KAAQ,KAAA,CAAM,GAAG,CAAA,KAAM,SAAA;AAC9C,MAAA,OAAO,CAAC,QAAQ,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA,IAAK,KAAA,CAAM,GAAG,CAAA,KAAM,SAAA;AAAA,IAC3D;AACA,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,QAAA,IAAI,CAAC,QAAA,EAAU,OAAO,MAAM,IAAA;AAC5B,QAAA,OAAO,CAAC,GAAA,KAAQ,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA;AAAA,MACvC;AACA,MAAA,IAAI,CAAC,QAAA,EAAU,OAAO,CAAC,GAAA,KAAQ,KAAA,CAAM,GAAG,CAAA,KAAM,SAAA;AAC9C,MAAA,OAAO,CAAC,QAAQ,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA,IAAK,KAAA,CAAM,GAAG,CAAA,KAAM,SAAA;AAAA,IAC3D;AACA,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,8CAA8C,EAAE,CAAA,CAAA;AAAA,KAClD;AAAA,EACF;AAEA,EAAA,IAAI,IAAA,KAAS,eAAe,IAAA,EAAM;AAChC,IAAA,MAAM,SAAS,EAAA,CAAG,MAAA;AAClB,IAAA,MAAM,OAAO,EAAA,CAAG,IAAA;AAChB,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,IAAI,EAAA,KAAO,IAAA,EAAM,OAAO,QAAA,GAAW,CAAC,GAAA,KAAQ,CAAC,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA,GAAI,MAAM,KAAA;AAC5E,MAAA,IAAI,EAAA,KAAO,KAAA,EAAO,OAAO,QAAA,GAAW,CAAC,QAAQ,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA,GAAI,MAAM,IAAA;AAC5E,MAAA,OAAO,MAAM,KAAA;AAAA,IACf;AACA,IAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,CAAA,QAAA,EAAW,EAAA,CAAG,IAAI,CAAA,8BAAA,EAAiC,OAAO,OAAO,CAAA;AAAA,OACnE;AAAA,IACF;AACA,IAAA,MAAMA,IAAAA,GAAM,OAAA;AACZ,IAAA,MAAM,UAAA,GAAa,CAAC,GAAA,KAAwB;AAC1C,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,GAAM,CAAC,CAAA,IAAK,CAAA;AACjC,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,GAAM,CAAA,GAAI,CAAC,CAAA,IAAK,CAAA;AACnC,MAAA,OAAO,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO,GAAG,CAAA;AAAA,IAC7B,CAAA;AACA,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAI,CAAC,QAAA,EAAU,OAAO,CAAC,GAAA,KAAQ,UAAA,CAAW,GAAG,CAAA,KAAMA,IAAAA;AACnD,MAAA,OAAO,CAAC,QAAQ,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA,IAAK,UAAA,CAAW,GAAG,CAAA,KAAMA,IAAAA;AAAA,IAChE;AACA,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,IAAI,CAAC,QAAA,EAAU,OAAO,CAAC,GAAA,KAAQ,UAAA,CAAW,GAAG,CAAA,KAAMA,IAAAA;AACnD,MAAA,OAAO,CAAC,QAAQ,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA,IAAK,UAAA,CAAW,GAAG,CAAA,KAAMA,IAAAA;AAAA,IAChE;AACA,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,yCAAyC,EAAE,CAAA,CAAA;AAAA,KAC7C;AAAA,EACF;AAEA,EAAA,MAAM,IAAI,kBAAA;AAAA,IACR,gDAAgD,IAAI,CAAA;AAAA,GACtD;AACF;AAMA,SAAS,aAAA,CACP,IAAA,EACA,UAAA,EACA,IAAA,EACS;AACT,EAAA,MAAM,EAAA,GAAK,UAAA,CAAW,IAAA,CAAK,GAAA,EAAK,YAAY,IAAI,CAAA;AAChD,EAAA,MAAM,OAAO,EAAA,CAAG,QAAA;AAChB,EAAA,IAAI,IAAA,KAAS,cAAA,CAAe,IAAA,IAAQ,IAAA,KAAS,eAAe,QAAA,EAAU;AACpE,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,uDAAA,EAA0D,GAAG,IAAI,CAAA,wBAAA;AAAA,KACnE;AAAA,EACF;AACA,EAAA,MAAM,WAAW,EAAA,CAAG,QAAA;AACpB,EAAA,MAAM,OAAA,GAAU,KAAK,OAAA,KAAY,IAAA;AACjC,EAAA,MAAM,eAAA,GAAkB,qBAAqB,IAAI,CAAA;AAGjD,EAAA,IAAI,IAAA,KAAS,eAAe,QAAA,EAAU;AACpC,IAAA,MAAM,OAAO,EAAA,CAAG,UAAA;AAChB,IAAA,MAAM,QAAQ,EAAA,CAAG,MAAA;AACjB,IAAA,MAAM,QAAA,uBAAe,GAAA,EAAY;AACjC,IAAA,KAAA,MAAW,CAAC,OAAA,EAAS,GAAG,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AAC3C,MAAA,IAAI,eAAA,CAAgB,GAAG,CAAA,EAAG,QAAA,CAAS,IAAI,OAAO,CAAA;AAAA,IAChD;AACA,IAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,MAAA,MAAM,WAAA,GAAc,OAAA;AACpB,MAAA,IAAI,CAAC,QAAA,EAAU,OAAO,MAAM,WAAA;AAC5B,MAAA,OAAO,CAAC,GAAA,KAAS,OAAA,CAAQ,QAAA,EAAU,GAAG,IAAI,WAAA,GAAc,KAAA;AAAA,IAC1D;AACA,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,IAAI,CAAC,SAAS,OAAO,CAAC,QAAQ,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,GAAG,CAAE,CAAA;AACtD,MAAA,OAAO,CAAC,GAAA,KAAQ,CAAC,SAAS,GAAA,CAAI,KAAA,CAAM,GAAG,CAAE,CAAA;AAAA,IAC3C;AACA,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,CAAC,GAAA,KAAQ,OAAA,CAAQ,QAAA,EAAU,GAAG,KAAK,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,GAAG,CAAE,CAAA;AAAA,IACpE;AACA,IAAA,OAAO,CAAC,GAAA,KAAQ,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA,IAAK,CAAC,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,GAAG,CAAE,CAAA;AAAA,EACrE;AAGA,EAAA,MAAM,SAAS,EAAA,CAAG,MAAA;AAClB,EAAA,MAAM,OAAO,EAAA,CAAG,IAAA;AAChB,EAAA,MAAM,UAAA,GAAa,CAAC,GAAA,KAAwB;AAC1C,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,GAAM,CAAC,CAAA,IAAK,CAAA;AACjC,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,GAAM,CAAA,GAAI,CAAC,CAAA,IAAK,CAAA;AACnC,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO,GAAG,CAAA;AAAA,EAC7B,CAAA;AACA,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,IAAI,CAAC,SAAS,OAAO,CAAC,QAAQ,eAAA,CAAgB,UAAA,CAAW,GAAG,CAAC,CAAA;AAC7D,IAAA,OAAO,CAAC,GAAA,KAAQ,CAAC,eAAA,CAAgB,UAAA,CAAW,GAAG,CAAC,CAAA;AAAA,EAClD;AACA,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,CAAC,QAAQ,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA,IAAK,eAAA,CAAgB,UAAA,CAAW,GAAG,CAAC,CAAA;AAAA,EAC3E;AACA,EAAA,OAAO,CAAC,GAAA,KAAQ,OAAA,CAAQ,QAAA,EAAU,GAAG,KAAK,CAAC,eAAA,CAAgB,UAAA,CAAW,GAAG,CAAC,CAAA;AAC5E;AAEA,SAAS,qBAAqB,IAAA,EAA4C;AACxE,EAAA,QAAQ,KAAK,EAAA;AAAI,IACf,KAAK,UAAA;AAAY,MAAA,OAAO,iBAAiB,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,eAAA,IAAmB,OAAO,UAAU,CAAA;AAAA,IAC9F,KAAK,YAAA;AAAc,MAAA,OAAO,iBAAiB,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,eAAA,IAAmB,OAAO,YAAY,CAAA;AAAA,IAClG,KAAK,UAAA;AAAY,MAAA,OAAO,iBAAiB,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,eAAA,IAAmB,OAAO,UAAU,CAAA;AAAA,IAC9F,KAAK,MAAA;AAAQ,MAAA,OAAO,WAAA,CAAY,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,mBAAmB,KAAK,CAAA;AAAA,IACzE,KAAK,SAAA;AAAW,MAAA,OAAO,YAAA,CAAa,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,KAAK,CAAA;AAAA;AAE9D;AAEA,SAAS,gBAAA,CACP,MAAA,EACA,eAAA,EACA,IAAA,EACwB;AACxB,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,MAAM,OAAA,GAAU,aAAa,MAAM,CAAA;AACnC,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,UAAA;AAAY,QAAA,OAAO,CAAC,CAAA,KAAM,YAAA,CAAa,CAAC,CAAA,CAAE,SAAS,OAAO,CAAA;AAAA,MAC/D,KAAK,YAAA;AAAc,QAAA,OAAO,CAAC,CAAA,KAAM,YAAA,CAAa,CAAC,CAAA,CAAE,WAAW,OAAO,CAAA;AAAA,MACnE,KAAK,UAAA;AAAY,QAAA,OAAO,CAAC,CAAA,KAAM,YAAA,CAAa,CAAC,CAAA,CAAE,SAAS,OAAO,CAAA;AAAA;AACjE,EACF;AACA,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,UAAA;AAAY,MAAA,OAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,MAAM,CAAA;AAAA,IAChD,KAAK,YAAA;AAAc,MAAA,OAAO,CAAC,CAAA,KAAM,CAAA,CAAE,UAAA,CAAW,MAAM,CAAA;AAAA,IACpD,KAAK,UAAA;AAAY,MAAA,OAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,MAAM,CAAA;AAAA;AAEpD;AAGA,SAAS,WAAA,CACP,SACA,eAAA,EACwB;AACxB,EAAA,MAAM,MAAA,GAAS,gBAAgB,OAAO,CAAA;AACtC,EAAA,IAAI,WAAW,MAAA,EAAW;AACxB,IAAA,MAAM,EAAE,OAAA,EAAS,eAAA,EAAiB,gBAAA,EAAiB,GAAI,MAAA;AACvD,IAAA,IAAI,mBAAmB,gBAAA,EAAkB;AACvC,MAAA,OAAO,gBAAA,CAAiB,OAAA,EAAS,eAAA,EAAiB,UAAU,CAAA;AAAA,IAC9D;AACA,IAAA,IAAI,eAAA,EAAiB,OAAO,gBAAA,CAAiB,OAAA,EAAS,iBAAiB,UAAU,CAAA;AACjF,IAAA,IAAI,gBAAA,EAAkB,OAAO,gBAAA,CAAiB,OAAA,EAAS,iBAAiB,YAAY,CAAA;AACpF,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,MAAM,QAAA,GAAW,aAAa,OAAO,CAAA;AACrC,MAAA,OAAO,CAAC,CAAA,KAAM,YAAA,CAAa,CAAC,CAAA,KAAM,QAAA;AAAA,IACpC;AACA,IAAA,OAAO,CAAC,MAAM,CAAA,KAAM,OAAA;AAAA,EACtB;AAEA,EAAA,IAAI,GAAA,GAAM,GAAA;AACV,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,OAAO,CAAA,GAAI,QAAQ,MAAA,EAAQ;AACzB,IAAA,MAAM,CAAA,GAAI,QAAQ,CAAC,CAAA;AACnB,IAAA,IAAI,CAAA,KAAM,IAAA,IAAQ,CAAA,GAAI,CAAA,GAAI,QAAQ,MAAA,EAAQ;AACxC,MAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,CAAA,GAAI,CAAC,CAAA;AAC1B,MAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,IAAO,SAAS,IAAA,EAAM;AACjD,QAAA,GAAA,IAAO,gBAAgB,IAAI,CAAA;AAC3B,QAAA,CAAA,IAAK,CAAA;AACL,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,MAAM,GAAA,EAAK;AACb,MAAA,GAAA,IAAO,IAAA;AAAA,IACT,CAAA,MAAA,IAAW,MAAM,GAAA,EAAK;AACpB,MAAA,GAAA,IAAO,GAAA;AAAA,IACT,CAAA,MAAO;AACL,MAAA,GAAA,IAAO,gBAAgB,CAAC,CAAA;AAAA,IAC1B;AACA,IAAA,CAAA,EAAA;AAAA,EACF;AACA,EAAA,GAAA,IAAO,GAAA;AACP,EAAA,MAAM,KAAK,IAAI,MAAA,CAAO,GAAA,EAAK,eAAA,GAAkB,OAAO,GAAG,CAAA;AACvD,EAAA,OAAO,CAAC,CAAA,KAAM,EAAA,CAAG,IAAA,CAAK,CAAC,CAAA;AACzB;AAGA,SAAS,gBAAgB,OAAA,EAIX;AACZ,EAAA,IAAI,OAAA,GAAU,EAAA;AACd,EAAA,IAAI,eAAA,GAAkB,KAAA;AACtB,EAAA,IAAI,eAAA,GAAkB,KAAA;AACtB,EAAA,IAAI,UAAA,GAAa,KAAA;AACjB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,IAAA,MAAM,IAAA,GAAO,QAAQ,CAAC,CAAA;AACtB,IAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,CAAA,GAAI,CAAA,GAAI,QAAQ,MAAA,EAAQ;AAC3C,MAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,CAAA,GAAI,CAAC,CAAA;AAC1B,MAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,IAAO,SAAS,IAAA,EAAM;AACjD,QAAA,IAAI,eAAA,IAAmB,YAAY,OAAO,MAAA;AAC1C,QAAA,eAAA,GAAkB,KAAA;AAClB,QAAA,OAAA,IAAW,IAAA;AACX,QAAA,UAAA,GAAa,IAAA;AACb,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,IAAA,KAAS,KAAK,OAAO,MAAA;AACzB,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,IAAI,YAAY,eAAA,GAAkB,IAAA;AAAA,WAC7B,eAAA,GAAkB,IAAA;AACvB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,eAAA,IAAmB,YAAY,OAAO,MAAA;AAC1C,IAAA,eAAA,GAAkB,KAAA;AAClB,IAAA,OAAA,IAAW,IAAA;AACX,IAAA,UAAA,GAAa,IAAA;AAAA,EACf;AACA,EAAA,OAAO,EAAE,OAAA,EAAS,eAAA,EAAiB,gBAAA,EAAkB,eAAA,EAAgB;AACvE;AAEA,SAAS,YAAA,CACP,QACA,KAAA,EACwB;AACxB,EAAA,IAAI,EAAA;AACJ,EAAA,IAAI;AACF,IAAA,EAAA,GAAK,IAAI,MAAA,CAAO,MAAA,EAAQ,KAAK,CAAA;AAAA,EAC/B,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,eAAA,EAAkB,MAAM,CAAA,CAAA,EAAI,KAAA,GAAQ,YAAY,KAAK,CAAA,EAAA,CAAA,GAAO,EAAE,CAAA,EAAA,EAC5D,eAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CACjD,CAAA;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,CAAC,CAAA,KAAM,EAAA,CAAG,IAAA,CAAK,CAAC,CAAA;AACzB;AAGA,SAAS,gBAAgB,CAAA,EAAmB;AAE1C,EAAA,IAAI,kBAAA,CAAmB,QAAA,CAAS,CAAC,CAAA,SAAU,IAAA,GAAO,CAAA;AAClD,EAAA,OAAO,CAAA;AACT;AAOA,SAAS,aAAa,CAAA,EAAmB;AACvC,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI,OAAA,GAAU,KAAA;AACd,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,QAAQ,CAAA,EAAA,EAAK;AACjC,IAAA,MAAM,CAAA,GAAI,CAAA,CAAE,UAAA,CAAW,CAAC,CAAA;AACxB,IAAA,IAAI,CAAA,IAAK,EAAA,IAAM,CAAA,IAAK,EAAA,EAAI;AACtB,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,GAAA,GAAM,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAClB,QAAA,OAAA,GAAU,IAAA;AAAA,MACZ;AACA,MAAA,GAAA,IAAO,MAAA,CAAO,YAAA,CAAa,CAAA,GAAI,EAAE,CAAA;AAAA,IACnC,WAAW,OAAA,EAAS;AAClB,MAAA,GAAA,IAAO,EAAE,CAAC,CAAA;AAAA,IACZ;AAAA,EACF;AACA,EAAA,OAAO,UAAU,GAAA,GAAM,CAAA;AACzB;AAGA,SAAS,kBAAkB,IAAA,EAA+B;AACxD,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,cAAA,CAAe,IAAA;AAAA,IACpB,KAAK,cAAA,CAAe,KAAA;AAAA,IACpB,KAAK,cAAA,CAAe,KAAA;AAAA,IACpB,KAAK,cAAA,CAAe,KAAA;AAAA,IACpB,KAAK,cAAA,CAAe,MAAA;AAAA,IACpB,KAAK,cAAA,CAAe,MAAA;AAAA,IACpB,KAAK,cAAA,CAAe,OAAA;AAAA,IACpB,KAAK,cAAA,CAAe,OAAA;AAClB,MAAA,OAAO,IAAA;AAAA,IACT;AACE,MAAA,OAAO,KAAA;AAAA;AAEb;AAEA,SAAS,WAAW,EAAA,EAAmF;AACrG,EAAA,QAAQ,EAAA;AAAI,IACV,KAAK,IAAA;AAAM,MAAA,OAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,KAAM,CAAA;AAAA,IAClC,KAAK,KAAA;AAAO,MAAA,OAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,KAAM,CAAA;AAAA,IACnC,KAAK,IAAA;AAAM,MAAA,OAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAA;AAAA,IAChC,KAAK,KAAA;AAAO,MAAA,OAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,IAAK,CAAA;AAAA,IAClC,KAAK,IAAA;AAAM,MAAA,OAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAA;AAAA,IAChC,KAAK,KAAA;AAAO,MAAA,OAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,IAAK,CAAA;AAAA;AAEtC;AAEA,SAAS,UAAU,EAAA,EAAmF;AACpG,EAAA,QAAQ,EAAA;AAAI,IACV,KAAK,IAAA;AAAM,MAAA,OAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,KAAM,CAAA;AAAA,IAClC,KAAK,KAAA;AAAO,MAAA,OAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,KAAM,CAAA;AAAA,IACnC,KAAK,IAAA;AAAM,MAAA,OAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAA;AAAA,IAChC,KAAK,KAAA;AAAO,MAAA,OAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,IAAK,CAAA;AAAA,IAClC,KAAK,IAAA;AAAM,MAAA,OAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAA;AAAA,IAChC,KAAK,KAAA;AAAO,MAAA,OAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,IAAK,CAAA;AAAA;AAEtC;AAWO,SAAS,YAAA,CACd,cACA,IAAA,EACa;AACb,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,KAAA,MAAW,KAAK,YAAA,EAAc;AAC5B,IAAA,IAAI,IAAA,CAAK,CAAC,CAAA,EAAG,GAAA,CAAI,KAAK,CAAC,CAAA;AAAA,EACzB;AACA,EAAA,MAAM,GAAA,GAAM,IAAI,WAAA,CAAY,GAAA,CAAI,MAAM,CAAA;AACtC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,MAAA,EAAQ,KAAK,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA,CAAI,CAAC,CAAA;AACnD,EAAA,OAAO,GAAA;AACT;AASO,SAAS,YAAA,CACd,QAAA,EACA,KAAA,EACA,UAAA,EACA,QAAA,EACa;AACb,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,QAAA;AAG/B,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,IAAA,MAAM,EAAA,GAAK,UAAA,CAAW,GAAA,CAAI,IAAA,CAAK,MAAM,CAAA;AACrC,IAAA,IAAI,MAAM,iBAAA,CAAkB,EAAA,CAAG,QAAQ,CAAA,IAAK,CAAC,GAAG,QAAA,EAAU;AACxD,MAAA,MAAM,SAAS,EAAA,CAAG,MAAA;AAClB,MAAA,MAAM,IAAI,QAAA,CAAS,MAAA;AACnB,MAAA,MAAM,IAAA,GAAO,IAAI,YAAA,CAAa,CAAC,CAAA;AAC/B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK,IAAA,CAAK,CAAC,CAAA,GAAI,MAAA,CAAO,QAAA,CAAS,CAAC,CAAE,CAAA,IAAK,CAAA;AAC9D,MAAA,MAAM,GAAA,GAAM,IAAI,WAAA,CAAY,CAAC,CAAA;AAC7B,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,GAAG,CAAA,EAAA,EAAK,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;AACrC,MAAA,MAAM,GAAA,GAAM,KAAK,GAAA,KAAQ,KAAA;AAIzB,MAAA,MAAMC,IAAAA,GAAM,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA;AAC1B,MAAAA,IAAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACjB,QAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;AACjB,QAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;AACjB,QAAA,IAAI,EAAA,KAAO,EAAA,EAAI,OAAO,CAAA,GAAI,CAAA;AAC1B,QAAA,OAAO,MAAO,EAAA,GAAK,EAAA,GAAK,KAAK,CAAA,GAAM,EAAA,GAAK,KAAK,CAAA,GAAI,EAAA;AAAA,MACnD,CAAC,CAAA;AACD,MAAA,MAAMC,IAAAA,GAAM,IAAI,WAAA,CAAY,CAAC,CAAA;AAC7B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAKA,IAAAA,CAAI,CAAC,CAAA,GAAI,QAAA,CAASD,IAAAA,CAAI,CAAC,CAAE,CAAA;AACrD,MAAA,OAAOC,IAAAA;AAAA,IACT;AAAA,EACF;AAGA,EAAA,MAAM,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA;AAC/B,EAAA,GAAA,CAAI,IAAA,CAAK,CAAC,EAAA,EAAI,EAAA,KAAO;AACnB,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,EAAA,GAAK,QAAA,CAAS,EAAA,EAAI,IAAA,CAAK,MAAM,CAAA;AACnC,MAAA,MAAM,EAAA,GAAK,QAAA,CAAS,EAAA,EAAI,IAAA,CAAK,MAAM,CAAA;AACnC,MAAA,MAAM,CAAA,GAAI,cAAA,CAAe,EAAA,EAAI,EAAE,CAAA;AAC/B,MAAA,IAAI,MAAM,CAAA,EAAG,OAAO,KAAK,GAAA,KAAQ,KAAA,GAAQ,IAAI,CAAC,CAAA;AAAA,IAChD;AACA,IAAA,OAAO,EAAA,GAAK,EAAA;AAAA,EACd,CAAC,CAAA;AACD,EAAA,MAAM,GAAA,GAAM,IAAI,WAAA,CAAY,GAAA,CAAI,MAAM,CAAA;AACtC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,MAAA,EAAQ,KAAK,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA,CAAI,CAAC,CAAA;AACnD,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,cAAA,CAAe,GAAY,CAAA,EAAoB;AACtD,EAAA,IAAI,CAAA,KAAM,GAAG,OAAO,CAAA;AACpB,EAAA,IAAI,CAAA,KAAM,IAAA,IAAQ,CAAA,KAAM,MAAA,EAAW,OAAO,EAAA;AAC1C,EAAA,IAAI,CAAA,KAAM,IAAA,IAAQ,CAAA,KAAM,MAAA,EAAW,OAAO,CAAA;AAC1C,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,CAAA,KAAM,QAAA,EAAU,OAAO,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,CAAA;AACpF,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,CAAA,KAAM,QAAA,EAAU,OAAO,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,CAAA;AACpF,EAAA,IAAI,OAAO,CAAA,KAAM,SAAA,IAAa,OAAO,CAAA,KAAM,SAAA,EAAW,OAAA,CAAQ,CAAA,GAAI,CAAA,GAAI,CAAA,KAAM,CAAA,GAAI,CAAA,GAAI,CAAA,CAAA;AACpF,EAAA,MAAM,EAAA,GAAK,OAAO,CAAC,CAAA;AACnB,EAAA,MAAM,EAAA,GAAK,OAAO,CAAC,CAAA;AACnB,EAAA,OAAO,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,KAAK,CAAA,GAAI,CAAA;AACtC;AAWO,SAASC,YAAAA,CACd,UAAA,EACA,QAAA,EACA,MAAA,EACA,OACA,SAAA,EACY;AACZ,EAAA,MAAM,GAAA,GAAM,KAAA,KAAU,IAAA,GAAO,QAAA,CAAS,MAAA,GAAS,KAAK,GAAA,CAAI,QAAA,CAAS,MAAA,EAAQ,MAAA,GAAS,KAAK,CAAA;AACvF,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAM,MAAM,CAAA;AAClC,EAAA,MAAM,GAAA,GAAkB,IAAI,KAAA,CAAM,CAAC,CAAA;AACnC,EAAA,MAAM,IAAA,GAAO,SAAA,IAAc,UAAA,CAAW,WAAA,EAAY;AAClD,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,IAAA,MAAM,GAAA,GAAM,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AAC/B,IAAA,MAAM,MAAgB,EAAC;AACvB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,MAAA,MAAM,IAAA,GAAO,KAAK,CAAC,CAAA;AACnB,MAAA,GAAA,CAAI,IAAI,CAAA,GAAI,UAAA,CAAW,iBAAA,CAAkB,MAAM,GAAG,CAAA;AAAA,IACpD;AACA,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA;AAAA,EACX;AACA,EAAA,OAAO,GAAA;AACT;;;AC9oBA,IAAI,2BAAA;AACJ,IAAI,0BAAA;AACJ,IAAI,kBAAA,GAAqB,CAAA;AA4ClB,SAAS,cAAc,EAAA,EAA+B;AAC3D,EAAA,MAAM,OAAO,kBAAA,KAAuB,CAAA;AACpC,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,2BAAA,uBAAkC,OAAA,EAAQ;AAC1C,IAAA,0BAAA,uBAAiC,OAAA,EAAQ;AAAA,EAC3C;AACA,EAAA,kBAAA,EAAA;AACA,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,4BAA4B,EAAE,CAAA;AAC3C,IAAA,IAAI,IAAA,KAAS,QAAW,OAAO,IAAA;AAC/B,IAAA,OAAO,YAAA,CAAa,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,GAAA,KAAQ,gBAAA,CAAiB,GAAA,CAAI,EAAE,CAAC,CAAA;AAAA,EAC/D,CAAA,SAAE;AACA,IAAA,kBAAA,EAAA;AACA,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,2BAAA,GAA8B,MAAA;AAC9B,MAAA,0BAAA,GAA6B,MAAA;AAAA,IAC/B;AAAA,EACF;AACF;AAOO,SAAS,YAAA,CAAa,aAAsB,OAAA,EAA4C;AAC7F,EAAA,MAAM,sBAA8C,EAAC;AACrD,EAAA,MAAM,iBAAyC,EAAC;AAChD,EAAA,oBAAA,CAAqB,QAAA,CAAS,IAAA,EAAM,mBAAA,EAAqB,cAAc,CAAA;AACvE,EAAA,KAAA,MAAWC,KAAAA,IAAQ,QAAA,CAAS,IAAA,IAAQ,EAAC,EAAG;AACtC,IAAA,oBAAA,CAAqBA,KAAAA,CAAK,IAAA,EAAM,mBAAA,EAAqB,cAAc,CAAA;AAAA,EACrE;AAEA,EAAA,MAAM,MAAA,GAA4B;AAAA,IAChC,YAAA,EAAc,eAAA,CAAgB,QAAA,CAAS,IAAI,CAAA,IAAK,EAAA;AAAA,IAChD,QAAA,EAAU,cAAc,QAAQ,CAAA;AAAA,IAChC,kBAAA,EAAoB,0BAA0B,QAAQ,CAAA;AAAA,IACtD,mBAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,QAAA,GAAW,eAAA,CAAgB,QAAA,CAAS,MAAiB,CAAA;AAC3D,EAAA,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,MAAA,CAAO,QAAA,GAAW,QAAA;AAC3C,EAAA,OAAO,MAAA;AACT;AAMO,SAAS,OAAA,CACd,IACA,QAAA,EACY;AACZ,EAAA,QAAA,CAAS,aAAA,CAAc,EAAE,CAAC,CAAA;AAC1B,EAAA,MAAM,WAAA,GAAc,mBAAmB,EAAE,CAAA;AACzC,EAAA,MAAM,SAAS,WAAA,CAAY,GAAA;AAAA,IAAI,CAAC,UAAA,KAC9B,UAAA,CAAW,SAAA,CAAU,MAAM;AACzB,MAAA,QAAA,CAAS,aAAA,CAAc,EAAE,CAAC,CAAA;AAAA,IAC5B,CAAC;AAAA,GACH;AACA,EAAA,OAAO,MAAM;AACX,IAAA,KAAA,MAAW,KAAA,IAAS,QAAQ,KAAA,EAAM;AAAA,EACpC,CAAA;AACF;AAGO,SAAS,kBAAkB,IAAA,EAA2C;AAC3E,EAAA,OAAO,CAAC,GAAA,KAAQ,kBAAA,CAAmB,IAAA,EAAM,GAAG,CAAA;AAC9C;AAGO,SAAS,2BAA2B,IAAA,EAA2C;AACpF,EAAA,OAAO,CAAC,GAAA,KAAQ,2BAAA,CAA4B,IAAA,EAAM,GAAG,CAAA;AACvD;AAGO,SAAS,mBAAmB,KAAA,EAAyB;AAC1D,EAAA,OAAO,KAAA,KAAU,IAAA;AACnB;AAEA,SAAS,aAAaR,MAAAA,EAAgC;AACpD,EAAA,sBAAA,CAAuBA,MAAK,CAAA;AAE5B,EAAA,IAAI,IAAA,GAAO,YAAA,CAAaA,MAAAA,CAAM,IAAI,CAAA;AAElC,EAAA,KAAA,MAAWQ,KAAAA,IAAQR,MAAAA,CAAM,IAAA,IAAQ,EAAC,EAAG;AACnC,IAAA,IAAA,GAAO,SAAA,CAAU,MAAMQ,KAAI,CAAA;AAAA,EAC7B;AAEA,EAAA,IAAA,GAAO,UAAA,CAAW,IAAA,EAAMR,MAAAA,CAAM,KAAK,CAAA;AAEnC,EAAA,KAAA,MAAW,OAAA,IAAWA,MAAAA,CAAM,OAAA,IAAW,EAAC,EAAG;AACzC,IAAA,IAAA,GAAO,IAAA,CAAK,OAAO,CAAC,GAAA,KAAQ,mBAAmB,OAAA,CAAQ,GAAA,CAAI,EAAmB,CAAC,CAAC,CAAA;AAAA,EAClF;AAEA,EAAA,MAAM,YAAYA,MAAAA,CAAM,MAAA;AACxB,EAAA,MAAM,aAAA,GAAA,CACHA,MAAAA,CAAM,OAAA,EAAS,MAAA,IAAU,CAAA,IAAK,CAAA,IAC/B,yBAAA,CAA0B,SAAS,CAAA,IACnC,yBAAA,CAA0BA,MAAAA,CAAM,MAAM,CAAA;AAExC,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,IAAA,GAAO,YAAA,CAAa,MAAMA,MAAK,CAAA;AAAA,EACjC,CAAA,MAAO;AACL,IAAA,IAAA,GAAO,WAAA,CAAY,MAAMA,MAAK,CAAA;AAAA,EAChC;AAEA,EAAA,IAAIA,OAAM,QAAA,EAAU;AAClB,IAAA,IAAA,GAAO,aAAa,IAAI,CAAA;AAAA,EAC1B;AAEA,EAAA,IAAIA,MAAAA,CAAM,OAAA,IAAWA,MAAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC7C,IAAA,IAAA,GAAO,SAAA,CAAU,IAAA,EAAMA,MAAAA,CAAM,OAAO,CAAA;AAAA,EACtC;AAEA,EAAA,MAAM,MAAA,GAASA,OAAM,MAAA,IAAU,CAAA;AAC/B,EAAA,MAAM,cAAA,GAAiBA,MAAAA,CAAM,YAAA,GAAe,CAAA,GAAIA,MAAAA,CAAM,KAAA;AACtD,EAAA,IAAI,MAAA,KAAW,CAAA,IAAK,cAAA,KAAmB,MAAA,EAAW;AAChD,IAAA,MAAM,GAAA,GAAM,cAAA,KAAmB,MAAA,GAAY,IAAA,CAAK,SAAS,MAAA,GAAS,cAAA;AAClE,IAAA,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,GAAG,CAAA;AAAA,EAC/B;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,uBAAuBA,MAAAA,EAAsB;AACpD,EAAA,IAAIA,OAAM,QAAA,IAAY,CAACA,OAAM,QAAA,IAAYA,MAAAA,CAAM,WAAW,MAAA,EAAW;AACnE,IAAA,MAAM,IAAI,gBAAgB,uCAAuC,CAAA;AAAA,EACnE;AAEA,EAAA,IAAIA,OAAM,QAAA,IAAA,CAAaA,MAAAA,CAAM,OAAA,EAAS,MAAA,IAAU,KAAK,CAAA,EAAG;AACtD,IAAA,MAAM,IAAI,gBAAgB,2CAA2C,CAAA;AAAA,EACvE;AAEA,EAAA,IAAA,CAAKA,MAAAA,CAAM,QAAQ,MAAA,IAAU,CAAA,IAAK,MAAMA,MAAAA,CAAM,OAAA,EAAS,MAAA,IAAU,CAAA,MAAO,CAAA,EAAG;AACzE,IAAA,IAAI,CAAC,yBAAA,CAA0BA,MAAAA,CAAM,MAAiB,CAAA,EAAG;AACvD,MAAA,MAAM,IAAI,gBAAgB,gEAAgE,CAAA;AAAA,IAC5F;AAAA,EACF;AAEA,EAAA,IAAA,CAAKA,MAAAA,CAAM,KAAA,KAAU,MAAA,IAAaA,MAAAA,CAAM,MAAA,KAAW,YAAeA,MAAAA,CAAM,OAAA,EAAS,MAAA,IAAU,CAAA,MAAO,CAAA,EAAG;AACnG,IAAA,MAAM,IAAI,gBAAgB,kCAAkC,CAAA;AAAA,EAC9D;AACF;AAMA,SAAS,2BAAA,CACPA,QACA,iBAAA,EAC8B;AAC9B,EAAA,OAAO,sBAAA,CAAuBA,MAAK,CAAA,GAAI,iBAAiB,CAAA;AAC1D;AAGA,SAAS,uBAAuBA,MAAAA,EAA8C;AAC5E,EAAA,MAAM,IAAA,GAAO,mBAAmBA,MAAK,CAAA;AACrC,EAAA,IAAI,CAAC,MAAM,OAAO,MAAA;AAClB,EAAA,IAAI,IAAA,CAAK,WAAA,EAAa,OAAO,MAAM,EAAC;AAEpC,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAAoE;AAC3F,EAAA,KAAA,MAAW,MAAA,IAAU,KAAK,UAAA,CAAW,oBAAA,IAAwB,UAAA,CAAW,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AAC/F,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,QAAA,GAAW,aAAA,CAAc,IAAA,CAAK,UAAA,EAAY,UAAU,CAAA;AAAA,EACtD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,CAAC,iBAAA,KAAkE;AACxE,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI;AACF,MAAA,IAAI,YAAA;AACJ,MAAA,IAAI,sBAAsB,KAAA,CAAA,EAAW;AACnC,QAAA,YAAA,GAAe,iBAAA;AAAA,MACjB,CAAA,MAAA,IAAW,IAAA,CAAK,YAAA,KAAiB,IAAA,EAAM;AACrC,QAAA,MAAM,UAAA,GAAa,KAAK,UAAA,CAAW,2BAAA;AAAA,UACjC,KAAK,YAAA,CAAa,MAAA;AAAA,UAClB,KAAK,YAAA,CAAa;AAAA,SACpB;AACA,QAAA,IAAI,UAAA,KAAe,QAAW,OAAO,KAAA,CAAA;AACrC,QAAA,YAAA,GAAe,UAAA;AAAA,MACjB,CAAA,MAAO;AACL,QAAA,YAAA,GAAe,IAAA,CAAK,WAAW,qBAAA,EAAsB;AACrD,QAAA,IAAI,IAAA,CAAK,oBAAoB,IAAA,EAAM;AACjC,UAAA,MAAM,SAAA,GAAY,6BAAA,CAA8B,IAAA,CAAK,eAAA,EAAiB,KAAK,UAAU,CAAA;AACrF,UAAA,IAAI,UAAU,WAAA,EAAa;AACzB,YAAA,YAAA,GAAe,IAAA,CAAK,UAAA,CAAW,4BAAA,CAA6B,SAAA,CAAU,YAAY,CAAA;AAAA,UACpF;AAAA,QACF;AAAA,MACF;AACA,MAAA,QAAA,GAAW,YAAA;AAAA,QAAa,YAAA;AAAA,QAAc,CAAC,QACrC,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,IAAK,mBAAA,CAAoB,MAAM,GAAG;AAAA,OACrD;AAAA,IACF,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,QAAA,GAAW,YAAA;AAAA,MACT,QAAA;AAAA,MACA,IAAA,CAAK,KAAA;AAAA,MACL,UAAA;AAAA,MACA,CAAC,GAAA,EAAK,GAAA,KAAQ,KAAK,UAAA,CAAW,iBAAA,CAAkB,KAAK,GAAG;AAAA,KAC1D;AAEA,IAAA,OAAO,yBAAA,CAA0B,KAAK,UAAA,EAAY,QAAA,EAAU,KAAK,MAAA,EAAQ,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,UAAU,CAAA;AAAA,EACtG,CAAA;AACF;AAEA,SAAS,mBAAmBA,MAAAA,EAA0C;AACpE,EAAA,IAAIA,MAAAA,CAAM,IAAA,CAAK,IAAA,KAAS,eAAA,EAAiB,OAAO,MAAA;AAChD,EAAA,IAAA,CAAKA,MAAAA,CAAM,IAAA,EAAM,MAAA,IAAU,CAAA,IAAK,GAAG,OAAO,MAAA;AAC1C,EAAA,IAAIA,MAAAA,CAAM,QAAA,IAAA,CAAaA,MAAAA,CAAM,OAAA,EAAS,MAAA,IAAU,CAAA,IAAK,CAAA,IAAA,CAAMA,MAAAA,CAAM,QAAA,EAAU,MAAA,IAAU,CAAA,IAAK,CAAA,EAAG,OAAO,MAAA;AACpG,EAAA,IAAA,CAAKA,MAAAA,CAAM,OAAA,EAAS,MAAA,IAAU,CAAA,IAAK,CAAA,IAAA,CAAMA,OAAM,MAAA,EAAQ,MAAA,IAAU,CAAA,IAAK,CAAA,EAAG,OAAO,MAAA;AAChF,EAAA,IAAIA,MAAAA,CAAM,UAAU,OAAO,MAAA;AAC3B,EAAA,IAAI,yBAAA,CAA0BA,MAAAA,CAAM,MAAiB,CAAA,EAAG,OAAO,MAAA;AAE/D,EAAA,sBAAA,CAAuBA,MAAK,CAAA;AAE5B,EAAA,MAAM,UAAA,GAAaA,OAAM,IAAA,CAAK,UAAA;AAC9B,EAAA,MAAM,KAAA,GAAQA,OAAM,IAAA,CAAK,KAAA;AACzB,EAAA,MAAM,SAAA,GAAY,qBAAA,CAAsBA,MAAAA,CAAM,KAAA,EAAO,OAAO,UAAU,CAAA;AACtE,EAAA,IAAI,SAAA,KAAc,QAAW,OAAO,MAAA;AACpC,EAAA,MAAM,UAAA,GAAa,uBAAA,CAAwBA,MAAAA,CAAM,MAAA,EAAmB,OAAO,UAAU,CAAA;AACrF,EAAA,IAAI,CAAC,YAAY,OAAO,MAAA;AACxB,EAAA,MAAM,eAAA,GAAkB,sBAAsB,UAAU,CAAA;AACxD,EAAA,MAAM,QAAQ,mBAAA,CAAoBA,MAAAA,CAAM,OAAA,EAAS,KAAA,EAAO,iBAAiB,UAAU,CAAA;AACnF,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AAEnB,EAAA,MAAM,MAAA,GAASA,OAAM,MAAA,IAAU,CAAA;AAC/B,EAAA,MAAM,cAAA,GAAiBA,MAAAA,CAAM,YAAA,GAAe,CAAA,GAAIA,MAAAA,CAAM,KAAA;AACtD,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAY,SAAA,CAAU,UAAA;AAAA,IACtB,KAAA;AAAA,IACA,UAAA;AAAA,IACA,iBAAiB,SAAA,CAAU,eAAA;AAAA,IAC3B,cAAc,SAAA,CAAU,YAAA;AAAA,IACxB,qBAAqB,SAAA,CAAU,mBAAA;AAAA,IAC/B,aAAa,SAAA,CAAU,WAAA;AAAA,IACvB,MAAA;AAAA,IACA,OAAO,cAAA,IAAkB;AAAA,GAC3B;AACF;AAEA,SAAS,mBAAA,CAAoB,MAAoB,GAAA,EAAsB;AACrE,EAAA,IAAI,IAAA,CAAK,YAAA,KAAiB,IAAA,IAAQ,CAAC,uBAAA,CAAwB,KAAK,UAAA,EAAY,IAAA,CAAK,YAAA,EAAc,GAAG,CAAA,EAAG;AACnG,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,IAAA,CAAK,mBAAA,CAAoB,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAClD,EAAA,MAAM,EAAA,GAA8B,EAAE,CAAC,IAAA,CAAK,KAAK,GAAG,aAAA,CAAc,IAAA,CAAK,UAAA,EAAY,GAAG,CAAA,EAAE;AACxF,EAAA,KAAA,MAAW,IAAA,IAAQ,KAAK,mBAAA,EAAqB;AAC3C,IAAA,IAAI,CAAC,kBAAA,CAAmB,kBAAA,CAAmB,MAAM,EAAE,CAAC,GAAG,OAAO,KAAA;AAAA,EAChE;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,uBAAA,CACP,UAAA,EACA,SAAA,EACA,GAAA,EACS;AACT,EAAA,QAAQ,UAAU,SAAA;AAAW,IAC3B,KAAK,gBAAA;AACH,MAAA,OAAO,WAAW,4BAAA,CAA6B,SAAA,CAAU,QAAQ,GAAA,EAAK,SAAA,CAAU,MAAM,YAAY,CAAA;AAAA,IACpG,KAAK,YAAA;AACH,MAAA,OAAO,WAAW,4BAAA,CAA6B,SAAA,CAAU,QAAQ,GAAA,EAAK,SAAA,CAAU,MAAM,QAAQ,CAAA;AAAA,IAChG,KAAK,SAAA;AACH,MAAA,OAAO,UAAA,CAAW,sBAAsB,SAAA,CAAU,MAAA,EAAQ,KAAK,SAAA,CAAU,KAAA,EAAO,UAAU,MAAM,CAAA;AAAA;AAEtG;AAEA,SAAS,aAAA,CAAc,YAAwB,GAAA,EAAwB;AACrE,EAAA,MAAM,MAAiB,EAAC;AACxB,EAAA,KAAA,MAAW,MAAA,IAAU,UAAA,CAAW,WAAA,EAAY,EAAG;AAC7C,IAAA,GAAA,CAAI,MAAM,CAAA,GAAI,UAAA,CAAW,iBAAA,CAAkB,QAAQ,GAAG,CAAA;AAAA,EACxD;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,qBAAA,CACP,KAAA,EACA,KAAA,EACA,UAAA,EAC2B;AAC3B,EAAA,MAAM,OAAA,GAAU,SAAS,EAAC;AAC1B,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO;AAAA,MACL,UAAA,EAAY,IAAA;AAAA,MACZ,eAAA,EAAiB,IAAA;AAAA,MACjB,YAAA,EAAc,IAAA;AAAA,MACd,qBAAqB,EAAC;AAAA,MACtB,WAAA,EAAa;AAAA,KACf;AAAA,EACF;AAEA,EAAA,MAAM,UAA6B,EAAC;AACpC,EAAA,MAAM,mBAA2C,EAAC;AAClD,EAAA,MAAM,sBAA8C,EAAC;AACrD,EAAA,IAAI,YAAA,GAAwC,IAAA;AAC5C,EAAA,IAAI,WAAA,GAAc,KAAA;AAElB,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,MAAM,IAAA,GAAO,mBAAmB,MAAM,CAAA;AACtC,IAAA,IAAI,yBAAA,CAA0B,IAAA,EAAM,KAAA,EAAO,UAAU,CAAA,EAAG;AACtD,MAAA,WAAA,GAAc,IAAA;AACd,MAAA;AAAA,IACF;AACA,IAAA,MAAM,GAAA,GAAM,yBAAA,CAA0B,IAAA,EAAM,KAAK,CAAA;AACjD,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,IAAI,iBAAiB,IAAA,EAAM;AACzB,QAAA,YAAA,GAAe,GAAA;AACf,QAAA,IAAI,gBAAgB,IAAA,KAAS,IAAA,CAAK,SAAS,QAAA,IAAY,IAAA,CAAK,SAAS,UAAA,CAAA,EAAa;AAGhF,UAAA,mBAAA,CAAoB,KAAK,IAAI,CAAA;AAAA,QAC/B;AAAA,MACF,CAAA,MAAO;AACL,QAAA,mBAAA,CAAoB,KAAK,IAAI,CAAA;AAAA,MAC/B;AACA,MAAA;AAAA,IACF;AAEA,IAAA,MAAMS,OAAAA,GAAS,uBAAA,CAAwB,IAAA,EAAM,KAAK,CAAA;AAClD,IAAA,IAAI,CAACA,SAAQ,OAAO,MAAA;AACpB,IAAA,OAAA,CAAQ,KAAKA,OAAM,CAAA;AAEnB,IAAA,MAAM,QAAA,GAAW,4BAAA,CAA6B,IAAA,EAAM,KAAK,CAAA;AACzD,IAAA,IAAI,QAAA,EAAU,gBAAA,CAAiB,IAAA,CAAK,QAAQ,CAAA;AAAA,EAC9C;AAEA,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,OAAA,CAAQ,MAAA,KAAW,CAAA,GAAI,OAAO,OAAA,CAAQ,MAAA,KAAW,CAAA,GAAI,OAAA,CAAQ,CAAC,CAAA,GAAK,EAAE,IAAA,EAAM,KAAA,EAAO,MAAM,OAAA,EAAQ;AAAA,IAC5G,eAAA,EAAiB,gBAAA,CAAiB,MAAA,KAAW,CAAA,GAAI,OAAO,gBAAA,CAAiB,MAAA,KAAW,CAAA,GAAI,gBAAA,CAAiB,CAAC,CAAA,GAAK,IAAI,IAAA,CAAK,OAAO,gBAAgB,CAAA;AAAA,IAC/I,YAAA;AAAA,IACA,mBAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,yBAAA,CACP,UAAA,EACA,KAAA,EACA,UAAA,EACS;AACT,EAAA,IAAI,EAAE,UAAA,YAAsB,IAAA,CAAA,IAAS,UAAA,CAAW,IAAA,KAAS,eAAe,OAAO,KAAA;AAC/E,EAAA,MAAM,GAAA,GAAM,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA;AAC7B,EAAA,OAAO,eAAe,OAAA,IACpB,GAAA,CAAI,KAAK,MAAA,KAAW,CAAA,IACpB,IAAI,IAAA,CAAK,CAAC,CAAA,KAAM,KAAA,IAChB,WAAW,WAAA,EAAY,CAAE,SAAS,GAAA,CAAI,IAAA,CAAK,CAAC,CAAE,CAAA;AAClD;AAEA,SAAS,yBAAA,CAA0B,MAAuB,KAAA,EAA6C;AACrG,EAAA,IAAI,EAAE,IAAA,YAAgB,IAAA,CAAA,EAAO,OAAO,MAAA;AACpC,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,QAAA,IAAY,IAAA,CAAK,SAAS,UAAA,EAAY;AACtD,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,IAAA,KAAS,QAAA,GAAW,IAAA,CAAK,KAAK,CAAC,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AACrE,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,IAAA,KAAS,QAAA,GAAW,IAAA,CAAK,KAAK,CAAC,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AACtE,IAAA,MAAMC,OAAAA,GAAS,iBAAA,CAAkB,SAAA,EAAY,KAAK,CAAA;AAClD,IAAA,MAAM,IAAA,GAAO,yBAAyB,UAAU,CAAA;AAChD,IAAA,OAAOA,OAAAA,IAAU,OAAO,EAAE,SAAA,EAAW,kBAAkB,MAAA,EAAAA,OAAAA,EAAQ,MAAK,GAAI,MAAA;AAAA,EAC1E;AACA,EAAA,IAAI,IAAA,CAAK,SAAS,gBAAA,IAAoB,IAAA,CAAK,SAAS,YAAA,IAAgB,IAAA,CAAK,SAAS,SAAA,EAAW;AAC3F,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,SAAS,iBAAA,CAAkB,IAAA,CAAK,IAAA,CAAK,CAAC,GAAI,KAAK,CAAA;AACrD,EAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AAEpB,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,gBAAA,IAAoB,IAAA,CAAK,SAAS,YAAA,EAAc;AAChE,IAAA,MAAM,IAAA,GAAO,iBAAA,CAAkB,IAAA,CAAK,IAAA,CAAK,CAAC,CAAC,CAAA;AAC3C,IAAA,OAAO,OAAO,EAAE,SAAA,EAAW,KAAK,IAAA,EAAM,MAAA,EAAQ,MAAK,GAAI,MAAA;AAAA,EACzD;AAEA,EAAA,MAAM,KAAA,GAAQ,kBAAA,CAAmB,IAAA,CAAK,IAAA,CAAK,CAAC,CAAC,CAAA;AAC7C,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,MAAM,MAAA,GAAS,yBAAA,CAA0B,IAAA,CAAK,IAAA,CAAK,CAAC,CAAC,CAAA;AACrD,EAAA,IAAI,MAAA,KAAW,QAAW,OAAO,MAAA;AACjC,EAAA,OAAO,EAAE,SAAA,EAAW,SAAA,EAAW,MAAA,EAAQ,IAAA,EAAM,gBAAgB,KAAA,EAAO,MAAM,CAAA,EAAG,KAAA,EAAO,MAAA,EAAO;AAC7F;AAEA,SAAS,yBAAyB,IAAA,EAAqD;AACrF,EAAA,IAAI,EAAE,IAAA,YAAgB,KAAA,CAAA,EAAQ,OAAO,MAAA;AACrC,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,IAAA,CAAK,KAAK,CAAA;AACxC,EAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AACrB,EAAA,IAAI,IAAA,GAAO,QAAA;AACX,EAAA,IAAI,IAAA,GAAO,QAAA;AACX,EAAA,IAAI,IAAA,GAAO,CAAA,QAAA;AACX,EAAA,IAAI,IAAA,GAAO,CAAA,QAAA;AACX,EAAA,KAAA,MAAW,QAAQ,OAAA,EAAS;AAC1B,IAAA,KAAA,MAAW,SAAS,IAAA,EAAM;AACxB,MAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,KAAA,CAAM,CAAC,CAAC,CAAA;AAC9B,MAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,KAAA,CAAM,CAAC,CAAC,CAAA;AAC9B,MAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,KAAA,CAAM,CAAC,CAAC,CAAA;AAC9B,MAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,IAChC;AAAA,EACF;AACA,EAAA,OAAO,CAAC,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAChC;AAEA,SAAS,kBAAkB,IAAA,EAAqD;AAC9E,EAAA,IAAI,EAAE,IAAA,YAAgB,KAAA,CAAA,EAAQ,OAAO,MAAA;AACrC,EAAA,eAAA,CAAgB,IAAA,CAAK,OAAO,MAAM,CAAA;AAClC,EAAA,OAAO,IAAA,CAAK,KAAA;AACd;AAEA,SAAS,mBAAmB,IAAA,EAAsD;AAChF,EAAA,IAAI,EAAE,IAAA,YAAgB,KAAA,CAAA,EAAQ,OAAO,MAAA;AACrC,EAAA,gBAAA,CAAiB,IAAA,CAAK,OAAO,OAAO,CAAA;AACpC,EAAA,OAAO,IAAA,CAAK,KAAA;AACd;AAEA,SAAS,0BAA0B,IAAA,EAAuD;AACxF,EAAA,IAAI,EAAE,IAAA,YAAgB,KAAA,CAAA,EAAQ,OAAO,MAAA;AACrC,EAAA,OAAO,mBAAA,CAAoB,KAAK,KAAK,CAAA;AACvC;AAEA,SAAS,eAAA,CAAgB,OAAc,MAAA,EAAsB;AAC3D,EAAA,MAAM,iBAAA,GAAoB,WAAA;AAC1B,EAAA,MAAM,cAAA,GAAkB,MAAA,GAAS,iBAAA,IAAsB,GAAA,GAAM,IAAA,CAAK,EAAA,CAAA;AAClE,EAAA,MAAM,MAAA,GAAS,KAAK,GAAA,CAAK,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA,CAAK,KAAM,GAAG,CAAA;AAClD,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,GAAI,QAAQ,GAAA,GAAM,cAAA,GAAiB,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA;AAClF,EAAA,MAAM,QAAA,GAAW,cAAA;AACjB,EAAA,OAAO;AAAA,IACLC,OAAM,KAAA,CAAM,CAAC,CAAA,GAAI,QAAA,EAAU,MAAM,GAAG,CAAA;AAAA,IACpCA,OAAM,KAAA,CAAM,CAAC,CAAA,GAAI,QAAA,EAAU,KAAK,EAAE,CAAA;AAAA,IAClCA,OAAM,KAAA,CAAM,CAAC,CAAA,GAAI,QAAA,EAAU,MAAM,GAAG,CAAA;AAAA,IACpCA,OAAM,KAAA,CAAM,CAAC,CAAA,GAAI,QAAA,EAAU,KAAK,EAAE;AAAA,GACpC;AACF;AAEA,SAASA,MAAAA,CAAM,KAAA,EAAeV,IAAAA,EAAaC,IAAAA,EAAqB;AAC9D,EAAA,OAAO,KAAK,GAAA,CAAIA,IAAAA,EAAK,KAAK,GAAA,CAAID,IAAAA,EAAK,KAAK,CAAC,CAAA;AAC3C;AAcA,SAAS,uBAAA,CAAwB,MAAuB,KAAA,EAAuC;AAC7F,EAAA,IAAI,gBAAgB,OAAA,EAAS;AAC3B,IAAA,MAAM,GAAA,GAAM,kBAAA,CAAmB,IAAA,EAAM,KAAK,CAAA;AAC1C,IAAA,OAAO,MAAM,GAAA,GAAM,MAAA;AAAA,EACrB;AACA,EAAA,IAAI,EAAE,IAAA,YAAgB,IAAA,CAAA,EAAO,OAAO,MAAA;AAEpC,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,KAAA,EAAO;AACV,MAAA,MAAM,IAAA,GAAO,KAAK,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ,uBAAA,CAAwB,GAAA,EAAK,KAAK,CAAC,CAAA;AACvE,MAAA,IAAI,KAAK,IAAA,CAAK,CAAC,QAAQ,GAAA,KAAQ,MAAS,GAAG,OAAO,MAAA;AAClD,MAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAgC;AAAA,IACxD;AAAA,IACA,KAAK,IAAA,EAAM;AACT,MAAA,MAAM,IAAA,GAAO,KAAK,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ,uBAAA,CAAwB,GAAA,EAAK,KAAK,CAAC,CAAA;AACvE,MAAA,IAAI,KAAK,IAAA,CAAK,CAAC,QAAQ,GAAA,KAAQ,MAAS,GAAG,OAAO,MAAA;AAClD,MAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAgC;AAAA,IACvD;AAAA,IACA,KAAK,KAAA,EAAO;AACV,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,GAAI,uBAAA,CAAwB,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,EAAG,KAAK,CAAA,GAAI,MAAA;AAC1E,MAAA,OAAO,GAAA,GAAM,EAAE,IAAA,EAAM,KAAA,EAAO,KAAI,GAAI,MAAA;AAAA,IACtC;AAAA,IACA,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,YAAa,OAAA,GAAU,kBAAA,CAAmB,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,EAAG,KAAK,CAAA,GAAI,MAAA;AACxF,MAAA,OAAO,GAAA,GAAM,EAAE,IAAA,EAAM,QAAA,EAAU,KAAK,GAAA,EAAK,OAAA,EAAS,OAAM,GAAI,MAAA;AAAA,IAC9D;AAAA,IACA,KAAK,IAAA,EAAM;AACT,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,YAAa,OAAA,GAAU,kBAAA,CAAmB,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,EAAG,KAAK,CAAA,GAAI,MAAA;AACxF,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,YAAa,QAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CAAE,KAAA,GAAQ,MAAA;AACnE,MAAA,IAAI,CAAC,GAAA,IAAO,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,CAAC,KAAA,CAAM,KAAA,CAAM,cAAc,CAAA,EAAG,OAAO,MAAA;AAC1E,MAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,GAAA,EAAK,GAAA,EAAK,QAAQ,KAAA,EAAM;AAAA,IAC/C;AAAA,IACA,KAAK,MAAA;AAAA,IACL,KAAK,OAAA,EAAS;AACZ,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,YAAa,OAAA,GAAU,kBAAA,CAAmB,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,EAAG,KAAK,CAAA,GAAI,MAAA;AACxF,MAAA,MAAM,OAAA,GAAU,sBAAA,CAAuB,IAAA,CAAK,IAAA,CAAK,CAAC,CAAC,CAAA;AACnD,MAAA,IAAI,CAAC,GAAA,IAAO,OAAO,OAAA,KAAY,UAAU,OAAO,MAAA;AAChD,MAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,IAAI,MAAA,EAAQ,GAAA,EAAK,KAAK,KAAA,EAAO,OAAA,EAAS,GAAI,IAAA,CAAK,SAAS,OAAA,GAAU,EAAE,iBAAiB,IAAA,EAAK,GAAI,EAAC,EAAG;AAAA,IAC1H;AAAA,IACA,KAAK,IAAA;AAAA,IACL,KAAK,IAAA;AAAA,IACL,KAAK,KAAA;AAAA,IACL,KAAK,IAAA;AAAA,IACL,KAAK,KAAA,EAAO;AACV,MAAA,MAAM,OAAO,0BAAA,CAA2B,IAAA,CAAK,IAAA,CAAK,CAAC,GAAG,KAAK,CAAA;AAC3D,MAAA,MAAM,QAAQ,0BAAA,CAA2B,IAAA,CAAK,IAAA,CAAK,CAAC,GAAG,KAAK,CAAA;AAC5D,MAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,KAAA,EAAO,OAAO,MAAA;AAC5B,MAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,IAAI,IAAA,CAAK,IAAA,EAAM,MAAM,KAAA,EAAM;AAAA,IACnD;AAAA,IACA;AACE,MAAA,OAAO,MAAA;AAAA;AAEb;AAcA,SAAS,4BAAA,CAA6B,MAAuB,KAAA,EAA4C;AACvG,EAAA,IAAI,gBAAgB,OAAA,EAAS;AAC3B,IAAA,IAAI,IAAA,CAAK,KAAK,MAAA,KAAW,CAAA,IAAK,KAAK,IAAA,CAAK,CAAC,CAAA,KAAM,KAAA,EAAO,OAAO,MAAA;AAC7D,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,KAAK,IAAA,CAAK,CAAC,CAAE,CAAC,CAAA;AAAA,EACpC;AACA,EAAA,IAAI,IAAA,YAAgB,OAAO,OAAO,IAAA;AAClC,EAAA,IAAI,gBAAgB,IAAA,EAAM;AACxB,IAAA,MAAM,IAAA,GAAO,KAAK,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ,4BAAA,CAA6B,GAAA,EAAK,KAAK,CAAC,CAAA;AAC5E,IAAA,IAAI,KAAK,IAAA,CAAK,CAAC,QAAQ,GAAA,KAAQ,MAAS,GAAG,OAAO,MAAA;AAClD,IAAA,OAAO,IAAI,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM,IAA8B,CAAA;AAAA,EAC3D;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,uBAAA,CACP,MAAA,EACA,KAAA,EACA,UAAA,EAC4B;AAC5B,EAAA,IAAI,MAAA,KAAW,MAAA,EAAW,OAAO,EAAE,MAAM,MAAA,EAAO;AAChD,EAAA,IAAI,iBAAA,CAAkB,MAAM,CAAA,EAAG;AAC7B,IAAA,OAAO,iCAAA,CAAkC,MAAA,EAAQ,KAAA,EAAO,UAAU,CAAA,GAC9D,EAAE,IAAA,EAAM,QAAA,EAAU,UAAA,EAAY,MAAA,EAAQ,KAAA,EAAM,GAC5C,MAAA;AAAA,EACN;AACA,EAAA,IAAI,CAAC,aAAA,CAAc,MAAM,KAAK,gBAAA,CAAiB,MAAM,GAAG,OAAO,MAAA;AAE/D,EAAA,MAAM,SAAsE,EAAC;AAC7E,EAAA,IAAI,CAAC,4BAA4B,MAAA,EAAkB,KAAA,EAAO,YAAY,EAAC,EAAG,MAAM,CAAA,EAAG,OAAO,MAAA;AAC1F,EAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAM;AACzC;AAEA,SAAS,2BAAA,CACP,MAAA,EACA,KAAA,EACA,UAAA,EACA,QACA,MAAA,EACS;AACT,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AACjD,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,qBAAqB,CAAA,EAAG,OAAO,KAAA;AAClD,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,MAAA,EAAQ,GAAG,CAAA;AAC5B,IAAA,IAAI,iBAAA,CAAkB,KAAK,CAAA,EAAG;AAC5B,MAAA,IAAI,CAAC,iCAAA,CAAkC,KAAA,EAAO,KAAA,EAAO,UAAU,GAAG,OAAO,KAAA;AACzE,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,UAAA,EAAY,OAAO,CAAA;AACvC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,cAAc,KAAK,CAAA,IAAK,CAAC,gBAAA,CAAiB,KAAK,CAAA,EAAG;AACpD,MAAA,IAAI,CAAC,4BAA4B,KAAA,EAAiB,KAAA,EAAO,YAAY,IAAA,EAAM,MAAM,GAAG,OAAO,KAAA;AAC3F,MAAA;AAAA,IACF;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,iCAAA,CACP,UAAA,EACA,KAAA,EACA,UAAA,EACS;AACT,EAAA,IAAI,UAAA,CAAW,IAAA,KAAS,KAAA,EAAO,OAAO,IAAA;AACtC,EAAA,IAAI,UAAA,CAAW,SAAS,KAAA,EAAO;AAC7B,IAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,UAAA,EAAY,KAAK,CAAA;AAClD,IAAA,OAAO,WAAW,MAAA,IAAa,UAAA,CAAW,WAAA,EAAY,CAAE,SAAS,MAAM,CAAA;AAAA,EACzE;AACA,EAAA,OAAO,UAAA,CAAW,KAAK,KAAA,CAAM,CAAC,QAAQ,iCAAA,CAAkC,GAAA,EAAK,KAAA,EAAO,UAAU,CAAC,CAAA;AACjG;AAEA,SAAS,sBAAsB,UAAA,EAAiD;AAC9E,EAAA,MAAMW,IAAAA,uBAAU,GAAA,EAAoB;AACpC,EAAA,IAAI,UAAA,CAAW,SAAS,QAAA,EAAU;AAChC,IAAA,KAAA,MAAW,KAAA,IAAS,WAAW,MAAA,EAAQ;AACrC,MAAA,MAAM,MAAA,GAAS,MAAM,UAAA,YAAsB,OAAA,GACvC,kBAAkB,KAAA,CAAM,UAAA,EAAY,UAAA,CAAW,KAAK,CAAA,GACpD,MAAA;AACJ,MAAA,IAAI,KAAA,CAAM,IAAA,CAAK,MAAA,KAAW,CAAA,IAAK,MAAA,EAAQA,IAAAA,CAAI,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,EAAI,MAAM,CAAA;AAAA,IACvE;AAAA,EACF;AACA,EAAA,IAAI,UAAA,CAAW,IAAA,KAAS,QAAA,IAAY,UAAA,CAAW,sBAAsB,OAAA,EAAS;AAC5E,IAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,UAAA,CAAW,UAAA,EAAY,WAAW,KAAK,CAAA;AACxE,IAAA,IAAI,MAAA,EAAQA,IAAAA,CAAI,GAAA,CAAI,uBAAuB,MAAM,CAAA;AAAA,EACnD;AACA,EAAA,OAAOA,IAAAA;AACT;AAEA,SAAS,mBAAA,CACP,OAAA,EACA,KAAA,EACA,eAAA,EACA,UAAA,EAC8B;AAC9B,EAAA,MAAM,QAA0B,EAAC;AACjC,EAAA,KAAA,MAAW,MAAA,IAAU,OAAA,IAAW,EAAC,EAAG;AAClC,IAAA,MAAM,MAAA,GAAS,kBAAkB,MAAA,CAAO,UAAA,EAAY,KAAK,CAAA,IAAK,oBAAA,CAAqB,MAAA,CAAO,UAAA,EAAY,eAAe,CAAA;AACrH,IAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,IAAA,MAAM,cAAA,GAAiB,UAAA,CAAW,MAAA,CAAO,aAAA,CAAc,IAAI,MAAM,CAAA;AACjE,IAAA,IAAI,CAAC,cAAA,IAAkB,cAAA,CAAe,QAAA,EAAU,OAAO,MAAA;AACvD,IAAA,IAAI,MAAA,CAAO,cAAA,CAAe,UAAA,KAAe,QAAA,EAAU;AACjD,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,KAAK,MAAA,CAAO,cAAA,CAAe,WAAW,CAAA;AAAA,EAC7D;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,yBAAA,CACP,UAAA,EACA,QAAA,EACA,MAAA,EACA,OACA,UAAA,EACkB;AAClB,EAAA,IAAI,UAAA,CAAW,SAAS,MAAA,EAAQ,OAAOL,aAAY,UAAA,EAAY,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,IAAI,CAAA;AAE5F,EAAA,MAAM,GAAA,GAAM,KAAA,KAAU,IAAA,GAAO,QAAA,CAAS,MAAA,GAAS,KAAK,GAAA,CAAI,QAAA,CAAS,MAAA,EAAQ,MAAA,GAAS,KAAK,CAAA;AACvF,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAM,MAAM,CAAA;AAClC,EAAA,MAAM,GAAA,GAAwB,IAAI,KAAA,CAAM,CAAC,CAAA;AACzC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,IAAA,MAAM,GAAA,GAAM,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AAC/B,IAAA,IAAI,UAAA,CAAW,SAAS,QAAA,EAAU;AAChC,MAAA,GAAA,CAAI,CAAC,IAAI,gCAAA,CAAiC,UAAA,CAAW,YAAY,UAAA,EAAY,UAAA,CAAW,OAAO,GAAG,CAAA;AAClG,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAiB,EAAC;AACxB,IAAA,KAAA,MAAW,KAAA,IAAS,WAAW,MAAA,EAAQ;AACrC,MAAA,SAAA;AAAA,QACE,GAAA;AAAA,QACA,KAAA,CAAM,IAAA;AAAA,QACN,iCAAiC,KAAA,CAAM,UAAA,EAAY,UAAA,EAAY,UAAA,CAAW,OAAO,GAAG;AAAA,OACtF;AAAA,IACF;AACA,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA;AAAA,EACX;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,gCAAA,CACP,UAAA,EACA,UAAA,EACA,KAAA,EACA,GAAA,EACS;AACT,EAAA,QAAQ,WAAW,IAAA;AAAM,IACvB,KAAK,KAAA;AACH,MAAA,OAAO,UAAA,CAAW,KAAA;AAAA,IACpB,KAAK,KAAA,EAAO;AACV,MAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,UAAA,EAAY,KAAK,CAAA;AAClD,MAAA,OAAO,WAAW,MAAA,GAAY,MAAA,GAAY,UAAA,CAAW,iBAAA,CAAkB,QAAQ,GAAG,CAAA;AAAA,IACpF;AAAA,IACA,KAAK,MAAA;AACH,MAAA,OAAO,gBAAA;AAAA,QACL,UAAA;AAAA,QACA,CAAC,GAAA,KAAQ,gCAAA,CAAiC,GAAA,EAAK,UAAA,EAAY,OAAO,GAAG;AAAA,OACvE;AAAA;AAEN;AAEA,SAAS,0BAAA,CAA2B,MAAmC,KAAA,EAA0C;AAC/G,EAAA,IAAI,IAAA,YAAgB,OAAA,EAAS,OAAO,kBAAA,CAAmB,MAAM,KAAK,CAAA;AAClE,EAAA,MAAM,OAAA,GAAU,uBAAuB,IAAI,CAAA;AAC3C,EAAA,OAAO,YAAY,MAAA,GAAY,EAAE,MAAM,KAAA,EAAO,KAAA,EAAO,SAAQ,GAAI,MAAA;AACnE;AAEA,SAAS,uBAAuB,IAAA,EAAuD;AACrF,EAAA,IAAI,EAAE,IAAA,YAAgB,KAAA,CAAA,EAAQ,OAAO,MAAA;AACrC,EAAA,OAAO,cAAA,CAAe,IAAA,CAAK,KAAK,CAAA,GAAI,KAAK,KAAA,GAAQ,MAAA;AACnD;AAEA,SAAS,kBAAA,CAAmB,KAAc,KAAA,EAA4C;AACpF,EAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,GAAA,EAAK,KAAK,CAAA;AAC3C,EAAA,OAAO,SAAS,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,QAAO,GAAI,MAAA;AAClD;AAEA,SAAS,iBAAA,CAAkB,MAAuB,KAAA,EAAmC;AACnF,EAAA,IAAI,EAAE,IAAA,YAAgB,OAAA,CAAA,EAAU,OAAO,MAAA;AACvC,EAAA,IAAI,IAAA,CAAK,KAAK,MAAA,KAAW,CAAA,IAAK,KAAK,IAAA,CAAK,CAAC,CAAA,KAAM,KAAA,EAAO,OAAO,MAAA;AAC7D,EAAA,OAAO,IAAA,CAAK,KAAK,CAAC,CAAA;AACpB;AAEA,SAAS,oBAAA,CAAqB,MAAuB,eAAA,EAA0D;AAC7G,EAAA,IAAI,EAAE,IAAA,YAAgB,OAAA,CAAA,EAAU,OAAO,MAAA;AACvC,EAAA,IAAI,IAAA,CAAK,KAAK,MAAA,KAAW,CAAA,IAAK,KAAK,IAAA,CAAK,CAAC,CAAA,KAAM,WAAA,EAAa,OAAO,MAAA;AACnE,EAAA,OAAO,eAAA,CAAgB,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA;AAC1C;AAEA,SAAS,eAAe,KAAA,EAAiC;AACvD,EAAA,OAAO,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,SAAA,IAAa,OAAO,KAAA,KAAU,QAAA;AACpI;AAMA,SAAS,aAAa,IAAA,EAA4B;AAChD,EAAA,IAAI,IAAA,CAAK,SAAS,eAAA,EAAiB;AACjC,IAAA,MAAM,MAAsB,EAAC;AAC7B,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,GAAG,KAAK,IAAA,CAAK,UAAA,CAAW,SAAQ,EAAG;AAIlD,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,GAAA,EAAK,EAAA,EAAI,EAAE,CAAC,IAAA,CAAK,KAAK,GAAG,GAAA,EAAI,EAAG,CAAA;AAAA,IAC7C;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,IAAI,IAAA,CAAK,SAAS,UAAA,EAAY;AAC5B,IAAA,OAAO,cAAc,IAAA,CAAK,KAAK,EAAE,GAAA,CAAI,CAAC,KAAK,KAAA,MAAW;AAAA,MACpD,GAAA,EAAK,CAAA,EAAG,IAAA,CAAK,KAAK,IAAI,KAAK,CAAA,CAAA;AAAA,MAC3B,EAAA,EAAI,EAAE,CAAC,IAAA,CAAK,KAAK,GAAG,WAAA,CAAY,GAAG,CAAA;AAAE,KACvC,CAAE,CAAA;AAAA,EACJ;AAEA,EAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,uBAAA,EAA2B,IAAA,CAA4B,IAAI,CAAA,CAAE,CAAA;AACzF;AAEA,SAAS,SAAA,CAAU,UAA0BC,KAAAA,EAAkC;AAC7E,EAAA,MAAM,SAAA,GAAY,YAAA,CAAaA,KAAAA,CAAK,IAAI,CAAA;AACxC,EAAA,MAAMX,SAAAA,GAAWW,KAAAA,CAAK,IAAA,KAAS,OAAA,GAAU,SAASA,KAAAA,CAAK,IAAA;AACvD,EAAA,MAAM,UAAA,GAAaA,MAAK,IAAA,CAAK,KAAA;AAE7B,EAAA,IAAIX,cAAa,OAAA,EAAS;AACxB,IAAA,MAAM,UAA0B,EAAC;AACjC,IAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,MAAA,KAAA,MAAW,SAAS,SAAA,EAAW;AAC7B,QAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,UACX,GAAA,EAAK,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,KAAA,CAAM,GAAG,CAAC,CAAA,CAAA;AAAA,UAC7C,IAAI,EAAE,GAAG,KAAK,EAAA,EAAI,GAAG,MAAM,EAAA;AAAG,SAC/B,CAAA;AAAA,MACH;AAAA,IACF;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,MAAM,QAAA,GAAW,yBAAA,CAA0BW,KAAAA,EAAM,UAAU,CAAA;AAC3D,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO,aAAA,CAAc,QAAA,EAAU,SAAA,EAAWX,SAAAA,EAAU,UAAA,EAAY,SAAS,CAAC,CAAA,EAAG,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EAC1F;AAEA,EAAA,MAAM,MAAsB,EAAC;AAC7B,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAAY;AACrC,EAAA,MAAM,QAAA,GAAWA,SAAAA,KAAa,MAAA,IAAUA,SAAAA,KAAa,MAAA;AACrD,EAAA,MAAM,SAAA,GAAYA,SAAAA,KAAa,OAAA,IAAWA,SAAAA,KAAa,MAAA;AAEvD,EAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,IAAA,IAAI,OAAA,GAAU,KAAA;AACd,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,QAAQ,CAAA,EAAA,EAAK;AACzC,MAAA,MAAM,KAAA,GAAQ,UAAU,CAAC,CAAA;AACzB,MAAA,MAAM,KAAK,EAAE,GAAG,KAAK,EAAA,EAAI,GAAG,MAAM,EAAA,EAAG;AACrC,MAAA,IAAI,WAAA,CAAY,EAAA,EAAIW,KAAI,CAAA,EAAG;AACzB,QAAA,OAAA,GAAU,IAAA;AACV,QAAA,YAAA,CAAa,IAAI,CAAC,CAAA;AAClB,QAAA,GAAA,CAAI,IAAA,CAAK,EAAE,GAAA,EAAK,CAAA,EAAG,OAAO,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,EAAI,OAAO,KAAA,CAAM,GAAG,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA;AAAA,MAClE;AAAA,IACF;AACA,IAAA,IAAI,CAAC,WAAW,QAAA,EAAU;AACxB,MAAA,GAAA,CAAI,IAAA,CAAK;AAAA,QACP,KAAK,CAAA,EAAG,MAAA,CAAO,KAAK,GAAG,CAAC,SAAS,UAAU,CAAA,CAAA;AAAA,QAC3C,EAAA,EAAI,EAAE,GAAG,IAAA,CAAK,IAAI,CAAC,UAAU,GAAG,IAAA;AAAK,OACtC,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,QAAQ,CAAA,EAAA,EAAK;AACzC,MAAA,IAAI,YAAA,CAAa,GAAA,CAAI,CAAC,CAAA,EAAG;AACzB,MAAA,MAAM,KAAA,GAAQ,UAAU,CAAC,CAAA;AACzB,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,GAAA,EAAK,CAAA,KAAA,EAAQ,OAAO,KAAA,CAAM,GAAG,CAAC,CAAA,CAAA,EAAI,IAAI,EAAE,GAAG,KAAA,CAAM,EAAA,IAAM,CAAA;AAAA,IACpE;AAAA,EACF;AAEA,EAAA,OAAO,GAAA;AACT;AAOA,SAAS,cACP,QAAA,EACA,SAAA,EACAX,SAAAA,EACA,UAAA,EACA,gBACA,eAAA,EACgB;AAEhB,EAAA,MAAM,OAAA,uBAAc,GAAA,EAA+B;AACnD,EAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,SAAA,CAAU,QAAQ,KAAA,EAAA,EAAS;AACrD,IAAA,MAAM,GAAA,GAAM,UAAU,KAAK,CAAA;AAC3B,IAAA,MAAM,KAAA,GAAQ,kBAAA,CAAmB,eAAA,EAAiB,GAAA,CAAI,EAAE,CAAA;AACxD,IAAA,IAAI,SAAA,CAAU,KAAK,CAAA,EAAG;AACtB,IAAA,MAAM,GAAA,GAAM,YAAY,KAAK,CAAA;AAC7B,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AAC9B,IAAA,MAAM,KAAA,GAAQ,EAAE,KAAA,EAAO,GAAA,EAAK,KAAA,EAAM;AAClC,IAAA,IAAI,MAAA,EAAQ,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAAA,SACxB,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,CAAC,KAAK,CAAC,CAAA;AAAA,EAC/B;AAEA,EAAA,MAAM,QAAA,GAAWA,SAAAA,KAAa,MAAA,IAAUA,SAAAA,KAAa,MAAA;AACrD,EAAA,MAAM,SAAA,GAAYA,SAAAA,KAAa,OAAA,IAAWA,SAAAA,KAAa,MAAA;AACvD,EAAA,MAAM,YAAA,GAAe,SAAA,mBAAY,IAAI,GAAA,EAAY,GAAI,MAAA;AACrD,EAAA,MAAM,MAAsB,EAAC;AAE7B,EAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,IAAA,MAAM,SAAA,GAAY,kBAAA,CAAmB,cAAA,EAAgB,IAAA,CAAK,EAAE,CAAA;AAC5D,IAAA,IAAI,OAAA,GAAU,KAAA;AACd,IAAA,IAAI,CAAC,SAAA,CAAU,SAAS,CAAA,EAAG;AACzB,MAAA,KAAA,MAAW,KAAA,IAAS,QAAQ,GAAA,CAAI,WAAA,CAAY,SAAS,CAAC,CAAA,IAAK,EAAC,EAAG;AAG7D,QAAA,IAAI,CAAC,WAAA,CAAY,SAAA,EAAW,KAAA,CAAM,KAAK,CAAA,EAAG;AAC1C,QAAA,OAAA,GAAU,IAAA;AACV,QAAA,YAAA,EAAc,GAAA,CAAI,MAAM,KAAK,CAAA;AAC7B,QAAA,GAAA,CAAI,IAAA,CAAK;AAAA,UACP,GAAA,EAAK,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,GAAG,CAAC,CAAA,CAAA;AAAA,UACjD,EAAA,EAAI,EAAE,GAAG,IAAA,CAAK,IAAI,GAAG,KAAA,CAAM,IAAI,EAAA;AAAG,SACnC,CAAA;AAAA,MACH;AAAA,IACF;AACA,IAAA,IAAI,CAAC,WAAW,QAAA,EAAU;AACxB,MAAA,GAAA,CAAI,IAAA,CAAK;AAAA,QACP,KAAK,CAAA,EAAG,MAAA,CAAO,KAAK,GAAG,CAAC,SAAS,UAAU,CAAA,CAAA;AAAA,QAC3C,EAAA,EAAI,EAAE,GAAG,IAAA,CAAK,IAAI,CAAC,UAAU,GAAG,IAAA;AAAK,OACtC,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,SAAA,CAAU,QAAQ,KAAA,EAAA,EAAS;AACrD,MAAA,IAAI,YAAA,CAAc,GAAA,CAAI,KAAK,CAAA,EAAG;AAC9B,MAAA,MAAM,KAAA,GAAQ,UAAU,KAAK,CAAA;AAC7B,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,GAAA,EAAK,CAAA,KAAA,EAAQ,OAAO,KAAA,CAAM,GAAG,CAAC,CAAA,CAAA,EAAI,IAAI,EAAE,GAAG,KAAA,CAAM,EAAA,IAAM,CAAA;AAAA,IACpE;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,yBAAA,CACPW,OACA,UAAA,EAC6D;AAC7D,EAAA,MAAM,aAAA,GAAgB,yBAAA,CAA0BA,KAAAA,CAAK,IAAA,EAAM,UAAU,CAAA;AACrE,EAAA,MAAM,cAAA,GAAiB,yBAAA,CAA0BA,KAAAA,CAAK,KAAA,EAAO,UAAU,CAAA;AACvE,EAAA,IAAI,aAAA,KAAkB,gBAAgB,OAAO,MAAA;AAC7C,EAAA,OAAO,aAAA,GAAgB,CAACA,KAAAA,CAAK,KAAA,EAAOA,KAAAA,CAAK,IAAI,CAAA,GAAI,CAACA,KAAAA,CAAK,IAAA,EAAMA,KAAAA,CAAK,KAAK,CAAA;AACzE;AAEA,SAAS,yBAAA,CAA0B,YAA6B,KAAA,EAAwB;AACtF,EAAA,IAAI,WAAW,IAAA,KAAS,KAAA,SAAc,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,KAAM,KAAA;AAC7D,EAAA,IAAI,UAAA,CAAW,SAAS,MAAA,EAAQ;AAC9B,IAAA,OAAO,UAAA,CAAW,KAAK,IAAA,CAAK,CAAC,QAAQ,yBAAA,CAA0B,GAAA,EAAK,KAAK,CAAC,CAAA;AAAA,EAC5E;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,YAAY,KAAA,EAAyB;AAC5C,EAAA,IAAI,iBAAiB,IAAA,EAAM,OAAO,CAAA,KAAA,EAAQ,KAAA,CAAM,SAAS,CAAA,CAAA;AACzD,EAAA,QAAQ,OAAO,KAAA;AAAO,IACpB,KAAK,QAAA;AACH,MAAA,OAAO,UAAU,KAAK,CAAA,CAAA;AAAA,IACxB,KAAK,QAAA;AACH,MAAA,IAAI,MAAA,CAAO,EAAA,CAAG,KAAA,EAAO,EAAE,GAAG,OAAO,WAAA;AACjC,MAAA,IAAI,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,EAAG,OAAO,YAAA;AAChC,MAAA,OAAO,UAAU,KAAK,CAAA,CAAA;AAAA,IACxB,KAAK,QAAA;AACH,MAAA,OAAO,UAAU,KAAK,CAAA,CAAA;AAAA,IACxB,KAAK,SAAA;AACH,MAAA,OAAO,QAAQ,cAAA,GAAiB,eAAA;AAAA,IAClC;AAGE,MAAA,OAAO,KAAA;AAAA;AAEb;AAEA,SAAS,WAAA,CAAY,IAA6BA,KAAAA,EAA2B;AAC3E,EAAA,MAAM,IAAA,GAAO,kBAAA,CAAmBA,KAAAA,CAAK,IAAA,EAAM,EAAE,CAAA;AAC7C,EAAA,MAAM,KAAA,GAAQ,kBAAA,CAAmBA,KAAAA,CAAK,KAAA,EAAO,EAAE,CAAA;AAC/C,EAAA,IAAI,UAAU,IAAI,CAAA,IAAK,SAAA,CAAU,KAAK,GAAG,OAAO,KAAA;AAChD,EAAA,OAAO,WAAA,CAAY,MAAM,KAAK,CAAA;AAChC;AAMA,SAAS,UAAA,CAAW,MAAsB,YAAA,EAA6C;AACrF,EAAA,IAAI,OAAA,GAAU,IAAA;AACd,EAAA,KAAA,MAAW,KAAA,IAAS,YAAA,IAAgB,EAAC,EAAG;AACtC,IAAA,MAAM,IAAA,GAAO,mBAAmB,KAAK,CAAA;AACrC,IAAA,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,CAAC,GAAA,KAAQ,kBAAA,CAAmB,mBAAmB,IAAA,EAAM,GAAA,CAAI,EAAE,CAAC,CAAC,CAAA;AAAA,EACxF;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,WAAA,CAAY,MAAsBR,MAAAA,EAAgC;AACzE,EAAA,MAAM,SAAA,GAAYA,OAAM,IAAA,CAAK,KAAA;AAC7B,EAAA,MAAM,YAAYA,MAAAA,CAAM,MAAA;AAExB,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ;AACvB,IAAA,IAAI,QAAA;AACJ,IAAA,IAAIA,OAAM,QAAA,EAAU;AAClB,MAAA,QAAA,GAAWA,MAAAA,CAAM,QAAA,CAAS,GAAA,CAAI,EAAmB,CAAA;AAAA,IACnD,CAAA,MAAA,IAAW,cAAc,MAAA,EAAW;AAClC,MAAA,QAAA,GAAW,cAAA,CAAe,SAAA,EAAW,GAAA,CAAI,EAAS,CAAA;AAAA,IACpD,CAAA,MAAA,IAAA,CAAYA,MAAAA,CAAM,IAAA,EAAM,MAAA,IAAU,OAAO,CAAA,EAAG;AAC1C,MAAA,QAAA,GAAW,GAAA,CAAI,GAAG,SAAS,CAAA;AAAA,IAC7B,CAAA,MAAO;AACL,MAAA,QAAA,GAAW,mBAAA,CAAoB,IAAI,EAAE,CAAA;AAAA,IACvC;AAEA,IAAA,OAAO;AAAA,MACL,KAAK,GAAA,CAAI,GAAA;AAAA,MACT,EAAA,EAAI;AAAA,QACF,GAAG,GAAA,CAAI,EAAA;AAAA,QACP,SAAA,EAAW;AAAA;AACb,KACF;AAAA,EACF,CAAC,CAAA;AACH;AAEA,SAAS,YAAA,CAAa,MAAsBA,MAAAA,EAAgC;AAC1E,EAAA,MAAM,OAAA,GAAUA,MAAAA,CAAM,OAAA,IAAW,EAAC;AAClC,EAAA,MAAM,MAAA,uBAAa,GAAA,EAA8D;AAEjF,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,MAAA,GAAS,QAAQ,GAAA,CAAI,CAAC,SAAS,kBAAA,CAAmB,IAAA,EAAM,GAAA,CAAI,EAAE,CAAC,CAAA;AACrE,IAAA,MAAM,GAAA,GAAM,UAAU,MAAA,CAAO,MAAA,KAAW,IAAI,CAAC,eAAe,IAAI,MAAM,CAAA;AACtE,IAAA,IAAI,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,GAAG,CAAA;AAC1B,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,KAAA,GAAQ,EAAE,MAAA,EAAQ,IAAA,EAAM,EAAC,EAAE;AAC3B,MAAA,MAAA,CAAO,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,IACvB;AACA,IAAA,KAAA,CAAM,IAAA,CAAK,KAAK,GAAG,CAAA;AAAA,EACrB;AAEA,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,IAAK,OAAA,CAAQ,WAAW,CAAA,IAAK,yBAAA,CAA0BA,MAAAA,CAAM,MAAiB,CAAA,EAAG;AACnG,IAAA,MAAA,CAAO,GAAA,CAAI,SAAA,CAAU,CAAC,eAAe,CAAC,CAAA,EAAG,EAAE,MAAA,EAAQ,EAAC,EAAG,IAAA,EAAM,IAAI,CAAA;AAAA,EACnE;AAEA,EAAA,MAAM,MAAsB,EAAC;AAC7B,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,MAAA,EAAQ;AACjC,IAAA,MAAM,UAAU,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,EAAC;AACtC,IAAA,MAAM,QAAA,GAAWA,MAAAA,CAAM,QAAA,GACnBA,MAAAA,CAAM,SAAS,OAAwB,CAAA,GACvCA,MAAAA,CAAM,MAAA,KAAW,MAAA,GACf,mBAAA,CAAoBA,MAAAA,CAAM,MAAA,EAAmB,MAAM,IAAA,EAAM,OAAc,CAAA,GACvE,MAAA,CAAO,WAAA,CAAY,KAAA,CAAM,MAAA,CAAO,IAAI,CAAC,KAAA,EAAO,CAAA,KAAM,CAAC,CAAA,MAAA,EAAS,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,CAAC,CAAA;AAE9E,IAAA,MAAM,EAAA,GAA8B;AAAA,MAClC,GAAG,OAAA;AAAA,MACH,SAAA,EAAW;AAAA,KACb;AAEA,IAAA,IAAI,CAAC,YAAA,CAAa,EAAA,EAAI,MAAM,IAAA,EAAMA,MAAAA,CAAM,MAAM,CAAA,EAAG;AACjD,IAAA,IAAI,MAAA,GAAS,IAAA;AACb,IAAA,KAAA,MAAW,QAAA,IAAYA,MAAAA,CAAM,QAAA,IAAY,EAAC,EAAG;AAC3C,MAAA,IAAI,CAAC,kBAAA,CAAmB,QAAA,CAAS,EAAmB,CAAC,CAAA,EAAG;AACtD,QAAA,MAAA,GAAS,KAAA;AACT,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,IAAA,GAAA,CAAI,IAAA,CAAK,EAAE,GAAA,EAAK,GAAA,KAAQ,UAAU,CAAC,eAAe,CAAC,CAAA,GAAI,CAAA,aAAA,EAAgB,SAAA,EAAW,CAAA,CAAA,GAAK,GAAA,EAAK,IAAI,CAAA;AAAA,EAClG;AAEA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,YAAA,CACP,EAAA,EACA,SAAA,EACA,MAAA,EACS;AACT,EAAA,KAAA,MAAW,MAAA,IAAU,MAAA,IAAU,EAAC,EAAG;AACjC,IAAA,MAAM,IAAA,GAAO,oBAAoB,MAAM,CAAA;AACvC,IAAA,IAAI,CAAC,kBAAA,CAAmB,uBAAA,CAAwB,MAAM,SAAA,EAAW,EAAE,CAAC,CAAA,EAAG;AACrE,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,cAAA,CAAe,GAAA,EAAc,EAAA,EAA6BA,MAAAA,EAAyB;AAC1F,EAAA,IAAI,GAAA,YAAe,gBAAA,IAAoB,UAAA,CAAW,GAAG,CAAA,EAAG;AACtD,IAAA,OAAO,gBAAA,CAAiB,KAAK,EAAE,CAAA;AAAA,EACjC;AACA,EAAA,IAAI,iBAAA,CAAkB,GAAG,CAAA,EAAG;AAC1B,IAAA,OAAO,kBAAA,CAAmB,KAAK,EAAE,CAAA;AAAA,EACnC;AACA,EAAA,IAAI,GAAA,YAAe,SAAA,IAAa,WAAA,CAAY,GAAG,CAAA,EAAG;AAChD,IAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,UAAA,EAAa,GAAA,CAAI,IAAI,CAAA,6CAAA,CAA+C,CAAA;AAAA,EAChG;AACA,EAAA,IAAI,aAAA,CAAc,GAAG,CAAA,EAAG;AACtB,IAAA,MAAM,MAAiB,EAAC;AACxB,IAAA,eAAA,CAAgB,GAAA,EAAK,EAAC,EAAG,GAAA,EAAe,EAAS,CAAA;AACjD,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,eAAA,CACP,GAAA,EACA,MAAA,EACA,MAAA,EACA,IACAA,MAAAA,EACM;AACN,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AACjD,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,qBAAqB,CAAA,EAAG;AACzC,MAAA,MAAM,WAAA,GAAc,iBAAA,CAAkB,KAAK,CAAA,GACvC,kBAAA,CAAmB,KAAA,EAAO,EAAE,CAAA,GAC5B,aAAA,CAAc,KAAK,CAAA,GACjB,KAAA,GACA,MAAA;AACN,MAAA,WAAA,CAAY,GAAA,EAAK,QAAQ,WAAW,CAAA;AACpC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,MAAA,EAAQ,GAAG,CAAA;AAC5B,IAAA,IAAI,KAAA,YAAiB,gBAAA,IAAoB,UAAA,CAAW,KAAK,CAAA,EAAG;AAC1D,MAAA,SAAA,CAAU,GAAA,EAAK,IAAA,EAAM,gBAAA,CAAiB,KAAA,EAAO,EAAE,CAAC,CAAA;AAChD,MAAA;AAAA,IACF;AACA,IAAA,IAAI,iBAAA,CAAkB,KAAK,CAAA,EAAG;AAC5B,MAAA,SAAA,CAAU,GAAA,EAAK,IAAA,EAAM,kBAAA,CAAmB,KAAA,EAAO,EAAE,CAAC,CAAA;AAClD,MAAA;AAAA,IACF;AACA,IAAA,IAAI,KAAA,YAAiB,SAAA,IAAa,WAAA,CAAY,KAAK,CAAA,EAAG;AACpD,MAAA,SAAA,CAAU,GAAA,EAAK,MAAM,IAAI,CAAA;AACzB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,aAAA,CAAc,KAAK,CAAA,EAAG;AACxB,MAAA,eAAA,CAAgB,GAAA,EAAK,IAAA,EAAM,KAAA,EAAiB,EAAS,CAAA;AACrD,MAAA;AAAA,IACF;AACA,IAAA,SAAA,CAAU,GAAA,EAAK,MAAM,KAAK,CAAA;AAAA,EAC5B;AACF;AAEA,SAAS,mBAAA,CACP,GAAA,EACA,IAAA,EACA,OAAA,EACAA,MAAAA,EACS;AACT,EAAA,IAAI,kBAAkB,GAAG,CAAA,IAAK,eAAe,SAAA,IAAa,WAAA,CAAY,GAAG,CAAA,EAAG;AAC1E,IAAA,OAAO,uBAAA,CAAwB,GAAA,EAAK,IAAA,EAAM,OAAO,CAAA;AAAA,EACnD;AACA,EAAA,IAAI,GAAA,YAAe,gBAAA,IAAoB,UAAA,CAAW,GAAG,CAAA,EAAG;AACtD,IAAA,OAAO,gBAAA,CAAiB,KAAK,OAAO,CAAA;AAAA,EACtC;AACA,EAAA,IAAI,aAAA,CAAc,GAAG,CAAA,EAAG;AACtB,IAAA,MAAM,MAAiB,EAAC;AACxB,IAAA,oBAAA,CAAqB,KAAK,EAAC,EAAG,GAAA,EAAe,IAAA,EAAM,OAAc,CAAA;AACjE,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,qBACP,GAAA,EACA,MAAA,EACA,MAAA,EACA,IAAA,EACA,SACAA,MAAAA,EACM;AACN,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AACjD,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,qBAAqB,CAAA,EAAG;AACzC,MAAA,MAAM,WAAA,GAAc,iBAAA,CAAkB,KAAK,CAAA,GACvC,kBAAA,CAAmB,KAAA,EAAO,OAAO,CAAA,GACjC,aAAA,CAAc,KAAK,CAAA,GACjB,KAAA,GACA,MAAA;AACN,MAAA,WAAA,CAAY,GAAA,EAAK,QAAQ,WAAW,CAAA;AACpC,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,MAAA,EAAQ,GAAG,CAAA;AAC5B,IAAA,IAAI,KAAA,YAAiB,gBAAA,IAAoB,UAAA,CAAW,KAAK,CAAA,EAAG;AAC1D,MAAA,SAAA,CAAU,GAAA,EAAK,IAAA,EAAM,gBAAA,CAAiB,KAAA,EAAO,OAAO,CAAC,CAAA;AAAA,IACvD,CAAA,MAAA,IAAW,kBAAkB,KAAK,CAAA,IAAK,iBAAiB,SAAA,IAAa,WAAA,CAAY,KAAK,CAAA,EAAG;AACvF,MAAA,SAAA,CAAU,KAAK,IAAA,EAAM,uBAAA,CAAwB,KAAA,EAAO,IAAA,EAAM,OAAO,CAAC,CAAA;AAAA,IACpE,CAAA,MAAA,IAAW,aAAA,CAAc,KAAK,CAAA,EAAG;AAC/B,MAAA,oBAAA,CAAqB,GAAA,EAAK,IAAA,EAAM,KAAA,EAAiB,IAAA,EAAM,OAAc,CAAA;AAAA,IACvE,CAAA,MAAO;AACL,MAAA,SAAA,CAAU,GAAA,EAAK,MAAM,KAAK,CAAA;AAAA,IAC5B;AAAA,EACF;AACF;AAEA,SAAS,gBAAA,CAAiB,UAA4B,QAAA,EAA4C;AAChG,EAAA,MAAM,WAAA,GAAc,kBAAA,CAAmB,QAAA,CAAS,gBAAA,EAAkB,QAAQ,CAAA;AAE1E,EAAA,IAAI,SAAS,aAAA,EAAe;AAC1B,IAAA,KAAA,MAAWS,OAAAA,IAAU,SAAS,aAAA,EAAe;AAC3C,MAAA,IAAI,CAAC,mBAAmB,kBAAA,CAAmB,kBAAA,CAAmBA,OAAM,CAAA,EAAG,QAAQ,CAAC,CAAA,EAAG;AACjF,QAAA,OAAO,QAAA,CAAS,oBAAoB,QAAA,GAChC,EAAA,GACA,SAAS,eAAA,KAAoB,QAAA,GAC3B,SACA,EAAC;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,WAAA,GAAc,IAAI,IAAA,CAAK,IAAA,EAAM;AAAA,IACjC,QAAA,CAAS,qBAAA;AAAA,IACT,IAAI,MAAM,WAAW;AAAA,GACtB,CAAA;AACD,EAAA,MAAM,UAAA,GAAsB;AAAA,IAC1B,GAAG,QAAA,CAAS,KAAA;AAAA,IACZ,KAAA,EAAO,CAAC,GAAI,QAAA,CAAS,MAAM,KAAA,IAAS,IAAK,WAAW;AAAA,GACtD;AACA,EAAA,MAAM,UAAA,GAAa,wBAAA,CAAyB,QAAA,EAAU,WAAW,CAAA;AACjE,EAAA,MAAM,IAAA,GAAO,UAAA,KAAe,MAAA,GACxB,aAAA,CAAc,UAAU,CAAA,GAIvB,uBAAA,CAAwB,QAAQ,CAAA,GAAI,UAAU,CAAA,IAAK,aAAA,CAAc,UAAU,CAAA;AAEhF,EAAA,IAAI,QAAA,CAAS,oBAAoB,QAAA,EAAU;AACzC,IAAA,MAAM,WAAA,GAAc,SAAS,WAAA,IAAe,qBAAA;AAC5C,IAAA,OAAO,IAAA,CACJ,GAAA,CAAI,CAAC,GAAA,KAAQ;AACZ,MAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,OAAO,GAAA,KAAQ,QAAA,EAAU;AAC3C,QAAA,OAAO,MAAA,CAAQ,GAAA,CAAkB,WAAW,CAAA,IAAK,EAAE,CAAA;AAAA,MACrD;AACA,MAAA,OAAO,MAAA,CAAO,OAAO,EAAE,CAAA;AAAA,IACzB,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAA;AAAA,EACZ;AAEA,EAAA,IAAI,QAAA,CAAS,eAAA,KAAoB,QAAA,EAAU,OAAO,KAAK,CAAC,CAAA;AAExD,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,wBAAwB,QAAA,EAA0D;AACzF,EAAA,IAAI,CAAC,0BAAA,EAA4B,OAAO,sBAAA,CAAuB,SAAS,KAAK,CAAA;AAC7E,EAAA,MAAM,MAAA,GAAS,0BAAA,CAA2B,GAAA,CAAI,QAAkB,CAAA;AAChE,EAAA,IAAI,MAAA,KAAW,MAAA,EAAW,OAAO,MAAA,IAAU,MAAA;AAC3C,EAAA,MAAM,QAAA,GAAW,sBAAA,CAAuB,QAAA,CAAS,KAAK,CAAA,IAAK,IAAA;AAC3D,EAAA,0BAAA,CAA2B,GAAA,CAAI,UAAoB,QAAQ,CAAA;AAC3D,EAAA,OAAO,QAAA,IAAY,MAAA;AACrB;AAEA,SAAS,wBAAA,CACP,UACA,WAAA,EACyB;AACzB,EAAA,IAAI,SAAA,CAAU,WAAW,CAAA,IAAK,CAAC,6BAA6B,OAAO,IAAI,YAAY,CAAC,CAAA;AACpF,EAAA,MAAM,IAAA,GAAO,SAAS,KAAA,CAAM,IAAA;AAC5B,EAAA,MAAM,QAAQ,QAAA,CAAS,qBAAA;AACvB,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,eAAA,IACd,EAAE,iBAAiB,OAAA,CAAA,IACnB,KAAA,CAAM,IAAA,CAAK,MAAA,KAAW,KACtB,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,KAAK,KAAA,EAAO;AAChC,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAA,GAAU,2BAAA,CAA4B,GAAA,CAAI,QAAkB,CAAA;AAChE,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAuB;AAC3C,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA;AAC3B,IAAA,KAAA,MAAW,OAAA,IAAW,IAAA,CAAK,UAAA,CAAW,qBAAA,EAAsB,EAAG;AAC7D,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,UAAA,CAAW,iBAAA,CAAkB,QAAQ,OAAO,CAAA;AAC/D,MAAA,IAAI,SAAA,CAAU,KAAK,CAAA,EAAG;AACtB,MAAA,MAAM,GAAA,GAAM,YAAY,KAAK,CAAA;AAC7B,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AAC9B,MAAA,IAAI,MAAA,EAAQ,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AAAA,WAC1B,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,CAAC,OAAO,CAAC,CAAA;AAAA,IACjC;AACA,IAAA,OAAA,uBAAc,GAAA,EAAI;AAClB,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,QAAQ,CAAA,IAAK,OAAA,EAAS,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,WAAA,CAAY,IAAA,CAAK,QAAQ,CAAC,CAAA;AAClF,IAAA,2BAAA,CAA4B,GAAA,CAAI,UAAoB,OAAO,CAAA;AAAA,EAC7D;AACA,EAAA,OAAO,OAAA,CAAQ,IAAI,WAAA,CAAY,WAAW,CAAC,CAAA,IAAK,IAAI,YAAY,CAAC,CAAA;AACnE;AAMA,SAAS,kBAAA,CAAmB,MAAuB,EAAA,EAAsC;AACvF,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,KAAA;AACH,MAAA,OAAO,IAAA,CAAK,KAAA;AAAA,IACd,KAAK,KAAA;AACH,MAAA,OAAO,QAAA,CAAS,EAAA,EAAI,IAAA,CAAK,IAAI,CAAA;AAAA,IAC/B,KAAK,MAAA;AACH,MAAA,OAAO,YAAA,CAAa,IAAA,EAAM,EAAA,EAAI,KAAK,CAAA;AAAA;AAEzC;AAEA,SAAS,2BAAA,CAA4B,MAAuB,GAAA,EAAuC;AACjG,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,KAAA;AACH,MAAA,OAAO,IAAA,CAAK,KAAA;AAAA,IACd,KAAK,KAAA;AACH,MAAA,OAAO,QAAA,CAAS,GAAA,EAAK,IAAA,CAAK,IAAI,CAAA;AAAA,IAChC,KAAK,MAAA;AACH,MAAA,OAAO,YAAA,CAAa,IAAA,EAAM,GAAA,EAAK,IAAI,CAAA;AAAA;AAEzC;AAEA,SAAS,YAAA,CAAa,IAAA,EAAY,GAAA,EAA8B,SAAA,EAA6B;AAC3F,EAAA,MAAM,OAAA,GAAU,CAAC,IAAA,KACf,SAAA,GAAY,2BAAA,CAA4B,MAAM,GAAG,CAAA,GAAI,kBAAA,CAAmB,IAAA,EAAM,GAAG,CAAA;AAEnF,EAAA,OAAO,gBAAA,CAAiB,MAAM,OAAO,CAAA;AACvC;AAEA,SAAS,gBAAA,CACP,MACA,OAAA,EACS;AACT,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,IAAA,EAAM;AACT,MAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA;AAC/B,MAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA;AAC/B,MAAA,OAAO,SAAA,CAAU,CAAC,CAAA,IAAK,SAAA,CAAU,CAAC,CAAA,GAAI,IAAA,GAAO,WAAA,CAAY,CAAA,EAAG,CAAC,CAAA;AAAA,IAC/D;AAAA,IACA,KAAK,IAAA;AACH,MAAA,OAAO,aAAa,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,EAAG,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,EAAG,CAAC,CAAA,KAAM,IAAI,CAAC,CAAA;AAAA,IAClF,KAAK,KAAA;AACH,MAAA,OAAO,aAAa,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,EAAG,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,EAAG,CAAC,CAAA,KAAM,KAAK,CAAC,CAAA;AAAA,IACnF,KAAK,IAAA;AACH,MAAA,OAAO,aAAa,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,EAAG,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,EAAG,CAAC,CAAA,KAAM,IAAI,CAAC,CAAA;AAAA,IAClF,KAAK,KAAA;AACH,MAAA,OAAO,aAAa,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,EAAG,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,EAAG,CAAC,CAAA,KAAM,KAAK,CAAC,CAAA;AAAA,IACnF,KAAK,KAAA,EAAO;AACV,MAAA,IAAI,OAAA,GAAU,KAAA;AACd,MAAA,KAAA,MAAW,GAAA,IAAO,KAAK,IAAA,EAAM;AAC3B,QAAA,MAAM,KAAA,GAAQ,QAAQ,GAAG,CAAA;AACzB,QAAA,IAAI,KAAA,KAAU,OAAO,OAAO,KAAA;AAC5B,QAAA,IAAI,SAAA,CAAU,KAAK,CAAA,EAAG,OAAA,GAAU,IAAA;AAAA,MAClC;AACA,MAAA,OAAO,UAAU,IAAA,GAAO,IAAA;AAAA,IAC1B;AAAA,IACA,KAAK,IAAA,EAAM;AACT,MAAA,IAAI,OAAA,GAAU,KAAA;AACd,MAAA,KAAA,MAAW,GAAA,IAAO,KAAK,IAAA,EAAM;AAC3B,QAAA,MAAM,KAAA,GAAQ,QAAQ,GAAG,CAAA;AACzB,QAAA,IAAI,KAAA,KAAU,MAAM,OAAO,IAAA;AAC3B,QAAA,IAAI,SAAA,CAAU,KAAK,CAAA,EAAG,OAAA,GAAU,IAAA;AAAA,MAClC;AACA,MAAA,OAAO,UAAU,IAAA,GAAO,KAAA;AAAA,IAC1B;AAAA,IACA,KAAK,KAAA,EAAO;AACV,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA;AACnC,MAAA,OAAO,SAAA,CAAU,KAAK,CAAA,GAAI,IAAA,GAAO,CAAC,KAAA;AAAA,IACpC;AAAA,IACA,KAAK,IAAA,EAAM;AACT,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA;AACnC,MAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA;AACjC,MAAA,IAAI,SAAA,CAAU,KAAK,CAAA,EAAG,OAAO,IAAA;AAC7B,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAG,GAAG,OAAO,KAAA;AAChC,MAAA,OAAO,IAAI,IAAA,CAAK,CAAC,SAAS,WAAA,CAAY,IAAA,EAAM,KAAK,CAAC,CAAA;AAAA,IACpD;AAAA,IACA,KAAK,MAAA;AACH,MAAA,OAAO,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,EAAG,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,GAAG,KAAK,CAAA;AAAA,IAC3E,KAAK,OAAA;AACH,MAAA,OAAO,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,EAAG,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,GAAG,IAAI,CAAA;AAAA,IAC1E,KAAK,OAAA,EAAS;AACZ,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA;AACnC,MAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,CAAM,aAAY,GAAI,KAAA;AAAA,IAC3D;AAAA,IACA,KAAK,OAAA,EAAS;AACZ,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA;AACnC,MAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,CAAM,aAAY,GAAI,KAAA;AAAA,IAC3D;AAAA,IACA,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA;AACnC,MAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,CAAM,QAAQ,KAAK,CAAA,GAAI,MAAM,MAAA,GAAS,CAAA;AAAA,IAC5E;AAAA,IACA,KAAK,QAAA;AACH,MAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,IAAK,EAAE,CAAC,CAAA,CAAE,KAAK,EAAE,CAAA;AAAA,IACnE,KAAK,KAAA;AACH,MAAA,OAAA,CAAS,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,IAAK,CAAA,KAAe,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,IAAK,CAAA,CAAA;AAAA,IAC9E,KAAK,UAAA;AACH,MAAA,OAAA,CAAS,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,IAAK,CAAA,KAAe,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,IAAK,CAAA,CAAA;AAAA,IAC9E,KAAK,UAAA;AACH,MAAA,OAAA,CAAS,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,IAAK,CAAA,KAAe,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,IAAK,CAAA,CAAA;AAAA,IAC9E,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,UAAW,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,IAAK,CAAA;AAC3C,MAAA,OAAO,OAAA,KAAY,KACb,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAC,CAAE,CAAA,IAAK,CAAA,IAAa,OAAA,GACzC,IAAA;AAAA,IACN;AAAA,IACA,KAAK,UAAA,EAAY;AACf,MAAA,KAAA,MAAW,GAAA,IAAO,KAAK,IAAA,EAAM;AAC3B,QAAA,MAAM,KAAA,GAAQ,QAAQ,GAAG,CAAA;AACzB,QAAA,IAAI,CAAC,SAAA,CAAU,KAAK,CAAA,EAAG,OAAO,KAAA;AAAA,MAChC;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,IACA,KAAK,UAAA,EAAY;AACf,MAAA,MAAM,YAAY,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,SAAS,CAAC,CAAA;AACjD,MAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,SAAA,EAAW,KAAA,EAAA,EAAS;AAC9C,QAAA,IAAI,uBAAA,CAAwB,QAAQ,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAC,CAAE,CAAC,CAAA,EAAG;AAC3D,UAAA,OAAO,QAAQ,IAAA,CAAK,IAAA,CAAK,KAAA,GAAQ,CAAA,GAAI,CAAC,CAAE,CAAA;AAAA,QAC1C;AAAA,MACF;AACA,MAAA,OAAO,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAA,KAAM,CAAA,GAC5B,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAE,CAAA,GACxC,IAAA;AAAA,IACN;AAAA,IACA,KAAK,aAAA;AACH,MAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,KAAM,MAAA;AAAA,IACpC,KAAK,QAAA;AACH,MAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,KAAM,IAAA;AAAA,IACpC,KAAK,gBAAA,EAAkB;AACrB,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA;AACtC,MAAA,MAAM,IAAA,GAAO,eAAe,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAC,CAAE,GAAG,MAAM,CAAA;AAC1D,MAAA,MAAM,YAAA,GAAe,gBAAgB,QAAQ,CAAA;AAC7C,MAAA,OAAO,YAAA,KAAiB,IAAA,GAAO,KAAA,GAAQ,iBAAA,CAAkB,cAAc,IAAI,CAAA;AAAA,IAC7E;AAAA,IACA,KAAK,YAAA,EAAc;AACjB,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA;AACtC,MAAA,MAAM,IAAA,GAAO,eAAe,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAC,CAAE,GAAG,MAAM,CAAA;AAC1D,MAAA,MAAM,YAAA,GAAe,gBAAgB,QAAQ,CAAA;AAC7C,MAAA,OAAO,YAAA,KAAiB,IAAA,GAAO,KAAA,GAAQ,aAAA,CAAc,cAAc,IAAI,CAAA;AAAA,IACzE;AAAA,IACA,KAAK,SAAA,EAAW;AACd,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA;AACtC,MAAA,MAAM,KAAA,GAAQ,gBAAgB,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAC,CAAE,GAAG,OAAO,CAAA;AAC7D,MAAA,MAAM,SAAS,mBAAA,CAAoB,OAAA,CAAQ,KAAK,IAAA,CAAK,CAAC,CAAE,CAAC,CAAA;AACzD,MAAA,MAAM,QAAA,GAAW,YAAY,QAAQ,CAAA;AACrC,MAAA,OAAO,aAAa,IAAA,GAAO,KAAA,GAAQ,uBAAA,CAAwB,QAAA,EAAU,KAAK,CAAA,IAAK,MAAA;AAAA,IACjF;AAAA,IACA,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,QAAQ,WAAA,CAAY,OAAA,CAAQ,KAAK,IAAA,CAAK,CAAC,CAAE,CAAC,CAAA;AAChD,MAAA,MAAM,UAAU,aAAA,CAAc,OAAA,CAAQ,KAAK,IAAA,CAAK,CAAC,CAAE,CAAC,CAAA;AACpD,MAAA,OAAO,UAAU,IAAA,IAAQ,OAAA,KAAY,OAAO,KAAA,GAAQ,cAAA,CAAe,OAAO,OAAO,CAAA;AAAA,IACnF;AAAA,IACA,KAAK,UAAA,EAAY;AACf,MAAA,MAAM,UAAU,aAAA,CAAc,OAAA,CAAQ,KAAK,IAAA,CAAK,CAAC,CAAE,CAAC,CAAA;AACpD,MAAA,MAAM,QAAQ,WAAA,CAAY,OAAA,CAAQ,KAAK,IAAA,CAAK,CAAC,CAAE,CAAC,CAAA;AAChD,MAAA,OAAO,UAAU,IAAA,IAAQ,OAAA,KAAY,OAAO,KAAA,GAAQ,cAAA,CAAe,OAAO,OAAO,CAAA;AAAA,IACnF;AAAA,IACA;AACE,MAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,wBAAA,EAA2B,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AAAA;AAEtE;AAEA,SAAS,cAAA,CAAe,OAAgB,KAAA,EAAqB;AAC3D,EAAA,eAAA,CAAgB,OAAO,KAAK,CAAA;AAC5B,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,eAAA,CAAgB,OAAgB,KAAA,EAAsB;AAC7D,EAAA,gBAAA,CAAiB,OAAO,KAAK,CAAA;AAC7B,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,oBAAoB,KAAA,EAAwB;AACnD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,EAAG;AACxD,IAAA,MAAM,IAAI,gBAAgB,8BAA8B,CAAA;AAAA,EAC1D;AACA,EAAA,IAAI,QAAQ,CAAA,EAAG;AACb,IAAA,MAAM,IAAI,gBAAgB,4BAA4B,CAAA;AAAA,EACxD;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,gBAAgB,KAAA,EAA6B;AACpD,EAAA,MAAM,KAAA,GAAQ,YAAY,KAAK,CAAA;AAC/B,EAAA,OAAO,KAAA,KAAU,IAAA,GAAO,IAAA,GAAO,SAAA,CAAU,KAAK,CAAA;AAChD;AAEA,SAAS,YAAY,KAAA,EAA8B;AACjD,EAAA,IAAI,SAAA,CAAU,KAAK,CAAA,EAAG,OAAO,IAAA;AAC7B,EAAA,gBAAA,CAAiB,OAAO,UAAU,CAAA;AAClC,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,cAAc,KAAA,EAAgC;AACrD,EAAA,IAAI,SAAA,CAAU,KAAK,CAAA,EAAG,OAAO,IAAA;AAC7B,EAAA,OAAO,gBAAA,CAAiB,KAAA,EAAO,EAAC,EAAG,SAAS,CAAA;AAC9C;AAEA,SAAS,uBAAA,CACP,IAAA,EACA,IAAA,EACA,OAAA,EACS;AACT,EAAA,IAAI,IAAA,YAAgB,SAAA,IAAa,WAAA,CAAY,IAAI,CAAA,EAAG;AAClD,IAAA,OAAO,gBAAA,CAAiB,MAAM,IAAI,CAAA;AAAA,EACpC;AACA,EAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,IAAA,MAAM,aAAA,GAAgB,KAAK,IAAA,CAAK,GAAA;AAAA,MAAI,CAAC,GAAA,KACnC,GAAA,YAAe,SAAA,IAAa,YAAY,GAAG,CAAA,GACvC,IAAI,KAAA,CAAM,wBAAwB,GAAA,EAAK,IAAA,EAAM,OAAO,CAAC,IACrD,iBAAA,CAAkB,GAAG,CAAA,IAAK,iBAAA,CAAkB,GAAG,CAAA,GAC7C,IAAI,KAAA,CAAM,wBAAwB,GAAA,EAAK,IAAA,EAAM,OAAO,CAAC,IACrD,IAAI,KAAA,CAAM,kBAAA,CAAmB,GAAA,EAAK,OAAO,CAAC;AAAA,KAClD;AACA,IAAA,OAAO,mBAAmB,IAAI,IAAA,CAAK,KAAK,IAAA,EAAM,aAAa,GAAG,OAAO,CAAA;AAAA,EACvE;AACA,EAAA,OAAO,kBAAA,CAAmB,MAAM,OAAO,CAAA;AACzC;AAEA,SAAS,gBAAA,CAAiB,KAAgB,IAAA,EAA+B;AACvE,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ,kBAAA,CAAmB,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAI,GAAA,CAAI,EAAE,CAAC,CAAA;AACzE,EAAA,QAAQ,IAAI,IAAA;AAAM,IAChB,KAAK,OAAA;AACH,MAAA,OAAO,MAAA,CAAO,MAAA;AAAA,IAChB,KAAK,KAAA;AACH,MAAA,OAAO,UAAU,MAAM,CAAA;AAAA,IACzB,KAAK,KAAA;AACH,MAAA,OAAO,OAAO,MAAA,KAAW,CAAA,GACrB,IACA,SAAA,CAAU,MAAM,IAAI,MAAA,CAAO,MAAA;AAAA,IACjC,KAAK,KAAA;AACH,MAAA,OAAO,MAAA,CAAO,QAAQ,KAAK,CAAA;AAAA,IAC7B,KAAK,KAAA;AACH,MAAA,OAAO,MAAA,CAAO,QAAQ,KAAK,CAAA;AAAA,IAC7B;AACE,MAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,uBAAA,EAA0B,GAAA,CAAI,IAAI,CAAA,CAAE,CAAA;AAAA;AAEpE;AAEA,SAAS,kBAAkB,IAAA,EAAwB;AACjD,EAAA,IAAI,IAAA,YAAgB,SAAA,IAAa,WAAA,CAAY,IAAI,GAAG,OAAO,IAAA;AAC3D,EAAA,IAAI,IAAA,YAAgB,IAAA,IAAQI,OAAAA,CAAO,IAAI,CAAA,EAAG,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,CAAC,GAAA,KAAQ,iBAAA,CAAkB,GAAG,CAAC,CAAA;AAC/F,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,0BAA0B,MAAA,EAA0B;AAC3D,EAAA,IAAI,MAAA,KAAW,QAAW,OAAO,KAAA;AACjC,EAAA,IAAI,iBAAA,CAAkB,MAAM,CAAA,EAAG,OAAO,IAAA;AACtC,EAAA,IAAI,CAAC,aAAA,CAAc,MAAM,KAAK,gBAAA,CAAiB,MAAM,GAAG,OAAO,KAAA;AAC/D,EAAA,OAAO,MAAA,CAAO,OAAO,MAAM,CAAA,CAAE,KAAK,CAAC,KAAA,KAAU,yBAAA,CAA0B,KAAK,CAAC,CAAA;AAC/E;AAEA,SAAS,0BAA0B,MAAA,EAAiC;AAClE,EAAA,OAAA,CAAQ,MAAA,IAAU,EAAC,EAAG,IAAA,CAAK,CAAC,WAAW,iBAAA,CAAkB,mBAAA,CAAoB,MAAM,CAAC,CAAC,CAAA;AACvF;AAMA,SAAS,aAAa,IAAA,EAAsC;AAC1D,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,MAAM,MAAsB,EAAC;AAC7B,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,GAAA,GAAM,SAAA,CAAU,gBAAA,CAAiB,GAAA,CAAI,EAAE,CAAC,CAAA;AAC9C,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AACnB,IAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AACZ,IAAA,GAAA,CAAI,KAAK,GAAG,CAAA;AAAA,EACd;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,SAAA,CAAU,MAAsB,OAAA,EAA0D;AACjG,EAAA,MAAM,MAAA,GAAS,KAAK,KAAA,EAAM;AAC1B,EAAA,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACpB,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,MAAA,MAAM,EAAA,GAAK,kBAAA,CAAmB,MAAA,CAAO,UAAA,EAAY,EAAE,EAAE,CAAA;AACrD,MAAA,MAAM,EAAA,GAAK,kBAAA,CAAmB,MAAA,CAAO,UAAA,EAAY,EAAE,EAAE,CAAA;AACrD,MAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,EAAA,EAAI,EAAA,EAAI,OAAO,cAAc,CAAA;AACzD,MAAA,IAAI,GAAA,KAAQ,GAAG,OAAO,GAAA;AAAA,IACxB;AACA,IAAA,OAAO,CAAA;AAAA,EACT,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,eAAA,CAAgB,CAAA,EAAY,CAAA,EAAY,OAAA,EAAiC;AAChF,EAAA,MAAM,KAAA,GAAQ,UAAU,CAAC,CAAA,IAAM,OAAO,CAAA,KAAM,QAAA,IAAY,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AACtE,EAAA,MAAM,KAAA,GAAQ,UAAU,CAAC,CAAA,IAAM,OAAO,CAAA,KAAM,QAAA,IAAY,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AACtE,EAAA,IAAI,SAAS,KAAA,EAAO;AAClB,IAAA,IAAI,KAAA,IAAS,OAAO,OAAO,CAAA;AAC3B,IAAA,MAAM,SAAA,GAAY,QAAQ,KAAA,KAAU,OAAA;AACpC,IAAA,MAAM,OAAO,KAAA,GAAS,SAAA,GAAY,EAAA,GAAK,CAAA,GAAM,YAAY,CAAA,GAAI,EAAA;AAC7D,IAAA,OAAO,OAAA,CAAQ,SAAA,KAAc,MAAA,GAAS,CAAC,IAAA,GAAO,IAAA;AAAA,EAChD;AAEA,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,MAAM,QAAA,EAAU;AAClD,IAAA,IAAI,OAAA,CAAQ,eAAe,QAAA,EAAU;AACnC,MAAA,GAAA,GAAM,EAAE,aAAA,CAAc,CAAA,EAAG,OAAA,CAAQ,MAAA,EAAQ,QAAQ,aAAiD,CAAA;AAAA,IACpG,CAAA,MAAO;AACL,MAAA,GAAA,GAAM,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,CAAA,GAAI,IAAI,CAAA,GAAI,CAAA;AAAA,IACjC;AAAA,EACF,CAAA,MAAO;AACL,IAAA,GAAA,GAAM,gBAAA,CAAiB,GAAG,CAAC,CAAA;AAAA,EAC7B;AACA,EAAA,OAAO,OAAA,CAAQ,SAAA,KAAc,MAAA,GAAS,CAAC,GAAA,GAAM,GAAA;AAC/C;AAEA,SAAS,iBAAiB,EAAA,EAAsC;AAC9D,EAAA,OAAO,WAAA,CAAY,GAAG,SAAS,CAAA;AACjC;AAMA,SAAS,oBAAA,CACP,IAAA,EACA,mBAAA,EACA,cAAA,EACM;AACN,EAAA,IAAI,IAAA,CAAK,SAAS,eAAA,EAAiB;AACjC,IAAA,mBAAA,CAAoB,IAAA,CAAK,KAAK,CAAA,GAAI,IAAA,CAAK,UAAA,CAAW,EAAA;AAClD,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC3C,EAAA,MAAM,iBAAA,GAAoB,eAAA,CAAgB,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AACzD,EAAA,IAAI,UAAA,EAAY,cAAA,CAAe,IAAA,CAAK,KAAK,CAAA,GAAI,UAAA;AAC7C,EAAA,IAAI,iBAAA,EAAmB,mBAAA,CAAoB,IAAA,CAAK,KAAK,CAAA,GAAI,iBAAA;AACzD,EAAA,oBAAA,CAAqB,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,mBAAA,EAAqB,cAAc,CAAA;AACzE,EAAA,KAAA,MAAWL,KAAAA,IAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,IAAQ,EAAC,EAAG;AACxC,IAAA,oBAAA,CAAqBA,KAAAA,CAAK,IAAA,EAAM,mBAAA,EAAqB,cAAc,CAAA;AAAA,EACrE;AACF;AAEA,SAAS,gBAAgB,IAAA,EAAgC;AACvD,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,eAAA,EAAiB,OAAO,KAAK,UAAA,CAAW,EAAA;AAC1D,EAAA,OAAO,eAAA,CAAgB,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AACxC;AAEA,SAAS,SAAS,IAAA,EAAgC;AAChD,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,eAAA,EAAiB,OAAO,IAAA,CAAK,KAAA;AAC/C,EAAA,OAAO,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AACjC;AAEA,SAAS,0BAA0BR,MAAAA,EAAuD;AACxF,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAsC;AAC1D,EAAA,KAAA,MAAW,KAAA,IAASA,MAAAA,CAAM,KAAA,IAAS,EAAC,EAAG;AACrC,IAAA,MAAM,UAAA,GAAa,mBAAmB,KAAK,CAAA;AAC3C,IAAA,MAAM,OAAA,GAAU,kBAAkB,UAAU,CAAA;AAC5C,IAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACxB,IAAA,MAAM,CAAC,KAAK,CAAA,GAAI,OAAA;AAChB,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA;AAClC,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,QAAA,GAAW,IAAI,IAAA,CAAK,KAAA,EAAO,CAAC,QAAA,EAAU,UAAU,CAAC,CAAA,GAAgC,UAAU,CAAA;AAAA,EAChH;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,kBAAkB,UAAA,EAAyE;AAClG,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,EAAA,eAAA,CAAgB,YAAY,OAAO,CAAA;AACnC,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,eAAA,CAAgB,OAAgB,OAAA,EAA4B;AACnE,EAAA,IAAI,iBAAiB,OAAA,EAAS;AAC5B,IAAA,MAAM,CAAC,KAAK,CAAA,GAAI,KAAA,CAAM,IAAA;AACtB,IAAA,IAAI,KAAA,EAAO,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA;AAC5B,IAAA;AAAA,EACF;AACA,EAAA,IAAI,KAAA,YAAiB,IAAA,IAAQ,KAAA,YAAiB,SAAA,EAAW;AACvD,IAAA,KAAA,MAAW,GAAA,IAAO,KAAA,CAAM,IAAA,EAAM,eAAA,CAAgB,KAAK,OAAO,CAAA;AAC1D,IAAA;AAAA,EACF;AACA,EAAA,IAAI,KAAA,YAAiB,gBAAA,IAAoB,UAAA,CAAW,KAAK,CAAA,EAAG;AAC1D,IAAA;AAAA,EACF;AACA,EAAA,IAAI,CAAC,aAAA,CAAc,KAAK,CAAA,IAAK,gBAAA,CAAiB,KAAK,CAAA,EAAG;AACtD,EAAA,KAAA,MAAW,SAAS,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA,EAAG,eAAA,CAAgB,OAAO,OAAO,CAAA;AAC1E;AAEA,SAAS,gBAAgB,KAAA,EAAkD;AACzE,EAAA,MAAM,MAAwC,EAAC;AAC/C,EAAA,uBAAA,CAAwB,OAAO,GAAG,CAAA;AAClC,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,uBAAA,CAAwB,OAAgB,GAAA,EAA6C;AAC5F,EAAA,IAAI,KAAA,YAAiB,gBAAA,IAAoB,UAAA,CAAW,KAAK,CAAA,EAAG;AAC1D,IAAA,GAAA,CAAI,IAAA,CAAK;AAAA,MACP,QAAA,EAAU,aAAA,CAAc,KAAA,CAAM,KAAK,CAAA;AAAA,MACnC,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,kBAAkB,KAAA,CAAM,gBAAA;AAAA,MACxB,uBAAuB,KAAA,CAAM,qBAAA;AAAA,MAC7B,UAAA,EAAA,CAAa,KAAA,CAAM,KAAA,CAAM,OAAA,EAAS,UAAU,CAAA,IAAK,CAAA;AAAA,MACjD,sBAAA,EAAwB,YAAA,CAAa,KAAA,CAAM,KAAK,CAAA;AAAA,MAChD,GAAI,MAAM,gBAAA,KAAqB,MAAA,GAAY,EAAE,gBAAA,EAAkB,KAAA,CAAM,gBAAA,EAAiB,GAAI,EAAC;AAAA,MAC3F,iBAAiB,KAAA,CAAM,eAAA;AAAA,MACvB,GAAI,MAAM,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,EAAa,KAAA,CAAM,WAAA,EAAY,GAAI;AAAC,KAC7E,CAAA;AACD,IAAA;AAAA,EACF;AACA,EAAA,IAAI,CAAC,aAAA,CAAc,KAAK,CAAA,IAAK,gBAAA,CAAiB,KAAK,CAAA,EAAG;AACtD,EAAA,KAAA,MAAW,SAAS,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA,EAAG,uBAAA,CAAwB,OAAO,GAAG,CAAA;AAC9E;AAEA,SAAS,kBAAA,CAAmBA,MAAAA,EAAgB,GAAA,mBAAM,IAAI,KAAgB,EAAsB;AAC1F,EAAA,WAAA,CAAYA,MAAAA,CAAM,MAAM,GAAG,CAAA;AAC3B,EAAA,KAAA,MAAWQ,KAAAA,IAAQR,OAAM,IAAA,IAAQ,IAAI,WAAA,CAAYQ,KAAAA,CAAK,MAAM,GAAG,CAAA;AAC/D,EAAA,eAAA,CAAgBR,MAAAA,CAAM,QAAmB,GAAG,CAAA;AAC5C,EAAA,OAAO,CAAC,GAAG,GAAG,CAAA;AAChB;AAEA,SAAS,WAAA,CAAY,MAAY,GAAA,EAA4B;AAC3D,EAAA,IAAI,IAAA,CAAK,SAAS,eAAA,EAAiB;AACjC,IAAA,GAAA,CAAI,GAAA,CAAI,KAAK,UAAU,CAAA;AAAA,EACzB,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,KAAS,UAAA,EAAY;AACnC,IAAA,kBAAA,CAAmB,IAAA,CAAK,OAAO,GAAG,CAAA;AAAA,EACpC;AACF;AAEA,SAAS,eAAA,CAAgB,OAAgB,GAAA,EAA4B;AACnE,EAAA,IAAI,KAAA,YAAiB,gBAAA,IAAoB,UAAA,CAAW,KAAK,CAAA,EAAG;AAC1D,IAAA,kBAAA,CAAmB,KAAA,CAAM,OAAO,GAAG,CAAA;AACnC,IAAA;AAAA,EACF;AACA,EAAA,IAAI,CAAC,aAAA,CAAc,KAAK,CAAA,IAAK,gBAAA,CAAiB,KAAK,CAAA,EAAG;AACtD,EAAA,KAAA,MAAW,SAAS,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA,EAAG,eAAA,CAAgB,OAAO,GAAG,CAAA;AACtE;AAMA,SAAS,UAAU,KAAA,EAA2C;AAC5D,EAAA,OAAO,KAAA,KAAU,QAAQ,KAAA,KAAU,MAAA;AACrC;AAEA,SAAS,wBAAwB,KAAA,EAAyB;AACxD,EAAA,IAAI,KAAA,IAAS,IAAA,IAAQ,KAAA,KAAU,KAAA,EAAO,OAAO,KAAA;AAC7C,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,IAAA;AAC3B,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU,OAAO,UAAU,CAAA,IAAK,CAAC,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AACxE,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA,KAAU,EAAA;AAChD,EAAA,OAAO,QAAQ,KAAK,CAAA;AACtB;AAEA,SAAS,WAAA,CAAY,GAAY,CAAA,EAAqB;AACpD,EAAA,IAAI,CAAA,YAAa,QAAQ,CAAA,YAAa,IAAA,SAAa,CAAA,CAAE,OAAA,EAAQ,KAAM,CAAA,CAAE,OAAA,EAAQ;AAC7E,EAAA,OAAO,MAAA,CAAO,EAAA,CAAG,CAAA,EAAG,CAAC,CAAA;AACvB;AAEA,SAAS,YAAA,CAAa,CAAA,EAAY,CAAA,EAAY,SAAA,EAAqD;AACjG,EAAA,IAAI,UAAU,CAAC,CAAA,IAAK,SAAA,CAAU,CAAC,GAAG,OAAO,IAAA;AACzC,EAAA,OAAO,SAAA,CAAU,gBAAA,CAAiB,CAAA,EAAG,CAAC,CAAC,CAAA;AACzC;AAEA,SAAS,gBAAA,CAAiB,GAAY,CAAA,EAAoB;AACxD,EAAA,IAAI,CAAA,KAAM,GAAG,OAAO,CAAA;AACpB,EAAA,IAAI,CAAA,YAAa,QAAQ,CAAA,YAAa,IAAA,SAAa,CAAA,CAAE,OAAA,EAAQ,GAAI,CAAA,CAAE,OAAA,EAAQ;AAC3E,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,CAAA,KAAM,QAAA,SAAiB,CAAA,GAAI,CAAA;AAC/D,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,CAAA,KAAM,QAAA,EAAU,OAAO,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,CAAA;AACpF,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,CAAA,KAAM,QAAA,EAAU,OAAO,MAAA,CAAO,CAAC,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA;AAC/E,EAAA,IAAI,OAAO,CAAA,KAAM,SAAA,IAAa,OAAO,CAAA,KAAM,SAAA,EAAW,OAAO,CAAA,KAAM,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,EAAA;AACnF,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,CAAA,KAAM,QAAA,EAAU,OAAO,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,CAAA;AACpF,EAAA,MAAM,EAAA,GAAK,OAAO,CAAC,CAAA;AACnB,EAAA,MAAM,EAAA,GAAK,OAAO,CAAC,CAAA;AACnB,EAAA,OAAO,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,KAAK,CAAA,GAAI,CAAA;AACtC;AAEA,SAAS,YAAA,CAAa,KAAA,EAAgB,OAAA,EAAkB,eAAA,EAA0C;AAChG,EAAA,IAAI,UAAU,KAAK,CAAA,IAAK,SAAA,CAAU,OAAO,GAAG,OAAO,IAAA;AACnD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,OAAA,KAAY,UAAU,OAAO,KAAA;AACrE,EAAA,MAAM,MAAA,GAAS,eAAA,GAAkB,KAAA,CAAM,WAAA,EAAY,GAAI,KAAA;AACvD,EAAA,MAAM,GAAA,GAAM,eAAA,GAAkB,OAAA,CAAQ,WAAA,EAAY,GAAI,OAAA;AACtD,EAAA,MAAM,KAAK,IAAI,MAAA,CAAO,CAAA,CAAA,EAAI,GAAA,CAAI,QAAQ,mBAAA,EAAqB,MAAM,CAAA,CAAE,OAAA,CAAQ,MAAM,IAAI,CAAA,CAAE,QAAQ,IAAA,EAAM,GAAG,CAAC,CAAA,CAAA,CAAG,CAAA;AAC5G,EAAA,OAAO,EAAA,CAAG,KAAK,MAAM,CAAA;AACvB;AAEA,SAAS,QAAA,CAAS,QAAiC,IAAA,EAA8B;AAC/E,EAAA,IAAI,KAAA,GAAiB,MAAA;AACrB,EAAA,KAAA,MAAW,WAAW,IAAA,EAAM;AAC1B,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,KAAA;AAClD,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,MAAA;AACtC,IAAA,KAAA,GAAS,MAAoB,OAAO,CAAA;AAAA,EACtC;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,SAAA,CAAU,MAAA,EAAmB,IAAA,EAAqB,KAAA,EAAsB;AAC/E,EAAA,IAAI,MAAA,GAAS,MAAA;AACb,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,GAAG,CAAA,EAAA,EAAK;AACxC,IAAA,MAAM,OAAA,GAAU,KAAK,CAAC,CAAA;AACtB,IAAA,MAAM,IAAA,GAAO,OAAO,OAAO,CAAA;AAC3B,IAAA,IAAI,IAAA,KAAS,QAAQ,OAAO,IAAA,KAAS,YAAY,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACpE,MAAA,MAAA,CAAO,OAAO,IAAI,EAAC;AAAA,IACrB;AACA,IAAA,MAAA,GAAS,OAAO,OAAO,CAAA;AAAA,EACzB;AACA,EAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAE,CAAA,GAAI,KAAA;AACnC;AAEA,SAAS,WAAA,CAAY,MAAA,EAAmB,IAAA,EAAqB,KAAA,EAAsB;AACjF,EAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzE,EAAA,IAAI,MAAA,GAAS,MAAA;AACb,EAAA,KAAA,MAAW,WAAW,IAAA,EAAM;AAC1B,IAAA,MAAM,IAAA,GAAO,OAAO,OAAO,CAAA;AAC3B,IAAA,IAAI,IAAA,KAAS,QAAQ,OAAO,IAAA,KAAS,YAAY,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACpE,MAAA,MAAA,CAAO,OAAO,IAAI,EAAC;AAAA,IACrB;AACA,IAAA,MAAA,GAAS,OAAO,OAAO,CAAA;AAAA,EACzB;AACA,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,CAAA,IAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG,MAAA,CAAO,CAAC,CAAA,GAAI,WAAA,CAAY,CAAC,CAAA;AACvE;AAEA,SAAS,YAAY,GAAA,EAAyB;AAC5C,EAAA,IAAI,GAAA,KAAQ,QAAQ,OAAO,GAAA,KAAQ,YAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AAClE,IAAA,OAAO,YAAY,GAAgB,CAAA;AAAA,EACrC;AACA,EAAA,OAAO,EAAE,OAAO,GAAA,EAAI;AACtB;AAEA,SAAS,YAAY,GAAA,EAAyC;AAC5D,EAAA,OAAO,EAAE,GAAG,GAAA,EAAI;AAClB;AAEA,SAAS,oBAAoB,GAAA,EAAyC;AACpE,EAAA,MAAM,MAAiB,EAAC;AACxB,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC9C,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA,EAAG;AAC1B,IAAA,GAAA,CAAI,GAAG,CAAA,GAAI,WAAA,CAAY,KAAK,CAAA;AAAA,EAC9B;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,YAAY,KAAA,EAAyB;AAC5C,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,WAAA,CAAY,IAAI,CAAC,CAAA;AACtE,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA,EAAU;AAC/C,IAAA,IAAI,iBAAiB,IAAA,EAAM,OAAO,IAAI,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AAC1D,IAAA,MAAM,MAAiB,EAAC;AACxB,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,MAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC7B,MAAA,GAAA,CAAI,GAAG,CAAA,GAAI,WAAA,CAAY,KAAK,CAAA;AAAA,IAC9B;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,UAAU,KAAA,EAAwB;AACzC,EAAA,OAAO,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,CAAC,MAAM,KAAA,KAAU;AAC5C,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,SAAiB,CAAA,EAAG,KAAA,CAAM,UAAU,CAAA,CAAA,CAAA;AACzD,IAAA,IAAI,KAAA,YAAiB,IAAA,EAAM,OAAO,KAAA,CAAM,WAAA,EAAY;AACpD,IAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxE,MAAA,MAAM,SAAoB,EAAC;AAC3B,MAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,IAAA,EAAK,EAAG,MAAA,CAAO,GAAG,CAAA,GAAK,KAAA,CAAoB,GAAG,CAAA;AACnF,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAC,CAAA;AACH;AAEA,SAAS,YAAY,KAAA,EAAwB;AAC3C,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,OAAO,KAAK,CAAA;AAClD,EAAA,IAAI,SAAA,CAAU,KAAK,CAAA,EAAG,OAAO,CAAA;AAC7B,EAAA,MAAM,CAAA,GAAI,OAAO,KAAK,CAAA;AACtB,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,GAAI,CAAA,GAAI,CAAA;AAClC;AAEA,SAAS,UAAU,MAAA,EAAgC;AACjD,EAAA,IAAIG,IAAAA,GAAM,CAAA;AACV,EAAA,KAAA,MAAW,KAAA,IAAS,MAAA,EAAQA,IAAAA,IAAO,YAAY,KAAK,CAAA;AACpD,EAAA,OAAOA,IAAAA;AACT;AAEA,SAAS,MAAA,CAAO,QAAwB,IAAA,EAA8B;AACpE,EAAA,MAAM,QAAA,GAAW,OAAO,MAAA,CAAO,CAAC,UAAU,CAAC,SAAA,CAAU,KAAK,CAAC,CAAA;AAC3D,EAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAClC,EAAA,IAAI,IAAA,GAAO,SAAS,CAAC,CAAA;AACrB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AACxC,IAAA,MAAM,KAAA,GAAQ,SAAS,CAAC,CAAA;AACxB,IAAA,MAAM,GAAA,GAAM,gBAAA,CAAiB,KAAA,EAAO,IAAI,CAAA;AACxC,IAAA,IAAK,IAAA,KAAS,SAAS,GAAA,GAAM,CAAA,IAAO,SAAS,KAAA,IAAS,GAAA,GAAM,GAAI,IAAA,GAAO,KAAA;AAAA,EACzE;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,cAAc,KAAA,EAAoC;AACzD,EAAA,OAAO,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,kBAAkB,KAAA,EAA0C;AACnE,EAAA,OACE,iBAAiB,OAAA,IACjB,KAAA,YAAiB,KAAA,IACjB,KAAA,YAAiB,QAChB,gBAAA,CAAiB,KAAK,CAAA,KACnB,KAAA,CAA4B,SAAS,KAAA,IACpC,KAAA,CAA4B,IAAA,KAAS,KAAA,IACrC,MAA4B,IAAA,KAAS,MAAA,CAAA;AAE9C;AAEA,SAASU,QAAO,KAAA,EAA+B;AAC7C,EAAA,OAAO,iBAAiB,IAAA,IAAS,gBAAA,CAAiB,KAAK,CAAA,IAAM,MAA4B,IAAA,KAAS,MAAA;AACpG;AAEA,SAAS,YAAY,KAAA,EAAoC;AACvD,EAAA,OAAO,iBAAiB,SAAA,IAAc,gBAAA,CAAiB,KAAK,CAAA,IAAM,MAA4B,IAAA,KAAS,KAAA;AACzG;AAEA,SAAS,WAAW,KAAA,EAA2C;AAC7D,EAAA,OAAO,iBAAiB,gBAAA,IAAqB,gBAAA,CAAiB,KAAK,CAAA,IAAM,MAA4B,IAAA,KAAS,kBAAA;AAChH;;;AC55DO,IAAM,6BAAA,GAAgD;AAAA,EAC3D,SAAA,EAAW,KAAA;AAAA,EACX,KAAA,EAAO,OAAA;AAAA,EACP,UAAA,EAAY;AACd,CAAA;AAEA,IAAM,SAAA,uBAAgB,OAAA,EAAwB;AAC9C,IAAI,YAAA,GAAe,CAAA;AACnB,IAAM,8BAAA,GAAiC,GAAA;AAGhC,SAAS,eAAe,OAAA,EAA6D;AAC1F,EAAA,OAAO,CAAC,GAAG,CAAA,KACT,OAAA,CAAQ,cAAc,MAAA,GAClB,aAAA,CAAc,GAAG,CAAA,EAAG;AAAA,IAClB,GAAG,OAAA;AAAA,IACH,KAAA,EAAO,OAAA,CAAQ,KAAA,KAAU,OAAA,GAAU,MAAA,GAAS;AAAA,GAC7C,CAAA,GACD,aAAA,CAAc,CAAA,EAAG,GAAG,OAAO,CAAA;AACnC;AAEO,IAAM,iBAAA,GAAoB,eAAe,6BAA6B,CAAA;AAEtE,SAAS,eAAe,KAAA,EAAyB;AACtD,EAAA,IAAI,KAAA,YAAiB,IAAA,EAAM,OAAO,KAAA,CAAM,OAAA,EAAQ;AAChD,EAAA,IAAI,cAAA,CAAe,KAAK,CAAA,EAAG,OAAO,CAAA,YAAA,EAAe,KAAA,CAAM,MAAA,CAAO,WAAW,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,QAAA,EAAU,CAAA,CAAA;AAC/F,EAAA,IAAI,YAAA,CAAa,KAAK,CAAA,IAAK,KAAA,CAAM,cAAc,8BAAA,EAAgC;AAC7E,IAAA,OAAO,SAAS,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAAA,EAC7C;AACA,EAAA,OAAO,KAAA;AACT;AAUO,SAAS,yBAAA,CACd,WAAA,EACA,KAAA,EACA,SAAA,EACQ;AACR,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,IAAI,QAAQ,WAAA,CAAY,MAAA;AACxB,EAAA,OAAO,OAAO,KAAA,EAAO;AACnB,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAA,CAAO,IAAA,GAAO,SAAS,CAAC,CAAA;AACzC,IAAA,MAAM,UAAA,GAAa,SAAA,CAAU,WAAA,CAAY,GAAG,GAAG,KAAK,CAAA;AACpD,IAAA,IAAI,UAAA,GAAa,CAAA,EAAG,IAAA,GAAO,GAAA,GAAM,CAAA;AAAA,SAC5B,KAAA,GAAQ,GAAA;AAAA,EACf;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,mBAAA,CACd,WAAA,EACA,KAAA,EACA,SAAA,EACS;AACT,EAAA,MAAM,GAAA,GAAM,yBAAA,CAA0B,WAAA,EAAa,KAAA,EAAO,SAAS,CAAA;AACnE,EAAA,IAAI,GAAA,GAAM,YAAY,MAAA,IAAU,SAAA,CAAU,YAAY,GAAG,CAAA,EAAG,KAAK,CAAA,KAAM,CAAA,EAAG;AACxE,IAAA,WAAA,CAAY,MAAA,CAAO,KAAK,CAAC,CAAA;AACzB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,UAAA,CAAW,GAAY,CAAA,EAAqB;AAC1D,EAAA,OAAO,kBAAA,CAAmB,CAAA,EAAG,CAAA,kBAAG,IAAI,KAAqB,CAAA;AAC3D;AAEA,SAAS,aAAA,CAAc,CAAA,EAAY,CAAA,EAAY,OAAA,EAAiC;AAC9E,EAAA,IAAI,CAAA,IAAK,IAAA,IAAQ,CAAA,IAAK,IAAA,EAAM,OAAO,CAAA;AACnC,EAAA,IAAI,KAAK,IAAA,EAAM,OAAO,OAAA,CAAQ,KAAA,KAAU,UAAU,EAAA,GAAK,CAAA;AACvD,EAAA,IAAI,KAAK,IAAA,EAAM,OAAO,OAAA,CAAQ,KAAA,KAAU,UAAU,CAAA,GAAI,EAAA;AAEtD,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,MAAM,QAAA,EAAU;AAClD,IAAA,IAAI,OAAA,CAAQ,eAAe,QAAA,EAAU;AACnC,MAAA,OAAO,CAAA,CAAE,aAAA;AAAA,QACP,CAAA;AAAA,QACA,OAAA,CAAQ,MAAA;AAAA,QACR,OAAA,CAAQ;AAAA,OACV;AAAA,IACF;AACA,IAAA,OAAO,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,CAAA,GAAI,IAAI,CAAA,GAAI,CAAA;AAAA,EAClC;AAEA,EAAA,IAAI,MAAM,OAAA,CAAQ,CAAC,KAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG;AACxC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,EAAE,MAAA,EAAQ,CAAA,CAAE,MAAM,CAAA,EAAG,CAAA,EAAA,EAAK;AACrD,MAAA,MAAM,MAAA,GAAS,cAAc,CAAA,CAAE,CAAC,GAAG,CAAA,CAAE,CAAC,GAAG,OAAO,CAAA;AAChD,MAAA,IAAI,MAAA,KAAW,GAAG,OAAO,MAAA;AAAA,IAC3B;AACA,IAAA,OAAO,CAAA,CAAE,SAAS,CAAA,CAAE,MAAA;AAAA,EACtB;AAEA,EAAA,IAAI,CAAA,YAAa,QAAQ,CAAA,YAAa,IAAA,SAAa,CAAA,CAAE,OAAA,EAAQ,GAAI,CAAA,CAAE,OAAA,EAAQ;AAC3E,EAAA,IAAI,cAAA,CAAe,CAAC,CAAA,IAAK,cAAA,CAAe,CAAC,CAAA,EAAG;AAC1C,IAAA,MAAM,EAAA,GAAK,EAAE,QAAA,EAAS;AACtB,IAAA,MAAM,EAAA,GAAK,EAAE,QAAA,EAAS;AACtB,IAAA,OAAO,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,KAAK,CAAA,GAAI,CAAA;AAAA,EACtC;AAEA,EAAA,MAAM,SAAA,GAAY,OAAO,CAAA,KAAM,QAAA,IAAY,CAAA,KAAM,IAAA;AACjD,EAAA,MAAM,SAAA,GAAY,OAAO,CAAA,KAAM,QAAA,IAAY,CAAA,KAAM,IAAA;AACjD,EAAA,IAAI,aAAa,SAAA,EAAW;AAC1B,IAAA,IAAI,aAAa,SAAA,EAAW,OAAO,YAAY,CAAC,CAAA,GAAI,YAAY,CAAC,CAAA;AACjE,IAAA,OAAO,YAAY,CAAA,GAAI,EAAA;AAAA,EACzB;AAEA,EAAA,IAAK,CAAA,GAAe,GAAa,OAAO,EAAA;AACxC,EAAA,IAAK,CAAA,GAAe,GAAa,OAAO,CAAA;AACxC,EAAA,OAAO,CAAA;AACT;AAEA,SAAS,YAAY,GAAA,EAAqB;AACxC,EAAA,MAAM,QAAA,GAAW,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA;AAClC,EAAA,IAAI,QAAA,KAAa,QAAW,OAAO,QAAA;AACnC,EAAA,MAAM,EAAA,GAAK,YAAA,EAAA;AACX,EAAA,SAAA,CAAU,GAAA,CAAI,KAAK,EAAE,CAAA;AACrB,EAAA,OAAO,EAAA;AACT;AAEA,SAAS,eAAe,KAAA,EAA+E;AACrG,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,KAAA;AACxD,EAAA,MAAM,GAAA,GAAO,KAAA,CAA6C,MAAA,CAAO,WAAW,CAAA;AAC5E,EAAA,OAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,CAAI,WAAW,WAAW,CAAA;AAC9D;AAEA,SAAS,aAAa,KAAA,EAAqC;AACzD,EAAA,OACG,OAAO,MAAA,KAAW,WAAA,IAAe,KAAA,YAAiB,UAAW,KAAA,YAAiB,UAAA;AAEnF;AAEA,SAAS,kBAAA,CAAmB,CAAA,EAAY,CAAA,EAAY,OAAA,EAAuC;AACzF,EAAA,IAAI,CAAA,KAAM,GAAG,OAAO,IAAA;AACpB,EAAA,IAAI,CAAA,KAAM,QAAQ,CAAA,KAAM,IAAA,IAAQ,MAAM,MAAA,IAAa,CAAA,KAAM,QAAW,OAAO,KAAA;AAC3E,EAAA,IAAI,OAAO,CAAA,KAAM,OAAO,CAAA,EAAG,OAAO,KAAA;AAClC,EAAA,IAAI,CAAA,YAAa,IAAA,IAAQ,CAAA,YAAa,IAAA,EAAM;AAC1C,IAAA,OAAO,CAAA,YAAa,QAAQ,CAAA,YAAa,IAAA,IAAQ,EAAE,OAAA,EAAQ,KAAM,EAAE,OAAA,EAAQ;AAAA,EAC7E;AACA,EAAA,IAAI,CAAA,YAAa,MAAA,IAAU,CAAA,YAAa,MAAA,EAAQ;AAC9C,IAAA,OAAO,CAAA,YAAa,MAAA,IAAU,CAAA,YAAa,MAAA,IAAU,CAAA,CAAE,WAAW,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,KAAA,KAAU,CAAA,CAAE,KAAA;AAAA,EAC9F;AACA,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,CAAA,KAAM,UAAU,OAAO,KAAA;AAE3D,EAAA,MAAM,IAAA,GAAO,CAAA;AACb,EAAA,MAAM,KAAA,GAAQ,CAAA;AACd,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,KAAM,OAAO,OAAO,IAAA;AACxC,EAAA,OAAA,CAAQ,GAAA,CAAI,MAAM,KAAK,CAAA;AAEvB,EAAA,IAAI,CAAA,YAAa,GAAA,IAAO,CAAA,YAAa,GAAA,EAAK;AACxC,IAAA,IAAI,EAAE,CAAA,YAAa,GAAA,CAAA,IAAQ,EAAE,CAAA,YAAa,QAAQ,CAAA,CAAE,IAAA,KAAS,CAAA,CAAE,IAAA,EAAM,OAAO,KAAA;AAC5E,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,CAAA,EAAG;AAC5B,MAAA,IAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,KAAK,CAAC,kBAAA,CAAmB,KAAA,EAAO,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,EAAG,OAAO,GAAG,OAAO,KAAA;AAAA,IAC7E;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAA,YAAa,GAAA,IAAO,CAAA,YAAa,GAAA,EAAK;AACxC,IAAA,IAAI,EAAE,CAAA,YAAa,GAAA,CAAA,IAAQ,EAAE,CAAA,YAAa,QAAQ,CAAA,CAAE,IAAA,KAAS,CAAA,CAAE,IAAA,EAAM,OAAO,KAAA;AAC5E,IAAA,KAAA,MAAW,KAAA,IAAS,GAAG,IAAI,CAAC,EAAE,GAAA,CAAI,KAAK,GAAG,OAAO,KAAA;AACjD,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,MAAM,OAAA,CAAQ,CAAC,KAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG;AACxC,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,CAAC,KAAK,CAAC,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,IAAK,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,QAAQ,OAAO,KAAA;AAC5E,IAAA,OAAO,CAAA,CAAE,KAAA,CAAM,CAAC,KAAA,EAAO,KAAA,KAAU,kBAAA,CAAmB,KAAA,EAAO,CAAA,CAAE,KAAK,CAAA,EAAG,OAAO,CAAC,CAAA;AAAA,EAC/E;AAEA,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,CAA4B,CAAA;AACtD,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,CAA4B,CAAA;AACtD,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,KAAA,CAAM,MAAA,EAAQ,OAAO,KAAA;AAC1C,EAAA,OAAO,KAAA,CAAM,KAAA;AAAA,IAAM,CAAC,QAClB,MAAA,CAAO,SAAA,CAAU,eAAe,IAAA,CAAK,CAAA,EAAG,GAAG,CAAA,IAC3C,kBAAA;AAAA,MACG,EAA8B,GAAG,CAAA;AAAA,MACjC,EAA8B,GAAG,CAAA;AAAA,MAClC;AAAA;AACF,GACF;AACF;;;AClLO,IAAM,cAAA,GAAiB;AAuCvB,IAAe,YAAf,MAEP;AAAA,EACW,EAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EAEC,WAAA,GAAc,CAAA;AAAA,EACd,eAAA,GAAkB,CAAA;AAAA,EAClB,WAAA,uBAAkB,IAAA,EAAK;AAAA,EACvB,cAAA,GAAiC,6BAAA;AAAA,EAE3C,WAAA,CAAY,EAAA,EAAY,UAAA,EAA6B,IAAA,EAAe,OAAA,EAAmB;AACrF,IAAA,IAAA,CAAK,EAAA,GAAK,EAAA;AACV,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAI,IAAA,KAAS,MAAA,EAAW,IAAA,CAAK,IAAA,GAAO,IAAA;AACpC,IAAA,IAAA,CAAK,WAAW,OAAO,CAAA;AAAA,EACzB;AAAA,EAuBA,SAAS,SAAA,EAAoC;AAC3C,IAAA,OAAO,IAAA,CAAK,mBAAA,CAAoB,GAAA,CAAI,SAAS,CAAA;AAAA,EAC/C;AAAA,EAEA,aAAa,SAAA,EAAmC;AAC9C,IAAA,OACE,IAAA,CAAK,WAAW,IAAA,KAAS,KAAA,IACzB,KAAK,UAAA,CAAW,IAAA,CAAK,WAAW,SAAA,CAAU,MAAA,IAC1C,KAAK,UAAA,CAAW,IAAA,CAAK,MAAM,CAAC,IAAA,EAAM,UAAU,IAAA,KAAS,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,EAEzE;AAAA;AAAA,EAGA,sBAAsB,cAAA,EAAyC;AAC7D,IAAA,MAAM,EAAE,SAAA,EAAW,cAAA,EAAgB,GAAG,IAAA,KAAS,IAAA,CAAK,cAAA;AACpD,IAAA,MAAM,EAAE,SAAA,EAAW,eAAA,EAAiB,GAAG,OAAM,GAAI,cAAA;AACjD,IAAA,OAAO,UAAA,CAAW,MAAM,KAAK,CAAA;AAAA,EAC/B;AAAA,EAEA,iBAAiB,SAAA,EAAsC;AACrD,IAAA,OAAO,IAAA,CAAK,eAAe,SAAA,KAAc,SAAA;AAAA,EAC3C;AAAA,EAEA,QAAA,GAAuB;AACrB,IAAA,OAAO;AAAA,MACL,YAAY,IAAA,CAAK,QAAA;AAAA,MACjB,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,mBAAmB,IAAA,CAAK,WAAA,GAAc,IAAI,IAAA,CAAK,eAAA,GAAkB,KAAK,WAAA,GAAc,CAAA;AAAA,MACpF,aAAa,IAAA,CAAK;AAAA,KACpB;AAAA,EACF;AAAA,EAEU,wBAAwB,IAAA,EAAwB;AACxD,IAAA,MAAM,SAAA,GAAY,0BAAA,CAA2B,IAAA,CAAK,UAAU,CAAA;AAC5D,IAAA,OAAO,UAAU,IAA+B,CAAA;AAAA,EAClD;AAAA,EAEU,YAAY,SAAA,EAAyB;AAC7C,IAAA,IAAA,CAAK,WAAA,EAAA;AACL,IAAA,IAAA,CAAK,eAAA,IAAmB,WAAA,CAAY,GAAA,EAAI,GAAI,SAAA;AAAA,EAC9C;AAAA,EAEU,eAAA,GAAwB;AAChC,IAAA,IAAA,CAAK,WAAA,uBAAkB,IAAA,EAAK;AAAA,EAC9B;AACF;;;AC9GO,IAAM,UAAA,GAAN,cAAyE,SAAA,CAAgB;AAAA,EAC5E,mBAAA,uBAA0B,GAAA,CAAoB;AAAA,IAC9D,IAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACD,CAAA;AAAA,EAEO,QAAA,uBAAe,GAAA,EAAwB;AAAA,EACvC,eAA+B,EAAC;AAAA,EAChC,WAAA,uBAAkB,GAAA,EAAU;AAAA,EAC5B,SAAA,GAAgD,iBAAA;AAAA,EAExD,WAAA,CAAY,EAAA,EAAY,UAAA,EAA6B,IAAA,EAAe,OAAA,EAA6B;AAC/F,IAAA,KAAA,CAAM,EAAA,EAAI,UAAA,EAAY,IAAA,EAAM,OAAO,CAAA;AACnC,IAAA,IAAA,CAAK,SAAA,GAAY,SAAS,SAAA,IAAa,iBAAA;AACvC,IAAA,IAAI,OAAA,EAAS,cAAA,EAAgB,IAAA,CAAK,cAAA,GAAiB,OAAA,CAAQ,cAAA;AAAA,EAC7D;AAAA,EAEmB,WAAW,QAAA,EAAoC;AAAA,EAElE;AAAA,EAES,GAAA,CAAI,KAAW,IAAA,EAAqB;AAC3C,IAAA,IAAI,YAAA;AACJ,IAAA,IAAI;AACF,MAAA,YAAA,GAAe,IAAA,CAAK,wBAAwB,IAAI,CAAA;AAAA,IAClD,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4CAAA,EAA+C,MAAA,CAAO,GAAG,CAAC,CAAA,EAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,EAAI;AAAA,QAC9F,KAAA,EAAO;AAAA,OACR,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,eAAA,GAAkB,eAAe,YAAY,CAAA;AACnD,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,eAAe,CAAA;AAClD,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,QAAA,CAAS,IAAI,GAAG,CAAA;AAAA,IAClB,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,QAAA,CAAS,IAAI,eAAA,kBAAiB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AACjD,MAAA,MAAM,YAAY,yBAAA,CAA0B,IAAA,CAAK,YAAA,EAAc,eAAA,EAAiB,KAAK,SAAS,CAAA;AAC9F,MAAA,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,SAAA,EAAW,CAAA,EAAG,eAAe,CAAA;AAAA,IACxD;AACA,IAAA,IAAA,CAAK,WAAA,CAAY,IAAI,GAAG,CAAA;AACxB,IAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,EACvB;AAAA,EAES,MAAA,CAAO,KAAW,IAAA,EAAqB;AAC9C,IAAA,IAAI,YAAA;AACJ,IAAA,IAAI;AACF,MAAA,YAAA,GAAe,IAAA,CAAK,wBAAwB,IAAI,CAAA;AAAA,IAClD,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAK,CAAA,4CAAA,EAA+C,MAAA,CAAO,GAAG,CAAC,oBAAoB,KAAK,CAAA;AAChG,MAAA,IAAA,CAAK,WAAA,CAAY,OAAO,GAAG,CAAA;AAC3B,MAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,eAAA,GAAkB,eAAe,YAAY,CAAA;AACnD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,eAAe,CAAA;AAChD,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAA,CAAO,OAAO,GAAG,CAAA;AACjB,MAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,QAAA,IAAA,CAAK,QAAA,CAAS,OAAO,eAAe,CAAA;AACpC,QAAA,mBAAA,CAAoB,IAAA,CAAK,YAAA,EAAc,eAAA,EAAiB,IAAA,CAAK,SAAS,CAAA;AAAA,MACxE;AAAA,IACF;AACA,IAAA,IAAA,CAAK,WAAA,CAAY,OAAO,GAAG,CAAA;AAC3B,IAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,EACvB;AAAA,EAES,MAAA,CAAO,GAAA,EAAW,OAAA,EAAkB,OAAA,EAAwB;AACnE,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,OAAO,CAAA;AACxB,IAAA,IAAA,CAAK,GAAA,CAAI,KAAK,OAAO,CAAA;AAAA,EACvB;AAAA,EAES,MAAM,OAAA,EAA0C;AACvD,IAAA,IAAA,CAAK,KAAA,EAAM;AACX,IAAA,MAAM,oBAA0D,EAAC;AACjE,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,IAAI,CAAA,IAAK,OAAA,EAAS;AACjC,MAAA,IAAI,YAAA;AACJ,MAAA,IAAI;AACF,QAAA,YAAA,GAAe,IAAA,CAAK,wBAAwB,IAAI,CAAA;AAAA,MAClD,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4CAAA,EAA+C,MAAA,CAAO,GAAG,CAAC,CAAA,EAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,EAAI;AAAA,UAC9F,KAAA,EAAO;AAAA,SACR,CAAA;AAAA,MACH;AACA,MAAA,iBAAA,CAAkB,KAAK,EAAE,GAAA,EAAK,OAAO,cAAA,CAAe,YAAY,GAAG,CAAA;AACnE,MAAA,IAAA,CAAK,WAAA,CAAY,IAAI,GAAG,CAAA;AAAA,IAC1B;AAEA,IAAA,KAAA,MAAW,EAAE,GAAA,EAAK,KAAA,EAAM,IAAK,iBAAA,EAAmB;AAC9C,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA;AACtC,MAAA,IAAI,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,GAAG,CAAA;AAAA,WACrB,IAAA,CAAK,SAAS,GAAA,CAAI,KAAA,sBAAW,GAAA,CAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAAA,IAC9C;AACA,IAAA,IAAA,CAAK,eAAe,EAAC;AACrB,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,QAAA,CAAS,IAAA,EAAK,EAAG;AACxC,MAAA,MAAM,YAAY,yBAAA,CAA0B,IAAA,CAAK,YAAA,EAAc,KAAA,EAAO,KAAK,SAAS,CAAA;AACpF,MAAA,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,SAAA,EAAW,CAAA,EAAG,KAAK,CAAA;AAAA,IAC9C;AACA,IAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,EACvB;AAAA,EAES,KAAA,GAAc;AACrB,IAAA,IAAA,CAAK,SAAS,KAAA,EAAM;AACpB,IAAA,IAAA,CAAK,eAAe,EAAC;AACrB,IAAA,IAAA,CAAK,YAAY,KAAA,EAAM;AACvB,IAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,EACvB;AAAA,EAES,MAAA,CAAO,WAA2B,KAAA,EAA2B;AACpE,IAAA,MAAM,SAAA,GAAY,YAAY,GAAA,EAAI;AAClC,IAAA,IAAI,MAAA;AACJ,IAAA,QAAQ,SAAA;AAAW,MACjB,KAAK,IAAA;AACH,QAAA,MAAA,GAAS,IAAA,CAAK,eAAe,KAAK,CAAA;AAClC,QAAA;AAAA,MACF,KAAK,IAAA;AACH,QAAA,MAAA,GAAS,KAAK,UAAA,CAAW,EAAE,MAAM,KAAA,EAAO,aAAA,EAAe,OAAO,CAAA;AAC9D,QAAA;AAAA,MACF,KAAK,KAAA;AACH,QAAA,MAAA,GAAS,KAAK,UAAA,CAAW,EAAE,MAAM,KAAA,EAAO,aAAA,EAAe,MAAM,CAAA;AAC7D,QAAA;AAAA,MACF,KAAK,IAAA;AACH,QAAA,MAAA,GAAS,KAAK,UAAA,CAAW,EAAE,IAAI,KAAA,EAAO,WAAA,EAAa,OAAO,CAAA;AAC1D,QAAA;AAAA,MACF,KAAK,KAAA;AACH,QAAA,MAAA,GAAS,KAAK,UAAA,CAAW,EAAE,IAAI,KAAA,EAAO,WAAA,EAAa,MAAM,CAAA;AACzD,QAAA;AAAA,MACF,KAAK,IAAA;AACH,QAAA,MAAA,GAAS,IAAA,CAAK,cAAc,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,KAAA,GAAQ,EAAE,CAAA;AAC7D,QAAA;AAAA,MACF;AACE,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,UAAA,EAAa,SAAS,CAAA,4BAAA,CAA8B,CAAA;AAAA;AAExE,IAAA,IAAA,CAAK,YAAY,SAAS,CAAA;AAC1B,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,IAAa,QAAA,GAAmB;AAC9B,IAAA,OAAO,KAAK,WAAA,CAAY,IAAA;AAAA,EAC1B;AAAA,EAES,eAAe,KAAA,EAA2B;AACjD,IAAA,OAAO,IAAA,CAAK,SAAS,GAAA,CAAI,cAAA,CAAe,KAAK,CAAC,CAAA,wBAAS,GAAA,EAAU;AAAA,EACnE;AAAA,EAES,UAAA,CAAW,OAAA,GAA6B,EAAC,EAAc;AAC9D,IAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAI,gBAAgB,IAAA,EAAM,WAAA,GAAc,MAAK,GAAI,OAAA;AAC/D,IAAA,MAAM,MAAA,uBAAa,GAAA,EAAU;AAC7B,IAAA,IAAI,IAAA,CAAK,YAAA,CAAa,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AAE3C,IAAA,MAAM,cAAA,GAAiB,eAAe,IAAI,CAAA;AAC1C,IAAA,MAAM,YAAA,GAAe,eAAe,EAAE,CAAA;AAEtC,IAAA,IAAI,QAAA,GAAW,CAAA;AACf,IAAA,IAAI,mBAAmB,MAAA,EAAW;AAChC,MAAA,QAAA,GAAW,yBAAA,CAA0B,IAAA,CAAK,YAAA,EAAc,cAAA,EAAgB,KAAK,SAAS,CAAA;AACtF,MAAA,IACE,CAAC,aAAA,IACD,QAAA,GAAW,IAAA,CAAK,aAAa,MAAA,IAC7B,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,YAAA,CAAa,QAAQ,CAAA,EAAG,cAAc,MAAM,CAAA,EAChE;AACA,QAAA,QAAA,EAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,GAAS,KAAK,YAAA,CAAa,MAAA;AAC/B,IAAA,IAAI,iBAAiB,MAAA,EAAW;AAC9B,MAAA,MAAA,GAAS,yBAAA,CAA0B,IAAA,CAAK,YAAA,EAAc,YAAA,EAAc,KAAK,SAAS,CAAA;AAClF,MAAA,IACE,WAAA,IACA,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,MAAA,IAC3B,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,YAAA,CAAa,MAAM,CAAA,EAAG,YAAY,MAAM,CAAA,EAC5D;AACA,QAAA,MAAA,EAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,KAAA,IAAS,CAAA,GAAI,QAAA,EAAU,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AACtC,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,CAAC,CAAA;AACjC,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA;AACpC,MAAA,IAAI,MAAM,KAAA,MAAW,GAAA,IAAO,IAAA,EAAM,MAAA,CAAO,IAAI,GAAG,CAAA;AAAA,IAClD;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAES,kBAAA,CAAmB,OAAA,GAA6B,EAAC,EAAc;AACtE,IAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAI,gBAAgB,IAAA,EAAM,WAAA,GAAc,MAAK,GAAI,OAAA;AAC/D,IAAA,MAAM,cAAc,EAAA,IAAM,IAAA,CAAK,aAAa,IAAA,CAAK,YAAA,CAAa,SAAS,CAAC,CAAA;AACxE,IAAA,MAAM,SAAA,GAAY,IAAA,IAAQ,IAAA,CAAK,YAAA,CAAa,CAAC,CAAA;AAC7C,IAAA,OAAO,KAAK,UAAA,CAAW;AAAA,MACrB,IAAA,EAAM,WAAA;AAAA,MACN,EAAA,EAAI,SAAA;AAAA,MACJ,aAAA,EAAe,WAAA;AAAA,MACf,WAAA,EAAa;AAAA,KACd,CAAA;AAAA,EACH;AAAA,EAES,IAAA,CAAK,CAAA,EAAW,IAAA,EAAgB,QAAA,EAAgD;AACvF,IAAA,MAAM,SAAsB,EAAC;AAC7B,IAAA,IAAI,QAAA,GAAW,CAAA;AACf,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAA,MAAM,cAAA,GAAiB,eAAe,IAAI,CAAA;AAC1C,MAAA,QAAA,GAAW,yBAAA,CAA0B,IAAA,CAAK,YAAA,EAAc,cAAA,EAAgB,KAAK,SAAS,CAAA;AACtF,MAAA,OACE,QAAA,GAAW,IAAA,CAAK,YAAA,CAAa,MAAA,IAC7B,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,YAAA,CAAa,QAAQ,CAAA,EAAG,cAAc,CAAA,IAAK,CAAA,EAC/D;AACA,QAAA,QAAA,EAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,KAAA,IAAS,CAAA,GAAI,UAAU,CAAA,GAAI,IAAA,CAAK,aAAa,MAAA,IAAU,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,CAAA,EAAA,EAAK;AAC7E,MAAA,IAAA,CAAK,iBAAiB,IAAA,CAAK,YAAA,CAAa,CAAC,CAAA,EAAG,MAAA,EAAQ,GAAG,QAAQ,CAAA;AAAA,IACjE;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAES,YAAA,CAAa,CAAA,EAAW,IAAA,EAAgB,QAAA,EAAgD;AAC/F,IAAA,MAAM,SAAsB,EAAC;AAC7B,IAAA,IAAI,QAAA,GAAW,IAAA,CAAK,YAAA,CAAa,MAAA,GAAS,CAAA;AAC1C,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAA,MAAM,cAAA,GAAiB,eAAe,IAAI,CAAA;AAC1C,MAAA,QAAA,GAAW,0BAA0B,IAAA,CAAK,YAAA,EAAc,cAAA,EAAgB,IAAA,CAAK,SAAS,CAAA,GAAI,CAAA;AAC1F,MAAA,OAAO,QAAA,IAAY,CAAA,IAAK,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,aAAa,QAAQ,CAAA,EAAG,cAAc,CAAA,IAAK,CAAA,EAAG;AACxF,QAAA,QAAA,EAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,KAAA,IAAS,IAAI,QAAA,EAAU,CAAA,IAAK,KAAK,MAAA,CAAO,MAAA,GAAS,GAAG,CAAA,EAAA,EAAK;AACvD,MAAA,IAAA,CAAK,iBAAiB,IAAA,CAAK,YAAA,CAAa,CAAC,CAAA,EAAG,MAAA,EAAQ,GAAG,QAAQ,CAAA;AAAA,IACjE;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAES,aAAA,CAAc,GAAW,QAAA,EAAgD;AAChF,IAAA,MAAM,SAAsB,EAAC;AAC7B,IAAA,KAAA,IAAS,CAAA,GAAI,GAAG,CAAA,GAAI,IAAA,CAAK,aAAa,MAAA,IAAU,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,CAAA,EAAA,EAAK;AACtE,MAAA,IAAA,CAAK,iBAAiB,IAAA,CAAK,YAAA,CAAa,CAAC,CAAA,EAAG,MAAA,EAAQ,GAAG,QAAQ,CAAA;AAAA,IACjE;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAES,mBAAA,CAAoB,GAAW,QAAA,EAAgD;AACtF,IAAA,MAAM,SAAsB,EAAC;AAC7B,IAAA,KAAA,IAAS,CAAA,GAAI,IAAA,CAAK,YAAA,CAAa,MAAA,GAAS,CAAA,EAAG,KAAK,CAAA,IAAK,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,CAAA,EAAA,EAAK;AAC3E,MAAA,IAAA,CAAK,iBAAiB,IAAA,CAAK,YAAA,CAAa,CAAC,CAAA,EAAG,MAAA,EAAQ,GAAG,QAAQ,CAAA;AAAA,IACjE;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAES,cAAc,MAAA,EAAmC;AACxD,IAAA,MAAM,MAAA,uBAAa,GAAA,EAAU;AAC7B,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,MAAM,OAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,cAAA,CAAe,KAAK,CAAC,CAAA;AACpD,MAAA,IAAI,MAAM,KAAA,MAAW,GAAA,IAAO,IAAA,EAAM,MAAA,CAAO,IAAI,GAAG,CAAA;AAAA,IAClD;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,IAAa,cAAA,GAA4B;AACvC,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA,EAEA,IAAa,mBAAA,GAAmD;AAC9D,IAAA,OAAO,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,CAAC,UAAU,CAAC,KAAA,EAAO,IAAA,CAAK,QAAA,CAAS,IAAI,KAAK,CAAA,oBAAK,IAAI,GAAA,EAAW,CAAC,CAAA;AAAA,EAC9F;AAAA,EAEA,IAAa,2BAAA,GAA2D;AACtE,IAAA,MAAM,SAAsC,EAAC;AAC7C,IAAA,KAAA,IAAS,IAAI,IAAA,CAAK,YAAA,CAAa,SAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACtD,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,CAAC,CAAA;AACjC,MAAA,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,EAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA,oBAAK,IAAI,GAAA,EAAW,CAAC,CAAA;AAAA,IAClE;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,IAAa,YAAA,GAAwC;AACnD,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA,EAEQ,gBAAA,CACN,KAAA,EACA,MAAA,EACA,KAAA,EACA,QAAA,EACM;AACN,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA;AACpC,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,IAAI,MAAA,CAAO,UAAU,KAAA,EAAO;AAC5B,MAAA,IAAI,CAAC,QAAA,IAAY,QAAA,CAAS,GAAG,CAAA,EAAG,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA,IACjD;AAAA,EACF;AACF;;;AC1RA,IAAI,aAAA,GAAoC;AAAA,EACtC,OAAA,EAAS,IAAA;AAAA,EACT,uBAAA,EAAyB,GAAA;AAAA,EACzB,oBAAA,EAAsB,EAAA;AAAA,EACtB,YAAA,EAAc;AAChB,CAAA;AAEA,IAAM,aAAA,uBAAoB,GAAA,EAA0B;AAG7C,SAAS,sBAAsB,MAAA,EAA2C;AAC/E,EAAA,aAAA,GAAgB,EAAE,GAAG,aAAA,EAAe,GAAG,MAAA,EAAO;AAChD;AAGO,SAAS,qBAAA,GAA4C;AAC1D,EAAA,OAAO,aAAA;AACT;AAGO,SAAS,gBAAA,GAA4B;AAC1C,EAAA,OAAO,aAAA,CAAc,OAAA,IAAW,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA;AAC3D;AAGO,SAAS,oBAAoB,UAAA,EAAmC;AACrE,EAAA,IAAI,CAAC,kBAAiB,EAAG;AAEzB,EAAA,IAAI,cAAc,YAAA,EAAc;AAC9B,IAAA,IAAI;AACF,MAAA,aAAA,CAAc,aAAa,UAAU,CAAA;AAAA,IACvC,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA;AAAA,EACF;AAEA,EAAA,OAAA,CAAQ,IAAA;AAAA,IACN,CAAA,oCAAA,EAAuC,WAAW,YAAY,CAAA;AAAA,EAAA,EACvD,WAAW,OAAO;AAAA,SAAA,EACX,UAAA,CAAW,SAAA,CAAU,IAAA,CAAK,GAAG,CAAC;AAAA,iDAAA,EACU,UAAA,CAAW,SAAA,CAAU,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAAA,GACtF;AACF;AAGO,SAAS,UAAA,CACd,YAAA,EACA,SAAA,EACA,eAAA,EACM;AACN,EAAA,IAAI,CAAC,kBAAiB,EAAG;AAEzB,EAAA,MAAM,MAAM,CAAA,EAAG,YAAY,IAAI,SAAA,CAAU,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAClD,EAAA,MAAM,QAAA,GAAW,aAAA,CAAc,GAAA,CAAI,GAAG,CAAA;AACtC,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,QAAA,CAAS,UAAA,EAAA;AACT,IAAA,QAAA,CAAS,WAAA,IAAe,eAAA;AACxB,IAAA,QAAA,CAAS,SAAA,GAAY,QAAA,CAAS,WAAA,GAAc,QAAA,CAAS,UAAA;AAAA,EACvD,CAAA,MAAO;AACL,IAAA,aAAA,CAAc,IAAI,GAAA,EAAK;AAAA,MACrB,SAAA,EAAW,CAAC,GAAG,SAAS,CAAA;AAAA,MACxB,UAAA,EAAY,CAAA;AAAA,MACZ,WAAA,EAAa,eAAA;AAAA,MACb,SAAA,EAAW;AAAA,KACZ,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,GAAA,CAAI,GAAG,CAAA;AACrC,EAAA,IAAI,OAAA,CAAQ,SAAA,GAAY,aAAA,CAAc,oBAAA,EAAsB;AAC1D,IAAA,mBAAA,CAAoB;AAAA,MAClB,IAAA,EAAM,YAAA;AAAA,MACN,YAAA;AAAA,MACA,SAAA,EAAW,CAAC,GAAG,SAAS,CAAA;AAAA,MACxB,OAAA,EAAS,CAAA,YAAA,EAAe,SAAA,CAAU,IAAA,CAAK,GAAG,CAAC,CAAA,gBAAA,EAAmB,OAAA,CAAQ,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAC,CAAA,8BAAA,CAAA;AAAA,MAC1F,aAAa,OAAA,CAAQ,SAAA;AAAA,MACrB,YAAY,OAAA,CAAQ;AAAA,KACrB,CAAA;AAAA,EACH;AACF;AAGO,SAAS,2BAAA,CACd,YAAA,EACA,cAAA,EACA,SAAA,EACM;AACN,EAAA,IAAI,CAAC,kBAAiB,EAAG;AACzB,EAAA,IAAI,cAAA,GAAiB,cAAc,uBAAA,EAAyB;AAC1D,IAAA,mBAAA,CAAoB;AAAA,MAClB,IAAA,EAAM,iBAAA;AAAA,MACN,YAAA;AAAA,MACA,SAAA,EAAW,CAAC,GAAG,SAAS,CAAA;AAAA,MACxB,SAAS,CAAA,eAAA,EAAkB,cAAc,uBAAuB,SAAA,CAAU,IAAA,CAAK,GAAG,CAAC,CAAA,4BAAA,CAAA;AAAA,MACnF;AAAA,KACD,CAAA;AAAA,EACH;AACF;AAGO,SAAS,kBAAA,GAA2B;AACzC,EAAA,aAAA,CAAc,KAAA,EAAM;AACtB;AAGO,SAAS,gBAAA,GAA8C;AAC5D,EAAA,OAAO,IAAI,GAAA;AAAA,IACT,CAAC,GAAG,aAAA,CAAc,OAAA,EAAS,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAAA,MACjD,GAAA;AAAA,MACA;AAAA,QACE,SAAA,EAAW,CAAC,GAAG,KAAA,CAAM,SAAS,CAAA;AAAA,QAC9B,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,aAAa,KAAA,CAAM,WAAA;AAAA,QACnB,WAAW,KAAA,CAAM;AAAA;AACnB,KACD;AAAA,GACH;AACF;;;AC/IA,IAAM,mBAAA,mBAAsB,IAAI,GAAA,CAAI,CAAC,IAAA,EAAM,MAAM,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAI,CAAC,CAAA;AAEnE,SAAS,mBAAA,CACd,UAAA,EACA,SAAA,EACA,UAAA,EACA,gBACA,SAAA,EACM;AACN,EAAA,IAAI,kBAAA,CAAmB,SAAS,CAAA,EAAG;AACnC,EAAA,IAAI,UAAA,CAAW,MAAA,CAAO,SAAA,KAAc,OAAA,EAAS;AAE7C,EAAA,MAAM,WAAA,GAAgC,+BAAA,CAAgC,UAAU,CAAA;AAChF,EAAA,MAAM,gBAAgB,CAAC,GAAG,WAAW,OAAA,CAAQ,MAAA,EAAQ,CAAA,CAAE,IAAA;AAAA,IACrD,CAAC,UAAU,KAAA,CAAM,YAAA,CAAa,SAAS,CAAA,IAAK,KAAA,CAAM,sBAAsB,WAAW;AAAA,GACrF;AACA,EAAA,IAAI,aAAA,EAAe;AAEnB,EAAA,IAAI,kBAAiB,EAAG;AACtB,IAAA,2BAAA,CAA4B,UAAA,CAAW,EAAA,IAAM,SAAA,EAAW,UAAA,CAAW,MAAM,SAAS,CAAA;AAAA,EACpF;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAoC,CAAC,GAAA,KACzC,SAAA,CAAU,MAAA;AAAA,MACR,CAAC,OAAA,EAAS,IAAA,KAAU,OAAA,CAAoC,IAAI,CAAA;AAAA,MAC5D;AAAA,KACF;AACF,IAAA,UAAA,CAAW,YAAY,QAAA,EAAU;AAAA,MAC/B,IAAA,EAAM,CAAA,KAAA,EAAQ,SAAA,CAAU,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAAA,MACjC,OAAA,EAAS,YACL,EAAE,SAAA,EAAW,gBAAgB,WAAA,EAAY,GACzC,EAAE,cAAA,EAAgB,WAAA;AAAY,KACnC,CAAA;AAAA,EACH,SAAS,KAAA,EAAO;AAEd,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN,CAAA,EAAG,UAAA,CAAW,EAAA,GAAK,CAAA,CAAA,EAAI,UAAA,CAAW,EAAE,CAAA,EAAA,CAAA,GAAO,EAAE,CAAA,4CAAA,EAA+C,SAAA,CAAU,IAAA,CAAK,GAAG,CAAC,CAAA,EAAA,CAAA;AAAA,MAC/G;AAAA,KACF;AAAA,EACF;AACF;AAGO,SAAS,wBAAA,CACd,YACA,UAAA,EACM;AACN,EAAA,IAAI,UAAA,CAAW,MAAA,CAAO,SAAA,KAAc,OAAA,EAAS;AAC7C,EAAA,KAAA,MAAW,EAAE,SAAA,EAAW,SAAA,EAAU,IAAK,2BAAA,CAA4B,UAAU,CAAA,EAAG;AAC9E,IAAA,mBAAA,CAAoB,SAAA,EAAW,WAAW,UAAU,CAAA;AAAA,EACtD;AACF;AAEO,SAAS,4BACd,UAAA,EACwD;AACxD,EAAA,MAAM,UAAkE,EAAC;AAEzE,EAAA,MAAM,KAAA,GAAQ,CAAC,IAAA,KAAgC;AAC7C,IAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AAC1B,IAAA,IAAI,IAAA,CAAK,SAAS,KAAA,EAAO;AACvB,MAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,IAAA,EAAM,KAAA,CAAM,GAAG,CAAA;AACtC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAC,mBAAA,CAAoB,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG;AAEzC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AAC5B,IAAA,IAAI,CAAC,QAAA,IAAY,QAAA,CAAS,IAAA,KAAS,KAAA,EAAO;AAC1C,IAAA,MAAM,SAAA,GAAY,CAAC,GAAG,QAAA,CAAS,IAAI,CAAA;AACnC,IAAA,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,IAAK,kBAAA,CAAmB,SAAS,CAAA,EAAG;AAE7D,IAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,SAAA,EAAW,SAAA,CAAU,KAAK,GAAG,CAAA,EAAG,WAAW,CAAA;AAAA,EAC5D,CAAA;AAEA,EAAA,KAAA,CAAM,UAAU,CAAA;AAChB,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,gCAAgC,UAAA,EAAwC;AAC/E,EAAA,OAAO;AAAA,IACL,GAAG,6BAAA;AAAA,IACH,GAAG,UAAA,CAAW;AAAA,GAChB;AACF;AAEA,SAAS,mBAAmB,SAAA,EAAmC;AAC7D,EAAA,OAAO,UAAU,MAAA,KAAW,CAAA,IAAK,UAAU,CAAC,CAAA,CAAG,WAAW,GAAG,CAAA;AAC/D;;;ACxFO,IAAM,aAAA,GAAgB;AAEtB,IAAM,WAAN,MAAe;AAAA,EACZ,GAAA,uBAAU,GAAA,EAAoB;AAAA,EAEtC,IAAI,IAAA,GAAe;AACjB,IAAA,OAAO,KAAK,GAAA,CAAI,IAAA;AAAA,EAClB;AAAA;AAAA,EAGA,OAAO,EAAA,EAAgC;AACrC,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,EAAA,KAAO,CAAC,CAAA;AAAA,EAC9B;AAAA;AAAA,EAGA,QAAQ,EAAA,EAAoB;AAC1B,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,OAAO,CAAC,CAAA;AAC/B,IAAA,IAAI,MAAM,MAAA,EAAW,MAAM,IAAI,aAAA,CAAc,CAAA,GAAA,EAAM,EAAE,CAAA,UAAA,CAAY,CAAA;AACjE,IAAA,OAAO,CAAA;AAAA,EACT;AAAA;AAAA,EAGA,MAAA,CAAO,IAAY,GAAA,EAAsB;AACvC,IAAA,MAAM,MAAM,EAAA,KAAO,CAAA;AACnB,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,GAAG,GAAG,OAAO,KAAA;AAC9B,IAAA,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,GAAA,EAAK,GAAG,CAAA;AACrB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,OAAO,EAAA,EAAgC;AACrC,IAAA,MAAM,MAAM,EAAA,KAAO,CAAA;AACnB,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA;AAC7B,IAAA,IAAI,IAAA,KAAS,QAAW,OAAO,MAAA;AAC/B,IAAA,IAAA,CAAK,GAAA,CAAI,OAAO,GAAG,CAAA;AACnB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,OAAA,GAA8C;AAC5C,IAAA,OAAO,IAAA,CAAK,IAAI,OAAA,EAAQ;AAAA,EAC1B;AAAA;AAAA,EAGA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,IAAI,KAAA,EAAM;AAAA,EACjB;AACF;;;ACxBO,IAAM,WAAN,MAAe;AAAA,EAMpB,YAA4B,QAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAC1B,IAAA,IAAI,YAAY,CAAA,IAAK,CAAC,MAAA,CAAO,SAAA,CAAU,QAAQ,CAAA,EAAG;AAChD,MAAA,MAAM,IAAI,WAAW,qCAAqC,CAAA;AAAA,IAC5D;AACA,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,KAAA,CAA8B,QAAQ,CAAA;AAAA,EAC3D;AAAA,EAL4B,QAAA;AAAA,EALpB,OAAA;AAAA,EACA,IAAA,GAAO,CAAA;AAAA;AAAA,EACP,KAAA,GAAQ,CAAA;AAAA;AAAA,EACR,UAAA,GAAa,CAAA;AAAA,EASrB,IAAI,IAAA,GAAe;AACjB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA;AAAA,EAGA,IAAI,OAAA,GAAkB;AACpB,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAAA;AAAA,EAGA,IAAA,CACE,EAAA,EACA,KAAA,EACA,GAAA,EACA,MACA,QAAA,EACQ;AACR,IAAA,MAAM,MAAM,IAAA,CAAK,UAAA,EAAA;AACjB,IAAA,MAAM,GAAA,GAAkB,QAAA,GACpB,EAAE,GAAA,EAAK,IAAI,KAAA,EAAO,GAAA,EAAK,IAAA,EAAM,QAAA,KAC7B,EAAE,GAAA,EAAK,EAAA,EAAI,KAAA,EAAO,KAAK,IAAA,EAAK;AAChC,IAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,GAAI,GAAA;AAC1B,IAAA,IAAA,CAAK,IAAA,GAAA,CAAQ,IAAA,CAAK,IAAA,GAAO,CAAA,IAAK,IAAA,CAAK,QAAA;AACnC,IAAA,IAAI,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,KAAA,EAAA;AACrC,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA,EAGA,SAAA,GAAoB;AAClB,IAAA,IAAI,IAAA,CAAK,KAAA,KAAU,CAAA,EAAG,OAAO,EAAA;AAC7B,IAAA,MAAM,OAAO,IAAA,CAAK,IAAA,GAAO,KAAK,KAAA,GAAQ,IAAA,CAAK,YAAY,IAAA,CAAK,QAAA;AAC5D,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA,CAAG,GAAA;AAAA,EAC5B;AAAA;AAAA,EAGA,IAAA,GAAe;AACb,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,IAAA,EAA4B;AACrC,IAAA,IAAI,IAAA,GAAO,CAAA,EAAG,MAAM,IAAI,WAAW,2BAA2B,CAAA;AAC9D,IAAA,IAAI,IAAA,GAAO,KAAK,UAAA,EAAY;AAC1B,MAAA,MAAM,IAAI,SAAA,CAAU,CAAA,KAAA,EAAQ,IAAI,CAAA,2BAAA,EAA8B,IAAA,CAAK,UAAU,CAAA,CAAA,CAAG,CAAA;AAAA,IAClF;AACA,IAAA,IAAI,IAAA,GAAO,IAAA,CAAK,eAAA,EAAgB,EAAG;AACjC,MAAA,MAAM,IAAI,SAAA;AAAA,QACR,CAAA,KAAA,EAAQ,IAAI,CAAA,8BAAA,EAAiC,IAAA,CAAK,WAAW,CAAA;AAAA,OAC/D;AAAA,IACF;AACA,IAAA,MAAM,MAAoB,EAAC;AAE3B,IAAA,IAAI,OAAO,IAAA,CAAK,IAAA,GAAO,CAAA,GAAI,IAAA,CAAK,YAAY,IAAA,CAAK,QAAA;AACjD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,OAAO,CAAA,EAAA,EAAK;AACnC,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAC1B,MAAA,IAAI,CAAA,CAAE,MAAM,IAAA,EAAM;AAClB,MAAA,GAAA,CAAI,KAAK,CAAC,CAAA;AACV,MAAA,GAAA,GAAA,CAAO,GAAA,GAAM,CAAA,GAAI,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,QAAA;AAAA,IACzC;AAEA,IAAA,IAAA,CAAK,SAAS,GAAA,CAAI,MAAA;AAClB,IAAA,IAAA,CAAK,QAAQ,IAAA,CAAK,IAAA,GAAO,IAAI,MAAA,GAAS,IAAA,CAAK,YAAY,IAAA,CAAK,QAAA;AAE5D,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEQ,eAAA,GAA0B;AAChC,IAAA,MAAM,CAAA,GAAI,KAAK,SAAA,EAAU;AACzB,IAAA,OAAO,CAAA,KAAM,EAAA,GAAK,IAAA,CAAK,UAAA,GAAa,CAAA;AAAA,EACtC;AAAA;AAAA,EAGA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,MAAS,CAAA;AAC3B,IAAA,IAAA,CAAK,IAAA,GAAO,CAAA;AACZ,IAAA,IAAA,CAAK,KAAA,GAAQ,CAAA;AAAA,EACf;AACF;;;ACpEO,IAAM,gBAAN,MAAoB;AAAA,EACjB,SAAA,uBAAqC,GAAA,EAAI;AAAA,EAEjD,UAAU,QAAA,EAAsC;AAC9C,IAAA,IAAA,CAAK,SAAA,CAAU,IAAI,QAAQ,CAAA;AAC3B,IAAA,OAAO,MAAM,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA;AAAA,EAC7C;AAAA,EAEA,KAAK,KAAA,EAA0B;AAC7B,IAAA,KAAA,MAAW,CAAA,IAAK,KAAK,SAAA,EAAW;AAC9B,MAAA,IAAI;AACF,QAAA,CAAA,CAAE,KAAK,CAAA;AAAA,MACT,SAAS,GAAA,EAAK;AAGZ,QAAA,OAAA,CAAQ,KAAA,CAAM,sCAAsC,GAAG,CAAA;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,IAAA,GAAe;AACjB,IAAA,OAAO,KAAK,SAAA,CAAU,IAAA;AAAA,EACxB;AACF;;;AClEO,IAAM,oBAAN,MAAiE;AAAA,EACrD,QAAA,uBAAe,GAAA,EAG9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOF,EAAA,CACE,OACA,QAAA,EACY;AACZ,IAAA,IAAI,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA;AACjC,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,GAAA,uBAAU,GAAA,EAAI;AACd,MAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,KAAA,EAAO,GAAG,CAAA;AAAA,IAC9B;AACA,IAAA,MAAM,OAAA,GAAU,QAAA;AAChB,IAAA,GAAA,CAAI,IAAI,OAAO,CAAA;AACf,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA;AACjC,MAAA,IAAI,CAAC,CAAA,EAAG;AACR,MAAA,CAAA,CAAE,OAAO,OAAO,CAAA;AAChB,MAAA,IAAI,EAAE,IAAA,KAAS,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,OAAO,KAAK,CAAA;AAAA,IAC9C,CAAA;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAA,CACE,OACA,QAAA,EACY;AACZ,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,EAAA,CAAG,KAAA,EAAO,CAAC,OAAA,KAAY;AACtC,MAAA,GAAA,EAAI;AACJ,MAAA,QAAA,CAAS,OAAO,CAAA;AAAA,IAClB,CAAC,CAAA;AACD,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,GAAA,CACE,OACA,QAAA,EACM;AACN,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA;AACnC,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,GAAA,CAAI,OAAO,QAAqD,CAAA;AAChE,IAAA,IAAI,IAAI,IAAA,KAAS,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,OAAO,KAAK,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAA,CACE,OACA,OAAA,EACqB;AACrB,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAI,KAAA,GAA8C,IAAA;AAClD,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,EAAA,CAAG,KAAA,EAAO,CAAC,OAAA,KAAY;AACtC,QAAA,IAAI,KAAA,KAAU,IAAA,EAAM,YAAA,CAAa,KAAK,CAAA;AACtC,QAAA,GAAA,EAAI;AACJ,QAAA,OAAA,CAAQ,OAAO,CAAA;AAAA,MACjB,CAAC,CAAA;AACD,MAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,OAAA,IAAW,CAAA,EAAG;AAC/C,QAAA,KAAA,GAAQ,WAAW,MAAM;AACvB,UAAA,GAAA,EAAI;AACJ,UAAA,MAAA;AAAA,YACE,IAAI,KAAA;AAAA,cACF,CAAA,SAAA,EAAY,MAAA,CAAO,KAAK,CAAC,sBAAsB,OAAO,CAAA,EAAA;AAAA;AACxD,WACF;AAAA,QACF,GAAG,OAAO,CAAA;AAAA,MACZ;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,IAAA,CAA8B,OAAU,OAAA,EAA2B;AACjE,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA;AACnC,IAAA,IAAI,CAAC,GAAA,IAAO,GAAA,CAAI,IAAA,KAAS,CAAA,EAAG;AAG5B,IAAA,KAAA,MAAW,EAAA,IAAM,CAAC,GAAG,GAAG,CAAA,EAAG;AACzB,MAAA,IAAI;AACF,QAAA,EAAA,CAAG,OAAiC,CAAA;AAAA,MACtC,SAAS,GAAA,EAAK;AAEZ,QAAA,OAAA,CAAQ,KAAA,CAAM,qCAAqC,GAAG,CAAA;AAAA,MACxD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,cAAc,KAAA,EAA+B;AAC3C,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,IAAI,CAAA,GAAI,CAAA;AACR,MAAA,KAAA,MAAW,OAAO,IAAA,CAAK,QAAA,CAAS,MAAA,EAAO,OAAQ,GAAA,CAAI,IAAA;AACnD,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,KAAK,GAAG,IAAA,IAAQ,CAAA;AAAA,EAC3C;AAAA;AAAA,EAGA,QAAA,GAAiB;AACf,IAAA,IAAA,CAAK,SAAS,KAAA,EAAM;AAAA,EACtB;AACF,CAAA;;;AC5HA,IAAI,cAAA,GAAiB,CAAA;AACrB,IAAI,WAAA,GAAc,CAAA;AAClB,IAAM,sBAA0C,EAAC;AACjD,IAAI,mBAAuC,EAAC;AAa5C,SAAS,6BAAA,GAAsE;AAC7E,EAAA,IAAI;AACF,IAAA,MAAM,gBAAA,GAAoB,WAEvB,OAAA,EAAS,gBAAA;AACZ,IAAA,MAAM,UAAA,GAAa,mBAAmB,kBAAkB,CAAA;AAGxD,IAAA,IAAI,CAAC,UAAA,EAAY,iBAAA,EAAmB,OAAO,IAAA;AAC3C,IAAA,OAAO,IAAI,WAAW,iBAAA,EAAkB;AAAA,EAC1C,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,IAAM,qBAAqB,6BAAA,EAAgD;AAE3E,SAAS,cAAA,GAAiC;AACxC,EAAA,IAAI,OAAA,GAAU,KAAA;AACd,EAAA,IAAI,YAAA;AACJ,EAAA,IAAI,WAAA;AAEJ,EAAA,MAAM,OAAA,GAAU,IAAI,OAAA,CAAW,CAAC,SAAS,MAAA,KAAW;AAClD,IAAA,YAAA,GAAe,CAAC,KAAA,KAAU;AACxB,MAAA,IAAI,OAAA,EAAS;AACb,MAAA,OAAA,GAAU,IAAA;AACV,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf,CAAA;AACA,IAAA,WAAA,GAAc,CAAC,MAAA,KAAW;AACxB,MAAA,IAAI,OAAA,EAAS;AACb,MAAA,OAAA,GAAU,IAAA;AACV,MAAA,MAAA,CAAO,MAAM,CAAA;AAAA,IACf,CAAA;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,OAAA,EAAS,YAAA;AAAA,IACT,MAAA,EAAQ,WAAA;AAAA,IACR,IAAI,OAAA,GAAU;AACZ,MAAA,OAAO,OAAA;AAAA,IACT;AAAA,GACF;AACF;AAEA,SAAS,mBAAA,GAA8B;AACrC,EAAA,OAAO,UAAA,CAAW,QAAQ,UAAA,IAAa,IAAK,MAAM,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA,EAAI,WAAA,EAAa,CAAA,CAAA;AAC/E;AAEA,SAAS,iBAAA,CACP,UACA,QAAA,EACyB;AACzB,EAAA,OAAO;AAAA,IACL,GAAI,QAAA,CAAS,YAAA,IAAgB,EAAC;AAAA,IAC9B,GAAI,QAAA,CAAS,YAAA,IAAgB;AAAC,GAChC;AACF;AAEA,SAAS,qBAAA,CACP,UACA,QAAA,EAC2B;AAC3B,EAAA,QAAQ,GAAG,QAAA,CAAS,IAAI,CAAA,CAAA,EAAI,QAAA,CAAS,IAAI,CAAA,CAAA;AAAI,IAC3C,KAAK,eAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,QAAA;AAAA,QACH,IAAA,EAAM,QAAA;AAAA,QACN,UAAU,EAAC;AAAA,QACX,UAAU,QAAA,CAAS,QAAA;AAAA,QACnB,SAAS,EAAE,GAAG,SAAS,OAAA,EAAS,GAAG,SAAS,OAAA,EAAQ;AAAA,QACpD,KAAK,QAAA,CAAS,GAAA;AAAA,QACd,WAAW,QAAA,CAAS,SAAA;AAAA,QACpB,QAAA,EAAU,QAAA,CAAS,QAAA,IAAY,QAAA,CAAS,QAAA;AAAA,QACxC,YAAA,EAAc,iBAAA,CAAkB,QAAA,EAAU,QAAQ,CAAA;AAAA,QAClD,YAAY,QAAA,CAAS,UAAA;AAAA,QACrB,WAAW,QAAA,CAAS;AAAA,OACtB;AAAA,IACF,KAAK,eAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,eAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,eAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,QAAA;AAAA,QACH,UAAU,QAAA,CAAS,QAAA;AAAA,QACnB,SAAS,EAAE,GAAG,SAAS,OAAA,EAAS,GAAG,SAAS,OAAA,EAAQ;AAAA,QACpD,QAAA,EAAU,QAAA,CAAS,QAAA,IAAY,QAAA,CAAS,QAAA;AAAA,QACxC,YAAA,EAAc,iBAAA,CAAkB,QAAA,EAAU,QAAQ;AAAA,OACpD;AAAA,IACF,KAAK,eAAA;AAAA,IACL,KAAK,eAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT;AACE,MAAA,MAAM,IAAI,MAAM,CAAA,gCAAA,EAAmC,QAAA,CAAS,IAAI,CAAA,CAAA,EAAI,QAAA,CAAS,IAAI,CAAA,CAAE,CAAA;AAAA;AAEzF;AAEA,SAAS,sBAAsB,EAAA,EAA4B;AACzD,EAAA,MAAM,KAAA,GAAQ,oBAAoB,SAAA,CAAU,CAAC,YAAY,OAAA,CAAQ,EAAA,KAAO,GAAG,EAAE,CAAA;AAC7E,EAAA,IAAI,KAAA,KAAU,EAAA,EAAI,mBAAA,CAAoB,MAAA,CAAO,OAAO,CAAC,CAAA;AACvD;AAEA,SAAS,oBAAoB,EAAA,EAA4B;AACvD,EAAA,gBAAA,CAAiB,KAAK,EAAE,CAAA;AAC1B;AAEA,SAAS,sBAAsB,EAAA,EAA4B;AACzD,EAAA,KAAA,IAAS,QAAQ,gBAAA,CAAiB,MAAA,GAAS,GAAG,KAAA,IAAS,CAAA,EAAG,SAAS,CAAA,EAAG;AACpE,IAAA,IAAI,gBAAA,CAAiB,KAAK,CAAA,EAAG,EAAA,KAAO,GAAG,EAAA,EAAI;AACzC,MAAA,gBAAA,CAAiB,MAAA,CAAO,OAAO,CAAC,CAAA;AAChC,MAAA;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,wBAAA,CAA4B,IAAsB,QAAA,EAAsB;AAC/E,EAAA,mBAAA,CAAoB,EAAE,CAAA;AACtB,EAAA,MAAMC,OAAM,MAAS;AACnB,IAAA,IAAI;AACF,MAAA,OAAO,QAAA,EAAS;AAAA,IAClB,CAAA,SAAE;AACA,MAAA,qBAAA,CAAsB,EAAE,CAAA;AAAA,IAC1B;AAAA,EACF,CAAA;AACA,EAAA,IAAI,kBAAA,EAAoB,OAAO,kBAAA,CAAmB,GAAA,CAAI,IAAIA,IAAG,CAAA;AAC7D,EAAA,OAAOA,IAAAA,EAAI;AACb;AAEA,SAAS,cAAc,KAAA,EAA4C;AACjE,EAAA,OACE,KAAA,KAAU,IAAA,KACT,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,UAAA,CAAA,IAC/C,OAAQ,KAAA,CAA6B,IAAA,KAAS,UAAA;AAElD;AAEA,SAAS,QAAQ,KAAA,EAAuB;AACtC,EAAA,OAAO,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AACjE;AAEA,SAAS,mBAAmB,EAAA,EAA4B;AACtD,EAAA,IAAI,CAAC,GAAG,UAAA,EAAY;AACpB,EAAA,KAAK,EAAA,CAAG,MAAA,EAAO,CAAE,KAAA,CAAM,MAAM;AAAA,EAE7B,CAAC,CAAA;AACH;AAEA,SAAS,oBAAA,CAAqB,IAAsB,KAAA,EAAsB;AACxE,EAAA,MAAM,aAAA,GAAgB,QAAQ,KAAK,CAAA;AACnC,EAAA,EAAA,CAAG,QAAQ,EAAE,OAAA,EAAS,aAAA,CAAc,OAAA,EAAS,OAAO,aAAA,EAAc;AAClE,EAAA,IAAI,EAAA,CAAG,KAAA,KAAU,SAAA,IAAa,EAAA,CAAG,UAAU,YAAA,EAAc;AACvD,IAAA,EAAA,CAAG,QAAA,EAAS;AAAA,EACd,CAAA,MAAO;AACL,IAAA,EAAA,CAAG,WAAA,CAAY,OAAO,aAAa,CAAA;AAAA,EACrC;AACF;AAEO,SAAS,kBACd,MAAA,EACgB;AAChB,EAAA,MAAM,EAAA,GAAK,IAAI,WAAA,CAAe,MAAM,CAAA;AACpC,EAAA,mBAAA,CAAoB,KAAK,EAAE,CAAA;AAC3B,EAAA,OAAO,EAAA;AACT;AAEO,SAAS,oBAAA,GAAgD;AAC9D,EAAA,OAAO,kBAAA,EAAoB,QAAA,EAAS,IAAK,gBAAA,CAAiB,GAAG,EAAE,CAAA;AACjE;AAEO,IAAM,cAAN,MAA8D;AAAA,EAC1D,EAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAuC,EAAC;AAAA,EACxC,cAAwC,cAAA,EAA+B;AAAA,EACvE,UAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACQ,mBAAsC,EAAC;AAAA,EACxD,KAAA,GAA0B,SAAA;AAAA,EAC1B,KAAA;AAAA,EAEA,YAAY,MAAA,EAA8B;AACxC,IAAA,IAAI,OAAO,MAAA,EAAQ,UAAA,KAAe,UAAA,EAAY;AAC5C,MAAA,MAAM,IAAI,MAAM,yCAAyC,CAAA;AAAA,IAC3D;AAEA,IAAA,IAAA,CAAK,EAAA,GAAK,MAAA,CAAO,EAAA,IAAM,mBAAA,EAAoB;AAC3C,IAAA,IAAA,CAAK,aAAa,MAAA,CAAO,UAAA;AACzB,IAAA,IAAA,CAAK,UAAA,GAAa,OAAO,UAAA,IAAc,IAAA;AACvC,IAAA,IAAA,CAAK,SAAA,uBAAgB,IAAA,EAAK;AAC1B,IAAA,IAAA,CAAK,cAAA,GAAiB,cAAA,EAAA;AACtB,IAAA,IAAA,CAAK,QAAA,GAAW,MAAA,CAAO,QAAA,IAAY,EAAC;AAAA,EACtC;AAAA,EAEA,SAAS,QAAA,EAAkC;AACzC,IAAA,IAAA,CAAK,KAAA,GAAQ,QAAA;AACb,IAAA,IAAI,QAAA,KAAa,WAAA,IAAe,QAAA,KAAa,QAAA,EAAU;AACrD,MAAA,qBAAA,CAAsB,IAAI,CAAA;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,OAAO,QAAA,EAAsD;AAC3D,IAAA,IAAI,IAAA,CAAK,UAAU,SAAA,EAAW;AAC5B,MAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,IACzD;AAEA,IAAA,MAAM,MAAA,GAAS,wBAAA,CAAyB,IAAA,EAAM,QAAQ,CAAA;AAEtD,IAAA,IAAI,aAAA,CAAc,MAAM,CAAA,EAAG;AACzB,MAAA,KAAK,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA,CAAE,IAAA;AAAA,QAC3B,MAAM,mBAAmB,IAAI,CAAA;AAAA,QAC7B,CAAC,KAAA,KAAU,oBAAA,CAAqB,IAAA,EAAM,KAAK;AAAA,OAC7C;AAAA,IACF,CAAA,MAAO;AACL,MAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,IACzB;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,mBAAmB,OAAA,EAA2B;AAC5C,IAAA,IAAA,CAAK,gBAAA,CAAiB,KAAK,OAAO,CAAA;AAAA,EACpC;AAAA,EAEA,eAAe,SAAA,EAA8C;AAC3D,IAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,MAAA,MAAM,aAAA,GAAgB,KAAK,SAAA,CAAU,SAAA;AAAA,QACnC,CAAC,QAAA,KAAa,QAAA,CAAS,SAAA,KAAc,QAAA,CAAS;AAAA,OAChD;AACA,MAAA,IAAI,iBAAiB,CAAA,EAAG;AACtB,QAAA,MAAM,SAAS,qBAAA,CAAsB,IAAA,CAAK,SAAA,CAAU,aAAa,GAAI,QAAQ,CAAA;AAC7E,QAAA,IAAI,WAAW,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,eAAe,CAAC,CAAA;AAAA,aACtD,IAAA,CAAK,SAAA,CAAU,aAAa,CAAA,GAAI,MAAA;AAAA,MACvC,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,SAAA,CAAU,KAAK,QAAQ,CAAA;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,SAAS,MAAA,EAA4D;AACnE,IAAA,IAAI,IAAA,CAAK,UAAU,WAAA,EAAa;AAC9B,MAAA,MAAM,IAAI,MAAM,yCAAyC,CAAA;AAAA,IAC3D;AAEA,IAAA,MAAM,mBAAA,GAAsB,QAAQ,mBAAA,IAAuB,KAAA;AAC3D,IAAA,IAAA,CAAK,SAAS,QAAQ,CAAA;AAEtB,IAAA,MAAM,WAAW,IAAA,CAAK,gBAAA,CAAiB,MAAA,CAAO,CAAC,EAAE,OAAA,EAAQ;AACzD,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,OAAA,EAAQ;AAAA,IACV;AAEA,IAAA,IAAI,CAAC,mBAAA,EAAqB;AACxB,MAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,QAAA,KAAa,QAAA,CAAS,SAAS,CAAC,CAAA;AACjF,MAAA,KAAA,MAAW,EAAA,IAAM,CAAC,GAAG,mBAAmB,CAAA,EAAG;AACzC,QAAA,IAAI,GAAG,EAAA,KAAO,IAAA,CAAK,EAAA,IAAM,EAAA,CAAG,UAAU,SAAA,EAAW;AACjD,QAAA,IAAI,EAAA,CAAG,SAAA,CAAU,IAAA,CAAK,CAAC,QAAA,KAAa,aAAa,GAAA,CAAI,QAAA,CAAS,SAAS,CAAC,CAAA,EAAG;AACzE,UAAA,EAAA,CAAG,QAAA,CAAS,EAAE,mBAAA,EAAqB,IAAA,EAAM,CAAA;AAAA,QAC3C;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,WAAA,CAAY,OAAO,IAAA,CAAK,KAAA,EAAO,SAAS,IAAI,KAAA,CAAM,yBAAyB,CAAC,CAAA;AACjF,IAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,eAAA,GAAwB;AACtB,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,IAAA,KAAA,MAAW,QAAA,IAAY,KAAK,SAAA,EAAW;AACrC,MAAA,MAAM,aAAa,QAAA,CAAS,UAAA;AAC5B,MAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,EAAE,CAAA,EAAG;AAChC,MAAA,UAAA,CAAW,QAAQ,wBAAA,IAA2B;AAC9C,MAAA,IAAA,CAAK,UAAA,CAAW,MAAA,EAAQ,yBAAA,EAA2B,MAAA,IAAU,KAAK,CAAA,EAAG;AACnE,QAAA,UAAA,CAAW,QAAQ,yBAAA,IAA4B;AAAA,MACjD;AACA,MAAA,OAAA,CAAQ,GAAA,CAAI,WAAW,EAAE,CAAA;AAAA,IAC3B;AAAA,EACF;AAAA,EAEA,MAAM,MAAA,GAAkC;AACtC,IAAA,IAAI,IAAA,CAAK,UAAU,SAAA,EAAW;AAC5B,MAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,IACzD;AAEA,IAAA,IAAA,CAAK,SAAS,YAAY,CAAA;AAE1B,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG;AAC/B,MAAA,IAAA,CAAK,SAAS,WAAW,CAAA;AACzB,MAAA,IAAA,CAAK,WAAA,CAAY,QAAQ,IAAI,CAAA;AAC7B,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,UAAA,CAAW;AAAA,QACpB,WAAA,EAAa;AAAA,OACd,CAAA;AACD,MAAA,IAAA,CAAK,iBAAiB,MAAA,GAAS,CAAA;AAC/B,MAAA,IAAA,CAAK,SAAS,WAAW,CAAA;AACzB,MAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,MAAA,IAAA,CAAK,WAAA,CAAY,QAAQ,IAAI,CAAA;AAAA,IAC/B,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,aAAA,GAAgB,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AAC9E,MAAA,IAAA,CAAK,QAAQ,EAAE,OAAA,EAAS,aAAA,CAAc,OAAA,EAAS,OAAO,aAAA,EAAc;AACpE,MAAA,IAAA,CAAK,QAAA,EAAS;AACd,MAAA,MAAM,aAAA;AAAA,IACR;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,iBAAiB,KAAA,EAAiC;AAChD,IAAA,MAAM,WAAW,IAAA,CAAK,SAAA,CAAU,SAAQ,GAAI,KAAA,CAAM,UAAU,OAAA,EAAQ;AACpE,IAAA,IAAI,QAAA,KAAa,GAAG,OAAO,QAAA;AAC3B,IAAA,OAAO,IAAA,CAAK,iBAAiB,KAAA,CAAM,cAAA;AAAA,EACrC;AACF;;;ACpVO,SAAS,eAAA,CACd,KAAA,EACA,OAAA,GAAuB,IAAI,WAAA,CAAY,SAAS,EAAE,KAAA,EAAO,KAAA,EAAO,CAAA,EACxD;AACR,EAAA,IAAI,KAAA,CAAM,UAAA,KAAe,CAAA,EAAG,OAAO,EAAA;AACnC,EAAA,IAAI;AACF,IAAA,OAAO,OAAA,CAAQ,OAAO,KAAK,CAAA;AAAA,EAC7B,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,OAAO,iBAAA,KAAsB,WAAA,IAAe,KAAA,CAAM,kBAAkB,iBAAA,EAAmB;AACzF,MAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,UAAA,CAAW,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,IAC9C;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAWO,IAAM,aAAN,MAAiB;AAAA,EACd,MAAA,GAAS,CAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA,GAAU,IAAI,WAAA,EAAY;AAAA,EAC1B,UAAU,IAAI,WAAA,CAAY,SAAS,EAAE,KAAA,EAAO,OAAO,CAAA;AAAA,EAEpE,YAAY,KAAA,EAAmB;AAC7B,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AAAA;AAAA,EAGA,IAAI,IAAA,GAAe;AACjB,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA;AAAA,EAGA,IAAI,QAAA,GAAmB;AACrB,IAAA,OAAO,KAAK,KAAA,CAAM,UAAA;AAAA,EACpB;AAAA;AAAA,EAGA,IAAI,QAAA,GAAuB;AACzB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA;AAAA,EAGA,YAAY,GAAA,EAAiD;AAC3D,IAAA,IAAI,GAAA,CAAI,MAAA,KAAW,CAAA,EAAG,OAAO,EAAE,OAAO,IAAA,CAAK,MAAA,EAAQ,GAAA,EAAK,IAAA,CAAK,MAAA,EAAO;AACpE,IAAA,IAAI,KAAK,MAAA,GAAS,GAAA,CAAI,MAAA,GAAS,IAAA,CAAK,MAAM,UAAA,EAAY;AACpD,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,CAAA,uBAAA,EAA0B,IAAI,MAAM,CAAA,OAAA,EAClC,KAAK,KAAA,CAAM,UAAA,GAAa,KAAK,MAC/B,CAAA;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,MAAM,CAAA;AAC/B,IAAA,MAAM,QAAQ,IAAA,CAAK,MAAA;AACnB,IAAA,IAAA,CAAK,UAAU,GAAA,CAAI,MAAA;AACnB,IAAA,OAAO,EAAE,KAAA,EAAO,GAAA,EAAK,IAAA,CAAK,MAAA,EAAO;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,KAAA,EAA+C;AACpD,IAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,EAAE,OAAO,IAAA,CAAK,MAAA,EAAQ,GAAA,EAAK,IAAA,CAAK,MAAA,EAAO;AACtE,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA;AACzC,IAAA,OAAO,IAAA,CAAK,YAAY,OAAO,CAAA;AAAA,EACjC;AAAA;AAAA,EAGA,IAAA,CAAK,OAAe,GAAA,EAAqB;AACvC,IAAA,IAAI,QAAQ,CAAA,IAAK,GAAA,GAAM,SAAS,GAAA,GAAM,IAAA,CAAK,MAAM,UAAA,EAAY;AAC3D,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,mCAAmC,KAAK,CAAA,EAAA,EAAK,GAAG,CAAA,MAAA,EAAS,IAAA,CAAK,MAAM,UAAU,CAAA;AAAA,OAChF;AAAA,IACF;AACA,IAAA,OAAO,eAAA,CAAgB,KAAK,KAAA,CAAM,QAAA,CAAS,OAAO,GAAG,CAAA,EAAG,KAAK,OAAO,CAAA;AAAA,EACtE;AAAA;AAAA,EAGA,SAAA,CAAU,OAAe,GAAA,EAAyB;AAChD,IAAA,IAAI,QAAQ,CAAA,IAAK,GAAA,GAAM,SAAS,GAAA,GAAM,IAAA,CAAK,MAAM,UAAA,EAAY;AAC3D,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,mCAAmC,KAAK,CAAA,EAAA,EAAK,GAAG,CAAA,MAAA,EAAS,IAAA,CAAK,MAAM,UAAU,CAAA;AAAA,OAChF;AAAA,IACF;AACA,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAA,CAAS,KAAA,EAAe,GAAA,EAAa,IAAA,EAAkB,UAAA,EAA0B;AAC/E,IAAA,IAAI,QAAQ,CAAA,IAAK,GAAA,GAAM,SAAS,GAAA,GAAM,IAAA,CAAK,MAAM,UAAA,EAAY;AAC3D,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,uCAAuC,KAAK,CAAA,EAAA,EAAK,GAAG,CAAA,MAAA,EAAS,IAAA,CAAK,MAAM,UAAU,CAAA;AAAA,OACpF;AAAA,IACF;AACA,IAAA,IAAI,QAAQ,KAAA,EAAO;AACnB,IAAA,IAAA,CAAK,IAAI,IAAA,CAAK,KAAA,CAAM,SAAS,KAAA,EAAO,GAAG,GAAG,UAAU,CAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAA,GAAmB;AACjB,IAAA,IAAA,CAAK,MAAA,GAAS,CAAA;AAAA,EAGhB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAA,CAAQ,KAAiBf,OAAAA,EAAsB;AAC7C,IAAA,IAAIA,OAAAA,GAAS,CAAA,IAAKA,OAAAA,GAAS,IAAA,CAAK,MAAM,UAAA,EAAY;AAChD,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,CAAA,eAAA,EAAkBA,OAAM,CAAA,2BAAA,EAA8B,IAAA,CAAK,MAAM,UAAU,CAAA;AAAA,OAC7E;AAAA,IACF;AACA,IAAA,IAAIA,OAAAA,GAAS,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,IAAI,QAAA,CAAS,CAAA,EAAGA,OAAM,CAAA,EAAG,CAAC,CAAA;AACzD,IAAA,IAAA,CAAK,MAAA,GAASA,OAAAA;AAAA,EAChB;AACF;AAUO,IAAM,aAAN,MAAiB;AAAA,EACd,YAAA,uBAAmB,GAAA,EAAoB;AAAA,EACvC,eAAyB,EAAC;AAAA;AAAA,EAGlC,IAAI,IAAA,GAAe;AACjB,IAAA,OAAO,KAAK,YAAA,CAAa,MAAA;AAAA,EAC3B;AAAA;AAAA,EAGA,OAAO,CAAA,EAAmB;AACxB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,CAAC,CAAA;AACxC,IAAA,IAAI,QAAA,KAAa,QAAW,OAAO,QAAA;AACnC,IAAA,MAAM,IAAA,GAAO,KAAK,YAAA,CAAa,MAAA;AAC/B,IAAA,IAAA,CAAK,YAAA,CAAa,KAAK,CAAC,CAAA;AACxB,IAAA,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,CAAA,EAAG,IAAI,CAAA;AAC7B,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,OAAO,CAAA,EAA+B;AACpC,IAAA,OAAO,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,CAAC,CAAA;AAAA,EAChC;AAAA;AAAA,EAGA,OAAO,IAAA,EAAsB;AAC3B,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,YAAA,CAAa,IAAI,CAAA;AAChC,IAAA,IAAI,MAAM,MAAA,EAAW;AACnB,MAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,wBAAA,EAA2B,IAAI,CAAA,CAAE,CAAA;AAAA,IAC7D;AACA,IAAA,OAAO,CAAA;AAAA,EACT;AAAA;AAAA,EAGA,CAAC,OAAA,GAA8C;AAC7C,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,YAAA,CAAa,QAAQ,CAAA,EAAA,EAAK;AACjD,MAAA,MAAM,CAAC,CAAA,EAAG,IAAA,CAAK,YAAA,CAAa,CAAC,CAAE,CAAA;AAAA,IACjC;AAAA,EACF;AACF;;;AC9IO,IAAM,iBAAN,MAAqB;AAAA;AAAA,EAEjB,KAAA;AAAA,EACT,MAAA;AAAA,EACA,QAAA;AAAA;AAAA,EAEA,MAAA;AAAA;AAAA,EAEA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA;AAAA,EAEA,OAAA;AAAA,EAEA,WAAA,CAAY,OAAuB,eAAA,EAAyB;AAC1D,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,eAAe,CAAA;AACxC,IAAA,IAAA,CAAK,QAAA,GAAW,GAAA;AAChB,IAAA,IAAA,CAAK,MAAA,GAAS,aAAA,CAAc,KAAA,CAAM,QAAA,EAAU,GAAG,CAAA;AAC/C,IAAA,IAAA,CAAK,QAAA,GAAW,MAAM,QAAA,GAAW,IAAI,WAAY,GAAA,GAAM,CAAA,KAAO,CAAC,CAAA,GAAI,IAAA;AACnE,IAAA,IAAA,CAAK,MAAA,GAAS,CAAA;AACd,IAAA,IAAA,CAAK,OAAA,GAAU,CAAA;AACf,IAAA,IAAI,eAAA,CAAgB,KAAA,CAAM,QAAQ,CAAA,EAAG;AACnC,MAAA,MAAM,SAAA,GAAY,MAAM,eAAA,IAAmB,IAAA;AAC3C,MAAA,IAAA,CAAK,OAAO,IAAI,UAAA,CAAW,IAAI,UAAA,CAAW,SAAS,CAAC,CAAA;AACpD,MAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAAA,IACpB,CAAA,MAAA,IAAW,KAAA,CAAM,QAAA,KAAa,cAAA,CAAe,QAAA,EAAU;AACrD,MAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,MAAA,IAAA,CAAK,UAAA,GAAa,IAAI,UAAA,EAAW;AAAA,IACnC,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,MAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAAA,IACpB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,eAAe,KAAA,EAAqB;AAClC,IAAA,MAAM,MAAA,GAAS,KAAK,MAAA,GAAS,KAAA;AAC7B,IAAA,IAAI,MAAA,IAAU,KAAK,QAAA,EAAU;AAC7B,IAAA,IAAI,MAAM,IAAA,CAAK,QAAA;AACf,IAAA,OAAO,GAAA,GAAM,QAAQ,GAAA,IAAO,CAAA;AAI5B,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,IAAA,CAAK,KAAA,CAAM,UAAU,GAAG,CAAA;AACxD,IAAA,SAAA,CAAU,KAAK,MAAA,EAAQ,SAAA,EAAW,KAAK,qBAAA,CAAsB,IAAA,CAAK,MAAM,CAAC,CAAA;AACzE,IAAA,IAAA,CAAK,MAAA,GAAS,SAAA;AACd,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,MAAM,SAAA,GAAY,IAAI,UAAA,CAAY,GAAA,GAAM,MAAO,CAAC,CAAA;AAChD,MAAA,SAAA,CAAU,GAAA,CAAI,KAAK,QAAQ,CAAA;AAC3B,MAAA,IAAA,CAAK,QAAA,GAAW,SAAA;AAAA,IAClB;AACA,IAAA,IAAA,CAAK,QAAA,GAAW,GAAA;AAAA,EAClB;AAAA;AAAA,EAGQ,sBAAsB,QAAA,EAA0B;AACtD,IAAA,MAAM,CAAA,GAAI,KAAK,KAAA,CAAM,QAAA;AACrB,IAAA,IAAI,MAAM,cAAA,CAAe,IAAA,IAAQ,MAAM,cAAA,CAAe,MAAA,SAAe,QAAA,GAAW,CAAA;AAChF,IAAA,OAAO,QAAA;AAAA,EACT;AACF,CAAA;AAEA,SAAS,aAAA,CAAc,MAAsB,QAAA,EAAkC;AAC7E,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,cAAA,CAAe,IAAA;AAAA,IACpB,KAAK,cAAA,CAAe,KAAA;AAClB,MAAA,OAAO,IAAI,WAAW,QAAQ,CAAA;AAAA,IAChC,KAAK,cAAA,CAAe,IAAA;AAClB,MAAA,OAAO,IAAI,UAAU,QAAQ,CAAA;AAAA,IAC/B,KAAK,cAAA,CAAe,KAAA;AAClB,MAAA,OAAO,IAAI,WAAW,QAAQ,CAAA;AAAA,IAChC,KAAK,cAAA,CAAe,MAAA;AAClB,MAAA,OAAO,IAAI,YAAY,QAAQ,CAAA;AAAA,IACjC,KAAK,cAAA,CAAe,KAAA;AAClB,MAAA,OAAO,IAAI,WAAW,QAAQ,CAAA;AAAA,IAChC,KAAK,cAAA,CAAe,MAAA;AAAA,IACpB,KAAK,cAAA,CAAe,QAAA;AAClB,MAAA,OAAO,IAAI,YAAY,QAAQ,CAAA;AAAA,IACjC,KAAK,cAAA,CAAe,OAAA;AAClB,MAAA,OAAO,IAAI,aAAa,QAAQ,CAAA;AAAA,IAClC,KAAK,cAAA,CAAe,OAAA;AAClB,MAAA,OAAO,IAAI,aAAa,QAAQ,CAAA;AAAA,IAClC,KAAK,cAAA,CAAe,KAAA;AAClB,MAAA,OAAO,IAAI,cAAc,QAAQ,CAAA;AAAA,IACnC,KAAK,cAAA,CAAe,MAAA;AAClB,MAAA,OAAO,IAAI,eAAe,QAAQ,CAAA;AAAA,IACpC,KAAK,cAAA,CAAe,IAAA;AAAA,IACpB,KAAK,cAAA,CAAe,MAAA;AAElB,MAAA,OAAO,IAAI,UAAA,CAAW,QAAA,GAAW,CAAC,CAAA;AAAA,IACpC,KAAK,cAAA,CAAe,IAAA;AAAA,IACpB,KAAK,cAAA,CAAe,MAAA;AAAA,IACpB,KAAK,cAAA,CAAe,KAAA;AAAA,IACpB,KAAK,cAAA,CAAe,UAAA;AAAA,IACpB,KAAK,cAAA,CAAe,OAAA;AAClB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,yBAAyB,IAAI,CAAA,sDAAA;AAAA,OAC/B;AAAA;AAEN;AAEA,SAAS,SAAA,CACP,IAAA,EACA,EAAA,EACAA,OAAAA,EACM;AAGN,EAAC,EAAA,CAAyD,GAAA;AAAA,IACxD,IAAA,CAAK,QAAA,CAAS,CAAA,EAAGA,OAAM;AAAA,GACzB;AACF;;;ACpIA,IAAM,oBAAA,uBAA2B,OAAA,EAAwC;AAElE,SAAS,qBAAA,CACd,YACA,QAAA,EACM;AACN,EAAA,oBAAA,CAAqB,GAAA,CAAI,YAAY,QAAQ,CAAA;AAC/C;AAEO,SAAS,sBACd,UAAA,EAC0C;AAC1C,EAAA,OAAO,oBAAA,CAAqB,IAAI,UAAU,CAAA;AAC5C;;;ACnCA,SAAS,mBAAmB,KAAA,EAAwB;AAClD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,GAAI,CAAA,CAAA,EAAI,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA,GAAM,MAAA,CAAO,IAAI,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAC5I,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEO,SAAS,qBAAA,CACd,KAAA,EACA,KAAA,GAAQ,YAAA,EACqB;AAC7B,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzB,IAAA,MAAM,IAAI,gBAAgB,CAAA,EAAG,KAAK,oCAAoC,kBAAA,CAAmB,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,EACnG;AACA,EAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,IAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,EAAG,KAAK,CAAA,iCAAA,CAAmC,CAAA;AAAA,EACvE;AACA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,gBAAA,CAAiB,MAAM,CAAC,CAAA,EAAG,GAAG,KAAK,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,EAC7C;AACF;AAEO,IAAM,mBAAN,MAAuB;AAAA,EACnB,MAAA;AAAA,EACT,MAAA;AAAA,EACS,SAAA;AAAA,EACT,MAAA,GAAS,CAAA;AAAA,EACD,cAAA;AAAA,EAER,WAAA,CACE,UACA,MAAA,GAAqB,IAAI,WAAW,QAAA,GAAW,CAAC,GAChD,qBAAA,GAAwB,IAAA,CAAK,IAAI,EAAA,EAAI,QAAA,GAAW,CAAC,CAAA,EACjD,SAAA,GAA0B,IAAI,YAAA,CAAa,QAAA,GAAW,CAAC,CAAA,EACvD;AACA,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,QAAQ,CAAA,IAAK,WAAW,CAAA,EAAG;AAC/C,MAAA,MAAM,IAAI,WAAW,yCAAyC,CAAA;AAAA,IAChE;AACA,IAAA,IAAI,MAAA,CAAO,MAAA,GAAS,QAAA,GAAW,CAAA,EAAG;AAChC,MAAA,MAAM,IAAI,WAAW,oDAAoD,CAAA;AAAA,IAC3E;AACA,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,qBAAqB,CAAA,IAAK,wBAAwB,CAAA,EAAG;AACzE,MAAA,MAAM,IAAI,WAAW,sDAAsD,CAAA;AAAA,IAC7E;AACA,IAAA,IAAI,SAAA,CAAU,MAAA,GAAS,QAAA,GAAW,CAAA,EAAG;AACnC,MAAA,MAAM,IAAI,WAAW,uDAAuD,CAAA;AAAA,IAC9E;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,qBAAqB,CAAA;AACvD,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,YAAA,CAAa,IAAA,CAAK,iBAAiB,CAAC,CAAA;AACtD,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,KAAA,IAAS,MAAM,CAAA,EAAG,GAAA,GAAM,UAAU,GAAA,EAAA,EAAO,IAAA,CAAK,QAAQ,GAAG,CAAA;AAAA,EAC3D;AAAA,EAEA,GAAA,CAAI,KAAa,KAAA,EAAyB;AACxC,IAAA,qBAAA,CAAsB,KAAK,CAAA;AAC3B,IAAA,IAAA,CAAK,oBAAA,CAAqB,MAAM,MAAM,CAAA;AACtC,IAAA,MAAM,QAAQ,IAAA,CAAK,MAAA;AACnB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,MAAA,MAAM,KAAA,GAAQ,MAAM,CAAC,CAAA;AACrB,MAAA,MAAM,MAAA,GAAA,CAAU,QAAQ,CAAA,IAAK,CAAA;AAC7B,MAAA,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA;AAC7B,MAAA,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,GAAI,MAAM,CAAC,CAAA;AAAA,IACnC;AACA,IAAA,IAAA,CAAK,UAAU,KAAA,CAAM,MAAA;AACrB,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,GAAM,CAAC,CAAA,GAAI,KAAA;AACvB,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,GAAM,CAAA,GAAI,CAAC,IAAI,IAAA,CAAK,MAAA;AAChC,IAAA,IAAA,CAAK,UAAA,CAAW,KAAK,KAAK,CAAA;AAAA,EAC5B;AAAA,EAEA,IAAI,GAAA,EAAyB;AAC3B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,GAAA,GAAM,CAAC,CAAA,IAAK,CAAA;AACtC,IAAA,MAAM,MAAM,IAAA,CAAK,MAAA,CAAO,GAAA,GAAM,CAAA,GAAI,CAAC,CAAA,IAAK,CAAA;AACxC,IAAA,MAAM,MAAe,EAAC;AACtB,IAAA,KAAA,IAAS,MAAA,GAAS,KAAA,EAAO,MAAA,GAAS,GAAA,EAAK,MAAA,EAAA,EAAU;AAC/C,MAAA,MAAM,SAAS,MAAA,GAAS,CAAA;AACxB,MAAA,GAAA,CAAI,IAAA,CAAK;AAAA,QACP,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,IAAK,MAAA,CAAO,GAAA;AAAA,QAC9B,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,CAAC,KAAK,MAAA,CAAO;AAAA,OACnC,CAAA;AAAA,IACH;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,QAAQ,GAAA,EAAmB;AACzB,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,GAAM,CAAC,CAAA,GAAI,CAAA;AACvB,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,GAAM,CAAA,GAAI,CAAC,CAAA,GAAI,CAAA;AAC3B,IAAA,MAAM,aAAa,GAAA,GAAM,CAAA;AACzB,IAAA,IAAA,CAAK,SAAA,CAAU,UAAU,CAAA,GAAI,MAAA,CAAO,GAAA;AACpC,IAAA,IAAA,CAAK,SAAA,CAAU,UAAA,GAAa,CAAC,CAAA,GAAI,MAAA,CAAO,GAAA;AACxC,IAAA,IAAA,CAAK,SAAA,CAAU,UAAA,GAAa,CAAC,CAAA,GAAI,MAAA,CAAO,GAAA;AACxC,IAAA,IAAA,CAAK,SAAA,CAAU,UAAA,GAAa,CAAC,CAAA,GAAI,MAAA,CAAO,GAAA;AAAA,EAC1C;AAAA,EAEA,IAAA,CAAK,SAAiB,KAAA,EAAqB;AACzC,IAAA,MAAM,aAAa,OAAA,GAAU,CAAA;AAC7B,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,SAAA,CAAU,UAAU,CAAC,CAAA,EAAG;AAChD,MAAA,IAAA,CAAK,QAAQ,KAAK,CAAA;AAClB,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,OAAO,CAAC,CAAA;AAAA,EACnC;AAAA,EAEQ,qBAAqB,aAAA,EAA6B;AACxD,IAAA,MAAM,MAAA,GAAS,KAAK,MAAA,GAAS,aAAA;AAC7B,IAAA,IAAI,MAAA,IAAU,KAAK,cAAA,EAAgB;AACnC,IAAA,IAAI,eAAe,IAAA,CAAK,cAAA;AACxB,IAAA,OAAO,YAAA,GAAe,QAAQ,YAAA,IAAgB,CAAA;AAC9C,IAAA,MAAM,IAAA,GAAO,IAAI,YAAA,CAAa,YAAA,GAAe,CAAC,CAAA;AAC9C,IAAA,IAAA,CAAK,GAAA,CAAI,KAAK,MAAA,CAAO,QAAA,CAAS,GAAG,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,CAAA;AACjD,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,IAAA,CAAK,cAAA,GAAiB,YAAA;AAAA,EACxB;AAAA,EAEQ,UAAA,CAAW,KAAa,KAAA,EAAyB;AACvD,IAAA,IAAI,OAAO,MAAA,CAAO,iBAAA;AAClB,IAAA,IAAI,OAAO,MAAA,CAAO,iBAAA;AAClB,IAAA,IAAI,OAAO,MAAA,CAAO,iBAAA;AAClB,IAAA,IAAI,OAAO,MAAA,CAAO,iBAAA;AAClB,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,GAAG,CAAA,IAAK,KAAA,EAAO;AAC9B,MAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,GAAG,CAAA;AACzB,MAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,GAAG,CAAA;AACzB,MAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,GAAG,CAAA;AACzB,MAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,GAAG,CAAA;AAAA,IAC3B;AACA,IAAA,MAAM,aAAa,GAAA,GAAM,CAAA;AACzB,IAAA,IAAA,CAAK,SAAA,CAAU,UAAU,CAAA,GAAI,IAAA;AAC7B,IAAA,IAAA,CAAK,SAAA,CAAU,UAAA,GAAa,CAAC,CAAA,GAAI,IAAA;AACjC,IAAA,IAAA,CAAK,SAAA,CAAU,UAAA,GAAa,CAAC,CAAA,GAAI,IAAA;AACjC,IAAA,IAAA,CAAK,SAAA,CAAU,UAAA,GAAa,CAAC,CAAA,GAAI,IAAA;AAAA,EACnC;AACF,CAAA;AC3GO,SAAS,iBAAA,CACd,MAAA,EACA,SAAA,EACA,OAAA,GAAoC,EAAC,EAClB;AACnB,EAAA,MAAM,eAAA,GAAkB,kBAAkB,WAAA,GACtC,IAAI,YAAY,MAAM,CAAA,GACtB,WAAA,CAAY,IAAA,CAAK,MAAM,CAAA;AAC3B,EAAA,MAAM,kBAAA,GAAqB,kBAAA,CAAmB,eAAA,EAAiB,SAAS,CAAA;AACxE,EAAA,MAAM,cAAwB,EAAC;AAC/B,EAAA,MAAM,iBAA2B,EAAC;AAClC,EAAA,MAAM,cAAsB,EAAC;AAC7B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,eAAA,CAAgB,QAAQ,CAAA,EAAA,EAAK;AAC/C,IAAA,MAAM,IAAA,GAAO,cAAA,CAAe,SAAA,EAAW,kBAAA,CAAmB,CAAC,CAAE,CAAA;AAC7D,IAAA,IAAI,SAAS,IAAA,EAAM;AACnB,IAAA,WAAA,CAAY,IAAA,CAAK,eAAA,CAAgB,CAAC,CAAE,CAAA;AACpC,IAAA,cAAA,CAAe,IAAA,CAAK,kBAAA,CAAmB,CAAC,CAAE,CAAA;AAC1C,IAAA,WAAA,CAAY,KAAK,IAAI,CAAA;AAAA,EACvB;AACA,EAAA,MAAM,UAAA,GAAa,WAAA,CAAY,IAAA,CAAK,WAAW,CAAA;AAC/C,EAAA,MAAM,aAAA,GAAgB,WAAA,CAAY,IAAA,CAAK,cAAc,CAAA;AAErD,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,MAAA,KAAW,CAAA,GAC/B,IAAA,GACA,IAAI,QAAA,CAAS,UAAA,CAAW,MAAA,EAAQ,OAAA,CAAQ,QAAQ,CAAA;AACpD,EAAA,IAAI,SAAS,IAAA,EAAM;AACjB,IAAA,KAAA,MAAW,QAAQ,WAAA,EAAa;AAC9B,MAAA,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,IAC7C;AACA,IAAA,IAAA,CAAK,MAAA,EAAO;AAAA,EACd;AAEA,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAU,EAAC;AAAA,IACX,SAAA,sBAAe,GAAA,EAAY;AAAA,IAC3B,WAAA,sBAAiB,GAAA,EAAY;AAAA,IAC7B,gBAAA,EAAkB,QAAQ,gBAAA,IAAoB,CAAA;AAAA,IAC9C,YAAA,EAAc,QAAQ,YAAA,IAAgB;AAAA,GACxC;AACF;AAEO,SAAS,kBAAA,CACd,KAAA,EACA,SAAA,EACAC,MAAAA,EACa;AACb,EAAA,eAAA,CAAgBA,QAAO,OAAO,CAAA;AAE9B,EAAA,MAAMe,QAAAA,uBAAc,GAAA,EAAY;AAChC,EAAA,IAAI,KAAA,CAAM,SAAS,IAAA,EAAM;AACvB,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,IAAA,CAAK,MAAA,CAAOf,OAAM,CAAC,CAAA,EAAGA,MAAAA,CAAM,CAAC,GAAGA,MAAAA,CAAM,CAAC,CAAA,EAAGA,MAAAA,CAAM,CAAC,CAAC,CAAA;AACzE,IAAA,KAAA,MAAW,SAAS,QAAA,EAAU;AAC5B,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,UAAA,CAAW,KAAK,CAAA;AACpC,MAAA,IAAI,KAAA,CAAM,YAAY,GAAA,CAAI,KAAK,KAAK,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,KAAK,CAAA,EAAG;AAChE,MAAA,MAAM,OAAO,cAAA,CAAe,SAAA,EAAW,KAAA,CAAM,aAAA,CAAc,KAAK,CAAE,CAAA;AAClE,MAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,iBAAA,CAAkB,IAAA,EAAMA,MAAK,CAAA,EAAG;AACnD,QAAAe,QAAAA,CAAQ,IAAI,KAAK,CAAA;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,OAAA,IAAW,MAAM,QAAA,EAAU;AACpC,IAAA,IAAI,OAAA,CAAQ,UAAU,IAAA,EAAM;AAC5B,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,KAAA,CAAM,MAAA,CAAOf,OAAM,CAAC,CAAA,EAAGA,MAAAA,CAAM,CAAC,GAAGA,MAAAA,CAAM,CAAC,CAAA,EAAGA,MAAAA,CAAM,CAAC,CAAC,CAAA;AACxE,IAAA,KAAA,MAAW,SAAS,IAAA,EAAM;AACxB,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA;AAClC,MAAA,IAAI,KAAA,CAAM,YAAY,GAAA,CAAI,KAAK,KAAK,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,KAAK,CAAA,EAAG;AAChE,MAAA,MAAM,OAAO,cAAA,CAAe,SAAA,EAAW,OAAA,CAAQ,SAAA,CAAU,KAAK,CAAE,CAAA;AAChE,MAAA,IAAI,IAAA,KAAS,QAAQ,iBAAA,CAAkB,IAAA,EAAMA,MAAK,CAAA,EAAGe,QAAAA,CAAQ,GAAA,CAAI,KAAK,CAAA;AAAA,IACxE;AAAA,EACF;AAEA,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA;AAClE,EAAA,KAAA,MAAW,SAAS,SAAA,EAAW;AAC7B,IAAA,IAAI,KAAA,CAAM,WAAA,CAAY,GAAA,CAAI,KAAK,CAAA,EAAG;AAClC,IAAA,MAAM,IAAA,GAAO,cAAA,CAAe,SAAA,EAAW,KAAK,CAAA;AAC5C,IAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,iBAAA,CAAkB,IAAA,EAAMf,MAAK,CAAA,EAAG;AACnD,MAAAe,QAAAA,CAAQ,IAAI,KAAK,CAAA;AAAA,IACnB;AAAA,EACF;AAEA,EAAA,OAAO,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,IAAA,CAAKA,QAAO,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC,CAAC,CAAA;AACnE;AAQO,SAAS,sBAAA,CACd,OACA,SAAA,EACQ;AACR,EAAA,IAAI,KAAA,CAAM,SAAA,CAAU,IAAA,KAAS,CAAA,EAAG,OAAO,CAAA;AACvC,EAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA,CACtC,MAAA,CAAO,CAAC,KAAA,KAAU,CAAC,MAAM,WAAA,CAAY,GAAA,CAAI,KAAK,CAAC,CAAA,CAC/C,KAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA;AACvB,EAAA,KAAA,CAAM,UAAU,KAAA,EAAM;AACtB,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,CAAA;AAEhC,EAAA,MAAM,YAAY,kBAAA,CAAmB,WAAA,CAAY,IAAA,CAAK,MAAM,GAAG,SAAS,CAAA;AACxE,EAAA,MAAM,cAAwB,EAAC;AAC/B,EAAA,MAAM,iBAA2B,EAAC;AAClC,EAAA,MAAM,SAAiB,EAAC;AACxB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,IAAA,MAAM,IAAA,GAAO,cAAA,CAAe,SAAA,EAAW,SAAA,CAAU,CAAC,CAAE,CAAA;AACpD,IAAA,IAAI,SAAS,IAAA,EAAM;AACnB,IAAA,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,CAAC,CAAE,CAAA;AAC3B,IAAA,cAAA,CAAe,IAAA,CAAK,SAAA,CAAU,CAAC,CAAE,CAAA;AACjC,IAAA,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,EAClB;AACA,EAAA,IAAI,WAAA,CAAY,MAAA,KAAW,CAAA,EAAG,OAAO,CAAA;AAErC,EAAA,MAAM,KAAA,GAAQ,IAAI,QAAA,CAAS,WAAA,CAAY,MAAM,CAAA;AAC7C,EAAA,KAAA,MAAW,IAAA,IAAQ,MAAA,EAAQ,KAAA,CAAM,GAAA,CAAI,KAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,GAAG,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAC,CAAA;AACvE,EAAA,KAAA,CAAM,MAAA,EAAO;AACb,EAAA,KAAA,CAAM,SAAS,IAAA,CAAK;AAAA,IAClB,KAAA;AAAA,IACA,MAAA,EAAQ,WAAA,CAAY,IAAA,CAAK,WAAW,CAAA;AAAA,IACpC,SAAA,EAAW,WAAA,CAAY,IAAA,CAAK,cAAc;AAAA,GAC3C,CAAA;AACD,EAAA,OAAO,WAAA,CAAY,MAAA;AACrB;AAEA,SAAS,kBAAA,CAAmB,QAAqB,SAAA,EAAsC;AACrF,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,IAAI,WAAA,EAAY;AAChD,EAAA,IAAI,QAAA,GAAW,CAAA;AACf,EAAA,KAAA,MAAW,KAAA,IAAS,MAAA,EAAQ,IAAI,KAAA,GAAQ,UAAU,QAAA,GAAW,KAAA;AAC7D,EAAA,IAAI,SAAA,CAAU,MAAA,IAAA,CAAW,QAAA,GAAW,CAAA,IAAK,CAAA,EAAG;AAC1C,IAAA,OAAO,IAAI,YAAY,MAAM,CAAA;AAAA,EAC/B;AACA,EAAA,IAAI,SAAA,CAAU,MAAA,KAAW,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC1C,IAAA,OAAO,YAAY,IAAA,CAAK,MAAA,EAAQ,CAAC,MAAA,EAAQ,UAAU,KAAK,CAAA;AAAA,EAC1D;AACA,EAAA,MAAM,IAAI,WAAW,gFAAgF,CAAA;AACvG;AAEA,SAAS,sBAAA,CAAuB,OAAqB,KAAA,EAAqB;AACxE,EAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,IAAK,KAAA,GAAQ,CAAA,IAAA,CAAM,KAAA,GAAQ,CAAA,IAAK,CAAA,GAAI,KAAA,CAAM,MAAA,EAAQ;AAC3E,IAAA,MAAM,IAAI,WAAW,gCAAgC,CAAA;AAAA,EACvD;AACF;AAEA,SAAS,cAAA,CAAe,OAAqB,KAAA,EAA4B;AACvE,EAAA,sBAAA,CAAuB,OAAO,KAAK,CAAA;AACnC,EAAA,MAAM,SAAS,KAAA,GAAQ,CAAA;AACvB,EAAA,MAAM,IAAA,GAAa;AAAA,IACjB,MAAM,MAAM,CAAA;AAAA,IACZ,KAAA,CAAM,SAAS,CAAC,CAAA;AAAA,IAChB,KAAA,CAAM,SAAS,CAAC,CAAA;AAAA,IAChB,KAAA,CAAM,SAAS,CAAC;AAAA,GAClB;AACA,EAAA,IAAI;AACF,IAAA,eAAA,CAAgB,IAAA,EAAM,CAAA,UAAA,EAAa,KAAK,CAAA,CAAA,CAAG,CAAA;AAC3C,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;;;AC9HA,IAAI,2BAAA,GAA8B,CAAA;AAElC,SAAS,0BAAA,GAAqC;AAC5C,EAAA,OACE,UAAA,CAAW,QAAQ,UAAA,IAAa,IAChC,YAAY,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA,EAAI,2BAAA,EAA6B,CAAA,CAAA;AAE3D;AAmPO,IAAM,UAAA,GAAN,MAAM,WAAA,CAAW;AAAA,EACb,MAAA;AAAA,EACA,QAAA;AAAA,EACQ,OAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA,GAAW,IAAI,QAAA,EAAS;AAAA,EACxB,IAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA,GAAU,IAAI,aAAA,EAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAS5B,MAAA,GAAS,IAAI,iBAAA,EAAoC;AAAA;AAAA,EAEjD,QAAA,uBAAe,GAAA,EAAoC;AAAA;AAAA,EAEnD,eAAA,uBAAsB,GAAA,EAA+B;AAAA,EAC9D,YAAA,GAAe,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKf,gBAAA,GAAmB,CAAA;AAAA;AAAA,EAEnB,SAAA,GAAY,CAAA;AAAA;AAAA,EAEZ,cAAA,GAAiB,CAAA;AAAA;AAAA,EAER,GAAA;AAAA;AAAA,EAEA,MAAA;AAAA;AAAA,EAEA,eAAA;AAAA;AAAA,EAEA,OAAA;AAAA;AAAA,EAEA,wBAAA,uBAA+B,OAAA,EAAkC;AAAA;AAAA,EAE1E,WAAA,GAAc,KAAA;AAAA,EACd,WAAA,GAAmC,IAAA;AAAA,EAEnC,WAAA,CACN,MAAA,EACA,OAAA,EACA,OAAA,EACA,QAAA,EACA,cACA,UAAA,EACA,EAAA,EACA,KAAA,EACA,cAAA,EACA,MAAA,EACA;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,aAAa,CAAC,GAAG,OAAA,CAAQ,MAAA,EAAQ,CAAA,CAAE,IAAA;AAAA,MACtC,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,MAAA,CAAO,KAAA,GAAQ,EAAE,MAAA,CAAO;AAAA,KACtC;AACA,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,QAAA,CAAS,YAAY,CAAA;AACrC,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,UAAU,CAAA;AAC7C,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA;AACnC,IAAA,IAAA,CAAK,gBAAgB,GAAA,IAAO,IAAA;AAC5B,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA,IAAc,GAAA,KAAQ,IAAA,IAAQ,GAAA,KAAQ,MAAA;AACxD,IAAA,IAAA,CAAK,GAAA,GAAM,EAAA;AACX,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AACd,IAAA,IAAA,CAAK,eAAA,GAAkB,cAAA;AACvB,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AAAA,EACjB;AAAA,EAEA,OAAO,MAAA,CACL,MAAA,EACA,OAAA,EACY;AACZ,IAAA,IAAI,OAAA,CAAQ,YAAY,CAAA,EAAG;AACzB,MAAA,MAAM,IAAI,WAAW,sBAAsB,CAAA;AAAA,IAC7C;AAEA,IAAA,MAAM,WAAW,OAAA,CAAQ,QAAA;AAkBzB,IAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAA8B;AAClD,MAAA,MAAM,MAAM,CAAA,CAAE,eAAA,IAAmB,KAAK,GAAA,CAAI,IAAA,EAAM,KAAK,QAAQ,CAAA;AAC7D,MAAA,OAAO,GAAA;AAAA,IACT,CAAA;AACA,IAAA,MAAM,eAAA,GAAkB,CAAC,CAAA,KAA8B;AACrD,MAAA,IACE,EAAE,QAAA,KAAa,cAAA,CAAe,QAC9B,CAAA,CAAE,QAAA,KAAa,eAAe,MAAA,IAC9B,CAAA,CAAE,aAAa,cAAA,CAAe,IAAA,IAC9B,EAAE,QAAA,KAAa,cAAA,CAAe,cAC9B,CAAA,CAAE,QAAA,KAAa,eAAe,OAAA,EAC9B;AACA,QAAA,OAAO,QAAA,GAAW,CAAA;AAAA,MACpB;AACA,MAAA,IAAI,CAAA,CAAE,QAAA,KAAa,cAAA,CAAe,MAAA,EAAQ,OAAO,CAAA;AACjD,MAAA,OAAO,EAAE,SAAA,GAAY,QAAA;AAAA,IACvB,CAAA;AAGA,IAAA,MAAM,WAAA,GAAc,CAAC,CAAA,EAAmBC,MAAAA,KAA0B;AAChE,MAAA,IAAI,CAAA,CAAE,UAAUA,MAAAA,GAAQ,QAAQA,MAAAA,EAAO,WAAW,CAAA,GAAI,WAAA,CAAY,QAAQ,CAAA;AAC1E,MAAA,MAAM,OAAA,GAAU,gBAAgB,CAAC,CAAA;AACjC,MAAA,IAAI,UAAU,CAAA,EAAGA,SAAQ,OAAA,CAAQA,MAAAA,EAAO,WAAW,CAAA,GAAI,OAAA;AACvD,MAAA,IACE,EAAE,QAAA,KAAa,cAAA,CAAe,QAC9B,CAAA,CAAE,QAAA,KAAa,eAAe,MAAA,EAC9B;AACA,QAAAA,SAAQ,OAAA,CAAQA,MAAAA,EAAO,WAAW,CAAA,GAAI,aAAa,CAAC,CAAA;AAAA,MACtD;AACA,MAAA,IAAI,CAAA,CAAE,QAAA,KAAa,cAAA,CAAe,MAAA,IAAU,EAAE,MAAA,EAAQ;AACpD,QAAA,KAAA,MAAWlB,MAAK,CAAA,CAAE,MAAA,EAAQkB,MAAAA,GAAQ,WAAA,CAAYlB,IAAGkB,MAAK,CAAA;AAAA,MACxD;AAEA,MAAA,OAAOA,MAAAA;AAAA,IACT,CAAA;AAEA,IAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,IAAA,KAAA,MAAW,KAAK,MAAA,CAAO,OAAA,EAAS,KAAA,GAAQ,WAAA,CAAY,GAAG,KAAK,CAAA;AAC5D,IAAA,KAAA,GAAQ,OAAA,CAAQ,OAAO,WAAW,CAAA;AAElC,IAAA,MAAM,MAAA,GAAS,IAAA;AACf,IAAA,MAAM,OAAA,GAAU,aAAA,CAAc,MAAA,GAAS,KAAK,CAAA;AAC5C,IAAA,OAAA,CAAQ,QAAA,CAAS,QAAQ,WAAW,CAAA;AAEpC,IAAA,MAAM,OAAA,uBAAc,GAAA,EAA0B;AAE9C,IAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAAoC;AAC1D,MAAA,IAAI,QAAA,GAA8B,IAAA;AAClC,MAAA,IAAI,EAAE,QAAA,EAAU;AACd,QAAA,MAAM,MAAM,OAAA,CAAQ,QAAA,CAAS,WAAA,CAAY,QAAQ,GAAG,WAAW,CAAA;AAC/D,QAAA,QAAA,GAAW,IAAI,UAAA,CAAW,OAAA,CAAQ,QAAQ,GAAA,EAAK,WAAA,CAAY,QAAQ,CAAC,CAAA;AAAA,MACtE;AAEA,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI,IAAA,GAA0B,IAAA;AAC9B,MAAA,IAAI,UAAA,GAAgC,IAAA;AACpC,MAAA,IAAI,IAAA,GAA8B,IAAA;AAClC,MAAA,IAAI,KAAA,GAA4B,IAAA;AAChC,MAAA,IAAI,UAAA,GAAsC,IAAA;AAC1C,MAAA,IAAI,OAAA,GAAgC,IAAA;AACpC,MAAA,IAAI,YAAA,GAAsC,IAAA;AAC1C,MAAA,IAAI,kBAAA,GAAuD,IAAA;AAE3D,MAAA,IAAI,CAAA,CAAE,QAAA,KAAa,cAAA,CAAe,IAAA,EAAM;AACtC,QAAA,MAAM,WAAW,OAAA,CAAQ,QAAA,CAAS,eAAA,CAAgB,CAAC,GAAG,WAAW,CAAA;AACjE,QAAA,MAAA,GAAS,IAAI,UAAA,CAAW,OAAA,CAAQ,MAAA,EAAQ,QAAA,EAAU,WAAW,CAAC,CAAA;AAC9D,QAAA,MAAM,SAAA,GAAY,aAAa,CAAC,CAAA;AAChC,QAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,QAAA,CAAS,SAAA,EAAW,WAAW,CAAA;AACvD,QAAA,IAAA,GAAO,IAAI,WAAW,IAAI,UAAA,CAAW,QAAQ,MAAA,EAAQ,OAAA,EAAS,SAAS,CAAC,CAAA;AAAA,MAC1E,CAAA,MAAA,IAAW,CAAA,CAAE,QAAA,KAAa,cAAA,CAAe,MAAA,EAAQ;AAC/C,QAAA,MAAM,WAAW,OAAA,CAAQ,QAAA,CAAS,eAAA,CAAgB,CAAC,GAAG,WAAW,CAAA;AACjE,QAAA,MAAA,GAAS,IAAI,UAAA,CAAW,OAAA,CAAQ,MAAA,EAAQ,QAAA,EAAU,WAAW,CAAC,CAAA;AAC9D,QAAA,MAAM,SAAA,GAAY,aAAa,CAAC,CAAA;AAChC,QAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,QAAA,CAAS,SAAA,EAAW,WAAW,CAAA;AACvD,QAAA,IAAA,GAAO,IAAI,WAAW,IAAI,UAAA,CAAW,QAAQ,MAAA,EAAQ,OAAA,EAAS,SAAS,CAAC,CAAA;AAAA,MAC1E,CAAA,MAAA,IAAW,CAAA,CAAE,QAAA,KAAa,cAAA,CAAe,QAAA,EAAU;AACjD,QAAA,MAAM,UAAU,OAAA,CAAQ,QAAA,CAAS,eAAA,CAAgB,CAAC,GAAG,WAAW,CAAA;AAChE,QAAA,MAAA,GAAS,IAAI,WAAA,CAAY,OAAA,CAAQ,MAAA,EAAQ,SAAS,QAAQ,CAAA;AAC1D,QAAA,UAAA,GAAa,IAAI,UAAA,EAAW;AAAA,MAC9B,CAAA,MAAA,IAAW,CAAA,CAAE,QAAA,KAAa,cAAA,CAAe,IAAA,EAAM;AAC7C,QAAA,MAAM,WAAW,OAAA,CAAQ,QAAA,CAAS,eAAA,CAAgB,CAAC,GAAG,WAAW,CAAA;AACjE,QAAA,MAAA,GAAS,IAAI,UAAA,CAAW,OAAA,CAAQ,MAAA,EAAQ,QAAA,EAAU,WAAW,CAAC,CAAA;AAC9D,QAAA,IAAA,GAAO,IAAI,cAAA,CAAe,CAAA,CAAE,WAAA,EAAc,WAAW,CAAC,CAAA;AAAA,MACxD,CAAA,MAAA,IAAW,CAAA,CAAE,QAAA,KAAa,cAAA,CAAe,KAAA,EAAO;AAC9C,QAAA,MAAM,WAAW,OAAA,CAAQ,QAAA,CAAS,eAAA,CAAgB,CAAC,GAAG,WAAW,CAAA;AACjE,QAAA,MAAA,GAAS,IAAI,YAAA,CAAa,OAAA,CAAQ,MAAA,EAAQ,QAAA,EAAU,WAAW,CAAC,CAAA;AAChE,QAAA,KAAA,GAAQ,IAAI,WAAA,CAAY,QAAA,EAAU,MAAsB,CAAA;AAAA,MAC1D,CAAA,MAAA,IAAW,CAAA,CAAE,QAAA,KAAa,cAAA,CAAe,UAAA,EAAY;AACnD,QAAA,MAAM,WAAW,OAAA,CAAQ,QAAA,CAAS,eAAA,CAAgB,CAAC,GAAG,WAAW,CAAA;AACjE,QAAA,MAAA,GAAS,IAAI,UAAA,CAAW,OAAA,CAAQ,MAAA,EAAQ,QAAA,EAAU,WAAW,CAAC,CAAA;AAC9D,QAAA,UAAA,GAAa,IAAI,gBAAA,CAAiB,QAAA,EAAU,MAAoB,CAAA;AAAA,MAClE,CAAA,MAAA,IAAW,CAAA,CAAE,QAAA,KAAa,cAAA,CAAe,OAAA,EAAS;AAChD,QAAA,MAAM,WAAW,OAAA,CAAQ,QAAA,CAAS,eAAA,CAAgB,CAAC,GAAG,WAAW,CAAA;AACjE,QAAA,MAAA,GAAS,IAAI,UAAA,CAAW,OAAA,CAAQ,MAAA,EAAQ,QAAA,EAAU,WAAW,CAAC,CAAA;AAC9D,QAAA,OAAA,GAAU,IAAI,cAAc,QAAA,EAAU;AAAA,UACpC,MAAA,EAAQ,MAAA;AAAA,UACR,GAAI,EAAE,cAAA,KAAmB,MAAA,GAAY,EAAE,cAAA,EAAgB,CAAA,CAAE,cAAA,EAAe,GAAI;AAAC,SAC9E,CAAA;AAAA,MACH,CAAA,MAAA,IAAW,CAAA,CAAE,QAAA,KAAa,cAAA,CAAe,MAAA,EAAQ;AAE/C,QAAA,MAAA,GAAS,IAAI,WAAW,CAAC,CAAA;AACzB,QAAA,MAAM,YAA4B,EAAC;AACnC,QAAA,MAAM,MAAA,uBAAa,GAAA,EAA0B;AAC7C,QAAA,KAAA,MAAWlB,EAAAA,IAAK,CAAA,CAAE,MAAA,IAAU,EAAC,EAAG;AAC9B,UAAA,MAAM,EAAA,GAAK,eAAeA,EAAC,CAAA;AAC3B,UAAA,SAAA,CAAU,KAAK,EAAE,CAAA;AACjB,UAAA,MAAA,CAAO,GAAA,CAAIA,GAAE,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,IAAQ,EAAE,CAAA;AAAA,QACzC;AACA,QAAA,YAAA,GAAe,SAAA;AACf,QAAA,kBAAA,GAAqB,MAAA;AAAA,MACvB,CAAA,MAAO;AACL,QAAA,MAAM,SAAS,OAAA,CAAQ,QAAA,CAAS,eAAA,CAAgB,CAAC,GAAG,WAAW,CAAA;AAC/D,QAAA,MAAA,GAAS,gBAAgB,CAAA,CAAE,QAAA,EAAU,OAAA,CAAQ,MAAA,EAAQ,QAAQ,QAAQ,CAAA;AAAA,MACvE;AAEA,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,CAAA;AAAA,QACR,MAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAA,EAAS,CAAA;AAAA,QACT,IAAA;AAAA,QACA,UAAA;AAAA,QACA,IAAA;AAAA,QACA,KAAA;AAAA,QACA,UAAA;AAAA,QACA,OAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAEA,IAAA,KAAA,MAAW,CAAA,IAAK,OAAO,OAAA,EAAS;AAC9B,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,IAAA,EAAM,cAAA,CAAe,CAAC,CAAC,CAAA;AAAA,IACvC;AAEA,IAAA,MAAM,YAAA,GAAe,QAAQ,YAAA,IAAgB,IAAA;AAC7C,IAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,UAAA,IAAc,OAAA,CAAQ,IAAI,WAAW,CAAA;AAChE,IAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,KAAA;AACvC,IAAA,IAAI,SAAA,KAAc,OAAA,IAAW,CAAC,OAAA,CAAQ,gBAAA,EAAkB;AACtD,MAAA,MAAM,IAAI,eAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,MAAM,aAAA,GAAyC,EAAE,SAAA,EAAU;AAC3D,IAAA,IAAI,OAAA,CAAQ,qBAAqB,MAAA,EAAW;AAC1C,MAAA,aAAA,CAAc,mBAAmB,OAAA,CAAQ,gBAAA;AAAA,IAC3C;AACA,IAAA,IAAI,OAAA,CAAQ,iBAAiB,MAAA,EAAW;AACtC,MAAA,aAAA,CAAc,eAAe,OAAA,CAAQ,YAAA;AAAA,IACvC;AACA,IAAA,MAAM,EAAA,GACJ,QAAQ,EAAA,IAAM,CAAA,EAAG,OAAO,IAAI,CAAA,CAAA,EAAI,EAAE,WAAA,CAAW,UAAU,CAAA,CAAA;AACzD,IAAA,MAAM,KAAA,GAAqB,OAAA,CAAQ,KAAA,IAAS,EAAC;AAC7C,IAAA,MAAM,cAAA,GACJ,OAAA,CAAQ,cAAA,IAAkB,EAAE,YAAY,SAAA,EAAU;AACpD,IAAA,MAAM,OAAO,IAAI,WAAA;AAAA,MACf,MAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,MACA,EAAA;AAAA,MACA,KAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAA,CAAK,wBAAA,CAAyB,QAAQ,YAAY,CAAA;AAGlD,IAAA,cAAA,CAAe,MAAM,IAAA,CAAK,UAAA,EAAY,CAAA;AACtC,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,OAAe,UAAA,GAAa,CAAA;AAAA;AAAA,EAG5B,IAAI,IAAA,GAAe;AACjB,IAAA,IAAI,CAAC,KAAK,UAAA,IAAc,CAAC,KAAK,aAAA,EAAe,OAAO,KAAK,QAAA,CAAS,IAAA;AAElE,IAAA,IAAI,CAAA,GAAI,CAAA;AACR,IAAA,KAAA,MAAW,GAAG,GAAG,KAAK,IAAA,CAAK,QAAA,CAAS,SAAQ,EAAG;AAC7C,MAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,aAAA,EAAe,GAAG,CAAA,EAAG,CAAA,EAAA;AAAA,IAC/C;AACA,IAAA,OAAO,CAAA;AAAA,EACT;AAAA;AAAA,EAGA,IAAI,QAAA,GAAmB;AACrB,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA,EAEA,IAAI,aAAA,GAAwB;AAC1B,IAAA,OAAO,IAAA,CAAK,cAAA;AAAA,EACd;AAAA;AAAA,EAGA,IAAI,MAAA,GAA4C;AAC9C,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA;AAAA,EAGA,cAAc,IAAA,EAAsB;AAClC,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AAC/B,IAAA,IAAI,CAAC,CAAA,EAAG,MAAM,IAAI,eAAA,CAAgB,CAAA,gBAAA,EAAmB,IAAI,CAAA,CAAA,CAAG,CAAA;AAC5D,IAAA,OAAO,CAAA,CAAE,OAAA;AAAA,EACX;AAAA;AAAA,EAGA,gBAAA,GAAoD;AAClD,IAAA,OAAO,KAAK,OAAA,CAAQ,MAAA;AAAA,EACtB;AAAA;AAAA,EAGA,UAAU,QAAA,EAAsC;AAC9C,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,QAAQ,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,IAAI,eAAA,GAA0B;AAC5B,IAAA,OAAO,IAAA,CAAK,gBAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,gBAAA,CACE,UACA,OAAA,EACwB;AACxB,IAAA,MAAMmB,gBAAAA,GAAkB,IAAA,CAAK,yBAAA,CAA0B,OAAO,CAAA;AAC9D,IAAA,IAAIA,gBAAAA,EAAiB,wBAAA,CAAyBA,gBAAAA,EAAiB,IAAI,CAAA;AAEnE,IAAA,IAAI,MAAA,GAAS,IAAA;AACb,IAAA,MAAM,QAAA,uBAAe,GAAA,EAAY;AAEjC,IAAA,MAAM,sBAAsB,MAAY;AACtC,MAAA,KAAA,MAAW,CAAC,EAAA,EAAI,GAAG,KAAK,IAAA,CAAK,QAAA,CAAS,SAAQ,EAAG;AAC/C,QAAA,IACE,IAAA,CAAK,cACL,IAAA,CAAK,aAAA,IACL,KAAK,QAAA,CAAS,IAAA,CAAK,aAAA,EAAe,GAAG,CAAA,EACrC;AACA,UAAA;AAAA,QACF;AACA,QAAA,QAAA,CAAS,IAAI,EAAE,CAAA;AAAA,MACjB;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,YAAA,GAAe,CACnB,OAAA,EACA,KAAA,GAA8B,QAAA,KACrB;AACT,MAAA,IAAI;AACF,QAAA,QAAA,CAAS,OAAO,CAAA;AAAA,MAClB,SAAS,GAAA,EAAK;AAEZ,QAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,6BAAA,EAAgC,KAAK,CAAA,gBAAA,CAAA,EAAoB,GAAG,CAAA;AAAA,MAC5E;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,cAAA,GAAiB,CAAC,OAAA,KAAqD;AAC3E,MAAA,IAAI,CAAC,MAAA,EAAQ;AACb,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,gCAAA,CAAiC,OAAA,EAAS,QAAQ,CAAA;AACxE,MAAA,IAAI,aAAa,IAAA,EAAM;AACvB,MAAA,YAAA,CAAa,QAAQ,CAAA;AAAA,IACvB,CAAA;AAGA,IAAA,MAAM,OAAO,IAAA,CAAK,gBAAA,EAAA;AAClB,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,oBAAA,EAAsB;AAAA,MACrC,IAAA,EAAM,oBAAA;AAAA,MACN,UAAA,EAAY,IAAA;AAAA,MACZ,uBAAA,EAAyB,IAAA;AAAA,MACzB,iBAAiB,IAAA,CAAK;AAAA,KACvB,CAAA;AAED,IAAA,IAAI,SAAS,mBAAA,EAAqB;AAChC,MAAA,MAAM,OAAA,GAAU,KAAK,qBAAA,EAAsB;AAC3C,MAAA,KAAA,MAAW,MAAA,IAAU,OAAA,EAAS,QAAA,CAAS,GAAA,CAAI,OAAO,GAAG,CAAA;AACrD,MAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG,YAAA,CAAa,SAAS,SAAS,CAAA;AAAA,IACzD,CAAA,MAAA,IAAW,OAAA,EAAS,mBAAA,KAAwB,KAAA,EAAO;AACjD,MAAA,mBAAA,EAAoB;AAAA,IACtB;AAEA,IAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,CAAC,EAAA,KAAO;AACtD,MAAA,IAAI,CAAC,MAAA,EAAQ;AACb,MAAA,IAAI,EAAA,CAAG,EAAA,KAAO,UAAA,IAAc,EAAA,CAAG,OAAA,EAAS;AACtC,QAAA,cAAA,CAAe,GAAG,OAA4C,CAAA;AAC9D,QAAA;AAAA,MACF;AACA,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,qBAAA,CAAsB,EAAE,CAAA;AACzC,MAAA,IAAI,QAAQ,IAAA,EAAM;AAClB,MAAA,cAAA,CAAe,CAAC,GAAG,CAAC,CAAA;AAAA,IACtB,CAAC,CAAA;AAED,IAAA,MAAM,GAAA,GAA8B;AAAA,MAClC,MAAA,EAAQ,OAAA;AAAA,MACR,aAAa,MAAM;AACjB,QAAA,IAAI,CAAC,MAAA,EAAQ;AACb,QAAA,MAAA,GAAS,KAAA;AACT,QAAA,gBAAA,EAAiB;AACjB,QAAA,MAAM,QAAQ,IAAA,CAAK,gBAAA,EAAA;AACnB,QAAA,IAAA,CAAK,MAAA,CAAO,KAAK,oBAAA,EAAsB;AAAA,UACrC,IAAA,EAAM,oBAAA;AAAA,UACN,UAAA,EAAY,IAAA;AAAA,UACZ,uBAAA,EAAyB,KAAA;AAAA,UACzB,iBAAiB,IAAA,CAAK;AAAA,SACvB,CAAA;AAAA,MACH;AAAA,KACF;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,sBACE,QAAA,EACmC;AACnC,IAAA,MAAM,MAAyC,EAAC;AAChD,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,GAAG,KAAK,IAAA,CAAK,QAAA,CAAS,SAAQ,EAAG;AAC/C,MAAA,IACE,IAAA,CAAK,cACL,IAAA,CAAK,aAAA,IACL,KAAK,QAAA,CAAS,IAAA,CAAK,aAAA,EAAe,GAAG,CAAA,EACrC;AACA,QAAA;AAAA,MACF;AACA,MAAA,GAAA,CAAI,IAAA,CAAK;AAAA,QACP,GAAA,EAAK,EAAA;AAAA,QACL,KAAA,EAAO,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA;AAAA,QAC3B,IAAA,EAAM;AAAA,OACP,CAAA;AAAA,IACH;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUQ,sBACN,EAAA,EACwC;AACxC,IAAA,QAAQ,GAAG,EAAA;AAAI,MACb,KAAK,QAAA;AACH,QAAA,OAAO;AAAA,UACL,KAAK,EAAA,CAAG,KAAA;AAAA,UACR,KAAA,EAAQ,EAAA,CAAG,KAAA,IAAS,EAAC;AAAA,UACrB,IAAA,EAAM;AAAA,SACR;AAAA,MACF,KAAK,QAAA,EAAU;AACb,QAAA,MAAM,GAAA,GAAuC;AAAA,UAC3C,KAAK,EAAA,CAAG,KAAA;AAAA,UACR,KAAA,EAAQ,EAAA,CAAG,KAAA,IAAS,EAAC;AAAA,UACrB,IAAA,EAAM;AAAA,SACR;AACA,QAAA,IAAI,GAAG,aAAA,EAAe;AAGpB,UAAA,MAAM,SAAkC,EAAE,GAAI,EAAA,CAAG,KAAA,IAAS,EAAC,EAAG;AAC9D,UAAA,KAAA,MAAW,CAAC,GAAG,CAAC,CAAA,IAAK,OAAO,OAAA,CAAQ,EAAA,CAAG,aAAa,CAAA,EAAG;AACrD,YAAA,MAAA,CAAO,CAAC,CAAA,GAAI,CAAA;AAAA,UACd;AACA,UAAA,GAAA,CAAI,aAAA,GAAgB,MAAA;AAAA,QACtB;AACA,QAAA,OAAO,GAAA;AAAA,MACT;AAAA,MACA,KAAK,QAAA;AACH,QAAA,OAAO;AAAA,UACL,KAAK,EAAA,CAAG,KAAA;AAAA,UACR,KAAA,EAAQ,EAAA,CAAG,KAAA,IAAS,EAAC;AAAA,UACrB,IAAA,EAAM;AAAA,SACR;AAAA,MACF;AACE,QAAA,OAAO,IAAA;AAAA;AACX,EACF;AAAA,EAEQ,gCAAA,CACN,SACA,QAAA,EAC0C;AAC1C,IAAA,MAAM,MAAyC,EAAC;AAChD,IAAA,IAAI,eAAA,GAAkB,KAAA;AAEtB,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AAC7B,MAAA,IAAI,MAAA,CAAO,SAAS,QAAA,EAAU;AAC5B,QAAA,IAAI,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA,EAAG;AACvB,QAAA,QAAA,CAAS,IAAI,GAAG,CAAA;AAChB,QAAA,GAAA,CAAI,KAAK,MAAM,CAAA;AAAA,MACjB,CAAA,MAAA,IAAW,MAAA,CAAO,IAAA,KAAS,QAAA,EAAU;AACnC,QAAA,IAAI,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA,EAAG;AACrB,UAAA,GAAA,CAAI,KAAK,MAAM,CAAA;AAAA,QACjB,CAAA,MAAO;AACL,UAAA,QAAA,CAAS,IAAI,GAAG,CAAA;AAChB,UAAA,GAAA,CAAI,IAAA,CAAK,EAAE,GAAA,EAAK,MAAA,CAAO,GAAA,EAAK,OAAO,MAAA,CAAO,KAAA,EAAO,IAAA,EAAM,QAAA,EAAU,CAAA;AAAA,QACnE;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAI,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA,EAAG;AACrB,UAAA,QAAA,CAAS,OAAO,GAAG,CAAA;AACnB,UAAA,GAAA,CAAI,KAAK,MAAM,CAAA;AAAA,QACjB,CAAA,MAAO;AACL,UAAA,eAAA,GAAkB,IAAA;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,GAAA,CAAI,MAAA,GAAS,CAAA,EAAG,OAAO,GAAA;AAC3B,IAAA,OAAO,eAAA,GAAkB,EAAC,GAAI,IAAA;AAAA,EAChC;AAAA,EAEQ,0BACN,OAAA,EAC6B;AAC7B,IAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AACrB,IAAA,MAAM,QAAA,GAAW,OAAO,OAAA,CAAQ,KAAA,KAAU,UAAA;AAC1C,IAAA,MAAM,kBAAA,GAAqB,QAAQ,eAAA,KAAoB,MAAA;AACvD,IAAA,IAAI,YAAY,kBAAA,EAAoB;AAClC,MAAA,MAAM,IAAI,gBAAgB,iEAAiE,CAAA;AAAA,IAC7F;AACA,IAAA,IAAI,OAAA,CAAQ,eAAA,KAAoB,MAAA,EAAW,OAAO,OAAA,CAAQ,eAAA;AAC1D,IAAA,IAAI,CAAC,UAAU,OAAO,MAAA;AAEtB,IAAA,MAAM,MAAM,uBAAA,EAAiD;AAC7D,IAAA,OAAO,YAAA,CAAa,OAAA,CAAQ,KAAA,CAAO,GAAG,CAAC,CAAA;AAAA,EACzC;AAAA;AAAA,EAGA,EAAA,CACE,OACA,QAAA,EACY;AACZ,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,EAAA,CAAG,KAAA,EAAO,QAAQ,CAAA;AAAA,EACvC;AAAA;AAAA,EAGA,IAAA,CACE,OACA,QAAA,EACY;AACZ,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,KAAA,EAAO,QAAQ,CAAA;AAAA,EACzC;AAAA;AAAA,EAGA,GAAA,CACE,OACA,QAAA,EACM;AACN,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,KAAA,EAAO,QAAQ,CAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAA,CACE,OACA,OAAA,EAC8B;AAC9B,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,EAC3C;AAAA;AAAA,EAGA,WAAA,GAAiC;AAC/B,IAAA,OAAO,KAAK,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,IAAI,CAAA;AAAA,EACjD;AAAA;AAAA,EAGA,IAAI,aAAA,GAAyB;AAC3B,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,eAAA,GASG;AACD,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,CAAC,GAAA,KAAQ;AAClC,MAAA,MAAM,QAAA,GAAW,GAAA,CAAI,QAAA,GACjB,GAAA,CAAI,QAAA,CAAS,KAAA,CAAM,CAAA,EAAI,IAAA,CAAK,SAAA,GAAY,CAAA,KAAO,CAAC,CAAA,GAChD,IAAA;AACJ,MAAA,MAAM,OAAA,GAAU,mBAAA,CAAoB,GAAA,EAAK,IAAA,CAAK,SAAS,CAAA;AACvD,MAAA,MAAM,IAAA,GAAO,GAAA,CAAI,IAAA,GAAO,GAAA,CAAI,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA;AACpE,MAAA,MAAM,oBAAoB,GAAA,CAAI,UAAA,GAC1B,CAAC,GAAG,IAAI,UAAA,CAAW,OAAA,EAAS,CAAA,CAAE,IAAI,CAAC,GAAG,CAAC,CAAA,KAAM,CAAC,CAAA,GAC9C,IAAA;AACJ,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,IAAI,MAAA,CAAO,IAAA;AAAA,QACjB,IAAA,EAAM,IAAI,MAAA,CAAO,IAAA;AAAA,QACjB,QAAA,EAAU,IAAI,MAAA,CAAO,QAAA;AAAA,QACrB,QAAA,EAAU,IAAI,MAAA,CAAO,QAAA;AAAA,QACrB,QAAA;AAAA,QACA,aAAA,EAAe,OAAA;AAAA,QACf,IAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,mBAAA,GAA+C;AAC7C,IAAA,OAAO,IAAA,CAAK,WAAW,GAAA,CAAI,CAAC,MAAM,IAAA,CAAK,aAAA,CAAc,CAAC,CAAC,CAAA;AAAA,EACzD;AAAA,EAEQ,cAAc,GAAA,EAA6B;AACjD,IAAA,MAAM,EAAA,GAAK,IAAI,MAAA,CAAO,QAAA;AACtB,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,QAAA,GACjB,GAAA,CAAI,QAAA,CAAS,KAAA,CAAM,CAAA,EAAI,IAAA,CAAK,SAAA,GAAY,CAAA,KAAO,CAAC,CAAA,GAChD,IAAA;AACJ,IAAA,MAAM,OAAA,GAAU,mBAAA,CAAoB,GAAA,EAAK,IAAA,CAAK,SAAS,CAAA;AACvD,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,IAAA,GAAO,GAAA,CAAI,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA;AACpE,IAAA,MAAM,oBAAoB,GAAA,CAAI,UAAA,GAC1B,CAAC,GAAG,IAAI,UAAA,CAAW,OAAA,EAAS,CAAA,CAAE,IAAI,CAAC,GAAG,CAAC,CAAA,KAAM,CAAC,CAAA,GAC9C,IAAA;AAEJ,IAAA,IAAI,EAAA,KAAO,eAAe,IAAA,EAAM;AAC9B,MAAA,MAAM,YAAY,GAAA,CAAI,IAAA;AACtB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,IAAI,MAAA,CAAO,IAAA;AAAA,QACjB,IAAA,EAAM,IAAI,MAAA,CAAO,IAAA;AAAA,QACjB,QAAA,EAAU,EAAA;AAAA,QACV,QAAA,EAAU,IAAI,MAAA,CAAO,QAAA;AAAA,QACrB,QAAA;AAAA,QACA,aAAA,EAAe,OAAA;AAAA,QACf,IAAA;AAAA,QACA,iBAAA;AAAA,QACA,mBAAmB,SAAA,CAAU,MAAA;AAAA,QAC7B,SAAA,EAAW,sBAAA,CAAuB,GAAA,CAAI,MAAA,CAAO,MAAM,SAAS;AAAA,OAC9D;AAAA,IACF;AAEA,IAAA,IAAI,EAAA,KAAO,eAAe,MAAA,EAAQ;AAChC,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,IAAI,MAAA,CAAO,IAAA;AAAA,QACjB,IAAA,EAAM,IAAI,MAAA,CAAO,IAAA;AAAA,QACjB,QAAA,EAAU,EAAA;AAAA,QACV,QAAA,EAAU,IAAI,MAAA,CAAO,QAAA;AAAA,QACrB,QAAA;AAAA,QACA,aAAA,EAAe,OAAA;AAAA;AAAA,QACf,IAAA,EAAM,IAAA;AAAA,QACN,iBAAA,EAAmB,IAAA;AAAA,QACnB,MAAA,EAAA,CAAS,GAAA,CAAI,YAAA,IAAgB,EAAC,EAAG,GAAA,CAAI,CAACnB,EAAAA,KAAM,IAAA,CAAK,aAAA,CAAcA,EAAC,CAAC;AAAA,OACnE;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,IAAI,MAAA,CAAO,IAAA;AAAA,MACjB,IAAA,EAAM,IAAI,MAAA,CAAO,IAAA;AAAA,MACjB,QAAA,EAAU,EAAA;AAAA,MACV,QAAA,EAAU,IAAI,MAAA,CAAO,QAAA;AAAA,MACrB,QAAA;AAAA,MACA,aAAA,EAAe,OAAA;AAAA,MACf,IAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA;AAAA,EAGA,iCAAiC,OAAA,EAAuB;AACtD,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,OAAO,CAAA,IAAK,OAAA,GAAU,KAAK,cAAA,EAAgB;AAC/D,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,CAAA,gCAAA,EAAmC,OAAO,CAAA,aAAA,EAAgB,IAAA,CAAK,cAAc,CAAA;AAAA,OAC/E;AAAA,IACF;AACA,IAAA,IAAA,CAAK,cAAA,GAAiB,OAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,oBAAA,GAA8C;AAC5C,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,MACnC,IAAA,EAAM,IAAI,MAAA,CAAO,IAAA;AAAA,MACjB,QAAA,EAAU,IAAI,MAAA,CAAO,QAAA;AAAA,MACrB,QAAA,EAAU,IAAI,MAAA,CAAO,QAAA;AAAA,MACrB,UAAU,GAAA,CAAI,QAAA;AAAA,MACd,QAAQ,GAAA,CAAI,MAAA;AAAA,MACZ,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,YAAY,GAAA,CAAI;AAAA,KAClB,CAAE,CAAA;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,CAAC,sBACC,OAAA,EAC0B;AAC1B,IAAA,MAAM,OAAA,GAAU,SAAS,kBAAA,KAAuB,IAAA;AAChD,IAAA,MAAM,MAAM,IAAA,CAAK,aAAA;AACjB,IAAA,MAAM,OAAO,IAAA,CAAK,UAAA;AAClB,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,GAAA,IAAO,OAAA,EAAS;AAC5B,MAAA,KAAA,MAAW,GAAG,GAAG,CAAA,IAAK,KAAK,QAAA,CAAS,OAAA,IAAW,MAAM,GAAA;AACrD,MAAA;AAAA,IACF;AACA,IAAA,MAAM,WAAW,GAAA,CAAI,QAAA;AACrB,IAAA,MAAM,SAAS,GAAA,CAAI,MAAA;AACnB,IAAA,KAAA,MAAW,GAAG,GAAG,KAAK,IAAA,CAAK,QAAA,CAAS,SAAQ,EAAG;AAE7C,MAAA,IAAI,QAAA,IAAY,CAAC,WAAA,CAAY,QAAA,EAAU,GAAG,CAAA,EAAG;AAE3C,QAAA,MAAM,GAAA;AACN,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA,IAAK,CAAA,MAAO,GAAG,MAAM,GAAA;AAAA,IACtC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,CAAC,6BAA6B,IAAA,EAAqD;AACjF,IAAA,MAAM,MAAM,IAAA,CAAK,aAAA;AACjB,IAAA,MAAM,OAAO,IAAA,CAAK,UAAA;AAIlB,IAAA,IAAI,IAAA,CAAK,IAAA,GAAO,CAAA,GAAI,IAAA,CAAK,SAAS,IAAA,EAAM;AACtC,MAAA,MAAM,WAAqB,EAAC;AAC5B,MAAA,KAAA,MAAW,MAAM,IAAA,EAAM;AACrB,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,EAAE,CAAA;AACnC,QAAA,IAAI,QAAQ,MAAA,EAAW;AACvB,QAAA,IAAI,QAAQ,GAAA,IAAO,IAAA,CAAK,QAAA,CAAS,GAAA,EAAK,GAAG,CAAA,EAAG;AAC5C,QAAA,QAAA,CAAS,KAAK,GAAG,CAAA;AAAA,MACnB;AACA,MAAA,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,CAAC,CAAA;AAC7B,MAAA,KAAA,MAAW,GAAA,IAAO,UAAU,MAAM,GAAA;AAClC,MAAA;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,GAAG,KAAK,IAAA,CAAK,QAAA,CAAS,SAAQ,EAAG;AAC/C,MAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG;AACnB,MAAA,IAAI,QAAQ,GAAA,IAAO,IAAA,CAAK,QAAA,CAAS,GAAA,EAAK,GAAG,CAAA,EAAG;AAC5C,MAAA,MAAM,GAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA,EAGA,2BAAA,CAA4B,QAAgBE,MAAAA,EAAsC;AAChF,IAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,MAAM,CAAA;AAC3C,IAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA;AACnC,IAAA,MAAM,SAAA,GAAY,GAAA,GAAM,IAAA,CAAK,gBAAA,CAAiB,GAAG,CAAA,GAAI,IAAA;AACrD,IAAA,IAAI,SAAA,KAAc,MAAM,OAAO,MAAA;AAC/B,IAAA,sBAAA,CAAuB,OAAO,SAAS,CAAA;AACvC,IAAA,IAAI,KAAA,CAAM,QAAA,CAAS,MAAA,IAAU,EAAA,EAAI;AAC/B,MAAA,KAAA,GAAQ,IAAA,CAAK,yBAAA,CAA0B,MAAA,EAAQ,KAAA,EAAO,SAAS,CAAA;AAAA,IACjE;AACA,IAAA,OAAO,kBAAA,CAAmB,KAAA,EAAO,SAAA,EAAWA,MAAK,CAAA;AAAA,EACnD;AAAA;AAAA,EAGA,0BAA0B,GAAA,EAAiC;AACzD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,GAAG,CAAA;AACpC,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,MAAA;AAC9B,IAAA,IAAI,IAAA,CAAK,UAAA,IAAc,IAAA,CAAK,aAAA,IAAiB,IAAA,CAAK,SAAS,IAAA,CAAK,aAAA,EAAe,GAAG,CAAA,EAAG,OAAO,MAAA;AAC5F,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA,EAGA,4BAAA,CACE,MAAA,EACA,GAAA,EACAA,MAAAA,EACA,IAAA,EACS;AACT,IAAA,eAAA,CAAgBA,QAAO,OAAO,CAAA;AAC9B,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA;AACnC,IAAA,MAAM,KAAA,GAAQ,GAAA,GAAM,IAAA,CAAK,gBAAA,CAAiB,GAAG,CAAA,GAAI,IAAA;AACjD,IAAA,IAAI,KAAA,KAAU,MAAM,OAAO,KAAA;AAC3B,IAAA,MAAM,SAAS,GAAA,GAAM,CAAA;AACrB,IAAA,MAAM,IAAA,GAAO,MAAM,MAAM,CAAA;AACzB,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AAC7B,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AAC7B,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AAC7B,IAAA,IAAI,CAAC,CAAC,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,CAAE,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAA,EAAG,OAAO,KAAA;AAC7D,IAAA,IAAI,SAAS,QAAA,EAAU;AACrB,MAAA,OAAO,IAAA,IAASA,MAAAA,CAAM,CAAC,CAAA,IAAK,QAASA,MAAAA,CAAM,CAAC,CAAA,IAAK,IAAA,IAASA,MAAAA,CAAM,CAAC,CAAA,IAAK,IAAA,IAASA,OAAM,CAAC,CAAA;AAAA,IACxF;AACA,IAAA,OAAO,IAAA,IAASA,MAAAA,CAAM,CAAC,CAAA,IAAK,QAASA,MAAAA,CAAM,CAAC,CAAA,IAAK,IAAA,IAASA,MAAAA,CAAM,CAAC,CAAA,IAAK,IAAA,IAASA,OAAM,CAAC,CAAA;AAAA,EACxF;AAAA;AAAA,EAGA,qBAAA,CAAsB,MAAA,EAAgB,GAAA,EAAa,KAAA,EAAc,MAAA,EAAyB;AACxF,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA;AACnC,IAAA,IAAI,CAAC,GAAA,EAAK,KAAA,IAAU,GAAA,CAAI,QAAA,IAAY,CAAC,WAAA,CAAY,GAAA,CAAI,QAAA,EAAU,GAAG,CAAA,EAAI,OAAO,KAAA;AAC7E,IAAA,MAAM,SAAS,GAAA,GAAM,CAAA;AACrB,IAAA,OAAO,yBAAA;AAAA,MACL,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA;AAAA,MACvB,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AAAA,MAC3B,MAAM,CAAC,CAAA;AAAA,MACP,MAAM,CAAC;AAAA,KACT,IAAK,MAAA;AAAA,EACP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,iBAAA,CAAkB,SAAiB,GAAA,EAA+B;AAChE,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA;AACpC,IAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,eAAA,CAAgB,CAAA,gBAAA,EAAmB,OAAO,CAAA,CAAA,CAAG,CAAA;AACjE,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,GAAA,EAAK,GAAG,CAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,mBAAA,GAQG;AACD,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,CAAC,GAAA,KAAQ;AAClC,MAAA,IAAI,SAAA,GAAY,CAAA;AAChB,MAAA,IAAI,IAAI,QAAA,EAAU;AAChB,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,WAAW,CAAA,EAAA,EAAK;AACvC,UAAA,IAAI,CAAC,WAAA,CAAY,GAAA,CAAI,QAAA,EAAU,CAAC,CAAA,EAAG,SAAA,EAAA;AAAA,QACrC;AAAA,MACF;AACA,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,IAAI,MAAA,CAAO,IAAA;AAAA,QACjB,IAAA,EAAM,IAAI,MAAA,CAAO,IAAA;AAAA,QACjB,QAAA,EAAU,IAAI,MAAA,CAAO,QAAA;AAAA,QACrB,SAAS,GAAA,CAAI,OAAA;AAAA,QACb,SAAA;AAAA,QACA,IAAA,EAAM,GAAA,CAAI,IAAA,GACN,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,IAAA,EAAM,QAAA,EAAU,GAAA,CAAI,IAAA,CAAK,QAAA,EAAS,GACnD,IAAA;AAAA,QACJ,mBAAmB,GAAA,CAAI,UAAA,GACnB,CAAC,GAAG,IAAI,UAAA,CAAW,OAAA,EAAS,CAAA,CAAE,IAAI,CAAC,GAAG,CAAC,CAAA,KAAM,CAAC,CAAA,GAC9C;AAAA,OACN;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAMA,MAAA,CAAO,GAAA,EAAe,MAAA,GAAuB,EAAC,EAA0B;AACtE,IAAA,OAAO,IAAA,CAAK,uBAAA,CAAwB,QAAA,EAAU,MAAA,EAAQ,MAAM;AAC1D,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,GAAG,CAAA;AAClC,MAAA,OAAO,IAAA,CAAK,qBAAA;AAAA,QACV,QAAA;AAAA,QACA,OAAA,CAAQ,GAAA;AAAA,QACR,EAAC;AAAA,QACD,OAAA,CAAQ,KAAA;AAAA,QACR,OAAA,CAAQ,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EASA,MAAA,CACE,EAAA,EACA,uBAAA,EAIA,aAAA,EACuB;AACvB,IAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAM,GAAI,IAAA,CAAK,kBAAA;AAAA,MAC7B,EAAA;AAAA,MACA,uBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,OAAO,IAAA,CAAK,uBAAA,CAAwB,QAAA,EAAU,MAAA,EAAQ,MAAM;AAC1D,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,EAAA,EAAI,KAAK,CAAA;AACxC,MAAA,OAAO,IAAA,CAAK,qBAAA;AAAA,QACV,QAAA;AAAA,QACA,EAAA;AAAA,QACA,OAAA,CAAQ,QAAA;AAAA,QACR,OAAA,CAAQ,QAAA;AAAA,QACR,OAAA,CAAQ,OAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAA,CAAO,EAAA,EAAY,MAAA,GAA0B,EAAC,EAA0B;AACtE,IAAA,OAAO,IAAA,CAAK,uBAAA,CAAwB,QAAA,EAAU,MAAA,EAAQ,MAAM;AAC1D,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,EAAE,CAAA;AACjC,MAAA,OAAO,IAAA,CAAK,qBAAA;AAAA,QACV,QAAA;AAAA,QACA,EAAA;AAAA,QACA,OAAA,CAAQ,QAAA;AAAA,QACR,OAAA,CAAQ,QAAA;AAAA,QACR,OAAA,CAAQ,OAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEQ,uBAAA,CACN,IAAA,EACA,MAAA,EACA,KAAA,EACuB;AACvB,IAAA,MAAM,SAAS,oBAAA,EAAqB;AACpC,IAAA,MAAM,EAAA,GACJ,UACA,iBAAA,CAA4B;AAAA,MAC1B,UAAA,EAAY,OAAO,EAAE,WAAA,EAAY,KAAM;AACrC,QAAA,MAAM,IAAA,CAAK,6BAAA;AAAA,UACT,IAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AAAA,KACD,CAAA;AAEH,IAAA,IAAA,CAAK,4BAA4B,EAAE,CAAA;AAEnC,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI;AACF,MAAA,QAAA,GAAW,KAAA,EAAM;AAAA,IACnB,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,aAAA,GAAgB,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AAC9E,QAAA,EAAA,CAAG,QAAQ,EAAE,OAAA,EAAS,aAAA,CAAc,OAAA,EAAS,OAAO,aAAA,EAAc;AAClE,QAAA,KAAK,EAAA,CAAG,WAAA,CAAY,OAAA,CAAQ,KAAA,CAAM,MAAM,MAAS,CAAA;AACjD,QAAA,EAAA,CAAG,QAAA,EAAS;AAAA,MACd;AACA,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAA,EAAA,CAAG,cAAA,CAAe,CAAC,QAAQ,CAAC,CAAA;AAC5B,IAAA,IAAI,CAAC,MAAA,IAAU,IAAA,KAAS,QAAA,IAAY,IAAA,CAAK,4BAA2B,EAAG;AACrE,MAAA,IAAA,CAAK,+BAAA,CAAgC,CAAC,QAAQ,CAAC,CAAA;AAAA,IACjD;AACA,IAAA,IAAI,CAAC,QAAQ,KAAK,EAAA,CAAG,QAAO,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AACnD,IAAA,OAAO,EAAA;AAAA,EACT;AAAA,EAEQ,4BAA4B,EAAA,EAA4B;AAC9D,IAAA,IAAI,IAAA,CAAK,wBAAA,CAAyB,GAAA,CAAI,EAAE,CAAA,EAAG;AAC3C,IAAA,MAAM,IAAA,GAAO,KAAK,gBAAA,EAAiB;AACnC,IAAA,IAAA,CAAK,wBAAA,CAAyB,GAAA,CAAI,EAAA,EAAI,IAAI,CAAA;AAC1C,IAAA,EAAA,CAAG,mBAAmB,MAAM;AAC1B,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,wBAAA,CAAyB,GAAA,CAAI,EAAE,CAAA;AACzD,MAAA,IAAI,iBAAiB,MAAA,EAAW;AAChC,MAAA,IAAA,CAAK,wBAAA,CAAyB,OAAO,EAAE,CAAA;AACvC,MAAA,IAAA,CAAK,SAAS,YAAY,CAAA;AAAA,IAC5B,CAAC,CAAA;AAAA,EACH;AAAA,EAEQ,0BAAA,GAAsC;AAC5C,IAAA,OAAO,IAAA,CAAK,OAAO,kCAAA,KAAuC,IAAA;AAAA,EAC5D;AAAA,EAEA,MAAc,6BAAA,CACZ,IAAA,EACA,WAAA,EACe;AACf,IAAA,MAAM,QAAA,GAAW,sBAAsB,IAAI,CAAA;AAC3C,IAAA,MAAM,MAAA,GAAS,EAAE,WAAA,EAAa,UAAA,EAAY,IAAA,EAAK;AAC/C,IAAA,IAAI,SAAS,QAAA,EAAU;AACrB,MAAA,MAAM,QAAA,EAAU,WAAW,MAAM,CAAA;AAAA,IACnC,CAAA,MAAA,IAAW,SAAS,QAAA,EAAU;AAC5B,MAAA,MAAM,QAAA,EAAU,WAAW,MAAM,CAAA;AAAA,IACnC,CAAA,MAAO;AACL,MAAA,MAAM,QAAA,EAAU,WAAW,MAAM,CAAA;AAAA,IACnC;AAAA,EACF;AAAA,EAEQ,sBACN,IAAA,EACA,GAAA,EACA,QAAA,EACA,QAAA,EACA,SACA,MAAA,EAC2B;AAC3B,IAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,IAAA,OAAO;AAAA,MACL,YAAY,0BAAA,EAA2B;AAAA,MACvC,QAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA,EAAW,CAAA,KAAA,EAAQ,IAAA,CAAK,EAAE,IAAI,GAAG,CAAA,CAAA;AAAA,MACjC,GAAA;AAAA,MACA,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,cAAc,EAAC;AAAA,MACf,UAAA,EAAY,OAAO,UAAA,IAAc,IAAA;AAAA,MACjC,IAAA;AAAA,MACA,SAAA,EAAW,GAAA;AAAA,MACX,SAAA,EAAW,GAAA;AAAA,MACX,UAAA,EAAY;AAAA,KACd;AAAA,EACF;AAAA,EAEQ,kBAAA,CACN,EAAA,EACA,uBAAA,EAIA,aAAA,EACuD;AACvD,IAAA,IAAI,OAAO,4BAA4B,UAAA,EAAY;AACjD,MAAA,OAAO;AAAA,QACL,QAAQ,EAAC;AAAA,QACT,KAAA,EAAO,IAAA,CAAK,iBAAA,CAAkB,EAAA,EAAI,uBAAuB;AAAA,OAC3D;AAAA,IACF;AAEA,IAAA,IAAI,kBAAkB,MAAA,EAAW;AAC/B,MAAA,MAAM,OAAA,GAAU,aAAA;AAChB,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,uBAAA;AAAA,QACR,KAAA,EACE,OAAO,OAAA,KAAY,UAAA,GACf,KAAK,iBAAA,CAAkB,EAAA,EAAI,OAAO,CAAA,GAClC;AAAA,OACR;AAAA,IACF;AAEA,IAAA,OAAO,EAAE,MAAA,EAAQ,EAAC,EAAG,OAAO,uBAAA,EAA6C;AAAA,EAC3E;AAAA,EAEQ,iBAAA,CACN,IACA,QAAA,EACmB;AACnB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA;AAC3B,IAAA,IAAI,CAAC,OAAA,EAAS,IAAA,CAAK,QAAA,CAAS,QAAQ,EAAE,CAAA;AACtC,IAAA,MAAM,MAAA,GAAS,WAAW,IAAA,CAAK,WAAA,CAAY,KAAK,QAAA,CAAS,OAAA,CAAQ,EAAE,CAAC,CAAA;AACpE,IAAA,MAAM,KAAA,GAAQ,EAAE,GAAG,MAAA,EAAO;AAC1B,IAAA,QAAA,CAAS,KAAK,CAAA;AACd,IAAA,MAAM,QAA2B,EAAC;AAClC,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AACjD,MAAA,IAAI,CAAC,MAAA,CAAO,EAAA,CAAG,OAAO,MAAA,CAAO,IAAI,CAAC,CAAA,EAAG;AACnC,QAAA,KAAA,CAAM,IAAI,CAAA,GAAI,KAAA;AAAA,MAChB;AAAA,IACF;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,UAAU,GAAA,EAAiD;AACjE,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,IAAA,CAAK,OAAO,UAAU,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,UAAU,CAAA;AAChF,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,EAAE,MAAM,MAAA,EAAW;AAC1C,MAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,sBAAA,EAAyB,EAAE,CAAA,CAAE,CAAA;AAAA,IACzD;AACA,IAAA,IAAI,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,QAAA,EAAU;AACnC,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,eAAe,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,iBAAA,EAAoB,KAAK,QAAQ,CAAA;AAAA,OAClE;AAAA,IACF;AAEA,IAAA,MAAM,SAAS,IAAA,CAAK,SAAA,EAAA;AACpB,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,IAAA,KAAA,MAAW,GAAA,IAAO,KAAK,UAAA,EAAY;AACjC,MAAA,MAAMkB,IAAAA,GAAM,GAAA,CAAI,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA;AAC/B,MAAA,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,MAAA,EAAQA,IAAAA,IAAO,IAAI,CAAA;AACvC,MAAA,GAAA,CAAI,OAAA,GAAW,GAAA,CAAI,OAAA,GAAU,CAAA,KAAO,CAAA;AACpC,MAAA,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA;AAAA,IAC7B;AACA,IAAA,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,EAAA,EAAI,MAAM,CAAA;AAC/B,IAAA,IAAA,CAAK,oBAAoB,MAAM,CAAA;AAC/B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,MAAM,CAAA;AACrC,IAAA,IAAA,CAAK,YAAA,CAAa,IAAI,KAAK,CAAA;AAC3B,IAAA,IAAA,CAAK,KAAK,IAAA,CAAK,QAAA,EAAU,EAAA,EAAI,MAAA,EAAQ,EAAE,CAAA;AACvC,IAAA,IAAA,CAAK,cAAA,EAAA;AACL,IAAA,IAAA,CAAK,QAAQ,IAAA,CAAK;AAAA,MAChB,EAAA,EAAI,QAAA;AAAA,MACJ,KAAA,EAAO,EAAA;AAAA,MACP,OAAA,EAAS,OAAA;AAAA,MACT,eAAe,IAAA,CAAK,cAAA;AAAA,MACpB;AAAA,KACD,CAAA;AACD,IAAA,OAAO,EAAE,GAAA,EAAK,EAAA,EAAI,KAAA,EAAM;AAAA,EAC1B;AAAA,EAEQ,SAAA,CACN,IACA,KAAA,EACwE;AACxE,IAAA,KAAA,MAAW,IAAA,IAAQ,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,EAAG;AACrC,MAAA,IAAI,IAAA,KAAS,IAAA,CAAK,MAAA,CAAO,UAAA,EAAY;AACnC,QAAA,MAAM,IAAI,gBAAgB,CAAA,yBAAA,CAA2B,CAAA;AAAA,MACvD;AACA,MAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,EAAG;AAC3B,QAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,gBAAA,EAAmB,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,MACtD;AAAA,IACF;AAEA,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,EAAE,CAAA;AACpC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA;AACnC,IAAA,MAAM,OAAgC,EAAC;AACvC,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AACjD,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AACjC,MAAA,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA,CAAK,QAAA,CAAS,KAAK,GAAG,CAAA;AACnC,MAAA,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,GAAA,EAAK,KAAA,IAAS,IAAI,CAAA;AACtC,MAAA,GAAA,CAAI,OAAA,GAAW,GAAA,CAAI,OAAA,GAAU,CAAA,KAAO,CAAA;AACpC,MAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAAA,IAClB;AACA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA;AAClC,IAAA,MAAM,UAA6B,EAAC;AACpC,IAAA,KAAA,MAAW,QAAQ,OAAA,EAAS;AAC1B,MAAA,OAAA,CAAQ,IAAI,CAAA,GAAI,KAAA,CAAM,IAAI,CAAA;AAAA,IAC5B;AACA,IAAA,IAAA,CAAK,mBAAA,CAAoB,KAAK,OAAO,CAAA;AACrC,IAAA,IAAA,CAAK,aAAA,CAAc,EAAA,EAAI,MAAA,EAAQ,KAAK,CAAA;AACpC,IAAA,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,QAAA,EAAU,EAAA,EAAI,KAAK,IAAI,CAAA;AACtC,IAAA,IAAA,CAAK,cAAA,EAAA;AACL,IAAA,IAAA,CAAK,QAAQ,IAAA,CAAK;AAAA,MAChB,EAAA,EAAI,QAAA;AAAA,MACJ,KAAA,EAAO,EAAA;AAAA,MACP,OAAA,EAAS,OAAA;AAAA,MACT,eAAe,IAAA,CAAK,cAAA;AAAA,MACpB,KAAA,EAAO,KAAA;AAAA,MACP,aAAA,EAAe;AAAA,KAChB,CAAA;AACD,IAAA,OAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,QAAA,EAAU,OAAO,OAAA,EAAQ;AAAA,EACtD;AAAA,EAEQ,UACN,EAAA,EAC+D;AAC/D,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,EAAE,CAAA;AACpC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA;AACnC,IAAA,IAAA,CAAK,sBAAsB,GAAG,CAAA;AAC9B,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAIhC,IAAA,IAAI,YAAA;AACJ,IAAA,IAAI,WAAA;AACJ,IAAA,IAAI,IAAA,CAAK,UAAA,IAAc,IAAA,CAAK,aAAA,EAAe;AACzC,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,eAAe,GAAG,CAAA;AAClD,MAAA,IAAA,CAAK,iBAAA,CAAkB,IAAI,MAAM,CAAA;AACjC,MAAA,WAAA,GAAc,EAAE,WAAW,IAAA,EAAK;AAChC,MAAA,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,aAAA,EAAe,GAAA,EAAK,IAAI,CAAA;AAC5C,MAAA,IAAA,CAAK,aAAA,CAAc,OAAA,GAAW,IAAA,CAAK,aAAA,CAAc,UAAU,CAAA,KAAO,CAAA;AAClE,MAAA,IAAA,CAAK,IAAA,CAAK,KAAK,QAAA,EAAU,EAAA,EAAI,KAAK,EAAE,SAAA,EAAW,MAAM,CAAA;AACrD,MAAA,OAAA,CAAQ,IAAI,WAAW,CAAA;AACvB,MAAA,YAAA,GAAe,IAAA,CAAK,YAAY,GAAG,CAAA;AAAA,IACrC,CAAA,MAAO;AAEL,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA;AACjC,MAAA,IAAA,CAAK,iBAAA,CAAkB,IAAI,IAAI,CAAA;AAC/B,MAAA,IAAA,CAAK,QAAA,CAAS,OAAO,EAAE,CAAA;AAGvB,MAAA,IAAA,CAAK,KAAK,IAAA,CAAK,QAAA,EAAU,IAAI,GAAA,EAAK,IAAI,IAAI,CAAA;AAC1C,MAAA,YAAA,GAAe,IAAA;AAAA,IACjB;AACA,IAAA,IAAA,CAAK,cAAA,EAAA;AACL,IAAA,IAAA,CAAK,QAAQ,IAAA,CAAK;AAAA,MAChB,EAAA,EAAI,QAAA;AAAA,MACJ,KAAA,EAAO,EAAA;AAAA,MACP,OAAA,EAAS,IAAA,CAAK,UAAA,GAAa,OAAA,GAAU,KAAA;AAAA,MACrC,eAAe,IAAA,CAAK,cAAA;AAAA,MACpB,KAAA,EAAO,YAAA;AAAA,MACP,GAAI,WAAA,KAAgB,MAAA,GAAY,EAAE,aAAA,EAAe,WAAA,KAAgB;AAAC,KACnE,CAAA;AACD,IAAA,OAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,QAAA,EAAU,MAAA,EAAQ,SAAS,MAAA,EAAO;AAAA,EAC/D;AAAA,EAEA,IAAI,EAAA,EAAkC;AACpC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,EAAE,CAAA;AACnC,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,MAAA;AAC9B,IAAA,IAAI,IAAA,CAAK,cAAc,IAAA,CAAK,aAAA,IAAiB,KAAK,QAAA,CAAS,IAAA,CAAK,aAAA,EAAe,GAAG,CAAA,EAAG;AACnF,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA,CAAK,YAAY,GAAG,CAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,CAAC,KAAK,OAAA,EAAwE;AAC5E,IAAA,MAAM,OAAA,GAAU,SAAS,kBAAA,KAAuB,IAAA;AAChD,IAAA,KAAA,MAAW,GAAG,GAAG,KAAK,IAAA,CAAK,QAAA,CAAS,SAAQ,EAAG;AAC7C,MAAA,IACE,CAAC,OAAA,IACD,IAAA,CAAK,UAAA,IACL,IAAA,CAAK,aAAA,IACL,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,aAAA,EAAe,GAAG,CAAA,EACrC;AACA,QAAA;AAAA,MACF;AACA,MAAA,MAAM,IAAA,CAAK,YAAY,GAAG,CAAA;AAAA,IAC5B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBQ,WAAA,GAA4C,IAAA;AAAA;AAAA,EAE5C,kBAAA,GAAqB,EAAA;AAAA;AAAA,EAErB,aAAA,GAAmC,IAAA;AAAA;AAAA,EAEnC,oBAAA,GAAuB,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBvB,OAAA,GAA4B,OAAA;AAAA,EAC5B,uBAA0C,EAAC;AAAA,EAC3C,gBAAA,GAAmB,KAAA;AAAA;AAAA,EAEnB,aAAA,GAAsC,IAAA;AAAA,EACtC,aAAA,GAAqC,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO7C,IAAI,MAAA,GAA2B;AAC7B,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA;AAAA,EAGA,OAAA,GAAmB;AACjB,IAAA,OAAO,KAAK,OAAA,KAAY,OAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,aAAa,QAAA,EAA4B;AACvC,IAAA,IAAI,KAAK,gBAAA,EAAkB;AACzB,MAAA,cAAA,CAAe,QAAQ,CAAA;AACvB,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,oBAAA,CAAqB,KAAK,QAAQ,CAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,UAAA,GAAmB;AACzB,IAAA,IAAI,KAAK,gBAAA,EAAkB;AAC3B,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AACxB,IAAA,MAAM,iBAAiB,IAAA,CAAK,OAAA;AAC5B,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAEf,IAAA,MAAM,YAAY,IAAA,CAAK,oBAAA;AACvB,IAAA,IAAA,CAAK,uBAAuB,EAAC;AAC7B,IAAA,KAAA,MAAW,MAAM,SAAA,EAAW;AAC1B,MAAA,IAAI;AACF,QAAA,EAAA,EAAG;AAAA,MACL,CAAA,CAAA,MAAQ;AAAA,MAGR;AAAA,IACF;AACA,IAAA,IAAA,CAAK,aAAA,IAAgB;AAMrB,IAAA,IAAI,cAAA,KAAmB,KAAK,OAAA,EAAS;AACnC,MAAA,MAAM,EAAA,GAAkC;AAAA,QACtC,IAAA,EAAM,eAAA;AAAA,QACN,UAAA,EAAY,IAAA;AAAA,QACZ,cAAA;AAAA,QACA,QAAQ,IAAA,CAAK;AAAA,OACf;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,eAAA,EAAiB,EAAE,CAAA;AACpC,MAAA,IAAA,CAAK,OAAO,IAAA,CAAK,CAAA,OAAA,EAAU,IAAA,CAAK,OAAO,IAAa,EAAE,CAAA;AAAA,IACxD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAA,GAAyB;AACvB,IAAA,IAAI,CAAC,IAAA,CAAK,WAAA,EAAa,IAAA,CAAK,kBAAA,EAAmB;AAC/C,IAAA,IAAI,IAAA,CAAK,gBAAA,EAAkB,OAAO,OAAA,CAAQ,OAAA,EAAQ;AAClD,IAAA,IAAI,IAAA,CAAK,aAAA,EAAe,OAAO,IAAA,CAAK,aAAA;AACpC,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAI,OAAA,CAAc,CAAC,OAAA,KAAY;AAClD,MAAA,IAAA,CAAK,aAAA,GAAgB,OAAA;AAAA,IACvB,CAAC,CAAA;AACD,IAAA,OAAO,IAAA,CAAK,aAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,kBAAA,GAA2B;AACzB,IAAA,IAAI,KAAK,WAAA,EAAa;AACtB,IAAA,MAAM,QAAA,GAAW,sBAAsB,IAAI,CAAA;AAC3C,IAAA,MAAM,OAAO,QAAA,EAAU,IAAA;AACvB,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,IAAA,IAAI,KAAA,GAAuD,IAAA;AAE3D,IAAA,MAAM,QAAQ,MAAY;AACxB,MAAA,MAAM,QAAA,GAAW,SAAS,EAAC;AAC3B,MAAA,KAAA,GAAQ,IAAA;AACR,MAAA,KAAA,MAAW,OAAA,IAAW,QAAA,EAAU,IAAA,CAAK,gBAAA,CAAiB,OAAO,CAAA;AAAA,IAC/D,CAAA;AAEA,IAAA,MAAM,OAAA,GAAU,KAAK,IAAA,CAAK;AAAA,MACxB,UAAA,EAAY,IAAA;AAAA,MACZ,OAAO,MAAM;AACX,QAAA,KAAA,GAAQ,EAAC;AAAA,MACX,CAAA;AAAA,MACA,KAAA,EAAO,CAAC,OAAA,KAAY;AAClB,QAAA,MAAM,QAAA,GAAW,OAAA;AACjB,QAAA,IAAI,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA;AAAA,aACzB,IAAA,CAAK,iBAAiB,QAAQ,CAAA;AAAA,MACrC,CAAA;AAAA,MACA,MAAA,EAAQ,KAAA;AAAA,MACR,SAAA,EAAW,MAAM,IAAA,CAAK,UAAA,EAAW;AAAA,MACjC,QAAA,EAAU,MAAM,IAAA,CAAK,gBAAA;AAAiB,KACvC,CAAA;AAED,IAAA,IAAA,CAAK,cAAc,OAAA,IAAW,IAAA;AAAA,EAChC;AAAA,EAEQ,sBAAsB,OAAA,EAAkD;AAC9E,IAAA,MAAM,SAAS,OAAA,CAAQ,GAAA,IAAO,IAAA,CAAK,cAAA,CAAe,QAAQ,KAAK,CAAA;AAC/D,IAAA,MAAM,UAAA,GAAa,OAAO,MAAM,CAAA;AAChC,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,UAAU,CAAA,EAAG;AAChC,MAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,sCAAA,EAAyC,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,IACtF;AACA,IAAA,OAAO,UAAA;AAAA,EACT;AAAA,EAEQ,mBAAmB,KAAA,EAAoC;AAC7D,IAAA,MAAM,QAA2B,EAAC;AAClC,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,UAAU,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtD,MAAA,IAAI,SAAS,IAAA,CAAK,MAAA,CAAO,UAAA,EAAY,KAAA,CAAM,IAAI,CAAA,GAAI,UAAA;AAAA,IACrD;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,iBAAiB,OAAA,EAAgD;AACvE,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,qBAAA,CAAsB,OAAO,CAAA;AAC9C,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,GAAG,CAAA;AAC1C,IAAA,IAAI,OAAA,CAAQ,SAAS,QAAA,EAAU;AAC7B,MAAA,IAAI,SAAA,KAAc,MAAA,EAAW,IAAA,CAAK,SAAA,CAAU,GAAG,CAAA;AAC/C,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,MAAA,IAAA,CAAK,UAAU,GAAA,EAAK,IAAA,CAAK,kBAAA,CAAmB,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAC5D,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,SAAA,CAAU,QAAQ,KAAK,CAAA;AAAA,IAC9B;AAAA,EACF;AAAA,EAEQ,gBAAA,GAAyB;AAC/B,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,IAAA,CAAK,MAAM,CAAA;AAC5B,IAAA,KAAA,MAAW,GAAA,IAAO,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,GAAG,CAAA;AAC1C,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,UAAA,EAAY,EAAE,MAAM,UAAA,EAAY,UAAA,EAAY,MAAM,CAAA;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,cAAA,GAAiD;AACrD,IAAA,MAAM,KAAK,OAAA,EAAQ;AACnB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAA,GAAwC;AAC5C,IAAA,MAAM,KAAK,OAAA,EAAQ;AACnB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,EAAA,GAAa;AACf,IAAA,OAAO,IAAA,CAAK,GAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,KAAA,GAAqB;AACvB,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,cAAA,GAAwC;AAC1C,IAAA,OAAO,IAAA,CAAK,eAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,eAAA,GAA2B;AAC7B,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA,EAGA,IAAI,OAAA,GAAuD;AACzD,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA,EAEA,WAAA,CACE,UACA,OAAA,EACwB;AACxB,IAAA,MAAM,MAAM,uBAAA,EAAiD;AAC7D,IAAA,MAAM,UAAA,GAAa,YAAA,CAAa,QAAA,CAAS,GAAG,CAAC,CAAA;AAC7C,IAAA,IAAI,UAAA,CAAW,SAAS,KAAA,EAAO;AAC7B,MAAA,MAAM,IAAI,gBAAgB,wDAAwD,CAAA;AAAA,IACpF;AAEA,IAAA,MAAM,EAAA,GAAK,EAAE,IAAA,CAAK,YAAA;AAClB,IAAA,MAAM,SAAA,GAAY,OAAA,EAAS,SAAA,IAAa,IAAA,CAAK,QAAQ,gBAAA,IAAoB,UAAA;AACzE,IAAA,MAAM,KAAA,GAAQ,IAAI,SAAA,CAAU,EAAA,EAAI,YAAY,OAAA,EAAS,IAAA,EAAM,SAAS,OAAO,CAAA;AAC3E,IAAA,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,CAAA;AAC1B,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,EAAA,EAAI,KAAK,CAAA;AAC3B,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,eAAe,IAAA,EAAkC;AAC/C,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,UAAU,CAAA;AACtC,IAAA,IAAI,EAAA,KAAO,MAAA,IAAa,EAAA,KAAO,IAAA,EAAM;AACnC,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,CAAA,oDAAA,EAAuD,IAAA,CAAK,MAAA,CAAO,UAAU,CAAA,CAAA;AAAA,OAC/E;AAAA,IACF;AACA,IAAA,IAAI,OAAO,OAAO,QAAA,EAAU;AAC1B,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,CAAA,kDAAA,EAAqD,OAAO,EAAE,CAAA,CAAA;AAAA,OAChE;AAAA,IACF;AACA,IAAA,OAAO,EAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,YAAA,CACE,IAAA,EACA,IAAA,EACA,IAAA,EACU;AACV,IAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AAC7C,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,CAAA,mCAAA,EAAsC,IAAA,KAAS,IAAA,GAAO,MAAA,GAAS,OAAO,IAAI,CAAA;AAAA,OAC5E;AAAA,IACF;AACA,IAAA,MAAM,GAAA,GAAM,IAAA;AAEZ,IAAA,IAAI,SAAS,QAAA,EAAU;AACrB,MAAA,KAAA,MAAW,GAAA,IAAO,KAAK,UAAA,EAAY;AACjC,QAAA,MAAM,IAAA,GAAO,IAAI,MAAA,CAAO,IAAA;AACxB,QAAA,MAAMA,IAAAA,GAAM,IAAI,IAAI,CAAA;AACpB,QAAA,IAAIA,SAAQ,MAAA,EAAW;AAIrB,UAAA,IAAI,CAAC,GAAA,CAAI,MAAA,CAAO,QAAA,EAAU;AACxB,YAAA,MAAM,IAAI,eAAA;AAAA,cACR,0CAA0C,IAAI,CAAA,SAAA;AAAA,aAChD;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AAEL,MAAA,IAAI,IAAA,CAAK,MAAA,CAAO,UAAA,IAAc,GAAA,EAAK;AACjC,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,CAAA,gDAAA,EAAmD,IAAA,CAAK,MAAA,CAAO,UAAU,CAAA,CAAA;AAAA,SAC3E;AAAA,MACF;AACA,MAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,EAAG;AAClC,QAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,EAAG;AAC1B,UAAA,MAAM,IAAI,eAAA;AAAA,YACR,yCAAyC,GAAG,CAAA,CAAA;AAAA,WAC9C;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,MAAM,OAAA,GAAyB;AAC7B,IAAA,IAAI,IAAA,CAAK,YAAY,YAAA,EAAc;AACnC,IAAA,MAAM,iBAAiB,IAAA,CAAK,OAAA;AAC5B,IAAA,IAAA,CAAK,OAAA,GAAU,YAAA;AAGf,IAAA,IAAA,CAAK,WAAA,IAAc;AACnB,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,IAAA,IAAA,CAAK,WAAA,GAAc,KAAA;AAInB,IAAA,MAAM,EAAA,GAAkC;AAAA,MACtC,IAAA,EAAM,eAAA;AAAA,MACN,UAAA,EAAY,IAAA;AAAA,MACZ,cAAA;AAAA,MACA,MAAA,EAAQ;AAAA,KACV;AACA,IAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,eAAA,EAAiB,EAAE,CAAA;AACpC,IAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,mBAAA,EAAqB,EAAE,CAAA;AAGxC,IAAA,IAAA,CAAK,OAAO,QAAA,EAAS;AAKrB,IAAC,IAAA,CAAK,OAAA,CAAmD,SAAA,CAAU,KAAA,EAAM;AAEzE,IAAA,IAAA,CAAK,gBAAA,GAAmB,CAAA;AAExB,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,IAAA,IAAA,CAAK,kBAAA,GAAqB,EAAA;AAC1B,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AACrB,IAAA,IAAA,CAAK,oBAAA,GAAuB,EAAA;AAK5B,IAAA,MAAM,QAAQ,OAAA,EAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,EAAA,EAAqB;AACvB,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,EAAE,CAAA;AACnC,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,KAAA;AAC9B,IAAA,IACE,IAAA,CAAK,cACL,IAAA,CAAK,aAAA,IACL,KAAK,QAAA,CAAS,IAAA,CAAK,aAAA,EAAe,GAAG,CAAA,EACrC;AACA,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,CAAC,IAAA,GAAiC;AAChC,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,GAAG,KAAK,IAAA,CAAK,QAAA,CAAS,SAAQ,EAAG;AAC/C,MAAA,IACE,IAAA,CAAK,cACL,IAAA,CAAK,aAAA,IACL,KAAK,QAAA,CAAS,IAAA,CAAK,aAAA,EAAe,GAAG,CAAA,EACrC;AACA,QAAA;AAAA,MACF;AACA,MAAA,MAAM,EAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,CAAC,MAAA,GAAqC;AACpC,IAAA,KAAA,MAAW,GAAG,GAAG,KAAK,IAAA,CAAK,QAAA,CAAS,SAAQ,EAAG;AAC7C,MAAA,IACE,IAAA,CAAK,cACL,IAAA,CAAK,aAAA,IACL,KAAK,QAAA,CAAS,IAAA,CAAK,aAAA,EAAe,GAAG,CAAA,EACrC;AACA,QAAA;AAAA,MACF;AACA,MAAA,MAAM,IAAA,CAAK,YAAY,GAAG,CAAA;AAAA,IAC5B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,CAAC,OAAA,GAAgD;AAC/C,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,GAAG,KAAK,IAAA,CAAK,QAAA,CAAS,SAAQ,EAAG;AAC/C,MAAA,IACE,IAAA,CAAK,cACL,IAAA,CAAK,aAAA,IACL,KAAK,QAAA,CAAS,IAAA,CAAK,aAAA,EAAe,GAAG,CAAA,EACrC;AACA,QAAA;AAAA,MACF;AACA,MAAA,MAAM,CAAC,EAAA,EAAI,IAAA,CAAK,WAAA,CAAY,GAAG,CAAC,CAAA;AAAA,IAClC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QACE,QAAA,EACM;AACN,IAAA,IAAI,CAAA,GAAI,CAAA;AACR,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,GAAG,KAAK,IAAA,CAAK,QAAA,CAAS,SAAQ,EAAG;AAC/C,MAAA,IACE,IAAA,CAAK,cACL,IAAA,CAAK,aAAA,IACL,KAAK,QAAA,CAAS,IAAA,CAAK,aAAA,EAAe,GAAG,CAAA,EACrC;AACA,QAAA;AAAA,MACF;AACA,MAAA,QAAA,CAAS,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA,EAAG,IAAI,CAAA,EAAG,CAAA;AAAA,IACzC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAO,QAAA,EAAmE;AACxE,IAAA,MAAM,MAAW,EAAC;AAClB,IAAA,IAAI,CAAA,GAAI,CAAA;AACR,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,GAAG,KAAK,IAAA,CAAK,QAAA,CAAS,SAAQ,EAAG;AAC/C,MAAA,IACE,IAAA,CAAK,cACL,IAAA,CAAK,aAAA,IACL,KAAK,QAAA,CAAS,IAAA,CAAK,aAAA,EAAe,GAAG,CAAA,EACrC;AACA,QAAA;AAAA,MACF;AACA,MAAA,GAAA,CAAI,IAAA,CAAK,SAAS,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA,EAAG,EAAA,EAAI,GAAG,CAAC,CAAA;AAAA,IACnD;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBA,IAAI,KAAA,GAA+B;AACjC,IAAA,IACE,KAAK,WAAA,KAAgB,IAAA,IACrB,IAAA,CAAK,kBAAA,KAAuB,KAAK,cAAA,EACjC;AACA,MAAA,OAAO,IAAA,CAAK,WAAA;AAAA,IACd;AACA,IAAA,MAAM,CAAA,uBAAQ,GAAA,EAAsB;AACpC,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,GAAG,KAAK,IAAA,CAAK,QAAA,CAAS,SAAQ,EAAG;AAC/C,MAAA,IACE,IAAA,CAAK,cACL,IAAA,CAAK,aAAA,IACL,KAAK,QAAA,CAAS,IAAA,CAAK,aAAA,EAAe,GAAG,CAAA,EACrC;AACA,QAAA;AAAA,MACF;AACA,MAAA,CAAA,CAAE,GAAA,CAAI,EAAA,EAAI,IAAA,CAAK,WAAA,CAAY,GAAG,CAAC,CAAA;AAAA,IACjC;AACA,IAAA,IAAA,CAAK,WAAA,GAAc,CAAA;AACnB,IAAA,IAAA,CAAK,qBAAqB,IAAA,CAAK,cAAA;AAC/B,IAAA,OAAO,CAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,IAAI,OAAA,GAAsB;AACxB,IAAA,IACE,KAAK,aAAA,KAAkB,IAAA,IACvB,IAAA,CAAK,oBAAA,KAAyB,KAAK,cAAA,EACnC;AACA,MAAA,OAAO,IAAA,CAAK,aAAA;AAAA,IACd;AACA,IAAA,MAAM,MAAkB,EAAC;AACzB,IAAA,KAAA,MAAW,GAAG,GAAG,KAAK,IAAA,CAAK,QAAA,CAAS,SAAQ,EAAG;AAC7C,MAAA,IACE,IAAA,CAAK,cACL,IAAA,CAAK,aAAA,IACL,KAAK,QAAA,CAAS,IAAA,CAAK,aAAA,EAAe,GAAG,CAAA,EACrC;AACA,QAAA;AAAA,MACF;AACA,MAAA,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,WAAA,CAAY,GAAG,CAAC,CAAA;AAAA,IAChC;AACA,IAAA,IAAA,CAAK,aAAA,GAAgB,GAAA;AACrB,IAAA,IAAA,CAAK,uBAAuB,IAAA,CAAK,cAAA;AACjC,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAA,GAA2B;AACzB,IAAA,OAAO,IAAA,CAAK,KAAK,IAAA,EAAK;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAS,IAAA,EAAoB;AAC3B,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA;AACzC,IAAA,MAAM,UAA6C,EAAC;AACpD,IAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,MAAA,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,sBAAA,CAAuB,GAAG,CAAC,CAAA;AAC7C,MAAA,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,EAAA,EAAI,GAAA,CAAI,KAAA,EAAO,IAAI,GAAA,EAAK,GAAA,CAAI,IAAA,EAAM,GAAA,CAAI,QAAQ,CAAA;AAAA,IACtE;AACA,IAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AAEtB,MAAA,IAAA,CAAK,QAAQ,IAAA,CAAK;AAAA,QAChB,EAAA,EAAI,UAAA;AAAA,QACJ,KAAA,EAAO,OAAA,CAAQ,CAAC,CAAA,CAAG,KAAA;AAAA,QACnB,OAAA,EAAS,KAAA;AAAA,QACT,eAAe,IAAA,CAAK,cAAA;AAAA,QACpB,OAAA,EAAS,QAAQ,OAAA;AAAQ,OAC1B,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,OAAA,GAAiE;AAG/D,IAAA,MAAM,OAA8C,EAAC;AACrD,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,MAAM,KAAK,IAAA,CAAK,QAAA,CAAS,SAAQ,EAAG;AAClD,MAAA,IACE,IAAA,CAAK,cACL,IAAA,CAAK,aAAA,IACL,KAAK,QAAA,CAAS,IAAA,CAAK,aAAA,EAAe,MAAM,CAAA,EACxC;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,IAAA,CAAK,EAAE,EAAA,EAAI,MAAA,EAAQ,CAAA;AAAA,IAC1B;AACA,IAAA,IAAA,CAAK,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,MAAA,GAAS,EAAE,MAAM,CAAA;AAEvC,IAAA,MAAM,YAAY,IAAA,CAAK,MAAA;AACvB,IAAA,MAAM,aAAA,GAAgB,KAAK,SAAA,GAAY,SAAA;AAMvC,IAAA,MAAM,WAA2B,EAAC;AAClC,IAAA,MAAM,aAAA,GAAgB,CAAC,GAAA,KAA4B;AACjD,MAAA,IAAI,GAAA,CAAI,MAAA,CAAO,QAAA,KAAa,cAAA,CAAe,MAAA,EAAQ;AAGjD,QAAA,KAAA,MAAWpB,MAAK,GAAA,CAAI,YAAA,IAAgB,EAAC,gBAAiBA,EAAC,CAAA;AAAA,MACzD,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,KAAK,GAAG,CAAA;AAAA,MACnB;AAAA,IACF,CAAA;AACA,IAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,UAAA,EAAY,aAAA,CAAc,GAAG,CAAA;AAIpD,IAAA,MAAM,aAAa,QAAA,CAAS,MAAA;AAAA,MAC1B,CAAC,CAAA,KACC,CAAA,CAAE,MAAA,CAAO,QAAA,KAAa,eAAe,IAAA,IACrC,CAAA,CAAE,MAAA,CAAO,QAAA,KAAa,cAAA,CAAe;AAAA,KACzC;AACA,IAAA,MAAM,eAAA,uBAAsB,GAAA,EAA0B;AACtD,IAAA,MAAM,OAAA,uBAAc,GAAA,EAGlB;AACF,IAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,MAAA,eAAA,CAAgB,GAAA,CAAI,GAAA,EAAK,GAAA,CAAI,IAAA,CAAM,IAAI,CAAA;AACvC,MAAA,OAAA,CAAQ,IAAI,GAAA,EAAK;AAAA,QACf,MAAA,EAAQ,IAAI,UAAA,CAAW,SAAA,GAAY,CAAC,CAAA;AAAA,QACpC,KAAA,EAAO,IAAI,UAAA,CAAW,GAAA,CAAI,KAAM,QAAQ,CAAA;AAAA,QACxC,IAAA,EAAM;AAAA,OACP,CAAA;AAAA,IACH;AAIA,IAAA,MAAM,WAAW,QAAA,CAAS,MAAA;AAAA,MACxB,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,CAAO,aAAa,cAAA,CAAe;AAAA,KAC9C;AACA,IAAA,MAAM,WAAA,uBAAkB,GAAA,EAGtB;AACF,IAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,MAAA,MAAM,WAAW,GAAA,CAAI,IAAA;AACrB,MAAA,MAAM,gBAAA,GAAmB,SAAS,IAAA,GAC9B,QAAA,CAAS,KAAK,IAAA,GACd,IAAA,CAAK,oBAAoB,QAAQ,CAAA;AACrC,MAAA,WAAA,CAAY,IAAI,GAAA,EAAK;AAAA,QACnB,MAAA,EAAQ,IAAI,UAAA,CAAW,SAAA,GAAY,CAAC,CAAA;AAAA,QACpC,OAAO,IAAI,cAAA;AAAA,UACT,QAAA,CAAS,KAAA;AAAA,UACT,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,QAAA,CAAS,MAAM;AAAA,SAC9B;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH;AAIA,IAAA,MAAM,aAAA,GAAgC,KAAK,UAAA,CAAW,MAAA;AAAA,MACpD,CAAC,MACC,CAAA,CAAE,MAAA,CAAO,aAAa,cAAA,CAAe,MAAA,IAAU,EAAE,QAAA,KAAa;AAAA,KAClE;AAGA,IAAA,KAAA,IAAS,MAAA,GAAS,CAAA,EAAG,MAAA,GAAS,SAAA,EAAW,MAAA,EAAA,EAAU;AACjD,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAM,CAAA,CAAG,MAAA;AAE7B,MAAA,KAAA,MAAW,MAAM,aAAA,EAAe;AAC9B,QAAA,MAAM,QAAA,GAAW,WAAA,CAAY,EAAA,CAAG,QAAA,EAAW,MAAM,CAAA;AACjD,QAAA,WAAA,CAAY,EAAA,CAAG,QAAA,EAAW,MAAA,EAAQ,QAAQ,CAAA;AAAA,MAC5C;AACA,MAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,QAAA,MAAM,WAAW,GAAA,CAAI,QAAA,GAAW,YAAY,GAAA,CAAI,QAAA,EAAU,MAAM,CAAA,GAAI,IAAA;AACpE,QAAA,IAAI,IAAI,QAAA,EAAU,WAAA,CAAY,GAAA,CAAI,QAAA,EAAU,QAAQ,QAAQ,CAAA;AAE5D,QAAA,MAAM,EAAA,GAAK,IAAI,MAAA,CAAO,QAAA;AACtB,QAAA,IAAI,EAAA,KAAO,cAAA,CAAe,IAAA,IAAQ,EAAA,KAAO,eAAe,MAAA,EAAQ;AAC9D,UAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AACzB,UAAA,IAAI,CAAC,QAAA,EAAU;AACb,YAAA,CAAA,CAAE,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,GAAI,CAAA;AACvB,YAAA,CAAA,CAAE,MAAA,CAAO,MAAA,GAAS,CAAA,GAAI,CAAC,CAAA,GAAI,CAAA;AAC3B,YAAA;AAAA,UACF;AACA,UAAA,MAAM,YAAY,GAAA,CAAI,MAAA;AACtB,UAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,MAAA,GAAS,CAAC,CAAA,IAAK,CAAA;AACvC,UAAA,MAAM,GAAA,GAAM,SAAA,CAAU,MAAA,GAAS,CAAA,GAAI,CAAC,CAAA,IAAK,CAAA;AACzC,UAAA,MAAM,MAAM,GAAA,GAAM,KAAA;AAClB,UAAA,IAAI,MAAM,CAAA,EAAG;AACX,YAAA,GAAA,CAAI,KAAM,QAAA,CAAS,KAAA,EAAO,KAAK,CAAA,CAAE,KAAA,EAAO,EAAE,IAAI,CAAA;AAAA,UAChD;AACA,UAAA,CAAA,CAAE,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,GAAI,CAAA,CAAE,IAAA;AACzB,UAAA,CAAA,CAAE,OAAO,MAAA,GAAS,CAAA,GAAI,CAAC,CAAA,GAAI,EAAE,IAAA,GAAO,GAAA;AACpC,UAAA,CAAA,CAAE,IAAA,IAAQ,GAAA;AAAA,QACZ,CAAA,MAAA,IAAW,EAAA,KAAO,cAAA,CAAe,IAAA,EAAM;AACrC,UAAA,MAAM,CAAA,GAAI,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA;AAC7B,UAAA,IAAI,CAAC,QAAA,EAAU;AACb,YAAA,CAAA,CAAE,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,GAAI,CAAA;AACvB,YAAA,CAAA,CAAE,MAAA,CAAO,MAAA,GAAS,CAAA,GAAI,CAAC,CAAA,GAAI,CAAA;AAC3B,YAAA;AAAA,UACF;AAGA,UAAA,MAAM,YAAY,GAAA,CAAI,MAAA;AACtB,UAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,MAAA,GAAS,CAAC,CAAA,IAAK,CAAA;AACvC,UAAA,MAAM,GAAA,GAAM,SAAA,CAAU,MAAA,GAAS,CAAA,GAAI,CAAC,CAAA,IAAK,CAAA;AACzC,UAAA,MAAM,IAAI,GAAA,GAAM,KAAA;AAChB,UAAA,CAAA,CAAE,KAAA,CAAM,eAAe,CAAC,CAAA;AACxB,UAAA,MAAM,iBAAA,GAAoB,EAAE,KAAA,CAAM,MAAA;AAClC,UAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,YAAA,MAAM,IAAI,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,IAAA,EAAO,QAAQ,CAAC,CAAA;AACnD,YAAA,IAAA,CAAK,gBAAA,CAAiB,CAAA,CAAE,KAAA,EAAO,iBAAA,GAAoB,GAAG,CAAC,CAAA;AAAA,UACzD;AACA,UAAA,CAAA,CAAE,MAAM,MAAA,IAAU,CAAA;AAClB,UAAA,CAAA,CAAE,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,GAAI,iBAAA;AACvB,UAAA,CAAA,CAAE,MAAA,CAAO,MAAA,GAAS,CAAA,GAAI,CAAC,IAAI,iBAAA,GAAoB,CAAA;AAAA,QACjD,CAAA,MAAA,IAAW,EAAA,KAAO,cAAA,CAAe,KAAA,EAAO;AACtC,UAAA,IAAI,CAAC,QAAA,EAAU;AACb,YAAA,GAAA,CAAI,KAAA,CAAO,QAAQ,MAAM,CAAA;AACzB,YAAA;AAAA,UACF;AACA,UAAA,GAAA,CAAI,KAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,MAAM,CAAA;AAAA,QAChC,CAAA,MAAA,IAAW,EAAA,KAAO,cAAA,CAAe,UAAA,EAAY;AAC3C,UAAA,IAAI,CAAC,QAAA,EAAU;AACb,YAAA,GAAA,CAAI,UAAA,CAAY,QAAQ,MAAM,CAAA;AAC9B,YAAA;AAAA,UACF;AACA,UAAA,GAAA,CAAI,UAAA,CAAY,IAAA,CAAK,MAAA,EAAQ,MAAM,CAAA;AAAA,QACrC,CAAA,MAAA,IAAW,EAAA,KAAO,cAAA,CAAe,OAAA,EAAS;AACxC,UAAA,IAAI,CAAC,QAAA,EAAU;AACb,YAAA,GAAA,CAAI,OAAA,CAAS,QAAQ,MAAM,CAAA;AAC3B,YAAA;AAAA,UACF;AACA,UAAA,GAAA,CAAI,OAAA,CAAS,IAAA,CAAK,MAAA,EAAQ,MAAM,CAAA;AAAA,QAClC,WAAW,EAAA,KAAO,cAAA,CAAe,KAAA,IAAS,EAAA,KAAO,eAAe,MAAA,EAAQ;AACtE,UAAA,MAAM,OAAO,GAAA,CAAI,MAAA;AACjB,UAAA,IAAA,CAAK,MAAM,CAAA,GAAI,IAAA,CAAK,MAAM,CAAA,IAAK,EAAA;AAAA,QACjC,CAAA,MAAO;AAKL,UAAA,MAAM,OAAO,GAAA,CAAI,MAAA;AACjB,UAAA,IAAA,CAAK,MAAM,CAAA,GAAI,IAAA,CAAK,MAAM,CAAA,IAAK,CAAA;AAAA,QACjC;AAAA,MACF;AAAA,IACF;AAGA,IAAA,KAAA,MAAW,MAAM,aAAA,EAAe;AAC9B,MAAA,KAAA,IAAS,CAAA,GAAI,SAAA,EAAW,CAAA,GAAI,IAAA,CAAK,WAAW,CAAA,EAAA,EAAK;AAC/C,QAAA,WAAA,CAAY,EAAA,CAAG,QAAA,EAAW,CAAA,EAAG,KAAK,CAAA;AAAA,MACpC;AAAA,IACF;AACA,IAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,MAAA,IAAI,IAAI,QAAA,EAAU;AAChB,QAAA,KAAA,IAAS,CAAA,GAAI,SAAA,EAAW,CAAA,GAAI,IAAA,CAAK,WAAW,CAAA,EAAA,EAAK;AAC/C,UAAA,WAAA,CAAY,GAAA,CAAI,QAAA,EAAU,CAAA,EAAG,KAAK,CAAA;AAAA,QACpC;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,kBAAA,GAAqB,CAAA;AACzB,IAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,MAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AACzB,MAAA,MAAM,aAAa,GAAA,CAAI,MAAA;AACvB,MAAA,UAAA,CAAW,GAAA,CAAI,EAAE,MAAM,CAAA;AACvB,MAAA,UAAA,CAAW,IAAA,CAAK,CAAA,EAAG,SAAA,GAAY,CAAC,CAAA;AAChC,MAAA,GAAA,CAAI,IAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,KAAA,EAAO,EAAE,IAAI,CAAA;AACjC,MAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,GAAA,CAAI,GAAG,CAAA;AACtC,MAAA,kBAAA,IAAsB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAA,GAAS,EAAE,IAAI,CAAA;AAAA,IACnD;AACA,IAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,MAAA,MAAM,CAAA,GAAI,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA;AAC7B,MAAA,MAAM,aAAa,GAAA,CAAI,MAAA;AACvB,MAAA,UAAA,CAAW,GAAA,CAAI,EAAE,MAAM,CAAA;AACvB,MAAA,UAAA,CAAW,IAAA,CAAK,CAAA,EAAG,SAAA,GAAY,CAAC,CAAA;AAChC,MAAA,MAAM,UAAA,GAAa,CAAA,CAAE,KAAA,CAAM,IAAA,GACvB,CAAA,CAAE,KAAA,CAAM,IAAA,CAAK,IAAA,GACb,IAAA,CAAK,mBAAA,CAAoB,CAAA,CAAE,KAAK,CAAA;AACpC,MAAA,kBAAA,IAAsB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAA,CAAE,mBAAmB,UAAU,CAAA;AACjE,MAAA,GAAA,CAAI,OAAO,CAAA,CAAE,KAAA;AAAA,IACf;AAGA,IAAA,IAAA,CAAK,SAAS,KAAA,EAAM;AACpB,IAAA,KAAA,IAAS,MAAA,GAAS,CAAA,EAAG,MAAA,GAAS,SAAA,EAAW,MAAA,EAAA,EAAU;AACjD,MAAA,IAAA,CAAK,SAAS,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAG,IAAI,MAAM,CAAA;AAAA,IAC/C;AACA,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,IAAA,CAAK,cAAA,EAAe;AAGpB,IAAA,IAAA,CAAK,KAAK,KAAA,EAAM;AAGhB,IAAA,MAAM,YAAA,GAAe,CAAC,GAAA,KAA4B;AAChD,MAAA,GAAA,CAAI,OAAA,GAAW,GAAA,CAAI,OAAA,GAAU,CAAA,KAAO,CAAA;AACpC,MAAA,IAAI,IAAI,YAAA,EAAc;AACpB,QAAA,KAAA,MAAWA,EAAAA,IAAK,GAAA,CAAI,YAAA,EAAc,YAAA,CAAaA,EAAC,CAAA;AAAA,MAClD;AAAA,IACF,CAAA;AACA,IAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,UAAA,EAAY,YAAA,CAAa,GAAG,CAAA;AACnD,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAC3B,IAAA,IAAA,CAAK,cAAA,EAAA;AACL,IAAA,IAAA,CAAK,QAAQ,IAAA,CAAK;AAAA,MAChB,EAAA,EAAI,SAAA;AAAA,MACJ,KAAA,EAAO,CAAA;AAAA,MACP,OAAA,EAAS,KAAA;AAAA,MACT,eAAe,IAAA,CAAK;AAAA,KACrB,CAAA;AAED,IAAA,OAAO,EAAE,eAAe,kBAAA,EAAmB;AAAA,EAC7C;AAAA,EAEA,gCACE,SAAA,EACM;AACN,IAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,MAAA,IAAI,QAAA,CAAS,SAAS,QAAA,EAAU;AAChC,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA;AAC/B,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,GAAG,CAAA;AACpC,MAAA,IAAI,QAAQ,MAAA,EAAW;AACvB,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA;AAClC,MAAA,IAAA,CAAK,cAAA,EAAA;AACL,MAAA,IAAA,CAAK,QAAQ,IAAA,CAAK;AAAA,QAChB,EAAA,EAAI,QAAA;AAAA,QACJ,KAAA,EAAO,GAAA;AAAA,QACP,OAAA,EAAS,KAAA;AAAA,QACT,eAAe,IAAA,CAAK,cAAA;AAAA,QACpB,KAAA;AAAA,QACA,aAAA,EAAe;AAAA,OAChB,CAAA;AAAA,IACH;AAAA,EACF;AAAA,EAEQ,uBACN,GAAA,EACiC;AACjC,IAAA,IAAI,GAAA,CAAI,OAAO,QAAA,EAAU;AACvB,MAAA,OAAO;AAAA,QACL,KAAK,GAAA,CAAI,KAAA;AAAA,QACT,KAAA,EAAO,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA;AAAA,QAC/B,IAAA,EAAM;AAAA,OACR;AAAA,IACF;AACA,IAAA,IAAI,GAAA,CAAI,OAAO,QAAA,EAAU;AACvB,MAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA;AAC/C,MAAA,OAAO;AAAA,QACL,KAAK,GAAA,CAAI,KAAA;AAAA,QACT,OAAO,EAAE,GAAG,cAAA,EAAgB,GAAG,IAAI,IAAA,EAAK;AAAA,QACxC,aAAA,EAAe,cAAA;AAAA,QACf,IAAA,EAAM;AAAA,OACR;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,KAAK,GAAA,CAAI,KAAA;AAAA,MACT,KAAA,EAAQ,GAAA,CAAI,QAAA,IAAY,EAAE,GAAG,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA,EAAG,GAAG,GAAA,CAAI,IAAA,EAAK;AAAA,MACpE,IAAA,EAAM;AAAA,KACR;AAAA,EACF;AAAA,EAEQ,YAAA,CACN,EAAA,EACA,EAAA,EACA,GAAA,EACA,MACA,QAAA,EACM;AACN,IAAA,QAAQ,EAAA;AAAI,MACV,KAAK,QAAA,EAAU;AAEb,QAAA,IAAA,CAAK,iBAAA,CAAkB,EAAA,EAAI,IAAA,CAAK,WAAA,CAAY,GAAG,CAAC,CAAA;AAChD,QAAA,IAAA,CAAK,sBAAsB,GAAG,CAAA;AAC9B,QAAA,IAAA,CAAK,QAAA,CAAS,OAAO,EAAE,CAAA;AAGvB,QAAA,KAAA,MAAW,OAAO,IAAA,CAAK,UAAA,MAAgB,OAAA,GAAW,GAAA,CAAI,UAAU,CAAA,KAAO,CAAA;AACvE,QAAA,IAAA,CAAK,cAAA,EAAA;AACL,QAAA;AAAA,MACF;AAAA,MACA,KAAK,QAAA,EAAU;AACb,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA;AACnC,QAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,QAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AAChD,UAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AACjC,UAAA,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,GAAA,EAAK,KAAyB,CAAA;AAClD,UAAA,GAAA,CAAI,OAAA,GAAW,GAAA,CAAI,OAAA,GAAU,CAAA,KAAO,CAAA;AACpC,UAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAAA,QAClB;AACA,QAAA,IAAA,CAAK,mBAAA,CAAoB,KAAK,OAAO,CAAA;AACrC,QAAA,IAAA,CAAK,cAAc,EAAA,EAAI,MAAA,EAAQ,IAAA,CAAK,WAAA,CAAY,GAAG,CAAC,CAAA;AACpD,QAAA,IAAA,CAAK,cAAA,EAAA;AACL,QAAA;AAAA,MACF;AAAA,MACA,KAAK,QAAA,EAAU;AACb,QAAA,IAAI,IAAA,CAAK,UAAA,IAAc,IAAA,CAAK,aAAA,EAAe;AACzC,UAAA,MAAM,GAAA,GAAO,KAAK,SAAA,IAA4C,KAAA;AAC9D,UAAA,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,aAAA,EAAe,GAAA,EAAK,GAAG,CAAA;AAC3C,UAAA,IAAA,CAAK,aAAA,CAAc,OAAA,GAAW,IAAA,CAAK,aAAA,CAAc,UAAU,CAAA,KAAO,CAAA;AAAA,QACpE,WAAW,QAAA,EAAU;AAEnB,UAAA,KAAA,MAAW,GAAA,IAAO,KAAK,UAAA,EAAY;AACjC,YAAA,MAAM,CAAA,GAAI,QAAA,CAAS,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA;AAClC,YAAA,IAAI,MAAM,MAAA,EAAW;AACnB,cAAA,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,GAAA,EAAK,CAAqB,CAAA;AAC9C,cAAA,GAAA,CAAI,OAAA,GAAW,GAAA,CAAI,OAAA,GAAU,CAAA,KAAO,CAAA;AAAA,YACtC;AAAA,UACF;AACA,UAAA,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,EAAA,EAAI,GAAG,CAAA;AAAA,QAC9B;AACA,QAAA,IAAA,CAAK,oBAAoB,GAAG,CAAA;AAC5B,QAAA,IAAA,CAAK,YAAA,CAAa,EAAA,EAAI,IAAA,CAAK,WAAA,CAAY,GAAG,CAAC,CAAA;AAC3C,QAAA,IAAA,CAAK,cAAA,EAAA;AACL,QAAA;AAAA,MACF;AAAA;AACF,EACF;AAAA,EAEQ,yBAAyB,MAAA,EAAmC;AAClE,IAAA,IAAI,WAAW,MAAA,EAAW;AAC1B,IAAA,MAAM,UAAU,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,GAAI,MAAA,GAAS,CAAC,MAAM,CAAA;AACxD,IAAA,KAAA,MAAW,WAAW,OAAA,EAAS;AAC7B,MAAA,IAAI,OAAA,CAAQ,SAAS,OAAA,EAAS;AAC5B,QAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,gCAAA,EAAmC,OAAA,CAAQ,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,MAC9E;AACA,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,QAAQ,MAAM,CAAA;AAC3C,MAAA,IAAI,CAAC,KAAK,MAAM,IAAI,gBAAgB,CAAA,8BAAA,EAAiC,OAAA,CAAQ,MAAM,CAAA,CAAA,CAAG,CAAA;AACtF,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,gBAAA,CAAiB,GAAG,CAAA;AAC3C,MAAA,IAAI,cAAc,IAAA,EAAM;AACtB,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,CAAA,sBAAA,EAAyB,QAAQ,MAAM,CAAA,gDAAA;AAAA,SACzC;AAAA,MACF;AACA,MAAA,MAAM,cAAwB,EAAC;AAC/B,MAAA,KAAA,MAAW,OAAO,IAAA,CAAK,8BAAA,EAA+B,EAAG,WAAA,CAAY,KAAK,GAAG,CAAA;AAC7E,MAAA,IAAA,CAAK,eAAA,CAAgB,GAAA;AAAA,QACnB,OAAA,CAAQ,MAAA;AAAA,QACR,iBAAA,CAAkB,WAAA,CAAY,IAAA,CAAK,WAAW,GAAG,SAAS;AAAA,OAC5D;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,iBAAiB,GAAA,EAAwC;AAC/D,IAAA,OAAO,GAAA,CAAI,OAAO,SAAA,IAAa,GAAA,CAAI,YAAY,SAAA,IAAa,GAAA,CAAI,SAAS,SAAA,IAAa,IAAA;AAAA,EACxF;AAAA,EAEA,CAAS,8BAAA,GAA2D;AAClE,IAAA,MAAM,MAAM,IAAA,CAAK,aAAA;AACjB,IAAA,MAAM,OAAO,IAAA,CAAK,UAAA;AAClB,IAAA,KAAA,MAAW,GAAG,GAAG,KAAK,IAAA,CAAK,QAAA,CAAS,SAAQ,EAAG;AAC7C,MAAA,IAAI,QAAQ,GAAA,IAAO,IAAA,CAAK,QAAA,CAAS,GAAA,EAAK,GAAG,CAAA,EAAG;AAC5C,MAAA,MAAM,GAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,mBAAA,CACN,KACA,cAAA,EACM;AACN,IAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,IAAA,KAAS,CAAA,EAAG;AACrC,IAAA,MAAM,SAAA,GACJ,IAAA,CAAK,UAAA,IACL,IAAA,CAAK,aAAA,KAAkB,QACvB,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,aAAA,EAAe,GAAG,CAAA;AACvC,IAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,KAAK,CAAA,IAAK,KAAK,eAAA,EAAiB;AAClD,MAAA,IACE,mBAAmB,MAAA,IACnB,cAAA,KAAmB,SACnB,CAAC,cAAA,CAAe,IAAI,MAAM,CAAA,IAC1B,EAAE,IAAA,CAAK,iBAAiB,cAAA,CAAe,GAAA,CAAI,KAAK,aAAA,CAAc,MAAA,CAAO,IAAI,CAAA,CAAA,EACzE;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,KAAA,CAAM,WAAA,CAAY,IAAI,GAAG,CAAA;AACzB,QAAA,KAAA,CAAM,SAAA,CAAU,OAAO,GAAG,CAAA;AAAA,MAC5B,CAAA,MAAO;AACL,QAAA,KAAA,CAAM,WAAA,CAAY,OAAO,GAAG,CAAA;AAC5B,QAAA,KAAA,CAAM,SAAA,CAAU,IAAI,GAAG,CAAA;AACvB,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA;AACnC,QAAA,MAAM,SAAA,GAAY,GAAA,GAAM,IAAA,CAAK,gBAAA,CAAiB,GAAG,CAAA,GAAI,IAAA;AACrD,QAAA,IAAI,SAAA,KAAc,IAAA,IAAQ,KAAA,CAAM,SAAA,CAAU,QAAQ,IAAA,EAAO;AACvD,UAAA,sBAAA,CAAuB,OAAO,SAAS,CAAA;AACvC,UAAA,IAAI,KAAA,CAAM,QAAA,CAAS,MAAA,IAAU,EAAA,EAAI;AAC/B,YAAA,IAAA,CAAK,yBAAA,CAA0B,MAAA,EAAQ,KAAA,EAAO,SAAS,CAAA;AAAA,UACzD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,sBAAsB,GAAA,EAAmB;AAC/C,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,eAAA,CAAgB,MAAA,EAAO,EAAG;AACjD,MAAA,KAAA,CAAM,WAAA,CAAY,IAAI,GAAG,CAAA;AACzB,MAAA,KAAA,CAAM,SAAA,CAAU,OAAO,GAAG,CAAA;AAAA,IAC5B;AAAA,EACF;AAAA,EAEQ,qBAAA,GAA8B;AACpC,IAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,KAAK,CAAA,IAAK,KAAK,eAAA,EAAiB;AAClD,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA;AACnC,MAAA,MAAM,SAAA,GAAY,GAAA,GAAM,IAAA,CAAK,gBAAA,CAAiB,GAAG,CAAA,GAAI,IAAA;AACrD,MAAA,IAAI,cAAc,IAAA,EAAM;AACxB,MAAA,IAAA,CAAK,yBAAA,CAA0B,MAAA,EAAQ,KAAA,EAAO,SAAS,CAAA;AAAA,IACzD;AAAA,EACF;AAAA,EAEQ,yBAAA,CACN,MAAA,EACA,KAAA,EACA,SAAA,EACmB;AACnB,IAAA,MAAM,WAAA,GAAc,WAAA,CAAY,IAAA,CAAK,IAAA,CAAK,gCAAgC,CAAA;AAC1E,IAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,WAAA,EAAa,SAAA,EAAW;AAAA,MACxD,YAAA,EAAc,MAAM,YAAA,GAAe,CAAA;AAAA,MACnC,gBAAA,EAAkB,MAAM,gBAAA,GAAmB;AAAA,KAC5C,CAAA;AACD,IAAA,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,MAAA,EAAQ,OAAO,CAAA;AACxC,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEQ,YAAA,CAAa,IAAY,GAAA,EAAqB;AACpD,IAAA,IAAI,IAAA,CAAK,kBAAA,CAAmB,GAAG,CAAA,EAAG;AAClC,IAAA,KAAA,MAAW,KAAA,IAAS,KAAK,QAAA,CAAS,MAAA,IAAU,KAAA,CAAM,GAAA,CAAI,IAAI,GAAG,CAAA;AAAA,EAC/D;AAAA,EAEQ,iBAAA,CAAkB,IAAY,GAAA,EAAqB;AACzD,IAAA,IAAI,IAAA,CAAK,kBAAA,CAAmB,GAAG,CAAA,EAAG;AAClC,IAAA,KAAA,MAAW,KAAA,IAAS,KAAK,QAAA,CAAS,MAAA,IAAU,KAAA,CAAM,MAAA,CAAO,IAAI,GAAG,CAAA;AAAA,EAClE;AAAA,EAEQ,aAAA,CAAc,EAAA,EAAY,MAAA,EAAkB,KAAA,EAAuB;AACzE,IAAA,MAAM,UAAA,GAAa,CAAC,IAAA,CAAK,kBAAA,CAAmB,MAAM,CAAA;AAClD,IAAA,MAAM,SAAA,GAAY,CAAC,IAAA,CAAK,kBAAA,CAAmB,KAAK,CAAA;AAChD,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,QAAA,CAAS,MAAA,EAAO,EAAG;AAC1C,MAAA,IAAI,cAAc,SAAA,EAAW,KAAA,CAAM,MAAA,CAAO,EAAA,EAAI,QAAQ,KAAK,CAAA;AAAA,WAAA,IAClD,UAAA,EAAY,KAAA,CAAM,MAAA,CAAO,EAAA,EAAI,MAAM,CAAA;AAAA,WAAA,IACnC,SAAA,EAAW,KAAA,CAAM,GAAA,CAAI,EAAA,EAAI,KAAK,CAAA;AAAA,IACzC;AAAA,EACF;AAAA,EAEQ,cAAA,GAAuB;AAC7B,IAAA,KAAA,MAAW,KAAA,IAAS,KAAK,QAAA,CAAS,MAAA,IAAU,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,CAAA;AAAA,EACxE;AAAA,EAEQ,mBAAmB,GAAA,EAAwB;AACjD,IAAA,OAAO,IAAA,CAAK,UAAA,IAAc,GAAA,CAAI,SAAA,KAAc,IAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAMQ,SAAA,CAAU,GAAA,EAAmB,GAAA,EAAa,KAAA,EAAsB;AACtE,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,MAAA,IAAI,CAAC,GAAA,CAAI,MAAA,CAAO,QAAA,EAAU;AACxB,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,CAAA,QAAA,EAAW,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA,iBAAA;AAAA,SAC5B;AAAA,MACF;AACA,MAAA,WAAA,CAAY,GAAA,CAAI,QAAA,EAAW,GAAA,EAAK,KAAK,CAAA;AACrC,MAAA,IAAI,GAAA,CAAI,OAAO,QAAA,KAAa,cAAA,CAAe,OAAO,GAAA,CAAI,KAAA,CAAO,QAAQ,GAAG,CAAA;AACxE,MAAA,IAAI,GAAA,CAAI,MAAA,CAAO,QAAA,KAAa,cAAA,CAAe,UAAA,EAAY;AACrD,QAAA,GAAA,CAAI,UAAA,CAAY,QAAQ,GAAG,CAAA;AAAA,MAC7B;AACA,MAAA,IAAI,GAAA,CAAI,MAAA,CAAO,QAAA,KAAa,cAAA,CAAe,OAAA,EAAS;AAClD,QAAA,GAAA,CAAI,OAAA,CAAS,QAAQ,GAAG,CAAA;AAAA,MAC1B;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAI,QAAA,EAAU,WAAA,CAAY,GAAA,CAAI,QAAA,EAAU,KAAK,IAAI,CAAA;AAErD,IAAA,MAAM,IAAA,GAAO,IAAI,MAAA,CAAO,QAAA;AACxB,IAAA,IAAI,IAAA,KAAS,eAAe,IAAA,EAAM;AAChC,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,WAAW,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA,sBAAA,EAAyB,OAAO,KAAK,CAAA;AAAA,SACjE;AAAA,MACF;AACA,MAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,IAAA,CAAM,MAAA,CAAO,KAAK,CAAA;AACpC,MAAA,MAAM,SAAS,GAAA,CAAI,MAAA;AACnB,MAAA,MAAA,CAAO,GAAA,GAAM,CAAC,CAAA,GAAI,KAAA,CAAM,KAAA;AACxB,MAAA,MAAA,CAAO,GAAA,GAAM,CAAA,GAAI,CAAC,CAAA,GAAI,KAAA,CAAM,GAAA;AAC5B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,KAAS,eAAe,MAAA,EAAQ;AAClC,MAAA,IAAI,EAAE,iBAAiB,UAAA,CAAA,EAAa;AAClC,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,WAAW,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA,0BAAA,EAA6B,OAAO,KAAK,CAAA;AAAA,SACrE;AAAA,MACF;AACA,MAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,IAAA,CAAM,WAAA,CAAY,KAAK,CAAA;AACzC,MAAA,MAAM,SAAS,GAAA,CAAI,MAAA;AACnB,MAAA,MAAA,CAAO,GAAA,GAAM,CAAC,CAAA,GAAI,KAAA,CAAM,KAAA;AACxB,MAAA,MAAA,CAAO,GAAA,GAAM,CAAA,GAAI,CAAC,CAAA,GAAI,KAAA,CAAM,GAAA;AAC5B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,KAAS,eAAe,QAAA,EAAU;AACpC,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,WAAW,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA,sBAAA,EAAyB,OAAO,KAAK,CAAA;AAAA,SACjE;AAAA,MACF;AACA,MAAA,MAAM,OAAA,GAAU,GAAA,CAAI,UAAA,CAAY,MAAA,CAAO,KAAK,CAAA;AAC5C,MAAC,GAAA,CAAI,MAAA,CAAuB,GAAG,CAAA,GAAI,OAAA;AACnC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,KAAS,eAAe,IAAA,EAAM;AAChC,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzB,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,WAAW,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA,wBAAA,EAA2B,OAAO,KAAK,CAAA;AAAA,SACnE;AAAA,MACF;AACA,MAAA,IAAA,CAAK,aAAA,CAAc,GAAA,EAAK,GAAA,EAAK,KAA2B,CAAA;AACxD,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,KAAS,eAAe,MAAA,EAAQ;AAClC,MAAA,IAAI,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACvE,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,WAAW,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA,yBAAA,EAA4B,OAAO,KAAK,CAAA;AAAA,SACpE;AAAA,MACF;AACA,MAAA,IAAA,CAAK,eAAA,CAAgB,GAAA,EAAK,GAAA,EAAK,KAAgC,CAAA;AAC/D,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,KAAS,eAAe,KAAA,EAAO;AACjC,MAAA,GAAA,CAAI,KAAA,CAAO,GAAA,CAAI,GAAA,EAAK,KAAc,CAAA;AAClC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,KAAS,eAAe,UAAA,EAAY;AACtC,MAAA,GAAA,CAAI,UAAA,CAAY,GAAA,CAAI,GAAA,EAAK,KAAmB,CAAA;AAC5C,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,KAAS,eAAe,OAAA,EAAS;AACnC,MAAA,GAAA,CAAI,OAAA,CAAS,GAAA,CAAI,GAAA,EAAK,KAAgB,CAAA;AACtC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,KAAS,eAAe,IAAA,EAAM;AAEhC,MAAA,MAAM,CAAA,GAAI,KAAA,KAAU,IAAA,GAAO,CAAA,GAAI,KAAA,KAAU,KAAA,GAAQ,CAAA,GAAI,IAAA,CAAK,gBAAA,CAAiB,KAAA,EAAO,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA;AACjG,MAAC,GAAA,CAAI,MAAA,CAAsB,GAAG,CAAA,GAAI,CAAA;AAClC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,KAAS,cAAA,CAAe,KAAA,IAAS,IAAA,KAAS,eAAe,MAAA,EAAQ;AACnE,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAC,GAAA,CAAI,MAAA,CAAyB,GAAG,CAAA,GAAI,KAAA;AAAA,MACvC,WAAW,OAAO,KAAA,KAAU,YAAY,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,EAAG;AAC/D,QAAC,GAAA,CAAI,MAAA,CAAyB,GAAG,CAAA,GAAI,OAAO,KAAK,CAAA;AAAA,MACnD,CAAA,MAAO;AACL,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,WAAW,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA,sBAAA,EAAyB,OAAO,KAAK,CAAA;AAAA,SACjE;AAAA,MACF;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,WAAW,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA,sBAAA,EAAyB,OAAO,KAAK,CAAA;AAAA,OACjE;AAAA,IACF;AACA,IAAC,GAAA,CAAI,MAAA,CAAoE,GAAG,CAAA,GAAI,KAAA;AAAA,EAClF;AAAA,EAEQ,QAAA,CAAS,KAAmB,GAAA,EAA+B;AACjE,IAAA,IAAI,GAAA,CAAI,YAAY,CAAC,WAAA,CAAY,IAAI,QAAA,EAAU,GAAG,GAAG,OAAO,IAAA;AAC5D,IAAA,MAAM,IAAA,GAAO,IAAI,MAAA,CAAO,QAAA;AACxB,IAAA,IAAI,IAAA,KAAS,eAAe,IAAA,EAAM;AAChC,MAAA,MAAM,SAAS,GAAA,CAAI,MAAA;AACnB,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,GAAM,CAAC,CAAA,IAAK,CAAA;AACjC,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,GAAM,CAAA,GAAI,CAAC,CAAA,IAAK,CAAA;AACnC,MAAA,OAAO,GAAA,CAAI,IAAA,CAAM,IAAA,CAAK,KAAA,EAAO,GAAG,CAAA;AAAA,IAClC;AACA,IAAA,IAAI,IAAA,KAAS,eAAe,MAAA,EAAQ;AAClC,MAAA,MAAM,SAAS,GAAA,CAAI,MAAA;AACnB,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,GAAM,CAAC,CAAA,IAAK,CAAA;AACjC,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,GAAM,CAAA,GAAI,CAAC,CAAA,IAAK,CAAA;AACnC,MAAA,OAAO,GAAA,CAAI,IAAA,CAAM,SAAA,CAAU,KAAA,EAAO,GAAG,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,IAAA,KAAS,eAAe,QAAA,EAAU;AACpC,MAAA,MAAM,OAAA,GAAW,GAAA,CAAI,MAAA,CAAuB,GAAG,CAAA,IAAK,CAAA;AACpD,MAAA,OAAO,GAAA,CAAI,UAAA,CAAY,MAAA,CAAO,OAAO,CAAA;AAAA,IACvC;AACA,IAAA,IAAI,IAAA,KAAS,eAAe,IAAA,EAAM;AAChC,MAAA,OAAO,IAAA,CAAK,YAAA,CAAa,GAAA,EAAK,GAAG,CAAA;AAAA,IACnC;AACA,IAAA,IAAI,IAAA,KAAS,eAAe,MAAA,EAAQ;AAClC,MAAA,OAAO,IAAA,CAAK,cAAA,CAAe,GAAA,EAAK,GAAG,CAAA;AAAA,IACrC;AACA,IAAA,IAAI,IAAA,KAAS,eAAe,KAAA,EAAO;AACjC,MAAA,OAAO,GAAA,CAAI,KAAA,CAAO,GAAA,CAAI,GAAG,CAAA;AAAA,IAC3B;AACA,IAAA,IAAI,IAAA,KAAS,eAAe,UAAA,EAAY;AACtC,MAAA,OAAO,GAAA,CAAI,UAAA,CAAY,GAAA,CAAI,GAAG,CAAA;AAAA,IAChC;AACA,IAAA,IAAI,IAAA,KAAS,eAAe,OAAA,EAAS;AACnC,MAAA,OAAO,GAAA,CAAI,OAAA,CAAS,GAAA,CAAI,GAAG,CAAA;AAAA,IAC7B;AACA,IAAA,IAAI,IAAA,KAAS,eAAe,IAAA,EAAM;AAChC,MAAA,OAAA,CAAS,GAAA,CAAI,MAAA,CAAsB,GAAG,CAAA,IAAK,CAAA,MAAO,CAAA;AAAA,IACpD;AACA,IAAA,IAAI,IAAA,KAAS,cAAA,CAAe,KAAA,IAAS,IAAA,KAAS,eAAe,MAAA,EAAQ;AACnE,MAAA,OAAQ,GAAA,CAAI,MAAA,CAAyB,GAAG,CAAA,IAAK,EAAA;AAAA,IAC/C;AACA,IAAA,OAAQ,GAAA,CAAI,MAAA,CAAoE,GAAG,CAAA,IAAK,CAAA;AAAA,EAC1F;AAAA,EAEQ,QAAA,CAAS,KAAmB,GAAA,EAAsB;AACxD,IAAA,IAAI,GAAA,CAAI,MAAA,CAAO,QAAA,KAAa,cAAA,CAAe,IAAA,EAAM;AAC/C,MAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,QAAA,EAAW,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA,aAAA,CAAe,CAAA;AAAA,IACrE;AACA,IAAA,IAAI,GAAA,CAAI,YAAY,CAAC,WAAA,CAAY,IAAI,QAAA,EAAU,GAAG,GAAG,OAAO,KAAA;AAC5D,IAAA,OAAA,CAAS,GAAA,CAAI,MAAA,CAAsB,GAAG,CAAA,IAAK,CAAA,MAAO,CAAA;AAAA,EACpD;AAAA;AAAA,EAIQ,aAAA,CACN,GAAA,EACA,GAAA,EACA,KAAA,EACM;AACN,IAAA,MAAM,YAAY,GAAA,CAAI,IAAA;AACtB,IAAA,MAAM,IAAI,KAAA,CAAM,MAAA;AAChB,IAAA,SAAA,CAAU,eAAe,CAAC,CAAA;AAC1B,IAAA,MAAM,eAAe,SAAA,CAAU,MAAA;AAC/B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,MAAA,IAAA,CAAK,iBAAiB,SAAA,EAAW,YAAA,GAAe,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,IAC7D;AACA,IAAA,SAAA,CAAU,MAAA,IAAU,CAAA;AACpB,IAAA,SAAA,CAAU,OAAA,GAAW,SAAA,CAAU,OAAA,GAAU,CAAA,KAAO,CAAA;AAChD,IAAA,MAAM,SAAS,GAAA,CAAI,MAAA;AACnB,IAAA,MAAA,CAAO,GAAA,GAAM,CAAC,CAAA,GAAI,YAAA;AAClB,IAAA,MAAA,CAAO,GAAA,GAAM,CAAA,GAAI,CAAC,CAAA,GAAI,YAAA,GAAe,CAAA;AAAA,EACvC;AAAA,EAEQ,gBAAA,CACN,KAAA,EACA,OAAA,EACA,KAAA,EACM;AACN,IAAA,MAAM,IAAA,GAAO,MAAM,KAAA,CAAM,QAAA;AACzB,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,MAAA,IAAI,CAAC,KAAA,CAAM,KAAA,CAAM,QAAA,EAAU;AACzB,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,CAAA,YAAA,EAAe,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA,8BAAA;AAAA,SACjC;AAAA,MACF;AACA,MAAA,WAAA,CAAY,KAAA,CAAM,QAAA,EAAW,OAAA,EAAS,KAAK,CAAA;AAE3C,MAAA;AAAA,IACF;AACA,IAAA,IAAI,MAAM,QAAA,EAAU,WAAA,CAAY,KAAA,CAAM,QAAA,EAAU,SAAS,IAAI,CAAA;AAE7D,IAAA,IAAI,IAAA,KAAS,eAAe,IAAA,EAAM;AAChC,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,CAAA,uCAAA,EAA0C,OAAO,KAAK,CAAA;AAAA,SACxD;AAAA,MACF;AACA,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAM,MAAA,CAAO,KAAK,CAAA;AACtC,MAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,MAAA,MAAA,CAAO,OAAA,GAAU,CAAC,CAAA,GAAI,KAAA,CAAM,KAAA;AAC5B,MAAA,MAAA,CAAO,OAAA,GAAU,CAAA,GAAI,CAAC,CAAA,GAAI,KAAA,CAAM,GAAA;AAChC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,KAAS,eAAe,MAAA,EAAQ;AAClC,MAAA,IAAI,EAAE,iBAAiB,UAAA,CAAA,EAAa;AAClC,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,CAAA,uCAAA;AAAA,SACF;AAAA,MACF;AACA,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAM,WAAA,CAAY,KAAK,CAAA;AAC3C,MAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,MAAA,MAAA,CAAO,OAAA,GAAU,CAAC,CAAA,GAAI,KAAA,CAAM,KAAA;AAC5B,MAAA,MAAA,CAAO,OAAA,GAAU,CAAA,GAAI,CAAC,CAAA,GAAI,KAAA,CAAM,GAAA;AAChC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,KAAS,eAAe,QAAA,EAAU;AACpC,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,CAAA,4CAAA,EAA+C,OAAO,KAAK,CAAA;AAAA,SAC7D;AAAA,MACF;AACA,MAAC,MAAM,MAAA,CAAuB,OAAO,IAAI,KAAA,CAAM,UAAA,CAAY,OAAO,KAAK,CAAA;AACvE,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,KAAS,eAAe,IAAA,EAAM;AAChC,MAAA,MAAM,CAAA,GACJ,KAAA,KAAU,IAAA,GAAO,CAAA,GAAI,KAAA,KAAU,KAAA,GAAQ,CAAA,GAAI,IAAA,CAAK,gBAAA,CAAiB,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AAC1F,MAAC,KAAA,CAAM,MAAA,CAAsB,OAAO,CAAA,GAAI,CAAA;AACxC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,KAAS,cAAA,CAAe,KAAA,IAAS,IAAA,KAAS,eAAe,MAAA,EAAQ;AACnE,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAC,KAAA,CAAM,MAAA,CAAyB,OAAO,CAAA,GAAI,KAAA;AAAA,MAC7C,WAAW,OAAO,KAAA,KAAU,YAAY,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,EAAG;AAC/D,QAAC,KAAA,CAAM,MAAA,CAAyB,OAAO,CAAA,GAAI,OAAO,KAAK,CAAA;AAAA,MACzD,CAAA,MAAO;AACL,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,CAAA,KAAA,EAAQ,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA,wBAAA;AAAA,SAC1B;AAAA,MACF;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,QAAQ,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA,8BAAA,EAAiC,OAAO,KAAK,CAAA;AAAA,OACvE;AAAA,IACF;AACA,IAAC,KAAA,CAAM,MAAA,CACL,OACF,CAAA,GAAI,KAAA;AAAA,EACN;AAAA,EAEQ,YAAA,CAAa,KAAmB,GAAA,EAAiC;AACvE,IAAA,MAAM,SAAS,GAAA,CAAI,MAAA;AACnB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,GAAM,CAAC,CAAA,IAAK,CAAA;AACjC,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,GAAM,CAAA,GAAI,CAAC,CAAA,IAAK,CAAA;AACnC,IAAA,MAAM,QAAQ,GAAA,CAAI,IAAA;AAClB,IAAA,MAAM,IAAI,GAAA,GAAM,KAAA;AAChB,IAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAe,CAAC,CAAA;AAChC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,MAAA,GAAA,CAAI,CAAC,CAAA,GAAI,IAAA,CAAK,eAAA,CAAgB,KAAA,EAAO,QAAQ,CAAC,CAAA;AAAA,IAChD;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEQ,oBAAoB,KAAA,EAA+B;AAKzD,IAAA,MAAM,IAAA,GAAO,MAAM,KAAA,CAAM,QAAA;AACzB,IAAA,MAAM,UAAA,GACJ,SAAS,cAAA,CAAe,IAAA,IAAQ,SAAS,cAAA,CAAe,MAAA,GACpD,CAAA,GACA,KAAA,CAAM,KAAA,CAAM,SAAA;AAClB,IAAA,OAAO,MAAM,MAAA,GAAS,UAAA;AAAA,EACxB;AAAA,EAEQ,eAAA,CAAgB,OAAuB,OAAA,EAA0B;AACvE,IAAA,IAAI,KAAA,CAAM,YAAY,CAAC,WAAA,CAAY,MAAM,QAAA,EAAU,OAAO,GAAG,OAAO,IAAA;AACpE,IAAA,MAAM,IAAA,GAAO,MAAM,KAAA,CAAM,QAAA;AACzB,IAAA,IAAI,IAAA,KAAS,eAAe,IAAA,EAAM;AAChC,MAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,MAAA,MAAM,CAAA,GAAI,MAAA,CAAO,OAAA,GAAU,CAAC,CAAA,IAAK,CAAA;AACjC,MAAA,MAAM,CAAA,GAAI,MAAA,CAAO,OAAA,GAAU,CAAA,GAAI,CAAC,CAAA,IAAK,CAAA;AACrC,MAAA,OAAO,KAAA,CAAM,IAAA,CAAM,IAAA,CAAK,CAAA,EAAG,CAAC,CAAA;AAAA,IAC9B;AACA,IAAA,IAAI,IAAA,KAAS,eAAe,MAAA,EAAQ;AAClC,MAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,MAAA,MAAM,CAAA,GAAI,MAAA,CAAO,OAAA,GAAU,CAAC,CAAA,IAAK,CAAA;AACjC,MAAA,MAAM,CAAA,GAAI,MAAA,CAAO,OAAA,GAAU,CAAA,GAAI,CAAC,CAAA,IAAK,CAAA;AACrC,MAAA,OAAO,KAAA,CAAM,IAAA,CAAM,SAAA,CAAU,CAAA,EAAG,CAAC,CAAA;AAAA,IACnC;AACA,IAAA,IAAI,IAAA,KAAS,eAAe,QAAA,EAAU;AACpC,MAAA,OAAO,MAAM,UAAA,CAAY,MAAA,CAAQ,MAAM,MAAA,CAAuB,OAAO,KAAK,CAAC,CAAA;AAAA,IAC7E;AACA,IAAA,IAAI,IAAA,KAAS,eAAe,IAAA,EAAM;AAChC,MAAA,OAAA,CAAS,KAAA,CAAM,MAAA,CAAsB,OAAO,CAAA,IAAK,CAAA,MAAO,CAAA;AAAA,IAC1D;AACA,IAAA,IAAI,IAAA,KAAS,cAAA,CAAe,KAAA,IAAS,IAAA,KAAS,eAAe,MAAA,EAAQ;AACnE,MAAA,OAAQ,KAAA,CAAM,MAAA,CAAyB,OAAO,CAAA,IAAK,EAAA;AAAA,IACrD;AACA,IAAA,OAAQ,KAAA,CAAM,MAAA,CAA6E,OAAO,CAAA,IAAK,CAAA;AAAA,EACzG;AAAA;AAAA,EAIQ,eAAA,CACN,GAAA,EACA,GAAA,EACA,KAAA,EACM;AACN,IAAA,MAAM,SAAS,GAAA,CAAI,kBAAA;AAInB,IAAA,KAAA,MAAW,CAAC,GAAG,CAAA,IAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzC,MAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,GAAG,CAAA,EAAG;AACpB,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,CAAA,eAAA,EAAkB,GAAG,CAAA,aAAA,EAAgB,GAAA,CAAI,OAAO,IAAI,CAAA,CAAA;AAAA,SACtD;AAAA,MACF;AAAA,IACF;AACA,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,EAAE,CAAA,IAAK,MAAA,EAAQ;AAC/B,MAAA,MAAM,CAAA,GAAI,MAAM,IAAI,CAAA;AACpB,MAAA,IAAI,MAAM,MAAA,EAAW;AACnB,QAAA,IAAI,CAAC,EAAA,CAAG,MAAA,CAAO,QAAA,EAAU;AACvB,UAAA,MAAM,IAAI,eAAA;AAAA,YACR,CAAA,QAAA,EAAW,GAAA,CAAI,MAAA,CAAO,IAAI,YAAY,IAAI,CAAA,aAAA;AAAA,WAC5C;AAAA,QACF;AACA,QAAA,IAAA,CAAK,SAAA,CAAU,EAAA,EAAI,GAAA,EAAK,IAAI,CAAA;AAAA,MAC9B,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,SAAA,CAAU,EAAA,EAAI,GAAA,EAAK,CAAqB,CAAA;AAAA,MAC/C;AACA,MAAA,EAAA,CAAG,OAAA,GAAW,EAAA,CAAG,OAAA,GAAU,CAAA,KAAO,CAAA;AAAA,IACpC;AAAA,EACF;AAAA,EAEQ,cAAA,CAAe,KAAmB,GAAA,EAAsC;AAC9E,IAAA,MAAM,SAAS,GAAA,CAAI,kBAAA;AACnB,IAAA,MAAM,MAA+B,EAAC;AACtC,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,EAAE,CAAA,IAAK,MAAA,EAAQ;AAC/B,MAAA,GAAA,CAAI,IAAI,CAAA,GAAI,IAAA,CAAK,QAAA,CAAS,IAAI,GAAG,CAAA;AAAA,IACnC;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEQ,YAAY,GAAA,EAAuB;AACzC,IAAA,MAAM,MAAgB,EAAC;AACvB,IAAA,KAAA,MAAW,GAAA,IAAO,KAAK,UAAA,EAAY;AACjC,MAAA,GAAA,CAAI,IAAI,MAAA,CAAO,IAAI,IAAI,IAAA,CAAK,QAAA,CAAS,KAAK,GAAG,CAAA;AAAA,IAC/C;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEQ,YAAA,CAAa,OAAgB,KAAA,EAAuB;AAC1D,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,IAAK,KAAA,GAAQ,CAAA,IAAK,KAAA,GAAQ,UAAA,EAAY;AAC5F,MAAA,MAAM,IAAI,gBAAgB,CAAA,CAAA,EAAI,KAAK,2BAA2B,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,IAC/E;AACA,IAAA,OAAO,KAAA,KAAU,CAAA;AAAA,EACnB;AAAA,EAEQ,gBAAA,CAAiB,OAAgB,KAAA,EAAuB;AAC9D,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,KAAa,UAAU,CAAA,IAAK,KAAA,KAAU,IAAI,OAAO,KAAA;AACtE,IAAA,MAAM,IAAI,gBAAgB,CAAA,CAAA,EAAI,KAAK,0BAA0B,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,EAC9E;AACF;AAMA,SAAS,YAAY,QAAA,EAA0B;AAC7C,EAAA,OAAQ,WAAW,CAAA,KAAO,CAAA;AAC5B;AAQA,SAAS,mBAAA,CACP,KACA,SAAA,EACY;AACZ,EAAA,MAAM,EAAA,GAAK,IAAI,MAAA,CAAO,QAAA;AACtB,EAAA,IAAI,OAAO,cAAA,CAAe,MAAA,EAAQ,OAAO,IAAI,WAAW,CAAC,CAAA;AACzD,EAAA,IAAI,UAAA;AACJ,EAAA,IACE,EAAA,KAAO,cAAA,CAAe,IAAA,IACtB,EAAA,KAAO,eAAe,MAAA,IACtB,EAAA,KAAO,cAAA,CAAe,IAAA,IACtB,EAAA,KAAO,cAAA,CAAe,UAAA,IACtB,EAAA,KAAO,eAAe,OAAA,EACtB;AACA,IAAA,UAAA,GAAa,SAAA,GAAY,CAAA;AAAA,EAC3B,CAAA,MAAO;AACL,IAAA,UAAA,GAAa,SAAA,GAAY,IAAI,MAAA,CAAO,SAAA;AAAA,EACtC;AACA,EAAA,MAAM,SAAS,GAAA,CAAI,MAAA;AACnB,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,MAAA,CAAO,QAAQ,MAAA,CAAO,UAAA,EAAY,OAAO,UAAU,CAAA;AAC9E,EAAA,OAAO,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,UAAU,CAAA;AAChC;AASA,SAAS,sBAAA,CACP,YACA,KAAA,EACU;AACV,EAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AACpB,EAAA,MAAM,KAAK,KAAA,CAAM,QAAA;AACjB,EAAA,MAAM,eAAe,KAAA,CAAM,MAAA;AAC3B,EAAA,MAAM,UAAA,GACJ,OAAO,cAAA,CAAe,IAAA,IAAQ,OAAO,cAAA,CAAe,MAAA,GAAS,IAAI,KAAA,CAAM,SAAA;AACzE,EAAA,MAAM,eAAe,YAAA,GAAe,UAAA;AACpC,EAAA,MAAM,MAAM,IAAI,UAAA;AAAA,IACd,MAAM,MAAA,CAAO,MAAA;AAAA,IACb,MAAM,MAAA,CAAO,UAAA;AAAA,IACb,MAAM,MAAA,CAAO;AAAA,GACf;AACA,EAAA,MAAM,OAAA,GAAU,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,YAAY,CAAA;AACzC,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,QAAA,GACnB,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,EAAI,YAAA,GAAe,CAAA,KAAO,CAAC,CAAA,GAChD,IAAA;AACJ,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA;AAC1E,EAAA,MAAM,oBAAoB,KAAA,CAAM,UAAA,GAC5B,CAAC,GAAG,MAAM,UAAA,CAAW,OAAA,EAAS,CAAA,CAAE,IAAI,CAAC,GAAG,CAAC,CAAA,KAAM,CAAC,CAAA,GAChD,IAAA;AACJ,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,GAAG,UAAU,CAAA,MAAA,CAAA;AAAA,IACnB,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,QAAA,EAAU,EAAA;AAAA,IACV,UAAU,KAAA,CAAM,QAAA;AAAA,IAChB,QAAA;AAAA,IACA,aAAA,EAAe,OAAA;AAAA,IACf,IAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,WAAA,CAAY,MAAA,EAAoB,GAAA,EAAa,KAAA,EAAsB;AAC1E,EAAA,MAAM,OAAO,GAAA,KAAQ,CAAA;AACrB,EAAA,MAAM,GAAA,GAAM,MAAM,GAAA,GAAM,CAAA,CAAA;AACxB,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,IAAI,CAAA,IAAK,CAAA;AAC5B,EAAA,MAAA,CAAO,IAAI,IAAI,KAAA,GAAA,CAAS,GAAA,GAAM,OAAO,GAAA,GAAQ,GAAA,GAAM,CAAC,GAAA,GAAO,GAAA;AAC7D;AAEA,SAAS,WAAA,CAAY,QAAoB,GAAA,EAAsB;AAC7D,EAAA,MAAM,OAAO,GAAA,KAAQ,CAAA;AACrB,EAAA,MAAM,GAAA,GAAM,MAAM,GAAA,GAAM,CAAA,CAAA;AACxB,EAAA,OAAA,CAAA,CAAS,MAAA,CAAO,IAAI,CAAA,IAAK,CAAA,IAAK,GAAA,MAAS,CAAA;AACzC;AAEA,SAAS,eAAA,CACP,IAAA,EACA,MAAA,EACA,UAAA,EACAC,OAAAA,EACiB;AACjB,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,cAAA,CAAe,IAAA;AAAA,IACpB,KAAK,cAAA,CAAe,KAAA;AAClB,MAAA,OAAO,IAAI,UAAA,CAAW,MAAA,EAAQ,UAAA,EAAYA,OAAM,CAAA;AAAA,IAClD,KAAK,cAAA,CAAe,IAAA;AAClB,MAAA,OAAO,IAAI,SAAA,CAAU,MAAA,EAAQ,UAAA,EAAYA,OAAM,CAAA;AAAA,IACjD,KAAK,cAAA,CAAe,KAAA;AAClB,MAAA,OAAO,IAAI,UAAA,CAAW,MAAA,EAAQ,UAAA,EAAYA,OAAM,CAAA;AAAA,IAClD,KAAK,cAAA,CAAe,MAAA;AAClB,MAAA,OAAO,IAAI,WAAA,CAAY,MAAA,EAAQ,UAAA,EAAYA,OAAM,CAAA;AAAA,IACnD,KAAK,cAAA,CAAe,KAAA;AAClB,MAAA,OAAO,IAAI,UAAA,CAAW,MAAA,EAAQ,UAAA,EAAYA,OAAM,CAAA;AAAA,IAClD,KAAK,cAAA,CAAe,MAAA;AAClB,MAAA,OAAO,IAAI,WAAA,CAAY,MAAA,EAAQ,UAAA,EAAYA,OAAM,CAAA;AAAA,IACnD,KAAK,cAAA,CAAe,OAAA;AAClB,MAAA,OAAO,IAAI,YAAA,CAAa,MAAA,EAAQ,UAAA,EAAYA,OAAM,CAAA;AAAA,IACpD,KAAK,cAAA,CAAe,OAAA;AAClB,MAAA,OAAO,IAAI,YAAA,CAAa,MAAA,EAAQ,UAAA,EAAYA,OAAM,CAAA;AAAA,IACpD,KAAK,cAAA,CAAe,KAAA;AAClB,MAAA,OAAO,IAAI,aAAA,CAAc,MAAA,EAAQ,UAAA,EAAYA,OAAM,CAAA;AAAA,IACrD,KAAK,cAAA,CAAe,MAAA;AAClB,MAAA,OAAO,IAAI,cAAA,CAAe,MAAA,EAAQ,UAAA,EAAYA,OAAM,CAAA;AAAA,IACtD,KAAK,cAAA,CAAe,IAAA;AAAA,IACpB,KAAK,cAAA,CAAe,MAAA;AAAA,IACpB,KAAK,cAAA,CAAe,QAAA;AAAA,IACpB,KAAK,cAAA,CAAe,IAAA;AAAA,IACpB,KAAK,cAAA,CAAe,MAAA;AAAA,IACpB,KAAK,cAAA,CAAe,KAAA;AAAA,IACpB,KAAK,cAAA,CAAe,UAAA;AAAA,IACpB,KAAK,cAAA,CAAe,OAAA;AAGlB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+CAAA,EAAkD,IAAI,CAAA,CAAE,CAAA;AAAA;AAE9E;;;AC/mGO,SAAS,iBAGd,MAAA,EAAqD;AACrD,EAAA,IAAI,MAAA,KAAW,IAAA,IAAQ,OAAO,MAAA,KAAW,QAAA,EAAU;AACjD,IAAA,MAAM,IAAI,UAAU,4CAA4C,CAAA;AAAA,EAClE;AAEA,EAAA,MAAM,WAAW,MAAA,CAAO,MAAA;AACxB,EAAA,IACE,QAAA,KAAa,IAAA,IACb,OAAO,QAAA,KAAa,QAAA,IACpB,EAAE,YAAA,IAAgB,QAAA,CAAA,IAClB,EAAE,SAAA,IAAa,QAAA,CAAA,EACf;AACA,IAAA,MAAM,IAAI,SAAA;AAAA,MACR;AAAA,KAGF;AAAA,EACF;AAEA,EAAA,IACE,OAAO,MAAA,CAAO,QAAA,KAAa,QAAA,IAC3B,CAAC,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,QAAQ,CAAA,IAChC,MAAA,CAAO,QAAA,IAAY,CAAA,EACnB;AACA,IAAA,MAAM,IAAI,UAAA;AAAA,MACR;AAAA,KAEF;AAAA,EACF;AAGA,EAAA,MAAM,IAAA,GAA0B;AAAA,IAC9B,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,GAAI,OAAO,YAAA,KAAiB,MAAA,GACxB,EAAE,YAAA,EAAc,MAAA,CAAO,YAAA,EAAa,GACpC,EAAC;AAAA,IACL,GAAI,OAAO,UAAA,KAAe,MAAA,GACtB,EAAE,UAAA,EAAY,MAAA,CAAO,UAAA,EAAW,GAChC,EAAC;AAAA,IACL,GAAI,OAAO,EAAA,KAAO,MAAA,GAAY,EAAE,EAAA,EAAI,MAAA,CAAO,EAAA,EAAG,GAAI,EAAC;AAAA,IACnD,GAAI,OAAO,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,MAAA,CAAO,KAAA,EAAM,GAAI,EAAC;AAAA,IAC5D,GAAI,OAAO,cAAA,KAAmB,MAAA,GAC1B,EAAE,cAAA,EAAgB,MAAA,CAAO,cAAA,EAAe,GACxC,EAAC;AAAA,IACL,GAAI,OAAO,SAAA,KAAc,MAAA,GAAY,EAAE,SAAA,EAAW,MAAA,CAAO,SAAA,EAAU,GAAI,EAAC;AAAA,IACxE,GAAI,OAAO,gBAAA,KAAqB,MAAA,GAC5B,EAAE,gBAAA,EAAkB,MAAA,CAAO,gBAAA,EAAwD,GACnF,EAAC;AAAA,IACL,GAAI,OAAO,YAAA,KAAiB,MAAA,GAAY,EAAE,YAAA,EAAc,MAAA,CAAO,YAAA,EAAa,GAAI;AAAC,GACnF;AAEA,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,MAAA,CAAO,QAAA,EAA4B,IAAI,CAAA;AAI/D,EAAA,MAAM,OAA2B,EAAC;AAClC,EAAA,IAAI,MAAA,CAAO,IAAA,KAAS,MAAA,EAAW,IAAA,CAAK,OAAO,MAAA,CAAO,IAAA;AAClD,EAAA,IAAI,OAAO,QAAA,KAAa,MAAA;AACtB,IAAA,IAAA,CAAK,WAAW,MAAA,CAAO,QAAA;AACzB,EAAA,IAAI,OAAO,QAAA,KAAa,MAAA;AACtB,IAAA,IAAA,CAAK,WAAW,MAAA,CAAO,QAAA;AACzB,EAAA,IAAI,OAAO,QAAA,KAAa,MAAA;AACtB,IAAA,IAAA,CAAK,WAAW,MAAA,CAAO,QAAA;AACzB,EAAA,IAAI,OAAO,MAAA,KAAW,MAAA;AACpB,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA;AAGvB,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,MAAA,EAAW,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA;AACtD,EAAA,IAAI,MAAA,CAAO,SAAA,KAAc,MAAA,EAAW,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AAC5D,EAAA,IAAI,MAAA,CAAO,QAAA,KAAa,MAAA,EAAW,IAAA,CAAK,WAAW,MAAA,CAAO,QAAA;AAC1D,EAAA,IAAI,MAAA,CAAO,SAAA,KAAc,MAAA,EAAW,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AAC5D,EAAA,IAAI,OAAO,gBAAA,KAAqB,MAAA;AAC9B,IAAA,IAAA,CAAK,mBAAmB,MAAA,CAAO,gBAAA;AACjC,EAAA,qBAAA,CAAsB,MAAM,IAAI,CAAA;AAEhC,EAAA,MAAM,cAAe,MAAA,CAA4D,WAAA;AACjF,EAAA,IAAI,gBAAgB,MAAA,EAAW;AAC7B,IAAA,MAAM,cAAA,GAAiB,IAAA;AAGvB,IAAA,KAAA,MAAW,QAAQ,WAAA,EAAa;AAC9B,MAAA,cAAA,CAAe,UAAU,IAAgB,CAAA;AAAA,IAC3C;AAAA,EACF;AAEA,EAAA,IAAI,MAAA,CAAO,cAAc,IAAA,EAAM;AAC7B,IAAA,IAAA,CAAK,kBAAA,EAAmB;AAAA,EAC1B;AAEA,EAAA,OAAO,IAAA;AACT;;;AC1JA,SAASoB,eAAc,KAAA,EAA+C;AACpE,EAAA,OACE,KAAA,KAAU,IAAA,KACT,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,UAAA,CAAA,IAC/C,OAAQ,KAAA,CAA6B,IAAA,KAAS,UAAA;AAElD;AASO,SAAS,uBAId,OAAA,EAC2C;AAC3C,EAAA,MAAM,EAAE,UAAA,EAAY,QAAA,EAAU,GAAG,QAAO,GAAI,OAAA;AAE5C,EAAA,OAAO,CAAC,SAAA,KAA0B;AAChC,IAAA,MAAM,cAAc,iBAAA,CAAqB;AAAA,MACvC,GAAG,MAAA;AAAA,MACH,UAAA,EAAY,OAAO,MAAA,KAAW,UAAA,CAAW,WAAW,MAAM;AAAA,KAC3D,CAAA;AAED,IAAA,WAAA,CAAY,OAAO,MAAM;AACvB,MAAA,MAAM,YAAA,GAAe,SAAS,SAAS,CAAA;AACvC,MAAA,IAAIA,cAAAA,CAAc,YAAY,CAAA,EAAG;AAC/B,QAAA,MAAM,IAAI,8BAAA,EAA+B;AAAA,MAC3C;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO,WAAA;AAAA,EACT,CAAA;AACF;;;ACnCO,SAAS,qBAGd,MAAA,EAAwF;AACxF,EAAA,MAAM,EAAE,QAAA,EAAU,UAAA,EAAY,QAAA,EAAU,GAAG,mBAAkB,GAAI,MAAA;AACjE,EAAA,IAAI,iBAAA,GAA2C,IAAA;AAE/C,EAAA,MAAM,iBAAiB,MAAsB;AAC3C,IAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAI,iBAAA,CAAkB,UAAU,SAAA,EAAW;AACzC,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,6DAAA,EAAgE,kBAAkB,KAAK,CAAA,sBAAA;AAAA,OACzF;AAAA,IACF;AAEA,IAAA,MAAM,UAAA,GAAa,iBAAA;AACnB,IAAA,iBAAA,GAAoB,IAAA;AACpB,IAAA,KAAK,UAAA,CAAW,MAAA,EAAO,CAAE,KAAA,CAAM,MAAM;AAAA,IAAC,CAAC,CAAA;AACvC,IAAA,OAAO,UAAA;AAAA,EACT,CAAA;AAEA,EAAA,OAAO,CAAC,SAAA,KAA0B;AAChC,IAAA,IAAI,CAAC,iBAAA,IAAqB,iBAAA,CAAkB,KAAA,KAAU,SAAA,EAAW;AAC/D,MAAA,iBAAA,GAAoB,iBAAA,CAAqB;AAAA,QACvC,GAAG,iBAAA;AAAA,QACH,UAAA;AAAA,QACA,UAAA,EAAY;AAAA,OACb,CAAA;AAAA,IACH;AAEA,IAAA,iBAAA,CAAkB,OAAO,MAAM;AAC7B,MAAA,QAAA,CAAS,SAAS,CAAA;AAAA,IACpB,CAAC,CAAA;AAED,IAAA,MAAM,UAAA,GAAa,iBAAA;AACnB,IAAA,IAAI,QAAA,CAAS,UAAU,OAAA,EAAS;AAC9B,MAAA,MAAM,UAAA,GAAa,iBAAA;AACnB,MAAA,iBAAA,GAAoB,IAAA;AACpB,MAAA,QAAA,CAAS,QAAQ,MAAM;AACrB,QAAA,KAAK,UAAA,CAAW,MAAA,EAAO,CAAE,KAAA,CAAM,MAAM;AAAA,QAAC,CAAC,CAAA;AACvC,QAAA,OAAO,UAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,QAAA,CAAS,QAAQ,cAAc,CAAA;AAAA,IACjC;AAEA,IAAA,OAAO,UAAA;AAAA,EACT,CAAA;AACF;;;ACjDA,SAAS,uBAAuB,KAAA,EAAkC;AAChE,EAAA,MAAM,KAAA,GAAQ,KAAA;AACd,EAAA,OAAO,KAAA,EAAO,WAAA,EAAa,OAAA,IAAW,OAAA,CAAQ,OAAA,EAAQ;AACxD;AAEO,SAAS,iBAAiB,OAAA,EAAoD;AACnF,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,MAAA;AACJ,EAAA,MAAM,OAAA,GAAU,QAAQ,OAAA,IAAW,KAAA;AACnC,EAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,IAAA;AAErC,EAAA,MAAM,QAAQ,MAAY;AACxB,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,KAAA,GAAQ,MAAA;AAAA,IACV;AAAA,EACF,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,UAAA;AAAA,IACP,OAAA;AAAA,IACA,OAAA,EAAS,CAAC,EAAA,KAAO;AACf,MAAA,MAAM,UAAA,GAAa,WAAW,KAAA,KAAU,MAAA;AACxC,MAAA,MAAA,GAAS,EAAA;AACT,MAAA,KAAA,EAAM;AAEN,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,MAAA,EAAO;AACP,QAAA,MAAA,GAAS,MAAA;AAAA,MACX;AAEA,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,KAAA,GAAQ,WAAW,MAAM;AACvB,UAAA,KAAA,GAAQ,MAAA;AACR,UAAA,MAAM,QAAA,GAAW,MAAA;AACjB,UAAA,MAAA,GAAS,MAAA;AACT,UAAA,QAAA,IAAW;AAAA,QACb,CAAA,EAAG,QAAQ,IAAI,CAAA;AAAA,MACjB;AAAA,IACF,CAAA;AAAA,IACA,SAAS,MAAM;AACb,MAAA,KAAA,EAAM;AACN,MAAA,MAAA,GAAS,MAAA;AAAA,IACX;AAAA,GACF;AACF;AAEO,SAAS,iBAAiB,OAAA,EAAoD;AACnF,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,OAAA,GAAU,CAAA;AACd,EAAA,MAAM,OAAA,GAAU,QAAQ,OAAA,IAAW,IAAA;AACnC,EAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,IAAA;AAErC,EAAA,MAAM,QAAQ,MAAY;AACxB,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,KAAA,GAAQ,MAAA;AAAA,IACV;AAAA,EACF,CAAA;AAEA,EAAA,MAAML,IAAAA,GAAM,CAAC,EAAA,KAA+B;AAC1C,IAAA,OAAA,GAAU,KAAK,GAAA,EAAI;AACnB,IAAA,EAAA,EAAG;AAAA,EACL,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,UAAA;AAAA,IACP,OAAA;AAAA,IACA,OAAA,EAAS,CAAC,EAAA,KAAO;AACf,MAAA,MAAM,QAAA,GAAW,EAAA;AACjB,MAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,MAAA,IAAI,OAAA,KAAY,CAAA,IAAK,CAAC,OAAA,EAAS;AAC7B,QAAA,OAAA,GAAU,GAAA;AAAA,MACZ;AAEA,MAAA,MAAM,UAAU,GAAA,GAAM,OAAA;AACtB,MAAA,IAAK,OAAA,KAAY,CAAA,IAAK,OAAA,IAAY,OAAA,IAAW,QAAQ,IAAA,EAAM;AACzD,QAAA,KAAA,EAAM;AACN,QAAA,MAAA,GAAS,MAAA;AACT,QAAAA,KAAI,QAAQ,CAAA;AACZ,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,CAAC,QAAA,EAAU;AACf,MAAA,MAAA,GAAS,QAAA;AACT,MAAA,IAAI,UAAU,MAAA,EAAW;AACzB,MAAA,KAAA,GAAQ,WAAW,MAAM;AACvB,QAAA,KAAA,GAAQ,MAAA;AACR,QAAA,MAAM,OAAA,GAAU,MAAA;AAChB,QAAA,MAAA,GAAS,MAAA;AACT,QAAA,IAAI,OAAA,EAASA,IAAAA,CAAI,OAAO,CAAA;AAAA,MAC1B,GAAG,IAAA,CAAK,GAAA,CAAI,GAAG,OAAA,CAAQ,IAAA,GAAO,OAAO,CAAC,CAAA;AAAA,IACxC,CAAA;AAAA,IACA,SAAS,MAAM;AACb,MAAA,KAAA,EAAM;AACN,MAAA,MAAA,GAAS,MAAA;AAAA,IACX;AAAA,GACF;AACF;AAEO,SAAS,cAAc,OAAA,EAA+C;AAC3E,EAAA,IAAI,OAAA,GAAU,KAAA;AACd,EAAA,IAAI,OAAA,GAAU,KAAA;AACd,EAAA,IAAI,KAAA;AACJ,EAAA,MAAM,QAAiC,EAAC;AACxC,EAAA,MAAM,IAAA,GAAO,SAAS,IAAA,IAAQ,CAAA;AAC9B,EAAA,MAAM,UAAA,GAAa,SAAS,UAAA,IAAc,MAAA;AAC1C,EAAA,MAAM,YAAA,GAAe,SAAS,YAAA,IAAgB,OAAA;AAE9C,EAAA,MAAM,QAAQ,MAAY;AACxB,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,KAAA,GAAQ,MAAA;AAAA,IACV;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,QAAA,GAAW,MACf,YAAA,KAAiB,OAAA,GAAU,MAAM,KAAA,EAAM,GAAI,MAAM,GAAA,EAAI;AAEvD,EAAA,MAAM,QAAA,GAAW,CAAC,QAAA,KAA+B;AAC/C,IAAA,IAAI,OAAO,CAAA,EAAG;AACZ,MAAA,KAAA,GAAQ,UAAA,CAAW,UAAU,IAAI,CAAA;AACjC,MAAA;AAAA,IACF;AACA,IAAA,QAAA,EAAS;AAAA,EACX,CAAA;AAEA,EAAA,MAAM,cAAc,MAAY;AAC9B,IAAA,IAAI,WAAW,OAAA,EAAS;AACxB,IAAA,MAAM,OAAO,QAAA,EAAS;AACtB,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,OAAA,GAAU,IAAA;AAEV,IAAA,IAAI,WAAA;AACJ,IAAA,IAAI;AACF,MAAA,WAAA,GAAc,sBAAA,CAAuB,MAAM,CAAA;AAAA,IAC7C,CAAA,CAAA,MAAQ;AACN,MAAA,WAAA,GAAc,QAAQ,OAAA,EAAQ;AAAA,IAChC;AAEA,IAAA,WAAA,CACG,KAAA,CAAM,MAAM,MAAS,CAAA,CACrB,QAAQ,MAAM;AACb,MAAA,OAAA,GAAU,KAAA;AACV,MAAA,IAAI,CAAC,OAAA,IAAW,KAAA,CAAM,MAAA,GAAS,CAAA,WAAY,WAAW,CAAA;AAAA,IACxD,CAAC,CAAA;AAAA,EACL,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,OAAA;AAAA,IACP,GAAI,OAAA,KAAY,MAAA,GAAY,EAAE,OAAA,KAAY,EAAC;AAAA,IAC3C,OAAA,EAAS,CAAC,EAAA,KAAO;AACf,MAAA,IAAI,OAAA,EAAS;AACb,MAAA,IAAI,SAAS,OAAA,KAAY,MAAA,IAAa,KAAA,CAAM,MAAA,IAAU,QAAQ,OAAA,EAAS;AACvE,MAAA,IAAI,UAAA,KAAe,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,EAAsB,CAAA;AAAA,WAC3D,KAAA,CAAM,KAAK,EAAsB,CAAA;AACtC,MAAA,WAAA,EAAY;AAAA,IACd,CAAA;AAAA,IACA,SAAS,MAAM;AACb,MAAA,OAAA,GAAU,IAAA;AACV,MAAA,KAAA,EAAM;AACN,MAAA,KAAA,CAAM,MAAA,GAAS,CAAA;AAAA,IACjB;AAAA,GACF;AACF;;;ACtKA,IAAI,oBAAA,GAAuB,CAAA;AAE3B,SAAS,2BAAA,GAAsC;AAC7C,EAAA,OACE,UAAA,CAAW,QAAQ,UAAA,IAAa,IAChC,cAAc,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA,EAAI,oBAAA,EAAsB,CAAA,CAAA;AAEtD;AAEA,SAAS,yBAAA,CACP,WACA,YAAA,EACiD;AACjD,EAAA,OAAO,UAAU,MAAA,CAAO,CAAC,aAAa,QAAA,CAAS,UAAA,CAAW,OAAO,YAAY,CAAA;AAC/E;AAEO,SAAS,2BAId,MAAA,EAC2C;AAC3C,EAAA,MAAM,EAAE,aAAa,QAAA,EAAU,QAAA,EAAU,UAAU,EAAA,EAAI,GAAG,YAAW,GAAI,MAAA;AACzE,EAAA,MAAM,YAAA,GAAe,MAAM,2BAAA,EAA4B;AACvD,EAAA,MAAM,eAAA,GAAkB,CAAC,WAAA,KAEb;AACV,IAAA,KAAK,yBAAA,CAA0B,WAAA,CAAY,SAAA,EAAW,YAAY,CAAA;AAAA,EACpE,CAAA;AAEA,EAAA,MAAM,eAAA,GAA6C,OACjD,MAAA,KACG;AACH,IAAA,OAAQ,MAAM,QAAA,GAAW,MAAM,CAAA,IAAM,EAAC;AAAA,EACxC,CAAA;AACA,EAAA,MAAM,eAAA,GAA6C,OACjD,MAAA,KACG;AACH,IAAA,OAAQ,MAAM,QAAA,GAAW,MAAM,CAAA,IAAM,EAAC;AAAA,EACxC,CAAA;AACA,EAAA,MAAM,eAAA,GAA6C,OACjD,MAAA,KACG;AACH,IAAA,OAAQ,MAAM,QAAA,GAAW,MAAM,CAAA,IAAM,EAAC;AAAA,EACxC,CAAA;AAEA,EAAA,MAAM,OAAA,GAAqD;AAAA,IACzD,GAAG,UAAA;AAAA,IACH,EAAA,EAAI,YAAA;AAAA,IACJ,QAAA,EAAU,eAAA;AAAA,IACV,QAAA,EAAU,eAAA;AAAA,IACV,QAAA,EAAU,eAAA;AAAA,IACV,KAAA,EAAO;AAAA,MACL,eAAA;AAAA,MACA,kCAAA,EAAoC;AAAA,KACtC;AAAA,IACA,SAAA,EAAW,IAAA;AAAA,IACX,MAAA,EAAQ;AAAA,GACV;AACA,EAAA,IAAI,gBAAgB,MAAA,EAAW;AAC7B,IAAA,OAAA,CAAQ,WAAA,GAAc,WAAA;AAAA,EACxB;AACA,EAAA,OAAO,OAAA;AACT;;;AC9CA,SAAS,oBAAA,CAAqB,MAAA,EAAgB,KAAA,EAAgB,SAAA,EAAyB;AACrF,EAAA,IAAI;AACF,IAAA,MAAA,CAAO,UAAU,KAAK,CAAA;AAAA,EACxB,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,SAAA;AAAA,MACA,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,KACvD;AAAA,EACF;AACF;AAEA,SAAS,gBAAA,GAA2B;AAClC,EAAA,OACE,WAAW,MAAA,EAAQ,UAAA,IAAa,IAChC,CAAA,cAAA,EAAiB,KAAK,GAAA,EAAK,CAAA,CAAA,EAAI,IAAA,CAAK,QAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAEtE;AAEA,SAAS,iBAAiB,GAAA,EAAsB;AAC9C,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,EAAU,OAAO,KAAK,GAAG,CAAA,CAAA;AAC5C,EAAA,OAAO,CAAA,EAAA,EAAK,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA;AACzB;AAEA,SAAS,iBAAiB,UAAA,EAAqC;AAC7D,EAAA,IAAI,UAAA,CAAW,WAAW,IAAI,CAAA,SAAU,MAAA,CAAO,UAAA,CAAW,KAAA,CAAM,CAAC,CAAC,CAAA;AAClE,EAAA,IAAI,WAAW,UAAA,CAAW,IAAI,GAAG,OAAO,UAAA,CAAW,MAAM,CAAC,CAAA;AAC1D,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,qBAAA,GAAoC;AAC3C,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAoB;AACxC,EAAA,OAAO;AAAA,IACL,SAAS,CAAC,GAAA,KAAQ,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,IAAK,IAAA;AAAA,IACtC,OAAA,EAAS,CAAC,GAAA,EAAK,KAAA,KAAU;AACvB,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,IACxB,CAAA;AAAA,IACA,UAAA,EAAY,CAAC,GAAA,KAAQ;AACnB,MAAA,OAAA,CAAQ,OAAO,GAAG,CAAA;AAAA,IACpB;AAAA,GACF;AACF;AAEA,SAAS,cAAA,GAA6B;AACpC,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,MAAA,CAAO,YAAA,EAAc;AACxD,IAAA,OAAO,MAAA,CAAO,YAAA;AAAA,EAChB;AACA,EAAA,OAAO,qBAAA,EAAsB;AAC/B;AAEA,SAAS,yBAAA,GAA6C;AACpD,EAAA,OAAO;AAAA,IACL,kBAAkB,MAAM,MAAA;AAAA,IACxB,qBAAqB,MAAM;AAAA,GAC7B;AACF;AAEA,SAAS,sBAAA,GAA0C;AACjD,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,MAAA;AAC1C,EAAA,OAAO,yBAAA,EAA0B;AACnC;AAEA,SAAS,eAAA,CACP,UAAA,EACA,OAAA,EACA,MAAA,EAC4C;AAC5C,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,OAAA,CAAQ,UAAU,CAAA;AACtC,IAAA,IAAI,GAAA,KAAQ,IAAA,EAAM,uBAAO,IAAI,GAAA,EAAI;AAEjC,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AAC/B,IAAA,IAAI,MAAA,KAAW,QAAQ,OAAO,MAAA,KAAW,YAAY,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC1E,MAAA,MAAM,IAAI,gCAAgC,UAAU,CAAA;AAAA,IACtD;AAEA,IAAA,MAAM,GAAA,uBAAU,GAAA,EAAoC;AACpD,IAAA,KAAA,MAAW,CAAC,UAAA,EAAY,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AACxD,MAAA,IACE,KAAA,KAAU,IAAA,IACV,OAAO,KAAA,KAAU,QAAA,IACjB,EAAE,YAAA,IAAgB,KAAA,CAAA,IAClB,EAAE,MAAA,IAAU,KAAA,CAAA,EACZ;AACA,QAAA,MAAM,IAAI,6BAAA,CAA8B,UAAA,EAAY,UAAU,CAAA;AAAA,MAChE;AACA,MAAA,GAAA,CAAI,GAAA,CAAI,gBAAA,CAAiB,UAAU,CAAA,EAAG,KAAsB,CAAA;AAAA,IAC9D;AACA,IAAA,OAAO,GAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN,iEAAiE,UAAU,CAAA,EAAA,CAAA;AAAA,MAC3E;AAAA,KACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,SAAS,aAAA,CACP,UAAA,EACA,OAAA,EACA,MAAA,EACA,IAAA,EACM;AACN,EAAA,MAAM,aAA4C,EAAC;AACnD,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,IAAI,CAAA,IAAK,IAAA,EAAM;AAC9B,IAAA,UAAA,CAAW,gBAAA,CAAiB,GAAG,CAAC,CAAA,GAAI,IAAA;AAAA,EACtC;AACA,EAAA,IAAI,UAAA;AACJ,EAAA,IAAI;AACF,IAAA,UAAA,GAAa,MAAA,CAAO,UAAU,UAAU,CAAA;AAAA,EAC1C,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,eAAA;AAAA,MACA,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,KACvD;AAAA,EACF;AAEA,EAAA,IAAI;AACF,IAAA,OAAA,CAAQ,OAAA,CAAQ,YAAY,UAAU,CAAA;AAAA,EACxC,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,IAAI,YAAA;AAAA,MACR,CAAA,uCAAA,EAA0C,UAAU,CAAA,GAAA,EAClD,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CACvD,CAAA;AAAA,KACF;AAAA,EACF;AACF;AAEA,SAAS,iBAAA,CAAkB,SAAqB,UAAA,EAA4B;AAC1E,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,OAAA,CAAQ,UAAU,CAAA;AACtC,EAAA,IAAI,CAAC,KAAK,OAAO,CAAA;AACjB,EAAA,OAAO,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,GAAG,CAAA,CAAE,UAAA;AACvC;AAEA,SAASM,0BAAAA,CACP,WACA,YAAA,EACiD;AACjD,EAAA,OAAO,UAAU,MAAA,CAAO,CAAC,aAAa,QAAA,CAAS,UAAA,CAAW,OAAO,YAAY,CAAA;AAC/E;AAEA,SAAS,mBAAA,CACP,MACA,QAAA,EACM;AACN,EAAA,MAAM,MAAM,QAAA,CAAS,GAAA;AACrB,EAAA,IAAI,QAAA,CAAS,SAAS,QAAA,EAAU;AAC9B,IAAA,IAAA,CAAK,OAAO,GAAG,CAAA;AACf,IAAA;AAAA,EACF;AACA,EAAA,IAAA,CAAK,IAAI,GAAA,EAAK;AAAA,IACZ,YAAY,gBAAA,EAAiB;AAAA,IAC7B,MAAM,QAAA,CAAS;AAAA,GAChB,CAAA;AACH;AAEO,SAAS,8BAId,MAAA,EAC8C;AAC9C,EAAA,IAAI,CAAC,MAAA,CAAO,UAAA,EAAY,MAAM,IAAI,uBAAA,EAAwB;AAE1D,EAAA,MAAM;AAAA,IACJ,UAAA;AAAA,IACA,UAAU,cAAA,EAAe;AAAA,IACzB,kBAAkB,sBAAA,EAAuB;AAAA,IACzC,MAAA,GAAS,IAAA;AAAA,IACT,QAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,EAAA;AAAA,IACA,MAAA;AAAA,IACA,GAAG;AAAA,GACL,GAAI,MAAA;AAEJ,EAAA,MAAM,YAAA,GAAe,EAAA,IAAM,CAAA,iBAAA,EAAoB,UAAU,CAAA,CAAA;AACzD,EAAA,MAAM,cAAA,GAAiB,CAAC,IAAA,KAAkB;AACxC,IAAA,IAAI,MAAA,EAAQ,OAAO,MAAA,CAAO,IAAI,CAAA;AAC9B,IAAA,OAAQ,IAAA,CAAiC,IAAA;AAAA,EAC3C,CAAA;AACA,EAAA,MAAM,aAAA,uBAAoB,GAAA,EAAoC;AAE9D,EAAA,MAAM,gBAAA,GAAmB,CACvB,SAAA,KACS;AACT,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC5B,IAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,MAAA,MAAM,QAAQ,QAAA,CAAS,IAAA,KAAS,QAAA,GAAW,QAAA,CAAS,WAAW,QAAA,CAAS,QAAA;AACxE,MAAA,oBAAA,CAAqB,MAAA,EAAQ,KAAA,EAAO,QAAA,CAAS,IAAI,CAAA;AAAA,IACnD;AACA,IAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,aAAa,CAAA;AACtC,IAAA,KAAA,MAAW,QAAA,IAAY,SAAA,EAAW,mBAAA,CAAoB,QAAA,EAAU,QAAQ,CAAA;AACxE,IAAA,aAAA,CAAc,UAAA,EAAY,OAAA,EAAS,MAAA,EAAQ,QAAQ,CAAA;AACnD,IAAA,aAAA,CAAc,KAAA,EAAM;AACpB,IAAA,KAAA,MAAW,CAAC,KAAK,IAAI,CAAA,IAAK,UAAU,aAAA,CAAc,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,EACjE,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkE,CAAC,WAAA,KAAgB;AACvF,IAAA,gBAAA,CAAiBA,0BAAAA,CAA0B,WAAA,CAAY,SAAA,EAAW,YAAY,CAAC,CAAA;AAAA,EACjF,CAAA;AAEA,EAAA,MAAM,eAAe,MAAY;AAC/B,IAAA,OAAA,CAAQ,WAAW,UAAU,CAAA;AAC7B,IAAA,aAAA,CAAc,KAAA,EAAM;AAAA,EACtB,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,MAAc,iBAAA,CAAkB,OAAA,EAAS,UAAU,CAAA;AAE1E,EAAA,MAAM,eAAA,GAA6C,OACjD,MAAA,KACG;AACH,IAAA,MAAM,aAAA,GAAiB,MAAM,QAAA,GAAW,MAAM,KAAM,EAAC;AACrD,IAAA,gBAAA;AAAA,MACE,OAAO,WAAA,CAAY;AAAA,KACrB;AACA,IAAA,OAAO,aAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,eAAA,GAA6C,OACjD,MAAA,KACG;AACH,IAAA,MAAM,aAAA,GAAiB,MAAM,QAAA,GAAW,MAAM,KAAM,EAAC;AACrD,IAAA,gBAAA;AAAA,MACE,OAAO,WAAA,CAAY;AAAA,KACrB;AACA,IAAA,OAAO,aAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,eAAA,GAA6C,OACjD,MAAA,KACG;AACH,IAAA,MAAM,aAAA,GAAiB,MAAM,QAAA,GAAW,MAAM,KAAM,EAAC;AACrD,IAAA,gBAAA;AAAA,MACE,OAAO,WAAA,CAAY;AAAA,KACrB;AACA,IAAA,OAAO,aAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,IAAA,GAA4B;AAAA,IAChC,MAAM,CAAC,EAAE,OAAO,KAAA,EAAO,MAAA,EAAQ,WAAU,KAAM;AAC7C,MAAA,MAAM,WAAA,GAAc,eAAA,CAAmB,UAAA,EAAY,OAAA,EAAS,MAAM,CAAA;AAClE,MAAA,IAAI,gBAAgB,IAAA,EAAM;AACxB,QAAA,aAAA,CAAc,KAAA,EAAM;AACpB,QAAA,KAAA,MAAW,CAAC,KAAK,IAAI,CAAA,IAAK,aAAa,aAAA,CAAc,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,MACpE;AAEA,MAAA,IAAI,aAAA,CAAc,OAAO,CAAA,EAAG;AAC1B,QAAA,KAAA,EAAM;AACN,QAAA,KAAA,MAAW,IAAA,IAAQ,aAAA,CAAc,MAAA,EAAO,EAAG;AACzC,UAAA,KAAA,CAAM;AAAA,YACJ,IAAA,EAAM,QAAA;AAAA,YACN,OAAO,IAAA,CAAK;AAAA,WACb,CAAA;AAAA,QACH;AACA,QAAA,MAAA,EAAO;AAAA,MACT;AACA,MAAA,SAAA,EAAU;AAEV,MAAA,MAAM,wBAAwB,MAAY;AACxC,QAAA,MAAM,IAAA,GAAO,eAAA,CAAmB,UAAA,EAAY,OAAA,EAAS,MAAM,CAAA;AAC3D,QAAA,IAAI,SAAS,IAAA,EAAM;AACnB,QAAA,MAAM,UAID,EAAC;AAEN,QAAA,KAAA,MAAW,CAAC,GAAA,EAAK,OAAO,CAAA,IAAK,aAAA,EAAe;AAC1C,UAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAC7B,UAAA,IAAI,CAAC,QAAA,EAAU;AACb,YAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,cACX,GAAA,EAAK,cAAA,CAAe,OAAA,CAAQ,IAAI,CAAA;AAAA,cAChC,IAAA,EAAM,QAAA;AAAA,cACN,OAAO,OAAA,CAAQ;AAAA,aAChB,CAAA;AAAA,UACH,CAAA,MAAA,IAAW,QAAA,CAAS,UAAA,KAAe,OAAA,CAAQ,UAAA,EAAY;AACrD,YAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,cACX,GAAA,EAAK,cAAA,CAAe,QAAA,CAAS,IAAI,CAAA;AAAA,cACjC,IAAA,EAAM,QAAA;AAAA,cACN,OAAO,QAAA,CAAS;AAAA,aACjB,CAAA;AAAA,UACH;AAAA,QACF;AACA,QAAA,KAAA,MAAW,CAAC,GAAA,EAAK,QAAQ,CAAA,IAAK,IAAA,EAAM;AAClC,UAAA,IAAI,CAAC,aAAA,CAAc,GAAA,CAAI,GAAG,CAAA,EAAG;AAC3B,YAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,cACX,GAAA,EAAK,cAAA,CAAe,QAAA,CAAS,IAAI,CAAA;AAAA,cACjC,IAAA,EAAM,QAAA;AAAA,cACN,OAAO,QAAA,CAAS;AAAA,aACjB,CAAA;AAAA,UACH;AAAA,QACF;AAEA,QAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC1B,QAAA,KAAA,EAAM;AACN,QAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,UAAA,IAAI,MAAA,CAAO,SAAS,QAAA,EAAU;AAC5B,YAAA,KAAA,CAAM,EAAE,GAAA,EAAK,MAAA,CAAO,GAAA,EAAK,IAAA,EAAM,UAAU,CAAA;AAAA,UAC3C,CAAA,MAAO;AACL,YAAA,KAAA,CAAM,EAAE,IAAA,EAAM,MAAA,CAAO,MAAM,KAAA,EAAO,MAAA,CAAO,OAAO,CAAA;AAAA,UAClD;AAAA,QACF;AACA,QAAA,MAAA,EAAO;AAEP,QAAA,aAAA,CAAc,KAAA,EAAM;AACpB,QAAA,KAAA,MAAW,CAAC,KAAK,IAAI,CAAA,IAAK,MAAM,aAAA,CAAc,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,MAC7D,CAAA;AAEA,MAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAA8B;AAC/C,QAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,UAAA,IAAc,KAAA,CAAM,gBAAiB,OAAA,EAAqB;AAC5E,QAAA,qBAAA,EAAsB;AAAA,MACxB,CAAA;AAEA,MAAA,eAAA,CAAgB,gBAAA,CAAiB,WAAW,SAAS,CAAA;AACrD,MAAA,OAAO,MAAM,eAAA,CAAgB,mBAAA,CAAoB,SAAA,EAAW,SAAS,CAAA;AAAA,IACvE;AAAA,GACF;AAEA,EAAA,MAAM,MAAA,GAAuD;AAAA,IAC3D,GAAG,UAAA;AAAA,IACH,EAAA,EAAI,YAAA;AAAA,IACJ,SAAA,EAAW,IAAA;AAAA,IACX,IAAA;AAAA,IACA,QAAA,EAAU,eAAA;AAAA,IACV,QAAA,EAAU,eAAA;AAAA,IACV,QAAA,EAAU,eAAA;AAAA,IACV,KAAA,EAAO;AAAA,MACL,YAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA;AACF,GACF;AACA,EAAA,IAAI,MAAA,KAAW,MAAA,EAAW,MAAA,CAAO,MAAA,GAAS,MAAA;AAC1C,EAAA,OAAO,MAAA;AACT;;;ACzVO,SAAS,QAAA,CAA2B,KAAQ,IAAA,EAAiB;AAClE,EAAA,OAAO,IAAI,MAAM,GAAA,EAAK;AAAA,IACpB,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU;AAC1B,MAAA,IAAI,OAAO,IAAA,KAAS,QAAA,EAAU,IAAA,CAAK,IAAI,IAAI,CAAA;AAC3C,MAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAQ,CAAA;AAAA,IAC3C,CAAA;AAAA;AAAA;AAAA,IAGA,GAAA,CAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,IAAI,OAAO,IAAA,KAAS,QAAA,EAAU,IAAA,CAAK,IAAI,IAAI,CAAA;AAC3C,MAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,IAAI,CAAA;AAAA,IACjC;AAAA,GACD,CAAA;AACH;;;AC+EO,SAAS,EAAE,IAAA,EAAyB;AACzC,EAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAK;AAC7B;AAEA,SAAS,IAAI,KAAA,EAA4B;AACvC,EAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,KAAA,EAAM;AAC9B;AAEA,SAAS,UAAU,CAAA,EAA8B;AAC/C,EAAA,IAAI,MAAM,IAAA,IAAQ,OAAO,MAAM,QAAA,IAAa,CAAA,CAAgB,SAAS,KAAA,EAAO;AAC1E,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAI,CAAW,CAAA;AACxB;AAEO,SAASC,GAAAA,CAAG,GAAqB,CAAA,EAAkC;AACxE,EAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,EAAA,EAAI,IAAA,EAAM,IAAA,EAAM,SAAA,CAAU,CAAC,CAAA,EAAG,KAAA,EAAO,SAAA,CAAU,CAAC,CAAA,EAAE;AAC1E;AACO,SAAS,GAAA,CAAI,GAAqB,CAAA,EAAkC;AACzE,EAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,SAAA,CAAU,CAAC,CAAA,EAAG,KAAA,EAAO,SAAA,CAAU,CAAC,CAAA,EAAE;AAC3E;AACO,SAASC,GAAAA,CAAG,GAAqB,CAAA,EAAkC;AACxE,EAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,EAAA,EAAI,IAAA,EAAM,IAAA,EAAM,SAAA,CAAU,CAAC,CAAA,EAAG,KAAA,EAAO,SAAA,CAAU,CAAC,CAAA,EAAE;AAC1E;AACO,SAASC,IAAAA,CAAI,GAAqB,CAAA,EAAkC;AACzE,EAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,SAAA,CAAU,CAAC,CAAA,EAAG,KAAA,EAAO,SAAA,CAAU,CAAC,CAAA,EAAE;AAC3E;AACO,SAASC,GAAAA,CAAG,GAAqB,CAAA,EAAkC;AACxE,EAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,EAAA,EAAI,IAAA,EAAM,IAAA,EAAM,SAAA,CAAU,CAAC,CAAA,EAAG,KAAA,EAAO,SAAA,CAAU,CAAC,CAAA,EAAE;AAC1E;AACO,SAASC,IAAAA,CAAI,GAAqB,CAAA,EAAkC;AACzE,EAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,EAAA,EAAI,KAAA,EAAO,IAAA,EAAM,SAAA,CAAU,CAAC,CAAA,EAAG,KAAA,EAAO,SAAA,CAAU,CAAC,CAAA,EAAE;AAC3E;AACO,SAASC,QAAO,IAAA,EAA6B;AAClD,EAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAK;AAC7B;AACO,SAASC,OAAM,IAAA,EAA4B;AAChD,EAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAK;AAC5B;AACO,SAASC,KAAI,GAAA,EAA0B;AAC5C,EAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,GAAA,EAAI;AAC5B;AACO,SAASC,QAAO,GAAA,EAA4B;AACjD,EAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,GAAA,EAAK,SAAS,KAAA,EAAM;AAC/C;AACO,SAAS,UAAU,GAAA,EAA4B;AACpD,EAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,GAAA,EAAK,SAAS,IAAA,EAAK;AAC9C;AACO,SAASC,QAAAA,CAAQ,KAAgB,MAAA,EAAmC;AACzE,EAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,GAAA,EAAK,MAAA,EAAO;AACnC;AAWA,SAAS,OAAA,CACP,EAAA,EACA,GAAA,EACA,KAAA,EACA,IAAA,EACc;AACd,EAAA,MAAM,OAAqB,EAAE,IAAA,EAAM,KAAA,EAAO,EAAA,EAAI,KAAK,KAAA,EAAM;AACzD,EAAA,IAAI,IAAA,EAAM,eAAA,EAAkB,IAAA,CAAuC,eAAA,GAAkB,IAAA;AACrF,EAAA,IAAI,IAAA,EAAM,OAAA,EAAU,IAAA,CAA+B,OAAA,GAAU,IAAA;AAC7D,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,QAAA,CAAS,GAAA,EAAgB,KAAA,EAAe,IAAA,EAAsC;AAC5F,EAAA,OAAO,OAAA,CAAQ,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,IAAI,CAAA;AAC7C;AACO,SAAS,UAAA,CAAW,GAAA,EAAgB,KAAA,EAAe,IAAA,EAAsC;AAC9F,EAAA,OAAO,OAAA,CAAQ,YAAA,EAAc,GAAA,EAAK,KAAA,EAAO,IAAI,CAAA;AAC/C;AACO,SAAS,QAAA,CAAS,GAAA,EAAgB,KAAA,EAAe,IAAA,EAAsC;AAC5F,EAAA,OAAO,OAAA,CAAQ,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,IAAI,CAAA;AAC7C;AACO,SAASC,KAAAA,CAAK,GAAA,EAAgB,OAAA,EAAiB,IAAA,EAAsC;AAC1F,EAAA,OAAO,OAAA,CAAQ,MAAA,EAAQ,GAAA,EAAK,OAAA,EAAS,IAAI,CAAA;AAC3C;AACO,SAAS,OAAA,CACd,GAAA,EACA,OAAA,EACA,IAAA,EACc;AACd,EAAA,MAAM,MAAA,GAAS,OAAA,YAAmB,MAAA,GAAS,OAAA,CAAQ,MAAA,GAAS,OAAA;AAC5D,EAAA,MAAM,KAAA,GAAQ,OAAA,YAAmB,MAAA,GAAS,OAAA,CAAQ,KAAA,GAAQ,MAAA;AAC1D,EAAA,MAAM,IAAA,GAAqB,EAAE,IAAA,EAAM,KAAA,EAAO,IAAI,SAAA,EAAW,GAAA,EAAK,OAAO,MAAA,EAAO;AAC5E,EAAA,IAAI,KAAA,KAAU,MAAA,EAAY,IAAA,CAA4B,KAAA,GAAQ,KAAA;AAC9D,EAAA,IAAI,IAAA,EAAM,OAAA,EAAU,IAAA,CAA+B,OAAA,GAAU,IAAA;AAC7D,EAAA,OAAO,IAAA;AACT;AAGO,SAAS,cAAA,CAAe,MAAkB,GAAA,EAAwB;AACvE,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,KAAA;AACH,MAAA,GAAA,CAAI,GAAA,CAAI,KAAK,IAAI,CAAA;AACjB,MAAA;AAAA,IACF,KAAK,KAAA;AACH,MAAA,IAAI,IAAA,CAAK,KAAK,IAAA,KAAS,KAAA,MAAW,GAAA,CAAI,IAAA,CAAK,KAAK,IAAI,CAAA;AACpD,MAAA,IAAI,IAAA,CAAK,MAAM,IAAA,KAAS,KAAA,MAAW,GAAA,CAAI,IAAA,CAAK,MAAM,IAAI,CAAA;AACtD,MAAA;AAAA,IACF,KAAK,KAAA;AAAA,IACL,KAAK,IAAA;AACH,MAAA,KAAA,MAAW,CAAA,IAAK,IAAA,CAAK,IAAA,EAAM,cAAA,CAAe,GAAG,GAAG,CAAA;AAChD,MAAA;AAAA,IACF,KAAK,KAAA;AACH,MAAA,cAAA,CAAe,IAAA,CAAK,KAAK,GAAG,CAAA;AAC5B,MAAA;AAAA,IACF,KAAK,QAAA;AACH,MAAA,GAAA,CAAI,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA;AACrB,MAAA;AAAA,IACF,KAAK,IAAA;AACH,MAAA,GAAA,CAAI,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA;AACrB,MAAA;AAAA,IACF,KAAK,KAAA;AACH,MAAA,GAAA,CAAI,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA;AACrB,MAAA;AAAA;AAEN;;;ACpMO,SAAS,wBAAA,CACd,EAAA,EACA,OAAA,GAA2E,EAAC,EACzD;AACnB,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,GAAG,QAAA,EAAS;AAC3B,IAAA,MAAM,MAAA,GAAS,SAAS,MAAM,CAAA;AAC9B,IAAA,MAAM,SAAS,IAAI,QAAA;AAAA,MACjB,MAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAQ,YAAA,IAAgB,IAAA;AAAA,MACxB,QAAQ,cAAA,IAAkB;AAAA,KAC5B;AACA,IAAA,OAAO,OAAO,aAAA,EAAc;AAAA,EAC9B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAuBA,IAAM,SAAA,GAAY;AAAA,EAChB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA;AACA,IAAM,UAAA,uBAAiB,GAAA,CAAY,CAAC,KAAK,GAAA,EAAK,GAAA,EAAK,GAAG,CAAC,CAAA;AACvD,IAAM,KAAA,mBAAQ,IAAI,GAAA,CAAY,CAAC,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAG,CAAC,CAAA;AAC3E,IAAM,QAAA,uBAAe,GAAA,CAAY,CAAC,QAAQ,OAAA,EAAS,MAAA,EAAQ,WAAA,EAAa,QAAQ,CAAC,CAAA;AAEjF,SAAS,SAAS,GAAA,EAAoB;AACpC,EAAA,MAAM,SAAgB,EAAC;AACvB,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,MAAM,IAAI,GAAA,CAAI,MAAA;AAEd,EAAA,OAAO,IAAI,CAAA,EAAG;AACZ,IAAA,MAAM,EAAA,GAAK,IAAI,CAAC,CAAA;AAGhB,IAAA,IAAI,OAAO,GAAA,IAAO,EAAA,KAAO,OAAQ,EAAA,KAAO,IAAA,IAAQ,OAAO,IAAA,EAAM;AAC3D,MAAA,CAAA,EAAA;AACA,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,OAAO,GAAA,IAAO,GAAA,CAAI,CAAA,GAAI,CAAC,MAAM,GAAA,EAAK;AACpC,MAAA,OAAO,CAAA,GAAI,CAAA,IAAK,GAAA,CAAI,CAAC,MAAM,IAAA,EAAM,CAAA,EAAA;AACjC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,GAAA,IAAO,GAAA,CAAI,CAAA,GAAI,CAAC,MAAM,GAAA,EAAK;AACpC,MAAA,CAAA,IAAK,CAAA;AACL,MAAA,OAAO,CAAA,GAAI,CAAA,IAAK,EAAE,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,IAAO,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,KAAM,GAAA,CAAA,EAAM,CAAA,EAAA;AACzD,MAAA,CAAA,IAAK,CAAA;AACL,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,GAAA,IAAO,OAAO,GAAA,EAAK;AAC1C,MAAA,MAAM,KAAA,GAAQ,EAAA;AACd,MAAA,MAAM,KAAA,GAAQ,CAAA;AACd,MAAA,CAAA,EAAA;AACA,MAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,MAAA,OAAO,CAAA,GAAI,CAAA,IAAK,GAAA,CAAI,CAAC,MAAM,KAAA,EAAO;AAChC,QAAA,IAAI,IAAI,CAAC,CAAA,KAAM,IAAA,IAAQ,CAAA,GAAI,IAAI,CAAA,EAAG;AAEhC,UAAA,MAAM,GAAA,GAAM,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA;AACrB,UAAA,IAAI,GAAA,KAAQ,KAAK,KAAA,IAAS,IAAA;AAAA,eAAA,IACjB,GAAA,KAAQ,KAAK,KAAA,IAAS,GAAA;AAAA,eAAA,IACtB,GAAA,KAAQ,KAAK,KAAA,IAAS,IAAA;AAAA,eAAA,IACtB,GAAA,KAAQ,MAAM,KAAA,IAAS,IAAA;AAAA,eAAA,IACvB,GAAA,KAAQ,KAAK,KAAA,IAAS,GAAA;AAAA,eAAA,IACtB,GAAA,KAAQ,KAAK,KAAA,IAAS,GAAA;AAAA,eAAA,IACtB,GAAA,KAAQ,KAAK,KAAA,IAAS,GAAA;AAAA,eAAA,IACtB,GAAA,KAAQ,KAAK,KAAA,IAAS,IAAA;AAAA,eAC1B,KAAA,IAAS,GAAA;AACd,UAAA,CAAA,IAAK,CAAA;AACL,UAAA;AAAA,QACF;AAEA,QAAA,IAAI,KAAA,KAAU,GAAA,IAAO,GAAA,CAAI,CAAC,CAAA,KAAM,OAAO,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,KAAM,GAAA,EAAK;AACzD,UAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,QACtD;AACA,QAAA,KAAA,IAAS,IAAI,CAAC,CAAA;AACd,QAAA,CAAA,EAAA;AAAA,MACF;AACA,MAAA,IAAI,IAAI,CAAC,CAAA,KAAM,OAAO,MAAM,IAAI,MAAM,qBAAqB,CAAA;AAC3D,MAAA,CAAA,EAAA;AACA,MAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,OAAO,IAAA,EAAM,KAAA,EAAO,OAAO,CAAA;AAC/C,MAAA;AAAA,IACF;AAGA,IAAA,IAAK,EAAA,IAAM,GAAA,IAAO,EAAA,IAAM,GAAA,IAAS,EAAA,KAAO,GAAA,IAAO,OAAA,CAAQ,GAAA,CAAI,CAAA,GAAI,CAAC,CAAC,CAAA,EAAI;AACnE,MAAA,MAAM,KAAA,GAAQ,CAAA;AACd,MAAA,OAAO,CAAA,GAAI,CAAA,KAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAE,CAAA,IAAK,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,IAAO,GAAA,CAAI,CAAC,MAAM,GAAA,IAAO,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,IAAO,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,IAAO,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,CAAA,EAAM;AAE5H,QAAA,MAAM,CAAA,GAAI,IAAI,CAAC,CAAA;AACf,QAAA,IAAA,CAAK,CAAA,KAAM,GAAA,IAAO,CAAA,KAAM,GAAA,KAAQ,EAAE,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,KAAM,GAAA,IAAO,GAAA,CAAI,CAAA,GAAI,CAAC,MAAM,GAAA,CAAA,EAAM;AAC7E,QAAA,CAAA,EAAA;AAAA,MACF;AACA,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO,CAAC,CAAA,EAAG,KAAA,EAAO,CAAA;AAC7D,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,YAAA,CAAa,EAAE,CAAA,EAAG;AACpB,MAAA,MAAM,KAAA,GAAQ,CAAA;AACd,MAAA,OAAO,IAAI,CAAA,IAAK,WAAA,CAAY,GAAA,CAAI,CAAC,CAAE,CAAA,EAAG,CAAA,EAAA;AACtC,MAAA,MAAM,IAAA,GAAO,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO,CAAC,CAAA;AAC/B,MAAA,IAAI,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA,EAAG;AACtB,QAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,OAAO,CAAA;AAAA,MAC9C,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,OAAO,CAAA;AAAA,MAC5C;AACA,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,OAAA,GAAU,KAAA;AACd,IAAA,KAAA,MAAW,MAAM,SAAA,EAAW;AAC1B,MAAA,IAAI,GAAA,CAAI,UAAA,CAAW,EAAA,EAAI,CAAC,CAAA,EAAG;AACzB,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,EAAA,KAAO,IAAA,GAAO,OAAA,GAAU,IAAA,EAAM,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,CAAA,EAAG,CAAA;AACtE,QAAA,CAAA,IAAK,EAAA,CAAG,MAAA;AACR,QAAA,OAAA,GAAU,IAAA;AACV,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,OAAA,EAAS;AAEb,IAAA,IAAI,UAAA,CAAW,GAAA,CAAI,EAAE,CAAA,EAAG;AACtB,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,EAAM,MAAM,EAAA,EAAI,KAAA,EAAO,GAAG,CAAA;AAC9C,MAAA,CAAA,EAAA;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,KAAA,CAAM,GAAA,CAAI,EAAE,CAAA,EAAG;AACjB,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,OAAA,EAAS,MAAM,EAAA,EAAI,KAAA,EAAO,GAAG,CAAA;AACjD,MAAA,CAAA,EAAA;AACA,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iBAAA,EAAoB,EAAE,CAAA,KAAA,EAAQ,CAAC,CAAA,CAAE,CAAA;AAAA,EACnD;AAEA,EAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,EAAO,MAAM,EAAA,EAAI,KAAA,EAAO,GAAG,CAAA;AAC/C,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,QAAQ,CAAA,EAAgC;AAC/C,EAAA,OAAO,CAAA,KAAM,MAAA,IAAa,CAAA,IAAK,GAAA,IAAO,CAAA,IAAK,GAAA;AAC7C;AACA,SAAS,aAAa,CAAA,EAAoB;AACxC,EAAA,OAAQ,CAAA,IAAK,GAAA,IAAO,CAAA,IAAK,GAAA,IAAS,CAAA,IAAK,OAAO,CAAA,IAAK,GAAA,IAAQ,CAAA,KAAM,GAAA,IAAO,CAAA,KAAM,GAAA;AAChF;AACA,SAAS,YAAY,CAAA,EAAoB;AACvC,EAAA,OAAO,YAAA,CAAa,CAAC,CAAA,IAAM,CAAA,IAAK,OAAO,CAAA,IAAK,GAAA;AAC9C;AAMA,IAAM,WAAN,MAAe;AAAA,EAIb,WAAA,CACmB,MAAA,EACjB,OAAA,EACiB,YAAA,EACA,cAAA,EACjB;AAJiB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAEA,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AACA,IAAA,IAAA,CAAA,cAAA,GAAA,cAAA;AAAA,EAChB;AAAA,EAJgB,MAAA;AAAA,EAEA,YAAA;AAAA,EACA,cAAA;AAAA,EAPX,GAAA,GAAM,CAAA;AAAA,EACN,SAAA,GAAY,EAAA;AAAA,EASZ,IAAA,CAAK,MAAM,CAAA,EAAQ;AACzB,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,GAAA,GAAM,GAAG,CAAA,IAAK,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AAAA,EAC1E;AAAA,EACQ,OAAA,GAAe;AACrB,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA;AAC9B,IAAA,IAAA,CAAK,GAAA,EAAA;AACL,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EACQ,YAAY,IAAA,EAAuB;AACzC,IAAA,MAAM,CAAA,GAAI,KAAK,IAAA,EAAK;AACpB,IAAA,IAAI,CAAA,CAAE,SAAS,IAAA,EAAM;AACnB,MAAA,IAAA,CAAK,GAAA,EAAA;AACL,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EACQ,WAAW,IAAA,EAAoB;AACrC,IAAA,IAAI,CAAC,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA,EAAG;AAC3B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,UAAA,EAAa,IAAI,CAAA,WAAA,EAAc,IAAA,CAAK,GAAG,CAAA,CAAE,CAAA;AAAA,IAC3D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,aAAA,GAAmC;AACjC,IAAA,IAAI;AAEF,MAAA,IAAI,IAAA,CAAK,IAAA,EAAK,CAAE,IAAA,KAAS,UAAA,EAAY;AACnC,QAAA,IAAA,CAAK,OAAA,EAAQ;AAEb,QAAA,IAAI,KAAK,IAAA,EAAK,CAAE,IAAA,KAAS,OAAA,OAAc,OAAA,EAAQ;AAC/C,QAAA,IAAA,CAAK,WAAW,GAAG,CAAA;AACnB,QAAA,IAAI,IAAA,CAAK,IAAA,EAAK,CAAE,IAAA,KAAS,SAAS,OAAO,IAAA;AACzC,QAAA,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,OAAA,EAAQ,CAAE,IAAA;AAChC,QAAA,IAAA,CAAK,WAAW,GAAG,CAAA;AACnB,QAAA,IAAA,CAAK,WAAW,GAAG,CAAA;AACnB,QAAA,IAAA,CAAK,WAAW,QAAQ,CAAA;AACxB,QAAA,MAAM,IAAA,GAAO,KAAK,SAAA,EAAU;AAC5B,QAAA,IAAA,CAAK,YAAY,GAAG,CAAA;AACpB,QAAA,IAAA,CAAK,WAAW,GAAG,CAAA;AACnB,QAAA,OAAO,IAAA;AAAA,MACT;AAGA,MAAA,IAAI,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA,EAAG;AACzB,QAAA,IAAI,IAAA,CAAK,IAAA,EAAK,CAAE,IAAA,KAAS,SAAS,OAAO,IAAA;AACzC,QAAA,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,OAAA,EAAQ,CAAE,IAAA;AAChC,QAAA,IAAA,CAAK,WAAW,GAAG,CAAA;AAAA,MACrB,CAAA,MAAO;AACL,QAAA,IAAI,IAAA,CAAK,IAAA,EAAK,CAAE,IAAA,KAAS,SAAS,OAAO,IAAA;AACzC,QAAA,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,OAAA,EAAQ,CAAE,IAAA;AAAA,MAClC;AAEA,MAAA,IAAI,IAAA,CAAK,IAAA,EAAK,CAAE,IAAA,KAAS,SAAS,OAAO,IAAA;AACzC,MAAA,IAAA,CAAK,OAAA,EAAQ;AAEb,MAAA,IAAI,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA,EAAG;AACzB,QAAA,IAAA,CAAK,WAAW,QAAQ,CAAA;AACxB,QAAA,MAAM,IAAA,GAAO,KAAK,SAAA,EAAU;AAC5B,QAAA,IAAA,CAAK,YAAY,GAAG,CAAA;AACpB,QAAA,IAAA,CAAK,WAAW,GAAG,CAAA;AACnB,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,OAAO,KAAK,SAAA,EAAU;AAAA,IACxB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA,EAGQ,SAAA,GAAwB;AAC9B,IAAA,IAAI,IAAA,GAAO,KAAK,QAAA,EAAS;AACzB,IAAA,OAAO,IAAA,CAAK,IAAA,EAAK,CAAE,IAAA,KAAS,IAAA,EAAM;AAChC,MAAA,IAAA,CAAK,OAAA,EAAQ;AACb,MAAA,MAAM,KAAA,GAAQ,KAAK,QAAA,EAAS;AAC5B,MAAA,IAAA,GAAO,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,OAAA,CAAQ,MAAM,CAAC,IAAA,EAAM,KAAK,CAAC,CAAA,EAAE;AAAA,IAC1D;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,QAAA,GAAuB;AAC7B,IAAA,IAAI,IAAA,GAAO,KAAK,QAAA,EAAS;AACzB,IAAA,OAAO,IAAA,CAAK,IAAA,EAAK,CAAE,IAAA,KAAS,IAAA,EAAM;AAChC,MAAA,IAAA,CAAK,OAAA,EAAQ;AACb,MAAA,MAAM,KAAA,GAAQ,KAAK,QAAA,EAAS;AAC5B,MAAA,IAAA,GAAO,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,OAAA,CAAQ,OAAO,CAAC,IAAA,EAAM,KAAK,CAAC,CAAA,EAAE;AAAA,IAC5D;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,QAAA,GAAuB;AAC7B,IAAA,IAAI,IAAA,CAAK,IAAA,EAAK,CAAE,IAAA,KAAS,GAAA,EAAK;AAC5B,MAAA,IAAA,CAAK,OAAA,EAAQ;AACb,MAAA,MAAM,GAAA,GAAM,KAAK,QAAA,EAAS;AAE1B,MAAA,IAAI,GAAA,CAAI,SAAS,QAAA,EAAU;AACzB,QAAA,OAAO,EAAE,MAAM,QAAA,EAAU,GAAA,EAAK,IAAI,GAAA,EAAK,OAAA,EAAS,CAAC,GAAA,CAAI,OAAA,EAAQ;AAAA,MAC/D;AACA,MAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,GAAA,EAAI;AAAA,IAC5B;AACA,IAAA,OAAO,KAAK,aAAA,EAAc;AAAA,EAC5B;AAAA,EAEQ,aAAA,GAA4B;AAClC,IAAA,MAAM,IAAA,GAAO,KAAK,eAAA,EAAgB;AAClC,IAAA,MAAM,CAAA,GAAI,KAAK,IAAA,EAAK;AACpB,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,KAAA,IAAS,CAAA,CAAE,IAAA,KAAS,KAAA,IAAS,CAAA,CAAE,IAAA,KAAS,IAAA,IAAQ,CAAA,CAAE,IAAA,KAAS,IAAA,EAAM;AAC9E,MAAA,IAAA,CAAK,OAAA,EAAQ;AACb,MAAA,MAAM,KAAA,GAAQ,KAAK,eAAA,EAAgB;AACnC,MAAA,OAAO,IAAA,CAAK,YAAA,CAAa,CAAA,CAAE,IAAA,EAAM,MAAM,KAAK,CAAA;AAAA,IAC9C;AAGA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,eAAA,GAA8B;AACpC,IAAA,MAAM,IAAA,GAAO,KAAK,UAAA,EAAW;AAC7B,IAAA,MAAM,CAAA,GAAI,KAAK,IAAA,EAAK;AACpB,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,GAAA,IAAO,CAAA,CAAE,IAAA,KAAS,IAAA,IAAQ,CAAA,CAAE,IAAA,KAAS,GAAA,IAAO,CAAA,CAAE,IAAA,KAAS,IAAA,EAAM;AAC1E,MAAA,IAAA,CAAK,OAAA,EAAQ;AACb,MAAA,MAAM,KAAA,GAAQ,KAAK,UAAA,EAAW;AAC9B,MAAA,OAAO,IAAA,CAAK,YAAA,CAAa,CAAA,CAAE,IAAA,EAAM,MAAM,KAAK,CAAA;AAAA,IAC9C;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,UAAA,GAAyB;AAC/B,IAAA,IAAI,IAAA,CAAK,IAAA,EAAK,CAAE,IAAA,KAAS,GAAA,EAAK;AAC5B,MAAA,IAAA,CAAK,OAAA,EAAQ;AACb,MAAA,MAAM,IAAA,GAAO,KAAK,IAAA,EAAK;AACvB,MAAA,IAAI,KAAK,IAAA,KAAS,KAAA,EAAO,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAC/E,MAAA,IAAA,CAAK,OAAA,EAAQ;AACb,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,KAAA;AAAA,QACN,KAAA,EAAO,CAAC,UAAA,CAAW,IAAA,CAAK,IAAI;AAAA,OAC9B;AAAA,IACF;AACA,IAAA,OAAO,KAAK,SAAA,EAAU;AAAA,EACxB;AAAA,EAEQ,SAAA,GAAwB;AAC9B,IAAA,MAAM,CAAA,GAAI,KAAK,IAAA,EAAK;AAEpB,IAAA,IAAI,CAAA,CAAE,SAAS,SAAA,EAAW;AACxB,MAAA,IAAI,CAAA,CAAE,IAAA,KAAS,MAAA,IAAU,CAAA,CAAE,SAAS,OAAA,EAAS;AAC3C,QAAA,IAAA,CAAK,OAAA,EAAQ;AACb,QAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,CAAA,CAAE,SAAS,MAAA,EAAO;AAAA,MACjD;AACA,MAAA,IAAI,CAAA,CAAE,IAAA,KAAS,MAAA,IAAU,CAAA,CAAE,SAAS,WAAA,EAAa;AAC/C,QAAA,IAAA,CAAK,OAAA,EAAQ;AACb,QAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,IAAA,EAAK;AAAA,MACpC;AAAA,IACF;AAEA,IAAA,IAAI,CAAA,CAAE,SAAS,KAAA,EAAO;AACpB,MAAA,IAAA,CAAK,OAAA,EAAQ;AACb,MAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,OAAO,UAAA,CAAW,CAAA,CAAE,IAAI,CAAA,EAAE;AAAA,IAClD;AAEA,IAAA,IAAI,CAAA,CAAE,SAAS,KAAA,EAAO;AACpB,MAAA,IAAA,CAAK,OAAA,EAAQ;AACb,MAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,EAAE,IAAA,EAAK;AAAA,IACtC;AAEA,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,OAAA,IAAW,CAAA,CAAE,SAAS,GAAA,EAAK;AACxC,MAAA,IAAA,CAAK,OAAA,EAAQ;AACb,MAAA,MAAM,KAAA,GAAQ,KAAK,SAAA,EAAU;AAC7B,MAAA,IAAA,CAAK,WAAW,GAAG,CAAA;AACnB,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,IAAI,CAAA,CAAE,SAAS,OAAA,EAAS;AACtB,MAAA,IAAI,CAAA,CAAE,IAAA,KAAS,IAAA,CAAK,SAAA,EAAW;AAE7B,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,CAAA,CAAE,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,MACtD;AACA,MAAA,IAAA,CAAK,OAAA,EAAQ;AACb,MAAA,MAAM,GAAA,GAAM,KAAK,cAAA,EAAe;AAEhC,MAAA,IAAI,IAAI,IAAA,KAAS,KAAA,IAAS,KAAK,IAAA,EAAK,CAAE,SAAS,GAAA,EAAK;AAClD,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,qBAAA,CAAsB,GAAG,CAAA;AAC5C,QAAA,IAAI,OAAO,OAAO,KAAA;AAGlB,QAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA,MACnD;AACA,MAAA,OAAO,GAAA;AAAA,IACT;AAEA,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,CAAA,CAAE,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUQ,sBAAsB,GAAA,EAAmC;AAE/D,IAAA,MAAM,QAAQ,IAAA,CAAK,GAAA;AACnB,IAAA,IAAI,IAAA,CAAK,IAAA,EAAK,CAAE,IAAA,KAAS,KAAK,OAAO,IAAA;AACrC,IAAA,IAAA,CAAK,OAAA,EAAQ;AACb,IAAA,MAAM,MAAA,GAAS,KAAK,IAAA,EAAK;AACzB,IAAA,IAAI,MAAA,CAAO,SAAS,OAAA,EAAS;AAC3B,MAAA,IAAA,CAAK,GAAA,GAAM,KAAA;AACX,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AAGpB,IAAA,MAAM,OAAA,GAAyE;AAAA,MAC7E,QAAA,EAAU,UAAA;AAAA,MACV,UAAA,EAAY,YAAA;AAAA,MACZ,QAAA,EAAU;AAAA,KACZ;AACA,IAAA,MAAM,MAAA,GAAS,QAAQ,IAAI,CAAA;AAC3B,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,IAAA,CAAK,GAAA,GAAM,KAAA;AACX,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAA,CAAK,OAAA,EAAQ;AACb,IAAA,IAAI,IAAA,CAAK,IAAA,EAAK,CAAE,IAAA,KAAS,GAAA,EAAK;AAC5B,MAAA,IAAA,CAAK,GAAA,GAAM,KAAA;AACX,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAA,CAAK,OAAA,EAAQ;AACb,IAAA,MAAM,GAAA,GAAM,KAAK,IAAA,EAAK;AACtB,IAAA,IAAI,GAAA,CAAI,SAAS,KAAA,EAAO;AAEtB,MAAA,IAAA,CAAK,GAAA,GAAM,KAAA;AACX,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAA,CAAK,OAAA,EAAQ;AAIb,IAAA,IAAI,IAAA,CAAK,IAAA,EAAK,CAAE,IAAA,KAAS,GAAA,EAAK;AAC5B,MAAA,IAAA,CAAK,GAAA,GAAM,KAAA;AACX,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,IAAA,CAAK,IAAA,EAAK,CAAE,IAAA,KAAS,GAAA,EAAK;AAC5B,MAAA,IAAA,CAAK,GAAA,GAAM,KAAA;AACX,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAA,CAAK,OAAA,EAAQ;AACb,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,KAAA;AAAA,MACN,EAAA,EAAI,MAAA;AAAA,MACJ,GAAA;AAAA,MACA,OAAO,GAAA,CAAI;AAAA,KACb;AAAA,EACF;AAAA,EACQ,cAAA,GAA6B;AACnC,IAAA,MAAM,CAAA,GAAI,KAAK,IAAA,EAAK;AACpB,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,OAAA,IAAW,CAAA,CAAE,SAAS,GAAA,EAAK;AACxC,MAAA,IAAA,CAAK,OAAA,EAAQ;AACb,MAAA,MAAM,EAAA,GAAK,KAAK,OAAA,EAAQ;AACxB,MAAA,IAAI,GAAG,IAAA,KAAS,OAAA,EAAS,MAAM,IAAI,MAAM,6BAA6B,CAAA;AACtE,MAAA,OAAA,GAAU,EAAA,CAAG,IAAA;AAAA,IACf,WAAW,CAAA,CAAE,IAAA,KAAS,OAAA,IAAW,CAAA,CAAE,SAAS,GAAA,EAAK;AAC/C,MAAA,IAAA,CAAK,OAAA,EAAQ;AACb,MAAA,MAAM3B,IAAAA,GAAM,KAAK,OAAA,EAAQ;AACzB,MAAA,IAAIA,KAAI,IAAA,KAAS,KAAA,EAAO,MAAM,IAAI,MAAM,wCAAwC,CAAA;AAChF,MAAA,OAAA,GAAUA,IAAAA,CAAI,IAAA;AACd,MAAA,IAAA,CAAK,WAAW,GAAG,CAAA;AAAA,IACrB,CAAA,MAAO;AAEL,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC1C;AAMA,IAAA,IAAI,IAAA,CAAK,mBAAmB,IAAA,EAAM;AAChC,MAAA,IAAI,OAAA,KAAY,KAAK,cAAA,EAAgB,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,OAAO,CAAA,CAAA,CAAG,CAAA;AACrF,MAAA,IAAA,CAAK,WAAW,GAAG,CAAA;AACnB,MAAA,MAAM,KAAA,GAAQ,KAAK,OAAA,EAAQ;AAC3B,MAAA,IAAI,MAAM,IAAA,KAAS,OAAA,EAAS,MAAM,IAAI,MAAM,uCAAuC,CAAA;AACnF,MAAA,OAAA,GAAU,KAAA,CAAM,IAAA;AAAA,IAClB;AAMA,IAAA,MAAM,IAAA,GAAO,KAAK,IAAA,EAAK;AACvB,IAAA,IAAI,IAAA,CAAK,SAAS,GAAA,EAAK;AACrB,MAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA,IACnD;AACA,IAAA,IAAI,IAAA,CAAK,SAAS,GAAA,EAAK;AASvB,IAAA,IAAI,KAAK,YAAA,IAAgB,CAAC,KAAK,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA,EAAG;AACxD,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,OAAO,CAAA,CAAA,CAAG,CAAA;AAAA,IAC/C;AAEA,IAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,OAAA,EAAQ;AAAA,EACtC;AAAA;AAAA,EAGQ,YAAA,CAAa,EAAA,EAAY,IAAA,EAAkB,KAAA,EAA+B;AAChF,IAAA,MAAM,SAAS,EAAA,KAAO,IAAA,GAAO,KAAA,GAAQ,EAAA,KAAO,OAAO,KAAA,GAAQ,EAAA;AAG3D,IAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,IAAA,EAAM,KAAK,CAAA;AAC7C,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,KAAK,MAAA,CAAO,GAAA;AAAA,QACZ,OAAA,EAAS,MAAA,KAAW,KAAA,IAAS,MAAA,KAAW;AAAA,OAC1C;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,UAAU,MAAM,CAAA;AAC9B,IAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,KAAA,CAAM,CAAA,QAAA,EAAW,EAAE,CAAA,CAAA,CAAG,CAAA;AAI5C,IAAA,MAAM,MAAA,GAAS,UAAU,IAAI,CAAA;AAC7B,IAAA,MAAM,OAAA,GAAU,UAAU,KAAK,CAAA;AAC/B,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,SAAS,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAC1E,IAAA,IAAI,MAAA,CAAO,IAAA,KAAS,KAAA,IAAS,OAAA,CAAQ,SAAS,KAAA,EAAO;AACnD,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC1C;AACA,IAAA,IAAI,MAAA,CAAO,IAAA,KAAS,KAAA,IAAS,OAAA,CAAQ,SAAS,KAAA,EAAO;AACnD,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC1C;AAGA,IAAA,IAAI,MAAA,CAAO,SAAS,KAAA,EAAO;AACzB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,KAAA;AAAA,QACN,EAAA,EAAI,OAAO,KAAK,CAAA;AAAA,QAChB,IAAA,EAAM,OAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AACA,IAAA,OAAO,EAAE,MAAM,KAAA,EAAO,EAAA,EAAI,OAAO,IAAA,EAAM,MAAA,EAAQ,OAAO,OAAA,EAAQ;AAAA,EAChE;AACF,CAAA;AAEA,IAAM,SAAA,GAA+C;AAAA,EACnD,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,KAAA;AAAA,EACP,GAAA,EAAK,IAAA;AAAA,EACL,IAAA,EAAM,KAAA;AAAA,EACN,GAAA,EAAK,IAAA;AAAA,EACL,IAAA,EAAM;AACR,CAAA;AAEA,SAAS,OAAO,EAAA,EAAkB;AAChC,EAAA,QAAQ,EAAA;AAAI,IACV,KAAK,IAAA;AAAM,MAAA,OAAO,IAAA;AAAA,IAClB,KAAK,KAAA;AAAO,MAAA,OAAO,KAAA;AAAA,IACnB,KAAK,IAAA;AAAM,MAAA,OAAO,IAAA;AAAA,IAClB,KAAK,KAAA;AAAO,MAAA,OAAO,KAAA;AAAA,IACnB;AAAS,MAAA,OAAO,EAAA;AAAA;AAEpB;AAEA,SAAS,UAAU,IAAA,EAAkC;AACnD,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,KAAA,EAAO,OAAO,IAAA;AAGhC,EAAA,MAAM,GAAA,GAAM,IAAA;AACZ,EAAA,IAAI,GAAA,CAAI,IAAA,KAAS,KAAA,EAAO,OAAO,GAAA;AAC/B,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,kBAAA,CACP,MACA,KAAA,EAC2B;AAC3B,EAAA,MAAM,SAAA,GAAY,CAAC,CAAA,KAA2B;AAC5C,IAAA,MAAM,GAAA,GAAM,CAAA;AACZ,IAAA,OAAO,GAAA,CAAI,IAAA,KAAS,KAAA,IAAS,GAAA,CAAI,KAAA,KAAU,IAAA;AAAA,EAC7C,CAAA;AACA,EAAA,IAAI,IAAA,CAAK,SAAS,KAAA,IAAS,SAAA,CAAU,KAAK,CAAA,EAAG,OAAO,EAAE,GAAA,EAAK,IAAA,EAAK;AAChE,EAAA,IAAI,KAAA,CAAM,SAAS,KAAA,IAAS,SAAA,CAAU,IAAI,CAAA,EAAG,OAAO,EAAE,GAAA,EAAK,KAAA,EAAM;AACjE,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,OAAA,CAAQ,MAAoB,IAAA,EAA2C;AAC9E,EAAA,MAAM,MAAoB,EAAC;AAC3B,EAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,IAAA,IAAI,EAAE,IAAA,KAAS,IAAA,MAAU,IAAA,CAAK,GAAI,EAAsC,IAAI,CAAA;AAAA,SACvE,GAAA,CAAI,KAAK,CAAC,CAAA;AAAA,EACjB;AACA,EAAA,OAAO,GAAA;AACT;;;AChmBA,IAAI,WAAA,GAAkC,IAAA;AAC/B,SAAS,oBAAoB,OAAA,EAA4B;AAC9D,EAAA,WAAA,GAAc,OAAA;AAChB;AAcO,IAAM,KAAA,GAAN,MAAM,MAAA,CAAwC;AAAA,EAC1C,UAAA;AAAA,EACA,SAAA;AAAA;AAAA,EAEA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA;AAAA,EAEA,YAAA;AAAA,EAET,YACE,UAAA,EACA,SAAA,GAA8B,IAAA,EAC9B,SAAA,GAAsC,MACtC,KAAA,GAA8B,EAAC,EAC/B,MAAA,GAAwB,MACxB,OAAA,GAAU,CAAA,EACV,YAAA,GAA2C,IAAA,EAC3C,aAAgC,IAAA,EAChC;AACA,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AAAA,EACtB;AAAA,EAEA,MAAM,SAAA,EAAmC;AAEvC,IAAA,MAAM,IAAA,GAAkB,IAAA,CAAK,SAAA,GACzB,CAAC,GAAA,KAAQ,IAAA,CAAK,SAAA,CAAW,GAAG,CAAA,IAAK,SAAA,CAAU,GAAG,CAAA,GAC9C,SAAA;AAKJ,IAAA,MAAM,OAAA,GAAU,wBAAA;AAAA,MACd,SAAA;AAAA,MACA,EAAE,YAAA,EAAc,IAAI,GAAA,CAAI,IAAA,CAAK,WAAW,MAAA,CAAO,aAAA,CAAc,IAAA,EAAM,CAAA;AAAE,KACvE;AACA,IAAA,MAAM,eACJ,OAAA,KAAY,IAAA,GACR,IAAA,CAAK,UAAA,GACL,KAAK,UAAA,GACH,EAAE,IAAA,EAAM,KAAA,EAAO,MAAM,CAAC,IAAA,CAAK,UAAA,EAAY,OAAO,GAAE,GAChD,OAAA;AACR,IAAA,MAAM,SAAS,OAAA,KAAY,IAAA;AAE3B,IAAA,OAAO,IAAI,MAAA;AAAA,MACT,IAAA,CAAK,UAAA;AAAA,MACL,MAAA,GAAS,OAAO,IAAA,CAAK,SAAA;AAAA,MACrB,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,KAAA;AAAA,MACL,IAAA,CAAK,MAAA;AAAA,MACL,IAAA,CAAK,OAAA;AAAA,MACL,IAAA,CAAK,YAAA;AAAA,MACL;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,IAAA,EAA+B;AACpC,IAAA,MAAM,IAAA,GAAmB,IAAA,CAAK,UAAA,GAC1B,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,CAAC,IAAA,CAAK,UAAA,EAAY,IAAI,CAAA,EAAE,GAC7C,IAAA;AACJ,IAAA,OAAO,IAAI,MAAA;AAAA,MACT,IAAA,CAAK,UAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,KAAA;AAAA,MACL,IAAA,CAAK,MAAA;AAAA,MACL,IAAA,CAAK,OAAA;AAAA,MACL,IAAA,CAAK,YAAA;AAAA,MACL;AAAA,KACF;AAAA,EACF;AAAA,EAEA,OAAO,OAAA,EAAyC;AAC9C,IAAA,KAAA,MAAW,CAAA,IAAK,OAAA,EAAS,IAAA,CAAK,kBAAA,CAAmB,CAAC,CAAA;AAClD,IAAA,OAAO,IAAI,MAAA;AAAA,MACT,IAAA,CAAK,UAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,CAAC,GAAG,OAAO,CAAA;AAAA,MACX,IAAA,CAAK,KAAA;AAAA,MACL,IAAA,CAAK,MAAA;AAAA,MACL,IAAA,CAAK,OAAA;AAAA,MACL,IAAA,CAAK,YAAA;AAAA,MACL,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA,EAEA,OAAA,CAAQ,MAAA,EAAgB,GAAA,GAAe,KAAA,EAAoB;AACzD,IAAA,IAAA,CAAK,mBAAmB,MAAM,CAAA;AAC9B,IAAA,OAAO,IAAI,MAAA;AAAA,MACT,IAAA,CAAK,UAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,CAAC,GAAG,IAAA,CAAK,OAAO,EAAE,MAAA,EAAQ,KAAK,CAAA;AAAA,MAC/B,IAAA,CAAK,MAAA;AAAA,MACL,IAAA,CAAK,OAAA;AAAA,MACL,IAAA,CAAK,YAAA;AAAA,MACL,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA,EAEA,MAAM,CAAA,EAAwB;AAC5B,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,CAAC,CAAA,IAAK,IAAI,CAAA,EAAG;AACjC,MAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,0CAAA,EAA6C,CAAC,CAAA,CAAE,CAAA;AAAA,IAC5E;AACA,IAAA,OAAO,IAAI,MAAA;AAAA,MACT,IAAA,CAAK,UAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,KAAA;AAAA,MACL,CAAA;AAAA,MACA,IAAA,CAAK,OAAA;AAAA,MACL,IAAA,CAAK,YAAA;AAAA,MACL,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA,EAEA,OAAO,CAAA,EAAwB;AAC7B,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,CAAC,CAAA,IAAK,IAAI,CAAA,EAAG;AACjC,MAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,2CAAA,EAA8C,CAAC,CAAA,CAAE,CAAA;AAAA,IAC7E;AACA,IAAA,OAAO,IAAI,MAAA;AAAA,MACT,IAAA,CAAK,UAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,KAAA;AAAA,MACL,IAAA,CAAK,MAAA;AAAA,MACL,CAAA;AAAA,MACA,IAAA,CAAK,YAAA;AAAA,MACL,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,IAAA,CAAK,OAAmB,IAAA,EAAmC;AACzD,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,8HAAA;AAAA,OAEF;AAAA,IACF;AACA,IAAA,OAAO,WAAA,CAAY,IAAA,EAA0B,KAAA,EAAO,IAAI,CAAA;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,KAAK,OAAA,EAAyC;AAC5C,IAAA,KAAA,MAAW,CAAA,IAAK,OAAA,EAAS,IAAA,CAAK,kBAAA,CAAmB,CAAC,CAAA;AAClD,IAAA,OAAO,IAAI,MAAA;AAAA,MACT,IAAA,CAAK,UAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,KAAA;AAAA,MACL,IAAA,CAAK,MAAA;AAAA,MACL,IAAA,CAAK,OAAA;AAAA,MACL,IAAI,IAAI,OAAO,CAAA;AAAA,MACf,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA;AAAA,EAGA,gBAAgB,YAAA,EAAwD;AACtE,IAAA,MAAM,GAAA,uBAAU,GAAA,EAAY;AAC5B,IAAA,MAAM,GAAA,GAAM,KAAK,YAAA,IAAgB,YAAA;AACjC,IAAA,KAAA,MAAW,CAAA,IAAK,GAAA,EAAK,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA;AAC9B,IAAA,IAAI,IAAA,CAAK,UAAA,EAAY,cAAA,CAAe,IAAA,CAAK,YAAY,GAAG,CAAA;AACxD,IAAA,IAAI,IAAA,CAAK,WAAW,KAAA,MAAW,CAAA,IAAK,KAAK,SAAA,EAAW,GAAA,CAAI,IAAI,CAAC,CAAA;AAC7D,IAAA,KAAA,MAAW,KAAK,IAAA,CAAK,KAAA,EAAO,GAAA,CAAI,GAAA,CAAI,EAAE,MAAM,CAAA;AAC5C,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA,EAIQ,mBAAmB,IAAA,EAAoB;AAC7C,IAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,OAAO,aAAA,CAAc,GAAA,CAAI,IAAI,CAAA,EAAG;AACnD,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,mBAAmB,IAAI,CAAA,iBAAA,EAAoB,IAAA,CAAK,UAAA,CAAW,OAAO,IAAI,CAAA,CAAA;AAAA,OACxE;AAAA,IACF;AAAA,EACF;AACF,CAAA;AAoBO,IAAM,gBAAN,MAAsD;AAAA,EAoB3D,YAAqBJ,MAAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,KAAA,GAAAA,MAAAA;AACnB,IAAA,IAAIA,OAAM,YAAA,EAAc;AACtB,MAAA,KAAA,MAAW,KAAKA,MAAAA,CAAM,YAAA,EAAc,IAAA,CAAK,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,IACrD;AAKA,IAAA,IAAIA,OAAM,UAAA,EAAY;AACpB,MAAA,cAAA,CAAeA,MAAAA,CAAM,UAAA,EAAY,IAAA,CAAK,IAAI,CAAA;AAAA,IAC5C;AACA,IAAA,IAAA,CAAK,kBAAA,GAAqBA,MAAAA,CAAM,UAAA,CAAW,SAAA,CAAU,CAAC,KAAA,KAAU;AAC9D,MAAA,IAAI,KAAA,CAAM,EAAA,KAAO,QAAA,EAAU,IAAA,CAAK,uBAAA,GAA0B,IAAA;AAAA,IAC5D,CAAC,CAAA;AAAA,EACH;AAAA,EAdqB,KAAA;AAAA,EAnBb,IAAA,uBAAmB,GAAA,EAAI;AAAA,EACvB,cAAA,GAA6C,IAAA;AAAA;AAAA,EAE7C,cAAA,uBAA0C,GAAA,EAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM9C,UAAA,GAAa,KAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOb,uBAAA,GAA0B,KAAA;AAAA,EACjB,kBAAA;AAAA;AAAA,EAmBjB,OAAA,GAAgB;AACd,IAAA,IAAA,CAAK,kBAAA,EAAmB;AAAA,EAC1B;AAAA;AAAA,EAGQ,YAAA,GAAwB;AAC9B,IAAA,IAAI,CAAC,IAAA,CAAK,cAAA,EAAgB,OAAO,KAAA;AACjC,IAAA,IAAI,IAAA,CAAK,yBAAyB,OAAO,KAAA;AACzC,IAAA,MAAM,CAAA,GAAI,KAAK,KAAA,CAAM,UAAA;AACrB,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,eAAA,EAAgB,EAAG;AACzC,MAAA,IAAI,CAAC,CAAA,CAAE,MAAA,CAAO,aAAA,CAAc,GAAA,CAAI,IAAI,CAAA,EAAG;AACvC,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA;AACzC,MAAA,IAAI,IAAA,KAAS,QAAW,OAAO,KAAA;AAC/B,MAAA,IAAI,CAAA,CAAE,aAAA,CAAc,IAAI,CAAA,KAAM,MAAM,OAAO,KAAA;AAAA,IAC7C;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,eAAA,GAAoC;AAC1C,IAAA,IAAI,KAAK,UAAA,EAAY,OAAO,IAAA,CAAK,KAAA,CAAM,WAAW,WAAA,EAAY;AAC9D,IAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAC9B,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,YAAA,IAAgB,IAAA,CAAK,IAAA;AAC7C,IAAA,KAAA,MAAW,CAAA,IAAK,IAAA,EAAM,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA;AACjC,IAAA,IAAI,KAAK,KAAA,CAAM,UAAA,iBAA2B,IAAA,CAAK,KAAA,CAAM,YAAY,KAAK,CAAA;AACtE,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,SAAA,EAAW,KAAA,MAAW,CAAA,IAAK,KAAK,KAAA,CAAM,SAAA,EAAW,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA;AAC3E,IAAA,KAAA,MAAW,KAAK,IAAA,CAAK,KAAA,CAAM,OAAO,KAAA,CAAM,GAAA,CAAI,EAAE,MAAM,CAAA;AACpD,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA,EAGQ,cAAA,GAAwC,IAAA;AAAA,EACxC,kBAAA,GAAwC,IAAA;AAAA,EACxC,mBAAA,GAAoC,IAAA;AAAA,EACpC,iBAAA,GAA2C;AACjD,IAAA,MAAM,IAAA,GAAO,KAAK,KAAA,CAAM,UAAA;AACxB,IAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,IAAA,IAAI,IAAA,CAAK,kBAAA,KAAuB,IAAA,IAAQ,IAAA,CAAK,cAAA,EAAgB;AAC3D,MAAA,OAAO,IAAA,CAAK,cAAA;AAAA,IACd;AACA,IAAA,IAAI,IAAA,CAAK,mBAAA,EAAqB,MAAM,IAAA,CAAK,mBAAA;AACzC,IAAA,MAAM,CAAA,GAAI,KAAK,KAAA,CAAM,UAAA;AACrB,IAAA,MAAM,UAAA,uBAAiB,GAAA,EAAuC;AAC9D,IAAA,MAAM,QAAA,GAAW,EAAE,oBAAA,EAAqB;AACxC,IAAA,KAAA,MAAW,MAAM,QAAA,EAAU,UAAA,CAAW,GAAA,CAAI,EAAA,CAAG,MAAM,EAAE,CAAA;AACrD,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,cAAA,GAAiB,aAAA,CAAc,IAAA,EAAM,UAAU,CAAA;AACpD,MAAA,IAAA,CAAK,kBAAA,GAAqB,IAAA;AAC1B,MAAA,OAAO,IAAA,CAAK,cAAA;AAAA,IACd,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,eAAe,kBAAA,EAAoB;AACrC,QAAA,IAAA,CAAK,mBAAA,GAAsB,GAAA;AAAA,MAC7B;AACA,MAAA,MAAM,GAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA,EAGQ,SAAA,GAAiC;AACvC,IAAA,MAAM,IAAI,IAAA,CAAK,KAAA;AACf,IAAA,MAAM,IAAI,CAAA,CAAE,UAAA;AACZ,IAAA,MAAM,OAAO,CAAA,CAAE,SAAA;AACf,IAAA,MAAM,aAAa,CAAA,CAAE,UAAA;AAKrB,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI,mBAAmB,IAAA,KAAS,IAAA;AAChC,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAM,QAAA,GAAW,KAAK,iBAAA,EAAkB;AACxC,MAAA,QAAA,GAAW,YAAA,CAAa,CAAA,CAAE,qBAAA,EAAsB,EAAG,SAAS,IAAI,CAAA;AAAA,IAClE,CAAA,MAAA,IAAW,CAAC,IAAA,EAAM;AAEhB,MAAA,QAAA,GAAW,YAAA,CAAa,CAAA,CAAE,qBAAA,EAAsB,EAAG,MAAM,IAAI,CAAA;AAAA,IAC/D,CAAA,MAAO;AAEL,MAAA,QAAA,GAAW,KAAK,UAAA,EAAW;AAC3B,MAAA,gBAAA,GAAmB,KAAA;AAAA,IACrB;AAGA,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,QAAA,GAAW,IAAA,CAAK,iBAAiB,QAAQ,CAAA;AAAA,IAC3C;AAGA,IAAA,MAAM,UAAA,uBAAiB,GAAA,EAAoE;AAC3F,IAAA,KAAA,MAAW,EAAA,IAAM,EAAE,oBAAA,EAAqB,aAAc,GAAA,CAAI,EAAA,CAAG,MAAM,EAAE,CAAA;AACrE,IAAA,MAAM,MAAA,GAAS,YAAA;AAAA,MACb,QAAA;AAAA,MACA,CAAA,CAAE,KAAA;AAAA,MACF,UAAA;AAAA,MACA,CAAC,GAAA,EAAK,GAAA,KAAQ,CAAA,CAAE,iBAAA,CAAkB,KAAK,GAAG;AAAA,KAC5C;AAKA,IAAA,MAAM,GAAA,GAAMO,aAAY,CAAA,EAAG,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,SAAS,CAAA;AAGnE,IAAA,IAAA,CAAK,eAAe,KAAA,EAAM;AAC1B,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,eAAA,EAAgB,EAAG;AACzC,MAAA,IAAI,CAAC,CAAA,CAAE,MAAA,CAAO,aAAA,CAAc,GAAA,CAAI,IAAI,CAAA,EAAG;AACvC,MAAA,IAAA,CAAK,eAAe,GAAA,CAAI,IAAA,EAAM,CAAA,CAAE,aAAA,CAAc,IAAI,CAAC,CAAA;AAAA,IACrD;AACA,IAAA,IAAA,CAAK,uBAAA,GAA0B,KAAA;AAC/B,IAAA,MAAM,IAAA,GAA4B;AAAA,MAChC,IAAA,EAAM,GAAA;AAAA,MACN,SAAS,CAAA,CAAE;AAAA,KACb;AACA,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AACtB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGQ,UAAA,GAA0B;AAChC,IAAA,MAAM,IAAI,IAAA,CAAK,KAAA;AACf,IAAA,MAAM,IAAI,CAAA,CAAE,UAAA;AACZ,IAAA,MAAM,OAAO,CAAA,CAAE,SAAA;AACf,IAAA,MAAM,UAAoB,EAAC;AAC3B,IAAA,IAAI,GAAA,GAAM,CAAA;AACV,IAAA,KAAA,MAAW,GAAA,IAAO,CAAA,CAAE,IAAA,EAAK,EAAG;AAC1B,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,aAAA,CAAc,GAAA,EAAA,EAAO,GAAG,CAAA;AAChD,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,GACJ,EAAE,YAAA,IAAgB,IAAA,CAAK,aACnB,GAAA,GACA,QAAA,CAAS,GAAA,EAAK,IAAA,CAAK,IAAI,CAAA;AAC7B,QAAA,IAAI,IAAA,CAAK,OAAO,CAAA,EAAG,OAAA,CAAQ,KAAK,UAAU,CAAA;AAAA,MAC5C,SAAS,GAAA,EAAK;AACZ,QAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAClB,QAAA,IAAI;AACF,UAAA,IAAI,IAAA,CAAK,GAAG,CAAA,EAAG,OAAA,CAAQ,KAAK,UAAU,CAAA;AAAA,QACxC,CAAA,CAAA,MAAQ;AACN,UAAA,MAAM,GAAA;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,MAAM,OAAO,CAAA;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,mBAAA,GAA0C,IAAA;AAAA,EAC1C,oBAAA,GAAuB,EAAA;AAAA,EACvB,aAAA,CAAc,KAAa,IAAA,EAAwB;AACzD,IAAA,MAAM,CAAA,GAAI,KAAK,KAAA,CAAM,UAAA;AACrB,IAAA,IAAI,KAAK,oBAAA,KAAyB,CAAA,CAAE,aAAA,IAAiB,CAAC,KAAK,mBAAA,EAAqB;AAC9E,MAAA,MAAM,MAAgB,EAAC;AACvB,MAAA,KAAA,MAAW,KAAK,CAAA,CAAE,qBAAA,EAAsB,EAAG,GAAA,CAAI,KAAK,CAAC,CAAA;AACrD,MAAA,IAAA,CAAK,mBAAA,GAAsB,MAAM,GAAG,CAAA;AACpC,MAAA,IAAA,CAAK,uBAAuB,CAAA,CAAE,aAAA;AAAA,IAChC;AACA,IAAA,OAAO,IAAA,CAAK,mBAAA,CAAoB,GAAG,CAAA,IAAK,EAAA;AAAA,EAC1C;AAAA;AAAA,EAGQ,iBAAiB,UAAA,EAAsC;AAC7D,IAAA,MAAM,IAAI,IAAA,CAAK,KAAA;AACf,IAAU,CAAA,CAAE;AACZ,IAAA,MAAM,OAAO,CAAA,CAAE,SAAA;AACf,IAAA,MAAM,OAAiB,EAAC;AACxB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,QAAQ,CAAA,EAAA,EAAK;AAC1C,MAAA,MAAM,GAAA,GAAM,WAAW,CAAC,CAAA;AACxB,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,kBAAA,CAAmB,GAAG,CAAA;AACvC,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,GACJ,EAAE,YAAA,IAAgB,IAAA,CAAK,aACnB,GAAA,GACA,QAAA,CAAS,GAAA,EAAK,IAAA,CAAK,IAAI,CAAA;AAC7B,QAAA,IAAI,IAAA,CAAK,OAAO,CAAA,EAAG,IAAA,CAAK,KAAK,GAAG,CAAA;AAAA,MAClC,SAAS,GAAA,EAAK;AACZ,QAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAClB,QAAA,IAAI;AACF,UAAA,IAAI,IAAA,CAAK,GAAG,CAAA,EAAG,IAAA,CAAK,KAAK,GAAG,CAAA;AAAA,QAC9B,CAAA,CAAA,MAAQ;AACN,UAAA,MAAM,GAAA;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,MAAM,IAAI,CAAA;AAAA,EACnB;AAAA,EAEQ,mBAAmB,GAAA,EAAuB;AAChD,IAAA,MAAM,CAAA,GAAI,KAAK,KAAA,CAAM,UAAA;AACrB,IAAA,MAAM,MAAgB,EAAC;AACvB,IAAA,KAAA,MAAW,IAAA,IAAQ,CAAA,CAAE,WAAA,EAAY,EAAG,GAAA,CAAI,IAAI,CAAA,GAAI,CAAA,CAAE,iBAAA,CAAkB,IAAA,EAAM,GAAG,CAAA;AAC7E,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA,EAGA,QAAA,GAAgC;AAC9B,IAAA,IAAI,IAAA,CAAK,YAAA,EAAa,EAAG,OAAO,IAAA,CAAK,cAAA;AACrC,IAAA,OAAO,KAAK,SAAA,EAAU;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,QAAA,EAA2D;AACnE,IAAA,QAAA,CAAS,IAAA,CAAK,UAAU,CAAA;AACxB,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,SAAA,CAAU,CAAC,KAAA,KAAuB;AACpE,MAAA,IAAI,CAAC,IAAA,CAAK,WAAA,CAAY,KAAK,CAAA,EAAG;AAC9B,MAAA,QAAA,CAAS,IAAA,CAAK,UAAU,CAAA;AAAA,IAC1B,CAAC,CAAA;AACD,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA,EAGA,IAAI,YAAA,GAAoC;AACtC,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA,EAEA,IAAI,SAAA,GAAqB;AACvB,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAAA,EAEQ,YAAY,KAAA,EAA6B;AAC/C,IAAA,IAAI,KAAA,CAAM,OAAA,KAAY,KAAA,IAAS,IAAA,CAAK,YAAY,OAAO,IAAA;AACvD,IAAA,IAAI,CAAC,IAAA,CAAK,cAAA,EAAgB,OAAO,IAAA;AACjC,IAAA,IACE,KAAA,CAAM,EAAA,KAAO,QAAA,IACb,KAAA,CAAM,EAAA,KAAO,QAAA,IACb,KAAA,CAAM,EAAA,KAAO,UAAA,IACb,KAAA,CAAM,EAAA,KAAO,SAAA,EACb;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAY,IAAA,CAAK,iBAAiB,CAAA;AACvD,IAAA,KAAA,MAAW,CAAA,IAAK,MAAM,OAAA,EAAS;AAC7B,MAAA,IAAI,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,EAAG,OAAO,IAAA;AAAA,IAC9B;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAGO,SAAS,MACd,UAAA,EACa;AACb,EAAA,OAAO,IAAI,MAAY,UAAU,CAAA;AACnC;AAGO,SAAS,IACd,CAAA,EACqB;AACrB,EAAA,OAAO,IAAI,cAAoB,CAAC,CAAA;AAClC;AAIA,SAAS,MAAM,GAAA,EAAqC;AAClD,EAAA,MAAM,GAAA,GAAM,IAAI,WAAA,CAAY,GAAA,CAAI,MAAM,CAAA;AACtC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,MAAA,EAAQ,KAAK,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA,CAAI,CAAC,CAAA;AACnD,EAAA,OAAO,GAAA;AACT;;;AC9UO,IAAM,gBAAA,GAAN,MAAM,iBAAA,CAA0D;AAAA,EAGpD,KAAA;AAAA,EAEjB,WAAA,CAAYP,MAAAA,GAAoB,EAAC,EAAG;AAClC,IAAA,IAAA,CAAK,KAAA,GAAQA,MAAAA;AAAA,EACf;AAAA,EAEA,KACE,MAAA,EAMC;AACD,IAAA,MAAM,IAAA,GAAO,mBAAmB,MAAM,CAAA;AACtC,IAAA,OAAO,IAAI,iBAAA,CAAiB;AAAA,MAC1B,GAAG,IAAA,CAAK,KAAA;AAAA,MACR;AAAA,KACD,CAAA;AAAA,EAMH;AAAA,EAEA,IAAA,CACE,MAAA,EACA,UAAA,EACA,IAAA,GAAkB,MAAA,EAC0E;AAC5F,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,MAAA,EAAQ,UAAA,EAAY,IAAI,CAAA;AAAA,EAGjD;AAAA,EAEA,SAAA,CACE,QACA,UAAA,EAC0F;AAC1F,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,MAAA,EAAQ,UAAA,EAAY,OAAO,CAAA;AAAA,EAGpD;AAAA,EAEA,QAAA,CACE,QACA,UAAA,EACyF;AACzF,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,MAAA,EAAQ,UAAA,EAAY,MAAM,CAAA;AAAA,EAGnD;AAAA,EAEA,SAAA,CACE,QACA,UAAA,EAC0F;AAC1F,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,MAAA,EAAQ,UAAA,EAAY,OAAO,CAAA;AAAA,EAGpD;AAAA,EAEA,QAAA,CACE,QACA,UAAA,EACyF;AACzF,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,MAAA,EAAQ,UAAA,EAAY,MAAM,CAAA;AAAA,EAGnD;AAAA,EAEA,MAAM,QAAA,EAA+D;AACnE,IAAA,MAAM,UAAA,GAAa,sBAAA;AAAA,MACjB,QAAA;AAAA,MACA,KAAK,OAAA;AAAQ,KACf;AACA,IAAA,OAAO,IAAI,iBAAA,CAAiB;AAAA,MAC1B,GAAG,IAAA,CAAK,KAAA;AAAA,MACR,KAAA,EAAO,CAAC,GAAI,IAAA,CAAK,MAAM,KAAA,IAAS,IAAK,UAAU;AAAA,KAChD,CAAA;AAAA,EACH;AAAA,EAEA,OACE,QAAA,EACuE;AACvE,IAAA,MAAM,IAAA,GAAO,cAAA,CAAe,IAAA,CAAK,OAAA,EAAS,CAAA;AAC1C,IAAA,MAAM,GAAA,GAAM,SAAS,IAAgC,CAAA;AACrD,IAAA,MAAM,IAAA,GAAmB;AAAA,MACvB,GAAG,IAAA,CAAK,KAAA;AAAA,MACR,MAAA,EAAQ,iBAAA,CAAkB,GAAA,EAAK,IAAA,CAAK,SAAS;AAAA,KAC/C;AACA,IAAA,OAAO,IAAA,CAAK,QAAA;AACZ,IAAA,OAAO,IAAI,kBAAiB,IAAI,CAAA;AAAA,EAGlC;AAAA,EAEA,QAAQ,QAAA,EAAiE;AACvE,IAAA,MAAM,IAAA,GAAO,cAAA,CAAe,IAAA,CAAK,OAAA,EAAS,CAAA;AAC1C,IAAA,MAAM,MAAA,GAAS,SAAS,IAAgC,CAAA;AACxD,IAAA,MAAM,cAAc,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,GACpC,OAAO,GAAA,CAAI,CAAC,KAAA,KAAU,MAAA,CAAO,KAAK,CAAoB,CAAA,GACtD,CAAC,MAAA,CAAO,MAAM,CAAoB,CAAA;AACtC,IAAA,OAAO,IAAI,iBAAA,CAAiB;AAAA,MAC1B,GAAG,IAAA,CAAK,KAAA;AAAA,MACR,OAAA,EAAS,CAAC,GAAI,IAAA,CAAK,MAAM,OAAA,IAAW,EAAC,EAAI,GAAG,WAAW;AAAA,KACxD,CAAA;AAAA,EACH;AAAA,EAEA,OAAO,QAAA,EAAgE;AACrE,IAAA,MAAM,IAAA,GAAO,0BAAA,CAA2B,IAAA,CAAK,OAAA,EAAS,CAAA;AACtD,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,QAAA,CAAS,IAAwC,CAAC,CAAA;AAC5E,IAAA,OAAO,IAAI,iBAAA,CAAiB;AAAA,MAC1B,GAAG,IAAA,CAAK,KAAA;AAAA,MACR,MAAA,EAAQ,CAAC,GAAI,IAAA,CAAK,MAAM,MAAA,IAAU,IAAK,UAAU;AAAA,KAClD,CAAA;AAAA,EACH;AAAA,EAEA,OAAA,CACE,QAAA,EACA,OAAA,GAA0B,KAAA,EACE;AAC5B,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,MAAA,IAAU,KAAK,KAAA,CAAM,QAAA,GACzC,0BAAA,CAA2B,IAAA,CAAK,SAAS,CAAA,GACzC,cAAA,CAAe,IAAA,CAAK,SAAS,CAAA;AACjC,IAAA,MAAM,MAAA,GAAS,SAAS,IAAwC,CAAA;AAChE,IAAA,MAAM,cAAc,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,GACpC,OAAO,GAAA,CAAI,CAAC,KAAA,KAAU,MAAA,CAAO,KAAK,CAAoB,CAAA,GACtD,CAAC,MAAA,CAAO,MAAM,CAAoB,CAAA;AACtC,IAAA,MAAM,cAAA,GAAiB,wBAAwB,OAAO,CAAA;AACtD,IAAA,MAAM,YAAA,GAAe,WAAA,CAAY,GAAA,CAAI,CAAC,UAAA,MAAgB;AAAA,MACpD,UAAA;AAAA,MACA;AAAA,KACF,CAAE,CAAA;AACF,IAAA,OAAO,IAAI,iBAAA,CAAiB;AAAA,MAC1B,GAAG,IAAA,CAAK,KAAA;AAAA,MACR,OAAA,EAAS,CAAC,GAAI,IAAA,CAAK,MAAM,OAAA,IAAW,EAAC,EAAI,GAAG,YAAY;AAAA,KACzD,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,KAAA,EAA2C;AAC/C,IAAA,OAAO,IAAI,iBAAA,CAAiB;AAAA,MAC1B,GAAG,IAAA,CAAK,KAAA;AAAA,MACR;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,OAAO,MAAA,EAA4C;AACjD,IAAA,OAAO,IAAI,iBAAA,CAAiB;AAAA,MAC1B,GAAG,IAAA,CAAK,KAAA;AAAA,MACR;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,QAAA,GAAuC;AACrC,IAAA,OAAO,IAAI,iBAAA,CAAiB;AAAA,MAC1B,GAAG,IAAA,CAAK,KAAA;AAAA,MACR,QAAA,EAAU;AAAA,KACX,CAAA;AAAA,EACH;AAAA,EAEA,OAAA,GAA+D;AAC7D,IAAA,OAAO,IAAI,iBAAA,CAAiB;AAAA,MAC1B,GAAG,IAAA,CAAK,KAAA;AAAA,MACR,YAAA,EAAc;AAAA,KACf,CAAA;AAAA,EACH;AAAA,EAEA,IAAI,EAAA,GAMF;AACA,IAAA,MAAM,OAAA,GAAU,IAAA;AAChB,IAAA,OAAO;AAAA,MACL,OAA0B,QAAA,EAA0D;AAClF,QAAA,MAAM,IAAA,GAAmB;AAAA,UACvB,GAAG,OAAA,CAAQ,KAAA;AAAA,UACX,QAAA,EAAU;AAAA,SACZ;AACA,QAAA,OAAO,IAAA,CAAK,MAAA;AACZ,QAAA,OAAO,IAAI,kBAAiB,IAAI,CAAA;AAAA,MAClC,CAAA;AAAA,MACA,MAAM,QAAA,EAAgD;AACpD,QAAA,OAAO,IAAI,iBAAA,CAAiB;AAAA,UAC1B,GAAG,OAAA,CAAQ,KAAA;AAAA,UACX,OAAA,EAAS;AAAA,YACP,GAAI,OAAA,CAAQ,KAAA,CAAM,OAAA,IAAW,EAAC;AAAA,YAC9B;AAAA;AACF,SACD,CAAA;AAAA,MACH,CAAA;AAAA,MACA,OAAO,QAAA,EAA2D;AAChE,QAAA,OAAO,IAAI,iBAAA,CAAiB;AAAA,UAC1B,GAAG,OAAA,CAAQ,KAAA;AAAA,UACX,QAAA,EAAU;AAAA,YACR,GAAI,OAAA,CAAQ,KAAA,CAAM,QAAA,IAAY,EAAC;AAAA,YAC/B;AAAA;AACF,SACD,CAAA;AAAA,MACH;AAAA,KACF;AAAA,EACF;AAAA,EAEA,SAAA,GAAqB;AACnB,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM;AACpB,MAAA,MAAM,IAAI,gBAAgB,+BAA+B,CAAA;AAAA,IAC3D;AACA,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEQ,UAAA,CACN,MAAA,EACA,UAAA,EACA,IAAA,EAC4B;AAC5B,IAAA,MAAM,IAAA,GAAO,mBAAmB,MAAM,CAAA;AACtC,IAAA,MAAM,IAAA,GAAO,eAAe,CAAC,GAAG,KAAK,OAAA,EAAQ,EAAG,IAAA,CAAK,KAAK,CAAC,CAAA;AAC3D,IAAA,MAAM,YAAA,GAAe,WAAW,IAA2B,CAAA;AAC3D,IAAA,MAAM,UAAA,GAAa,OAAO,YAAY,CAAA;AACtC,IAAA,IAAI,EAAE,sBAAsB,IAAA,CAAA,IAAS,UAAA,CAAW,SAAS,IAAA,IAAQ,UAAA,CAAW,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AAC7F,MAAA,MAAM,IAAI,gBAAgB,2EAA2E,CAAA;AAAA,IACvG;AACA,IAAA,MAAM,IAAA,GAAO,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA;AAC9B,IAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA;AAC/B,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,KAAA,EAAO;AACnB,MAAA,MAAM,IAAI,gBAAgB,0DAA0D,CAAA;AAAA,IACtF;AACA,IAAA,OAAO,IAAI,iBAAA,CAAiB;AAAA,MAC1B,GAAG,IAAA,CAAK,KAAA;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,GAAI,IAAA,CAAK,KAAA,CAAM,IAAA,IAAQ,EAAC;AAAA,QACxB;AAAA,UACE,IAAA;AAAA,UACA,IAAA;AAAA,UACA,IAAA;AAAA,UACA;AAAA;AACF;AACF,KACD,CAAA;AAAA,EACH;AAAA,EAEQ,OAAA,GAAyB;AAC/B,IAAA,MAAM,UAAyB,EAAC;AAChC,IAAA,IAAI,IAAA,CAAK,MAAM,IAAA,EAAM,OAAA,CAAQ,KAAK,IAAA,CAAK,KAAA,CAAM,KAAK,KAAK,CAAA;AACvD,IAAA,KAAA,MAAWQ,KAAAA,IAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,IAAQ,EAAC,EAAG;AACxC,MAAA,OAAA,CAAQ,IAAA,CAAKA,KAAAA,CAAK,IAAA,CAAK,KAAK,CAAA;AAAA,IAC9B;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AACF;AAGO,IAAMwB,MAAAA,GAAQ;AAEd,SAAS,WACd,EAAA,EACS;AACT,EAAA,OAAO,UAAA,CAAW,EAAA,CAAG,IAAI,gBAAA,EAAyC,CAAC,CAAA;AACrE;AAEO,SAAS,WAAW,OAAA,EAAyC;AAClE,EAAA,OAAO,QAAQ,SAAA,EAAU;AAC3B;AAMA,SAAS,mBAAmB,MAAA,EAAuB;AACjD,EAAA,IAAI,MAAA,KAAW,IAAA,IAAQ,OAAO,MAAA,KAAW,QAAA,EAAU;AACjD,IAAA,MAAM,IAAI,gBAAgB,CAAA,uEAAA,CAAyE,CAAA;AAAA,EACrG;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AACzB,IAAA,MAAM,IAAI,gBAAgB,gEAAgE,CAAA;AAAA,EAC5F;AACA,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,MAAiC,CAAA;AAChE,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,MAAM,IAAI,gBAAgB,mEAAmE,CAAA;AAAA,EAC/F;AACA,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,MAAM,IAAI,gBAAgB,gEAAgE,CAAA;AAAA,EAC5F;AACA,EAAA,MAAM,KAAA,GAAQ,QAAQ,CAAC,CAAA;AACvB,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,gBAAgB,kCAAkC,CAAA;AAAA,EAC9D;AACA,EAAA,MAAM,CAAC,KAAA,EAAO,KAAK,CAAA,GAAI,KAAA;AACvB,EAAA,IAAI,YAAA,CAAa,KAAK,CAAA,EAAG;AACvB,IAAA,OAAO,IAAI,aAAA,CAAc,KAAA,EAAO,KAAK,CAAA;AAAA,EACvC;AACA,EAAA,IAAI,iBAAiB,gBAAA,EAAkB;AACrC,IAAA,OAAO,IAAI,QAAA,CAAS,KAAA,CAAM,SAAA,IAAa,KAAK,CAAA;AAAA,EAC9C;AACA,EAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,0BAAA,EAA6B,KAAK,CAAA,sCAAA,CAAwC,CAAA;AACtG;AAEA,SAAS,aAAa,KAAA,EAAqC;AACzD,EAAA,OACE,KAAA,KAAU,IAAA,IACV,OAAO,KAAA,KAAU,YACjB,OAAQ,KAAA,CAA4B,GAAA,KAAQ,UAAA,IAC5C,OAAQ,KAAA,CAA+B,MAAA,KAAW,UAAA,IAClD,OAAQ,MAA+B,MAAA,KAAW,QAAA;AAEtD;AAEA,SAAS,sBAAA,CACP,UACA,OAAA,EACiB;AACjB,EAAA,MAAM,IAAA,GAAO,eAAe,OAAO,CAAA;AACnC,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,IAAI,CAAC,CAAA;AAC9B;AASA,SAAS,OAAO,KAAA,EAAiC;AAC/C,EAAA,IAAI,KAAA,KAAU,MAAA,EAAW,OAAO,YAAA,CAAa,IAAI,CAAA;AACjD,EAAA,IACE,KAAA,YAAiB,IAAA,IACjB,KAAA,YAAiB,OAAA,IACjB,iBAAiB,KAAA,EACjB;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,iBAAiB,SAAA,EAAW;AAC9B,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,UAAA,CAAW,KAAK,CAAA,EAAG;AACrB,IAAA,OAAO,aAAa,KAAK,CAAA;AAAA,EAC3B;AACA,EAAA,IAAI,gBAAA,CAAiB,KAAK,CAAA,EAAG;AAC3B,IAAA,IAAI,KAAA,YAAiB,aAAA,IAAiB,KAAA,YAAiB,QAAA,IAAY,iBAAiB,gBAAA,EAAkB;AACpG,MAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,yBAAA,EAA4B,KAAA,CAAM,IAAI,CAAA,CAAE,CAAA;AAAA,IACpE;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,aAAa,KAAK,CAAA;AAC3B;AAEA,SAASC,eAAc,KAAA,EAAkD;AACvE,EAAA,OACE,KAAA,KAAU,IAAA,IACV,OAAO,KAAA,KAAU,QAAA,IACjB,CAAC,gBAAA,CAAiB,KAAK,CAAA,IACvB,CAAC,UAAA,CAAW,KAAK,CAAA;AAErB;AAEA,SAAS,iBAAA,CACP,GAAA,EACA,aAAA,GAA+B,EAAC,EACyB;AACzD,EAAA,IAAI,CAACA,cAAAA,CAAc,GAAG,CAAA,EAAG,OAAO,kBAAkB,GAAG,CAAA;AACrD,EAAA,MAAM,MAAc,EAAC;AACrB,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AACxC,IAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,CAAA,CAAE,UAAA,CAAW,qBAAqB,CAAA,EAAG;AAChE,MAAA,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;AACT,MAAA;AAAA,IACF;AACA,IAAA,IAAI,aAAa,gBAAA,EAAkB;AACjC,MAAA,GAAA,CAAI,CAAC,CAAA,GAAI,qBAAA,CAAsB,CAAA,EAAG,CAAA,EAAG,eAAe,YAAY,CAAA;AAChE,MAAA;AAAA,IACF;AACA,IAAA,IAAI,aAAa,cAAA,EAAgB;AAC/B,MAAA,IAAI,EAAE,CAAA,CAAE,KAAA,YAAiB,gBAAA,CAAA,EAAmB;AAC1C,QAAA,MAAM,IAAI,gBAAgB,wCAAwC,CAAA;AAAA,MACpE;AACA,MAAA,GAAA,CAAI,CAAC,CAAA,GAAI,qBAAA,CAAsB,EAAE,KAAA,EAAO,CAAA,EAAG,eAAe,OAAO,CAAA;AACjE,MAAA;AAAA,IACF;AACA,IAAA,IAAI,aAAa,oBAAA,EAAsB;AACrC,MAAA,IAAI,EAAE,CAAA,CAAE,KAAA,YAAiB,gBAAA,CAAA,EAAmB;AAC1C,QAAA,MAAM,IAAI,gBAAgB,mDAAmD,CAAA;AAAA,MAC/E;AACA,MAAA,GAAA,CAAI,CAAC,CAAA,GAAI,qBAAA,CAAsB,EAAE,KAAA,EAAO,CAAA,EAAG,eAAe,QAAQ,CAAA;AAClE,MAAA;AAAA,IACF;AACA,IAAA,IAAI,aAAa,kBAAA,EAAoB;AACnC,MAAA,IAAI,EAAE,CAAA,CAAE,KAAA,YAAiB,gBAAA,CAAA,EAAmB;AAC1C,QAAA,MAAM,IAAI,gBAAgB,4CAA4C,CAAA;AAAA,MACxE;AACA,MAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,KAAA,CAAM,SAAA,EAAU;AAChC,MAAA,GAAA,CAAI,CAAC,CAAA,GAAI,qBAAA;AAAA,QACP,CAAA,CAAE,KAAA;AAAA,QACF,CAAA;AAAA,QACA,aAAA;AAAA,QACA,KAAA,CAAM,eAAe,QAAA,GAAW;AAAA,OAClC;AACA,MAAA;AAAA,IACF;AACA,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,iBAAA,CAAkB,CAAA,EAAG,aAAa,CAAA;AAAA,EAC7C;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,kBAAkB,KAAA,EAA6C;AACtE,EAAA,IAAI,KAAA,KAAU,MAAA,EAAW,OAAO,IAAI,MAAM,IAAI,CAAA;AAC9C,EAAA,IAAI,KAAA,YAAiB,WAAW,OAAO,KAAA;AACvC,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,wBAAwB,OAAA,EAAyC;AACxE,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,OAAO,EAAE,SAAA,EAAW,OAAA,EAAS,KAAA,EAAO,OAAA,EAAQ;AAAA,EAC9C;AACA,EAAA,MAAM,GAAA,GAAsB;AAAA,IAC1B,SAAA,EAAW,QAAQ,SAAA,IAAa,KAAA;AAAA,IAChC,KAAA,EAAO,QAAQ,KAAA,IAAS;AAAA,GAC1B;AACA,EAAA,IAAI,OAAA,CAAQ,eAAe,SAAA,EAAW;AACpC,IAAA,MAAA,CAAO,MAAA,CAAO,GAAA,EAAK,EAAE,UAAA,EAAY,WAAW,CAAA;AAAA,EAC9C,CAAA,MAAA,IAAW,OAAA,CAAQ,UAAA,KAAe,QAAA,EAAU;AAC1C,IAAA,MAAA,CAAO,MAAA,CAAO,GAAA,EAAK,EAAE,UAAA,EAAY,UAAU,CAAA;AAC3C,IAAA,IAAI,QAAA,IAAY,OAAA,IAAW,OAAA,CAAQ,MAAA,KAAW,MAAA,EAAW;AACvD,MAAA,MAAA,CAAO,OAAO,GAAA,EAAK,EAAE,MAAA,EAAQ,OAAA,CAAQ,QAAQ,CAAA;AAAA,IAC/C;AACA,IAAA,IAAI,eAAA,IAAmB,OAAA,IAAW,OAAA,CAAQ,aAAA,KAAkB,MAAA,EAAW;AACrE,MAAA,MAAA,CAAO,OAAO,GAAA,EAAK,EAAE,aAAA,EAAe,OAAA,CAAQ,eAAe,CAAA;AAAA,IAC7D;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAMA,SAAS,0BAA0B,IAAA,EAAmD;AACpF,EAAA,MAAM,OAAuB,EAAC;AAC9B,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,KAAA;AACH,MAAA,IAAA,CAAK,KAAK,IAAI,CAAA;AACd,MAAA;AAAA,IACF,KAAK,MAAA;AACH,MAAA,KAAA,MAAW,GAAA,IAAO,KAAK,IAAA,EAAM;AAC3B,QAAA,IAAA,CAAK,IAAA,CAAK,GAAG,yBAAA,CAA0B,GAAG,CAAC,CAAA;AAAA,MAC7C;AACA,MAAA;AAAA,IACF,KAAK,KAAA;AACH,MAAA,KAAA,MAAW,GAAA,IAAO,KAAK,IAAA,EAAM;AAC3B,QAAA,IAAA,CAAK,IAAA,CAAK,GAAG,yBAAA,CAA0B,GAAG,CAAC,CAAA;AAAA,MAC7C;AACA,MAAA;AAEA;AAEJ,EAAA,OAAO,IAAA;AACT;AAEA,SAASC,gBAAe,KAAA,EAAqF;AAC3G,EAAA,OAAO,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,KAAA,EAAO,YAAY,CAAA;AAChH;AAEA,SAAS,gBAAgB,KAAA,EAAwC;AAC/D,EAAA,IAAIA,eAAAA,CAAe,KAAK,CAAA,EAAG;AACzB,IAAA,OAAO,KAAA,CAAM,UAAA;AAAA,EACf;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,gBAAA,CAAiB,OAAc,aAAA,EAAuC;AAC7E,EAAA,MAAM,IAAA,GAAO,gBAAgB,KAAK,CAAA;AAClC,EAAA,OAAO,yBAAA,CAA0B,IAAI,CAAA,CAAE,IAAA,CAAK,CAAC,GAAA,KAAQ;AACnD,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AACxB,IAAA,OAAO,KAAA,KAAU,MAAA,IAAa,aAAA,CAAc,QAAA,CAAS,KAAK,CAAA;AAAA,EAC5D,CAAC,CAAA;AACH;AAEA,SAAS,qBAAA,CACP,YAAA,EACA,SAAA,EACA,aAAA,EACA,eAAA,EACkB;AAClB,EAAA,MAAM,UAAA,GAAa,aAAa,SAAA,EAAU;AAC1C,EAAA,MAAM,YAAA,GAAe,CAAC,UAAA,CAAW,IAAA,CAAK,KAAK,CAAA;AAC3C,EAAA,KAAA,MAAW1B,KAAAA,IAAQ,UAAA,CAAW,IAAA,IAAQ,EAAC,EAAG;AACxC,IAAA,YAAA,CAAa,IAAA,CAAKA,KAAAA,CAAK,IAAA,CAAK,KAAK,CAAA;AAAA,EACnC;AAEA,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,qBAAA,GAAwB,EAAA;AAC5B,EAAA,IAAI,sBAAA,GAAyB,EAAA;AAE7B,EAAA,IAAI,WAAW,KAAA,EAAO;AACpB,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AAChD,MAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA;AAChC,MAAA,IAAI,CAAC,KAAA,EAAO;AACZ,MAAA,MAAM,IAAA,GAAO,gBAAgB,KAAK,CAAA;AAClC,MAAA,IAAI,IAAA,CAAK,SAAS,MAAA,IAAU,IAAA,CAAK,SAAS,IAAA,IAAQ,IAAA,CAAK,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AACxE,QAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,EAAG,aAAA,EAAe,YAAY,CAAA;AACzF,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,SAAA,GAAY,MAAA,CAAO,SAAA;AACnB,UAAA,QAAA,GAAW,MAAA,CAAO,QAAA;AAClB,UAAA,qBAAA,GAAwB,CAAA;AACxB,UAAA;AAAA,QACF;AAAA,MACF;AACA,MAAA,IAAI,IAAA,CAAK,SAAS,MAAA,IAAU,IAAA,CAAK,SAAS,KAAA,IAAS,IAAA,CAAK,IAAA,CAAK,MAAA,IAAU,CAAA,EAAG;AACxE,QAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACzC,UAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AACvB,UAAA,IAAI,GAAA,EAAK,SAAS,MAAA,IAAU,GAAA,CAAI,SAAS,IAAA,IAAQ,GAAA,CAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AACtE,YAAA,MAAM,MAAA,GAAS,kBAAA;AAAA,cACb,GAAA,CAAI,KAAK,CAAC,CAAA;AAAA,cACV,GAAA,CAAI,KAAK,CAAC,CAAA;AAAA,cACV,aAAA;AAAA,cACA;AAAA,aACF;AACA,YAAA,IAAI,MAAA,EAAQ;AACV,cAAA,SAAA,GAAY,MAAA,CAAO,SAAA;AACnB,cAAA,QAAA,GAAW,MAAA,CAAO,QAAA;AAClB,cAAA,qBAAA,GAAwB,CAAA;AACxB,cAAA,sBAAA,GAAyB,CAAA;AACzB,cAAA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,QAAA,IAAI,SAAA,EAAW;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,SAAA,IAAa,CAAC,QAAA,IAAY,0BAA0B,EAAA,EAAI;AAC3D,IAAA,MAAM,IAAI,eAAA;AAAA,MACR,0BAA0B,SAAS,CAAA,gKAAA;AAAA,KAGrC;AAAA,EACF;AAEA,EAAA,MAAM,gBAAgB,CAAC,GAAI,UAAA,CAAW,KAAA,IAAS,EAAG,CAAA;AAClD,EAAA,IAAI,0BAA0B,CAAA,EAAG;AAC/B,IAAA,MAAM,KAAA,GAAQ,cAAc,qBAAqB,CAAA;AACjD,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,uBAAA,EAA0B,SAAS,CAAA,+BAAA,CAAiC,CAAA;AAAA,IAChG;AACA,IAAA,MAAM,IAAA,GAAO,gBAAgB,KAAK,CAAA;AAClC,IAAA,IAAI,EAAE,gBAAgB,IAAA,CAAA,EAAO;AAC3B,MAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,uBAAA,EAA0B,SAAS,CAAA,oCAAA,CAAsC,CAAA;AAAA,IACrG;AACA,IAAA,MAAM,aAAA,GAAgB,KAAK,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,EAAG,GAAA,KAAQ,QAAQ,sBAAsB,CAAA;AACjF,IAAA,IAAI,aAAA,CAAc,WAAW,CAAA,EAAG;AAC9B,MAAA,MAAM,aAAa,OAAO,KAAA,KAAU,QAAA,IAAY,YAAA,IAAgB,SAAS,KAAA,CAAM,QAAA;AAC/E,MAAA,aAAA,CAAc,qBAAqB,CAAA,GAAI,UAAA,GACnC,EAAE,UAAA,EAAY,aAAA,CAAc,CAAC,CAAA,EAA+B,QAAA,EAAU,IAAA,EAAK,GAC1E,aAAA,CAAc,CAAC,CAAA;AAAA,IACtB,CAAA,MAAO;AACL,MAAA,MAAM,MAAA,GAAS,IAAI,IAAA,CAAK,KAAA,EAAO,aAAa,CAAA;AAC5C,MAAA,MAAM,aAAa,OAAO,KAAA,KAAU,QAAA,IAAY,YAAA,IAAgB,SAAS,KAAA,CAAM,QAAA;AAC/E,MAAA,aAAA,CAAc,qBAAqB,IAAI,UAAA,GACnC,EAAE,YAAY,MAAA,EAAQ,QAAA,EAAU,MAAK,GACrC,MAAA;AAAA,IACN;AAAA,EACF,CAAA,MAAO;AACL,IAAA,aAAA,CAAc,MAAA,CAAO,uBAAuB,CAAC,CAAA;AAAA,EAC/C;AAEA,EAAA,MAAM,iBAA+B,EAAC;AACtC,EAAA,MAAM,gBAA8B,EAAC;AACrC,EAAA,KAAA,MAAW,KAAK,aAAA,EAAe;AAC7B,IAAA,IAAI,gBAAA,CAAiB,CAAA,EAAG,aAAa,CAAA,EAAG;AACtC,MAAA,aAAA,CAAc,KAAK,CAAC,CAAA;AAAA,IACtB,CAAA,MAAO;AACL,MAAA,cAAA,CAAe,KAAK,CAAC,CAAA;AAAA,IACvB;AAAA,EACF;AAEA,EAAA,IAAI,gBAAA;AACJ,EAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAC5B,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,IAAA,gBAAA,GAAmB,EAAC;AACpB,IAAA,KAAA,MAAW,KAAK,aAAA,EAAe;AAC7B,MAAA,KAAA,MAAW,GAAA,IAAO,yBAAA,CAA0B,eAAA,CAAgB,CAAC,CAAC,CAAA,EAAG;AAC/D,QAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AACxB,QAAA,MAAM,GAAA,GAAM,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAC7B,QAAA,IAAI,KAAA,KAAU,MAAA,IAAa,aAAA,CAAc,QAAA,CAAS,KAAK,KAAK,CAAC,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AAC1E,UAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AACZ,UAAA,gBAAA,CAAiB,KAAK,GAAG,CAAA;AAAA,QAC3B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,aAAA,GAAyB,EAAE,GAAG,UAAA,EAAW;AAC/C,EAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,IAAA,aAAA,CAAc,KAAA,GAAQ,cAAA;AAAA,EACxB,CAAA,MAAO;AACL,IAAA,OAAO,aAAA,CAAc,KAAA;AAAA,EACvB;AAEA,EAAA,MAAM,iBAAiB,aAAA,CAAc,MAAA;AACrC,EAAA,MAAM,eAAA,GAAkB,cAAA,KAAmB,MAAA,IAAayB,cAAAA,CAAc,cAAc,CAAA;AACpF,EAAA,IAAI,aAAA,GAAgB,aAAA;AACpB,EAAA,IAAI,WAAA;AAEJ,EAAA,IAAI,eAAA,KAAoB,QAAA,KAAa,cAAA,KAAmB,MAAA,IAAa,eAAA,CAAA,EAAkB;AACrF,IAAA,MAAM,IAAI,eAAA;AAAA,MACR,6BAA6B,SAAS,CAAA,gDAAA;AAAA,KACxC;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,IAAA,IAAI,oBAAoB,YAAA,EAAc;AACpC,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,0BAA0B,SAAS,CAAA,0DAAA;AAAA,OACrC;AAAA,IACF;AACA,IAAA,WAAA,GAAc,qBAAA;AACd,IAAA,aAAA,GAAgB;AAAA,MACd,GAAG,aAAA;AAAA,MACH,MAAA,EAAQ;AAAA,QACN,CAAC,WAAW,GAAG;AAAA;AACjB,KACF;AAAA,EACF;AAEA,EAAA,OAAO,IAAI,gBAAA;AAAA,IACT,aAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,aAAA,CAAc,MAAA,GAAS,CAAA,GAAI,aAAA,GAAgB,MAAA;AAAA,IAC3C,gBAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,kBAAA,CACP,IAAA,EACA,IAAA,EACA,aAAA,EACA,YAAA,EACuD;AACvD,EAAA,IAAI,IAAA,EAAM,IAAA,KAAS,KAAA,IAAS,IAAA,EAAM,SAAS,KAAA,EAAO;AAChD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AAC1B,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AAC1B,IAAA,IACE,MAAA,KAAW,MAAA,IACX,MAAA,KAAW,MAAA,IACX,aAAA,CAAc,QAAA,CAAS,MAAM,CAAA,IAC7B,YAAA,CAAa,QAAA,CAAS,MAAM,CAAA,EAC5B;AACA,MAAA,OAAO,EAAE,SAAA,EAAW,IAAA,EAAM,QAAA,EAAU,IAAA,EAAK;AAAA,IAC3C;AACA,IAAA,IACE,MAAA,KAAW,MAAA,IACX,MAAA,KAAW,MAAA,IACX,aAAA,CAAc,QAAA,CAAS,MAAM,CAAA,IAC7B,YAAA,CAAa,QAAA,CAAS,MAAM,CAAA,EAC5B;AACA,MAAA,OAAO,EAAE,SAAA,EAAW,IAAA,EAAM,QAAA,EAAU,IAAA,EAAK;AAAA,IAC3C;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;;;AC35BO,SAAS,aAAA,CACd,QACA,QAAA,EACS;AACT,EAAA,IAAI,QAAA,KAAa,QAAW,OAAO,IAAA;AACnC,EAAA,IAAI,MAAA,KAAW,QAAW,OAAO,KAAA;AACjC,EAAA,OAAO,aAAA,CAAc,MAAM,CAAA,KAAM,aAAA,CAAc,QAAQ,CAAA;AACzD;AAGO,SAAS,qBACd,UAAA,EAC0B;AAC1B,EAAA,IAAI,WAAW,MAAA,KAAW,CAAA,EAAG,OAAO,IAAI,MAAM,IAAI,CAAA;AAClD,EAAA,MAAM,CAAC,KAAA,EAAO,MAAA,EAAQ,GAAG,IAAI,CAAA,GAAI,UAAA;AACjC,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,EAAA,OAAO,EAAA,CAAG,KAAA,EAAO,MAAA,EAAQ,GAAG,IAAI,CAAA;AAClC;AAGO,SAAS,oBAAA,CACd,eACA,iBAAA,EACiC;AACjC,EAAA,IAAI,aAAA,KAAkB,QAAW,OAAO,IAAA;AACxC,EAAA,IAAI,iBAAA,KAAsB,QAAW,OAAO,aAAA;AAC5C,EAAA,IAAI,aAAA,CAAc,aAAA,EAAe,iBAAiB,CAAA,EAAG;AACnD,IAAA,OAAO,IAAI,MAAM,KAAK,CAAA;AAAA,EACxB;AACA,EAAA,OAAO,GAAA,CAAI,aAAA,EAAe,GAAA,CAAI,iBAAiB,CAAC,CAAA;AAClD;AAGO,SAAS,eAAA,CACd,QACA,QAAA,EACS;AACT,EAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,GAAG,OAAO,IAAA;AAC3C,EAAA,IAAI,CAAC,QAAA,IAAY,QAAA,CAAS,MAAA,GAAS,MAAA,CAAO,QAAQ,OAAO,KAAA;AACzD,EAAA,OAAO,MAAA,CAAO,KAAA,CAAM,CAAC,MAAA,EAAQ,KAAA,KAAU,aAAA,CAAc,MAAM,CAAA,KAAM,aAAA,CAAc,QAAA,CAAS,KAAK,CAAC,CAAC,CAAA;AACjG;AAGO,SAAS,aAAA,CACd,QACA,QAAA,EACS;AACT,EAAA,IAAI,MAAA,KAAW,MAAA,EAAW,OAAO,QAAA,KAAa,MAAA;AAC9C,EAAA,IAAI,QAAA,KAAa,QAAW,OAAO,IAAA;AACnC,EAAA,OAAO,MAAA,IAAU,QAAA;AACnB;AAGO,SAAS,mBAAA,CACd,QACA,QAAA,EACS;AACT,EAAA,MAAM,WAAA,GAAc,OAAO,MAAA,IAAU,CAAA;AACrC,EAAA,MAAM,aAAA,GAAgB,SAAS,MAAA,IAAU,CAAA;AACzC,EAAA,IAAI,WAAA,GAAc,eAAe,OAAO,KAAA;AAExC,EAAA,IAAI,MAAA,CAAO,UAAU,MAAA,EAAW;AAC9B,IAAA,OAAO,SAAS,KAAA,KAAU,MAAA;AAAA,EAC5B;AACA,EAAA,IAAI,QAAA,CAAS,KAAA,KAAU,MAAA,EAAW,OAAO,IAAA;AAEzC,EAAA,MAAM,SAAA,GAAY,cAAc,MAAA,CAAO,KAAA;AACvC,EAAA,MAAM,WAAA,GAAc,gBAAgB,QAAA,CAAS,KAAA;AAC7C,EAAA,OAAO,SAAA,IAAa,WAAA;AACtB;AAGO,SAAS,iBAAA,CACd,QACA,QAAA,EACS;AACT,EAAA,OACE,aAAA;AAAA,IACE,MAAA,CAAO,KAAA;AAAA,IACP,QAAA,CAAS;AAAA,GACX,IACA,eAAA;AAAA,IACE,MAAA,CAAO,OAAA;AAAA,IACP,QAAA,CAAS;AAAA,OAEX,mBAAA,CAAoB,aAAA,CAAc,MAAM,CAAA,EAAG,aAAA,CAAc,QAAQ,CAAC,CAAA;AAEtE;AAEA,SAAS,cAAc,OAAA,EAAiE;AACtF,EAAA,OAAO;AAAA,IACL,GAAI,QAAQ,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,EAAQ,OAAA,CAAQ,MAAA,EAAO,GAAI,EAAC;AAAA,IACjE,GAAI,QAAQ,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAM,GAAI;AAAC,GAChE;AACF;AAEA,SAAS,cAAc,KAAA,EAAwB;AAC7C,EAAA,OAAO,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,CAAC,MAAM,IAAA,KAAkB;AACpD,IAAA,IAAI,OAAO,IAAA,KAAS,UAAA,EAAY,OAAO,YAAA;AACvC,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AACH;;;ACrGO,IAAM,yBAAN,MAA6B;AAAA,EACjB,WAAA;AAAA,EACA,aAAA;AAAA,EACT,SAAmC,EAAC;AAAA,EACpC,UAAA,GAAa,CAAA;AAAA,EAErB,YAAY,IAAA,EAGT;AACD,IAAA,IAAA,CAAK,cAAc,IAAA,CAAK,UAAA;AACxB,IAAA,IAAA,CAAK,gBAAgB,IAAA,CAAK,aAAA;AAAA,EAC5B;AAAA,EAEA,UAAA,GAAa,CAAC,OAAA,KAAqD;AACjE,IAAA,MAAM,MAAA,GAAS,aAAa,OAAO,CAAA;AACnC,IAAA,IAAI,IAAA,CAAK,OAAO,IAAA,CAAK,CAAC,WAAW,iBAAA,CAAkB,MAAA,EAAQ,MAAM,CAAC,CAAA,EAAG;AACnE,MAAA,IAAA,CAAK,aAAA,GAAgB,YAAA,CAAa,OAAO,CAAC,CAAA;AAC1C,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,WAAA,CAAY,MAAM,CAAA;AACtC,IAAA,IAAI,WAAW,IAAA,EAAM;AACnB,MAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,YAAA,CAAa,MAAM,CAAC,CAAA;AACrC,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,aAAa,IAAA,CAAK,UAAA;AACxB,IAAA,OAAO,MAAA,CAAO,KAAK,MAAM;AACvB,MAAA,IAAI,UAAA,KAAe,KAAK,UAAA,EAAY;AAClC,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,YAAA,CAAa,MAAM,CAAC,CAAA;AAAA,MACvC;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,SAAS,EAAC;AACf,IAAA,IAAA,CAAK,UAAA,IAAc,CAAA;AAAA,EACrB;AACF;AAEO,SAAS,aAAa,OAAA,EAA+C;AAC1E,EAAA,OAAO,EAAE,GAAG,OAAA,EAAQ;AACtB;;;ACPA,eAAsB,UACpB,aAAA,EACkC;AAClC,EAAA,MAAMjC,MAAAA,GAAQ,aAAa,aAAa,CAAA;AACxC,EAAA,MAAM,EAAA,GAAK,WAAWA,MAAK,CAAA;AAC3B,EAAA,MAAM,IAAA,GAAO,cAAc,EAAE,CAAA;AAE7B,EAAA,IAAI,GAAG,YAAA,EAAc;AACnB,IAAA,OAAO,KAAK,CAAC,CAAA;AAAA,EACf;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,aACP,aAAA,EACQ;AACR,EAAA,MAAM,WAAA,GAAc,iBAAA,CAAkB,aAAa,CAAA,GAAI,cAAc,KAAA,GAAQ,aAAA;AAC7E,EAAA,IAAI,OAAO,gBAAgB,UAAA,EAAY;AACrC,IAAA,OAAO,WAAA,CAAY,IAAI,gBAAA,EAAyC,CAAA;AAAA,EAClE;AACA,EAAA,OAAO,WAAA;AACT;AAEA,SAAS,kBACP,KAAA,EACkC;AAClC,EAAA,OAAO,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,YAAY,OAAA,IAAW,KAAA;AACnE;;;AC9DO,IAAM,eAAN,MAAsC;AAAA,EAC3C,WAAA,CACW,KACA,KAAA,EACT;AAFS,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AACA,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAAA,EACR;AAAA,EAFQ,GAAA;AAAA,EACA,KAAA;AAAA,EAGX,IAAI,MAAA,EAAyB;AAC3B,IAAA,IAAI,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO,MAAM,CAAA,EAAG,OAAO,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AACtF,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AAC9B,IAAA,IAAI,SAAkB,IAAA,CAAK,KAAA;AAC3B,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI,WAAW,IAAA,IAAQ,MAAA,KAAW,UAAa,OAAO,MAAA,KAAW,UAAU,OAAO,MAAA;AAClF,MAAA,MAAA,GAAU,OAAmC,IAAI,CAAA;AAAA,IACnD;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,QAAA,GAAoC;AAClC,IAAA,OAAOmC,YAAAA,CAAY,KAAK,KAAK,CAAA;AAAA,EAC/B;AACF,CAAA;AAMO,SAASA,aAAY,GAAA,EAAuD;AACjF,EAAA,MAAM,MAA+B,EAAC;AACtC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG,GAAA,CAAI,GAAG,CAAA,GAAI,UAAA,CAAW,KAAK,CAAA;AAC3E,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,WAAW,KAAA,EAAyB;AAClD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,UAAA,CAAW,IAAI,CAAC,CAAA;AACrE,EAAA,IAAI,iBAAiB,IAAA,EAAM,OAAO,IAAI,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AAC1D,EAAA,IAAI,UAAU,IAAA,IAAQ,OAAO,UAAU,QAAA,EAAU,OAAOA,aAAY,KAAgC,CAAA;AACpG,EAAA,OAAO,KAAA;AACT;AAEO,SAASC,WAAU,KAAA,EAAwB;AAChD,EAAA,OAAO,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,CAAC,MAAM,KAAA,KAAU;AAC5C,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,SAAiB,CAAA,EAAG,KAAA,CAAM,UAAU,CAAA,CAAA,CAAA;AACzD,IAAA,IAAI,KAAA,YAAiB,IAAA,EAAM,OAAO,KAAA,CAAM,WAAA,EAAY;AACpD,IAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxE,MAAA,MAAM,SAAkC,EAAC;AACzC,MAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,IAAA,EAAK,EAAG,MAAA,CAAO,GAAG,CAAA,GAAK,KAAA,CAAkC,GAAG,CAAA;AACjG,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAC,CAAA;AACH;;;ACzBA,IAAM,cAAA,uBAAqB,OAAA,EAAyD;AACpF,IAAM,cAAA,uBAAqB,OAAA,EAAwB;AAE5C,SAAS,iBAAA,CACd,KACA,MAAA,EACM;AACN,EAAA,cAAA,CAAe,GAAA,CAAI,KAAK,MAAM,CAAA;AAChC;AA+BO,SAAS,sBAAsB,IAAA,EAAoC;AACxE,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,SAAA,CAAU,MAAM,IAAI,CAAA;AACpB,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,SAAA,CAAU,OAAgB,IAAA,EAAyB;AAC1D,EAAA,IAAI,KAAA,YAAiB,OAAA,IAAW,SAAA,CAAU,KAAK,CAAA,EAAG;AAChD,IAAA,MAAM,OAAQ,KAAA,CAAkB,IAAA;AAChC,IAAA,IAAI,IAAA,CAAK,MAAA,IAAU,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,CAAC,CAAC,CAAA,CAAE,CAAA;AACtD,IAAA;AAAA,EACF;AACA,EAAA,IAAI,KAAA,YAAiB,QAAQ,KAAA,YAAiB,SAAA,IAAa,WAAW,KAAK,CAAA,IAAK,SAAA,CAAU,KAAK,CAAA,EAAG;AAChG,IAAA,KAAA,MAAW,GAAA,IAAQ,KAAA,CAA2B,IAAA,EAAM,SAAA,CAAU,KAAK,IAAI,CAAA;AACvE,IAAA;AAAA,EACF;AACA,EAAA,IAAI,CAACH,cAAAA,CAAc,KAAK,CAAA,IAAK,gBAAA,CAAiB,KAAK,CAAA,EAAG;AACtD,EAAA,KAAA,MAAW,SAAS,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA,EAAG,SAAA,CAAU,OAAO,IAAI,CAAA;AACjE;AAEO,SAASI,mBAAAA,CAAmB,MAAuB,GAAA,EAAuC;AAC/F,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,KAAA;AACH,MAAA,OAAQ,IAAA,CAAe,KAAA;AAAA,IACzB,KAAK,KAAA;AACH,MAAA,OAAOC,SAAAA,CAAS,GAAA,EAAM,IAAA,CAAiB,IAAI,CAAA;AAAA,IAC7C,KAAK,MAAA;AACH,MAAA,OAAOC,cAAa,IAAA,EAAc,CAAC,UAAUF,mBAAAA,CAAmB,KAAA,EAAO,GAAG,CAAC,CAAA;AAAA;AAEjF;AAGO,SAAS,2BAAA,CAA4B,MAAuB,GAAA,EAAuB;AACxF,EAAA,MAAM,SAAA,GAAY,GAAA,CAAI,kBAAA,GAAqB,IAAI,CAAA;AAC/C,EAAA,IAAI,SAAA,KAAc,MAAA,EAAW,OAAO,SAAA,CAAU,KAAA;AAC9C,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,KAAA;AACH,MAAA,OAAQ,IAAA,CAAe,KAAA;AAAA,IACzB,KAAK,KAAA;AACH,MAAA,OAAO,GAAA,CAAI,GAAA,CAAI,aAAA,CAAc,IAAe,CAAC,CAAA;AAAA,IAC/C,KAAK,MAAA;AACH,MAAA,OAAOE,cAAa,IAAA,EAAc,CAAC,UAAU,2BAAA,CAA4B,KAAA,EAAO,GAAG,CAAC,CAAA;AAAA;AAE1F;AAEA,SAAS,cAAc,GAAA,EAAsB;AAC3C,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,GAAA,CAAI,GAAG,CAAA;AACrC,EAAA,IAAI,MAAA,KAAW,QAAW,OAAO,MAAA;AACjC,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAC9B,EAAA,cAAA,CAAe,GAAA,CAAI,KAAK,IAAI,CAAA;AAC5B,EAAA,OAAO,IAAA;AACT;AAEA,SAASA,aAAAA,CAAa,MAAY,OAAA,EAAsD;AACtF,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,IAAA,EAAM;AACT,MAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA;AAC/B,MAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA;AAC/B,MAAA,OAAOC,UAAAA,CAAU,CAAC,CAAA,IAAKA,UAAAA,CAAU,CAAC,CAAA,GAAI,IAAA,GAAOC,YAAAA,CAAY,CAAA,EAAG,CAAC,CAAA;AAAA,IAC/D;AAAA,IACA,KAAK,IAAA;AACH,MAAA,OAAOC,cAAa,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,EAAG,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,EAAG,CAAC,GAAA,KAAQ,MAAM,CAAC,CAAA;AAAA,IACtF,KAAK,KAAA;AACH,MAAA,OAAOA,cAAa,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,EAAG,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,EAAG,CAAC,GAAA,KAAQ,OAAO,CAAC,CAAA;AAAA,IACvF,KAAK,IAAA;AACH,MAAA,OAAOA,cAAa,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,EAAG,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,EAAG,CAAC,GAAA,KAAQ,MAAM,CAAC,CAAA;AAAA,IACtF,KAAK,KAAA;AACH,MAAA,OAAOA,cAAa,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,EAAG,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,EAAG,CAAC,GAAA,KAAQ,OAAO,CAAC,CAAA;AAAA,IACvF,KAAK,KAAA,EAAO;AACV,MAAA,IAAI,OAAA,GAAU,KAAA;AACd,MAAA,KAAA,MAAW,GAAA,IAAO,KAAK,IAAA,EAAM;AAC3B,QAAA,MAAM,KAAA,GAAQ,QAAQ,GAAG,CAAA;AACzB,QAAA,IAAI,KAAA,KAAU,OAAO,OAAO,KAAA;AAC5B,QAAA,IAAIF,UAAAA,CAAU,KAAK,CAAA,EAAG,OAAA,GAAU,IAAA;AAAA,MAClC;AACA,MAAA,OAAO,UAAU,IAAA,GAAO,IAAA;AAAA,IAC1B;AAAA,IACA,KAAK,IAAA,EAAM;AACT,MAAA,IAAI,OAAA,GAAU,KAAA;AACd,MAAA,KAAA,MAAW,GAAA,IAAO,KAAK,IAAA,EAAM;AAC3B,QAAA,MAAM,KAAA,GAAQ,QAAQ,GAAG,CAAA;AACzB,QAAA,IAAI,KAAA,KAAU,MAAM,OAAO,IAAA;AAC3B,QAAA,IAAIA,UAAAA,CAAU,KAAK,CAAA,EAAG,OAAA,GAAU,IAAA;AAAA,MAClC;AACA,MAAA,OAAO,UAAU,IAAA,GAAO,KAAA;AAAA,IAC1B;AAAA,IACA,KAAK,KAAA,EAAO;AACV,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA;AACnC,MAAA,OAAOA,UAAAA,CAAU,KAAK,CAAA,GAAI,IAAA,GAAO,CAAC,KAAA;AAAA,IACpC;AAAA,IACA,KAAK,IAAA,EAAM;AACT,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA;AACnC,MAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA;AACjC,MAAA,IAAIA,UAAAA,CAAU,KAAK,CAAA,EAAG,OAAO,IAAA;AAC7B,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAG,GAAG,OAAO,KAAA;AAChC,MAAA,OAAO,IAAI,IAAA,CAAK,CAAC,SAASC,YAAAA,CAAY,IAAA,EAAM,KAAK,CAAC,CAAA;AAAA,IACpD;AAAA,IACA,KAAK,MAAA;AACH,MAAA,OAAOE,aAAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,EAAG,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,GAAG,KAAK,CAAA;AAAA,IAC3E,KAAK,OAAA;AACH,MAAA,OAAOA,aAAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,EAAG,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,GAAG,IAAI,CAAA;AAAA,IAC1E,KAAK,OAAA,EAAS;AACZ,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA;AACnC,MAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,CAAM,aAAY,GAAI,KAAA;AAAA,IAC3D;AAAA,IACA,KAAK,OAAA,EAAS;AACZ,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA;AACnC,MAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,CAAM,aAAY,GAAI,KAAA;AAAA,IAC3D;AAAA,IACA,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA;AACnC,MAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,CAAM,QAAQ,KAAK,CAAA,GAAI,MAAM,MAAA,GAAS,CAAA;AAAA,IAC5E;AAAA,IACA,KAAK,QAAA;AACH,MAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,IAAK,EAAE,CAAC,CAAA,CAAE,KAAK,EAAE,CAAA;AAAA,IACnE,KAAK,KAAA;AACH,MAAA,OAAA,CAAS,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,IAAK,CAAA,KAAe,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,IAAK,CAAA,CAAA;AAAA,IAC9E,KAAK,UAAA;AACH,MAAA,OAAA,CAAS,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,IAAK,CAAA,KAAe,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,IAAK,CAAA,CAAA;AAAA,IAC9E,KAAK,UAAA;AACH,MAAA,OAAA,CAAS,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,IAAK,CAAA,KAAe,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,IAAK,CAAA,CAAA;AAAA,IAC9E,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,UAAW,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,IAAK,CAAA;AAC3C,MAAA,OAAO,OAAA,KAAY,KACb,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAC,CAAE,CAAA,IAAK,CAAA,IAAa,OAAA,GACzC,IAAA;AAAA,IACN;AAAA,IACA,KAAK,UAAA,EAAY;AACf,MAAA,KAAA,MAAW,GAAA,IAAO,KAAK,IAAA,EAAM;AAC3B,QAAA,MAAM,KAAA,GAAQ,QAAQ,GAAG,CAAA;AACzB,QAAA,IAAI,CAACH,UAAAA,CAAU,KAAK,CAAA,EAAG,OAAO,KAAA;AAAA,MAChC;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,IACA,KAAK,UAAA,EAAY;AACf,MAAA,MAAM,YAAY,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,SAAS,CAAC,CAAA;AACjD,MAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,SAAA,EAAW,KAAA,EAAA,EAAS;AAC9C,QAAA,IAAII,wBAAAA,CAAwB,QAAQ,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAC,CAAE,CAAC,CAAA,EAAG;AAC3D,UAAA,OAAO,QAAQ,IAAA,CAAK,IAAA,CAAK,KAAA,GAAQ,CAAA,GAAI,CAAC,CAAE,CAAA;AAAA,QAC1C;AAAA,MACF;AACA,MAAA,OAAO,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAA,KAAM,CAAA,GAC5B,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAE,CAAA,GACxC,IAAA;AAAA,IACN;AAAA,IACA,KAAK,aAAA;AACH,MAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,KAAM,MAAA;AAAA,IACpC,KAAK,QAAA;AACH,MAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA,KAAM,IAAA;AAAA,IACpC,KAAK,gBAAA,EAAkB;AACrB,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA;AACtC,MAAA,MAAM,IAAA,GAAOC,gBAAe,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAC,CAAE,GAAG,MAAM,CAAA;AAC1D,MAAA,MAAM,YAAA,GAAeC,iBAAgB,QAAQ,CAAA;AAC7C,MAAA,OAAO,YAAA,KAAiB,IAAA,GAAO,KAAA,GAAQ,iBAAA,CAAkB,cAAc,IAAI,CAAA;AAAA,IAC7E;AAAA,IACA,KAAK,YAAA,EAAc;AACjB,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA;AACtC,MAAA,MAAM,IAAA,GAAOD,gBAAe,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAC,CAAE,GAAG,MAAM,CAAA;AAC1D,MAAA,MAAM,YAAA,GAAeC,iBAAgB,QAAQ,CAAA;AAC7C,MAAA,OAAO,YAAA,KAAiB,IAAA,GAAO,KAAA,GAAQ,aAAA,CAAc,cAAc,IAAI,CAAA;AAAA,IACzE;AAAA,IACA,KAAK,SAAA,EAAW;AACd,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAE,CAAA;AACtC,MAAA,MAAM,KAAA,GAAQC,iBAAgB,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAC,CAAE,GAAG,OAAO,CAAA;AAC7D,MAAA,MAAM,SAASC,oBAAAA,CAAoB,OAAA,CAAQ,KAAK,IAAA,CAAK,CAAC,CAAE,CAAC,CAAA;AACzD,MAAA,MAAM,QAAA,GAAWC,aAAY,QAAQ,CAAA;AACrC,MAAA,OAAO,aAAa,IAAA,GAAO,KAAA,GAAQ,uBAAA,CAAwB,QAAA,EAAU,KAAK,CAAA,IAAK,MAAA;AAAA,IACjF;AAAA,IACA,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,QAAQA,YAAAA,CAAY,OAAA,CAAQ,KAAK,IAAA,CAAK,CAAC,CAAE,CAAC,CAAA;AAChD,MAAA,MAAM,UAAUC,cAAAA,CAAc,OAAA,CAAQ,KAAK,IAAA,CAAK,CAAC,CAAE,CAAC,CAAA;AACpD,MAAA,OAAO,UAAU,IAAA,IAAQ,OAAA,KAAY,OAAO,KAAA,GAAQ,cAAA,CAAe,OAAO,OAAO,CAAA;AAAA,IACnF;AAAA,IACA,KAAK,UAAA,EAAY;AACf,MAAA,MAAM,UAAUA,cAAAA,CAAc,OAAA,CAAQ,KAAK,IAAA,CAAK,CAAC,CAAE,CAAC,CAAA;AACpD,MAAA,MAAM,QAAQD,YAAAA,CAAY,OAAA,CAAQ,KAAK,IAAA,CAAK,CAAC,CAAE,CAAC,CAAA;AAChD,MAAA,OAAO,UAAU,IAAA,IAAQ,OAAA,KAAY,OAAO,KAAA,GAAQ,cAAA,CAAe,OAAO,OAAO,CAAA;AAAA,IACnF;AAAA,IACA;AACE,MAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,gCAAA,EAAmC,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AAAA;AAE9E;AAEA,SAASJ,eAAAA,CAAe,OAAgB,KAAA,EAAqB;AAC3D,EAAA,eAAA,CAAgB,OAAO,KAAK,CAAA;AAC5B,EAAA,OAAO,KAAA;AACT;AAEA,SAASE,gBAAAA,CAAgB,OAAgB,KAAA,EAAsB;AAC7D,EAAA,gBAAA,CAAiB,OAAO,KAAK,CAAA;AAC7B,EAAA,OAAO,KAAA;AACT;AAEA,SAASC,qBAAoB,KAAA,EAAwB;AACnD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,EAAG;AACxD,IAAA,MAAM,IAAI,gBAAgB,8BAA8B,CAAA;AAAA,EAC1D;AACA,EAAA,IAAI,QAAQ,CAAA,EAAG;AACb,IAAA,MAAM,IAAI,gBAAgB,4BAA4B,CAAA;AAAA,EACxD;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAASF,iBAAgB,KAAA,EAA6B;AACpD,EAAA,MAAM,KAAA,GAAQG,aAAY,KAAK,CAAA;AAC/B,EAAA,OAAO,KAAA,KAAU,IAAA,GAAO,IAAA,GAAO,SAAA,CAAU,KAAK,CAAA;AAChD;AAEA,SAASA,aAAY,KAAA,EAA8B;AACjD,EAAA,IAAIT,UAAAA,CAAU,KAAK,CAAA,EAAG,OAAO,IAAA;AAC7B,EAAA,gBAAA,CAAiB,OAAO,UAAU,CAAA;AAClC,EAAA,OAAO,KAAA;AACT;AAEA,SAASU,eAAc,KAAA,EAAgC;AACrD,EAAA,IAAIV,UAAAA,CAAU,KAAK,CAAA,EAAG,OAAO,IAAA;AAC7B,EAAA,OAAO,gBAAA,CAAiB,KAAA,EAAO,EAAC,EAAG,SAAS,CAAA;AAC9C;AAWO,SAAS,uBAAA,CAAwB,MAAA,EAAiB,GAAA,EAAc,SAAA,EAA4B;AACjG,EAAA,IAAI,WAAW,MAAA,EAAW,OAAO,WAAW,GAAA,CAAI,GAAA,CAAI,SAAS,CAAC,CAAA;AAC9D,EAAA,IAAIW,mBAAkB,MAAM,CAAA,EAAG,OAAO,2BAAA,CAA4B,QAAQ,GAAG,CAAA;AAC7E,EAAA,IAAI,qBAAqB,MAAM,CAAA,EAAG,MAAM,IAAI,gBAAgB,gDAAgD,CAAA;AAC5G,EAAA,IAAIlB,eAAc,MAAM,CAAA,EAAG,OAAO,6BAAA,CAA8B,QAAkB,GAAG,CAAA;AACrF,EAAA,OAAO,WAAW,MAAM,CAAA;AAC1B;AAEA,SAAS,6BAAA,CAA8B,QAAgB,GAAA,EAAuC;AAC5F,EAAA,MAAM,MAA+B,EAAC;AACtC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AACjD,IAAA,IAAIkB,kBAAAA,CAAkB,KAAK,CAAA,EAAG;AAC5B,MAAA,GAAA,CAAI,GAAG,CAAA,GAAI,2BAAA,CAA4B,KAAA,EAAO,GAAG,CAAA;AAAA,IACnD,WAAWlB,cAAAA,CAAc,KAAK,KAAK,CAAC,gBAAA,CAAiB,KAAK,CAAA,EAAG;AAC3D,MAAA,GAAA,CAAI,GAAG,CAAA,GAAI,6BAAA,CAA8B,KAAA,EAAiB,GAAG,CAAA;AAAA,IAC/D,CAAA,MAAA,IAAW,oBAAA,CAAqB,KAAK,CAAA,EAAG;AACtC,MAAA,GAAA,CAAI,GAAG,CAAA,GAAI,IAAA;AAAA,IACb,CAAA,MAAO;AACL,MAAA,GAAA,CAAI,GAAG,CAAA,GAAI,UAAA,CAAW,KAAK,CAAA;AAAA,IAC7B;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAkBO,SAAS,oBAAA,CAAqB,CAAA,EAA4B,CAAA,EAA4B,OAAA,EAAqC;AAChI,EAAA,MAAM,OAAA,GAAU,cAAA,CAAe,GAAA,CAAI,CAAC,CAAA;AACpC,EAAA,MAAM,OAAA,GAAU,cAAA,CAAe,GAAA,CAAI,CAAC,CAAA;AACpC,EAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,IAAS,OAAA,EAAS,MAAA,IAAU,IAAI,KAAA,EAAA,EAAS;AAC3D,IAAA,MAAM,MAAA,GAAS,QAAS,KAAK,CAAA;AAC7B,IAAA,MAAM,EAAA,GAAK,OAAA,KAAY,MAAA,GACnBI,mBAAAA,CAAmB,MAAA,CAAO,UAAA,EAAY,EAAE,SAAA,EAAW,CAAA,EAAG,CAAA,GACtD,OAAA,CAAQ,KAAK,CAAA;AACjB,IAAA,MAAM,EAAA,GAAK,OAAA,KAAY,MAAA,GACnBA,mBAAAA,CAAmB,MAAA,CAAO,UAAA,EAAY,EAAE,SAAA,EAAW,CAAA,EAAG,CAAA,GACtD,OAAA,CAAQ,KAAK,CAAA;AACjB,IAAA,MAAM,GAAA,GAAMe,gBAAAA,CAAgB,EAAA,EAAI,EAAA,EAAI,OAAO,cAAc,CAAA;AACzD,IAAA,IAAI,GAAA,KAAQ,GAAG,OAAO,GAAA;AAAA,EACxB;AACA,EAAA,OAAO,CAAA;AACT;AAEO,SAASC,oBAAmB,KAAA,EAAyB;AAC1D,EAAA,OAAO,KAAA,KAAU,IAAA;AACnB;AAEO,SAASF,mBAAkB,KAAA,EAA0C;AAC1E,EAAA,OAAO,iBAAiB,OAAA,IAAW,KAAA,YAAiB,KAAA,IAAS,KAAA,YAAiB,QAC3E,gBAAA,CAAiB,KAAK,CAAA,KAAO,KAAA,CAA4B,SAAS,KAAA,IAAU,KAAA,CAA4B,IAAA,KAAS,KAAA,IAAU,MAA4B,IAAA,KAAS,MAAA,CAAA;AACrK;AAEO,SAASG,mBAAkB,KAAA,EAAyB;AACzD,EAAA,IAAI,oBAAA,CAAqB,KAAK,CAAA,EAAG,OAAO,IAAA;AACxC,EAAA,IAAI,KAAA,YAAiB,IAAA,IAAQ,UAAA,CAAW,KAAK,CAAA,EAAG,OAAQ,KAAA,CAAe,IAAA,CAAK,IAAA,CAAK,CAAC,GAAA,KAAQA,kBAAAA,CAAkB,GAAG,CAAC,CAAA;AAChH,EAAA,IAAI,CAACrB,cAAAA,CAAc,KAAK,KAAK,gBAAA,CAAiB,KAAK,GAAG,OAAO,KAAA;AAC7D,EAAA,OAAO,MAAA,CAAO,OAAO,KAAK,CAAA,CAAE,KAAK,CAAC,KAAA,KAAUqB,kBAAAA,CAAkB,KAAK,CAAC,CAAA;AACtE;AAcO,SAAShB,SAAAA,CAAS,QAAiC,IAAA,EAA8B;AACtF,EAAA,IAAI,KAAA,GAAiB,MAAA;AACrB,EAAA,KAAA,MAAW,WAAW,IAAA,EAAM;AAC1B,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,KAAA;AAClD,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,MAAA;AACtC,IAAA,KAAA,GAAS,MAAkC,OAAO,CAAA;AAAA,EACpD;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAASc,gBAAAA,CAAgB,CAAA,EAAY,CAAA,EAAY,OAAA,EAAiC;AACvF,EAAA,MAAM,KAAA,GAAQZ,WAAU,CAAC,CAAA,IAAM,OAAO,CAAA,KAAM,QAAA,IAAY,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AACtE,EAAA,MAAM,KAAA,GAAQA,WAAU,CAAC,CAAA,IAAM,OAAO,CAAA,KAAM,QAAA,IAAY,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AACtE,EAAA,IAAI,SAAS,KAAA,EAAO;AAClB,IAAA,IAAI,KAAA,IAAS,OAAO,OAAO,CAAA;AAC3B,IAAA,MAAM,SAAA,GAAY,QAAQ,KAAA,KAAU,OAAA;AACpC,IAAA,MAAM,OAAO,KAAA,GAAS,SAAA,GAAY,EAAA,GAAK,CAAA,GAAM,YAAY,CAAA,GAAI,EAAA;AAC7D,IAAA,OAAO,OAAA,CAAQ,SAAA,KAAc,MAAA,GAAS,CAAC,IAAA,GAAO,IAAA;AAAA,EAChD;AACA,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,MAAM,QAAA,EAAU;AAClD,IAAA,GAAA,GAAM,QAAQ,UAAA,KAAe,QAAA,GACzB,CAAA,CAAE,aAAA,CAAc,GAAG,OAAA,CAAQ,MAAA,EAAQ,OAAA,CAAQ,aAAiD,IAC5F,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,CAAA,GAAI,IAAI,CAAA,GAAI,CAAA;AAAA,EAC/B,CAAA,MAAO;AACL,IAAA,GAAA,GAAMe,iBAAAA,CAAiB,GAAG,CAAC,CAAA;AAAA,EAC7B;AACA,EAAA,OAAO,OAAA,CAAQ,SAAA,KAAc,MAAA,GAAS,CAAC,GAAA,GAAM,GAAA;AAC/C;AAEA,SAASb,aAAAA,CAAa,CAAA,EAAY,CAAA,EAAY,SAAA,EAAqD;AACjG,EAAA,IAAIF,WAAU,CAAC,CAAA,IAAKA,UAAAA,CAAU,CAAC,GAAG,OAAO,IAAA;AACzC,EAAA,OAAO,SAAA,CAAUe,iBAAAA,CAAiB,CAAA,EAAG,CAAC,CAAC,CAAA;AACzC;AAEA,SAASA,iBAAAA,CAAiB,GAAY,CAAA,EAAoB;AACxD,EAAA,IAAI,CAAA,KAAM,GAAG,OAAO,CAAA;AACpB,EAAA,IAAI,CAAA,YAAa,QAAQ,CAAA,YAAa,IAAA,SAAa,CAAA,CAAE,OAAA,EAAQ,GAAI,CAAA,CAAE,OAAA,EAAQ;AAC3E,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,CAAA,KAAM,QAAA,SAAiB,CAAA,GAAI,CAAA;AAC/D,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,CAAA,KAAM,QAAA,EAAU,OAAO,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,CAAA;AACpF,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,CAAA,KAAM,QAAA,EAAU,OAAO,MAAA,CAAO,CAAC,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA;AAC/E,EAAA,IAAI,OAAO,CAAA,KAAM,SAAA,IAAa,OAAO,CAAA,KAAM,SAAA,EAAW,OAAO,CAAA,KAAM,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,EAAA;AACnF,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,CAAA,KAAM,QAAA,EAAU,OAAO,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,CAAA;AACpF,EAAA,MAAM,EAAA,GAAK,OAAO,CAAC,CAAA;AACnB,EAAA,MAAM,EAAA,GAAK,OAAO,CAAC,CAAA;AACnB,EAAA,OAAO,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,KAAK,CAAA,GAAI,CAAA;AACtC;AAEA,SAASZ,aAAAA,CAAa,KAAA,EAAgB,OAAA,EAAkB,eAAA,EAA0C;AAChG,EAAA,IAAIH,WAAU,KAAK,CAAA,IAAKA,UAAAA,CAAU,OAAO,GAAG,OAAO,IAAA;AACnD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,OAAA,KAAY,UAAU,OAAO,KAAA;AACrE,EAAA,MAAM,MAAA,GAAS,eAAA,GAAkB,KAAA,CAAM,WAAA,EAAY,GAAI,KAAA;AACvD,EAAA,MAAM,GAAA,GAAM,eAAA,GAAkB,OAAA,CAAQ,WAAA,EAAY,GAAI,OAAA;AACtD,EAAA,MAAM,KAAK,IAAI,MAAA,CAAO,CAAA,CAAA,EAAI,GAAA,CAAI,QAAQ,mBAAA,EAAqB,MAAM,CAAA,CAAE,OAAA,CAAQ,MAAM,IAAI,CAAA,CAAE,QAAQ,IAAA,EAAM,GAAG,CAAC,CAAA,CAAA,CAAG,CAAA;AAC5G,EAAA,OAAO,EAAA,CAAG,KAAK,MAAM,CAAA;AACvB;AAUA,SAASA,WAAU,KAAA,EAA2C;AAC5D,EAAA,OAAO,KAAA,KAAU,QAAQ,KAAA,KAAU,MAAA;AACrC;AAEA,SAASI,yBAAwB,KAAA,EAAyB;AACxD,EAAA,IAAI,KAAA,IAAS,IAAA,IAAQ,KAAA,KAAU,KAAA,EAAO,OAAO,KAAA;AAC7C,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,IAAA;AAC3B,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU,OAAO,UAAU,CAAA,IAAK,CAAC,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AACxE,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA,KAAU,EAAA;AAChD,EAAA,OAAO,QAAQ,KAAK,CAAA;AACtB;AAEA,SAASH,YAAAA,CAAY,GAAY,CAAA,EAAqB;AACpD,EAAA,IAAI,CAAA,YAAa,QAAQ,CAAA,YAAa,IAAA,SAAa,CAAA,CAAE,OAAA,EAAQ,KAAM,CAAA,CAAE,OAAA,EAAQ;AAC7E,EAAA,OAAO,MAAA,CAAO,EAAA,CAAG,CAAA,EAAG,CAAC,CAAA;AACvB;AAEA,SAASR,eAAc,KAAA,EAAkD;AACvE,EAAA,OAAO,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,UAAU,KAAA,EAAkC;AACnD,EAAA,OAAO,gBAAA,CAAiB,KAAK,CAAA,IAAM,KAAA,CAA4B,IAAA,KAAS,KAAA;AAC1E;AAEA,SAAS,WAAW,KAAA,EAA+B;AACjD,EAAA,OAAO,gBAAA,CAAiB,KAAK,CAAA,IAAM,KAAA,CAA4B,IAAA,KAAS,MAAA;AAC1E;AAEA,SAAS,UAAU,KAAA,EAAoC;AACrD,EAAA,OAAO,gBAAA,CAAiB,KAAK,CAAA,IAAM,KAAA,CAA4B,IAAA,KAAS,KAAA;AAC1E;AAEA,SAAS,qBAAqB,KAAA,EAAoC;AAChE,EAAA,OAAO,KAAA,YAAiB,SAAA,IAAa,SAAA,CAAU,KAAK,CAAA;AACtD;;;AC7dO,IAAM,kBAAN,MAAyC;AAAA,EAG9C,WAAA,CACW,GAAA,EACQ,UAAA,EACA,KAAA,EACA,KACA,aAAA,EACjB;AALS,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AACQ,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AACA,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AACA,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AACA,IAAA,IAAA,CAAA,aAAA,GAAA,aAAA;AAEjB,IAAA,IAAA,CAAK,MAAA,GAAS,GAAG,KAAK,CAAA,CAAA,CAAA;AAAA,EACxB;AAAA,EAPW,GAAA;AAAA,EACQ,UAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAA;AAAA,EACA,aAAA;AAAA,EAPF,MAAA;AAAA,EAYjB,IAAI,IAAA,EAAuB;AACzB,IAAA,IAAI,IAAA,KAAS,IAAA,CAAK,KAAA,EAAO,OAAO,KAAK,iBAAA,EAAkB;AACvD,IAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,MAAM,GAAG,OAAO,MAAA;AAC1C,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,OAAO,MAAM,CAAA;AAChD,IAAA,MAAM,SAAA,GAAY,UAAA,CAAW,OAAA,CAAQ,GAAG,CAAA;AACxC,IAAA,MAAM,SAAS,SAAA,GAAY,CAAA,GAAI,aAAa,UAAA,CAAW,KAAA,CAAM,GAAG,SAAS,CAAA;AACzE,IAAA,IAAI,QAAiB,IAAA,CAAK,UAAA,CAAW,iBAAA,CAAkB,MAAA,EAAQ,KAAK,GAAG,CAAA;AACvE,IAAA,IAAI,SAAA,GAAY,GAAG,OAAO,KAAA;AAC1B,IAAA,KAAA,MAAW,OAAA,IAAW,WAAW,KAAA,CAAM,SAAA,GAAY,CAAC,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA,EAAG;AAChE,MAAA,IAAI,UAAU,IAAA,IAAQ,KAAA,KAAU,UAAa,OAAO,KAAA,KAAU,UAAU,OAAO,MAAA;AAC/E,MAAA,KAAA,GAAS,MAAkC,OAAO,CAAA;AAAA,IACpD;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,QAAA,GAAoC;AAClC,IAAA,OAAO,EAAE,CAAC,IAAA,CAAK,KAAK,GAAG,IAAA,CAAK,mBAAkB,EAAE;AAAA,EAClD;AAAA,EAEA,mBAAmB,UAAA,EAA8D;AAC/E,IAAA,MAAM,IAAA,GAAO,UAAA;AAKb,IAAA,IAAI,IAAA,EAAM,SAAS,MAAA,IAAU,CAAC,MAAM,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,EAAG,OAAO,MAAA;AAC/D,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AACvB,IAAA,IAAI,GAAA,EAAK,IAAA,KAAS,KAAA,IAAS,GAAA,CAAI,IAAA,EAAM,MAAA,KAAW,CAAA,IAAK,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,KAAM,IAAA,CAAK,OAAO,OAAO,MAAA;AACxF,IAAA,MAAM,MAAA,GAAS,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAEzB,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,gBAAA,IAAoB,IAAA,CAAK,SAAS,YAAA,EAAc;AAChE,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AAC3B,MAAA,IAAI,OAAA,EAAS,IAAA,KAAS,KAAA,EAAO,OAAO,MAAA;AACpC,MAAA,eAAA,CAAgB,OAAA,CAAQ,OAAO,MAAM,CAAA;AACrC,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,KAAK,UAAA,CAAW,4BAAA;AAAA,UACrB,MAAA;AAAA,UACA,IAAA,CAAK,GAAA;AAAA,UACL,OAAA,CAAQ,KAAA;AAAA,UACR,IAAA,CAAK,IAAA,KAAS,YAAA,GAAe,QAAA,GAAW;AAAA;AAC1C,OACF;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,CAAK,SAAS,SAAA,EAAW;AAC3B,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AAC5B,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AAC7B,MAAA,IAAI,UAAU,IAAA,KAAS,KAAA,IAAS,SAAA,EAAW,IAAA,KAAS,OAAO,OAAO,MAAA;AAClE,MAAA,gBAAA,CAAiB,QAAA,CAAS,OAAO,OAAO,CAAA;AACxC,MAAA,IAAI,OAAO,SAAA,CAAU,KAAA,KAAU,QAAA,IAAY,CAAC,MAAA,CAAO,QAAA,CAAS,SAAA,CAAU,KAAK,CAAA,IAAK,SAAA,CAAU,KAAA,GAAQ,CAAA,EAAG;AACnG,QAAA,OAAO,MAAA;AAAA,MACT;AACA,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,KAAK,UAAA,CAAW,qBAAA;AAAA,UACrB,MAAA;AAAA,UACA,IAAA,CAAK,GAAA;AAAA,UACL,QAAA,CAAS,KAAA;AAAA,UACT,SAAA,CAAU;AAAA;AACZ,OACF;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEQ,iBAAA,GAA6C;AACnD,IAAA,IAAA,CAAK,aAAA,IAAgB;AACrB,IAAA,MAAM,MAA+B,EAAC;AACtC,IAAA,KAAA,MAAW,MAAA,IAAU,IAAA,CAAK,UAAA,CAAW,WAAA,EAAY,EAAG;AAClD,MAAA,GAAA,CAAI,MAAM,CAAA,GAAI,IAAA,CAAK,WAAW,iBAAA,CAAkB,MAAA,EAAQ,KAAK,GAAG,CAAA;AAAA,IAClE;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AACF,CAAA;AAQO,IAAM,gBAAN,MAAuC;AAAA,EAG5C,WAAA,CACW,GAAA,EACQ,KAAA,EACA,aAAA,EACA,MAAA,EACjB;AAJS,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AACQ,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AACA,IAAA,IAAA,CAAA,aAAA,GAAA,aAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAEjB,IAAA,IAAA,CAAK,MAAA,GAAS,GAAG,KAAK,CAAA,CAAA,CAAA;AAAA,EACxB;AAAA,EANW,GAAA;AAAA,EACQ,KAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA;AAAA,EANF,MAAA;AAAA,EAWjB,IAAI,IAAA,EAAuB;AACzB,IAAA,IAAI,IAAA,KAAS,IAAA,CAAK,KAAA,EAAO,OAAO,KAAK,iBAAA,EAAkB;AACvD,IAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,MAAM,GAAG,OAAO,MAAA;AAC1C,IAAA,MAAM,aAAa,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,SAAS,CAAC,CAAA;AACnD,IAAA,MAAM,SAAA,GAAY,UAAA,CAAW,OAAA,CAAQ,GAAG,CAAA;AACxC,IAAA,MAAM,SAAS,SAAA,GAAY,CAAA,GAAI,aAAa,UAAA,CAAW,KAAA,CAAM,GAAG,SAAS,CAAA;AACzE,IAAA,IAAI,KAAA,GAAQ,KAAK,MAAA,CAAO,IAAA,CAAK,cAAc,GAAA,CAAI,MAAM,KAAK,EAAE,CAAA;AAC5D,IAAA,IAAI,SAAA,GAAY,GAAG,OAAO,KAAA;AAC1B,IAAA,KAAA,MAAW,OAAA,IAAW,WAAW,KAAA,CAAM,SAAA,GAAY,CAAC,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA,EAAG;AAChE,MAAA,IAAI,UAAU,IAAA,IAAQ,KAAA,KAAU,UAAa,OAAO,KAAA,KAAU,UAAU,OAAO,MAAA;AAC/E,MAAA,KAAA,GAAS,MAAkC,OAAO,CAAA;AAAA,IACpD;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,QAAA,GAAoC;AAClC,IAAA,OAAO,EAAE,CAAC,IAAA,CAAK,KAAK,GAAG,IAAA,CAAK,mBAAkB,EAAE;AAAA,EAClD;AAAA,EAEQ,iBAAA,GAA6C;AACnD,IAAA,MAAM,MAA+B,EAAC;AACtC,IAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,KAAK,CAAA,IAAK,IAAA,CAAK,aAAA,EAAe,GAAA,CAAI,MAAM,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AACjF,IAAA,OAAO,GAAA;AAAA,EACT;AACF,CAAA;AAGO,IAAM,mBAAN,MAA0C;AAAA,EAC/C,WAAA,CACW,GAAA,EACQ,SAAA,EACA,IAAA,EACA,YACA,KAAA,EACjB;AALS,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AACQ,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AACA,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AACA,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAAA,EAChB;AAAA,EALQ,GAAA;AAAA,EACQ,SAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EAGnB,IAAI,IAAA,EAAuB;AACzB,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAClC,IAAA,MAAM,QAAQ,SAAA,GAAY,CAAA,GAAI,OAAO,IAAA,CAAK,KAAA,CAAM,GAAG,SAAS,CAAA;AAC5D,IAAA,MAAM,GAAA,GAAM,KAAA,KAAU,IAAA,CAAK,SAAA,GACvB,IAAA,CAAK,OACL,KAAA,KAAU,IAAA,CAAK,UAAA,GACb,IAAA,CAAK,KAAA,GACL,MAAA;AACN,IAAA,IAAI,GAAA,KAAQ,MAAM,OAAO,IAAA;AACzB,IAAA,OAAO,GAAA,EAAK,IAAI,IAAI,CAAA;AAAA,EACtB;AAAA,EAEA,QAAA,GAAoC;AAClC,IAAA,OAAO;AAAA,MACL,CAAC,IAAA,CAAK,SAAS,GAAG,IAAA,CAAK,IAAA,KAAS,IAAA,GAAO,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,SAAS,CAAA;AAAA,MAC1E,CAAC,IAAA,CAAK,UAAU,GAAG,IAAA,CAAK,KAAA,KAAU,IAAA,GAAO,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,UAAU;AAAA,KAChF;AAAA,EACF;AAAA,EAEA,mBAAmB,UAAA,EAA8D;AAC/E,IAAA,MAAM,IAAA,GAAO,UAAA;AAIb,IAAA,IAAI,IAAA,EAAM,SAAS,MAAA,IAAU,CAAC,MAAM,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,EAAG,OAAO,MAAA;AAC/D,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AACvB,IAAA,IAAI,GAAA,EAAK,SAAS,KAAA,IAAS,CAAC,IAAI,IAAA,GAAO,CAAC,GAAG,OAAO,MAAA;AAClD,IAAA,MAAM,MAAM,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,KAAM,KAAK,SAAA,GAC7B,IAAA,CAAK,IAAA,GACL,GAAA,CAAI,KAAK,CAAC,CAAA,KAAM,IAAA,CAAK,UAAA,GACnB,KAAK,KAAA,GACL,MAAA;AACN,IAAA,OAAO,GAAA,EAAK,qBAAqB,UAAU,CAAA;AAAA,EAC7C;AACF,CAAA;;;AC1HO,IAAM,8BAAN,MAAsE;AAAA,EAoB3E,WAAA,CACW,MAAA,EACA,KAAA,EACAjC,MAAAA,EACT;AAHS,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AACA,IAAA,IAAA,CAAA,KAAA,GAAAA,MAAAA;AAET,IAAA,IAAA,CAAK,OAAA,GAAU,CAAC,MAAM,CAAA;AACtB,IAAA,MAAM,KAAA,GAAA,CAASA,MAAAA,CAAM,KAAA,IAAS,EAAC,EAAG,IAAI,CAAC,MAAA,KAAW,kBAAA,CAAmB,MAAM,CAAC,CAAA;AAC5E,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,OAAOA,MAAAA,CAAM,MAAA,KAAW,MAAA,GACzB,KAAA,uBACI,GAAA,CAAI;AAAA,MACN,GAAG,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS,CAAC,GAAG,qBAAA,CAAsB,IAAI,CAAC,CAAC,CAAA;AAAA,MAC3D,GAAG,qBAAA,CAAsBA,MAAAA,CAAM,MAAM,CAAA;AAAA,MACrC,GAAA,CAAIA,MAAAA,CAAM,OAAA,IAAW,IAAI,OAAA,CAAQ,CAAC,MAAA,KAAW,CAAC,GAAG,qBAAA,CAAsB,MAAA,CAAO,UAAU,CAAC,CAAC;AAAA,KAC3F,CAAA;AAEL,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,QAAA,EAAmB;AAC3C,IAAA,IAAI,aAAA,GAAgB,KAAK,KAAA,CAAM,IAAA;AAAA,MAC7B,OAAO,CAAC,GAAG,GAAG,MAAM,KAAA,CAAM,KAAA,CAAM,CAAC,IAAA,KAASqD,oBAAmB,2BAAA,CAA4B,IAAA,EAAM,GAAG,CAAC,CAAC,CAAC,CAAA;AAAA,MACrG,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,GAAG,CAAA,KAAM,CAAC,GAAA,EAAK,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAC,CAA4B;AAAA,KACzE;AACA,IAAA,IAAIrD,OAAM,QAAA,EAAU;AAClB,MAAA,MAAM,SAAA,GAAY,iBAAA,CAAkBA,MAAAA,CAAM,MAAM,CAAA;AAChD,MAAA,aAAA,GAAgB,cAAc,IAAA,CAAKwD,QAAA,CAAqB,CAAC,CAAC,MAAM,KAAK,CAAA,KACnE,SAAA,KAAc,MAAA,GAAY,MAAM,GAAA,GAAM,KAAA,CAAM,GAAA,CAAI,SAAS,CAAC,CAAC,CAAA;AAAA,IAC/D;AACA,IAAA,IAAIxD,MAAAA,CAAM,KAAA,KAAU,MAAA,IAAaA,MAAAA,CAAM,WAAW,MAAA,EAAW;AAC3D,MAAA,aAAA,GAAgB,aAAA,CAAc,IAAA;AAAA,QAC5B,0BAAA;AAAA,UACE,CAAC,UAAyB,KAAA,CAAM,WAAA;AAAA,UAChC;AAAA,YACE,YAAY,CAAC,CAAA,EAA2B,MACtC,IAAA,CAAK,kBAAA,CAAmB,GAAG,CAAC,CAAA;AAAA,YAC9B,GAAIA,OAAM,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAOA,MAAAA,CAAM,KAAA,EAAM,GAAI,EAAC;AAAA,YAC1D,GAAIA,OAAM,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,EAAQA,MAAAA,CAAM,MAAA,EAAO,GAAI;AAAC;AAC/D,SACF;AAAA,QACA,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,CAAC,KAAK,CAAC,CAAA,KAAM,CAAC,GAAA,EAAK,KAAK,CAA4B;AAAA,OACjE;AAAA,IACF;AACA,IAAA,aAAA,CAAc,IAAA;AAAA,MACZ,MAAA,CAAO,CAAC,KAAA,KAAU;AAChB,QAAA,KAAA,MAAW,CAAC,CAAC,GAAA,EAAK,KAAK,GAAG,YAAY,CAAA,IAAK,KAAA,CAAM,QAAA,EAAS,EAAG;AAC3D,UAAA,IAAI,YAAA,KAAiB,CAAA,EAAG,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,CAAC,GAAA,EAAK,KAAA,CAAM,GAAA,EAAK,YAAY,CAAC,CAAA;AAAA,QAC1E;AAAA,MACF,CAAC;AAAA,KACH;AACA,IAAA,IAAA,CAAK,MAAM,QAAA,EAAS;AAAA,EACtB;AAAA,EA/CW,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EAtBF,KAAA,GAA8B;AAAA,IACrC,OAAA,EAAS,uBAAA;AAAA,IACT,aAAA,EAAe,CAAA;AAAA,IACf,sBAAA,EAAwB,CAAA;AAAA,IACxB,sBAAA,EAAwB,CAAA;AAAA,IACxB,SAAA,EAAW,CAAA;AAAA,IACX,WAAA,EAAa,CAAA;AAAA,IACb,gBAAA,EAAkB;AAAA,GACpB;AAAA,EAEiB,KAAA,GAAQ,IAAI,EAAA,EAAG;AAAA,EACf,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACT,mBAAA;AAAA,EACA,UAA4B,EAAC;AAAA,EAE5B,OAAA;AAAA,EAoDT,IAAA,GAAyB;AACvB,IAAA,MAAM,OAAA,GAAU,KAAK,mBAAA,EAAoB;AACzC,IAAA,MAAM,WAAW,OAAA,IAAW,WAAA,CAAY,KAAK,IAAA,CAAK,MAAA,CAAO,uBAAuB,CAAA;AAChF,IAAA,IAAA,CAAK,KAAA,CAAM,mBAAmB,OAAA,KAAY,MAAA;AAC1C,IAAA,MAAMyD,UAA2B,EAAC;AAClC,IAAA,MAAM,aAAA,GAAA,CAAiB,IAAA,CAAK,KAAA,CAAM,KAAA,KAAU,MAAA,IAAa,IAAA,CAAK,KAAA,CAAM,MAAA,KAAW,MAAA,KAAA,CAC5E,IAAA,CAAK,KAAA,CAAM,OAAA,EAAS,UAAU,CAAA,IAAK,CAAA;AACtC,IAAA,IAAI,UAAqC,EAAC;AAC1C,IAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,MAAA,MAAM,GAAA,GAAM,KAAK,MAAA,CAAO,iBAAA,CAAkB,KAAK,MAAA,CAAO,MAAA,CAAO,YAAY,GAAG,CAAA;AAC5E,MAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC7B,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,GAAA,EAAK,GAAG,CAAA;AAMnC,MAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,CAAC,IAAA,KACrBJ,mBAAAA,CAAmB,2BAAA,CAA4B,IAAA,EAAM,MAAM,CAAC,CAAC,CAAA,EAAG;AAClE,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAC,KAAK,MAAM,CAAA,EAAG,CAAC,CAAC,CAAA;AAG/B,MAAA,IAAI,CAAC,aAAA,IAAiB,OAAA,CAAQ,MAAA,IAAU,IAAA,EAAO;AAC7C,QAAAI,QAAO,IAAA,CAAK,GAAG,IAAA,CAAK,IAAA,CAAK,OAAO,CAAC,CAAA;AACjC,QAAA,OAAA,GAAU,EAAC;AAAA,MACb;AAAA,IACF;AACA,IAAA,IAAI,aAAA,EAAe;AAIjB,MAAA,IAAA,CAAK,mBAAA,uBAA0B,OAAA,EAAQ;AACvC,MAAA,IAAI;AACF,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACrB,UAAA,MAAM,CAAC,IAAA,EAAM,IAAI,CAAA,GAAI,EAAE,CAAC,CAAA;AACxB,UAAA,MAAM,CAAC,IAAA,EAAM,IAAI,CAAA,GAAI,EAAE,CAAC,CAAA;AACxB,UAAA,MAAM,WAAW,IAAA,CAAK,kBAAA;AAAA,YACpB,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA,CAAE,WAAA;AAAA,YACnB,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA,CAAE;AAAA,WACrB;AACA,UAAA,IAAI,QAAA,KAAa,GAAG,OAAO,QAAA;AAC3B,UAAA,OAAO,cAAA,CAAe,MAAM,IAAI,CAAA;AAAA,QAClC,CAAC,CAAA;AACD,QAAA,KAAA,IAAS,SAAS,CAAA,EAAG,MAAA,GAAS,OAAA,CAAQ,MAAA,EAAQ,UAAU,IAAA,EAAO;AAC7D,UAAAA,OAAAA,CAAO,IAAA,CAAK,GAAG,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ,MAAA,GAAS,IAAK,CAAC,CAAC,CAAA;AAAA,QACjE;AAAA,MACF,CAAA,SAAE;AACA,QAAA,IAAA,CAAK,mBAAA,GAAsB,MAAA;AAAA,MAC7B;AAAA,IACF,CAAA,MAAO;AACL,MAAAA,QAAO,IAAA,CAAK,GAAG,IAAA,CAAK,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,IACnC;AACA,IAAA,OAAOA,OAAAA;AAAA,EACT;AAAA,EAEA,KAAA,CAAM,QAAoB,KAAA,EAAsC;AAC9D,IAAA,IAAI,MAAA,KAAW,IAAA,CAAK,MAAA,EAAQ,OAAO,EAAC;AACpC,IAAA,IAAI,KAAA,CAAM,EAAA,KAAO,SAAA,EAAW,OAAO,EAAC;AACpC,IAAA,IAAI,KAAA,CAAM,EAAA,KAAO,UAAA,IAAc,KAAA,CAAM,OAAA,EAAS;AAC5C,MAAA,MAAMC,WAAqC,EAAC;AAC5C,MAAA,KAAA,MAAW,UAAU,KAAA,CAAM,OAAA,EAAS,IAAA,CAAK,mBAAA,CAAoBA,UAAS,MAAM,CAAA;AAC5E,MAAA,OAAO,IAAA,CAAK,KAAKA,QAAO,CAAA;AAAA,IAC1B;AACA,IAAA,IAAI,KAAA,CAAM,EAAA,KAAO,UAAA,EAAY,OAAO,EAAC;AACrC,IAAA,IAAI,KAAA,CAAM,EAAA,KAAO,QAAA,IAAY,CAAC,IAAA,CAAK,oBAAoB,KAAA,CAAM,OAAO,CAAA,EAAG,OAAO,EAAC;AAE/E,IAAA,MAAM,UAAqC,EAAC;AAC5C,IAAA,IAAI,KAAA,CAAM,OAAO,QAAA,EAAU;AACzB,MAAA,IAAA,CAAK,aAAA,CAAc,OAAA,EAAS,KAAA,CAAM,KAAA,EAAO,CAAC,CAAA;AAAA,IAC5C,CAAA,MAAA,IAAW,KAAA,CAAM,EAAA,KAAO,QAAA,EAAU;AAChC,MAAA,MAAM,QAAA,GAAW,aAAA,CAAc,KAAA,CAAM,KAAA,EAAO,MAAM,aAAa,CAAA;AAC/D,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAC,MAAM,KAAA,EAAO,IAAI,aAAa,KAAA,CAAM,KAAA,EAAO,EAAE,CAAC,IAAA,CAAK,KAAK,GAAG,QAAA,EAAU,CAAC,CAAA,EAAG,EAAE,CAAC,CAAA;AAAA,IAC7F,CAAA,MAAA,IAAW,KAAA,CAAM,EAAA,KAAO,QAAA,EAAU;AAChC,MAAA,MAAM,QAAA,GAAW,aAAA,CAAc,KAAA,CAAM,KAAA,EAAO,MAAM,aAAa,CAAA;AAC/D,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAC,MAAM,KAAA,EAAO,IAAI,aAAa,KAAA,CAAM,KAAA,EAAO,EAAE,CAAC,IAAA,CAAK,KAAK,GAAG,QAAA,EAAU,CAAC,CAAA,EAAG,EAAE,CAAC,CAAA;AAC3F,MAAA,IAAA,CAAK,aAAA,CAAc,OAAA,EAAS,KAAA,CAAM,KAAA,EAAO,CAAC,CAAA;AAAA,IAC5C;AACA,IAAA,OAAO,IAAA,CAAK,KAAK,OAAO,CAAA;AAAA,EAC1B;AAAA,EAEQ,mBAAA,CACN,KACA,MAAA,EAMM;AACN,IAAA,IAAI,MAAA,CAAO,SAAS,QAAA,EAAU;AAC5B,MAAA,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,MAAA,CAAO,KAAK,IAAI,YAAA,CAAa,OAAO,GAAA,EAAK,EAAE,CAAC,IAAA,CAAK,KAAK,GAAG,MAAA,CAAO,KAAA,EAAO,CAAC,CAAA,EAAG,EAAE,CAAC,CAAA;AACzF,MAAA;AAAA,IACF;AACA,IAAA,IAAI,MAAA,CAAO,IAAA,KAAS,QAAA,IAAY,MAAA,CAAO,aAAA,EAAe;AACpD,MAAA,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,MAAA,CAAO,KAAK,IAAI,YAAA,CAAa,OAAO,GAAA,EAAK,EAAE,CAAC,IAAA,CAAK,KAAK,GAAG,MAAA,CAAO,aAAA,EAAe,CAAC,CAAA,EAAG,EAAE,CAAC,CAAA;AAAA,IACnG;AACA,IAAA,IAAA,CAAK,aAAA,CAAc,GAAA,EAAK,MAAA,CAAO,GAAA,EAAK,CAAC,CAAA;AAAA,EACvC;AAAA,EAEQ,aAAA,CAAc,GAAA,EAAgC,GAAA,EAAa,MAAA,EAAsB;AACvF,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,yBAAA,CAA0B,GAAG,CAAA;AACrD,IAAA,IAAI,QAAQ,MAAA,EAAW;AACvB,IAAA,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,GAAA,EAAK,IAAA,CAAK,MAAA,CAAO,GAAA,EAAK,GAAG,CAAC,CAAA,EAAG,MAAM,CAAC,CAAA;AAAA,EACjD;AAAA,EAEQ,MAAA,CAAO,KAAa,GAAA,EAA8B;AACxD,IAAA,IAAA,CAAK,KAAA,CAAM,aAAA,EAAA;AACX,IAAA,OAAO,IAAI,gBAAgB,GAAA,EAAK,IAAA,CAAK,QAAQ,IAAA,CAAK,KAAA,EAAO,KAAK,MAAM;AAClE,MAAA,IAAA,CAAK,KAAA,CAAM,sBAAA,EAAA;AAAA,IACb,CAAC,CAAA;AAAA,EACH;AAAA,EAEQ,QAAQ,GAAA,EAA6B;AAC3C,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,mBAAA,EAAqB,GAAA,CAAI,GAAG,CAAA;AAChD,IAAA,IAAI,QAAQ,OAAO,MAAA;AACnB,IAAA,IAAA,CAAK,KAAA,CAAM,sBAAA,EAAA;AACX,IAAA,MAAM,YAAY,uBAAA,CAAwB,IAAA,CAAK,MAAM,MAAA,EAAQ,GAAA,EAAK,KAAK,KAAK,CAAA;AAC5E,IAAA,MAAM,MAAA,GAAS,YAAY,SAAS,CAAA;AACpC,IAAA,MAAM,WAAA,GAAA,CAAe,IAAA,CAAK,KAAA,CAAM,OAAA,IAAW,EAAC,EAAG,GAAA;AAAA,MAAI,CAAC,WAClD,MAAA,CAAO,UAAA,CAAW,SAAS,KAAA,IAAS,MAAA,CAAO,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,KAAM,cAC9DrB,mBAAAA,CAAmB,MAAA,CAAO,UAAA,EAAY,EAAE,SAAA,EAAW,MAAA,EAAQ,CAAA,GAC3D,2BAAA,CAA4B,MAAA,CAAO,UAAA,EAAY,GAAG;AAAA,KACxD;AACA,IAAA,IAAI,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG,iBAAA,CAAkB,QAAQ,WAAW,CAAA;AACjE,IAAA,MAAM,OAAA,GAAU,EAAE,GAAA,EAAK,MAAA,EAAQ,WAAA,EAAY;AAC3C,IAAA,IAAA,CAAK,mBAAA,EAAqB,GAAA,CAAI,GAAA,EAAK,OAAO,CAAA;AAC1C,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEQ,kBAAA,CAAmB,GAA2B,CAAA,EAAmC;AACvF,IAAA,KAAA,IAAS,KAAA,GAAQ,GAAG,KAAA,IAAS,IAAA,CAAK,MAAM,OAAA,EAAS,MAAA,IAAU,IAAI,KAAA,EAAA,EAAS;AACtE,MAAA,MAAM,UAAA,GAAae,gBAAAA,CAAgB,CAAA,CAAE,KAAK,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,OAAA,CAAS,KAAK,EAAG,cAAc,CAAA;AACjG,MAAA,IAAI,UAAA,KAAe,GAAG,OAAO,UAAA;AAAA,IAC/B;AACA,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEQ,KAAK,OAAA,EAAsD;AACjE,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAClC,IAAA,KAAA,MAAW,GAAG,MAAM,CAAA,IAAK,OAAA,EAAS;AAChC,MAAA,IAAI,MAAA,GAAS,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,SAAA,IAAa,MAAA;AAAA,WACnC,IAAA,CAAK,KAAA,CAAM,WAAA,IAAe,CAAC,MAAA;AAAA,IAClC;AACA,IAAA,IAAA,CAAK,UAAU,EAAC;AAChB,IAAA,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,IAAI,QAAA,CAAS,OAAO,CAAC,CAAA;AACzC,IAAA,IAAA,CAAK,MAAM,GAAA,EAAI;AACf,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EAEQ,oBAAoB,OAAA,EAA+C;AACzE,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,KAAA,IAAS,OAAA,KAAY,OAAO,OAAO,IAAA;AACrD,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,MAAA,IAAI,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,MAAM,KAAK,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,GAAG,OAAO,IAAA;AAAA,IAChF;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,mBAAA,GAA+C;AACrD,IAAA,IAAI,IAAA;AACJ,IAAA,KAAA,MAAW,MAAA,IAAU,IAAA,CAAK,KAAA,CAAM,KAAA,IAAS,EAAC,EAAG;AAC3C,MAAA,MAAM,YAAY,gBAAA,CAAiB,kBAAA,CAAmB,MAAM,CAAA,EAAG,KAAK,KAAK,CAAA;AACzE,MAAA,IAAI,CAAC,SAAA,EAAW;AAChB,MAAA,MAAM,OAAO,IAAA,CAAK,MAAA,CAAO,4BAA4B,SAAA,CAAU,MAAA,EAAQ,UAAU,IAAI,CAAA;AACrF,MAAA,IAAI,IAAA,KAAS,WAAc,IAAA,KAAS,MAAA,IAAa,KAAK,MAAA,GAAS,IAAA,CAAK,SAAS,IAAA,GAAO,IAAA;AAAA,IACtF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;AAEA,SAAS,gBAAA,CACP,YACA,KAAA,EAC8D;AAC9D,EAAA,IAAI,EAAE,UAAA,YAAsB,IAAA,CAAA,EAAO,OAAO,MAAA;AAC1C,EAAA,IAAI,UAAA,CAAW,SAAS,gBAAA,IAAoB,UAAA,CAAW,SAAS,YAAA,IAAgB,UAAA,CAAW,SAAS,SAAA,EAAW;AAC7G,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,GAAA,GAAM,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA;AAC7B,EAAA,IAAI,EAAE,GAAA,YAAe,OAAA,CAAA,IAAY,GAAA,CAAI,IAAA,CAAK,MAAA,KAAW,CAAA,IAAK,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,KAAM,KAAA,EAAO,OAAO,MAAA;AACxF,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AACzB,EAAA,IAAI,UAAA,CAAW,IAAA,KAAS,gBAAA,IAAoB,UAAA,CAAW,SAAS,YAAA,EAAc;AAC5E,IAAA,MAAM,IAAA,GAAO,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA;AAC9B,IAAA,OAAO,IAAA,YAAgB,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA,GACpD,EAAE,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,KAAA,EAAyB,GAC9C,MAAA;AAAA,EACN;AACA,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA;AAC/B,EAAA,MAAM,MAAA,GAAS,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA;AAChC,EAAA,IAAI,EAAE,KAAA,YAAiB,KAAA,CAAA,IAAU,EAAE,MAAA,YAAkB,QAAQ,OAAO,MAAA;AACpE,EAAA,gBAAA,CAAiB,KAAA,CAAM,OAAO,OAAO,CAAA;AACrC,EAAA,IAAI,OAAO,MAAA,CAAO,KAAA,KAAU,QAAA,EAAU,OAAO,MAAA;AAC7C,EAAA,OAAO,EAAE,QAAQ,IAAA,EAAM,uBAAA,CAAwB,MAAM,KAAA,EAAgB,MAAA,CAAO,KAAK,CAAA,EAAE;AACrF;AAEA,SAAS,aAAA,CACP,SACA,KAAA,EACyB;AACzB,EAAA,OAAO,EAAE,GAAI,OAAA,IAAW,IAAK,GAAI,KAAA,IAAS,EAAC,EAAG;AAChD;AAEA,SAAS,YAAY,KAAA,EAAyC;AAC5D,EAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxE,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,EAAE,KAAA,EAAM;AACjB;AAEA,SAAS,cAAA,CAAe,GAAW,CAAA,EAAmB;AACpD,EAAA,IAAI,CAAA,KAAM,GAAG,OAAO,CAAA;AACpB,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,CAAA,KAAM,QAAA,SAAiB,CAAA,GAAI,CAAA;AAC/D,EAAA,OAAO,OAAO,CAAC,CAAA,GAAI,MAAA,CAAO,CAAC,IAAI,EAAA,GAAK,CAAA;AACtC;AAEA,SAAS,kBAAkB,MAAA,EAAqC;AAC9D,EAAA,IAAI,gBAAA,CAAiB,MAAM,CAAA,EAAG,OAAO,OAAA;AACrC,EAAA,IAAI,MAAA,KAAW,QAAQ,OAAO,MAAA,KAAW,YAAY,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG,OAAO,MAAA;AACnF,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA;AAC/B,EAAA,OAAO,IAAA,CAAK,MAAA,KAAW,CAAA,IAAK,CAAC,IAAA,CAAK,CAAC,CAAA,CAAG,UAAA,CAAW,qBAAqB,CAAA,GAAI,IAAA,CAAK,CAAC,CAAA,GAAI,MAAA;AACtF;AClTO,IAAM,kCAAN,MAA0E;AAAA,EAiB/E,YAAqBpD,MAAAA,EAAgB;AAAhB,IAAA,IAAA,CAAA,KAAA,GAAAA,MAAAA;AACnB,IAAA,IAAIA,OAAM,IAAA,CAAK,IAAA,KAAS,mBAAmBA,MAAAA,CAAM,IAAA,EAAM,WAAW,CAAA,EAAG;AACnE,MAAA,MAAM,IAAI,MAAM,+DAA+D,CAAA;AAAA,IACjF;AACA,IAAA,MAAMQ,KAAAA,GAAOR,MAAAA,CAAM,IAAA,CAAK,CAAC,CAAA;AACzB,IAAA,IAAIQ,MAAK,IAAA,CAAK,IAAA,KAAS,eAAA,IAAmBA,KAAAA,CAAK,SAAS,OAAA,EAAS;AAC/D,MAAA,MAAM,IAAI,MAAM,4DAA4D,CAAA;AAAA,IAC9E;AAEA,IAAA,MAAM,CAAC,gBAAgB,eAAe,CAAA,GAAI,sBAAsBA,KAAAA,EAAMA,KAAAA,CAAK,KAAK,KAAK,CAAA;AACrF,IAAA,IAAA,CAAK,IAAA,GAAO;AAAA,MACV,UAAA,EAAYR,OAAM,IAAA,CAAK,UAAA;AAAA,MACvB,KAAA,EAAOA,OAAM,IAAA,CAAK,KAAA;AAAA,MAClB,cAAA,EAAgB,cAAA;AAAA,MAChB,OAAA,EAAS,kBAAkBA,MAAAA,EAAOA,MAAAA,CAAM,KAAK,KAAA,EAAOA,MAAAA,CAAM,KAAK,UAAU,CAAA;AAAA,MACzE,aAAA,sBAAmB,GAAA,EAAI;AAAA,MACvB,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,QAAA;AAAmB,KACvC;AACA,IAAA,IAAA,CAAK,KAAA,GAAQ;AAAA,MACX,UAAA,EAAYQ,MAAK,IAAA,CAAK,UAAA;AAAA,MACtB,KAAA,EAAOA,MAAK,IAAA,CAAK,KAAA;AAAA,MACjB,cAAA,EAAgB,eAAA;AAAA,MAChB,OAAA,EAAS,kBAAkBR,MAAAA,EAAOQ,KAAAA,CAAK,KAAK,KAAA,EAAOA,KAAAA,CAAK,KAAK,UAAU,CAAA;AAAA,MACvE,aAAA,sBAAmB,GAAA,EAAI;AAAA,MACvB,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,QAAA;AAAmB,KACvC;AACA,IAAA,IAAA,CAAK,IAAA,CAAK,aAAA,GAAgB,IAAI,GAAA,CAAI,KAAK,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,CAAC,QAAQ,KAAA,KAAU,CAAC,MAAA,EAAQ,KAAK,CAAC,CAAC,CAAA;AAC3F,IAAA,IAAA,CAAK,KAAA,CAAM,aAAA,GAAgB,IAAI,GAAA,CAAI,KAAK,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,QAAQ,KAAA,KAAU,CAAC,MAAA,EAAQ,KAAK,CAAC,CAAC,CAAA;AAC7F,IAAA,IAAA,CAAK,UAAU,IAAA,CAAK,IAAA,CAAK,eAAe,IAAA,CAAK,KAAA,CAAM,aAC/C,CAAC,IAAA,CAAK,IAAA,CAAK,UAAU,IACrB,CAAC,IAAA,CAAK,KAAK,UAAA,EAAY,IAAA,CAAK,MAAM,UAAU,CAAA;AAEhD,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,MAAM,MAAM,CAAA;AAClD,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,OAAO,OAAO,CAAA;AACrD,IAAA,MAAM,KAAA,GAAA,CAASR,MAAAA,CAAM,KAAA,IAAS,EAAC,EAAG,IAAI,CAAC,MAAA,KAAW,kBAAA,CAAmB,MAAM,CAAC,CAAA;AAC5E,IAAA,SAAA,CAAU,IAAA;AAAA,MACR2D,MAAA,CAAiB,UAAA,EAAY,QAAA,CAASnD,KAAI,CAAC,CAAA;AAAA,MAC3CI,GAAAA,CAAI,CAAC,CAAC,QAAA,EAAU,IAAI,CAAA,KAAM,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAC,CAAC,CAAA;AAAA,MAC1DH,OAAO,CAAC,GAAG,GAAG,MAAM,KAAA,CAAM,KAAA,CAAM,CAAC,IAAA,KAAS4C,oBAAmB,2BAAA,CAA4B,IAAA,EAAM,GAAG,CAAC,CAAC,CAAC,CAAA;AAAA,MACrGzC,GAAAA,CAAI,CAAC,CAAC,GAAA,EAAK,GAAG,CAAA,KAAM;AAClB,QAAA,IAAA,CAAK,KAAA,CAAM,sBAAA,EAAA;AACX,QAAA,MAAM,MAAA,GAASgD,aAAY,uBAAA,CAAwB5D,MAAAA,CAAM,QAAQ,GAAA,EAAKA,MAAAA,CAAM,IAAA,CAAK,KAAK,CAAC,CAAA;AACvF,QAAA,MAAM,WAAA,GAAA,CAAeA,MAAAA,CAAM,OAAA,IAAW,EAAC,EAAG,GAAA;AAAA,UAAI,CAAC,WAC7C,MAAA,CAAO,UAAA,CAAW,SAAS,KAAA,IAAS,MAAA,CAAO,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,KAAM,cAC9DqC,mBAAAA,CAAmB,MAAA,CAAO,UAAA,EAAY,EAAE,SAAA,EAAW,MAAA,EAAQ,CAAA,GAC3D,2BAAA,CAA4B,MAAA,CAAO,UAAA,EAAY,GAAG;AAAA,SACxD;AACA,QAAA,IAAI,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG,iBAAA,CAAkB,QAAQ,WAAW,CAAA;AACjE,QAAA,OAAO,CAAC,KAAK,MAAM,CAAA;AAAA,MAIrB,CAAC,CAAA;AAAA,MACDoB,MAAAA,CAAO,CAAC,KAAA,KAAU;AAChB,QAAA,KAAA,MAAW,CAAC,CAAC,GAAA,EAAK,GAAG,GAAG,YAAY,CAAA,IAAK,KAAA,CAAM,QAAA,EAAS,EAAG;AACzD,UAAA,IAAI,YAAA,KAAiB,GAAG,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAC,GAAA,EAAK,GAAA,EAAK,YAAY,CAAC,CAAA;AAAA,QACpE;AAAA,MACF,CAAC;AAAA,KACH;AACA,IAAA,IAAA,CAAK,MAAM,QAAA,EAAS;AAAA,EACtB;AAAA,EA5DqB,KAAA;AAAA,EAhBZ,KAAA,GAA8B;AAAA,IACrC,OAAA,EAAS,uBAAA;AAAA,IACT,aAAA,EAAe,CAAA;AAAA,IACf,sBAAA,EAAwB,CAAA;AAAA,IACxB,sBAAA,EAAwB,CAAA;AAAA,IACxB,SAAA,EAAW,CAAA;AAAA,IACX,WAAA,EAAa,CAAA;AAAA,IACb,gBAAA,EAAkB;AAAA,GACpB;AAAA,EACS,OAAA;AAAA,EAEQ,KAAA,GAAQ,IAAII,EAAAA,EAAG;AAAA,EACf,IAAA;AAAA,EACA,KAAA;AAAA,EACT,UAA4B,EAAC;AAAA,EAgErC,IAAA,GAAyB;AACvB,IAAA,IAAA,CAAK,QAAA,CAAS,KAAK,IAAI,CAAA;AACvB,IAAA,IAAA,CAAK,QAAA,CAAS,KAAK,KAAK,CAAA;AACxB,IAAA,IAAA,CAAK,MAAM,GAAA,EAAI;AACf,IAAA,OAAO,KAAK,UAAA,EAAW;AAAA,EACzB;AAAA,EAEA,KAAA,CAAM,QAAoB,KAAA,EAAsC;AAC9D,IAAA,IAAI,IAAA,GAAO,KAAA;AACX,IAAA,IAAI,MAAA,KAAW,IAAA,CAAK,IAAA,CAAK,UAAA,EAAY,IAAA,GAAO,KAAK,SAAA,CAAU,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA,IAAK,IAAA;AAChF,IAAA,IAAI,MAAA,KAAW,IAAA,CAAK,KAAA,CAAM,UAAA,EAAY,IAAA,GAAO,KAAK,SAAA,CAAU,IAAA,CAAK,KAAA,EAAO,KAAK,CAAA,IAAK,IAAA;AAClF,IAAA,IAAI,CAAC,IAAA,EAAM,OAAO,EAAC;AACnB,IAAA,IAAA,CAAK,MAAM,GAAA,EAAI;AACf,IAAA,OAAO,KAAK,UAAA,EAAW;AAAA,EACzB;AAAA,EAEQ,SAAA,CAAU,QAAoB,IAAA,EAA8D;AAClG,IAAA,OAAO,MAAA,CAAO,MAAM,IAAA,CAAKjD,GAAAA,CAAI,CAAC,CAAC,SAAA,EAAW,GAAG,CAAA,KAAM;AAAA,MACjD,kBAAkB,2BAAA,CAA4B,MAAA,CAAO,gBAAgB,GAAG,CAAA,EAAG,MAAM,SAAS,CAAA;AAAA,MAC1F,CAAC,WAAW,GAAG;AAAA,KAChB,CAAC,CAAA;AAAA,EACJ;AAAA,EAEQ,SAAA,CACN,MACA,KAAA,EAC4B;AAC5B,IAAA,MAAM,GAAA,GAAM,aAAa,IAAA,GAAO,CAAC,KAAK,IAAA,EAAM,KAAA,GAAQ,CAAC,CAAA,IAAK,IAAI,CAAA;AAC9D,IAAA,OAAO,CAAC,KAAK,IAAI,gBAAA;AAAA,MACf,GAAA;AAAA,MACA,KAAK,IAAA,CAAK,KAAA;AAAA,MACV,IAAA,GAAO,CAAC,CAAA,IAAK,IAAA;AAAA,MACb,KAAK,KAAA,CAAM,KAAA;AAAA,MACX,KAAA,GAAQ,CAAC,CAAA,IAAK;AAAA,KACf,CAAA;AAAA,EACH;AAAA,EAEQ,SAAS,MAAA,EAA0B;AACzC,IAAA,MAAM,UAAqC,EAAC;AAC5C,IAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,UAAA,CAAW,qBAAA,EAAsB,EAAG;AAC3D,MAAA,MAAM,GAAA,GAAM,OAAO,UAAA,CAAW,iBAAA,CAAkB,OAAO,UAAA,CAAW,MAAA,CAAO,YAAY,GAAG,CAAA;AACxF,MAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC7B,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,GAAA,EAAK,IAAA,CAAK,aAAA,CAAc,MAAA,EAAQ,GAAA,EAAK,GAAG,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IAC/D;AACA,IAAA,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,OAAO,CAAA;AAAA,EACjC;AAAA,EAEQ,SAAA,CAAU,QAAoB,KAAA,EAA6B;AACjE,IAAA,IAAI,KAAA,CAAM,OAAO,SAAA,IAAc,KAAA,CAAM,OAAO,UAAA,IAAc,CAAC,KAAA,CAAM,OAAA,EAAU,OAAO,KAAA;AAClF,IAAA,MAAM,UAAqC,EAAC;AAC5C,IAAA,IAAI,KAAA,CAAM,EAAA,KAAO,UAAA,IAAc,KAAA,CAAM,OAAA,EAAS;AAC5C,MAAA,KAAA,MAAW,MAAA,IAAU,MAAM,OAAA,EAAS;AAClC,QAAA,IAAI,MAAA,CAAO,SAAS,QAAA,EAAU;AAC5B,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,MAAA,CAAO,KAAK,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQ,MAAA,CAAO,KAAK,MAAA,CAAO,KAAK,CAAC,CAAA,EAAG,EAAE,CAAC,CAAA;AAAA,QACrF,CAAA,MAAO;AACL,UAAA,IAAI,MAAA,CAAO,IAAA,KAAS,QAAA,IAAY,MAAA,CAAO,aAAA,EAAe;AACpD,YAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,MAAA,CAAO,KAAK,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQ,MAAA,CAAO,KAAK,MAAA,CAAO,aAAa,CAAC,CAAA,EAAG,EAAE,CAAC,CAAA;AAAA,UAC7F;AACA,UAAA,IAAA,CAAK,aAAA,CAAc,OAAA,EAAS,MAAA,EAAQ,MAAA,CAAO,GAAG,CAAA;AAAA,QAChD;AAAA,MACF;AAAA,IACF,CAAA,MAAA,IAAW,KAAA,CAAM,EAAA,KAAO,QAAA,EAAU;AAChC,MAAA,IAAA,CAAK,aAAA,CAAc,OAAA,EAAS,MAAA,EAAQ,KAAA,CAAM,KAAK,CAAA;AAAA,IACjD,CAAA,MAAA,IAAW,KAAA,CAAM,EAAA,KAAO,QAAA,EAAU;AAChC,MAAA,OAAA,CAAQ,KAAK,CAAC;AAAA,QACZ,KAAA,CAAM,KAAA;AAAA,QACN,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQ,KAAA,CAAM,KAAA,EAAOkD,eAAc,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,aAAa,CAAC;AAAA,OACvF,EAAG,EAAE,CAAC,CAAA;AAAA,IACR,CAAA,MAAA,IAAW,KAAA,CAAM,EAAA,KAAO,QAAA,EAAU;AAChC,MAAA,OAAA,CAAQ,KAAK,CAAC;AAAA,QACZ,KAAA,CAAM,KAAA;AAAA,QACN,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQ,KAAA,CAAM,KAAA,EAAOA,eAAc,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,aAAa,CAAC;AAAA,OACvF,EAAG,EAAE,CAAC,CAAA;AACN,MAAA,IAAA,CAAK,aAAA,CAAc,OAAA,EAAS,MAAA,EAAQ,KAAA,CAAM,KAAK,CAAA;AAAA,IACjD;AACA,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,OAAO,CAAA;AAAA,EACxC;AAAA,EAEQ,aAAA,CAAc,GAAA,EAAgC,MAAA,EAAoB,GAAA,EAAmB;AAC3F,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,CAAW,yBAAA,CAA0B,GAAG,CAAA;AAC3D,IAAA,IAAI,GAAA,KAAQ,MAAA,EAAW,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,GAAA,EAAK,IAAA,CAAK,aAAA,CAAc,QAAQ,GAAA,EAAK,GAAG,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,EAClF;AAAA,EAEQ,aAAA,CAAc,MAAA,EAAoB,GAAA,EAAa,GAAA,EAA4B;AACjF,IAAA,IAAA,CAAK,KAAA,CAAM,aAAA,EAAA;AACX,IAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAe,MAAA,CAAO,QAAQ,MAAM,CAAA;AACvD,IAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,MAAA,CAAO,OAAA,CAAQ,QAAQ,KAAA,EAAA,EAAS;AAC1D,MAAA,MAAA,CAAO,KAAK,IAAI,MAAA,CAAO,UAAA,CAAW,kBAAkB,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAI,GAAG,CAAA;AAAA,IACjF;AACA,IAAA,OAAO,IAAI,aAAA,CAAc,GAAA,EAAK,OAAO,KAAA,EAAO,MAAA,CAAO,eAAe,MAAM,CAAA;AAAA,EAC1E;AAAA,EAEQ,WAAA,CACN,MAAA,EACA,GAAA,EACA,KAAA,EACe;AACf,IAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAe,MAAA,CAAO,QAAQ,MAAM,CAAA;AACvD,IAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,MAAA,CAAO,QAAQ,MAAA,EAAQ,KAAA,EAAA,EAAS,MAAA,CAAO,KAAK,CAAA,GAAI,KAAA,CAAM,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAE,CAAA;AACxG,IAAA,OAAO,IAAI,aAAA,CAAc,GAAA,EAAK,OAAO,KAAA,EAAO,MAAA,CAAO,eAAe,MAAM,CAAA;AAAA,EAC1E;AAAA,EAEQ,IAAA,CAAK,OAAoC,OAAA,EAA6C;AAC5F,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,KAAA;AACjC,IAAA,KAAA,MAAW,GAAG,MAAM,CAAA,IAAK,OAAA,EAAS;AAChC,MAAA,IAAI,MAAA,GAAS,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,SAAA,IAAa,MAAA;AAAA,WACnC,IAAA,CAAK,KAAA,CAAM,WAAA,IAAe,CAAC,MAAA;AAAA,IAClC;AACA,IAAA,KAAA,CAAM,QAAA,CAAS,IAAIC,QAAAA,CAAS,OAAO,CAAC,CAAA;AACpC,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,UAAA,GAA+B;AACrC,IAAA,MAAMN,UAAS,IAAA,CAAK,OAAA;AACpB,IAAA,IAAA,CAAK,UAAU,EAAC;AAChB,IAAA,OAAOA,OAAAA;AAAA,EACT;AACF,CAAA;AAEA,SAAS,iBAAA,CACPzD,MAAAA,EACA,KAAA,EACA,UAAA,EACuB;AACvB,EAAA,IAAIA,MAAAA,CAAM,WAAW,MAAA,EAAW,OAAO,CAAC,GAAG,UAAA,CAAW,aAAa,CAAA;AACnE,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,MAAMgE,IAAAA,GAAM,CAAC,KAAA,KAAyB;AACpC,IAAA,KAAA,MAAW,GAAA,IAAO,qBAAA,CAAsB,KAAK,CAAA,EAAG;AAC9C,MAAA,MAAM,CAAC,QAAA,EAAU,MAAM,CAAA,GAAI,GAAA,CAAI,MAAM,GAAG,CAAA;AACxC,MAAA,IAAI,QAAA,KAAa,KAAA,IAAS,MAAA,EAAQ,IAAA,CAAK,IAAI,MAAM,CAAA;AAAA,IACnD;AAAA,EACF,CAAA;AACA,EAAAA,IAAAA,CAAIhE,OAAM,MAAM,CAAA;AAChB,EAAA,KAAA,MAAW,MAAA,IAAUA,OAAM,KAAA,IAAS,IAAIgE,IAAAA,CAAI,kBAAA,CAAmB,MAAM,CAAC,CAAA;AACtE,EAAA,KAAA,MAAWxD,KAAAA,IAAQR,MAAAA,CAAM,IAAA,IAAQ,EAAC,EAAG;AACnC,IAAAgE,IAAAA,CAAIxD,MAAK,IAAI,CAAA;AACb,IAAAwD,IAAAA,CAAIxD,MAAK,KAAK,CAAA;AAAA,EAChB;AACA,EAAA,OAAO,CAAC,GAAG,IAAI,CAAA;AACjB;AAEA,SAAS,qBAAA,CAAsBA,OAAkB,UAAA,EAAwD;AACvG,EAAA,OAAO,eAAA,CAAgBA,KAAAA,CAAK,IAAI,CAAA,KAAM,aAClC,CAACA,KAAAA,CAAK,KAAA,EAAOA,KAAAA,CAAK,IAAI,CAAA,GACtB,CAACA,KAAAA,CAAK,IAAA,EAAMA,MAAK,KAAK,CAAA;AAC5B;AAEA,SAAS,gBAAgB,UAAA,EAAiD;AACxE,EAAA,OAAO,WAAW,IAAA,KAAS,KAAA,GAAQ,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,GAAI,MAAA;AAC1D;AAEA,SAAS,SAASA,KAAAA,EAAuD;AACvE,EAAA,OAAOA,KAAAA,CAAK,IAAA,KAAS,OAAA,GAAU,MAAA,GAASA,KAAAA,CAAK,IAAA;AAC/C;AAEA,SAAS,iBAAA,CAAkB,KAAA,EAAgB,IAAA,EAAc,SAAA,EAA4B;AACnF,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,QAAQ,IAAI,CAAA,CAAA,EAAI,MAAA,CAAO,SAAS,CAAC,CAAA,CAAA;AACnF,EAAA,IAAI,iBAAiB,IAAA,EAAM,OAAO,CAAA,KAAA,EAAQ,KAAA,CAAM,SAAS,CAAA,CAAA;AACzD,EAAA,QAAQ,OAAO,KAAA;AAAO,IACpB,KAAK,QAAA;AACH,MAAA,OAAO,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,GAAI,YAAA,GAAe,OAAO,EAAA,CAAG,KAAA,EAAO,EAAE,CAAA,GAAI,CAAA,GAAI,KAAA;AAAA,IACzE,KAAK,QAAA;AACH,MAAA,OAAO,UAAU,KAAK,CAAA,CAAA;AAAA,IACxB,KAAK,QAAA;AACH,MAAA,OAAO,UAAU,KAAK,CAAA,CAAA;AAAA,IACxB,KAAK,SAAA;AACH,MAAA,OAAO,QAAQ,cAAA,GAAiB,eAAA;AAAA,IAClC;AACE,MAAA,OAAO,GAAG,OAAO,KAAK,CAAA,CAAA,EAAI4B,UAAAA,CAAU,KAAK,CAAC,CAAA,CAAA;AAAA;AAEhD;AAEA,IAAM,eAAA,GAAkB,QAAA;AAExB,SAAS,YAAA,CAAa,MAAqB,KAAA,EAA8B;AAIvE,EAAA,IAAI,OAAO,SAAS,QAAA,IAAY,OAAO,UAAU,QAAA,IAC7C,MAAA,CAAO,cAAc,IAAI,CAAA,IAAK,OAAO,aAAA,CAAc,KAAK,KACxD,IAAA,IAAQ,CAAA,IAAK,SAAS,CAAA,IAAK,IAAA,GAAO,eAAA,IAAmB,KAAA,GAAQ,eAAA,EAAiB;AAChF,IAAA,OAAO,OAAO,eAAA,GAAkB,KAAA;AAAA,EAClC;AACA,EAAA,OAAO,CAAA,EAAG,IAAA,KAAS,IAAA,GAAO,MAAA,GAAS,MAAA,CAAO,IAAI,CAAC,CAAA,EAAA,EAAS,KAAA,KAAU,IAAA,GAAO,MAAA,GAAS,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA;AACjG;AAEA,SAAS0B,cAAAA,CACP,SACA,KAAA,EACyB;AACzB,EAAA,OAAO,EAAE,GAAI,OAAA,IAAW,IAAK,GAAI,KAAA,IAAS,EAAC,EAAG;AAChD;AAEA,SAASF,aAAY,KAAA,EAAyC;AAC5D,EAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxE,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,EAAE,KAAA,EAAM;AACjB;ACzRO,IAAM,uCAAN,MAA+E;AAAA,EAmBpF,WAAA,CAAqB,QAA6B5D,MAAAA,EAAgB;AAA7C,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAA6B,IAAA,IAAA,CAAA,KAAA,GAAAA,MAAAA;AAChD,IAAA,IAAIA,OAAM,IAAA,CAAK,IAAA,KAAS,iBAAiB,MAAM,IAAI,MAAM,gDAAgD,CAAA;AACzG,IAAA,IAAA,CAAK,OAAA,GAAU,CAAC,MAAM,CAAA;AACtB,IAAA,IAAA,CAAK,KAAA,GAAQA,OAAM,IAAA,CAAK,KAAA;AACxB,IAAA,IAAA,CAAK,OAAA,GAAUiE,kBAAAA,CAAkBjE,MAAAA,EAAO,IAAA,CAAK,OAAO,MAAM,CAAA;AAC1D,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAI,GAAA,CAAI,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAA,KAAU,CAAC,MAAA,EAAQ,KAAK,CAAC,CAAC,CAAA;AACjF,IAAA,MAAM,KAAA,GAAA,CAASA,MAAAA,CAAM,KAAA,IAAS,EAAC,EAAG,IAAI,CAAC,MAAA,KAAW,kBAAA,CAAmB,MAAM,CAAC,CAAA;AAC5E,IAAA,MAAM,OAAA,GAAUA,MAAAA,CAAM,OAAA,IAAW,EAAC;AAClC,IAAA,MAAM,MAAA,GAAA,CAAUA,MAAAA,CAAM,MAAA,IAAU,EAAC,EAAG,IAAI,CAAC,MAAA,KAAW,mBAAA,CAAoB,MAAM,CAAC,CAAA;AAC/E,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,QAAA,EAAmB;AAC3C,IAAA,IAAA,CAAK,KAAA,CAAM,IAAA;AAAA,MACTS,OAAO,CAAC,GAAG,GAAG,MAAM,KAAA,CAAM,KAAA,CAAM,CAAC,IAAA,KAAS4C,oBAAmB,2BAAA,CAA4B,IAAA,EAAM,GAAG,CAAC,CAAC,CAAC,CAAA;AAAA;AAAA;AAAA;AAAA,MAIrGzC,GAAAA,CAAI,CAAC,CAAC,SAAA,EAAW,GAAG,CAAA,KAAM,CAAC,QAAA,CAAS,OAAA,EAAS,GAAG,CAAA,EAAG,CAAC,SAAA,EAAW,GAAG,CAAC,CAA0B,CAAA;AAAA,MAC7F,MAAA,CAAO,CAAC,MAAA,KAAW;AACjB,QAAA,MAAM,UAAA,GAAa,OAChB,MAAA,CAAO,CAAC,GAAG,YAAY,CAAA,KAAM,YAAA,GAAe,CAAC,CAAA,CAC7C,IAAI,CAAC,CAAC,GAAG,GAAG,CAAA,EAAG,YAAY,CAAA,KAAM,CAAC,GAAA,EAAK,YAAY,CAAsB,CAAA;AAC5E,QAAA,IAAI,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AACrC,QAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,CAAC,CAAA,CAAG,CAAC,CAAA;AAC9B,QAAA,MAAM,SAAA,GAAYsD,qBAAoBlE,MAAAA,CAAM,MAAA,EAAQ,YAAY,KAAA,EAAO,IAAA,CAAK,OAAO,OAAO,CAAA;AAC1F,QAAA,MAAM,QAAA,GAAW4D,aAAY,SAAS,CAAA;AACtC,QAAA,MAAM,eAAe,IAAI,YAAA,CAAa,SAAS,EAAE,SAAA,EAAW,UAAU,CAAA;AACtE,QAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,CAAC,IAAA,KAASP,mBAAAA,CAAmBc,wBAAAA,CAAwB,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,YAAY,CAAC,CAAC,CAAA,EAAG;AAC/G,UAAA,OAAO,EAAC;AAAA,QACV;AACA,QAAA,MAAM,WAAA,GAAA,CAAenE,MAAAA,CAAM,OAAA,IAAW,EAAC,EAAG,GAAA;AAAA,UAAI,CAAC,WAC7C,MAAA,CAAO,UAAA,CAAW,SAAS,KAAA,IAAS,MAAA,CAAO,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,KAAM,cAC9DqC,mBAAAA,CAAmB,MAAA,CAAO,UAAA,EAAY,EAAE,SAAA,EAAW,QAAA,EAAU,CAAA,GAC7D,2BAAA,CAA4B,MAAA,CAAO,UAAA,EAAY,KAAK;AAAA,SAC1D;AACA,QAAA,IAAI,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG,iBAAA,CAAkB,UAAU,WAAW,CAAA;AACnE,QAAA,IAAA,CAAK,KAAA,CAAM,sBAAA,EAAA;AACX,QAAA,OAAO,CAAC,CAAC,QAAA,EAAU,CAAC,CAAC,CAAA;AAAA,MACvB,CAAC,CAAA;AAAA,MACDoB,MAAAA,CAAO,CAAC,KAAA,KAAU;AAChB,QAAA,KAAA,MAAW,CAAC,CAAC,GAAA,EAAK,GAAG,GAAG,YAAY,CAAA,IAAK,KAAA,CAAM,QAAA,EAAS,EAAG;AACzD,UAAA,IAAI,YAAA,KAAiB,GAAG,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAC,GAAA,EAAK,GAAA,EAAK,YAAY,CAAC,CAAA;AAAA,QACpE;AAAA,MACF,CAAC;AAAA,KACH;AACA,IAAA,IAAA,CAAK,MAAM,QAAA,EAAS;AAAA,EACtB;AAAA,EA5CqB,MAAA;AAAA,EAA6B,KAAA;AAAA,EAlBzC,KAAA,GAA8B;AAAA,IACrC,OAAA,EAAS,uBAAA;AAAA,IACT,aAAA,EAAe,CAAA;AAAA,IACf,sBAAA,EAAwB,CAAA;AAAA,IACxB,sBAAA,EAAwB,CAAA;AAAA,IACxB,SAAA,EAAW,CAAA;AAAA,IACX,WAAA,EAAa,CAAA;AAAA,IACb,gBAAA,EAAkB;AAAA,GACpB;AAAA,EACS,OAAA;AAAA,EAEQ,KAAA,GAAQ,IAAII,EAAAA,EAAG;AAAA,EACf,KAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA;AAAA,EACT,UAA4B,EAAC;AAAA,EAgDrC,IAAA,GAAyB;AACvB,IAAA,MAAM,UAAqC,EAAC;AAC5C,IAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,MAAA,CAAO,qBAAA,EAAsB,EAAG;AACrD,MAAA,MAAM,GAAA,GAAM,KAAK,MAAA,CAAO,iBAAA,CAAkB,KAAK,MAAA,CAAO,MAAA,CAAO,YAAY,GAAG,CAAA;AAC5E,MAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,EAAU,OAAA,CAAQ,KAAK,CAAC,CAAC,GAAA,EAAK,IAAA,CAAK,cAAc,GAAA,EAAK,GAAG,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACpF;AACA,IAAA,OAAO,IAAA,CAAK,KAAK,OAAO,CAAA;AAAA,EAC1B;AAAA,EAEA,KAAA,CAAM,QAAoB,KAAA,EAAsC;AAC9D,IAAA,IAAI,MAAA,KAAW,IAAA,CAAK,MAAA,IAAU,KAAA,CAAM,EAAA,KAAO,SAAA,IAAc,KAAA,CAAM,EAAA,KAAO,UAAA,IAAc,CAAC,KAAA,CAAM,OAAA,SAAiB,EAAC;AAC7G,IAAA,MAAM,UAAqC,EAAC;AAC5C,IAAA,IAAI,KAAA,CAAM,EAAA,KAAO,UAAA,IAAc,KAAA,CAAM,OAAA,EAAS;AAC5C,MAAA,KAAA,MAAW,MAAA,IAAU,MAAM,OAAA,EAAS;AAClC,QAAA,IAAI,MAAA,CAAO,SAAS,QAAA,EAAU;AAC5B,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,MAAA,CAAO,KAAK,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA,EAAG,EAAE,CAAC,CAAA;AAAA,QAC7E,CAAA,MAAO;AACL,UAAA,IAAI,MAAA,CAAO,IAAA,KAAS,QAAA,IAAY,MAAA,CAAO,aAAA,EAAe;AACpD,YAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,MAAA,CAAO,KAAK,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,aAAa,CAAC,CAAA,EAAG,EAAE,CAAC,CAAA;AAAA,UACrF;AACA,UAAA,IAAA,CAAK,aAAA,CAAc,OAAA,EAAS,MAAA,CAAO,GAAG,CAAA;AAAA,QACxC;AAAA,MACF;AAAA,IACF,CAAA,MAAA,IAAW,KAAA,CAAM,EAAA,KAAO,QAAA,EAAU;AAChC,MAAA,IAAA,CAAK,aAAA,CAAc,OAAA,EAAS,KAAA,CAAM,KAAK,CAAA;AAAA,IACzC,CAAA,MAAA,IAAW,KAAA,CAAM,EAAA,KAAO,QAAA,EAAU;AAChC,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,KAAA,CAAM,OAAO,IAAA,CAAK,WAAA;AAAA,QAC/B,KAAA,CAAM,KAAA;AAAA,QACNC,cAAAA,CAAc,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,aAAa;AAAA,OAC/C,CAAA,EAAG,EAAE,CAAC,CAAA;AAAA,IACT,CAAA,MAAA,IAAW,KAAA,CAAM,EAAA,KAAO,QAAA,EAAU;AAChC,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,KAAA,CAAM,OAAO,IAAA,CAAK,WAAA;AAAA,QAC/B,KAAA,CAAM,KAAA;AAAA,QACNA,cAAAA,CAAc,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,aAAa;AAAA,OAC/C,CAAA,EAAG,EAAE,CAAC,CAAA;AACP,MAAA,IAAA,CAAK,aAAA,CAAc,OAAA,EAAS,KAAA,CAAM,KAAK,CAAA;AAAA,IACzC;AACA,IAAA,OAAO,IAAA,CAAK,KAAK,OAAO,CAAA;AAAA,EAC1B;AAAA,EAEQ,aAAA,CAAc,KAAgC,GAAA,EAAmB;AACvE,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,yBAAA,CAA0B,GAAG,CAAA;AACrD,IAAA,IAAI,GAAA,KAAQ,MAAA,EAAW,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,GAAA,EAAK,IAAA,CAAK,aAAA,CAAc,GAAA,EAAK,GAAG,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,EAC1E;AAAA,EAEQ,aAAA,CAAc,KAAa,GAAA,EAA4B;AAC7D,IAAA,IAAA,CAAK,KAAA,CAAM,aAAA,EAAA;AACX,IAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAe,IAAA,CAAK,QAAQ,MAAM,CAAA;AACrD,IAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,QAAQ,KAAA,EAAA,EAAS;AACxD,MAAA,MAAA,CAAO,KAAK,IAAI,IAAA,CAAK,MAAA,CAAO,kBAAkB,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA,EAAI,GAAG,CAAA;AAAA,IACzE;AACA,IAAA,OAAO,IAAI,aAAA,CAAc,GAAA,EAAK,KAAK,KAAA,EAAO,IAAA,CAAK,eAAe,MAAM,CAAA;AAAA,EACtE;AAAA,EAEQ,WAAA,CAAY,KAAa,KAAA,EAAyD;AACxF,IAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAe,IAAA,CAAK,QAAQ,MAAM,CAAA;AACrD,IAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,IAAA,CAAK,QAAQ,MAAA,EAAQ,KAAA,EAAA,EAAS,MAAA,CAAO,KAAK,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAE,CAAA;AACpG,IAAA,OAAO,IAAI,aAAA,CAAc,GAAA,EAAK,KAAK,KAAA,EAAO,IAAA,CAAK,eAAe,MAAM,CAAA;AAAA,EACtE;AAAA,EAEQ,KAAK,OAAA,EAAsD;AACjE,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAClC,IAAA,KAAA,MAAW,GAAG,MAAM,CAAA,IAAK,OAAA,EAAS;AAChC,MAAA,IAAI,MAAA,GAAS,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,SAAA,IAAa,MAAA;AAAA,WACnC,IAAA,CAAK,KAAA,CAAM,WAAA,IAAe,CAAC,MAAA;AAAA,IAClC;AACA,IAAA,IAAA,CAAK,UAAU,EAAC;AAChB,IAAA,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,IAAIC,QAAAA,CAAS,OAAO,CAAC,CAAA;AACzC,IAAA,IAAA,CAAK,MAAM,GAAA,EAAI;AACf,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AACF,CAAA;AAEA,SAAS,QAAA,CAAS,SAAyC,GAAA,EAAsB;AAC/E,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,KAAW,CAAA,GAC9B,CAAC,eAAe,CAAA,GAChB,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,KAAS,2BAAA,CAA4B,IAAA,EAAM,GAAG,CAAC,CAAA;AAChE,EAAA,OAAO3B,WAAU,MAAM,CAAA;AACzB;AAEA,SAAS8B,oBAAAA,CACP,MAAA,EACA,MAAA,EACA,KAAA,EACA,OACA,OAAA,EACS;AACT,EAAA,IAAI,WAAW,MAAA,EAAW;AACxB,IAAA,OAAO,OAAO,WAAA,CAAY,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAM,KAAA,KAAU;AAAA,MACrD,SAAS,KAAK,CAAA,CAAA;AAAA,MACd,2BAAA,CAA4B,MAAM,KAAK;AAAA,KACxC,CAAC,CAAA;AAAA,EACJ;AACA,EAAA,IAAIf,kBAAAA,CAAkB,MAAM,CAAA,IAAKiB,YAAAA,CAAY,MAAM,CAAA,EAAG;AACpD,IAAA,OAAOD,wBAAAA,CAAwB,MAAA,EAAuC,MAAA,EAAQ,KAAK,CAAA;AAAA,EACrF;AACA,EAAA,IAAIlC,eAAc,MAAM,CAAA,SAAU,yBAAA,CAA0B,MAAA,EAAkB,QAAQ,KAAK,CAAA;AAC3F,EAAA,OAAO,MAAA,IAAU,KAAA,CAAM,GAAA,CAAI,KAAK,CAAA;AAClC;AAEA,SAAS,yBAAA,CACP,MAAA,EACA,MAAA,EACA,KAAA,EACyB;AACzB,EAAA,MAAM,MAA+B,EAAC;AACtC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AACjD,IAAA,IAAIkB,kBAAAA,CAAkB,KAAK,CAAA,IAAKiB,YAAAA,CAAY,KAAK,CAAA,EAAG;AAClD,MAAA,GAAA,CAAI,GAAG,CAAA,GAAID,wBAAAA,CAAwB,KAAA,EAAsC,QAAQ,KAAK,CAAA;AAAA,IACxF,WAAWlC,cAAAA,CAAc,KAAK,KAAK,CAAC,gBAAA,CAAiB,KAAK,CAAA,EAAG;AAC3D,MAAA,GAAA,CAAI,GAAG,CAAA,GAAI,yBAAA,CAA0B,KAAA,EAAiB,QAAQ,KAAK,CAAA;AAAA,IACrE,CAAA,MAAO;AACL,MAAA,GAAA,CAAI,GAAG,CAAA,GAAI,KAAA;AAAA,IACb;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAASkC,wBAAAA,CACP,UAAA,EACA,MAAA,EACA,KAAA,EACA,QAAA,EACS;AACT,EAAA,IAAIC,aAAY,UAAU,CAAA,EAAG,OAAOC,iBAAAA,CAAiB,YAAY,MAAM,CAAA;AACvE,EAAA,IAAI,UAAA,CAAW,SAAS,KAAA,IAAS,UAAA,CAAW,KAAK,CAAC,CAAA,KAAM,eAAe,QAAA,EAAU;AAC/E,IAAA,OAAO,SAAS,GAAA,CAAI,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,EAC/C;AACA,EAAA,IAAI,UAAA,CAAW,SAAS,MAAA,EAAQ;AAC9B,IAAA,MAAM,OAAO,UAAA,CAAW,IAAA,CAAK,GAAA,CAAI,CAAC,QAAQ,IAAI,KAAA;AAAA,MAC5CD,YAAAA,CAAY,GAAG,CAAA,IAAKd,kBAAAA,CAAkB,GAAG,IACrCa,wBAAAA,CAAwB,GAAA,EAAoC,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,GACnF,4BAA4B,GAAA,EAAK,QAAA,IAAY,GAAA,CAAI,IAAA,KAAS,KAAA,IAAS,GAAA,CAAI,KAAK,CAAC,CAAA,KAAM,WAAA,GAAc,QAAA,GAAW,KAAK;AAAA,KACtH,CAAA;AACD,IAAA,OAAO,4BAA4B,IAAI,IAAA,CAAK,WAAW,IAAA,EAAM,IAAI,GAAG,KAAK,CAAA;AAAA,EAC3E;AACA,EAAA,OAAO,2BAAA,CAA4B,YAAY,KAAK,CAAA;AACtD;AAEA,SAASE,iBAAAA,CACP,WACA,MAAA,EACS;AACT,EAAA,MAAM,QAAA,GAAW,MAAA,CACd,MAAA,CAAO,CAAC,GAAG,YAAY,CAAA,KAAM,YAAA,GAAe,CAAC,CAAA,CAC7C,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,YAAY,CAAA,KAAM,CAAC,2BAAA,CAA4B,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,EAAI,GAAG,CAAA,EAAG,YAAY,CAAU,CAAA;AAC7G,EAAA,QAAQ,UAAU,IAAA;AAAM,IACtB,KAAK,OAAA;AACH,MAAA,OAAO,QAAA,CAAS,MAAA,CAAO,CAAC,KAAA,EAAO,GAAG,YAAY,CAAA,KAAM,KAAA,GAAQ,YAAA,EAAc,CAAC,CAAA;AAAA,IAC7E,KAAK,KAAA;AACH,MAAA,OAAO,QAAA,CAAS,MAAA,CAAO,CAAC,KAAA,EAAO,CAAC,KAAA,EAAO,YAAY,CAAA,KAAM,KAAA,GAAQC,YAAAA,CAAY,KAAK,CAAA,GAAI,cAAc,CAAC,CAAA;AAAA,IACvG,KAAK,KAAA,EAAO;AACV,MAAA,MAAMC,MAAAA,GAAQ,QAAA,CAAS,MAAA,CAAO,CAAC,KAAA,EAAO,GAAG,YAAY,CAAA,KAAM,KAAA,GAAQ,YAAA,EAAc,CAAC,CAAA;AAClF,MAAA,MAAMpE,IAAAA,GAAM,QAAA,CAAS,MAAA,CAAO,CAAC,OAAO,CAAC,KAAA,EAAO,YAAY,CAAA,KAAM,KAAA,GAAQmE,YAAAA,CAAY,KAAK,CAAA,GAAI,cAAc,CAAC,CAAA;AAC1G,MAAA,OAAOC,MAAAA,KAAU,CAAA,GAAI,CAAA,GAAIpE,IAAAA,GAAMoE,MAAAA;AAAA,IACjC;AAAA,IACA,KAAK,KAAA;AAAA,IACL,KAAK,KAAA,EAAO;AACV,MAAA,MAAM,UAAA,GAAa,QAAA,CAAS,GAAA,CAAI,CAAC,CAAC,KAAK,CAAA,KAAM,KAAK,CAAA,CAAE,OAAO,CAAC,KAAA,KAAU,KAAA,KAAU,IAAA,IAAQ,UAAU,MAAS,CAAA;AAC3G,MAAA,IAAI,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AACpC,MAAA,OAAO,UAAA,CAAW,MAAA,CAAO,CAAC,IAAA,EAAM,KAAA,KAAU;AACxC,QAAA,MAAM,UAAA,GAAahB,iBAAAA,CAAiB,KAAA,EAAO,IAAI,CAAA;AAC/C,QAAA,OAAO,SAAA,CAAU,SAAS,KAAA,GAAS,UAAA,GAAa,IAAI,KAAA,GAAQ,IAAA,GAAS,UAAA,GAAa,CAAA,GAAI,KAAA,GAAQ,IAAA;AAAA,MAChG,CAAC,CAAA;AAAA,IACH;AAAA,IACA;AACE,MAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,uBAAA,EAA0B,SAAA,CAAU,IAAI,CAAA,CAAE,CAAA;AAAA;AAE1E;AAEA,SAASU,kBAAAA,CAAkBjE,MAAAA,EAAgB,KAAA,EAAe,UAAA,EAA+C;AACvG,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,MAAMgE,IAAAA,GAAM,CAAC,KAAA,KAAyB;AACpC,IAAA,KAAA,MAAW,GAAA,IAAO,qBAAA,CAAsB,KAAK,CAAA,EAAG;AAC9C,MAAA,MAAM,CAAC,QAAA,EAAU,MAAM,CAAA,GAAI,GAAA,CAAI,MAAM,GAAG,CAAA;AACxC,MAAA,IAAI,QAAA,KAAa,KAAA,IAAS,MAAA,EAAQ,IAAA,CAAK,IAAI,MAAM,CAAA;AAAA,IACnD;AAAA,EACF,CAAA;AACA,EAAAA,IAAAA,CAAIhE,OAAM,MAAM,CAAA;AAChB,EAAA,KAAA,MAAW,QAAQA,MAAAA,CAAM,OAAA,IAAW,EAAC,EAAGgE,KAAI,IAAI,CAAA;AAChD,EAAA,KAAA,MAAW,MAAA,IAAUhE,OAAM,KAAA,IAAS,IAAIgE,IAAAA,CAAI,kBAAA,CAAmB,MAAM,CAAC,CAAA;AACtE,EAAA,KAAA,MAAW,MAAA,IAAUhE,OAAM,MAAA,IAAU,IAAIgE,IAAAA,CAAI,mBAAA,CAAoB,MAAM,CAAC,CAAA;AACxE,EAAA,OAAO,IAAA,CAAK,IAAA,KAAS,CAAA,GAAI,CAAC,GAAG,UAAA,CAAW,WAAA,EAAa,CAAA,GAAI,CAAC,GAAG,IAAI,CAAA;AACnE;AAEA,SAASI,aAAY,KAAA,EAAoC;AACvD,EAAA,OAAO,KAAA,YAAiB,aACtB,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA,IAAa,MAA6B,IAAA,KAAS,KAAA;AAE1F;AAEA,SAASd,mBAAkB,KAAA,EAAyB;AAClD,EAAA,IAAIc,YAAAA,CAAY,KAAK,CAAA,EAAG,OAAO,IAAA;AAC/B,EAAA,OAAO,KAAA,YAAiB,IAAA,IAAQ,KAAA,CAAM,IAAA,CAAK,KAAKd,kBAAiB,CAAA;AACnE;AAEA,SAASgB,aAAY,KAAA,EAAwB;AAC3C,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,OAAO,KAAK,CAAA;AAClD,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,KAAA,IAAS,CAAC,CAAA;AAChC,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,GAAI,MAAA,GAAS,CAAA;AAC5C;AAEA,SAASf,iBAAAA,CAAiB,GAAY,CAAA,EAAoB;AACxD,EAAA,IAAI,MAAA,CAAO,EAAA,CAAG,CAAA,EAAG,CAAC,GAAG,OAAO,CAAA;AAC5B,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,CAAA,KAAM,QAAA,SAAiB,CAAA,GAAI,CAAA;AAC/D,EAAA,IAAI,OAAO,MAAM,QAAA,IAAY,OAAO,MAAM,QAAA,EAAU,OAAO,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,CAAA;AACxE,EAAA,MAAM,IAAA,GAAO,OAAO,CAAC,CAAA;AACrB,EAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,EAAA,OAAO,IAAA,GAAO,KAAA,GAAQ,EAAA,GAAK,IAAA,GAAO,QAAQ,CAAA,GAAI,CAAA;AAChD;AAEA,SAASO,cAAAA,CACP,SACA,KAAA,EACyB;AACzB,EAAA,OAAO,EAAE,GAAI,OAAA,IAAW,IAAK,GAAI,KAAA,IAAS,EAAC,EAAG;AAChD;AAEA,SAASF,aAAY,KAAA,EAAyC;AAC5D,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,KAAA;AACjF,EAAA,OAAO,EAAE,KAAA,EAAM;AACjB;AAEA,SAAS3B,eAAc,KAAA,EAAkD;AACvE,EAAA,OAAO,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;;;ACzRO,IAAM,mBAAA,0BAA4C,mBAAmB;AA0E5E,IAAI,gBAAA,GAAmB,CAAA;AAEhB,IAAM,sBAAN,MAA0B;AAAA,EACtB,EAAA;AAAA,EACA,KAAA;AAAA,EACA,eAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACQ,KAAA;AAAA,EACT,SAAA,GAAY,CAAA;AAAA,EACZ,OAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA,GAA2E,OAAO,EAAE,OAAA,EAAS,OAAA,EAAQ,CAAA;AAAA,EAE7G,YAAY,OAAA,EAKT;AACD,IAAA,IAAA,CAAK,KAAK,OAAA,CAAQ,EAAA;AAClB,IAAA,IAAA,CAAK,QAAQ,OAAA,CAAQ,KAAA;AACrB,IAAA,IAAA,CAAK,QAAQ,OAAA,CAAQ,MAAA;AACrB,IAAA,IAAA,CAAK,eAAA,GAAkB,QAAQ,MAAA,KAAW,MAAA;AAC1C,IAAA,IAAA,CAAK,QAAA,GAAW,aAAA,CAAc,OAAA,CAAQ,KAAK,CAAA;AAC3C,IAAA,IAAA,CAAK,WAAA,GAAc,OAAA,CAAQ,KAAA,CAAM,QAAA,KAAa,IAAA;AAC9C,IAAA,IAAA,CAAK,iBAAiB,OAAA,CAAQ,cAAA;AAAA,EAChC;AAAA,EAEA,WAAA,GAAsB;AACpB,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA,EAEA,SAAA,GAAkB;AAChB,IAAA,IAAA,CAAK,SAAA,EAAA;AAAA,EACP;AAAA,EAEA,gBAAgB,QAAA,EAA4E;AAC1F,IAAA,IAAA,CAAK,YAAA,GAAe,QAAA;AAAA,EACtB;AAAA,EAEA,eAAA,GAAwE;AACtE,IAAA,OAAO,KAAK,YAAA,EAAa;AAAA,EAC3B;AAAA,EAEA,UAAU,OAAA,EAA8B;AACtC,IAAA,IAAA,CAAK,IAAA,CAAK,MAAM,OAAA,EAAS,MAAA,IAAU,OAAO,CAAA,EAAG,MAAM,IAAI,6BAAA,EAA8B;AACrF,IAAA,IAAA,CAAK,OAAA,GAAU;AAAA,MACb,MAAA,EAAQ,QAAQ,MAAA,IAAU,CAAA;AAAA,MAC1B,KAAA,EAAO,QAAQ,KAAA,IAAS;AAAA,KAC1B;AACA,IAAA,IAAA,CAAK,cAAA,IAAiB;AACtB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,SAAA,GAA2D;AACzD,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EAEA,iBAAA,GAA6B;AAC3B,IAAA,OAAO,KAAK,cAAA,EAAe;AAAA,EAC7B;AAAA,EAEA,wBAAwB,QAAA,EAA0C;AAChE,IAAA,IAAA,CAAK,cAAA,GAAiB,QAAA;AAAA,EACxB;AAAA,EAEA,OAAA,GAA+B;AAC7B,IAAA,IAAA,CAAK,SAAA,EAAU;AACf,IAAA,OAAO,cAAc,IAAA,CAAK,cAAA,EAAgB,CAAA,CAAE,IAAI2B,YAAW,CAAA;AAAA,EAC7D;AAAA,EAEA,MAAA,CAAO,KAAmB,KAAA,EAA6B;AACrD,IAAA,IAAI,IAAA,CAAK,KAAA,EAAO,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AACrC,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,IAAA,IAAQ,GAAA,CAAI,MAAM,GAAA,CAAI,IAAA;AAC3C,IAAA,IAAI,OAAO,QAAA,KAAa,QAAA,IAAY,OAAO,aAAa,QAAA,EAAU;AAChE,MAAA,OAAO,QAAA;AAAA,IACT;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,cAAA,GAA0B;AAChC,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAS,OAAO,IAAA,CAAK,KAAA;AAC/B,IAAA,OAAO;AAAA,MACL,GAAG,IAAA,CAAK,KAAA;AAAA,MACR,MAAA,EAAQ,KAAK,OAAA,CAAQ,MAAA;AAAA,MACrB,KAAA,EAAO,KAAK,OAAA,CAAQ;AAAA,KACtB;AAAA,EACF;AACF;AAEO,IAAM,sBAAN,MAIL;AAAA,EACS,EAAA;AAAA,EACA,KAAA;AAAA,EACA,cAAA;AAAA,EACA,MAAA;AAAA,EACQ,UAAA;AAAA,EACA,eAAkC,EAAC;AAAA,EACnC,SAAA,uBAAgB,GAAA,EAAoB;AAAA,EACpC,iBAAA,uBAAwB,GAAA,EAAsB;AAAA,EACvD,YAAyB,EAAC;AAAA,EAC1B,UAAA,uBAAiB,GAAA,EAAgB;AAAA,EACjC,OAAA;AAAA,EACA,gBAAA,GAAmB,CAAA;AAAA,EACnB,OAAA,GAAkC,OAAA;AAAA,EAClC,cAAA,GAAiB,CAAA;AAAA,EAEzB,WAAA,CAAY,SAA+C,WAAA,EAAsB;AAC/E,IAAA,IAAA,CAAK,MAAA,GAAS,OAAA;AACd,IAAA,IAAA,CAAK,KAAK,OAAA,CAAQ,EAAA;AAClB,IAAA,IAAA,CAAK,aAAa,OAAA,CAAQ,UAAA;AAC1B,IAAA,IAAA,CAAK,KAAA,GAAQ;AAAA,MACX,GAAG,OAAA,CAAQ,KAAA;AAAA,MACX,GAAI,eAAe;AAAC,KACtB;AACA,IAAA,IAAA,CAAK,cAAA,GAAiB,OAAA,CAAQ,sBAAA,IAA0B,EAAE,YAAY,SAAA,EAAU;AAChF,IAAA,IAAA,CAAK,UAAA,CAAW,wBAAwB,MAAM;AAC5C,MAAA,IAAI,IAAA,CAAK,OAAA,KAAY,YAAA,EAAc,IAAA,CAAK,oBAAA,EAAqB;AAAA,IAC/D,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,OAAA,GAAU,gBAAA,CAAiB,OAAA,CAAQ,OAAO,CAAA;AAC/C,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,IAAA,CAAK,WAAW,eAAA,CAAgB,MAAM,IAAA,CAAK,OAAA,CAAS,QAAQ,KAAK,CAAA;AACjE,MAAA,IAAA,CAAK,WAAA,CAAY,KAAK,OAAO,CAAA;AAAA,IAC/B,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,UAAU,KAAK,CAAA;AAAA,IACtB;AAEA,IAAA,IAAI,OAAA,CAAQ,cAAc,KAAA,EAAO;AAC/B,MAAA,IAAI,KAAK,OAAA,EAAS;AAChB,QAAA,KAAA,MAAW,MAAA,IAAU,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,OAAA,EAAS;AACjD,UAAA,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,CAAC,KAAA,KAAU;AACjD,YAAA,MAAM,OAAO,IAAA,CAAK,OAAA;AAClB,YAAA,IAAI,IAAA,EAAM,OAAA,CAAQ,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAA,EAAG;AAC1C,cAAA,IAAA,CAAK,eAAA,CAAgB,IAAA,EAAM,MAAA,EAAQ,KAAK,CAAA;AAAA,YAC1C,CAAA,MAAA,IAAW,CAAC,IAAA,EAAM;AAChB,cAAA,IAAA,CAAK,UAAU,IAAI,CAAA;AAAA,YACrB;AAAA,UACF,CAAC,CAAC,CAAA;AAAA,QACJ;AAAA,MACF,CAAA,MAAO;AACL,QAAA,KAAA,MAAW,MAAA,IAAUY,mBAAAA,CAAmB,OAAA,CAAQ,OAAO,CAAA,EAAG;AACxD,UAAA,IAAA,CAAK,YAAA,CAAa,IAAA;AAAA,YAChB,MAAA,CAAO,UAAU,MAAM;AACrB,cAAA,IAAA,CAAK,UAAU,IAAI,CAAA;AAAA,YACrB,CAAC;AAAA,WACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,MAAA,GAAiC;AACnC,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EAEA,IAAI,IAAA,GAAe;AACjB,IAAA,OAAO,KAAK,UAAA,CAAW,IAAA;AAAA,EACzB;AAAA,EAEA,IAAI,QAAA,GAAmB;AACrB,IAAA,OAAO,KAAK,SAAA,CAAU,MAAA;AAAA,EACxB;AAAA,EAEA,IAAI,aAAA,GAAwB;AAC1B,IAAA,OAAO,IAAA,CAAK,cAAA;AAAA,EACd;AAAA,EAEA,IAAI,eAAA,GAA0B;AAC5B,IAAA,OAAO,IAAA,CAAK,gBAAA;AAAA,EACd;AAAA,EAEA,IAAI,KAAA,GAAyB;AAC3B,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAAA,EAEA,IAAI,OAAA,GAAuB;AACzB,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA,EAEA,IAAI,GAAA,EAA6B;AAC/B,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,GAAG,CAAA;AAAA,EAChC;AAAA,EAEA,IAAI,GAAA,EAAoB;AACtB,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,GAAG,CAAA;AAAA,EAChC;AAAA,EAEA,CAAC,IAAA,GAA+B;AAC9B,IAAA,OAAO,IAAA,CAAK,WAAW,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,CAAC,MAAA,GAAiC;AAChC,IAAA,OAAO,IAAA,CAAK,WAAW,MAAA,EAAO;AAAA,EAChC;AAAA,EAEA,CAAC,OAAA,GAA0C;AACzC,IAAA,OAAO,IAAA,CAAK,WAAW,OAAA,EAAQ;AAAA,EACjC;AAAA,EAEA,QAAQ,QAAA,EAAiE;AACvE,IAAA,IAAI,CAAA,GAAI,CAAA;AACR,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,IAAA,CAAK,UAAA,CAAW,SAAQ,EAAG;AACpD,MAAA,QAAA,CAAS,KAAA,EAAO,KAAK,CAAA,EAAG,CAAA;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,IAAO,QAAA,EAAkE;AACvE,IAAA,MAAM,MAAgB,EAAC;AACvB,IAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,KAAA,EAAO,GAAA,EAAK,KAAA,KAAU,GAAA,CAAI,IAAA,CAAK,QAAA,CAAS,KAAA,EAAO,GAAA,EAAK,KAAK,CAAC,CAAC,CAAA;AACzE,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,qBAAA,GAA0D;AACxD,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,UAAA,CAAW,OAAA,EAAS,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,MAAO;AAAA,MAC3D,GAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACR,CAAE,CAAA;AAAA,EACJ;AAAA,EAEA,gBAAA,CACE,UACA,OAAA,EACwB;AACxB,IAAA,IAAA,CAAK,gBAAA,EAAA;AACL,IAAA,MAAM,QAAA,GAAW,QAAA;AACjB,IAAA,IAAA,CAAK,SAAA,CAAU,IAAI,QAAQ,CAAA;AAE3B,IAAA,IAAI,SAAS,mBAAA,EAAqB;AAChC,MAAA,MAAM,OAAA,GAAU,KAAK,qBAAA,EAAsB;AAC3C,MAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG,QAAA,CAAS,OAAO,CAAA;AAAA,IAC1C;AAEA,IAAA,IAAI,MAAA,GAAS,IAAA;AACb,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,OAAA;AAAA,MACR,aAAa,MAAM;AACjB,QAAA,IAAI,CAAC,MAAA,EAAQ;AACb,QAAA,MAAA,GAAS,KAAA;AACT,QAAA,IAAA,CAAK,SAAA,CAAU,OAAO,QAAQ,CAAA;AAC9B,QAAA,IAAA,CAAK,gBAAA,EAAA;AAAA,MACP;AAAA,KACF;AAAA,EACF;AAAA,EAEA,UAAU,QAAA,EAAwC;AAChD,IAAA,IAAA,CAAK,iBAAA,CAAkB,IAAI,QAAQ,CAAA;AACnC,IAAA,OAAO,MAAM,IAAA,CAAK,iBAAA,CAAkB,MAAA,CAAO,QAAQ,CAAA;AAAA,EACrD;AAAA,EAEA,MAAM,OAAA,GAAyB;AAC7B,IAAA,MAAM,QAAQ,OAAA,EAAQ;AAAA,EACxB;AAAA,EAEA,MAAM,cAAA,GAA2C;AAC/C,IAAA,MAAM,KAAK,OAAA,EAAQ;AACnB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEA,MAAM,gBAAA,GAAyC;AAC7C,IAAA,MAAM,KAAK,OAAA,EAAQ;AACnB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EAEA,OAAA,GAAmB;AACjB,IAAA,OAAO,KAAK,OAAA,KAAY,OAAA;AAAA,EAC1B;AAAA,EAEA,kBAAA,GAA2B;AAAA,EAE3B;AAAA,EAEA,MAAM,OAAA,GAAyB;AAC7B,IAAA,IAAI,IAAA,CAAK,YAAY,YAAA,EAAc;AACnC,IAAA,IAAA,CAAK,OAAA,GAAU,YAAA;AACf,IAAA,KAAA,MAAW,SAAS,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,CAAC,GAAG,KAAA,EAAM;AACvD,IAAA,IAAA,CAAK,UAAU,KAAA,EAAM;AACrB,IAAA,IAAA,CAAK,kBAAkB,KAAA,EAAM;AAC7B,IAAA,IAAA,CAAK,gBAAA,GAAmB,CAAA;AACxB,IAAA,IAAA,CAAK,UAAA,CAAW,wBAAwB,MAAS,CAAA;AACjD,IAAA,MAAM,QAAQ,OAAA,EAAQ;AAAA,EACxB;AAAA,EAEQ,UAAU,IAAA,EAAqB;AACrC,IAAA,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,UAAA,CAAW,OAAA,IAA0B,IAAI,CAAA;AAAA,EACjE;AAAA,EAEQ,oBAAA,GAA6B;AACnC,IAAA,MAAM,IAAA,GAAO,gBAAA,CAAiB,IAAA,CAAK,UAAA,CAAW,mBAAmB,CAAA;AACjE,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AACf,MAAA,IAAA,CAAK,WAAW,eAAA,CAAgB,OAAO,EAAE,OAAA,EAAS,SAAQ,CAAE,CAAA;AAC5D,MAAA,IAAA,CAAK,UAAU,IAAI,CAAA;AACnB,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,IAAA,IAAA,CAAK,UAAA,CAAW,eAAA,CAAgB,MAAM,IAAA,CAAK,QAAQ,KAAK,CAAA;AACxD,IAAA,IAAA,CAAK,WAAW,SAAA,EAAU;AAC1B,IAAA,MAAMf,OAAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAK;AACjC,IAAA,IAAA,CAAK,kBAAA,CAAmB,MAAMA,OAAM,CAAA;AACpC,IAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,IAAA,KAAA,MAAW,CAAC,SAAA,EAAW,GAAG,CAAA,IAAK,KAAK,eAAA,EAAiB;AACnD,MAAA,IAAA,CAAK,eAAA,CAAgB,IAAI,SAAA,EAAW,IAAA,CAAK,WAAW,MAAA,CAAO,GAAA,EAAK,OAAO,CAAC,CAAA;AAAA,IAC1E;AACA,IAAA,IAAA,CAAK,WAAA,CAAY,CAAC,GAAG,IAAA,CAAK,gBAAgB,MAAA,EAAQ,GAAkB,IAAI,CAAA;AAAA,EAC1E;AAAA,EAEQ,YAAY,IAAA,EAAyB;AAC3C,IAAA,IAAA,CAAK,WAAW,SAAA,EAAU;AAC1B,IAAA,MAAMA,OAAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAK;AACjC,IAAA,IAAA,CAAK,kBAAA,CAAmB,MAAMA,OAAM,CAAA;AACpC,IAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,IAAA,KAAA,MAAW,CAAC,SAAA,EAAW,GAAG,CAAA,IAAK,KAAK,eAAA,EAAiB;AACnD,MAAA,IAAA,CAAK,eAAA,CAAgB,IAAI,SAAA,EAAW,IAAA,CAAK,WAAW,MAAA,CAAO,GAAA,EAAK,OAAO,CAAC,CAAA;AAAA,IAC1E;AACA,IAAA,IAAA,CAAK,WAAA,CAAY,CAAC,GAAG,IAAA,CAAK,gBAAgB,MAAA,EAAQ,GAAkB,KAAK,CAAA;AAAA,EAC3E;AAAA,EAEQ,eAAA,CAAgB,IAAA,EAAmB,MAAA,EAAoB,KAAA,EAA0B;AACvF,IAAA,MAAMA,OAAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC/C,IAAA,IAAIA,OAAAA,CAAO,WAAW,CAAA,EAAG;AACzB,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,0BAAA,CAA2B,IAAA,EAAMA,OAAM,CAAA;AAChE,IAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC9B,IAAA,IAAA,CAAK,cAAA,EAAA;AACL,IAAA,IAAA,CAAK,YAAY,WAAW,CAAA;AAAA,EAC9B;AAAA,EAEQ,kBAAA,CACN,MACA,OAAA,EACM;AACN,IAAA,KAAA,MAAW,CAAC,SAAA,EAAW,GAAA,EAAK,MAAM,KAAK,OAAA,EAAS;AAC9C,MAAA,IAAI,MAAA,GAAS,CAAA,EAAG,IAAA,CAAK,eAAA,CAAgB,OAAO,SAAS,CAAA;AAAA,WAAA,IAC5C,SAAS,CAAA,EAAG,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,WAAW,GAAG,CAAA;AAAA,IAC9D;AAAA,EACF;AAAA,EAEQ,0BAAA,CACN,MACA,OAAA,EACkC;AAClC,IAAA,MAAM,UAA4C,EAAC;AACnD,IAAA,IAAI,YAAA,GAAe,KAAA;AACnB,IAAA,MAAM,UAAA,uBAAiB,GAAA,EAAsC;AAC7D,IAAA,MAAM,UAAA,uBAAiB,GAAA,EAAsC;AAE7D,IAAA,KAAA,MAAW,CAAC,SAAS,CAAA,IAAK,OAAA,EAAS;AACjC,MAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,SAAS,CAAA,EAAG;AAC9B,QAAA,UAAA,CAAW,IAAI,SAAA,EAAW,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,SAAS,CAAC,CAAA;AAC7D,QAAA,UAAA,CAAW,IAAI,SAAA,EAAW,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,SAAS,CAAC,CAAA;AAAA,MAC/D;AAAA,IACF;AACA,IAAA,IAAA,CAAK,kBAAA,CAAmB,MAAM,OAAO,CAAA;AAErC,IAAA,KAAA,MAAW,CAAC,SAAA,EAAWK,cAAa,CAAA,IAAK,UAAA,EAAY;AACnD,MAAA,MAAM,QAAA,GAAWA,cAAAA;AACjB,MAAA,MAAM,WAAA,GAAc,UAAA,CAAW,GAAA,CAAI,SAAS,CAAA;AAC5C,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,SAAS,CAAA;AAC/C,MAAA,MAAM,OAAA,GAAU,IAAA,KAAS,MAAA,GACrB,MAAA,GACA,IAAA,CAAK,WAAW,MAAA,CAAO,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA;AAEtD,MAAA,IAAI,aAAa,MAAA,IAAa,WAAA,KAAgB,WACzC,IAAA,KAAS,MAAA,IAAa,YAAY,WAAA,CAAA,EAAc;AACnD,QAAA,IAAA,CAAK,UAAA,CAAW,OAAO,WAAW,CAAA;AAClC,QAAA,IAAA,CAAK,gBAAgB,WAAW,CAAA;AAChC,QAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,GAAA,EAAK,WAAA,EAAa,OAAO,QAAA,EAAU,IAAA,EAAM,UAAU,CAAA;AAClE,QAAA,YAAA,GAAe,IAAA;AAAA,MACjB;AAEA,MAAA,IAAI,IAAA,KAAS,MAAA,IAAa,OAAA,KAAY,MAAA,EAAW;AAC/C,QAAA,IAAA,CAAK,eAAA,CAAgB,OAAO,SAAS,CAAA;AACrC,QAAA;AAAA,MACF;AAEA,MAAA,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,SAAA,EAAW,OAAO,CAAA;AAC3C,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,OAAO,CAAA;AAC9C,MAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,OAAA,EAAS,IAAI,CAAA;AACjC,MAAA,IAAI,QAAA,KAAa,MAAA,IAAa,WAAA,KAAgB,OAAA,IAAW,eAAe,MAAA,EAAW;AACjF,QAAA,IAAA,CAAK,SAAA,CAAU,KAAK,IAAI,CAAA;AACxB,QAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,GAAA,EAAK,OAAA,EAAS,OAAO,IAAA,EAAM,IAAA,EAAM,UAAU,CAAA;AAC1D,QAAA,YAAA,GAAe,IAAA;AAAA,MACjB,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,gBAAA,CAAiB,SAAS,IAAI,CAAA;AACnC,QAAA,MAAM,UAAA,GAAa1B,UAAAA,CAAU,QAAQ,CAAA,KAAMA,WAAU,IAAI,CAAA;AACzD,QAAA,MAAM,YAAA,GAAA,CAAgB,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,SAAS,MAAA,IAAU,CAAA,IAAK,CAAA,IAChE,oBAAA,CAAqB,UAAU,IAAA,EAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,KAAM,CAAA;AACxE,QAAA,IAAI,cAAc,YAAA,EAAc;AAC9B,UAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,GAAA,EAAK,OAAA,EAAS,aAAA,EAAe,UAAU,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU,CAAA;AACnF,UAAA,IAAI,cAAc,YAAA,GAAe,IAAA;AAAA,QACnC;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,cAAc,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,QAAA,CAAS,KAAK,SAAS,CAAA;AAC/D,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEQ,gBAAA,CAAiB,KAAW,GAAA,EAAiB;AACnD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,SAAA,CAAU,CAAC,SAAA,EAAW,CAAA,KAAM,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,SAAA,EAAW,CAAC,MAAM,GAAG,CAAA;AACrG,IAAA,IAAI,KAAA,IAAS,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,GAAI,GAAA;AAAA,SACnC,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA;AAAA,EAC9B;AAAA,EAEQ,gBAAgB,GAAA,EAAiB;AACvC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,SAAA,CAAU,CAAC,SAAA,EAAW,CAAA,KAAM,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,SAAA,EAAW,CAAC,MAAM,GAAG,CAAA;AACrG,IAAA,IAAI,SAAS,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,EAChD;AAAA,EAEQ,WAAA,CAAY,MAAmB,IAAA,EAAqB;AAC1D,IAAA,MAAM,WAAW,IAAA,CAAK,UAAA;AACtB,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA;AACrC,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAgB;AACjC,IAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,GAAA,EAAK,KAAA,KAAU;AACjC,MAAA,IAAA,CAAK,IAAI,IAAA,CAAK,UAAA,CAAW,OAAO,GAAA,EAAK,KAAK,GAAW,GAAG,CAAA;AAAA,IAC1D,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,SAAA,GAAY,UAAA;AACjB,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAClB,IAAA,IAAA,CAAK,cAAA,EAAA;AAEL,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,OAAA,GAAU,UAAA,CAAW,QAAA,EAAU,IAAI,CAAA;AACzC,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC1B,IAAA,IAAA,CAAK,YAAY,OAA2C,CAAA;AAAA,EAC9D;AAAA,EAEQ,SAAS,IAAA,EAAgC;AAC/C,IAAA,IAAA,CAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,SAAS,MAAA,IAAU,CAAA,MAAO,GAAG,OAAO,IAAA;AAC7D,IAAA,OAAO,CAAC,GAAG,IAAI,CAAA,CAAE,KAAK,CAAC,CAAA,EAAG,CAAA,KAAM,oBAAA,CAAqB,GAAG,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAC,CAAA;AAAA,EACzF;AAAA,EAEQ,YAAY,OAAA,EAAiD;AACnE,IAAA,KAAA,MAAW,QAAA,IAAY,KAAK,SAAA,EAAW;AACrC,MAAA,QAAA,CAAS,OAAiC,CAAA;AAAA,IAC5C;AACA,IAAA,MAAM,KAAK,OAAA,CAAQ,MAAA,KAAW,IAAI,OAAA,CAAQ,CAAC,EAAG,IAAA,GAAO,OAAA;AACrD,IAAA,MAAM,KAAA,GAAQ;AAAA,MACZ,EAAA;AAAA,MACA,OAAA;AAAA,MACA,eAAe,IAAA,CAAK;AAAA,KACtB;AACA,IAAA,KAAA,MAAW,QAAA,IAAY,KAAK,iBAAA,EAAmB;AAC7C,MAAA,QAAA,CAAS,KAAK,CAAA;AAAA,IAChB;AAAA,EACF;AACF;AAEA,SAAS,iBAAiBpC,MAAAA,EAAyC;AACjE,EAAA,MAAM,cAAA,GAAiB,qBAAqBA,MAAK,CAAA;AACjD,EAAA,IAAI,CAAC,cAAA,IAAkB,CAAC,mBAAA,CAAoB,cAAc,GAAG,OAAO,MAAA;AACpE,EAAA,IAAI,cAAA,CAAe,IAAA,CAAK,IAAA,KAAS,eAAA,EAAiB,OAAO,MAAA;AACzD,EAAA,MAAM,WAAA,GAAc,eAAe,IAAA,CAAK,KAAA;AACxC,EAAA,MAAM,MAAA,GAAS,eAAe,IAAA,CAAK,UAAA;AACnC,EAAA,MAAM,aAAa,cAAA,CAAe,OAAA,EAAS,UAAU,CAAA,IAAK,CAAA,IACxDsD,mBAAkB,cAAA,CAAe,MAAM,MACtC,cAAA,CAAe,MAAA,IAAU,EAAC,EAAG,IAAA,CAAK,CAAC,MAAA,KAAWA,kBAAAA,CAAkB,MAAM,CAAC,CAAA;AAC1E,EAAA,MAAM,UAAU,SAAA,GACZ,IAAI,qCAAqC,MAAA,EAAQ,cAAc,IAC/D,cAAA,CAAe,IAAA,EAAM,WAAW,CAAA,GAC9B,IAAI,gCAAgC,cAAc,CAAA,GAClD,IAAI,2BAAA,CAA4B,MAAA,EAAQ,aAAa,cAAc,CAAA;AACzE,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,eAAA,sBAAqB,GAAA,EAAI;AAAA,IACzB,eAAA,sBAAqB,GAAA;AAAI,GAC3B;AACF;AAEA,SAAS,qBAAqBtD,MAAAA,EAAqC;AACjE,EAAA,IAAA,CAAKA,MAAAA,CAAM,OAAA,EAAS,MAAA,IAAU,CAAA,MAAO,GAAG,OAAOA,MAAAA;AAC/C,EAAA,IAAIA,MAAAA,CAAM,KAAK,IAAA,KAAS,eAAA,IAAA,CAAoBA,OAAM,IAAA,EAAM,MAAA,IAAU,CAAA,IAAK,CAAA,EAAG,OAAO,MAAA;AACjF,EAAA,MAAM,KAAA,GAAQA,OAAM,IAAA,CAAK,KAAA;AACzB,EAAA,MAAM,eAAe,IAAI,GAAA,CAAIA,OAAM,IAAA,CAAK,UAAA,CAAW,aAAa,CAAA;AAChE,EAAA,MAAM,UAA2C,EAAC;AAClD,EAAA,KAAA,MAAW,SAAA,IAAaA,MAAAA,CAAM,OAAA,IAAW,EAAC,EAAG;AAC3C,IAAA,MAAMS,OAAAA,GAAS,wBAAA;AAAA,MACb,SAAA;AAAA,MACA,EAAE,YAAA,EAAc,cAAA,EAAgB,KAAA;AAAM,KACxC;AACA,IAAA,MAAM,UAAA,GAAaA,OAAAA,IAAU,sBAAA,CAAuBA,OAAAA,EAAQ,KAAK,CAAA;AACjE,IAAA,IAAI,CAAC,YAAY,OAAO,MAAA;AACxB,IAAA,OAAA,CAAQ,KAAK,UAAU,CAAA;AAAA,EACzB;AACA,EAAA,MAAM,EAAE,OAAA,EAAS,QAAA,EAAU,GAAG,qBAAoB,GAAIT,MAAAA;AACtD,EAAA,OAAO;AAAA,IACL,GAAG,mBAAA;AAAA,IACH,KAAA,EAAO,CAAC,GAAIA,MAAAA,CAAM,SAAS,EAAC,EAAI,GAAG,OAAO;AAAA,GAC5C;AACF;AAEA,SAAS,sBAAA,CACPS,SACA,KAAA,EACsC;AACtC,EAAA,MAAM,GAAA,GAAM,CAAC,MAAA,KAAmB,IAAI,QAAQ,CAAC,KAAA,EAAO,MAAM,CAAC,CAAA;AAC3D,EAAA,MAAM,OAAA,GAAU,CAAC,KAAA,KACf,KAAA,CAAM,IAAA,KAAS,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA,GAAI,IAAI,KAAA,CAAM,MAAM,KAAK,CAAA;AAChE,EAAA,QAAQA,QAAO,IAAA;AAAM,IACnB,KAAK,KAAA;AACH,MAAA,OAAO,IAAI,IAAA,CAAK,IAAA,EAAM,CAAC,GAAA,CAAIA,OAAAA,CAAO,IAAI,CAAA,EAAG,IAAI,KAAA,CAAM,IAAI,CAAC,CAAC,CAAA;AAAA,IAC3D,KAAK,KAAA,EAAO;AACV,MAAA,MAAM,UAAA,GAAa,IAAI,IAAA,CAAKA,OAAAA,CAAO,OAAO,KAAA,GAAQ,IAAA,GAAOA,QAAO,EAAA,EAAI;AAAA,QAClE,OAAA,CAAQA,QAAO,IAAI,CAAA;AAAA,QACnB,OAAA,CAAQA,QAAO,KAAK;AAAA,OACrB,CAAA;AACD,MAAA,OAAOA,OAAAA,CAAO,OAAO,KAAA,GACjB,IAAI,KAAK,KAAA,EAAO,CAAC,UAAU,CAAC,CAAA,GAC5B,UAAA;AAAA,IACN;AAAA,IACA,KAAK,KAAA;AAAA,IACL,KAAK,IAAA,EAAM;AACT,MAAA,MAAM,IAAA,GAAOA,QAAO,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ,sBAAA,CAAuB,GAAA,EAAK,KAAK,CAAC,CAAA;AACxE,MAAA,OAAO,IAAA,CAAK,KAAA,CAAM,CAAC,GAAA,KAAyC,GAAA,KAAQ,MAAS,CAAA,GACzE,IAAI,IAAA,CAAKA,OAAAA,CAAO,IAAA,EAAM,IAAI,CAAA,GAC1B,MAAA;AAAA,IACN;AAAA,IACA,KAAK,KAAA,EAAO;AACV,MAAA,MAAM,GAAA,GAAM,sBAAA,CAAuBA,OAAAA,CAAO,GAAA,EAAK,KAAK,CAAA;AACpD,MAAA,OAAO,MAAM,IAAI,IAAA,CAAK,OAAO,CAAC,GAAG,CAAC,CAAA,GAAgC,MAAA;AAAA,IACpE;AAAA,IACA,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,UAAA,GAAa,IAAI,IAAA,CAAK,QAAA,EAAU,CAAC,IAAIA,OAAAA,CAAO,GAAA,CAAI,IAAI,CAAC,CAAC,CAAA;AAC5D,MAAA,OAAOA,OAAAA,CAAO,UACV,IAAI,IAAA,CAAK,OAAO,CAAC,UAAU,CAAC,CAAA,GAC5B,UAAA;AAAA,IACN;AAAA,IACA,KAAK,IAAA;AACH,MAAA,OAAO,IAAI,IAAA,CAAK,IAAA,EAAM,CAAC,GAAA,CAAIA,QAAO,GAAA,CAAI,IAAI,CAAA,EAAG,IAAI,MAAM,CAAC,GAAGA,QAAO,MAAM,CAAC,CAAC,CAAC,CAAA;AAAA,IAC7E,KAAK,KAAA,EAAO;AACV,MAAA,IAAIA,OAAAA,CAAO,EAAA,KAAO,SAAA,EAAW,OAAO,MAAA;AAGpC,MAAA,IAAIA,OAAAA,CAAO,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,IAAKA,QAAO,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EAAG,OAAO,MAAA;AACrE,MAAA,MAAM,OAAA,GAAUA,QAAO,EAAA,KAAO,UAAA,GAC1B,IAAIA,OAAAA,CAAO,KAAK,CAAA,CAAA,CAAA,GAChBA,OAAAA,CAAO,EAAA,KAAO,YAAA,GACZ,GAAGA,OAAAA,CAAO,KAAK,MACfA,OAAAA,CAAO,EAAA,KAAO,aACZ,CAAA,CAAA,EAAIA,OAAAA,CAAO,KAAK,CAAA,CAAA,GAChBA,OAAAA,CAAO,KAAA;AACf,MAAA,MAAM,aAAa,IAAI,IAAA,CAAKA,OAAAA,CAAO,eAAA,GAAkB,UAAU,MAAA,EAAQ;AAAA,QACrE,GAAA,CAAIA,OAAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AAAA,QACnB,IAAI,MAAM,OAAO;AAAA,OAClB,CAAA;AACD,MAAA,OAAOA,OAAAA,CAAO,UACV,IAAI,IAAA,CAAK,OAAO,CAAC,UAAU,CAAC,CAAA,GAC5B,UAAA;AAAA,IACN;AAAA;AAEJ;AAEA,SAAS,oBAAoBT,MAAAA,EAAyB;AACpD,EAAA,IAAIA,MAAAA,CAAM,IAAA,CAAK,IAAA,KAAS,eAAA,EAAiB,OAAO,KAAA;AAChD,EAAA,IAAA,CAAKA,MAAAA,CAAM,IAAA,EAAM,MAAA,IAAU,CAAA,IAAK,GAAG,OAAO,KAAA;AAC1C,EAAA,IAAIA,MAAAA,CAAM,IAAA,EAAM,IAAA,CAAK,CAACQ,KAAAA,KAASA,KAAAA,CAAK,IAAA,CAAK,IAAA,KAAS,eAAA,IAAmBA,KAAAA,CAAK,IAAA,KAAS,OAAO,GAAG,OAAO,KAAA;AACpG,EAAA,MAAM,aAAaR,MAAAA,CAAM,OAAA,EAAS,UAAU,CAAA,IAAK,CAAA,IAC/CsD,mBAAkBtD,MAAAA,CAAM,MAAM,MAC7BA,MAAAA,CAAM,MAAA,IAAU,EAAC,EAAG,IAAA,CAAK,CAAC,MAAA,KAAWsD,kBAAAA,CAAkB,MAAM,CAAC,CAAA;AACjE,EAAA,IAAI,cAActD,MAAAA,CAAM,IAAA,EAAM,MAAA,IAAU,CAAA,IAAK,GAAG,OAAO,KAAA;AACvD,EAAA,IAAA,CAAKA,MAAAA,CAAM,OAAA,EAAS,MAAA,IAAU,CAAA,IAAK,GAAG,OAAO,KAAA;AAC7C,EAAA,IAAA,CAAKA,MAAAA,CAAM,QAAA,EAAU,MAAA,IAAU,CAAA,IAAK,GAAG,OAAO,KAAA;AAC9C,EAAA,IAAIA,MAAAA,CAAM,QAAA,KAAa,MAAA,EAAW,OAAO,KAAA;AACzC,EAAA,IAAIA,MAAAA,CAAM,YAAA,KAAiB,IAAA,EAAM,OAAO,KAAA;AACxC,EAAA,IAAA,CAAKA,MAAAA,CAAM,KAAA,KAAU,MAAA,IAAaA,MAAAA,CAAM,MAAA,KAAW,MAAA,KAAA,CAAeA,MAAAA,CAAM,OAAA,EAAS,MAAA,IAAU,CAAA,MAAO,CAAA,EAAG,OAAO,KAAA;AAC5G,EAAA,IAAA,CAAKA,MAAAA,CAAM,KAAA,KAAU,MAAA,IAAaA,MAAAA,CAAM,MAAA,KAAW,MAAA,MAAe,SAAA,IAAA,CAAcA,MAAAA,CAAM,IAAA,EAAM,MAAA,IAAU,CAAA,IAAK,CAAA,CAAA,EAAI,OAAO,KAAA;AACtH,EAAA,IAAI,wBAAA,CAAyBA,MAAAA,CAAM,MAAM,CAAA,EAAG,OAAO,KAAA;AACnD,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,yBAAyB,KAAA,EAAyB;AACzD,EAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,UAAU,OAAO,KAAA;AAChD,EAAA,IAAI,KAAA,YAAiB,gBAAA,IAAoB,kBAAA,CAAmB,KAAK,GAAG,OAAO,IAAA;AAC3E,EAAA,IAAI,gBAAA,CAAiB,KAAK,CAAA,EAAG,OAAO,KAAA;AACpC,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,KAAgC,CAAA,CAAE,KAAK,wBAAwB,CAAA;AACtF;AAEO,SAAS,2BAId,MAAA,EAC6C;AAC7C,EAAA,MAAM,OAAA,GAAU,cAAA,CAAe,MAAA,CAAO,KAAK,CAAA;AAC3C,EAAA,MAAM,EAAA,GAAK,MAAA,CAAO,EAAA,IAAM,CAAA,WAAA,EAAc,EAAE,gBAAgB,CAAA,CAAA;AACxD,EAAA,MAAM,UAAA,GAAa,IAAI,mBAAA,CAAoB;AAAA,IACzC,EAAA;AAAA,IACA,KAAA,EAAO,OAAA;AAAA,IACP,GAAI,OAAO,MAAA,GACP,EAAE,QAAQ,MAAA,CAAO,MAAA,KACjB,EAAC;AAAA,IACL,GAAI,OAAO,sBAAA,GACP,EAAE,gBAAgB,MAAA,CAAO,sBAAA,KACzB;AAAC,GACN,CAAA;AAED,EAAA,MAAM,KAAA,GAAkC;AAAA,IACtC,WAAA,EAAa,MAAM,UAAA,CAAW,WAAA,EAAY;AAAA,IAC1C,SAAA,EAAW,CAAC,OAAA,KAAY,UAAA,CAAW,UAAU,OAAO,CAAA;AAAA,IACpD,SAAA,EAAW,MAAM,UAAA,CAAW,SAAA,EAAU;AAAA,IACtC,CAAC,mBAAmB,GAAG;AAAA,MACrB,YAAY,MAAM,UAAA;AAAA,MAClB,eAAA,EAAiB,MAAM,UAAA,CAAW,eAAA,EAAgB;AAAA,MAClD,iBAAiB,UAAA,CAAW,eAAA;AAAA,MAC5B,UAAU,UAAA,CAAW,QAAA;AAAA,MACrB,aAAa,UAAA,CAAW;AAAA;AAC1B,GACF;AAEA,EAAA,OAAO;AAAA,IACL,EAAA;AAAA,IACA,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,OAAA;AAAA,IACA,GAAI,OAAO,MAAA,GAAS,EAAE,QAAQ,MAAA,CAAO,MAAA,KAAW,EAAC;AAAA,IACjD,KAAA;AAAA,IACA,GAAI,OAAO,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAO,GAAI,EAAC;AAAA,IAC/D,GAAI,OAAO,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,EAAU,MAAA,CAAO,QAAA,EAAS,GAAI,EAAC;AAAA,IACrE,MAAA,EAAQ,OAAO,MAAA,IAAU,GAAA;AAAA,IACzB,GAAI,OAAO,SAAA,KAAc,MAAA,GAAY,EAAE,SAAA,EAAW,MAAA,CAAO,SAAA,EAAU,GAAI,EAAC;AAAA,IACxE,GAAI,OAAO,YAAA,KAAiB,MAAA,GAAY,EAAE,YAAA,EAAc,MAAA,CAAO,YAAA,EAAa,GAAI,EAAC;AAAA,IACjF,GAAI,OAAO,sBAAA,KAA2B,MAAA,GAClC,EAAE,sBAAA,EAAwB,MAAA,CAAO,sBAAA,EAAuB,GACxD,EAAC;AAAA,IACL,GAAI,OAAO,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,EAAU,MAAA,CAAO,QAAA,EAAS,GAAI,EAAC;AAAA,IACrE,GAAI,OAAO,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,EAAU,MAAA,CAAO,QAAA,EAAS,GAAI,EAAC;AAAA,IACrE,GAAI,OAAO,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,EAAU,MAAA,CAAO,QAAA,EAAS,GAAI,EAAC;AAAA,IACrE;AAAA,GACF;AACF;AAsBO,SAAS,0BAKd,aAAA,EAKA;AACA,EAAA,MAAM,SACJ,OAAO,aAAA,KAAkB,aACpB,EAAE,KAAA,EAAO,eAAc,GACxB,aAAA;AACN,EAAA,MAAM,OAAA,GAAU,2BAA2B,MAAM,CAAA;AACjD,EAAA,OAAO,IAAI,mBAAA;AAAA,IACT,OAAA;AAAA,IACA,MAAA,CAAO;AAAA,GACT;AAGF;AAEA,SAAS,eACPA,MAAAA,EACS;AACT,EAAA,IAAI,OAAOA,WAAU,UAAA,EAAY;AAC/B,IAAA,OAAO,UAAA,CAAWA,MAAAA,CAAM,IAAI,gBAAA,EAAyC,CAAC,CAAA;AAAA,EACxE;AACA,EAAA,OAAO,WAAWA,MAAK,CAAA;AACzB;AAEA,SAAS4D,aAAY,GAAA,EAA4B;AAC/C,EAAA,IAAI,GAAA,KAAQ,QAAQ,OAAO,GAAA,KAAQ,YAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AAClE,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,OAAO,EAAE,OAAO,GAAA,EAAI;AACtB;AAEA,SAAS,UAAA,CACP,UACA,IAAA,EACkC;AAClC,EAAA,MAAM,UAA4C,EAAC;AAEnD,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,SAAS,CAAA,IAAK,QAAA,CAAS,SAAQ,EAAG;AACjD,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AAClB,MAAA,OAAA,CAAQ,KAAK,EAAE,GAAA,EAAK,OAAO,SAAA,EAAW,IAAA,EAAM,UAAU,CAAA;AAAA,IACxD;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,IAAA,CAAK,SAAQ,EAAG;AACzC,IAAA,MAAM,SAAA,GAAY,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA;AAClC,IAAA,IAAI,cAAc,MAAA,IAAa,CAAC,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA,EAAG;AACjD,MAAA,OAAA,CAAQ,KAAK,EAAE,GAAA,EAAK,KAAA,EAAO,IAAA,EAAM,UAAU,CAAA;AAC3C,MAAA;AAAA,IACF;AACA,IAAA,MAAME,cAAAA,GAAgB,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA;AACtC,IAAA,IAAI1B,UAAAA,CAAU0B,cAAa,CAAA,KAAM1B,UAAAA,CAAU,KAAK,CAAA,EAAG;AACjD,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,GAAA;AAAA,QACA,aAAA,EAAA0B,cAAAA;AAAA,QACA,KAAA;AAAA,QACA,IAAA,EAAM;AAAA,OACP,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS1B,WAAU,KAAA,EAAwB;AACzC,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,MAAA;AAC3B,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,WAAA;AAChC,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAC1D,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,GAAA,CAAIA,UAAS,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AACnE,EAAA,OAAO,IAAI,MAAA,CAAO,OAAA,CAAQ,KAAgC,CAAA,CACvD,KAAK,CAAC,CAAC,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA,CACrC,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,CAAA,EAAG,KAAK,SAAA,CAAU,CAAC,CAAC,CAAA,CAAA,EAAIA,WAAU,CAAC,CAAC,EAAE,CAAA,CACtD,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AACd;AAEA,SAASoC,oBAAmBxE,MAAAA,EAAmC;AAC7D,EAAA,MAAM,GAAA,uBAAU,GAAA,EAAgB;AAChC,EAAA,MAAM,WAAA,GAAc,CAAC,MAAA,KAAuB;AAC1C,IAAA,IAAI,MAAA,CAAO,SAAS,eAAA,EAAiB;AACnC,MAAA,GAAA,CAAI,GAAA,CAAI,OAAO,UAAU,CAAA;AACzB,MAAA;AAAA,IACF;AACA,IAAA,UAAA,CAAW,OAAO,KAAK,CAAA;AAAA,EACzB,CAAA;AACA,EAAA,MAAM,WAAA,GAAc,CAAC,MAAA,KAA0B;AAC7C,IAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,EAAU;AAC3C,IAAA,IAAI,MAAA,YAAkB,gBAAA,IAAoB,kBAAA,CAAmB,MAAM,CAAA,EAAG;AACpE,MAAA,UAAA,CAAW,OAAO,KAAK,CAAA;AACvB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,gBAAA,CAAiB,MAAM,CAAA,EAAG;AAC9B,IAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,CAAO,MAAgB,CAAA,EAAG;AACnD,MAAA,WAAA,CAAY,KAAK,CAAA;AAAA,IACnB;AAAA,EACF,CAAA;AACA,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAqB;AACvC,IAAA,WAAA,CAAY,EAAE,IAAI,CAAA;AAClB,IAAA,KAAA,MAAWQ,SAAQ,CAAA,CAAE,IAAA,IAAQ,EAAC,EAAG,WAAA,CAAYA,MAAK,IAAI,CAAA;AACtD,IAAA,WAAA,CAAY,EAAE,MAAM,CAAA;AAAA,EACtB,CAAA;AAEA,EAAA,UAAA,CAAWR,MAAK,CAAA;AAChB,EAAA,OAAO,CAAC,GAAG,GAAG,CAAA;AAChB;AAEA,SAAS,cAAcA,MAAAA,EAAyB;AAC9C,EAAA,IAAA,CAAKA,MAAAA,CAAM,IAAA,EAAM,MAAA,IAAU,CAAA,IAAK,GAAG,OAAO,IAAA;AAC1C,EAAA,IAAIA,MAAAA,CAAM,KAAK,IAAA,KAAS,UAAA,IAAc,cAAcA,MAAAA,CAAM,IAAA,CAAK,KAAK,CAAA,EAAG,OAAO,IAAA;AAC9E,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,mBAAmB,KAAA,EAA2C;AACrE,EAAA,OACE,KAAA,KAAU,QACV,OAAO,KAAA,KAAU,YAChB,KAAA,CAA6B,IAAA,KAAS,sBACvC,OAAA,IAAW,KAAA;AAEf;AAEA,SAAS,iBAAiB,KAAA,EAAyB;AACjD,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,KAAA;AACxD,EAAA,MAAM,OAAQ,KAAA,CAA6B,IAAA;AAC3C,EAAA,OAAO,SAAS,KAAA,IAAS,IAAA,KAAS,KAAA,IAAS,IAAA,KAAS,UAAU,IAAA,KAAS,KAAA;AACzE;;;ACv4BO,IAAM,UAAA,GAAN,cAAyE,UAAA,CAAiB;AAAA,EAC/F,WAAA,CAAY,EAAA,EAAY,UAAA,EAA6B,IAAA,EAAe,OAAA,EAA6B;AAC/F,IAAA,KAAA,CAAM,EAAA,EAAI,UAAA,EAAY,IAAA,EAAM,OAAO,CAAA;AAAA,EACrC;AACF;;;ACPO,SAASyE,cAAa,KAAA,EAAyB;AACpD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IACtB,KAAA,KAAU,QACV,OAAQ,KAAA,CAAc,gBAAA,KAAqB,UAAA,IAC3C,OAAQ,KAAA,CAAc,kBAAA,KAAuB,UAAA,IAC7C,OAAQ,MAAc,EAAA,KAAO,QAAA;AACjC;AAEO,SAAS,yBAAyB,UAAA,EAA8D;AACrG,EAAA,OAAO,UAAA,CAAW,QAAQ,YAAA,KAAiB,IAAA;AAC7C;AAEO,SAAS,wBAAwB,MAAA,EAAgD;AACtF,EAAA,OAAO;AAAA,IACL,WAAW,MAAA,KAAW,SAAA;AAAA,IACtB,SAAS,MAAA,KAAW,OAAA;AAAA,IACpB,QAAQ,MAAA,KAAW,MAAA;AAAA,IACnB,SAAS,MAAA,KAAW,OAAA;AAAA,IACpB,aAAa,MAAA,KAAW;AAAA,GAC1B;AACF;;;AC9BO,SAAS,cAAA,GAAyB;AACvC,EAAA,MAAM,SAAA,GAAY,OAAO,UAAA,KAAe,WAAA,GACpC,SACC,UAAA,CAAmC,MAAA;AACxC,EAAA,IAAI,aAAa,OAAO,SAAA,CAAU,eAAe,UAAA,EAAY,OAAO,UAAU,UAAA,EAAW;AACzF,EAAA,IAAI,SAAA,IAAa,OAAO,SAAA,CAAU,eAAA,KAAoB,UAAA,EAAY;AAChE,IAAA,MAAM,QAAQ,SAAA,CAAU,eAAA,CAAgB,IAAI,UAAA,CAAW,EAAE,CAAC,CAAA;AAC1D,IAAA,KAAA,CAAM,CAAC,CAAA,GAAK,KAAA,CAAM,CAAC,IAAK,EAAA,GAAQ,EAAA;AAChC,IAAA,KAAA,CAAM,CAAC,CAAA,GAAK,KAAA,CAAM,CAAC,IAAK,EAAA,GAAQ,GAAA;AAChC,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,IAAA,CAAK,KAAA,EAAO,CAAC,IAAA,KAAS,IAAA,CAAK,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA;AAC1E,IAAA,OAAO,GAAG,GAAA,CAAI,KAAA,CAAM,GAAG,CAAC,CAAA,CAAE,KAAK,EAAE,CAAC,IAAI,GAAA,CAAI,KAAA,CAAM,GAAG,CAAC,CAAA,CAAE,KAAK,EAAE,CAAC,IAAI,GAAA,CAAI,KAAA,CAAM,GAAG,CAAC,CAAA,CAAE,KAAK,EAAE,CAAC,IAAI,GAAA,CAAI,KAAA,CAAM,GAAG,EAAE,CAAA,CAAE,KAAK,EAAE,CAAC,IAAI,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAAA;AAAA,EACnJ;AACA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR;AAAA,GACF;AACF;;;ACTO,SAAS,cAAA,CACd,UACA,IAAA,EAC0B;AAC1B,EAAA,OAAO,IAAI,KAAK,gBAAA,EAAkB;AAAA,IAChC,aAAa,QAAQ,CAAA;AAAA,IACrB,aAAa,IAAI;AAAA,GAClB,CAAA;AACH;AAEO,SAAS,UAAA,CACd,UACA,IAAA,EAC0B;AAC1B,EAAA,OAAO,IAAI,KAAK,YAAA,EAAc;AAAA,IAC5B,aAAa,QAAQ,CAAA;AAAA,IACrB,aAAa,IAAI;AAAA,GAClB,CAAA;AACH;AAEO,SAAS,OAAA,CACd,QAAA,EACA,KAAA,EACA,MAAA,EAC0B;AAC1B,EAAA,OAAO,IAAI,KAAK,SAAA,EAAW;AAAA,IACzB,aAAa,QAAQ,CAAA;AAAA,IACrB,aAAa,KAAK,CAAA;AAAA,IAClB,aAAa,MAAM;AAAA,GACpB,CAAA;AACH;AAEO,SAAS,MAAA,CACd,OACA,OAAA,EAC0B;AAC1B,EAAA,OAAO,IAAI,KAAK,QAAA,EAAU;AAAA,IACxB,aAAa,KAAK,CAAA;AAAA,IAClB,aAAa,OAAkB;AAAA,GAChC,CAAA;AACH;AAEO,SAASC,SAAAA,CACd,SACA,KAAA,EAC0B;AAC1B,EAAA,OAAO,IAAI,KAAK,UAAA,EAAY;AAAA,IAC1B,aAAa,OAAkB,CAAA;AAAA,IAC/B,aAAa,KAAK;AAAA,GACnB,CAAA;AACH;;;AC1BO,SAAS,iBAAiB,IAAA,EAAyC;AACxE,EAAA,IAAI,IAAA,CAAK,SAAS,KAAA,EAAO;AACvB,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AACA,EAAA,OAAO,IAAA;AACT;AAGO,SAAS,aAAa,IAAA,EAAgC;AAC3D,EAAA,IAAI,IAAA,CAAK,SAAS,KAAA,EAAO;AACvB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AACA,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,cAAA,CACd,MACA,OAAA,EACM;AACN,EAAA,IAAI,CAAC,IAAA,EAAM;AACX,EAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,EAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,IAAA,KAAA,MAAW,GAAA,IAAO,KAAK,IAAA,EAAM;AAC3B,MAAA,cAAA,CAAe,KAAK,OAAO,CAAA;AAAA,IAC7B;AAAA,EACF;AACF;AAGO,SAAS,oBAAA,CACd,MACA,OAAA,EACU;AACV,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,EAAA,IAAI,IAAA,CAAK,SAAS,KAAA,EAAO;AACvB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AACA,EAAA,IAAI,IAAA,CAAK,SAAS,KAAA,EAAO;AACvB,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAEA,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAC1C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,IAAI,QAAQ,iBAAA,EAAmB;AAC7B,MAAA,OAAO,OAAA,CAAQ,iBAAA,CAAkB,IAAA,CAAK,IAAA,EAAM,KAAK,IAAI,CAAA;AAAA,IACvD;AACA,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,kCAAA,EAAqC,IAAA,CAAK,IAAI,CAAA,sBAAA,EAAyB,MAAA,CAAO,IAAA;AAAA,QAC5E,OAAA,CAAQ;AAAA,OACV,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KACd;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ;AACxC,IAAA,IAAI,GAAA,CAAI,IAAA,KAAS,KAAA,EAAO,OAAO,GAAA,CAAI,IAAA;AACnC,IAAA,IAAI,GAAA,CAAI,IAAA,KAAS,KAAA,EAAO,OAAO,GAAA,CAAI,KAAA;AACnC,IAAA,OAAO,oBAAA,CAAqB,KAAiC,OAAO,CAAA;AAAA,EACtE,CAAC,CAAA;AAED,EAAA,OAAO,OAAA,CAAQ,GAAG,UAAU,CAAA;AAC9B;AAGO,SAAS,uBAAuB,OAAA,EAA2D;AAChG,EAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,MAAA,KAAW,CAAA,SAAU,EAAC;AAE9C,EAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW;AAC7B,IAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,MAAA,CAAO,UAAU,CAAA;AAChD,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,oDAAA,EAAuD,MAAA,CAAO,UAAA,CAAW,IAAI,CAAA;AAAA,OAC/E;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAwB;AAAA,MAC5B,KAAA;AAAA,MACA,SAAA,EAAW,OAAO,cAAA,CAAe,SAAA;AAAA,MACjC,KAAA,EAAO,OAAO,cAAA,CAAe;AAAA,KAC/B;AACA,IAAA,IAAI,YAAA,IAAgB,OAAO,cAAA,EAAgB;AACzC,MAAA,MAAA,CAAO,UAAA,GAAa,OAAO,cAAA,CAAe,UAAA;AAAA,IAC5C;AACA,IAAA,IAAI,QAAA,IAAY,OAAO,cAAA,EAAgB;AACrC,MAAA,MAAA,CAAO,MAAA,GAAS,OAAO,cAAA,CAAe,MAAA;AAAA,IACxC;AACA,IAAA,IAAI,eAAA,IAAmB,OAAO,cAAA,EAAgB;AAC5C,MAAA,MAAA,CAAO,aAAA,GAAgB,OAAO,cAAA,CAAe,aAAA;AAAA,IAC/C;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAC,CAAA;AACH;AAGO,SAAS,yBACd,IAAA,EACyB;AACzB,EAAA,IAAI,CAAC,IAAA,EAAM,OAAO,EAAC;AAEnB,EAAA,MAAM,cAAuC,EAAC;AAE9C,EAAA,SAAS,QAAQ,CAAA,EAA0B;AACzC,IAAA,IAAI,CAAA,CAAE,SAAS,MAAA,EAAQ;AAEvB,IAAA,IAAI,CAAA,CAAE,SAAS,KAAA,EAAO;AACpB,MAAA,KAAA,MAAW,GAAA,IAAO,CAAA,CAAE,IAAA,EAAM,OAAA,CAAQ,GAAG,CAAA;AACrC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAA,CAAE,SAAS,KAAA,EAAO;AACpB,MAAA,oBAAA,CAAqB,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,WAAW,CAAA;AAC3C,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,cAAA,GAAiB;AAAA,MACrB,IAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,KAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAI,cAAA,CAAe,QAAA,CAAS,CAAA,CAAE,IAAI,CAAA,EAAG;AACnC,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,2CAAA,EAA8C,EAAE,IAAI,CAAA,kFAAA;AAAA,OACtD;AAAA,IACF;AAEA,IAAA,cAAA,CAAe,CAAA,EAAG,aAAa,EAAE,CAAA;AAAA,EACnC;AAEA,EAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,EAAA,OAAO,WAAA;AACT;AAGO,SAAS,uBACd,OAAA,EAQmF;AACnF,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,EAAE,OAAA,EAAS,EAAC,EAAG,KAAA,EAAO,EAAC,EAAE;AAAA,EAClC;AACA,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,OAAA,EAAS,wBAAA,CAAyB,OAAA,CAAQ,KAAK,CAAA;AAAA,IAC/C,KAAA,EAAO,sBAAA,CAAuB,OAAA,CAAQ,OAAO;AAAA,GAC/C;AACA,EAAA,IAAI,OAAA,CAAQ,UAAU,MAAA,EAAW;AAC/B,IAAA,MAAA,CAAO,QAAQ,OAAA,CAAQ,KAAA;AAAA,EACzB;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,oBAAA,CACP,MACA,WAAA,EACM;AACN,EAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,IAAA,KAAS,MAAA,EAAQ;AACjC,IAAA,MAAM,IAAI,MAAM,qFAAqF,CAAA;AAAA,EACvG;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,QAAA,EAAU,aAAa,CAAA;AAC7C,EAAA,IAAI,YAAA,CAAa,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG;AACpC,IAAA,aAAA,CAAc,IAAA,EAAM,aAAa,MAAM,CAAA;AACvC,IAAA;AAAA,EACF;AAEA,EAAA,MAAMC,iBAAgB,CAAC,IAAA,EAAM,MAAM,KAAA,EAAO,IAAA,EAAM,OAAO,IAAI,CAAA;AAC3D,EAAA,IAAIA,cAAAA,CAAc,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG;AACrC,IAAA,wBAAA,CAAyB,IAAA,EAAM,aAAa,MAAM,CAAA;AAClD,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR,CAAA,+CAAA,EAAkD,KAAK,IAAI,CAAA,2GAAA;AAAA,GAC7D;AACF;AAEA,SAAS,cAAA,CACP,IAAA,EACA,WAAA,EACA,cAAA,EACM;AACN,EAAA,MAAM,YAAA,GAAe,CAAC,QAAA,EAAU,aAAa,CAAA;AAC7C,EAAA,IAAI,YAAA,CAAa,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG;AACpC,IAAA,aAAA,CAAc,IAAA,EAAM,aAAa,cAAc,CAAA;AAC/C,IAAA;AAAA,EACF;AAEA,EAAA,MAAMA,iBAAgB,CAAC,IAAA,EAAM,MAAM,KAAA,EAAO,IAAA,EAAM,OAAO,IAAI,CAAA;AAC3D,EAAA,IAAIA,cAAAA,CAAc,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG;AACrC,IAAA,wBAAA,CAAyB,IAAA,EAAM,aAAa,cAAc,CAAA;AAC1D,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wDAAA,EAA2D,IAAA,CAAK,IAAI,CAAA,CAAA,CAAG,CAAA;AACzF;AAEA,SAAS,aAAA,CACP,IAAA,EACA,WAAA,EACA,cAAA,EACM;AACN,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AAC5B,EAAA,MAAM,KAAA,GAAQ,QAAA,EAAU,IAAA,KAAS,KAAA,GAAQ,SAAS,IAAA,GAAO,IAAA;AACzD,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,yDAAA,EAA4D,KAAK,IAAI,CAAA,WAAA;AAAA,KACvE;AAAA,EACF;AACA,EAAA,WAAA,CAAY,IAAA,CAAK,EAAE,KAAA,EAAO,QAAA,EAAU,CAAA,EAAG,cAAc,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,CAAA,EAAI,CAAA;AACvE;AAEA,SAAS,wBAAA,CACP,IAAA,EACA,WAAA,EACA,cAAA,EACM;AACN,EAAA,MAAM,CAAC,OAAA,EAAS,QAAQ,CAAA,GAAI,IAAA,CAAK,IAAA;AACjC,EAAA,MAAM,KAAA,GAAQ,OAAA,EAAS,IAAA,KAAS,KAAA,GAAQ,QAAQ,IAAA,GAAO,IAAA;AACvD,EAAA,MAAM,QAAA,GAAW,QAAA,EAAU,IAAA,KAAS,KAAA,IAAS,SAAS,KAAA,KAAU,MAAA;AAChE,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,QAAA,EAAU;AACvB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,gGAAA,EAAmG,cAAc,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,WAAA;AAAA,KAC/H;AAAA,EACF;AACA,EAAA,WAAA,CAAY,IAAA,CAAK;AAAA,IACf,KAAA;AAAA,IACA,QAAA,EAAU,CAAA,EAAG,cAAc,CAAA,EAAG,KAAK,IAAI,CAAA,CAAA;AAAA,IACvC,OAAO,QAAA,CAAS;AAAA,GACjB,CAAA;AACH;;;AChKO,IAAM,SAAA,GAAN,MAAM,UAAA,CAA4C;AAAA,EAC9C,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EAET,WAAA,CACE,IAAA,EACA,KAAA,EACA,IAAA,EACA,YAA8B,IAAA,EAC9B,SAAA,GAAsC,IAAA,EACtC,KAAA,GAA8B,EAAC,EAC/B,MAAA,GAAwB,IAAA,EACxB,UAAU,CAAA,EACV;AACA,IAAA,MAAM9E,SAAAA,GAAqB,KAAK,IAAA,IAAQ,OAAA;AACxC,IAAA,IACEA,cAAa,OAAA,IACbA,SAAAA,KAAa,UACbA,SAAAA,KAAa,OAAA,IACbA,cAAa,MAAA,EACb;AACA,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,CAAA,mBAAA,EAAsB,MAAA,CAAOA,SAAQ,CAAC,CAAA,qDAAA;AAAA,OACxC;AAAA,IACF;AACA,IAAA,IAAI,CAAC,KAAK,UAAA,CAAW,MAAA,CAAO,cAAc,GAAA,CAAI,IAAA,CAAK,EAAA,CAAG,IAAI,CAAA,EAAG;AAC3D,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,CAAA,UAAA,EAAa,KAAK,EAAA,CAAG,IAAI,mCAAmC,IAAA,CAAK,UAAA,CAAW,OAAO,IAAI,CAAA,CAAA;AAAA,OACzF;AAAA,IACF;AACA,IAAA,IAAI,CAAC,MAAM,MAAA,CAAO,aAAA,CAAc,IAAI,IAAA,CAAK,EAAA,CAAG,KAAK,CAAA,EAAG;AAClD,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,aAAa,IAAA,CAAK,EAAA,CAAG,KAAK,CAAA,iCAAA,EAAoC,KAAA,CAAM,OAAO,IAAI,CAAA,CAAA;AAAA,OACjF;AAAA,IACF;AACA,IAAA,IAAI,CAAC,IAAA,CAAK,EAAA,IAAM,IAAA,CAAK,EAAA,CAAG,WAAW,CAAA,EAAG;AACpC,MAAA,MAAM,IAAI,gBAAgB,CAAA,8CAAA,CAAgD,CAAA;AAAA,IAC5E;AACA,IAAA,IAAI,KAAK,UAAA,CAAW,MAAA,CAAO,cAAc,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,EAAG;AACrD,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,CAAA,qBAAA,EAAwB,KAAK,EAAE,CAAA,8CAAA;AAAA,OACjC;AAAA,IACF;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,SAAA,EAAuC;AAC3C,IAAA,MAAM,IAAA,GAAkB,IAAA,CAAK,SAAA,GACzB,CAAC,GAAA,KAAQ,IAAA,CAAK,SAAA,CAAW,GAAG,CAAA,IAAK,SAAA,CAAU,GAAG,CAAA,GAC9C,SAAA;AACJ,IAAA,OAAO,IAAI,UAAA;AAAA,MACT,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK,KAAA;AAAA,MACL,IAAA,CAAK,IAAA;AAAA,MACL,IAAA;AAAA,MACA,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,KAAA;AAAA,MACL,IAAA,CAAK,MAAA;AAAA,MACL,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,OAAA,EAA6C;AAClD,IAAA,KAAA,MAAW,CAAA,IAAK,OAAA,EAAS,IAAA,CAAK,gBAAA,CAAiB,CAAC,CAAA;AAChD,IAAA,OAAO,IAAI,UAAA;AAAA,MACT,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK,KAAA;AAAA,MACL,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,CAAC,GAAG,OAAO,CAAA;AAAA,MACX,IAAA,CAAK,KAAA;AAAA,MACL,IAAA,CAAK,MAAA;AAAA,MACL,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA,EAEA,OAAA,CAAQ,MAAA,EAAgB,GAAA,GAAe,KAAA,EAAwB;AAC7D,IAAA,IAAA,CAAK,iBAAiB,MAAM,CAAA;AAC5B,IAAA,OAAO,IAAI,UAAA;AAAA,MACT,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK,KAAA;AAAA,MACL,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,CAAC,GAAG,IAAA,CAAK,OAAO,EAAE,MAAA,EAAQ,KAAK,CAAA;AAAA,MAC/B,IAAA,CAAK,MAAA;AAAA,MACL,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA,EAEA,MAAM,CAAA,EAA4B;AAChC,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,CAAC,CAAA,IAAK,IAAI,CAAA,EAAG;AACjC,MAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,0CAAA,EAA6C,CAAC,CAAA,CAAE,CAAA;AAAA,IAC5E;AACA,IAAA,OAAO,IAAI,UAAA;AAAA,MACT,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK,KAAA;AAAA,MACL,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,KAAA;AAAA,MACL,CAAA;AAAA,MACA,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA,EAEA,OAAO,CAAA,EAA4B;AACjC,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,CAAC,CAAA,IAAK,IAAI,CAAA,EAAG;AACjC,MAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,2CAAA,EAA8C,CAAC,CAAA,CAAE,CAAA;AAAA,IAC7E;AACA,IAAA,OAAO,IAAI,UAAA;AAAA,MACT,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK,KAAA;AAAA,MACL,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,KAAA;AAAA,MACL,IAAA,CAAK,MAAA;AAAA,MACL;AAAA,KACF;AAAA,EACF;AAAA,EAEQ,iBAAiB,IAAA,EAAoB;AAC3C,IAAA,MAAM,EAAA,GAAK,KAAK,IAAA,CAAK,EAAA;AACrB,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,EAAA,GAAK,GAAG,CAAA,EAAG;AAC7B,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,EAAA,CAAG,SAAS,CAAC,CAAA;AACpC,MAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,OAAO,aAAA,CAAc,GAAA,CAAI,GAAG,CAAA,EAAG;AAC7C,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,CAAA,sBAAA,EAAyB,GAAG,CAAA,gBAAA,EAAmB,IAAI,CAAA,CAAA;AAAA,SACrD;AAAA,MACF;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAC,KAAK,IAAA,CAAK,UAAA,CAAW,OAAO,aAAA,CAAc,GAAA,CAAI,IAAI,CAAA,EAAG;AACxD,MAAA,MAAM,IAAI,eAAA;AAAA,QACR,CAAA,gBAAA,EAAmB,IAAI,CAAA,wCAAA,EAAsC,EAAE,CAAA,OAAA;AAAA,OACjE;AAAA,IACF;AAAA,EACF;AACF;AAUO,IAAM,eAAN,MAAqD;AAAA,EAK1D,YAAqB,IAAA,EAAuB;AAAvB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAwB;AAAA,EAAxB,IAAA;AAAA,EAJb,MAAA,GAA2C,IAAA;AAAA,EAC3C,iBAAA,GAAoB,EAAA;AAAA,EACpB,kBAAA,GAAqB,EAAA;AAAA,EAI7B,OAAA,GAAgB;AAAA,EAEhB;AAAA,EAEA,QAAA,GAAsC;AACpC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,aAAA;AACxC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,aAAA;AAC/B,IAAA,IACE,IAAA,CAAK,WAAW,IAAA,IAChB,IAAA,CAAK,sBAAsB,KAAA,IAC3B,IAAA,CAAK,uBAAuB,MAAA,EAC5B;AACA,MAAA,OAAO,IAAA,CAAK,MAAA;AAAA,IACd;AACA,IAAA,MAAM,IAAA,GAAO,KAAK,SAAA,EAAU;AAC5B,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,IAAA,CAAK,iBAAA,GAAoB,KAAA;AACzB,IAAA,IAAA,CAAK,kBAAA,GAAqB,MAAA;AAC1B,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,UAAU,QAAA,EAAiE;AACzE,IAAA,QAAA,CAAS,IAAA,CAAK,UAAU,CAAA;AACxB,IAAA,MAAM,MAAA,GAAS,CAAC,CAAA,KAAmB;AACjC,MAAA,IAAI,KAAK,WAAA,CAAY,CAAC,GAAG,QAAA,CAAS,IAAA,CAAK,UAAU,CAAA;AAAA,IACnD,CAAA;AACA,IAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAAmB;AAClC,MAAA,IAAI,KAAK,WAAA,CAAY,CAAC,GAAG,QAAA,CAAS,IAAA,CAAK,UAAU,CAAA;AAAA,IACnD,CAAA;AACA,IAAA,MAAM,SAAS,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,UAAU,MAAM,CAAA;AACzD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,UAAU,OAAO,CAAA;AAChD,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,EAAO;AACP,MAAA,MAAA,EAAO;AAAA,IACT,CAAA;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,YAAY,KAAA,EAA6B;AAC/C,IAAA,IAAI,KAAA,CAAM,OAAA,KAAY,KAAA,EAAO,OAAO,IAAA;AACpC,IAAA,IAAI,KAAA,CAAM,EAAA,KAAO,QAAA,EAAU,OAAO,IAAA;AAClC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,2BAAA,CAA4B,KAAK,CAAA;AACvD,IAAA,KAAA,MAAW,CAAA,IAAK,MAAM,OAAA,EAAS,IAAI,SAAS,GAAA,CAAI,CAAC,GAAG,OAAO,IAAA;AAC3D,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,4BAA4B,MAAA,EAA0C;AAC5E,IAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAE9B,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,UAAA;AAChC,IAAA,IAAI,QAAA,EAAU,cAAA,CAAe,QAAA,EAAU,KAAK,CAAA;AAC5C,IAAA,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,GAAG,IAAI,CAAA;AAEhC,IAAA,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,GAAG,KAAK,CAAA;AAEjC,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,EAAA;AAC1B,IAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAAc;AAC7B,MAAA,IAAI,CAAA,CAAE,UAAA,CAAW,EAAA,GAAK,GAAG,CAAA,EAAG,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,KAAA,CAAM,EAAA,CAAG,MAAA,GAAS,CAAC,CAAC,CAAA;AAAA,WACvD,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,IAClB,CAAA;AACA,IAAA,IAAI,IAAA,CAAK,KAAK,SAAA,EAAW,KAAA,MAAW,KAAK,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW,OAAA,CAAQ,CAAC,CAAA;AACvE,IAAA,KAAA,MAAW,KAAK,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO,OAAA,CAAQ,EAAE,MAAM,CAAA;AACjD,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,SAAA,GAAuC;AAC7C,IAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,IAAA,MAAM,IAAA,GAAO,KAAK,IAAA,CAAK,UAAA;AACvB,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,IAAA,MAAM,EAAA,GAAK,KAAK,IAAA,CAAK,EAAA;AACrB,IAAA,MAAM,EAAA,GAAK,KAAK,IAAA,CAAK,EAAA;AAGrB,IAAA,MAAM,YAAA,GAAe,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAGvC,IAAA,MAAM,QAAA,GAAW,cAAA,CAAe,KAAA,EAAO,EAAA,CAAG,KAAK,CAAA;AAG/C,IAAA,MAAM,IAAA,GAAiB,IAAA,CAAK,IAAA,CAAK,IAAA,IAAQ,OAAA;AACzC,IAAA,MAAM,iBAAA,GAAoB,IAAA,KAAS,MAAA,IAAU,IAAA,KAAS,MAAA;AACtD,IAAA,MAAM,kBAAA,GAAqB,IAAA,KAAS,OAAA,IAAW,IAAA,KAAS,MAAA;AACxD,IAAA,MAAM,cAAA,GAAiB,KAAK,iBAAA,EAAkB;AAC9C,IAAA,MAAM,eAAA,GAAkB,KAAK,kBAAA,EAAmB;AAChD,IAAA,MAAM,SAAqB,EAAC;AAK5B,IAAA,MAAM,YAAA,GAAmC,kBAAA,mBACrC,IAAI,GAAA,EAAY,GAChB,IAAA;AAEJ,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,YAAA,CAAa,QAAQ,CAAA,EAAA,EAAK;AAC5C,MAAA,MAAM,EAAA,GAAK,aAAa,CAAC,CAAA;AACzB,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,iBAAA,CAAkB,EAAA,CAAG,MAAM,EAAE,CAAA;AAC9C,MAAA,MAAMkB,QAAAA,GACJ,GAAA,KAAQ,IAAA,IAAQ,GAAA,KAAQ,MAAA,GACpB,SACA,QAAA,CAAS,GAAA,CAAI,YAAA,CAAa,GAAG,CAAC,CAAA;AAEpC,MAAA,IAAIA,QAAAA,IAAWA,QAAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AACjC,QAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,IAAA,EAAM,EAAA,EAAI,cAAc,CAAA;AAChD,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAIA,QAAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,UAAA,MAAM,EAAA,GAAKA,SAAQ,CAAC,CAAA;AACpB,UAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,KAAA,EAAO,EAAA,EAAI,eAAe,CAAA;AACnD,UAAA,MAAA,CAAO,IAAA,CAAK,EAAE,GAAG,OAAA,EAAS,CAAC,EAAE,GAAG,UAAU,CAAA;AAC1C,UAAA,IAAI,YAAA,EAAc,YAAA,CAAa,GAAA,CAAI,EAAE,CAAA;AAAA,QACvC;AAAA,MACF,WAAW,iBAAA,EAAmB;AAI5B,QAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,IAAA,EAAM,EAAA,EAAI,cAAc,CAAA;AAChD,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,GAAG,OAAA,EAAS,CAAC,EAAE,GAAG,MAAM,CAAA;AAAA,MACxC;AAAA,IACF;AAGA,IAAA,IAAI,kBAAA,EAAoB;AACtB,MAAA,KAAA,MAAW,EAAA,IAAM,KAAA,CAAM,qBAAA,EAAsB,EAAG;AAC9C,QAAA,IAAI,YAAA,CAAc,GAAA,CAAI,EAAE,CAAA,EAAG;AAC3B,QAAU,KAAA,CAAM,iBAAA,CAAkB,EAAA,CAAG,OAAO,EAAE;AAI9C,QAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,KAAA,EAAO,EAAA,EAAI,eAAe,CAAA;AAMnD,QAAA,MAAA,CAAO,KAAK,EAAE,CAAC,EAAE,GAAG,UAAU,CAAA;AACzB,MACP;AAAA,IACF;AAGA,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,SAAA,GACrB,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,IAAA,CAAK,SAAA,CAAW,CAAC,CAAC,CAAA,GACvC,MAAA;AAGJ,IAAA,MAAM,MAAA,GAAS,UAAA,CAAW,WAAA,EAAa,IAAA,CAAK,KAAK,CAAA;AAGjD,IAAA,MAAM,SAAS,WAAA,CAAY,MAAA,EAAQ,IAAA,CAAK,OAAA,EAAS,KAAK,MAAM,CAAA;AAG5D,IAAA,MAAM,YAAY,IAAA,CAAK,SAAA,GACnB,aAAa,MAAA,EAAQ,IAAA,CAAK,SAAS,CAAA,GACnC,MAAA;AAEJ,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,SAAA;AAAA,MACN,SAAS,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,aAAA,EAAe,MAAM,aAAa;AAAA,KAC3D;AAAA,EACF;AAAA,EAEQ,iBAAA,GAAuC;AAC7C,IAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,IAAA,MAAM,EAAA,GAAK,KAAK,IAAA,CAAK,EAAA;AACrB,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,WAAA,EAAY;AAC7C,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,EAAW,OAAO,CAAC,GAAG,GAAG,CAAA;AACnC,IAAA,IAAI,IAAA,CAAK,SAAA,EAAW,OAAO,CAAC,GAAG,GAAG,CAAA;AAClC,IAAA,MAAM,YAAY,IAAA,CAAK,SAAA;AACvB,IAAA,MAAM,MAAA,uBAAa,GAAA,EAAY;AAC/B,IAAA,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,EAAA,CAAG,IAAI,CAAA;AAC5B,IAAA,KAAA,MAAW,KAAK,SAAA,EAAW;AACzB,MAAA,IAAI,CAAC,EAAE,UAAA,CAAW,EAAA,GAAK,GAAG,CAAA,EAAG,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,IAC3C;AACA,IAAA,KAAA,MAAW,CAAA,IAAK,KAAK,KAAA,EAAO;AAC1B,MAAA,IAAI,CAAC,CAAA,CAAE,MAAA,CAAO,UAAA,CAAW,EAAA,GAAK,GAAG,CAAA,EAAG,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,MAAM,CAAA;AAAA,IACzD;AACA,IAAA,OAAO,CAAC,GAAG,MAAM,CAAA;AAAA,EACnB;AAAA,EAEQ,kBAAA,GAAwC;AAC9C,IAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,IAAA,MAAM,EAAA,GAAK,KAAK,IAAA,CAAK,EAAA;AACrB,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,WAAA,EAAY;AACnC,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,EAAW,OAAO,CAAC,GAAG,GAAG,CAAA;AACnC,IAAA,IAAI,IAAA,CAAK,SAAA,EAAW,OAAO,CAAC,GAAG,GAAG,CAAA;AAClC,IAAA,MAAM,YAAY,IAAA,CAAK,SAAA;AACvB,IAAA,MAAM,MAAA,uBAAa,GAAA,EAAY;AAC/B,IAAA,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,EAAA,CAAG,KAAK,CAAA;AAC7B,IAAA,KAAA,MAAW,KAAK,SAAA,EAAW;AACzB,MAAA,IAAI,CAAA,CAAE,UAAA,CAAW,EAAA,GAAK,GAAG,CAAA,EAAG,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,KAAA,CAAM,EAAA,CAAG,MAAA,GAAS,CAAC,CAAC,CAAA;AAAA,IAC/D;AACA,IAAA,KAAA,MAAW,CAAA,IAAK,KAAK,KAAA,EAAO;AAC1B,MAAA,IAAI,CAAA,CAAE,MAAA,CAAO,UAAA,CAAW,EAAA,GAAK,GAAG,CAAA,EAAG,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,MAAA,CAAO,KAAA,CAAM,EAAA,CAAG,MAAA,GAAS,CAAC,CAAC,CAAA;AAAA,IAC7E;AACA,IAAA,OAAO,CAAC,GAAG,MAAM,CAAA;AAAA,EACnB;AACF;AAUA,SAAS,SAAS,IAAA,EAA0B;AAC1C,EAAA,MAAM,IAAI,IAAA,CAAK,UAAA;AACf,EAAA,MAAM,aAAa,IAAA,CAAK,UAAA;AACxB,EAAA,MAAM,OAAO,IAAA,CAAK,SAAA;AAElB,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAM,UAAA,uBAAiB,GAAA,EAGrB;AACF,IAAA,KAAA,MAAW,EAAA,IAAM,EAAE,oBAAA,EAAqB,aAAc,GAAA,CAAI,EAAA,CAAG,MAAM,EAAE,CAAA;AACrE,IAAA,MAAM,QAAA,GAAW,aAAA,CAAc,UAAA,EAAY,UAAU,CAAA;AACrD,IAAA,QAAA,GAAW,YAAA,CAAa,CAAA,CAAE,qBAAA,EAAsB,EAAG,SAAS,IAAI,CAAA;AAAA,EAClE,CAAA,MAAO;AACL,IAAA,QAAA,GAAW,YAAA,CAAa,CAAA,CAAE,qBAAA,EAAsB,EAAG,MAAM,IAAI,CAAA;AAAA,EAC/D;AACA,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,MAAM,OAAiB,EAAC;AACxB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AACxC,MAAA,MAAM,GAAA,GAAM,SAAS,CAAC,CAAA;AACtB,MAAA,MAAM,MAAgB,EAAC;AACvB,MAAA,KAAA,MAAW,IAAA,IAAQ,CAAA,CAAE,WAAA,EAAY,EAAG;AAClC,QAAA,GAAA,CAAI,IAAI,CAAA,GAAI,CAAA,CAAE,iBAAA,CAAkB,MAAM,GAAG,CAAA;AAAA,MAC3C;AACA,MAAA,IAAI,IAAA,CAAK,GAAG,CAAA,EAAG,IAAA,CAAK,KAAK,GAAG,CAAA;AAAA,IAC9B;AACA,IAAA,QAAA,GAAW,IAAI,YAAY,IAAI,CAAA;AAAA,EACjC;AACA,EAAA,OAAO,QAAA;AACT;AAQA,SAAS,cAAA,CACP,YACA,MAAA,EACwB;AACxB,EAAA,MAAM,GAAA,uBAAU,GAAA,EAAuB;AACvC,EAAA,KAAA,MAAW,GAAA,IAAO,UAAA,CAAW,qBAAA,EAAsB,EAAG;AACpD,IAAA,MAAM,CAAA,GAAI,UAAA,CAAW,iBAAA,CAAkB,MAAA,EAAQ,GAAG,CAAA;AAClD,IAAA,IAAI,CAAA,KAAM,IAAA,IAAQ,CAAA,KAAM,MAAA,EAAW;AACnC,IAAA,MAAM,EAAA,GAAK,aAAa,CAAC,CAAA;AACzB,IAAA,MAAM,MAAA,GAAS,GAAA,CAAI,GAAA,CAAI,EAAE,CAAA;AACzB,IAAA,IAAI,MAAA,EAAQ,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA;AAAA,SACtB,GAAA,CAAI,GAAA,CAAI,EAAA,EAAI,CAAC,GAAG,CAAC,CAAA;AAAA,EACxB;AACA,EAAA,OAAO,GAAA;AACT;AAaA,SAAS,aAAa,CAAA,EAAqB;AACzC,EAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AAGzB,IAAA,IAAI,CAAA,IAAK,OAAO,MAAA,CAAO,gBAAgB,KAAK,CAAA,IAAK,MAAA,CAAO,MAAA,CAAO,gBAAgB,CAAA,EAAG;AAChF,MAAA,OAAO,OAAO,CAAC,CAAA;AAAA,IACjB;AAAA,EACF;AACA,EAAA,OAAO,CAAA;AACT;AAEA,SAAS,OAAA,CACP,UAAA,EACA,GAAA,EACA,OAAA,EACU;AACV,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,IAAA,MAAM,IAAA,GAAO,QAAQ,CAAC,CAAA;AACtB,IAAA,GAAA,CAAI,IAAI,CAAA,GAAI,UAAA,CAAW,iBAAA,CAAkB,MAAM,GAAG,CAAA;AAAA,EACpD;AACA,EAAA,OAAO,GAAA;AACT;AAMA,SAAS,UAAA,CACP,MACA,KAAA,EACY;AACZ,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAC/B,EAAA,MAAM,MAAA,GAAS,KAAK,KAAA,EAAM;AAC1B,EAAA,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACpB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,MAAA,MAAM,CAAA,GAAI,MAAM,CAAC,CAAA;AACjB,MAAA,MAAM,EAAA,GAAK,WAAA,CAAY,CAAA,EAAG,CAAA,CAAE,MAAM,CAAA;AAClC,MAAA,MAAM,EAAA,GAAK,WAAA,CAAY,CAAA,EAAG,CAAA,CAAE,MAAM,CAAA;AAClC,MAAA,MAAM,CAAA,GAAI,iBAAA,CAAkB,EAAA,EAAI,EAAE,CAAA;AAClC,MAAA,IAAI,MAAM,CAAA,EAAG,OAAO,EAAE,GAAA,KAAQ,MAAA,GAAS,CAAC,CAAA,GAAI,CAAA;AAAA,IAC9C;AACA,IAAA,OAAO,CAAA;AAAA,EACT,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,WAAA,CACP,IAAA,EACA,MAAA,EACA,KAAA,EACY;AACZ,EAAA,IAAI,WAAW,CAAA,IAAK,KAAA,KAAU,IAAA,EAAM,OAAO,KAAK,KAAA,EAAM;AACtD,EAAA,MAAM,GAAA,GAAM,KAAA,KAAU,IAAA,GAAO,IAAA,CAAK,MAAA,GAAS,KAAK,GAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,MAAA,GAAS,KAAK,CAAA;AAC/E,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,GAAG,CAAA;AAC/B;AAEA,SAAS,YAAA,CACP,MACA,KAAA,EACY;AACZ,EAAA,MAAM,GAAA,GAAkB,IAAI,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA;AAC7C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,MAAM,CAAA,GAAI,KAAK,CAAC,CAAA;AAChB,IAAA,MAAM,YAAsB,EAAC;AAC7B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,MAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,MAAA,SAAA,CAAU,IAAI,CAAA,GAAI,WAAA,CAAY,CAAA,EAAG,IAAI,CAAA;AAAA,IACvC;AACA,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,SAAA;AAAA,EACX;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,WAAA,CAAY,KAAe,IAAA,EAAuB;AACzD,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAC5B,EAAA,IAAI,GAAA,GAAM,CAAA,EAAG,OAAQ,GAAA,CAAgC,IAAI,CAAA;AACzD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA;AAC9B,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAA,GAAM,CAAC,CAAA;AAC/B,EAAA,MAAM,KAAA,GAAS,IAAgC,IAAI,CAAA;AACnD,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,MAAA;AAClD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,MAAA;AACtC,EAAA,OAAQ,MAAkC,IAAI,CAAA;AAChD;AAMA,SAAS,iBAAA,CAAkB,GAAY,CAAA,EAAoB;AACzD,EAAA,IAAI,CAAA,KAAM,GAAG,OAAO,CAAA;AACpB,EAAA,IAAI,CAAA,KAAM,IAAA,IAAQ,CAAA,KAAM,MAAA,EAAW,OAAO,CAAA;AAC1C,EAAA,IAAI,CAAA,KAAM,IAAA,IAAQ,CAAA,KAAM,MAAA,EAAW,OAAO,EAAA;AAC1C,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,MAAM,QAAA,EAAU;AAClD,IAAA,IAAI,MAAA,CAAO,MAAM,CAAC,CAAA,SAAU,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,GAAI,CAAA,GAAI,CAAA;AAClD,IAAA,IAAI,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,EAAG,OAAO,EAAA;AAC5B,IAAA,OAAO,CAAA,GAAI,CAAA;AAAA,EACb;AACA,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,MAAM,QAAA,EAAU;AAClD,IAAA,OAAO,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,CAAA,GAAI,IAAI,CAAA,GAAI,CAAA;AAAA,EAClC;AACA,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,MAAM,QAAA,EAAU;AAGlD,IAAA,MAAM,KAAK,OAAO,CAAA,KAAM,QAAA,GAAW,MAAA,CAAO,CAAC,CAAA,GAAK,CAAA;AAChD,IAAA,MAAM,KAAK,OAAO,CAAA,KAAM,QAAA,GAAW,MAAA,CAAO,CAAC,CAAA,GAAK,CAAA;AAChD,IAAA,OAAO,EAAA,GAAK,EAAA;AAAA,EACd;AACA,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,MAAM,QAAA,EAAU;AAClD,IAAA,OAAO,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,CAAA,GAAI,IAAI,CAAA,GAAI,CAAA;AAAA,EAClC;AACA,EAAA,IAAI,OAAO,CAAA,KAAM,SAAA,IAAa,OAAO,MAAM,SAAA,EAAW;AACpD,IAAA,OAAO,CAAA,KAAM,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,EAAA;AAAA,EAC/B;AAEA,EAAA,MAAM,EAAA,GAAK,OAAO,CAAC,CAAA;AACnB,EAAA,MAAM,EAAA,GAAK,OAAO,CAAC,CAAA;AACnB,EAAA,OAAO,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,KAAK,CAAA,GAAI,CAAA;AACtC;AAYO,SAAS,IAAA,CACd,IAAA,EACA,KAAA,EACA,IAAA,EAC2C;AAC3C,EAAA,OAAO,IAAI,SAAA,CAAU,IAAA,EAAM,KAAA,EAAO,IAAI,CAAA;AAGxC;AAGO,SAAS,QACd,IAAA,EACoB;AACpB,EAAA,OAAO,IAAI,aAAmB,IAAI,CAAA;AACpC;AAIA,mBAAA,CAAoB,CAAC,IAAA,EAAM,KAAA,EAAO,IAAA,KAAS;AAEzC,EAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACrC,IAAA,MAAM,IAAI,gBAAgB,CAAA,2BAAA,CAA6B,CAAA;AAAA,EACzD;AACA,EAAA,OAAO,IAAI,SAAA,CAAU,IAAA,EAAM,KAAA,EAAO,IAAgB,CAAA;AACpD,CAAC,CAAA;;;ACnsBM,IAAM,cAAA,GAAiB;AACvB,IAAM,uBAAA,GAA0B;AAGhC,IAAM,cAAA,GAAiB;AAEvB,SAAS,cAAc,MAAA,EAAwB;AACpD,EAAA,OAAQ,MAAA,IAAU,cAAA,GAAiB,CAAA,CAAA,GAAM,EAAmB;AAC9D;;;ACiCO,SAAS,cAAA,CACd,MAAA,EACA,OAAA,GAA4B,EAAC,EAChB;AACb,EAAA,MAAM,IAAA,GAAO,MAAA;AACb,EAAA,MAAM,KAAA,GAAQ,KAAK,mBAAA,EAAoB;AAGvC,EAAA,MAAM,WAAA,GAAoC,KAAA,CAAM,GAAA,CAAI,UAAU,CAAA;AAE9D,EAAA,MAAM,UAAA,GAAiC;AAAA,IACrC,UAAA,EAAY,KAAK,MAAA,CAAO,IAAA;AAAA,IACxB,UAAA,EAAY,KAAK,MAAA,CAAO,UAAA;AAAA,IACxB,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,eAAe,IAAA,CAAK,aAAA;AAAA,IACpB,OAAA,EAAS,WAAA;AAAA,IACT,GAAI,QAAQ,GAAA,GAAM,EAAE,KAAK,OAAA,CAAQ,GAAA,KAAQ;AAAC,GAC5C;AACA,EAAA,MAAM,WAAA,GAAc,IAAI,WAAA,EAAY,CAAE,OAAO,IAAA,CAAK,SAAA,CAAU,UAAU,CAAC,CAAA;AAEvE,EAAA,IAAI,IAAA,GAAO,KAAK,WAAA,CAAY,UAAA;AAC5B,EAAA,IAAA,GAAO,cAAc,IAAI,CAAA;AACzB,EAAA,KAAA,MAAW,CAAA,IAAK,KAAA,EAAO,IAAA,GAAO,WAAA,CAAY,GAAG,IAAI,CAAA;AAEjD,EAAA,MAAM,GAAA,GAAM,IAAI,WAAA,CAAY,IAAI,CAAA;AAChC,EAAA,MAAM,IAAA,GAAO,IAAI,QAAA,CAAS,GAAG,CAAA;AAC7B,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,GAAG,CAAA;AAEhC,EAAA,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,cAAA,EAAgB,IAAI,CAAA;AACtC,EAAA,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,uBAAA,EAAyB,IAAI,CAAA;AAC/C,EAAA,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,WAAA,CAAY,UAAA,EAAY,IAAI,CAAA;AAC9C,EAAA,KAAA,CAAM,GAAA,CAAI,aAAa,EAAE,CAAA;AAEzB,EAAA,IAAI,MAAA,GAAS,aAAA,CAAc,EAAA,GAAK,WAAA,CAAY,UAAU,CAAA;AACtD,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO,MAAA,GAAS,YAAA,CAAa,CAAA,EAAG,OAAO,MAAM,CAAA;AAE7D,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,WAAW,CAAA,EAAiC;AACnD,EAAA,MAAM,IAAA,GAA2B;AAAA,IAC/B,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,UAAU,CAAA,CAAE,QAAA;AAAA,IACZ,aAAA,EAAe,CAAA,CAAE,QAAA,GAAW,CAAA,CAAE,SAAS,UAAA,GAAa,CAAA;AAAA,IACpD,YAAA,EAAc,EAAE,aAAA,CAAc,UAAA;AAAA,IAC9B,GAAI,EAAE,IAAA,GAAO,EAAE,WAAW,CAAA,CAAE,IAAA,CAAK,UAAA,EAAW,GAAI,EAAC;AAAA,IACjD,GAAI,EAAE,iBAAA,GAAoB,EAAE,YAAY,CAAA,CAAE,iBAAA,KAAsB,EAAC;AAAA,IACjE,GAAI,EAAE,iBAAA,KAAsB,MAAA,GACxB,EAAE,iBAAA,EAAmB,CAAA,CAAE,iBAAA,EAAkB,GACzC,EAAC;AAAA,IACL,GAAI,CAAA,CAAE,SAAA,GAAY,EAAE,SAAA,EAAW,WAAW,CAAA,CAAE,SAAS,CAAA,EAAE,GAAI,EAAC;AAAA,IAC5D,GAAI,CAAA,CAAE,MAAA,GAAS,EAAE,MAAA,EAAQ,CAAA,CAAE,MAAA,CAAO,GAAA,CAAI,UAAU,CAAA,EAAE,GAAI;AAAC,GACzD;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,WAAA,CAAY,GAAa,MAAA,EAAwB;AACxD,EAAA,IAAI,EAAE,QAAA,EAAU,MAAA,GAAS,cAAc,MAAA,GAAS,CAAA,CAAE,SAAS,UAAU,CAAA;AACrE,EAAA,MAAA,GAAS,aAAA,CAAc,MAAA,GAAS,CAAA,CAAE,aAAA,CAAc,UAAU,CAAA;AAC1D,EAAA,IAAI,EAAE,IAAA,EAAM,MAAA,GAAS,cAAc,MAAA,GAAS,CAAA,CAAE,KAAK,UAAU,CAAA;AAC7D,EAAA,IAAI,EAAE,SAAA,EAAW,MAAA,GAAS,WAAA,CAAY,CAAA,CAAE,WAAW,MAAM,CAAA;AACzD,EAAA,IAAI,EAAE,MAAA,EAAQ;AACZ,IAAA,KAAA,MAAWjB,MAAK,CAAA,CAAE,MAAA,EAAQ,MAAA,GAAS,WAAA,CAAYA,IAAG,MAAM,CAAA;AAAA,EAC1D;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,YAAA,CAAa,CAAA,EAAa,KAAA,EAAmB,MAAA,EAAwB;AAC5E,EAAA,IAAI,EAAE,QAAA,EAAU;AACd,IAAA,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,QAAA,EAAU,MAAM,CAAA;AAC5B,IAAA,MAAA,GAAS,aAAA,CAAc,MAAA,GAAS,CAAA,CAAE,QAAA,CAAS,UAAU,CAAA;AAAA,EACvD;AACA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,aAAA,EAAe,MAAM,CAAA;AACjC,EAAA,MAAA,GAAS,aAAA,CAAc,MAAA,GAAS,CAAA,CAAE,aAAA,CAAc,UAAU,CAAA;AAC1D,EAAA,IAAI,EAAE,IAAA,EAAM;AACV,IAAA,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,IAAA,EAAM,MAAM,CAAA;AACxB,IAAA,MAAA,GAAS,aAAA,CAAc,MAAA,GAAS,CAAA,CAAE,IAAA,CAAK,UAAU,CAAA;AAAA,EACnD;AACA,EAAA,IAAI,EAAE,SAAA,EAAW,MAAA,GAAS,aAAa,CAAA,CAAE,SAAA,EAAW,OAAO,MAAM,CAAA;AACjE,EAAA,IAAI,EAAE,MAAA,EAAQ;AACZ,IAAA,KAAA,MAAWA,MAAK,CAAA,CAAE,MAAA,WAAiB,YAAA,CAAaA,EAAAA,EAAG,OAAO,MAAM,CAAA;AAAA,EAClE;AACA,EAAA,OAAO,MAAA;AACT;AASO,SAAS,mBAAmB,MAAA,EAAyC;AAC1E,EAAA,MAAM,IAAA,GAAO,IAAI,QAAA,CAAS,MAAM,CAAA;AAChC,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,IAAI,CAAA;AACpC,EAAA,IAAI,UAAU,cAAA,EAAgB;AAC5B,IAAA,MAAM,IAAI,eAAA;AAAA,MACR,CAAA,oCAAA,EAAuC,eAAe,QAAA,CAAS,EAAE,CAAC,CAAA,QAAA,EAAW,KAAA,CAAM,QAAA,CAAS,EAAE,CAAC,CAAA;AAAA,KACjG;AAAA,EACF;AACA,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,IAAI,CAAA;AAClC,EAAA,IAAI,QAAQ,uBAAA,EAAyB;AACnC,IAAA,MAAM,IAAI,eAAA;AAAA,MACR,CAAA,wBAAA,EAA2B,GAAG,CAAA,yBAAA,EAA4B,uBAAuB,CAAA,CAAA;AAAA,KACnF;AAAA,EACF;AACA,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,IAAI,CAAA;AACxC,EAAA,MAAM,WAAA,GAAc,IAAI,UAAA,CAAW,MAAA,EAAQ,IAAI,SAAS,CAAA;AACxD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,eAAA,CAAgB,WAAW,CAAC,CAAA;AACpD,EAAA,OAAO,IAAA;AACT;AAQO,SAAS,cAAA,CACd,QACA,OAAA,EACY;AACZ,EAAA,MAAM,MAAA,GAAS,mBAAmB,MAAM,CAAA;AACxC,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,MAAM,MAAA,CAAO,UAAA;AAAA,IACb,YAAY,MAAA,CAAO,UAAA;AAAA,IACnB,SAAS,MAAA,CAAO,WAAA;AAAA,MACd,MAAA,CAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,IAAA,EAAM,eAAA,CAAgB,CAAC,CAAC,CAAU;AAAA;AACjE,GACF;AACA,EAAA,MAAM,MAAA,GAAS,aAAa,WAAW,CAAA;AACvC,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,EAAQ,MAAA,CAAO,QAAQ,CAAA;AAE9C,EAAA,MAAM,UAAA,GAAa,IAAI,kBAAA,CAAmB,MAAA,EAAQ,MAAM,CAAA;AACxD,EAAA,KAAA,IAAS,GAAA,GAAM,CAAA,EAAG,GAAA,GAAM,MAAA,CAAO,WAAW,GAAA,EAAA,EAAO;AAC/C,IAAA,MAAM,CAAA,GAAI,UAAA,CAAW,IAAA,CAAK,GAAG,CAAA;AAC7B,IAAA,IAAI,MAAM,IAAA,EAAM;AAChB,IAAA,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,EACjB;AAEA,EAAA,MAAM,YAAa,MAAA,CAEhB,gCAAA;AACH,EAAA,IAAI,SAAA,EAAW,SAAA,CAAU,IAAA,CAAK,MAAA,EAAQ,OAAO,aAAa,CAAA;AAE1D,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,gBAAgB,IAAA,EAAqC;AAC5D,EAAA,MAAM,GAAA,GAAiB;AAAA,IACrB,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,GAAI,KAAK,SAAA,KAAc,MAAA,GAAY,EAAE,eAAA,EAAiB,IAAA,CAAK,SAAA,EAAU,GAAI,EAAC;AAAA,IAC1E,GAAI,IAAA,CAAK,SAAA,GAAY,EAAE,KAAA,EAAO,gBAAgB,IAAA,CAAK,SAAS,CAAA,EAAE,GAAI,EAAC;AAAA,IACnE,GAAI,KAAK,MAAA,GACL;AAAA,MACE,QAAQ,MAAA,CAAO,WAAA;AAAA,QACb,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAACA,EAAAA,KAAM,CAAC,aAAA,CAAcA,EAAAA,CAAE,IAAI,CAAA,EAAG,eAAA,CAAgBA,EAAC,CAAC,CAAU;AAAA;AAC7E,QAEF;AAAC,GACP;AACA,EAAA,OAAO,GAAA;AACT;AAOA,SAAS,cAAc,MAAA,EAAwB;AAC7C,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,WAAA,CAAY,GAAG,CAAA;AAClC,EAAA,OAAO,OAAO,CAAA,GAAI,MAAA,CAAO,KAAA,CAAM,GAAA,GAAM,CAAC,CAAA,GAAI,MAAA;AAC5C;AAiBA,SAAS,WAAA,CACP,MAAA,EACA,IAAA,EACA,MAAA,EAC+C;AAC/C,EAAA,IAAI,QAAA,GAA8B,IAAA;AAClC,EAAA,IAAI,IAAA,CAAK,gBAAgB,CAAA,EAAG;AAC1B,IAAA,QAAA,GAAW,IAAI,UAAA,CAAW,MAAA,EAAQ,MAAA,EAAQ,KAAK,aAAa,CAAA;AAC5D,IAAA,MAAA,GAAS,aAAA,CAAc,MAAA,GAAS,IAAA,CAAK,aAAa,CAAA;AAAA,EACpD;AACA,EAAA,MAAM,UAAU,IAAI,UAAA,CAAW,MAAA,EAAQ,MAAA,EAAQ,KAAK,YAAY,CAAA;AAChE,EAAA,MAAA,GAAS,aAAA,CAAc,MAAA,GAAS,IAAA,CAAK,YAAY,CAAA;AACjD,EAAA,IAAI,IAAA,GAA0B,IAAA;AAC9B,EAAA,IAAI,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,SAAA,GAAY,CAAA,EAAG;AACxC,IAAA,IAAA,GAAO,IAAI,UAAA,CAAW,MAAA,EAAQ,MAAA,EAAQ,KAAK,SAAS,CAAA;AACpD,IAAA,MAAA,GAAS,aAAA,CAAc,MAAA,GAAS,IAAA,CAAK,SAAS,CAAA;AAAA,EAChD;AACA,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI,KAAK,SAAA,EAAW;AAClB,IAAA,MAAM,CAAA,GAAI,WAAA,CAAY,MAAA,EAAQ,IAAA,CAAK,WAAW,MAAM,CAAA;AACpD,IAAA,SAAA,GAAY,CAAA,CAAE,MAAA;AACd,IAAA,MAAA,GAAS,CAAA,CAAE,UAAA;AAAA,EACb;AACA,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,KAAK,MAAA,EAAQ;AACf,IAAA,MAAA,GAAS,EAAC;AACV,IAAA,KAAA,MAAWA,EAAAA,IAAK,KAAK,MAAA,EAAQ;AAC3B,MAAA,MAAM,CAAA,GAAI,WAAA,CAAY,MAAA,EAAQA,EAAAA,EAAG,MAAM,CAAA;AACvC,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,MAAM,CAAA;AACpB,MAAA,MAAA,GAAS,CAAA,CAAE,UAAA;AAAA,IACb;AAAA,EACF;AACA,EAAA,MAAM,MAAA,GAAwB;AAAA,IAC5B,IAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAI,SAAA,GAAY,EAAE,SAAA,KAAc,EAAC;AAAA,IACjC,GAAI,MAAA,GAAS,EAAE,MAAA,KAAW;AAAC,GAC7B;AACA,EAAA,OAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,MAAA,EAAO;AACtC;AAMO,IAAM,qBAAN,MAAyB;AAAA,EACb,QAAA;AAAA,EAEjB,WAAA,CAAY,QAAqB,MAAA,EAA4B;AAC3D,IAAA,MAAM,IAAA,GAAO,IAAI,QAAA,CAAS,MAAM,CAAA;AAChC,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,IAAI,MAAM,cAAA,EAAgB;AAC9C,MAAA,MAAM,IAAI,gBAAgB,CAAA,uBAAA,CAAyB,CAAA;AAAA,IACrD;AACA,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,IAAI,CAAA;AACxC,IAAA,IAAI,MAAA,GAAS,aAAA,CAAc,EAAA,GAAK,SAAS,CAAA;AACzC,IAAA,MAAM,WAA4B,EAAC;AACnC,IAAA,KAAA,MAAW,IAAA,IAAQ,OAAO,OAAA,EAAS;AACjC,MAAA,MAAM,CAAA,GAAI,WAAA,CAAY,MAAA,EAAQ,IAAA,EAAM,MAAM,CAAA;AAC1C,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,MAAM,CAAA;AACtB,MAAA,MAAA,GAAS,CAAA,CAAE,UAAA;AAAA,IACb;AACA,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,EAClB;AAAA;AAAA;AAAA,EAIA,KAAK,GAAA,EAA8B;AACjC,IAAA,MAAM,MAAgB,EAAC;AACvB,IAAA,KAAA,MAAW,CAAA,IAAK,KAAK,QAAA,EAAU;AAC7B,MAAA,GAAA,CAAI,EAAE,IAAA,CAAK,IAAI,IAAI,IAAA,CAAK,SAAA,CAAU,GAAG,GAAG,CAAA;AAAA,IAC1C;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEQ,SAAA,CAAU,GAAkB,GAAA,EAA+B;AACjE,IAAA,IAAI,CAAA,CAAE,YAAY,CAAC,cAAA,CAAe,EAAE,QAAA,EAAU,GAAG,GAAG,OAAO,IAAA;AAC3D,IAAA,QAAQ,CAAA,CAAE,KAAK,IAAA;AAAM,MACnB,KAAK,MAAA;AACH,QAAA,OAAO,IAAA,CAAK,aAAA,CAAc,CAAA,EAAG,GAAG,CAAA;AAAA,MAClC,KAAK,QAAA;AACH,QAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,CAAA,EAAG,GAAG,CAAA;AAAA,MACpC;AACE,QAAA,OAAO,aAAA,CAAc,GAAG,GAAG,CAAA;AAAA;AAC/B,EACF;AAAA,EAEQ,aAAA,CAAc,GAAkB,GAAA,EAAiC;AACvE,IAAA,MAAM,UAAU,IAAI,UAAA;AAAA,MAClB,EAAE,OAAA,CAAQ,MAAA;AAAA,MACV,EAAE,OAAA,CAAQ,UAAA;AAAA,MACV,CAAA,CAAE,QAAQ,UAAA,GAAa;AAAA,KACzB;AACA,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,GAAM,CAAC,CAAA,IAAK,CAAA;AAClC,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,GAAM,CAAA,GAAI,CAAC,CAAA,IAAK,CAAA;AACpC,IAAA,MAAM,QAAQ,CAAA,CAAE,SAAA;AAChB,IAAA,MAAM,IAAI,GAAA,GAAM,KAAA;AAChB,IAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAe,CAAC,CAAA;AAChC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,MAAA,IAAI,KAAA,CAAM,YAAY,CAAC,cAAA,CAAe,MAAM,QAAA,EAAU,KAAA,GAAQ,CAAC,CAAA,EAAG;AAChE,QAAA,GAAA,CAAI,CAAC,CAAA,GAAI,IAAA;AAAA,MACX,CAAA,MAAO;AACL,QAAA,GAAA,CAAI,CAAC,CAAA,GAAI,aAAA,CAAc,KAAA,EAAO,QAAQ,CAAC,CAAA;AAAA,MACzC;AAAA,IACF;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEQ,eAAA,CAAgB,GAAkB,GAAA,EAAsC;AAC9E,IAAA,MAAM,MAA+B,EAAC;AACtC,IAAA,KAAA,MAAWA,EAAAA,IAAK,CAAA,CAAE,MAAA,IAAU,EAAC,EAAG;AAC9B,MAAA,GAAA,CAAI,aAAA,CAAcA,GAAE,IAAA,CAAK,IAAI,CAAC,CAAA,GAAI,IAAA,CAAK,SAAA,CAAUA,EAAAA,EAAG,GAAG,CAAA;AAAA,IACzD;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AACF;AAEA,SAAS,aAAA,CAAc,GAAkB,GAAA,EAA+B;AACtE,EAAA,MAAM,IAAI,CAAA,CAAE,OAAA;AACZ,EAAA,QAAQ,CAAA,CAAE,KAAK,IAAA;AAAM,IACnB,KAAK,MAAA;AACH,MAAA,OAAA,CAAQ,CAAA,CAAE,GAAG,CAAA,IAAK,CAAA,MAAO,CAAA;AAAA,IAC3B,KAAK,MAAA;AACH,MAAA,OAAO,IAAI,SAAA,CAAU,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,YAAY,CAAA,CAAE,UAAU,CAAA,CAAE,GAAG,CAAA,IAAK,CAAA;AAAA,IACrE,KAAK,OAAA;AACH,MAAA,OAAO,IAAI,UAAA,CAAW,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,UAAA,EAAY,CAAA,CAAE,UAAA,GAAa,CAAC,CAAA,CAAE,GAAG,CAAA,IAAK,CAAA;AAAA,IAC1E,KAAK,OAAA;AACH,MAAA,OAAO,IAAI,UAAA,CAAW,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,UAAA,EAAY,CAAA,CAAE,UAAA,GAAa,CAAC,CAAA,CAAE,GAAG,CAAA,IAAK,CAAA;AAAA,IAC1E,KAAK,OAAA;AACH,MAAA,OAAO,CAAA,CAAE,GAAG,CAAA,IAAK,CAAA;AAAA,IACnB,KAAK,QAAA;AACH,MAAA,OAAO,IAAI,WAAA,CAAY,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,UAAA,EAAY,CAAA,CAAE,UAAA,GAAa,CAAC,CAAA,CAAE,GAAG,CAAA,IAAK,CAAA;AAAA,IAC3E,KAAK,QAAA;AACH,MAAA,OAAO,IAAI,WAAA,CAAY,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,UAAA,EAAY,CAAA,CAAE,UAAA,GAAa,CAAC,CAAA,CAAE,GAAG,CAAA,IAAK,CAAA;AAAA,IAC3E,KAAK,OAAA;AACH,MAAA,OAAO,IAAI,aAAA,CAAc,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,UAAA,EAAY,CAAA,CAAE,UAAA,GAAa,CAAC,CAAA,CAAE,GAAG,CAAA,IAAK,EAAA;AAAA,IAC7E,KAAK,QAAA;AACH,MAAA,OAAO,IAAI,cAAA,CAAe,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,UAAA,EAAY,CAAA,CAAE,UAAA,GAAa,CAAC,CAAA,CAAE,GAAG,CAAA,IAAK,EAAA;AAAA,IAC9E,KAAK,SAAA;AACH,MAAA,OAAO,IAAI,YAAA,CAAa,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,UAAA,EAAY,CAAA,CAAE,UAAA,GAAa,CAAC,CAAA,CAAE,GAAG,CAAA,IAAK,CAAA;AAAA,IAC5E,KAAK,SAAA;AACH,MAAA,OAAO,IAAI,YAAA,CAAa,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,UAAA,EAAY,CAAA,CAAE,UAAA,GAAa,CAAC,CAAA,CAAE,GAAG,CAAA,IAAK,CAAA;AAAA,IAC5E,KAAK,OAAA,EAAS;AACZ,MAAA,MAAM,MAAA,GAAS,IAAI,YAAA,CAAa,CAAA,CAAE,QAAQ,CAAA,CAAE,UAAA,EAAY,CAAA,CAAE,UAAA,GAAa,CAAC,CAAA;AACxE,MAAA,MAAM,SAAS,GAAA,GAAM,CAAA;AACrB,MAAA,OAAO,CAAC,MAAA,CAAO,MAAM,CAAA,IAAK,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,IAAK,MAAA,CAAO,GAAG,CAAA;AAAA,IACxE;AAAA,IACA,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,OAAA,GAAU,IAAI,UAAA,CAAW,CAAA,CAAE,QAAQ,CAAA,CAAE,UAAA,EAAY,CAAA,CAAE,UAAA,GAAa,CAAC,CAAA;AACvE,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,GAAM,CAAC,CAAA,IAAK,CAAA;AAClC,MAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,GAAM,CAAA,GAAI,CAAC,CAAA,IAAK,CAAA;AACpC,MAAA,IAAI,CAAC,CAAA,CAAE,IAAA,EAAM,MAAM,IAAI,gBAAgB,CAAA,wBAAA,CAA0B,CAAA;AACjE,MAAA,OAAO,gBAAgB,CAAA,CAAE,IAAA,CAAK,QAAA,CAAS,KAAA,EAAO,GAAG,CAAC,CAAA;AAAA,IACpD;AAAA,IACA,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,OAAA,GAAU,IAAI,UAAA,CAAW,CAAA,CAAE,QAAQ,CAAA,CAAE,UAAA,EAAY,CAAA,CAAE,UAAA,GAAa,CAAC,CAAA;AACvE,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,GAAM,CAAC,CAAA,IAAK,CAAA;AAClC,MAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,GAAM,CAAA,GAAI,CAAC,CAAA,IAAK,CAAA;AACpC,MAAA,IAAI,CAAC,CAAA,CAAE,IAAA,EAAM,MAAM,IAAI,gBAAgB,CAAA,0BAAA,CAA4B,CAAA;AACnE,MAAA,OAAO,CAAA,CAAE,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAAA,IAChC;AAAA,IACA,KAAK,WAAA,EAAa;AAChB,MAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY,CAAA,CAAE,QAAQ,CAAA,CAAE,UAAA,EAAY,CAAA,CAAE,UAAA,GAAa,CAAC,CAAA;AACtE,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,GAAG,CAAA,IAAK,CAAA;AAC3B,MAAA,IAAI,CAAC,CAAA,CAAE,IAAA,CAAK,YAAY,MAAM,IAAI,gBAAgB,CAAA,8BAAA,CAAgC,CAAA;AAClF,MAAA,MAAM,GAAA,GAAM,CAAA,CAAE,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA;AAClC,MAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,QAAA,MAAM,IAAI,gBAAgB,CAAA,UAAA,EAAa,IAAI,6BAA6B,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,MACxF;AACA,MAAA,OAAO,GAAA;AAAA,IACT;AAAA,IACA;AACE,MAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,mBAAA,EAAsB,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA;AAEpE;AAEA,SAAS,cAAA,CAAe,QAAoB,GAAA,EAAsB;AAChE,EAAA,MAAM,OAAO,GAAA,KAAQ,CAAA;AACrB,EAAA,MAAM,GAAA,GAAM,MAAM,GAAA,GAAM,CAAA,CAAA;AACxB,EAAA,OAAA,CAAA,CAAS,MAAA,CAAO,IAAI,CAAA,IAAK,CAAA,IAAK,GAAA,MAAS,CAAA;AACzC;;;ACxZO,IAAM,YAAN,MAAgB;AAAA,EAMrB,WAAA,CAA6B,MAAA,EAAoB,IAAA,GAAyB,EAAC,EAAG;AAAjD,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAC3B,IAAA,IAAA,CAAK,WAAA,GAAc,KAAK,WAAA,IAAe,KAAA;AACvC,IAAA,IAAA,CAAK,WAAA,GAAc,OAAO,SAAA,CAAU,CAAC,UAAU,IAAA,CAAK,QAAA,CAAS,KAAK,CAAC,CAAA;AAAA,EACrE;AAAA,EAH6B,MAAA;AAAA,EALZ,SAAkB,EAAC;AAAA,EACnB,WAAA;AAAA,EACT,eAAA,uBAA2C,GAAA,EAAI;AAAA,EACtC,WAAA;AAAA,EAOjB,OAAA,GAAgB;AACd,IAAA,IAAA,CAAK,WAAA,EAAY;AAAA,EACnB;AAAA;AAAA,EAGA,WAAW,YAAA,EAAyD;AAClE,IAAA,MAAM,MAAe,EAAC;AACtB,IAAA,KAAA,MAAW,CAAA,IAAK,KAAK,MAAA,EAAQ;AAC3B,MAAA,IAAI,CAAA,CAAE,OAAA,GAAU,YAAA,EAAc,GAAA,CAAI,KAAK,CAAC,CAAA;AAAA,IAC1C;AACA,IAAA,MAAM,IAAA,GACJ,IAAI,MAAA,GAAS,CAAA,GACR,IAAI,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA,CAAY,OAAA,GAC/B,YAAA;AACN,IAAA,OAAO,EAAE,MAAA,EAAQ,GAAA,EAAK,IAAA,EAAK;AAAA,EAC7B;AAAA;AAAA,EAGA,IAAI,IAAA,GAAe;AACjB,IAAA,OAAO,KAAK,MAAA,CAAO,MAAA;AAAA,EACrB;AAAA;AAAA,EAGA,SAAS,QAAA,EAAsC;AAC7C,IAAA,IAAA,CAAK,eAAA,CAAgB,IAAI,QAAQ,CAAA;AACjC,IAAA,OAAO,MAAM,IAAA,CAAK,eAAA,CAAgB,MAAA,CAAO,QAAQ,CAAA;AAAA,EACnD;AAAA,EAEQ,SAAS,KAAA,EAA0B;AACzC,IAAA,IAAI,KAAA,CAAM,EAAA,KAAO,SAAA,IAAa,KAAA,CAAM,OAAO,UAAA,EAAY;AACrD,MAAA,KAAA,MAAW,CAAA,IAAK,KAAK,eAAA,EAAiB;AACpC,QAAA,IAAI;AACF,UAAA,CAAA,CAAE,EAAE,OAAA,EAAS,KAAA,CAAM,aAAA,EAAe,CAAA;AAAA,QACpC,SAAS,GAAA,EAAK;AAEZ,UAAA,OAAA,CAAQ,KAAA,CAAM,sCAAsC,GAAG,CAAA;AAAA,QACzD;AAAA,MACF;AAGA,MAAA,IAAA,CAAK,OAAO,MAAA,GAAS,CAAA;AACrB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,KAAA,CAAM,OAAO,QAAA,EAAU;AACzB,MAAA,IAAA,CAAK,IAAA,CAAK;AAAA,QACR,EAAA,EAAI,QAAA;AAAA,QACJ,KAAK,KAAA,CAAM,KAAA;AAAA,QACX,SAAS,KAAA,CAAM;AAAA,OAChB,CAAA;AACD,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,MAAM,KAAK,CAAA;AACvC,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,IAAA,CAAK,IAAA,CAAK;AAAA,MACR,IAAI,KAAA,CAAM,EAAA;AAAA,MACV,KAAK,KAAA,CAAM,KAAA;AAAA,MACX,KAAA,EAAO,GAAA;AAAA,MACP,SAAS,KAAA,CAAM;AAAA,KAChB,CAAA;AAAA,EACH;AAAA,EAEQ,KAAK,KAAA,EAAoB;AAC/B,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,KAAK,CAAA;AACtB,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,IAAA,CAAK,WAAA,EAAa;AAIzC,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,IAAA,CAAK,WAAA;AAC3C,MAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,CAAA,EAAG,QAAQ,CAAA;AAAA,IAChC;AAAA,EACF;AACF;;;AC7FO,SAAS,WAAA,CACd,QACA,MAAA,EACQ;AACR,EAAA,IAAI,OAAA,GAAU,CAAA,QAAA;AACd,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,IAAI,CAAA,CAAE,OAAO,QAAA,EAAU;AACrB,MAAA,IAAI;AACF,QAAA,MAAA,CAAO,MAAA,CAAO,EAAE,GAAG,CAAA;AAAA,MACrB,SAAS,GAAA,EAAK;AACZ,QAAA,IAAI,eAAe,aAAA,EAAe,CAElC,MAAO;AACL,UAAA,MAAM,GAAA;AAAA,QACR;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAI,CAAC,EAAE,KAAA,EAAO;AACZ,QAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,MAAA,EAAS,CAAA,CAAE,EAAE,CAAA,cAAA,CAAgB,CAAA;AAAA,MACzD;AACA,MAAA,IAAI,CAAA,CAAE,OAAO,QAAA,EAAU;AACrB,QAAA,MAAM,QAAA,GAAW,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,GAAG,CAAA;AACjC,QAAA,IAAI,QAAA,EAAU;AACZ,UAAA,MAAA,CAAO,OAAO,CAAA,CAAE,GAAA,EAAK,gBAAgB,MAAA,EAAQ,CAAA,CAAE,KAAiB,CAAC,CAAA;AAAA,QACnE,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,MAAA,CAAO,EAAE,KAAiB,CAAA;AAAA,QACnC;AAAA,MACF,CAAA,MAAO;AAEL,QAAA,MAAM,QAAA,GAAW,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,GAAG,CAAA;AACjC,QAAA,IAAI,CAAC,QAAA,EAAU;AACb,UAAA,MAAA,CAAO,MAAA,CAAO,EAAE,KAAiB,CAAA;AAAA,QACnC,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,OAAO,CAAA,CAAE,GAAA,EAAK,gBAAgB,MAAA,EAAQ,CAAA,CAAE,KAAiB,CAAC,CAAA;AAAA,QACnE;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,CAAA,CAAE,OAAA,GAAU,OAAA,EAAS,OAAA,GAAU,CAAA,CAAE,OAAA;AAAA,EACvC;AACA,EAAA,OAAO,OAAA;AACT;AAcO,IAAM,oBAAN,MAA+C;AAAA,EACpD,WAAA,CACmB,KAAA,EACA,GAAA,EAGA,QAAA,EACjB;AALiB,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AACA,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAGA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAEjB,IAAA,IAAI,QAAA,EAAU;AAGZ,MAAA,IAAI,MAAA,GAAS,CAAA;AACb,MAAA,MAAM,OAAO,MAAY;AACvB,QAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAK,GAAI,QAAA,CAAS,WAAW,MAAM,CAAA;AACnD,QAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,UAAA,IAAA,CAAK,GAAA,CAAI,KAAK,MAAM,CAAA;AACpB,UAAA,MAAA,GAAS,IAAA;AAAA,QACX;AAAA,MACF,CAAA;AAGA,MAAA,IAAA,EAAK;AACL,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,SAAA,CAAU,MAAM,MAAM,CAAA;AAE1C,MAAA,IAAA,CAAK,oBAAA,GAAuB,MAAM,KAAA,EAAM;AAAA,IAC1C;AAAA,EACF;AAAA,EAxBmB,KAAA;AAAA,EACA,GAAA;AAAA,EAGA,QAAA;AAAA,EAsBX,oBAAA,GAA4C,IAAA;AAAA,EAEpD,OAAA,GAAgB;AACd,IAAA,IAAA,CAAK,oBAAA,IAAuB;AAAA,EAC9B;AAAA,EAEA,MAAM,MAAM,MAAA,EAAyC;AACnD,IAAA,WAAA,CAAY,IAAA,CAAK,OAAO,MAAM,CAAA;AAAA,EAChC;AAAA,EAEA,MAAM,KAAK,YAAA,EAAkE;AAC3E,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,UAAA,CAAW,YAAY,CAAA;AAAA,EACzC;AAAA,EAEA,MAAM,KAAK,MAAA,EAAyC;AAClD,IAAA,IAAA,CAAK,GAAA,CAAI,KAAK,MAAM,CAAA;AAAA,EACtB;AACF;AAOA,SAAS,eAAA,CAAgB,QAAoB,GAAA,EAAkC;AAC7E,EAAA,MAAM,EAAA,GAAK,OAAO,MAAA,CAAO,UAAA;AACzB,EAAA,IAAI,EAAE,EAAA,IAAM,GAAA,CAAA,EAAM,OAAO,GAAA;AACzB,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AACxC,IAAA,IAAI,MAAM,EAAA,EAAI;AACd,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;AAAA,EACX;AACA,EAAA,OAAO,GAAA;AACT;AAOO,IAAM,iBAAN,MAAqB;AAAA,EACT,UAAmB,EAAC;AAAA,EAErC,KAAK,MAAA,EAAgC;AACnC,IAAA,KAAA,MAAW,CAAA,IAAK,MAAA,EAAQ,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAC7C;AAAA,EAEA,WAAW,YAAA,EAAyD;AAClE,IAAA,MAAM,MAAe,EAAC;AACtB,IAAA,KAAA,MAAW,CAAA,IAAK,KAAK,OAAA,EAAS;AAC5B,MAAA,IAAI,CAAA,CAAE,OAAA,GAAU,YAAA,EAAc,GAAA,CAAI,KAAK,CAAC,CAAA;AAAA,IAC1C;AACA,IAAA,MAAM,IAAA,GACJ,IAAI,MAAA,GAAS,CAAA,GACR,IAAI,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA,CAAY,OAAA,GAC/B,YAAA;AACN,IAAA,OAAO,EAAE,MAAA,EAAQ,GAAA,EAAK,IAAA,EAAK;AAAA,EAC7B;AAAA,EAEA,IAAI,IAAA,GAAe;AACjB,IAAA,OAAO,KAAK,OAAA,CAAQ,MAAA;AAAA,EACtB;AACF;;;AC/FO,SAAS,mBAAmB,MAAA,EAA2C;AAC5E,EAAA,MAAM,CAAA,GAAI,MAAA;AACV,EAAA,MAAM,KAAA,GAAQ,EAAE,mBAAA,EAAoB;AACpC,EAAA,MAAM,OAAA,GAA+B,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM;AACpD,IAAA,MAAM,IAAA,GAA0B;AAAA,MAC9B,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,UAAU,CAAA,CAAE,QAAA;AAAA,MACZ,SAAS,CAAA,CAAE,OAAA;AAAA,MACX,WAAW,CAAA,CAAE,SAAA;AAAA,MACb,GAAI,CAAA,CAAE,IAAA,GACF,EAAE,IAAA,EAAM,EAAE,SAAA,EAAW,CAAA,CAAE,IAAA,CAAK,IAAA,EAAM,eAAe,CAAA,CAAE,IAAA,CAAK,QAAA,EAAS,KACjE,EAAC;AAAA,MACL,GAAI,EAAE,iBAAA,GACF;AAAA,QACE,UAAA,EAAY;AAAA,UACV,OAAA,EAAS,EAAE,iBAAA,CAAkB,MAAA;AAAA,UAC7B,aAAA,EAAe,CAAA,CAAE,iBAAA,CAAkB,KAAA,CAAM,GAAG,CAAC;AAAA;AAC/C,UAEF;AAAC,KACP;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,EAAE,MAAA,CAAO,IAAA;AAAA,IACrB,UAAA,EAAY,EAAE,MAAA,CAAO,UAAA;AAAA,IACrB,UAAU,CAAA,CAAE,QAAA;AAAA,IACZ,UAAU,CAAA,CAAE,QAAA;AAAA,IACZ,cAAc,CAAA,CAAE,IAAA;AAAA,IAChB,eAAe,CAAA,CAAE,aAAA;AAAA,IACjB,eAAe,CAAA,CAAE,aAAA;AAAA,IACjB,iBAAA,EAAmB,CAAA,EAAA,EAAK,CAAA,CAAE,MAAA,CAAO,WAAA,CAAY,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,EAAA,EAAI,GAAG,CAAC,CAAA,CAAA;AAAA,IAC3E;AAAA,GACF;AACF;;;AClEO,SAAS,QAAA,CACd,MACA,YAAA,EACkB;AAClB,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,OAAO,SAAA,CAAU,MAAM,YAAY,CAAA;AACrC;AAEA,SAAS,SAAA,CACP,MACA,YAAA,EACkB;AAClB,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,KAAA;AAGH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,KAAA;AAGH,MAAA,OAAO,cAAA,CAAe,MAAiB,YAAY,CAAA;AAAA,IACrD,KAAK,MAAA,EAAQ;AACX,MAAA,MAAMA,EAAAA,GAAI,IAAA;AACV,MAAA,OAAO,aAAA,CAAcA,IAAG,YAAY,CAAA;AAAA,IACtC;AAAA,IACA;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;AAEA,SAAS,aAAA,CACPA,IACA,YAAA,EACkB;AAClB,EAAA,MAAM,OAAOA,EAAAA,CAAE,IAAA;AACf,EAAA,MAAM,OAAOA,EAAAA,CAAE,IAAA;AAEf,EAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AACtC,IAAA,OAAO,YAAY,IAAA,CAAK,CAAC,GAAI,IAAA,CAAK,CAAC,GAAI,YAAY,CAAA;AAAA,EACrD;AAEA,EAAA,IAAI,IAAA,KAAS,KAAA,IAAS,IAAA,KAAS,IAAA,EAAM;AACnC,IAAA,MAAM,WAAwB,EAAC;AAC/B,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,MAAM,CAAA,GAAI,SAAA,CAAU,GAAA,EAAK,YAAY,CAAA;AACrC,MAAA,IAAI,CAAC,GAAG,OAAO,IAAA;AACf,MAAA,QAAA,CAAS,KAAK,CAAC,CAAA;AAAA,IACjB;AACA,IAAA,IAAI,SAAS,KAAA,EAAO;AAClB,MAAA,OAAO,CAAC,QAAQ,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,KAAM,CAAA,CAAE,GAAG,CAAC,CAAA;AAAA,IAC9C;AACA,IAAA,OAAO,CAAC,QAAQ,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,GAAG,CAAC,CAAA;AAAA,EAC7C;AAEA,EAAA,IAAI,IAAA,KAAS,KAAA,IAAS,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AACvC,IAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,IAAA,CAAK,CAAC,GAAI,YAAY,CAAA;AAC9C,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,IAAA,OAAO,CAAC,GAAA,KAAQ,CAAC,KAAA,CAAM,GAAG,CAAA;AAAA,EAC5B;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,WAAA,CACP,CAAA,EACA,CAAA,EACA,YAAA,EACkB;AAElB,EAAA,IAAI,GAAA,GAAsB,IAAA;AAC1B,EAAA,IAAIM,IAAAA,GAAwB,IAAA;AAC5B,EAAA,IAAI,CAAA,CAAE,IAAA,KAAS,KAAA,IAAS,CAAA,CAAE,SAAS,KAAA,EAAO;AACxC,IAAA,GAAA,GAAM,CAAA;AACN,IAAAA,IAAAA,GAAM,CAAA;AAAA,EACR,WAAW,CAAA,CAAE,IAAA,KAAS,KAAA,IAAS,CAAA,CAAE,SAAS,KAAA,EAAO;AAC/C,IAAA,GAAA,GAAM,CAAA;AACN,IAAAA,IAAAA,GAAM,CAAA;AAAA,EACR,CAAA,MAAO;AACL,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,GAAA,GAAM,UAAA,CAAW,GAAA,EAAK,YAAY,CAAA;AACxC,EAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AACjB,EAAA,MAAM,UAAUA,IAAAA,CAAI,KAAA;AACpB,EAAA,OAAO,CAAC,GAAA,KAAQ,GAAA,CAAI,GAAG,CAAA,KAAM,OAAA;AAC/B;AAEA,SAAS,cAAA,CACP,KACA,YAAA,EACkB;AAClB,EAAA,MAAM,GAAA,GAAM,UAAA,CAAW,GAAA,EAAK,YAAY,CAAA;AACxC,EAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AACjB,EAAA,OAAO,CAAC,GAAA,KAAQ,GAAA,CAAI,GAAG,CAAA,KAAM,IAAA;AAC/B;AAEA,SAAS,UAAA,CACP,KACA,YAAA,EACe;AACf,EAAA,IAAI,CAAC,GAAA,CAAI,IAAA,IAAQ,IAAI,IAAA,CAAK,MAAA,KAAW,GAAG,OAAO,IAAA;AAI/C,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI,GAAA,CAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AACzB,IAAA,GAAA,GAAM,GAAA,CAAI,KAAK,CAAC,CAAA;AAAA,EAClB,CAAA,MAAA,IAAW,GAAA,CAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AAChC,IAAA,GAAA,GAAM,GAAA,CAAI,KAAK,CAAC,CAAA;AAAA,EAClB,CAAA,MAAO;AACL,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,YAAA,CAAa,GAAA,CAAI,GAAG,GAAG,OAAO,IAAA;AACnC,EAAA,OAAO,GAAA;AACT;;;AC3EA,IAAI,aAAA,GAAgB,CAAA;AAEpB,SAASe,eAAc,KAAA,EAA+C;AACpE,EAAA,OACE,KAAA,KAAU,IAAA,KACT,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,UAAA,CAAA,IAC/C,OAAQ,KAAA,CAA6B,IAAA,KAAS,UAAA;AAElD;AAEA,SAAS,QAAQ,KAAA,EAAuB;AACtC,EAAA,OAAO,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AACjE;AAEA,SAAS,WAAA,CAIP,KAAA,EACA,KAAA,EACA,OAAA,EACM;AACN,EAAA,MAAM,UAAA,GAAa,QAAQ,KAAK,CAAA;AAChC,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,IAAI;AACF,MAAA,OAAA,CAAQ,YAAY,KAAK,CAAA;AAAA,IAC3B,SAAS,YAAA,EAAc;AAErB,MAAA,OAAA,CAAQ,KAAA,CAAM,sCAAsC,YAAY,CAAA;AAEhE,MAAA,OAAA,CAAQ,KAAA,CAAM,4BAA4B,UAAU,CAAA;AAAA,IACtD;AACA,IAAA;AAAA,EACF;AAEA,EAAA,OAAA,CAAQ,KAAA,CAAM,wCAAwC,UAAU,CAAA;AAClE;AAEA,SAAS,cAGP,MAAA,EAA2D;AAC3D,EAAA,MAAM,IAAA,GAAO,OAAO,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,EAAU,MAAA,CAAO,QAAA,EAAS,GAAI,EAAC;AAC9E,EAAA,IAAI,MAAA,CAAO,SAAS,QAAA,EAAU;AAC5B,IAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,GAAA,EAAK,MAAA,CAAO,KAAK,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,GAAG,IAAA,EAAK;AAAA,EACxE;AACA,EAAA,IAAI,MAAA,CAAO,SAAS,QAAA,EAAU;AAC5B,IAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,GAAA,EAAK,MAAA,CAAO,KAAK,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,GAAG,IAAA,EAAK;AAAA,EACvE;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,KAAK,MAAA,CAAO,GAAA;AAAA,IACZ,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,aAAA,EAAe,MAAA,CAAO,aAAA,IAAiB,MAAA,CAAO,KAAA;AAAA,IAC9C,GAAG;AAAA,GACL;AACF;AAEA,SAAS,UAAA,CAIP,OACA,MAAA,EAC4C;AAC5C,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,OAAA,EAAS,OAAO,MAAA,CAAO,OAAA;AAC1C,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,MAAA,EAAQ,OAAO,MAAA,CAAO,MAAA;AACzC,EAAA,OAAO,MAAA,CAAO,QAAA;AAChB;AAEO,SAAS,aAGd,MAAA,EAA0C;AAC1C,EAAA,MAAM,EAAA,GAAK,MAAA,CAAO,EAAA,IAAM,CAAA,kBAAA,EAAqB,EAAE,aAAa,CAAA,CAAA;AAC5D,EAAA,MAAM,eAAA,GAAkB,IAAI,eAAA,EAAgB;AAC5C,EAAA,MAAM,GAAA,GAAqB;AAAA,IACzB,QAAA,EAAU,EAAA;AAAA,IACV,QAAQ,eAAA,CAAgB;AAAA,GAC1B;AACA,EAAA,MAAM,gBAAA,uBAAuB,GAAA,EAAsB;AACnD,EAAA,IAAI,QAAA,GAAW,KAAA;AAEf,EAAA,MAAM,OAAO,yBAAA,CAA0B;AAAA,IACrC,EAAA,EAAI,GAAG,EAAE,CAAA,WAAA,CAAA;AAAA,IACT,OAAO,MAAA,CAAO;AAAA,GAGf,CAAA;AAED,EAAA,MAAM,YAAA,GAAe,CAAC,OAAA,KAAoC;AACxD,IAAA,gBAAA,CAAiB,IAAI,OAAO,CAAA;AAC5B,IAAA,OAAA,CAAQ,QAAQ,MAAM;AACpB,MAAA,gBAAA,CAAiB,OAAO,OAAO,CAAA;AAAA,IACjC,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CACjB,KAAA,EACA,OAAA,EACA,KAAA,KACS;AACT,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,QACV,OAAA,CAA2C,KAAA,EAAO,GAAG,CAAA,GACrD,OAAA,CAA2C,OAAO,GAAG,CAAA;AAC1D,MAAA,IAAIA,cAAAA,CAAc,MAAM,CAAA,EAAG;AACzB,QAAA,MAAM,UAAU,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA,CAAE,KAAA,CAAM,CAAC,KAAA,KAAU;AACvD,UAAA,WAAA,CAAY,KAAA,EAAO,KAAA,EAAO,MAAA,CAAO,OAAO,CAAA;AAAA,QAC1C,CAAC,CAAA;AACD,QAAA,YAAA,CAAa,OAAO,CAAA;AAAA,MACtB;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,WAAA,CAAY,KAAA,EAAO,KAAA,EAAO,MAAA,CAAO,OAAO,CAAA;AAAA,IAC1C;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,eAAe,IAAA,CAAK,gBAAA;AAAA,IACxB,CAAC,OAAA,KAAY;AACX,MAAA,IAAI,QAAA,IAAY,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG;AACtC,MAAA,MAAM,SAAS,OAAA,CAAQ,GAAA;AAAA,QAAI,CAAC,MAAA,KAC1B,aAAA,CAAc,MAAmC;AAAA,OACnD;AACA,MAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AAEzB,MAAA,UAAA,CAAW,MAAA,CAAO,CAAC,CAAA,EAAI,MAAA,CAAO,SAAS,MAAM,CAAA;AAC7C,MAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,QAAA,IAAI,eAAA,CAAgB,OAAO,OAAA,EAAS;AACpC,QAAA,UAAA,CAAW,KAAA,EAAO,UAAA,CAAW,KAAA,EAAO,MAAM,CAAC,CAAA;AAAA,MAC7C;AAAA,IACF,CAAA;AAAA,IACA,EAAE,mBAAA,EAAqB,EAAE,MAAA,CAAO,eAAe,KAAA,CAAA;AAAO,GACxD;AAEA,EAAA,MAAM,UAAU,YAA2B;AACzC,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,QAAA,GAAW,IAAA;AACX,IAAA,eAAA,CAAgB,KAAA,EAAM;AACtB,IAAA,YAAA,CAAa,WAAA,EAAY;AACzB,IAAA,MAAM,KAAK,OAAA,EAAQ;AACnB,IAAA,IAAI,gBAAA,CAAiB,OAAO,CAAA,EAAG;AAC7B,MAAA,MAAM,OAAA,CAAQ,UAAA,CAAW,CAAC,GAAG,gBAAgB,CAAC,CAAA;AAAA,IAChD;AAAA,EACF,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,IAAI,QAAA,GAAW;AACb,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,GACF;AACF;;;ACtOO,IAAM,uBAAA,GAA0B;AAAA,EACrC,SAAA,EAAW,KAAA;AAAA,EACX,KAAA,EAAO,OAAA;AAAA,EACP,UAAA,EAAY;AACd;AAEA,IAAM,aAAA,uBAAoB,GAAA,CAAI;AAAA,EAC5B,mBAAA;AAAA,EACA,kBAAA;AAAA,EACA,oBAAA;AAAA,EACA,wBAAA;AAAA,EACA,wBAAA;AAAA,EACA,oBAAA;AAAA,EACA,yBAAA;AAAA,EACA;AACF,CAAC,CAAA;AAEM,SAAS,WAAW,KAAA,EAAyB;AAClD,EAAA,IAAI,KAAA,IAAS,IAAA,IAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,KAAA;AACvD,EAAA,MAAM,GAAA,GAAO,KAAA,CAA6C,MAAA,CAAO,WAAW,CAAA;AAC5E,EAAA,OAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,aAAA,CAAc,IAAI,GAAG,CAAA;AACzD;AAEO,SAASyD,WAAAA,CAAW,GAAY,CAAA,EAAqB;AAC1D,EAAA,OAAOC,mBAAAA,CAAmB,CAAA,EAAG,CAAA,kBAAG,IAAI,KAAqB,CAAA;AAC3D;AAEA,SAASA,mBAAAA,CAAmB,CAAA,EAAY,CAAA,EAAY,OAAA,EAAuC;AACzF,EAAA,IAAI,CAAA,KAAM,GAAG,OAAO,IAAA;AACpB,EAAA,IAAI,CAAA,IAAK,IAAA,IAAQ,CAAA,IAAK,IAAA,EAAM,OAAO,KAAA;AACnC,EAAA,IAAI,OAAO,CAAA,KAAM,OAAO,CAAA,EAAG,OAAO,KAAA;AAElC,EAAA,IAAI,CAAA,YAAa,MAAM,OAAO,CAAA,YAAa,QAAQ,CAAA,CAAE,OAAA,EAAQ,KAAM,CAAA,CAAE,OAAA,EAAQ;AAC7E,EAAA,IAAI,CAAA,YAAa,MAAM,OAAO,KAAA;AAE9B,EAAA,IAAI,CAAA,YAAa,MAAA,EAAQ,OAAO,CAAA,YAAa,MAAA,IAAU,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,KAAA,KAAU,CAAA,CAAE,KAAA;AAC9F,EAAA,IAAI,CAAA,YAAa,QAAQ,OAAO,KAAA;AAEhC,EAAA,IAAI,aAAa,GAAA,EAAK;AACpB,IAAA,IAAI,EAAE,CAAA,YAAa,GAAA,CAAA,IAAQ,EAAE,IAAA,KAAS,CAAA,CAAE,MAAM,OAAO,KAAA;AACrD,IAAA,IAAI,OAAA,CAAQ,IAAI,CAAC,CAAA,SAAU,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA;AAC9C,IAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAC,CAAA;AAChB,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,GAAA,EAAK,KAAK,MAAM,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,IAAKA,mBAAAA,CAAmB,KAAA,EAAO,EAAE,GAAA,CAAI,GAAG,CAAA,EAAG,OAAO,CAAC,CAAA;AAC3H,IAAA,OAAA,CAAQ,OAAO,CAAC,CAAA;AAChB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAA,YAAa,KAAK,OAAO,KAAA;AAE7B,EAAA,IAAI,aAAa,GAAA,EAAK;AACpB,IAAA,IAAI,EAAE,CAAA,YAAa,GAAA,CAAA,IAAQ,EAAE,IAAA,KAAS,CAAA,CAAE,MAAM,OAAO,KAAA;AACrD,IAAA,IAAI,OAAA,CAAQ,IAAI,CAAC,CAAA,SAAU,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA;AAC9C,IAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAC,CAAA;AAChB,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,CAAA,CAAE,QAAQ,CAAA;AACrC,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,CAAA,CAAE,QAAQ,CAAA;AACrC,IAAA,IAAI,QAAQ,KAAA,CAAM,CAAC,UAAU,OAAO,KAAA,KAAU,QAAQ,CAAA,EAAG;AACvD,MAAA,OAAA,CAAQ,OAAO,CAAC,CAAA;AAChB,MAAA,OAAO,QAAQ,KAAA,CAAM,CAAC,UAAU,CAAA,CAAE,GAAA,CAAI,KAAK,CAAC,CAAA;AAAA,IAC9C;AACA,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,KAAW,OAAA,CAAQ,MAAA;AAC1C,IAAA,OAAA,CAAQ,OAAO,CAAC,CAAA;AAChB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAA,YAAa,KAAK,OAAO,KAAA;AAE7B,EAAA,IAAI,WAAA,CAAY,MAAA,CAAO,CAAC,CAAA,IAAK,WAAA,CAAY,MAAA,CAAO,CAAC,CAAA,IAAK,EAAE,CAAA,YAAa,QAAA,CAAA,IAAa,EAAE,aAAa,QAAA,CAAA,EAAW;AAC1G,IAAA,MAAM,MAAA,GAAS,CAAA;AACf,IAAA,MAAM,MAAA,GAAS,CAAA;AACf,IAAA,IAAI,MAAA,CAAO,MAAA,KAAW,MAAA,CAAO,MAAA,EAAQ,OAAO,KAAA;AAC5C,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,MAAA,IAAI,OAAO,CAAC,CAAA,KAAM,MAAA,CAAO,CAAC,GAAG,OAAO,KAAA;AAAA,IACtC;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,WAAA,CAAY,MAAA,CAAO,CAAW,CAAA,IAAK,EAAE,CAAA,YAAa,QAAA,CAAA,IAAa,CAAC,WAAA,CAAY,MAAA,CAAO,CAAW,CAAA,EAAG,OAAO,KAAA;AAE5G,EAAA,IAAI,UAAA,CAAW,CAAC,CAAA,IAAK,UAAA,CAAW,CAAC,CAAA,EAAG;AAClC,IAAA,MAAM,SAAA,GAAY,CAAA;AAClB,IAAA,MAAM,SAAA,GAAY,CAAA;AAClB,IAAA,IAAI,SAAA,CAAU,OAAO,WAAW,CAAA,KAAM,UAAU,MAAA,CAAO,WAAW,GAAG,OAAO,KAAA;AAC5E,IAAA,OAAO,OAAO,SAAA,CAAU,MAAA,KAAW,UAAA,GAAa,SAAA,CAAU,MAAA,CAAO,CAAC,CAAA,GAAI,SAAA,CAAU,QAAA,EAAS,KAAM,SAAA,CAAU,QAAA,EAAS;AAAA,EACpH;AACA,EAAA,IAAI,UAAA,CAAW,CAAC,CAAA,EAAG,OAAO,KAAA;AAE1B,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG;AACpB,IAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,CAAC,KAAK,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,EAAQ,OAAO,KAAA;AACvD,IAAA,IAAI,OAAA,CAAQ,IAAI,CAAC,CAAA,SAAU,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA;AAC9C,IAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAC,CAAA;AAChB,IAAA,MAAM,MAAA,GAAS,CAAA,CAAE,KAAA,CAAM,CAAC,KAAA,EAAO,KAAA,KAAUA,mBAAAA,CAAmB,KAAA,EAAO,CAAA,CAAE,KAAK,CAAA,EAAG,OAAO,CAAC,CAAA;AACrF,IAAA,OAAA,CAAQ,OAAO,CAAC,CAAA;AAChB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG,OAAO,KAAA;AAE7B,EAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AACzB,IAAA,MAAM,IAAA,GAAO,CAAA;AACb,IAAA,MAAM,IAAA,GAAO,CAAA;AACb,IAAA,IAAI,OAAA,CAAQ,IAAI,IAAI,CAAA,SAAU,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,KAAM,IAAA;AACpD,IAAA,OAAA,CAAQ,GAAA,CAAI,MAAM,IAAI,CAAA;AACtB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAC9B,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAC9B,IAAA,IAAI,KAAA,CAAM,MAAA,KAAW,KAAA,CAAM,MAAA,EAAQ;AACjC,MAAA,OAAA,CAAQ,OAAO,IAAI,CAAA;AACnB,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,CAAC,QAAQ,GAAA,IAAO,IAAA,IAAQA,mBAAAA,CAAmB,IAAA,CAAK,GAAG,CAAA,EAAG,IAAA,CAAK,GAAG,CAAA,EAAG,OAAO,CAAC,CAAA;AACpG,IAAA,OAAA,CAAQ,OAAO,IAAI,CAAA;AACnB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,KAAA;AACT;;;AC9GA,SAAS,WAAA,CAAY,GAAoB,CAAA,EAA4B;AACnE,EAAA,IAAI,OAAO,CAAA,KAAM,OAAO,CAAA,EAAG;AACzB,IAAA,IAAI,CAAA,GAAI,GAAG,OAAO,EAAA;AAClB,IAAA,IAAI,CAAA,GAAI,GAAG,OAAO,CAAA;AAClB,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAO,CAAA,KAAM,QAAA,GAAW,EAAA,GAAK,CAAA;AACtC;AAEO,IAAM,YAAN,MAAsD;AAAA,EAI3D,YAAoB,UAAA,EAA+C;AAA/C,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAAA,EAAgD;AAAA,EAAhD,UAAA;AAAA,EAHZ,GAAA,uBAAU,GAAA,EAAkB;AAAA,EAC5B,aAA0B,EAAC;AAAA,EAI3B,OAAA,CAAQ,KAAW,KAAA,EAAuB;AAChD,IAAA,IAAI,IAAA,GAAO,CAAA;AACX,IAAA,IAAI,KAAA,GAAQ,KAAK,UAAA,CAAW,MAAA;AAE5B,IAAA,IAAI,CAAC,KAAK,UAAA,EAAY;AACpB,MAAA,OAAO,OAAO,KAAA,EAAO;AACnB,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAA,CAAO,IAAA,GAAO,SAAS,CAAC,CAAA;AACzC,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA;AAClC,QAAA,MAAM,aAAA,GAAgB,WAAA,CAAY,GAAA,EAAK,MAAM,CAAA;AAC7C,QAAA,IAAI,aAAA,GAAgB,GAAG,KAAA,GAAQ,GAAA;AAAA,aAAA,IACtB,aAAA,GAAgB,CAAA,EAAG,IAAA,GAAO,GAAA,GAAM,CAAA;AAAA,aACpC,OAAO,GAAA;AAAA,MACd;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,OAAO,KAAA,EAAO;AACnB,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAA,CAAO,IAAA,GAAO,SAAS,CAAC,CAAA;AACzC,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA;AAClC,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,MAAM,CAAA;AACpC,MAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,UAAA,CAAW,KAAA,EAAO,QAAQ,CAAA;AACvD,MAAA,IAAI,eAAA,GAAkB,GAAG,KAAA,GAAQ,GAAA;AAAA,WAAA,IACxB,eAAA,GAAkB,CAAA,EAAG,IAAA,GAAO,GAAA,GAAM,CAAA;AAAA,WACtC;AACH,QAAA,MAAM,aAAA,GAAgB,WAAA,CAAY,GAAA,EAAK,MAAM,CAAA;AAC7C,QAAA,IAAI,aAAA,GAAgB,GAAG,KAAA,GAAQ,GAAA;AAAA,aAAA,IACtB,aAAA,GAAgB,CAAA,EAAG,IAAA,GAAO,GAAA,GAAM,CAAA;AAAA,aACpC,OAAO,GAAA;AAAA,MACd;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,GAAA,CAAI,KAAW,KAAA,EAAqB;AAClC,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA,EAAG;AACrB,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA;AACjC,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,QAAQ,CAAA;AAC3C,MAAA,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,QAAA,EAAU,CAAC,CAAA;AAAA,IACpC;AACA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,KAAK,CAAA;AACrC,IAAA,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,KAAA,EAAO,CAAA,EAAG,GAAG,CAAA;AACpC,IAAA,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AACvB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,IAAI,GAAA,EAA+B;AACjC,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA;AAAA,EACzB;AAAA,EAEA,OAAO,GAAA,EAAoB;AACzB,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,GAAG,GAAG,OAAO,KAAA;AAC/B,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA;AACjC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,QAAQ,CAAA;AACxC,IAAA,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,KAAA,EAAO,CAAC,CAAA;AAC/B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,GAAG,CAAA;AAAA,EAC5B;AAAA,EAEA,IAAI,GAAA,EAAoB;AACtB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA;AAAA,EACzB;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,IAAI,KAAA,EAAM;AACf,IAAA,IAAA,CAAK,aAAa,EAAC;AAAA,EACrB;AAAA,EAEA,IAAI,IAAA,GAAe;AACjB,IAAA,OAAO,KAAK,GAAA,CAAI,IAAA;AAAA,EAClB;AAAA,EAEA,EAAE,MAAA,CAAO,QAAQ,CAAA,GAAsC;AACrD,IAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,UAAA,EAAY,MAAM,CAAC,KAAK,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,GAAG,CAAE,CAAA;AAAA,EACnE;AAAA,EAEA,OAAA,GAA4C;AAC1C,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,EAAE;AAAA,EAC/B;AAAA,EAEA,IAAA,GAA+B;AAC7B,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,QAAQ,CAAA,EAAE;AAAA,EAC1C;AAAA,EAEA,MAAA,GAAmC;AACjC,IAAA,OAAA,CAAQ,aAA0C;AAChD,MAAA,KAAA,MAAW,OAAO,IAAA,CAAK,UAAA,QAAkB,IAAA,CAAK,GAAA,CAAI,IAAI,GAAG,CAAA;AAAA,IAC3D,CAAA,EAAG,KAAK,IAAI,CAAA;AAAA,EACd;AAAA,EAEA,QAAQ,UAAA,EAA8E;AACpF,IAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,UAAA,EAAY,UAAA,CAAW,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA,EAAI,GAAA,EAAK,IAAA,CAAK,GAAG,CAAA;AAAA,EACjF;AACF;;;AC1FA,SAAS,YAAY,KAAA,EAA2D;AAC9E,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,EAAE,KAAA,YAAiB,IAAA,CAAA,IAAS,EAAE,KAAA,YAAiB,MAAA,CAAA;AACvG;AAEA,SAAS,aAAA,CAAc,QAAgB,OAAA,EAAgC;AACrE,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AACzB,IAAA,MAAM,MAAsB,EAAC;AAC7B,IAAA,KAAA,MAAW,GAAA,IAAO,OAAA,CAAQ,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1C,MAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,EAAG,GAAA,CAAI,MAAA,CAAO,GAAG,CAAC,CAAA,GAAI,QAAQ,GAAG,CAAA;AAAA,WAC1E,GAAA,CAAgC,GAAG,CAAA,GAAI,QAAQ,GAAG,CAAA;AAAA,IAC1D;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,OAAO,EAAE,GAAG,OAAA,EAAQ;AACtB;AAEO,SAAS,iBAAA,CACd,QACA,MAAA,EAC8D;AAC9D,EAAA,MAAM,YAA8C,EAAC;AACrD,EAAA,MAAM,UAAwB,EAAC;AAC/B,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAAyE;AAChG,EAAA,MAAM,OAAA,GAA4B;AAAA,IAChC,cAAA,EAAgB,MAAA;AAAA,IAChB,QAAA,EAAU,KAAA;AAAA,IACV,KAAA,EAAO,MAAA;AAAA,IACP,UAAA,EAAY,CAAA;AAAA,IACZ,SAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,YAAA,GAAyC,MAAA,GAC3C,CAAC,aAAA,KAAkB;AACjB,IAAA,MAAA,CAAO,QAAQ,QAAA,GAAW,IAAA;AAC1B,IAAA,MAAA,CAAO,OAAA,CAAQ,SAAA,CAAU,MAAA,CAAO,IAAI,CAAA,GAAI,IAAA;AACxC,IAAC,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAuB,MAAA,CAAO,IAAI,CAAA,GAAI,aAAA;AAAA,EACxD,CAAA,GACA,MAAA;AAEJ,EAAA,MAAM,UAAA,GAAa,MAAoC,aAAA,CAAc,MAAA,EAAQ,OAAO,CAAA;AAEpF,EAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,EAAQ;AAAA,IAC9B,GAAA,CAAI,GAAA,EAAK,IAAA,EAAM,QAAA,EAAU;AACvB,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,MAAM,QAAQ,CAAA;AAC7C,MAAA,IAAI,CAAC,WAAA,CAAY,KAAK,CAAA,EAAG,OAAO,KAAA;AAChC,MAAA,IAAI,UAAA,CAAW,IAAI,IAAI,CAAA,SAAU,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA,CAAG,KAAA;AACvD,MAAA,MAAM,KAAA,GAAQ,kBAAkB,KAAA,EAA2C;AAAA,QACzE,OAAA;AAAA,QACA;AAAA,OACD,CAAA;AACD,MAAA,MAAM,YAAA,GAAe;AAAA,QACnB,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,UAAA,EAAY,MAAM,KAAA,CAAM,UAAA;AAAW,OACrC;AACA,MAAA,UAAA,CAAW,GAAA,CAAI,MAAM,YAAY,CAAA;AACjC,MAAA,OAAO,KAAA,CAAM,KAAA;AAAA,IACf,CAAA;AAAA,IACA,GAAA,CAAI,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO;AACrB,MAAA,OAAA,CAAQ,QAAA,GAAW,IAAA;AACnB,MAAA,OAAA,CAAQ,SAAA,CAAU,IAAI,CAAA,GAAI,IAAA;AAC1B,MAAA,OAAA,CAAQ,IAAI,CAAA,GAAI,KAAA;AAChB,MAAA,IAAI,YAAA,EAAc,YAAA,CAAa,UAAA,EAAY,CAAA;AAC3C,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,cAAA,CAAe,MAAM,IAAA,EAAM;AACzB,MAAA,OAAA,CAAQ,QAAA,GAAW,IAAA;AACnB,MAAA,OAAA,CAAQ,SAAA,CAAU,IAAI,CAAA,GAAI,KAAA;AAC1B,MAAA,OAAO,QAAQ,IAAI,CAAA;AACnB,MAAA,IAAI,YAAA,EAAc,YAAA,CAAa,UAAA,EAAY,CAAA;AAC3C,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,GACD,CAAA;AAED,EAAA,MAAM,kBAAA,GAAqB,UAAA;AAC3B,EAAA,MAAM,kBAAkB,MAAM;AAC5B,IAAA,KAAA,MAAW,CAAC,MAAM,KAAK,CAAA,IAAK,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,EAAS,CAAA,EAAG;AAC5D,MAAA,MAAM,YAAA,GAAe,MAAM,UAAA,EAAW;AACtC,MAAA,IAAI,OAAA,CAAQ,QAAQ,YAAY,CAAA,CAAE,SAAS,CAAA,EAAG,OAAA,CAAQ,IAAI,CAAA,GAAI,YAAA;AAAA,IAChE;AACA,IAAA,OAAO,kBAAA,EAAmB;AAAA,EAC5B,CAAA;AAEA,EAAA,OAAO,EAAE,KAAA,EAAmB,UAAA,EAAY,eAAA,EAAgB;AAC1D;AAEO,SAAS,uBAAyC,OAAA,EAGvD;AACA,EAAA,MAAM,UAAU,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW,iBAAA,CAAkB,MAA0C,CAAC,CAAA;AACrG,EAAA,OAAO;AAAA,IACL,SAAS,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAA,KAAU,MAAM,KAAU,CAAA;AAAA,IAChD,UAAA,EAAY,MAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,YAAY;AAAA,GAC7D;AACF;AAEO,SAAS,kBAAA,CACd,QACA,QAAA,EACkC;AAClC,EAAA,MAAM,EAAE,KAAA,EAAO,UAAA,EAAW,GAAI,kBAAkB,MAA0C,CAAA;AAC1F,EAAA,QAAA,CAAS,KAAU,CAAA;AACnB,EAAA,OAAO,UAAA,EAAW;AACpB;AAEO,SAAS,uBAAA,CACd,SACA,QAAA,EACyC;AACzC,EAAA,MAAM,EAAE,OAAA,EAAS,UAAA,EAAW,GAAI,uBAAuB,OAAO,CAAA;AAC9D,EAAA,QAAA,CAAS,OAAO,CAAA;AAChB,EAAA,OAAO,UAAA,EAAW;AACpB;;;ACtHO,IAAM,kBAAA,GAAqB,CAAC,SAAA,EAAW,SAAA,EAAW,QAAQ,eAAe;AAEzE,SAAS,gBAAgB,KAAA,EAA2D;AACzF,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,IAAQ,mBAAmB,KAAA,CAAM,CAAC,IAAA,KAAS,IAAA,IAAQ,KAAK,CAAA;AACxG;AAEO,SAAS,kBAAA,CACd,GAAA,EACA,YAAA,EACA,QAAA,EACA,MAAA,EACuB;AACvB,EAAA,OAAO,EAAE,SAAS,QAAA,EAAU,OAAA,EAAS,QAAQ,IAAA,EAAM,GAAA,EAAK,eAAe,YAAA,EAAa;AACtF;AAEO,SAAS,yBAAA,CACd,GAAA,EACA,GAAA,EACA,YAAA,EACA,eACA,aAAA,EAC2B;AAC3B,EAAA,MAAM,QAAA,GAAW,GAAA;AACjB,EAAA,OAAO;AAAA,IACL,GAAG,GAAA;AAAA,IACH,OAAA,EAAS,QAAA,CAAS,OAAA,IAAW,aAAA,EAAc;AAAA,IAC3C,OAAA,EAAS,QAAA,CAAS,OAAA,IAAW,aAAA,EAAc;AAAA,IAC3C,IAAA,EAAM,SAAS,IAAA,IAAQ,GAAA;AAAA,IACvB,aAAA,EAAe,SAAS,aAAA,IAAiB;AAAA,GAC3C;AACF;AAEO,SAAS,4BAAA,CACd,IAAA,EACAC,SAAAA,EACA,YAAA,EACuB;AACvB,EAAA,OAAO;AAAA,IACL,SAAS,IAAA,CAAK,KAAA,CAAM,CAAC,GAAA,KAAQ,GAAA,CAAI,YAAY,KAAK,CAAA;AAAA,IAClD,OAAA,EAAS,KAAK,IAAA,CAAK,CAAC,QAAQ,GAAA,CAAI,OAAA,KAAY,OAAO,CAAA,GAAI,OAAA,GAAU,QAAA;AAAA,IACjE,IAAA,EAAMA,SAAAA;AAAA,IACN,aAAA,EAAe;AAAA,GACjB;AACF;AAEO,SAAS,kBAAkB,IAAA,EAAuB;AACvD,EAAA,OAAQ,kBAAA,CAAyC,SAAS,IAAI,CAAA;AAChE;AAEO,SAAS,mBAAmB,IAAA,EAA8B;AAC/D,EAAA,OAAO,KAAK,IAAA,CAAK,CAAC,OAAA,KAAY,iBAAA,CAAkB,OAAO,CAAC,CAAA;AAC1D","file":"index.js","sourcesContent":["/** Error types thrown by ArrowBase and TanStack-compatible surfaces. */\nexport class ArrowBaseError extends Error {\n constructor(message: string, public readonly code: string) {\n super(message);\n this.name = 'ArrowBaseError';\n }\n}\n\nexport class TanStackDBError extends ArrowBaseError {\n constructor(message: string, code = 'E_TANSTACK_DB') {\n super(message, code);\n this.name = 'TanStackDBError';\n }\n}\n\nexport class NonRetriableError extends TanStackDBError {\n constructor(message: string) {\n super(message);\n this.name = 'NonRetriableError';\n }\n}\n\ninterface SchemaIssue {\n message: string;\n path: unknown;\n}\n\nexport class SchemaValidationError extends TanStackDBError {\n readonly type: 'insert' | 'update';\n readonly issues: Array<SchemaIssue>;\n\n constructor(type: 'insert' | 'update', issues: Array<SchemaIssue>, message?: string) {\n const defaultMessage = `${type === 'insert' ? 'Insert' : 'Update'} validation failed: ${issues\n .map((issue) => `\\n- ${issue.message} - path: ${issue.path}`)\n .join('')}`;\n super(message || defaultMessage);\n this.name = 'SchemaValidationError';\n this.type = type;\n this.issues = issues;\n }\n}\n\nexport class DuplicateDbInstanceError extends TanStackDBError {\n constructor() {\n super(`Multiple instances of @tanstack/db detected!\n\nThis causes transaction context to be lost because each instance maintains its own transaction stack.\n\nCommon causes:\n1. Different versions of @tanstack/db installed\n2. Incompatible peer dependency versions in packages\n3. Module resolution issues in bundler configuration\n\nTo fix:\n1. Check installed versions: npm list @tanstack/db (or pnpm/yarn list)\n2. Force a single version using package manager overrides:\n - npm: \"overrides\" in package.json\n - pnpm: \"pnpm.overrides\" in package.json\n - yarn: \"resolutions\" in package.json\n3. Clear node_modules and lockfile, then reinstall\n\nTo temporarily disable this check (not recommended):\nSet environment variable: TANSTACK_DB_DISABLE_DUP_CHECK=1\n\nSee: https://tanstack.com/db/latest/docs/troubleshooting#duplicate-instances`);\n this.name = 'DuplicateDbInstanceError';\n }\n}\n\nexport class SchemaError extends ArrowBaseError {\n constructor(message: string) {\n super(message, 'E_SCHEMA');\n this.name = 'SchemaError';\n }\n}\n\nexport class AllocatorError extends ArrowBaseError {\n constructor(message: string) {\n super(message, 'E_ALLOC');\n this.name = 'AllocatorError';\n }\n}\n\nexport class OutOfSpaceError extends AllocatorError {\n constructor(message = 'segment out of space') {\n super(message);\n this.name = 'OutOfSpaceError';\n }\n}\n\nexport class NotFoundError extends ArrowBaseError {\n constructor(message: string) {\n super(message, 'E_NOT_FOUND');\n this.name = 'NotFoundError';\n }\n}\n\nexport class UndoError extends ArrowBaseError {\n constructor(message: string) {\n super(message, 'E_UNDO');\n this.name = 'UndoError';\n }\n}\n\nexport class ValidationError extends ArrowBaseError {\n constructor(message: string) {\n super(message, 'E_VALIDATION');\n this.name = 'ValidationError';\n }\n}\n\nexport class PersistenceError extends ArrowBaseError {\n constructor(message: string) {\n super(message, 'E_PERSIST');\n this.name = 'PersistenceError';\n }\n}\n\nexport class CollectionConfigurationError extends TanStackDBError {\n constructor(message: string) {\n super(message, 'E_COLLECTION_CONFIG');\n this.name = 'CollectionConfigurationError';\n }\n}\nexport class CollectionRequiresConfigError extends CollectionConfigurationError { constructor() { super('Collection requires a config'); } }\nexport class CollectionRequiresSyncConfigError extends CollectionConfigurationError { constructor() { super('Collection requires a sync config'); } }\nexport class InvalidSchemaError extends CollectionConfigurationError { constructor() { super('Schema must implement the standard-schema interface'); } }\nexport class SchemaMustBeSynchronousError extends CollectionConfigurationError { constructor() { super('Schema validation must be synchronous'); } }\n\nexport class CollectionStateError extends TanStackDBError {\n constructor(message: string) {\n super(message, 'E_COLLECTION_STATE');\n this.name = 'CollectionStateError';\n }\n}\nexport class CollectionInErrorStateError extends CollectionStateError {\n constructor(operation: string, collectionId: string) {\n super(`Cannot perform ${operation} on collection \"${collectionId}\" - collection is in error state. Try calling cleanup() and restarting the collection.`);\n }\n}\nexport class InvalidCollectionStatusTransitionError extends CollectionStateError {\n constructor(from: string, to: string, collectionId: string) {\n super(`Invalid collection status transition from \"${from}\" to \"${to}\" for collection \"${collectionId}\"`);\n }\n}\nexport class CollectionIsInErrorStateError extends CollectionStateError { constructor() { super('Collection is in error state'); } }\nexport class NegativeActiveSubscribersError extends CollectionStateError { constructor() { super('Active subscribers count is negative - this should never happen'); } }\n\nexport class CollectionOperationError extends TanStackDBError {\n constructor(message: string) {\n super(message, 'E_COLLECTION_OPERATION');\n this.name = 'CollectionOperationError';\n }\n}\nexport class UndefinedKeyError extends CollectionOperationError { constructor(item: unknown) { super(`An object was created without a defined key: ${JSON.stringify(item)}`); } }\nexport class InvalidKeyError extends CollectionOperationError {\n constructor(key: unknown, item: unknown) {\n const keyType = key === null ? 'null' : typeof key;\n super(`getKey returned an invalid key type. Expected string or number, but got ${keyType}: ${JSON.stringify(key)}. Item: ${JSON.stringify(item)}`);\n }\n}\nexport class DuplicateKeyError extends CollectionOperationError { constructor(key: string | number) { super(`Cannot insert document with ID \"${key}\" because it already exists in the collection`); } }\nexport class DuplicateKeySyncError extends CollectionOperationError {\n constructor(key: string | number, collectionId: string, options?: { hasCustomGetKey?: boolean; hasDistinct?: boolean; hasJoins?: boolean }) {\n const baseMessage = `Cannot insert document with key \"${key}\" from sync because it already exists in the collection \"${collectionId}\"`;\n if (options?.hasCustomGetKey && options.hasDistinct) {\n super(`${baseMessage}. This collection uses a custom getKey with .distinct(). The .distinct() operator deduplicates by the ENTIRE selected object (standard SQL behavior), but your custom getKey extracts only a subset of fields. This causes multiple distinct rows (with different values in non-key fields) to receive the same key. To fix this, either: (1) ensure your SELECT only includes fields that uniquely identify each row, (2) use .groupBy() with min()/max() aggregates to select one value per group, or (3) remove the custom getKey to use the default key behavior.`);\n } else if (options?.hasCustomGetKey && options.hasJoins) {\n super(`${baseMessage}. This collection uses a custom getKey with joined queries. Joined queries can produce multiple rows with the same key when relationships are not 1:1. Consider: (1) using a composite key in your getKey function (e.g., \\`\\${item.key1}-\\${item.key2}\\`), (2) ensuring your join produces unique rows per key, or (3) removing the custom getKey to use the default composite key behavior.`);\n } else {\n super(baseMessage);\n }\n }\n}\nexport class MissingUpdateArgumentError extends CollectionOperationError { constructor() { super('The first argument to update is missing'); } }\nexport class NoKeysPassedToUpdateError extends CollectionOperationError { constructor() { super('No keys were passed to update'); } }\nexport class UpdateKeyNotFoundError extends CollectionOperationError { constructor(key: string | number) { super(`The key \"${key}\" was passed to update but an object for this key was not found in the collection`); } }\nexport class KeyUpdateNotAllowedError extends CollectionOperationError { constructor(originalKey: string | number, newKey: string | number) { super(`Updating the key of an item is not allowed. Original key: \"${originalKey}\", Attempted new key: \"${newKey}\". Please delete the old item and create a new one if a key change is necessary.`); } }\nexport class NoKeysPassedToDeleteError extends CollectionOperationError { constructor() { super('No keys were passed to delete'); } }\nexport class DeleteKeyNotFoundError extends CollectionOperationError { constructor(key: string | number) { super(`Collection.delete was called with key '${key}' but there is no item in the collection with this key`); } }\n\nexport class MissingHandlerError extends TanStackDBError { constructor(message: string) { super(message, 'E_MISSING_HANDLER'); this.name = 'MissingHandlerError'; } }\nexport class MissingInsertHandlerError extends MissingHandlerError { constructor() { super(\"Collection.insert called directly (not within an explicit transaction) but no 'onInsert' handler is configured.\"); } }\nexport class MissingUpdateHandlerError extends MissingHandlerError { constructor() { super(\"Collection.update called directly (not within an explicit transaction) but no 'onUpdate' handler is configured.\"); } }\nexport class MissingDeleteHandlerError extends MissingHandlerError { constructor() { super(\"Collection.delete called directly (not within an explicit transaction) but no 'onDelete' handler is configured.\"); } }\n\nexport class TransactionError extends TanStackDBError { constructor(message: string) { super(message, 'E_TRANSACTION'); this.name = 'TransactionError'; } }\nexport class MissingMutationFunctionError extends TransactionError { constructor() { super('mutationFn is required when creating a transaction'); } }\nexport class OnMutateMustBeSynchronousError extends TransactionError { constructor() { super('onMutate must be synchronous and cannot return a promise. Remove async/await or returned promises from onMutate.'); } }\nexport class TransactionNotPendingMutateError extends TransactionError { constructor() { super('You can no longer call .mutate() as the transaction is no longer pending'); } }\nexport class TransactionAlreadyCompletedRollbackError extends TransactionError { constructor() { super('You can no longer call .rollback() as the transaction is already completed'); } }\nexport class TransactionNotPendingCommitError extends TransactionError { constructor() { super('You can no longer call .commit() as the transaction is no longer pending'); } }\nexport class NoPendingSyncTransactionWriteError extends TransactionError { constructor() { super('No pending sync transaction to write to'); } }\nexport class SyncTransactionAlreadyCommittedWriteError extends TransactionError { constructor() { super(\"The pending sync transaction is already committed, you can't still write to it.\"); } }\nexport class NoPendingSyncTransactionCommitError extends TransactionError { constructor() { super('No pending sync transaction to commit'); } }\nexport class SyncTransactionAlreadyCommittedError extends TransactionError { constructor() { super(\"The pending sync transaction is already committed, you can't commit it again.\"); } }\n\nexport class QueryBuilderError extends TanStackDBError { constructor(message: string) { super(message, 'E_QUERY_BUILDER'); this.name = 'QueryBuilderError'; } }\nexport class OnlyOneSourceAllowedError extends QueryBuilderError { constructor(context: string) { super(`Only one source is allowed in the ${context}`); } }\nexport class SubQueryMustHaveFromClauseError extends QueryBuilderError { constructor(context: string) { super(`A sub query passed to a ${context} must have a from clause itself`); } }\nexport class InvalidSourceError extends QueryBuilderError { constructor(alias: string) { super(`Invalid source for live query: The value provided for alias \"${alias}\" is not a Collection or subquery. Live queries only accept Collection instances or subqueries. Please ensure you're passing a valid Collection or QueryBuilder, not a plain array or other data type.`); } }\nexport class InvalidSourceTypeError extends QueryBuilderError { constructor(context: string, type: string) { super(`Invalid source for ${context}: Expected an object with a single key-value pair like { alias: collection }. For example: .from({ todos: todosCollection }). Got: ${type}`); } }\nexport class JoinConditionMustBeEqualityError extends QueryBuilderError { constructor() { super('Join condition must be an equality expression'); } }\nexport class QueryMustHaveFromClauseError extends QueryBuilderError { constructor() { super('Query must have a from clause'); } }\nexport class InvalidWhereExpressionError extends QueryBuilderError {\n constructor(valueType: string) {\n super(`Invalid where() expression: Expected a query expression, but received a ${valueType}. This usually happens when using JavaScript's comparison operators (===, !==, <, >, etc.) directly. Instead, use the query builder functions:\\n\\n ❌ .where(({ user }) => user.id === 'abc')\\n ✅ .where(({ user }) => eq(user.id, 'abc'))\\n\\nAvailable comparison functions: eq, gt, gte, lt, lte, and, or, not, like, ilike, isNull, isUndefined`);\n }\n}\n\nexport class QueryCompilationError extends TanStackDBError { constructor(message: string) { super(message, 'E_QUERY_COMPILATION'); this.name = 'QueryCompilationError'; } }\nexport class UnsafeAliasPathError extends QueryCompilationError {\n constructor(segment: string) {\n super(\n `Unsafe alias path segment \"${segment}\" is not allowed in .select(). ` +\n `Aliases must not contain \"__proto__\", \"prototype\", or \"constructor\".`,\n );\n this.name = 'UnsafeAliasPathError';\n }\n}\nexport class DistinctRequiresSelectError extends QueryCompilationError { constructor() { super('DISTINCT requires a SELECT clause.'); } }\nexport class FnSelectWithGroupByError extends QueryCompilationError { constructor() { super('fn.select() cannot be used with groupBy(). groupBy requires the compiler to statically analyze aggregate functions (count, sum, max, etc.) in the SELECT clause, which is not possible with fn.select() since it is an opaque function. Use .select() instead of .fn.select() when combining with groupBy().'); } }\nexport class UnsupportedRootScalarSelectError extends QueryCompilationError { constructor() { super('Top-level scalar select() is not supported by createLiveQueryCollection() or queryOnce(). Return an object from .select(), or use the scalar query inside toArray(...) or concat(toArray(...)).'); } }\nexport class HavingRequiresGroupByError extends QueryCompilationError { constructor() { super('HAVING clause requires GROUP BY clause'); } }\nexport class LimitOffsetRequireOrderByError extends QueryCompilationError { constructor() { super('LIMIT and OFFSET require an ORDER BY clause to ensure deterministic results'); } }\nexport class CollectionInputNotFoundError extends QueryCompilationError { constructor(alias: string, collectionId?: string, availableKeys?: Array<string>) { const details = collectionId ? `alias \"${alias}\" (collection \"${collectionId}\")` : `collection \"${alias}\"`; const availableKeysMsg = availableKeys?.length ? `. Available keys: ${availableKeys.join(', ')}` : ''; super(`Input for ${details} not found in inputs map${availableKeysMsg}`); } }\nexport class DuplicateAliasInSubqueryError extends QueryCompilationError { constructor(alias: string, parentAliases: Array<string>) { super(`Subquery uses alias \"${alias}\" which is already used in the parent query. Each alias must be unique across parent and subquery contexts. Parent query aliases: ${parentAliases.join(', ')}. Please rename \"${alias}\" in either the parent query or subquery to avoid conflicts.`); } }\nexport class UnsupportedFromTypeError extends QueryCompilationError { constructor(type: string) { super(`Unsupported FROM type: ${type}`); } }\nexport class UnknownExpressionTypeError extends QueryCompilationError { constructor(type: string) { super(`Unknown expression type: ${type}`); } }\nexport class EmptyReferencePathError extends QueryCompilationError { constructor() { super('Reference path cannot be empty'); } }\nexport class UnknownFunctionError extends QueryCompilationError { constructor(functionName: string) { super(`Unknown function: ${functionName}`); } }\nexport class JoinCollectionNotFoundError extends QueryCompilationError { constructor(collectionId: string) { super(`Collection \"${collectionId}\" not found during compilation of join`); } }\n\nexport class JoinError extends TanStackDBError { constructor(message: string) { super(message, 'E_JOIN'); this.name = 'JoinError'; } }\nexport class UnsupportedJoinTypeError extends JoinError { constructor(joinType: string) { super(`Unsupported join type: ${joinType}`); } }\nexport class InvalidJoinConditionSameSourceError extends JoinError { constructor(sourceAlias: string) { super(`Invalid join condition: both expressions refer to the same source \"${sourceAlias}\"`); } }\nexport class InvalidJoinConditionSourceMismatchError extends JoinError { constructor() { super('Invalid join condition: expressions must reference source aliases'); } }\nexport class InvalidJoinConditionLeftSourceError extends JoinError { constructor(sourceAlias: string) { super(`Invalid join condition: left expression refers to an unavailable source \"${sourceAlias}\"`); } }\nexport class InvalidJoinConditionRightSourceError extends JoinError { constructor(sourceAlias: string) { super(`Invalid join condition: right expression does not refer to the joined source \"${sourceAlias}\"`); } }\nexport class InvalidJoinCondition extends JoinError { constructor() { super('Invalid join condition'); } }\nexport class UnsupportedJoinSourceTypeError extends JoinError { constructor(type: string) { super(`Unsupported join source type: ${type}`); } }\n\nexport class GroupByError extends TanStackDBError { constructor(message: string) { super(message, 'E_GROUP_BY'); this.name = 'GroupByError'; } }\nexport class NonAggregateExpressionNotInGroupByError extends GroupByError { constructor(alias: string) { super(`Non-aggregate expression '${alias}' in SELECT must also appear in GROUP BY clause`); } }\nexport class UnsupportedAggregateFunctionError extends GroupByError { constructor(functionName: string) { super(`Unsupported aggregate function: ${functionName}`); } }\nexport class AggregateFunctionNotInSelectError extends GroupByError { constructor(functionName: string) { super(`Aggregate function in HAVING clause must also be in SELECT clause: ${functionName}`); } }\nexport class UnknownHavingExpressionTypeError extends GroupByError { constructor(type: string) { super(`Unknown expression type in HAVING clause: ${type}`); } }\n\nexport class StorageError extends TanStackDBError { constructor(message: string) { super(message, 'E_STORAGE'); this.name = 'StorageError'; } }\nexport class SerializationError extends StorageError { constructor(operation: string, originalError: unknown) { super(`Cannot ${operation} item because it cannot be JSON serialized: ${originalError}`); } }\nexport class LocalStorageCollectionError extends StorageError { constructor(message: string) { super(message); this.name = 'LocalStorageCollectionError'; } }\nexport class StorageKeyRequiredError extends LocalStorageCollectionError { constructor() { super('[LocalStorageCollection] storageKey must be provided.'); } }\nexport class InvalidStorageDataFormatError extends LocalStorageCollectionError { constructor(storageKey: string, key: string) { super(`[LocalStorageCollection] Invalid data format in storage key \"${storageKey}\" for key \"${key}\".`); } }\nexport class InvalidStorageObjectFormatError extends LocalStorageCollectionError { constructor(storageKey: string) { super(`[LocalStorageCollection] Invalid data format in storage key \"${storageKey}\". Expected object format.`); } }\n\nexport class SyncCleanupError extends TanStackDBError { constructor(collectionId: string, error: unknown) { const message = error instanceof Error ? error.message : String(error); super(`Collection \"${collectionId}\" sync cleanup function threw an error: ${message}`); this.name = 'SyncCleanupError'; } }\nexport class QueryOptimizerError extends TanStackDBError { constructor(message: string) { super(message, 'E_QUERY_OPTIMIZER'); this.name = 'QueryOptimizerError'; } }\nexport class CannotCombineEmptyExpressionListError extends QueryOptimizerError { constructor() { super('Cannot combine empty expression list'); } }\nexport class WhereClauseConversionError extends QueryOptimizerError { constructor(collectionId: string, alias: string) { super(`Failed to convert WHERE clause to collection filter for collection '${collectionId}' alias '${alias}'. This indicates a bug in the query optimization logic.`); } }\nexport class SubscriptionNotFoundError extends QueryCompilationError { constructor(resolvedAlias: string, originalAlias: string, collectionId: string, availableAliases: Array<string>) { super(`Internal error: subscription for alias '${resolvedAlias}' (remapped from '${originalAlias}', collection '${collectionId}') is missing in join pipeline. Available aliases: ${availableAliases.join(', ')}. This indicates a bug in alias tracking.`); } }\nexport class AggregateNotSupportedError extends QueryCompilationError { constructor() { super('Aggregate expressions are not supported in this context. Use GROUP BY clause for aggregates.'); } }\nexport class MissingAliasInputsError extends QueryCompilationError { constructor(missingAliases: Array<string>) { super(`Internal error: compiler returned aliases without inputs: ${missingAliases.join(', ')}. This indicates a bug in query compilation. Please report this issue.`); } }\nexport class SetWindowRequiresOrderByError extends QueryCompilationError { constructor() { super('setWindow() can only be called on collections with an ORDER BY clause. Add .orderBy() to your query to enable window movement.'); } }\n","/**\n * Column type codes.\n *\n * Fixed-width (Phase 1):\n * Bool, Int/UInt 8..64, Float 32/64\n *\n * Variable-width (Phase 3):\n * Utf8 — raw UTF-8 strings, offsets + values heap\n * DictUtf8 — dictionary-encoded UTF-8; per-row stores a u32 dictionary\n * code, with a sidecar string table (JS-side in v1).\n *\n * Values are stable integers — they are written to the column table in SAB\n * and must not change without a schema-fingerprint bump.\n */\nexport const ColumnTypeCode = {\n Bool: 1,\n Int8: 2,\n Int16: 3,\n Int32: 4,\n Int64: 5,\n UInt8: 6,\n UInt16: 7,\n UInt32: 8,\n UInt64: 9,\n Float32: 10,\n Float64: 11,\n Utf8: 12,\n DictUtf8: 13,\n Binary: 14,\n List: 15,\n Struct: 16,\n Point: 17,\n LineString: 18,\n Polygon: 19,\n} as const;\n\nexport type ColumnTypeCode =\n (typeof ColumnTypeCode)[keyof typeof ColumnTypeCode];\n\nexport type ColumnTypeName =\n | 'bool'\n | 'int8'\n | 'int16'\n | 'int32'\n | 'int64'\n | 'uint8'\n | 'uint16'\n | 'uint32'\n | 'uint64'\n | 'float32'\n | 'float64'\n | 'utf8'\n | 'dict_utf8'\n | 'binary'\n | 'list'\n | 'struct'\n | 'point'\n | 'linestring'\n | 'polygon';\n\nexport const TYPE_NAME_TO_CODE: Record<ColumnTypeName, ColumnTypeCode> = {\n bool: ColumnTypeCode.Bool,\n int8: ColumnTypeCode.Int8,\n int16: ColumnTypeCode.Int16,\n int32: ColumnTypeCode.Int32,\n int64: ColumnTypeCode.Int64,\n uint8: ColumnTypeCode.UInt8,\n uint16: ColumnTypeCode.UInt16,\n uint32: ColumnTypeCode.UInt32,\n uint64: ColumnTypeCode.UInt64,\n float32: ColumnTypeCode.Float32,\n float64: ColumnTypeCode.Float64,\n utf8: ColumnTypeCode.Utf8,\n dict_utf8: ColumnTypeCode.DictUtf8,\n binary: ColumnTypeCode.Binary,\n list: ColumnTypeCode.List,\n struct: ColumnTypeCode.Struct,\n point: ColumnTypeCode.Point,\n linestring: ColumnTypeCode.LineString,\n polygon: ColumnTypeCode.Polygon,\n};\n\n/** True for variable-width columns that need a values heap. */\nexport function isVariableWidth(code: ColumnTypeCode): boolean {\n return code === ColumnTypeCode.Utf8 || code === ColumnTypeCode.Binary;\n}\n\n/** True for dictionary-encoded columns that need a JS-side dict table. */\nexport function isDictionary(code: ColumnTypeCode): boolean {\n return code === ColumnTypeCode.DictUtf8;\n}\n\n/** True for list columns (offsets + child buffer). */\nexport function isListType(code: ColumnTypeCode): boolean {\n return code === ColumnTypeCode.List;\n}\n\n/** True for struct columns (child columns + parent validity). */\nexport function isStructType(code: ColumnTypeCode): boolean {\n return code === ColumnTypeCode.Struct;\n}\n\n/** True for geo columns with custom physical storage. */\nexport function isGeoType(code: ColumnTypeCode): boolean {\n return (\n code === ColumnTypeCode.Point ||\n code === ColumnTypeCode.LineString ||\n code === ColumnTypeCode.Polygon\n );\n}\n\n/** True for primitive types allowed as list items in v1 (no nested/geo columns). */\nexport function isLeafType(code: ColumnTypeCode): boolean {\n return !isListType(code) && !isStructType(code) && !isGeoType(code);\n}\n\n/**\n * Byte width of a single element for fixed-width columns. For variable-width\n * columns (Utf8), returns the offsets array element width (i32 = 4).\n * Dict columns store a u32 code per row (= 4).\n */\nexport function byteWidthOf(code: ColumnTypeCode): number {\n switch (code) {\n case ColumnTypeCode.Bool:\n case ColumnTypeCode.Int8:\n case ColumnTypeCode.UInt8:\n return 1;\n case ColumnTypeCode.Int16:\n case ColumnTypeCode.UInt16:\n return 2;\n case ColumnTypeCode.Int32:\n case ColumnTypeCode.UInt32:\n case ColumnTypeCode.Float32:\n case ColumnTypeCode.Utf8: // offsets array element\n case ColumnTypeCode.Binary: // offsets array element\n case ColumnTypeCode.DictUtf8:\n case ColumnTypeCode.List: // offsets array element (range pairs into child)\n case ColumnTypeCode.LineString: // offsets array element (range pairs into coordinate child)\n case ColumnTypeCode.Polygon: // offsets array element (range pairs into ring child)\n return 4;\n case ColumnTypeCode.Int64:\n case ColumnTypeCode.UInt64:\n case ColumnTypeCode.Float64:\n return 8;\n case ColumnTypeCode.Point:\n // Two Float64 coordinates: [lng, lat].\n return 16;\n case ColumnTypeCode.Struct:\n // Struct itself allocates no primary buffer — it is a grouping\n // over its child columns. We still keep a validity bitmap if the\n // struct column is nullable. 0 signals \"skip primary allocation\".\n return 0;\n }\n}\n\n/** JS value type for each column type. */\nexport type PointValue = readonly [lng: number, lat: number];\nexport type LineStringValue = readonly PointValue[];\nexport type PolygonValue = readonly LineStringValue[];\n\nexport type ValueOf<T extends ColumnTypeName> = T extends 'bool'\n ? boolean\n : T extends 'int64' | 'uint64'\n ? bigint\n : T extends 'utf8' | 'dict_utf8'\n ? string\n : T extends 'binary'\n ? Uint8Array\n : T extends 'list'\n ? readonly unknown[]\n : T extends 'struct'\n ? Record<string, unknown>\n : T extends 'point'\n ? PointValue\n : T extends 'linestring'\n ? LineStringValue\n : T extends 'polygon'\n ? PolygonValue\n : number;\n","import { SchemaError } from '../errors.js';\nimport {\n type ColumnTypeName,\n type ColumnTypeCode,\n TYPE_NAME_TO_CODE,\n byteWidthOf,\n isVariableWidth,\n isListType,\n isStructType,\n isLeafType,\n isGeoType,\n ColumnTypeCode as TypeCode,\n} from './types.js';\n\n/** User-facing column definition. */\nexport interface ColumnDef {\n type: ColumnTypeName;\n /** If false (default), nulls are not allowed and no validity bitmap is kept. */\n nullable?: boolean;\n /**\n * For `utf8`/`binary` columns: total bytes reserved for the values\n * heap. For `list<utf8>`/`list<binary>` columns: bytes reserved for\n * the **child** heap. Defaults to `32 * capacity` otherwise.\n */\n valuesHeapBytes?: number;\n /** Required when `type === 'list'`. The child element type. */\n items?: ColumnDef;\n /** Required when `type === 'struct'`. Map of field name → def. */\n fields?: Record<string, ColumnDef>;\n /** For polygon columns: append first point when a ring is open. */\n autoCloseRings?: boolean;\n}\n\n/** User-facing schema definition input. */\nexport interface SchemaInput {\n name: string;\n /**\n * Primary key must be a `uint32` column in Phase 1. Defaults to `__id`\n * if present.\n */\n primaryKey?: string;\n columns: Record<string, ColumnDef>;\n}\n\n/** Compiled, immutable schema describing a collection's columns. */\nexport interface CompiledColumn {\n readonly name: string;\n readonly index: number;\n readonly type: ColumnTypeName;\n readonly typeCode: ColumnTypeCode;\n /**\n * For fixed-width columns: byte width of a single element.\n * For Utf8/Binary: byte width of the offsets-array element (i32 = 4).\n * For DictUtf8: byte width of a code (u32 = 4).\n * For List: byte width of the offsets-array element (i32 = 4).\n * For Struct: 0 (no primary buffer — fields carry the storage).\n */\n readonly byteWidth: number;\n readonly nullable: boolean;\n /**\n * For utf8/binary columns: total bytes reserved in the values heap.\n * For list<utf8>/list<binary> columns: bytes reserved for the child heap.\n * Undefined uses the default (32 bytes per row).\n */\n readonly valuesHeapBytes: number | undefined;\n /**\n * For List columns: the compiled child element column. `index === -1`\n * on the child to signal \"this is not a top-level column\". Its\n * `byteWidth` drives child-array allocation. Child is always a leaf\n * type (primitive, utf8, dict_utf8, binary, or bool) in v1.\n */\n readonly childColumn?: CompiledColumn;\n /**\n * For Struct columns: child field columns in declaration order. Each\n * field column has `index` ≥ 0 but is *not* present in the top-level\n * `columns` array of the parent schema — fields live only on their\n * struct parent. Nested structs and list-fields are rejected in v1.\n */\n readonly fields?: readonly CompiledColumn[];\n readonly fieldsByName?: ReadonlyMap<string, CompiledColumn>;\n /** Polygon-only storage option. */\n readonly autoCloseRings?: boolean;\n}\n\nexport interface CompiledSchema {\n readonly name: string;\n readonly primaryKey: string;\n readonly primaryKeyIndex: number;\n readonly columns: readonly CompiledColumn[];\n readonly columnsByName: ReadonlyMap<string, CompiledColumn>;\n readonly fingerprint: bigint;\n}\n\nconst DEFAULT_PK = '__id';\n\n/**\n * Compile a user schema into the immutable layout used by allocators and\n * collections. Validates:\n * - non-empty column set\n * - no duplicate names\n * - PK exists and has type uint32 (Phase 1 constraint)\n * - all column types are supported\n */\nexport function defineSchema(input: SchemaInput): CompiledSchema {\n if (!input.name || input.name.length === 0) {\n throw new SchemaError('schema.name is required');\n }\n\n const entries = Object.entries(input.columns);\n if (entries.length === 0) {\n throw new SchemaError(`schema \"${input.name}\" must declare at least one column`);\n }\n\n const seen = new Set<string>();\n const columns: CompiledColumn[] = [];\n for (let i = 0; i < entries.length; i++) {\n const [name, def] = entries[i]!;\n if (seen.has(name)) {\n throw new SchemaError(`duplicate column \"${name}\"`);\n }\n seen.add(name);\n const compiled = compileColumn(name, def, i, {\n allowList: true,\n allowStruct: true,\n isChild: false,\n });\n columns.push(compiled);\n }\n\n const pkName = input.primaryKey ?? DEFAULT_PK;\n const pk = columns.find((c) => c.name === pkName);\n if (!pk) {\n throw new SchemaError(\n `primary key column \"${pkName}\" is not declared on schema \"${input.name}\"`,\n );\n }\n if (pk.type !== 'uint32') {\n throw new SchemaError(\n `Phase 1 only supports uint32 primary keys; \"${pk.name}\" is ${pk.type}`,\n );\n }\n if (pk.nullable) {\n throw new SchemaError(`primary key \"${pk.name}\" cannot be nullable`);\n }\n\n const fingerprint = computeFingerprint(input.name, columns);\n\n return {\n name: input.name,\n primaryKey: pk.name,\n primaryKeyIndex: pk.index,\n columns,\n columnsByName: new Map(columns.map((c) => [c.name, c])),\n fingerprint,\n };\n}\n\n/**\n * Deterministic 64-bit fingerprint over `(name, [(colName, typeCode,\n * nullable)...])`. Not cryptographic; used only to detect cross-segment\n * schema mismatch.\n */\nfunction computeFingerprint(\n name: string,\n columns: readonly CompiledColumn[],\n): bigint {\n // FNV-1a 64-bit\n let h = 0xcbf29ce484222325n;\n const prime = 0x100000001b3n;\n const mask = 0xffffffffffffffffn;\n\n const mix = (s: string): void => {\n for (let i = 0; i < s.length; i++) {\n h = ((h ^ BigInt(s.charCodeAt(i))) * prime) & mask;\n }\n h = ((h ^ 0xffn) * prime) & mask; // field separator\n };\n\n const mixColumn = (c: CompiledColumn): void => {\n mix(c.name);\n h = ((h ^ BigInt(c.typeCode)) * prime) & mask;\n h = ((h ^ (c.nullable ? 1n : 0n)) * prime) & mask;\n if (c.autoCloseRings) h = ((h ^ 1n) * prime) & mask;\n if (c.childColumn) mixColumn(c.childColumn);\n if (c.fields) {\n for (const f of c.fields) mixColumn(f);\n }\n };\n\n mix(name);\n for (const c of columns) mixColumn(c);\n return h;\n}\n\ninterface CompileCtx {\n allowList: boolean;\n allowStruct: boolean;\n isChild: boolean;\n}\n\nfunction compileColumn(\n name: string,\n def: ColumnDef,\n index: number,\n ctx: CompileCtx,\n): CompiledColumn {\n const typeCode = TYPE_NAME_TO_CODE[def.type];\n if (typeCode === undefined) {\n throw new SchemaError(`unknown column type \"${def.type}\" on \"${name}\"`);\n }\n\n // Validate nested type restrictions.\n if (ctx.isChild && isGeoType(typeCode)) {\n throw new SchemaError(\n `geo columns cannot be nested inside list/struct (column \"${name}\")`,\n );\n }\n if (isListType(typeCode) && !ctx.allowList) {\n throw new SchemaError(\n `list columns cannot be nested inside another list/struct (column \"${name}\")`,\n );\n }\n if (isStructType(typeCode) && !ctx.allowStruct) {\n throw new SchemaError(\n `struct columns cannot be nested inside another list/struct (column \"${name}\")`,\n );\n }\n\n // valuesHeapBytes validation.\n if (def.autoCloseRings !== undefined) {\n if (typeCode !== TypeCode.Polygon) {\n throw new SchemaError(\n `autoCloseRings is only valid on polygon columns; \"${name}\" is ${def.type}`,\n );\n }\n if (typeof def.autoCloseRings !== 'boolean') {\n throw new SchemaError(`autoCloseRings on \"${name}\" must be boolean`);\n }\n }\n\n if (def.valuesHeapBytes !== undefined) {\n const valid =\n isVariableWidth(typeCode) ||\n // list<utf8|binary> — heap lives on the child.\n (isListType(typeCode) &&\n def.items !== undefined &&\n isVariableWidth(TYPE_NAME_TO_CODE[def.items.type]!));\n if (!valid) {\n throw new SchemaError(\n `valuesHeapBytes is only valid on utf8/binary columns or list<utf8|binary>; \"${name}\" is ${def.type}`,\n );\n }\n if (!Number.isInteger(def.valuesHeapBytes) || def.valuesHeapBytes <= 0) {\n throw new SchemaError(\n `valuesHeapBytes on \"${name}\" must be a positive integer`,\n );\n }\n }\n\n let childColumn: CompiledColumn | undefined;\n let fields: readonly CompiledColumn[] | undefined;\n let fieldsByName: ReadonlyMap<string, CompiledColumn> | undefined;\n\n if (isListType(typeCode)) {\n if (!def.items) {\n throw new SchemaError(`list column \"${name}\" requires an \"items\" type`);\n }\n const childCode = TYPE_NAME_TO_CODE[def.items.type];\n if (childCode === undefined) {\n throw new SchemaError(\n `unknown list item type \"${def.items.type}\" on \"${name}\"`,\n );\n }\n if (isGeoType(childCode)) {\n throw new SchemaError(\n `geo columns cannot be nested inside list/struct (column \"${name}.items\")`,\n );\n }\n if (!isLeafType(childCode)) {\n throw new SchemaError(\n `list items must be a leaf type (primitive only; no nested list/struct/geo); \"${name}.items\" is ${def.items.type}`,\n );\n }\n // Child values heap lives on the list column, not the items def —\n // forward the parent's heap sizing when items is utf8/binary.\n const heap = def.valuesHeapBytes ?? def.items.valuesHeapBytes;\n const childDef: ColumnDef = {\n ...def.items,\n ...(heap !== undefined ? { valuesHeapBytes: heap } : {}),\n };\n childColumn = compileColumn(`${name}.items`, childDef, -1, {\n allowList: false,\n allowStruct: false,\n isChild: true,\n });\n } else if (isStructType(typeCode)) {\n if (!def.fields || Object.keys(def.fields).length === 0) {\n throw new SchemaError(\n `struct column \"${name}\" requires a non-empty \"fields\" map`,\n );\n }\n const fieldList: CompiledColumn[] = [];\n const byName = new Map<string, CompiledColumn>();\n let fi = 0;\n for (const [fname, fdef] of Object.entries(def.fields)) {\n if (byName.has(fname)) {\n throw new SchemaError(\n `duplicate field \"${fname}\" in struct column \"${name}\"`,\n );\n }\n const compiled = compileColumn(`${name}.${fname}`, fdef, fi++, {\n allowList: false,\n allowStruct: false,\n isChild: true,\n });\n fieldList.push(compiled);\n byName.set(fname, compiled);\n }\n fields = fieldList;\n fieldsByName = byName;\n } else if (def.items !== undefined) {\n throw new SchemaError(\n `only list columns accept \"items\"; \"${name}\" is ${def.type}`,\n );\n } else if (def.fields !== undefined) {\n throw new SchemaError(\n `only struct columns accept \"fields\"; \"${name}\" is ${def.type}`,\n );\n }\n\n return {\n name,\n index,\n type: def.type,\n typeCode,\n byteWidth: byteWidthOf(typeCode),\n nullable: def.nullable ?? false,\n valuesHeapBytes: def.valuesHeapBytes,\n ...(def.autoCloseRings !== undefined ? { autoCloseRings: def.autoCloseRings } : {}),\n ...(childColumn ? { childColumn } : {}),\n ...(fields ? { fields } : {}),\n ...(fieldsByName ? { fieldsByName } : {}),\n };\n}\n","/**\n * Helpers for atomic / packed 64-bit access and seqlock-style reads.\n *\n * Phase 1 is single-writer within a process; these helpers exist so we can\n * evolve toward multi-writer and cross-worker use without refactoring the\n * collection layer.\n */\n\n/** Align a byte offset up to the given power-of-two boundary. */\nexport function alignUp(value: number, alignment: number): number {\n if ((alignment & (alignment - 1)) !== 0) {\n throw new Error(`alignment must be a power of two, got ${alignment}`);\n }\n return (value + alignment - 1) & ~(alignment - 1);\n}\n\n/** Arrow buffer alignment — 64 bytes per Arrow columnar format spec. */\nexport const ARROW_ALIGN = 64;\n\n/** Read a u64 from an Int32Array-backed view without BigInt64Array. */\nexport function readU64LE(i32: Int32Array, wordIndex: number): bigint {\n const lo = BigInt(i32[wordIndex]! >>> 0);\n const hi = BigInt(i32[wordIndex + 1]! >>> 0);\n return (hi << 32n) | lo;\n}\n\n/** Write a u64 into an Int32Array-backed view. */\nexport function writeU64LE(\n i32: Int32Array,\n wordIndex: number,\n value: bigint,\n): void {\n const lo = Number(value & 0xffffffffn) | 0;\n const hi = Number((value >> 32n) & 0xffffffffn) | 0;\n i32[wordIndex] = lo;\n i32[wordIndex + 1] = hi;\n}\n\n/** Atomically increment a u32 word, returning the new value. */\nexport function atomicIncU32(i32: Int32Array, wordIndex: number): number {\n // Treat as unsigned; Atomics.add returns the previous value.\n return (Atomics.add(i32, wordIndex, 1) + 1) >>> 0;\n}\n\n/** Atomically load a u32 word. */\nexport function atomicLoadU32(i32: Int32Array, wordIndex: number): number {\n return Atomics.load(i32, wordIndex) >>> 0;\n}\n\n/** Atomically store a u32 word. */\nexport function atomicStoreU32(\n i32: Int32Array,\n wordIndex: number,\n value: number,\n): void {\n Atomics.store(i32, wordIndex, value | 0);\n}\n","import { OutOfSpaceError } from '../errors.js';\nimport { ARROW_ALIGN, alignUp } from './atomics.js';\n\n/**\n * A Segment wraps a single SharedArrayBuffer (or ArrayBuffer fallback) and\n * manages bump allocation inside it. Allocations are 64-byte aligned to\n * satisfy Arrow buffer alignment.\n *\n * Phase 1 uses only a bump allocator; freelist / compaction lands later.\n */\nexport class Segment {\n readonly buffer: SharedArrayBuffer | ArrayBuffer;\n readonly byteLength: number;\n private cursor: number;\n\n constructor(\n buffer: SharedArrayBuffer | ArrayBuffer,\n /** Initial cursor position. Useful when rehydrating from a handoff. */\n initialCursor = 0,\n ) {\n this.buffer = buffer;\n this.byteLength = buffer.byteLength;\n if (initialCursor < 0 || initialCursor > this.byteLength) {\n throw new RangeError(\n `initialCursor ${initialCursor} out of range [0, ${this.byteLength}]`,\n );\n }\n this.cursor = initialCursor;\n }\n\n /** Remaining byte capacity from the current cursor. */\n get remaining(): number {\n return this.byteLength - this.cursor;\n }\n\n /** Current bump cursor (byte offset of next allocation). */\n get used(): number {\n return this.cursor;\n }\n\n /**\n * Allocate `byteLength` bytes aligned to `alignment` (default Arrow 64B).\n * Returns the starting byte offset inside `buffer`.\n * Throws `OutOfSpaceError` if the segment cannot fit the request.\n */\n allocate(byteLength: number, alignment: number = ARROW_ALIGN): number {\n if (byteLength < 0 || !Number.isInteger(byteLength)) {\n throw new RangeError(`byteLength must be a non-negative integer`);\n }\n const aligned = alignUp(this.cursor, alignment);\n const end = aligned + byteLength;\n if (end > this.byteLength) {\n throw new OutOfSpaceError(\n `segment allocate(${byteLength}) failed: used=${this.cursor}, cap=${this.byteLength}`,\n );\n }\n this.cursor = end;\n return aligned;\n }\n\n /** Return the underlying buffer as a typed view slice (copies the handle only). */\n u8View(offset = 0, byteLength = this.byteLength - offset): Uint8Array {\n return new Uint8Array(this.buffer, offset, byteLength);\n }\n\n i32View(offset = 0, length?: number): Int32Array {\n const l = length ?? (this.byteLength - offset) >>> 2;\n return new Int32Array(this.buffer, offset, l);\n }\n}\n\n/** Create a Segment backed by SAB if available, else a plain ArrayBuffer. */\nexport function createSegment(byteLength: number): Segment {\n const buf = canUseSab()\n ? new SharedArrayBuffer(byteLength)\n : new ArrayBuffer(byteLength);\n return new Segment(buf);\n}\n\nfunction canUseSab(): boolean {\n // `SharedArrayBuffer` may be undefined in test or hardened environments.\n return typeof SharedArrayBuffer !== 'undefined';\n}\n","/**\n * Query IR — `@tanstack/db` parity.\n *\n * This module mirrors `@tanstack/db/dist/esm/query/ir.d.ts` field-for-\n * field. Expression classes carry `type` brands matching upstream\n * ('collectionRef', 'queryRef', 'ref', 'val', 'func', 'agg',\n * 'includesSubquery') so that code that walks the IR by `type` tag\n * works identically on either runtime.\n *\n * We deliberately do NOT import from `@tanstack/db` here — Layer C\n * has zero runtime dep on upstream (types only). Field names are\n * kept identical for structural interop; semantic behavior for\n * Layer-C-unsupported features (IncludesSubquery, residual WHERE) is\n * defined but not yet compiled.\n */\n\nimport type { Collection } from '../collection/collection.js';\nimport type { StringCollationConfig } from '../tanstack-types.js';\n\n// ---------------------------------------------------------------------\n// Top-level IR\n// ---------------------------------------------------------------------\n\n/** A row keyed by source alias. Mirrors `@tanstack/db`'s `NamespacedRow`. */\nexport type NamespacedRow = Record<string, Record<string, unknown>>;\n\n/**\n * Root IR shape for a query. Every builder emits a `QueryIR` via\n * `_getQuery()`; every compiler consumes one. Matches\n * `@tanstack/db`'s `QueryIR` field-for-field.\n */\nexport interface QueryIR {\n from: From;\n select?: Select;\n join?: Join;\n where?: Array<Where>;\n groupBy?: GroupBy;\n having?: Array<Having>;\n orderBy?: OrderBy;\n limit?: Limit;\n offset?: Offset;\n distinct?: true;\n singleResult?: true;\n /**\n * Functional SELECT — JS closure invoked per row. Bypasses the\n * vectorized compile path; used by `builder.fn.select(cb)`.\n */\n fnSelect?: (row: NamespacedRow) => unknown;\n /**\n * Functional WHERE — JS closure invoked per row. ANDed with any\n * structural `where` entries. Populated by `builder.fn.where(cb)`.\n */\n fnWhere?: Array<(row: NamespacedRow) => unknown>;\n /**\n * Functional HAVING — evaluated against grouped rows. Populated by\n * `builder.fn.having(cb)`.\n */\n fnHaving?: Array<(row: NamespacedRow) => unknown>;\n}\n\n/**\n * Materialization strategy for `IncludesSubquery`. Layer F owns\n * the runtime; Layer C accepts the tag structurally.\n */\nexport type IncludesMaterialization = 'collection' | 'array' | 'concat' | 'single';\n\n/**\n * Synthetic field name used by `IncludesSubquery` scalar paths.\n * Matches upstream literal ('__includes_scalar__').\n */\nexport const INCLUDES_SCALAR_FIELD = '__includes_scalar__';\n\nexport type From = CollectionRef | QueryRef;\n\nexport type Select = {\n [alias: string]: BasicExpression | Aggregate | Select | IncludesSubquery;\n};\n\nexport type Join = Array<JoinClause>;\n\nexport interface JoinClause {\n from: CollectionRef | QueryRef;\n type: 'left' | 'right' | 'inner' | 'outer' | 'full' | 'cross';\n left: BasicExpression;\n right: BasicExpression;\n}\n\n/**\n * A WHERE clause entry. Either a bare expression or a\n * `{ expression, residual? }` object. The `residual` flag marks\n * a predicate that the optimizer couldn't push into an index scan\n * — present for interop; Layer C treats residual and non-residual\n * identically (Layer D's index optimizer will start emitting them).\n */\nexport type Where =\n | BasicExpression<boolean>\n | {\n expression: BasicExpression<boolean>;\n residual?: boolean;\n };\n\nexport type GroupBy = Array<BasicExpression>;\nexport type Having = Where;\n\nexport type OrderBy = Array<OrderByClause>;\nexport interface OrderByClause {\n expression: BasicExpression;\n compareOptions: CompareOptions;\n}\n\nexport type OrderByDirection = 'asc' | 'desc';\n\n/**\n * Full compare options for an orderBy expression. Extends the\n * shared string-collation config with direction + null-sort mode.\n * Matches `@tanstack/db`'s `CompareOptions`.\n */\nexport type CompareOptions = StringCollationConfig & {\n direction: OrderByDirection;\n nulls: 'first' | 'last';\n};\n\nexport type Limit = number;\nexport type Offset = number;\n\n// ---------------------------------------------------------------------\n// Expression classes\n// ---------------------------------------------------------------------\n\n/**\n * Common base for every IR expression node. Carries a `type` brand\n * checked by `isExpressionLike` and the compiler's walk.\n */\nabstract class BaseExpression<T = unknown> {\n abstract type: string;\n /** @internal — phantom type carrier for TS inference. */\n readonly __returnType!: T;\n}\n\n/** Reference to a base Collection at a given alias. */\nexport class CollectionRef extends BaseExpression {\n readonly type = 'collectionRef' as const;\n constructor(\n public collection: Collection,\n public alias: string,\n ) {\n super();\n }\n}\n\n/** Reference to a subquery (nested `QueryIR`) at a given alias. */\nexport class QueryRef extends BaseExpression {\n readonly type = 'queryRef' as const;\n constructor(\n public query: QueryIR,\n public alias: string,\n ) {\n super();\n }\n}\n\n/** Column / property reference. `path = ['alias', 'col', 'nested']`. */\nexport class PropRef<T = unknown> extends BaseExpression<T> {\n readonly type = 'ref' as const;\n constructor(public path: Array<string>) {\n super();\n }\n}\n\n/** Literal value wrapped as an expression. */\nexport class Value<T = unknown> extends BaseExpression<T> {\n readonly type = 'val' as const;\n constructor(public value: T) {\n super();\n }\n}\n\n/**\n * Scalar function call. `name` is one of the upstream operator\n * literals ('eq' / 'gt' / 'upper' / etc.); `args` are expressions.\n */\nexport class Func<T = unknown> extends BaseExpression<T> {\n readonly type = 'func' as const;\n constructor(\n public name: string,\n public args: Array<BasicExpression>,\n ) {\n super();\n }\n}\n\nexport type BasicExpression<T = unknown> = PropRef<T> | Value<T> | Func<T>;\n\n/**\n * Aggregate function call. Separated from `Func` because aggregates\n * can appear in `select` / `having` but not in `where`. Name is\n * 'count' / 'sum' / 'avg' / 'min' / 'max'.\n */\nexport class Aggregate<T = unknown> extends BaseExpression<T> {\n readonly type = 'agg' as const;\n constructor(\n public name: string,\n public args: Array<BasicExpression>,\n ) {\n super();\n }\n}\n\n/**\n * Correlated subquery projected into a parent select clause.\n * Full runtime lands in Layer F (IVM); the class shape is shipped\n * now so IR walkers can skip it cleanly.\n */\nexport class IncludesSubquery extends BaseExpression {\n readonly type = 'includesSubquery' as const;\n constructor(\n /** Child query, with the correlation predicate stripped. */\n public query: QueryIR,\n /** Parent-side correlation ref (e.g. `project.id`). */\n public correlationField: PropRef,\n /** Child-side correlation ref (e.g. `issue.projectId`). */\n public childCorrelationField: PropRef,\n /** Result field name on the parent row (e.g. `\"issues\"`). */\n public fieldName: string,\n /** Parent-scope WHERE clauses to apply post-join. */\n public parentFilters?: Array<Where>,\n /** Parent-scope refs consumed by `parentFilters`. */\n public parentProjection?: Array<PropRef>,\n /** Shape of the projected result. Default 'collection'. */\n public materialization: IncludesMaterialization = 'collection',\n /** Field name when materialization is 'concat' scalar. */\n public scalarField?: string,\n ) {\n super();\n }\n}\n\n// ---------------------------------------------------------------------\n// Runtime helpers (mirrors @tanstack/db)\n// ---------------------------------------------------------------------\n\n/**\n * Detects whether `value` is an IR expression object. Used by ref-\n * proxy conversion and compiler walks. Matches upstream semantics.\n */\nexport function isExpressionLike(value: unknown): boolean {\n if (value === null || typeof value !== 'object') return false;\n const t = (value as { type?: unknown }).type;\n return (\n t === 'ref' ||\n t === 'val' ||\n t === 'func' ||\n t === 'agg' ||\n t === 'collectionRef' ||\n t === 'queryRef' ||\n t === 'includesSubquery'\n );\n}\n\nfunction isWrappedWhere(where: Where): where is { expression: BasicExpression<boolean>; residual?: boolean } {\n return where !== null && typeof where === 'object' && Object.prototype.hasOwnProperty.call(where, 'expression');\n}\n\n/** Extract the boolean expression from a `Where` entry. */\nexport function getWhereExpression(where: Where): BasicExpression<boolean> {\n if (isWrappedWhere(where)) {\n return where.expression;\n }\n return where as BasicExpression<boolean>;\n}\n\n/**\n * Extract the expression from a `Having` entry. HAVING clauses may\n * contain aggregates, unlike plain WHERE.\n */\nexport function getHavingExpression(\n having: Having,\n): BasicExpression | Aggregate {\n if (isWrappedWhere(having)) {\n return having.expression;\n }\n return having as BasicExpression | Aggregate;\n}\n\n/** Is this `Where` entry marked residual (post-index-scan)? */\nexport function isResidualWhere(where: Where): boolean {\n return (\n where !== null &&\n typeof where === 'object' &&\n 'expression' in where &&\n where.residual === true\n );\n}\n\n/** Wrap a bare boolean expression as a residual `Where`. */\nexport function createResidualWhere(\n expression: BasicExpression<boolean>,\n): Where {\n return { expression, residual: true };\n}\n\n/**\n * Walk a `PropRef`'s first alias segment back through any\n * enclosing `QueryRef`s to reach the underlying `Collection` and\n * the remaining column-path. Returns `undefined` if the ref can't\n * be resolved to a collection (e.g. it points at a computed\n * SELECT field; Layer F's optimizer is the only caller today).\n */\nexport function followRef(\n query: QueryIR,\n ref: PropRef<unknown>,\n collection: Collection,\n):\n | {\n collection: Collection;\n path: Array<string>;\n }\n | undefined {\n if (ref.path.length === 0) return undefined;\n const [alias, ...rest] = ref.path;\n if (alias === undefined) return undefined;\n\n const from = query.from;\n if (from.type === 'collectionRef' && from.alias === alias) {\n return { collection: from.collection, path: rest };\n }\n if (from.type === 'queryRef' && from.alias === alias) {\n // Subquery path: recurse into the nested query using the same\n // starting collection. This is best-effort in Layer C; Layer F\n // hardens it against nested subqueries and computed SELECTs.\n const inner: PropRef<unknown> = new PropRef(rest);\n return followRef(from.query, inner, collection);\n }\n // Joins: scan clauses for a matching alias.\n if (query.join) {\n for (const j of query.join) {\n if (j.from.type === 'collectionRef' && j.from.alias === alias) {\n return { collection: j.from.collection, path: rest };\n }\n if (j.from.type === 'queryRef' && j.from.alias === alias) {\n const inner: PropRef<unknown> = new PropRef(rest);\n return followRef(j.from.query, inner, collection);\n }\n }\n }\n return undefined;\n}\n","/**\n * Ref proxies — `@tanstack/db` parity (Layer C.2).\n *\n * A ref proxy is a JS Proxy that records every property access as a\n * path segment, materialized into a `PropRef` by `toExpression`.\n * Every builder callback (`where`, `select`, `orderBy`, etc.) is\n * passed either:\n * - a root proxy (multiple aliases): `({ users, posts }) => eq(users.id, posts.userId)`\n * - a single-row proxy: `(row) => row.name`\n * - a with-selected proxy: `({ posts, $selected }) => $selected.count`\n *\n * Runtime matches `@tanstack/db/query/builder/ref-proxy.js` gesture-\n * for-gesture; type layer is looser (we use `any` in a few places\n * where upstream's inference is too deep for our scope). The\n * conformance test in C.11 catches meaningful regressions.\n */\n\nimport {\n Func,\n isExpressionLike,\n PropRef,\n Value,\n type BasicExpression,\n} from './ir.js';\n\n// ---------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------\n\n/**\n * Brand carried by every ref-proxy leaf. Matches upstream's\n * `RefProxy<T>` shape; `__path` is the access trail.\n */\nexport interface RefProxy<T = unknown> {\n /** @internal */\n readonly __refProxy: true;\n /** @internal */\n readonly __path: Array<string>;\n /** @internal — phantom type for TS inference. */\n readonly __type: T;\n}\n\n/**\n * A leaf in a ref proxy tree — wraps a scalar `T` and carries\n * `__path` + `__refProxy`. Used by the deep-mapped\n * `SingleRowRefProxy` to type column access.\n */\nexport type RefLeaf<T = unknown> = RefProxy<T> & {\n // Phantom — prevents RefLeaf from collapsing with RefProxy in\n // conditional types that distinguish them.\n readonly __refLeaf: true;\n};\n\n/**\n * Virtual row properties exposed on every single-row proxy for\n * parity with `@tanstack/db`. Runtime compilation of these is\n * Layer H; Layer C accepts them structurally so callers can write\n * code referencing `row.$key` etc. without tripping the IR.\n */\nexport type VirtualPropsRefProxy<TKey extends string | number = string | number> = {\n readonly $synced: RefLeaf<boolean>;\n readonly $origin: RefLeaf<'sync' | 'optimistic'>;\n readonly $key: RefLeaf<TKey>;\n readonly $collectionId: RefLeaf<string>;\n};\n\n/**\n * Deep-mapped: each scalar column becomes a `RefLeaf<T>`; each\n * object column recurses. Matches `@tanstack/db`'s\n * `SingleRowRefProxy` shape. Used for single-row callbacks\n * (`fn.select`, `fn.where`, `fn.having`) and inside index\n * expression evaluators.\n */\nexport type SingleRowRefProxy<\n T,\n TKey extends string | number = string | number,\n> = T extends Record<string, unknown>\n ? {\n readonly [K in keyof T]: T[K] extends Record<string, unknown>\n ? SingleRowRefProxy<T[K], TKey> & RefProxy<T[K]>\n : RefLeaf<T[K]>;\n } & RefProxy<T> &\n VirtualPropsRefProxy<TKey>\n : RefProxy<T> & VirtualPropsRefProxy<TKey>;\n\n/** TanStack-style public ref alias. */\nexport type Ref<T = unknown> = T extends Record<string, unknown>\n ? SingleRowRefProxy<T>\n : RefLeaf<T>;\n\n// ---------------------------------------------------------------------\n// Runtime\n// ---------------------------------------------------------------------\n\n/**\n * Create a single-row ref proxy. Every property access records a\n * path segment and returns a nested proxy (memoized per-path).\n *\n * Matches `@tanstack/db`'s `createSingleRowRefProxy<T>()` runtime\n * byte-for-byte (modulo style).\n */\nexport function createSingleRowRefProxy<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(): SingleRowRefProxy<T> {\n const cache = new Map<string, unknown>();\n function createProxy(path: Array<string>): unknown {\n const pathKey = path.join('.');\n if (cache.has(pathKey)) {\n return cache.get(pathKey);\n }\n const proxy = new Proxy(\n {},\n {\n get(target, prop, receiver) {\n if (prop === '__refProxy') return true;\n if (prop === '__path') return path;\n if (prop === '__type') return undefined;\n if (typeof prop === 'symbol') {\n return Reflect.get(target, prop, receiver);\n }\n return createProxy([...path, String(prop)]);\n },\n has(target, prop) {\n if (prop === '__refProxy' || prop === '__path' || prop === '__type') {\n return true;\n }\n return Reflect.has(target, prop);\n },\n ownKeys(target) {\n return Reflect.ownKeys(target);\n },\n getOwnPropertyDescriptor(target, prop) {\n if (prop === '__refProxy' || prop === '__path' || prop === '__type') {\n return { enumerable: false, configurable: true };\n }\n return Reflect.getOwnPropertyDescriptor(target, prop);\n },\n },\n );\n cache.set(pathKey, proxy);\n return proxy;\n }\n return createProxy([]) as SingleRowRefProxy<T>;\n}\n\n/**\n * Root-level ref proxy shape: each declared alias is exposed as a\n * `SingleRowRefProxy<T[alias]>`. The root itself is branded as a\n * `RefProxy`.\n */\nexport type RootRefProxy<T extends Record<string, Record<string, unknown>>> =\n RefProxy<T> & {\n readonly [K in keyof T]: SingleRowRefProxy<T[K]>;\n };\n\n/**\n * Create a root ref proxy scoped to a set of table aliases. The\n * root proxy exposes each alias as a nested single-row proxy;\n * path segments accumulate alias + column + (nested...) and are\n * materialized by `toExpression`.\n *\n * Matches `@tanstack/db`'s `createRefProxy<T>(aliases)` runtime.\n */\nexport function createRefProxy<\n T extends Record<string, Record<string, unknown>> = Record<\n string,\n Record<string, unknown>\n >,\n>(aliases: Array<string>): RootRefProxy<T> {\n const cache = new Map<string, unknown>();\n let accessId = 0;\n\n function createProxy(path: Array<string>): unknown {\n const pathKey = path.join('.');\n if (cache.has(pathKey)) {\n return cache.get(pathKey);\n }\n const proxy = new Proxy(\n {} as Record<string | symbol, unknown>,\n {\n get(target, prop, receiver) {\n if (prop === '__refProxy') return true;\n if (prop === '__path') return path;\n if (prop === '__type') return undefined;\n if (typeof prop === 'symbol') {\n return Reflect.get(target, prop, receiver);\n }\n return createProxy([...path, String(prop)]);\n },\n has(target, prop) {\n if (prop === '__refProxy' || prop === '__path' || prop === '__type') {\n return true;\n }\n return Reflect.has(target, prop);\n },\n ownKeys(target) {\n // TanStack defines a fresh sentinel key on each ownKeys\n // read to prevent spread-based deduplication; replicate\n // the same behavior so `{...refs.users}` produces a\n // fresh object each time.\n const id = ++accessId;\n const sentinelKey = `__SPREAD_SENTINEL__${path.join('.')}__${id}`;\n if (!Object.prototype.hasOwnProperty.call(target, sentinelKey)) {\n Object.defineProperty(target, sentinelKey, {\n enumerable: true,\n configurable: true,\n value: true,\n });\n }\n return Reflect.ownKeys(target);\n },\n getOwnPropertyDescriptor(target, prop) {\n if (prop === '__refProxy' || prop === '__path' || prop === '__type') {\n return { enumerable: false, configurable: true };\n }\n return Reflect.getOwnPropertyDescriptor(target, prop);\n },\n },\n );\n cache.set(pathKey, proxy);\n return proxy;\n }\n\n const rootProxy = new Proxy(\n {} as Record<string | symbol, unknown>,\n {\n get(target, prop, receiver) {\n if (prop === '__refProxy') return true;\n if (prop === '__path') return [];\n if (prop === '__type') return undefined;\n if (typeof prop === 'symbol') {\n return Reflect.get(target, prop, receiver);\n }\n const propStr = String(prop);\n if (aliases.includes(propStr)) {\n return createProxy([propStr]);\n }\n return undefined;\n },\n has(target, prop) {\n if (prop === '__refProxy' || prop === '__path' || prop === '__type') {\n return true;\n }\n if (typeof prop === 'string' && aliases.includes(prop)) return true;\n return Reflect.has(target, prop);\n },\n ownKeys() {\n return [...aliases, '__refProxy', '__path', '__type'];\n },\n getOwnPropertyDescriptor(_target, prop) {\n if (prop === '__refProxy' || prop === '__path' || prop === '__type') {\n return { enumerable: false, configurable: true };\n }\n if (typeof prop === 'string' && aliases.includes(prop)) {\n return { enumerable: true, configurable: true };\n }\n return undefined;\n },\n },\n );\n return rootProxy as RootRefProxy<T>;\n}\n\n/**\n * Create a root ref proxy augmented with a `$selected` namespace.\n * Used inside `having` callbacks where the preceding `select` has\n * introduced named columns that HAVING can reference by alias.\n *\n * Paths rooted at `$selected` are emitted as\n * `['$selected', ...rest]`; the compiler then resolves them\n * against the resolved SELECT shape.\n */\nexport function createRefProxyWithSelected<\n T extends Record<string, Record<string, unknown>> = Record<\n string,\n Record<string, unknown>\n >,\n>(\n aliases: Array<string>,\n): RootRefProxy<T> & { $selected: SingleRowRefProxy<Record<string, unknown>> } {\n const baseProxy = createRefProxy<T>(aliases);\n const cache = new Map<string, unknown>();\n\n function createSelectedProxy(path: Array<string>): unknown {\n const pathKey = path.join('.');\n if (cache.has(pathKey)) {\n return cache.get(pathKey);\n }\n const proxy = new Proxy(\n {},\n {\n get(target, prop, receiver) {\n if (prop === '__refProxy') return true;\n if (prop === '__path') return ['$selected', ...path];\n if (prop === '__type') return undefined;\n if (typeof prop === 'symbol') {\n return Reflect.get(target, prop, receiver);\n }\n return createSelectedProxy([...path, String(prop)]);\n },\n has(target, prop) {\n if (\n prop === '__refProxy' ||\n prop === '__path' ||\n prop === '__type'\n ) {\n return true;\n }\n return Reflect.has(target, prop);\n },\n ownKeys(target) {\n return Reflect.ownKeys(target);\n },\n getOwnPropertyDescriptor(target, prop) {\n if (\n prop === '__refProxy' ||\n prop === '__path' ||\n prop === '__type'\n ) {\n return { enumerable: false, configurable: true };\n }\n return Reflect.getOwnPropertyDescriptor(target, prop);\n },\n },\n );\n cache.set(pathKey, proxy);\n return proxy;\n }\n const wrappedSelectedProxy = createSelectedProxy([]);\n\n return new Proxy(baseProxy as unknown as Record<string | symbol, unknown>, {\n get(target, prop, receiver) {\n if (prop === '$selected') return wrappedSelectedProxy;\n return Reflect.get(target, prop, receiver);\n },\n has(target, prop) {\n if (prop === '$selected') return true;\n return Reflect.has(target, prop);\n },\n ownKeys(target) {\n return [...Reflect.ownKeys(target), '$selected'];\n },\n getOwnPropertyDescriptor(target, prop) {\n if (prop === '$selected') {\n return {\n enumerable: true,\n configurable: true,\n value: wrappedSelectedProxy,\n };\n }\n return Reflect.getOwnPropertyDescriptor(target, prop);\n },\n }) as RootRefProxy<T> & {\n $selected: SingleRowRefProxy<Record<string, unknown>>;\n };\n}\n\n/**\n * Type guard: is `value` a ref proxy?\n */\nexport function isRefProxy(value: unknown): value is RefProxy {\n return (\n value !== null &&\n typeof value === 'object' &&\n (value as { __refProxy?: unknown }).__refProxy === true\n );\n}\n\n/**\n * Convert a value to a `BasicExpression`:\n *\n * - A ref proxy becomes a `PropRef` of its recorded path.\n * - An existing IR expression (ref/val/func/agg) is returned as-is.\n * - `ToArrayWrapper` / `ConcatToArrayWrapper` (Layer F) throws —\n * matches upstream's guard; we don't have those wrappers yet so\n * the guard is a no-op-in-practice today.\n * - Any other value is wrapped as a `Value` literal.\n */\nexport function toExpression<T = unknown>(value: T): BasicExpression {\n if (isRefProxy(value)) {\n return new PropRef(value.__path);\n }\n if (\n value !== null &&\n typeof value === 'object' &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ((value as any).__brand === 'ToArrayWrapper' ||\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (value as any).__brand === 'ConcatToArrayWrapper' ||\n (value as any).__brand === 'MaterializeWrapper')\n ) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const brand = (value as any).__brand as string;\n const name = brand === 'ToArrayWrapper'\n ? 'toArray()'\n : brand === 'MaterializeWrapper'\n ? 'materialize()'\n : 'concat(toArray())';\n throw new Error(\n `${name} cannot be used inside expressions (e.g., coalesce(), eq(), not()). ` +\n `Use ${name} directly as a select field value instead.`,\n );\n }\n if (isExpressionLike(value)) {\n return value as unknown as BasicExpression;\n }\n return new Value(value);\n}\n\n/**\n * Wrap a literal as a `Value` expression. Matches\n * `@tanstack/db`'s `val(v)`. Useful for distinguishing a literal\n * from a ref-proxy in contexts where both appear — e.g.\n * `eq(users.id, val(1))` vs `eq(users.id, 1)` (the second is\n * identical in practice because `toExpression` wraps literals,\n * but `val()` makes intent explicit in generated code).\n */\nexport function val<T>(value: T): BasicExpression<T> {\n return new Value(value) as BasicExpression<T>;\n}\n\n// Re-export Func so callers that construct Func nodes directly\n// don't need a second import.\nexport { Func };\n","/**\n * Expression helpers — `@tanstack/db` parity (Layer C.3).\n *\n * Each helper returns a `BasicExpression` (PropRef / Value / Func)\n * or `Aggregate` node. Comparison / logical / string / numeric /\n * null / aggregate helpers all route literals and ref-proxies\n * through `toExpression`.\n *\n * Runtime behavior matches `@tanstack/db/query/builder/functions.js`.\n * Type layer is loosened (we type operands as `unknown`) because\n * upstream's deep inference machinery (`ComparisonOperand`,\n * `AggregateReturnType`, `CoalesceReturnType`, etc.) is Layer-G work;\n * users still get good IDE support because the return types (`Func`,\n * `Aggregate`) are narrow IR nodes, and the builder callbacks\n * receive typed ref proxies.\n *\n * Also exports:\n * - `operators` — runtime array of all operator names.\n * - `comparisonFunctions` — subset that indexes can accept.\n * - `OperatorName` — union of operator literals.\n * - `ToArrayWrapper` / `ConcatToArrayWrapper` / `toArray` — IR\n * wrappers for sub-query projection. Compiled in Layer C.5.\n */\n\nimport { Aggregate, Func, type BasicExpression } from './ir.js';\nimport { toExpression } from './ref-proxy.js';\n\n// ---------------------------------------------------------------------\n// Comparison helpers\n// ---------------------------------------------------------------------\n\nexport function eq(left: unknown, right: unknown): BasicExpression<boolean> {\n return new Func('eq', [toExpression(left), toExpression(right)]) as BasicExpression<boolean>;\n}\nexport function gt(left: unknown, right: unknown): BasicExpression<boolean> {\n return new Func('gt', [toExpression(left), toExpression(right)]) as BasicExpression<boolean>;\n}\nexport function gte(left: unknown, right: unknown): BasicExpression<boolean> {\n return new Func('gte', [toExpression(left), toExpression(right)]) as BasicExpression<boolean>;\n}\nexport function lt(left: unknown, right: unknown): BasicExpression<boolean> {\n return new Func('lt', [toExpression(left), toExpression(right)]) as BasicExpression<boolean>;\n}\nexport function lte(left: unknown, right: unknown): BasicExpression<boolean> {\n return new Func('lte', [toExpression(left), toExpression(right)]) as BasicExpression<boolean>;\n}\n\n// ---------------------------------------------------------------------\n// Logical helpers (variadic; minimum 2 args)\n// ---------------------------------------------------------------------\n\nexport function and(\n left: unknown,\n right: unknown,\n ...rest: Array<unknown>\n): BasicExpression<boolean> {\n return new Func(\n 'and',\n [left, right, ...rest].map((v) => toExpression(v)),\n ) as BasicExpression<boolean>;\n}\n\nexport function or(\n left: unknown,\n right: unknown,\n ...rest: Array<unknown>\n): BasicExpression<boolean> {\n return new Func(\n 'or',\n [left, right, ...rest].map((v) => toExpression(v)),\n ) as BasicExpression<boolean>;\n}\n\nexport function not(value: unknown): BasicExpression<boolean> {\n return new Func('not', [toExpression(value)]) as BasicExpression<boolean>;\n}\n\n// ---------------------------------------------------------------------\n// Null / undefined / membership checks\n// ---------------------------------------------------------------------\n\nexport function isUndefined(value: unknown): BasicExpression<boolean> {\n return new Func('isUndefined', [toExpression(value)]) as BasicExpression<boolean>;\n}\n\nexport function isNull(value: unknown): BasicExpression<boolean> {\n return new Func('isNull', [toExpression(value)]) as BasicExpression<boolean>;\n}\n\n/**\n * `inArray(value, array)` — operator name is `'in'` in IR (matches\n * upstream) even though the helper is named `inArray`.\n */\nexport function inArray(\n value: unknown,\n array: unknown,\n): BasicExpression<boolean> {\n return new Func('in', [toExpression(value), toExpression(array)]) as BasicExpression<boolean>;\n}\n\n// ---------------------------------------------------------------------\n// String helpers\n// ---------------------------------------------------------------------\n\nexport function like(left: unknown, right: unknown): BasicExpression<boolean> {\n return new Func('like', [toExpression(left), toExpression(right)]) as BasicExpression<boolean>;\n}\n\nexport function ilike(left: unknown, right: unknown): BasicExpression<boolean> {\n return new Func('ilike', [toExpression(left), toExpression(right)]) as BasicExpression<boolean>;\n}\n\nexport function upper(arg: unknown): BasicExpression<string | null | undefined> {\n return new Func('upper', [toExpression(arg)]) as BasicExpression<string | null | undefined>;\n}\n\nexport function lower(arg: unknown): BasicExpression<string | null | undefined> {\n return new Func('lower', [toExpression(arg)]) as BasicExpression<string | null | undefined>;\n}\n\nexport function length(arg: unknown): BasicExpression<number | null | undefined> {\n return new Func('length', [toExpression(arg)]) as BasicExpression<number | null | undefined>;\n}\n\n/**\n * `concat(...args)` — string concatenation. When a single\n * `ToArrayWrapper` argument is passed (subquery projection), wraps\n * it in `ConcatToArrayWrapper` so the compiler projects into a\n * joined string. Multiple `ToArrayWrapper` args are not supported\n * (matches upstream error).\n */\nexport function concat(\n ...args: Array<unknown>\n): BasicExpression<string> | ConcatToArrayWrapper {\n const toArrayArg = args.find(\n (arg): arg is ToArrayWrapper =>\n arg !== null &&\n typeof arg === 'object' &&\n (arg as { __brand?: unknown }).__brand === 'ToArrayWrapper',\n );\n if (toArrayArg) {\n if (args.length !== 1) {\n throw new Error(\n 'concat(toArray(...)) currently supports only a single toArray(...) argument',\n );\n }\n return new ConcatToArrayWrapper(toArrayArg.query);\n }\n return new Func(\n 'concat',\n args.map((arg) => toExpression(arg)),\n ) as BasicExpression<string>;\n}\n\n// ---------------------------------------------------------------------\n// Numeric / utility helpers\n// ---------------------------------------------------------------------\n\nexport function add(left: unknown, right: unknown): BasicExpression<number | null | undefined> {\n return new Func('add', [toExpression(left), toExpression(right)]) as BasicExpression<\n number | null | undefined\n >;\n}\n\nexport function subtract(left: unknown, right: unknown): BasicExpression<number> {\n return new Func('subtract', [toExpression(left), toExpression(right)]) as BasicExpression<number>;\n}\n\nexport function multiply(left: unknown, right: unknown): BasicExpression<number> {\n return new Func('multiply', [toExpression(left), toExpression(right)]) as BasicExpression<number>;\n}\n\nexport function divide(left: unknown, right: unknown): BasicExpression<number | null> {\n return new Func('divide', [toExpression(left), toExpression(right)]) as BasicExpression<\n number | null\n >;\n}\n\nexport function coalesce(\n first: unknown,\n ...rest: Array<unknown>\n): BasicExpression {\n return new Func(\n 'coalesce',\n [first, ...rest].map((v) => toExpression(v)),\n );\n}\n\n/** Scalar CASE WHEN expression. Conditions and values alternate; an odd final\n * argument is the default value. Without a default, unmatched rows yield null. */\nexport function caseWhen(...args: Array<unknown>): BasicExpression {\n if (args.length < 2) throw new Error('caseWhen() requires at least two arguments');\n return new Func('caseWhen', args.map((value) => toExpression(value)));\n}\n\n// ---------------------------------------------------------------------\n// Aggregates\n// ---------------------------------------------------------------------\n\nexport function count(arg: unknown): Aggregate<number> {\n return new Aggregate('count', [toExpression(arg)]) as Aggregate<number>;\n}\n\nexport function avg(arg: unknown): Aggregate<number | null | undefined> {\n return new Aggregate('avg', [toExpression(arg)]) as Aggregate<\n number | null | undefined\n >;\n}\n\nexport function sum(arg: unknown): Aggregate<number | null | undefined> {\n return new Aggregate('sum', [toExpression(arg)]) as Aggregate<\n number | null | undefined\n >;\n}\n\nexport function min(arg: unknown): Aggregate {\n return new Aggregate('min', [toExpression(arg)]);\n}\n\nexport function max(arg: unknown): Aggregate {\n return new Aggregate('max', [toExpression(arg)]);\n}\n\n// ---------------------------------------------------------------------\n// Runtime tables\n// ---------------------------------------------------------------------\n\n/** Comparison operators accepted by index implementations. */\nexport const comparisonFunctions = [\n 'eq',\n 'gt',\n 'gte',\n 'lt',\n 'lte',\n 'in',\n 'like',\n 'ilike',\n] as const;\n\n/** All supported operator names. Matches upstream. */\nexport const operators = [\n // Comparison\n 'eq',\n 'gt',\n 'gte',\n 'lt',\n 'lte',\n 'in',\n 'like',\n 'ilike',\n // Logical\n 'and',\n 'or',\n 'not',\n // Null checks\n 'isNull',\n 'isUndefined',\n // Strings\n 'upper',\n 'lower',\n 'length',\n 'concat',\n // Numeric\n 'add',\n 'subtract',\n 'multiply',\n 'divide',\n // Utility\n 'coalesce',\n 'caseWhen',\n // Aggregates\n 'count',\n 'avg',\n 'sum',\n 'min',\n 'max',\n] as const;\n\nexport type OperatorName = (typeof operators)[number];\n\n// ---------------------------------------------------------------------\n// Sub-query wrappers (compiled in Layer C.5)\n// ---------------------------------------------------------------------\n\n/**\n * Marker for `toArray(q)` — materializes a sub-query as an array\n * projected into the parent SELECT. Compile path lands in C.5;\n * the class is shipped now so type-resolution in builder / helpers\n * works.\n */\nexport class ToArrayWrapper<_T = unknown> {\n readonly __brand = 'ToArrayWrapper' as const;\n declare readonly _type: 'toArray';\n declare readonly _result: _T;\n constructor(public readonly query: unknown) {}\n}\n\n/**\n * Marker for `concat(toArray(q))` — string-joins the projected\n * sub-query rows. Compile path lands in C.5.\n */\nexport class ConcatToArrayWrapper<_T = unknown> {\n readonly __brand = 'ConcatToArrayWrapper' as const;\n declare readonly _type: 'concatToArray';\n declare readonly _result: _T;\n constructor(public readonly query: unknown) {}\n}\n\nexport class MaterializeWrapper<_T = unknown, _IsSingle extends boolean = boolean> {\n readonly __brand = 'MaterializeWrapper' as const;\n declare readonly _type: 'materialize';\n declare readonly _result: _T;\n declare readonly _isSingle: _IsSingle;\n constructor(public readonly query: unknown) {}\n}\n\n/**\n * Wrap a QueryBuilder as an array-result sub-query. Used as a\n * SELECT field value: `select(({p, children}) => ({ p, children:\n * toArray(children) }))`. Compile path in C.5.\n */\nexport function toArray(query: unknown): ToArrayWrapper {\n return new ToArrayWrapper(query);\n}\n\nexport function materialize(query: unknown): MaterializeWrapper {\n return new MaterializeWrapper(query);\n}\n","import { ValidationError } from '../errors.js';\n\nexport type Point = readonly [lng: number, lat: number];\n\nfunction describePoint(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(String).join(', ')}]`;\n return String(value);\n}\n\nexport function assertValidPoint(value: unknown, label = 'point'): asserts value is Point {\n if (!Array.isArray(value) || value.length !== 2) {\n throw new ValidationError(`${label} must be [lng, lat], got ${describePoint(value)}`);\n }\n const [lng, lat] = value;\n if (typeof lng !== 'number' || typeof lat !== 'number') {\n throw new ValidationError(`${label} coordinates must be numbers`);\n }\n if (!Number.isFinite(lng) || !Number.isFinite(lat)) {\n throw new ValidationError(`${label} coordinates must be finite`);\n }\n if (lng < -180 || lng > 180) {\n throw new ValidationError(`${label} longitude must be between -180 and 180, got ${lng}`);\n }\n if (lat < -90 || lat > 90) {\n throw new ValidationError(`${label} latitude must be between -90 and 90, got ${lat}`);\n }\n}\n\nexport class PointColumn {\n readonly coords: Float64Array;\n readonly bboxCache: Float64Array;\n\n constructor(\n capacity: number,\n coords: Float64Array = new Float64Array(capacity * 2),\n bboxCache: Float64Array = new Float64Array(capacity * 4),\n ) {\n if (!Number.isInteger(capacity) || capacity < 0) {\n throw new RangeError('capacity must be a non-negative integer');\n }\n if (coords.length < capacity * 2) {\n throw new RangeError('coords buffer is too small for point capacity');\n }\n if (bboxCache.length < capacity * 4) {\n throw new RangeError('bboxCache buffer is too small for point capacity');\n }\n this.coords = coords;\n this.bboxCache = bboxCache;\n for (let row = 0; row < capacity; row++) this.setNull(row);\n }\n\n set(row: number, value: Point): void {\n assertValidPoint(value);\n const coordOffset = row * 2;\n this.coords[coordOffset] = value[0];\n this.coords[coordOffset + 1] = value[1];\n this.updateBbox(row);\n }\n\n get(row: number): Point {\n const coordOffset = row * 2;\n return [this.coords[coordOffset] ?? Number.NaN, this.coords[coordOffset + 1] ?? Number.NaN];\n }\n\n setNull(row: number): void {\n const coordOffset = row * 2;\n this.coords[coordOffset] = Number.NaN;\n this.coords[coordOffset + 1] = Number.NaN;\n const bboxOffset = row * 4;\n this.bboxCache[bboxOffset] = Number.NaN;\n this.bboxCache[bboxOffset + 1] = Number.NaN;\n this.bboxCache[bboxOffset + 2] = Number.NaN;\n this.bboxCache[bboxOffset + 3] = Number.NaN;\n }\n\n updateBbox(row: number): void {\n const coordOffset = row * 2;\n const lng = this.coords[coordOffset] ?? Number.NaN;\n const lat = this.coords[coordOffset + 1] ?? Number.NaN;\n const bboxOffset = row * 4;\n this.bboxCache[bboxOffset] = lng;\n this.bboxCache[bboxOffset + 1] = lat;\n this.bboxCache[bboxOffset + 2] = lng;\n this.bboxCache[bboxOffset + 3] = lat;\n }\n\n copy(fromRow: number, toRow: number): void {\n const fromCoord = fromRow * 2;\n const toCoord = toRow * 2;\n this.coords[toCoord] = this.coords[fromCoord] ?? Number.NaN;\n this.coords[toCoord + 1] = this.coords[fromCoord + 1] ?? Number.NaN;\n const fromBbox = fromRow * 4;\n const toBbox = toRow * 4;\n this.bboxCache[toBbox] = this.bboxCache[fromBbox] ?? Number.NaN;\n this.bboxCache[toBbox + 1] = this.bboxCache[fromBbox + 1] ?? Number.NaN;\n this.bboxCache[toBbox + 2] = this.bboxCache[fromBbox + 2] ?? Number.NaN;\n this.bboxCache[toBbox + 3] = this.bboxCache[fromBbox + 3] ?? Number.NaN;\n }\n}\n","import { ValidationError } from '../errors.js';\nimport { assertValidPoint, type Point } from './point-column.js';\n\nexport type { Point } from './point-column.js';\nexport type BBox = readonly [minX: number, minY: number, maxX: number, maxY: number];\n\nexport const EARTH_RADIUS_METERS = 6_371_008.8;\n\nfunction describeBbox(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(String).join(', ')}]`;\n return String(value);\n}\n\nexport function assertValidBbox(value: unknown, label = 'bbox'): asserts value is BBox {\n if (!Array.isArray(value) || value.length !== 4) {\n throw new ValidationError(`${label} must be [minX, minY, maxX, maxY], got ${describeBbox(value)}`);\n }\n const [minX, minY, maxX, maxY] = value;\n for (const [name, coord] of [\n ['minX', minX],\n ['minY', minY],\n ['maxX', maxX],\n ['maxY', maxY],\n ] as const) {\n if (typeof coord !== 'number' || !Number.isFinite(coord)) {\n throw new ValidationError(`${label}.${name} must be finite`);\n }\n }\n if (minX < -180 || minX > 180 || maxX < -180 || maxX > 180) {\n throw new ValidationError(`${label} longitude bounds must be between -180 and 180`);\n }\n if (minY < -90 || minY > 90 || maxY < -90 || maxY > 90) {\n throw new ValidationError(`${label} latitude bounds must be between -90 and 90`);\n }\n if (minX > maxX) {\n throw new ValidationError(`${label} crosses the antimeridian; wrapped bboxes are not supported in v1`);\n }\n if (minY > maxY) {\n throw new ValidationError(`${label}.minY must be <= maxY`);\n }\n}\n\nexport function pointBbox(point: Point): BBox {\n assertValidPoint(point);\n const [lng, lat] = point;\n return [lng, lat, lng, lat];\n}\n\nexport function bboxIntersectsRaw(a: BBox, b: BBox): boolean {\n assertValidBbox(a, 'a');\n assertValidBbox(b, 'b');\n return a[0] <= b[2] && a[2] >= b[0] && a[1] <= b[3] && a[3] >= b[1];\n}\n\nexport function bboxWithinRaw(inner: BBox, outer: BBox): boolean {\n assertValidBbox(inner, 'inner');\n assertValidBbox(outer, 'outer');\n return inner[0] >= outer[0] && inner[1] >= outer[1] && inner[2] <= outer[2] && inner[3] <= outer[3];\n}\n\nexport function expandPointBboxByMeters(point: Point, meters: number): BBox {\n assertValidPoint(point);\n if (typeof meters !== 'number' || !Number.isFinite(meters)) {\n throw new ValidationError('radius meters must be finite');\n }\n if (meters < 0) {\n throw new ValidationError('radius meters must be >= 0');\n }\n\n const [lng, lat] = point;\n const deltaLat = radiansToDegrees(meters / EARTH_RADIUS_METERS);\n const cosLat = Math.cos(degreesToRadians(lat));\n const deltaLng = Math.abs(cosLat) < 1e-12\n ? 180\n : radiansToDegrees(meters / (EARTH_RADIUS_METERS * Math.abs(cosLat)));\n\n return [\n clamp(lng - deltaLng, -180, 180),\n clamp(lat - deltaLat, -90, 90),\n clamp(lng + deltaLng, -180, 180),\n clamp(lat + deltaLat, -90, 90),\n ];\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value));\n}\n\nexport function degreesToRadians(degrees: number): number {\n return (degrees * Math.PI) / 180;\n}\n\nexport function radiansToDegrees(radians: number): number {\n return (radians * 180) / Math.PI;\n}\n","import { assertValidPoint, type Point } from './point-column.js';\nimport { EARTH_RADIUS_METERS, degreesToRadians } from './bbox.js';\n\nexport function haversineDistanceMeters(a: Point, b: Point): number {\n assertValidPoint(a, 'a');\n assertValidPoint(b, 'b');\n\n const [lng1, lat1] = a;\n const [lng2, lat2] = b;\n return haversineDistanceMetersXY(lng1, lat1, lng2, lat2);\n}\n\n/** Allocation-free Haversine kernel for columnar coordinate buffers. */\nexport function haversineDistanceMetersXY(\n lng1: number,\n lat1: number,\n lng2: number,\n lat2: number,\n): number {\n if (lng1 === lng2 && lat1 === lat2) return 0;\n\n const phi1 = degreesToRadians(lat1);\n const phi2 = degreesToRadians(lat2);\n const dPhi = degreesToRadians(lat2 - lat1);\n const dLambda = degreesToRadians(lng2 - lng1);\n\n const sinDPhi = Math.sin(dPhi / 2);\n const sinDLambda = Math.sin(dLambda / 2);\n const h =\n sinDPhi * sinDPhi +\n Math.cos(phi1) * Math.cos(phi2) * sinDLambda * sinDLambda;\n return 2 * EARTH_RADIUS_METERS * Math.atan2(Math.sqrt(h), Math.sqrt(1 - h));\n}\n","import { ValidationError } from '../errors.js';\nimport { assertValidPoint, type Point } from './point-column.js';\n\nexport type LinearRing = readonly Point[];\nexport type Polygon = readonly LinearRing[];\n\nexport interface PolygonColumnOptions {\n readonly ranges?: Int32Array;\n readonly ringRanges?: Int32Array;\n readonly initialRingCapacity?: number;\n readonly initialVertexCapacity?: number;\n readonly bboxCache?: Float64Array;\n readonly autoCloseRings?: boolean;\n}\n\nfunction describePolygon(value: unknown): string {\n if (Array.isArray(value)) return JSON.stringify(value);\n return String(value);\n}\n\nfunction samePoint(a: Point, b: Point): boolean {\n return a[0] === b[0] && a[1] === b[1];\n}\n\nfunction clonePoint(point: Point): Point {\n return [point[0], point[1]];\n}\n\nfunction normalizeRing(\n value: unknown,\n label: string,\n autoCloseRings: boolean,\n): Point[] {\n if (!Array.isArray(value)) {\n throw new ValidationError(`${label} must be an array of points, got ${describePolygon(value)}`);\n }\n\n const ring: Point[] = [];\n for (let i = 0; i < value.length; i++) {\n assertValidPoint(value[i], `${label}[${i}]`);\n ring.push(clonePoint(value[i]));\n }\n\n if (ring.length === 0) {\n throw new ValidationError(`${label} must contain at least four points`);\n }\n\n const first = ring[0]!;\n const last = ring[ring.length - 1]!;\n if (!samePoint(first, last)) {\n if (!autoCloseRings) {\n throw new ValidationError(`${label} must be closed (first point must equal last point)`);\n }\n ring.push(clonePoint(first));\n }\n\n if (ring.length < 4) {\n throw new ValidationError(`${label} must contain at least four points`);\n }\n\n return ring;\n}\n\nexport function normalizePolygon(\n value: unknown,\n options: { readonly autoCloseRings?: boolean } = {},\n label = 'polygon',\n): Polygon {\n if (!Array.isArray(value)) {\n throw new ValidationError(`${label} must be an array of rings, got ${describePolygon(value)}`);\n }\n if (value.length === 0) {\n throw new ValidationError(`${label} must contain at least one ring`);\n }\n\n const autoCloseRings = options.autoCloseRings === true;\n return value.map((ring, i) => normalizeRing(ring, `${label}[${i}]`, autoCloseRings));\n}\n\nexport function assertValidPolygon(\n value: unknown,\n options: { readonly autoCloseRings?: boolean } = {},\n label = 'polygon',\n): asserts value is Polygon {\n normalizePolygon(value, options, label);\n}\n\nexport class PolygonColumn {\n readonly ranges: Int32Array;\n ringRanges: Int32Array;\n coords: Float64Array;\n readonly bboxCache: Float64Array;\n cursor = 0;\n ringCursor = 0;\n private ringCapacity: number;\n private vertexCapacity: number;\n private readonly autoCloseRings: boolean;\n\n constructor(capacity: number, options: PolygonColumnOptions = {}) {\n if (!Number.isInteger(capacity) || capacity < 0) {\n throw new RangeError('capacity must be a non-negative integer');\n }\n\n const ranges = options.ranges ?? new Int32Array(capacity * 2);\n if (ranges.length < capacity * 2) {\n throw new RangeError('ranges buffer is too small for polygon capacity');\n }\n\n const initialRingCapacity = options.initialRingCapacity ?? Math.max(16, capacity * 2);\n if (!Number.isInteger(initialRingCapacity) || initialRingCapacity < 0) {\n throw new RangeError('initialRingCapacity must be a non-negative integer');\n }\n const ringRanges = options.ringRanges ?? new Int32Array(Math.max(1, initialRingCapacity) * 2);\n if (ringRanges.length < Math.max(1, initialRingCapacity) * 2) {\n throw new RangeError('ringRanges buffer is too small for polygon ring capacity');\n }\n\n const initialVertexCapacity = options.initialVertexCapacity ?? Math.max(16, capacity * 8);\n if (!Number.isInteger(initialVertexCapacity) || initialVertexCapacity < 0) {\n throw new RangeError('initialVertexCapacity must be a non-negative integer');\n }\n\n const bboxCache = options.bboxCache ?? new Float64Array(capacity * 4);\n if (bboxCache.length < capacity * 4) {\n throw new RangeError('bboxCache buffer is too small for polygon capacity');\n }\n\n this.ranges = ranges;\n this.ringCapacity = Math.max(1, initialRingCapacity);\n this.ringRanges = ringRanges;\n this.vertexCapacity = Math.max(1, initialVertexCapacity);\n this.coords = new Float64Array(this.vertexCapacity * 2);\n this.bboxCache = bboxCache;\n this.autoCloseRings = options.autoCloseRings === true;\n for (let row = 0; row < capacity; row++) this.setNull(row);\n }\n\n set(row: number, value: Polygon): void {\n const polygon = normalizePolygon(value, { autoCloseRings: this.autoCloseRings });\n const ringCount = polygon.length;\n const vertexCount = polygon.reduce((sum, ring) => sum + ring.length, 0);\n this.ensureRingCapacity(ringCount);\n this.ensureVertexCapacity(vertexCount);\n\n const ringStart = this.ringCursor;\n let vertex = this.cursor;\n for (let i = 0; i < polygon.length; i++) {\n const ring = polygon[i]!;\n const vertexStart = vertex;\n for (const point of ring) {\n const offset = vertex * 2;\n this.coords[offset] = point[0];\n this.coords[offset + 1] = point[1];\n vertex++;\n }\n const ringOffset = (ringStart + i) * 2;\n this.ringRanges[ringOffset] = vertexStart;\n this.ringRanges[ringOffset + 1] = vertex;\n }\n\n this.ringCursor += ringCount;\n this.cursor = vertex;\n this.ranges[row * 2] = ringStart;\n this.ranges[row * 2 + 1] = this.ringCursor;\n this.updateBbox(row, polygon);\n }\n\n get(row: number): Polygon {\n const ringStart = this.ranges[row * 2] ?? 0;\n const ringEnd = this.ranges[row * 2 + 1] ?? 0;\n const out: Point[][] = [];\n for (let ring = ringStart; ring < ringEnd; ring++) {\n const vertexStart = this.ringRanges[ring * 2] ?? 0;\n const vertexEnd = this.ringRanges[ring * 2 + 1] ?? 0;\n const outRing: Point[] = [];\n for (let vertex = vertexStart; vertex < vertexEnd; vertex++) {\n const offset = vertex * 2;\n outRing.push([\n this.coords[offset] ?? Number.NaN,\n this.coords[offset + 1] ?? Number.NaN,\n ]);\n }\n out.push(outRing);\n }\n return out;\n }\n\n setNull(row: number): void {\n this.ranges[row * 2] = 0;\n this.ranges[row * 2 + 1] = 0;\n const bboxOffset = row * 4;\n this.bboxCache[bboxOffset] = Number.NaN;\n this.bboxCache[bboxOffset + 1] = Number.NaN;\n this.bboxCache[bboxOffset + 2] = Number.NaN;\n this.bboxCache[bboxOffset + 3] = Number.NaN;\n }\n\n copy(fromRow: number, toRow: number): void {\n const bboxOffset = fromRow * 4;\n if (!Number.isFinite(this.bboxCache[bboxOffset])) {\n this.setNull(toRow);\n return;\n }\n this.set(toRow, this.get(fromRow));\n }\n\n private ensureRingCapacity(extraRings: number): void {\n const needed = this.ringCursor + extraRings;\n if (needed <= this.ringCapacity) return;\n let nextCapacity = this.ringCapacity;\n while (nextCapacity < needed) nextCapacity *= 2;\n const next = new Int32Array(nextCapacity * 2);\n next.set(this.ringRanges.subarray(0, this.ringCursor * 2));\n this.ringRanges = next;\n this.ringCapacity = nextCapacity;\n }\n\n private ensureVertexCapacity(extraVertices: number): void {\n const needed = this.cursor + extraVertices;\n if (needed <= this.vertexCapacity) return;\n let nextCapacity = this.vertexCapacity;\n while (nextCapacity < needed) nextCapacity *= 2;\n const next = new Float64Array(nextCapacity * 2);\n next.set(this.coords.subarray(0, this.cursor * 2));\n this.coords = next;\n this.vertexCapacity = nextCapacity;\n }\n\n private updateBbox(row: number, value: Polygon): void {\n let minX = Number.POSITIVE_INFINITY;\n let minY = Number.POSITIVE_INFINITY;\n let maxX = Number.NEGATIVE_INFINITY;\n let maxY = Number.NEGATIVE_INFINITY;\n for (const ring of value) {\n for (const [lng, lat] of ring) {\n minX = Math.min(minX, lng);\n minY = Math.min(minY, lat);\n maxX = Math.max(maxX, lng);\n maxY = Math.max(maxY, lat);\n }\n }\n const bboxOffset = row * 4;\n this.bboxCache[bboxOffset] = minX;\n this.bboxCache[bboxOffset + 1] = minY;\n this.bboxCache[bboxOffset + 2] = maxX;\n this.bboxCache[bboxOffset + 3] = maxY;\n }\n}\n","import { assertValidPoint, type Point } from './point-column.js';\nimport { normalizePolygon, type Polygon } from './polygon-column.js';\n\nconst EPSILON = 1e-12;\n\n/**\n * Exact planar point-in-polygon for EPSG:4326 lon/lat coordinates.\n *\n * v1 treats exterior-boundary points as inside. Interior rings are holes:\n * points inside or on a hole boundary are outside the polygon.\n */\nexport function pointInPolygon(point: Point, polygon: Polygon): boolean {\n assertValidPoint(point, 'point');\n const rings = normalizePolygon(polygon, {}, 'polygon');\n const exterior = rings[0];\n if (exterior === undefined || !pointInRing(point, exterior)) return false;\n\n for (let i = 1; i < rings.length; i++) {\n if (pointInRing(point, rings[i]!)) return false;\n }\n\n return true;\n}\n\nfunction pointInRing(point: Point, ring: readonly Point[]): boolean {\n if (ring.length < 4) return false;\n\n for (let i = 0; i < ring.length - 1; i++) {\n if (pointOnSegment(point, ring[i]!, ring[i + 1]!)) return true;\n }\n\n const [px, py] = point;\n let inside = false;\n for (let i = 0, j = ring.length - 1; i < ring.length; j = i++) {\n const [xi, yi] = ring[i]!;\n const [xj, yj] = ring[j]!;\n const crossesRay = (yi > py) !== (yj > py)\n && px < ((xj - xi) * (py - yi)) / (yj - yi) + xi;\n if (crossesRay) inside = !inside;\n }\n return inside;\n}\n\nfunction pointOnSegment(point: Point, start: Point, end: Point): boolean {\n const [px, py] = point;\n const [x1, y1] = start;\n const [x2, y2] = end;\n const cross = (px - x1) * (y2 - y1) - (py - y1) * (x2 - x1);\n if (Math.abs(cross) > EPSILON) return false;\n\n return px >= Math.min(x1, x2) - EPSILON\n && px <= Math.max(x1, x2) + EPSILON\n && py >= Math.min(y1, y2) - EPSILON\n && py <= Math.max(y1, y2) + EPSILON;\n}\n","import type { CompareOptions, OrderByDirection } from '../query/ir.js';\nimport type { IndexInterface, IndexOperation, IndexStats } from './base-index.js';\nimport type { RangeQueryOptions } from './range.js';\n\n/** View of an existing index with traversal/comparison direction reversed. */\nexport class ReverseIndex<TKey extends string | number = string | number>\n implements IndexInterface<TKey>\n{\n constructor(private readonly originalIndex: IndexInterface<TKey>) {}\n\n lookup(operation: IndexOperation, value: unknown): Set<TKey> {\n return this.originalIndex.lookup(reverseOperation(operation), value);\n }\n\n rangeQuery(options?: RangeQueryOptions): Set<TKey> {\n return this.originalIndex.rangeQueryReversed(options);\n }\n\n rangeQueryReversed(options?: RangeQueryOptions): Set<TKey> {\n return this.originalIndex.rangeQuery(options);\n }\n\n take(n: number, from?: unknown, filterFn?: (key: TKey) => boolean): Array<TKey> {\n return this.originalIndex.takeReversed(n, from, filterFn);\n }\n\n takeFromStart(n: number, filterFn?: (key: TKey) => boolean): Array<TKey> {\n return this.originalIndex.takeReversedFromEnd(n, filterFn);\n }\n\n takeReversed(n: number, from?: unknown, filterFn?: (key: TKey) => boolean): Array<TKey> {\n return this.originalIndex.take(n, from, filterFn);\n }\n\n takeReversedFromEnd(n: number, filterFn?: (key: TKey) => boolean): Array<TKey> {\n return this.originalIndex.takeFromStart(n, filterFn);\n }\n\n get orderedEntriesArray(): Array<[unknown, Set<TKey>]> {\n return this.originalIndex.orderedEntriesArrayReversed;\n }\n\n get orderedEntriesArrayReversed(): Array<[unknown, Set<TKey>]> {\n return this.originalIndex.orderedEntriesArray;\n }\n\n supports(operation: IndexOperation): boolean {\n return this.originalIndex.supports(operation);\n }\n\n matchesField(fieldPath: Array<string>): boolean {\n return this.originalIndex.matchesField(fieldPath);\n }\n\n matchesCompareOptions(compareOptions: CompareOptions): boolean {\n return this.originalIndex.matchesCompareOptions(compareOptions);\n }\n\n matchesDirection(direction: OrderByDirection): boolean {\n return this.originalIndex.matchesDirection(direction);\n }\n\n getStats(): IndexStats {\n return this.originalIndex.getStats();\n }\n\n add(key: TKey, item: unknown): void {\n this.originalIndex.add(key, item);\n }\n\n remove(key: TKey, item: unknown): void {\n this.originalIndex.remove(key, item);\n }\n\n update(key: TKey, oldItem: unknown, newItem: unknown): void {\n this.originalIndex.update(key, oldItem, newItem);\n }\n\n build(entries: Iterable<[TKey, unknown]>): void {\n this.originalIndex.build(entries);\n }\n\n clear(): void {\n this.originalIndex.clear();\n }\n\n get keyCount(): number {\n return this.originalIndex.keyCount;\n }\n\n equalityLookup(value: unknown): Set<TKey> {\n return this.originalIndex.equalityLookup(value);\n }\n\n inArrayLookup(values: Array<unknown>): Set<TKey> {\n return this.originalIndex.inArrayLookup(values);\n }\n\n get indexedKeysSet(): Set<TKey> {\n return this.originalIndex.indexedKeysSet;\n }\n\n get valueMapData(): Map<unknown, Set<TKey>> {\n return this.originalIndex.valueMapData;\n }\n}\n\nfunction reverseOperation(operation: IndexOperation): IndexOperation {\n switch (operation) {\n case 'gt':\n return 'lt';\n case 'gte':\n return 'lte';\n case 'lt':\n return 'gt';\n case 'lte':\n return 'gte';\n default:\n return operation;\n }\n}\n","import type { Collection } from '../collection/collection.js';\nimport {\n Func,\n PropRef,\n Value,\n isExpressionLike,\n type BasicExpression,\n type CompareOptions,\n} from '../query/ir.js';\nimport type { IndexInterface, IndexOperation } from './base-index.js';\nimport { ReverseIndex } from './reverse-index.js';\n\nexport interface IndexInfo<T extends object = Record<string, unknown>> {\n index: IndexInterface<number>;\n collection?: Collection;\n expression?: BasicExpression;\n fieldPath?: Array<string>;\n sample?: T;\n}\n\nexport interface OptimizationResult<T extends object = Record<string, unknown>> {\n canOptimize: boolean;\n matchingKeys: Set<number>;\n indexes: Array<IndexInterface<number>>;\n residualExpression?: BasicExpression;\n}\n\ntype IndexSource<T extends object = Record<string, unknown>> =\n | (Collection & { indexes: ReadonlyMap<unknown, IndexInterface<number> | IndexInfo<T>> })\n | ReadonlyMap<unknown, IndexInterface<number> | IndexInfo<T>>;\n\nconst comparisonOps = new Set<IndexOperation>(['eq', 'gt', 'gte', 'lt', 'lte', 'in']);\n\nexport function findIndexForField<T extends object = Record<string, unknown>>(\n source: IndexSource<T>,\n fieldName: string | Array<string>,\n valueOrCompareOptions?: unknown | CompareOptions,\n operation?: IndexOperation,\n compareOptions?: CompareOptions,\n): IndexInterface<number> | undefined {\n const fieldPath = normalizeFieldPath(fieldName);\n if (!isIndexableFieldPath(fieldPath)) return undefined;\n\n const requestedOperation = operation ?? 'eq';\n const requestedCompareOptions = resolveCompareOptions(valueOrCompareOptions, operation, compareOptions);\n\n for (const candidate of iterateIndexes(source)) {\n const index = unwrapIndex(candidate);\n if (!index.supports(requestedOperation)) continue;\n if (!index.matchesField(fieldPath)) continue;\n if (requestedCompareOptions && !index.matchesCompareOptions(requestedCompareOptions)) continue;\n\n if (requestedCompareOptions && !index.matchesDirection(requestedCompareOptions.direction)) {\n return new ReverseIndex(index);\n }\n return index;\n }\n\n return undefined;\n}\n\nexport function optimizeExpressionWithIndexes<T extends object = Record<string, unknown>>(\n expression: BasicExpression,\n source: IndexSource<T>,\n _rowMap?: Map<number, T>,\n _collection?: Collection,\n _lazyCollection?: Collection,\n): OptimizationResult<T> {\n const optimized = optimizeExpression(expression, source);\n if (!optimized) {\n return {\n canOptimize: false,\n matchingKeys: new Set<number>(),\n indexes: [],\n residualExpression: expression,\n };\n }\n\n const result: OptimizationResult<T> = {\n canOptimize: true,\n matchingKeys: optimized.keys,\n indexes: optimized.indexes,\n };\n if (optimized.residualExpression !== undefined) {\n result.residualExpression = optimized.residualExpression;\n }\n return result;\n}\n\nfunction optimizeExpression<T extends object>(\n expression: BasicExpression,\n source: IndexSource<T>,\n): { keys: Set<number>; indexes: Array<IndexInterface<number>>; residualExpression?: BasicExpression } | undefined {\n if (!isFunc(expression)) return undefined;\n\n if (expression.name === 'and') {\n const optimizedChildren = expression.args.map((arg) => optimizeExpression(arg, source));\n const optimized = optimizedChildren.filter(isDefined);\n if (optimized.length === 0) return undefined;\n\n const [first, ...rest] = optimized;\n let keys = new Set(first!.keys);\n for (const child of rest) keys = intersectSets(keys, child.keys);\n\n const residualArgs = expression.args.filter((_arg, index) => optimizedChildren[index] === undefined);\n const residualExpression = residualArgs.length === 0\n ? undefined\n : residualArgs.length === 1\n ? residualArgs[0]\n : new Func('and', residualArgs) as BasicExpression<boolean>;\n\n const result: { keys: Set<number>; indexes: Array<IndexInterface<number>>; residualExpression?: BasicExpression } = {\n keys,\n indexes: optimized.flatMap((child) => child.indexes),\n };\n if (residualExpression !== undefined) {\n result.residualExpression = residualExpression;\n }\n return result;\n }\n\n if (expression.name === 'or') {\n const optimizedChildren = expression.args.map((arg) => optimizeExpression(arg, source));\n if (optimizedChildren.length === 0 || optimizedChildren.some((child) => child === undefined)) {\n return undefined;\n }\n\n const keys = new Set<number>();\n const indexes: Array<IndexInterface<number>> = [];\n for (const child of optimizedChildren as Array<{ keys: Set<number>; indexes: Array<IndexInterface<number>> }>) {\n for (const key of child.keys) keys.add(key);\n indexes.push(...child.indexes);\n }\n return { keys, indexes };\n }\n\n if (!comparisonOps.has(expression.name as IndexOperation)) return undefined;\n const lookup = lookupForComparison(expression, source);\n return lookup ? { keys: lookup.keys, indexes: [lookup.index] } : undefined;\n}\n\nfunction lookupForComparison<T extends object>(\n expression: Func,\n source: IndexSource<T>,\n): { keys: Set<number>; index: IndexInterface<number> } | undefined {\n const operation = expression.name as IndexOperation;\n\n if (operation === 'in') {\n const field = fieldPathForExpression(expression.args[0]);\n const values = literalValue(expression.args[1]);\n if (!field || !Array.isArray(values)) return undefined;\n const index = findIndexForField(source, field, values, 'in');\n return index ? { keys: index.lookup('in', values), index } : undefined;\n }\n\n const directField = fieldPathForExpression(expression.args[0]);\n const directValue = literalValue(expression.args[1]);\n if (directField && directValue !== NO_LITERAL) {\n const index = findIndexForField(source, directField, directValue, operation);\n return index ? { keys: index.lookup(operation, directValue), index } : undefined;\n }\n\n const reverseField = fieldPathForExpression(expression.args[1]);\n const reverseValue = literalValue(expression.args[0]);\n if (reverseField && reverseValue !== NO_LITERAL) {\n const reversedOperation = reverseComparisonOperation(operation);\n const index = findIndexForField(source, reverseField, reverseValue, reversedOperation);\n return index ? { keys: index.lookup(reversedOperation, reverseValue), index } : undefined;\n }\n\n return undefined;\n}\n\nfunction* iterateIndexes<T extends object>(\n source: IndexSource<T>,\n): Iterable<IndexInterface<number> | IndexInfo<T>> {\n if (isCollectionIndexSource(source)) {\n yield* source.indexes.values();\n return;\n }\n yield* source.values();\n}\n\nfunction isCollectionIndexSource<T extends object>(\n source: IndexSource<T>,\n): source is Collection & { indexes: ReadonlyMap<unknown, IndexInterface<number> | IndexInfo<T>> } {\n return 'indexes' in source;\n}\n\nfunction unwrapIndex<T extends object>(candidate: IndexInterface<number> | IndexInfo<T>): IndexInterface<number> {\n return isIndexInfo(candidate) ? candidate.index : candidate;\n}\n\nfunction isIndexInfo<T extends object>(candidate: IndexInterface<number> | IndexInfo<T>): candidate is IndexInfo<T> {\n return typeof candidate === 'object' && candidate !== null && 'index' in candidate;\n}\n\nfunction normalizeFieldPath(fieldName: string | Array<string>): Array<string> {\n return Array.isArray(fieldName) ? fieldName : fieldName.split('.').filter(Boolean);\n}\n\nfunction isIndexableFieldPath(path: Array<string>): boolean {\n return path.length > 0 && !path[0]!.startsWith('$');\n}\n\nfunction resolveCompareOptions(\n valueOrCompareOptions: unknown | CompareOptions,\n operation?: IndexOperation,\n compareOptions?: CompareOptions,\n): CompareOptions | undefined {\n if (compareOptions) return compareOptions;\n if (operation !== undefined) return undefined;\n return isCompareOptions(valueOrCompareOptions) ? valueOrCompareOptions : undefined;\n}\n\nfunction isCompareOptions(value: unknown): value is CompareOptions {\n if (value === null || typeof value !== 'object') return false;\n const candidate = value as Partial<CompareOptions>;\n return (\n (candidate.direction === 'asc' || candidate.direction === 'desc') &&\n (candidate.nulls === 'first' || candidate.nulls === 'last') &&\n typeof candidate.stringSort === 'string'\n );\n}\n\nfunction fieldPathForExpression(expression: BasicExpression | undefined): Array<string> | undefined {\n if (!expression) return undefined;\n if (expression instanceof PropRef) return expression.path;\n if (isExpressionLike(expression) && (expression as { type?: unknown }).type === 'ref') {\n return (expression as unknown as PropRef).path;\n }\n return undefined;\n}\n\nconst NO_LITERAL = Symbol('no literal');\n\nfunction literalValue(expression: BasicExpression | undefined): unknown | typeof NO_LITERAL {\n if (!expression) return NO_LITERAL;\n if (expression instanceof Value) return expression.value;\n if (isExpressionLike(expression) && (expression as { type?: unknown }).type === 'val') {\n return (expression as unknown as Value).value;\n }\n return NO_LITERAL;\n}\n\nfunction isFunc(expression: BasicExpression): expression is Func {\n return expression instanceof Func || (isExpressionLike(expression) && (expression as { type?: unknown }).type === 'func');\n}\n\nfunction reverseComparisonOperation(operation: IndexOperation): IndexOperation {\n switch (operation) {\n case 'gt':\n return 'lt';\n case 'gte':\n return 'lte';\n case 'lt':\n return 'gt';\n case 'lte':\n return 'gte';\n default:\n return operation;\n }\n}\n\nfunction intersectSets(left: Set<number>, right: Set<number>): Set<number> {\n const result = new Set<number>();\n const [small, large] = left.size <= right.size ? [left, right] : [right, left];\n for (const value of small) {\n if (large.has(value)) result.add(value);\n }\n return result;\n}\n\nfunction isDefined<T>(value: T | undefined): value is T {\n return value !== undefined;\n}\n","/**\n * Vectorized filter + sort + project kernel.\n *\n * Given a collection view, a compiled column-op filter, and an orderBy\n * spec, this module produces a `Uint32Array` of matching row ordinals,\n * stable-sorted on the orderBy key, sliced by limit/offset, and finally\n * materialized into projected row objects. The kernel avoids:\n * - per-row proxy wrapping\n * - per-row row-object allocation during the filter pass\n * - per-row row-object allocation during sort (indirect sort on\n * typed-array key buffer)\n *\n * Only rows that survive the limit window are materialized into a\n * `RowValue`.\n *\n * Correctness parity with the legacy path is verified by running the\n * existing query-test suite through `QueryExecutor` with the fast path\n * enabled (any query expressed via `.filter(...)` exercises it).\n */\n\nimport type { Collection, RowValue, ScanColumn } from '../collection/collection.js';\nimport { ColumnTypeCode } from '../schema/types.js';\nimport type { FilterExpr, ColumnRef, Operand, Scalar, StringOpNode } from './filter.js';\nimport type { OrderSpec } from './query.js';\n\n// Validity getter duplicated from collection/rowIndex-era code; inlined\n// to avoid importing getValidity (which is module-private to collection).\n// Matches the bit order used by the writer path.\nfunction isValid(validity: Uint8Array | null, row: number): boolean {\n if (!validity) return true;\n const byte = validity[row >>> 3] ?? 0;\n return (byte & (1 << (row & 7))) !== 0;\n}\n\n// ----------------------------------------------------------------------\n// RowTest compilation: FilterExpr → (row: number) => boolean\n// ----------------------------------------------------------------------\n\nexport type RowTest = (row: number) => boolean;\n\nexport class FilterCompileError extends Error {}\n\nexport interface CompiledFilter {\n readonly test: RowTest;\n /** Columns referenced. Drives invalidation + required-col set. */\n readonly columns: ReadonlySet<string>;\n}\n\nexport function compileFilter(\n expr: FilterExpr | null,\n scanByName: ReadonlyMap<string, ScanColumn>,\n): CompiledFilter {\n if (!expr) {\n return { test: () => true, columns: new Set() };\n }\n const cols = new Set<string>();\n const test = compileExpr(expr, scanByName, cols);\n return { test, columns: cols };\n}\n\nfunction compileExpr(\n expr: FilterExpr,\n scanByName: ReadonlyMap<string, ScanColumn>,\n cols: Set<string>,\n): RowTest {\n switch (expr.kind) {\n case 'col': {\n // Boolean-column truthiness: col === true.\n const sc = requireCol(expr, scanByName, cols);\n if (sc.typeCode !== ColumnTypeCode.Bool) {\n throw new FilterCompileError(\n `column ref \"${expr.name}\" in boolean position must be a bool column`,\n );\n }\n const values = sc.values as Uint8Array;\n const validity = sc.validity;\n return (row) => {\n if (!isValid(validity, row)) return false;\n return (values[row] ?? 0) !== 0;\n };\n }\n case 'and': {\n const children = expr.args.map((a) => compileExpr(a, scanByName, cols));\n if (children.length === 0) return () => true;\n return (row) => {\n for (let i = 0; i < children.length; i++) {\n if (!children[i]!(row)) return false;\n }\n return true;\n };\n }\n case 'or': {\n const children = expr.args.map((a) => compileExpr(a, scanByName, cols));\n if (children.length === 0) return () => false;\n return (row) => {\n for (let i = 0; i < children.length; i++) {\n if (children[i]!(row)) return true;\n }\n return false;\n };\n }\n case 'not': {\n const inner = compileExpr(expr.arg, scanByName, cols);\n return (row) => !inner(row);\n }\n case 'isNull': {\n const sc = requireCol(expr.col, scanByName, cols);\n const validity = sc.validity;\n if (!validity) {\n // Non-nullable column: isNull always false, isNotNull always true.\n return expr.negated ? () => true : () => false;\n }\n if (expr.negated) return (row) => isValid(validity, row);\n return (row) => !isValid(validity, row);\n }\n case 'in': {\n const tests = expr.values.map((value) =>\n compileCmp(\n 'eq',\n expr.col,\n { kind: 'lit', value },\n scanByName,\n cols,\n ),\n );\n return (row) => {\n for (const test of tests) if (test(row)) return true;\n return false;\n };\n }\n case 'cmp':\n return compileCmp(expr.op, expr.left, expr.right, scanByName, cols);\n case 'str':\n return compileString(expr, scanByName, cols);\n }\n}\n\nfunction requireCol(\n ref: ColumnRef,\n scanByName: ReadonlyMap<string, ScanColumn>,\n cols: Set<string>,\n): ScanColumn {\n const sc = scanByName.get(ref.name);\n if (!sc) throw new FilterCompileError(`unknown column \"${ref.name}\"`);\n cols.add(ref.name);\n return sc;\n}\n\nfunction compileCmp(\n op: 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte',\n left: Operand,\n right: Operand,\n scanByName: ReadonlyMap<string, ScanColumn>,\n cols: Set<string>,\n): RowTest {\n // Exactly one side must be a column and one a literal — column↔column\n // compares are rare in practice and not vectorized in v1.\n let ref: ColumnRef;\n let literal: Scalar;\n let flipped: boolean;\n if (left.kind === 'col' && right.kind === 'lit') {\n ref = left;\n literal = right.value;\n flipped = false;\n } else if (left.kind === 'lit' && right.kind === 'col') {\n ref = right;\n literal = left.value;\n flipped = true;\n } else {\n throw new FilterCompileError(\n 'column-column and literal-literal comparisons are not supported in filter DSL',\n );\n }\n // Normalize direction so the column is always on the left conceptually:\n // flip gt↔lt, gte↔lte when the literal was on the left.\n const effective = flipped ? flipCmp(op) : op;\n return buildCmp(effective, requireCol(ref, scanByName, cols), literal);\n}\n\nfunction flipCmp(op: 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte'): typeof op {\n switch (op) {\n case 'eq':\n case 'neq':\n return op;\n case 'gt':\n return 'lt';\n case 'gte':\n return 'lte';\n case 'lt':\n return 'gt';\n case 'lte':\n return 'gte';\n }\n}\n\nfunction buildCmp(\n op: 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte',\n sc: ScanColumn,\n literal: Scalar,\n): RowTest {\n const code = sc.typeCode;\n const validity = sc.validity;\n\n // Numeric fast paths (non-bigint).\n if (isNumericTypeCode(code)) {\n const values = sc.values as { readonly [i: number]: number; length: number };\n if (literal === null) {\n // null comparison: only `eq` and `neq` are defined; both return false\n // against a non-null value. Matching semantics: x === null in JS ⇒\n // true only when the cell is null. So we collapse to isNull.\n if (op === 'eq') {\n if (!validity) return () => false;\n return (row) => !isValid(validity, row);\n }\n if (op === 'neq') {\n if (!validity) return () => true;\n return (row) => isValid(validity, row);\n }\n return () => false;\n }\n if (typeof literal !== 'number') {\n throw new FilterCompileError(\n `column \"${sc.name}\" expects numeric literal, got ${typeof literal}`,\n );\n }\n const lit = literal;\n const cmp = numericCmp(op);\n if (!validity) return (row) => cmp(values[row] ?? 0, lit);\n return (row) => isValid(validity, row) && cmp(values[row] ?? 0, lit);\n }\n\n if (code === ColumnTypeCode.Bool) {\n const values = sc.values as Uint8Array;\n if (literal === null) {\n if (op === 'eq') {\n if (!validity) return () => false;\n return (row) => !isValid(validity, row);\n }\n if (op === 'neq') return validity ? (row) => isValid(validity, row) : () => true;\n return () => false;\n }\n if (typeof literal !== 'boolean') {\n throw new FilterCompileError(\n `column \"${sc.name}\" expects boolean literal, got ${typeof literal}`,\n );\n }\n const litByte = literal ? 1 : 0;\n if (op === 'eq') {\n if (!validity) return (row) => (values[row] ?? 0) === litByte;\n return (row) => isValid(validity, row) && (values[row] ?? 0) === litByte;\n }\n if (op === 'neq') {\n if (!validity) return (row) => (values[row] ?? 0) !== litByte;\n return (row) => isValid(validity, row) && (values[row] ?? 0) !== litByte;\n }\n throw new FilterCompileError(\n `bool columns only support eq/neq (got ${op})`,\n );\n }\n\n if (code === ColumnTypeCode.Int64 || code === ColumnTypeCode.UInt64) {\n const values = sc.values as BigInt64Array | BigUint64Array;\n if (literal === null) {\n if (op === 'eq') return validity ? (row) => !isValid(validity, row) : () => false;\n if (op === 'neq') return validity ? (row) => isValid(validity, row) : () => true;\n return () => false;\n }\n if (typeof literal !== 'bigint') {\n if (typeof literal === 'number' && Number.isInteger(literal)) {\n literal = BigInt(literal);\n } else {\n throw new FilterCompileError(\n `column \"${sc.name}\" expects bigint literal, got ${typeof literal}`,\n );\n }\n }\n const lit = literal as bigint;\n const cmp = bigintCmp(op);\n if (!validity) return (row) => cmp(values[row] as bigint, lit);\n return (row) => isValid(validity, row) && cmp(values[row] as bigint, lit);\n }\n\n if (code === ColumnTypeCode.DictUtf8) {\n // Dict lookup: interned code. eq/neq are O(1) via reverse lookup.\n const dict = sc.dictionary!;\n const codes = sc.values as Uint32Array;\n if (literal === null) {\n if (op === 'eq') return validity ? (row) => !isValid(validity, row) : () => false;\n if (op === 'neq') return validity ? (row) => isValid(validity, row) : () => true;\n return () => false;\n }\n if (typeof literal !== 'string') {\n throw new FilterCompileError(\n `column \"${sc.name}\" expects string literal, got ${typeof literal}`,\n );\n }\n const matchCode = dict.lookup(literal);\n if (op === 'eq') {\n if (matchCode === undefined) {\n // Literal absent from dict ⇒ no row matches.\n return () => false;\n }\n if (!validity) return (row) => codes[row] === matchCode;\n return (row) => isValid(validity, row) && codes[row] === matchCode;\n }\n if (op === 'neq') {\n if (matchCode === undefined) {\n if (!validity) return () => true;\n return (row) => isValid(validity, row);\n }\n if (!validity) return (row) => codes[row] !== matchCode;\n return (row) => isValid(validity, row) && codes[row] !== matchCode;\n }\n throw new FilterCompileError(\n `dict_utf8 columns only support eq/neq (got ${op})`,\n );\n }\n\n if (code === ColumnTypeCode.Utf8) {\n const ranges = sc.values as Int32Array;\n const heap = sc.heap!;\n if (literal === null) {\n if (op === 'eq') return validity ? (row) => !isValid(validity, row) : () => false;\n if (op === 'neq') return validity ? (row) => isValid(validity, row) : () => true;\n return () => false;\n }\n if (typeof literal !== 'string') {\n throw new FilterCompileError(\n `column \"${sc.name}\" expects string literal, got ${typeof literal}`,\n );\n }\n const lit = literal;\n const readString = (row: number): string => {\n const start = ranges[row * 2] ?? 0;\n const end = ranges[row * 2 + 1] ?? 0;\n return heap.read(start, end);\n };\n if (op === 'eq') {\n if (!validity) return (row) => readString(row) === lit;\n return (row) => isValid(validity, row) && readString(row) === lit;\n }\n if (op === 'neq') {\n if (!validity) return (row) => readString(row) !== lit;\n return (row) => isValid(validity, row) && readString(row) !== lit;\n }\n throw new FilterCompileError(\n `utf8 columns only support eq/neq (got ${op})`,\n );\n }\n\n throw new FilterCompileError(\n `filter DSL does not support column type code ${code}`,\n );\n}\n\n// ----------------------------------------------------------------------\n// String predicates (contains / startsWith / endsWith / like / matches)\n// ----------------------------------------------------------------------\n\nfunction compileString(\n expr: StringOpNode,\n scanByName: ReadonlyMap<string, ScanColumn>,\n cols: Set<string>,\n): RowTest {\n const sc = requireCol(expr.col, scanByName, cols);\n const code = sc.typeCode;\n if (code !== ColumnTypeCode.Utf8 && code !== ColumnTypeCode.DictUtf8) {\n throw new FilterCompileError(\n `string predicates require a utf8 or dict_utf8 column; \"${sc.name}\" is not a string column`,\n );\n }\n const validity = sc.validity;\n const negated = expr.negated === true;\n const stringPredicate = buildStringPredicate(expr);\n\n // Dict path: pre-resolve matching codes once.\n if (code === ColumnTypeCode.DictUtf8) {\n const dict = sc.dictionary!;\n const codes = sc.values as Uint32Array;\n const matchSet = new Set<number>();\n for (const [codeVal, str] of dict.entries()) {\n if (stringPredicate(str)) matchSet.add(codeVal);\n }\n if (matchSet.size === 0) {\n const constResult = negated; // if no codes match, result is the negation bit\n if (!validity) return () => constResult;\n return (row) => (isValid(validity, row) ? constResult : false);\n }\n if (!validity) {\n if (!negated) return (row) => matchSet.has(codes[row]!);\n return (row) => !matchSet.has(codes[row]!);\n }\n if (!negated) {\n return (row) => isValid(validity, row) && matchSet.has(codes[row]!);\n }\n return (row) => isValid(validity, row) && !matchSet.has(codes[row]!);\n }\n\n // Utf8 path: decode [start,end) range, then test.\n const ranges = sc.values as Int32Array;\n const heap = sc.heap!;\n const readString = (row: number): string => {\n const start = ranges[row * 2] ?? 0;\n const end = ranges[row * 2 + 1] ?? 0;\n return heap.read(start, end);\n };\n if (!validity) {\n if (!negated) return (row) => stringPredicate(readString(row));\n return (row) => !stringPredicate(readString(row));\n }\n if (!negated) {\n return (row) => isValid(validity, row) && stringPredicate(readString(row));\n }\n return (row) => isValid(validity, row) && !stringPredicate(readString(row));\n}\n\nfunction buildStringPredicate(expr: StringOpNode): (s: string) => boolean {\n switch (expr.op) {\n case 'contains': return compileSubstring(expr.value, expr.caseInsensitive ?? false, 'contains');\n case 'startsWith': return compileSubstring(expr.value, expr.caseInsensitive ?? false, 'startsWith');\n case 'endsWith': return compileSubstring(expr.value, expr.caseInsensitive ?? false, 'endsWith');\n case 'like': return compileLike(expr.value, expr.caseInsensitive ?? false);\n case 'matches': return compileRegex(expr.value, expr.flags);\n }\n}\n\nfunction compileSubstring(\n needle: string,\n caseInsensitive: boolean,\n mode: 'contains' | 'startsWith' | 'endsWith',\n): (s: string) => boolean {\n if (caseInsensitive) {\n const needleL = asciiToLower(needle);\n switch (mode) {\n case 'contains': return (s) => asciiToLower(s).includes(needleL);\n case 'startsWith': return (s) => asciiToLower(s).startsWith(needleL);\n case 'endsWith': return (s) => asciiToLower(s).endsWith(needleL);\n }\n }\n switch (mode) {\n case 'contains': return (s) => s.includes(needle);\n case 'startsWith': return (s) => s.startsWith(needle);\n case 'endsWith': return (s) => s.endsWith(needle);\n }\n}\n\n/** SQL LIKE → regex. `%` = any sequence, `_` = any single char, `\\` escapes. */\nfunction compileLike(\n pattern: string,\n caseInsensitive: boolean,\n): (s: string) => boolean {\n const simple = parseSimpleLike(pattern);\n if (simple !== undefined) {\n const { literal, leadingWildcard, trailingWildcard } = simple;\n if (leadingWildcard && trailingWildcard) {\n return compileSubstring(literal, caseInsensitive, 'contains');\n }\n if (leadingWildcard) return compileSubstring(literal, caseInsensitive, 'endsWith');\n if (trailingWildcard) return compileSubstring(literal, caseInsensitive, 'startsWith');\n if (caseInsensitive) {\n const expected = asciiToLower(literal);\n return (s) => asciiToLower(s) === expected;\n }\n return (s) => s === literal;\n }\n\n let src = '^';\n let i = 0;\n while (i < pattern.length) {\n const c = pattern[i]!;\n if (c === '\\\\' && i + 1 < pattern.length) {\n const next = pattern[i + 1]!;\n if (next === '%' || next === '_' || next === '\\\\') {\n src += escapeRegexChar(next);\n i += 2;\n continue;\n }\n }\n if (c === '%') {\n src += '.*';\n } else if (c === '_') {\n src += '.';\n } else {\n src += escapeRegexChar(c);\n }\n i++;\n }\n src += '$';\n const re = new RegExp(src, caseInsensitive ? 'is' : 's');\n return (s) => re.test(s);\n}\n\n/** Recognize LIKE shapes that need only equality/substring matching. */\nfunction parseSimpleLike(pattern: string): {\n readonly literal: string;\n readonly leadingWildcard: boolean;\n readonly trailingWildcard: boolean;\n} | undefined {\n let literal = '';\n let leadingWildcard = false;\n let pendingWildcard = false;\n let sawLiteral = false;\n for (let i = 0; i < pattern.length; i++) {\n const char = pattern[i]!;\n if (char === '\\\\' && i + 1 < pattern.length) {\n const next = pattern[i + 1]!;\n if (next === '%' || next === '_' || next === '\\\\') {\n if (pendingWildcard && sawLiteral) return undefined;\n pendingWildcard = false;\n literal += next;\n sawLiteral = true;\n i++;\n continue;\n }\n }\n if (char === '_') return undefined;\n if (char === '%') {\n if (sawLiteral) pendingWildcard = true;\n else leadingWildcard = true;\n continue;\n }\n if (pendingWildcard && sawLiteral) return undefined;\n pendingWildcard = false;\n literal += char;\n sawLiteral = true;\n }\n return { literal, leadingWildcard, trailingWildcard: pendingWildcard };\n}\n\nfunction compileRegex(\n source: string,\n flags: string | undefined,\n): (s: string) => boolean {\n let re: RegExp;\n try {\n re = new RegExp(source, flags);\n } catch (err) {\n throw new FilterCompileError(\n `invalid regex \"${source}\"${flags ? ` (flags \"${flags}\")` : ''}: ${\n err instanceof Error ? err.message : String(err)\n }`,\n );\n }\n return (s) => re.test(s);\n}\n\n// Escape a single character for embedding in a RegExp.\nfunction escapeRegexChar(c: string): string {\n // Only these are regex-meta; all other chars are safe as-is.\n if ('^$.|?*+()[]{}\\\\/'.includes(c)) return '\\\\' + c;\n return c;\n}\n\n/**\n * ASCII-only lowercasing. Fast (no locale-table lookups). Non-ASCII\n * characters pass through unchanged — use `matches` with 'i' flag for\n * full-Unicode case folding.\n */\nfunction asciiToLower(s: string): string {\n let out = '';\n let changed = false;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c >= 65 && c <= 90) {\n if (!changed) {\n out = s.slice(0, i);\n changed = true;\n }\n out += String.fromCharCode(c + 32);\n } else if (changed) {\n out += s[i];\n }\n }\n return changed ? out : s;\n}\n\n\nfunction isNumericTypeCode(code: ColumnTypeCode): boolean {\n switch (code) {\n case ColumnTypeCode.Int8:\n case ColumnTypeCode.Int16:\n case ColumnTypeCode.Int32:\n case ColumnTypeCode.UInt8:\n case ColumnTypeCode.UInt16:\n case ColumnTypeCode.UInt32:\n case ColumnTypeCode.Float32:\n case ColumnTypeCode.Float64:\n return true;\n default:\n return false;\n }\n}\n\nfunction numericCmp(op: 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte'): (a: number, b: number) => boolean {\n switch (op) {\n case 'eq': return (a, b) => a === b;\n case 'neq': return (a, b) => a !== b;\n case 'gt': return (a, b) => a > b;\n case 'gte': return (a, b) => a >= b;\n case 'lt': return (a, b) => a < b;\n case 'lte': return (a, b) => a <= b;\n }\n}\n\nfunction bigintCmp(op: 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte'): (a: bigint, b: bigint) => boolean {\n switch (op) {\n case 'eq': return (a, b) => a === b;\n case 'neq': return (a, b) => a !== b;\n case 'gt': return (a, b) => a > b;\n case 'gte': return (a, b) => a >= b;\n case 'lt': return (a, b) => a < b;\n case 'lte': return (a, b) => a <= b;\n }\n}\n\n// ----------------------------------------------------------------------\n// Scan + sort\n// ----------------------------------------------------------------------\n\n/**\n * Collect row ordinals matching `test` from the live-ordinal iterator\n * into a `Uint32Array`. Grows a JS array (fast, V8-optimised) and copies\n * once at the end — avoids the cost of predicting a capacity.\n */\nexport function scanOrdinals(\n liveOrdinals: Iterable<number>,\n test: RowTest,\n): Uint32Array {\n const buf: number[] = [];\n for (const r of liveOrdinals) {\n if (test(r)) buf.push(r);\n }\n const out = new Uint32Array(buf.length);\n for (let i = 0; i < buf.length; i++) out[i] = buf[i]!;\n return out;\n}\n\n/**\n * Sort an ordinal buffer in-place by the given orderBy spec. When every\n * sort key is on a numeric typed-array column, we build a `Float64Array`\n * shadow-key buffer and sort indices into it (cheaper than reading the\n * typed array through bracket-index twice per compare). For mixed types\n * we fall back to a generic comparator that reads cells on demand.\n */\nexport function sortOrdinals(\n ordinals: Uint32Array,\n order: readonly OrderSpec[],\n scanByName: ReadonlyMap<string, ScanColumn>,\n readCell: (row: number, col: string) => unknown,\n): Uint32Array {\n if (order.length === 0) return ordinals;\n\n // Fast path: single numeric key.\n if (order.length === 1) {\n const spec = order[0]!;\n const sc = scanByName.get(spec.column);\n if (sc && isNumericTypeCode(sc.typeCode) && !sc.nullable) {\n const values = sc.values as { readonly [i: number]: number };\n const n = ordinals.length;\n const keys = new Float64Array(n);\n for (let i = 0; i < n; i++) keys[i] = values[ordinals[i]!] ?? 0;\n const idx = new Uint32Array(n);\n for (let i = 0; i < n; i++) idx[i] = i;\n const asc = spec.dir === 'asc';\n // Array.prototype.sort on a plain number[] is faster than on a\n // typed-array because typed-array sort is numeric-lex only for\n // Uint32Array with no comparator. We use plain Array here.\n const arr = Array.from(idx);\n arr.sort((a, b) => {\n const av = keys[a]!;\n const bv = keys[b]!;\n if (av === bv) return a - b; // stable\n return asc ? (av < bv ? -1 : 1) : (av < bv ? 1 : -1);\n });\n const out = new Uint32Array(n);\n for (let i = 0; i < n; i++) out[i] = ordinals[arr[i]!]!;\n return out;\n }\n }\n\n // Generic fallback: comparator reads cells from the collection.\n const arr = Array.from(ordinals);\n arr.sort((ra, rb) => {\n for (const spec of order) {\n const av = readCell(ra, spec.column);\n const bv = readCell(rb, spec.column);\n const c = compareScalars(av, bv);\n if (c !== 0) return spec.dir === 'asc' ? c : -c;\n }\n return ra - rb; // stable by ordinal\n });\n const out = new Uint32Array(arr.length);\n for (let i = 0; i < arr.length; i++) out[i] = arr[i]!;\n return out;\n}\n\nfunction compareScalars(a: unknown, b: unknown): number {\n if (a === b) return 0;\n if (a === null || a === undefined) return -1;\n if (b === null || b === undefined) return 1;\n if (typeof a === 'bigint' && typeof b === 'bigint') return a < b ? -1 : a > b ? 1 : 0;\n if (typeof a === 'number' && typeof b === 'number') return a < b ? -1 : a > b ? 1 : 0;\n if (typeof a === 'boolean' && typeof b === 'boolean') return (a ? 1 : 0) - (b ? 1 : 0);\n const sa = String(a);\n const sb = String(b);\n return sa < sb ? -1 : sa > sb ? 1 : 0;\n}\n\n// ----------------------------------------------------------------------\n// Materialization\n// ----------------------------------------------------------------------\n\n/**\n * Materialize projected row objects for the `[offset, offset+limit)`\n * slice of the ordinal buffer. `columns` defines the projection — if\n * null, every column is emitted (full row).\n */\nexport function materialize(\n collection: Collection,\n ordinals: Uint32Array,\n offset: number,\n limit: number | null,\n selection: readonly string[] | null,\n): RowValue[] {\n const end = limit === null ? ordinals.length : Math.min(ordinals.length, offset + limit);\n const n = Math.max(0, end - offset);\n const out: RowValue[] = new Array(n);\n const cols = selection ?? (collection.columnNames() as readonly string[]);\n for (let i = 0; i < n; i++) {\n const row = ordinals[offset + i]!;\n const obj: RowValue = {};\n for (let c = 0; c < cols.length; c++) {\n const name = cols[c]!;\n obj[name] = collection._internalReadCell(name, row);\n }\n out[i] = obj;\n }\n return out;\n}\n","/**\n * QueryIR compiler — Layer C.5.\n *\n * Executes the TanStack-compatible QueryIR produced by builder.ts\n * against ArrowBase collections. This is intentionally a coarse\n * batch compiler: `runCollection()` materializes a result array, and\n * `runLive()` re-runs the whole query on any upstream collection\n * change. Layer F replaces that coarse invalidation with IVM.\n */\n\nimport type { Collection, RowValue } from '../collection/collection.js';\nimport { ValidationError } from '../errors.js';\nimport {\n assertValidBbox,\n bboxIntersectsRaw,\n bboxWithinRaw,\n pointBbox,\n type BBox,\n} from '../geo/bbox.js';\nimport { haversineDistanceMeters } from '../geo/distance.js';\nimport { assertValidPoint, type Point } from '../geo/point-column.js';\nimport { pointInPolygon } from '../geo/point-in-polygon.js';\nimport { normalizePolygon, type Polygon } from '../geo/polygon-column.js';\nimport { optimizeExpressionWithIndexes } from '../indexes/index-optimization.js';\nimport type { ColumnRef as FilterColumnRef, FilterExpr, Operand as FilterOperand, Scalar } from './filter.js';\nimport { compileFilter, materialize, scanOrdinals, sortOrdinals } from './kernel.js';\nimport type { OrderSpec } from './query.js';\nimport {\n Aggregate,\n CollectionRef,\n Func,\n INCLUDES_SCALAR_FIELD,\n IncludesSubquery,\n PropRef,\n QueryRef,\n Value,\n getHavingExpression,\n getWhereExpression,\n isExpressionLike,\n type BasicExpression,\n type CompareOptions,\n type From,\n type Having,\n type IncludesMaterialization,\n type JoinClause,\n type NamespacedRow,\n type QueryIR,\n type Select,\n type Where,\n} from './ir.js';\n\nexport type ResultRow = unknown;\nexport type CompiledExpression = (row: Record<string, unknown>) => unknown;\n\nexport interface IncludesCompilationResult {\n pipeline: Array<ResultRow>;\n fieldName: string;\n correlationField: PropRef;\n childCorrelationField: PropRef;\n hasOrderBy: boolean;\n childCompilationResult: CompilationResult;\n parentProjection?: Array<PropRef>;\n materialization: IncludesMaterialization;\n scalarField?: string;\n}\n\nexport interface CompilationResult {\n collectionId: string;\n pipeline: Array<ResultRow>;\n sourceWhereClauses: Map<string, BasicExpression<boolean>>;\n aliasToCollectionId: Record<string, string>;\n aliasRemapping: Record<string, string>;\n includes?: Array<IncludesCompilationResult>;\n}\n\ntype RowRecord = Record<string, unknown>;\n\ntype WorkRow = {\n key: string | number;\n ns: Record<string, unknown>;\n};\n\ntype IncludeCandidateCache = WeakMap<object, Map<unknown, Uint32Array>>;\ntype FastPathExecutor = (candidateOrdinals?: Uint32Array) => Array<ResultRow> | undefined;\nlet activeIncludeCandidateCache: IncludeCandidateCache | undefined;\nlet activeIncludeExecutorCache: WeakMap<object, FastPathExecutor | null> | undefined;\nlet runCollectionDepth = 0;\n\ntype FastProjection =\n | { kind: 'full' }\n | { kind: 'scalar'; expression: BasicExpression; alias: string }\n | { kind: 'object'; fields: Array<{ path: Array<string>; expression: BasicExpression }>; alias: string };\n\ntype GeoCandidatePlan =\n | {\n predicate: 'bboxIntersects' | 'bboxWithin';\n column: string;\n bbox: BBox;\n }\n | {\n predicate: 'dwithin';\n column: string;\n bbox: BBox;\n point: Point;\n meters: number;\n };\n\ntype FastWherePlan = {\n filterExpr: FilterExpr | null;\n indexExpression: BasicExpression | null;\n geoCandidate: GeoCandidatePlan | null;\n residualExpressions: Array<BasicExpression>;\n alwaysFalse: boolean;\n};\n\ntype FastPathPlan = {\n collection: Collection;\n alias: string;\n filterExpr: FilterExpr | null;\n order: Array<OrderSpec>;\n projection: FastProjection;\n indexExpression: BasicExpression | null;\n geoCandidate: GeoCandidatePlan | null;\n residualExpressions: Array<BasicExpression>;\n alwaysFalse: boolean;\n offset: number;\n limit: number | null;\n};\n\n/** Execute a QueryIR once and return dense result rows. */\nexport function runCollection(ir: QueryIR): Array<ResultRow> {\n const root = runCollectionDepth === 0;\n if (root) {\n activeIncludeCandidateCache = new WeakMap();\n activeIncludeExecutorCache = new WeakMap();\n }\n runCollectionDepth++;\n try {\n const fast = runSingleCollectionFastPath(ir);\n if (fast !== undefined) return fast;\n return executeQuery(ir).map((row) => finalizeSelected(row.ns));\n } finally {\n runCollectionDepth--;\n if (root) {\n activeIncludeCandidateCache = undefined;\n activeIncludeExecutorCache = undefined;\n }\n }\n}\n\n/**\n * Compile QueryIR into a stable Layer-C result envelope. The pipeline is\n * the current batch-compiler output; metadata mirrors TanStack's compiler\n * shape so optimizer/conformance code has the same public handles.\n */\nexport function compileQuery(rawQuery: QueryIR, ..._unused: Array<unknown>): CompilationResult {\n const aliasToCollectionId: Record<string, string> = {};\n const aliasRemapping: Record<string, string> = {};\n collectAliasMetadata(rawQuery.from, aliasToCollectionId, aliasRemapping);\n for (const join of rawQuery.join ?? []) {\n collectAliasMetadata(join.from, aliasToCollectionId, aliasRemapping);\n }\n\n const result: CompilationResult = {\n collectionId: collectionIdFor(rawQuery.from) ?? '',\n pipeline: runCollection(rawQuery),\n sourceWhereClauses: collectSourceWhereClauses(rawQuery),\n aliasToCollectionId,\n aliasRemapping,\n };\n const includes = compileIncludes(rawQuery.select as unknown);\n if (includes.length > 0) result.includes = includes;\n return result;\n}\n\n/**\n * Coarse live runner: emit initial result, then re-run after any\n * upstream source mutation. Returns unsubscribe.\n */\nexport function runLive(\n ir: QueryIR,\n callback: (rows: Array<ResultRow>) => void,\n): () => void {\n callback(runCollection(ir));\n const collections = collectCollections(ir);\n const unsubs = collections.map((collection) =>\n collection.subscribe(() => {\n callback(runCollection(ir));\n }),\n );\n return () => {\n for (const unsub of unsubs) unsub();\n };\n}\n\n/** Compile a scalar expression evaluator over a namespaced row. */\nexport function compileExpression(expr: BasicExpression): CompiledExpression {\n return (row) => evaluateExpression(expr, row);\n}\n\n/** Compile a scalar expression over a plain single row. */\nexport function compileSingleRowExpression(expr: BasicExpression): CompiledExpression {\n return (row) => evaluateSingleRowExpression(expr, row);\n}\n\n/** TanStack truthiness helper: only literal `true` passes filters. */\nexport function toBooleanPredicate(value: unknown): boolean {\n return value === true;\n}\n\nfunction executeQuery(query: QueryIR): Array<WorkRow> {\n validateQueryStructure(query);\n\n let rows = rowsFromFrom(query.from);\n\n for (const join of query.join ?? []) {\n rows = applyJoin(rows, join);\n }\n\n rows = applyWhere(rows, query.where);\n\n for (const fnWhere of query.fnWhere ?? []) {\n rows = rows.filter((row) => toBooleanPredicate(fnWhere(row.ns as NamespacedRow)));\n }\n\n const rawSelect = query.select as unknown;\n const needsGrouping =\n (query.groupBy?.length ?? 0) > 0 ||\n containsAggregateInSelect(rawSelect) ||\n containsAggregateInHaving(query.having);\n\n if (needsGrouping) {\n rows = applyGroupBy(rows, query);\n } else {\n rows = applySelect(rows, query);\n }\n\n if (query.distinct) {\n rows = distinctRows(rows);\n }\n\n if (query.orderBy && query.orderBy.length > 0) {\n rows = orderRows(rows, query.orderBy);\n }\n\n const offset = query.offset ?? 0;\n const effectiveLimit = query.singleResult ? 1 : query.limit;\n if (offset !== 0 || effectiveLimit !== undefined) {\n const end = effectiveLimit === undefined ? rows.length : offset + effectiveLimit;\n rows = rows.slice(offset, end);\n }\n\n return rows;\n}\n\nfunction validateQueryStructure(query: QueryIR): void {\n if (query.distinct && !query.fnSelect && query.select === undefined) {\n throw new ValidationError('distinct requires select or fn.select');\n }\n\n if (query.fnSelect && (query.groupBy?.length ?? 0) > 0) {\n throw new ValidationError('fn.select cannot be combined with groupBy');\n }\n\n if ((query.having?.length ?? 0) > 0 && (query.groupBy?.length ?? 0) === 0) {\n if (!containsAggregateInSelect(query.select as unknown)) {\n throw new ValidationError('having requires groupBy unless selecting aggregate expressions');\n }\n }\n\n if ((query.limit !== undefined || query.offset !== undefined) && (query.orderBy?.length ?? 0) === 0) {\n throw new ValidationError('limit and offset require orderBy');\n }\n}\n\n// ---------------------------------------------------------------------\n// Single-collection vectorized fast path\n// ---------------------------------------------------------------------\n\nfunction runSingleCollectionFastPath(\n query: QueryIR,\n candidateOrdinals?: Uint32Array,\n): Array<ResultRow> | undefined {\n return createFastPathExecutor(query)?.(candidateOrdinals);\n}\n\n/** Compile invariant scan/projection state once; correlated includes reuse it. */\nfunction createFastPathExecutor(query: QueryIR): FastPathExecutor | undefined {\n const plan = createFastPathPlan(query);\n if (!plan) return undefined;\n if (plan.alwaysFalse) return () => [];\n\n const scanByName = new Map<string, ReturnType<Collection['_internalScanColumns']>[number]>();\n for (const column of plan.collection._internalScanColumns()) scanByName.set(column.name, column);\n let compiled: ReturnType<typeof compileFilter>;\n try {\n compiled = compileFilter(plan.filterExpr, scanByName);\n } catch {\n return undefined;\n }\n\n return (candidateOrdinals?: Uint32Array): Array<ResultRow> | undefined => {\n let ordinals: Uint32Array;\n try {\n let liveOrdinals: Iterable<number>;\n if (candidateOrdinals !== undefined) {\n liveOrdinals = candidateOrdinals;\n } else if (plan.geoCandidate !== null) {\n const candidates = plan.collection._internalSearchSpatialIndex(\n plan.geoCandidate.column,\n plan.geoCandidate.bbox,\n );\n if (candidates === undefined) return undefined;\n liveOrdinals = candidates;\n } else {\n liveOrdinals = plan.collection._internalLiveOrdinals();\n if (plan.indexExpression !== null) {\n const optimized = optimizeExpressionWithIndexes(plan.indexExpression, plan.collection);\n if (optimized.canOptimize) {\n liveOrdinals = plan.collection._internalLiveOrdinalsForKeys(optimized.matchingKeys);\n }\n }\n }\n ordinals = scanOrdinals(liveOrdinals, (row) =>\n compiled.test(row) && fastResidualMatches(plan, row),\n );\n } catch {\n return undefined;\n }\n\n ordinals = sortOrdinals(\n ordinals,\n plan.order,\n scanByName,\n (row, col) => plan.collection._internalReadCell(col, row),\n );\n\n return materializeFastProjection(plan.collection, ordinals, plan.offset, plan.limit, plan.projection);\n };\n}\n\nfunction createFastPathPlan(query: QueryIR): FastPathPlan | undefined {\n if (query.from.type !== 'collectionRef') return undefined;\n if ((query.join?.length ?? 0) > 0) return undefined;\n if (query.fnSelect || (query.fnWhere?.length ?? 0) > 0 || (query.fnHaving?.length ?? 0) > 0) return undefined;\n if ((query.groupBy?.length ?? 0) > 0 || (query.having?.length ?? 0) > 0) return undefined;\n if (query.distinct) return undefined;\n if (containsAggregateInSelect(query.select as unknown)) return undefined;\n\n validateQueryStructure(query);\n\n const collection = query.from.collection;\n const alias = query.from.alias;\n const wherePlan = fastWherePlanForWhere(query.where, alias, collection);\n if (wherePlan === undefined) return undefined;\n const projection = fastProjectionForSelect(query.select as unknown, alias, collection);\n if (!projection) return undefined;\n const selectedColumns = projectionToColumnMap(projection);\n const order = fastOrderForOrderBy(query.orderBy, alias, selectedColumns, collection);\n if (!order) return undefined;\n\n const offset = query.offset ?? 0;\n const effectiveLimit = query.singleResult ? 1 : query.limit;\n return {\n collection,\n alias,\n filterExpr: wherePlan.filterExpr,\n order,\n projection,\n indexExpression: wherePlan.indexExpression,\n geoCandidate: wherePlan.geoCandidate,\n residualExpressions: wherePlan.residualExpressions,\n alwaysFalse: wherePlan.alwaysFalse,\n offset,\n limit: effectiveLimit ?? null,\n };\n}\n\nfunction fastResidualMatches(plan: FastPathPlan, row: number): boolean {\n if (plan.geoCandidate !== null && !fastGeoCandidateMatches(plan.collection, plan.geoCandidate, row)) {\n return false;\n }\n if (plan.residualExpressions.length === 0) return true;\n const ns: Record<string, unknown> = { [plan.alias]: fastRowObject(plan.collection, row) };\n for (const expr of plan.residualExpressions) {\n if (!toBooleanPredicate(evaluateExpression(expr, ns))) return false;\n }\n return true;\n}\n\nfunction fastGeoCandidateMatches(\n collection: Collection,\n candidate: GeoCandidatePlan,\n row: number,\n): boolean {\n switch (candidate.predicate) {\n case 'bboxIntersects':\n return collection._internalGeometryBboxMatches(candidate.column, row, candidate.bbox, 'intersects');\n case 'bboxWithin':\n return collection._internalGeometryBboxMatches(candidate.column, row, candidate.bbox, 'within');\n case 'dwithin':\n return collection._internalPointDWithin(candidate.column, row, candidate.point, candidate.meters);\n }\n}\n\nfunction fastRowObject(collection: Collection, row: number): RowRecord {\n const obj: RowRecord = {};\n for (const column of collection.columnNames()) {\n obj[column] = collection._internalReadCell(column, row);\n }\n return obj;\n}\n\nfunction fastWherePlanForWhere(\n where: QueryIR['where'],\n alias: string,\n collection: Collection,\n): FastWherePlan | undefined {\n const clauses = where ?? [];\n if (clauses.length === 0) {\n return {\n filterExpr: null,\n indexExpression: null,\n geoCandidate: null,\n residualExpressions: [],\n alwaysFalse: false,\n };\n }\n\n const filters: Array<FilterExpr> = [];\n const indexExpressions: Array<BasicExpression> = [];\n const residualExpressions: Array<BasicExpression> = [];\n let geoCandidate: GeoCandidatePlan | null = null;\n let alwaysFalse = false;\n\n for (const clause of clauses) {\n const expr = getWhereExpression(clause);\n if (isUndefinedOfSchemaColumn(expr, alias, collection)) {\n alwaysFalse = true;\n continue;\n }\n const geo = geoCandidateForExpression(expr, alias);\n if (geo) {\n if (geoCandidate === null) {\n geoCandidate = geo;\n if (expr instanceof Func && (expr.name === 'within' || expr.name === 'contains')) {\n // The R-tree supplies polygon-bbox candidates; retain exact topology\n // as a residual predicate.\n residualExpressions.push(expr);\n }\n } else {\n residualExpressions.push(expr);\n }\n continue;\n }\n\n const filter = filterExprForExpression(expr, alias);\n if (!filter) return undefined;\n filters.push(filter);\n\n const stripped = stripAliasForIndexExpression(expr, alias);\n if (stripped) indexExpressions.push(stripped);\n }\n\n return {\n filterExpr: filters.length === 0 ? null : filters.length === 1 ? filters[0]! : { kind: 'and', args: filters },\n indexExpression: indexExpressions.length === 0 ? null : indexExpressions.length === 1 ? indexExpressions[0]! : new Func('and', indexExpressions) as BasicExpression<boolean>,\n geoCandidate,\n residualExpressions,\n alwaysFalse,\n };\n}\n\nfunction isUndefinedOfSchemaColumn(\n expression: BasicExpression,\n alias: string,\n collection: Collection,\n): boolean {\n if (!(expression instanceof Func) || expression.name !== 'isUndefined') return false;\n const ref = expression.args[0];\n return ref instanceof PropRef &&\n ref.path.length === 2 &&\n ref.path[0] === alias &&\n collection.columnNames().includes(ref.path[1]!);\n}\n\nfunction geoCandidateForExpression(expr: BasicExpression, alias: string): GeoCandidatePlan | undefined {\n if (!(expr instanceof Func)) return undefined;\n if (expr.name === 'within' || expr.name === 'contains') {\n const columnArg = expr.name === 'within' ? expr.args[0] : expr.args[1];\n const polygonArg = expr.name === 'within' ? expr.args[1] : expr.args[0];\n const column = columnForAliasRef(columnArg!, alias);\n const bbox = literalPolygonBboxForGeo(polygonArg);\n return column && bbox ? { predicate: 'bboxIntersects', column, bbox } : undefined;\n }\n if (expr.name !== 'bboxIntersects' && expr.name !== 'bboxWithin' && expr.name !== 'dwithin') {\n return undefined;\n }\n const column = columnForAliasRef(expr.args[0]!, alias);\n if (!column) return undefined;\n\n if (expr.name === 'bboxIntersects' || expr.name === 'bboxWithin') {\n const bbox = literalBboxForGeo(expr.args[1]);\n return bbox ? { predicate: expr.name, column, bbox } : undefined;\n }\n\n const point = literalPointForGeo(expr.args[1]);\n if (!point) return undefined;\n const meters = literalRadiusMetersForGeo(expr.args[2]);\n if (meters === undefined) return undefined;\n return { predicate: 'dwithin', column, bbox: pointRadiusBbox(point, meters), point, meters };\n}\n\nfunction literalPolygonBboxForGeo(expr: BasicExpression | undefined): BBox | undefined {\n if (!(expr instanceof Value)) return undefined;\n const polygon = polygonOrNull(expr.value);\n if (!polygon) return undefined;\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const ring of polygon) {\n for (const point of ring) {\n minX = Math.min(minX, point[0]);\n minY = Math.min(minY, point[1]);\n maxX = Math.max(maxX, point[0]);\n maxY = Math.max(maxY, point[1]);\n }\n }\n return [minX, minY, maxX, maxY];\n}\n\nfunction literalBboxForGeo(expr: BasicExpression | undefined): BBox | undefined {\n if (!(expr instanceof Value)) return undefined;\n assertValidBbox(expr.value, 'bbox');\n return expr.value;\n}\n\nfunction literalPointForGeo(expr: BasicExpression | undefined): Point | undefined {\n if (!(expr instanceof Value)) return undefined;\n assertValidPoint(expr.value, 'point');\n return expr.value;\n}\n\nfunction literalRadiusMetersForGeo(expr: BasicExpression | undefined): number | undefined {\n if (!(expr instanceof Value)) return undefined;\n return evalGeoRadiusMeters(expr.value);\n}\n\nfunction pointRadiusBbox(point: Point, meters: number): BBox {\n const earthRadiusMeters = 6_371_008.8;\n const angularDegrees = (meters / earthRadiusMeters) * (180 / Math.PI);\n const cosLat = Math.cos((point[1] * Math.PI) / 180);\n const lngDelta = Math.abs(cosLat) < 1e-12 ? 180 : angularDegrees / Math.abs(cosLat);\n const latDelta = angularDegrees;\n return [\n clamp(point[0] - lngDelta, -180, 180),\n clamp(point[1] - latDelta, -90, 90),\n clamp(point[0] + lngDelta, -180, 180),\n clamp(point[1] + latDelta, -90, 90),\n ];\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value));\n}\n\nfunction fastFilterForWhere(where: QueryIR['where'], alias: string): FilterExpr | null | undefined {\n const clauses = where ?? [];\n if (clauses.length === 0) return null;\n const filters: Array<FilterExpr> = [];\n for (const clause of clauses) {\n const filter = filterExprForExpression(getWhereExpression(clause), alias);\n if (!filter) return undefined;\n filters.push(filter);\n }\n return filters.length === 1 ? filters[0]! : { kind: 'and', args: filters };\n}\n\nfunction filterExprForExpression(expr: BasicExpression, alias: string): FilterExpr | undefined {\n if (expr instanceof PropRef) {\n const ref = filterColumnForRef(expr, alias);\n return ref ? ref : undefined;\n }\n if (!(expr instanceof Func)) return undefined;\n\n switch (expr.name) {\n case 'and': {\n const args = expr.args.map((arg) => filterExprForExpression(arg, alias));\n if (args.some((arg) => arg === undefined)) return undefined;\n return { kind: 'and', args: args as Array<FilterExpr> };\n }\n case 'or': {\n const args = expr.args.map((arg) => filterExprForExpression(arg, alias));\n if (args.some((arg) => arg === undefined)) return undefined;\n return { kind: 'or', args: args as Array<FilterExpr> };\n }\n case 'not': {\n const arg = expr.args[0] ? filterExprForExpression(expr.args[0], alias) : undefined;\n return arg ? { kind: 'not', arg } : undefined;\n }\n case 'isNull': {\n const ref = expr.args[0] instanceof PropRef ? filterColumnForRef(expr.args[0], alias) : undefined;\n return ref ? { kind: 'isNull', col: ref, negated: false } : undefined;\n }\n case 'in': {\n const ref = expr.args[0] instanceof PropRef ? filterColumnForRef(expr.args[0], alias) : undefined;\n const array = expr.args[1] instanceof Value ? expr.args[1].value : undefined;\n if (!ref || !Array.isArray(array) || !array.every(isFilterScalar)) return undefined;\n return { kind: 'in', col: ref, values: array };\n }\n case 'like':\n case 'ilike': {\n const ref = expr.args[0] instanceof PropRef ? filterColumnForRef(expr.args[0], alias) : undefined;\n const pattern = literalScalarForFilter(expr.args[1]);\n if (!ref || typeof pattern !== 'string') return undefined;\n return { kind: 'str', op: 'like', col: ref, value: pattern, ...(expr.name === 'ilike' ? { caseInsensitive: true } : {}) };\n }\n case 'eq':\n case 'gt':\n case 'gte':\n case 'lt':\n case 'lte': {\n const left = filterOperandForExpression(expr.args[0], alias);\n const right = filterOperandForExpression(expr.args[1], alias);\n if (!left || !right) return undefined;\n return { kind: 'cmp', op: expr.name, left, right };\n }\n default:\n return undefined;\n }\n}\n\nfunction fastIndexExpressionForWhere(where: QueryIR['where'], alias: string): BasicExpression | null {\n const clauses = where ?? [];\n if (clauses.length === 0) return null;\n const expressions: Array<BasicExpression> = [];\n for (const clause of clauses) {\n const stripped = stripAliasForIndexExpression(getWhereExpression(clause), alias);\n if (!stripped) return null;\n expressions.push(stripped);\n }\n return expressions.length === 1 ? expressions[0]! : new Func('and', expressions) as BasicExpression<boolean>;\n}\n\nfunction stripAliasForIndexExpression(expr: BasicExpression, alias: string): BasicExpression | undefined {\n if (expr instanceof PropRef) {\n if (expr.path.length !== 2 || expr.path[0] !== alias) return undefined;\n return new PropRef([expr.path[1]!]);\n }\n if (expr instanceof Value) return expr;\n if (expr instanceof Func) {\n const args = expr.args.map((arg) => stripAliasForIndexExpression(arg, alias));\n if (args.some((arg) => arg === undefined)) return undefined;\n return new Func(expr.name, args as Array<BasicExpression>) as BasicExpression;\n }\n return undefined;\n}\n\nfunction fastProjectionForSelect(\n select: unknown,\n alias: string,\n collection: Collection,\n): FastProjection | undefined {\n if (select === undefined) return { kind: 'full' };\n if (isBasicExpression(select)) {\n return fastProjectionExpressionSupported(select, alias, collection)\n ? { kind: 'scalar', expression: select, alias }\n : undefined;\n }\n if (!isPlainObject(select) || isExpressionLike(select)) return undefined;\n\n const fields: Array<{ path: Array<string>; expression: BasicExpression }> = [];\n if (!collectFastProjectionFields(select as Select, alias, collection, [], fields)) return undefined;\n return { kind: 'object', fields, alias };\n}\n\nfunction collectFastProjectionFields(\n select: Select,\n alias: string,\n collection: Collection,\n prefix: Array<string>,\n fields: Array<{ path: Array<string>; expression: BasicExpression }>,\n): boolean {\n for (const [key, value] of Object.entries(select)) {\n if (key.startsWith('__SPREAD_SENTINEL__')) return false;\n const path = [...prefix, key];\n if (isBasicExpression(value)) {\n if (!fastProjectionExpressionSupported(value, alias, collection)) return false;\n fields.push({ path, expression: value });\n continue;\n }\n if (isPlainObject(value) && !isExpressionLike(value)) {\n if (!collectFastProjectionFields(value as Select, alias, collection, path, fields)) return false;\n continue;\n }\n return false;\n }\n return true;\n}\n\nfunction fastProjectionExpressionSupported(\n expression: BasicExpression,\n alias: string,\n collection: Collection,\n): boolean {\n if (expression.type === 'val') return true;\n if (expression.type === 'ref') {\n const column = columnForAliasRef(expression, alias);\n return column !== undefined && collection.columnNames().includes(column);\n }\n return expression.args.every((arg) => fastProjectionExpressionSupported(arg, alias, collection));\n}\n\nfunction projectionToColumnMap(projection: FastProjection): Map<string, string> {\n const map = new Map<string, string>();\n if (projection.kind === 'object') {\n for (const field of projection.fields) {\n const column = field.expression instanceof PropRef\n ? columnForAliasRef(field.expression, projection.alias)\n : undefined;\n if (field.path.length === 1 && column) map.set(field.path[0]!, column);\n }\n }\n if (projection.kind === 'scalar' && projection.expression instanceof PropRef) {\n const column = columnForAliasRef(projection.expression, projection.alias);\n if (column) map.set(INCLUDES_SCALAR_FIELD, column);\n }\n return map;\n}\n\nfunction fastOrderForOrderBy(\n orderBy: QueryIR['orderBy'],\n alias: string,\n selectedColumns: Map<string, string>,\n collection: Collection,\n): Array<OrderSpec> | undefined {\n const order: Array<OrderSpec> = [];\n for (const clause of orderBy ?? []) {\n const column = columnForAliasRef(clause.expression, alias) ?? columnForSelectedRef(clause.expression, selectedColumns);\n if (!column) return undefined;\n const compiledColumn = collection.schema.columnsByName.get(column);\n if (!compiledColumn || compiledColumn.nullable) return undefined;\n if (clause.compareOptions.stringSort === 'locale') {\n return undefined;\n }\n order.push({ column, dir: clause.compareOptions.direction });\n }\n return order;\n}\n\nfunction materializeFastProjection(\n collection: Collection,\n ordinals: Uint32Array,\n offset: number,\n limit: number | null,\n projection: FastProjection,\n): Array<ResultRow> {\n if (projection.kind === 'full') return materialize(collection, ordinals, offset, limit, null) as Array<ResultRow>;\n\n const end = limit === null ? ordinals.length : Math.min(ordinals.length, offset + limit);\n const n = Math.max(0, end - offset);\n const out: Array<ResultRow> = new Array(n);\n for (let i = 0; i < n; i++) {\n const row = ordinals[offset + i]!;\n if (projection.kind === 'scalar') {\n out[i] = evaluateFastProjectionExpression(projection.expression, collection, projection.alias, row);\n continue;\n }\n const obj: RowRecord = {};\n for (const field of projection.fields) {\n setAtPath(\n obj,\n field.path,\n evaluateFastProjectionExpression(field.expression, collection, projection.alias, row),\n );\n }\n out[i] = obj;\n }\n return out;\n}\n\nfunction evaluateFastProjectionExpression(\n expression: BasicExpression,\n collection: Collection,\n alias: string,\n row: number,\n): unknown {\n switch (expression.type) {\n case 'val':\n return expression.value;\n case 'ref': {\n const column = columnForAliasRef(expression, alias);\n return column === undefined ? undefined : collection._internalReadCell(column, row);\n }\n case 'func':\n return evaluateFuncWith(\n expression,\n (arg) => evaluateFastProjectionExpression(arg, collection, alias, row),\n );\n }\n}\n\nfunction filterOperandForExpression(expr: BasicExpression | undefined, alias: string): FilterOperand | undefined {\n if (expr instanceof PropRef) return filterColumnForRef(expr, alias);\n const literal = literalScalarForFilter(expr);\n return literal !== undefined ? { kind: 'lit', value: literal } : undefined;\n}\n\nfunction literalScalarForFilter(expr: BasicExpression | undefined): Scalar | undefined {\n if (!(expr instanceof Value)) return undefined;\n return isFilterScalar(expr.value) ? expr.value : undefined;\n}\n\nfunction filterColumnForRef(ref: PropRef, alias: string): FilterColumnRef | undefined {\n const column = columnForAliasRef(ref, alias);\n return column ? { kind: 'col', name: column } : undefined;\n}\n\nfunction columnForAliasRef(expr: BasicExpression, alias: string): string | undefined {\n if (!(expr instanceof PropRef)) return undefined;\n if (expr.path.length !== 2 || expr.path[0] !== alias) return undefined;\n return expr.path[1];\n}\n\nfunction columnForSelectedRef(expr: BasicExpression, selectedColumns: Map<string, string>): string | undefined {\n if (!(expr instanceof PropRef)) return undefined;\n if (expr.path.length !== 2 || expr.path[0] !== '$selected') return undefined;\n return selectedColumns.get(expr.path[1]!);\n}\n\nfunction isFilterScalar(value: unknown): value is Scalar {\n return value === null || typeof value === 'number' || typeof value === 'bigint' || typeof value === 'boolean' || typeof value === 'string';\n}\n\n// ---------------------------------------------------------------------\n// Sources + joins\n// ---------------------------------------------------------------------\n\nfunction rowsFromFrom(from: From): Array<WorkRow> {\n if (from.type === 'collectionRef') {\n const out: Array<WorkRow> = [];\n for (const [key, row] of from.collection.entries()) {\n // Collection iteration already returns an isolated snapshot. Re-cloning\n // it doubled allocation for functional callbacks and materialized plans\n // without adding mutation isolation.\n out.push({ key, ns: { [from.alias]: row } });\n }\n return out;\n }\n\n if (from.type === 'queryRef') {\n return runCollection(from.query).map((row, index) => ({\n key: `${from.alias}:${index}`,\n ns: { [from.alias]: rowToRecord(row) },\n }));\n }\n\n throw new ValidationError(`unsupported from type: ${(from as { type?: unknown }).type}`);\n}\n\nfunction applyJoin(leftRows: Array<WorkRow>, join: JoinClause): Array<WorkRow> {\n const rightRows = rowsFromFrom(join.from);\n const joinType = join.type === 'outer' ? 'full' : join.type;\n const rightAlias = join.from.alias;\n\n if (joinType === 'cross') {\n const crossed: Array<WorkRow> = [];\n for (const left of leftRows) {\n for (const right of rightRows) {\n crossed.push({\n key: `${String(left.key)}|${String(right.key)}`,\n ns: { ...left.ns, ...right.ns },\n });\n }\n }\n return crossed;\n }\n\n const oriented = orientHashJoinExpressions(join, rightAlias);\n if (oriented) {\n return applyHashJoin(leftRows, rightRows, joinType, rightAlias, oriented[0], oriented[1]);\n }\n\n const out: Array<WorkRow> = [];\n const matchedRight = new Set<number>();\n const emitLeft = joinType === 'left' || joinType === 'full';\n const emitRight = joinType === 'right' || joinType === 'full';\n\n for (const left of leftRows) {\n let matched = false;\n for (let i = 0; i < rightRows.length; i++) {\n const right = rightRows[i]!;\n const ns = { ...left.ns, ...right.ns };\n if (joinMatches(ns, join)) {\n matched = true;\n matchedRight.add(i);\n out.push({ key: `${String(left.key)}|${String(right.key)}`, ns });\n }\n }\n if (!matched && emitLeft) {\n out.push({\n key: `${String(left.key)}|null:${rightAlias}`,\n ns: { ...left.ns, [rightAlias]: null },\n });\n }\n }\n\n if (emitRight) {\n for (let i = 0; i < rightRows.length; i++) {\n if (matchedRight.has(i)) continue;\n const right = rightRows[i]!;\n out.push({ key: `null|${String(right.key)}`, ns: { ...right.ns } });\n }\n }\n\n return out;\n}\n\n/**\n * Hash the newly joined side and probe it from the accumulated left rows.\n * Builder joins are equality-only, so the nested-loop fallback is needed only\n * for unusual expressions where an operand mixes aliases from both sides.\n */\nfunction applyHashJoin(\n leftRows: Array<WorkRow>,\n rightRows: Array<WorkRow>,\n joinType: Exclude<JoinClause['type'], 'outer' | 'cross'>,\n rightAlias: string,\n leftExpression: BasicExpression,\n rightExpression: BasicExpression,\n): Array<WorkRow> {\n type HashEntry = { index: number; row: WorkRow; value: unknown };\n const buckets = new Map<unknown, Array<HashEntry>>();\n for (let index = 0; index < rightRows.length; index++) {\n const row = rightRows[index]!;\n const value = evaluateExpression(rightExpression, row.ns);\n if (isUnknown(value)) continue;\n const key = hashJoinKey(value);\n const bucket = buckets.get(key);\n const entry = { index, row, value };\n if (bucket) bucket.push(entry);\n else buckets.set(key, [entry]);\n }\n\n const emitLeft = joinType === 'left' || joinType === 'full';\n const emitRight = joinType === 'right' || joinType === 'full';\n const matchedRight = emitRight ? new Set<number>() : undefined;\n const out: Array<WorkRow> = [];\n\n for (const left of leftRows) {\n const leftValue = evaluateExpression(leftExpression, left.ns);\n let matched = false;\n if (!isUnknown(leftValue)) {\n for (const entry of buckets.get(hashJoinKey(leftValue)) ?? []) {\n // Hash keys intentionally coarsen object values to identity and dates\n // to timestamps. Retain the canonical equality check for exactness.\n if (!valuesEqual(leftValue, entry.value)) continue;\n matched = true;\n matchedRight?.add(entry.index);\n out.push({\n key: `${String(left.key)}|${String(entry.row.key)}`,\n ns: { ...left.ns, ...entry.row.ns },\n });\n }\n }\n if (!matched && emitLeft) {\n out.push({\n key: `${String(left.key)}|null:${rightAlias}`,\n ns: { ...left.ns, [rightAlias]: null },\n });\n }\n }\n\n if (emitRight) {\n for (let index = 0; index < rightRows.length; index++) {\n if (matchedRight!.has(index)) continue;\n const right = rightRows[index]!;\n out.push({ key: `null|${String(right.key)}`, ns: { ...right.ns } });\n }\n }\n return out;\n}\n\nfunction orientHashJoinExpressions(\n join: JoinClause,\n rightAlias: string,\n): [left: BasicExpression, right: BasicExpression] | undefined {\n const leftUsesRight = expressionReferencesAlias(join.left, rightAlias);\n const rightUsesRight = expressionReferencesAlias(join.right, rightAlias);\n if (leftUsesRight === rightUsesRight) return undefined;\n return leftUsesRight ? [join.right, join.left] : [join.left, join.right];\n}\n\nfunction expressionReferencesAlias(expression: BasicExpression, alias: string): boolean {\n if (expression.type === 'ref') return expression.path[0] === alias;\n if (expression.type === 'func') {\n return expression.args.some((arg) => expressionReferencesAlias(arg, alias));\n }\n return false;\n}\n\nfunction hashJoinKey(value: unknown): unknown {\n if (value instanceof Date) return `date:${value.getTime()}`;\n switch (typeof value) {\n case 'string':\n return `string:${value}`;\n case 'number':\n if (Object.is(value, -0)) return 'number:-0';\n if (Number.isNaN(value)) return 'number:NaN';\n return `number:${value}`;\n case 'bigint':\n return `bigint:${value}`;\n case 'boolean':\n return value ? 'boolean:true' : 'boolean:false';\n default:\n // Map preserves identity for symbols, objects and functions, matching\n // Object.is used by valuesEqual for non-Date values.\n return value;\n }\n}\n\nfunction joinMatches(ns: Record<string, unknown>, join: JoinClause): boolean {\n const left = evaluateExpression(join.left, ns);\n const right = evaluateExpression(join.right, ns);\n if (isUnknown(left) || isUnknown(right)) return false;\n return valuesEqual(left, right);\n}\n\n// ---------------------------------------------------------------------\n// WHERE / SELECT / GROUP BY\n// ---------------------------------------------------------------------\n\nfunction applyWhere(rows: Array<WorkRow>, whereClauses?: Array<Where>): Array<WorkRow> {\n let current = rows;\n for (const where of whereClauses ?? []) {\n const expr = getWhereExpression(where);\n current = current.filter((row) => toBooleanPredicate(evaluateExpression(expr, row.ns)));\n }\n return current;\n}\n\nfunction applySelect(rows: Array<WorkRow>, query: QueryIR): Array<WorkRow> {\n const mainAlias = query.from.alias;\n const rawSelect = query.select as unknown;\n\n return rows.map((row) => {\n let selected: unknown;\n if (query.fnSelect) {\n selected = query.fnSelect(row.ns as NamespacedRow);\n } else if (rawSelect !== undefined) {\n selected = evaluateSelect(rawSelect, row.ns, query);\n } else if ((query.join?.length ?? 0) === 0) {\n selected = row.ns[mainAlias];\n } else {\n selected = stripInternalFields(row.ns);\n }\n\n return {\n key: row.key,\n ns: {\n ...row.ns,\n $selected: selected,\n },\n };\n });\n}\n\nfunction applyGroupBy(rows: Array<WorkRow>, query: QueryIR): Array<WorkRow> {\n const groupBy = query.groupBy ?? [];\n const groups = new Map<string, { values: Array<unknown>; rows: Array<WorkRow> }>();\n\n for (const row of rows) {\n const values = groupBy.map((expr) => evaluateExpression(expr, row.ns));\n const key = stableKey(values.length === 0 ? ['__singleGroup'] : values);\n let group = groups.get(key);\n if (!group) {\n group = { values, rows: [] };\n groups.set(key, group);\n }\n group.rows.push(row);\n }\n\n if (rows.length === 0 && groupBy.length === 0 && containsAggregateInSelect(query.select as unknown)) {\n groups.set(stableKey(['__singleGroup']), { values: [], rows: [] });\n }\n\n const out: Array<WorkRow> = [];\n let synthetic = 0;\n for (const [key, group] of groups) {\n const firstNs = group.rows[0]?.ns ?? {};\n const selected = query.fnSelect\n ? query.fnSelect(firstNs as NamespacedRow)\n : query.select !== undefined\n ? evaluateGroupSelect(query.select as unknown, group.rows, firstNs, query)\n : Object.fromEntries(group.values.map((value, i) => [`__key_${i}`, value]));\n\n const ns: Record<string, unknown> = {\n ...firstNs,\n $selected: selected,\n };\n\n if (!passesHaving(ns, group.rows, query.having)) continue;\n let fnPass = true;\n for (const fnHaving of query.fnHaving ?? []) {\n if (!toBooleanPredicate(fnHaving(ns as NamespacedRow))) {\n fnPass = false;\n break;\n }\n }\n if (!fnPass) continue;\n\n out.push({ key: key === stableKey(['__singleGroup']) ? `single_group_${synthetic++}` : key, ns });\n }\n\n return out;\n}\n\nfunction passesHaving(\n ns: Record<string, unknown>,\n groupRows: Array<WorkRow>,\n having?: Array<Having>,\n): boolean {\n for (const clause of having ?? []) {\n const expr = getHavingExpression(clause);\n if (!toBooleanPredicate(evaluateGroupExpression(expr, groupRows, ns))) {\n return false;\n }\n }\n return true;\n}\n\nfunction evaluateSelect(raw: unknown, ns: Record<string, unknown>, query: QueryIR): unknown {\n if (raw instanceof IncludesSubquery || isIncludes(raw)) {\n return evaluateIncludes(raw, ns);\n }\n if (isBasicExpression(raw)) {\n return evaluateExpression(raw, ns);\n }\n if (raw instanceof Aggregate || isAggregate(raw)) {\n throw new ValidationError(`aggregate ${raw.name} requires groupBy or aggregate select context`);\n }\n if (isPlainObject(raw)) {\n const out: RowRecord = {};\n addSelectObject(out, [], raw as Select, ns, query);\n return out;\n }\n return raw;\n}\n\nfunction addSelectObject(\n out: RowRecord,\n prefix: Array<string>,\n select: Select,\n ns: Record<string, unknown>,\n query: QueryIR,\n): void {\n for (const [key, value] of Object.entries(select)) {\n if (key.startsWith('__SPREAD_SENTINEL__')) {\n const spreadValue = isBasicExpression(value)\n ? evaluateExpression(value, ns)\n : isPlainObject(value)\n ? value\n : undefined;\n mergeAtPath(out, prefix, spreadValue);\n continue;\n }\n\n const path = [...prefix, key];\n if (value instanceof IncludesSubquery || isIncludes(value)) {\n setAtPath(out, path, evaluateIncludes(value, ns));\n continue;\n }\n if (isBasicExpression(value)) {\n setAtPath(out, path, evaluateExpression(value, ns));\n continue;\n }\n if (value instanceof Aggregate || isAggregate(value)) {\n setAtPath(out, path, null);\n continue;\n }\n if (isPlainObject(value)) {\n addSelectObject(out, path, value as Select, ns, query);\n continue;\n }\n setAtPath(out, path, value);\n }\n}\n\nfunction evaluateGroupSelect(\n raw: unknown,\n rows: Array<WorkRow>,\n firstNs: Record<string, unknown>,\n query: QueryIR,\n): unknown {\n if (isBasicExpression(raw) || raw instanceof Aggregate || isAggregate(raw)) {\n return evaluateGroupExpression(raw, rows, firstNs);\n }\n if (raw instanceof IncludesSubquery || isIncludes(raw)) {\n return evaluateIncludes(raw, firstNs);\n }\n if (isPlainObject(raw)) {\n const out: RowRecord = {};\n addGroupSelectObject(out, [], raw as Select, rows, firstNs, query);\n return out;\n }\n return raw;\n}\n\nfunction addGroupSelectObject(\n out: RowRecord,\n prefix: Array<string>,\n select: Select,\n rows: Array<WorkRow>,\n firstNs: Record<string, unknown>,\n query: QueryIR,\n): void {\n for (const [key, value] of Object.entries(select)) {\n if (key.startsWith('__SPREAD_SENTINEL__')) {\n const spreadValue = isBasicExpression(value)\n ? evaluateExpression(value, firstNs)\n : isPlainObject(value)\n ? value\n : undefined;\n mergeAtPath(out, prefix, spreadValue);\n continue;\n }\n const path = [...prefix, key];\n if (value instanceof IncludesSubquery || isIncludes(value)) {\n setAtPath(out, path, evaluateIncludes(value, firstNs));\n } else if (isBasicExpression(value) || value instanceof Aggregate || isAggregate(value)) {\n setAtPath(out, path, evaluateGroupExpression(value, rows, firstNs));\n } else if (isPlainObject(value)) {\n addGroupSelectObject(out, path, value as Select, rows, firstNs, query);\n } else {\n setAtPath(out, path, value);\n }\n }\n}\n\nfunction evaluateIncludes(subquery: IncludesSubquery, parentNs: Record<string, unknown>): unknown {\n const parentValue = evaluateExpression(subquery.correlationField, parentNs);\n\n if (subquery.parentFilters) {\n for (const filter of subquery.parentFilters) {\n if (!toBooleanPredicate(evaluateExpression(getWhereExpression(filter), parentNs))) {\n return subquery.materialization === 'concat'\n ? ''\n : subquery.materialization === 'single'\n ? undefined\n : [];\n }\n }\n }\n\n const correlation = new Func('eq', [\n subquery.childCorrelationField,\n new Value(parentValue),\n ]) as BasicExpression<boolean>;\n const childQuery: QueryIR = {\n ...subquery.query,\n where: [...(subquery.query.where ?? []), correlation],\n };\n const candidates = includeCandidateOrdinals(subquery, parentValue);\n const rows = candidates === undefined\n ? runCollection(childQuery)\n // The builder removes the correlation predicate from subquery.query.\n // Candidate ordinals already enforce it, so compiling the base child query\n // avoids rebuilding an equivalent equality expression for every parent.\n : (includeFastPathExecutor(subquery)?.(candidates) ?? runCollection(childQuery));\n\n if (subquery.materialization === 'concat') {\n const scalarField = subquery.scalarField ?? INCLUDES_SCALAR_FIELD;\n return rows\n .map((row) => {\n if (row !== null && typeof row === 'object') {\n return String((row as RowRecord)[scalarField] ?? '');\n }\n return String(row ?? '');\n })\n .join('');\n }\n\n if (subquery.materialization === 'single') return rows[0];\n\n return rows;\n}\n\nfunction includeFastPathExecutor(subquery: IncludesSubquery): FastPathExecutor | undefined {\n if (!activeIncludeExecutorCache) return createFastPathExecutor(subquery.query);\n const cached = activeIncludeExecutorCache.get(subquery as object);\n if (cached !== undefined) return cached ?? undefined;\n const executor = createFastPathExecutor(subquery.query) ?? null;\n activeIncludeExecutorCache.set(subquery as object, executor);\n return executor ?? undefined;\n}\n\nfunction includeCandidateOrdinals(\n subquery: IncludesSubquery,\n parentValue: unknown,\n): Uint32Array | undefined {\n if (isUnknown(parentValue) || !activeIncludeCandidateCache) return new Uint32Array(0);\n const from = subquery.query.from;\n const field = subquery.childCorrelationField;\n if (from.type !== 'collectionRef' ||\n !(field instanceof PropRef) ||\n field.path.length !== 2 ||\n field.path[0] !== from.alias) {\n return undefined;\n }\n\n let buckets = activeIncludeCandidateCache.get(subquery as object);\n if (!buckets) {\n const mutable = new Map<unknown, number[]>();\n const column = field.path[1]!;\n for (const ordinal of from.collection._internalLiveOrdinals()) {\n const value = from.collection._internalReadCell(column, ordinal);\n if (isUnknown(value)) continue;\n const key = hashJoinKey(value);\n const bucket = mutable.get(key);\n if (bucket) bucket.push(ordinal);\n else mutable.set(key, [ordinal]);\n }\n buckets = new Map();\n for (const [key, ordinals] of mutable) buckets.set(key, Uint32Array.from(ordinals));\n activeIncludeCandidateCache.set(subquery as object, buckets);\n }\n return buckets.get(hashJoinKey(parentValue)) ?? new Uint32Array(0);\n}\n\n// ---------------------------------------------------------------------\n// Expression evaluation\n// ---------------------------------------------------------------------\n\nfunction evaluateExpression(expr: BasicExpression, ns: Record<string, unknown>): unknown {\n switch (expr.type) {\n case 'val':\n return expr.value;\n case 'ref':\n return readPath(ns, expr.path);\n case 'func':\n return evaluateFunc(expr, ns, false);\n }\n}\n\nfunction evaluateSingleRowExpression(expr: BasicExpression, row: Record<string, unknown>): unknown {\n switch (expr.type) {\n case 'val':\n return expr.value;\n case 'ref':\n return readPath(row, expr.path);\n case 'func':\n return evaluateFunc(expr, row, true);\n }\n}\n\nfunction evaluateFunc(func: Func, row: Record<string, unknown>, singleRow: boolean): unknown {\n const evalArg = (expr: BasicExpression) =>\n singleRow ? evaluateSingleRowExpression(expr, row) : evaluateExpression(expr, row);\n\n return evaluateFuncWith(func, evalArg);\n}\n\nfunction evaluateFuncWith(\n func: Func,\n evalArg: (expression: BasicExpression) => unknown,\n): unknown {\n switch (func.name) {\n case 'eq': {\n const a = evalArg(func.args[0]!);\n const b = evalArg(func.args[1]!);\n return isUnknown(a) || isUnknown(b) ? null : valuesEqual(a, b);\n }\n case 'gt':\n return compareMaybe(evalArg(func.args[0]!), evalArg(func.args[1]!), (c) => c > 0);\n case 'gte':\n return compareMaybe(evalArg(func.args[0]!), evalArg(func.args[1]!), (c) => c >= 0);\n case 'lt':\n return compareMaybe(evalArg(func.args[0]!), evalArg(func.args[1]!), (c) => c < 0);\n case 'lte':\n return compareMaybe(evalArg(func.args[0]!), evalArg(func.args[1]!), (c) => c <= 0);\n case 'and': {\n let unknown = false;\n for (const arg of func.args) {\n const value = evalArg(arg);\n if (value === false) return false;\n if (isUnknown(value)) unknown = true;\n }\n return unknown ? null : true;\n }\n case 'or': {\n let unknown = false;\n for (const arg of func.args) {\n const value = evalArg(arg);\n if (value === true) return true;\n if (isUnknown(value)) unknown = true;\n }\n return unknown ? null : false;\n }\n case 'not': {\n const value = evalArg(func.args[0]!);\n return isUnknown(value) ? null : !value;\n }\n case 'in': {\n const value = evalArg(func.args[0]!);\n const arr = evalArg(func.args[1]!);\n if (isUnknown(value)) return null;\n if (!Array.isArray(arr)) return false;\n return arr.some((item) => valuesEqual(item, value));\n }\n case 'like':\n return evaluateLike(evalArg(func.args[0]!), evalArg(func.args[1]!), false);\n case 'ilike':\n return evaluateLike(evalArg(func.args[0]!), evalArg(func.args[1]!), true);\n case 'upper': {\n const value = evalArg(func.args[0]!);\n return typeof value === 'string' ? value.toUpperCase() : value;\n }\n case 'lower': {\n const value = evalArg(func.args[0]!);\n return typeof value === 'string' ? value.toLowerCase() : value;\n }\n case 'length': {\n const value = evalArg(func.args[0]!);\n return typeof value === 'string' || Array.isArray(value) ? value.length : 0;\n }\n case 'concat':\n return func.args.map((arg) => String(evalArg(arg) ?? '')).join('');\n case 'add':\n return ((evalArg(func.args[0]!) ?? 0) as any) + ((evalArg(func.args[1]!) ?? 0) as any);\n case 'subtract':\n return ((evalArg(func.args[0]!) ?? 0) as any) - ((evalArg(func.args[1]!) ?? 0) as any);\n case 'multiply':\n return ((evalArg(func.args[0]!) ?? 0) as any) * ((evalArg(func.args[1]!) ?? 0) as any);\n case 'divide': {\n const divisor = (evalArg(func.args[1]!) ?? 0) as any;\n return divisor !== 0\n ? ((evalArg(func.args[0]!) ?? 0) as any) / divisor\n : null;\n }\n case 'coalesce': {\n for (const arg of func.args) {\n const value = evalArg(arg);\n if (!isUnknown(value)) return value;\n }\n return null;\n }\n case 'caseWhen': {\n const pairCount = Math.floor(func.args.length / 2);\n for (let index = 0; index < pairCount; index++) {\n if (isCaseWhenConditionTrue(evalArg(func.args[index * 2]!))) {\n return evalArg(func.args[index * 2 + 1]!);\n }\n }\n return func.args.length % 2 === 1\n ? evalArg(func.args[func.args.length - 1]!)\n : null;\n }\n case 'isUndefined':\n return evalArg(func.args[0]!) === undefined;\n case 'isNull':\n return evalArg(func.args[0]!) === null;\n case 'bboxIntersects': {\n const geometry = evalArg(func.args[0]!);\n const bbox = evalGeoBboxArg(evalArg(func.args[1]!), 'bbox');\n const geometryBbox = pointBboxOrNull(geometry);\n return geometryBbox === null ? false : bboxIntersectsRaw(geometryBbox, bbox);\n }\n case 'bboxWithin': {\n const geometry = evalArg(func.args[0]!);\n const bbox = evalGeoBboxArg(evalArg(func.args[1]!), 'bbox');\n const geometryBbox = pointBboxOrNull(geometry);\n return geometryBbox === null ? false : bboxWithinRaw(geometryBbox, bbox);\n }\n case 'dwithin': {\n const geometry = evalArg(func.args[0]!);\n const point = evalGeoPointArg(evalArg(func.args[1]!), 'point');\n const meters = evalGeoRadiusMeters(evalArg(func.args[2]!));\n const rowPoint = pointOrNull(geometry);\n return rowPoint === null ? false : haversineDistanceMeters(rowPoint, point) <= meters;\n }\n case 'within': {\n const point = pointOrNull(evalArg(func.args[0]!));\n const polygon = polygonOrNull(evalArg(func.args[1]!));\n return point === null || polygon === null ? false : pointInPolygon(point, polygon);\n }\n case 'contains': {\n const polygon = polygonOrNull(evalArg(func.args[0]!));\n const point = pointOrNull(evalArg(func.args[1]!));\n return point === null || polygon === null ? false : pointInPolygon(point, polygon);\n }\n default:\n throw new ValidationError(`unknown query function: ${func.name}`);\n }\n}\n\nfunction evalGeoBboxArg(value: unknown, label: string): BBox {\n assertValidBbox(value, label);\n return value;\n}\n\nfunction evalGeoPointArg(value: unknown, label: string): Point {\n assertValidPoint(value, label);\n return value;\n}\n\nfunction evalGeoRadiusMeters(value: unknown): number {\n if (typeof value !== 'number' || !Number.isFinite(value)) {\n throw new ValidationError('radius meters must be finite');\n }\n if (value < 0) {\n throw new ValidationError('radius meters must be >= 0');\n }\n return value;\n}\n\nfunction pointBboxOrNull(value: unknown): BBox | null {\n const point = pointOrNull(value);\n return point === null ? null : pointBbox(point);\n}\n\nfunction pointOrNull(value: unknown): Point | null {\n if (isUnknown(value)) return null;\n assertValidPoint(value, 'geometry');\n return value;\n}\n\nfunction polygonOrNull(value: unknown): Polygon | null {\n if (isUnknown(value)) return null;\n return normalizePolygon(value, {}, 'polygon');\n}\n\nfunction evaluateGroupExpression(\n expr: BasicExpression | Aggregate,\n rows: Array<WorkRow>,\n firstNs: Record<string, unknown>,\n): unknown {\n if (expr instanceof Aggregate || isAggregate(expr)) {\n return computeAggregate(expr, rows);\n }\n if (expr.type === 'func') {\n const evaluatedArgs = expr.args.map((arg) =>\n arg instanceof Aggregate || isAggregate(arg)\n ? new Value(evaluateGroupExpression(arg, rows, firstNs))\n : isBasicExpression(arg) && containsAggregate(arg)\n ? new Value(evaluateGroupExpression(arg, rows, firstNs))\n : new Value(evaluateExpression(arg, firstNs)),\n );\n return evaluateExpression(new Func(expr.name, evaluatedArgs), firstNs);\n }\n return evaluateExpression(expr, firstNs);\n}\n\nfunction computeAggregate(agg: Aggregate, rows: Array<WorkRow>): unknown {\n const values = rows.map((row) => evaluateExpression(agg.args[0]!, row.ns));\n switch (agg.name) {\n case 'count':\n return values.length;\n case 'sum':\n return sumValues(values);\n case 'avg':\n return values.length === 0\n ? 0\n : sumValues(values) / values.length;\n case 'min':\n return minMax(values, 'min');\n case 'max':\n return minMax(values, 'max');\n default:\n throw new ValidationError(`unsupported aggregate: ${agg.name}`);\n }\n}\n\nfunction containsAggregate(expr: unknown): boolean {\n if (expr instanceof Aggregate || isAggregate(expr)) return true;\n if (expr instanceof Func || isFunc(expr)) return expr.args.some((arg) => containsAggregate(arg));\n return false;\n}\n\nfunction containsAggregateInSelect(select: unknown): boolean {\n if (select === undefined) return false;\n if (containsAggregate(select)) return true;\n if (!isPlainObject(select) || isExpressionLike(select)) return false;\n return Object.values(select).some((value) => containsAggregateInSelect(value));\n}\n\nfunction containsAggregateInHaving(having?: Array<Having>): boolean {\n return (having ?? []).some((clause) => containsAggregate(getHavingExpression(clause)));\n}\n\n// ---------------------------------------------------------------------\n// Ordering / distinct / finalization\n// ---------------------------------------------------------------------\n\nfunction distinctRows(rows: Array<WorkRow>): Array<WorkRow> {\n const seen = new Set<string>();\n const out: Array<WorkRow> = [];\n for (const row of rows) {\n const key = stableKey(finalizeSelected(row.ns));\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(row);\n }\n return out;\n}\n\nfunction orderRows(rows: Array<WorkRow>, orderBy: NonNullable<QueryIR['orderBy']>): Array<WorkRow> {\n const sorted = rows.slice();\n sorted.sort((a, b) => {\n for (const clause of orderBy) {\n const av = evaluateExpression(clause.expression, a.ns);\n const bv = evaluateExpression(clause.expression, b.ns);\n const cmp = compareForOrder(av, bv, clause.compareOptions);\n if (cmp !== 0) return cmp;\n }\n return 0;\n });\n return sorted;\n}\n\nfunction compareForOrder(a: unknown, b: unknown, options: CompareOptions): number {\n const aNull = isUnknown(a) || (typeof a === 'number' && Number.isNaN(a));\n const bNull = isUnknown(b) || (typeof b === 'number' && Number.isNaN(b));\n if (aNull || bNull) {\n if (aNull && bNull) return 0;\n const nullFirst = options.nulls === 'first';\n const base = aNull ? (nullFirst ? -1 : 1) : (nullFirst ? 1 : -1);\n return options.direction === 'desc' ? -base : base;\n }\n\n let cmp: number;\n if (typeof a === 'string' && typeof b === 'string') {\n if (options.stringSort === 'locale') {\n cmp = a.localeCompare(b, options.locale, options.localeOptions as Intl.CollatorOptions | undefined);\n } else {\n cmp = a < b ? -1 : a > b ? 1 : 0;\n }\n } else {\n cmp = comparePrimitive(a, b);\n }\n return options.direction === 'desc' ? -cmp : cmp;\n}\n\nfunction finalizeSelected(ns: Record<string, unknown>): unknown {\n return cloneOutput(ns.$selected);\n}\n\n// ---------------------------------------------------------------------\n// Compiler metadata + collection discovery\n// ---------------------------------------------------------------------\n\nfunction collectAliasMetadata(\n from: From,\n aliasToCollectionId: Record<string, string>,\n aliasRemapping: Record<string, string>,\n): void {\n if (from.type === 'collectionRef') {\n aliasToCollectionId[from.alias] = from.collection.id;\n return;\n }\n\n const innerAlias = aliasFor(from.query.from);\n const innerCollectionId = collectionIdFor(from.query.from);\n if (innerAlias) aliasRemapping[from.alias] = innerAlias;\n if (innerCollectionId) aliasToCollectionId[from.alias] = innerCollectionId;\n collectAliasMetadata(from.query.from, aliasToCollectionId, aliasRemapping);\n for (const join of from.query.join ?? []) {\n collectAliasMetadata(join.from, aliasToCollectionId, aliasRemapping);\n }\n}\n\nfunction collectionIdFor(from: From): string | undefined {\n if (from.type === 'collectionRef') return from.collection.id;\n return collectionIdFor(from.query.from);\n}\n\nfunction aliasFor(from: From): string | undefined {\n if (from.type === 'collectionRef') return from.alias;\n return aliasFor(from.query.from);\n}\n\nfunction collectSourceWhereClauses(query: QueryIR): Map<string, BasicExpression<boolean>> {\n const clauses = new Map<string, BasicExpression<boolean>>();\n for (const where of query.where ?? []) {\n const expression = getWhereExpression(where);\n const aliases = referencedAliases(expression);\n if (aliases.size !== 1) continue;\n const [alias] = aliases;\n if (!alias) continue;\n const existing = clauses.get(alias);\n clauses.set(alias, existing ? new Func('and', [existing, expression]) as BasicExpression<boolean> : expression);\n }\n return clauses;\n}\n\nfunction referencedAliases(expression: BasicExpression | Aggregate | IncludesSubquery): Set<string> {\n const aliases = new Set<string>();\n visitExpression(expression, aliases);\n return aliases;\n}\n\nfunction visitExpression(value: unknown, aliases: Set<string>): void {\n if (value instanceof PropRef) {\n const [alias] = value.path;\n if (alias) aliases.add(alias);\n return;\n }\n if (value instanceof Func || value instanceof Aggregate) {\n for (const arg of value.args) visitExpression(arg, aliases);\n return;\n }\n if (value instanceof IncludesSubquery || isIncludes(value)) {\n return;\n }\n if (!isPlainObject(value) || isExpressionLike(value)) return;\n for (const child of Object.values(value)) visitExpression(child, aliases);\n}\n\nfunction compileIncludes(value: unknown): Array<IncludesCompilationResult> {\n const out: Array<IncludesCompilationResult> = [];\n collectCompiledIncludes(value, out);\n return out;\n}\n\nfunction collectCompiledIncludes(value: unknown, out: Array<IncludesCompilationResult>): void {\n if (value instanceof IncludesSubquery || isIncludes(value)) {\n out.push({\n pipeline: runCollection(value.query),\n fieldName: value.fieldName,\n correlationField: value.correlationField,\n childCorrelationField: value.childCorrelationField,\n hasOrderBy: (value.query.orderBy?.length ?? 0) > 0,\n childCompilationResult: compileQuery(value.query),\n ...(value.parentProjection !== undefined ? { parentProjection: value.parentProjection } : {}),\n materialization: value.materialization,\n ...(value.scalarField !== undefined ? { scalarField: value.scalarField } : {}),\n });\n return;\n }\n if (!isPlainObject(value) || isExpressionLike(value)) return;\n for (const child of Object.values(value)) collectCompiledIncludes(child, out);\n}\n\nfunction collectCollections(query: QueryIR, out = new Set<Collection>()): Array<Collection> {\n collectFrom(query.from, out);\n for (const join of query.join ?? []) collectFrom(join.from, out);\n collectIncludes(query.select as unknown, out);\n return [...out];\n}\n\nfunction collectFrom(from: From, out: Set<Collection>): void {\n if (from.type === 'collectionRef') {\n out.add(from.collection);\n } else if (from.type === 'queryRef') {\n collectCollections(from.query, out);\n }\n}\n\nfunction collectIncludes(value: unknown, out: Set<Collection>): void {\n if (value instanceof IncludesSubquery || isIncludes(value)) {\n collectCollections(value.query, out);\n return;\n }\n if (!isPlainObject(value) || isExpressionLike(value)) return;\n for (const child of Object.values(value)) collectIncludes(child, out);\n}\n\n// ---------------------------------------------------------------------\n// Low-level utilities\n// ---------------------------------------------------------------------\n\nfunction isUnknown(value: unknown): value is null | undefined {\n return value === null || value === undefined;\n}\n\nfunction isCaseWhenConditionTrue(value: unknown): boolean {\n if (value == null || value === false) return false;\n if (value === true) return true;\n if (typeof value === 'number') return value !== 0 && !Number.isNaN(value);\n if (typeof value === 'bigint') return value !== 0n;\n return Boolean(value);\n}\n\nfunction valuesEqual(a: unknown, b: unknown): boolean {\n if (a instanceof Date && b instanceof Date) return a.getTime() === b.getTime();\n return Object.is(a, b);\n}\n\nfunction compareMaybe(a: unknown, b: unknown, predicate: (cmp: number) => boolean): boolean | null {\n if (isUnknown(a) || isUnknown(b)) return null;\n return predicate(comparePrimitive(a, b));\n}\n\nfunction comparePrimitive(a: unknown, b: unknown): number {\n if (a === b) return 0;\n if (a instanceof Date && b instanceof Date) return a.getTime() - b.getTime();\n if (typeof a === 'number' && typeof b === 'number') return a - b;\n if (typeof a === 'bigint' && typeof b === 'bigint') return a < b ? -1 : a > b ? 1 : 0;\n if (typeof a === 'bigint' || typeof b === 'bigint') return Number(a) - Number(b);\n if (typeof a === 'boolean' && typeof b === 'boolean') return a === b ? 0 : a ? 1 : -1;\n if (typeof a === 'string' && typeof b === 'string') return a < b ? -1 : a > b ? 1 : 0;\n const as = String(a);\n const bs = String(b);\n return as < bs ? -1 : as > bs ? 1 : 0;\n}\n\nfunction evaluateLike(value: unknown, pattern: unknown, caseInsensitive: boolean): boolean | null {\n if (isUnknown(value) || isUnknown(pattern)) return null;\n if (typeof value !== 'string' || typeof pattern !== 'string') return false;\n const source = caseInsensitive ? value.toLowerCase() : value;\n const pat = caseInsensitive ? pattern.toLowerCase() : pattern;\n const re = new RegExp(`^${pat.replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&').replace(/%/g, '.*').replace(/_/g, '.')}$`);\n return re.test(source);\n}\n\nfunction readPath(source: Record<string, unknown>, path: Array<string>): unknown {\n let value: unknown = source;\n for (const segment of path) {\n if (value === null || value === undefined) return value;\n if (typeof value !== 'object') return undefined;\n value = (value as RowRecord)[segment];\n }\n return value;\n}\n\nfunction setAtPath(target: RowRecord, path: Array<string>, value: unknown): void {\n let cursor = target;\n for (let i = 0; i < path.length - 1; i++) {\n const segment = path[i]!;\n const next = cursor[segment];\n if (next === null || typeof next !== 'object' || Array.isArray(next)) {\n cursor[segment] = {};\n }\n cursor = cursor[segment] as RowRecord;\n }\n cursor[path[path.length - 1]!] = value;\n}\n\nfunction mergeAtPath(target: RowRecord, path: Array<string>, value: unknown): void {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) return;\n let cursor = target;\n for (const segment of path) {\n const next = cursor[segment];\n if (next === null || typeof next !== 'object' || Array.isArray(next)) {\n cursor[segment] = {};\n }\n cursor = cursor[segment] as RowRecord;\n }\n for (const [k, v] of Object.entries(value)) cursor[k] = cloneOutput(v);\n}\n\nfunction rowToRecord(row: unknown): RowRecord {\n if (row !== null && typeof row === 'object' && !Array.isArray(row)) {\n return cloneRecord(row as RowRecord);\n }\n return { value: row };\n}\n\nfunction cloneRecord(row: Record<string, unknown>): RowRecord {\n return { ...row };\n}\n\nfunction stripInternalFields(row: Record<string, unknown>): RowRecord {\n const out: RowRecord = {};\n for (const [key, value] of Object.entries(row)) {\n if (key.startsWith('__')) continue;\n out[key] = cloneOutput(value);\n }\n return out;\n}\n\nfunction cloneOutput(value: unknown): unknown {\n if (Array.isArray(value)) return value.map((item) => cloneOutput(item));\n if (value !== null && typeof value === 'object') {\n if (value instanceof Date) return new Date(value.getTime());\n const out: RowRecord = {};\n for (const [key, child] of Object.entries(value)) {\n if (typeof key === 'symbol') continue;\n out[key] = cloneOutput(child);\n }\n return out;\n }\n return value;\n}\n\nfunction stableKey(value: unknown): string {\n return JSON.stringify(value, (_key, child) => {\n if (typeof child === 'bigint') return `${child.toString()}n`;\n if (child instanceof Date) return child.toISOString();\n if (child !== null && typeof child === 'object' && !Array.isArray(child)) {\n const sorted: RowRecord = {};\n for (const key of Object.keys(child).sort()) sorted[key] = (child as RowRecord)[key];\n return sorted;\n }\n return child;\n });\n}\n\nfunction numberValue(value: unknown): number {\n if (typeof value === 'number') return value;\n if (typeof value === 'bigint') return Number(value);\n if (isUnknown(value)) return 0;\n const n = Number(value);\n return Number.isFinite(n) ? n : 0;\n}\n\nfunction sumValues(values: Array<unknown>): number {\n let sum = 0;\n for (const value of values) sum += numberValue(value);\n return sum;\n}\n\nfunction minMax(values: Array<unknown>, mode: 'min' | 'max'): unknown {\n const filtered = values.filter((value) => !isUnknown(value));\n if (filtered.length === 0) return null;\n let best = filtered[0]!;\n for (let i = 1; i < filtered.length; i++) {\n const value = filtered[i]!;\n const cmp = comparePrimitive(value, best);\n if ((mode === 'min' && cmp < 0) || (mode === 'max' && cmp > 0)) best = value;\n }\n return best;\n}\n\nfunction isPlainObject(value: unknown): value is RowRecord {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction isBasicExpression(value: unknown): value is BasicExpression {\n return (\n value instanceof PropRef ||\n value instanceof Value ||\n value instanceof Func ||\n (isExpressionLike(value) &&\n ((value as { type: unknown }).type === 'ref' ||\n (value as { type: unknown }).type === 'val' ||\n (value as { type: unknown }).type === 'func'))\n );\n}\n\nfunction isFunc(value: unknown): value is Func {\n return value instanceof Func || (isExpressionLike(value) && (value as { type: unknown }).type === 'func');\n}\n\nfunction isAggregate(value: unknown): value is Aggregate {\n return value instanceof Aggregate || (isExpressionLike(value) && (value as { type: unknown }).type === 'agg');\n}\n\nfunction isIncludes(value: unknown): value is IncludesSubquery {\n return value instanceof IncludesSubquery || (isExpressionLike(value) && (value as { type: unknown }).type === 'includesSubquery');\n}\n","import type { CompareOptions } from '../query/ir.js';\n\nexport const DEFAULT_INDEX_COMPARE_OPTIONS: CompareOptions = {\n direction: 'asc',\n nulls: 'first',\n stringSort: 'locale',\n};\n\nconst objectIds = new WeakMap<object, number>();\nlet nextObjectId = 1;\nconst UINT8ARRAY_NORMALIZE_THRESHOLD = 128;\nconst UNDEFINED_SENTINEL = '__TS_DB_BTREE_UNDEFINED_VALUE__';\n\nexport function makeComparator(options: CompareOptions): (a: unknown, b: unknown) => number {\n return (a, b) =>\n options.direction === 'desc'\n ? ascComparator(b, a, {\n ...options,\n nulls: options.nulls === 'first' ? 'last' : 'first',\n })\n : ascComparator(a, b, options);\n}\n\nexport const defaultComparator = makeComparator(DEFAULT_INDEX_COMPARE_OPTIONS);\n\nexport function normalizeValue(value: unknown): unknown {\n if (value instanceof Date) return value.getTime();\n if (isTemporalLike(value)) return `__temporal__${value[Symbol.toStringTag]}__${value.toString()}`;\n if (isUint8Array(value) && value.byteLength <= UINT8ARRAY_NORMALIZE_THRESHOLD) {\n return `__u8__${Array.from(value).join(',')}`;\n }\n return value;\n}\n\nexport function normalizeForBTree(value: unknown): unknown {\n return value === undefined ? UNDEFINED_SENTINEL : normalizeValue(value);\n}\n\nexport function denormalizeUndefined(value: unknown): unknown {\n return value === UNDEFINED_SENTINEL ? undefined : value;\n}\n\nexport function findInsertPositionInArray(\n sortedArray: Array<unknown>,\n value: unknown,\n compareFn: (a: unknown, b: unknown) => number,\n): number {\n let left = 0;\n let right = sortedArray.length;\n while (left < right) {\n const mid = Math.floor((left + right) / 2);\n const comparison = compareFn(sortedArray[mid], value);\n if (comparison < 0) left = mid + 1;\n else right = mid;\n }\n return left;\n}\n\nexport function deleteInSortedArray(\n sortedArray: Array<unknown>,\n value: unknown,\n compareFn: (a: unknown, b: unknown) => number,\n): boolean {\n const idx = findInsertPositionInArray(sortedArray, value, compareFn);\n if (idx < sortedArray.length && compareFn(sortedArray[idx], value) === 0) {\n sortedArray.splice(idx, 1);\n return true;\n }\n return false;\n}\n\nexport function deepEquals(a: unknown, b: unknown): boolean {\n return deepEqualsInternal(a, b, new Map<object, object>());\n}\n\nfunction ascComparator(a: unknown, b: unknown, options: CompareOptions): number {\n if (a == null && b == null) return 0;\n if (a == null) return options.nulls === 'first' ? -1 : 1;\n if (b == null) return options.nulls === 'first' ? 1 : -1;\n\n if (typeof a === 'string' && typeof b === 'string') {\n if (options.stringSort === 'locale') {\n return a.localeCompare(\n b,\n options.locale,\n options.localeOptions as Intl.CollatorOptions | undefined,\n );\n }\n return a < b ? -1 : a > b ? 1 : 0;\n }\n\n if (Array.isArray(a) && Array.isArray(b)) {\n for (let i = 0; i < Math.min(a.length, b.length); i++) {\n const result = ascComparator(a[i], b[i], options);\n if (result !== 0) return result;\n }\n return a.length - b.length;\n }\n\n if (a instanceof Date && b instanceof Date) return a.getTime() - b.getTime();\n if (isTemporalLike(a) && isTemporalLike(b)) {\n const as = a.toString();\n const bs = b.toString();\n return as < bs ? -1 : as > bs ? 1 : 0;\n }\n\n const aIsObject = typeof a === 'object' && a !== null;\n const bIsObject = typeof b === 'object' && b !== null;\n if (aIsObject || bIsObject) {\n if (aIsObject && bIsObject) return getObjectId(a) - getObjectId(b);\n return aIsObject ? 1 : -1;\n }\n\n if ((a as never) < (b as never)) return -1;\n if ((a as never) > (b as never)) return 1;\n return 0;\n}\n\nfunction getObjectId(obj: object): number {\n const existing = objectIds.get(obj);\n if (existing !== undefined) return existing;\n const id = nextObjectId++;\n objectIds.set(obj, id);\n return id;\n}\n\nfunction isTemporalLike(value: unknown): value is { [Symbol.toStringTag]: string; toString(): string } {\n if (value === null || typeof value !== 'object') return false;\n const tag = (value as { [Symbol.toStringTag]?: unknown })[Symbol.toStringTag];\n return typeof tag === 'string' && tag.startsWith('Temporal.');\n}\n\nfunction isUint8Array(value: unknown): value is Uint8Array {\n return (\n (typeof Buffer !== 'undefined' && value instanceof Buffer) || value instanceof Uint8Array\n );\n}\n\nfunction deepEqualsInternal(a: unknown, b: unknown, visited: Map<object, object>): boolean {\n if (a === b) return true;\n if (a === null || b === null || a === undefined || b === undefined) return false;\n if (typeof a !== typeof b) return false;\n if (a instanceof Date || b instanceof Date) {\n return a instanceof Date && b instanceof Date && a.getTime() === b.getTime();\n }\n if (a instanceof RegExp || b instanceof RegExp) {\n return a instanceof RegExp && b instanceof RegExp && a.source === b.source && a.flags === b.flags;\n }\n if (typeof a !== 'object' || typeof b !== 'object') return false;\n\n const left = a as object;\n const right = b as object;\n if (visited.get(left) === right) return true;\n visited.set(left, right);\n\n if (a instanceof Map || b instanceof Map) {\n if (!(a instanceof Map) || !(b instanceof Map) || a.size !== b.size) return false;\n for (const [key, value] of a) {\n if (!b.has(key) || !deepEqualsInternal(value, b.get(key), visited)) return false;\n }\n return true;\n }\n\n if (a instanceof Set || b instanceof Set) {\n if (!(a instanceof Set) || !(b instanceof Set) || a.size !== b.size) return false;\n for (const value of a) if (!b.has(value)) return false;\n return true;\n }\n\n if (Array.isArray(a) || Array.isArray(b)) {\n if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;\n return a.every((value, index) => deepEqualsInternal(value, b[index], visited));\n }\n\n const keysA = Object.keys(a as Record<string, unknown>);\n const keysB = Object.keys(b as Record<string, unknown>);\n if (keysA.length !== keysB.length) return false;\n return keysA.every((key) =>\n Object.prototype.hasOwnProperty.call(b, key) &&\n deepEqualsInternal(\n (a as Record<string, unknown>)[key],\n (b as Record<string, unknown>)[key],\n visited,\n ),\n );\n}\n","import { comparisonFunctions } from '../query/expressions.js';\nimport type { BasicExpression, CompareOptions, OrderByDirection } from '../query/ir.js';\nimport { compileSingleRowExpression } from '../query/compiler.js';\nimport { DEFAULT_INDEX_COMPARE_OPTIONS, deepEquals } from './comparison.js';\nimport type { RangeQueryOptions } from './range.js';\n\n/** Operations that index implementations can support. */\nexport const IndexOperation = comparisonFunctions;\nexport type IndexOperation = (typeof comparisonFunctions)[number];\n\n/** Statistics about index usage and performance. */\nexport interface IndexStats {\n readonly entryCount: number;\n readonly lookupCount: number;\n readonly averageLookupTime: number;\n readonly lastUpdated: Date;\n}\n\nexport interface IndexInterface<TKey extends string | number = string | number> {\n add(key: TKey, item: unknown): void;\n remove(key: TKey, item: unknown): void;\n update(key: TKey, oldItem: unknown, newItem: unknown): void;\n build(entries: Iterable<[TKey, unknown]>): void;\n clear(): void;\n lookup(operation: IndexOperation, value: unknown): Set<TKey>;\n equalityLookup(value: unknown): Set<TKey>;\n inArrayLookup(values: Array<unknown>): Set<TKey>;\n rangeQuery(options?: RangeQueryOptions): Set<TKey>;\n rangeQueryReversed(options?: RangeQueryOptions): Set<TKey>;\n take(n: number, from?: unknown, filterFn?: (key: TKey) => boolean): Array<TKey>;\n takeFromStart(n: number, filterFn?: (key: TKey) => boolean): Array<TKey>;\n takeReversed(n: number, from?: unknown, filterFn?: (key: TKey) => boolean): Array<TKey>;\n takeReversedFromEnd(n: number, filterFn?: (key: TKey) => boolean): Array<TKey>;\n get keyCount(): number;\n get orderedEntriesArray(): Array<[unknown, Set<TKey>]>;\n get orderedEntriesArrayReversed(): Array<[unknown, Set<TKey>]>;\n get indexedKeysSet(): Set<TKey>;\n get valueMapData(): Map<unknown, Set<TKey>>;\n supports(operation: IndexOperation): boolean;\n matchesField(fieldPath: Array<string>): boolean;\n matchesCompareOptions(compareOptions: CompareOptions): boolean;\n matchesDirection(direction: OrderByDirection): boolean;\n getStats(): IndexStats;\n}\n\n/** Base abstract class that all index types extend. */\nexport abstract class BaseIndex<TKey extends string | number = string | number>\n implements IndexInterface<TKey>\n{\n readonly id: number;\n readonly name?: string;\n readonly expression: BasicExpression;\n abstract readonly supportedOperations: Set<IndexOperation>;\n protected lookupCount = 0;\n protected totalLookupTime = 0;\n protected lastUpdated = new Date();\n protected compareOptions: CompareOptions = DEFAULT_INDEX_COMPARE_OPTIONS;\n\n constructor(id: number, expression: BasicExpression, name?: string, options?: unknown) {\n this.id = id;\n this.expression = expression;\n if (name !== undefined) this.name = name;\n this.initialize(options);\n }\n\n abstract add(key: TKey, item: unknown): void;\n abstract remove(key: TKey, item: unknown): void;\n abstract update(key: TKey, oldItem: unknown, newItem: unknown): void;\n abstract build(entries: Iterable<[TKey, unknown]>): void;\n abstract clear(): void;\n abstract lookup(operation: IndexOperation, value: unknown): Set<TKey>;\n abstract equalityLookup(value: unknown): Set<TKey>;\n abstract inArrayLookup(values: Array<unknown>): Set<TKey>;\n abstract rangeQuery(options?: RangeQueryOptions): Set<TKey>;\n abstract rangeQueryReversed(options?: RangeQueryOptions): Set<TKey>;\n abstract take(n: number, from?: unknown, filterFn?: (key: TKey) => boolean): Array<TKey>;\n abstract takeFromStart(n: number, filterFn?: (key: TKey) => boolean): Array<TKey>;\n abstract takeReversed(n: number, from?: unknown, filterFn?: (key: TKey) => boolean): Array<TKey>;\n abstract takeReversedFromEnd(n: number, filterFn?: (key: TKey) => boolean): Array<TKey>;\n abstract get keyCount(): number;\n abstract get orderedEntriesArray(): Array<[unknown, Set<TKey>]>;\n abstract get orderedEntriesArrayReversed(): Array<[unknown, Set<TKey>]>;\n abstract get indexedKeysSet(): Set<TKey>;\n abstract get valueMapData(): Map<unknown, Set<TKey>>;\n protected abstract initialize(options?: unknown): void;\n\n supports(operation: IndexOperation): boolean {\n return this.supportedOperations.has(operation);\n }\n\n matchesField(fieldPath: Array<string>): boolean {\n return (\n this.expression.type === 'ref' &&\n this.expression.path.length === fieldPath.length &&\n this.expression.path.every((part, index) => part === fieldPath[index])\n );\n }\n\n /** Checks compare options; direction ignored because ReverseIndex can flip traversal. */\n matchesCompareOptions(compareOptions: CompareOptions): boolean {\n const { direction: _leftDirection, ...left } = this.compareOptions;\n const { direction: _rightDirection, ...right } = compareOptions;\n return deepEquals(left, right);\n }\n\n matchesDirection(direction: OrderByDirection): boolean {\n return this.compareOptions.direction === direction;\n }\n\n getStats(): IndexStats {\n return {\n entryCount: this.keyCount,\n lookupCount: this.lookupCount,\n averageLookupTime: this.lookupCount > 0 ? this.totalLookupTime / this.lookupCount : 0,\n lastUpdated: this.lastUpdated,\n };\n }\n\n protected evaluateIndexExpression(item: unknown): unknown {\n const evaluator = compileSingleRowExpression(this.expression);\n return evaluator(item as Record<string, unknown>);\n }\n\n protected trackLookup(startTime: number): void {\n this.lookupCount++;\n this.totalLookupTime += performance.now() - startTime;\n }\n\n protected updateTimestamp(): void {\n this.lastUpdated = new Date();\n }\n}\n\n/** Type for index constructors. */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type IndexConstructor<TKey extends string | number = string | number> = new (\n id: number,\n expression: BasicExpression,\n name?: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n options?: any,\n) => BaseIndex<TKey>;\n","import { BaseIndex, type IndexOperation } from './base-index.js';\nimport type { CompareOptions, BasicExpression } from '../query/ir.js';\nimport {\n defaultComparator,\n deleteInSortedArray,\n findInsertPositionInArray,\n normalizeValue,\n} from './comparison.js';\nimport type { RangeQueryOptions } from './range.js';\n\n/** Options for BasicIndex. */\nexport interface BasicIndexOptions {\n compareFn?: (a: unknown, b: unknown) => number;\n compareOptions?: CompareOptions;\n}\n\n/**\n * Basic index using Map + sorted array.\n *\n * Map gives O(1) equality lookup; sorted values give simple range/take support.\n */\nexport class BasicIndex<TKey extends string | number = string | number> extends BaseIndex<TKey> {\n override readonly supportedOperations = new Set<IndexOperation>([\n 'eq',\n 'gt',\n 'gte',\n 'lt',\n 'lte',\n 'in',\n ]);\n\n private valueMap = new Map<unknown, Set<TKey>>();\n private sortedValues: Array<unknown> = [];\n private indexedKeys = new Set<TKey>();\n private compareFn: (a: unknown, b: unknown) => number = defaultComparator;\n\n constructor(id: number, expression: BasicExpression, name?: string, options?: BasicIndexOptions) {\n super(id, expression, name, options);\n this.compareFn = options?.compareFn ?? defaultComparator;\n if (options?.compareOptions) this.compareOptions = options.compareOptions;\n }\n\n protected override initialize(_options?: BasicIndexOptions): void {\n // Subclass fields initialize after super(); constructor applies options.\n }\n\n override add(key: TKey, item: unknown): void {\n let indexedValue: unknown;\n try {\n indexedValue = this.evaluateIndexExpression(item);\n } catch (error) {\n throw new Error(`Failed to evaluate index expression for key ${String(key)}: ${String(error)}`, {\n cause: error,\n });\n }\n\n const normalizedValue = normalizeValue(indexedValue);\n const existing = this.valueMap.get(normalizedValue);\n if (existing) {\n existing.add(key);\n } else {\n this.valueMap.set(normalizedValue, new Set([key]));\n const insertIdx = findInsertPositionInArray(this.sortedValues, normalizedValue, this.compareFn);\n this.sortedValues.splice(insertIdx, 0, normalizedValue);\n }\n this.indexedKeys.add(key);\n this.updateTimestamp();\n }\n\n override remove(key: TKey, item: unknown): void {\n let indexedValue: unknown;\n try {\n indexedValue = this.evaluateIndexExpression(item);\n } catch (error) {\n console.warn(`Failed to evaluate index expression for key ${String(key)} during removal:`, error);\n this.indexedKeys.delete(key);\n this.updateTimestamp();\n return;\n }\n\n const normalizedValue = normalizeValue(indexedValue);\n const keySet = this.valueMap.get(normalizedValue);\n if (keySet) {\n keySet.delete(key);\n if (keySet.size === 0) {\n this.valueMap.delete(normalizedValue);\n deleteInSortedArray(this.sortedValues, normalizedValue, this.compareFn);\n }\n }\n this.indexedKeys.delete(key);\n this.updateTimestamp();\n }\n\n override update(key: TKey, oldItem: unknown, newItem: unknown): void {\n this.remove(key, oldItem);\n this.add(key, newItem);\n }\n\n override build(entries: Iterable<[TKey, unknown]>): void {\n this.clear();\n const normalizedEntries: Array<{ key: TKey; value: unknown }> = [];\n for (const [key, item] of entries) {\n let indexedValue: unknown;\n try {\n indexedValue = this.evaluateIndexExpression(item);\n } catch (error) {\n throw new Error(`Failed to evaluate index expression for key ${String(key)}: ${String(error)}`, {\n cause: error,\n });\n }\n normalizedEntries.push({ key, value: normalizeValue(indexedValue) });\n this.indexedKeys.add(key);\n }\n\n for (const { key, value } of normalizedEntries) {\n const keySet = this.valueMap.get(value);\n if (keySet) keySet.add(key);\n else this.valueMap.set(value, new Set([key]));\n }\n this.sortedValues = [];\n for (const value of this.valueMap.keys()) {\n const insertIdx = findInsertPositionInArray(this.sortedValues, value, this.compareFn);\n this.sortedValues.splice(insertIdx, 0, value);\n }\n this.updateTimestamp();\n }\n\n override clear(): void {\n this.valueMap.clear();\n this.sortedValues = [];\n this.indexedKeys.clear();\n this.updateTimestamp();\n }\n\n override lookup(operation: IndexOperation, value: unknown): Set<TKey> {\n const startTime = performance.now();\n let result: Set<TKey>;\n switch (operation) {\n case 'eq':\n result = this.equalityLookup(value);\n break;\n case 'gt':\n result = this.rangeQuery({ from: value, fromInclusive: false });\n break;\n case 'gte':\n result = this.rangeQuery({ from: value, fromInclusive: true });\n break;\n case 'lt':\n result = this.rangeQuery({ to: value, toInclusive: false });\n break;\n case 'lte':\n result = this.rangeQuery({ to: value, toInclusive: true });\n break;\n case 'in':\n result = this.inArrayLookup(Array.isArray(value) ? value : []);\n break;\n default:\n throw new Error(`Operation ${operation} not supported by BasicIndex`);\n }\n this.trackLookup(startTime);\n return result;\n }\n\n override get keyCount(): number {\n return this.indexedKeys.size;\n }\n\n override equalityLookup(value: unknown): Set<TKey> {\n return this.valueMap.get(normalizeValue(value)) ?? new Set<TKey>();\n }\n\n override rangeQuery(options: RangeQueryOptions = {}): Set<TKey> {\n const { from, to, fromInclusive = true, toInclusive = true } = options;\n const result = new Set<TKey>();\n if (this.sortedValues.length === 0) return result;\n\n const normalizedFrom = normalizeValue(from);\n const normalizedTo = normalizeValue(to);\n\n let startIdx = 0;\n if (normalizedFrom !== undefined) {\n startIdx = findInsertPositionInArray(this.sortedValues, normalizedFrom, this.compareFn);\n if (\n !fromInclusive &&\n startIdx < this.sortedValues.length &&\n this.compareFn(this.sortedValues[startIdx], normalizedFrom) === 0\n ) {\n startIdx++;\n }\n }\n\n let endIdx = this.sortedValues.length;\n if (normalizedTo !== undefined) {\n endIdx = findInsertPositionInArray(this.sortedValues, normalizedTo, this.compareFn);\n if (\n toInclusive &&\n endIdx < this.sortedValues.length &&\n this.compareFn(this.sortedValues[endIdx], normalizedTo) === 0\n ) {\n endIdx++;\n }\n }\n\n for (let i = startIdx; i < endIdx; i++) {\n const value = this.sortedValues[i];\n const keys = this.valueMap.get(value);\n if (keys) for (const key of keys) result.add(key);\n }\n return result;\n }\n\n override rangeQueryReversed(options: RangeQueryOptions = {}): Set<TKey> {\n const { from, to, fromInclusive = true, toInclusive = true } = options;\n const swappedFrom = to ?? this.sortedValues[this.sortedValues.length - 1];\n const swappedTo = from ?? this.sortedValues[0];\n return this.rangeQuery({\n from: swappedFrom,\n to: swappedTo,\n fromInclusive: toInclusive,\n toInclusive: fromInclusive,\n });\n }\n\n override take(n: number, from?: unknown, filterFn?: (key: TKey) => boolean): Array<TKey> {\n const result: Array<TKey> = [];\n let startIdx = 0;\n if (from !== undefined) {\n const normalizedFrom = normalizeValue(from);\n startIdx = findInsertPositionInArray(this.sortedValues, normalizedFrom, this.compareFn);\n while (\n startIdx < this.sortedValues.length &&\n this.compareFn(this.sortedValues[startIdx], normalizedFrom) <= 0\n ) {\n startIdx++;\n }\n }\n for (let i = startIdx; i < this.sortedValues.length && result.length < n; i++) {\n this.takeKeysForValue(this.sortedValues[i], result, n, filterFn);\n }\n return result;\n }\n\n override takeReversed(n: number, from?: unknown, filterFn?: (key: TKey) => boolean): Array<TKey> {\n const result: Array<TKey> = [];\n let startIdx = this.sortedValues.length - 1;\n if (from !== undefined) {\n const normalizedFrom = normalizeValue(from);\n startIdx = findInsertPositionInArray(this.sortedValues, normalizedFrom, this.compareFn) - 1;\n while (startIdx >= 0 && this.compareFn(this.sortedValues[startIdx], normalizedFrom) >= 0) {\n startIdx--;\n }\n }\n for (let i = startIdx; i >= 0 && result.length < n; i--) {\n this.takeKeysForValue(this.sortedValues[i], result, n, filterFn);\n }\n return result;\n }\n\n override takeFromStart(n: number, filterFn?: (key: TKey) => boolean): Array<TKey> {\n const result: Array<TKey> = [];\n for (let i = 0; i < this.sortedValues.length && result.length < n; i++) {\n this.takeKeysForValue(this.sortedValues[i], result, n, filterFn);\n }\n return result;\n }\n\n override takeReversedFromEnd(n: number, filterFn?: (key: TKey) => boolean): Array<TKey> {\n const result: Array<TKey> = [];\n for (let i = this.sortedValues.length - 1; i >= 0 && result.length < n; i--) {\n this.takeKeysForValue(this.sortedValues[i], result, n, filterFn);\n }\n return result;\n }\n\n override inArrayLookup(values: Array<unknown>): Set<TKey> {\n const result = new Set<TKey>();\n for (const value of values) {\n const keys = this.valueMap.get(normalizeValue(value));\n if (keys) for (const key of keys) result.add(key);\n }\n return result;\n }\n\n override get indexedKeysSet(): Set<TKey> {\n return this.indexedKeys;\n }\n\n override get orderedEntriesArray(): Array<[unknown, Set<TKey>]> {\n return this.sortedValues.map((value) => [value, this.valueMap.get(value) ?? new Set<TKey>()]);\n }\n\n override get orderedEntriesArrayReversed(): Array<[unknown, Set<TKey>]> {\n const result: Array<[unknown, Set<TKey>]> = [];\n for (let i = this.sortedValues.length - 1; i >= 0; i--) {\n const value = this.sortedValues[i];\n result.push([value, this.valueMap.get(value) ?? new Set<TKey>()]);\n }\n return result;\n }\n\n override get valueMapData(): Map<unknown, Set<TKey>> {\n return this.valueMap;\n }\n\n private takeKeysForValue(\n value: unknown,\n result: Array<TKey>,\n limit: number,\n filterFn?: (key: TKey) => boolean,\n ): void {\n const keys = this.valueMap.get(value);\n if (!keys) return;\n for (const key of keys) {\n if (result.length >= limit) return;\n if (!filterFn || filterFn(key)) result.push(key);\n }\n }\n}\n\nexport type { RangeQueryOptions } from './range.js';\n","/**\n * Index Dev Mode — TanStack DB parity (Layer D.3).\n *\n * Tracks slow query patterns and emits index suggestions in non-production\n * builds. Public root exports intentionally mirror @tanstack/db@0.6.16.\n */\n\nexport interface IndexDevModeConfig {\n /** Enable dev mode index suggestions. */\n enabled: boolean;\n /** Suggest indexes when collection has more than this many items. */\n collectionSizeThreshold: number;\n /** Suggest indexes when queries take longer than this many milliseconds. */\n slowQueryThresholdMs: number;\n /** Custom handler for index suggestions. */\n onSuggestion: ((suggestion: IndexSuggestion) => void) | null;\n}\n\nexport interface IndexSuggestion {\n type: 'collection-size' | 'slow-query' | 'frequent-field';\n collectionId: string;\n fieldPath: Array<string>;\n message: string;\n collectionSize?: number;\n queryTimeMs?: number;\n queryCount?: number;\n}\n\nexport interface QueryPattern {\n fieldPath: Array<string>;\n queryCount: number;\n totalTimeMs: number;\n avgTimeMs: number;\n}\n\nlet devModeConfig: IndexDevModeConfig = {\n enabled: true,\n collectionSizeThreshold: 1_000,\n slowQueryThresholdMs: 10,\n onSuggestion: null,\n};\n\nconst queryPatterns = new Map<string, QueryPattern>();\n\n/** Configure dev mode for index suggestions. */\nexport function configureIndexDevMode(config: Partial<IndexDevModeConfig>): void {\n devModeConfig = { ...devModeConfig, ...config };\n}\n\n/** Get current dev mode configuration. */\nexport function getIndexDevModeConfig(): IndexDevModeConfig {\n return devModeConfig;\n}\n\n/** Check if dev mode is enabled. */\nexport function isDevModeEnabled(): boolean {\n return devModeConfig.enabled && process.env.NODE_ENV !== 'production';\n}\n\n/** Emit an index suggestion (dev mode only). */\nexport function emitIndexSuggestion(suggestion: IndexSuggestion): void {\n if (!isDevModeEnabled()) return;\n\n if (devModeConfig.onSuggestion) {\n try {\n devModeConfig.onSuggestion(suggestion);\n } catch {\n // Match upstream: dev-only suggestion handlers must never break app code.\n }\n return;\n }\n\n console.warn(\n `[TanStack DB] Index suggestion for \"${suggestion.collectionId}\":\\n` +\n ` ${suggestion.message}\\n` +\n ` Field: ${suggestion.fieldPath.join('.')}\\n` +\n ` Add index: collection.createIndex((row) => row.${suggestion.fieldPath.join('.')})`,\n );\n}\n\n/** Track a query for dev mode analysis. */\nexport function trackQuery(\n collectionId: string,\n fieldPath: Array<string>,\n executionTimeMs: number,\n): void {\n if (!isDevModeEnabled()) return;\n\n const key = `${collectionId}:${fieldPath.join('.')}`;\n const existing = queryPatterns.get(key);\n if (existing) {\n existing.queryCount++;\n existing.totalTimeMs += executionTimeMs;\n existing.avgTimeMs = existing.totalTimeMs / existing.queryCount;\n } else {\n queryPatterns.set(key, {\n fieldPath: [...fieldPath],\n queryCount: 1,\n totalTimeMs: executionTimeMs,\n avgTimeMs: executionTimeMs,\n });\n }\n\n const pattern = queryPatterns.get(key)!;\n if (pattern.avgTimeMs > devModeConfig.slowQueryThresholdMs) {\n emitIndexSuggestion({\n type: 'slow-query',\n collectionId,\n fieldPath: [...fieldPath],\n message: `Queries on \"${fieldPath.join('.')}\" are slow (avg ${pattern.avgTimeMs.toFixed(1)}ms). Consider adding an index.`,\n queryTimeMs: pattern.avgTimeMs,\n queryCount: pattern.queryCount,\n });\n }\n}\n\n/** Check collection size and suggest index if needed (dev mode). */\nexport function checkCollectionSizeForIndex(\n collectionId: string,\n collectionSize: number,\n fieldPath: Array<string>,\n): void {\n if (!isDevModeEnabled()) return;\n if (collectionSize > devModeConfig.collectionSizeThreshold) {\n emitIndexSuggestion({\n type: 'collection-size',\n collectionId,\n fieldPath: [...fieldPath],\n message: `Collection has ${collectionSize} items. Queries on \"${fieldPath.join('.')}\" may benefit from an index.`,\n collectionSize,\n });\n }\n}\n\n/** Clear query pattern tracking (useful for tests). */\nexport function clearQueryPatterns(): void {\n queryPatterns.clear();\n}\n\n/** Get query patterns (useful for debugging/testing). */\nexport function getQueryPatterns(): Map<string, QueryPattern> {\n return new Map(\n [...queryPatterns.entries()].map(([key, value]) => [\n key,\n {\n fieldPath: [...value.fieldPath],\n queryCount: value.queryCount,\n totalTimeMs: value.totalTimeMs,\n avgTimeMs: value.avgTimeMs,\n },\n ]),\n );\n}\n","import type { Collection, IndexExpressionCallback } from '../collection/collection.js';\nimport { DEFAULT_INDEX_COMPARE_OPTIONS } from './comparison.js';\nimport type { CompareOptions, BasicExpression } from '../query/ir.js';\nimport { checkCollectionSizeForIndex, isDevModeEnabled } from './index-registry.js';\n\nexport interface AutoIndexConfig {\n autoIndex?: 'off' | 'eager';\n}\n\nconst autoIndexOperations = new Set(['eq', 'gt', 'gte', 'lt', 'lte', 'in']);\n\nexport function ensureIndexForField(\n _fieldName: string,\n fieldPath: Array<string>,\n collection: Collection,\n compareOptions?: CompareOptions,\n compareFn?: (a: unknown, b: unknown) => number,\n): void {\n if (isVirtualFieldPath(fieldPath)) return;\n if (collection.config.autoIndex !== 'eager') return;\n\n const compareOpts = compareOptions ?? collectionDefaultCompareOptions(collection);\n const existingIndex = [...collection.indexes.values()].find(\n (index) => index.matchesField(fieldPath) && index.matchesCompareOptions(compareOpts),\n );\n if (existingIndex) return;\n\n if (isDevModeEnabled()) {\n checkCollectionSizeForIndex(collection.id || 'unknown', collection.size, fieldPath);\n }\n\n try {\n const callback: IndexExpressionCallback = (row) =>\n fieldPath.reduce<unknown>(\n (current, part) => (current as Record<string, unknown>)[part],\n row,\n );\n collection.createIndex(callback, {\n name: `auto:${fieldPath.join('.')}`,\n options: compareFn\n ? { compareFn, compareOptions: compareOpts }\n : { compareOptions: compareOpts },\n });\n } catch (error) {\n // Dev convenience only: auto-index failures must not break subscriptions.\n console.warn(\n `${collection.id ? `[${collection.id}] ` : ''}Failed to create auto-index for field path \"${fieldPath.join('.')}\":`,\n error,\n );\n }\n}\n\n/** Analyze a where expression and create indexes for simple field comparisons. */\nexport function ensureIndexForExpression(\n expression: BasicExpression,\n collection: Collection,\n): void {\n if (collection.config.autoIndex !== 'eager') return;\n for (const { fieldName, fieldPath } of extractIndexableExpressions(expression)) {\n ensureIndexForField(fieldName, fieldPath, collection);\n }\n}\n\nexport function extractIndexableExpressions(\n expression: BasicExpression,\n): Array<{ fieldName: string; fieldPath: Array<string> }> {\n const results: Array<{ fieldName: string; fieldPath: Array<string> }> = [];\n\n const visit = (expr: BasicExpression): void => {\n if (expr.type !== 'func') return;\n if (expr.name === 'and') {\n for (const arg of expr.args) visit(arg);\n return;\n }\n if (!autoIndexOperations.has(expr.name)) return;\n\n const firstArg = expr.args[0];\n if (!firstArg || firstArg.type !== 'ref') return;\n const fieldPath = [...firstArg.path];\n if (fieldPath.length === 0 || isVirtualFieldPath(fieldPath)) return;\n\n results.push({ fieldName: fieldPath.join('_'), fieldPath });\n };\n\n visit(expression);\n return results;\n}\n\nfunction collectionDefaultCompareOptions(collection: Collection): CompareOptions {\n return {\n ...DEFAULT_INDEX_COMPARE_OPTIONS,\n ...collection.compareOptions,\n };\n}\n\nfunction isVirtualFieldPath(fieldPath: Array<string>): boolean {\n return fieldPath.length === 0 || fieldPath[0]!.startsWith('$');\n}\n","import { NotFoundError } from '../errors.js';\n\n/**\n * Maps a uint32 primary key to its dense row index. Phase 1 uses a JS Map;\n * a SAB-resident open-addressed hash map is planned for cross-worker\n * visibility in a later phase.\n *\n * `TOMBSTONE` (0xffffffff) is reserved as a sentinel for \"no row\".\n */\nexport const TOMBSTONE_ROW = 0xffffffff;\n\nexport class RowIndex {\n private map = new Map<number, number>();\n\n get size(): number {\n return this.map.size;\n }\n\n /** Return the row index for `id`, or undefined if absent. */\n lookup(id: number): number | undefined {\n return this.map.get(id >>> 0);\n }\n\n /** Same as lookup but throws if absent. */\n require(id: number): number {\n const r = this.map.get(id >>> 0);\n if (r === undefined) throw new NotFoundError(`id ${id} not found`);\n return r;\n }\n\n /** Insert `id → row`. Returns false if `id` already existed. */\n insert(id: number, row: number): boolean {\n const key = id >>> 0;\n if (this.map.has(key)) return false;\n this.map.set(key, row);\n return true;\n }\n\n /** Remove mapping for `id`. Returns the previous row index, or undefined. */\n remove(id: number): number | undefined {\n const key = id >>> 0;\n const prev = this.map.get(key);\n if (prev === undefined) return undefined;\n this.map.delete(key);\n return prev;\n }\n\n /** Iterate `[id, row]` pairs. */\n entries(): IterableIterator<[number, number]> {\n return this.map.entries();\n }\n\n /** Remove every mapping. */\n clear(): void {\n this.map.clear();\n }\n}\n","import { UndoError } from '../errors.js';\n\nexport type UndoOp = 'insert' | 'update' | 'delete';\n\n/**\n * A single reversible mutation. Stored in the undo ring so rollback can\n * replay it in reverse.\n *\n * For v1 we keep the payload as plain JS objects (column name → prior JS\n * value). Memory cost is O(touched columns) per mutation. A later phase may\n * pack the payload into a per-row binary diff.\n */\nexport interface UndoRecord {\n /** Monotonic id assigned by the ring; also the generation for rollback markers. */\n readonly seq: number;\n readonly op: UndoOp;\n readonly rowId: number;\n /** Row slot that was used. */\n readonly row: number;\n /** Previous values, keyed by column name. Empty for `insert`. */\n readonly prev: Readonly<Record<string, unknown>>;\n /** Full row snapshot for `delete` so re-insert can restore it. */\n readonly snapshot?: Readonly<Record<string, unknown>>;\n}\n\n/**\n * Fixed-capacity circular buffer of UndoRecords.\n *\n * When the ring wraps, the oldest entries are silently overwritten. Rollback\n * to a `mark()` that has been overwritten throws `UndoError` so callers know\n * the rollback is no longer possible.\n */\nexport class UndoRing {\n private records: (UndoRecord | undefined)[];\n private head = 0; // next write slot\n private count = 0; // number of valid entries (≤ capacity)\n private seqCounter = 0;\n\n constructor(public readonly capacity: number) {\n if (capacity <= 0 || !Number.isInteger(capacity)) {\n throw new RangeError('capacity must be a positive integer');\n }\n this.records = new Array<UndoRecord | undefined>(capacity);\n }\n\n get size(): number {\n return this.count;\n }\n\n /** Next seq that will be assigned. */\n get nextSeq(): number {\n return this.seqCounter;\n }\n\n /** Push a new record; returns its seq. */\n push(\n op: UndoOp,\n rowId: number,\n row: number,\n prev: Record<string, unknown>,\n snapshot?: Record<string, unknown>,\n ): number {\n const seq = this.seqCounter++;\n const rec: UndoRecord = snapshot\n ? { seq, op, rowId, row, prev, snapshot }\n : { seq, op, rowId, row, prev };\n this.records[this.head] = rec;\n this.head = (this.head + 1) % this.capacity;\n if (this.count < this.capacity) this.count++;\n return seq;\n }\n\n /** Oldest valid seq currently in the ring, or -1 if empty. */\n oldestSeq(): number {\n if (this.count === 0) return -1;\n const idx = (this.head - this.count + this.capacity) % this.capacity;\n return this.records[idx]!.seq;\n }\n\n /** Return a stable mark for the next seq to be written. */\n mark(): number {\n return this.seqCounter;\n }\n\n /**\n * Drain records pushed at or after `mark`, newest-first. Used by `rollback`.\n * Throws if `mark` has been overwritten by ring wrap.\n */\n drainSince(mark: number): UndoRecord[] {\n if (mark < 0) throw new RangeError('mark must be non-negative');\n if (mark > this.seqCounter) {\n throw new UndoError(`mark ${mark} is in the future (nextSeq=${this.seqCounter})`);\n }\n if (mark < this.oldestSeqOrZero()) {\n throw new UndoError(\n `mark ${mark} has been overwritten; oldest=${this.oldestSeq()}`,\n );\n }\n const out: UndoRecord[] = [];\n // Walk from newest to oldest.\n let idx = (this.head - 1 + this.capacity) % this.capacity;\n for (let i = 0; i < this.count; i++) {\n const r = this.records[idx]!;\n if (r.seq < mark) break;\n out.push(r);\n idx = (idx - 1 + this.capacity) % this.capacity;\n }\n // Remove drained records so a second rollback doesn't re-apply them.\n this.count -= out.length;\n this.head = (this.head - out.length + this.capacity) % this.capacity;\n // We leave seqCounter untouched so marks remain monotonic.\n return out;\n }\n\n private oldestSeqOrZero(): number {\n const s = this.oldestSeq();\n return s === -1 ? this.seqCounter : s;\n }\n\n /** Clear the ring without resetting seqCounter. */\n clear(): void {\n this.records.fill(undefined);\n this.head = 0;\n this.count = 0;\n }\n}\n","/**\n * Change event emitted by Collection after each mutation, consumed by the\n * reactive query engine.\n *\n * `columns` is an explicit set of column names that were written. Deletions\n * (soft) touch `__deleted` only; rollbacks may emit `columns: 'all'` when a\n * rollback re-inserts a snapshot.\n */\nexport type ChangeOp = 'insert' | 'update' | 'delete' | 'rollback' | 'compact';\n\nexport interface ChangeEvent {\n readonly op: ChangeOp;\n readonly rowId: number;\n /** Columns written by this mutation, or 'all' when unknown / broad. */\n readonly columns: ReadonlySet<string> | 'all';\n /** Monotonic collection global version after the mutation. */\n readonly globalVersion: number;\n /**\n * Current row snapshot after the mutation.\n *\n * For `insert` and `update` ops: the full row as it exists post-mutation.\n * For `delete` op (soft or hard): the final row state — for soft-deletes\n * this is the row with `__deleted: true`; for hard-deletes it's the\n * last snapshot before removal (taken from the undo log).\n * For `rollback` and `compact`: may be undefined if the snapshot would\n * be expensive to reconstruct and no consumer needs it.\n *\n * Exists so `subscribeChanges` adapters (TanStack DB `ChangeMessage`\n * shape) can emit the `value` field without re-reading the collection,\n * which is critical for delete events where the row is gone.\n */\n readonly value?: Readonly<Record<string, unknown>>;\n /**\n * For `update` ops only: the subset of columns as they were before the\n * mutation. Keys match the entries in `columns`. Absent for other ops.\n */\n readonly previousValue?: Readonly<Record<string, unknown>>;\n /**\n * Optional decomposed high-level changes for broad events like rollback.\n * Kept structurally typed here to avoid coupling the low-level emitter to\n * TanStack-facing public types.\n */\n readonly changes?: ReadonlyArray<{\n key: number;\n value: Readonly<Record<string, unknown>>;\n previousValue?: Readonly<Record<string, unknown>>;\n type: 'insert' | 'update' | 'delete';\n }>;\n}\n\nexport type ChangeListener = (event: ChangeEvent) => void;\n\n/**\n * Simple synchronous emitter. Listeners are invoked in insertion order. An\n * error thrown by a listener is caught and logged so subsequent listeners\n * still run — this keeps mutation correctness independent of query bugs.\n */\nexport class ChangeEmitter {\n private listeners: Set<ChangeListener> = new Set();\n\n subscribe(listener: ChangeListener): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n emit(event: ChangeEvent): void {\n for (const l of this.listeners) {\n try {\n l(event);\n } catch (err) {\n // Intentional: query/subscription errors must not roll back mutation.\n // eslint-disable-next-line no-console\n console.error('[arrowbase] change listener threw:', err);\n }\n }\n }\n\n get size(): number {\n return this.listeners.size;\n }\n}\n","/**\n * Generic, type-safe event emitter. API mirrors `@tanstack/db`'s\n * `EventEmitter<TEvents>` exactly:\n *\n * - `on(event, cb)` → returns an unsubscribe fn.\n * - `once(event, cb)` → auto-unsubscribes after first emission.\n * - `off(event, cb)` → removes a listener.\n * - `waitFor(event, timeout?)` → Promise resolving with payload.\n *\n * Listener exceptions are caught so one bad handler can't block the\n * rest; the error surfaces via `console.error` and the emitter keeps\n * going. Matches TanStack DB's crash-containment behavior.\n */\n\nexport class TypedEventEmitter<TEvents extends Record<string, unknown>> {\n private readonly handlers = new Map<\n keyof TEvents,\n Set<(payload: TEvents[keyof TEvents]) => void>\n >();\n\n /**\n * Subscribe to an event. Returns an unsubscribe function. Calling\n * `on` with the same callback twice registers it twice (matching\n * Node's EventEmitter and TanStack DB's).\n */\n on<K extends keyof TEvents>(\n event: K,\n callback: (payload: TEvents[K]) => void,\n ): () => void {\n let set = this.handlers.get(event);\n if (!set) {\n set = new Set();\n this.handlers.set(event, set);\n }\n const wrapped = callback as (payload: TEvents[keyof TEvents]) => void;\n set.add(wrapped);\n return () => {\n const s = this.handlers.get(event);\n if (!s) return;\n s.delete(wrapped);\n if (s.size === 0) this.handlers.delete(event);\n };\n }\n\n /**\n * Subscribe to an event and auto-unsubscribe after the first\n * emission. Returns an unsubscribe function that's also safe to\n * call before the event fires.\n */\n once<K extends keyof TEvents>(\n event: K,\n callback: (payload: TEvents[K]) => void,\n ): () => void {\n const off = this.on(event, (payload) => {\n off();\n callback(payload);\n });\n return off;\n }\n\n /**\n * Remove a specific listener. If multiple copies of the same\n * callback are registered, only one is removed per call (matches\n * Node's EventEmitter).\n */\n off<K extends keyof TEvents>(\n event: K,\n callback: (payload: TEvents[K]) => void,\n ): void {\n const set = this.handlers.get(event);\n if (!set) return;\n set.delete(callback as (payload: TEvents[keyof TEvents]) => void);\n if (set.size === 0) this.handlers.delete(event);\n }\n\n /**\n * Await the next emission of `event`. Rejects with a timeout error\n * if `timeout` ms pass first.\n */\n waitFor<K extends keyof TEvents>(\n event: K,\n timeout?: number,\n ): Promise<TEvents[K]> {\n return new Promise((resolve, reject) => {\n let timer: ReturnType<typeof setTimeout> | null = null;\n const off = this.on(event, (payload) => {\n if (timer !== null) clearTimeout(timer);\n off();\n resolve(payload);\n });\n if (typeof timeout === 'number' && timeout >= 0) {\n timer = setTimeout(() => {\n off();\n reject(\n new Error(\n `waitFor('${String(event)}') timed out after ${timeout}ms`,\n ),\n );\n }, timeout);\n }\n });\n }\n\n /** Emit an event. Listener errors are caught and logged. */\n emit<K extends keyof TEvents>(event: K, payload: TEvents[K]): void {\n const set = this.handlers.get(event);\n if (!set || set.size === 0) return;\n // Snapshot the iteration target so listeners that unsubscribe\n // (or register) during dispatch don't perturb this emission.\n for (const cb of [...set]) {\n try {\n cb(payload as TEvents[keyof TEvents]);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('[arrowbase] event listener threw:', err);\n }\n }\n }\n\n /** Total number of listeners across all events. */\n listenerCount(event?: keyof TEvents): number {\n if (event === undefined) {\n let n = 0;\n for (const set of this.handlers.values()) n += set.size;\n return n;\n }\n return this.handlers.get(event)?.size ?? 0;\n }\n\n /** Remove every listener. Used by `cleanup()`. */\n clearAll(): void {\n this.handlers.clear();\n }\n}\n","import type {\n Deferred,\n MutationFn,\n PendingMutation,\n TransactionConfig,\n TransactionState,\n TransactionWithMutations,\n} from './tanstack-types.js';\n\nlet sequenceNumber = 0;\nlet generatedId = 0;\nconst pendingTransactions: Transaction<any>[] = [];\nlet transactionStack: Transaction<any>[] = [];\n\ntype MutateCallbackResult = void | PromiseLike<void>;\n\ntype AsyncTransactionContext<T> = {\n getStore(): T | undefined;\n run<R>(store: T, callback: () => R): R;\n};\n\ntype NodeAsyncHooksModule<T> = {\n AsyncLocalStorage?: new () => AsyncTransactionContext<T>;\n};\n\nfunction createAsyncTransactionContext<T>(): AsyncTransactionContext<T> | null {\n try {\n const getBuiltinModule = (globalThis as {\n process?: { getBuiltinModule?: (id: string) => unknown };\n }).process?.getBuiltinModule;\n const asyncHooks = getBuiltinModule?.('node:async_hooks') as\n | NodeAsyncHooksModule<T>\n | undefined;\n if (!asyncHooks?.AsyncLocalStorage) return null;\n return new asyncHooks.AsyncLocalStorage();\n } catch {\n return null;\n }\n}\n\nconst transactionContext = createAsyncTransactionContext<Transaction<any>>();\n\nfunction createDeferred<T>(): Deferred<T> {\n let settled = false;\n let resolveValue!: (value: T | PromiseLike<T>) => void;\n let rejectValue!: (reason?: unknown) => void;\n\n const promise = new Promise<T>((resolve, reject) => {\n resolveValue = (value) => {\n if (settled) return;\n settled = true;\n resolve(value);\n };\n rejectValue = (reason) => {\n if (settled) return;\n settled = true;\n reject(reason);\n };\n });\n\n return {\n promise,\n resolve: resolveValue,\n reject: rejectValue,\n get settled() {\n return settled;\n },\n };\n}\n\nfunction randomTransactionId(): string {\n return globalThis.crypto?.randomUUID?.() ?? `tx-${Date.now()}-${generatedId++}`;\n}\n\nfunction mergeSyncMetadata(\n existing: PendingMutation<any>,\n incoming: PendingMutation<any>,\n): Record<string, unknown> {\n return {\n ...(existing.syncMetadata ?? {}),\n ...(incoming.syncMetadata ?? {}),\n };\n}\n\nfunction mergePendingMutations<T extends object>(\n existing: PendingMutation<T>,\n incoming: PendingMutation<T>,\n): PendingMutation<T> | null {\n switch (`${existing.type}-${incoming.type}`) {\n case 'insert-update':\n return {\n ...existing,\n type: 'insert',\n original: {},\n modified: incoming.modified,\n changes: { ...existing.changes, ...incoming.changes },\n key: existing.key,\n globalKey: existing.globalKey,\n metadata: incoming.metadata ?? existing.metadata,\n syncMetadata: mergeSyncMetadata(existing, incoming),\n mutationId: incoming.mutationId,\n updatedAt: incoming.updatedAt,\n } as PendingMutation<T>;\n case 'insert-delete':\n return null;\n case 'update-delete':\n return incoming;\n case 'update-update':\n return {\n ...incoming,\n original: existing.original,\n changes: { ...existing.changes, ...incoming.changes },\n metadata: incoming.metadata ?? existing.metadata,\n syncMetadata: mergeSyncMetadata(existing, incoming),\n } as PendingMutation<T>;\n case 'delete-delete':\n case 'insert-insert':\n return incoming;\n default:\n throw new Error(`Unhandled mutation combination: ${existing.type}-${incoming.type}`);\n }\n}\n\nfunction removeFromPendingList(tx: Transaction<any>): void {\n const index = pendingTransactions.findIndex((pending) => pending.id === tx.id);\n if (index !== -1) pendingTransactions.splice(index, 1);\n}\n\nfunction registerTransaction(tx: Transaction<any>): void {\n transactionStack.push(tx);\n}\n\nfunction unregisterTransaction(tx: Transaction<any>): void {\n for (let index = transactionStack.length - 1; index >= 0; index -= 1) {\n if (transactionStack[index]?.id === tx.id) {\n transactionStack.splice(index, 1);\n return;\n }\n }\n}\n\nfunction runWithActiveTransaction<R>(tx: Transaction<any>, callback: () => R): R {\n registerTransaction(tx);\n const run = (): R => {\n try {\n return callback();\n } finally {\n unregisterTransaction(tx);\n }\n };\n if (transactionContext) return transactionContext.run(tx, run);\n return run();\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<void> {\n return (\n value !== null &&\n (typeof value === 'object' || typeof value === 'function') &&\n typeof (value as { then?: unknown }).then === 'function'\n );\n}\n\nfunction toError(error: unknown): Error {\n return error instanceof Error ? error : new Error(String(error));\n}\n\nfunction scheduleAutoCommit(tx: Transaction<any>): void {\n if (!tx.autoCommit) return;\n void tx.commit().catch(() => {\n // Commit errors are delivered through `isPersisted.promise`, matching TanStack DB.\n });\n}\n\nfunction rejectMutateCallback(tx: Transaction<any>, error: unknown): void {\n const originalError = toError(error);\n tx.error = { message: originalError.message, error: originalError };\n if (tx.state === 'pending' || tx.state === 'persisting') {\n tx.rollback();\n } else {\n tx.isPersisted.reject(originalError);\n }\n}\n\nexport function createTransaction<T extends object = Record<string, unknown>>(\n config: TransactionConfig<T>,\n): Transaction<T> {\n const tx = new Transaction<T>(config);\n pendingTransactions.push(tx);\n return tx;\n}\n\nexport function getActiveTransaction(): Transaction | undefined {\n return transactionContext?.getStore() ?? transactionStack.at(-1);\n}\n\nexport class Transaction<T extends object = Record<string, unknown>> {\n readonly id: string;\n readonly mutationFn: MutationFn<T>;\n readonly mutations: Array<PendingMutation<T>> = [];\n readonly isPersisted: Deferred<Transaction<T>> = createDeferred<Transaction<T>>();\n readonly autoCommit: boolean;\n readonly createdAt: Date;\n readonly sequenceNumber: number;\n readonly metadata: Record<string, unknown>;\n private readonly rollbackHandlers: Array<() => void> = [];\n state: TransactionState = 'pending';\n error?: { message: string; error: Error };\n\n constructor(config: TransactionConfig<T>) {\n if (typeof config?.mutationFn !== 'function') {\n throw new Error('createTransaction requires a mutationFn');\n }\n\n this.id = config.id ?? randomTransactionId();\n this.mutationFn = config.mutationFn;\n this.autoCommit = config.autoCommit ?? true;\n this.createdAt = new Date();\n this.sequenceNumber = sequenceNumber++;\n this.metadata = config.metadata ?? {};\n }\n\n setState(newState: TransactionState): void {\n this.state = newState;\n if (newState === 'completed' || newState === 'failed') {\n removeFromPendingList(this);\n }\n }\n\n mutate(callback: () => MutateCallbackResult): Transaction<T> {\n if (this.state !== 'pending') {\n throw new Error('Transaction must be pending to mutate');\n }\n\n const result = runWithActiveTransaction(this, callback);\n\n if (isPromiseLike(result)) {\n void Promise.resolve(result).then(\n () => scheduleAutoCommit(this),\n (error) => rejectMutateCallback(this, error),\n );\n } else {\n scheduleAutoCommit(this);\n }\n\n return this;\n }\n\n addRollbackHandler(handler: () => void): void {\n this.rollbackHandlers.push(handler);\n }\n\n applyMutations(mutations: Array<PendingMutation<any>>): void {\n for (const incoming of mutations) {\n const existingIndex = this.mutations.findIndex(\n (mutation) => mutation.globalKey === incoming.globalKey,\n );\n if (existingIndex >= 0) {\n const merged = mergePendingMutations(this.mutations[existingIndex]!, incoming);\n if (merged === null) this.mutations.splice(existingIndex, 1);\n else this.mutations[existingIndex] = merged;\n } else {\n this.mutations.push(incoming);\n }\n }\n }\n\n rollback(config?: { isSecondaryRollback?: boolean }): Transaction<T> {\n if (this.state === 'completed') {\n throw new Error('Cannot rollback a completed transaction');\n }\n\n const isSecondaryRollback = config?.isSecondaryRollback ?? false;\n this.setState('failed');\n\n const handlers = this.rollbackHandlers.splice(0).reverse();\n for (const handler of handlers) {\n handler();\n }\n\n if (!isSecondaryRollback) {\n const affectedKeys = new Set(this.mutations.map((mutation) => mutation.globalKey));\n for (const tx of [...pendingTransactions]) {\n if (tx.id === this.id || tx.state !== 'pending') continue;\n if (tx.mutations.some((mutation) => affectedKeys.has(mutation.globalKey))) {\n tx.rollback({ isSecondaryRollback: true });\n }\n }\n }\n\n this.isPersisted.reject(this.error?.error ?? new Error('Transaction rolled back'));\n this.touchCollection();\n return this;\n }\n\n touchCollection(): void {\n const touched = new Set<string>();\n for (const mutation of this.mutations) {\n const collection = mutation.collection;\n if (touched.has(collection.id)) continue;\n collection._state?.onTransactionStateChange?.();\n if ((collection._state?.pendingSyncedTransactions?.length ?? 0) > 0) {\n collection._state?.commitPendingTransactions?.();\n }\n touched.add(collection.id);\n }\n }\n\n async commit(): Promise<Transaction<T>> {\n if (this.state !== 'pending') {\n throw new Error('Transaction must be pending to commit');\n }\n\n this.setState('persisting');\n\n if (this.mutations.length === 0) {\n this.setState('completed');\n this.isPersisted.resolve(this);\n return this;\n }\n\n try {\n await this.mutationFn({\n transaction: this as unknown as TransactionWithMutations<T>,\n });\n this.rollbackHandlers.length = 0;\n this.setState('completed');\n this.touchCollection();\n this.isPersisted.resolve(this);\n } catch (error) {\n const originalError = error instanceof Error ? error : new Error(String(error));\n this.error = { message: originalError.message, error: originalError };\n this.rollback();\n throw originalError;\n }\n\n return this;\n }\n\n compareCreatedAt(other: Transaction<any>): number {\n const timeDiff = this.createdAt.getTime() - other.createdAt.getTime();\n if (timeDiff !== 0) return timeDiff;\n return this.sequenceNumber - other.sequenceNumber;\n }\n}\n","import { OutOfSpaceError, ValidationError } from '../errors.js';\n\n/** Decode UTF-8 bytes directly, copying shared views only on runtimes that reject them. */\nexport function decodeUtf8Bytes(\n bytes: Uint8Array,\n decoder: TextDecoder = new TextDecoder('utf-8', { fatal: false }),\n): string {\n if (bytes.byteLength === 0) return '';\n try {\n return decoder.decode(bytes);\n } catch (error) {\n if (typeof SharedArrayBuffer !== 'undefined' && bytes.buffer instanceof SharedArrayBuffer) {\n return decoder.decode(Uint8Array.from(bytes));\n }\n throw error;\n }\n}\n\n/**\n * Per-column append-only byte heap used by Utf8 columns. Strings are written\n * contiguously; each row owns a `[start, end)` byte range stored externally\n * in the column's offsets buffer. Updates always append fresh bytes at the\n * tail — old bytes are leaked until a future compaction pass.\n *\n * The heap is a Uint8Array view onto the segment; we own only the bump\n * cursor and encoder/decoder.\n */\nexport class ValuesHeap {\n private cursor = 0;\n private readonly bytes: Uint8Array;\n private readonly encoder = new TextEncoder();\n private readonly decoder = new TextDecoder('utf-8', { fatal: false });\n\n constructor(bytes: Uint8Array) {\n this.bytes = bytes;\n }\n\n /** Current bump position (= first free byte). */\n get used(): number {\n return this.cursor;\n }\n\n /** Total capacity in bytes. */\n get capacity(): number {\n return this.bytes.byteLength;\n }\n\n /** Read-only view of the underlying byte buffer. Used by snapshot export. */\n get rawBytes(): Uint8Array {\n return this.bytes;\n }\n\n /** Append raw bytes; returns their `[start, end)` range. */\n appendBytes(src: Uint8Array): { start: number; end: number } {\n if (src.length === 0) return { start: this.cursor, end: this.cursor };\n if (this.cursor + src.length > this.bytes.byteLength) {\n throw new OutOfSpaceError(\n `values heap full: need ${src.length}, free ${\n this.bytes.byteLength - this.cursor\n }`,\n );\n }\n this.bytes.set(src, this.cursor);\n const start = this.cursor;\n this.cursor += src.length;\n return { start, end: this.cursor };\n }\n\n /**\n * Encode `value` as UTF-8 and append to the heap. Returns the byte range\n * `[start, end)` where the encoded bytes live.\n */\n append(value: string): { start: number; end: number } {\n if (value.length === 0) return { start: this.cursor, end: this.cursor };\n const scratch = this.encoder.encode(value);\n return this.appendBytes(scratch);\n }\n\n /** Decode a `[start, end)` byte range back to a string. */\n read(start: number, end: number): string {\n if (start < 0 || end < start || end > this.bytes.byteLength) {\n throw new ValidationError(\n `values heap read out of range: [${start}, ${end}) cap=${this.bytes.byteLength}`,\n );\n }\n return decodeUtf8Bytes(this.bytes.subarray(start, end), this.decoder);\n }\n\n /** Read a `[start, end)` range as a copy of raw bytes. */\n readBytes(start: number, end: number): Uint8Array {\n if (start < 0 || end < start || end > this.bytes.byteLength) {\n throw new ValidationError(\n `values heap read out of range: [${start}, ${end}) cap=${this.bytes.byteLength}`,\n );\n }\n return this.bytes.slice(start, end);\n }\n\n /**\n * Copy bytes `[start, end)` from this heap directly into `dest` starting\n * at `destOffset`. No allocation. Used by compaction to shuffle live\n * ranges without a per-row Uint8Array allocation.\n */\n copyInto(start: number, end: number, dest: Uint8Array, destOffset: number): void {\n if (start < 0 || end < start || end > this.bytes.byteLength) {\n throw new ValidationError(\n `values heap copyInto out of range: [${start}, ${end}) cap=${this.bytes.byteLength}`,\n );\n }\n if (end === start) return;\n dest.set(this.bytes.subarray(start, end), destOffset);\n }\n\n /**\n * Reset the cursor to zero. The caller must have already copied any live\n * ranges elsewhere. Used by `Collection.compact()`.\n */\n resetEmpty(): void {\n this.cursor = 0;\n // We do NOT zero the existing bytes; subsequent writes overwrite as\n // needed. Readers only use live ranges via the offsets buffer.\n }\n\n /**\n * Overwrite the heap with `src[0..length)` starting at byte 0 and set\n * the cursor to `length`. Caller guarantees `length <= capacity`. Used\n * by `Collection.compact()` to swap a rebuilt heap back in place.\n */\n rewrite(src: Uint8Array, length: number): void {\n if (length < 0 || length > this.bytes.byteLength) {\n throw new ValidationError(\n `rewrite length ${length} out of range for capacity ${this.bytes.byteLength}`,\n );\n }\n if (length > 0) this.bytes.set(src.subarray(0, length), 0);\n this.cursor = length;\n }\n}\n\n/**\n * Side table for a dictionary-encoded Utf8 column. Code 0 is the first\n * interned string — nulls are signalled via the column's validity bitmap,\n * not via a reserved code.\n *\n * Dictionary is append-only in Phase 3. A later phase may add reference\n * counts and compaction.\n */\nexport class Dictionary {\n private codeByString = new Map<string, number>();\n private stringByCode: string[] = [];\n\n /** Number of distinct strings currently interned. */\n get size(): number {\n return this.stringByCode.length;\n }\n\n /** Return the code for `s`, interning it if absent. */\n intern(s: string): number {\n const existing = this.codeByString.get(s);\n if (existing !== undefined) return existing;\n const code = this.stringByCode.length;\n this.stringByCode.push(s);\n this.codeByString.set(s, code);\n return code;\n }\n\n /** Return the code for `s`, or undefined if not interned. */\n lookup(s: string): number | undefined {\n return this.codeByString.get(s);\n }\n\n /** Decode a code back to its string. Throws on unknown codes. */\n decode(code: number): string {\n const s = this.stringByCode[code];\n if (s === undefined) {\n throw new ValidationError(`unknown dictionary code ${code}`);\n }\n return s;\n }\n\n /** Iterate all (code, string) pairs in insertion order. */\n *entries(): IterableIterator<[number, string]> {\n for (let i = 0; i < this.stringByCode.length; i++) {\n yield [i, this.stringByCode[i]!];\n }\n }\n}\n","/**\n * Child-buffer state for list<T> columns.\n *\n * Unlike fixed-width and varlen columns, list children are unbounded at\n * schema-compile time — any row can append arbitrarily many elements.\n * Rather than reserve a huge slab in the SAB segment up front, the child\n * lives in JS heap typed arrays that grow by doubling. This sacrifices\n * zero-copy cross-worker sharing for list columns (noted in the PRD as\n * a Phase 8 tradeoff), but keeps top-level collection allocation\n * predictable.\n *\n * The parent list column keeps `Int32Array(capacity * 2)` ranged-offset\n * pairs `[childStart, childEnd)` referring to contiguous slices of\n * `ListChildState.values`. Updates append new child elements and\n * repoint the parent range — the old child elements leak until\n * `Collection.compact()` rebuilds the child heap.\n */\n\nimport { ColumnTypeCode, isVariableWidth } from '../schema/types.js';\nimport type { CompiledColumn } from '../schema/schema.js';\nimport { Dictionary, ValuesHeap } from './varlen.js';\n\nexport type ListChildTyped =\n | Int8Array\n | Int16Array\n | Int32Array\n | Uint8Array\n | Uint16Array\n | Uint32Array\n | Float32Array\n | Float64Array\n | BigInt64Array\n | BigUint64Array;\n\n/**\n * Mutable child buffer for a list column. `values` is resized (doubled)\n * on demand; callers must re-read `values` after any `ensureCapacity`\n * call — the typed array reference may change.\n *\n * For `list<utf8>` and `list<binary>`, each child element stores a\n * ranged-offset pair `[start, end)` into a shared `ValuesHeap` at\n * `heap.rawBytes`. The `values` typed array in that case is\n * `Int32Array(childCapacity * 2)`.\n */\nexport class ListChildState {\n /** Compiled child element column (shape of each element). */\n readonly child: CompiledColumn;\n values: ListChildTyped;\n validity: Uint8Array | null;\n /** Number of child elements written so far (== offsets cursor). */\n cursor: number;\n /** Current allocated length of `values` (in element slots, not bytes). */\n capacity: number;\n heap: ValuesHeap | null;\n dictionary: Dictionary | null;\n /** Per-column version for the child — bumped on every write into it. */\n version: number;\n\n constructor(child: CompiledColumn, initialCapacity: number) {\n this.child = child;\n const cap = Math.max(16, initialCapacity);\n this.capacity = cap;\n this.values = allocateTyped(child.typeCode, cap);\n this.validity = child.nullable ? new Uint8Array((cap + 7) >>> 3) : null;\n this.cursor = 0;\n this.version = 0;\n if (isVariableWidth(child.typeCode)) {\n const heapBytes = child.valuesHeapBytes ?? 1024;\n this.heap = new ValuesHeap(new Uint8Array(heapBytes));\n this.dictionary = null;\n } else if (child.typeCode === ColumnTypeCode.DictUtf8) {\n this.heap = null;\n this.dictionary = new Dictionary();\n } else {\n this.heap = null;\n this.dictionary = null;\n }\n }\n\n /**\n * Ensure at least `extra` more element slots are available. Grows by\n * doubling (plus any extra needed to satisfy large appends).\n */\n ensureCapacity(extra: number): void {\n const needed = this.cursor + extra;\n if (needed <= this.capacity) return;\n let cap = this.capacity;\n while (cap < needed) cap *= 2;\n // For utf8/binary child, the `values` array is i32 pairs — the\n // element slot count is `values.length / 2`, so `cap` here is in\n // logical *elements*, not underlying typed-array length.\n const newValues = allocateTyped(this.child.typeCode, cap);\n copyTyped(this.values, newValues, this.elementsToTypedLength(this.cursor));\n this.values = newValues;\n if (this.validity) {\n const newBitmap = new Uint8Array((cap + 7) >>> 3);\n newBitmap.set(this.validity);\n this.validity = newBitmap;\n }\n this.capacity = cap;\n }\n\n /** Convert element count to typed-array slot count (×2 for range pairs). */\n private elementsToTypedLength(elements: number): number {\n const c = this.child.typeCode;\n if (c === ColumnTypeCode.Utf8 || c === ColumnTypeCode.Binary) return elements * 2;\n return elements;\n }\n}\n\nfunction allocateTyped(code: ColumnTypeCode, elements: number): ListChildTyped {\n switch (code) {\n case ColumnTypeCode.Bool:\n case ColumnTypeCode.UInt8:\n return new Uint8Array(elements);\n case ColumnTypeCode.Int8:\n return new Int8Array(elements);\n case ColumnTypeCode.Int16:\n return new Int16Array(elements);\n case ColumnTypeCode.UInt16:\n return new Uint16Array(elements);\n case ColumnTypeCode.Int32:\n return new Int32Array(elements);\n case ColumnTypeCode.UInt32:\n case ColumnTypeCode.DictUtf8:\n return new Uint32Array(elements);\n case ColumnTypeCode.Float32:\n return new Float32Array(elements);\n case ColumnTypeCode.Float64:\n return new Float64Array(elements);\n case ColumnTypeCode.Int64:\n return new BigInt64Array(elements);\n case ColumnTypeCode.UInt64:\n return new BigUint64Array(elements);\n case ColumnTypeCode.Utf8:\n case ColumnTypeCode.Binary:\n // i32 ranged-offset pairs per element.\n return new Int32Array(elements * 2);\n case ColumnTypeCode.List:\n case ColumnTypeCode.Struct:\n case ColumnTypeCode.Point:\n case ColumnTypeCode.LineString:\n case ColumnTypeCode.Polygon:\n throw new Error(\n `list children of type ${code} (list/struct/geo) are rejected at schema-compile time`,\n );\n }\n}\n\nfunction copyTyped(\n from: ListChildTyped,\n to: ListChildTyped,\n length: number,\n): void {\n // Both have identical element types; both extend from TypedArray so\n // the `.set` method is present.\n (to as unknown as { set: (arr: ListChildTyped) => void }).set(\n from.subarray(0, length) as ListChildTyped,\n );\n}\n","import type { IndexConstructor } from '../indexes/base-index.js';\nimport type {\n DeleteMutationFn,\n InsertMutationFn,\n SyncConfig,\n UpdateMutationFn,\n} from '../tanstack-types.js';\nimport type { Collection, RowValue } from './collection.js';\n\n/**\n * Layer-E metadata attached to Collections created through createCollection().\n * Kept separate from createCollection.ts so collection mutation wiring can read\n * handlers without creating a circular import.\n */\nexport interface CollectionMetadata {\n sync?: SyncConfig;\n onInsert?: InsertMutationFn;\n onUpdate?: UpdateMutationFn;\n onDelete?: DeleteMutationFn;\n getKey?: (item: RowValue) => number | string;\n gcTime?: number;\n startSync?: boolean;\n syncMode?: 'eager' | 'on-demand';\n autoIndex?: 'off' | 'eager';\n defaultIndexType?: IndexConstructor;\n}\n\nconst metadataByCollection = new WeakMap<Collection, CollectionMetadata>();\n\nexport function setCollectionMetadata(\n collection: Collection,\n metadata: CollectionMetadata,\n): void {\n metadataByCollection.set(collection, metadata);\n}\n\nexport function getCollectionMetadata(\n collection: Collection,\n): Readonly<CollectionMetadata> | undefined {\n return metadataByCollection.get(collection);\n}\n","import { ValidationError } from '../errors.js';\nimport { assertValidPoint, type Point } from './point-column.js';\n\nexport type LineString = readonly Point[];\n\nfunction describeLineString(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map((item) => Array.isArray(item) ? `[${item.map(String).join(', ')}]` : String(item)).join(', ')}]`;\n return String(value);\n}\n\nexport function assertValidLineString(\n value: unknown,\n label = 'linestring',\n): asserts value is LineString {\n if (!Array.isArray(value)) {\n throw new ValidationError(`${label} must be an array of points, got ${describeLineString(value)}`);\n }\n if (value.length < 2) {\n throw new ValidationError(`${label} must contain at least two points`);\n }\n for (let i = 0; i < value.length; i++) {\n assertValidPoint(value[i], `${label}[${i}]`);\n }\n}\n\nexport class LineStringColumn {\n readonly ranges: Int32Array;\n coords: Float64Array;\n readonly bboxCache: Float64Array;\n cursor = 0;\n private vertexCapacity: number;\n\n constructor(\n capacity: number,\n ranges: Int32Array = new Int32Array(capacity * 2),\n initialVertexCapacity = Math.max(16, capacity * 4),\n bboxCache: Float64Array = new Float64Array(capacity * 4),\n ) {\n if (!Number.isInteger(capacity) || capacity < 0) {\n throw new RangeError('capacity must be a non-negative integer');\n }\n if (ranges.length < capacity * 2) {\n throw new RangeError('ranges buffer is too small for linestring capacity');\n }\n if (!Number.isInteger(initialVertexCapacity) || initialVertexCapacity < 0) {\n throw new RangeError('initialVertexCapacity must be a non-negative integer');\n }\n if (bboxCache.length < capacity * 4) {\n throw new RangeError('bboxCache buffer is too small for linestring capacity');\n }\n this.ranges = ranges;\n this.vertexCapacity = Math.max(1, initialVertexCapacity);\n this.coords = new Float64Array(this.vertexCapacity * 2);\n this.bboxCache = bboxCache;\n for (let row = 0; row < capacity; row++) this.setNull(row);\n }\n\n set(row: number, value: LineString): void {\n assertValidLineString(value);\n this.ensureVertexCapacity(value.length);\n const start = this.cursor;\n for (let i = 0; i < value.length; i++) {\n const point = value[i]!;\n const offset = (start + i) * 2;\n this.coords[offset] = point[0];\n this.coords[offset + 1] = point[1];\n }\n this.cursor += value.length;\n this.ranges[row * 2] = start;\n this.ranges[row * 2 + 1] = this.cursor;\n this.updateBbox(row, value);\n }\n\n get(row: number): LineString {\n const start = this.ranges[row * 2] ?? 0;\n const end = this.ranges[row * 2 + 1] ?? 0;\n const out: Point[] = [];\n for (let vertex = start; vertex < end; vertex++) {\n const offset = vertex * 2;\n out.push([\n this.coords[offset] ?? Number.NaN,\n this.coords[offset + 1] ?? Number.NaN,\n ]);\n }\n return out;\n }\n\n setNull(row: number): void {\n this.ranges[row * 2] = 0;\n this.ranges[row * 2 + 1] = 0;\n const bboxOffset = row * 4;\n this.bboxCache[bboxOffset] = Number.NaN;\n this.bboxCache[bboxOffset + 1] = Number.NaN;\n this.bboxCache[bboxOffset + 2] = Number.NaN;\n this.bboxCache[bboxOffset + 3] = Number.NaN;\n }\n\n copy(fromRow: number, toRow: number): void {\n const bboxOffset = fromRow * 4;\n if (!Number.isFinite(this.bboxCache[bboxOffset])) {\n this.setNull(toRow);\n return;\n }\n this.set(toRow, this.get(fromRow));\n }\n\n private ensureVertexCapacity(extraVertices: number): void {\n const needed = this.cursor + extraVertices;\n if (needed <= this.vertexCapacity) return;\n let nextCapacity = this.vertexCapacity;\n while (nextCapacity < needed) nextCapacity *= 2;\n const next = new Float64Array(nextCapacity * 2);\n next.set(this.coords.subarray(0, this.cursor * 2));\n this.coords = next;\n this.vertexCapacity = nextCapacity;\n }\n\n private updateBbox(row: number, value: LineString): void {\n let minX = Number.POSITIVE_INFINITY;\n let minY = Number.POSITIVE_INFINITY;\n let maxX = Number.NEGATIVE_INFINITY;\n let maxY = Number.NEGATIVE_INFINITY;\n for (const [lng, lat] of value) {\n minX = Math.min(minX, lng);\n minY = Math.min(minY, lat);\n maxX = Math.max(maxX, lng);\n maxY = Math.max(maxY, lat);\n }\n const bboxOffset = row * 4;\n this.bboxCache[bboxOffset] = minX;\n this.bboxCache[bboxOffset + 1] = minY;\n this.bboxCache[bboxOffset + 2] = maxX;\n this.bboxCache[bboxOffset + 3] = maxY;\n }\n}\n","import Flatbush from 'flatbush';\nimport { assertValidBbox, bboxIntersectsRaw, type BBox } from './bbox.js';\n\nexport interface BuildSpatialIndexOptions {\n readonly bboxCacheVersion?: number;\n readonly indexVersion?: number;\n readonly nodeSize?: number;\n}\n\nexport interface SpatialIndexState {\n readonly base: Flatbush | null;\n readonly baseRowIds: Uint32Array;\n readonly baseCacheRows: Uint32Array;\n /** Immutable mini-indexes built from inserts/updates since the base build. */\n readonly segments: SpatialIndexSegment[];\n readonly dirtyRows: Set<number>;\n readonly deletedRows: Set<number>;\n readonly bboxCacheVersion: number;\n readonly indexVersion: number;\n}\n\nexport interface SpatialIndexSegment {\n readonly index: Flatbush | null;\n readonly rowIds: Uint32Array;\n readonly cacheRows: Uint32Array;\n}\n\nexport function buildSpatialIndex(\n rowIds: Uint32Array | ReadonlyArray<number>,\n bboxCache: Float64Array,\n options: BuildSpatialIndexOptions = {},\n): SpatialIndexState {\n const candidateRowIds = rowIds instanceof Uint32Array\n ? new Uint32Array(rowIds)\n : Uint32Array.from(rowIds);\n const candidateCacheRows = inferBaseCacheRows(candidateRowIds, bboxCache);\n const validRowIds: number[] = [];\n const validCacheRows: number[] = [];\n const validBboxes: BBox[] = [];\n for (let i = 0; i < candidateRowIds.length; i++) {\n const bbox = readBboxOrNull(bboxCache, candidateCacheRows[i]!);\n if (bbox === null) continue;\n validRowIds.push(candidateRowIds[i]!);\n validCacheRows.push(candidateCacheRows[i]!);\n validBboxes.push(bbox);\n }\n const baseRowIds = Uint32Array.from(validRowIds);\n const baseCacheRows = Uint32Array.from(validCacheRows);\n\n const base = baseRowIds.length === 0\n ? null\n : new Flatbush(baseRowIds.length, options.nodeSize);\n if (base !== null) {\n for (const bbox of validBboxes) {\n base.add(bbox[0], bbox[1], bbox[2], bbox[3]);\n }\n base.finish();\n }\n\n return {\n base,\n baseRowIds,\n baseCacheRows,\n segments: [],\n dirtyRows: new Set<number>(),\n deletedRows: new Set<number>(),\n bboxCacheVersion: options.bboxCacheVersion ?? 0,\n indexVersion: options.indexVersion ?? 1,\n };\n}\n\nexport function searchSpatialIndex(\n state: SpatialIndexState,\n bboxCache: Float64Array,\n query: BBox,\n): Uint32Array {\n assertValidBbox(query, 'query');\n\n const matches = new Set<number>();\n if (state.base !== null) {\n const baseHits = state.base.search(query[0], query[1], query[2], query[3]);\n for (const index of baseHits) {\n const rowId = state.baseRowIds[index]!;\n if (state.deletedRows.has(rowId) || state.dirtyRows.has(rowId)) continue;\n const bbox = readBboxOrNull(bboxCache, state.baseCacheRows[index]!);\n if (bbox !== null && bboxIntersectsRaw(bbox, query)) {\n matches.add(rowId);\n }\n }\n }\n\n for (const segment of state.segments) {\n if (segment.index === null) continue;\n const hits = segment.index.search(query[0], query[1], query[2], query[3]);\n for (const index of hits) {\n const rowId = segment.rowIds[index]!;\n if (state.deletedRows.has(rowId) || state.dirtyRows.has(rowId)) continue;\n const bbox = readBboxOrNull(bboxCache, segment.cacheRows[index]!);\n if (bbox !== null && bboxIntersectsRaw(bbox, query)) matches.add(rowId);\n }\n }\n\n const dirtyRows = Array.from(state.dirtyRows).sort((a, b) => a - b);\n for (const rowId of dirtyRows) {\n if (state.deletedRows.has(rowId)) continue;\n const bbox = readBboxOrNull(bboxCache, rowId);\n if (bbox !== null && bboxIntersectsRaw(bbox, query)) {\n matches.add(rowId);\n }\n }\n\n return Uint32Array.from(Array.from(matches).sort((a, b) => a - b));\n}\n\n/**\n * Freeze the mutable dirty overlay into a small Flatbush segment. Stale\n * entries in older segments remain safe because every hit is exact-checked\n * against the current bbox cache. This makes large insert bursts logarithmic\n * at query time without rebuilding the full immutable base on every write.\n */\nexport function flushSpatialIndexDirty(\n state: SpatialIndexState,\n bboxCache: Float64Array,\n): number {\n if (state.dirtyRows.size === 0) return 0;\n const rowIds = Array.from(state.dirtyRows)\n .filter((rowId) => !state.deletedRows.has(rowId))\n .sort((a, b) => a - b);\n state.dirtyRows.clear();\n if (rowIds.length === 0) return 0;\n\n const cacheRows = inferBaseCacheRows(Uint32Array.from(rowIds), bboxCache);\n const validRowIds: number[] = [];\n const validCacheRows: number[] = [];\n const bboxes: BBox[] = [];\n for (let i = 0; i < rowIds.length; i++) {\n const bbox = readBboxOrNull(bboxCache, cacheRows[i]!);\n if (bbox === null) continue;\n validRowIds.push(rowIds[i]!);\n validCacheRows.push(cacheRows[i]!);\n bboxes.push(bbox);\n }\n if (validRowIds.length === 0) return 0;\n\n const index = new Flatbush(validRowIds.length);\n for (const bbox of bboxes) index.add(bbox[0], bbox[1], bbox[2], bbox[3]);\n index.finish();\n state.segments.push({\n index,\n rowIds: Uint32Array.from(validRowIds),\n cacheRows: Uint32Array.from(validCacheRows),\n });\n return validRowIds.length;\n}\n\nfunction inferBaseCacheRows(rowIds: Uint32Array, bboxCache: Float64Array): Uint32Array {\n if (rowIds.length === 0) return new Uint32Array();\n let maxRowId = 0;\n for (const rowId of rowIds) if (rowId > maxRowId) maxRowId = rowId;\n if (bboxCache.length >= (maxRowId + 1) * 4) {\n return new Uint32Array(rowIds);\n }\n if (bboxCache.length === rowIds.length * 4) {\n return Uint32Array.from(rowIds, (_rowId, index) => index);\n }\n throw new RangeError('bbox cache length must cover indexed row ids or be four values per indexed row');\n}\n\nfunction assertReadableCacheRow(cache: Float64Array, rowId: number): void {\n if (!Number.isInteger(rowId) || rowId < 0 || (rowId + 1) * 4 > cache.length) {\n throw new RangeError('bbox cache missing indexed row');\n }\n}\n\nfunction readBboxOrNull(cache: Float64Array, index: number): BBox | null {\n assertReadableCacheRow(cache, index);\n const offset = index * 4;\n const bbox: BBox = [\n cache[offset]!,\n cache[offset + 1]!,\n cache[offset + 2]!,\n cache[offset + 3]!,\n ];\n try {\n assertValidBbox(bbox, `bboxCache[${index}]`);\n return bbox;\n } catch {\n return null;\n }\n}\n","import {\n NotFoundError,\n OutOfSpaceError,\n ValidationError,\n} from '../errors.js';\nimport type { CompiledColumn, CompiledSchema } from '../schema/schema.js';\nimport {\n ColumnTypeCode,\n type ColumnTypeName,\n isDictionary,\n isVariableWidth,\n} from '../schema/types.js';\nimport { Segment, createSegment } from '../sab/segment.js';\nimport { ARROW_ALIGN, alignUp } from '../sab/atomics.js';\nimport { BasicIndex } from '../indexes/basic-index.js';\nimport { ensureIndexForExpression } from '../indexes/auto-index.js';\nimport type { IndexConstructor, IndexInterface } from '../indexes/base-index.js';\nimport type { IndexOptions } from '../indexes/index-options.js';\nimport type { BasicExpression } from '../query/ir.js';\nimport {\n createSingleRowRefProxy,\n toExpression,\n type SingleRowRefProxy,\n} from '../query/ref-proxy.js';\nimport { RowIndex } from './rowIndex.js';\nimport { UndoRing, type UndoOp, type UndoRecord } from './undoRing.js';\nimport {\n ChangeEmitter,\n type ChangeEvent,\n type ChangeListener,\n} from './events.js';\nimport { TypedEventEmitter } from './typedEmitter.js';\nimport type {\n ChangeMessage,\n CollectionSubscription,\n CurrentStateAsChangesOptions,\n InsertConfig,\n OperationConfig,\n PendingMutation,\n StringCollationConfig,\n SubscribeChangesOptions,\n UtilsRecord,\n} from '../tanstack-types.js';\nimport {\n createTransaction,\n getActiveTransaction,\n type Transaction,\n} from '../transactions.js';\nimport { Dictionary, ValuesHeap } from './varlen.js';\nimport { ListChildState } from './listChild.js';\nimport { getCollectionMetadata } from './metadata.js';\nimport { assertValidBbox, type BBox } from '../geo/bbox.js';\nimport { haversineDistanceMetersXY } from '../geo/distance.js';\nimport { LineStringColumn, type LineString } from '../geo/linestring-column.js';\nimport { PointColumn, type Point } from '../geo/point-column.js';\nimport { PolygonColumn, type Polygon } from '../geo/polygon-column.js';\nimport {\n buildSpatialIndex,\n flushSpatialIndexDirty,\n searchSpatialIndex,\n type SpatialIndexState,\n} from '../geo/rtree.js';\n\nlet collectionMutationIdCounter = 0;\n\nfunction randomCollectionMutationId(): string {\n return (\n globalThis.crypto?.randomUUID?.() ??\n `mutation-${Date.now()}-${collectionMutationIdCounter++}`\n );\n}\n\n/** Row value for a schema with primitive + utf8 + binary + list + struct + geo columns. */\nexport type RowValue = Record<\n string,\n | number\n | bigint\n | boolean\n | string\n | Uint8Array\n | readonly unknown[]\n | Record<string, unknown>\n | Point\n | LineString\n | Polygon\n | null\n>;\n\n/**\n * Collection lifecycle status. Mirrors `@tanstack/db`'s\n * `CollectionStatus` union bit-for-bit:\n *\n * - `idle` — created but sync not started (used only with\n * `startSync: false` sync configs).\n * - `loading` — sync has started and is loading.\n * - `ready` — collection is usable; data available.\n * - `error` — sync initialization failed.\n * - `cleaned-up` — resources released; no further use.\n *\n * In-memory collections (our current default) start in `'ready'` and\n * only transition to `'cleaned-up'` via `cleanup()`.\n */\nexport type CollectionStatus =\n | 'idle'\n | 'loading'\n | 'ready'\n | 'error'\n | 'cleaned-up';\n\n/**\n * Payload for the `status:change` event. Matches @tanstack/db's\n * `CollectionStatusChangeEvent`.\n */\nexport interface CollectionStatusChangeEvent {\n type: 'status:change';\n collection: Collection;\n previousStatus: CollectionStatus;\n status: CollectionStatus;\n}\n\n/**\n * Payload for `subscribers:change`. Fires whenever the number of\n * `subscribeChanges` subscribers grows or shrinks.\n */\nexport interface CollectionSubscribersChangeEvent {\n type: 'subscribers:change';\n collection: Collection;\n previousSubscriberCount: number;\n subscriberCount: number;\n}\n\n/**\n * Payload for `truncate`. Fires when the backing sync source has\n * instructed us to drop all rows (e.g. after a must-refetch\n * signal). Currently unused at the collection layer but exposed\n * for parity; Layer E wires it up.\n */\nexport interface CollectionTruncateEvent {\n type: 'truncate';\n collection: Collection;\n}\n\n/**\n * All events a Collection can emit. Matches @tanstack/db's\n * `AllCollectionEvents` in shape (minus index-add/remove, which\n * land in Layer D, and loadingSubset, which is subset-load-only).\n */\nexport type CollectionEvents = {\n 'status:change': CollectionStatusChangeEvent;\n 'subscribers:change': CollectionSubscribersChangeEvent;\n truncate: CollectionTruncateEvent;\n 'status:idle': CollectionStatusChangeEvent;\n 'status:loading': CollectionStatusChangeEvent;\n 'status:ready': CollectionStatusChangeEvent;\n 'status:error': CollectionStatusChangeEvent;\n 'status:cleaned-up': CollectionStatusChangeEvent;\n};\n\nexport type IndexExpressionCallback = (\n row: SingleRowRefProxy<Record<string, unknown>>,\n) => unknown;\n\nexport type CollectionIndexOptions = IndexOptions<IndexConstructor<number>>;\n\nexport type AutoIndexMode = 'off' | 'eager';\n\nexport interface SpatialIndexOptions {\n readonly column: string;\n readonly type: 'rtree';\n readonly eager?: boolean;\n}\n\nexport type SpatialIndexConfig = SpatialIndexOptions | readonly SpatialIndexOptions[];\n\nexport interface CollectionRuntimeConfig {\n autoIndex: AutoIndexMode;\n defaultIndexType?: IndexConstructor<number>;\n spatialIndex?: SpatialIndexConfig;\n}\n\nexport interface CollectionOptions {\n /** Maximum number of rows the collection can hold. Required in Phase 1. */\n capacity: number;\n /** Undo ring capacity in entries. Default 4096. */\n undoCapacity?: number;\n /**\n * When true, `delete(id)` sets a `__deleted` flag and keeps the row slot.\n * The column must be declared in the schema as `{ type: 'bool' }`.\n * Defaults to true if `__deleted` column exists, else false.\n */\n softDelete?: boolean;\n /**\n * Optional stable identifier for the collection. Mirrors\n * `@tanstack/db`'s `CollectionConfig.id`. Defaults to\n * `${schema.name}:${monotonicCounter}`. Used for debugging,\n * devtools, and as a key in broadcast/sync adapters.\n */\n id?: string;\n /**\n * Utility functions attached to this collection. Exposed via the\n * `utils` getter. Callers can use these to plumb collection-specific\n * helpers (e.g. `refetch`, `setState`) without subclassing. Matches\n * `@tanstack/db`'s `CollectionConfig.utils`.\n */\n utils?: UtilsRecord;\n /**\n * String collation config — influences `orderBy` over string\n * columns. Currently stored and echoed through `compareOptions`; the\n * query layer picks it up in Layer C. Matches `@tanstack/db`'s\n * `CollectionConfig.compareOptions`.\n */\n compareOptions?: StringCollationConfig;\n /** Auto-index strategy. `eager` creates indexes for simple subscribed where expressions. */\n autoIndex?: AutoIndexMode;\n /** Default index implementation used by auto-index and option-less createIndex. */\n defaultIndexType?: IndexConstructor<number>;\n /** Optional R-tree index config for point/linestring/polygon envelopes. */\n spatialIndex?: SpatialIndexConfig;\n}\n\ninterface ColumnBuffer {\n readonly column: CompiledColumn;\n /**\n * Fixed-width columns: typed array of length `capacity` holding the\n * actual values. Utf8/Binary columns: `Int32Array` of length\n * `capacity * 2` holding `[start, end)` byte ranges into `heap`.\n * DictUtf8 columns: `Uint32Array(capacity)` of dictionary codes.\n * List columns: `Int32Array(capacity * 2)` of range pairs into\n * `list.values`. LineString/Polygon columns: `Int32Array(capacity * 2)` of\n * range pairs into geo child storage. Struct columns: a zero-length\n * sentinel (the value storage lives on the per-field buffers in\n * `structFields`).\n */\n readonly values: TypedValueArray;\n /** Validity bitmap (1 byte per 8 rows), or null if column not nullable. */\n readonly validity: Uint8Array | null;\n /** Per-column version counter, bumped on every mutation touching it. */\n version: number;\n /** Present only on Utf8/Binary columns. */\n readonly heap: ValuesHeap | null;\n /** Present only on DictUtf8 columns. */\n readonly dictionary: Dictionary | null;\n /**\n * Present only on List columns. Holds the child-element typed-array\n * + child validity + (optional) child heap/dictionary. Allocated off\n * the SAB segment because the child size is unbounded at schema\n * compile time.\n */\n list: ListChildState | null;\n /** Present only on Point columns. Owns coordinate storage + bbox cache. */\n readonly point: PointColumn | null;\n /** Present only on LineString columns. Owns variable coordinates + bbox cache. */\n readonly lineString: LineStringColumn | null;\n /** Present only on Polygon columns. Owns variable rings/coordinates + bbox cache. */\n readonly polygon: PolygonColumn | null;\n /**\n * Present only on Struct columns. One per-field column buffer per\n * declared field. Field buffers share the parent's row cursor.\n */\n readonly structFields: ColumnBuffer[] | null;\n readonly structFieldsByName: ReadonlyMap<string, ColumnBuffer> | null;\n}\n\nexport type TypedValueArray =\n | Int8Array\n | Int16Array\n | Int32Array\n | Uint8Array\n | Uint16Array\n | Uint32Array\n | Float32Array\n | Float64Array\n | BigInt64Array\n | BigUint64Array;\n\n/**\n * Internal scan-view entry exposed via `_internalScanColumns()` for the\n * vectorized kernel. Not part of the public API surface — may change.\n */\nexport interface ScanColumn {\n readonly name: string;\n readonly typeCode: ColumnTypeCode;\n readonly nullable: boolean;\n readonly validity: Uint8Array | null;\n readonly values: TypedValueArray;\n readonly heap: ValuesHeap | null;\n readonly dictionary: Dictionary | null;\n}\n\n/**\n * Tree-shaped view emitted by `bulkColumnViewsTree()` for the snapshot\n * exporter. Internal surface — subject to change.\n */\nexport interface TreeView {\n readonly name: string;\n readonly type: ColumnTypeName;\n readonly typeCode: ColumnTypeCode;\n readonly nullable: boolean;\n readonly validity: Uint8Array | null;\n readonly primaryBuffer: Uint8Array;\n readonly heap: Uint8Array | null;\n readonly dictionaryEntries: readonly string[] | null;\n readonly listChildElements?: number;\n readonly listChild?: TreeView;\n readonly fields?: readonly TreeView[];\n}\n\n/**\n * Phase 1 Collection: fixed-capacity, fixed-width primitive columns, dense\n * `uint32` PK, single-writer. No cross-worker attach yet (Segment is created\n * locally); the SAB buffer is exposed via `getSegmentBuffer()` for future\n * worker handoff.\n */\nexport class Collection {\n readonly schema: CompiledSchema;\n readonly capacity: number;\n private readonly segment: Segment;\n private readonly columns: Map<string, ColumnBuffer>;\n private readonly columnList: ColumnBuffer[];\n private readonly rowIndex = new RowIndex();\n private readonly undo: UndoRing;\n private readonly pkColumn: ColumnBuffer;\n private readonly deletedColumn: ColumnBuffer | null;\n private readonly softDelete: boolean;\n private readonly emitter = new ChangeEmitter();\n /**\n * TanStack-DB-compatible high-level event emitter. Handles\n * `status:change`, `subscribers:change`, `truncate`, `index:added`,\n * `index:removed`, and per-status events. Separate from the\n * low-level per-mutation `ChangeEmitter` above because the event\n * cadences differ: mutation events fire on every row touch; these\n * fire on lifecycle transitions.\n */\n private readonly events = new TypedEventEmitter<CollectionEvents>();\n /** Active secondary indexes keyed by monotonically assigned index id. */\n private readonly _indexes = new Map<number, IndexInterface<number>>();\n /** Active geometry-envelope spatial indexes keyed by column name. */\n private readonly _spatialIndexes = new Map<string, SpatialIndexState>();\n private _nextIndexId = 0;\n /**\n * Tracks external subscribers created via `subscribeChanges`. Used\n * by `subscriberCount` getter and emitted via `subscribers:change`.\n */\n private _subscriberCount = 0;\n /** Dense row cursor: next row slot to use. */\n private rowCursor = 0;\n /** Monotonic collection-wide version counter. */\n private _globalVersion = 0;\n /** Stable identifier (see `id` getter). */\n private readonly _id: string;\n /** Utils record (see `utils` getter). */\n private readonly _utils: UtilsRecord;\n /** Compare options for string orderBy (see `compareOptions` getter). */\n private readonly _compareOptions: StringCollationConfig;\n /** TanStack-shaped runtime collection config needed by index planning. */\n private readonly _config: CollectionRuntimeConfig;\n /** Undo marks registered for optimistic transaction rollbacks. */\n private readonly transactionRollbackMarks = new WeakMap<Transaction<any>, number>();\n /** Attached sync source lifecycle state. */\n private syncStarted = false;\n private syncCleanup: (() => void) | null = null;\n\n private constructor(\n schema: CompiledSchema,\n segment: Segment,\n columns: Map<string, ColumnBuffer>,\n capacity: number,\n undoCapacity: number,\n softDelete: boolean,\n id: string,\n utils: UtilsRecord,\n compareOptions: StringCollationConfig,\n config: CollectionRuntimeConfig,\n ) {\n this.schema = schema;\n this.segment = segment;\n this.columns = columns;\n this.columnList = [...columns.values()].sort(\n (a, b) => a.column.index - b.column.index,\n );\n this.capacity = capacity;\n this.undo = new UndoRing(undoCapacity);\n this.pkColumn = columns.get(schema.primaryKey)!;\n const del = columns.get('__deleted');\n this.deletedColumn = del ?? null;\n this.softDelete = softDelete && del !== null && del !== undefined;\n this._id = id;\n this._utils = utils;\n this._compareOptions = compareOptions;\n this._config = config;\n }\n\n static create(\n schema: CompiledSchema,\n options: CollectionOptions,\n ): Collection {\n if (options.capacity <= 0) {\n throw new RangeError('capacity must be > 0');\n }\n\n const capacity = options.capacity;\n\n // Size the segment. Per-column allocation plan:\n // * validity bitmap (if nullable): ceil(capacity/8) bytes\n // * primary buffer:\n // - fixed-width : capacity * byteWidth\n // - utf8/binary : capacity * 2 * 4 (i32 [start, end) pairs)\n // - dict_utf8 : capacity * 4 (u32 codes)\n // - list : capacity * 2 * 4 (i32 [start, end) pairs into child)\n // - point : capacity * 2 * 8 (Float64 [lng, lat] pairs)\n // - linestring : capacity * 2 * 4 (i32 [start, end) pairs into coords)\n // - polygon : capacity * 2 * 4 (i32 [start, end) pairs into rings)\n // - struct : 0 (fields carry primary storage)\n // * values heap (utf8/binary only): options heap bytes\n // * point/linestring/polygon bbox cache lives with geo column (JS heap in v1)\n // * struct fields: recursively allocated per-field using the same plan\n // (field types are restricted to leaves in v1)\n // Each region is 64B aligned to match Arrow layout.\n const heapBytesFor = (c: CompiledColumn): number => {\n const def = c.valuesHeapBytes ?? Math.max(1024, 32 * capacity);\n return def;\n };\n const primaryBytesFor = (c: CompiledColumn): number => {\n if (\n c.typeCode === ColumnTypeCode.Utf8 ||\n c.typeCode === ColumnTypeCode.Binary ||\n c.typeCode === ColumnTypeCode.List ||\n c.typeCode === ColumnTypeCode.LineString ||\n c.typeCode === ColumnTypeCode.Polygon\n ) {\n return capacity * 8; // i32 pair per row\n }\n if (c.typeCode === ColumnTypeCode.Struct) return 0;\n return c.byteWidth * capacity;\n };\n\n // Walk the compiled schema (including struct fields) to tally segment bytes.\n const tallyColumn = (c: CompiledColumn, total: number): number => {\n if (c.nullable) total = alignUp(total, ARROW_ALIGN) + bitmapBytes(capacity);\n const primary = primaryBytesFor(c);\n if (primary > 0) total = alignUp(total, ARROW_ALIGN) + primary;\n if (\n c.typeCode === ColumnTypeCode.Utf8 ||\n c.typeCode === ColumnTypeCode.Binary\n ) {\n total = alignUp(total, ARROW_ALIGN) + heapBytesFor(c);\n }\n if (c.typeCode === ColumnTypeCode.Struct && c.fields) {\n for (const f of c.fields) total = tallyColumn(f, total);\n }\n // List children live in JS heap — no segment bytes.\n return total;\n };\n\n let total = 0;\n for (const c of schema.columns) total = tallyColumn(c, total);\n total = alignUp(total, ARROW_ALIGN);\n\n const HEADER = 4096;\n const segment = createSegment(HEADER + total);\n segment.allocate(HEADER, ARROW_ALIGN);\n\n const columns = new Map<string, ColumnBuffer>();\n\n const allocateColumn = (c: CompiledColumn): ColumnBuffer => {\n let validity: Uint8Array | null = null;\n if (c.nullable) {\n const off = segment.allocate(bitmapBytes(capacity), ARROW_ALIGN);\n validity = new Uint8Array(segment.buffer, off, bitmapBytes(capacity));\n }\n\n let values: TypedValueArray;\n let heap: ValuesHeap | null = null;\n let dictionary: Dictionary | null = null;\n let list: ListChildState | null = null;\n let point: PointColumn | null = null;\n let lineString: LineStringColumn | null = null;\n let polygon: PolygonColumn | null = null;\n let structFields: ColumnBuffer[] | null = null;\n let structFieldsByName: Map<string, ColumnBuffer> | null = null;\n\n if (c.typeCode === ColumnTypeCode.Utf8) {\n const rangeOff = segment.allocate(primaryBytesFor(c), ARROW_ALIGN);\n values = new Int32Array(segment.buffer, rangeOff, capacity * 2);\n const heapBytes = heapBytesFor(c);\n const heapOff = segment.allocate(heapBytes, ARROW_ALIGN);\n heap = new ValuesHeap(new Uint8Array(segment.buffer, heapOff, heapBytes));\n } else if (c.typeCode === ColumnTypeCode.Binary) {\n const rangeOff = segment.allocate(primaryBytesFor(c), ARROW_ALIGN);\n values = new Int32Array(segment.buffer, rangeOff, capacity * 2);\n const heapBytes = heapBytesFor(c);\n const heapOff = segment.allocate(heapBytes, ARROW_ALIGN);\n heap = new ValuesHeap(new Uint8Array(segment.buffer, heapOff, heapBytes));\n } else if (c.typeCode === ColumnTypeCode.DictUtf8) {\n const codeOff = segment.allocate(primaryBytesFor(c), ARROW_ALIGN);\n values = new Uint32Array(segment.buffer, codeOff, capacity);\n dictionary = new Dictionary();\n } else if (c.typeCode === ColumnTypeCode.List) {\n const rangeOff = segment.allocate(primaryBytesFor(c), ARROW_ALIGN);\n values = new Int32Array(segment.buffer, rangeOff, capacity * 2);\n list = new ListChildState(c.childColumn!, capacity * 4);\n } else if (c.typeCode === ColumnTypeCode.Point) {\n const coordOff = segment.allocate(primaryBytesFor(c), ARROW_ALIGN);\n values = new Float64Array(segment.buffer, coordOff, capacity * 2);\n point = new PointColumn(capacity, values as Float64Array);\n } else if (c.typeCode === ColumnTypeCode.LineString) {\n const rangeOff = segment.allocate(primaryBytesFor(c), ARROW_ALIGN);\n values = new Int32Array(segment.buffer, rangeOff, capacity * 2);\n lineString = new LineStringColumn(capacity, values as Int32Array);\n } else if (c.typeCode === ColumnTypeCode.Polygon) {\n const rangeOff = segment.allocate(primaryBytesFor(c), ARROW_ALIGN);\n values = new Int32Array(segment.buffer, rangeOff, capacity * 2);\n polygon = new PolygonColumn(capacity, {\n ranges: values as Int32Array,\n ...(c.autoCloseRings !== undefined ? { autoCloseRings: c.autoCloseRings } : {}),\n });\n } else if (c.typeCode === ColumnTypeCode.Struct) {\n // Struct has no primary buffer; allocate per-field column bufs.\n values = new Uint8Array(0);\n const fieldList: ColumnBuffer[] = [];\n const byName = new Map<string, ColumnBuffer>();\n for (const f of c.fields ?? []) {\n const fb = allocateColumn(f);\n fieldList.push(fb);\n byName.set(f.name.split('.').pop()!, fb);\n }\n structFields = fieldList;\n structFieldsByName = byName;\n } else {\n const valOff = segment.allocate(primaryBytesFor(c), ARROW_ALIGN);\n values = createTypedView(c.typeCode, segment.buffer, valOff, capacity);\n }\n\n return {\n column: c,\n values,\n validity,\n version: 0,\n heap,\n dictionary,\n list,\n point,\n lineString,\n polygon,\n structFields,\n structFieldsByName,\n };\n };\n\n for (const c of schema.columns) {\n columns.set(c.name, allocateColumn(c));\n }\n\n const undoCapacity = options.undoCapacity ?? 4096;\n const softDelete = options.softDelete ?? columns.has('__deleted');\n const autoIndex = options.autoIndex ?? 'off';\n if (autoIndex === 'eager' && !options.defaultIndexType) {\n throw new ValidationError(\n \"autoIndex: 'eager' requires defaultIndexType to be set. Import an index type and set it, e.g. createCollection({ defaultIndexType: BasicIndex, autoIndex: 'eager', ... }).\",\n );\n }\n const runtimeConfig: CollectionRuntimeConfig = { autoIndex };\n if (options.defaultIndexType !== undefined) {\n runtimeConfig.defaultIndexType = options.defaultIndexType;\n }\n if (options.spatialIndex !== undefined) {\n runtimeConfig.spatialIndex = options.spatialIndex;\n }\n const id =\n options.id ?? `${schema.name}:${++Collection._idCounter}`;\n const utils: UtilsRecord = options.utils ?? {};\n const compareOptions: StringCollationConfig =\n options.compareOptions ?? { stringSort: 'lexical' };\n const coll = new Collection(\n schema,\n segment,\n columns,\n capacity,\n undoCapacity,\n softDelete,\n id,\n utils,\n compareOptions,\n runtimeConfig,\n );\n coll.initializeSpatialIndexes(options.spatialIndex);\n // In-memory collections are born ready. Fire onFirstReady listeners\n // on the next microtask (never synchronously from construction).\n queueMicrotask(() => coll._markReady());\n return coll;\n }\n\n /** Monotonic counter for default `id` assignment. */\n private static _idCounter = 0;\n\n /** Number of live (non-deleted) rows. */\n get size(): number {\n if (!this.softDelete || !this.deletedColumn) return this.rowIndex.size;\n // Count non-deleted rows via rowIndex entries.\n let n = 0;\n for (const [, row] of this.rowIndex.entries()) {\n if (!this.readBool(this.deletedColumn, row)) n++;\n }\n return n;\n }\n\n /** Raw row slot count (including tombstoned rows for soft-delete). */\n get rowCount(): number {\n return this.rowCursor;\n }\n\n get globalVersion(): number {\n return this._globalVersion;\n }\n\n /** Runtime collection config (TanStack-shaped subset). */\n get config(): Readonly<CollectionRuntimeConfig> {\n return this._config;\n }\n\n /** Read the version counter for a single column. */\n columnVersion(name: string): number {\n const c = this.columns.get(name);\n if (!c) throw new ValidationError(`unknown column \"${name}\"`);\n return c.version;\n }\n\n /** Expose the underlying segment buffer (for future worker handoff). */\n getSegmentBuffer(): SharedArrayBuffer | ArrayBuffer {\n return this.segment.buffer;\n }\n\n /** Subscribe to mutation events. Returns an unsubscribe function. */\n subscribe(listener: ChangeListener): () => void {\n return this.emitter.subscribe(listener);\n }\n\n // ---------------------------------------------------------------------\n // TanStack DB-compatible change subscription + event emitter\n // (@tanstack/db parity — Layer B.3)\n //\n // `subscribeChanges` is the high-level API: each mutation becomes a\n // single-element `ChangeMessage[]` batch delivered to the callback.\n // Future work (Layer E + F) may batch multiple mutations per flush\n // when a transaction is open; until then the cadence is 1:1 with\n // the underlying ChangeEmitter.\n //\n // `on`/`once`/`off`/`waitFor` are type-safe facades over the\n // `CollectionEvents` emitter — they cover lifecycle transitions\n // (status change, subscribers change, truncate) that are orthogonal\n // to the row-level change stream. Matches @tanstack/db CollectionImpl.\n // ---------------------------------------------------------------------\n\n /** Count of active `subscribeChanges` subscribers. */\n get subscriberCount(): number {\n return this._subscriberCount;\n }\n\n /**\n * Subscribe to collection changes as TanStack DB `ChangeMessage[]`\n * batches. The callback receives an array of change messages;\n * batches contain a single message in Layer B (one message per\n * mutation). Layer E's transaction machinery will coalesce\n * multiple mutations into a single array when a tx commits.\n *\n * When `options.includeInitialState` is true, the callback is\n * invoked synchronously with one `insert` message per current\n * live row before any mutation-driven calls.\n *\n * Returns a `CollectionSubscription` handle; call `unsubscribe()`\n * to detach. Reading `subscriberCount` also reflects the count.\n */\n subscribeChanges(\n callback: (changes: ChangeMessage<RowValue, number>[]) => void,\n options?: SubscribeChangesOptions,\n ): CollectionSubscription {\n const whereExpression = this._subscribeWhereExpression(options);\n if (whereExpression) ensureIndexForExpression(whereExpression, this);\n\n let active = true;\n const sentKeys = new Set<number>();\n\n const markCurrentRowsSeen = (): void => {\n for (const [pk, row] of this.rowIndex.entries()) {\n if (\n this.softDelete &&\n this.deletedColumn &&\n this.readBool(this.deletedColumn, row)\n ) {\n continue;\n }\n sentKeys.add(pk);\n }\n };\n\n const safeCallback = (\n changes: ChangeMessage<RowValue, number>[],\n phase: 'initial' | 'change' = 'change',\n ): void => {\n try {\n callback(changes);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error(`[arrowbase] subscribeChanges ${phase} callback threw:`, err);\n }\n };\n\n const deliverChanges = (changes: ChangeMessage<RowValue, number>[]): void => {\n if (!active) return;\n const filtered = this.filterAndFlipSubscriptionChanges(changes, sentKeys);\n if (filtered === null) return;\n safeCallback(filtered);\n };\n\n // Bump subscriber count and emit.\n const prev = this._subscriberCount++;\n this.events.emit('subscribers:change', {\n type: 'subscribers:change',\n collection: this,\n previousSubscriberCount: prev,\n subscriberCount: this._subscriberCount,\n });\n\n if (options?.includeInitialState) {\n const initial = this.currentStateAsChanges();\n for (const change of initial) sentKeys.add(change.key);\n if (initial.length > 0) safeCallback(initial, 'initial');\n } else if (options?.includeInitialState === false) {\n markCurrentRowsSeen();\n }\n\n const unsubscribeInner = this.emitter.subscribe((ev) => {\n if (!active) return;\n if (ev.op === 'rollback' && ev.changes) {\n deliverChanges(ev.changes as ChangeMessage<RowValue, number>[]);\n return;\n }\n const msg = this._changeEventToMessage(ev);\n if (msg === null) return;\n deliverChanges([msg]);\n });\n\n const sub: CollectionSubscription = {\n status: 'ready',\n unsubscribe: () => {\n if (!active) return;\n active = false;\n unsubscribeInner();\n const prevN = this._subscriberCount--;\n this.events.emit('subscribers:change', {\n type: 'subscribers:change',\n collection: this,\n previousSubscriberCount: prevN,\n subscriberCount: this._subscriberCount,\n });\n },\n };\n return sub;\n }\n\n /**\n * Return the current live state as an array of `insert`\n * `ChangeMessage`s. Analogous to @tanstack/db's\n * `currentStateAsChanges()`. Options are accepted for future\n * compat (where / orderBy / limit) but are no-ops in Layer B;\n * Layer C wires them up to the query path.\n */\n currentStateAsChanges(\n _options?: CurrentStateAsChangesOptions,\n ): ChangeMessage<RowValue, number>[] {\n const out: ChangeMessage<RowValue, number>[] = [];\n for (const [pk, row] of this.rowIndex.entries()) {\n if (\n this.softDelete &&\n this.deletedColumn &&\n this.readBool(this.deletedColumn, row)\n ) {\n continue;\n }\n out.push({\n key: pk,\n value: this.snapshotRow(row),\n type: 'insert',\n });\n }\n return out;\n }\n\n /**\n * Map a low-level `ChangeEvent` to a TanStack `ChangeMessage`.\n * Returns null for `rollback`/`compact` — those don't have a 1:1\n * representation in TanStack DB's model (they'd decompose into a\n * series of inverse inserts/updates/deletes). Layer E will handle\n * that decomposition; for now consumers that care must observe\n * the low-level `subscribe()` channel.\n */\n private _changeEventToMessage(\n ev: ChangeEvent,\n ): ChangeMessage<RowValue, number> | null {\n switch (ev.op) {\n case 'insert':\n return {\n key: ev.rowId,\n value: (ev.value ?? {}) as RowValue,\n type: 'insert',\n };\n case 'update': {\n const msg: ChangeMessage<RowValue, number> = {\n key: ev.rowId,\n value: (ev.value ?? {}) as RowValue,\n type: 'update',\n };\n if (ev.previousValue) {\n // Merge prev subset into a full \"before\" snapshot by\n // starting from current value and overlaying prev fields.\n const before: Record<string, unknown> = { ...(ev.value ?? {}) };\n for (const [k, v] of Object.entries(ev.previousValue)) {\n before[k] = v;\n }\n msg.previousValue = before as RowValue;\n }\n return msg;\n }\n case 'delete':\n return {\n key: ev.rowId,\n value: (ev.value ?? {}) as RowValue,\n type: 'delete',\n };\n default:\n return null;\n }\n }\n\n private filterAndFlipSubscriptionChanges(\n changes: ChangeMessage<RowValue, number>[],\n sentKeys: Set<number>,\n ): ChangeMessage<RowValue, number>[] | null {\n const out: ChangeMessage<RowValue, number>[] = [];\n let sawUnseenDelete = false;\n\n for (const change of changes) {\n const key = Number(change.key);\n if (change.type === 'insert') {\n if (sentKeys.has(key)) continue;\n sentKeys.add(key);\n out.push(change);\n } else if (change.type === 'update') {\n if (sentKeys.has(key)) {\n out.push(change);\n } else {\n sentKeys.add(key);\n out.push({ key: change.key, value: change.value, type: 'insert' });\n }\n } else {\n if (sentKeys.has(key)) {\n sentKeys.delete(key);\n out.push(change);\n } else {\n sawUnseenDelete = true;\n }\n }\n }\n\n if (out.length > 0) return out;\n return sawUnseenDelete ? [] : null;\n }\n\n private _subscribeWhereExpression(\n options?: SubscribeChangesOptions,\n ): BasicExpression | undefined {\n if (!options) return undefined;\n const hasWhere = typeof options.where === 'function';\n const hasWhereExpression = options.whereExpression !== undefined;\n if (hasWhere && hasWhereExpression) {\n throw new ValidationError('subscribeChanges: cannot specify both where and whereExpression');\n }\n if (options.whereExpression !== undefined) return options.whereExpression;\n if (!hasWhere) return undefined;\n\n const row = createSingleRowRefProxy<Record<string, unknown>>();\n return toExpression(options.where!(row)) as BasicExpression;\n }\n\n /** Type-safe event subscription. Returns an unsubscribe fn. */\n on<K extends keyof CollectionEvents>(\n event: K,\n callback: (payload: CollectionEvents[K]) => void,\n ): () => void {\n return this.events.on(event, callback);\n }\n\n /** Subscribe for one emission of `event`. Returns unsubscribe fn. */\n once<K extends keyof CollectionEvents>(\n event: K,\n callback: (payload: CollectionEvents[K]) => void,\n ): () => void {\n return this.events.once(event, callback);\n }\n\n /** Remove a specific `on`/`once` listener. */\n off<K extends keyof CollectionEvents>(\n event: K,\n callback: (payload: CollectionEvents[K]) => void,\n ): void {\n this.events.off(event, callback);\n }\n\n /**\n * Await the next emission of `event`. Rejects with a timeout error\n * if `timeout` ms elapse first. Matches @tanstack/db semantics.\n */\n waitFor<K extends keyof CollectionEvents>(\n event: K,\n timeout?: number,\n ): Promise<CollectionEvents[K]> {\n return this.events.waitFor(event, timeout);\n }\n\n /** List all column names in declaration order. */\n columnNames(): readonly string[] {\n return this.columnList.map((c) => c.column.name);\n }\n\n /** True when the collection has a soft-delete column active. */\n get hasSoftDelete(): boolean {\n return this.softDelete;\n }\n\n // ---------------------------------------------------------------------\n // Snapshot integration (low-level; prefer `exportSnapshot`/`importSnapshot`).\n // ---------------------------------------------------------------------\n\n /**\n * Expose underlying buffer views to the snapshot exporter. Rows are\n * emitted up to `rowCursor`, so consumers copy the *used* subregion\n * of each typed-array buffer (not the whole allocated capacity). This\n * keeps snapshots proportional to live data.\n */\n bulkColumnViews(): ReadonlyArray<{\n name: string;\n type: ColumnTypeName;\n typeCode: ColumnTypeCode;\n nullable: boolean;\n validity: Uint8Array | null;\n primaryBuffer: Uint8Array;\n heap: Uint8Array | null;\n dictionaryEntries: readonly string[] | null;\n }> {\n return this.columnList.map((col) => {\n const validity = col.validity\n ? col.validity.slice(0, (this.rowCursor + 7) >>> 3)\n : null;\n const primary = extractPrimaryBytes(col, this.rowCursor);\n const heap = col.heap ? col.heap.rawBytes.slice(0, col.heap.used) : null;\n const dictionaryEntries = col.dictionary\n ? [...col.dictionary.entries()].map(([, s]) => s)\n : null;\n return {\n name: col.column.name,\n type: col.column.type,\n typeCode: col.column.typeCode,\n nullable: col.column.nullable,\n validity,\n primaryBuffer: primary,\n heap,\n dictionaryEntries,\n };\n });\n }\n\n /**\n * Tree-shaped column view for the snapshot exporter. Mirrors the\n * compiled schema: list columns carry a `listChild` view; struct\n * columns carry a `fields` array. Each leaf view is slice-copied\n * up to the collection's current row cursor (for leaves) or list\n * child cursor (for list children) so the snapshot size is\n * proportional to live data.\n */\n bulkColumnViewsTree(): ReadonlyArray<TreeView> {\n return this.columnList.map((c) => this.buildTreeView(c));\n }\n\n private buildTreeView(col: ColumnBuffer): TreeView {\n const tc = col.column.typeCode;\n const validity = col.validity\n ? col.validity.slice(0, (this.rowCursor + 7) >>> 3)\n : null;\n const primary = extractPrimaryBytes(col, this.rowCursor);\n const heap = col.heap ? col.heap.rawBytes.slice(0, col.heap.used) : null;\n const dictionaryEntries = col.dictionary\n ? [...col.dictionary.entries()].map(([, s]) => s)\n : null;\n\n if (tc === ColumnTypeCode.List) {\n const listState = col.list!;\n return {\n name: col.column.name,\n type: col.column.type,\n typeCode: tc,\n nullable: col.column.nullable,\n validity,\n primaryBuffer: primary,\n heap,\n dictionaryEntries,\n listChildElements: listState.cursor,\n listChild: buildListChildTreeView(col.column.name, listState),\n };\n }\n\n if (tc === ColumnTypeCode.Struct) {\n return {\n name: col.column.name,\n type: col.column.type,\n typeCode: tc,\n nullable: col.column.nullable,\n validity,\n primaryBuffer: primary, // empty\n heap: null,\n dictionaryEntries: null,\n fields: (col.structFields ?? []).map((f) => this.buildTreeView(f)),\n };\n }\n\n return {\n name: col.column.name,\n type: col.column.type,\n typeCode: tc,\n nullable: col.column.nullable,\n validity,\n primaryBuffer: primary,\n heap,\n dictionaryEntries,\n };\n }\n\n /** Internal: restore the monotonic `globalVersion` after a snapshot import. */\n _restoreGlobalVersionForSnapshot(version: number): void {\n if (!Number.isInteger(version) || version < this._globalVersion) {\n throw new ValidationError(\n `cannot restore globalVersion to ${version}; current is ${this._globalVersion}`,\n );\n }\n this._globalVersion = version;\n }\n\n /**\n * Internal low-level scan view for the query kernel. Exposes raw\n * typed-array references + heap + dictionary so the kernel can read\n * values by (column, row ordinal) without allocating a row object.\n *\n * The returned arrays are live views into the collection's storage.\n * Do not mutate them. Their validity is bounded by the next mutation\n * that may resize the segment (today the segment capacity is fixed,\n * so views remain stable for the lifetime of the collection — but\n * this is an implementation detail that can change).\n */\n _internalScanColumns(): readonly ScanColumn[] {\n return this.columnList.map((col) => ({\n name: col.column.name,\n typeCode: col.column.typeCode,\n nullable: col.column.nullable,\n validity: col.validity,\n values: col.values,\n heap: col.heap,\n dictionary: col.dictionary,\n }));\n }\n\n /**\n * Internal: yield live row ordinals (respecting soft-delete) in PK\n * insertion order. The kernel iterates these to drive vectorized scans.\n */\n *_internalLiveOrdinals(\n options?: { includeSoftDeleted?: boolean },\n ): IterableIterator<number> {\n const include = options?.includeSoftDeleted === true;\n const del = this.deletedColumn;\n const soft = this.softDelete;\n if (!soft || !del || include) {\n for (const [, row] of this.rowIndex.entries()) yield row;\n return;\n }\n const validity = del.validity;\n const values = del.values as Uint8Array;\n for (const [, row] of this.rowIndex.entries()) {\n // readBool inlined for speed.\n if (validity && !getValidity(validity, row)) {\n // null treated as not-deleted (normal-mode insert path defaults to false)\n yield row;\n continue;\n }\n if ((values[row] ?? 0) === 0) yield row;\n }\n }\n\n /**\n * Internal: yield live row ordinals whose primary keys are in `keys`, preserving scan order.\n */\n *_internalLiveOrdinalsForKeys(keys: ReadonlySet<number>): IterableIterator<number> {\n const del = this.deletedColumn;\n const soft = this.softDelete;\n\n // Sparse index hits should be O(k), not O(collection size). Preserve the\n // old scan-order contract by sorting resolved ordinals back to insertion order.\n if (keys.size * 8 < this.rowIndex.size) {\n const ordinals: number[] = [];\n for (const pk of keys) {\n const row = this.rowIndex.lookup(pk);\n if (row === undefined) continue;\n if (soft && del && this.readBool(del, row)) continue;\n ordinals.push(row);\n }\n ordinals.sort((a, b) => a - b);\n for (const row of ordinals) yield row;\n return;\n }\n\n for (const [pk, row] of this.rowIndex.entries()) {\n if (!keys.has(pk)) continue;\n if (soft && del && this.readBool(del, row)) continue;\n yield row;\n }\n }\n\n /** Search an attached geometry-envelope index. Returns row ordinals. */\n _internalSearchSpatialIndex(column: string, query: BBox): Uint32Array | undefined {\n let state = this._spatialIndexes.get(column);\n if (!state) return undefined;\n const col = this.columns.get(column);\n const bboxCache = col ? this.spatialBboxCache(col) : null;\n if (bboxCache === null) return undefined;\n flushSpatialIndexDirty(state, bboxCache);\n if (state.segments.length >= 64) {\n state = this.rebuildSpatialIndexColumn(column, state, bboxCache);\n }\n return searchSpatialIndex(state, bboxCache, query);\n }\n\n /** Resolve a primary key to its current row ordinal without materializing a row. */\n _internalRowOrdinalForKey(key: number): number | undefined {\n const row = this.rowIndex.lookup(key);\n if (row === undefined) return undefined;\n if (this.softDelete && this.deletedColumn && this.readBool(this.deletedColumn, row)) return undefined;\n return row;\n }\n\n /** Evaluate a bbox predicate directly against the cached geometry envelope. */\n _internalGeometryBboxMatches(\n column: string,\n row: number,\n query: BBox,\n mode: 'intersects' | 'within',\n ): boolean {\n assertValidBbox(query, 'query');\n const col = this.columns.get(column);\n const cache = col ? this.spatialBboxCache(col) : null;\n if (cache === null) return false;\n const offset = row * 4;\n const minX = cache[offset];\n const minY = cache[offset + 1];\n const maxX = cache[offset + 2];\n const maxY = cache[offset + 3];\n if (![minX, minY, maxX, maxY].every(Number.isFinite)) return false;\n if (mode === 'within') {\n return minX! >= query[0] && minY! >= query[1] && maxX! <= query[2] && maxY! <= query[3];\n }\n return minX! <= query[2] && maxX! >= query[0] && minY! <= query[3] && maxY! >= query[1];\n }\n\n /** Evaluate point distance directly against coordinate buffers. */\n _internalPointDWithin(column: string, row: number, point: Point, meters: number): boolean {\n const col = this.columns.get(column);\n if (!col?.point || (col.validity && !getValidity(col.validity, row))) return false;\n const offset = row * 2;\n return haversineDistanceMetersXY(\n col.point.coords[offset]!,\n col.point.coords[offset + 1]!,\n point[0],\n point[1],\n ) <= meters;\n }\n\n /**\n * Internal: read a single cell at (column, row) for the kernel. Used\n * to materialize projected rows only after filter + sort + limit\n * have produced a final ordinal list.\n */\n _internalReadCell(colName: string, row: number): RowValue[string] {\n const col = this.columns.get(colName);\n if (!col) throw new ValidationError(`unknown column \"${colName}\"`);\n return this.readCell(col, row);\n }\n\n /**\n * Introspection view for devtools. Returns per-column metadata\n * (version, null count, heap usage, dictionary sample) without\n * exposing live buffers. `nullCount` walks the validity bitmap once\n * per nullable column — O(rowCursor) total. Safe to call on a hot\n * path but not a no-op.\n */\n describeColumnViews(): ReadonlyArray<{\n name: string;\n type: ColumnTypeName;\n nullable: boolean;\n version: number;\n nullCount: number;\n heap: { used: number; capacity: number } | null;\n dictionaryEntries: readonly string[] | null;\n }> {\n return this.columnList.map((col) => {\n let nullCount = 0;\n if (col.validity) {\n for (let r = 0; r < this.rowCursor; r++) {\n if (!getValidity(col.validity, r)) nullCount++;\n }\n }\n return {\n name: col.column.name,\n type: col.column.type,\n nullable: col.column.nullable,\n version: col.version,\n nullCount,\n heap: col.heap\n ? { used: col.heap.used, capacity: col.heap.capacity }\n : null,\n dictionaryEntries: col.dictionary\n ? [...col.dictionary.entries()].map(([, s]) => s)\n : null,\n };\n });\n }\n\n // ---------------------------------------------------------------------\n // Mutations\n // ---------------------------------------------------------------------\n\n insert(row: RowValue, config: InsertConfig = {}): Transaction<RowValue> {\n return this.applyCollectionMutation('insert', config, () => {\n const applied = this.insertRaw(row);\n return this.createPendingMutation(\n 'insert',\n applied.key,\n {},\n applied.value,\n applied.value,\n config,\n );\n });\n }\n\n update(id: number, patch: Partial<RowValue>): Transaction<RowValue>;\n update(id: number, callback: (draft: RowValue) => void): Transaction<RowValue>;\n update(\n id: number,\n config: OperationConfig,\n callback: Partial<RowValue> | ((draft: RowValue) => void),\n ): Transaction<RowValue>;\n update(\n id: number,\n patchOrConfigOrCallback:\n | Partial<RowValue>\n | OperationConfig\n | ((draft: RowValue) => void),\n maybeCallback?: Partial<RowValue> | ((draft: RowValue) => void),\n ): Transaction<RowValue> {\n const { config, patch } = this.resolveUpdatePatch(\n id,\n patchOrConfigOrCallback,\n maybeCallback,\n );\n return this.applyCollectionMutation('update', config, () => {\n const applied = this.updateRaw(id, patch);\n return this.createPendingMutation(\n 'update',\n id,\n applied.original,\n applied.modified,\n applied.changes,\n config,\n );\n });\n }\n\n delete(id: number, config: OperationConfig = {}): Transaction<RowValue> {\n return this.applyCollectionMutation('delete', config, () => {\n const applied = this.deleteRaw(id);\n return this.createPendingMutation(\n 'delete',\n id,\n applied.original,\n applied.modified,\n applied.changes,\n config,\n );\n });\n }\n\n private applyCollectionMutation(\n type: 'insert' | 'update' | 'delete',\n config: OperationConfig,\n apply: () => PendingMutation<RowValue>,\n ): Transaction<RowValue> {\n const active = getActiveTransaction() as Transaction<RowValue> | undefined;\n const tx =\n active ??\n createTransaction<RowValue>({\n mutationFn: async ({ transaction }) => {\n await this.callCollectionMutationHandler(\n type,\n transaction as unknown as Transaction<RowValue>,\n );\n },\n });\n\n this.registerTransactionRollback(tx);\n\n let mutation: PendingMutation<RowValue>;\n try {\n mutation = apply();\n } catch (error) {\n if (!active) {\n const originalError = error instanceof Error ? error : new Error(String(error));\n tx.error = { message: originalError.message, error: originalError };\n void tx.isPersisted.promise.catch(() => undefined);\n tx.rollback();\n }\n throw error;\n }\n\n tx.applyMutations([mutation]);\n if (!active && type === 'update' && this.shouldConfirmSyncedUpdates()) {\n this._internalConfirmSyncedMutations([mutation]);\n }\n if (!active) void tx.commit().catch(() => undefined);\n return tx;\n }\n\n private registerTransactionRollback(tx: Transaction<any>): void {\n if (this.transactionRollbackMarks.has(tx)) return;\n const mark = this.beginTransaction();\n this.transactionRollbackMarks.set(tx, mark);\n tx.addRollbackHandler(() => {\n const rollbackMark = this.transactionRollbackMarks.get(tx);\n if (rollbackMark === undefined) return;\n this.transactionRollbackMarks.delete(tx);\n this.rollback(rollbackMark);\n });\n }\n\n private shouldConfirmSyncedUpdates(): boolean {\n return this._utils.__arrowbaseLocalOnlyConfirmUpdates === true;\n }\n\n private async callCollectionMutationHandler(\n type: 'insert' | 'update' | 'delete',\n transaction: Transaction<RowValue>,\n ): Promise<void> {\n const metadata = getCollectionMetadata(this);\n const params = { transaction, collection: this } as any;\n if (type === 'insert') {\n await metadata?.onInsert?.(params);\n } else if (type === 'update') {\n await metadata?.onUpdate?.(params);\n } else {\n await metadata?.onDelete?.(params);\n }\n }\n\n private createPendingMutation(\n type: 'insert' | 'update' | 'delete',\n key: number,\n original: RowValue | {},\n modified: RowValue,\n changes: Partial<RowValue> | RowValue,\n config: OperationConfig,\n ): PendingMutation<RowValue> {\n const now = new Date();\n return {\n mutationId: randomCollectionMutationId(),\n original: original as PendingMutation<RowValue>['original'],\n modified,\n changes: changes as PendingMutation<RowValue>['changes'],\n globalKey: `KEY::${this.id}/${key}`,\n key,\n metadata: config.metadata,\n syncMetadata: {},\n optimistic: config.optimistic ?? true,\n type,\n createdAt: now,\n updatedAt: now,\n collection: this,\n };\n }\n\n private resolveUpdatePatch(\n id: number,\n patchOrConfigOrCallback:\n | Partial<RowValue>\n | OperationConfig\n | ((draft: RowValue) => void),\n maybeCallback?: Partial<RowValue> | ((draft: RowValue) => void),\n ): { config: OperationConfig; patch: Partial<RowValue> } {\n if (typeof patchOrConfigOrCallback === 'function') {\n return {\n config: {},\n patch: this.patchFromCallback(id, patchOrConfigOrCallback),\n };\n }\n\n if (maybeCallback !== undefined) {\n const updater = maybeCallback;\n return {\n config: patchOrConfigOrCallback as OperationConfig,\n patch:\n typeof updater === 'function'\n ? this.patchFromCallback(id, updater)\n : updater,\n };\n }\n\n return { config: {}, patch: patchOrConfigOrCallback as Partial<RowValue> };\n }\n\n private patchFromCallback(\n id: number,\n callback: (draft: RowValue) => void,\n ): Partial<RowValue> {\n const current = this.get(id);\n if (!current) this.rowIndex.require(id);\n const before = current ?? this.snapshotRow(this.rowIndex.require(id));\n const draft = { ...before };\n callback(draft);\n const patch: Partial<RowValue> = {};\n for (const [name, value] of Object.entries(draft)) {\n if (!Object.is(value, before[name])) {\n patch[name] = value as RowValue[string];\n }\n }\n return patch;\n }\n\n private insertRaw(row: RowValue): { key: number; value: RowValue } {\n const pk = this.coerceUint32(row[this.schema.primaryKey], this.schema.primaryKey);\n if (this.rowIndex.lookup(pk) !== undefined) {\n throw new ValidationError(`duplicate primary key ${pk}`);\n }\n if (this.rowCursor >= this.capacity) {\n throw new OutOfSpaceError(\n `collection \"${this.schema.name}\" is at capacity ${this.capacity}`,\n );\n }\n\n const rowIdx = this.rowCursor++;\n const touched = new Set<string>();\n for (const col of this.columnList) {\n const val = row[col.column.name];\n this.writeCell(col, rowIdx, val ?? null);\n col.version = (col.version + 1) >>> 0;\n touched.add(col.column.name);\n }\n this.rowIndex.insert(pk, rowIdx);\n this.markSpatialRowDirty(rowIdx);\n const value = this.snapshotRow(rowIdx);\n this.addToIndexes(pk, value);\n this.undo.push('insert', pk, rowIdx, {});\n this._globalVersion++;\n this.emitter.emit({\n op: 'insert',\n rowId: pk,\n columns: touched,\n globalVersion: this._globalVersion,\n value,\n });\n return { key: pk, value };\n }\n\n private updateRaw(\n id: number,\n patch: Partial<RowValue>,\n ): { original: RowValue; modified: RowValue; changes: Partial<RowValue> } {\n for (const name of Object.keys(patch)) {\n if (name === this.schema.primaryKey) {\n throw new ValidationError(`cannot update primary key`);\n }\n if (!this.columns.has(name)) {\n throw new ValidationError(`unknown column \"${name}\"`);\n }\n }\n\n const row = this.rowIndex.require(id);\n const before = this.snapshotRow(row);\n const prev: Record<string, unknown> = {};\n const touched = new Set<string>();\n for (const [name, value] of Object.entries(patch)) {\n const col = this.columns.get(name)!;\n prev[name] = this.readCell(col, row);\n this.writeCell(col, row, value ?? null);\n col.version = (col.version + 1) >>> 0;\n touched.add(name);\n }\n const after = this.snapshotRow(row);\n const changes: Partial<RowValue> = {};\n for (const name of touched) {\n changes[name] = after[name] as RowValue[string];\n }\n this.markSpatialRowDirty(row, touched);\n this.updateIndexes(id, before, after);\n this.undo.push('update', id, row, prev);\n this._globalVersion++;\n this.emitter.emit({\n op: 'update',\n rowId: id,\n columns: touched,\n globalVersion: this._globalVersion,\n value: after,\n previousValue: prev,\n });\n return { original: before, modified: after, changes };\n }\n\n private deleteRaw(\n id: number,\n ): { original: RowValue; modified: RowValue; changes: RowValue } {\n const row = this.rowIndex.require(id);\n const before = this.snapshotRow(row);\n this.markSpatialRowDeleted(row);\n const touched = new Set<string>();\n // Value to emit: for soft-delete it's the row after the flip (with\n // __deleted: true); for hard-delete it's the snapshot taken before\n // removal (the row slot is unreachable via rowIndex after).\n let emittedValue: Record<string, unknown>;\n let emittedPrev: Record<string, unknown> | undefined;\n if (this.softDelete && this.deletedColumn) {\n const prev = this.readBool(this.deletedColumn, row);\n this.removeFromIndexes(id, before);\n emittedPrev = { __deleted: prev };\n this.writeCell(this.deletedColumn, row, true);\n this.deletedColumn.version = (this.deletedColumn.version + 1) >>> 0;\n this.undo.push('delete', id, row, { __deleted: prev });\n touched.add('__deleted');\n emittedValue = this.snapshotRow(row);\n } else {\n // Hard delete: snapshot the full row before removing.\n const snap = this.snapshotRow(row);\n this.removeFromIndexes(id, snap);\n this.rowIndex.remove(id);\n // Mark row as free via PK=0 and all columns untouched; the slot is not\n // reclaimed in Phase 1. Iteration uses rowIndex so the row is invisible.\n this.undo.push('delete', id, row, {}, snap);\n emittedValue = snap;\n }\n this._globalVersion++;\n this.emitter.emit({\n op: 'delete',\n rowId: id,\n columns: this.softDelete ? touched : 'all',\n globalVersion: this._globalVersion,\n value: emittedValue,\n ...(emittedPrev !== undefined ? { previousValue: emittedPrev } : {}),\n });\n return { original: before, modified: before, changes: before };\n }\n\n get(id: number): RowValue | undefined {\n const row = this.rowIndex.lookup(id);\n if (row === undefined) return undefined;\n if (this.softDelete && this.deletedColumn && this.readBool(this.deletedColumn, row)) {\n return undefined;\n }\n return this.snapshotRow(row);\n }\n\n /**\n * Iterate rows as plain JS objects.\n *\n * By default, soft-deleted rows are excluded. Pass\n * `{ includeSoftDeleted: true }` to include them — useful for sync\n * adapters that want to mirror tombstones to downstream stores.\n */\n *rows(options?: { includeSoftDeleted?: boolean }): IterableIterator<RowValue> {\n const include = options?.includeSoftDeleted === true;\n for (const [, row] of this.rowIndex.entries()) {\n if (\n !include &&\n this.softDelete &&\n this.deletedColumn &&\n this.readBool(this.deletedColumn, row)\n ) {\n continue;\n }\n yield this.snapshotRow(row);\n }\n }\n\n // ---------------------------------------------------------------------\n // Map-like read surface (@tanstack/db parity — Layer B.1)\n //\n // `has` / `keys` / `values` / `entries` / `forEach` / `map` match the\n // Map-like read API of `@tanstack/db`'s CollectionImpl. They iterate\n // the same live rows as `rows()` but yield the stable primary-key\n // instead of (or alongside) the materialized row.\n //\n // `state` and `toArray` are lazy-cached snapshots invalidated on the\n // next mutation via globalVersion bookkeeping. Iteration methods\n // never build the cached Map/Array — only an explicit read of\n // `.state` or `.toArray` does.\n // ---------------------------------------------------------------------\n\n /** Cached `Map<pk, row>` view. Built lazily on first read. */\n private _stateCache: Map<number, RowValue> | null = null;\n /** `globalVersion` at the moment `_stateCache` was built. */\n private _stateCacheVersion = -1;\n /** Cached dense `row[]` view. Built lazily on first read. */\n private _toArrayCache: RowValue[] | null = null;\n /** `globalVersion` at the moment `_toArrayCache` was built. */\n private _toArrayCacheVersion = -1;\n\n // ---------------------------------------------------------------------\n // Status / lifecycle (@tanstack/db parity — Layer B.2)\n //\n // In-memory collections have no asynchronous initialization, so we\n // start in 'ready' and never pass through 'idle'/'loading' unless\n // a future sync-backed config explicitly requests it (deferred work).\n // The hooks still exist and obey the same invariants:\n // - onFirstReady: fires exactly once; if already ready at the call\n // site, resolves on the next microtask (NOT synchronously — that\n // would make listener ordering observable and break React's\n // expectation that effects run after paint).\n // - isReady(): the canonical check.\n // - preload()/stateWhenReady()/toArrayWhenReady(): Promise shapes\n // that await ready-state.\n // - startSyncImmediate(): no-op for in-memory; reserved for\n // sync-backed configs.\n // A Layer-E sync-adapter rewire may transition through 'loading' →\n // 'ready'. Rows that change status after construction bump\n // `_statusChanged` to wake waiting promises.\n // ---------------------------------------------------------------------\n\n private _status: CollectionStatus = 'ready';\n private _firstReadyListeners: Array<() => void> = [];\n private _firstReadyFired = false;\n /** Promises awaiting `preload()` / `stateWhenReady()` / etc. */\n private _readyPromise: Promise<void> | null = null;\n private _readyResolve: (() => void) | null = null;\n\n /**\n * Current lifecycle status of the collection. For in-memory\n * collections this starts as `'ready'` and stays there until\n * `cleanup()` transitions to `'cleaned-up'`.\n */\n get status(): CollectionStatus {\n return this._status;\n }\n\n /** `true` iff status is `'ready'`. */\n isReady(): boolean {\n return this._status === 'ready';\n }\n\n /**\n * Register a callback that fires exactly once, the first time the\n * collection becomes ready. If the collection is already ready, the\n * callback is invoked on the next microtask (never synchronously, so\n * ordering is predictable and matches @tanstack/db).\n *\n * Duplicate registrations are allowed; each registered callback\n * fires at most once.\n */\n onFirstReady(callback: () => void): void {\n if (this._firstReadyFired) {\n queueMicrotask(callback);\n return;\n }\n this._firstReadyListeners.push(callback);\n }\n\n /**\n * Internal helper for lifecycle machinery to mark the collection as\n * ready. Not exposed publicly — callers use the sync-config\n * `markReady` callback instead. For in-memory collections this is\n * invoked once during construction.\n */\n private _markReady(): void {\n if (this._firstReadyFired) return;\n this._firstReadyFired = true;\n const previousStatus = this._status;\n this._status = 'ready';\n // Fan out listeners in the order they were registered.\n const listeners = this._firstReadyListeners;\n this._firstReadyListeners = [];\n for (const cb of listeners) {\n try {\n cb();\n } catch {\n // Per @tanstack/db semantics, a throwing listener must not\n // prevent the others from firing. We silently swallow.\n }\n }\n this._readyResolve?.();\n // Fire the corresponding high-level events on the event bus.\n // `previousStatus === this._status` only happens when we were\n // already 'ready' at birth (the common case), in which case\n // @tanstack/db still fires the `status:change` to let\n // onFirstReady observers chain off it.\n if (previousStatus !== this._status) {\n const ev: CollectionStatusChangeEvent = {\n type: 'status:change',\n collection: this,\n previousStatus,\n status: this._status,\n };\n this.events.emit('status:change', ev);\n this.events.emit(`status:${this._status}` as const, ev);\n }\n }\n\n /**\n * Returns a promise that resolves when the collection is ready.\n * Resolves immediately if already ready. No-op for in-memory\n * collections after the first construction microtask.\n */\n preload(): Promise<void> {\n if (!this.syncStarted) this.startSyncImmediate();\n if (this._firstReadyFired) return Promise.resolve();\n if (this._readyPromise) return this._readyPromise;\n this._readyPromise = new Promise<void>((resolve) => {\n this._readyResolve = resolve;\n });\n return this._readyPromise;\n }\n\n /**\n * Request eager synchronous start of any attached sync source. For\n * pure in-memory collections this is a no-op; the hook exists so\n * sync-backed subclasses / configs can override it without breaking\n * the TanStack surface.\n */\n startSyncImmediate(): void {\n if (this.syncStarted) return;\n const metadata = getCollectionMetadata(this);\n const sync = metadata?.sync;\n if (!sync) return;\n\n this.syncStarted = true;\n let batch: Array<ChangeMessage<RowValue, number>> | null = null;\n\n const flush = (): void => {\n const messages = batch ?? [];\n batch = null;\n for (const message of messages) this.applySyncMessage(message);\n };\n\n const cleanup = sync.sync({\n collection: this,\n begin: () => {\n batch = [];\n },\n write: (message) => {\n const narrowed = message as ChangeMessage<RowValue, number>;\n if (batch) batch.push(narrowed);\n else this.applySyncMessage(narrowed);\n },\n commit: flush,\n markReady: () => this._markReady(),\n truncate: () => this.truncateFromSync(),\n });\n\n this.syncCleanup = cleanup ?? null;\n }\n\n private primaryKeyFromMessage(message: ChangeMessage<RowValue, number>): number {\n const rawKey = message.key ?? this.getKeyFromItem(message.value);\n const numericKey = Number(rawKey);\n if (!Number.isFinite(numericKey)) {\n throw new ValidationError(`sync message key must be numeric (got ${String(rawKey)})`);\n }\n return numericKey;\n }\n\n private patchFromSyncValue(value: RowValue): Partial<RowValue> {\n const patch: Partial<RowValue> = {};\n for (const [name, fieldValue] of Object.entries(value)) {\n if (name !== this.schema.primaryKey) patch[name] = fieldValue as RowValue[string];\n }\n return patch;\n }\n\n private applySyncMessage(message: ChangeMessage<RowValue, number>): void {\n const key = this.primaryKeyFromMessage(message);\n const storedRow = this.rowIndex.lookup(key);\n if (message.type === 'delete') {\n if (storedRow !== undefined) this.deleteRaw(key);\n return;\n }\n\n if (storedRow !== undefined) {\n this.updateRaw(key, this.patchFromSyncValue(message.value));\n } else {\n this.insertRaw(message.value);\n }\n }\n\n private truncateFromSync(): void {\n const keys = [...this.keys()];\n for (const key of keys) this.deleteRaw(key);\n this.events.emit('truncate', { type: 'truncate', collection: this });\n }\n\n /**\n * Resolves with a Map snapshot of the collection once ready. After\n * the collection is ready this is equivalent to reading `state`\n * (still reuses the lazy cache).\n */\n async stateWhenReady(): Promise<Map<number, RowValue>> {\n await this.preload();\n return this.state;\n }\n\n /**\n * Resolves with a dense array snapshot once ready.\n */\n async toArrayWhenReady(): Promise<RowValue[]> {\n await this.preload();\n return this.toArray;\n }\n\n // ---------------------------------------------------------------------\n // Identity / utils / config accessors (@tanstack/db parity — B.5–B.7)\n // ---------------------------------------------------------------------\n\n /** Stable collection identifier. Matches @tanstack/db's `Collection.id`. */\n get id(): string {\n return this._id;\n }\n\n /**\n * Collection-scoped utility record. Callers can plumb helper\n * functions (e.g. `refetch`, `reset`, `prefetchPage`) via\n * `CollectionOptions.utils`. The getter returns the live record;\n * mutating it after construction is NOT recommended but not\n * forbidden (matches @tanstack/db).\n */\n get utils(): UtilsRecord {\n return this._utils;\n }\n\n /**\n * String collation config for orderBy on string columns. Matches\n * `@tanstack/db`'s `Collection.compareOptions`. Defaults to\n * `{ stringSort: 'lexical' }` when not configured.\n */\n get compareOptions(): StringCollationConfig {\n return this._compareOptions;\n }\n\n /**\n * Whether a sync-layer subset load is in flight. Always `false`\n * for in-memory collections (no subset loading). Present for\n * @tanstack/db parity; sync-backed collections override.\n */\n get isLoadingSubset(): boolean {\n return false;\n }\n\n /** Secondary indexes attached to this collection. */\n get indexes(): ReadonlyMap<number, IndexInterface<number>> {\n return this._indexes;\n }\n\n createIndex(\n callback: IndexExpressionCallback,\n options?: CollectionIndexOptions,\n ): IndexInterface<number> {\n const row = createSingleRowRefProxy<Record<string, unknown>>();\n const expression = toExpression(callback(row)) as BasicExpression;\n if (expression.type !== 'ref') {\n throw new ValidationError('createIndex callback must return a row field reference');\n }\n\n const id = ++this._nextIndexId;\n const IndexType = options?.indexType ?? this._config.defaultIndexType ?? BasicIndex;\n const index = new IndexType(id, expression, options?.name, options?.options) as IndexInterface<number>;\n index.build(this.entries());\n this._indexes.set(id, index);\n return index;\n }\n\n /**\n * Return the primary key value of a row-shaped item. Matches\n * `@tanstack/db`'s `Collection.getKeyFromItem(item)`. Reads the\n * schema's PK column from the given row.\n *\n * @throws ValidationError if the PK column is missing from `item`.\n */\n getKeyFromItem(item: Readonly<RowValue>): number {\n const pk = item[this.schema.primaryKey];\n if (pk === undefined || pk === null) {\n throw new ValidationError(\n `getKeyFromItem: item is missing primary-key column \"${this.schema.primaryKey}\"`,\n );\n }\n if (typeof pk !== 'number') {\n throw new ValidationError(\n `getKeyFromItem: primary key must be a number (got ${typeof pk})`,\n );\n }\n return pk;\n }\n\n /**\n * Validate a data record against the collection schema. Matches\n * `@tanstack/db`'s `Collection.validateData(data, type, key?)`.\n *\n * For `'insert'`: every column declared in the schema must be\n * present (or nullable-null) and typed correctly.\n * For `'update'`: only provided columns are checked; the PK column\n * must NOT appear in the patch.\n *\n * Returns the validated data (same shape as input on success).\n * Throws `ValidationError` on failure — matches the reference's\n * `TOutput | never` return shape.\n */\n validateData(\n data: unknown,\n type: 'insert' | 'update',\n _key?: number,\n ): RowValue {\n if (data === null || typeof data !== 'object') {\n throw new ValidationError(\n `validateData: expected object, got ${data === null ? 'null' : typeof data}`,\n );\n }\n const rec = data as Record<string, unknown>;\n // Shape-check against schema columns.\n if (type === 'insert') {\n for (const col of this.columnList) {\n const name = col.column.name;\n const val = rec[name];\n if (val === undefined) {\n // Treat explicit `undefined` as \"column missing\"; allow\n // nullable columns to be absent (coerced to null at insert\n // time). Non-nullable columns must be provided.\n if (!col.column.nullable) {\n throw new ValidationError(\n `validateData(insert): required column \"${name}\" missing`,\n );\n }\n }\n }\n } else {\n // Update: reject PK in patch.\n if (this.schema.primaryKey in rec) {\n throw new ValidationError(\n `validateData(update): cannot patch primary key \"${this.schema.primaryKey}\"`,\n );\n }\n for (const key of Object.keys(rec)) {\n if (!this.columns.has(key)) {\n throw new ValidationError(\n `validateData(update): unknown column \"${key}\"`,\n );\n }\n }\n }\n return rec as RowValue;\n }\n\n // ---------------------------------------------------------------------\n // Cleanup (@tanstack/db parity — B.8)\n // ---------------------------------------------------------------------\n\n /**\n * Release resources: detach every `subscribeChanges`/`on` listener,\n * drop cached state, clear the undo ring, transition status to\n * `'cleaned-up'`. Idempotent; subsequent mutations will still work\n * but no longer notify external subscribers.\n *\n * Matches `@tanstack/db`'s `Collection.cleanup()`. Async for\n * parity; the in-memory implementation completes after a single\n * microtask so `await cleanup()` returns on the next tick.\n */\n async cleanup(): Promise<void> {\n if (this._status === 'cleaned-up') return;\n const previousStatus = this._status;\n this._status = 'cleaned-up';\n\n // Detach sync source cleanup before clearing local event listeners.\n this.syncCleanup?.();\n this.syncCleanup = null;\n this.syncStarted = false;\n\n // Emit the terminal status events FIRST — before clearing\n // listeners — so observers see the transition.\n const ev: CollectionStatusChangeEvent = {\n type: 'status:change',\n collection: this,\n previousStatus,\n status: 'cleaned-up',\n };\n this.events.emit('status:change', ev);\n this.events.emit('status:cleaned-up', ev);\n\n // Now drop every event subscriber.\n this.events.clearAll();\n // The low-level ChangeEmitter has no bulk-clear; emptying the\n // internal Set is the cleanest path. Accessing the private\n // field is acceptable here — cleanup() is the sanctioned\n // lifecycle terminator.\n (this.emitter as unknown as { listeners: Set<unknown> }).listeners.clear();\n // Reset subscriber bookkeeping.\n this._subscriberCount = 0;\n // Drop cached views.\n this._stateCache = null;\n this._stateCacheVersion = -1;\n this._toArrayCache = null;\n this._toArrayCacheVersion = -1;\n\n // Resolve on the microtask boundary so awaiting callers don't\n // observe the transition synchronously (matches\n // @tanstack/db's async-cleanup contract).\n await Promise.resolve();\n }\n\n /**\n * Return true if the collection contains a live (non-soft-deleted)\n * row with the given primary key.\n */\n has(id: number): boolean {\n const row = this.rowIndex.lookup(id);\n if (row === undefined) return false;\n if (\n this.softDelete &&\n this.deletedColumn &&\n this.readBool(this.deletedColumn, row)\n ) {\n return false;\n }\n return true;\n }\n\n /**\n * Iterate primary keys of live rows in insertion order.\n *\n * Matches `Map.prototype.keys()` shape.\n */\n *keys(): IterableIterator<number> {\n for (const [pk, row] of this.rowIndex.entries()) {\n if (\n this.softDelete &&\n this.deletedColumn &&\n this.readBool(this.deletedColumn, row)\n ) {\n continue;\n }\n yield pk;\n }\n }\n\n /**\n * Iterate live row values. Identical to `rows()` with default\n * options — provided under the TanStack DB-compatible name.\n */\n *values(): IterableIterator<RowValue> {\n for (const [, row] of this.rowIndex.entries()) {\n if (\n this.softDelete &&\n this.deletedColumn &&\n this.readBool(this.deletedColumn, row)\n ) {\n continue;\n }\n yield this.snapshotRow(row);\n }\n }\n\n /**\n * Iterate `[pk, row]` tuples for live rows.\n *\n * Matches `Map.prototype.entries()` shape.\n */\n *entries(): IterableIterator<[number, RowValue]> {\n for (const [pk, row] of this.rowIndex.entries()) {\n if (\n this.softDelete &&\n this.deletedColumn &&\n this.readBool(this.deletedColumn, row)\n ) {\n continue;\n }\n yield [pk, this.snapshotRow(row)];\n }\n }\n\n /**\n * Apply `callback(value, key, index)` to every live row. `index` is\n * the 0-based position in the live sequence (not the underlying row\n * slot).\n */\n forEach(\n callback: (value: RowValue, key: number, index: number) => void,\n ): void {\n let i = 0;\n for (const [pk, row] of this.rowIndex.entries()) {\n if (\n this.softDelete &&\n this.deletedColumn &&\n this.readBool(this.deletedColumn, row)\n ) {\n continue;\n }\n callback(this.snapshotRow(row), pk, i++);\n }\n }\n\n /**\n * Like `Array.prototype.map`, but over live rows. Returns a dense\n * array. Matches `@tanstack/db` CollectionImpl.map.\n */\n map<U>(callback: (value: RowValue, key: number, index: number) => U): U[] {\n const out: U[] = [];\n let i = 0;\n for (const [pk, row] of this.rowIndex.entries()) {\n if (\n this.softDelete &&\n this.deletedColumn &&\n this.readBool(this.deletedColumn, row)\n ) {\n continue;\n }\n out.push(callback(this.snapshotRow(row), pk, i++));\n }\n return out;\n }\n\n /**\n * Map of live rows keyed by primary key. Materialized lazily on\n * first access and cached until the next mutation bumps\n * `globalVersion`.\n *\n * Reading `.state` N times between mutations builds the map once.\n * Never use it if you only need to iterate — `values()` / `rows()`\n * stream without materializing the Map.\n */\n /**\n * Lazily materialized snapshot of the live-row state as a\n * `Map<PK, row>`. Matches `@tanstack/db`'s `Collection.state` both\n * in shape and in semantics: the returned Map IS the internal\n * cache, not a clone — mutating it is undefined behavior (same\n * caveat as upstream). The cache is invalidated on every write,\n * so a fresh Map materializes lazily on the next read.\n *\n * The `Map` return type is widened (vs `ReadonlyMap`) for\n * TanStack parity; prefer `values()` / `entries()` / `has()` /\n * `get()` for mutation-proof access.\n */\n get state(): Map<number, RowValue> {\n if (\n this._stateCache !== null &&\n this._stateCacheVersion === this._globalVersion\n ) {\n return this._stateCache;\n }\n const m = new Map<number, RowValue>();\n for (const [pk, row] of this.rowIndex.entries()) {\n if (\n this.softDelete &&\n this.deletedColumn &&\n this.readBool(this.deletedColumn, row)\n ) {\n continue;\n }\n m.set(pk, this.snapshotRow(row));\n }\n this._stateCache = m;\n this._stateCacheVersion = this._globalVersion;\n return m;\n }\n\n /**\n * Dense array of live rows in insertion order. Materialized lazily\n * on first access and cached until the next mutation bumps\n * `globalVersion`.\n *\n * Matches `@tanstack/db`'s `Collection.toArray` shape and\n * semantics: the returned array IS the cache — mutating it is\n * undefined behavior. Prefer `values()` / `rows()` for iteration.\n *\n * Repeated reads between mutations are O(1).\n */\n get toArray(): RowValue[] {\n if (\n this._toArrayCache !== null &&\n this._toArrayCacheVersion === this._globalVersion\n ) {\n return this._toArrayCache;\n }\n const arr: RowValue[] = [];\n for (const [, row] of this.rowIndex.entries()) {\n if (\n this.softDelete &&\n this.deletedColumn &&\n this.readBool(this.deletedColumn, row)\n ) {\n continue;\n }\n arr.push(this.snapshotRow(row));\n }\n this._toArrayCache = arr;\n this._toArrayCacheVersion = this._globalVersion;\n return arr;\n }\n\n // ---------------------------------------------------------------------\n // Transactions / undo\n // ---------------------------------------------------------------------\n\n /** Take a mark; use with `rollback(mark)` to undo everything after. */\n beginTransaction(): number {\n return this.undo.mark();\n }\n\n /**\n * Roll back all mutations that happened at or after `mark`, newest-first.\n * Throws `UndoError` if the ring has wrapped past `mark`.\n */\n rollback(mark: number): void {\n const records = this.undo.drainSince(mark);\n const changes: ChangeMessage<RowValue, number>[] = [];\n for (const rec of records) {\n changes.push(this.rollbackRecordToChange(rec));\n this.applyInverse(rec.op, rec.rowId, rec.row, rec.prev, rec.snapshot);\n }\n if (records.length > 0) {\n // Coalesce into a single broad event plus decomposed TanStack changes.\n this.emitter.emit({\n op: 'rollback',\n rowId: records[0]!.rowId,\n columns: 'all',\n globalVersion: this._globalVersion,\n changes: changes.reverse(),\n });\n }\n }\n\n // ---------------------------------------------------------------------\n // Compaction\n // ---------------------------------------------------------------------\n\n /**\n * Compact the collection:\n * 1. Drop any soft-deleted rows (they remain in the segment as zombies\n * until compact runs).\n * 2. Re-pack remaining live rows into a dense [0, liveCount) row slot\n * range, preserving their relative order by existing row index.\n * 3. Rebuild utf8/binary values heaps, discarding bytes that are not\n * referenced by a live row (reclaims space leaked by prior updates).\n * 4. Invalidate the undo ring (old row indices become meaningless).\n * 5. Bump all column versions + emit a single 'compact' ChangeEvent so\n * reactive queries recompute.\n *\n * Returns `{ reclaimedRows, reclaimedHeapBytes }` for observability.\n */\n compact(): { reclaimedRows: number; reclaimedHeapBytes: number } {\n // 1. Gather live rows sorted by current row index so output order is\n // stable and matches existing iteration order.\n const live: Array<{ id: number; oldRow: number }> = [];\n for (const [id, oldRow] of this.rowIndex.entries()) {\n if (\n this.softDelete &&\n this.deletedColumn &&\n this.readBool(this.deletedColumn, oldRow)\n ) {\n continue;\n }\n live.push({ id, oldRow });\n }\n live.sort((a, b) => a.oldRow - b.oldRow);\n\n const liveCount = live.length;\n const reclaimedRows = this.rowCursor - liveCount;\n\n // 2. Enumerate every leaf-or-list column buffer that needs shuffling.\n // Struct columns contribute their field buffers (plus their own\n // parent validity); list columns contribute themselves (we\n // rebuild the child heap in step 5).\n const leafCols: ColumnBuffer[] = [];\n const collectLeaves = (col: ColumnBuffer): void => {\n if (col.column.typeCode === ColumnTypeCode.Struct) {\n // Struct parent has validity but no primary/values — only its\n // fields carry storage.\n for (const f of col.structFields ?? []) collectLeaves(f);\n } else {\n leafCols.push(col);\n }\n };\n for (const col of this.columnList) collectLeaves(col);\n\n // Prepare varlen scratch buffers (utf8 + binary only — list has its\n // own path below).\n const varlenCols = leafCols.filter(\n (c) =>\n c.column.typeCode === ColumnTypeCode.Utf8 ||\n c.column.typeCode === ColumnTypeCode.Binary,\n );\n const heapBytesBefore = new Map<ColumnBuffer, number>();\n const scratch = new Map<\n ColumnBuffer,\n { ranges: Int32Array; bytes: Uint8Array; used: number }\n >();\n for (const col of varlenCols) {\n heapBytesBefore.set(col, col.heap!.used);\n scratch.set(col, {\n ranges: new Int32Array(liveCount * 2),\n bytes: new Uint8Array(col.heap!.capacity),\n used: 0,\n });\n }\n\n // Prepare fresh child buffers for every list column. We build into\n // them as we shuffle, and swap them in after the pass completes.\n const listCols = leafCols.filter(\n (c) => c.column.typeCode === ColumnTypeCode.List,\n );\n const listScratch = new Map<\n ColumnBuffer,\n { ranges: Int32Array; child: ListChildState; childBytesBefore: number }\n >();\n for (const col of listCols) {\n const oldChild = col.list!;\n const childBytesBefore = oldChild.heap\n ? oldChild.heap.used\n : this.listChildTypedBytes(oldChild);\n listScratch.set(col, {\n ranges: new Int32Array(liveCount * 2),\n child: new ListChildState(\n oldChild.child,\n Math.max(16, oldChild.cursor),\n ),\n childBytesBefore,\n });\n }\n\n // Also need to shuffle validity bits of struct *parents* (their\n // field buffers are already in `leafCols`).\n const structParents: ColumnBuffer[] = this.columnList.filter(\n (c) =>\n c.column.typeCode === ColumnTypeCode.Struct && c.validity !== null,\n );\n\n // 3. Shuffle every leaf column into its new dense row slots.\n for (let newRow = 0; newRow < liveCount; newRow++) {\n const oldRow = live[newRow]!.oldRow;\n // Struct parent validity bits first.\n for (const sp of structParents) {\n const wasValid = getValidity(sp.validity!, oldRow);\n setValidity(sp.validity!, newRow, wasValid);\n }\n for (const col of leafCols) {\n const wasValid = col.validity ? getValidity(col.validity, oldRow) : true;\n if (col.validity) setValidity(col.validity, newRow, wasValid);\n\n const tc = col.column.typeCode;\n if (tc === ColumnTypeCode.Utf8 || tc === ColumnTypeCode.Binary) {\n const s = scratch.get(col)!;\n if (!wasValid) {\n s.ranges[newRow * 2] = 0;\n s.ranges[newRow * 2 + 1] = 0;\n continue;\n }\n const oldRanges = col.values as Int32Array;\n const start = oldRanges[oldRow * 2] ?? 0;\n const end = oldRanges[oldRow * 2 + 1] ?? 0;\n const len = end - start;\n if (len > 0) {\n col.heap!.copyInto(start, end, s.bytes, s.used);\n }\n s.ranges[newRow * 2] = s.used;\n s.ranges[newRow * 2 + 1] = s.used + len;\n s.used += len;\n } else if (tc === ColumnTypeCode.List) {\n const s = listScratch.get(col)!;\n if (!wasValid) {\n s.ranges[newRow * 2] = 0;\n s.ranges[newRow * 2 + 1] = 0;\n continue;\n }\n // Read list elements from the *old* child at the old range,\n // write them into the scratch child buffer.\n const oldRanges = col.values as Int32Array;\n const start = oldRanges[oldRow * 2] ?? 0;\n const end = oldRanges[oldRow * 2 + 1] ?? 0;\n const n = end - start;\n s.child.ensureCapacity(n);\n const writeCursorBefore = s.child.cursor;\n for (let i = 0; i < n; i++) {\n const v = this.readListElement(col.list!, start + i);\n this.writeListElement(s.child, writeCursorBefore + i, v);\n }\n s.child.cursor += n;\n s.ranges[newRow * 2] = writeCursorBefore;\n s.ranges[newRow * 2 + 1] = writeCursorBefore + n;\n } else if (tc === ColumnTypeCode.Point) {\n if (!wasValid) {\n col.point!.setNull(newRow);\n continue;\n }\n col.point!.copy(oldRow, newRow);\n } else if (tc === ColumnTypeCode.LineString) {\n if (!wasValid) {\n col.lineString!.setNull(newRow);\n continue;\n }\n col.lineString!.copy(oldRow, newRow);\n } else if (tc === ColumnTypeCode.Polygon) {\n if (!wasValid) {\n col.polygon!.setNull(newRow);\n continue;\n }\n col.polygon!.copy(oldRow, newRow);\n } else if (tc === ColumnTypeCode.Int64 || tc === ColumnTypeCode.UInt64) {\n const vals = col.values as BigInt64Array;\n vals[newRow] = vals[oldRow] ?? 0n;\n } else {\n type Small = Exclude<\n typeof col.values,\n BigInt64Array | BigUint64Array\n >;\n const vals = col.values as Small;\n vals[newRow] = vals[oldRow] ?? 0;\n }\n }\n }\n\n // 4. Clear trailing validity bits beyond the new dense range.\n for (const sp of structParents) {\n for (let r = liveCount; r < this.rowCursor; r++) {\n setValidity(sp.validity!, r, false);\n }\n }\n for (const col of leafCols) {\n if (col.validity) {\n for (let r = liveCount; r < this.rowCursor; r++) {\n setValidity(col.validity, r, false);\n }\n }\n }\n\n // 5. Commit scratch buffers (utf8/binary + list).\n let reclaimedHeapBytes = 0;\n for (const col of varlenCols) {\n const s = scratch.get(col)!;\n const destRanges = col.values as Int32Array;\n destRanges.set(s.ranges);\n destRanges.fill(0, liveCount * 2);\n col.heap!.rewrite(s.bytes, s.used);\n const before = heapBytesBefore.get(col)!;\n reclaimedHeapBytes += Math.max(0, before - s.used);\n }\n for (const col of listCols) {\n const s = listScratch.get(col)!;\n const destRanges = col.values as Int32Array;\n destRanges.set(s.ranges);\n destRanges.fill(0, liveCount * 2);\n const bytesAfter = s.child.heap\n ? s.child.heap.used\n : this.listChildTypedBytes(s.child);\n reclaimedHeapBytes += Math.max(0, s.childBytesBefore - bytesAfter);\n col.list = s.child;\n }\n\n // 6. Rebuild rowIndex + rowCursor.\n this.rowIndex.clear();\n for (let newRow = 0; newRow < liveCount; newRow++) {\n this.rowIndex.insert(live[newRow]!.id, newRow);\n }\n this.rowCursor = liveCount;\n this.rebuildIndexes();\n\n // 7. Invalidate undo ring; old row indices are stale.\n this.undo.clear();\n\n // 8. Bump all column versions + global version + emit.\n const bumpVersions = (col: ColumnBuffer): void => {\n col.version = (col.version + 1) >>> 0;\n if (col.structFields) {\n for (const f of col.structFields) bumpVersions(f);\n }\n };\n for (const col of this.columnList) bumpVersions(col);\n this.rebuildSpatialIndexes();\n this._globalVersion++;\n this.emitter.emit({\n op: 'compact',\n rowId: 0,\n columns: 'all',\n globalVersion: this._globalVersion,\n });\n\n return { reclaimedRows, reclaimedHeapBytes };\n }\n\n _internalConfirmSyncedMutations(\n mutations: Array<PendingMutation<RowValue>>,\n ): void {\n for (const mutation of mutations) {\n if (mutation.type !== 'update') continue;\n const key = Number(mutation.key);\n const row = this.rowIndex.lookup(key);\n if (row === undefined) continue;\n const value = this.snapshotRow(row);\n this._globalVersion++;\n this.emitter.emit({\n op: 'update',\n rowId: key,\n columns: 'all',\n globalVersion: this._globalVersion,\n value,\n previousValue: value,\n });\n }\n }\n\n private rollbackRecordToChange(\n rec: UndoRecord,\n ): ChangeMessage<RowValue, number> {\n if (rec.op === 'insert') {\n return {\n key: rec.rowId,\n value: this.snapshotRow(rec.row),\n type: 'delete',\n };\n }\n if (rec.op === 'update') {\n const beforeRollback = this.snapshotRow(rec.row);\n return {\n key: rec.rowId,\n value: { ...beforeRollback, ...rec.prev } as RowValue,\n previousValue: beforeRollback,\n type: 'update',\n };\n }\n return {\n key: rec.rowId,\n value: (rec.snapshot ?? { ...this.snapshotRow(rec.row), ...rec.prev }) as RowValue,\n type: 'insert',\n };\n }\n\n private applyInverse(\n op: UndoOp,\n id: number,\n row: number,\n prev: Readonly<Record<string, unknown>>,\n snapshot?: Readonly<Record<string, unknown>>,\n ): void {\n switch (op) {\n case 'insert': {\n // Undo insert → remove from index. Row slot stays (leaked in Phase 1).\n this.removeFromIndexes(id, this.snapshotRow(row));\n this.markSpatialRowDeleted(row);\n this.rowIndex.remove(id);\n // Do NOT decrement rowCursor: safer for concurrent readers even\n // though Phase 1 is single-threaded.\n for (const col of this.columnList) col.version = (col.version + 1) >>> 0;\n this._globalVersion++;\n return;\n }\n case 'update': {\n const before = this.snapshotRow(row);\n const touched = new Set<string>();\n for (const [name, value] of Object.entries(prev)) {\n const col = this.columns.get(name)!;\n this.writeCell(col, row, value as RowValue[string]);\n col.version = (col.version + 1) >>> 0;\n touched.add(name);\n }\n this.markSpatialRowDirty(row, touched);\n this.updateIndexes(id, before, this.snapshotRow(row));\n this._globalVersion++;\n return;\n }\n case 'delete': {\n if (this.softDelete && this.deletedColumn) {\n const was = (prev.__deleted as boolean | null | undefined) ?? false;\n this.writeCell(this.deletedColumn, row, was);\n this.deletedColumn.version = (this.deletedColumn.version + 1) >>> 0;\n } else if (snapshot) {\n // Re-insert the prior snapshot into its original row slot.\n for (const col of this.columnList) {\n const v = snapshot[col.column.name];\n if (v !== undefined) {\n this.writeCell(col, row, v as RowValue[string]);\n col.version = (col.version + 1) >>> 0;\n }\n }\n this.rowIndex.insert(id, row);\n }\n this.markSpatialRowDirty(row);\n this.addToIndexes(id, this.snapshotRow(row));\n this._globalVersion++;\n return;\n }\n }\n }\n\n private initializeSpatialIndexes(config?: SpatialIndexConfig): void {\n if (config === undefined) return;\n const configs = Array.isArray(config) ? config : [config];\n for (const spatial of configs) {\n if (spatial.type !== 'rtree') {\n throw new ValidationError(`unsupported spatial index type \"${spatial.type}\"`);\n }\n const col = this.columns.get(spatial.column);\n if (!col) throw new ValidationError(`unknown spatial index column \"${spatial.column}\"`);\n const bboxCache = this.spatialBboxCache(col);\n if (bboxCache === null) {\n throw new ValidationError(\n `spatial index column \"${spatial.column}\" must be a point, linestring, or polygon column`,\n );\n }\n const rowOrdinals: number[] = [];\n for (const row of this.liveRowOrdinalsForSpatialIndex()) rowOrdinals.push(row);\n this._spatialIndexes.set(\n spatial.column,\n buildSpatialIndex(Uint32Array.from(rowOrdinals), bboxCache),\n );\n }\n }\n\n private spatialBboxCache(col: ColumnBuffer): Float64Array | null {\n return col.point?.bboxCache ?? col.lineString?.bboxCache ?? col.polygon?.bboxCache ?? null;\n }\n\n private *liveRowOrdinalsForSpatialIndex(): IterableIterator<number> {\n const del = this.deletedColumn;\n const soft = this.softDelete;\n for (const [, row] of this.rowIndex.entries()) {\n if (soft && del && this.readBool(del, row)) continue;\n yield row;\n }\n }\n\n private markSpatialRowDirty(\n row: number,\n touchedColumns?: ReadonlySet<string> | 'all',\n ): void {\n if (this._spatialIndexes.size === 0) return;\n const isDeleted =\n this.softDelete &&\n this.deletedColumn !== null &&\n this.readBool(this.deletedColumn, row);\n for (const [column, state] of this._spatialIndexes) {\n if (\n touchedColumns !== undefined &&\n touchedColumns !== 'all' &&\n !touchedColumns.has(column) &&\n !(this.deletedColumn && touchedColumns.has(this.deletedColumn.column.name))\n ) {\n continue;\n }\n if (isDeleted) {\n state.deletedRows.add(row);\n state.dirtyRows.delete(row);\n } else {\n state.deletedRows.delete(row);\n state.dirtyRows.add(row);\n const col = this.columns.get(column);\n const bboxCache = col ? this.spatialBboxCache(col) : null;\n if (bboxCache !== null && state.dirtyRows.size >= 1_024) {\n flushSpatialIndexDirty(state, bboxCache);\n if (state.segments.length >= 64) {\n this.rebuildSpatialIndexColumn(column, state, bboxCache);\n }\n }\n }\n }\n }\n\n private markSpatialRowDeleted(row: number): void {\n for (const state of this._spatialIndexes.values()) {\n state.deletedRows.add(row);\n state.dirtyRows.delete(row);\n }\n }\n\n private rebuildSpatialIndexes(): void {\n for (const [column, state] of this._spatialIndexes) {\n const col = this.columns.get(column);\n const bboxCache = col ? this.spatialBboxCache(col) : null;\n if (bboxCache === null) continue;\n this.rebuildSpatialIndexColumn(column, state, bboxCache);\n }\n }\n\n private rebuildSpatialIndexColumn(\n column: string,\n state: SpatialIndexState,\n bboxCache: Float64Array,\n ): SpatialIndexState {\n const rowOrdinals = Uint32Array.from(this.liveRowOrdinalsForSpatialIndex());\n const rebuilt = buildSpatialIndex(rowOrdinals, bboxCache, {\n indexVersion: state.indexVersion + 1,\n bboxCacheVersion: state.bboxCacheVersion + 1,\n });\n this._spatialIndexes.set(column, rebuilt);\n return rebuilt;\n }\n\n private addToIndexes(id: number, row: RowValue): void {\n if (this.isSoftDeletedValue(row)) return;\n for (const index of this._indexes.values()) index.add(id, row);\n }\n\n private removeFromIndexes(id: number, row: RowValue): void {\n if (this.isSoftDeletedValue(row)) return;\n for (const index of this._indexes.values()) index.remove(id, row);\n }\n\n private updateIndexes(id: number, before: RowValue, after: RowValue): void {\n const wasIndexed = !this.isSoftDeletedValue(before);\n const isIndexed = !this.isSoftDeletedValue(after);\n for (const index of this._indexes.values()) {\n if (wasIndexed && isIndexed) index.update(id, before, after);\n else if (wasIndexed) index.remove(id, before);\n else if (isIndexed) index.add(id, after);\n }\n }\n\n private rebuildIndexes(): void {\n for (const index of this._indexes.values()) index.build(this.entries());\n }\n\n private isSoftDeletedValue(row: RowValue): boolean {\n return this.softDelete && row.__deleted === true;\n }\n\n // ---------------------------------------------------------------------\n // Low-level cell I/O\n // ---------------------------------------------------------------------\n\n private writeCell(col: ColumnBuffer, row: number, value: unknown): void {\n if (value === null || value === undefined) {\n if (!col.column.nullable) {\n throw new ValidationError(\n `column \"${col.column.name}\" is not nullable`,\n );\n }\n setValidity(col.validity!, row, false);\n if (col.column.typeCode === ColumnTypeCode.Point) col.point!.setNull(row);\n if (col.column.typeCode === ColumnTypeCode.LineString) {\n col.lineString!.setNull(row);\n }\n if (col.column.typeCode === ColumnTypeCode.Polygon) {\n col.polygon!.setNull(row);\n }\n return;\n }\n if (col.validity) setValidity(col.validity, row, true);\n\n const code = col.column.typeCode;\n if (code === ColumnTypeCode.Utf8) {\n if (typeof value !== 'string') {\n throw new ValidationError(\n `column \"${col.column.name}\" expects string, got ${typeof value}`,\n );\n }\n const range = col.heap!.append(value);\n const ranges = col.values as Int32Array;\n ranges[row * 2] = range.start;\n ranges[row * 2 + 1] = range.end;\n return;\n }\n if (code === ColumnTypeCode.Binary) {\n if (!(value instanceof Uint8Array)) {\n throw new ValidationError(\n `column \"${col.column.name}\" expects Uint8Array, got ${typeof value}`,\n );\n }\n const range = col.heap!.appendBytes(value);\n const ranges = col.values as Int32Array;\n ranges[row * 2] = range.start;\n ranges[row * 2 + 1] = range.end;\n return;\n }\n if (code === ColumnTypeCode.DictUtf8) {\n if (typeof value !== 'string') {\n throw new ValidationError(\n `column \"${col.column.name}\" expects string, got ${typeof value}`,\n );\n }\n const codeVal = col.dictionary!.intern(value);\n (col.values as Uint32Array)[row] = codeVal;\n return;\n }\n if (code === ColumnTypeCode.List) {\n if (!Array.isArray(value)) {\n throw new ValidationError(\n `column \"${col.column.name}\" expects an array, got ${typeof value}`,\n );\n }\n this.writeListCell(col, row, value as readonly unknown[]);\n return;\n }\n if (code === ColumnTypeCode.Struct) {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw new ValidationError(\n `column \"${col.column.name}\" expects an object, got ${typeof value}`,\n );\n }\n this.writeStructCell(col, row, value as Record<string, unknown>);\n return;\n }\n if (code === ColumnTypeCode.Point) {\n col.point!.set(row, value as Point);\n return;\n }\n if (code === ColumnTypeCode.LineString) {\n col.lineString!.set(row, value as LineString);\n return;\n }\n if (code === ColumnTypeCode.Polygon) {\n col.polygon!.set(row, value as Polygon);\n return;\n }\n if (code === ColumnTypeCode.Bool) {\n // Phase 1 stores bool as u8 (0/1). Packed bitmap can come later.\n const v = value === true ? 1 : value === false ? 0 : this.coerceBoolNumber(value, col.column.name);\n (col.values as Uint8Array)[row] = v;\n return;\n }\n if (code === ColumnTypeCode.Int64 || code === ColumnTypeCode.UInt64) {\n if (typeof value === 'bigint') {\n (col.values as BigInt64Array)[row] = value;\n } else if (typeof value === 'number' && Number.isInteger(value)) {\n (col.values as BigInt64Array)[row] = BigInt(value);\n } else {\n throw new ValidationError(\n `column \"${col.column.name}\" expects bigint, got ${typeof value}`,\n );\n }\n return;\n }\n if (typeof value !== 'number') {\n throw new ValidationError(\n `column \"${col.column.name}\" expects number, got ${typeof value}`,\n );\n }\n (col.values as Exclude<TypedValueArray, BigInt64Array | BigUint64Array>)[row] = value;\n }\n\n private readCell(col: ColumnBuffer, row: number): RowValue[string] {\n if (col.validity && !getValidity(col.validity, row)) return null;\n const code = col.column.typeCode;\n if (code === ColumnTypeCode.Utf8) {\n const ranges = col.values as Int32Array;\n const start = ranges[row * 2] ?? 0;\n const end = ranges[row * 2 + 1] ?? 0;\n return col.heap!.read(start, end);\n }\n if (code === ColumnTypeCode.Binary) {\n const ranges = col.values as Int32Array;\n const start = ranges[row * 2] ?? 0;\n const end = ranges[row * 2 + 1] ?? 0;\n return col.heap!.readBytes(start, end);\n }\n if (code === ColumnTypeCode.DictUtf8) {\n const codeVal = (col.values as Uint32Array)[row] ?? 0;\n return col.dictionary!.decode(codeVal);\n }\n if (code === ColumnTypeCode.List) {\n return this.readListCell(col, row);\n }\n if (code === ColumnTypeCode.Struct) {\n return this.readStructCell(col, row);\n }\n if (code === ColumnTypeCode.Point) {\n return col.point!.get(row);\n }\n if (code === ColumnTypeCode.LineString) {\n return col.lineString!.get(row);\n }\n if (code === ColumnTypeCode.Polygon) {\n return col.polygon!.get(row);\n }\n if (code === ColumnTypeCode.Bool) {\n return ((col.values as Uint8Array)[row] ?? 0) !== 0;\n }\n if (code === ColumnTypeCode.Int64 || code === ColumnTypeCode.UInt64) {\n return (col.values as BigInt64Array)[row] ?? 0n;\n }\n return (col.values as Exclude<TypedValueArray, BigInt64Array | BigUint64Array>)[row] ?? 0;\n }\n\n private readBool(col: ColumnBuffer, row: number): boolean {\n if (col.column.typeCode !== ColumnTypeCode.Bool) {\n throw new ValidationError(`column \"${col.column.name}\" is not bool`);\n }\n if (col.validity && !getValidity(col.validity, row)) return false;\n return ((col.values as Uint8Array)[row] ?? 0) !== 0;\n }\n\n // -------------------- List cell I/O --------------------\n\n private writeListCell(\n col: ColumnBuffer,\n row: number,\n value: readonly unknown[],\n ): void {\n const listState = col.list!;\n const n = value.length;\n listState.ensureCapacity(n);\n const startElement = listState.cursor;\n for (let i = 0; i < n; i++) {\n this.writeListElement(listState, startElement + i, value[i]);\n }\n listState.cursor += n;\n listState.version = (listState.version + 1) >>> 0;\n const ranges = col.values as Int32Array;\n ranges[row * 2] = startElement;\n ranges[row * 2 + 1] = startElement + n;\n }\n\n private writeListElement(\n state: ListChildState,\n element: number,\n value: unknown,\n ): void {\n const code = state.child.typeCode;\n if (value === null || value === undefined) {\n if (!state.child.nullable) {\n throw new ValidationError(\n `list child \"${state.child.name}\" does not allow null elements`,\n );\n }\n setValidity(state.validity!, element, false);\n // Leave slot bytes untouched; readers short-circuit on validity.\n return;\n }\n if (state.validity) setValidity(state.validity, element, true);\n\n if (code === ColumnTypeCode.Utf8) {\n if (typeof value !== 'string') {\n throw new ValidationError(\n `list<utf8> element expects string, got ${typeof value}`,\n );\n }\n const range = state.heap!.append(value);\n const ranges = state.values as Int32Array;\n ranges[element * 2] = range.start;\n ranges[element * 2 + 1] = range.end;\n return;\n }\n if (code === ColumnTypeCode.Binary) {\n if (!(value instanceof Uint8Array)) {\n throw new ValidationError(\n `list<binary> element expects Uint8Array`,\n );\n }\n const range = state.heap!.appendBytes(value);\n const ranges = state.values as Int32Array;\n ranges[element * 2] = range.start;\n ranges[element * 2 + 1] = range.end;\n return;\n }\n if (code === ColumnTypeCode.DictUtf8) {\n if (typeof value !== 'string') {\n throw new ValidationError(\n `list<dict_utf8> element expects string, got ${typeof value}`,\n );\n }\n (state.values as Uint32Array)[element] = state.dictionary!.intern(value);\n return;\n }\n if (code === ColumnTypeCode.Bool) {\n const v =\n value === true ? 1 : value === false ? 0 : this.coerceBoolNumber(value, state.child.name);\n (state.values as Uint8Array)[element] = v;\n return;\n }\n if (code === ColumnTypeCode.Int64 || code === ColumnTypeCode.UInt64) {\n if (typeof value === 'bigint') {\n (state.values as BigInt64Array)[element] = value;\n } else if (typeof value === 'number' && Number.isInteger(value)) {\n (state.values as BigInt64Array)[element] = BigInt(value);\n } else {\n throw new ValidationError(\n `list<${state.child.type}> element expects bigint`,\n );\n }\n return;\n }\n if (typeof value !== 'number') {\n throw new ValidationError(\n `list<${state.child.type}> element expects number, got ${typeof value}`,\n );\n }\n (state.values as Exclude<ListChildState['values'], BigInt64Array | BigUint64Array>)[\n element\n ] = value;\n }\n\n private readListCell(col: ColumnBuffer, row: number): readonly unknown[] {\n const ranges = col.values as Int32Array;\n const start = ranges[row * 2] ?? 0;\n const end = ranges[row * 2 + 1] ?? 0;\n const state = col.list!;\n const n = end - start;\n const out = new Array<unknown>(n);\n for (let i = 0; i < n; i++) {\n out[i] = this.readListElement(state, start + i);\n }\n return out;\n }\n\n private listChildTypedBytes(state: ListChildState): number {\n // Approximate byte size of the child's currently-used primary slots,\n // ignoring the heap (counted separately). For utf8/binary children\n // the typed array is Int32Array of range pairs → cursor * 8 bytes;\n // otherwise cursor * element byte width.\n const code = state.child.typeCode;\n const perElement =\n code === ColumnTypeCode.Utf8 || code === ColumnTypeCode.Binary\n ? 8\n : state.child.byteWidth;\n return state.cursor * perElement;\n }\n\n private readListElement(state: ListChildState, element: number): unknown {\n if (state.validity && !getValidity(state.validity, element)) return null;\n const code = state.child.typeCode;\n if (code === ColumnTypeCode.Utf8) {\n const ranges = state.values as Int32Array;\n const s = ranges[element * 2] ?? 0;\n const e = ranges[element * 2 + 1] ?? 0;\n return state.heap!.read(s, e);\n }\n if (code === ColumnTypeCode.Binary) {\n const ranges = state.values as Int32Array;\n const s = ranges[element * 2] ?? 0;\n const e = ranges[element * 2 + 1] ?? 0;\n return state.heap!.readBytes(s, e);\n }\n if (code === ColumnTypeCode.DictUtf8) {\n return state.dictionary!.decode((state.values as Uint32Array)[element] ?? 0);\n }\n if (code === ColumnTypeCode.Bool) {\n return ((state.values as Uint8Array)[element] ?? 0) !== 0;\n }\n if (code === ColumnTypeCode.Int64 || code === ColumnTypeCode.UInt64) {\n return (state.values as BigInt64Array)[element] ?? 0n;\n }\n return (state.values as Exclude<ListChildState['values'], BigInt64Array | BigUint64Array>)[element] ?? 0;\n }\n\n // -------------------- Struct cell I/O --------------------\n\n private writeStructCell(\n col: ColumnBuffer,\n row: number,\n value: Record<string, unknown>,\n ): void {\n const fields = col.structFieldsByName!;\n // Enforce shape: every declared field must be present; unknown\n // fields are rejected so typos surface early. Nulls are fine when\n // the field is nullable.\n for (const [key] of Object.entries(value)) {\n if (!fields.has(key)) {\n throw new ValidationError(\n `unknown field \"${key}\" in struct \"${col.column.name}\"`,\n );\n }\n }\n for (const [name, fb] of fields) {\n const v = value[name];\n if (v === undefined) {\n if (!fb.column.nullable) {\n throw new ValidationError(\n `struct \"${col.column.name}\" field \"${name}\" is required`,\n );\n }\n this.writeCell(fb, row, null);\n } else {\n this.writeCell(fb, row, v as RowValue[string]);\n }\n fb.version = (fb.version + 1) >>> 0;\n }\n }\n\n private readStructCell(col: ColumnBuffer, row: number): Record<string, unknown> {\n const fields = col.structFieldsByName!;\n const out: Record<string, unknown> = {};\n for (const [name, fb] of fields) {\n out[name] = this.readCell(fb, row);\n }\n return out;\n }\n\n private snapshotRow(row: number): RowValue {\n const out: RowValue = {};\n for (const col of this.columnList) {\n out[col.column.name] = this.readCell(col, row);\n }\n return out;\n }\n\n private coerceUint32(value: unknown, field: string): number {\n if (typeof value !== 'number' || !Number.isInteger(value) || value < 0 || value > 0xffffffff) {\n throw new ValidationError(`\"${field}\" must be a uint32, got ${String(value)}`);\n }\n return value >>> 0;\n }\n\n private coerceBoolNumber(value: unknown, field: string): number {\n if (typeof value === 'number' && (value === 0 || value === 1)) return value;\n throw new ValidationError(`\"${field}\" expects boolean, got ${String(value)}`);\n }\n}\n\n// -----------------------------------------------------------------------\n// helpers\n// -----------------------------------------------------------------------\n\nfunction bitmapBytes(capacity: number): number {\n return (capacity + 7) >>> 3;\n}\n\n/**\n * Return a freshly-allocated `Uint8Array` copy of the used region of a\n * column's primary buffer. Fixed-width: `rowCursor * byteWidth`.\n * Utf8/Binary/List/LineString/Polygon: `rowCursor * 8` (2 i32 offsets per row).\n * Dict_utf8: `rowCursor * 4`.\n */\nfunction extractPrimaryBytes(\n col: ColumnBuffer,\n rowCursor: number,\n): Uint8Array {\n const tc = col.column.typeCode;\n if (tc === ColumnTypeCode.Struct) return new Uint8Array(0);\n let byteLength: number;\n if (\n tc === ColumnTypeCode.Utf8 ||\n tc === ColumnTypeCode.Binary ||\n tc === ColumnTypeCode.List ||\n tc === ColumnTypeCode.LineString ||\n tc === ColumnTypeCode.Polygon\n ) {\n byteLength = rowCursor * 8;\n } else {\n byteLength = rowCursor * col.column.byteWidth;\n }\n const values = col.values;\n const src = new Uint8Array(values.buffer, values.byteOffset, values.byteLength);\n return src.slice(0, byteLength);\n}\n\n/**\n * Build a TreeView for a list column's child. The child lives in JS\n * heap (ListChildState) and its typed-array is used up to `cursor`\n * elements. For utf8/binary child the typed-array length counts\n * ranged-offset pairs (×2 per element); for other child types it is\n * one slot per element. We slice the underlying bytes accordingly.\n */\nfunction buildListChildTreeView(\n parentName: string,\n state: ListChildState,\n): TreeView {\n const child = state.child;\n const tc = child.typeCode;\n const elementCount = state.cursor;\n const perElement =\n tc === ColumnTypeCode.Utf8 || tc === ColumnTypeCode.Binary ? 8 : child.byteWidth;\n const primaryBytes = elementCount * perElement;\n const src = new Uint8Array(\n state.values.buffer,\n state.values.byteOffset,\n state.values.byteLength,\n );\n const primary = src.slice(0, primaryBytes);\n const validity = state.validity\n ? state.validity.slice(0, (elementCount + 7) >>> 3)\n : null;\n const heap = state.heap ? state.heap.rawBytes.slice(0, state.heap.used) : null;\n const dictionaryEntries = state.dictionary\n ? [...state.dictionary.entries()].map(([, s]) => s)\n : null;\n return {\n name: `${parentName}.items`,\n type: child.type,\n typeCode: tc,\n nullable: child.nullable,\n validity,\n primaryBuffer: primary,\n heap,\n dictionaryEntries,\n };\n}\n\nfunction setValidity(bitmap: Uint8Array, row: number, valid: boolean): void {\n const byte = row >>> 3;\n const bit = 1 << (row & 7);\n const cur = bitmap[byte] ?? 0;\n bitmap[byte] = valid ? (cur | bit) & 0xff : (cur & ~bit) & 0xff;\n}\n\nfunction getValidity(bitmap: Uint8Array, row: number): boolean {\n const byte = row >>> 3;\n const bit = 1 << (row & 7);\n return ((bitmap[byte] ?? 0) & bit) !== 0;\n}\n\nfunction createTypedView(\n code: ColumnTypeCode,\n buffer: ArrayBufferLike,\n byteOffset: number,\n length: number,\n): TypedValueArray {\n switch (code) {\n case ColumnTypeCode.Bool:\n case ColumnTypeCode.UInt8:\n return new Uint8Array(buffer, byteOffset, length);\n case ColumnTypeCode.Int8:\n return new Int8Array(buffer, byteOffset, length);\n case ColumnTypeCode.Int16:\n return new Int16Array(buffer, byteOffset, length);\n case ColumnTypeCode.UInt16:\n return new Uint16Array(buffer, byteOffset, length);\n case ColumnTypeCode.Int32:\n return new Int32Array(buffer, byteOffset, length);\n case ColumnTypeCode.UInt32:\n return new Uint32Array(buffer, byteOffset, length);\n case ColumnTypeCode.Float32:\n return new Float32Array(buffer, byteOffset, length);\n case ColumnTypeCode.Float64:\n return new Float64Array(buffer, byteOffset, length);\n case ColumnTypeCode.Int64:\n return new BigInt64Array(buffer, byteOffset, length);\n case ColumnTypeCode.UInt64:\n return new BigUint64Array(buffer, byteOffset, length);\n case ColumnTypeCode.Utf8:\n case ColumnTypeCode.Binary:\n case ColumnTypeCode.DictUtf8:\n case ColumnTypeCode.List:\n case ColumnTypeCode.Struct:\n case ColumnTypeCode.Point:\n case ColumnTypeCode.LineString:\n case ColumnTypeCode.Polygon:\n // These types go through dedicated allocation paths in Collection.create\n // and never flow through createTypedView.\n throw new Error(`createTypedView called with non-primitive code ${code}`);\n }\n}\n\n// Re-export type for public API consumers.\nexport type { ColumnTypeName };\n","/**\n * `createCollection` — `@tanstack/db`-compatible top-level factory.\n *\n * Mirrors the shape of `@tanstack/db`'s `createCollection(options)`\n * but adapts it to ArrowBase's columnar store:\n *\n * - `schema` must be a `CompiledSchema` (Layer C will accept\n * `StandardSchemaV1` and auto-compile).\n * - `capacity` is required (ArrowBase is fixed-capacity).\n * - `sync` / `onInsert` / `onUpdate` / `onDelete` are stored on the\n * Collection as \"Layer-E metadata\"; Layer E wires them into the\n * transaction flow. Accepting + storing them now keeps the API\n * drop-in-swap-capable even before the behavior lands.\n *\n * Returns a `Collection` instance — same class as `Collection.create`.\n *\n * This is the Layer-B public entry point for ArrowBase users who want\n * to write their import as `import { createCollection } from 'arrowbase'`\n * and have it behave just like the TanStack DB import.\n */\n\nimport type { IndexConstructor } from '../indexes/base-index.js';\nimport type { CompiledSchema } from '../schema/schema.js';\nimport type {\n CreateCollectionConfig,\n DeleteMutationFn,\n InsertMutationFn,\n SyncConfig,\n UpdateMutationFn,\n} from '../tanstack-types.js';\nimport { Collection, type CollectionOptions, type RowValue } from './collection.js';\nimport {\n getCollectionMetadata,\n setCollectionMetadata,\n type CollectionMetadata,\n} from './metadata.js';\n\ntype CreateCollectionConfigWithInitialData<T extends object = RowValue> =\n CreateCollectionConfig<T, number | string> & {\n initialData?: Array<T>;\n };\n\nexport { getCollectionMetadata } from './metadata.js';\n\n/**\n * Construct a new Collection from a TanStack-DB-shaped config.\n *\n * @example\n * ```ts\n * import { compileSchema, defineSchema, createCollection } from 'arrowbase';\n *\n * const schema = compileSchema(defineSchema({\n * name: 'todos',\n * columns: {\n * __id: { type: 'uint32' },\n * title: { type: 'utf8' },\n * done: { type: 'bool' },\n * },\n * }));\n *\n * const todos = createCollection({\n * schema,\n * capacity: 10_000,\n * id: 'todos',\n * getKey: (t) => t.__id as number,\n * });\n * ```\n */\nexport function createCollection<\n T extends object = RowValue,\n TKey extends string | number = number,\n>(config: CreateCollectionConfig<T, TKey>): Collection {\n if (config === null || typeof config !== 'object') {\n throw new TypeError('createCollection: config must be an object');\n }\n\n const compiled = config.schema;\n if (\n compiled === null ||\n typeof compiled !== 'object' ||\n !('primaryKey' in compiled) ||\n !('columns' in compiled)\n ) {\n throw new TypeError(\n 'createCollection: `schema` must be a compiled ArrowBase schema ' +\n '(call `compileSchema(defineSchema({...}))` first). TanStack-DB ' +\n 'StandardSchemaV1 schemas are supported from Layer C onward.',\n );\n }\n\n if (\n typeof config.capacity !== 'number' ||\n !Number.isFinite(config.capacity) ||\n config.capacity <= 0\n ) {\n throw new RangeError(\n 'createCollection: `capacity` is required and must be a positive number ' +\n '(ArrowBase is fixed-capacity in Layer B).',\n );\n }\n\n // Translate to our native CollectionOptions.\n const opts: CollectionOptions = {\n capacity: config.capacity,\n ...(config.undoCapacity !== undefined\n ? { undoCapacity: config.undoCapacity }\n : {}),\n ...(config.softDelete !== undefined\n ? { softDelete: config.softDelete }\n : {}),\n ...(config.id !== undefined ? { id: config.id } : {}),\n ...(config.utils !== undefined ? { utils: config.utils } : {}),\n ...(config.compareOptions !== undefined\n ? { compareOptions: config.compareOptions }\n : {}),\n ...(config.autoIndex !== undefined ? { autoIndex: config.autoIndex } : {}),\n ...(config.defaultIndexType !== undefined\n ? { defaultIndexType: config.defaultIndexType as unknown as IndexConstructor<number> }\n : {}),\n ...(config.spatialIndex !== undefined ? { spatialIndex: config.spatialIndex } : {}),\n };\n\n const coll = Collection.create(compiled as CompiledSchema, opts);\n\n // Stash Layer-E metadata for later wiring. Use a WeakMap so the\n // Collection class doesn't grow fields that are unused until Layer E.\n const meta: CollectionMetadata = {};\n if (config.sync !== undefined) meta.sync = config.sync as SyncConfig;\n if (config.onInsert !== undefined)\n meta.onInsert = config.onInsert as InsertMutationFn;\n if (config.onUpdate !== undefined)\n meta.onUpdate = config.onUpdate as UpdateMutationFn;\n if (config.onDelete !== undefined)\n meta.onDelete = config.onDelete as DeleteMutationFn;\n if (config.getKey !== undefined)\n meta.getKey = config.getKey as unknown as (\n item: RowValue,\n ) => number | string;\n if (config.gcTime !== undefined) meta.gcTime = config.gcTime;\n if (config.startSync !== undefined) meta.startSync = config.startSync;\n if (config.syncMode !== undefined) meta.syncMode = config.syncMode;\n if (config.autoIndex !== undefined) meta.autoIndex = config.autoIndex;\n if (config.defaultIndexType !== undefined)\n meta.defaultIndexType = config.defaultIndexType as unknown as IndexConstructor;\n setCollectionMetadata(coll, meta);\n\n const initialData = (config as unknown as CreateCollectionConfigWithInitialData).initialData;\n if (initialData !== undefined) {\n const loadInitialRow = coll as unknown as {\n insertRaw(row: RowValue): { key: number; value: RowValue };\n };\n for (const item of initialData) {\n loadInitialRow.insertRaw(item as RowValue);\n }\n }\n\n if (config.startSync === true) {\n coll.startSyncImmediate();\n }\n\n return coll;\n}\n","import { OnMutateMustBeSynchronousError } from './errors.js';\nimport type {\n CreateOptimisticActionsOptions,\n Transaction,\n} from './tanstack-types.js';\nimport { createTransaction } from './transactions.js';\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n return (\n value !== null &&\n (typeof value === 'object' || typeof value === 'function') &&\n typeof (value as { then?: unknown }).then === 'function'\n );\n}\n\n/**\n * Creates an optimistic action that opens a transaction per call.\n *\n * `onMutate` runs synchronously inside the transaction's ambient scope so\n * collection writes are captured optimistically. `mutationFn` receives the same\n * variables during commit.\n */\nexport function createOptimisticAction<\n TVariables = unknown,\n T extends object = Record<string, unknown>,\n>(\n options: CreateOptimisticActionsOptions<TVariables, T>,\n): (variables: TVariables) => Transaction<T> {\n const { mutationFn, onMutate, ...config } = options;\n\n return (variables: TVariables) => {\n const transaction = createTransaction<T>({\n ...config,\n mutationFn: async (params) => mutationFn(variables, params),\n });\n\n transaction.mutate(() => {\n const maybePromise = onMutate(variables);\n if (isPromiseLike(maybePromise)) {\n throw new OnMutateMustBeSynchronousError();\n }\n });\n\n return transaction;\n };\n}\n","import type { PacedMutationsConfig, Transaction } from './tanstack-types.js';\nimport { createTransaction } from './transactions.js';\n\n/**\n * Creates a paced mutation helper with pluggable timing strategy.\n *\n * Optimistic writes run immediately inside an ambient transaction. Non-queue\n * strategies coalesce calls into one pending transaction until the strategy\n * invokes its callback. Queue strategies capture one transaction per call.\n */\nexport function createPacedMutations<\n TVariables = unknown,\n T extends object = Record<string, unknown>,\n>(config: PacedMutationsConfig<TVariables, T>): (variables: TVariables) => Transaction<T> {\n const { onMutate, mutationFn, strategy, ...transactionConfig } = config;\n let activeTransaction: Transaction<T> | null = null;\n\n const commitCallback = (): Transaction<T> => {\n if (!activeTransaction) {\n throw new Error(\n 'Strategy callback called but no active transaction exists. This indicates a bug in the strategy implementation.',\n );\n }\n if (activeTransaction.state !== 'pending') {\n throw new Error(\n `Strategy callback called but active transaction is in state \"${activeTransaction.state}\". Expected \"pending\".`,\n );\n }\n\n const txToCommit = activeTransaction;\n activeTransaction = null;\n void txToCommit.commit().catch(() => {});\n return txToCommit;\n };\n\n return (variables: TVariables) => {\n if (!activeTransaction || activeTransaction.state !== 'pending') {\n activeTransaction = createTransaction<T>({\n ...transactionConfig,\n mutationFn,\n autoCommit: false,\n });\n }\n\n activeTransaction.mutate(() => {\n onMutate(variables);\n });\n\n const txToReturn = activeTransaction;\n if (strategy._type === 'queue') {\n const capturedTx = activeTransaction;\n activeTransaction = null;\n strategy.execute(() => {\n void capturedTx.commit().catch(() => {});\n return capturedTx;\n });\n } else {\n strategy.execute(commitCallback);\n }\n\n return txToReturn;\n };\n}\n","import type {\n DebounceStrategy,\n DebounceStrategyOptions,\n QueueStrategy,\n QueueStrategyOptions,\n ThrottleStrategy,\n ThrottleStrategyOptions,\n Transaction,\n} from './tanstack-types.js';\n\ntype StrategyTimer = ReturnType<typeof setTimeout>;\ntype StrategyCallback = <T extends object = Record<string, unknown>>() => Transaction<T>;\n\nfunction noopTransactionPromise(value: unknown): Promise<unknown> {\n const maybe = value as { isPersisted?: { promise?: Promise<unknown> } } | undefined;\n return maybe?.isPersisted?.promise ?? Promise.resolve();\n}\n\nexport function debounceStrategy(options: DebounceStrategyOptions): DebounceStrategy {\n let timer: StrategyTimer | undefined;\n let latest: StrategyCallback | undefined;\n const leading = options.leading ?? false;\n const trailing = options.trailing ?? true;\n\n const clear = (): void => {\n if (timer !== undefined) {\n clearTimeout(timer);\n timer = undefined;\n }\n };\n\n return {\n _type: 'debounce',\n options,\n execute: (fn) => {\n const shouldLead = leading && timer === undefined;\n latest = fn as StrategyCallback;\n clear();\n\n if (shouldLead) {\n latest();\n latest = undefined;\n }\n\n if (trailing) {\n timer = setTimeout(() => {\n timer = undefined;\n const callback = latest;\n latest = undefined;\n callback?.();\n }, options.wait);\n }\n },\n cleanup: () => {\n clear();\n latest = undefined;\n },\n };\n}\n\nexport function throttleStrategy(options: ThrottleStrategyOptions): ThrottleStrategy {\n let timer: StrategyTimer | undefined;\n let latest: StrategyCallback | undefined;\n let lastRun = 0;\n const leading = options.leading ?? true;\n const trailing = options.trailing ?? true;\n\n const clear = (): void => {\n if (timer !== undefined) {\n clearTimeout(timer);\n timer = undefined;\n }\n };\n\n const run = (fn: StrategyCallback): void => {\n lastRun = Date.now();\n fn();\n };\n\n return {\n _type: 'throttle',\n options,\n execute: (fn) => {\n const callback = fn as StrategyCallback;\n const now = Date.now();\n if (lastRun === 0 && !leading) {\n lastRun = now;\n }\n\n const elapsed = now - lastRun;\n if ((lastRun === 0 && leading) || elapsed >= options.wait) {\n clear();\n latest = undefined;\n run(callback);\n return;\n }\n\n if (!trailing) return;\n latest = callback;\n if (timer !== undefined) return;\n timer = setTimeout(() => {\n timer = undefined;\n const pending = latest;\n latest = undefined;\n if (pending) run(pending);\n }, Math.max(0, options.wait - elapsed));\n },\n cleanup: () => {\n clear();\n latest = undefined;\n },\n };\n}\n\nexport function queueStrategy(options?: QueueStrategyOptions): QueueStrategy {\n let stopped = false;\n let running = false;\n let timer: StrategyTimer | undefined;\n const queue: Array<StrategyCallback> = [];\n const wait = options?.wait ?? 0;\n const addItemsTo = options?.addItemsTo ?? 'back';\n const getItemsFrom = options?.getItemsFrom ?? 'front';\n\n const clear = (): void => {\n if (timer !== undefined) {\n clearTimeout(timer);\n timer = undefined;\n }\n };\n\n const takeNext = (): StrategyCallback | undefined =>\n getItemsFrom === 'front' ? queue.shift() : queue.pop();\n\n const schedule = (callback: () => void): void => {\n if (wait > 0) {\n timer = setTimeout(callback, wait);\n return;\n }\n callback();\n };\n\n const processNext = (): void => {\n if (stopped || running) return;\n const next = takeNext();\n if (!next) return;\n running = true;\n\n let persistence: Promise<unknown>;\n try {\n persistence = noopTransactionPromise(next());\n } catch {\n persistence = Promise.resolve();\n }\n\n persistence\n .catch(() => undefined)\n .finally(() => {\n running = false;\n if (!stopped && queue.length > 0) schedule(processNext);\n });\n };\n\n return {\n _type: 'queue',\n ...(options !== undefined ? { options } : {}),\n execute: (fn) => {\n if (stopped) return;\n if (options?.maxSize !== undefined && queue.length >= options.maxSize) return;\n if (addItemsTo === 'front') queue.unshift(fn as StrategyCallback);\n else queue.push(fn as StrategyCallback);\n processNext();\n },\n cleanup: () => {\n stopped = true;\n clear();\n queue.length = 0;\n },\n };\n}\n","import type {\n DeleteMutationFn,\n DeleteMutationFnParams,\n InsertMutationFn,\n InsertMutationFnParams,\n LocalOnlyCollectionConfig,\n LocalOnlyCollectionOptionsResult,\n PendingMutation,\n UpdateMutationFn,\n UpdateMutationFnParams,\n} from './tanstack-types.js';\n\nlet generatedLocalOnlyId = 0;\n\nfunction randomLocalOnlyCollectionId(): string {\n return (\n globalThis.crypto?.randomUUID?.() ??\n `local-only-${Date.now()}-${generatedLocalOnlyId++}`\n );\n}\n\nfunction filterCollectionMutations(\n mutations: Array<PendingMutation<Record<string, unknown>>>,\n collectionId: string,\n): Array<PendingMutation<Record<string, unknown>>> {\n return mutations.filter((mutation) => mutation.collection.id === collectionId);\n}\n\nexport function localOnlyCollectionOptions<\n T extends object = Record<string, unknown>,\n TKey extends string | number = string | number,\n>(\n config: LocalOnlyCollectionConfig<T, TKey>,\n): LocalOnlyCollectionOptionsResult<T, TKey> {\n const { initialData, onInsert, onUpdate, onDelete, id, ...restConfig } = config;\n const collectionId = id ?? randomLocalOnlyCollectionId();\n const acceptMutations = (transaction: {\n mutations: Array<PendingMutation<Record<string, unknown>>>;\n }): void => {\n void filterCollectionMutations(transaction.mutations, collectionId);\n };\n\n const wrappedOnInsert: InsertMutationFn<T, TKey> = async (\n params: InsertMutationFnParams<T, TKey>,\n ) => {\n return (await onInsert?.(params)) ?? {};\n };\n const wrappedOnUpdate: UpdateMutationFn<T, TKey> = async (\n params: UpdateMutationFnParams<T, TKey>,\n ) => {\n return (await onUpdate?.(params)) ?? {};\n };\n const wrappedOnDelete: DeleteMutationFn<T, TKey> = async (\n params: DeleteMutationFnParams<T, TKey>,\n ) => {\n return (await onDelete?.(params)) ?? {};\n };\n\n const options: LocalOnlyCollectionOptionsResult<T, TKey> = {\n ...restConfig,\n id: collectionId,\n onInsert: wrappedOnInsert,\n onUpdate: wrappedOnUpdate,\n onDelete: wrappedOnDelete,\n utils: {\n acceptMutations,\n __arrowbaseLocalOnlyConfirmUpdates: true,\n },\n startSync: true,\n gcTime: 0,\n };\n if (initialData !== undefined) {\n options.initialData = initialData;\n }\n return options;\n}\n","import {\n InvalidStorageDataFormatError,\n InvalidStorageObjectFormatError,\n SerializationError,\n StorageError,\n StorageKeyRequiredError,\n} from './errors.js';\nimport type {\n DeleteMutationFn,\n DeleteMutationFnParams,\n InsertMutationFn,\n InsertMutationFnParams,\n LocalStorageCollectionConfig,\n LocalStorageCollectionOptionsResult,\n LocalStorageCollectionUtils,\n Parser,\n PendingMutation,\n StorageApi,\n StorageEventApi,\n SyncConfig,\n UpdateMutationFn,\n UpdateMutationFnParams,\n} from './tanstack-types.js';\n\ntype StoredItem<T extends object> = {\n versionKey: string;\n data: T;\n};\n\nfunction validateSerializable(parser: Parser, value: unknown, operation: string): void {\n try {\n parser.stringify(value);\n } catch (error) {\n throw new SerializationError(\n operation,\n error instanceof Error ? error.message : String(error),\n );\n }\n}\n\nfunction randomVersionKey(): string {\n return (\n globalThis.crypto?.randomUUID?.() ??\n `local-storage-${Date.now()}-${Math.random().toString(36).slice(2)}`\n );\n}\n\nfunction encodeStorageKey(key: unknown): string {\n if (typeof key === 'number') return `n:${key}`;\n return `s:${String(key)}`;\n}\n\nfunction decodeStorageKey(encodedKey: string): string | number {\n if (encodedKey.startsWith('n:')) return Number(encodedKey.slice(2));\n if (encodedKey.startsWith('s:')) return encodedKey.slice(2);\n return encodedKey;\n}\n\nfunction createInMemoryStorage(): StorageApi {\n const storage = new Map<string, string>();\n return {\n getItem: (key) => storage.get(key) ?? null,\n setItem: (key, value) => {\n storage.set(key, value);\n },\n removeItem: (key) => {\n storage.delete(key);\n },\n };\n}\n\nfunction defaultStorage(): StorageApi {\n if (typeof window !== 'undefined' && window.localStorage) {\n return window.localStorage;\n }\n return createInMemoryStorage();\n}\n\nfunction createNoOpStorageEventApi(): StorageEventApi {\n return {\n addEventListener: () => undefined,\n removeEventListener: () => undefined,\n };\n}\n\nfunction defaultStorageEventApi(): StorageEventApi {\n if (typeof window !== 'undefined') return window;\n return createNoOpStorageEventApi();\n}\n\nfunction loadFromStorage<T extends object>(\n storageKey: string,\n storage: StorageApi,\n parser: Parser,\n): Map<string | number, StoredItem<T>> | null {\n try {\n const raw = storage.getItem(storageKey);\n if (raw === null) return new Map();\n\n const parsed = parser.parse(raw);\n if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new InvalidStorageObjectFormatError(storageKey);\n }\n\n const out = new Map<string | number, StoredItem<T>>();\n for (const [encodedKey, value] of Object.entries(parsed)) {\n if (\n value === null ||\n typeof value !== 'object' ||\n !('versionKey' in value) ||\n !('data' in value)\n ) {\n throw new InvalidStorageDataFormatError(storageKey, encodedKey);\n }\n out.set(decodeStorageKey(encodedKey), value as StoredItem<T>);\n }\n return out;\n } catch (error) {\n console.warn(\n `[LocalStorageCollection] Error loading data from storage key \"${storageKey}\":`,\n error,\n );\n return null;\n }\n}\n\nfunction saveToStorage<T extends object>(\n storageKey: string,\n storage: StorageApi,\n parser: Parser,\n data: Map<string | number, StoredItem<T>>,\n): void {\n const objectData: Record<string, StoredItem<T>> = {};\n for (const [key, item] of data) {\n objectData[encodeStorageKey(key)] = item;\n }\n let serialized: string;\n try {\n serialized = parser.stringify(objectData);\n } catch (error) {\n throw new SerializationError(\n 'storage write',\n error instanceof Error ? error.message : String(error),\n );\n }\n\n try {\n storage.setItem(storageKey, serialized);\n } catch (error) {\n throw new StorageError(\n `[Storage] Failed to write storage key \"${storageKey}\": ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n}\n\nfunction storageByteLength(storage: StorageApi, storageKey: string): number {\n const raw = storage.getItem(storageKey);\n if (!raw) return 0;\n return new TextEncoder().encode(raw).byteLength;\n}\n\nfunction filterCollectionMutations(\n mutations: Array<PendingMutation<Record<string, unknown>>>,\n collectionId: string,\n): Array<PendingMutation<Record<string, unknown>>> {\n return mutations.filter((mutation) => mutation.collection.id === collectionId);\n}\n\nfunction applyMutationToData<T extends object>(\n data: Map<string | number, StoredItem<T>>,\n mutation: PendingMutation<Record<string, unknown>>,\n): void {\n const key = mutation.key as string | number;\n if (mutation.type === 'delete') {\n data.delete(key);\n return;\n }\n data.set(key, {\n versionKey: randomVersionKey(),\n data: mutation.modified as T,\n });\n}\n\nexport function localStorageCollectionOptions<\n T extends object = Record<string, unknown>,\n TKey extends string | number = string | number,\n>(\n config: LocalStorageCollectionConfig<T, TKey>,\n): LocalStorageCollectionOptionsResult<T, TKey> {\n if (!config.storageKey) throw new StorageKeyRequiredError();\n\n const {\n storageKey,\n storage = defaultStorage(),\n storageEventApi = defaultStorageEventApi(),\n parser = JSON,\n onInsert,\n onUpdate,\n onDelete,\n id,\n getKey,\n ...restConfig\n } = config;\n\n const collectionId = id ?? `local-collection:${storageKey}`;\n const getKeyFromItem = (item: T): TKey => {\n if (getKey) return getKey(item);\n return (item as Record<string, unknown>).__id as TKey;\n };\n const lastKnownData = new Map<string | number, StoredItem<T>>();\n\n const persistMutations = (\n mutations: Array<PendingMutation<Record<string, unknown>>>,\n ): void => {\n if (mutations.length === 0) return;\n for (const mutation of mutations) {\n const value = mutation.type === 'delete' ? mutation.original : mutation.modified;\n validateSerializable(parser, value, mutation.type);\n }\n const nextData = new Map(lastKnownData);\n for (const mutation of mutations) applyMutationToData(nextData, mutation);\n saveToStorage(storageKey, storage, parser, nextData);\n lastKnownData.clear();\n for (const [key, item] of nextData) lastKnownData.set(key, item);\n };\n\n const acceptMutations: LocalStorageCollectionUtils['acceptMutations'] = (transaction) => {\n persistMutations(filterCollectionMutations(transaction.mutations, collectionId));\n };\n\n const clearStorage = (): void => {\n storage.removeItem(storageKey);\n lastKnownData.clear();\n };\n\n const getStorageSize = (): number => storageByteLength(storage, storageKey);\n\n const wrappedOnInsert: InsertMutationFn<T, TKey> = async (\n params: InsertMutationFnParams<T, TKey>,\n ) => {\n const handlerResult = (await onInsert?.(params)) ?? {};\n persistMutations(\n params.transaction.mutations as Array<PendingMutation<Record<string, unknown>>>,\n );\n return handlerResult;\n };\n\n const wrappedOnUpdate: UpdateMutationFn<T, TKey> = async (\n params: UpdateMutationFnParams<T, TKey>,\n ) => {\n const handlerResult = (await onUpdate?.(params)) ?? {};\n persistMutations(\n params.transaction.mutations as Array<PendingMutation<Record<string, unknown>>>,\n );\n return handlerResult;\n };\n\n const wrappedOnDelete: DeleteMutationFn<T, TKey> = async (\n params: DeleteMutationFnParams<T, TKey>,\n ) => {\n const handlerResult = (await onDelete?.(params)) ?? {};\n persistMutations(\n params.transaction.mutations as Array<PendingMutation<Record<string, unknown>>>,\n );\n return handlerResult;\n };\n\n const sync: SyncConfig<T, TKey> = {\n sync: ({ begin, write, commit, markReady }) => {\n const initialData = loadFromStorage<T>(storageKey, storage, parser);\n if (initialData !== null) {\n lastKnownData.clear();\n for (const [key, item] of initialData) lastKnownData.set(key, item);\n }\n\n if (lastKnownData.size > 0) {\n begin();\n for (const item of lastKnownData.values()) {\n write({\n type: 'insert',\n value: item.data,\n });\n }\n commit();\n }\n markReady();\n\n const processStorageChanges = (): void => {\n const next = loadFromStorage<T>(storageKey, storage, parser);\n if (next === null) return;\n const changes: Array<{\n key: TKey;\n type: 'insert' | 'update' | 'delete';\n value: T;\n }> = [];\n\n for (const [key, oldItem] of lastKnownData) {\n const nextItem = next.get(key);\n if (!nextItem) {\n changes.push({\n key: getKeyFromItem(oldItem.data),\n type: 'delete',\n value: oldItem.data,\n });\n } else if (nextItem.versionKey !== oldItem.versionKey) {\n changes.push({\n key: getKeyFromItem(nextItem.data),\n type: 'update',\n value: nextItem.data,\n });\n }\n }\n for (const [key, nextItem] of next) {\n if (!lastKnownData.has(key)) {\n changes.push({\n key: getKeyFromItem(nextItem.data),\n type: 'insert',\n value: nextItem.data,\n });\n }\n }\n\n if (changes.length === 0) return;\n begin();\n for (const change of changes) {\n if (change.type === 'delete') {\n write({ key: change.key, type: 'delete' });\n } else {\n write({ type: change.type, value: change.value });\n }\n }\n commit();\n\n lastKnownData.clear();\n for (const [key, item] of next) lastKnownData.set(key, item);\n };\n\n const onStorage = (event: StorageEvent): void => {\n if (event.key !== storageKey || event.storageArea !== (storage as Storage)) return;\n processStorageChanges();\n };\n\n storageEventApi.addEventListener('storage', onStorage);\n return () => storageEventApi.removeEventListener('storage', onStorage);\n },\n };\n\n const result: LocalStorageCollectionOptionsResult<T, TKey> = {\n ...restConfig,\n id: collectionId,\n startSync: true,\n sync,\n onInsert: wrappedOnInsert,\n onUpdate: wrappedOnUpdate,\n onDelete: wrappedOnDelete,\n utils: {\n clearStorage,\n getStorageSize,\n acceptMutations,\n },\n };\n if (getKey !== undefined) result.getKey = getKey;\n return result;\n}\n","/**\n * Dependency-tracking row proxy for filter predicates.\n *\n * The query engine calls `trackRow(realRow, deps)` to wrap a concrete row\n * JS object before passing it to the user's predicate. Every property read\n * adds the key to `deps` so the query can record which columns it observes.\n *\n * Known limitations:\n * - Only string-keyed reads are recorded. Symbol reads (Symbol.iterator,\n * Symbol.toPrimitive, etc.) are forwarded to the underlying row and\n * ignored for dep tracking.\n * - If the predicate reads nested objects (lists, structs), only the\n * top-level column name is recorded. That matches the granularity of\n * our column-level invalidation anyway.\n * - Returning the underlying scalar value directly means JS operators\n * (`===`, `>`, arithmetic) behave as the user expects.\n */\n\nexport type DepSet = Set<string>;\n\nexport function trackRow<T extends object>(row: T, deps: DepSet): T {\n return new Proxy(row, {\n get(target, prop, receiver) {\n if (typeof prop === 'string') deps.add(prop);\n return Reflect.get(target, prop, receiver);\n },\n // The tracking proxy is intentionally transparent for other traps so\n // predicates that destructure or use `in` still work as expected.\n has(target, prop) {\n if (typeof prop === 'string') deps.add(prop);\n return Reflect.has(target, prop);\n },\n }) as T;\n}\n","/**\n * Column-op filter DSL. A vectorizable alternative to `.where(fn)`.\n *\n * The surface is deliberately tiny — eq/neq/gt/gte/lt/lte for scalars,\n * and/or/not for composition, plus a column-ref helper. Predicates built\n * here are compiled to a `RowTest` closure that reads directly from the\n * column typed-arrays, skipping proxy allocation and per-row row-object\n * materialization. Anything outside this surface still works via\n * `.where(fn)` at normal (proxy) speed.\n *\n * Example:\n * import { query, f, eq, and, gt } from 'arrowbase';\n * query(c).filter(and(eq(f('tag'), 'asphalt'), gt(f('speed'), 40)));\n */\n\nexport type Scalar = number | bigint | boolean | string | null;\n\n/** A reference to a column by name. */\nexport interface ColumnRef {\n readonly kind: 'col';\n readonly name: string;\n}\n\nexport interface LiteralNode {\n readonly kind: 'lit';\n readonly value: Scalar;\n}\n\nexport type Operand = ColumnRef | LiteralNode;\n\nexport type CmpOp = 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte';\n\nexport interface CompareNode {\n readonly kind: 'cmp';\n readonly op: CmpOp;\n readonly left: Operand;\n readonly right: Operand;\n}\n\nexport interface AndNode {\n readonly kind: 'and';\n readonly args: readonly FilterExpr[];\n}\nexport interface OrNode {\n readonly kind: 'or';\n readonly args: readonly FilterExpr[];\n}\nexport interface NotNode {\n readonly kind: 'not';\n readonly arg: FilterExpr;\n}\nexport interface IsNullNode {\n readonly kind: 'isNull';\n readonly col: ColumnRef;\n readonly negated: boolean;\n}\nexport interface InNode {\n readonly kind: 'in';\n readonly col: ColumnRef;\n readonly values: readonly Scalar[];\n}\n\n/**\n * String predicate. Covers the common text-matching cases with a\n * vectorizable shape so the kernel can pre-compute (e.g., the matching\n * set of dict codes) instead of walking characters per row.\n *\n * `op`:\n * - `contains` / `startsWith` / `endsWith`: plain substring match.\n * - `like`: SQL LIKE, with `%` = any sequence, `_` = any single char,\n * and `\\` as an escape for literal `%` / `_`.\n * - `matches`: raw RegExp pattern (string + optional flags) run with\n * `RegExp.prototype.test`. Use sparingly; engines inline the other\n * ops much more aggressively.\n *\n * `caseInsensitive` performs ASCII-fold case folding (fast). For\n * locale-aware folding (German ß, Turkish dotted-I, etc.) use\n * `matches` with an explicit RegExp containing the `i` flag, which the\n * engine delegates to the platform.\n */\nexport type StringOp =\n | 'contains'\n | 'startsWith'\n | 'endsWith'\n | 'like'\n | 'matches';\n\nexport interface StringOpNode {\n readonly kind: 'str';\n readonly op: StringOp;\n readonly col: ColumnRef;\n /** Pattern or substring. For `matches`, the regex source. */\n readonly value: string;\n /** Flags (for `matches` only). Ignored for other ops. */\n readonly flags?: string;\n /** ASCII-fold case-insensitive compare. Ignored by `matches`. */\n readonly caseInsensitive?: boolean;\n /** If true, the match result is inverted (NOT contains/like/...). */\n readonly negated?: boolean;\n}\n\nexport type FilterExpr =\n | CompareNode\n | AndNode\n | OrNode\n | NotNode\n | IsNullNode\n | InNode\n | StringOpNode\n | ColumnRef; // boolean column ref projected as `col === true`\n\n/** Build a column ref. `f('speed')` reads shorter at the call site. */\nexport function f(name: string): ColumnRef {\n return { kind: 'col', name };\n}\n\nfunction lit(value: Scalar): LiteralNode {\n return { kind: 'lit', value };\n}\n\nfunction toOperand(x: Operand | Scalar): Operand {\n if (x !== null && typeof x === 'object' && (x as ColumnRef).kind === 'col') {\n return x as ColumnRef;\n }\n return lit(x as Scalar);\n}\n\nexport function eq(a: Operand | Scalar, b: Operand | Scalar): CompareNode {\n return { kind: 'cmp', op: 'eq', left: toOperand(a), right: toOperand(b) };\n}\nexport function neq(a: Operand | Scalar, b: Operand | Scalar): CompareNode {\n return { kind: 'cmp', op: 'neq', left: toOperand(a), right: toOperand(b) };\n}\nexport function gt(a: Operand | Scalar, b: Operand | Scalar): CompareNode {\n return { kind: 'cmp', op: 'gt', left: toOperand(a), right: toOperand(b) };\n}\nexport function gte(a: Operand | Scalar, b: Operand | Scalar): CompareNode {\n return { kind: 'cmp', op: 'gte', left: toOperand(a), right: toOperand(b) };\n}\nexport function lt(a: Operand | Scalar, b: Operand | Scalar): CompareNode {\n return { kind: 'cmp', op: 'lt', left: toOperand(a), right: toOperand(b) };\n}\nexport function lte(a: Operand | Scalar, b: Operand | Scalar): CompareNode {\n return { kind: 'cmp', op: 'lte', left: toOperand(a), right: toOperand(b) };\n}\nexport function and(...args: FilterExpr[]): AndNode {\n return { kind: 'and', args };\n}\nexport function or(...args: FilterExpr[]): OrNode {\n return { kind: 'or', args };\n}\nexport function not(arg: FilterExpr): NotNode {\n return { kind: 'not', arg };\n}\nexport function isNull(col: ColumnRef): IsNullNode {\n return { kind: 'isNull', col, negated: false };\n}\nexport function isNotNull(col: ColumnRef): IsNullNode {\n return { kind: 'isNull', col, negated: true };\n}\nexport function inArray(col: ColumnRef, values: readonly Scalar[]): InNode {\n return { kind: 'in', col, values };\n}\n\n// ---- string predicates ------------------------------------------------\n\nexport interface StringOpOptions {\n /** ASCII-fold case-insensitive. Ignored by `matches`. */\n caseInsensitive?: boolean;\n /** Invert match. */\n negated?: boolean;\n}\n\nfunction strNode(\n op: StringOp,\n col: ColumnRef,\n value: string,\n opts?: StringOpOptions,\n): StringOpNode {\n const node: StringOpNode = { kind: 'str', op, col, value };\n if (opts?.caseInsensitive) (node as { caseInsensitive?: boolean }).caseInsensitive = true;\n if (opts?.negated) (node as { negated?: boolean }).negated = true;\n return node;\n}\n\nexport function contains(col: ColumnRef, value: string, opts?: StringOpOptions): StringOpNode {\n return strNode('contains', col, value, opts);\n}\nexport function startsWith(col: ColumnRef, value: string, opts?: StringOpOptions): StringOpNode {\n return strNode('startsWith', col, value, opts);\n}\nexport function endsWith(col: ColumnRef, value: string, opts?: StringOpOptions): StringOpNode {\n return strNode('endsWith', col, value, opts);\n}\nexport function like(col: ColumnRef, pattern: string, opts?: StringOpOptions): StringOpNode {\n return strNode('like', col, pattern, opts);\n}\nexport function matches(\n col: ColumnRef,\n pattern: string | RegExp,\n opts?: StringOpOptions,\n): StringOpNode {\n const source = pattern instanceof RegExp ? pattern.source : pattern;\n const flags = pattern instanceof RegExp ? pattern.flags : undefined;\n const node: StringOpNode = { kind: 'str', op: 'matches', col, value: source };\n if (flags !== undefined) (node as { flags?: string }).flags = flags;\n if (opts?.negated) (node as { negated?: boolean }).negated = true;\n return node;\n}\n\n/** Walk an expression and collect all column refs. */\nexport function collectColumns(expr: FilterExpr, out: Set<string>): void {\n switch (expr.kind) {\n case 'col':\n out.add(expr.name);\n return;\n case 'cmp':\n if (expr.left.kind === 'col') out.add(expr.left.name);\n if (expr.right.kind === 'col') out.add(expr.right.name);\n return;\n case 'and':\n case 'or':\n for (const a of expr.args) collectColumns(a, out);\n return;\n case 'not':\n collectColumns(expr.arg, out);\n return;\n case 'isNull':\n out.add(expr.col.name);\n return;\n case 'in':\n out.add(expr.col.name);\n return;\n case 'str':\n out.add(expr.col.name);\n return;\n }\n}\n","/**\n * Fn-predicate → column-op DSL compiler.\n *\n * Best-effort: given a predicate function `(row) => <expr>`, attempts to\n * parse its source via `Function.prototype.toString()` and lower it to\n * a `FilterExpr` tree so `.where(fn)` gets the same vectorized kernel\n * fast path as `.filter(expr)` without caller-side rewrites.\n *\n * The parser is a tiny hand-rolled tokenizer + recursive-descent pass\n * scoped to a narrow grammar. Anything outside that grammar (closures\n * over captured variables, method calls, computed property access,\n * ternary, spread, destructuring parameters, etc.) yields `null`; the\n * engine falls back to the original fn via its row-scan path.\n *\n * Supported shapes (v1):\n *\n * (row) => row.col === 5\n * row => row.x > 10 && row.y !== 'a'\n * (r) => r['col'] === 'x' // bracket access OK for strings\n * r => r.active === true || r.score >= 50\n * r => r.tag == null // → isNull\n * r => !(r.x < 0) // ! before group\n * r => { return r.active === true; } // block body with single return\n *\n * Not supported → returns null:\n *\n * r => r.a === r.b // column-vs-column (kernel limit)\n * r => [1,2].includes(r.tag) // method call\n * r => r.meta.label === 'x' // nested field access\n * r => r.x + 1 > 10 // arithmetic inside predicate\n * r => someOuter === r.x // captured outer variable\n */\nimport {\n type FilterExpr,\n type Operand,\n type ColumnRef,\n type LiteralNode,\n type Scalar,\n type CmpOp,\n} from './filter.js';\n\nexport function tryCompileFnToFilterExpr(\n fn: (row: Record<string, unknown>) => boolean,\n options: { knownColumns?: ReadonlySet<string>; namespaceAlias?: string } = {},\n): FilterExpr | null {\n try {\n const source = fn.toString();\n const tokens = tokenize(source);\n const parser = new FnParser(\n tokens,\n source,\n options.knownColumns ?? null,\n options.namespaceAlias ?? null,\n );\n return parser.parseTopLevel();\n } catch {\n return null;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Tokenizer\n// ---------------------------------------------------------------------------\n\ntype TokKind =\n | 'ident'\n | 'num'\n | 'str'\n | 'punct'\n | 'op'\n | 'keyword' // true | false | null | undefined | return\n | 'arrow'\n | 'eof';\n\ninterface Tok {\n readonly kind: TokKind;\n readonly text: string;\n readonly start: number;\n}\n\n/** Multi-char operators we recognize, longest-first for greedy match. */\nconst MULTI_OPS = [\n '===',\n '!==',\n '==',\n '!=',\n '>=',\n '<=',\n '&&',\n '||',\n '=>',\n];\nconst SINGLE_OPS = new Set<string>(['!', '>', '<', '-']);\nconst PUNCT = new Set<string>(['(', ')', '{', '}', '[', ']', ',', ';', '.']);\nconst KEYWORDS = new Set<string>(['true', 'false', 'null', 'undefined', 'return']);\n\nfunction tokenize(src: string): Tok[] {\n const tokens: Tok[] = [];\n let i = 0;\n const n = src.length;\n\n while (i < n) {\n const ch = src[i]!;\n\n // Whitespace.\n if (ch === ' ' || ch === '\\t' || ch === '\\n' || ch === '\\r') {\n i++;\n continue;\n }\n\n // Line comment.\n if (ch === '/' && src[i + 1] === '/') {\n while (i < n && src[i] !== '\\n') i++;\n continue;\n }\n // Block comment.\n if (ch === '/' && src[i + 1] === '*') {\n i += 2;\n while (i < n && !(src[i] === '*' && src[i + 1] === '/')) i++;\n i += 2;\n continue;\n }\n\n // String literal: '...' | \"...\" | `...` (template-no-interp only).\n if (ch === \"'\" || ch === '\"' || ch === '`') {\n const quote = ch;\n const start = i;\n i++;\n let value = '';\n while (i < n && src[i] !== quote) {\n if (src[i] === '\\\\' && i + 1 < n) {\n // Handle the common escapes; anything else gets a best-effort pass-through.\n const esc = src[i + 1]!;\n if (esc === 'n') value += '\\n';\n else if (esc === 't') value += '\\t';\n else if (esc === 'r') value += '\\r';\n else if (esc === '\\\\') value += '\\\\';\n else if (esc === \"'\") value += \"'\";\n else if (esc === '\"') value += '\"';\n else if (esc === '`') value += '`';\n else if (esc === '0') value += '\\0';\n else value += esc;\n i += 2;\n continue;\n }\n // Template-literal with `${...}` — not supported; abort.\n if (quote === '`' && src[i] === '$' && src[i + 1] === '{') {\n throw new Error('template interpolation unsupported');\n }\n value += src[i];\n i++;\n }\n if (src[i] !== quote) throw new Error('unterminated string');\n i++;\n tokens.push({ kind: 'str', text: value, start });\n continue;\n }\n\n // Numeric literal (integer or decimal; no exp, no bigint suffix for simplicity).\n if ((ch >= '0' && ch <= '9') || (ch === '.' && isDigit(src[i + 1]))) {\n const start = i;\n while (i < n && (isDigit(src[i]!) || src[i] === '.' || src[i] === 'e' || src[i] === 'E' || src[i] === '+' || src[i] === '-')) {\n // Only include +/- as part of exponent; if we're not in an exponent, stop.\n const c = src[i]!;\n if ((c === '+' || c === '-') && !(src[i - 1] === 'e' || src[i - 1] === 'E')) break;\n i++;\n }\n tokens.push({ kind: 'num', text: src.slice(start, i), start });\n continue;\n }\n\n // Identifier / keyword.\n if (isIdentStart(ch)) {\n const start = i;\n while (i < n && isIdentCont(src[i]!)) i++;\n const text = src.slice(start, i);\n if (KEYWORDS.has(text)) {\n tokens.push({ kind: 'keyword', text, start });\n } else {\n tokens.push({ kind: 'ident', text, start });\n }\n continue;\n }\n\n // Multi-char ops.\n let matched = false;\n for (const op of MULTI_OPS) {\n if (src.startsWith(op, i)) {\n tokens.push({ kind: op === '=>' ? 'arrow' : 'op', text: op, start: i });\n i += op.length;\n matched = true;\n break;\n }\n }\n if (matched) continue;\n\n if (SINGLE_OPS.has(ch)) {\n tokens.push({ kind: 'op', text: ch, start: i });\n i++;\n continue;\n }\n if (PUNCT.has(ch)) {\n tokens.push({ kind: 'punct', text: ch, start: i });\n i++;\n continue;\n }\n\n throw new Error(`unexpected char '${ch}' at ${i}`);\n }\n\n tokens.push({ kind: 'eof', text: '', start: n });\n return tokens;\n}\n\nfunction isDigit(c: string | undefined): boolean {\n return c !== undefined && c >= '0' && c <= '9';\n}\nfunction isIdentStart(c: string): boolean {\n return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c === '_' || c === '$';\n}\nfunction isIdentCont(c: string): boolean {\n return isIdentStart(c) || (c >= '0' && c <= '9');\n}\n\n// ---------------------------------------------------------------------------\n// Parser\n// ---------------------------------------------------------------------------\n\nclass FnParser {\n private pos = 0;\n private paramName = '';\n\n constructor(\n private readonly tokens: Tok[],\n _source: string,\n private readonly knownColumns: ReadonlySet<string> | null,\n private readonly namespaceAlias: string | null,\n ) {}\n\n private peek(off = 0): Tok {\n return this.tokens[this.pos + off] ?? this.tokens[this.tokens.length - 1]!;\n }\n private advance(): Tok {\n const t = this.tokens[this.pos]!;\n this.pos++;\n return t;\n }\n private consumeText(text: string): boolean {\n const t = this.peek();\n if (t.text === text) {\n this.pos++;\n return true;\n }\n return false;\n }\n private expectText(text: string): void {\n if (!this.consumeText(text)) {\n throw new Error(`expected '${text}' at token ${this.pos}`);\n }\n }\n\n /**\n * Parse the whole arrow function; accept two shapes:\n * `function (row) { return <expr>; }` — legacy fn form\n * `(row) => <expr-or-block>` — arrow form\n *\n * Returns null (via caller) on any unsupported shape.\n */\n parseTopLevel(): FilterExpr | null {\n try {\n // Skip an optional leading 'function' keyword and its name/params.\n if (this.peek().text === 'function') {\n this.advance(); // function\n // Optional name\n if (this.peek().kind === 'ident') this.advance();\n this.expectText('(');\n if (this.peek().kind !== 'ident') return null;\n this.paramName = this.advance().text;\n this.expectText(')');\n this.expectText('{');\n this.expectText('return');\n const expr = this.parseExpr();\n this.consumeText(';');\n this.expectText('}');\n return expr;\n }\n\n // Arrow: `row => expr`, `(row) => expr`, `(row) => { return expr; }`.\n if (this.consumeText('(')) {\n if (this.peek().kind !== 'ident') return null;\n this.paramName = this.advance().text;\n this.expectText(')');\n } else {\n if (this.peek().kind !== 'ident') return null;\n this.paramName = this.advance().text;\n }\n\n if (this.peek().kind !== 'arrow') return null;\n this.advance(); // =>\n\n if (this.consumeText('{')) {\n this.expectText('return');\n const expr = this.parseExpr();\n this.consumeText(';');\n this.expectText('}');\n return expr;\n }\n\n return this.parseExpr();\n } catch {\n return null;\n }\n }\n\n // OrExpr\n private parseExpr(): FilterExpr {\n let left = this.parseAnd();\n while (this.peek().text === '||') {\n this.advance();\n const right = this.parseAnd();\n left = { kind: 'or', args: flatten('or', [left, right]) };\n }\n return left;\n }\n\n private parseAnd(): FilterExpr {\n let left = this.parseNot();\n while (this.peek().text === '&&') {\n this.advance();\n const right = this.parseNot();\n left = { kind: 'and', args: flatten('and', [left, right]) };\n }\n return left;\n }\n\n private parseNot(): FilterExpr {\n if (this.peek().text === '!') {\n this.advance();\n const arg = this.parseNot();\n // Simplify `!(isNull)` → `isNotNull` and vice versa for tidy output.\n if (arg.kind === 'isNull') {\n return { kind: 'isNull', col: arg.col, negated: !arg.negated };\n }\n return { kind: 'not', arg };\n }\n return this.parseEquality();\n }\n\n private parseEquality(): FilterExpr {\n const left = this.parseRelational();\n const t = this.peek();\n if (t.text === '===' || t.text === '!==' || t.text === '==' || t.text === '!=') {\n this.advance();\n const right = this.parseRelational();\n return this.buildCompare(t.text, left, right);\n }\n // Bare column ref used as bool predicate: allowed (the DSL kernel\n // already supports `kind:'col'` standalone → `col === true`).\n return left;\n }\n\n private parseRelational(): FilterExpr {\n const left = this.parseUnary();\n const t = this.peek();\n if (t.text === '>' || t.text === '>=' || t.text === '<' || t.text === '<=') {\n this.advance();\n const right = this.parseUnary();\n return this.buildCompare(t.text, left, right);\n }\n return left;\n }\n\n private parseUnary(): FilterExpr {\n if (this.peek().text === '-') {\n this.advance();\n const next = this.peek();\n if (next.kind !== 'num') throw new Error('unary minus requires numeric literal');\n this.advance();\n return {\n kind: 'lit',\n value: -parseFloat(next.text),\n } as unknown as FilterExpr;\n }\n return this.parseAtom();\n }\n\n private parseAtom(): FilterExpr {\n const t = this.peek();\n\n if (t.kind === 'keyword') {\n if (t.text === 'true' || t.text === 'false') {\n this.advance();\n return { kind: 'lit', value: t.text === 'true' } as unknown as FilterExpr;\n }\n if (t.text === 'null' || t.text === 'undefined') {\n this.advance();\n return { kind: 'lit', value: null } as unknown as FilterExpr;\n }\n }\n\n if (t.kind === 'num') {\n this.advance();\n return { kind: 'lit', value: parseFloat(t.text) } as unknown as FilterExpr;\n }\n\n if (t.kind === 'str') {\n this.advance();\n return { kind: 'lit', value: t.text } as unknown as FilterExpr;\n }\n\n if (t.kind === 'punct' && t.text === '(') {\n this.advance();\n const inner = this.parseExpr();\n this.expectText(')');\n return inner;\n }\n\n // Identifier: must be the param name, followed by .field or [string].\n if (t.kind === 'ident') {\n if (t.text !== this.paramName) {\n // Outer-scope capture or other unsupported identifier.\n throw new Error(`unsupported identifier '${t.text}'`);\n }\n this.advance();\n const ref = this.parseColumnRef();\n // String-method tail: r.col.includes('x') / startsWith / endsWith.\n if (ref.kind === 'col' && this.peek().text === '.') {\n const strOp = this.parseStringMethodTail(ref);\n if (strOp) return strOp;\n // `.` after a column ref that isn't a known string method\n // means genuine nested field access — unsupported.\n throw new Error('nested field access unsupported');\n }\n return ref;\n }\n\n throw new Error(`unexpected token '${t.text}'`);\n }\n\n\n /**\n * After `ref = row.col`, peek a trailing `.method(...)` call. We only\n * recognize a narrow whitelist of String.prototype methods that map\n * cleanly to FilterExpr nodes. Returns null if the tail doesn't look\n * like any supported method call — the caller will then treat the\n * dangling `.` as unsupported nested access.\n */\n private parseStringMethodTail(col: ColumnRef): FilterExpr | null {\n // Save position so we can bail without consuming tokens.\n const saved = this.pos;\n if (this.peek().text !== '.') return null;\n this.advance();\n const method = this.peek();\n if (method.kind !== 'ident') {\n this.pos = saved;\n return null;\n }\n const name = method.text;\n // We only auto-compile fn-shapes that Function.toString() commonly\n // emits for the common text-search idioms.\n const MAPPING: Record<string, 'contains' | 'startsWith' | 'endsWith' | null> = {\n includes: 'contains',\n startsWith: 'startsWith',\n endsWith: 'endsWith',\n };\n const mapped = MAPPING[name];\n if (!mapped) {\n this.pos = saved;\n return null;\n }\n this.advance(); // consume method name\n if (this.peek().text !== '(') {\n this.pos = saved;\n return null;\n }\n this.advance();\n const arg = this.peek();\n if (arg.kind !== 'str') {\n // Only string-literal needles are supported; variables are captures.\n this.pos = saved;\n return null;\n }\n this.advance();\n // Optional second argument on startsWith/endsWith is an index; we\n // reject it because it would map to a substring match with offset,\n // which is unusual and not worth the code weight.\n if (this.peek().text === ',') {\n this.pos = saved;\n return null;\n }\n if (this.peek().text !== ')') {\n this.pos = saved;\n return null;\n }\n this.advance();\n return {\n kind: 'str',\n op: mapped,\n col,\n value: arg.text,\n };\n }\n private parseColumnRef(): FilterExpr {\n const t = this.peek();\n let colName: string;\n if (t.kind === 'punct' && t.text === '.') {\n this.advance();\n const id = this.advance();\n if (id.kind !== 'ident') throw new Error('expected identifier after .');\n colName = id.text;\n } else if (t.kind === 'punct' && t.text === '[') {\n this.advance();\n const lit = this.advance();\n if (lit.kind !== 'str') throw new Error('computed access must be string literal');\n colName = lit.text;\n this.expectText(']');\n } else {\n // Bare param (e.g., the fn `row => row` — nonsense as a predicate).\n throw new Error('bare param unsupported');\n }\n\n // TanStack builder functional callbacks receive a namespace object, e.g.\n // `ns => ns.users.active === true`. For a known single-source alias,\n // consume that namespace segment and lower the leaf column exactly like a\n // native `(row) => row.active === true` predicate.\n if (this.namespaceAlias !== null) {\n if (colName !== this.namespaceAlias) throw new Error(`unknown namespace '${colName}'`);\n this.expectText('.');\n const field = this.advance();\n if (field.kind !== 'ident') throw new Error('expected column after namespace alias');\n colName = field.text;\n }\n\n // Reject `row.x.y` / `row.x[0]` right here — a non-leaf chain is not a\n // supported column reference. The caller (`parseAtom`) handles the\n // special case of a trailing string method call (`row.x.includes(...)`);\n // everything else is a genuine nested access we cannot translate.\n const next = this.peek();\n if (next.text === '[') {\n throw new Error('nested index access unsupported');\n }\n if (next.text === '.') {\n // Delegate. Caller will try to recognize a string-method tail; if\n // that fails it will throw (via parseStringMethodTail returning\n // null + the caller re-throwing).\n }\n\n // Reject references to columns not present in the schema — those\n // would blow up the kernel compile, and we want the auto-compile\n // path to stay silent on unfamiliar shapes.\n if (this.knownColumns && !this.knownColumns.has(colName)) {\n throw new Error(`unknown column '${colName}'`);\n }\n\n return { kind: 'col', name: colName };\n }\n\n // Build a cmp node; rewrite `col ==/!== null` into isNull / isNotNull.\n private buildCompare(op: string, left: FilterExpr, right: FilterExpr): FilterExpr {\n const normOp = op === '==' ? '===' : op === '!=' ? '!==' : op;\n\n // Null-equality: column on one side, null literal on the other.\n const nullEq = detectNullEquality(left, right);\n if (nullEq) {\n return {\n kind: 'isNull',\n col: nullEq.col,\n negated: normOp === '!==' || normOp === '!=',\n };\n }\n\n const cmpOp = OP_TO_CMP[normOp];\n if (!cmpOp) throw new Error(`bad op '${op}'`);\n\n // We need col-vs-literal (or literal-vs-col, rewritten). col-vs-col\n // isn't supported by the kernel.\n const leftOp = asOperand(left);\n const rightOp = asOperand(right);\n if (!leftOp || !rightOp) throw new Error('operand not a column or literal');\n if (leftOp.kind === 'col' && rightOp.kind === 'col') {\n throw new Error('col vs col unsupported');\n }\n if (leftOp.kind === 'lit' && rightOp.kind === 'lit') {\n throw new Error('lit vs lit unsupported');\n }\n\n // Canonical form: column on the left. Flip cmp if literal is on the left.\n if (leftOp.kind === 'lit') {\n return {\n kind: 'cmp',\n op: flipOp(cmpOp),\n left: rightOp,\n right: leftOp,\n };\n }\n return { kind: 'cmp', op: cmpOp, left: leftOp, right: rightOp };\n }\n}\n\nconst OP_TO_CMP: Record<string, CmpOp | undefined> = {\n '===': 'eq',\n '!==': 'neq',\n '>': 'gt',\n '>=': 'gte',\n '<': 'lt',\n '<=': 'lte',\n};\n\nfunction flipOp(op: CmpOp): CmpOp {\n switch (op) {\n case 'gt': return 'lt';\n case 'gte': return 'lte';\n case 'lt': return 'gt';\n case 'lte': return 'gte';\n default: return op;\n }\n}\n\nfunction asOperand(node: FilterExpr): Operand | null {\n if (node.kind === 'col') return node;\n // We synthesized lit nodes above — they share the FilterExpr union only\n // cosmetically (for parser internals). Detect them structurally.\n const raw = node as unknown as LiteralNode;\n if (raw.kind === 'lit') return raw;\n return null;\n}\n\nfunction detectNullEquality(\n left: FilterExpr,\n right: FilterExpr,\n): { col: ColumnRef } | null {\n const isNullLit = (n: FilterExpr): boolean => {\n const raw = n as unknown as LiteralNode;\n return raw.kind === 'lit' && raw.value === null;\n };\n if (left.kind === 'col' && isNullLit(right)) return { col: left };\n if (right.kind === 'col' && isNullLit(left)) return { col: right };\n return null;\n}\n\nfunction flatten(kind: 'and' | 'or', args: readonly FilterExpr[]): FilterExpr[] {\n const out: FilterExpr[] = [];\n for (const a of args) {\n if (a.kind === kind) out.push(...(a as { args: readonly FilterExpr[] }).args);\n else out.push(a);\n }\n return out;\n}\n\n// Re-export Scalar for callers who want to type-guard the synthetic lit shape.\nexport type { Scalar };\n","import type { Collection, RowValue } from '../collection/collection.js';\nimport type { ChangeEvent } from '../collection/events.js';\nimport { ValidationError } from '../errors.js';\nimport { trackRow, type DepSet } from './trackRow.js';\nimport type { FilterExpr } from './filter.js';\nimport { collectColumns } from './filter.js';\nimport {\n compileFilter,\n materialize,\n scanOrdinals,\n sortOrdinals,\n FilterCompileError,\n type CompiledFilter,\n} from './kernel.js';\nimport { tryCompileFnToFilterExpr } from './fnCompile.js';\n\nexport type Predicate = (row: RowValue) => boolean;\n\nexport type SortDir = 'asc' | 'desc';\n\n// ---------------------------------------------------------------------\n// Join-module indirection.\n//\n// query.ts and join.ts would otherwise import each other statically\n// (Query.join → JoinQuery; JoinQuery references Query). We break the\n// cycle with a one-time factory slot populated from join.ts's\n// side-effect-free top-level code.\n// ---------------------------------------------------------------------\n\nexport interface JoinSpecLike {\n readonly on: { readonly left: string; readonly right: string };\n readonly as: string;\n readonly type?: 'inner';\n}\n// We keep the return type loose here — callers who want the full\n// JoinQuery API should import `JoinQuery` from `arrowbase/query/join`.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type JoinQueryLike = any;\ntype JoinFactory = (left: Query, right: Collection, spec: JoinSpecLike) => JoinQueryLike;\nlet joinFactory: JoinFactory | null = null;\nexport function registerJoinFactory(factory: JoinFactory): void {\n joinFactory = factory;\n}\n\nexport interface OrderSpec {\n readonly column: string;\n readonly dir: SortDir;\n}\n\n/**\n * Immutable query spec. Each builder method returns a new Query. Deps are\n * either `'all'` (everything) or a concrete set of column names. When a\n * predicate is present and no explicit `.deps(...)` override was applied,\n * deps are inferred on first evaluation via the tracking proxy and grow\n * monotonically over time.\n */\nexport class Query<TRow extends RowValue = RowValue> {\n readonly collection: Collection;\n readonly predicate: Predicate | null;\n /** Column-op filter DSL expression (vectorizable). */\n readonly filterExpr: FilterExpr | null;\n readonly selection: readonly string[] | null;\n readonly order: readonly OrderSpec[];\n readonly limitN: number | null;\n readonly offsetN: number;\n /** Explicit deps override. If null, deps are inferred. */\n readonly explicitDeps: ReadonlySet<string> | null;\n\n constructor(\n collection: Collection,\n predicate: Predicate | null = null,\n selection: readonly string[] | null = null,\n order: readonly OrderSpec[] = [],\n limitN: number | null = null,\n offsetN = 0,\n explicitDeps: ReadonlySet<string> | null = null,\n filterExpr: FilterExpr | null = null,\n ) {\n this.collection = collection;\n this.predicate = predicate;\n this.filterExpr = filterExpr;\n this.selection = selection;\n this.order = order;\n this.limitN = limitN;\n this.offsetN = offsetN;\n this.explicitDeps = explicitDeps;\n }\n\n where(predicate: Predicate): Query<TRow> {\n // Chaining where() composes with AND.\n const next: Predicate = this.predicate\n ? (row) => this.predicate!(row) && predicate(row)\n : predicate;\n\n // Attempt to lower `predicate` into a FilterExpr so the vectorized\n // kernel handles it. On success, drop the fn path for this branch\n // (no double-apply). On failure, keep the fn as before.\n const lowered = tryCompileFnToFilterExpr(\n predicate as (row: Record<string, unknown>) => boolean,\n { knownColumns: new Set(this.collection.schema.columnsByName.keys()) },\n );\n const composedExpr: FilterExpr | null =\n lowered === null\n ? this.filterExpr\n : this.filterExpr\n ? { kind: 'and', args: [this.filterExpr, lowered] }\n : lowered;\n const keepFn = lowered === null;\n\n return new Query(\n this.collection,\n keepFn ? next : this.predicate,\n this.selection,\n this.order,\n this.limitN,\n this.offsetN,\n this.explicitDeps,\n composedExpr,\n );\n }\n\n /**\n * Add a vectorizable column-op filter. Composes with prior `filter()`\n * calls via AND. Anything that fits the `FilterExpr` DSL takes the\n * vectorized fast path in `QueryExecutor`; combine with `.where(fn)`\n * when you need an escape hatch for logic outside the DSL — the fast\n * path still runs first for the DSL portion.\n */\n filter(expr: FilterExpr): Query<TRow> {\n const next: FilterExpr = this.filterExpr\n ? { kind: 'and', args: [this.filterExpr, expr] }\n : expr;\n return new Query(\n this.collection,\n this.predicate,\n this.selection,\n this.order,\n this.limitN,\n this.offsetN,\n this.explicitDeps,\n next,\n );\n }\n\n select(columns: readonly string[]): Query<TRow> {\n for (const c of columns) this.requireKnownColumn(c);\n return new Query(\n this.collection,\n this.predicate,\n [...columns],\n this.order,\n this.limitN,\n this.offsetN,\n this.explicitDeps,\n this.filterExpr,\n );\n }\n\n orderBy(column: string, dir: SortDir = 'asc'): Query<TRow> {\n this.requireKnownColumn(column);\n return new Query(\n this.collection,\n this.predicate,\n this.selection,\n [...this.order, { column, dir }],\n this.limitN,\n this.offsetN,\n this.explicitDeps,\n this.filterExpr,\n );\n }\n\n limit(n: number): Query<TRow> {\n if (!Number.isInteger(n) || n < 0) {\n throw new ValidationError(`limit must be a non-negative integer, got ${n}`);\n }\n return new Query(\n this.collection,\n this.predicate,\n this.selection,\n this.order,\n n,\n this.offsetN,\n this.explicitDeps,\n this.filterExpr,\n );\n }\n\n offset(n: number): Query<TRow> {\n if (!Number.isInteger(n) || n < 0) {\n throw new ValidationError(`offset must be a non-negative integer, got ${n}`);\n }\n return new Query(\n this.collection,\n this.predicate,\n this.selection,\n this.order,\n this.limitN,\n n,\n this.explicitDeps,\n this.filterExpr,\n );\n }\n\n /**\n * Equijoin against another collection. Returns a `JoinQuery` that\n * exposes the post-join builder surface (where / select / orderBy /\n * limit / offset).\n *\n * ```ts\n * query(orders)\n * .filter(f('amount').gt(100))\n * .join(users, { on: { left: 'userId', right: '__id' }, as: 'user' })\n * .orderBy('user.name')\n * .select(['id', 'amount', 'user.name']);\n * ```\n *\n * Implementation: to avoid a static cycle between query.ts and\n * join.ts, join.ts registers its factory via `registerJoinFactory`\n * at module-load time. Importing `arrowbase` (or\n * `arrowbase/query/join`) before calling `.join()` is sufficient.\n */\n join(right: Collection, spec: JoinSpecLike): JoinQueryLike {\n if (!joinFactory) {\n throw new Error(\n `Query.join: join module not loaded. ` +\n `Import it (via \\`import 'arrowbase'\\` or \\`import { join } from 'arrowbase'\\`) before use.`,\n );\n }\n return joinFactory(this as unknown as Query, right, spec);\n }\n\n /**\n * Explicit dep override. Use this when:\n * - your predicate reads columns conditionally and you want stable deps\n * - you want to force reactivity on a superset of columns\n */\n deps(columns: readonly string[]): Query<TRow> {\n for (const c of columns) this.requireKnownColumn(c);\n return new Query(\n this.collection,\n this.predicate,\n this.selection,\n this.order,\n this.limitN,\n this.offsetN,\n new Set(columns),\n this.filterExpr,\n );\n }\n\n /** Columns that must be materialized for this query (deps + filter + selection + order). */\n requiredColumns(inferredDeps: ReadonlySet<string>): ReadonlySet<string> {\n const out = new Set<string>();\n const src = this.explicitDeps ?? inferredDeps;\n for (const c of src) out.add(c);\n if (this.filterExpr) collectColumns(this.filterExpr, out);\n if (this.selection) for (const c of this.selection) out.add(c);\n for (const o of this.order) out.add(o.column);\n return out;\n }\n\n // -----------------------------------------------------------------\n\n private requireKnownColumn(name: string): void {\n if (!this.collection.schema.columnsByName.has(name)) {\n throw new ValidationError(\n `unknown column \"${name}\" on collection \"${this.collection.schema.name}\"`,\n );\n }\n }\n}\n\n/**\n * Snapshot = result of evaluating a Query at a specific global version.\n * Rows are plain JS objects shaped by `selection` (or full rows if null).\n */\nexport interface QuerySnapshot<TRow extends RowValue = RowValue> {\n readonly rows: readonly TRow[];\n /** Collection.globalVersion at the moment of the snapshot. */\n readonly version: number;\n}\n\n/**\n * Executor = caches the last snapshot + dep set for a Query so we can skip\n * recomputation when only untouched columns changed.\n *\n * Executors are created by `run(query)` and held by callers (including the\n * subscribe wrapper below). A single Query instance may have multiple\n * executors in flight; each owns its own cache.\n */\nexport class QueryExecutor<TRow extends RowValue = RowValue> {\n private deps: DepSet = new Set();\n private cachedSnapshot: QuerySnapshot<TRow> | null = null;\n /** Per-column version seen at the time `cachedSnapshot` was produced. */\n private cachedVersions: Map<string, number> = new Map();\n /**\n * When the predicate trips (throws) during the tracking dry-run, we\n * fall back to `deps = all`. We still try inference again after the\n * predicate changes, but a single Query instance keeps this bit sticky.\n */\n private depsAreAll = false;\n /**\n * Inserts, deletes, and rollbacks invalidate any cached snapshot because\n * they may change the live row set even when no observed value column\n * moves (soft-delete notwithstanding). We flip this flag from a passive\n * change listener and clear it on recompute.\n */\n private staleFromInsertOrDelete = false;\n private readonly unsubscribePassive: () => void;\n\n constructor(readonly query: Query<TRow>) {\n if (query.explicitDeps) {\n for (const c of query.explicitDeps) this.deps.add(c);\n }\n // Seed deps with any filterExpr columns up front so `inferredDeps`\n // reflects what we actually watch even before the first recompute.\n // Essential when the fn-predicate was auto-lowered to a FilterExpr\n // and the fn-trace dep path never runs.\n if (query.filterExpr) {\n collectColumns(query.filterExpr, this.deps);\n }\n this.unsubscribePassive = query.collection.subscribe((event) => {\n if (event.op !== 'update') this.staleFromInsertOrDelete = true;\n });\n }\n\n /** Release the passive change listener. */\n dispose(): void {\n this.unsubscribePassive();\n }\n\n /** True if the cached snapshot is still valid given current column versions. */\n private cacheIsFresh(): boolean {\n if (!this.cachedSnapshot) return false;\n if (this.staleFromInsertOrDelete) return false;\n const c = this.query.collection;\n for (const name of this.observedColumns()) {\n if (!c.schema.columnsByName.has(name)) continue;\n const prev = this.cachedVersions.get(name);\n if (prev === undefined) return false;\n if (c.columnVersion(name) !== prev) return false;\n }\n return true;\n }\n\n /**\n * Columns this query observes for invalidation purposes. Includes:\n * - inferred or explicit deps (from predicate / .deps())\n * - selection columns (stale projection otherwise)\n * - order-by columns (stale sort otherwise)\n */\n private observedColumns(): Iterable<string> {\n if (this.depsAreAll) return this.query.collection.columnNames();\n const union = new Set<string>();\n const base = this.query.explicitDeps ?? this.deps;\n for (const c of base) union.add(c);\n if (this.query.filterExpr) collectColumns(this.query.filterExpr, union);\n if (this.query.selection) for (const c of this.query.selection) union.add(c);\n for (const o of this.query.order) union.add(o.column);\n return union;\n }\n\n /** Lazily compile the filterExpr. Cached for executor lifetime. */\n private compiledFilter: CompiledFilter | null = null;\n private compiledFilterExpr: FilterExpr | null = null;\n private compiledFilterError: Error | null = null;\n private getCompiledFilter(): CompiledFilter | null {\n const expr = this.query.filterExpr;\n if (!expr) return null;\n if (this.compiledFilterExpr === expr && this.compiledFilter) {\n return this.compiledFilter;\n }\n if (this.compiledFilterError) throw this.compiledFilterError;\n const c = this.query.collection;\n const scanByName = new Map<string, (typeof scanCols)[number]>();\n const scanCols = c._internalScanColumns();\n for (const sc of scanCols) scanByName.set(sc.name, sc);\n try {\n this.compiledFilter = compileFilter(expr, scanByName);\n this.compiledFilterExpr = expr;\n return this.compiledFilter;\n } catch (err) {\n if (err instanceof FilterCompileError) {\n this.compiledFilterError = err;\n }\n throw err;\n }\n }\n\n /** Recompute the snapshot, updating cache. */\n private recompute(): QuerySnapshot<TRow> {\n const q = this.query;\n const c = q.collection;\n const pred = q.predicate;\n const filterExpr = q.filterExpr;\n\n // Vectorized fast path kicks in when there is any filter expression\n // AND/OR no fn predicate. With both, we run the kernel first to cut\n // the row set cheaply, then evaluate fn pred on the shrunk set.\n let ordinals: Uint32Array;\n let needsFnPredicate = pred !== null;\n if (filterExpr) {\n const compiled = this.getCompiledFilter()!;\n ordinals = scanOrdinals(c._internalLiveOrdinals(), compiled.test);\n } else if (!pred) {\n // No filter at all: gather every live ordinal into a Uint32Array.\n ordinals = scanOrdinals(c._internalLiveOrdinals(), () => true);\n } else {\n // fn-only path: fall back to legacy row-materialization scan.\n ordinals = this.legacyScan();\n needsFnPredicate = false;\n }\n\n // If a fn predicate remains, evaluate it against the matched set.\n if (needsFnPredicate) {\n ordinals = this.applyFnPredicate(ordinals);\n }\n\n // Sort via kernel (falls through when order is empty).\n const scanByName = new Map<string, ReturnType<Collection['_internalScanColumns']>[number]>();\n for (const sc of c._internalScanColumns()) scanByName.set(sc.name, sc);\n const sorted = sortOrdinals(\n ordinals,\n q.order,\n scanByName,\n (row, col) => c._internalReadCell(col, row),\n );\n\n // Slice + project — we only materialize rows that survive the\n // limit window, avoiding the allocation cost of touching filtered\n // rows we never emit.\n const out = materialize(c, sorted, q.offsetN, q.limitN, q.selection) as TRow[];\n\n // Cache bookkeeping.\n this.cachedVersions.clear();\n for (const name of this.observedColumns()) {\n if (!c.schema.columnsByName.has(name)) continue;\n this.cachedVersions.set(name, c.columnVersion(name));\n }\n this.staleFromInsertOrDelete = false;\n const snap: QuerySnapshot<TRow> = {\n rows: out,\n version: c.globalVersion,\n };\n this.cachedSnapshot = snap;\n return snap;\n }\n\n /** Legacy scan: materialize + run fn predicate with dep tracking. Returns ordinals of survivors. */\n private legacyScan(): Uint32Array {\n const q = this.query;\n const c = q.collection;\n const pred = q.predicate!;\n const matched: number[] = [];\n let idx = 0;\n for (const row of c.rows()) {\n const rowOrdinal = this.getOrdinalFor(idx++, row);\n try {\n const tracked =\n q.explicitDeps || this.depsAreAll\n ? row\n : trackRow(row, this.deps);\n if (pred(tracked)) matched.push(rowOrdinal);\n } catch (err) {\n this.depsAreAll = true;\n try {\n if (pred(row)) matched.push(rowOrdinal);\n } catch {\n throw err;\n }\n }\n }\n return toU32(matched);\n }\n\n /**\n * Map the sequential index returned by `rows()` to the live row\n * ordinal. `rows()` yields in the same order as `_internalLiveOrdinals()`,\n * so we lazily keep a parallel ordinal buffer.\n */\n private cachedOrdinalBuffer: Uint32Array | null = null;\n private cachedOrdinalVersion = -1;\n private getOrdinalFor(idx: number, _row: RowValue): number {\n const c = this.query.collection;\n if (this.cachedOrdinalVersion !== c.globalVersion || !this.cachedOrdinalBuffer) {\n const arr: number[] = [];\n for (const r of c._internalLiveOrdinals()) arr.push(r);\n this.cachedOrdinalBuffer = toU32(arr);\n this.cachedOrdinalVersion = c.globalVersion;\n }\n return this.cachedOrdinalBuffer[idx] ?? -1;\n }\n\n /** Apply the fn predicate to a candidate ordinal set (post-kernel filter). */\n private applyFnPredicate(candidates: Uint32Array): Uint32Array {\n const q = this.query;\n const c = q.collection;\n const pred = q.predicate!;\n const kept: number[] = [];\n for (let i = 0; i < candidates.length; i++) {\n const ord = candidates[i]!;\n const row = this.materializeFullRow(ord);\n try {\n const tracked =\n q.explicitDeps || this.depsAreAll\n ? row\n : trackRow(row, this.deps);\n if (pred(tracked)) kept.push(ord);\n } catch (err) {\n this.depsAreAll = true;\n try {\n if (pred(row)) kept.push(ord);\n } catch {\n throw err;\n }\n }\n }\n return toU32(kept);\n }\n\n private materializeFullRow(ord: number): RowValue {\n const c = this.query.collection;\n const out: RowValue = {};\n for (const name of c.columnNames()) out[name] = c._internalReadCell(name, ord);\n return out;\n }\n\n /** Return a snapshot, reusing the cached one if all observed columns are unchanged. */\n snapshot(): QuerySnapshot<TRow> {\n if (this.cacheIsFresh()) return this.cachedSnapshot!;\n return this.recompute();\n }\n\n /**\n * Subscribe to reactive updates. `listener` fires once with the initial\n * snapshot and then again after every mutation that touches an observed\n * column. Returns an unsubscribe function.\n */\n subscribe(listener: (snap: QuerySnapshot<TRow>) => void): () => void {\n listener(this.snapshot());\n const unsub = this.query.collection.subscribe((event: ChangeEvent) => {\n if (!this.shouldReact(event)) return;\n listener(this.snapshot());\n });\n return unsub;\n }\n\n /** Visible for tests: introspect current inferred deps. */\n get inferredDeps(): ReadonlySet<string> {\n return this.deps;\n }\n\n get isDepsAll(): boolean {\n return this.depsAreAll;\n }\n\n private shouldReact(event: ChangeEvent): boolean {\n if (event.columns === 'all' || this.depsAreAll) return true;\n if (!this.cachedSnapshot) return true;\n if (\n event.op === 'insert' ||\n event.op === 'delete' ||\n event.op === 'rollback' ||\n event.op === 'compact'\n ) {\n return true;\n }\n const observed = new Set<string>(this.observedColumns());\n for (const c of event.columns) {\n if (observed.has(c)) return true;\n }\n return false;\n }\n}\n\n/** Shorthand entry point: `query(collection).where(...).select(...)`. */\nexport function query<TRow extends RowValue = RowValue>(\n collection: Collection,\n): Query<TRow> {\n return new Query<TRow>(collection);\n}\n\n/** Build an executor for a Query. */\nexport function run<TRow extends RowValue = RowValue>(\n q: Query<TRow>,\n): QueryExecutor<TRow> {\n return new QueryExecutor<TRow>(q);\n}\n\n// ----------------------------------------------------------------------\n\nfunction toU32(arr: readonly number[]): Uint32Array {\n const out = new Uint32Array(arr.length);\n for (let i = 0; i < arr.length; i++) out[i] = arr[i]!;\n return out;\n}\n","/**\n * Query builder — `@tanstack/db` parity (Layer C.4).\n *\n * This module ports the non-incremental builder surface from\n * `@tanstack/db@0.6.16`: a chainable `BaseQueryBuilder` that emits\n * the QueryIR defined in `ir.ts`. Compiler/runtime execution lands in\n * later Layer-C tasks; this file only builds validated IR.\n */\n\nimport type { Collection } from '../collection/collection.js';\nimport { ValidationError } from '../errors.js';\nimport {\n ConcatToArrayWrapper,\n MaterializeWrapper,\n ToArrayWrapper,\n} from './expressions.js';\nimport {\n Aggregate,\n CollectionRef,\n Func,\n INCLUDES_SCALAR_FIELD,\n IncludesSubquery,\n PropRef,\n QueryRef,\n Value,\n isExpressionLike,\n type BasicExpression,\n type CompareOptions,\n type From,\n type GroupBy,\n type Having,\n type IncludesMaterialization,\n type OrderBy,\n type QueryIR,\n type Select,\n type Where,\n} from './ir.js';\nimport {\n createRefProxy,\n createRefProxyWithSelected,\n isRefProxy,\n toExpression,\n type RootRefProxy,\n type SingleRowRefProxy,\n} from './ref-proxy.js';\n\n// ---------------------------------------------------------------------\n// Public type surface\n// ---------------------------------------------------------------------\n\nexport type ContextSchema = Record<string, unknown>;\n\nexport type Prettify<T> = { [K in keyof T]: T[K] } & {};\n\ntype JoinType = 'left' | 'right' | 'inner' | 'outer' | 'full' | 'cross';\n\nexport interface Context {\n baseSchema: ContextSchema;\n schema: ContextSchema;\n fromSourceName?: string;\n hasJoins?: boolean;\n joinTypes?: Record<string, JoinType>;\n result?: unknown;\n hasResult?: boolean;\n singleResult?: boolean;\n}\n\nexport type EmptyContext = {\n baseSchema: {};\n schema: {};\n hasJoins: false;\n hasResult: false;\n};\n\nexport type QuerySource = Collection | BaseQueryBuilder<any>;\nexport type SourceRecord = Record<string, QuerySource>;\nexport type Source = SourceRecord;\n\nexport type InferCollectionType<T> = T extends Collection\n ? Record<string, unknown>\n : never;\n\nexport type GetResult<TContext extends Context> = TContext extends {\n hasResult: true;\n result: infer TResult;\n}\n ? TResult\n : TContext extends { hasJoins: true; schema: infer TSchema }\n ? TSchema\n : TContext extends { schema: infer TSchema; fromSourceName: infer TAlias }\n ? TAlias extends keyof TSchema\n ? TSchema[TAlias]\n : TSchema\n : unknown;\n\nexport type InferResultType<TContext extends Context> = TContext extends { singleResult: true }\n ? GetResult<TContext> | undefined\n : Array<GetResult<TContext>>;\n\nexport type ExtractContext<T> = T extends { readonly __context: infer TContext }\n ? TContext extends Context\n ? TContext\n : never\n : never;\n\nexport type QueryResult<T> = T extends { readonly __context: infer TContext }\n ? TContext extends Context\n ? GetResult<TContext>\n : never\n : never;\n\nexport type SchemaFromSource<T extends SourceRecord> = Prettify<{\n [K in keyof T & string]: T[K] extends BaseQueryBuilder<infer TContext>\n ? GetResult<TContext>\n : T[K] extends Collection\n ? InferCollectionType<T[K]>\n : Record<string, unknown>;\n}>;\n\nexport type ApplyJoinOptionalityToMergedSchema<\n TExistingSchema extends ContextSchema,\n TNewSchema extends ContextSchema,\n TJoinType extends JoinType,\n TFromSourceName extends string,\n> = Prettify<{\n [K in keyof TExistingSchema]: K extends TFromSourceName\n ? TJoinType extends 'right' | 'full'\n ? TExistingSchema[K] | undefined\n : TExistingSchema[K]\n : TExistingSchema[K];\n} & {\n [K in keyof TNewSchema]: TJoinType extends 'left' | 'full'\n ? TNewSchema[K] | undefined\n : TNewSchema[K];\n}>;\n\ntype PreserveResultFlags<TContext extends Context> =\n (TContext extends { result: infer TResult; hasResult: true }\n ? { result: TResult; hasResult: true }\n : {})\n & (TContext extends { singleResult: true } ? { singleResult: true } : {});\n\nexport type MergeContextForJoinCallback<\n TContext extends Context,\n TNewSchema extends ContextSchema,\n> = Prettify<{\n baseSchema: TContext['baseSchema'];\n schema: Prettify<TContext['schema'] & TNewSchema>;\n fromSourceName: TContext['fromSourceName'] & string;\n hasJoins: true;\n} & PreserveResultFlags<TContext>>;\n\nexport type MergeContextWithJoinType<\n TContext extends Context,\n TNewSchema extends ContextSchema,\n TJoinType extends JoinType,\n> = Prettify<{\n baseSchema: TContext['baseSchema'];\n schema: ApplyJoinOptionalityToMergedSchema<\n TContext['schema'],\n TNewSchema,\n TJoinType,\n TContext['fromSourceName'] & string\n >;\n fromSourceName: TContext['fromSourceName'] & string;\n hasJoins: true;\n joinTypes: (TContext['joinTypes'] extends Record<string, JoinType>\n ? TContext['joinTypes']\n : {}) & { [K in keyof TNewSchema & string]: TJoinType };\n} & PreserveResultFlags<TContext>>;\n\nexport type ResultTypeFromSelectValue<TValue> = TValue extends BasicExpression<infer TResult>\n ? TResult\n : TValue extends Aggregate<infer TResult>\n ? TResult\n : TValue extends ToArrayWrapper<infer TResult>\n ? Array<TResult>\n : TValue extends ConcatToArrayWrapper<any>\n ? string\n : TValue extends MaterializeWrapper<infer TResult, infer TSingle>\n ? TSingle extends true ? TResult | undefined : Array<TResult>\n : TValue extends BaseQueryBuilder<any>\n ? Array<QueryResult<TValue>>\n : TValue;\n\nexport type ResultTypeFromSelect<TSelect> = TSelect extends\n | BasicExpression<any>\n | Aggregate<any>\n | ToArrayWrapper<any>\n | ConcatToArrayWrapper<any>\n | MaterializeWrapper<any, any>\n | BaseQueryBuilder<any>\n ? ResultTypeFromSelectValue<TSelect>\n : TSelect extends Record<string, unknown>\n ? { [K in keyof TSelect]: ResultTypeFromSelect<TSelect[K]> }\n : ResultTypeFromSelectValue<TSelect>;\n\nexport type WithResult<TContext extends Context, TResult> = {\n baseSchema: TContext['baseSchema'];\n schema: TContext['schema'];\n result: TResult;\n hasResult: true;\n} & (TContext extends { fromSourceName: infer TAlias }\n ? { fromSourceName: TAlias & string }\n : {})\n & (TContext extends { hasJoins: infer THasJoins } ? { hasJoins: THasJoins & boolean } : {})\n & (TContext extends { joinTypes: infer TJoinTypes } ? { joinTypes: TJoinTypes & Record<string, JoinType> } : {})\n & (TContext extends { singleResult: infer TSingle } ? { singleResult: TSingle & boolean } : {});\n\nexport type InitialQueryBuilder = Pick<BaseQueryBuilder<EmptyContext>, 'from'>;\nexport type QueryBuilder<TContext extends Context = Context> = Omit<\n BaseQueryBuilder<TContext>,\n 'from' | '_getQuery'\n>;\n\nexport type RefsForContext<TContext extends Context> = RefContext<TContext> &\n (TContext extends { hasResult: true; result: infer TResult }\n ? { $selected: SingleRowRefProxy<TResult & Record<string, unknown>> & Record<string, any> }\n : {});\nexport type WhereCallback<TContext extends Context> = (refs: RefsForContext<TContext>) => unknown;\nexport type SelectObject<T extends Record<string, unknown> = Record<string, unknown>> = T;\nexport type OrderByCallback<TContext extends Context> = (refs: RefsForContext<TContext>) => unknown;\nexport type GroupByCallback<TContext extends Context> = (refs: RefsForContext<TContext>) => unknown;\nexport type JoinOnCallback<TContext extends Context> = (refs: RefsForContext<TContext>) => unknown;\nexport type FunctionalHavingRow<TContext extends Context> = TContext['schema'] &\n (TContext extends { hasResult: true; result: infer TResult } ? { $selected: TResult } : {});\n\ntype RefContext<_TContext extends Context> = RootRefProxy<any> & Record<string, any>;\ntype WithSelectedRefContext<TContext extends Context> = RefsForContext<TContext> & {\n $selected: SingleRowRefProxy<Record<string, unknown>> & Record<string, any>;\n};\ntype SelectCallback<TContext extends Context> = (refs: RefsForContext<TContext>) => unknown;\ntype HavingCallback<TContext extends Context> = (refs: RefsForContext<TContext>) => unknown;\ntype JoinCallback<TContext extends Context> = JoinOnCallback<TContext>;\n\nexport type OrderByOptions =\n | 'asc'\n | 'desc'\n | (Partial<CompareOptions> & {\n direction?: 'asc' | 'desc';\n nulls?: 'first' | 'last';\n });\n\ntype QueryDraft = Omit<\n Partial<QueryIR>,\n 'select' | 'where' | 'having' | 'groupBy' | 'orderBy' | 'join' | 'fnSelect' | 'fnWhere' | 'fnHaving'\n> & {\n select?: Select | BasicExpression | Aggregate | IncludesSubquery | undefined;\n where?: Array<Where> | undefined;\n having?: Array<Having> | undefined;\n groupBy?: GroupBy | undefined;\n orderBy?: OrderBy | undefined;\n join?: QueryIR['join'] | undefined;\n fnSelect?: ((row: Record<string, unknown>) => unknown) | undefined;\n fnWhere?: Array<(row: Record<string, unknown>) => unknown> | undefined;\n fnHaving?: Array<(row: Record<string, unknown>) => unknown> | undefined;\n};\n\n// ---------------------------------------------------------------------\n// Builder\n// ---------------------------------------------------------------------\n\nexport class BaseQueryBuilder<TContext extends Context = EmptyContext> {\n /** Phantom type carrier for structural result/context inference. */\n declare readonly __context: TContext;\n private readonly query: QueryDraft;\n\n constructor(query: QueryDraft = {}) {\n this.query = query;\n }\n\n from<TSource extends SourceRecord>(\n source: TSource,\n ): BaseQueryBuilder<{\n baseSchema: SchemaFromSource<TSource>;\n schema: SchemaFromSource<TSource>;\n fromSourceName: keyof TSource & string;\n hasJoins: false;\n }> {\n const from = createRefForSource(source);\n return new BaseQueryBuilder({\n ...this.query,\n from,\n }) as unknown as BaseQueryBuilder<{\n baseSchema: SchemaFromSource<TSource>;\n schema: SchemaFromSource<TSource>;\n fromSourceName: keyof TSource & string;\n hasJoins: false;\n }>;\n }\n\n join<TSource extends SourceRecord, TJoinType extends JoinType = 'left'>(\n source: TSource,\n onCallback: JoinCallback<MergeContextForJoinCallback<TContext, SchemaFromSource<TSource>>>,\n type: TJoinType = 'left' as TJoinType,\n ): BaseQueryBuilder<MergeContextWithJoinType<TContext, SchemaFromSource<TSource>, TJoinType>> {\n return this.appendJoin(source, onCallback, type) as unknown as BaseQueryBuilder<\n MergeContextWithJoinType<TContext, SchemaFromSource<TSource>, TJoinType>\n >;\n }\n\n innerJoin<TSource extends SourceRecord>(\n source: TSource,\n onCallback: JoinCallback<MergeContextForJoinCallback<TContext, SchemaFromSource<TSource>>>,\n ): BaseQueryBuilder<MergeContextWithJoinType<TContext, SchemaFromSource<TSource>, 'inner'>> {\n return this.appendJoin(source, onCallback, 'inner') as unknown as BaseQueryBuilder<\n MergeContextWithJoinType<TContext, SchemaFromSource<TSource>, 'inner'>\n >;\n }\n\n leftJoin<TSource extends SourceRecord>(\n source: TSource,\n onCallback: JoinCallback<MergeContextForJoinCallback<TContext, SchemaFromSource<TSource>>>,\n ): BaseQueryBuilder<MergeContextWithJoinType<TContext, SchemaFromSource<TSource>, 'left'>> {\n return this.appendJoin(source, onCallback, 'left') as unknown as BaseQueryBuilder<\n MergeContextWithJoinType<TContext, SchemaFromSource<TSource>, 'left'>\n >;\n }\n\n rightJoin<TSource extends SourceRecord>(\n source: TSource,\n onCallback: JoinCallback<MergeContextForJoinCallback<TContext, SchemaFromSource<TSource>>>,\n ): BaseQueryBuilder<MergeContextWithJoinType<TContext, SchemaFromSource<TSource>, 'right'>> {\n return this.appendJoin(source, onCallback, 'right') as unknown as BaseQueryBuilder<\n MergeContextWithJoinType<TContext, SchemaFromSource<TSource>, 'right'>\n >;\n }\n\n fullJoin<TSource extends SourceRecord>(\n source: TSource,\n onCallback: JoinCallback<MergeContextForJoinCallback<TContext, SchemaFromSource<TSource>>>,\n ): BaseQueryBuilder<MergeContextWithJoinType<TContext, SchemaFromSource<TSource>, 'full'>> {\n return this.appendJoin(source, onCallback, 'full') as unknown as BaseQueryBuilder<\n MergeContextWithJoinType<TContext, SchemaFromSource<TSource>, 'full'>\n >;\n }\n\n where(callback: WhereCallback<TContext>): BaseQueryBuilder<TContext> {\n const expression = expressionFromCallback(\n callback as (refs: RootRefProxy<any>) => unknown,\n this.aliases(),\n ) as BasicExpression<boolean>;\n return new BaseQueryBuilder({\n ...this.query,\n where: [...(this.query.where ?? []), expression],\n }) as BaseQueryBuilder<TContext>;\n }\n\n select<TSelect>(\n callback: (refs: RefsForContext<TContext>) => TSelect,\n ): BaseQueryBuilder<WithResult<TContext, ResultTypeFromSelect<TSelect>>> {\n const refs = createRefProxy(this.aliases());\n const raw = callback(refs as RefsForContext<TContext>);\n const next: QueryDraft = {\n ...this.query,\n select: buildNestedSelect(raw, this.aliases()) as Select | BasicExpression | Aggregate | IncludesSubquery,\n };\n delete next.fnSelect;\n return new BaseQueryBuilder(next) as BaseQueryBuilder<\n WithResult<TContext, ResultTypeFromSelect<TSelect>>\n >;\n }\n\n groupBy(callback: GroupByCallback<TContext>): BaseQueryBuilder<TContext> {\n const refs = createRefProxy(this.aliases());\n const result = callback(refs as RefsForContext<TContext>);\n const expressions = Array.isArray(result)\n ? result.map((value) => toExpr(value) as BasicExpression)\n : [toExpr(result) as BasicExpression];\n return new BaseQueryBuilder({\n ...this.query,\n groupBy: [...(this.query.groupBy ?? []), ...expressions],\n }) as BaseQueryBuilder<TContext>;\n }\n\n having(callback: HavingCallback<TContext>): BaseQueryBuilder<TContext> {\n const refs = createRefProxyWithSelected(this.aliases());\n const expression = toExpr(callback(refs as WithSelectedRefContext<TContext>)) as BasicExpression<boolean>;\n return new BaseQueryBuilder({\n ...this.query,\n having: [...(this.query.having ?? []), expression],\n }) as BaseQueryBuilder<TContext>;\n }\n\n orderBy(\n callback: OrderByCallback<TContext>,\n options: OrderByOptions = 'asc',\n ): BaseQueryBuilder<TContext> {\n const refs = this.query.select ?? this.query.fnSelect\n ? createRefProxyWithSelected(this.aliases())\n : createRefProxy(this.aliases());\n const result = callback(refs as WithSelectedRefContext<TContext>);\n const expressions = Array.isArray(result)\n ? result.map((value) => toExpr(value) as BasicExpression)\n : [toExpr(result) as BasicExpression];\n const compareOptions = normalizeOrderByOptions(options);\n const orderClauses = expressions.map((expression) => ({\n expression,\n compareOptions,\n }));\n return new BaseQueryBuilder({\n ...this.query,\n orderBy: [...(this.query.orderBy ?? []), ...orderClauses],\n }) as BaseQueryBuilder<TContext>;\n }\n\n limit(limit: number): BaseQueryBuilder<TContext> {\n return new BaseQueryBuilder({\n ...this.query,\n limit,\n }) as BaseQueryBuilder<TContext>;\n }\n\n offset(offset: number): BaseQueryBuilder<TContext> {\n return new BaseQueryBuilder({\n ...this.query,\n offset,\n }) as BaseQueryBuilder<TContext>;\n }\n\n distinct(): BaseQueryBuilder<TContext> {\n return new BaseQueryBuilder({\n ...this.query,\n distinct: true,\n }) as BaseQueryBuilder<TContext>;\n }\n\n findOne(): BaseQueryBuilder<TContext & { singleResult: true }> {\n return new BaseQueryBuilder({\n ...this.query,\n singleResult: true,\n }) as BaseQueryBuilder<TContext & { singleResult: true }>;\n }\n\n get fn(): {\n select: <TFuncSelectResult>(\n callback: (row: TContext['schema']) => TFuncSelectResult,\n ) => BaseQueryBuilder<WithResult<TContext, TFuncSelectResult>>;\n where: (callback: (row: TContext['schema']) => unknown) => BaseQueryBuilder<TContext>;\n having: (callback: (row: FunctionalHavingRow<TContext>) => unknown) => BaseQueryBuilder<TContext>;\n } {\n const builder = this;\n return {\n select<TFuncSelectResult>(callback: (row: TContext['schema']) => TFuncSelectResult) {\n const next: QueryDraft = {\n ...builder.query,\n fnSelect: callback as (row: Record<string, unknown>) => unknown,\n };\n delete next.select;\n return new BaseQueryBuilder(next) as BaseQueryBuilder<WithResult<TContext, TFuncSelectResult>>;\n },\n where(callback: (row: TContext['schema']) => unknown) {\n return new BaseQueryBuilder({\n ...builder.query,\n fnWhere: [\n ...(builder.query.fnWhere ?? []),\n callback as (row: Record<string, unknown>) => unknown,\n ],\n }) as BaseQueryBuilder<TContext>;\n },\n having(callback: (row: FunctionalHavingRow<TContext>) => unknown) {\n return new BaseQueryBuilder({\n ...builder.query,\n fnHaving: [\n ...(builder.query.fnHaving ?? []),\n callback as (row: Record<string, unknown>) => unknown,\n ],\n }) as BaseQueryBuilder<TContext>;\n },\n };\n }\n\n _getQuery(): QueryIR {\n if (!this.query.from) {\n throw new ValidationError('Query must have a from clause');\n }\n return this.query as QueryIR;\n }\n\n private appendJoin<TSource extends SourceRecord>(\n source: TSource,\n onCallback: JoinCallback<any>,\n type: JoinType,\n ): BaseQueryBuilder<TContext> {\n const from = createRefForSource(source);\n const refs = createRefProxy([...this.aliases(), from.alias]);\n const onExpression = onCallback(refs as RefsForContext<any>);\n const expression = toExpr(onExpression);\n if (!(expression instanceof Func) || expression.name !== 'eq' || expression.args.length !== 2) {\n throw new ValidationError('Join condition must be an equality expression produced by eq(left, right)');\n }\n const left = expression.args[0];\n const right = expression.args[1];\n if (!left || !right) {\n throw new ValidationError('Join condition must include both left and right operands');\n }\n return new BaseQueryBuilder({\n ...this.query,\n join: [\n ...(this.query.join ?? []),\n {\n from,\n type,\n left,\n right,\n },\n ],\n }) as BaseQueryBuilder<TContext>;\n }\n\n private aliases(): Array<string> {\n const aliases: Array<string> = [];\n if (this.query.from) aliases.push(this.query.from.alias);\n for (const join of this.query.join ?? []) {\n aliases.push(join.from.alias);\n }\n return aliases;\n }\n}\n\n// Upstream exports `Query` as the builder constructor alias.\nexport const Query = BaseQueryBuilder;\n\nexport function buildQuery<TQuery extends BaseQueryBuilder<any>>(\n fn: (q: InitialQueryBuilder) => TQuery,\n): QueryIR {\n return getQueryIR(fn(new BaseQueryBuilder() as InitialQueryBuilder));\n}\n\nexport function getQueryIR(builder: BaseQueryBuilder<any>): QueryIR {\n return builder._getQuery();\n}\n\n// ---------------------------------------------------------------------\n// Source + expression helpers\n// ---------------------------------------------------------------------\n\nfunction createRefForSource(source: unknown): From {\n if (source === null || typeof source !== 'object') {\n throw new ValidationError(`Invalid source for from()/join(): expected { alias: collectionOrQuery }`);\n }\n if (Array.isArray(source)) {\n throw new ValidationError('Invalid source for from()/join(): arrays are not valid sources');\n }\n const entries = Object.entries(source as Record<string, unknown>);\n if (entries.length === 0) {\n throw new ValidationError('Invalid source for from()/join(): source object must not be empty');\n }\n if (entries.length !== 1) {\n throw new ValidationError('Only one source alias may be passed to from()/join() at a time');\n }\n const first = entries[0];\n if (!first) {\n throw new ValidationError('Invalid source for from()/join()');\n }\n const [alias, value] = first;\n if (isCollection(value)) {\n return new CollectionRef(value, alias);\n }\n if (value instanceof BaseQueryBuilder) {\n return new QueryRef(value._getQuery(), alias);\n }\n throw new ValidationError(`Invalid source for alias \"${alias}\": expected Collection or QueryBuilder`);\n}\n\nfunction isCollection(value: unknown): value is Collection {\n return (\n value !== null &&\n typeof value === 'object' &&\n typeof (value as { get?: unknown }).get === 'function' &&\n typeof (value as { insert?: unknown }).insert === 'function' &&\n typeof (value as { schema?: unknown }).schema === 'object'\n );\n}\n\nfunction expressionFromCallback(\n callback: (refs: RootRefProxy<any>) => unknown,\n aliases: Array<string>,\n): BasicExpression {\n const refs = createRefProxy(aliases);\n return toExpr(callback(refs));\n}\n\nfunction getValueTypeName(value: unknown): string {\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (typeof value === 'object') return 'object';\n return typeof value;\n}\n\nfunction toExpr(value: unknown): BasicExpression {\n if (value === undefined) return toExpression(null);\n if (\n value instanceof Func ||\n value instanceof PropRef ||\n value instanceof Value\n ) {\n return value;\n }\n if (value instanceof Aggregate) {\n return value as unknown as BasicExpression;\n }\n if (isRefProxy(value)) {\n return toExpression(value);\n }\n if (isExpressionLike(value)) {\n if (value instanceof CollectionRef || value instanceof QueryRef || value instanceof IncludesSubquery) {\n throw new ValidationError(`Invalid expression type: ${value.type}`);\n }\n return value as BasicExpression;\n }\n return toExpression(value);\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return (\n value !== null &&\n typeof value === 'object' &&\n !isExpressionLike(value) &&\n !isRefProxy(value)\n );\n}\n\nfunction buildNestedSelect(\n obj: unknown,\n parentAliases: Array<string> = [],\n): BasicExpression | Aggregate | Select | IncludesSubquery {\n if (!isPlainObject(obj)) return toExprOrAggregate(obj);\n const out: Select = {};\n for (const [k, v] of Object.entries(obj)) {\n if (typeof k === 'string' && k.startsWith('__SPREAD_SENTINEL__')) {\n out[k] = v as unknown as BasicExpression;\n continue;\n }\n if (v instanceof BaseQueryBuilder) {\n out[k] = buildIncludesSubquery(v, k, parentAliases, 'collection');\n continue;\n }\n if (v instanceof ToArrayWrapper) {\n if (!(v.query instanceof BaseQueryBuilder)) {\n throw new ValidationError('toArray() must wrap a subquery builder');\n }\n out[k] = buildIncludesSubquery(v.query, k, parentAliases, 'array');\n continue;\n }\n if (v instanceof ConcatToArrayWrapper) {\n if (!(v.query instanceof BaseQueryBuilder)) {\n throw new ValidationError('concat(toArray(...)) must wrap a subquery builder');\n }\n out[k] = buildIncludesSubquery(v.query, k, parentAliases, 'concat');\n continue;\n }\n if (v instanceof MaterializeWrapper) {\n if (!(v.query instanceof BaseQueryBuilder)) {\n throw new ValidationError('materialize() must wrap a subquery builder');\n }\n const child = v.query._getQuery();\n out[k] = buildIncludesSubquery(\n v.query,\n k,\n parentAliases,\n child.singleResult ? 'single' : 'array',\n );\n continue;\n }\n out[k] = buildNestedSelect(v, parentAliases);\n }\n return out;\n}\n\nfunction toExprOrAggregate(value: unknown): BasicExpression | Aggregate {\n if (value === undefined) return new Value(null);\n if (value instanceof Aggregate) return value;\n return toExpr(value);\n}\n\nfunction normalizeOrderByOptions(options: OrderByOptions): CompareOptions {\n if (typeof options === 'string') {\n return { direction: options, nulls: 'first' };\n }\n const out: CompareOptions = {\n direction: options.direction ?? 'asc',\n nulls: options.nulls ?? 'first',\n };\n if (options.stringSort === 'lexical') {\n Object.assign(out, { stringSort: 'lexical' });\n } else if (options.stringSort === 'locale') {\n Object.assign(out, { stringSort: 'locale' });\n if ('locale' in options && options.locale !== undefined) {\n Object.assign(out, { locale: options.locale });\n }\n if ('localeOptions' in options && options.localeOptions !== undefined) {\n Object.assign(out, { localeOptions: options.localeOptions });\n }\n }\n return out;\n}\n\n// ---------------------------------------------------------------------\n// Correlated includes subquery support\n// ---------------------------------------------------------------------\n\nfunction collectRefsFromExpression(expr: BasicExpression | Aggregate): Array<PropRef> {\n const refs: Array<PropRef> = [];\n switch (expr.type) {\n case 'ref':\n refs.push(expr);\n break;\n case 'func':\n for (const arg of expr.args) {\n refs.push(...collectRefsFromExpression(arg));\n }\n break;\n case 'agg':\n for (const arg of expr.args) {\n refs.push(...collectRefsFromExpression(arg));\n }\n break;\n case 'val':\n break;\n }\n return refs;\n}\n\nfunction isWrappedWhere(where: Where): where is { expression: BasicExpression<boolean>; residual?: boolean } {\n return where !== null && typeof where === 'object' && Object.prototype.hasOwnProperty.call(where, 'expression');\n}\n\nfunction whereExpression(where: Where): BasicExpression<boolean> {\n if (isWrappedWhere(where)) {\n return where.expression;\n }\n return where as BasicExpression<boolean>;\n}\n\nfunction referencesParent(where: Where, parentAliases: Array<string>): boolean {\n const expr = whereExpression(where);\n return collectRefsFromExpression(expr).some((ref) => {\n const alias = ref.path[0];\n return alias !== undefined && parentAliases.includes(alias);\n });\n}\n\nfunction buildIncludesSubquery(\n childBuilder: BaseQueryBuilder<any>,\n fieldName: string,\n parentAliases: Array<string>,\n materialization: IncludesMaterialization,\n): IncludesSubquery {\n const childQuery = childBuilder._getQuery();\n const childAliases = [childQuery.from.alias];\n for (const join of childQuery.join ?? []) {\n childAliases.push(join.from.alias);\n }\n\n let parentRef: PropRef | undefined;\n let childRef: PropRef | undefined;\n let correlationWhereIndex = -1;\n let correlationAndArgIndex = -1;\n\n if (childQuery.where) {\n for (let i = 0; i < childQuery.where.length; i++) {\n const where = childQuery.where[i];\n if (!where) continue;\n const expr = whereExpression(where);\n if (expr.type === 'func' && expr.name === 'eq' && expr.args.length === 2) {\n const result = extractCorrelation(expr.args[0], expr.args[1], parentAliases, childAliases);\n if (result) {\n parentRef = result.parentRef;\n childRef = result.childRef;\n correlationWhereIndex = i;\n break;\n }\n }\n if (expr.type === 'func' && expr.name === 'and' && expr.args.length >= 2) {\n for (let j = 0; j < expr.args.length; j++) {\n const arg = expr.args[j];\n if (arg?.type === 'func' && arg.name === 'eq' && arg.args.length === 2) {\n const result = extractCorrelation(\n arg.args[0],\n arg.args[1],\n parentAliases,\n childAliases,\n );\n if (result) {\n parentRef = result.parentRef;\n childRef = result.childRef;\n correlationWhereIndex = i;\n correlationAndArgIndex = j;\n break;\n }\n }\n }\n if (parentRef) break;\n }\n }\n }\n\n if (!parentRef || !childRef || correlationWhereIndex === -1) {\n throw new ValidationError(\n `Includes subquery for \"${fieldName}\" must have a WHERE clause with an eq() condition ` +\n `that correlates a parent field with a child field. Example: ` +\n `.where(({child}) => eq(child.parentId, parent.id))`,\n );\n }\n\n const modifiedWhere = [...(childQuery.where ?? [])];\n if (correlationAndArgIndex >= 0) {\n const where = modifiedWhere[correlationWhereIndex];\n if (!where) {\n throw new ValidationError(`Includes subquery for \"${fieldName}\" has invalid correlation WHERE`);\n }\n const expr = whereExpression(where);\n if (!(expr instanceof Func)) {\n throw new ValidationError(`Includes subquery for \"${fieldName}\" has invalid correlation expression`);\n }\n const remainingArgs = expr.args.filter((_, idx) => idx !== correlationAndArgIndex);\n if (remainingArgs.length === 1) {\n const isResidual = typeof where === 'object' && 'expression' in where && where.residual;\n modifiedWhere[correlationWhereIndex] = isResidual\n ? { expression: remainingArgs[0] as BasicExpression<boolean>, residual: true }\n : (remainingArgs[0] as BasicExpression<boolean>);\n } else {\n const newAnd = new Func('and', remainingArgs) as BasicExpression<boolean>;\n const isResidual = typeof where === 'object' && 'expression' in where && where.residual;\n modifiedWhere[correlationWhereIndex] = isResidual\n ? { expression: newAnd, residual: true }\n : newAnd;\n }\n } else {\n modifiedWhere.splice(correlationWhereIndex, 1);\n }\n\n const pureChildWhere: Array<Where> = [];\n const parentFilters: Array<Where> = [];\n for (const w of modifiedWhere) {\n if (referencesParent(w, parentAliases)) {\n parentFilters.push(w);\n } else {\n pureChildWhere.push(w);\n }\n }\n\n let parentProjection: Array<PropRef> | undefined;\n if (parentFilters.length > 0) {\n const seen = new Set<string>();\n parentProjection = [];\n for (const w of parentFilters) {\n for (const ref of collectRefsFromExpression(whereExpression(w))) {\n const alias = ref.path[0];\n const key = ref.path.join('.');\n if (alias !== undefined && parentAliases.includes(alias) && !seen.has(key)) {\n seen.add(key);\n parentProjection.push(ref);\n }\n }\n }\n }\n\n const modifiedQuery: QueryIR = { ...childQuery };\n if (pureChildWhere.length > 0) {\n modifiedQuery.where = pureChildWhere;\n } else {\n delete modifiedQuery.where;\n }\n\n const rawChildSelect = modifiedQuery.select as unknown;\n const hasObjectSelect = rawChildSelect === undefined || isPlainObject(rawChildSelect);\n let includesQuery = modifiedQuery;\n let scalarField: string | undefined;\n\n if (materialization === 'concat' && (rawChildSelect === undefined || hasObjectSelect)) {\n throw new ValidationError(\n `concat(toArray(...)) for \"${fieldName}\" requires the subquery to select a scalar value`,\n );\n }\n\n if (!hasObjectSelect) {\n if (materialization === 'collection') {\n throw new ValidationError(\n `Includes subquery for \"${fieldName}\" must select an object when materializing as a Collection`,\n );\n }\n scalarField = INCLUDES_SCALAR_FIELD;\n includesQuery = {\n ...modifiedQuery,\n select: {\n [scalarField]: rawChildSelect as BasicExpression | Aggregate | Select | IncludesSubquery,\n },\n };\n }\n\n return new IncludesSubquery(\n includesQuery,\n parentRef,\n childRef,\n fieldName,\n parentFilters.length > 0 ? parentFilters : undefined,\n parentProjection,\n materialization,\n scalarField,\n );\n}\n\nfunction extractCorrelation(\n argA: BasicExpression | undefined,\n argB: BasicExpression | undefined,\n parentAliases: Array<string>,\n childAliases: Array<string>,\n): { parentRef: PropRef; childRef: PropRef } | undefined {\n if (argA?.type === 'ref' && argB?.type === 'ref') {\n const aAlias = argA.path[0];\n const bAlias = argB.path[0];\n if (\n aAlias !== undefined &&\n bAlias !== undefined &&\n parentAliases.includes(aAlias) &&\n childAliases.includes(bAlias)\n ) {\n return { parentRef: argA, childRef: argB };\n }\n if (\n aAlias !== undefined &&\n bAlias !== undefined &&\n parentAliases.includes(bAlias) &&\n childAliases.includes(aAlias)\n ) {\n return { parentRef: argB, childRef: argA };\n }\n }\n return undefined;\n}\n","import type { LoadSubsetOptions } from '../tanstack-types.js';\nimport { and, not, or } from './expressions.js';\nimport { Value, type BasicExpression, type OrderBy } from './ir.js';\n\n/**\n * Conservative Layer-C subset check. Exact predicates are subsets of each other;\n * an undefined superset means \"all rows\", so any subset matches.\n */\nexport function isWhereSubset(\n subset: BasicExpression<boolean> | undefined,\n superset: BasicExpression<boolean> | undefined,\n): boolean {\n if (superset === undefined) return true;\n if (subset === undefined) return false;\n return expressionKey(subset) === expressionKey(superset);\n}\n\n/** Combine predicates with OR. Kept intentionally simple until Layer D optimizer work. */\nexport function unionWherePredicates(\n predicates: Array<BasicExpression<boolean>>,\n): BasicExpression<boolean> {\n if (predicates.length === 0) return new Value(true) as BasicExpression<boolean>;\n const [first, second, ...rest] = predicates;\n if (!second) return first as BasicExpression<boolean>;\n return or(first, second, ...rest) as BasicExpression<boolean>;\n}\n\n/** Return `fromPredicate AND NOT(subtractPredicate)` when both are present. */\nexport function minusWherePredicates(\n fromPredicate: BasicExpression<boolean> | undefined,\n subtractPredicate: BasicExpression<boolean> | undefined,\n): BasicExpression<boolean> | null {\n if (fromPredicate === undefined) return null;\n if (subtractPredicate === undefined) return fromPredicate;\n if (isWhereSubset(fromPredicate, subtractPredicate)) {\n return new Value(false) as BasicExpression<boolean>;\n }\n return and(fromPredicate, not(subtractPredicate)) as BasicExpression<boolean>;\n}\n\n/** Order subset is satisfied when the requested order is a prefix of the loaded order. */\nexport function isOrderBySubset(\n subset: OrderBy | undefined,\n superset: OrderBy | undefined,\n): boolean {\n if (!subset || subset.length === 0) return true;\n if (!superset || superset.length < subset.length) return false;\n return subset.every((clause, index) => expressionKey(clause) === expressionKey(superset[index]));\n}\n\n/** Limited request is a subset of an equal/larger or unlimited loaded request. */\nexport function isLimitSubset(\n subset: number | undefined,\n superset: number | undefined,\n): boolean {\n if (subset === undefined) return superset === undefined;\n if (superset === undefined) return true;\n return subset <= superset;\n}\n\n/** Offset+limit subset over half-open ranges [offset, offset + limit). */\nexport function isOffsetLimitSubset(\n subset: { offset?: number; limit?: number },\n superset: { offset?: number; limit?: number },\n): boolean {\n const subsetStart = subset.offset ?? 0;\n const supersetStart = superset.offset ?? 0;\n if (subsetStart < supersetStart) return false;\n\n if (subset.limit === undefined) {\n return superset.limit === undefined;\n }\n if (superset.limit === undefined) return true;\n\n const subsetEnd = subsetStart + subset.limit;\n const supersetEnd = supersetStart + superset.limit;\n return subsetEnd <= supersetEnd;\n}\n\n/** Combined predicate subset check used by subset-load dedupe. */\nexport function isPredicateSubset(\n subset: LoadSubsetOptions,\n superset: LoadSubsetOptions,\n): boolean {\n return (\n isWhereSubset(\n subset.where as BasicExpression<boolean> | undefined,\n superset.where as BasicExpression<boolean> | undefined,\n ) &&\n isOrderBySubset(\n subset.orderBy as OrderBy | undefined,\n superset.orderBy as OrderBy | undefined,\n ) &&\n isOffsetLimitSubset(toOffsetLimit(subset), toOffsetLimit(superset))\n );\n}\n\nfunction toOffsetLimit(options: LoadSubsetOptions): { offset?: number; limit?: number } {\n return {\n ...(options.offset !== undefined ? { offset: options.offset } : {}),\n ...(options.limit !== undefined ? { limit: options.limit } : {}),\n };\n}\n\nfunction expressionKey(value: unknown): string {\n return JSON.stringify(value, (_key, item: unknown) => {\n if (typeof item === 'function') return '[function]';\n return item;\n });\n}\n","import type { LoadSubsetOptions } from '../tanstack-types.js';\nimport { isPredicateSubset } from './predicate-utils.js';\n\n/**\n * Deduplicated wrapper for loadSubset. Conservative Layer-C version:\n * skips requests already covered by completed loads; async calls are tracked\n * after resolution. Layer D/F can replace this with richer predicate algebra.\n */\nexport class DeduplicatedLoadSubset {\n private readonly _loadSubset: (options: LoadSubsetOptions) => true | Promise<void>;\n private readonly onDeduplicate: ((options: LoadSubsetOptions) => void) | undefined;\n private loaded: Array<LoadSubsetOptions> = [];\n private generation = 0;\n\n constructor(opts: {\n loadSubset: (options: LoadSubsetOptions) => true | Promise<void>;\n onDeduplicate?: (options: LoadSubsetOptions) => void;\n }) {\n this._loadSubset = opts.loadSubset;\n this.onDeduplicate = opts.onDeduplicate;\n }\n\n loadSubset = (options: LoadSubsetOptions): true | Promise<void> => {\n const cloned = cloneOptions(options);\n if (this.loaded.some((loaded) => isPredicateSubset(cloned, loaded))) {\n this.onDeduplicate?.(cloneOptions(options));\n return true;\n }\n\n const result = this._loadSubset(cloned);\n if (result === true) {\n this.loaded.push(cloneOptions(cloned));\n return true;\n }\n\n const generation = this.generation;\n return result.then(() => {\n if (generation === this.generation) {\n this.loaded.push(cloneOptions(cloned));\n }\n });\n };\n\n reset(): void {\n this.loaded = [];\n this.generation += 1;\n }\n}\n\nexport function cloneOptions(options: LoadSubsetOptions): LoadSubsetOptions {\n return { ...options };\n}\n","/**\n * queryOnce — Layer C.6.\n *\n * Thin TanStack-compatible one-shot query helper. The upstream runtime\n * builds a live query collection, preloads it, reads rows, then cleans\n * up. ArrowBase's Layer-C equivalent can run the QueryIR compiler\n * directly because live collection wrapping lands in C.7.\n */\n\nimport {\n BaseQueryBuilder,\n getQueryIR,\n type ExtractContext,\n type InitialQueryBuilder,\n type QueryResult,\n} from './builder.js';\nimport { runCollection } from './compiler.js';\n\nexport type QueryOnceResult<TQuery extends BaseQueryBuilder<any>> = ExtractContext<TQuery> extends {\n singleResult: true;\n}\n ? QueryResult<TQuery> | undefined\n : Array<QueryResult<TQuery>>;\n\nexport type QueryOnceQuery<TQuery extends BaseQueryBuilder<any>> =\n | ((q: InitialQueryBuilder) => TQuery)\n | TQuery;\n\n/** Configuration options for queryOnce. */\nexport interface QueryOnceConfig<TQuery extends BaseQueryBuilder<any> = BaseQueryBuilder<any>> {\n /** Query builder callback or pre-built query builder. */\n query: QueryOnceQuery<TQuery>;\n}\n\n/** Execute a one-shot query builder callback and return its result rows. */\nexport function queryOnce<TQuery extends BaseQueryBuilder<any>>(\n queryFn: (q: InitialQueryBuilder) => TQuery,\n): Promise<QueryOnceResult<TQuery>>;\n\n/** Execute a one-shot query from a config object. */\nexport function queryOnce<TQuery extends BaseQueryBuilder<any>>(\n config: QueryOnceConfig<TQuery>,\n): Promise<QueryOnceResult<TQuery>>;\n\nexport async function queryOnce<TQuery extends BaseQueryBuilder<any>>(\n configOrQuery: QueryOnceConfig<TQuery> | ((q: InitialQueryBuilder) => TQuery),\n): Promise<QueryOnceResult<TQuery>> {\n const query = resolveQuery(configOrQuery);\n const ir = getQueryIR(query);\n const rows = runCollection(ir);\n\n if (ir.singleResult) {\n return rows[0] as QueryOnceResult<TQuery>;\n }\n\n return rows as QueryOnceResult<TQuery>;\n}\n\nfunction resolveQuery<TQuery extends BaseQueryBuilder<any>>(\n configOrQuery: QueryOnceConfig<TQuery> | ((q: InitialQueryBuilder) => TQuery),\n): TQuery {\n const queryConfig = isQueryOnceConfig(configOrQuery) ? configOrQuery.query : configOrQuery;\n if (typeof queryConfig === 'function') {\n return queryConfig(new BaseQueryBuilder() as InitialQueryBuilder);\n }\n return queryConfig;\n}\n\nfunction isQueryOnceConfig<TQuery extends BaseQueryBuilder<any>>(\n value: QueryOnceConfig<TQuery> | ((q: InitialQueryBuilder) => TQuery),\n): value is QueryOnceConfig<TQuery> {\n return value !== null && typeof value === 'object' && 'query' in value;\n}\n","export type RowKey = string | number;\n\nexport interface RowView {\n readonly key: RowKey;\n get(column: string): unknown;\n toObject(): Record<string, unknown>;\n /** Optional storage-specific expression fast path. */\n evaluateExpression?(expression: unknown): { readonly value: unknown } | undefined;\n}\n\nexport class PlainRowView implements RowView {\n constructor(\n readonly key: RowKey,\n readonly value: Record<string, unknown>,\n ) {}\n\n get(column: string): unknown {\n if (Object.prototype.hasOwnProperty.call(this.value, column)) return this.value[column];\n const parts = column.split('.');\n let cursor: unknown = this.value;\n for (const part of parts) {\n if (cursor === null || cursor === undefined || typeof cursor !== 'object') return undefined;\n cursor = (cursor as Record<string, unknown>)[part];\n }\n return cursor;\n }\n\n toObject(): Record<string, unknown> {\n return cloneRecord(this.value);\n }\n}\n\nexport function plainRowView(key: RowKey, value: Record<string, unknown>): PlainRowView {\n return new PlainRowView(key, value);\n}\n\nexport function cloneRecord(row: Record<string, unknown>): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(row)) out[key] = cloneValue(value);\n return out;\n}\n\nexport function cloneValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map((item) => cloneValue(item));\n if (value instanceof Date) return new Date(value.getTime());\n if (value !== null && typeof value === 'object') return cloneRecord(value as Record<string, unknown>);\n return value;\n}\n\nexport function stableKey(value: unknown): string {\n return JSON.stringify(value, (_key, child) => {\n if (typeof child === 'bigint') return `${child.toString()}n`;\n if (child instanceof Date) return child.toISOString();\n if (child !== null && typeof child === 'object' && !Array.isArray(child)) {\n const sorted: Record<string, unknown> = {};\n for (const key of Object.keys(child).sort()) sorted[key] = (child as Record<string, unknown>)[key];\n return sorted;\n }\n return child;\n });\n}\n","import { ValidationError } from '../../errors.js';\nimport {\n assertValidBbox,\n bboxIntersectsRaw,\n bboxWithinRaw,\n pointBbox,\n type BBox,\n} from '../../geo/bbox.js';\nimport { haversineDistanceMeters } from '../../geo/distance.js';\nimport { assertValidPoint, type Point } from '../../geo/point-column.js';\nimport { pointInPolygon } from '../../geo/point-in-polygon.js';\nimport { normalizePolygon, type Polygon } from '../../geo/polygon-column.js';\nimport {\n Aggregate,\n Func,\n PropRef,\n Value,\n getHavingExpression,\n getWhereExpression,\n isExpressionLike,\n type BasicExpression,\n type CompareOptions,\n type Having,\n type QueryIR,\n type Select,\n type Where,\n} from '../ir.js';\nimport { cloneValue, stableKey } from './delta.js';\nimport type { RowView } from './delta.js';\n\nexport interface ExpressionPlan<T = unknown> {\n readonly evaluate: (row: Record<string, unknown>) => T;\n readonly deps: ReadonlySet<string>;\n}\n\nconst rowOrderValues = new WeakMap<Record<string, unknown>, ReadonlyArray<unknown>>();\nconst refPathStrings = new WeakMap<object, string>();\n\nexport function setRowOrderValues(\n row: Record<string, unknown>,\n values: ReadonlyArray<unknown>,\n): void {\n rowOrderValues.set(row, values);\n}\n\nexport function compileIvmExpression<T = unknown>(expr: BasicExpression): ExpressionPlan<T> {\n return {\n evaluate: (row) => evaluateExpression(expr, row) as T,\n deps: collectExpressionDeps(expr),\n };\n}\n\nexport function compileWherePlan(where: QueryIR['where']): ExpressionPlan<boolean> {\n const clauses = where ?? [];\n const deps = new Set<string>();\n const expressions = clauses.map((clause) => getWhereExpression(clause));\n for (const expr of expressions) for (const dep of collectExpressionDeps(expr)) deps.add(dep);\n return {\n deps,\n evaluate: (row) => expressions.every((expr) => toBooleanPredicate(evaluateExpression(expr, row))),\n };\n}\n\nexport function compileHavingPlan(having: QueryIR['having']): ExpressionPlan<boolean> {\n const clauses = having ?? [];\n const deps = new Set<string>();\n const expressions = clauses.map((clause) => getHavingExpression(clause));\n for (const expr of expressions) for (const dep of collectExpressionDeps(expr)) deps.add(dep);\n return {\n deps,\n evaluate: (row) => expressions.every((expr) => toBooleanPredicate(evaluateExpression(expr as BasicExpression, row))),\n };\n}\n\nexport function collectExpressionDeps(expr: unknown): ReadonlySet<string> {\n const deps = new Set<string>();\n visitDeps(expr, deps);\n return deps;\n}\n\nfunction visitDeps(value: unknown, deps: Set<string>): void {\n if (value instanceof PropRef || isRefLike(value)) {\n const path = (value as PropRef).path;\n if (path.length >= 2) deps.add(`${path[0]}.${path[1]}`);\n return;\n }\n if (value instanceof Func || value instanceof Aggregate || isFuncLike(value) || isAggLike(value)) {\n for (const arg of (value as Func | Aggregate).args) visitDeps(arg, deps);\n return;\n }\n if (!isPlainObject(value) || isExpressionLike(value)) return;\n for (const child of Object.values(value)) visitDeps(child, deps);\n}\n\nexport function evaluateExpression(expr: BasicExpression, row: Record<string, unknown>): unknown {\n switch (expr.type) {\n case 'val':\n return (expr as Value).value;\n case 'ref':\n return readPath(row, (expr as PropRef).path);\n case 'func':\n return evaluateFunc(expr as Func, (child) => evaluateExpression(child, row));\n }\n}\n\n/** Evaluate an IR expression against a lazy row handle without materializing it. */\nexport function evaluateExpressionOnRowView(expr: BasicExpression, row: RowView): unknown {\n const optimized = row.evaluateExpression?.(expr);\n if (optimized !== undefined) return optimized.value;\n switch (expr.type) {\n case 'val':\n return (expr as Value).value;\n case 'ref':\n return row.get(refPathString(expr as PropRef));\n case 'func':\n return evaluateFunc(expr as Func, (child) => evaluateExpressionOnRowView(child, row));\n }\n}\n\nfunction refPathString(ref: PropRef): string {\n const cached = refPathStrings.get(ref);\n if (cached !== undefined) return cached;\n const path = ref.path.join('.');\n refPathStrings.set(ref, path);\n return path;\n}\n\nfunction evaluateFunc(func: Func, evalArg: (expr: BasicExpression) => unknown): unknown {\n switch (func.name) {\n case 'eq': {\n const a = evalArg(func.args[0]!);\n const b = evalArg(func.args[1]!);\n return isUnknown(a) || isUnknown(b) ? null : valuesEqual(a, b);\n }\n case 'gt':\n return compareMaybe(evalArg(func.args[0]!), evalArg(func.args[1]!), (cmp) => cmp > 0);\n case 'gte':\n return compareMaybe(evalArg(func.args[0]!), evalArg(func.args[1]!), (cmp) => cmp >= 0);\n case 'lt':\n return compareMaybe(evalArg(func.args[0]!), evalArg(func.args[1]!), (cmp) => cmp < 0);\n case 'lte':\n return compareMaybe(evalArg(func.args[0]!), evalArg(func.args[1]!), (cmp) => cmp <= 0);\n case 'and': {\n let unknown = false;\n for (const arg of func.args) {\n const value = evalArg(arg);\n if (value === false) return false;\n if (isUnknown(value)) unknown = true;\n }\n return unknown ? null : true;\n }\n case 'or': {\n let unknown = false;\n for (const arg of func.args) {\n const value = evalArg(arg);\n if (value === true) return true;\n if (isUnknown(value)) unknown = true;\n }\n return unknown ? null : false;\n }\n case 'not': {\n const value = evalArg(func.args[0]!);\n return isUnknown(value) ? null : !value;\n }\n case 'in': {\n const value = evalArg(func.args[0]!);\n const arr = evalArg(func.args[1]!);\n if (isUnknown(value)) return null;\n if (!Array.isArray(arr)) return false;\n return arr.some((item) => valuesEqual(item, value));\n }\n case 'like':\n return evaluateLike(evalArg(func.args[0]!), evalArg(func.args[1]!), false);\n case 'ilike':\n return evaluateLike(evalArg(func.args[0]!), evalArg(func.args[1]!), true);\n case 'upper': {\n const value = evalArg(func.args[0]!);\n return typeof value === 'string' ? value.toUpperCase() : value;\n }\n case 'lower': {\n const value = evalArg(func.args[0]!);\n return typeof value === 'string' ? value.toLowerCase() : value;\n }\n case 'length': {\n const value = evalArg(func.args[0]!);\n return typeof value === 'string' || Array.isArray(value) ? value.length : 0;\n }\n case 'concat':\n return func.args.map((arg) => String(evalArg(arg) ?? '')).join('');\n case 'add':\n return ((evalArg(func.args[0]!) ?? 0) as any) + ((evalArg(func.args[1]!) ?? 0) as any);\n case 'subtract':\n return ((evalArg(func.args[0]!) ?? 0) as any) - ((evalArg(func.args[1]!) ?? 0) as any);\n case 'multiply':\n return ((evalArg(func.args[0]!) ?? 0) as any) * ((evalArg(func.args[1]!) ?? 0) as any);\n case 'divide': {\n const divisor = (evalArg(func.args[1]!) ?? 0) as any;\n return divisor !== 0\n ? ((evalArg(func.args[0]!) ?? 0) as any) / divisor\n : null;\n }\n case 'coalesce': {\n for (const arg of func.args) {\n const value = evalArg(arg);\n if (!isUnknown(value)) return value;\n }\n return null;\n }\n case 'caseWhen': {\n const pairCount = Math.floor(func.args.length / 2);\n for (let index = 0; index < pairCount; index++) {\n if (isCaseWhenConditionTrue(evalArg(func.args[index * 2]!))) {\n return evalArg(func.args[index * 2 + 1]!);\n }\n }\n return func.args.length % 2 === 1\n ? evalArg(func.args[func.args.length - 1]!)\n : null;\n }\n case 'isUndefined':\n return evalArg(func.args[0]!) === undefined;\n case 'isNull':\n return evalArg(func.args[0]!) === null;\n case 'bboxIntersects': {\n const geometry = evalArg(func.args[0]!);\n const bbox = evalGeoBboxArg(evalArg(func.args[1]!), 'bbox');\n const geometryBbox = pointBboxOrNull(geometry);\n return geometryBbox === null ? false : bboxIntersectsRaw(geometryBbox, bbox);\n }\n case 'bboxWithin': {\n const geometry = evalArg(func.args[0]!);\n const bbox = evalGeoBboxArg(evalArg(func.args[1]!), 'bbox');\n const geometryBbox = pointBboxOrNull(geometry);\n return geometryBbox === null ? false : bboxWithinRaw(geometryBbox, bbox);\n }\n case 'dwithin': {\n const geometry = evalArg(func.args[0]!);\n const point = evalGeoPointArg(evalArg(func.args[1]!), 'point');\n const meters = evalGeoRadiusMeters(evalArg(func.args[2]!));\n const rowPoint = pointOrNull(geometry);\n return rowPoint === null ? false : haversineDistanceMeters(rowPoint, point) <= meters;\n }\n case 'within': {\n const point = pointOrNull(evalArg(func.args[0]!));\n const polygon = polygonOrNull(evalArg(func.args[1]!));\n return point === null || polygon === null ? false : pointInPolygon(point, polygon);\n }\n case 'contains': {\n const polygon = polygonOrNull(evalArg(func.args[0]!));\n const point = pointOrNull(evalArg(func.args[1]!));\n return point === null || polygon === null ? false : pointInPolygon(point, polygon);\n }\n default:\n throw new ValidationError(`unsupported IVM query function: ${func.name}`);\n }\n}\n\nfunction evalGeoBboxArg(value: unknown, label: string): BBox {\n assertValidBbox(value, label);\n return value;\n}\n\nfunction evalGeoPointArg(value: unknown, label: string): Point {\n assertValidPoint(value, label);\n return value;\n}\n\nfunction evalGeoRadiusMeters(value: unknown): number {\n if (typeof value !== 'number' || !Number.isFinite(value)) {\n throw new ValidationError('radius meters must be finite');\n }\n if (value < 0) {\n throw new ValidationError('radius meters must be >= 0');\n }\n return value;\n}\n\nfunction pointBboxOrNull(value: unknown): BBox | null {\n const point = pointOrNull(value);\n return point === null ? null : pointBbox(point);\n}\n\nfunction pointOrNull(value: unknown): Point | null {\n if (isUnknown(value)) return null;\n assertValidPoint(value, 'geometry');\n return value;\n}\n\nfunction polygonOrNull(value: unknown): Polygon | null {\n if (isUnknown(value)) return null;\n return normalizePolygon(value, {}, 'polygon');\n}\n\nexport function evaluateSelect(select: unknown, row: Record<string, unknown>, mainAlias: string): unknown {\n if (select === undefined) return cloneValue(row[mainAlias]);\n if (isBasicExpression(select)) return evaluateExpression(select, row);\n if (isAggregateLikeValue(select)) throw new ValidationError('aggregate select requires group aggregate node');\n if (isPlainObject(select)) return evaluateSelectObject(select as Select, row);\n return cloneValue(select);\n}\n\n/** Materialize only the selected result fields from a lazy row handle. */\nexport function evaluateSelectOnRowView(select: unknown, row: RowView, mainAlias: string): unknown {\n if (select === undefined) return cloneValue(row.get(mainAlias));\n if (isBasicExpression(select)) return evaluateExpressionOnRowView(select, row);\n if (isAggregateLikeValue(select)) throw new ValidationError('aggregate select requires group aggregate node');\n if (isPlainObject(select)) return evaluateSelectObjectOnRowView(select as Select, row);\n return cloneValue(select);\n}\n\nfunction evaluateSelectObjectOnRowView(select: Select, row: RowView): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(select)) {\n if (isBasicExpression(value)) {\n out[key] = evaluateExpressionOnRowView(value, row);\n } else if (isPlainObject(value) && !isExpressionLike(value)) {\n out[key] = evaluateSelectObjectOnRowView(value as Select, row);\n } else if (isAggregateLikeValue(value)) {\n out[key] = null;\n } else {\n out[key] = cloneValue(value);\n }\n }\n return out;\n}\n\nexport function evaluateSelectObject(select: Select, row: Record<string, unknown>): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(select)) {\n if (isBasicExpression(value)) {\n out[key] = evaluateExpression(value, row);\n } else if (isPlainObject(value) && !isExpressionLike(value)) {\n out[key] = evaluateSelectObject(value as Select, row);\n } else if (isAggregateLikeValue(value)) {\n out[key] = null;\n } else {\n out[key] = cloneValue(value);\n }\n }\n return out;\n}\n\nexport function compareRowsByOrderBy(a: Record<string, unknown>, b: Record<string, unknown>, orderBy: QueryIR['orderBy']): number {\n const aValues = rowOrderValues.get(a);\n const bValues = rowOrderValues.get(b);\n for (let index = 0; index < (orderBy?.length ?? 0); index++) {\n const clause = orderBy![index]!;\n const av = aValues === undefined\n ? evaluateExpression(clause.expression, { $selected: a })\n : aValues[index];\n const bv = bValues === undefined\n ? evaluateExpression(clause.expression, { $selected: b })\n : bValues[index];\n const cmp = compareForOrder(av, bv, clause.compareOptions);\n if (cmp !== 0) return cmp;\n }\n return 0;\n}\n\nexport function toBooleanPredicate(value: unknown): boolean {\n return value === true;\n}\n\nexport function isBasicExpression(value: unknown): value is BasicExpression {\n return value instanceof PropRef || value instanceof Value || value instanceof Func ||\n (isExpressionLike(value) && ((value as { type: unknown }).type === 'ref' || (value as { type: unknown }).type === 'val' || (value as { type: unknown }).type === 'func'));\n}\n\nexport function containsAggregate(value: unknown): boolean {\n if (isAggregateLikeValue(value)) return true;\n if (value instanceof Func || isFuncLike(value)) return (value as Func).args.some((arg) => containsAggregate(arg));\n if (!isPlainObject(value) || isExpressionLike(value)) return false;\n return Object.values(value).some((child) => containsAggregate(child));\n}\n\nexport function collectWhereDeps(where: Array<Where> | undefined): ReadonlySet<string> {\n const deps = new Set<string>();\n for (const clause of where ?? []) for (const dep of collectExpressionDeps(getWhereExpression(clause))) deps.add(dep);\n return deps;\n}\n\nexport function collectHavingDeps(having: Array<Having> | undefined): ReadonlySet<string> {\n const deps = new Set<string>();\n for (const clause of having ?? []) for (const dep of collectExpressionDeps(getHavingExpression(clause))) deps.add(dep);\n return deps;\n}\n\nexport function readPath(source: Record<string, unknown>, path: Array<string>): unknown {\n let value: unknown = source;\n for (const segment of path) {\n if (value === null || value === undefined) return value;\n if (typeof value !== 'object') return undefined;\n value = (value as Record<string, unknown>)[segment];\n }\n return value;\n}\n\nexport function compareForOrder(a: unknown, b: unknown, options: CompareOptions): number {\n const aNull = isUnknown(a) || (typeof a === 'number' && Number.isNaN(a));\n const bNull = isUnknown(b) || (typeof b === 'number' && Number.isNaN(b));\n if (aNull || bNull) {\n if (aNull && bNull) return 0;\n const nullFirst = options.nulls === 'first';\n const base = aNull ? (nullFirst ? -1 : 1) : (nullFirst ? 1 : -1);\n return options.direction === 'desc' ? -base : base;\n }\n let cmp: number;\n if (typeof a === 'string' && typeof b === 'string') {\n cmp = options.stringSort === 'locale'\n ? a.localeCompare(b, options.locale, options.localeOptions as Intl.CollatorOptions | undefined)\n : a < b ? -1 : a > b ? 1 : 0;\n } else {\n cmp = comparePrimitive(a, b);\n }\n return options.direction === 'desc' ? -cmp : cmp;\n}\n\nfunction compareMaybe(a: unknown, b: unknown, predicate: (cmp: number) => boolean): boolean | null {\n if (isUnknown(a) || isUnknown(b)) return null;\n return predicate(comparePrimitive(a, b));\n}\n\nfunction comparePrimitive(a: unknown, b: unknown): number {\n if (a === b) return 0;\n if (a instanceof Date && b instanceof Date) return a.getTime() - b.getTime();\n if (typeof a === 'number' && typeof b === 'number') return a - b;\n if (typeof a === 'bigint' && typeof b === 'bigint') return a < b ? -1 : a > b ? 1 : 0;\n if (typeof a === 'bigint' || typeof b === 'bigint') return Number(a) - Number(b);\n if (typeof a === 'boolean' && typeof b === 'boolean') return a === b ? 0 : a ? 1 : -1;\n if (typeof a === 'string' && typeof b === 'string') return a < b ? -1 : a > b ? 1 : 0;\n const as = String(a);\n const bs = String(b);\n return as < bs ? -1 : as > bs ? 1 : 0;\n}\n\nfunction evaluateLike(value: unknown, pattern: unknown, caseInsensitive: boolean): boolean | null {\n if (isUnknown(value) || isUnknown(pattern)) return null;\n if (typeof value !== 'string' || typeof pattern !== 'string') return false;\n const source = caseInsensitive ? value.toLowerCase() : value;\n const pat = caseInsensitive ? pattern.toLowerCase() : pattern;\n const re = new RegExp(`^${pat.replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&').replace(/%/g, '.*').replace(/_/g, '.')}$`);\n return re.test(source);\n}\n\nfunction numberValue(value: unknown): number {\n if (typeof value === 'number') return value;\n if (typeof value === 'bigint') return Number(value);\n if (isUnknown(value)) return 0;\n const n = Number(value);\n return Number.isFinite(n) ? n : 0;\n}\n\nfunction isUnknown(value: unknown): value is null | undefined {\n return value === null || value === undefined;\n}\n\nfunction isCaseWhenConditionTrue(value: unknown): boolean {\n if (value == null || value === false) return false;\n if (value === true) return true;\n if (typeof value === 'number') return value !== 0 && !Number.isNaN(value);\n if (typeof value === 'bigint') return value !== 0n;\n return Boolean(value);\n}\n\nfunction valuesEqual(a: unknown, b: unknown): boolean {\n if (a instanceof Date && b instanceof Date) return a.getTime() === b.getTime();\n return Object.is(a, b);\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction isRefLike(value: unknown): value is PropRef {\n return isExpressionLike(value) && (value as { type: unknown }).type === 'ref';\n}\n\nfunction isFuncLike(value: unknown): value is Func {\n return isExpressionLike(value) && (value as { type: unknown }).type === 'func';\n}\n\nfunction isAggLike(value: unknown): value is Aggregate {\n return isExpressionLike(value) && (value as { type: unknown }).type === 'agg';\n}\n\nfunction isAggregateLikeValue(value: unknown): value is Aggregate {\n return value instanceof Aggregate || isAggLike(value);\n}\n\nexport function rowStableKey(row: Record<string, unknown>): string {\n return stableKey(row);\n}\n","import type { Collection } from '../../collection/collection.js';\nimport { assertValidBbox, type BBox } from '../../geo/bbox.js';\nimport { assertValidPoint, type Point } from '../../geo/point-column.js';\nimport type { RowKey, RowView } from './delta.js';\n\n/**\n * A short-lived relation record that keeps only collection + ordinal identity.\n * Scalar reads go straight to column buffers; a JS row is built only when the\n * query explicitly selects the complete source object.\n */\nexport class ColumnarRowView implements RowView {\n private readonly prefix: string;\n\n constructor(\n readonly key: RowKey,\n private readonly collection: Collection,\n private readonly alias: string,\n private readonly row: number,\n private readonly onMaterialize?: () => void,\n ) {\n this.prefix = `${alias}.`;\n }\n\n get(path: string): unknown {\n if (path === this.alias) return this.materializeSource();\n if (!path.startsWith(this.prefix)) return undefined;\n const nestedPath = path.slice(this.prefix.length);\n const separator = nestedPath.indexOf('.');\n const column = separator < 0 ? nestedPath : nestedPath.slice(0, separator);\n let value: unknown = this.collection._internalReadCell(column, this.row);\n if (separator < 0) return value;\n for (const segment of nestedPath.slice(separator + 1).split('.')) {\n if (value === null || value === undefined || typeof value !== 'object') return undefined;\n value = (value as Record<string, unknown>)[segment];\n }\n return value;\n }\n\n toObject(): Record<string, unknown> {\n return { [this.alias]: this.materializeSource() };\n }\n\n evaluateExpression(expression: unknown): { readonly value: unknown } | undefined {\n const func = expression as {\n type?: unknown;\n name?: unknown;\n args?: ReadonlyArray<{ type?: unknown; path?: ReadonlyArray<string>; value?: unknown }>;\n };\n if (func?.type !== 'func' || !Array.isArray(func.args)) return undefined;\n const ref = func.args[0];\n if (ref?.type !== 'ref' || ref.path?.length !== 2 || ref.path[0] !== this.alias) return undefined;\n const column = ref.path[1]!;\n\n if (func.name === 'bboxIntersects' || func.name === 'bboxWithin') {\n const literal = func.args[1];\n if (literal?.type !== 'val') return undefined;\n assertValidBbox(literal.value, 'bbox');\n return {\n value: this.collection._internalGeometryBboxMatches(\n column,\n this.row,\n literal.value as BBox,\n func.name === 'bboxWithin' ? 'within' : 'intersects',\n ),\n };\n }\n\n if (func.name === 'dwithin') {\n const pointArg = func.args[1];\n const metersArg = func.args[2];\n if (pointArg?.type !== 'val' || metersArg?.type !== 'val') return undefined;\n assertValidPoint(pointArg.value, 'point');\n if (typeof metersArg.value !== 'number' || !Number.isFinite(metersArg.value) || metersArg.value < 0) {\n return undefined;\n }\n return {\n value: this.collection._internalPointDWithin(\n column,\n this.row,\n pointArg.value as Point,\n metersArg.value,\n ),\n };\n }\n\n return undefined;\n }\n\n private materializeSource(): Record<string, unknown> {\n this.onMaterialize?.();\n const out: Record<string, unknown> = {};\n for (const column of this.collection.columnNames()) {\n out[column] = this.collection._internalReadCell(column, this.row);\n }\n return out;\n }\n}\n\n/**\n * Immutable dependency-only row retained by stateful differential operators.\n * Values are positional so a seed/update needs one row object and one compact\n * array rather than nested namespace and record objects. The column lookup is\n * shared by every row from the same source.\n */\nexport class FrozenRowView implements RowView {\n private readonly prefix: string;\n\n constructor(\n readonly key: RowKey,\n private readonly alias: string,\n private readonly columnIndexes: ReadonlyMap<string, number>,\n private readonly values: ReadonlyArray<unknown>,\n ) {\n this.prefix = `${alias}.`;\n }\n\n get(path: string): unknown {\n if (path === this.alias) return this.materializeSource();\n if (!path.startsWith(this.prefix)) return undefined;\n const nestedPath = path.slice(this.alias.length + 1);\n const separator = nestedPath.indexOf('.');\n const column = separator < 0 ? nestedPath : nestedPath.slice(0, separator);\n let value = this.values[this.columnIndexes.get(column) ?? -1];\n if (separator < 0) return value;\n for (const segment of nestedPath.slice(separator + 1).split('.')) {\n if (value === null || value === undefined || typeof value !== 'object') return undefined;\n value = (value as Record<string, unknown>)[segment];\n }\n return value;\n }\n\n toObject(): Record<string, unknown> {\n return { [this.alias]: this.materializeSource() };\n }\n\n private materializeSource(): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const [column, index] of this.columnIndexes) out[column] = this.values[index];\n return out;\n }\n}\n\n/** Lazy namespaced row produced by differential joins. */\nexport class CompositeRowView implements RowView {\n constructor(\n readonly key: RowKey,\n private readonly leftAlias: string,\n private readonly left: RowView | null,\n private readonly rightAlias: string,\n private readonly right: RowView | null,\n ) {}\n\n get(path: string): unknown {\n const separator = path.indexOf('.');\n const alias = separator < 0 ? path : path.slice(0, separator);\n const row = alias === this.leftAlias\n ? this.left\n : alias === this.rightAlias\n ? this.right\n : undefined;\n if (row === null) return null;\n return row?.get(path);\n }\n\n toObject(): Record<string, unknown> {\n return {\n [this.leftAlias]: this.left === null ? null : this.left.get(this.leftAlias),\n [this.rightAlias]: this.right === null ? null : this.right.get(this.rightAlias),\n };\n }\n\n evaluateExpression(expression: unknown): { readonly value: unknown } | undefined {\n const expr = expression as {\n type?: unknown;\n args?: ReadonlyArray<{ type?: unknown; path?: ReadonlyArray<string> }>;\n };\n if (expr?.type !== 'func' || !Array.isArray(expr.args)) return undefined;\n const ref = expr.args[0];\n if (ref?.type !== 'ref' || !ref.path?.[0]) return undefined;\n const row = ref.path[0] === this.leftAlias\n ? this.left\n : ref.path[0] === this.rightAlias\n ? this.right\n : undefined;\n return row?.evaluateExpression?.(expression);\n }\n}\n","import {\n D2,\n MultiSet,\n filter,\n distinct as differentialDistinct,\n map,\n orderByWithFractionalIndex,\n output,\n type RootStreamBuilder,\n} from '@tanstack/db-ivm';\nimport type { Collection, RowValue } from '../../collection/collection.js';\nimport type { ChangeEvent } from '../../collection/events.js';\nimport { expandPointBboxByMeters, type BBox } from '../../geo/bbox.js';\nimport { assertValidPoint, type Point } from '../../geo/point-column.js';\nimport {\n Func,\n PropRef,\n Value,\n getWhereExpression,\n isExpressionLike,\n type BasicExpression,\n type QueryIR,\n} from '../ir.js';\nimport {\n collectExpressionDeps,\n compareForOrder,\n evaluateExpression,\n evaluateExpressionOnRowView,\n evaluateSelectOnRowView,\n setRowOrderValues,\n toBooleanPredicate,\n} from './expressions.js';\nimport { PlainRowView, type RowKey, type RowView } from './delta.js';\nimport { ColumnarRowView } from './columnar-row.js';\n\ntype KeyedRow = [RowKey, RowView];\nexport type WeightedResult = [RowKey, Record<string, unknown>, number];\ninterface OrderedResult {\n readonly row: Record<string, unknown>;\n readonly orderValues: ReadonlyArray<unknown>;\n}\n\nexport interface ColumnarBackendStats {\n readonly backend: 'columnar-differential';\n sourceHandles: number;\n sourceRowsMaterialized: number;\n outputRowsMaterialized: number;\n additions: number;\n retractions: number;\n spatialIndexUsed: boolean;\n}\n\nexport interface DifferentialQueryBackend {\n readonly sources: ReadonlyArray<Collection>;\n readonly stats: ColumnarBackendStats;\n seed(): WeightedResult[];\n apply(source: Collection, event: ChangeEvent): WeightedResult[];\n}\n\n/**\n * TanStack-query-IR backend backed by the same signed-multiplicity D2 runtime\n * used by TanStack DB. Source tuples are lazy Arrow row handles; only tuples\n * that survive filtering are projected into JavaScript result objects.\n */\nexport class ColumnarDifferentialBackend implements DifferentialQueryBackend {\n readonly stats: ColumnarBackendStats = {\n backend: 'columnar-differential',\n sourceHandles: 0,\n sourceRowsMaterialized: 0,\n outputRowsMaterialized: 0,\n additions: 0,\n retractions: 0,\n spatialIndexUsed: false,\n };\n\n private readonly graph = new D2();\n private readonly input: RootStreamBuilder<KeyedRow>;\n private readonly deps: ReadonlySet<string> | 'all';\n private readonly where: ReadonlyArray<BasicExpression>;\n private seedProjectionCache: WeakMap<RowView, OrderedResult> | undefined;\n private emitted: WeightedResult[] = [];\n\n readonly sources: ReadonlyArray<Collection>;\n\n constructor(\n readonly source: Collection,\n readonly alias: string,\n readonly query: QueryIR,\n ) {\n this.sources = [source];\n const where = (query.where ?? []).map((clause) => getWhereExpression(clause));\n this.where = where;\n this.deps = query.select === undefined\n ? 'all'\n : new Set([\n ...where.flatMap((expr) => [...collectExpressionDeps(expr)]),\n ...collectExpressionDeps(query.select),\n ...(query.orderBy ?? []).flatMap((clause) => [...collectExpressionDeps(clause.expression)]),\n ]);\n\n this.input = this.graph.newInput<KeyedRow>();\n let orderedStream = this.input.pipe(\n filter(([, row]) => where.every((expr) => toBooleanPredicate(evaluateExpressionOnRowView(expr, row)))),\n map(([key, row]) => [key, this.project(row)] as [RowKey, OrderedResult]),\n );\n if (query.distinct) {\n const scalarKey = singleDistinctKey(query.select);\n orderedStream = orderedStream.pipe(differentialDistinct(([_key, value]) =>\n scalarKey === undefined ? value.row : value.row[scalarKey]));\n }\n if (query.limit !== undefined || query.offset !== undefined) {\n orderedStream = orderedStream.pipe(\n orderByWithFractionalIndex(\n (value: OrderedResult) => value.orderValues,\n {\n comparator: (a: ReadonlyArray<unknown>, b: ReadonlyArray<unknown>) =>\n this.compareOrderValues(a, b),\n ...(query.limit !== undefined ? { limit: query.limit } : {}),\n ...(query.offset !== undefined ? { offset: query.offset } : {}),\n },\n ),\n map(([key, [value]]) => [key, value] as [RowKey, OrderedResult]),\n );\n }\n orderedStream.pipe(\n output((batch) => {\n for (const [[key, value], multiplicity] of batch.getInner()) {\n if (multiplicity !== 0) this.emitted.push([key, value.row, multiplicity]);\n }\n }),\n );\n this.graph.finalize();\n }\n\n seed(): WeightedResult[] {\n const indexed = this.indexedSeedOrdinals();\n const ordinals = indexed ?? Uint32Array.from(this.source._internalLiveOrdinals());\n this.stats.spatialIndexUsed = indexed !== undefined;\n const output: WeightedResult[] = [];\n const orderedWindow = (this.query.limit !== undefined || this.query.offset !== undefined) &&\n (this.query.orderBy?.length ?? 0) > 0;\n let changes: Array<[KeyedRow, number]> = [];\n for (const row of ordinals) {\n const key = this.source._internalReadCell(this.source.schema.primaryKey, row);\n if (typeof key !== 'number') continue;\n const handle = this.handle(key, row);\n // The differential filter is stateless. Applying it once before the\n // input prevents rejected source handles from inflating the initial\n // MultiSet while all later signed updates still traverse the same D2\n // graph. Kept rows are evaluated again by D2, preserving one execution\n // path for projection/distinct/order semantics.\n if (!this.where.every((expr) =>\n toBooleanPredicate(evaluateExpressionOnRowView(expr, handle)))) continue;\n changes.push([[key, handle], 1]);\n // Bound temporary object retention during large cold seeds. This avoids\n // a single 100k-entry nested tuple array becoming a GC latency spike.\n if (!orderedWindow && changes.length >= 8_192) {\n output.push(...this.send(changes));\n changes = [];\n }\n }\n if (orderedWindow) {\n // Fractional top-K is incremental but array-backed. Seed in final sort\n // order so every initial insertion appends instead of shifting the\n // retained array. Cache projections so the D2 map reuses this work.\n this.seedProjectionCache = new WeakMap();\n try {\n changes.sort((a, b) => {\n const [aKey, aRow] = a[0];\n const [bKey, bRow] = b[0];\n const compared = this.compareOrderValues(\n this.project(aRow).orderValues,\n this.project(bRow).orderValues,\n );\n if (compared !== 0) return compared;\n return compareRowKeys(aKey, bKey);\n });\n for (let offset = 0; offset < changes.length; offset += 8_192) {\n output.push(...this.send(changes.slice(offset, offset + 8_192)));\n }\n } finally {\n this.seedProjectionCache = undefined;\n }\n } else {\n output.push(...this.send(changes));\n }\n return output;\n }\n\n apply(source: Collection, event: ChangeEvent): WeightedResult[] {\n if (source !== this.source) return [];\n if (event.op === 'compact') return [];\n if (event.op === 'rollback' && event.changes) {\n const changes: Array<[KeyedRow, number]> = [];\n for (const change of event.changes) this.appendChangeMessage(changes, change);\n return this.send(changes);\n }\n if (event.op === 'rollback') return [];\n if (event.op === 'update' && !this.touchesDependencies(event.columns)) return [];\n\n const changes: Array<[KeyedRow, number]> = [];\n if (event.op === 'insert') {\n this.appendCurrent(changes, event.rowId, 1);\n } else if (event.op === 'delete') {\n const previous = previousValue(event.value, event.previousValue);\n changes.push([[event.rowId, new PlainRowView(event.rowId, { [this.alias]: previous })], -1]);\n } else if (event.op === 'update') {\n const previous = previousValue(event.value, event.previousValue);\n changes.push([[event.rowId, new PlainRowView(event.rowId, { [this.alias]: previous })], -1]);\n this.appendCurrent(changes, event.rowId, 1);\n }\n return this.send(changes);\n }\n\n private appendChangeMessage(\n out: Array<[KeyedRow, number]>,\n change: {\n key: number;\n value: Readonly<Record<string, unknown>>;\n previousValue?: Readonly<Record<string, unknown>>;\n type: 'insert' | 'update' | 'delete';\n },\n ): void {\n if (change.type === 'delete') {\n out.push([[change.key, new PlainRowView(change.key, { [this.alias]: change.value })], -1]);\n return;\n }\n if (change.type === 'update' && change.previousValue) {\n out.push([[change.key, new PlainRowView(change.key, { [this.alias]: change.previousValue })], -1]);\n }\n this.appendCurrent(out, change.key, 1);\n }\n\n private appendCurrent(out: Array<[KeyedRow, number]>, key: number, weight: number): void {\n const row = this.source._internalRowOrdinalForKey(key);\n if (row === undefined) return;\n out.push([[key, this.handle(key, row)], weight]);\n }\n\n private handle(key: number, row: number): ColumnarRowView {\n this.stats.sourceHandles++;\n return new ColumnarRowView(key, this.source, this.alias, row, () => {\n this.stats.sourceRowsMaterialized++;\n });\n }\n\n private project(row: RowView): OrderedResult {\n const cached = this.seedProjectionCache?.get(row);\n if (cached) return cached;\n this.stats.outputRowsMaterialized++;\n const projected = evaluateSelectOnRowView(this.query.select, row, this.alias);\n const result = rowToObject(projected);\n const orderValues = (this.query.orderBy ?? []).map((clause) =>\n clause.expression.type === 'ref' && clause.expression.path[0] === '$selected'\n ? evaluateExpression(clause.expression, { $selected: result })\n : evaluateExpressionOnRowView(clause.expression, row),\n );\n if (orderValues.length > 0) setRowOrderValues(result, orderValues);\n const ordered = { row: result, orderValues };\n this.seedProjectionCache?.set(row, ordered);\n return ordered;\n }\n\n private compareOrderValues(a: ReadonlyArray<unknown>, b: ReadonlyArray<unknown>): number {\n for (let index = 0; index < (this.query.orderBy?.length ?? 0); index++) {\n const comparison = compareForOrder(a[index], b[index], this.query.orderBy![index]!.compareOptions);\n if (comparison !== 0) return comparison;\n }\n return 0;\n }\n\n private send(changes: Array<[KeyedRow, number]>): WeightedResult[] {\n if (changes.length === 0) return [];\n for (const [, weight] of changes) {\n if (weight > 0) this.stats.additions += weight;\n else this.stats.retractions += -weight;\n }\n this.emitted = [];\n this.input.sendData(new MultiSet(changes));\n this.graph.run();\n return this.emitted;\n }\n\n private touchesDependencies(columns: ReadonlySet<string> | 'all'): boolean {\n if (this.deps === 'all' || columns === 'all') return true;\n for (const column of columns) {\n if (this.deps.has(column) || this.deps.has(`${this.alias}.${column}`)) return true;\n }\n return false;\n }\n\n private indexedSeedOrdinals(): Uint32Array | undefined {\n let best: Uint32Array | undefined;\n for (const clause of this.query.where ?? []) {\n const candidate = spatialCandidate(getWhereExpression(clause), this.alias);\n if (!candidate) continue;\n const hits = this.source._internalSearchSpatialIndex(candidate.column, candidate.bbox);\n if (hits !== undefined && (best === undefined || hits.length < best.length)) best = hits;\n }\n return best;\n }\n}\n\nfunction spatialCandidate(\n expression: BasicExpression,\n alias: string,\n): { readonly column: string; readonly bbox: BBox } | undefined {\n if (!(expression instanceof Func)) return undefined;\n if (expression.name !== 'bboxIntersects' && expression.name !== 'bboxWithin' && expression.name !== 'dwithin') {\n return undefined;\n }\n const ref = expression.args[0];\n if (!(ref instanceof PropRef) || ref.path.length !== 2 || ref.path[0] !== alias) return undefined;\n const column = ref.path[1]!;\n if (expression.name === 'bboxIntersects' || expression.name === 'bboxWithin') {\n const bbox = expression.args[1];\n return bbox instanceof Value && Array.isArray(bbox.value)\n ? { column, bbox: bbox.value as unknown as BBox }\n : undefined;\n }\n const point = expression.args[1];\n const meters = expression.args[2];\n if (!(point instanceof Value) || !(meters instanceof Value)) return undefined;\n assertValidPoint(point.value, 'point');\n if (typeof meters.value !== 'number') return undefined;\n return { column, bbox: expandPointBboxByMeters(point.value as Point, meters.value) };\n}\n\nfunction previousValue(\n current: Readonly<Record<string, unknown>> | undefined,\n patch: Readonly<Record<string, unknown>> | undefined,\n): Record<string, unknown> {\n return { ...(current ?? {}), ...(patch ?? {}) };\n}\n\nfunction rowToObject(value: unknown): Record<string, unknown> {\n if (value !== null && typeof value === 'object' && !Array.isArray(value)) {\n return value as Record<string, unknown>;\n }\n return { value };\n}\n\nfunction compareRowKeys(a: RowKey, b: RowKey): number {\n if (a === b) return 0;\n if (typeof a === 'number' && typeof b === 'number') return a - b;\n return String(a) < String(b) ? -1 : 1;\n}\n\nfunction singleDistinctKey(select: unknown): string | undefined {\n if (isExpressionLike(select)) return 'value';\n if (select === null || typeof select !== 'object' || Array.isArray(select)) return undefined;\n const keys = Object.keys(select);\n return keys.length === 1 && !keys[0]!.startsWith('__SPREAD_SENTINEL__') ? keys[0] : undefined;\n}\n","import {\n D2,\n MultiSet,\n filter,\n join as differentialJoin,\n map,\n output,\n type IStreamBuilder,\n type RootStreamBuilder,\n} from '@tanstack/db-ivm';\nimport type { Collection } from '../../collection/collection.js';\nimport type { ChangeEvent } from '../../collection/events.js';\nimport {\n getWhereExpression,\n type BasicExpression,\n type JoinClause,\n type QueryIR,\n} from '../ir.js';\nimport {\n collectExpressionDeps,\n evaluateExpression,\n evaluateExpressionOnRowView,\n evaluateSelectOnRowView,\n setRowOrderValues,\n toBooleanPredicate,\n} from './expressions.js';\nimport { stableKey, type RowKey, type RowView } from './delta.js';\nimport { CompositeRowView, FrozenRowView } from './columnar-row.js';\nimport type {\n ColumnarBackendStats,\n DifferentialQueryBackend,\n WeightedResult,\n} from './columnar-backend.js';\n\ntype KeyedRow = [RowKey, RowView];\ntype JoinValue = [sourceKey: RowKey, row: RowView];\ntype JoinKey = string | number | bigint | boolean;\ninterface JoinSource {\n readonly collection: Collection;\n readonly alias: string;\n readonly joinExpression: BasicExpression;\n readonly columns: ReadonlyArray<string>;\n columnIndexes: ReadonlyMap<string, number>;\n readonly input: RootStreamBuilder<KeyedRow>;\n}\n\n/** Signed-multiplicity two-collection equi-join over lazy Arrow row handles. */\nexport class ColumnarJoinDifferentialBackend implements DifferentialQueryBackend {\n readonly stats: ColumnarBackendStats = {\n backend: 'columnar-differential',\n sourceHandles: 0,\n sourceRowsMaterialized: 0,\n outputRowsMaterialized: 0,\n additions: 0,\n retractions: 0,\n spatialIndexUsed: false,\n };\n readonly sources: ReadonlyArray<Collection>;\n\n private readonly graph = new D2();\n private readonly left: JoinSource;\n private readonly right: JoinSource;\n private emitted: WeightedResult[] = [];\n\n constructor(readonly query: QueryIR) {\n if (query.from.type !== 'collectionRef' || query.join?.length !== 1) {\n throw new Error('columnar join backend requires exactly two collection sources');\n }\n const join = query.join[0]!;\n if (join.from.type !== 'collectionRef' || join.type === 'cross') {\n throw new Error('columnar join backend requires an equality collection join');\n }\n\n const [leftExpression, rightExpression] = orientJoinExpressions(join, join.from.alias);\n this.left = {\n collection: query.from.collection,\n alias: query.from.alias,\n joinExpression: leftExpression,\n columns: dependencyColumns(query, query.from.alias, query.from.collection),\n columnIndexes: new Map(),\n input: this.graph.newInput<KeyedRow>(),\n };\n this.right = {\n collection: join.from.collection,\n alias: join.from.alias,\n joinExpression: rightExpression,\n columns: dependencyColumns(query, join.from.alias, join.from.collection),\n columnIndexes: new Map(),\n input: this.graph.newInput<KeyedRow>(),\n };\n this.left.columnIndexes = new Map(this.left.columns.map((column, index) => [column, index]));\n this.right.columnIndexes = new Map(this.right.columns.map((column, index) => [column, index]));\n this.sources = this.left.collection === this.right.collection\n ? [this.left.collection]\n : [this.left.collection, this.right.collection];\n\n const leftKeyed = this.keyStream(this.left, 'left');\n const rightKeyed = this.keyStream(this.right, 'right');\n const where = (query.where ?? []).map((clause) => getWhereExpression(clause));\n leftKeyed.pipe(\n differentialJoin(rightKeyed, joinType(join)),\n map(([_joinKey, pair]) => this.composite(pair[0], pair[1])),\n filter(([, row]) => where.every((expr) => toBooleanPredicate(evaluateExpressionOnRowView(expr, row)))),\n map(([key, row]) => {\n this.stats.outputRowsMaterialized++;\n const result = rowToObject(evaluateSelectOnRowView(query.select, row, query.from.alias));\n const orderValues = (query.orderBy ?? []).map((clause) =>\n clause.expression.type === 'ref' && clause.expression.path[0] === '$selected'\n ? evaluateExpression(clause.expression, { $selected: result })\n : evaluateExpressionOnRowView(clause.expression, row),\n );\n if (orderValues.length > 0) setRowOrderValues(result, orderValues);\n return [key, result] as [\n RowKey,\n Record<string, unknown>,\n ];\n }),\n output((batch) => {\n for (const [[key, row], multiplicity] of batch.getInner()) {\n if (multiplicity !== 0) this.emitted.push([key, row, multiplicity]);\n }\n }),\n );\n this.graph.finalize();\n }\n\n seed(): WeightedResult[] {\n this.sendSeed(this.left);\n this.sendSeed(this.right);\n this.graph.run();\n return this.takeOutput();\n }\n\n apply(source: Collection, event: ChangeEvent): WeightedResult[] {\n let sent = false;\n if (source === this.left.collection) sent = this.sendEvent(this.left, event) || sent;\n if (source === this.right.collection) sent = this.sendEvent(this.right, event) || sent;\n if (!sent) return [];\n this.graph.run();\n return this.takeOutput();\n }\n\n private keyStream(source: JoinSource, side: 'left' | 'right'): IStreamBuilder<[JoinKey, JoinValue]> {\n return source.input.pipe(map(([sourceKey, row]) => [\n normalizedJoinKey(evaluateExpressionOnRowView(source.joinExpression, row), side, sourceKey),\n [sourceKey, row],\n ]));\n }\n\n private composite(\n left: JoinValue | null,\n right: JoinValue | null,\n ): [RowKey, CompositeRowView] {\n const key = compositeKey(left?.[0] ?? null, right?.[0] ?? null);\n return [key, new CompositeRowView(\n key,\n this.left.alias,\n left?.[1] ?? null,\n this.right.alias,\n right?.[1] ?? null,\n )];\n }\n\n private sendSeed(source: JoinSource): void {\n const changes: Array<[KeyedRow, number]> = [];\n for (const row of source.collection._internalLiveOrdinals()) {\n const key = source.collection._internalReadCell(source.collection.schema.primaryKey, row);\n if (typeof key !== 'number') continue;\n changes.push([[key, this.freezeCurrent(source, key, row)], 1]);\n }\n this.send(source.input, changes);\n }\n\n private sendEvent(source: JoinSource, event: ChangeEvent): boolean {\n if (event.op === 'compact' || (event.op === 'rollback' && !event.changes)) return false;\n const changes: Array<[KeyedRow, number]> = [];\n if (event.op === 'rollback' && event.changes) {\n for (const change of event.changes) {\n if (change.type === 'delete') {\n changes.push([[change.key, this.freezeValue(source, change.key, change.value)], -1]);\n } else {\n if (change.type === 'update' && change.previousValue) {\n changes.push([[change.key, this.freezeValue(source, change.key, change.previousValue)], -1]);\n }\n this.appendCurrent(changes, source, change.key);\n }\n }\n } else if (event.op === 'insert') {\n this.appendCurrent(changes, source, event.rowId);\n } else if (event.op === 'delete') {\n changes.push([[\n event.rowId,\n this.freezeValue(source, event.rowId, previousValue(event.value, event.previousValue)),\n ], -1]);\n } else if (event.op === 'update') {\n changes.push([[\n event.rowId,\n this.freezeValue(source, event.rowId, previousValue(event.value, event.previousValue)),\n ], -1]);\n this.appendCurrent(changes, source, event.rowId);\n }\n return this.send(source.input, changes);\n }\n\n private appendCurrent(out: Array<[KeyedRow, number]>, source: JoinSource, key: number): void {\n const row = source.collection._internalRowOrdinalForKey(key);\n if (row !== undefined) out.push([[key, this.freezeCurrent(source, key, row)], 1]);\n }\n\n private freezeCurrent(source: JoinSource, key: number, row: number): FrozenRowView {\n this.stats.sourceHandles++;\n const values = new Array<unknown>(source.columns.length);\n for (let index = 0; index < source.columns.length; index++) {\n values[index] = source.collection._internalReadCell(source.columns[index]!, row);\n }\n return new FrozenRowView(key, source.alias, source.columnIndexes, values);\n }\n\n private freezeValue(\n source: JoinSource,\n key: number,\n input: Readonly<Record<string, unknown>>,\n ): FrozenRowView {\n const values = new Array<unknown>(source.columns.length);\n for (let index = 0; index < source.columns.length; index++) values[index] = input[source.columns[index]!];\n return new FrozenRowView(key, source.alias, source.columnIndexes, values);\n }\n\n private send(input: RootStreamBuilder<KeyedRow>, changes: Array<[KeyedRow, number]>): boolean {\n if (changes.length === 0) return false;\n for (const [, weight] of changes) {\n if (weight > 0) this.stats.additions += weight;\n else this.stats.retractions += -weight;\n }\n input.sendData(new MultiSet(changes));\n return true;\n }\n\n private takeOutput(): WeightedResult[] {\n const output = this.emitted;\n this.emitted = [];\n return output;\n }\n}\n\nfunction dependencyColumns(\n query: QueryIR,\n alias: string,\n collection: Collection,\n): ReadonlyArray<string> {\n if (query.select === undefined) return [...collection.columnNames()];\n const deps = new Set<string>();\n const add = (value: unknown): void => {\n for (const dep of collectExpressionDeps(value)) {\n const [depAlias, column] = dep.split('.');\n if (depAlias === alias && column) deps.add(column);\n }\n };\n add(query.select);\n for (const clause of query.where ?? []) add(getWhereExpression(clause));\n for (const join of query.join ?? []) {\n add(join.left);\n add(join.right);\n }\n return [...deps];\n}\n\nfunction orientJoinExpressions(join: JoinClause, rightAlias: string): [BasicExpression, BasicExpression] {\n return expressionAlias(join.left) === rightAlias\n ? [join.right, join.left]\n : [join.left, join.right];\n}\n\nfunction expressionAlias(expression: BasicExpression): string | undefined {\n return expression.type === 'ref' ? expression.path[0] : undefined;\n}\n\nfunction joinType(join: JoinClause): 'inner' | 'left' | 'right' | 'full' {\n return join.type === 'outer' ? 'full' : join.type as 'inner' | 'left' | 'right' | 'full';\n}\n\nfunction normalizedJoinKey(value: unknown, side: string, sourceKey: RowKey): JoinKey {\n if (value === null || value === undefined) return `null:${side}:${String(sourceKey)}`;\n if (value instanceof Date) return `date:${value.getTime()}`;\n switch (typeof value) {\n case 'number':\n return Number.isNaN(value) ? 'number:NaN' : Object.is(value, -0) ? 0 : value;\n case 'string':\n return `string:${value}`;\n case 'bigint':\n return `bigint:${value}`;\n case 'boolean':\n return value ? 'boolean:true' : 'boolean:false';\n default:\n return `${typeof value}:${stableKey(value)}`;\n }\n}\n\nconst COMPOSITE_RADIX = 0x4000000;\n\nfunction compositeKey(left: RowKey | null, right: RowKey | null): RowKey {\n // Most Arrow collections use compact uint32 primary keys. Packing the\n // common pair into an exact IEEE-754 integer avoids allocating one string\n // for every joined output while retaining an unambiguous general fallback.\n if (typeof left === 'number' && typeof right === 'number' &&\n Number.isSafeInteger(left) && Number.isSafeInteger(right) &&\n left >= 0 && right >= 0 && left < COMPOSITE_RADIX && right < COMPOSITE_RADIX) {\n return left * COMPOSITE_RADIX + right;\n }\n return `${left === null ? 'null' : String(left)}\\u0000${right === null ? 'null' : String(right)}`;\n}\n\nfunction previousValue(\n current: Readonly<Record<string, unknown>> | undefined,\n patch: Readonly<Record<string, unknown>> | undefined,\n): Record<string, unknown> {\n return { ...(current ?? {}), ...(patch ?? {}) };\n}\n\nfunction rowToObject(value: unknown): Record<string, unknown> {\n if (value !== null && typeof value === 'object' && !Array.isArray(value)) {\n return value as Record<string, unknown>;\n }\n return { value };\n}\n","import {\n D2,\n MultiSet,\n filter,\n map,\n output,\n reduce,\n type RootStreamBuilder,\n} from '@tanstack/db-ivm';\nimport type { Collection } from '../../collection/collection.js';\nimport type { ChangeEvent } from '../../collection/events.js';\nimport { ValidationError } from '../../errors.js';\nimport {\n Aggregate,\n Func,\n Value,\n getHavingExpression,\n getWhereExpression,\n isExpressionLike,\n type BasicExpression,\n type QueryIR,\n type Select,\n} from '../ir.js';\nimport {\n collectExpressionDeps,\n evaluateExpression,\n evaluateExpressionOnRowView,\n isBasicExpression,\n setRowOrderValues,\n toBooleanPredicate,\n} from './expressions.js';\nimport { PlainRowView, stableKey, type RowKey, type RowView } from './delta.js';\nimport { FrozenRowView } from './columnar-row.js';\nimport type {\n ColumnarBackendStats,\n DifferentialQueryBackend,\n WeightedResult,\n} from './columnar-backend.js';\n\ntype KeyedRow = [RowKey, RowView];\ntype RetainedRow = [RowKey, RowView];\n\n/** Incremental group/aggregate backend using D2's stateful reduce operator. */\nexport class ColumnarAggregateDifferentialBackend implements DifferentialQueryBackend {\n readonly stats: ColumnarBackendStats = {\n backend: 'columnar-differential',\n sourceHandles: 0,\n sourceRowsMaterialized: 0,\n outputRowsMaterialized: 0,\n additions: 0,\n retractions: 0,\n spatialIndexUsed: false,\n };\n readonly sources: ReadonlyArray<Collection>;\n\n private readonly graph = new D2();\n private readonly input: RootStreamBuilder<KeyedRow>;\n private readonly alias: string;\n private readonly columns: ReadonlyArray<string>;\n private readonly columnIndexes: ReadonlyMap<string, number>;\n private emitted: WeightedResult[] = [];\n\n constructor(readonly source: Collection, readonly query: QueryIR) {\n if (query.from.type !== 'collectionRef') throw new Error('aggregate backend requires a collection source');\n this.sources = [source];\n this.alias = query.from.alias;\n this.columns = dependencyColumns(query, this.alias, source);\n this.columnIndexes = new Map(this.columns.map((column, index) => [column, index]));\n const where = (query.where ?? []).map((clause) => getWhereExpression(clause));\n const groupBy = query.groupBy ?? [];\n const having = (query.having ?? []).map((clause) => getHavingExpression(clause));\n this.input = this.graph.newInput<KeyedRow>();\n this.input.pipe(\n filter(([, row]) => where.every((expr) => toBooleanPredicate(evaluateExpressionOnRowView(expr, row)))),\n // Prefix retained values with their source key. @tanstack/db-ivm's\n // adaptive Index recognizes this shape and avoids structurally hashing\n // the entire retained row for every group member.\n map(([sourceKey, row]) => [groupKey(groupBy, row), [sourceKey, row]] as [string, RetainedRow]),\n reduce((values) => {\n const liveValues = values\n .filter(([, multiplicity]) => multiplicity > 0)\n .map(([[, row], multiplicity]) => [row, multiplicity] as [RowView, number]);\n if (liveValues.length === 0) return [];\n const first = liveValues[0]![0];\n const projected = evaluateGroupSelect(query.select, liveValues, first, this.alias, groupBy);\n const selected = rowToObject(projected);\n const selectedView = new PlainRowView('group', { $selected: selected });\n if (!having.every((expr) => toBooleanPredicate(evaluateGroupExpression(expr, liveValues, first, selectedView)))) {\n return [];\n }\n const orderValues = (query.orderBy ?? []).map((clause) =>\n clause.expression.type === 'ref' && clause.expression.path[0] === '$selected'\n ? evaluateExpression(clause.expression, { $selected: selected })\n : evaluateExpressionOnRowView(clause.expression, first),\n );\n if (orderValues.length > 0) setRowOrderValues(selected, orderValues);\n this.stats.outputRowsMaterialized++;\n return [[selected, 1]];\n }),\n output((batch) => {\n for (const [[key, row], multiplicity] of batch.getInner()) {\n if (multiplicity !== 0) this.emitted.push([key, row, multiplicity]);\n }\n }),\n );\n this.graph.finalize();\n }\n\n seed(): WeightedResult[] {\n const changes: Array<[KeyedRow, number]> = [];\n for (const row of this.source._internalLiveOrdinals()) {\n const key = this.source._internalReadCell(this.source.schema.primaryKey, row);\n if (typeof key === 'number') changes.push([[key, this.freezeCurrent(key, row)], 1]);\n }\n return this.send(changes);\n }\n\n apply(source: Collection, event: ChangeEvent): WeightedResult[] {\n if (source !== this.source || event.op === 'compact' || (event.op === 'rollback' && !event.changes)) return [];\n const changes: Array<[KeyedRow, number]> = [];\n if (event.op === 'rollback' && event.changes) {\n for (const change of event.changes) {\n if (change.type === 'delete') {\n changes.push([[change.key, this.freezeValue(change.key, change.value)], -1]);\n } else {\n if (change.type === 'update' && change.previousValue) {\n changes.push([[change.key, this.freezeValue(change.key, change.previousValue)], -1]);\n }\n this.appendCurrent(changes, change.key);\n }\n }\n } else if (event.op === 'insert') {\n this.appendCurrent(changes, event.rowId);\n } else if (event.op === 'delete') {\n changes.push([[event.rowId, this.freezeValue(\n event.rowId,\n previousValue(event.value, event.previousValue),\n )], -1]);\n } else if (event.op === 'update') {\n changes.push([[event.rowId, this.freezeValue(\n event.rowId,\n previousValue(event.value, event.previousValue),\n )], -1]);\n this.appendCurrent(changes, event.rowId);\n }\n return this.send(changes);\n }\n\n private appendCurrent(out: Array<[KeyedRow, number]>, key: number): void {\n const row = this.source._internalRowOrdinalForKey(key);\n if (row !== undefined) out.push([[key, this.freezeCurrent(key, row)], 1]);\n }\n\n private freezeCurrent(key: number, row: number): FrozenRowView {\n this.stats.sourceHandles++;\n const values = new Array<unknown>(this.columns.length);\n for (let index = 0; index < this.columns.length; index++) {\n values[index] = this.source._internalReadCell(this.columns[index]!, row);\n }\n return new FrozenRowView(key, this.alias, this.columnIndexes, values);\n }\n\n private freezeValue(key: number, input: Readonly<Record<string, unknown>>): FrozenRowView {\n const values = new Array<unknown>(this.columns.length);\n for (let index = 0; index < this.columns.length; index++) values[index] = input[this.columns[index]!];\n return new FrozenRowView(key, this.alias, this.columnIndexes, values);\n }\n\n private send(changes: Array<[KeyedRow, number]>): WeightedResult[] {\n if (changes.length === 0) return [];\n for (const [, weight] of changes) {\n if (weight > 0) this.stats.additions += weight;\n else this.stats.retractions += -weight;\n }\n this.emitted = [];\n this.input.sendData(new MultiSet(changes));\n this.graph.run();\n return this.emitted;\n }\n}\n\nfunction groupKey(groupBy: ReadonlyArray<BasicExpression>, row: RowView): string {\n const values = groupBy.length === 0\n ? ['__singleGroup']\n : groupBy.map((expr) => evaluateExpressionOnRowView(expr, row));\n return stableKey(values);\n}\n\nfunction evaluateGroupSelect(\n select: unknown,\n values: ReadonlyArray<[RowView, number]>,\n first: RowView,\n alias: string,\n groupBy: ReadonlyArray<BasicExpression>,\n): unknown {\n if (select === undefined) {\n return Object.fromEntries(groupBy.map((expr, index) => [\n `__key_${index}`,\n evaluateExpressionOnRowView(expr, first),\n ]));\n }\n if (isBasicExpression(select) || isAggregate(select)) {\n return evaluateGroupExpression(select as BasicExpression | Aggregate, values, first);\n }\n if (isPlainObject(select)) return evaluateGroupSelectObject(select as Select, values, first);\n return select ?? first.get(alias);\n}\n\nfunction evaluateGroupSelectObject(\n select: Select,\n values: ReadonlyArray<[RowView, number]>,\n first: RowView,\n): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(select)) {\n if (isBasicExpression(value) || isAggregate(value)) {\n out[key] = evaluateGroupExpression(value as BasicExpression | Aggregate, values, first);\n } else if (isPlainObject(value) && !isExpressionLike(value)) {\n out[key] = evaluateGroupSelectObject(value as Select, values, first);\n } else {\n out[key] = value;\n }\n }\n return out;\n}\n\nfunction evaluateGroupExpression(\n expression: BasicExpression | Aggregate,\n values: ReadonlyArray<[RowView, number]>,\n first: RowView,\n selected?: RowView,\n): unknown {\n if (isAggregate(expression)) return computeAggregate(expression, values);\n if (expression.type === 'ref' && expression.path[0] === '$selected' && selected) {\n return selected.get(expression.path.join('.'));\n }\n if (expression.type === 'func') {\n const args = expression.args.map((arg) => new Value(\n isAggregate(arg) || containsAggregate(arg)\n ? evaluateGroupExpression(arg as BasicExpression | Aggregate, values, first, selected)\n : evaluateExpressionOnRowView(arg, selected && arg.type === 'ref' && arg.path[0] === '$selected' ? selected : first),\n ));\n return evaluateExpressionOnRowView(new Func(expression.name, args), first);\n }\n return evaluateExpressionOnRowView(expression, first);\n}\n\nfunction computeAggregate(\n aggregate: Aggregate,\n values: ReadonlyArray<[RowView, number]>,\n): unknown {\n const weighted = values\n .filter(([, multiplicity]) => multiplicity > 0)\n .map(([row, multiplicity]) => [evaluateExpressionOnRowView(aggregate.args[0]!, row), multiplicity] as const);\n switch (aggregate.name) {\n case 'count':\n return weighted.reduce((total, [, multiplicity]) => total + multiplicity, 0);\n case 'sum':\n return weighted.reduce((total, [value, multiplicity]) => total + numberValue(value) * multiplicity, 0);\n case 'avg': {\n const count = weighted.reduce((total, [, multiplicity]) => total + multiplicity, 0);\n const sum = weighted.reduce((total, [value, multiplicity]) => total + numberValue(value) * multiplicity, 0);\n return count === 0 ? 0 : sum / count;\n }\n case 'min':\n case 'max': {\n const candidates = weighted.map(([value]) => value).filter((value) => value !== null && value !== undefined);\n if (candidates.length === 0) return null;\n return candidates.reduce((best, value) => {\n const comparison = comparePrimitive(value, best);\n return aggregate.name === 'min' ? (comparison < 0 ? value : best) : (comparison > 0 ? value : best);\n });\n }\n default:\n throw new ValidationError(`unsupported aggregate: ${aggregate.name}`);\n }\n}\n\nfunction dependencyColumns(query: QueryIR, alias: string, collection: Collection): ReadonlyArray<string> {\n const deps = new Set<string>();\n const add = (value: unknown): void => {\n for (const dep of collectExpressionDeps(value)) {\n const [depAlias, column] = dep.split('.');\n if (depAlias === alias && column) deps.add(column);\n }\n };\n add(query.select);\n for (const expr of query.groupBy ?? []) add(expr);\n for (const clause of query.where ?? []) add(getWhereExpression(clause));\n for (const clause of query.having ?? []) add(getHavingExpression(clause));\n return deps.size === 0 ? [...collection.columnNames()] : [...deps];\n}\n\nfunction isAggregate(value: unknown): value is Aggregate {\n return value instanceof Aggregate || (\n value !== null && typeof value === 'object' && (value as { type?: unknown }).type === 'agg'\n );\n}\n\nfunction containsAggregate(value: unknown): boolean {\n if (isAggregate(value)) return true;\n return value instanceof Func && value.args.some(containsAggregate);\n}\n\nfunction numberValue(value: unknown): number {\n if (typeof value === 'number') return value;\n if (typeof value === 'bigint') return Number(value);\n const number = Number(value ?? 0);\n return Number.isFinite(number) ? number : 0;\n}\n\nfunction comparePrimitive(a: unknown, b: unknown): number {\n if (Object.is(a, b)) return 0;\n if (typeof a === 'number' && typeof b === 'number') return a - b;\n if (typeof a === 'bigint' && typeof b === 'bigint') return a < b ? -1 : 1;\n const left = String(a);\n const right = String(b);\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction previousValue(\n current: Readonly<Record<string, unknown>> | undefined,\n patch: Readonly<Record<string, unknown>> | undefined,\n): Record<string, unknown> {\n return { ...(current ?? {}), ...(patch ?? {}) };\n}\n\nfunction rowToObject(value: unknown): Record<string, unknown> {\n if (value !== null && typeof value === 'object' && !Array.isArray(value)) return value as Record<string, unknown>;\n return { value };\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n","/**\n * TanStack-compatible live query collection backed by signed,\n * differential updates for the structural query subset. Queries outside\n * that subset retain the batch compiler as a correctness fallback.\n */\n\nimport type { Collection } from '../collection/collection.js';\nimport type { ChangeEvent } from '../collection/events.js';\nimport { SetWindowRequiresOrderByError } from '../errors.js';\nimport type {\n ChangeMessage,\n CollectionSubscription,\n StringCollationConfig,\n SubscribeChangesOptions,\n UtilsRecord,\n} from '../tanstack-types.js';\nimport {\n BaseQueryBuilder,\n getQueryIR,\n type ExtractContext,\n type InitialQueryBuilder,\n type QueryResult,\n} from './builder.js';\nimport { runCollection } from './compiler.js';\nimport type { FilterExpr, Operand } from './filter.js';\nimport { tryCompileFnToFilterExpr } from './fnCompile.js';\nimport {\n ColumnarDifferentialBackend,\n ColumnarAggregateDifferentialBackend,\n ColumnarJoinDifferentialBackend,\n compareRowsByOrderBy,\n containsAggregate,\n type ColumnarBackendStats,\n type DifferentialQueryBackend,\n type RowKey,\n type WeightedResult,\n} from './ivm/index.js';\nimport {\n Func,\n IncludesSubquery,\n PropRef,\n Value,\n type BasicExpression,\n type From,\n type QueryIR,\n type Select,\n} from './ir.js';\n\nexport interface WindowOptions {\n offset?: number;\n limit?: number;\n}\n\nexport const LIVE_QUERY_INTERNAL: unique symbol = Symbol('liveQueryInternal');\n\nexport interface LiveQueryInternalUtils {\n getBuilder: () => LiveQueryController;\n getBackendStats: () => ColumnarBackendStats | { readonly backend: 'batch' };\n hasCustomGetKey: boolean;\n hasJoins: boolean;\n hasDistinct: boolean;\n}\n\nexport type LiveQueryCollectionUtils = UtilsRecord & {\n getRunCount: () => number;\n setWindow: (options: WindowOptions) => true | Promise<void>;\n getWindow: () => { offset: number; limit: number } | undefined;\n [LIVE_QUERY_INTERNAL]: LiveQueryInternalUtils;\n};\n\nexport type LiveQueryKey = string | number;\nexport type LiveQueryRow = Record<string, unknown>;\n\nexport interface LiveQueryCollectionConfig<\n TQuery extends BaseQueryBuilder<any> = BaseQueryBuilder<any>,\n TResult extends object = QueryResult<TQuery> extends object ? QueryResult<TQuery> : LiveQueryRow,\n> {\n id?: string;\n query: ((q: InitialQueryBuilder) => TQuery) | TQuery;\n getKey?: (item: TResult) => LiveQueryKey;\n utils?: UtilsRecord;\n schema?: unknown;\n capacity?: number;\n gcTime?: number;\n startSync?: boolean;\n singleResult?: true;\n defaultStringCollation?: StringCollationConfig;\n onInsert?: unknown;\n onUpdate?: unknown;\n onDelete?: unknown;\n}\n\nexport interface LiveQueryCollectionOptions<\n TQuery extends BaseQueryBuilder<any> = BaseQueryBuilder<any>,\n TResult extends object = QueryResult<TQuery> extends object ? QueryResult<TQuery> : LiveQueryRow,\n> {\n id: string;\n query: ((q: InitialQueryBuilder) => TQuery) | TQuery;\n queryIR: QueryIR;\n getKey?: (item: TResult) => LiveQueryKey;\n utils: LiveQueryCollectionUtils;\n schema?: unknown;\n capacity?: number;\n gcTime: number;\n startSync?: boolean;\n singleResult?: true;\n defaultStringCollation?: StringCollationConfig;\n onInsert?: unknown;\n onUpdate?: unknown;\n onDelete?: unknown;\n controller: LiveQueryController;\n}\n\ntype LiveQueryChange = ChangeMessage<LiveQueryRow, LiveQueryKey>;\ntype ChangeListener = (changes: Array<LiveQueryChange>) => void;\ntype LowLevelListener = (event: {\n op: 'insert' | 'update' | 'delete' | 'reset';\n changes: Array<LiveQueryChange>;\n globalVersion: number;\n}) => void;\n\ninterface LiveIvmPlan {\n readonly backend: DifferentialQueryBackend;\n readonly rowsBySourceKey: Map<RowKey, LiveQueryRow>;\n readonly keysBySourceKey: Map<RowKey, LiveQueryKey>;\n}\n\nlet liveQueryCounter = 0;\n\nexport class LiveQueryController {\n readonly id: string;\n readonly query: QueryIR;\n readonly hasCustomGetKey: boolean;\n readonly hasJoins: boolean;\n readonly hasDistinct: boolean;\n readonly compareOptions: StringCollationConfig | undefined;\n private readonly keyFn: ((item: LiveQueryRow) => LiveQueryKey) | undefined;\n private _runCount = 0;\n private _window: { offset: number; limit: number } | undefined;\n private onWindowChange: (() => void) | undefined;\n private backendStats: () => ColumnarBackendStats | { readonly backend: 'batch' } = () => ({ backend: 'batch' });\n\n constructor(options: {\n id: string;\n query: QueryIR;\n getKey?: (item: LiveQueryRow) => LiveQueryKey;\n compareOptions?: StringCollationConfig;\n }) {\n this.id = options.id;\n this.query = options.query;\n this.keyFn = options.getKey;\n this.hasCustomGetKey = options.getKey !== undefined;\n this.hasJoins = queryHasJoins(options.query);\n this.hasDistinct = options.query.distinct === true;\n this.compareOptions = options.compareOptions;\n }\n\n getRunCount(): number {\n return this._runCount;\n }\n\n recordRun(): void {\n this._runCount++;\n }\n\n setBackendStats(provider: () => ColumnarBackendStats | { readonly backend: 'batch' }): void {\n this.backendStats = provider;\n }\n\n getBackendStats(): ColumnarBackendStats | { readonly backend: 'batch' } {\n return this.backendStats();\n }\n\n setWindow(options: WindowOptions): true {\n if ((this.query.orderBy?.length ?? 0) === 0) throw new SetWindowRequiresOrderByError();\n this._window = {\n offset: options.offset ?? 0,\n limit: options.limit ?? 0,\n };\n this.onWindowChange?.();\n return true;\n }\n\n getWindow(): { offset: number; limit: number } | undefined {\n return this._window;\n }\n\n getEffectiveQuery(): QueryIR {\n return this.effectiveQuery();\n }\n\n setWindowChangeListener(listener: (() => void) | undefined): void {\n this.onWindowChange = listener;\n }\n\n runRows(): Array<LiveQueryRow> {\n this.recordRun();\n return runCollection(this.effectiveQuery()).map(rowToObject);\n }\n\n getKey(row: LiveQueryRow, index: number): LiveQueryKey {\n if (this.keyFn) return this.keyFn(row);\n const explicit = row.$key ?? row.id ?? row.__id;\n if (typeof explicit === 'string' || typeof explicit === 'number') {\n return explicit;\n }\n return index;\n }\n\n private effectiveQuery(): QueryIR {\n if (!this._window) return this.query;\n return {\n ...this.query,\n offset: this._window.offset,\n limit: this._window.limit,\n };\n }\n}\n\nexport class LiveQueryCollection<\n TRow extends LiveQueryRow = LiveQueryRow,\n TKey extends LiveQueryKey = LiveQueryKey,\n TUtils extends UtilsRecord = {},\n> {\n readonly id: string;\n readonly utils: LiveQueryCollectionUtils & TUtils;\n readonly compareOptions: StringCollationConfig;\n readonly config: LiveQueryCollectionOptions;\n private readonly controller: LiveQueryController;\n private readonly sourceUnsubs: Array<() => void> = [];\n private readonly listeners = new Set<ChangeListener>();\n private readonly lowLevelListeners = new Set<LowLevelListener>();\n private rowsCache: Array<TRow> = [];\n private stateCache = new Map<TKey, TRow>();\n private ivmPlan: LiveIvmPlan | undefined;\n private _subscriberCount = 0;\n private _status: 'ready' | 'cleaned-up' = 'ready';\n private _globalVersion = 0;\n\n constructor(options: LiveQueryCollectionOptions<any, any>, customUtils?: TUtils) {\n this.config = options;\n this.id = options.id;\n this.controller = options.controller;\n this.utils = {\n ...options.utils,\n ...(customUtils ?? {}),\n } as LiveQueryCollectionUtils & TUtils;\n this.compareOptions = options.defaultStringCollation ?? { stringSort: 'lexical' };\n this.controller.setWindowChangeListener(() => {\n if (this._status !== 'cleaned-up') this.resetForWindowChange();\n });\n\n this.ivmPlan = buildLiveIvmPlan(options.queryIR);\n if (this.ivmPlan) {\n this.controller.setBackendStats(() => this.ivmPlan!.backend.stats);\n this.seedIvmPlan(this.ivmPlan);\n } else {\n this.recompute(false);\n }\n\n if (options.startSync !== false) {\n if (this.ivmPlan) {\n for (const source of this.ivmPlan.backend.sources) {\n this.sourceUnsubs.push(source.subscribe((event) => {\n const plan = this.ivmPlan;\n if (plan?.backend.sources.includes(source)) {\n this.applyIvmChanges(plan, source, event);\n } else if (!plan) {\n this.recompute(true);\n }\n }));\n }\n } else {\n for (const source of collectCollections(options.queryIR)) {\n this.sourceUnsubs.push(\n source.subscribe(() => {\n this.recompute(true);\n }),\n );\n }\n }\n }\n }\n\n get status(): 'ready' | 'cleaned-up' {\n return this._status;\n }\n\n get size(): number {\n return this.stateCache.size;\n }\n\n get rowCount(): number {\n return this.rowsCache.length;\n }\n\n get globalVersion(): number {\n return this._globalVersion;\n }\n\n get subscriberCount(): number {\n return this._subscriberCount;\n }\n\n get state(): Map<TKey, TRow> {\n return this.stateCache;\n }\n\n get toArray(): Array<TRow> {\n return this.rowsCache;\n }\n\n get(key: TKey): TRow | undefined {\n return this.stateCache.get(key);\n }\n\n has(key: TKey): boolean {\n return this.stateCache.has(key);\n }\n\n *keys(): IterableIterator<TKey> {\n yield* this.stateCache.keys();\n }\n\n *values(): IterableIterator<TRow> {\n yield* this.stateCache.values();\n }\n\n *entries(): IterableIterator<[TKey, TRow]> {\n yield* this.stateCache.entries();\n }\n\n forEach(callback: (value: TRow, key: TKey, index: number) => void): void {\n let i = 0;\n for (const [key, value] of this.stateCache.entries()) {\n callback(value, key, i++);\n }\n }\n\n map<U>(callback: (value: TRow, key: TKey, index: number) => U): Array<U> {\n const out: Array<U> = [];\n this.forEach((value, key, index) => out.push(callback(value, key, index)));\n return out;\n }\n\n currentStateAsChanges(): Array<ChangeMessage<TRow, TKey>> {\n return [...this.stateCache.entries()].map(([key, value]) => ({\n key,\n value,\n type: 'insert' as const,\n }));\n }\n\n subscribeChanges(\n callback: (changes: Array<ChangeMessage<TRow, TKey>>) => void,\n options?: SubscribeChangesOptions,\n ): CollectionSubscription {\n this._subscriberCount++;\n const listener = callback as ChangeListener;\n this.listeners.add(listener);\n\n if (options?.includeInitialState) {\n const initial = this.currentStateAsChanges();\n if (initial.length > 0) callback(initial);\n }\n\n let active = true;\n return {\n status: 'ready',\n unsubscribe: () => {\n if (!active) return;\n active = false;\n this.listeners.delete(listener);\n this._subscriberCount--;\n },\n };\n }\n\n subscribe(listener: LowLevelListener): () => void {\n this.lowLevelListeners.add(listener);\n return () => this.lowLevelListeners.delete(listener);\n }\n\n async preload(): Promise<void> {\n await Promise.resolve();\n }\n\n async stateWhenReady(): Promise<Map<TKey, TRow>> {\n await this.preload();\n return this.state;\n }\n\n async toArrayWhenReady(): Promise<Array<TRow>> {\n await this.preload();\n return this.toArray;\n }\n\n isReady(): boolean {\n return this._status === 'ready';\n }\n\n startSyncImmediate(): void {\n // Started eagerly in Layer C. Kept for structural parity.\n }\n\n async cleanup(): Promise<void> {\n if (this._status === 'cleaned-up') return;\n this._status = 'cleaned-up';\n for (const unsub of this.sourceUnsubs.splice(0)) unsub();\n this.listeners.clear();\n this.lowLevelListeners.clear();\n this._subscriberCount = 0;\n this.controller.setWindowChangeListener(undefined);\n await Promise.resolve();\n }\n\n private recompute(emit: boolean): void {\n this.replaceRows(this.controller.runRows() as Array<TRow>, emit);\n }\n\n private resetForWindowChange(): void {\n const plan = buildLiveIvmPlan(this.controller.getEffectiveQuery());\n if (!plan) {\n this.ivmPlan = undefined;\n this.controller.setBackendStats(() => ({ backend: 'batch' }));\n this.recompute(true);\n return;\n }\n\n this.ivmPlan = plan;\n this.controller.setBackendStats(() => plan.backend.stats);\n this.controller.recordRun();\n const output = plan.backend.seed();\n this.applyWeightsToPlan(plan, output);\n let index = 0;\n for (const [sourceKey, row] of plan.rowsBySourceKey) {\n plan.keysBySourceKey.set(sourceKey, this.controller.getKey(row, index++));\n }\n this.replaceRows([...plan.rowsBySourceKey.values()] as Array<TRow>, true);\n }\n\n private seedIvmPlan(plan: LiveIvmPlan): void {\n this.controller.recordRun();\n const output = plan.backend.seed();\n this.applyWeightsToPlan(plan, output);\n let index = 0;\n for (const [sourceKey, row] of plan.rowsBySourceKey) {\n plan.keysBySourceKey.set(sourceKey, this.controller.getKey(row, index++));\n }\n this.replaceRows([...plan.rowsBySourceKey.values()] as Array<TRow>, false);\n }\n\n private applyIvmChanges(plan: LiveIvmPlan, source: Collection, event: ChangeEvent): void {\n const output = plan.backend.apply(source, event);\n if (output.length === 0) return;\n const liveChanges = this.applyWeightedOutputChanges(plan, output);\n if (liveChanges.length === 0) return;\n this._globalVersion++;\n this.emitChanges(liveChanges);\n }\n\n private applyWeightsToPlan(\n plan: LiveIvmPlan,\n changes: ReadonlyArray<WeightedResult>,\n ): void {\n for (const [sourceKey, row, weight] of changes) {\n if (weight < 0) plan.rowsBySourceKey.delete(sourceKey);\n else if (weight > 0) plan.rowsBySourceKey.set(sourceKey, row);\n }\n }\n\n private applyWeightedOutputChanges(\n plan: LiveIvmPlan,\n changes: ReadonlyArray<WeightedResult>,\n ): Array<ChangeMessage<TRow, TKey>> {\n const emitted: Array<ChangeMessage<TRow, TKey>> = [];\n let shouldResort = false;\n const beforeRows = new Map<RowKey, LiveQueryRow | undefined>();\n const beforeKeys = new Map<RowKey, LiveQueryKey | undefined>();\n\n for (const [sourceKey] of changes) {\n if (!beforeRows.has(sourceKey)) {\n beforeRows.set(sourceKey, plan.rowsBySourceKey.get(sourceKey));\n beforeKeys.set(sourceKey, plan.keysBySourceKey.get(sourceKey));\n }\n }\n this.applyWeightsToPlan(plan, changes);\n\n for (const [sourceKey, previousValue] of beforeRows) {\n const previous = previousValue as TRow | undefined;\n const previousKey = beforeKeys.get(sourceKey) as TKey | undefined;\n const next = plan.rowsBySourceKey.get(sourceKey) as TRow | undefined;\n const nextKey = next === undefined\n ? undefined\n : this.controller.getKey(next, this.rowsCache.length) as TKey;\n\n if (previous !== undefined && previousKey !== undefined &&\n (next === undefined || nextKey !== previousKey)) {\n this.stateCache.delete(previousKey);\n this.removeCachedRow(previousKey);\n emitted.push({ key: previousKey, value: previous, type: 'delete' });\n shouldResort = true;\n }\n\n if (next === undefined || nextKey === undefined) {\n plan.keysBySourceKey.delete(sourceKey);\n continue;\n }\n\n plan.keysBySourceKey.set(sourceKey, nextKey);\n const priorAtKey = this.stateCache.get(nextKey);\n this.stateCache.set(nextKey, next);\n if (previous === undefined || previousKey !== nextKey || priorAtKey === undefined) {\n this.rowsCache.push(next);\n emitted.push({ key: nextKey, value: next, type: 'insert' });\n shouldResort = true;\n } else {\n this.replaceCachedRow(nextKey, next);\n const rowChanged = stableKey(previous) !== stableKey(next);\n const orderChanged = (this.config.queryIR.orderBy?.length ?? 0) > 0 &&\n compareRowsByOrderBy(previous, next, this.config.queryIR.orderBy) !== 0;\n if (rowChanged || orderChanged) {\n emitted.push({ key: nextKey, previousValue: previous, value: next, type: 'update' });\n if (orderChanged) shouldResort = true;\n }\n }\n }\n\n if (shouldResort) this.rowsCache = this.sortRows(this.rowsCache);\n return emitted;\n }\n\n private replaceCachedRow(key: TKey, row: TRow): void {\n const index = this.rowsCache.findIndex((candidate, i) => this.controller.getKey(candidate, i) === key);\n if (index >= 0) this.rowsCache[index] = row;\n else this.rowsCache.push(row);\n }\n\n private removeCachedRow(key: TKey): void {\n const index = this.rowsCache.findIndex((candidate, i) => this.controller.getKey(candidate, i) === key);\n if (index >= 0) this.rowsCache.splice(index, 1);\n }\n\n private replaceRows(rows: Array<TRow>, emit: boolean): void {\n const previous = this.stateCache;\n const sortedRows = this.sortRows(rows);\n const next = new Map<TKey, TRow>();\n sortedRows.forEach((row, index) => {\n next.set(this.controller.getKey(row, index) as TKey, row);\n });\n\n this.rowsCache = sortedRows;\n this.stateCache = next;\n this._globalVersion++;\n\n if (!emit) return;\n const changes = diffStates(previous, next);\n if (changes.length === 0) return;\n this.emitChanges(changes as Array<ChangeMessage<TRow, TKey>>);\n }\n\n private sortRows(rows: Array<TRow>): Array<TRow> {\n if ((this.config.queryIR.orderBy?.length ?? 0) === 0) return rows;\n return [...rows].sort((a, b) => compareRowsByOrderBy(a, b, this.config.queryIR.orderBy));\n }\n\n private emitChanges(changes: Array<ChangeMessage<TRow, TKey>>): void {\n for (const listener of this.listeners) {\n listener(changes as Array<LiveQueryChange>);\n }\n const op = changes.length === 1 ? changes[0]!.type : 'reset';\n const event = {\n op,\n changes: changes as Array<LiveQueryChange>,\n globalVersion: this._globalVersion,\n } as const;\n for (const listener of this.lowLevelListeners) {\n listener(event);\n }\n }\n}\n\nfunction buildLiveIvmPlan(query: QueryIR): LiveIvmPlan | undefined {\n const optimizedQuery = lowerFunctionalWhere(query);\n if (!optimizedQuery || !isIvmSupportedQuery(optimizedQuery)) return undefined;\n if (optimizedQuery.from.type !== 'collectionRef') return undefined;\n const sourceAlias = optimizedQuery.from.alias;\n const source = optimizedQuery.from.collection;\n const aggregate = (optimizedQuery.groupBy?.length ?? 0) > 0 ||\n containsAggregate(optimizedQuery.select) ||\n (optimizedQuery.having ?? []).some((clause) => containsAggregate(clause));\n const backend = aggregate\n ? new ColumnarAggregateDifferentialBackend(source, optimizedQuery)\n : optimizedQuery.join?.length === 1\n ? new ColumnarJoinDifferentialBackend(optimizedQuery)\n : new ColumnarDifferentialBackend(source, sourceAlias, optimizedQuery);\n return {\n backend,\n rowsBySourceKey: new Map(),\n keysBySourceKey: new Map(),\n };\n}\n\nfunction lowerFunctionalWhere(query: QueryIR): QueryIR | undefined {\n if ((query.fnWhere?.length ?? 0) === 0) return query;\n if (query.from.type !== 'collectionRef' || (query.join?.length ?? 0) > 0) return undefined;\n const alias = query.from.alias;\n const knownColumns = new Set(query.from.collection.columnNames());\n const lowered: Array<BasicExpression<boolean>> = [];\n for (const predicate of query.fnWhere ?? []) {\n const filter = tryCompileFnToFilterExpr(\n predicate as (row: Record<string, unknown>) => boolean,\n { knownColumns, namespaceAlias: alias },\n );\n const expression = filter && filterExprToExpression(filter, alias);\n if (!expression) return undefined;\n lowered.push(expression);\n }\n const { fnWhere: _fnWhere, ...queryWithoutFnWhere } = query;\n return {\n ...queryWithoutFnWhere,\n where: [...(query.where ?? []), ...lowered],\n };\n}\n\nfunction filterExprToExpression(\n filter: FilterExpr,\n alias: string,\n): BasicExpression<boolean> | undefined {\n const ref = (column: string) => new PropRef([alias, column]);\n const operand = (value: Operand): BasicExpression =>\n value.kind === 'col' ? ref(value.name) : new Value(value.value);\n switch (filter.kind) {\n case 'col':\n return new Func('eq', [ref(filter.name), new Value(true)]) as BasicExpression<boolean>;\n case 'cmp': {\n const comparison = new Func(filter.op === 'neq' ? 'eq' : filter.op, [\n operand(filter.left),\n operand(filter.right),\n ]) as BasicExpression<boolean>;\n return filter.op === 'neq'\n ? new Func('not', [comparison]) as BasicExpression<boolean>\n : comparison;\n }\n case 'and':\n case 'or': {\n const args = filter.args.map((arg) => filterExprToExpression(arg, alias));\n return args.every((arg): arg is BasicExpression<boolean> => arg !== undefined)\n ? new Func(filter.kind, args) as BasicExpression<boolean>\n : undefined;\n }\n case 'not': {\n const arg = filterExprToExpression(filter.arg, alias);\n return arg ? new Func('not', [arg]) as BasicExpression<boolean> : undefined;\n }\n case 'isNull': {\n const expression = new Func('isNull', [ref(filter.col.name)]) as BasicExpression<boolean>;\n return filter.negated\n ? new Func('not', [expression]) as BasicExpression<boolean>\n : expression;\n }\n case 'in':\n return new Func('in', [ref(filter.col.name), new Value([...filter.values])]) as BasicExpression<boolean>;\n case 'str': {\n if (filter.op === 'matches') return undefined;\n // TanStack LIKE has no escape character, so literal SQL wildcards in a\n // JS string method cannot be translated without changing semantics.\n if (filter.value.includes('%') || filter.value.includes('_')) return undefined;\n const pattern = filter.op === 'contains'\n ? `%${filter.value}%`\n : filter.op === 'startsWith'\n ? `${filter.value}%`\n : filter.op === 'endsWith'\n ? `%${filter.value}`\n : filter.value;\n const expression = new Func(filter.caseInsensitive ? 'ilike' : 'like', [\n ref(filter.col.name),\n new Value(pattern),\n ]) as BasicExpression<boolean>;\n return filter.negated\n ? new Func('not', [expression]) as BasicExpression<boolean>\n : expression;\n }\n }\n}\n\nfunction isIvmSupportedQuery(query: QueryIR): boolean {\n if (query.from.type !== 'collectionRef') return false;\n if ((query.join?.length ?? 0) > 1) return false;\n if (query.join?.some((join) => join.from.type !== 'collectionRef' || join.type === 'cross')) return false;\n const aggregate = (query.groupBy?.length ?? 0) > 0 ||\n containsAggregate(query.select) ||\n (query.having ?? []).some((clause) => containsAggregate(clause));\n if (aggregate && (query.join?.length ?? 0) > 0) return false;\n if ((query.fnWhere?.length ?? 0) > 0) return false;\n if ((query.fnHaving?.length ?? 0) > 0) return false;\n if (query.fnSelect !== undefined) return false;\n if (query.singleResult === true) return false;\n if ((query.limit !== undefined || query.offset !== undefined) && (query.orderBy?.length ?? 0) === 0) return false;\n if ((query.limit !== undefined || query.offset !== undefined) && (aggregate || (query.join?.length ?? 0) > 0)) return false;\n if (containsIncludesSubquery(query.select)) return false;\n return true;\n}\n\nfunction containsIncludesSubquery(value: unknown): boolean {\n if (!value || typeof value !== 'object') return false;\n if (value instanceof IncludesSubquery || isIncludesSubquery(value)) return true;\n if (isExpressionNode(value)) return false;\n return Object.values(value as Record<string, unknown>).some(containsIncludesSubquery);\n}\n\nexport function liveQueryCollectionOptions<\n TQuery extends BaseQueryBuilder<any>,\n TResult extends object = QueryResult<TQuery> extends object ? QueryResult<TQuery> : LiveQueryRow,\n>(\n config: LiveQueryCollectionConfig<TQuery, TResult>,\n): LiveQueryCollectionOptions<TQuery, TResult> {\n const queryIR = resolveQueryIR(config.query);\n const id = config.id ?? `live-query-${++liveQueryCounter}`;\n const controller = new LiveQueryController({\n id,\n query: queryIR,\n ...(config.getKey\n ? { getKey: config.getKey as unknown as (item: LiveQueryRow) => LiveQueryKey }\n : {}),\n ...(config.defaultStringCollation\n ? { compareOptions: config.defaultStringCollation }\n : {}),\n });\n\n const utils: LiveQueryCollectionUtils = {\n getRunCount: () => controller.getRunCount(),\n setWindow: (options) => controller.setWindow(options),\n getWindow: () => controller.getWindow(),\n [LIVE_QUERY_INTERNAL]: {\n getBuilder: () => controller,\n getBackendStats: () => controller.getBackendStats(),\n hasCustomGetKey: controller.hasCustomGetKey,\n hasJoins: controller.hasJoins,\n hasDistinct: controller.hasDistinct,\n },\n };\n\n return {\n id,\n query: config.query,\n queryIR,\n ...(config.getKey ? { getKey: config.getKey } : {}),\n utils,\n ...(config.schema !== undefined ? { schema: config.schema } : {}),\n ...(config.capacity !== undefined ? { capacity: config.capacity } : {}),\n gcTime: config.gcTime ?? 5_000,\n ...(config.startSync !== undefined ? { startSync: config.startSync } : {}),\n ...(config.singleResult !== undefined ? { singleResult: config.singleResult } : {}),\n ...(config.defaultStringCollation !== undefined\n ? { defaultStringCollation: config.defaultStringCollation }\n : {}),\n ...(config.onInsert !== undefined ? { onInsert: config.onInsert } : {}),\n ...(config.onUpdate !== undefined ? { onUpdate: config.onUpdate } : {}),\n ...(config.onDelete !== undefined ? { onDelete: config.onDelete } : {}),\n controller,\n };\n}\n\nexport function createLiveQueryCollection<\n TQuery extends BaseQueryBuilder<any>,\n TContext = ExtractContext<TQuery>,\n TResult extends object = QueryResult<TQuery> extends object ? QueryResult<TQuery> : LiveQueryRow,\n TUtils extends UtilsRecord = {},\n>(\n query: ((q: InitialQueryBuilder) => TQuery),\n): LiveQueryCollection<TResult & LiveQueryRow, LiveQueryKey, {}> & {\n utils: LiveQueryCollectionUtils;\n};\nexport function createLiveQueryCollection<\n TQuery extends BaseQueryBuilder<any>,\n TContext = ExtractContext<TQuery>,\n TResult extends object = QueryResult<TQuery> extends object ? QueryResult<TQuery> : LiveQueryRow,\n TUtils extends UtilsRecord = {},\n>(\n config: LiveQueryCollectionConfig<TQuery, TResult> & { utils?: TUtils },\n): LiveQueryCollection<TResult & LiveQueryRow, LiveQueryKey, TUtils> & {\n utils: LiveQueryCollectionUtils & TUtils;\n};\nexport function createLiveQueryCollection<\n TQuery extends BaseQueryBuilder<any>,\n TResult extends object = QueryResult<TQuery> extends object ? QueryResult<TQuery> : LiveQueryRow,\n TUtils extends UtilsRecord = {},\n>(\n configOrQuery:\n | ((q: InitialQueryBuilder) => TQuery)\n | (LiveQueryCollectionConfig<TQuery, TResult> & { utils?: TUtils }),\n): LiveQueryCollection<TResult & LiveQueryRow, LiveQueryKey, TUtils> & {\n utils: LiveQueryCollectionUtils & TUtils;\n} {\n const config =\n typeof configOrQuery === 'function'\n ? ({ query: configOrQuery } as LiveQueryCollectionConfig<TQuery, TResult>)\n : configOrQuery;\n const options = liveQueryCollectionOptions(config);\n return new LiveQueryCollection<TResult & LiveQueryRow, LiveQueryKey, TUtils>(\n options,\n config.utils as TUtils | undefined,\n ) as LiveQueryCollection<TResult & LiveQueryRow, LiveQueryKey, TUtils> & {\n utils: LiveQueryCollectionUtils & TUtils;\n };\n}\n\nfunction resolveQueryIR<TQuery extends BaseQueryBuilder<any>>(\n query: ((q: InitialQueryBuilder) => TQuery) | TQuery,\n): QueryIR {\n if (typeof query === 'function') {\n return getQueryIR(query(new BaseQueryBuilder() as InitialQueryBuilder));\n }\n return getQueryIR(query);\n}\n\nfunction rowToObject(row: unknown): LiveQueryRow {\n if (row !== null && typeof row === 'object' && !Array.isArray(row)) {\n return row as LiveQueryRow;\n }\n return { value: row };\n}\n\nfunction diffStates<TKey extends LiveQueryKey, TRow extends LiveQueryRow>(\n previous: Map<TKey, TRow>,\n next: Map<TKey, TRow>,\n): Array<ChangeMessage<TRow, TKey>> {\n const changes: Array<ChangeMessage<TRow, TKey>> = [];\n\n for (const [key, prevValue] of previous.entries()) {\n if (!next.has(key)) {\n changes.push({ key, value: prevValue, type: 'delete' });\n }\n }\n\n for (const [key, value] of next.entries()) {\n const prevValue = previous.get(key);\n if (prevValue === undefined && !previous.has(key)) {\n changes.push({ key, value, type: 'insert' });\n continue;\n }\n const previousValue = previous.get(key)!;\n if (stableKey(previousValue) !== stableKey(value)) {\n changes.push({\n key,\n previousValue,\n value,\n type: 'update',\n });\n }\n }\n\n return changes;\n}\n\nfunction stableKey(value: unknown): string {\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (typeof value !== 'object') return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map(stableKey).join(',')}]`;\n return `{${Object.entries(value as Record<string, unknown>)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([k, v]) => `${JSON.stringify(k)}:${stableKey(v)}`)\n .join(',')}}`;\n}\n\nfunction collectCollections(query: QueryIR): Array<Collection> {\n const out = new Set<Collection>();\n const visitSource = (source: From): void => {\n if (source.type === 'collectionRef') {\n out.add(source.collection);\n return;\n }\n visitQuery(source.query);\n };\n const visitSelect = (select: unknown): void => {\n if (!select || typeof select !== 'object') return;\n if (select instanceof IncludesSubquery || isIncludesSubquery(select)) {\n visitQuery(select.query);\n return;\n }\n if (isExpressionNode(select)) return;\n for (const value of Object.values(select as Select)) {\n visitSelect(value);\n }\n };\n const visitQuery = (q: QueryIR): void => {\n visitSource(q.from);\n for (const join of q.join ?? []) visitSource(join.from);\n visitSelect(q.select);\n };\n\n visitQuery(query);\n return [...out];\n}\n\nfunction queryHasJoins(query: QueryIR): boolean {\n if ((query.join?.length ?? 0) > 0) return true;\n if (query.from.type === 'queryRef' && queryHasJoins(query.from.query)) return true;\n return false;\n}\n\nfunction isIncludesSubquery(value: unknown): value is IncludesSubquery {\n return (\n value !== null &&\n typeof value === 'object' &&\n (value as { type?: unknown }).type === 'includesSubquery' &&\n 'query' in value\n );\n}\n\nfunction isExpressionNode(value: unknown): boolean {\n if (value === null || typeof value !== 'object') return false;\n const type = (value as { type?: unknown }).type;\n return type === 'ref' || type === 'val' || type === 'func' || type === 'agg';\n}\n","import { BasicIndex, type BasicIndexOptions } from './basic-index.js';\nimport type { BasicExpression } from '../query/ir.js';\n\n/** Options for BTreeIndex. */\nexport interface BTreeIndexOptions extends BasicIndexOptions {}\n\n/**\n * Sorted index API-compatible with TanStack's BTreeIndex.\n *\n * ArrowBase keeps the implementation compact for D.1 by reusing the same\n * sorted-value map as BasicIndex; D.2 plugs this into query planning, and future\n * work can swap internals without changing the public contract.\n */\nexport class BTreeIndex<TKey extends string | number = string | number> extends BasicIndex<TKey> {\n constructor(id: number, expression: BasicExpression, name?: string, options?: BTreeIndexOptions) {\n super(id, expression, name, options);\n }\n}\n\nexport type { RangeQueryOptions } from './range.js';\n","import type { CollectionStatus } from './collection/collection.js';\n\nexport interface LiveQueryStatusFlags {\n isLoading: boolean;\n isReady: boolean;\n isIdle: boolean;\n isError: boolean;\n isCleanedUp: boolean;\n}\n\nexport function isCollection(value: unknown): boolean {\n return typeof value === 'object' &&\n value !== null &&\n typeof (value as any).subscribeChanges === 'function' &&\n typeof (value as any).startSyncImmediate === 'function' &&\n typeof (value as any).id === 'string';\n}\n\nexport function isSingleResultCollection(collection: { config?: { singleResult?: boolean } }): boolean {\n return collection.config?.singleResult === true;\n}\n\nexport function getLiveQueryStatusFlags(status: CollectionStatus): LiveQueryStatusFlags {\n return {\n isLoading: status === 'loading',\n isReady: status === 'ready',\n isIdle: status === 'idle',\n isError: status === 'error',\n isCleanedUp: status === 'cleaned-up',\n };\n}\n","export function safeRandomUUID(): string {\n const cryptoApi = typeof globalThis === 'undefined'\n ? undefined\n : (globalThis as { crypto?: Crypto }).crypto;\n if (cryptoApi && typeof cryptoApi.randomUUID === 'function') return cryptoApi.randomUUID();\n if (cryptoApi && typeof cryptoApi.getRandomValues === 'function') {\n const bytes = cryptoApi.getRandomValues(new Uint8Array(16));\n bytes[6] = (bytes[6]! & 0x0f) | 0x40;\n bytes[8] = (bytes[8]! & 0x3f) | 0x80;\n const hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0'));\n return `${hex.slice(0, 4).join('')}-${hex.slice(4, 6).join('')}-${hex.slice(6, 8).join('')}-${hex.slice(8, 10).join('')}-${hex.slice(10).join('')}`;\n }\n throw new Error(\n 'No secure random number generator available: neither crypto.randomUUID nor crypto.getRandomValues is defined in this environment.',\n );\n}\n","import { Func, type BasicExpression } from '../query/ir.js';\nimport { toExpression } from '../query/ref-proxy.js';\nimport type { BBox } from './bbox.js';\nimport type { Point } from './point-column.js';\nimport type { Polygon } from './polygon-column.js';\n\nexport function bboxIntersects(\n geometry: unknown,\n bbox: BBox,\n): BasicExpression<boolean> {\n return new Func('bboxIntersects', [\n toExpression(geometry),\n toExpression(bbox),\n ]) as BasicExpression<boolean>;\n}\n\nexport function bboxWithin(\n geometry: unknown,\n bbox: BBox,\n): BasicExpression<boolean> {\n return new Func('bboxWithin', [\n toExpression(geometry),\n toExpression(bbox),\n ]) as BasicExpression<boolean>;\n}\n\nexport function dwithin(\n geometry: unknown,\n point: Point,\n meters: number,\n): BasicExpression<boolean> {\n return new Func('dwithin', [\n toExpression(geometry),\n toExpression(point),\n toExpression(meters),\n ]) as BasicExpression<boolean>;\n}\n\nexport function within(\n point: unknown,\n polygon: unknown,\n): BasicExpression<boolean> {\n return new Func('within', [\n toExpression(point),\n toExpression(polygon as Polygon),\n ]) as BasicExpression<boolean>;\n}\n\nexport function contains(\n polygon: unknown,\n point: unknown,\n): BasicExpression<boolean> {\n return new Func('contains', [\n toExpression(polygon as Polygon),\n toExpression(point),\n ]) as BasicExpression<boolean>;\n}\n","import type { OperatorName } from './expressions.js';\nimport type { BasicExpression, OrderBy } from './ir.js';\n\n/** Field path extracted from a query expression. */\nexport type FieldPath = Array<string>;\n\n/** Simple field/operator/value comparison extracted from a WHERE expression. */\nexport interface SimpleComparison {\n field: FieldPath;\n operator: string;\n value?: unknown;\n}\n\n/** Custom parser hooks for WHERE expression conversion. */\nexport interface ParseWhereOptions<T = unknown> {\n handlers: Partial<Record<OperatorName | string, (...args: Array<any>) => T>>;\n onUnknownOperator?: (operator: string, args: Array<unknown>) => T;\n}\n\n/** Parsed ORDER BY field + compare options. */\nexport interface ParsedOrderBy {\n field: FieldPath;\n direction: 'asc' | 'desc';\n nulls: 'first' | 'last';\n stringSort?: 'lexical' | 'locale';\n locale?: string;\n localeOptions?: object;\n}\n\n/** Extracts the field path from a PropRef expression. */\nexport function extractFieldPath(expr: BasicExpression): FieldPath | null {\n if (expr.type === 'ref') {\n return expr.path;\n }\n return null;\n}\n\n/** Extracts the literal value from a Value expression. */\nexport function extractValue(expr: BasicExpression): unknown {\n if (expr.type === 'val') {\n return expr.value;\n }\n return undefined;\n}\n\n/** Walks a scalar expression tree depth-first. */\nexport function walkExpression(\n expr: BasicExpression | undefined | null,\n visitor: (node: BasicExpression) => void,\n): void {\n if (!expr) return;\n visitor(expr);\n if (expr.type === 'func') {\n for (const arg of expr.args) {\n walkExpression(arg, visitor);\n }\n }\n}\n\n/** Parses a WHERE expression through user-supplied operator handlers. */\nexport function parseWhereExpression<T = unknown>(\n expr: BasicExpression<boolean> | undefined | null,\n options: ParseWhereOptions<T>,\n): T | null {\n if (!expr) return null;\n\n if (expr.type === 'val') {\n return expr.value as T;\n }\n if (expr.type === 'ref') {\n return expr.path as T;\n }\n\n const handler = options.handlers[expr.name];\n if (!handler) {\n if (options.onUnknownOperator) {\n return options.onUnknownOperator(expr.name, expr.args);\n }\n throw new Error(\n `No handler provided for operator: ${expr.name}. Available handlers: ${Object.keys(\n options.handlers,\n ).join(', ')}`,\n );\n }\n\n const parsedArgs = expr.args.map((arg) => {\n if (arg.type === 'ref') return arg.path;\n if (arg.type === 'val') return arg.value;\n return parseWhereExpression(arg as BasicExpression<boolean>, options);\n });\n\n return handler(...parsedArgs);\n}\n\n/** Parses ORDER BY IR clauses into field/direction/null-order records. */\nexport function parseOrderByExpression(orderBy: OrderBy | undefined | null): Array<ParsedOrderBy> {\n if (!orderBy || orderBy.length === 0) return [];\n\n return orderBy.map((clause) => {\n const field = extractFieldPath(clause.expression);\n if (!field) {\n throw new Error(\n `ORDER BY expression must be a field reference, got: ${clause.expression.type}`,\n );\n }\n\n const result: ParsedOrderBy = {\n field,\n direction: clause.compareOptions.direction,\n nulls: clause.compareOptions.nulls,\n };\n if ('stringSort' in clause.compareOptions) {\n result.stringSort = clause.compareOptions.stringSort;\n }\n if ('locale' in clause.compareOptions) {\n result.locale = clause.compareOptions.locale;\n }\n if ('localeOptions' in clause.compareOptions) {\n result.localeOptions = clause.compareOptions.localeOptions;\n }\n return result;\n });\n}\n\n/** Extracts simple AND-ed field comparisons from a WHERE expression. */\nexport function extractSimpleComparisons(\n expr: BasicExpression<boolean> | undefined | null,\n): Array<SimpleComparison> {\n if (!expr) return [];\n\n const comparisons: Array<SimpleComparison> = [];\n\n function extract(e: BasicExpression): void {\n if (e.type !== 'func') return;\n\n if (e.name === 'and') {\n for (const arg of e.args) extract(arg);\n return;\n }\n\n if (e.name === 'not') {\n extractNotComparison(e.args[0], comparisons);\n return;\n }\n\n const unsupportedOps = [\n 'or',\n 'like',\n 'ilike',\n 'upper',\n 'lower',\n 'length',\n 'concat',\n 'add',\n 'coalesce',\n 'count',\n 'avg',\n 'sum',\n 'min',\n 'max',\n ];\n if (unsupportedOps.includes(e.name)) {\n throw new Error(\n `extractSimpleComparisons does not support '${e.name}' operator. Use parseWhereExpression with custom handlers for complex expressions.`,\n );\n }\n\n pushComparison(e, comparisons, '');\n }\n\n extract(expr);\n return comparisons;\n}\n\n/** Parses load-subset options into filters/sorts/limit. */\nexport function parseLoadSubsetOptions(\n options:\n | {\n where?: BasicExpression<boolean>;\n orderBy?: OrderBy;\n limit?: number;\n }\n | undefined\n | null,\n): { filters: Array<SimpleComparison>; sorts: Array<ParsedOrderBy>; limit?: number } {\n if (!options) {\n return { filters: [], sorts: [] };\n }\n const parsed = {\n filters: extractSimpleComparisons(options.where),\n sorts: parseOrderByExpression(options.orderBy),\n } as { filters: Array<SimpleComparison>; sorts: Array<ParsedOrderBy>; limit?: number };\n if (options.limit !== undefined) {\n parsed.limit = options.limit;\n }\n return parsed;\n}\n\nfunction extractNotComparison(\n expr: BasicExpression | undefined,\n comparisons: Array<SimpleComparison>,\n): void {\n if (!expr || expr.type !== 'func') {\n throw new Error(\"extractSimpleComparisons requires a comparison or null check inside 'not' operator.\");\n }\n\n const nullCheckOps = ['isNull', 'isUndefined'];\n if (nullCheckOps.includes(expr.name)) {\n pushNullCheck(expr, comparisons, 'not_');\n return;\n }\n\n const comparisonOps = ['eq', 'gt', 'gte', 'lt', 'lte', 'in'];\n if (comparisonOps.includes(expr.name)) {\n pushFieldValueComparison(expr, comparisons, 'not_');\n return;\n }\n\n throw new Error(\n `extractSimpleComparisons does not support 'not(${expr.name})'. NOT can only wrap comparison operators (eq, gt, gte, lt, lte, in) or null checks (isNull, isUndefined).`,\n );\n}\n\nfunction pushComparison(\n expr: Extract<BasicExpression, { type: 'func' }>,\n comparisons: Array<SimpleComparison>,\n operatorPrefix: string,\n): void {\n const nullCheckOps = ['isNull', 'isUndefined'];\n if (nullCheckOps.includes(expr.name)) {\n pushNullCheck(expr, comparisons, operatorPrefix);\n return;\n }\n\n const comparisonOps = ['eq', 'gt', 'gte', 'lt', 'lte', 'in'];\n if (comparisonOps.includes(expr.name)) {\n pushFieldValueComparison(expr, comparisons, operatorPrefix);\n return;\n }\n\n throw new Error(`extractSimpleComparisons encountered unknown operator: '${expr.name}'`);\n}\n\nfunction pushNullCheck(\n expr: Extract<BasicExpression, { type: 'func' }>,\n comparisons: Array<SimpleComparison>,\n operatorPrefix: string,\n): void {\n const fieldArg = expr.args[0];\n const field = fieldArg?.type === 'ref' ? fieldArg.path : null;\n if (!field) {\n throw new Error(\n `extractSimpleComparisons requires a field reference for '${expr.name}' operator.`,\n );\n }\n comparisons.push({ field, operator: `${operatorPrefix}${expr.name}` });\n}\n\nfunction pushFieldValueComparison(\n expr: Extract<BasicExpression, { type: 'func' }>,\n comparisons: Array<SimpleComparison>,\n operatorPrefix: string,\n): void {\n const [leftArg, rightArg] = expr.args;\n const field = leftArg?.type === 'ref' ? leftArg.path : null;\n const hasValue = rightArg?.type === 'val' && rightArg.value !== undefined;\n if (!field || !hasValue) {\n throw new Error(\n `extractSimpleComparisons requires simple field-value comparisons. Found complex expression for '${operatorPrefix}${expr.name}' operator.`,\n );\n }\n comparisons.push({\n field,\n operator: `${operatorPrefix}${expr.name}`,\n value: rightArg.value,\n });\n}\n","/**\n * Hash-join across two collections.\n *\n * Given a \"left\" Query and a \"right\" Collection, emit the equi-join of\n * left.rows × right.rows on a pair of key columns. The right side is\n * hashed; the left side (post-filter) probes into the hash. We pick the\n * right side as the build side unconditionally — callers can reorder\n * manually if they know which side is smaller.\n *\n * ### Join types\n *\n * - `inner` — emit only matched pairs.\n * - `left` — emit every left row; unmatched get `{ [as]: null }`.\n * - `right` — emit every right row; unmatched right get no left\n * columns at all (they are `undefined`, not `null` —\n * matching SQL's NULL-on-projection semantics when\n * consumers read absent left columns).\n * - `full` — union of left and right.\n *\n * ### Output row shape\n *\n * Nested, not flattened:\n *\n * { ...leftRow, [as]: rightRow }\n *\n * This avoids column-name collisions cleanly and keeps the output row\n * shape independent of the two schemas (useful for TypeScript generics\n * later). Selection, filtering, and ordering after the join all work\n * against this nested shape via bracket/dot access on the row object.\n *\n * Unmatched markers:\n *\n * - `left`/`full`, left row with no right match → `{...leftRow, [as]: null}`.\n * Use `row[as] === null` to detect \"no match\".\n * - `right`/`full`, right row with no left match → `{[as]: rightRow}`.\n * Left columns are absent; access yields `undefined`.\n *\n * ### Pipeline\n *\n * 1. Run left's vectorized filter kernel to shrink the left ordinal set.\n * 2. Materialize left rows (only the columns needed for the probe +\n * downstream filter/select/order).\n * 3. Build a Map<keyValue, rightOrdinal[]> from the right side.\n * 4. Probe: for each left row, emit one joined row per matching right\n * ordinal. Right rows are lazily materialized. For left/full, emit\n * an unmatched left row when there are no matches.\n * 5. For right/full, iterate the right side and emit any ordinal not\n * previously matched.\n * 6. Apply post-join filter / sort / limit in plain JS (v1).\n *\n * ### Reactivity\n *\n * JoinExecutor subscribes to BOTH collections. Any mutation on either\n * side invalidates the cached snapshot. No incremental updates in v1.\n *\n * ### Non-goals (v1)\n *\n * - Multi-column join keys. Single column per side.\n * - Vectorized post-join filter. We materialize then filter in JS.\n * - Incremental recompute. Any change on either side triggers a full\n * rebuild of the hash + probe.\n */\n\nimport type { Collection, RowValue } from '../collection/collection.js';\nimport type { ChangeEvent } from '../collection/events.js';\nimport { ValidationError } from '../errors.js';\nimport type { FilterExpr } from './filter.js';\nimport { collectColumns } from './filter.js';\nimport {\n compileFilter,\n scanOrdinals,\n} from './kernel.js';\nimport {\n Query,\n registerJoinFactory,\n type JoinSpecLike,\n type OrderSpec,\n type Predicate,\n type SortDir,\n} from './query.js';\n\nexport type JoinType = 'inner' | 'left' | 'right' | 'full';\n\nexport interface JoinOn {\n /** Column on the left (probe) side. */\n readonly left: string;\n /** Column on the right (build) side. */\n readonly right: string;\n}\n\nexport interface JoinSpec {\n readonly on: JoinOn;\n /** Namespace under which the right row is attached in the output. */\n readonly as: string;\n /**\n * Join type. Defaults to `'inner'`. `'left'` / `'right'` / `'full'`\n * emit null-padded rows for unmatched sides:\n * - `left` — every left row is emitted; right side is `null` if no match.\n * - `right` — every right row is emitted; left columns absent if no match.\n * - `full` — union of left and right.\n */\n readonly type?: JoinType;\n}\n\nexport interface JoinedQuerySnapshot<TRow extends RowValue = RowValue> {\n readonly rows: readonly TRow[];\n /** `Math.max(left.globalVersion, right.globalVersion)` at snapshot time. */\n readonly version: number;\n}\n\n/**\n * A query plan with one join. Mirrors the Query builder API shape for\n * the operations that make sense post-join: `where`, `select`,\n * `orderBy`, `limit`, `offset`. Nested keys are addressed with dot\n * notation in selection/order (e.g., `'user.name'`).\n */\nexport class JoinQuery<TRow extends RowValue = RowValue> {\n readonly left: Query;\n readonly right: Collection;\n readonly spec: JoinSpec;\n readonly predicate: Predicate | null;\n readonly selection: readonly string[] | null;\n readonly order: readonly OrderSpec[];\n readonly limitN: number | null;\n readonly offsetN: number;\n\n constructor(\n left: Query,\n right: Collection,\n spec: JoinSpec,\n predicate: Predicate | null = null,\n selection: readonly string[] | null = null,\n order: readonly OrderSpec[] = [],\n limitN: number | null = null,\n offsetN = 0,\n ) {\n const joinType: JoinType = spec.type ?? 'inner';\n if (\n joinType !== 'inner' &&\n joinType !== 'left' &&\n joinType !== 'right' &&\n joinType !== 'full'\n ) {\n throw new ValidationError(\n `invalid join type '${String(joinType)}' — expected 'inner' | 'left' | 'right' | 'full'`,\n );\n }\n if (!left.collection.schema.columnsByName.has(spec.on.left)) {\n throw new ValidationError(\n `join key '${spec.on.left}' not found on left collection '${left.collection.schema.name}'`,\n );\n }\n if (!right.schema.columnsByName.has(spec.on.right)) {\n throw new ValidationError(\n `join key '${spec.on.right}' not found on right collection '${right.schema.name}'`,\n );\n }\n if (!spec.as || spec.as.length === 0) {\n throw new ValidationError(`join 'as' namespace must be a non-empty string`);\n }\n if (left.collection.schema.columnsByName.has(spec.as)) {\n throw new ValidationError(\n `join 'as' namespace '${spec.as}' collides with a left column of the same name`,\n );\n }\n this.left = left;\n this.right = right;\n this.spec = spec;\n this.predicate = predicate;\n this.selection = selection;\n this.order = order;\n this.limitN = limitN;\n this.offsetN = offsetN;\n }\n\n /**\n * Post-join filter. The predicate receives a fully-formed joined\n * row (with `row[spec.as]` as the nested right side).\n */\n where(predicate: Predicate): JoinQuery<TRow> {\n const next: Predicate = this.predicate\n ? (row) => this.predicate!(row) && predicate(row)\n : predicate;\n return new JoinQuery(\n this.left,\n this.right,\n this.spec,\n next,\n this.selection,\n this.order,\n this.limitN,\n this.offsetN,\n );\n }\n\n /**\n * Project columns. Paths may be plain column names (from the left\n * side) or `'<as>.<col>'` for the right side.\n */\n select(columns: readonly string[]): JoinQuery<TRow> {\n for (const c of columns) this.requireKnownPath(c);\n return new JoinQuery(\n this.left,\n this.right,\n this.spec,\n this.predicate,\n [...columns],\n this.order,\n this.limitN,\n this.offsetN,\n );\n }\n\n orderBy(column: string, dir: SortDir = 'asc'): JoinQuery<TRow> {\n this.requireKnownPath(column);\n return new JoinQuery(\n this.left,\n this.right,\n this.spec,\n this.predicate,\n this.selection,\n [...this.order, { column, dir }],\n this.limitN,\n this.offsetN,\n );\n }\n\n limit(n: number): JoinQuery<TRow> {\n if (!Number.isInteger(n) || n < 0) {\n throw new ValidationError(`limit must be a non-negative integer, got ${n}`);\n }\n return new JoinQuery(\n this.left,\n this.right,\n this.spec,\n this.predicate,\n this.selection,\n this.order,\n n,\n this.offsetN,\n );\n }\n\n offset(n: number): JoinQuery<TRow> {\n if (!Number.isInteger(n) || n < 0) {\n throw new ValidationError(`offset must be a non-negative integer, got ${n}`);\n }\n return new JoinQuery(\n this.left,\n this.right,\n this.spec,\n this.predicate,\n this.selection,\n this.order,\n this.limitN,\n n,\n );\n }\n\n private requireKnownPath(path: string): void {\n const as = this.spec.as;\n if (path.startsWith(as + '.')) {\n const col = path.slice(as.length + 1);\n if (!this.right.schema.columnsByName.has(col)) {\n throw new ValidationError(\n `unknown right column '${col}' in join path '${path}'`,\n );\n }\n return;\n }\n if (!this.left.collection.schema.columnsByName.has(path)) {\n throw new ValidationError(\n `unknown column '${path}' — must be a left-side column or '${as}.<col>'`,\n );\n }\n }\n}\n\n// ----------------------------------------------------------------------\n// Executor.\n// ----------------------------------------------------------------------\n\n/**\n * Build + probe executor. Re-runs on any mutation to either collection.\n * Caches the last snapshot keyed by (leftVersion, rightVersion).\n */\nexport class JoinExecutor<TRow extends RowValue = RowValue> {\n private cached: JoinedQuerySnapshot<TRow> | null = null;\n private cachedLeftVersion = -1;\n private cachedRightVersion = -1;\n\n constructor(readonly plan: JoinQuery<TRow>) {}\n\n dispose(): void {\n /* v1 has no persistent state to release; subscribe() owns its own. */\n }\n\n snapshot(): JoinedQuerySnapshot<TRow> {\n const leftV = this.plan.left.collection.globalVersion;\n const rightV = this.plan.right.globalVersion;\n if (\n this.cached !== null &&\n this.cachedLeftVersion === leftV &&\n this.cachedRightVersion === rightV\n ) {\n return this.cached;\n }\n const snap = this.recompute();\n this.cached = snap;\n this.cachedLeftVersion = leftV;\n this.cachedRightVersion = rightV;\n return snap;\n }\n\n subscribe(listener: (snap: JoinedQuerySnapshot<TRow>) => void): () => void {\n listener(this.snapshot());\n const onLeft = (e: ChangeEvent) => {\n if (this.shouldReact(e)) listener(this.snapshot());\n };\n const onRight = (e: ChangeEvent) => {\n if (this.shouldReact(e)) listener(this.snapshot());\n };\n const unsubL = this.plan.left.collection.subscribe(onLeft);\n const unsubR = this.plan.right.subscribe(onRight);\n return () => {\n unsubL();\n unsubR();\n };\n }\n\n /**\n * v1 reactivity is coarse: any mutation on either side triggers a\n * full recompute. We still filter out no-op events (e.g., a column\n * change on the left that isn't observed by the join). That's\n * conservative enough — joins touch at minimum the two key columns\n * plus every left/right column referenced in predicate/select/order.\n */\n private shouldReact(event: ChangeEvent): boolean {\n if (event.columns === 'all') return true;\n if (event.op !== 'update') return true; // insert/delete/rollback/compact\n const observed = this.observedColumnsForEventSide(event);\n for (const c of event.columns) if (observed.has(c)) return true;\n return false;\n }\n\n /**\n * We don't know which collection an event came from inside the\n * listener's lexical scope once both are wired up — but the fix is\n * simple: observe the UNION of both sides' watched columns. Extra\n * recompute is cheap relative to a miss.\n */\n private observedColumnsForEventSide(_event: ChangeEvent): ReadonlySet<string> {\n const union = new Set<string>();\n // Left side:\n const leftExpr = this.plan.left.filterExpr;\n if (leftExpr) collectColumns(leftExpr, union);\n union.add(this.plan.spec.on.left);\n // Right side:\n union.add(this.plan.spec.on.right);\n // Post-join selection / order — split by prefix.\n const as = this.plan.spec.as;\n const addPath = (p: string) => {\n if (p.startsWith(as + '.')) union.add(p.slice(as.length + 1));\n else union.add(p);\n };\n if (this.plan.selection) for (const p of this.plan.selection) addPath(p);\n for (const o of this.plan.order) addPath(o.column);\n return union;\n }\n\n private recompute(): JoinedQuerySnapshot<TRow> {\n const plan = this.plan;\n const left = plan.left.collection;\n const right = plan.right;\n const on = plan.spec.on;\n const as = plan.spec.as;\n\n // 1. Shrink left via its filterExpr (or full live scan).\n const leftOrdinals = scanLeft(plan.left);\n\n // 2. Build right-side hash: key → ordinal[]. Respect soft-delete.\n const buildIdx = buildHashIndex(right, on.right);\n\n // 3. Probe and materialize joined rows.\n const type: JoinType = plan.spec.type ?? 'inner';\n const emitUnmatchedLeft = type === 'left' || type === 'full';\n const emitUnmatchedRight = type === 'right' || type === 'full';\n const leftColsToRead = this.leftColumnsToRead();\n const rightColsToRead = this.rightColumnsToRead();\n const joined: RowValue[] = [];\n\n // Track which right ordinals produced at least one join row, so\n // we know which to emit as unmatched at the end (right / full).\n // Lazily allocated — inner / left never touch it.\n const matchedRight: Set<number> | null = emitUnmatchedRight\n ? new Set<number>()\n : null;\n\n for (let i = 0; i < leftOrdinals.length; i++) {\n const lo = leftOrdinals[i]!;\n const key = left._internalReadCell(on.left, lo);\n const matches =\n key === null || key === undefined\n ? undefined\n : buildIdx.get(normalizeKey(key));\n\n if (matches && matches.length > 0) {\n const leftRow = readRow(left, lo, leftColsToRead);\n for (let m = 0; m < matches.length; m++) {\n const ro = matches[m]!;\n const rightRow = readRow(right, ro, rightColsToRead);\n joined.push({ ...leftRow, [as]: rightRow });\n if (matchedRight) matchedRight.add(ro);\n }\n } else if (emitUnmatchedLeft) {\n // Left row with no matching right — emit with right namespace\n // as `null`. Callers distinguish 'joined but no match' from\n // 'missing property' by testing `row[as] === null`.\n const leftRow = readRow(left, lo, leftColsToRead);\n joined.push({ ...leftRow, [as]: null });\n }\n }\n\n // Emit unmatched right rows for right / full join.\n if (emitUnmatchedRight) {\n for (const ro of right._internalLiveOrdinals()) {\n if (matchedRight!.has(ro)) continue;\n const k = right._internalReadCell(on.right, ro);\n // A right row whose own key is null can never match any\n // non-null left key under equi-join — include it for right /\n // full, with left columns absent.\n const rightRow = readRow(right, ro, rightColsToRead);\n // Unmatched right emits with NO left columns present (they\n // are not null — they are missing). That matches standard\n // SQL projection semantics: SELECT l.x FROM ... RIGHT JOIN\n // returns NULL for l.x, which in our object shape is\n // `row.x === undefined`.\n joined.push({ [as]: rightRow });\n void k;\n }\n }\n\n // 4. Apply post-join fn predicate (v1: no vectorization).\n const afterFilter = plan.predicate\n ? joined.filter((r) => plan.predicate!(r))\n : joined;\n\n // 5. Sort by joined paths.\n const sorted = sortJoined(afterFilter, plan.order);\n\n // 6. Slice via offset/limit.\n const sliced = sliceWindow(sorted, plan.offsetN, plan.limitN);\n\n // 7. Project (support dotted paths).\n const projected = plan.selection\n ? projectPaths(sliced, plan.selection)\n : sliced;\n\n return {\n rows: projected as unknown as readonly TRow[],\n version: Math.max(left.globalVersion, right.globalVersion),\n };\n }\n\n private leftColumnsToRead(): readonly string[] {\n const plan = this.plan;\n const as = plan.spec.as;\n const all = plan.left.collection.columnNames();\n if (!plan.selection) return [...all]; // predicate may read anything too\n if (plan.predicate) return [...all];\n const selection = plan.selection; // narrowed to non-null\n const narrow = new Set<string>();\n narrow.add(plan.spec.on.left);\n for (const p of selection) {\n if (!p.startsWith(as + '.')) narrow.add(p);\n }\n for (const o of plan.order) {\n if (!o.column.startsWith(as + '.')) narrow.add(o.column);\n }\n return [...narrow];\n }\n\n private rightColumnsToRead(): readonly string[] {\n const plan = this.plan;\n const as = plan.spec.as;\n const all = plan.right.columnNames();\n if (!plan.selection) return [...all];\n if (plan.predicate) return [...all];\n const selection = plan.selection;\n const narrow = new Set<string>();\n narrow.add(plan.spec.on.right);\n for (const p of selection) {\n if (p.startsWith(as + '.')) narrow.add(p.slice(as.length + 1));\n }\n for (const o of plan.order) {\n if (o.column.startsWith(as + '.')) narrow.add(o.column.slice(as.length + 1));\n }\n return [...narrow];\n }\n}\n\n// ----------------------------------------------------------------------\n// Helpers.\n// ----------------------------------------------------------------------\n\n/**\n * Scan the left-side Query's live ordinals, honoring any filterExpr\n * and fn predicate. Returns a Uint32Array of surviving left ordinals.\n */\nfunction scanLeft(left: Query): Uint32Array {\n const c = left.collection;\n const filterExpr = left.filterExpr;\n const pred = left.predicate;\n\n let ordinals: Uint32Array;\n if (filterExpr) {\n const scanByName = new Map<\n string,\n ReturnType<Collection['_internalScanColumns']>[number]\n >();\n for (const sc of c._internalScanColumns()) scanByName.set(sc.name, sc);\n const compiled = compileFilter(filterExpr, scanByName);\n ordinals = scanOrdinals(c._internalLiveOrdinals(), compiled.test);\n } else {\n ordinals = scanOrdinals(c._internalLiveOrdinals(), () => true);\n }\n if (pred) {\n const kept: number[] = [];\n for (let i = 0; i < ordinals.length; i++) {\n const ord = ordinals[i]!;\n const row: RowValue = {};\n for (const name of c.columnNames()) {\n row[name] = c._internalReadCell(name, ord);\n }\n if (pred(row)) kept.push(ord);\n }\n ordinals = new Uint32Array(kept);\n }\n return ordinals;\n}\n\n/**\n * Build a Map<keyValue, ordinal[]> over the live rows of `collection`\n * on column `keyCol`. Null keys are excluded (SQL semantics: NULL\n * never joins). Key values are normalized via `normalizeKey` so that\n * BigInts and numbers with identical numeric value still collide, etc.\n */\nfunction buildHashIndex(\n collection: Collection,\n keyCol: string,\n): Map<unknown, number[]> {\n const idx = new Map<unknown, number[]>();\n for (const ord of collection._internalLiveOrdinals()) {\n const k = collection._internalReadCell(keyCol, ord);\n if (k === null || k === undefined) continue;\n const nk = normalizeKey(k);\n const bucket = idx.get(nk);\n if (bucket) bucket.push(ord);\n else idx.set(nk, [ord]);\n }\n return idx;\n}\n\n/**\n * Normalize a join key so equivalent values collide in the hash.\n *\n * - BigInts that fit in Number range are unified with Number keys so\n * an int64 column on one side joins against a uint32 column on the\n * other without forcing callers to cast.\n * - Everything else passes through.\n *\n * We do NOT normalize strings (case-insensitive joins are a\n * post-filter concern, not a kernel concern).\n */\nfunction normalizeKey(v: unknown): unknown {\n if (typeof v === 'bigint') {\n // Safe-integer-range BigInts become plain numbers; larger BigInts\n // stay BigInt and only collide with other BigInts.\n if (v >= BigInt(Number.MIN_SAFE_INTEGER) && v <= BigInt(Number.MAX_SAFE_INTEGER)) {\n return Number(v);\n }\n }\n return v;\n}\n\nfunction readRow(\n collection: Collection,\n ord: number,\n columns: readonly string[],\n): RowValue {\n const row: RowValue = {};\n for (let i = 0; i < columns.length; i++) {\n const name = columns[i]!;\n row[name] = collection._internalReadCell(name, ord);\n }\n return row;\n}\n\n/**\n * Sort joined rows by a list of paths. Paths are resolved via\n * `resolvePath` and compared with `compareJoinValues`.\n */\nfunction sortJoined(\n rows: RowValue[],\n order: readonly OrderSpec[],\n): RowValue[] {\n if (order.length === 0) return rows;\n const sorted = rows.slice();\n sorted.sort((a, b) => {\n for (let i = 0; i < order.length; i++) {\n const o = order[i]!;\n const av = resolvePath(a, o.column);\n const bv = resolvePath(b, o.column);\n const c = compareJoinValues(av, bv);\n if (c !== 0) return o.dir === 'desc' ? -c : c;\n }\n return 0;\n });\n return sorted;\n}\n\nfunction sliceWindow(\n rows: readonly RowValue[],\n offset: number,\n limit: number | null,\n): RowValue[] {\n if (offset === 0 && limit === null) return rows.slice();\n const end = limit === null ? rows.length : Math.min(rows.length, offset + limit);\n return rows.slice(offset, end);\n}\n\nfunction projectPaths(\n rows: readonly RowValue[],\n paths: readonly string[],\n): RowValue[] {\n const out: RowValue[] = new Array(rows.length);\n for (let i = 0; i < rows.length; i++) {\n const r = rows[i]!;\n const projected: RowValue = {};\n for (let p = 0; p < paths.length; p++) {\n const path = paths[p]!;\n projected[path] = resolvePath(r, path) as RowValue[string];\n }\n out[i] = projected;\n }\n return out;\n}\n\nfunction resolvePath(row: RowValue, path: string): unknown {\n const dot = path.indexOf('.');\n if (dot < 0) return (row as Record<string, unknown>)[path];\n const head = path.slice(0, dot);\n const tail = path.slice(dot + 1);\n const inner = (row as Record<string, unknown>)[head];\n if (inner === null || inner === undefined) return undefined;\n if (typeof inner !== 'object') return undefined;\n return (inner as Record<string, unknown>)[tail];\n}\n\n/**\n * Orderable comparator for joined rows. Mirrors the kernel's numeric /\n * string comparison semantics (nulls last). BigInts and numbers mix.\n */\nfunction compareJoinValues(a: unknown, b: unknown): number {\n if (a === b) return 0;\n if (a === null || a === undefined) return 1;\n if (b === null || b === undefined) return -1;\n if (typeof a === 'number' && typeof b === 'number') {\n if (Number.isNaN(a)) return Number.isNaN(b) ? 0 : 1;\n if (Number.isNaN(b)) return -1;\n return a - b;\n }\n if (typeof a === 'bigint' && typeof b === 'bigint') {\n return a < b ? -1 : a > b ? 1 : 0;\n }\n if (typeof a === 'bigint' || typeof b === 'bigint') {\n // Mixed: coerce BigInt → number for ordering; loses precision above\n // 2^53 but matches join-key normalization.\n const an = typeof a === 'bigint' ? Number(a) : (a as number);\n const bn = typeof b === 'bigint' ? Number(b) : (b as number);\n return an - bn;\n }\n if (typeof a === 'string' && typeof b === 'string') {\n return a < b ? -1 : a > b ? 1 : 0;\n }\n if (typeof a === 'boolean' && typeof b === 'boolean') {\n return a === b ? 0 : a ? 1 : -1;\n }\n // Different types — arbitrary but stable.\n const as = String(a);\n const bs = String(b);\n return as < bs ? -1 : as > bs ? 1 : 0;\n}\n\n// ----------------------------------------------------------------------\n// Public builders.\n// ----------------------------------------------------------------------\n\n/**\n * Attach a join to a Query. Returns a JoinQuery that supports the\n * post-join builder surface (where / select / orderBy / limit / offset).\n * Chaining a second `.join()` is **not** supported in v1 — only one\n * join per query plan.\n */\nexport function join<TLeft extends RowValue, TRight extends RowValue>(\n left: Query<TLeft>,\n right: Collection,\n spec: JoinSpec,\n): JoinQuery<TLeft & Record<string, TRight>> {\n return new JoinQuery(left, right, spec) as JoinQuery<\n TLeft & Record<string, TRight>\n >;\n}\n\n/** Build an executor for a JoinQuery. */\nexport function runJoin<TRow extends RowValue = RowValue>(\n plan: JoinQuery<TRow>,\n): JoinExecutor<TRow> {\n return new JoinExecutor<TRow>(plan);\n}\n\n// Register the join factory so `Query.prototype.join` can dispatch\n// without a static import cycle. Runs once on module load.\nregisterJoinFactory((left, right, spec) => {\n // Validate spec shape before constructing.\n if (!spec || typeof spec !== 'object') {\n throw new ValidationError(`join spec must be an object`);\n }\n return new JoinQuery(left, right, spec as JoinSpec);\n});\n\n// Touch JoinSpecLike to keep TS happy when the import is elided.\nvoid null as unknown as JoinSpecLike;\n","/**\n * Custom binary snapshot format for ArrowBase collections.\n *\n * Layout:\n * [ magic 'ARBS' | formatVersion u32 | schemaJsonLength u32 |\n * schemaJson utf-8 bytes |\n * per-column sections, in declaration order:\n * validity bytes (pad to 8B)\n * primary buffer bytes (pad to 8B)\n * heap bytes (pad to 8B, only for utf8/binary)\n * ]\n *\n * Dictionary tables (per dict_utf8 column) are stored as a string array\n * inside schemaJson because they are small compared to the value buffers.\n * Geo columns store only authoritative coordinate buffers; bbox caches are\n * derived and rebuilt on import.\n *\n * This format is intentionally not Arrow IPC: it captures ArrowBase's\n * ranged-offset layout directly so round-trip preserves O(1)-update\n * semantics without rebuilding dense offsets.\n */\n\nexport const SNAPSHOT_MAGIC = 0x53425241; // 'ARBS' LE\nexport const SNAPSHOT_FORMAT_VERSION = 3;\n\n/** Alignment pad applied to each section boundary in the snapshot. */\nexport const SNAPSHOT_ALIGN = 8;\n\nexport function alignSnapshot(offset: number): number {\n return (offset + (SNAPSHOT_ALIGN - 1)) & ~(SNAPSHOT_ALIGN - 1);\n}\n\n/** Per-column metadata stored in the JSON header. */\nexport interface SnapshotColumnMeta {\n readonly name: string;\n readonly type: string; // ColumnTypeName\n readonly nullable: boolean;\n readonly validityBytes: number;\n readonly primaryBytes: number;\n readonly heapBytes?: number;\n /** Ordered dictionary values for dict_utf8 columns. */\n readonly dictionary?: readonly string[];\n // --- Nested type metadata (format v2+) ---\n /**\n * For list columns: the child-element meta + the number of child\n * elements written (used to size the child buffers precisely). The\n * child's `validityBytes`/`primaryBytes`/`heapBytes` describe its\n * own storage sections; they are emitted right after the parent\n * offsets section.\n */\n readonly listChildElements?: number;\n readonly listChild?: SnapshotColumnMeta;\n /**\n * For struct columns: the per-field metas. Each field is serialized\n * as a regular column section (validity + primary + optional heap\n * + optional dictionary) directly after the struct parent's\n * validity section.\n */\n readonly fields?: readonly SnapshotColumnMeta[];\n}\n\n/** JSON payload embedded in the snapshot header. */\nexport interface SnapshotHeaderJson {\n readonly schemaName: string;\n readonly primaryKey: string;\n readonly capacity: number;\n readonly rowCursor: number;\n readonly columns: readonly SnapshotColumnMeta[];\n readonly globalVersion: number;\n /** Opaque tag the caller may set; not interpreted by the reader. */\n readonly tag?: string;\n}\n","import { ValidationError } from '../errors.js';\nimport type { Collection, RowValue } from '../collection/collection.js';\nimport { decodeUtf8Bytes } from '../collection/varlen.js';\nimport {\n defineSchema,\n type CompiledSchema,\n type ColumnDef,\n} from '../schema/schema.js';\nimport {\n ColumnTypeCode,\n type ColumnTypeName,\n} from '../schema/types.js';\nimport {\n SNAPSHOT_MAGIC,\n SNAPSHOT_FORMAT_VERSION,\n alignSnapshot,\n type SnapshotColumnMeta,\n type SnapshotHeaderJson,\n} from './snapshot-format.js';\n\n/**\n * Tree-shaped view the exporter walks over. Mirrors the compiled schema:\n * a list column provides a `child` entry; a struct column provides\n * `fields`; primitives/utf8/binary/dict are leaves.\n */\ninterface TreeView {\n readonly name: string;\n readonly type: ColumnTypeName;\n readonly typeCode: ColumnTypeCode;\n readonly nullable: boolean;\n readonly validity: Uint8Array | null;\n readonly primaryBuffer: Uint8Array;\n readonly heap: Uint8Array | null;\n readonly dictionaryEntries: readonly string[] | null;\n /** For list columns: the number of elements currently in the child. */\n readonly listChildElements?: number;\n readonly listChild?: TreeView;\n /** For struct columns: recursive field views. */\n readonly fields?: readonly TreeView[];\n}\n\ninterface BulkCollection {\n readonly schema: CompiledSchema;\n readonly capacity: number;\n readonly rowCursor: number;\n readonly globalVersion: number;\n bulkColumnViewsTree(): readonly TreeView[];\n}\n\n/**\n * Serialize a collection to a self-describing binary snapshot.\n *\n * Format v2 captures list + struct columns via nested metadata in the\n * JSON header plus inline child/field buffer sections:\n *\n * [ magic 'ARBS' | formatVersion u32 | schemaJsonLength u32 |\n * schemaJson utf-8 bytes |\n * per-column section (emitted recursively in declaration order) ]\n *\n * A leaf column section is `validity | primary | heap?` (each padded to\n * 8 bytes). A list column section is `validity | offsets | childLeafSection`.\n * A struct column section is `validity | field1Section | field2Section ...`.\n */\nexport function exportSnapshot(\n abColl: Collection,\n options: { tag?: string } = {},\n): ArrayBuffer {\n const bulk = abColl as unknown as BulkCollection;\n const views = bulk.bulkColumnViewsTree();\n\n // Build header + compute size.\n const columnsMeta: SnapshotColumnMeta[] = views.map(viewToMeta);\n\n const headerJson: SnapshotHeaderJson = {\n schemaName: bulk.schema.name,\n primaryKey: bulk.schema.primaryKey,\n capacity: bulk.capacity,\n rowCursor: bulk.rowCursor,\n globalVersion: bulk.globalVersion,\n columns: columnsMeta,\n ...(options.tag ? { tag: options.tag } : {}),\n };\n const headerBytes = new TextEncoder().encode(JSON.stringify(headerJson));\n\n let size = 12 + headerBytes.byteLength;\n size = alignSnapshot(size);\n for (const v of views) size = sectionSize(v, size);\n\n const buf = new ArrayBuffer(size);\n const view = new DataView(buf);\n const bytes = new Uint8Array(buf);\n\n view.setUint32(0, SNAPSHOT_MAGIC, true);\n view.setUint32(4, SNAPSHOT_FORMAT_VERSION, true);\n view.setUint32(8, headerBytes.byteLength, true);\n bytes.set(headerBytes, 12);\n\n let cursor = alignSnapshot(12 + headerBytes.byteLength);\n for (const v of views) cursor = writeSection(v, bytes, cursor);\n\n return buf;\n}\n\nfunction viewToMeta(v: TreeView): SnapshotColumnMeta {\n const meta: SnapshotColumnMeta = {\n name: v.name,\n type: v.type,\n nullable: v.nullable,\n validityBytes: v.validity ? v.validity.byteLength : 0,\n primaryBytes: v.primaryBuffer.byteLength,\n ...(v.heap ? { heapBytes: v.heap.byteLength } : {}),\n ...(v.dictionaryEntries ? { dictionary: v.dictionaryEntries } : {}),\n ...(v.listChildElements !== undefined\n ? { listChildElements: v.listChildElements }\n : {}),\n ...(v.listChild ? { listChild: viewToMeta(v.listChild) } : {}),\n ...(v.fields ? { fields: v.fields.map(viewToMeta) } : {}),\n };\n return meta;\n}\n\nfunction sectionSize(v: TreeView, cursor: number): number {\n if (v.validity) cursor = alignSnapshot(cursor + v.validity.byteLength);\n cursor = alignSnapshot(cursor + v.primaryBuffer.byteLength);\n if (v.heap) cursor = alignSnapshot(cursor + v.heap.byteLength);\n if (v.listChild) cursor = sectionSize(v.listChild, cursor);\n if (v.fields) {\n for (const f of v.fields) cursor = sectionSize(f, cursor);\n }\n return cursor;\n}\n\nfunction writeSection(v: TreeView, bytes: Uint8Array, cursor: number): number {\n if (v.validity) {\n bytes.set(v.validity, cursor);\n cursor = alignSnapshot(cursor + v.validity.byteLength);\n }\n bytes.set(v.primaryBuffer, cursor);\n cursor = alignSnapshot(cursor + v.primaryBuffer.byteLength);\n if (v.heap) {\n bytes.set(v.heap, cursor);\n cursor = alignSnapshot(cursor + v.heap.byteLength);\n }\n if (v.listChild) cursor = writeSection(v.listChild, bytes, cursor);\n if (v.fields) {\n for (const f of v.fields) cursor = writeSection(f, bytes, cursor);\n }\n return cursor;\n}\n\n// -----------------------------------------------------------------------\n\n/**\n * Parse a snapshot header without touching payload bytes. Useful for\n * verifying a snapshot's schema fingerprint before committing to\n * importing it.\n */\nexport function readSnapshotHeader(buffer: ArrayBuffer): SnapshotHeaderJson {\n const view = new DataView(buffer);\n const magic = view.getUint32(0, true);\n if (magic !== SNAPSHOT_MAGIC) {\n throw new ValidationError(\n `snapshot magic mismatch: expected 0x${SNAPSHOT_MAGIC.toString(16)}, got 0x${magic.toString(16)}`,\n );\n }\n const fmt = view.getUint32(4, true);\n if (fmt !== SNAPSHOT_FORMAT_VERSION) {\n throw new ValidationError(\n `snapshot format version ${fmt} not supported (expected ${SNAPSHOT_FORMAT_VERSION})`,\n );\n }\n const headerLen = view.getUint32(8, true);\n const headerBytes = new Uint8Array(buffer, 12, headerLen);\n const json = JSON.parse(decodeUtf8Bytes(headerBytes)) as SnapshotHeaderJson;\n return json;\n}\n\n/**\n * Import a snapshot buffer into a fresh Collection. Row data is\n * re-inserted through the normal mutation path so every invariant\n * (row index, dictionary intern, validity bitmap, list child heap,\n * struct field buffers) is rebuilt consistently.\n */\nexport function importSnapshot(\n buffer: ArrayBuffer,\n factory: (schema: CompiledSchema, capacity: number) => Collection,\n): Collection {\n const header = readSnapshotHeader(buffer);\n const schemaInput = {\n name: header.schemaName,\n primaryKey: header.primaryKey,\n columns: Object.fromEntries(\n header.columns.map((c) => [c.name, metaToColumnDef(c)] as const),\n ),\n };\n const schema = defineSchema(schemaInput);\n const target = factory(schema, header.capacity);\n\n const rowDecoder = new SnapshotRowDecoder(buffer, header);\n for (let row = 0; row < header.rowCursor; row++) {\n const r = rowDecoder.read(row);\n if (r === null) continue;\n target.insert(r);\n }\n\n const restoreFn = (target as unknown as {\n _restoreGlobalVersionForSnapshot?: (v: number) => void;\n })._restoreGlobalVersionForSnapshot;\n if (restoreFn) restoreFn.call(target, header.globalVersion);\n\n return target;\n}\n\nfunction metaToColumnDef(meta: SnapshotColumnMeta): ColumnDef {\n const def: ColumnDef = {\n type: meta.type as ColumnTypeName,\n nullable: meta.nullable,\n ...(meta.heapBytes !== undefined ? { valuesHeapBytes: meta.heapBytes } : {}),\n ...(meta.listChild ? { items: metaToColumnDef(meta.listChild) } : {}),\n ...(meta.fields\n ? {\n fields: Object.fromEntries(\n meta.fields.map((f) => [leafFieldName(f.name), metaToColumnDef(f)] as const),\n ),\n }\n : {}),\n };\n return def;\n}\n\n/**\n * Strip the parent prefix off a struct field's compiled name\n * (`\"geo.lat\"` → `\"lat\"`). Child column names come from the compiled\n * schema using dot-separated paths.\n */\nfunction leafFieldName(fqName: string): string {\n const idx = fqName.lastIndexOf('.');\n return idx >= 0 ? fqName.slice(idx + 1) : fqName;\n}\n\n// -----------------------------------------------------------------------\n\n/**\n * Internal column-section handle: offsets into the snapshot buffer and\n * a decoded reference to the header meta describing what lives there.\n */\ninterface SectionHandle {\n readonly meta: SnapshotColumnMeta;\n readonly validity: Uint8Array | null;\n readonly primary: Uint8Array;\n readonly heap: Uint8Array | null;\n readonly listChild?: SectionHandle;\n readonly fields?: readonly SectionHandle[];\n}\n\nfunction readSection(\n buffer: ArrayBuffer,\n meta: SnapshotColumnMeta,\n cursor: number,\n): { handle: SectionHandle; nextCursor: number } {\n let validity: Uint8Array | null = null;\n if (meta.validityBytes > 0) {\n validity = new Uint8Array(buffer, cursor, meta.validityBytes);\n cursor = alignSnapshot(cursor + meta.validityBytes);\n }\n const primary = new Uint8Array(buffer, cursor, meta.primaryBytes);\n cursor = alignSnapshot(cursor + meta.primaryBytes);\n let heap: Uint8Array | null = null;\n if (meta.heapBytes && meta.heapBytes > 0) {\n heap = new Uint8Array(buffer, cursor, meta.heapBytes);\n cursor = alignSnapshot(cursor + meta.heapBytes);\n }\n let listChild: SectionHandle | undefined;\n if (meta.listChild) {\n const r = readSection(buffer, meta.listChild, cursor);\n listChild = r.handle;\n cursor = r.nextCursor;\n }\n let fields: SectionHandle[] | undefined;\n if (meta.fields) {\n fields = [];\n for (const f of meta.fields) {\n const r = readSection(buffer, f, cursor);\n fields.push(r.handle);\n cursor = r.nextCursor;\n }\n }\n const handle: SectionHandle = {\n meta,\n validity,\n primary,\n heap,\n ...(listChild ? { listChild } : {}),\n ...(fields ? { fields } : {}),\n };\n return { handle, nextCursor: cursor };\n}\n\n/**\n * Parses per-row values out of a snapshot without materializing a fresh\n * Collection. Supports leaf, list, and struct columns (format v2).\n */\nexport class SnapshotRowDecoder {\n private readonly sections: SectionHandle[];\n\n constructor(buffer: ArrayBuffer, header: SnapshotHeaderJson) {\n const view = new DataView(buffer);\n if (view.getUint32(0, true) !== SNAPSHOT_MAGIC) {\n throw new ValidationError(`snapshot magic mismatch`);\n }\n const headerLen = view.getUint32(8, true);\n let cursor = alignSnapshot(12 + headerLen);\n const sections: SectionHandle[] = [];\n for (const meta of header.columns) {\n const r = readSection(buffer, meta, cursor);\n sections.push(r.handle);\n cursor = r.nextCursor;\n }\n this.sections = sections;\n }\n\n /** Returns a RowValue for the given row index, or null if the row\n * is soft-deleted AND the primary key column holds 0 (tombstone). */\n read(row: number): RowValue | null {\n const out: RowValue = {};\n for (const s of this.sections) {\n out[s.meta.name] = this.readValue(s, row);\n }\n return out;\n }\n\n private readValue(s: SectionHandle, row: number): RowValue[string] {\n if (s.validity && !getValidityBit(s.validity, row)) return null;\n switch (s.meta.type) {\n case 'list':\n return this.readListValue(s, row) as RowValue[string];\n case 'struct':\n return this.readStructValue(s, row) as RowValue[string];\n default:\n return readLeafValue(s, row);\n }\n }\n\n private readListValue(s: SectionHandle, row: number): readonly unknown[] {\n const offsets = new Int32Array(\n s.primary.buffer,\n s.primary.byteOffset,\n s.primary.byteLength / 4,\n );\n const start = offsets[row * 2] ?? 0;\n const end = offsets[row * 2 + 1] ?? 0;\n const child = s.listChild!;\n const n = end - start;\n const out = new Array<unknown>(n);\n for (let i = 0; i < n; i++) {\n if (child.validity && !getValidityBit(child.validity, start + i)) {\n out[i] = null;\n } else {\n out[i] = readLeafValue(child, start + i);\n }\n }\n return out;\n }\n\n private readStructValue(s: SectionHandle, row: number): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const f of s.fields ?? []) {\n out[leafFieldName(f.meta.name)] = this.readValue(f, row);\n }\n return out;\n }\n}\n\nfunction readLeafValue(s: SectionHandle, row: number): RowValue[string] {\n const p = s.primary;\n switch (s.meta.type) {\n case 'bool':\n return (p[row] ?? 0) !== 0;\n case 'int8':\n return new Int8Array(p.buffer, p.byteOffset, p.byteLength)[row] ?? 0;\n case 'int16':\n return new Int16Array(p.buffer, p.byteOffset, p.byteLength / 2)[row] ?? 0;\n case 'int32':\n return new Int32Array(p.buffer, p.byteOffset, p.byteLength / 4)[row] ?? 0;\n case 'uint8':\n return p[row] ?? 0;\n case 'uint16':\n return new Uint16Array(p.buffer, p.byteOffset, p.byteLength / 2)[row] ?? 0;\n case 'uint32':\n return new Uint32Array(p.buffer, p.byteOffset, p.byteLength / 4)[row] ?? 0;\n case 'int64':\n return new BigInt64Array(p.buffer, p.byteOffset, p.byteLength / 8)[row] ?? 0n;\n case 'uint64':\n return new BigUint64Array(p.buffer, p.byteOffset, p.byteLength / 8)[row] ?? 0n;\n case 'float32':\n return new Float32Array(p.buffer, p.byteOffset, p.byteLength / 4)[row] ?? 0;\n case 'float64':\n return new Float64Array(p.buffer, p.byteOffset, p.byteLength / 8)[row] ?? 0;\n case 'point': {\n const coords = new Float64Array(p.buffer, p.byteOffset, p.byteLength / 8);\n const offset = row * 2;\n return [coords[offset] ?? Number.NaN, coords[offset + 1] ?? Number.NaN];\n }\n case 'utf8': {\n const offsets = new Int32Array(p.buffer, p.byteOffset, p.byteLength / 4);\n const start = offsets[row * 2] ?? 0;\n const end = offsets[row * 2 + 1] ?? 0;\n if (!s.heap) throw new ValidationError(`utf8 column missing heap`);\n return decodeUtf8Bytes(s.heap.subarray(start, end));\n }\n case 'binary': {\n const offsets = new Int32Array(p.buffer, p.byteOffset, p.byteLength / 4);\n const start = offsets[row * 2] ?? 0;\n const end = offsets[row * 2 + 1] ?? 0;\n if (!s.heap) throw new ValidationError(`binary column missing heap`);\n return s.heap.slice(start, end);\n }\n case 'dict_utf8': {\n const codes = new Uint32Array(p.buffer, p.byteOffset, p.byteLength / 4);\n const code = codes[row] ?? 0;\n if (!s.meta.dictionary) throw new ValidationError(`dict column missing dictionary`);\n const str = s.meta.dictionary[code];\n if (str === undefined) {\n throw new ValidationError(`dict code ${code} out of range for column \"${s.meta.name}\"`);\n }\n return str;\n }\n default:\n throw new ValidationError(`unknown leaf type \"${s.meta.type}\"`);\n }\n}\n\nfunction getValidityBit(bitmap: Uint8Array, row: number): boolean {\n const byte = row >>> 3;\n const bit = 1 << (row & 7);\n return ((bitmap[byte] ?? 0) & bit) !== 0;\n}\n","import type { Collection } from '../collection/collection.js';\nimport type { ChangeEvent } from '../collection/events.js';\nimport type { Delta } from './types.js';\n\n/**\n * Records outgoing deltas from a Collection so a SyncAdapter can push\n * them to a remote. Attaches to the collection's change feed on\n * construction; call `dispose()` when done.\n *\n * `bufferLimit` caps the number of retained deltas — when exceeded the\n * oldest entries are discarded. Consumers that may fall arbitrarily\n * behind must call `drainSince(version)` fast enough, or they will see\n * their cursor predate the log's oldest entry (surfaced as an empty\n * return; a persistence-backed adapter should then resync via\n * snapshot).\n *\n * `compact` and `rollback` events cannot be represented as incremental\n * deltas. Callers receive a `{ type: 'resync', version }` sentinel via\n * `onResync(listener)`, which prompts them to snapshot-sync instead of\n * stream deltas.\n */\nexport interface ChangeLogOptions {\n /** Max deltas retained. Default 65536. */\n bufferLimit?: number;\n}\n\nexport type ResyncListener = (event: { version: number }) => void;\n\nexport class ChangeLog {\n private readonly deltas: Delta[] = [];\n private readonly bufferLimit: number;\n private resyncListeners: Set<ResyncListener> = new Set();\n private readonly unsubscribe: () => void;\n\n constructor(private readonly abColl: Collection, opts: ChangeLogOptions = {}) {\n this.bufferLimit = opts.bufferLimit ?? 65536;\n this.unsubscribe = abColl.subscribe((event) => this.onChange(event));\n }\n\n dispose(): void {\n this.unsubscribe();\n }\n\n /** Returns deltas with `version > sinceVersion`, in order. */\n drainSince(sinceVersion: number): { deltas: Delta[]; upTo: number } {\n const out: Delta[] = [];\n for (const d of this.deltas) {\n if (d.version > sinceVersion) out.push(d);\n }\n const upTo =\n out.length > 0\n ? (out[out.length - 1] as Delta).version\n : sinceVersion;\n return { deltas: out, upTo };\n }\n\n /** Current number of retained deltas. */\n get size(): number {\n return this.deltas.length;\n }\n\n /** Register a resync listener (called on compact/rollback). */\n onResync(listener: ResyncListener): () => void {\n this.resyncListeners.add(listener);\n return () => this.resyncListeners.delete(listener);\n }\n\n private onChange(event: ChangeEvent): void {\n if (event.op === 'compact' || event.op === 'rollback') {\n for (const l of this.resyncListeners) {\n try {\n l({ version: event.globalVersion });\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('[arrowbase] resync listener threw:', err);\n }\n }\n // Also clear the log — prior deltas are no longer coherent with\n // the post-compact live set.\n this.deltas.length = 0;\n return;\n }\n\n if (event.op === 'delete') {\n this.push({\n op: 'delete',\n key: event.rowId,\n version: event.globalVersion,\n });\n return;\n }\n\n // insert / update: capture the post-image row snapshot.\n const row = this.abColl.get(event.rowId);\n if (!row) return;\n this.push({\n op: event.op,\n key: event.rowId,\n value: row,\n version: event.globalVersion,\n });\n }\n\n private push(delta: Delta): void {\n this.deltas.push(delta);\n if (this.deltas.length > this.bufferLimit) {\n // Drop oldest. Excess is unbounded in theory, but we only get\n // here if a sync consumer fell arbitrarily behind; the caller\n // should pick up the slack via snapshot.\n const overflow = this.deltas.length - this.bufferLimit;\n this.deltas.splice(0, overflow);\n }\n }\n}\n","import { NotFoundError, ValidationError } from '../errors.js';\nimport type { Collection, RowValue } from '../collection/collection.js';\nimport type { Delta, SyncAdapter } from './types.js';\nimport { ChangeLog } from './change-log.js';\n\n/**\n * Apply an ordered list of deltas to a Collection, preserving order.\n *\n * Semantics:\n * - insert → Collection.insert(delta.value). Duplicate key throws;\n * caller may want to retry via update. v1 is strict.\n * - update → Collection.update(delta.key, delta.value).\n * - delete → Collection.delete(delta.key). Missing key is ignored.\n *\n * Inserts with a key that already exists (because the local side wrote\n * to the same key after the delta was emitted) are promoted to updates\n * by default (TanStack DB does the same thing in its sync write path).\n *\n * Returns the highest version applied (or -Infinity if the list was empty).\n */\nexport function applyDeltas(\n abColl: Collection,\n deltas: readonly Delta[],\n): number {\n let highest = -Infinity;\n for (const d of deltas) {\n if (d.op === 'delete') {\n try {\n abColl.delete(d.key);\n } catch (err) {\n if (err instanceof NotFoundError) {\n // silently skip\n } else {\n throw err;\n }\n }\n } else {\n if (!d.value) {\n throw new ValidationError(`delta ${d.op} missing value`);\n }\n if (d.op === 'insert') {\n const existing = abColl.get(d.key);\n if (existing) {\n abColl.update(d.key, stripPrimaryKey(abColl, d.value as RowValue));\n } else {\n abColl.insert(d.value as RowValue);\n }\n } else {\n // update\n const existing = abColl.get(d.key);\n if (!existing) {\n abColl.insert(d.value as RowValue); // upsert: treat as insert\n } else {\n abColl.update(d.key, stripPrimaryKey(abColl, d.value as RowValue));\n }\n }\n }\n if (d.version > highest) highest = d.version;\n }\n return highest;\n}\n\n/**\n * In-memory sync adapter suitable for tests and same-process mirroring.\n *\n * Wraps two (or more) sides of a sync pair via a shared in-memory log.\n * Each side gets its own `MemorySyncAdapter` instance that reads/writes\n * the same log. `pull(since)` returns deltas newer than the cursor;\n * `push(deltas)` appends to the log; `apply(deltas)` writes through to\n * the local Collection.\n *\n * This is *not* a replica-set: there is no ordering guarantee beyond\n * what callers themselves impose via `push` order. Last writer wins.\n */\nexport class MemorySyncAdapter implements SyncAdapter {\n constructor(\n private readonly local: Collection,\n private readonly log: SharedDeltaLog,\n /** Optional outbound change log; if provided, local mutations\n * auto-push into the shared log. */\n private readonly outbound?: ChangeLog,\n ) {\n if (outbound) {\n // Forward every new delta into the shared log so the other\n // side(s) can pull it.\n let cursor = 0;\n const step = (): void => {\n const { deltas, upTo } = outbound.drainSince(cursor);\n if (deltas.length > 0) {\n this.log.push(deltas);\n cursor = upTo;\n }\n };\n // Step once immediately to flush any backlog, then hook every\n // local change via a dedicated listener.\n step();\n const unsub = local.subscribe(() => step());\n // Attach a dispose hook on adapter instance.\n this.disposeLocalListener = () => unsub();\n }\n }\n\n private disposeLocalListener: (() => void) | null = null;\n\n dispose(): void {\n this.disposeLocalListener?.();\n }\n\n async apply(deltas: readonly Delta[]): Promise<void> {\n applyDeltas(this.local, deltas);\n }\n\n async pull(sinceVersion: number): Promise<{ deltas: Delta[]; upTo: number }> {\n return this.log.drainSince(sinceVersion);\n }\n\n async push(deltas: readonly Delta[]): Promise<void> {\n this.log.push(deltas);\n }\n}\n\n/**\n * Return a copy of `row` with the collection's primary-key column\n * removed. Needed before handing the object to `Collection.update`,\n * which rejects PK mutations.\n */\nfunction stripPrimaryKey(abColl: Collection, row: RowValue): Partial<RowValue> {\n const pk = abColl.schema.primaryKey;\n if (!(pk in row)) return row;\n const out: RowValue = {};\n for (const [k, v] of Object.entries(row)) {\n if (k === pk) continue;\n out[k] = v;\n }\n return out;\n}\n\n/**\n * Shared log of deltas for `MemorySyncAdapter`. Ordering is preserved\n * by append order. No compaction — the log grows unboundedly. Tests\n * only.\n */\nexport class SharedDeltaLog {\n private readonly entries: Delta[] = [];\n\n push(deltas: readonly Delta[]): void {\n for (const d of deltas) this.entries.push(d);\n }\n\n drainSince(sinceVersion: number): { deltas: Delta[]; upTo: number } {\n const out: Delta[] = [];\n for (const d of this.entries) {\n if (d.version > sinceVersion) out.push(d);\n }\n const upTo =\n out.length > 0\n ? (out[out.length - 1] as Delta).version\n : sinceVersion;\n return { deltas: out, upTo };\n }\n\n get size(): number {\n return this.entries.length;\n }\n}\n","import type { Collection } from '../collection/collection.js';\nimport type { ColumnTypeName } from '../schema/types.js';\n\n/**\n * Devtools-facing introspection snapshot of a Collection. Framework-free\n * JSON — a future UI panel can render it without importing ArrowBase\n * internals.\n */\nexport interface CollectionDescription {\n readonly schemaName: string;\n readonly primaryKey: string;\n readonly capacity: number;\n readonly rowCount: number;\n readonly liveRowCount: number;\n readonly globalVersion: number;\n readonly hasSoftDelete: boolean;\n readonly schemaFingerprint: string; // hex u64\n readonly columns: readonly ColumnDescription[];\n}\n\nexport interface ColumnDescription {\n readonly name: string;\n readonly type: ColumnTypeName;\n readonly nullable: boolean;\n readonly version: number;\n /** Count of rows whose validity bit is unset (for nullable columns). */\n readonly nullCount: number;\n /** Only present for utf8 / binary columns. */\n readonly heap?: {\n usedBytes: number;\n capacityBytes: number;\n };\n /** Only present for dict_utf8 columns. */\n readonly dictionary?: {\n entries: number;\n sampleEntries: readonly string[];\n };\n}\n\n// Internal surface added to Collection specifically for describe.\ninterface DescribeColumnView {\n readonly name: string;\n readonly type: ColumnTypeName;\n readonly nullable: boolean;\n readonly version: number;\n readonly nullCount: number;\n readonly heap: { used: number; capacity: number } | null;\n readonly dictionaryEntries: readonly string[] | null;\n}\n\ninterface DescribeCollection {\n readonly schema: {\n name: string;\n primaryKey: string;\n fingerprint: bigint;\n };\n readonly capacity: number;\n readonly rowCount: number;\n readonly globalVersion: number;\n readonly hasSoftDelete: boolean;\n readonly size: number;\n describeColumnViews(): readonly DescribeColumnView[];\n}\n\n/**\n * Return a structured description of a Collection for devtools /\n * logging. Cheap to call — reads cached counters and allocates a small\n * JS object. Safe to call on a hot path.\n */\nexport function describeCollection(abColl: Collection): CollectionDescription {\n const c = abColl as unknown as DescribeCollection;\n const views = c.describeColumnViews();\n const columns: ColumnDescription[] = views.map((v) => {\n const desc: ColumnDescription = {\n name: v.name,\n type: v.type,\n nullable: v.nullable,\n version: v.version,\n nullCount: v.nullCount,\n ...(v.heap\n ? { heap: { usedBytes: v.heap.used, capacityBytes: v.heap.capacity } }\n : {}),\n ...(v.dictionaryEntries\n ? {\n dictionary: {\n entries: v.dictionaryEntries.length,\n sampleEntries: v.dictionaryEntries.slice(0, 8),\n },\n }\n : {}),\n };\n return desc;\n });\n\n return {\n schemaName: c.schema.name,\n primaryKey: c.schema.primaryKey,\n capacity: c.capacity,\n rowCount: c.rowCount,\n liveRowCount: c.size,\n globalVersion: c.globalVersion,\n hasSoftDelete: c.hasSoftDelete,\n schemaFingerprint: `0x${c.schema.fingerprint.toString(16).padStart(16, '0')}`,\n columns,\n };\n}\n","/**\n * TanStack DB → ArrowBase push-down: translate a `BasicExpression<boolean>`\n * into an ArrowBase predicate `(row) => boolean` when possible.\n *\n * v1 recognises:\n * - eq(prop, literal) → row[col] === lit\n * - eq(literal, prop) → row[col] === lit\n * - and(a, b, ...) → every translated arg\n * - or(a, b, ...) → some translated arg\n * - not(a) → !translated arg\n *\n * Any expression containing a node type that is not one of the above\n * causes the translator to return `null`. Callers should treat `null`\n * as \"not pushable\" and either fall back to full scan or let TanStack\n * DB's own evaluator run against the materialized rows.\n *\n * `PropRef` paths are taken as `[alias, column]` when length === 2, or\n * `[column]` when length === 1. Anything deeper (nested struct fields)\n * is not supported in v1.\n */\n\nimport type { RowValue } from './collection/collection.js';\n\n// TanStack DB's IR lives under the `IR` namespace on the package root.\n// We only depend on the types at compile time; runtime type-checks use\n// the `type` field on each node so no runtime IR import is needed.\nimport type { IR } from '@tanstack/db';\n\ntype BasicExpression<T = unknown> = IR.BasicExpression<T>;\ntype PropRef<T = unknown> = IR.PropRef<T>;\ntype ValueExpr<T = unknown> = IR.Value<T>;\ntype Func<T = unknown> = IR.Func<T>;\n\nexport type Predicate = (row: RowValue) => boolean;\n\n/**\n * Attempt to translate a TanStack DB expression into an ArrowBase\n * predicate. Returns `null` if the expression is not pushable.\n */\nexport function pushDown(\n expr: BasicExpression<boolean> | undefined,\n knownColumns: ReadonlySet<string>,\n): Predicate | null {\n if (!expr) return null;\n return translate(expr, knownColumns);\n}\n\nfunction translate(\n expr: BasicExpression,\n knownColumns: ReadonlySet<string>,\n): Predicate | null {\n switch (expr.type) {\n case 'val':\n // Literal at the root of a where doesn't make sense; TanStack\n // would have short-circuited.\n return null;\n case 'ref':\n // A ref at the root means boolean-column projection\n // (e.g. where(row.active)). Supported.\n return toRefPredicate(expr as PropRef, knownColumns);\n case 'func': {\n const f = expr as Func;\n return translateFunc(f, knownColumns);\n }\n default:\n return null;\n }\n}\n\nfunction translateFunc(\n f: Func,\n knownColumns: ReadonlySet<string>,\n): Predicate | null {\n const name = f.name;\n const args = f.args;\n\n if (name === 'eq' && args.length === 2) {\n return translateEq(args[0]!, args[1]!, knownColumns);\n }\n\n if (name === 'and' || name === 'or') {\n const children: Predicate[] = [];\n for (const arg of args) {\n const c = translate(arg, knownColumns);\n if (!c) return null;\n children.push(c);\n }\n if (name === 'and') {\n return (row) => children.every((c) => c(row));\n }\n return (row) => children.some((c) => c(row));\n }\n\n if (name === 'not' && args.length === 1) {\n const inner = translate(args[0]!, knownColumns);\n if (!inner) return null;\n return (row) => !inner(row);\n }\n\n return null;\n}\n\nfunction translateEq(\n a: BasicExpression,\n b: BasicExpression,\n knownColumns: ReadonlySet<string>,\n): Predicate | null {\n // eq(ref, value) or eq(value, ref). Anything else → not pushable.\n let ref: PropRef | null = null;\n let lit: ValueExpr | null = null;\n if (a.type === 'ref' && b.type === 'val') {\n ref = a as PropRef;\n lit = b as ValueExpr;\n } else if (a.type === 'val' && b.type === 'ref') {\n ref = b as PropRef;\n lit = a as ValueExpr;\n } else {\n return null;\n }\n\n const col = resolveRef(ref, knownColumns);\n if (!col) return null;\n const literal = lit.value;\n return (row) => row[col] === literal;\n}\n\nfunction toRefPredicate(\n ref: PropRef,\n knownColumns: ReadonlySet<string>,\n): Predicate | null {\n const col = resolveRef(ref, knownColumns);\n if (!col) return null;\n return (row) => row[col] === true;\n}\n\nfunction resolveRef(\n ref: PropRef,\n knownColumns: ReadonlySet<string>,\n): string | null {\n if (!ref.path || ref.path.length === 0) return null;\n // TanStack DB encodes refs as [alias, column] inside a join/from,\n // but for a single collection the alias is dropped. We accept both\n // shapes: [col] or [alias, col]. Anything deeper is rejected.\n let col: string;\n if (ref.path.length === 1) {\n col = ref.path[0]!;\n } else if (ref.path.length === 2) {\n col = ref.path[1]!;\n } else {\n return null;\n }\n if (!knownColumns.has(col)) return null;\n return col;\n}\n","import type { ChangeMessage } from '../tanstack-types.js';\nimport type {\n BaseQueryBuilder,\n InitialQueryBuilder,\n QueryBuilder,\n} from './builder.js';\nimport {\n createLiveQueryCollection,\n type LiveQueryCollection,\n type LiveQueryKey,\n type LiveQueryRow,\n} from './live-query-collection.js';\n\nexport type DeltaType = 'enter' | 'exit' | 'update';\n\nexport type DeltaEvent<\n TRow extends object = Record<string, unknown>,\n TKey extends string | number = string | number,\n> =\n | {\n type: 'enter';\n key: TKey;\n value: TRow;\n metadata?: Record<string, unknown>;\n }\n | {\n type: 'exit';\n key: TKey;\n value: TRow;\n metadata?: Record<string, unknown>;\n }\n | {\n type: 'update';\n key: TKey;\n value: TRow;\n previousValue: TRow;\n metadata?: Record<string, unknown>;\n };\n\nexport interface EffectContext {\n effectId: string;\n signal: AbortSignal;\n}\n\nexport type EffectQueryInput =\n | ((q: InitialQueryBuilder) => QueryBuilder<any>)\n | QueryBuilder<any>;\n\ntype EffectEventHandler<\n TRow extends object = Record<string, unknown>,\n TKey extends string | number = string | number,\n> = (event: DeltaEvent<TRow, TKey>, ctx: EffectContext) => void | Promise<void>;\n\ntype EffectBatchHandler<\n TRow extends object = Record<string, unknown>,\n TKey extends string | number = string | number,\n> = (events: Array<DeltaEvent<TRow, TKey>>, ctx: EffectContext) => void | Promise<void>;\n\nexport interface EffectConfig<\n TRow extends object = Record<string, unknown>,\n TKey extends string | number = string | number,\n> {\n id?: string;\n query: EffectQueryInput;\n onEnter?: EffectEventHandler<TRow, TKey>;\n onUpdate?: EffectEventHandler<TRow, TKey>;\n onExit?: EffectEventHandler<TRow, TKey>;\n onBatch?: EffectBatchHandler<TRow, TKey>;\n onError?: (error: Error, event: DeltaEvent<TRow, TKey>) => void;\n onSourceError?: (error: Error) => void;\n skipInitial?: boolean;\n}\n\nexport interface Effect {\n dispose: () => Promise<void>;\n readonly disposed: boolean;\n}\n\nlet effectCounter = 0;\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n return (\n value !== null &&\n (typeof value === 'object' || typeof value === 'function') &&\n typeof (value as { then?: unknown }).then === 'function'\n );\n}\n\nfunction asError(error: unknown): Error {\n return error instanceof Error ? error : new Error(String(error));\n}\n\nfunction reportError<\n TRow extends object,\n TKey extends string | number,\n>(\n error: unknown,\n event: DeltaEvent<TRow, TKey>,\n onError: ((error: Error, event: DeltaEvent<TRow, TKey>) => void) | undefined,\n): void {\n const normalised = asError(error);\n if (onError) {\n try {\n onError(normalised, event);\n } catch (onErrorError) {\n // eslint-disable-next-line no-console\n console.error('[Effect] Error in onError handler:', onErrorError);\n // eslint-disable-next-line no-console\n console.error('[Effect] Original error:', normalised);\n }\n return;\n }\n // eslint-disable-next-line no-console\n console.error('[Effect] Unhandled error in handler:', normalised);\n}\n\nfunction changeToDelta<\n TRow extends object,\n TKey extends string | number,\n>(change: ChangeMessage<TRow, TKey>): DeltaEvent<TRow, TKey> {\n const meta = change.metadata !== undefined ? { metadata: change.metadata } : {};\n if (change.type === 'insert') {\n return { type: 'enter', key: change.key, value: change.value, ...meta };\n }\n if (change.type === 'delete') {\n return { type: 'exit', key: change.key, value: change.value, ...meta };\n }\n return {\n type: 'update',\n key: change.key,\n value: change.value,\n previousValue: change.previousValue ?? change.value,\n ...meta,\n };\n}\n\nfunction handlerFor<\n TRow extends object,\n TKey extends string | number,\n>(\n event: DeltaEvent<TRow, TKey>,\n config: EffectConfig<TRow, TKey>,\n): EffectEventHandler<TRow, TKey> | undefined {\n if (event.type === 'enter') return config.onEnter;\n if (event.type === 'exit') return config.onExit;\n return config.onUpdate;\n}\n\nexport function createEffect<\n TRow extends object = Record<string, unknown>,\n TKey extends string | number = string | number,\n>(config: EffectConfig<TRow, TKey>): Effect {\n const id = config.id ?? `live-query-effect-${++effectCounter}`;\n const abortController = new AbortController();\n const ctx: EffectContext = {\n effectId: id,\n signal: abortController.signal,\n };\n const inFlightHandlers = new Set<Promise<unknown>>();\n let disposed = false;\n\n const live = createLiveQueryCollection({\n id: `${id}-collection`,\n query: config.query as unknown as\n | BaseQueryBuilder<any>\n | ((q: InitialQueryBuilder) => BaseQueryBuilder<any>),\n }) as LiveQueryCollection<LiveQueryRow, LiveQueryKey, {}>;\n\n const trackPromise = (promise: Promise<unknown>): void => {\n inFlightHandlers.add(promise);\n promise.finally(() => {\n inFlightHandlers.delete(promise);\n });\n };\n\n const runHandler = (\n event: DeltaEvent<TRow, TKey>,\n handler: EffectEventHandler<TRow, TKey> | EffectBatchHandler<TRow, TKey> | undefined,\n batch?: Array<DeltaEvent<TRow, TKey>>,\n ): void => {\n if (!handler) return;\n try {\n const result = batch\n ? (handler as EffectBatchHandler<TRow, TKey>)(batch, ctx)\n : (handler as EffectEventHandler<TRow, TKey>)(event, ctx);\n if (isPromiseLike(result)) {\n const tracked = Promise.resolve(result).catch((error) => {\n reportError(error, event, config.onError);\n });\n trackPromise(tracked);\n }\n } catch (error) {\n reportError(error, event, config.onError);\n }\n };\n\n const subscription = live.subscribeChanges(\n (changes) => {\n if (disposed || changes.length === 0) return;\n const events = changes.map((change) =>\n changeToDelta(change as ChangeMessage<TRow, TKey>),\n );\n if (events.length === 0) return;\n\n runHandler(events[0]!, config.onBatch, events);\n for (const event of events) {\n if (abortController.signal.aborted) break;\n runHandler(event, handlerFor(event, config));\n }\n },\n { includeInitialState: !(config.skipInitial ?? false) },\n );\n\n const dispose = async (): Promise<void> => {\n if (disposed) return;\n disposed = true;\n abortController.abort();\n subscription.unsubscribe();\n await live.cleanup();\n if (inFlightHandlers.size > 0) {\n await Promise.allSettled([...inFlightHandlers]);\n }\n };\n\n return {\n dispose,\n get disposed() {\n return disposed;\n },\n };\n}\n","export const DEFAULT_COMPARE_OPTIONS = {\n direction: 'asc',\n nulls: 'first',\n stringSort: 'locale',\n} as const;\n\nconst temporalTypes = new Set([\n 'Temporal.Duration',\n 'Temporal.Instant',\n 'Temporal.PlainDate',\n 'Temporal.PlainDateTime',\n 'Temporal.PlainMonthDay',\n 'Temporal.PlainTime',\n 'Temporal.PlainYearMonth',\n 'Temporal.ZonedDateTime',\n]);\n\nexport function isTemporal(value: unknown): boolean {\n if (value == null || typeof value !== 'object') return false;\n const tag = (value as { [Symbol.toStringTag]?: unknown })[Symbol.toStringTag];\n return typeof tag === 'string' && temporalTypes.has(tag);\n}\n\nexport function deepEquals(a: unknown, b: unknown): boolean {\n return deepEqualsInternal(a, b, new Map<object, object>());\n}\n\nfunction deepEqualsInternal(a: unknown, b: unknown, visited: Map<object, object>): boolean {\n if (a === b) return true;\n if (a == null || b == null) return false;\n if (typeof a !== typeof b) return false;\n\n if (a instanceof Date) return b instanceof Date && a.getTime() === b.getTime();\n if (b instanceof Date) return false;\n\n if (a instanceof RegExp) return b instanceof RegExp && a.source === b.source && a.flags === b.flags;\n if (b instanceof RegExp) return false;\n\n if (a instanceof Map) {\n if (!(b instanceof Map) || a.size !== b.size) return false;\n if (visited.has(a)) return visited.get(a) === b;\n visited.set(a, b);\n const result = Array.from(a.entries()).every(([key, value]) => b.has(key) && deepEqualsInternal(value, b.get(key), visited));\n visited.delete(a);\n return result;\n }\n if (b instanceof Map) return false;\n\n if (a instanceof Set) {\n if (!(b instanceof Set) || a.size !== b.size) return false;\n if (visited.has(a)) return visited.get(a) === b;\n visited.set(a, b);\n const aValues = Array.from(a.values());\n const bValues = Array.from(b.values());\n if (aValues.every((value) => typeof value !== 'object')) {\n visited.delete(a);\n return aValues.every((value) => b.has(value));\n }\n const result = aValues.length === bValues.length;\n visited.delete(a);\n return result;\n }\n if (b instanceof Set) return false;\n\n if (ArrayBuffer.isView(a) && ArrayBuffer.isView(b) && !(a instanceof DataView) && !(b instanceof DataView)) {\n const typedA = a as unknown as ArrayLike<unknown>;\n const typedB = b as unknown as ArrayLike<unknown>;\n if (typedA.length !== typedB.length) return false;\n for (let i = 0; i < typedA.length; i++) {\n if (typedA[i] !== typedB[i]) return false;\n }\n return true;\n }\n if (ArrayBuffer.isView(b as object) && !(b instanceof DataView) && !ArrayBuffer.isView(a as object)) return false;\n\n if (isTemporal(a) && isTemporal(b)) {\n const temporalA = a as { [Symbol.toStringTag]?: unknown; equals?: (other: unknown) => boolean; toString: () => string };\n const temporalB = b as { [Symbol.toStringTag]?: unknown; toString: () => string };\n if (temporalA[Symbol.toStringTag] !== temporalB[Symbol.toStringTag]) return false;\n return typeof temporalA.equals === 'function' ? temporalA.equals(b) : temporalA.toString() === temporalB.toString();\n }\n if (isTemporal(b)) return false;\n\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length !== b.length) return false;\n if (visited.has(a)) return visited.get(a) === b;\n visited.set(a, b);\n const result = a.every((value, index) => deepEqualsInternal(value, b[index], visited));\n visited.delete(a);\n return result;\n }\n if (Array.isArray(b)) return false;\n\n if (typeof a === 'object') {\n const objA = a as Record<string, unknown>;\n const objB = b as Record<string, unknown>;\n if (visited.has(objA)) return visited.get(objA) === objB;\n visited.set(objA, objB);\n const keysA = Object.keys(objA);\n const keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) {\n visited.delete(objA);\n return false;\n }\n const result = keysA.every((key) => key in objB && deepEqualsInternal(objA[key], objB[key], visited));\n visited.delete(objA);\n return result;\n }\n\n return false;\n}\n","function compareKeys(a: string | number, b: string | number): number {\n if (typeof a === typeof b) {\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n }\n return typeof a === 'string' ? -1 : 1;\n}\n\nexport class SortedMap<TKey extends string | number, TValue> {\n private map = new Map<TKey, TValue>();\n private sortedKeys: Array<TKey> = [];\n\n constructor(private comparator?: (a: TValue, b: TValue) => number) {}\n\n private indexOf(key: TKey, value: TValue): number {\n let left = 0;\n let right = this.sortedKeys.length;\n\n if (!this.comparator) {\n while (left < right) {\n const mid = Math.floor((left + right) / 2);\n const midKey = this.sortedKeys[mid]!;\n const keyComparison = compareKeys(key, midKey);\n if (keyComparison < 0) right = mid;\n else if (keyComparison > 0) left = mid + 1;\n else return mid;\n }\n return left;\n }\n\n while (left < right) {\n const mid = Math.floor((left + right) / 2);\n const midKey = this.sortedKeys[mid]!;\n const midValue = this.map.get(midKey)!;\n const valueComparison = this.comparator(value, midValue);\n if (valueComparison < 0) right = mid;\n else if (valueComparison > 0) left = mid + 1;\n else {\n const keyComparison = compareKeys(key, midKey);\n if (keyComparison < 0) right = mid;\n else if (keyComparison > 0) left = mid + 1;\n else return mid;\n }\n }\n return left;\n }\n\n set(key: TKey, value: TValue): this {\n if (this.map.has(key)) {\n const oldValue = this.map.get(key)!;\n const oldIndex = this.indexOf(key, oldValue);\n this.sortedKeys.splice(oldIndex, 1);\n }\n const index = this.indexOf(key, value);\n this.sortedKeys.splice(index, 0, key);\n this.map.set(key, value);\n return this;\n }\n\n get(key: TKey): TValue | undefined {\n return this.map.get(key);\n }\n\n delete(key: TKey): boolean {\n if (!this.map.has(key)) return false;\n const oldValue = this.map.get(key)!;\n const index = this.indexOf(key, oldValue);\n this.sortedKeys.splice(index, 1);\n return this.map.delete(key);\n }\n\n has(key: TKey): boolean {\n return this.map.has(key);\n }\n\n clear(): void {\n this.map.clear();\n this.sortedKeys = [];\n }\n\n get size(): number {\n return this.map.size;\n }\n\n *[Symbol.iterator](): IterableIterator<[TKey, TValue]> {\n for (const key of this.sortedKeys) yield [key, this.map.get(key)!];\n }\n\n entries(): IterableIterator<[TKey, TValue]> {\n return this[Symbol.iterator]();\n }\n\n keys(): IterableIterator<TKey> {\n return this.sortedKeys[Symbol.iterator]();\n }\n\n values(): IterableIterator<TValue> {\n return (function* (this: SortedMap<TKey, TValue>) {\n for (const key of this.sortedKeys) yield this.map.get(key)!;\n }).call(this);\n }\n\n forEach(callbackfn: (value: TValue, key: TKey, map: Map<TKey, TValue>) => void): void {\n for (const key of this.sortedKeys) callbackfn(this.map.get(key)!, key, this.map);\n }\n}\n","export interface ChangeTracker<T extends object> {\n originalObject: T;\n modified: boolean;\n copy_: T;\n proxyCount: number;\n assigned_: Record<string | symbol, boolean>;\n parent?: {\n tracker: ChangeTracker<Record<string | symbol, unknown>>;\n prop: string | symbol;\n } | undefined;\n target: T;\n}\n\ntype ChangeObject = Record<string | symbol, unknown>;\ntype ParentNotify = (changes: unknown) => void;\n\nfunction isDraftable(value: unknown): value is Record<string | symbol, unknown> {\n return typeof value === 'object' && value !== null && !(value instanceof Date) && !(value instanceof RegExp);\n}\n\nfunction formatChanges(target: object, changes: ChangeObject): unknown {\n if (Array.isArray(target)) {\n const out: Array<unknown> = [];\n for (const key of Reflect.ownKeys(changes)) {\n if (typeof key === 'string' && /^\\d+$/.test(key)) out[Number(key)] = changes[key];\n else (out as unknown as ChangeObject)[key] = changes[key];\n }\n return out;\n }\n return { ...changes };\n}\n\nexport function createChangeProxy<T extends Record<string | symbol, any | undefined>>(\n target: T,\n parent?: { tracker: ChangeTracker<Record<string | symbol, unknown>>; prop: string | symbol },\n): { proxy: T; getChanges: () => Record<string | symbol, any> } {\n const assigned_: Record<string | symbol, boolean> = {};\n const changes: ChangeObject = {};\n const childCache = new Map<string | symbol, { proxy: unknown; getChanges: () => ChangeObject }>();\n const tracker: ChangeTracker<T> = {\n originalObject: target,\n modified: false,\n copy_: target,\n proxyCount: 0,\n assigned_,\n parent,\n target,\n };\n\n const notifyParent: ParentNotify | undefined = parent\n ? (nestedChanges) => {\n parent.tracker.modified = true;\n parent.tracker.assigned_[parent.prop] = true;\n (parent.tracker.copy_ as ChangeObject)[parent.prop] = nestedChanges;\n }\n : undefined;\n\n const getChanges = (): Record<string | symbol, any> => formatChanges(target, changes) as Record<string | symbol, any>;\n\n const proxy = new Proxy(target, {\n get(obj, prop, receiver) {\n const value = Reflect.get(obj, prop, receiver);\n if (!isDraftable(value)) return value;\n if (childCache.has(prop)) return childCache.get(prop)!.proxy;\n const child = createChangeProxy(value as Record<string | symbol, unknown>, {\n tracker: tracker as unknown as ChangeTracker<Record<string | symbol, unknown>>,\n prop,\n });\n const childWrapper = {\n proxy: child.proxy,\n getChanges: () => child.getChanges(),\n };\n childCache.set(prop, childWrapper);\n return child.proxy;\n },\n set(_obj, prop, value) {\n tracker.modified = true;\n tracker.assigned_[prop] = true;\n changes[prop] = value;\n if (notifyParent) notifyParent(getChanges());\n return true;\n },\n deleteProperty(_obj, prop) {\n tracker.modified = true;\n tracker.assigned_[prop] = false;\n delete changes[prop];\n if (notifyParent) notifyParent(getChanges());\n return true;\n },\n });\n\n const originalGetChanges = getChanges;\n const finalGetChanges = () => {\n for (const [prop, child] of Array.from(childCache.entries())) {\n const childChanges = child.getChanges();\n if (Reflect.ownKeys(childChanges).length > 0) changes[prop] = childChanges;\n }\n return originalGetChanges();\n };\n\n return { proxy: proxy as T, getChanges: finalGetChanges };\n}\n\nexport function createArrayChangeProxy<T extends object>(targets: Array<T>): {\n proxies: Array<T>;\n getChanges: () => Array<Record<string | symbol, unknown>>;\n} {\n const proxies = targets.map((target) => createChangeProxy(target as Record<string | symbol, unknown>));\n return {\n proxies: proxies.map((entry) => entry.proxy as T),\n getChanges: () => proxies.map((entry) => entry.getChanges()),\n };\n}\n\nexport function withChangeTracking<T extends object>(\n target: T,\n callback: (proxy: T) => void,\n): Record<string | symbol, unknown> {\n const { proxy, getChanges } = createChangeProxy(target as Record<string | symbol, unknown>);\n callback(proxy as T);\n return getChanges();\n}\n\nexport function withArrayChangeTracking<T extends object>(\n targets: Array<T>,\n callback: (proxies: Array<T>) => void,\n): Array<Record<string | symbol, unknown>> {\n const { proxies, getChanges } = createArrayChangeProxy(targets);\n callback(proxies);\n return getChanges();\n}\n","export type VirtualOrigin = 'local' | 'remote';\n\nexport interface VirtualRowProps<TKey extends string | number = string | number> {\n readonly $synced: boolean;\n readonly $origin: VirtualOrigin;\n readonly $key: TKey;\n readonly $collectionId: string;\n}\n\nexport type WithVirtualProps<T extends object, TKey extends string | number = string | number> = T & VirtualRowProps<TKey>;\nexport type WithoutVirtualProps<T> = Omit<T, keyof VirtualRowProps>;\n\nexport const VIRTUAL_PROP_NAMES = ['$synced', '$origin', '$key', '$collectionId'] as const;\n\nexport function hasVirtualProps(value: unknown): value is VirtualRowProps<string | number> {\n return typeof value === 'object' && value !== null && VIRTUAL_PROP_NAMES.every((name) => name in value);\n}\n\nexport function createVirtualProps<TKey extends string | number>(\n key: TKey,\n collectionId: string,\n isSynced: boolean,\n origin: VirtualOrigin,\n): VirtualRowProps<TKey> {\n return { $synced: isSynced, $origin: origin, $key: key, $collectionId: collectionId };\n}\n\nexport function enrichRowWithVirtualProps<T extends object, TKey extends string | number>(\n row: T,\n key: TKey,\n collectionId: string,\n computeSynced: () => boolean,\n computeOrigin: () => VirtualOrigin,\n): WithVirtualProps<T, TKey> {\n const existing = row as T & Partial<VirtualRowProps<TKey>>;\n return {\n ...row,\n $synced: existing.$synced ?? computeSynced(),\n $origin: existing.$origin ?? computeOrigin(),\n $key: existing.$key ?? key,\n $collectionId: existing.$collectionId ?? collectionId,\n } as WithVirtualProps<T, TKey>;\n}\n\nexport function computeAggregateVirtualProps<TKey extends string | number>(\n rows: Array<Partial<VirtualRowProps<string | number>>>,\n groupKey: TKey,\n collectionId: string,\n): VirtualRowProps<TKey> {\n return {\n $synced: rows.every((row) => row.$synced !== false),\n $origin: rows.some((row) => row.$origin === 'local') ? 'local' : 'remote',\n $key: groupKey,\n $collectionId: collectionId,\n };\n}\n\nexport function isVirtualPropName(name: string): boolean {\n return (VIRTUAL_PROP_NAMES as readonly string[]).includes(name);\n}\n\nexport function hasVirtualPropPath(path: Array<string>): boolean {\n return path.some((segment) => isVirtualPropName(segment));\n}\n"]}