@wordrhyme/db 0.1.0-alpha.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +66 -0
- package/dist/acl-policy.d.ts +86 -0
- package/dist/acl-policy.d.ts.map +1 -0
- package/dist/chunk-3TTVLSF5.js +3390 -0
- package/dist/chunk-3TTVLSF5.js.map +1 -0
- package/dist/chunk-DCJM6GN5.js +264 -0
- package/dist/chunk-DCJM6GN5.js.map +1 -0
- package/dist/chunk-KWWJRUIK.js +54 -0
- package/dist/chunk-KWWJRUIK.js.map +1 -0
- package/dist/chunk-XAIEVBMU.js +212 -0
- package/dist/chunk-XAIEVBMU.js.map +1 -0
- package/dist/delete-policy.d.ts +11 -0
- package/dist/delete-policy.d.ts.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +545 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin.d.ts +110 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +21 -0
- package/dist/plugin.js.map +1 -0
- package/dist/relations/index.d.ts +105 -0
- package/dist/relations/index.d.ts.map +1 -0
- package/dist/relations/index.js +9 -0
- package/dist/relations/index.js.map +1 -0
- package/dist/schema/action-journal.d.ts +386 -0
- package/dist/schema/action-journal.d.ts.map +1 -0
- package/dist/schema/audit-archive.d.ts +934 -0
- package/dist/schema/audit-archive.d.ts.map +1 -0
- package/dist/schema/audit-events.d.ts +502 -0
- package/dist/schema/audit-events.d.ts.map +1 -0
- package/dist/schema/audit-logs.d.ts +418 -0
- package/dist/schema/audit-logs.d.ts.map +1 -0
- package/dist/schema/auth.d.ts +2727 -0
- package/dist/schema/auth.d.ts.map +1 -0
- package/dist/schema/billing.d.ts +3969 -0
- package/dist/schema/billing.d.ts.map +1 -0
- package/dist/schema/common.d.ts +87 -0
- package/dist/schema/common.d.ts.map +1 -0
- package/dist/schema/currency.d.ts +791 -0
- package/dist/schema/currency.d.ts.map +1 -0
- package/dist/schema/entity-extensions.d.ts +314 -0
- package/dist/schema/entity-extensions.d.ts.map +1 -0
- package/dist/schema/entity-ownerships.d.ts +862 -0
- package/dist/schema/entity-ownerships.d.ts.map +1 -0
- package/dist/schema/feature-flags.d.ts +770 -0
- package/dist/schema/feature-flags.d.ts.map +1 -0
- package/dist/schema/geo.d.ts +824 -0
- package/dist/schema/geo.d.ts.map +1 -0
- package/dist/schema/i18n.d.ts +1109 -0
- package/dist/schema/i18n.d.ts.map +1 -0
- package/dist/schema/index.d.ts +43 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +507 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/media.d.ts +1147 -0
- package/dist/schema/media.d.ts.map +1 -0
- package/dist/schema/menus.d.ts +636 -0
- package/dist/schema/menus.d.ts.map +1 -0
- package/dist/schema/notification-channels.d.ts +288 -0
- package/dist/schema/notification-channels.d.ts.map +1 -0
- package/dist/schema/notification-preferences.d.ts +300 -0
- package/dist/schema/notification-preferences.d.ts.map +1 -0
- package/dist/schema/notification-templates.d.ts +476 -0
- package/dist/schema/notification-templates.d.ts.map +1 -0
- package/dist/schema/notifications.d.ts +1139 -0
- package/dist/schema/notifications.d.ts.map +1 -0
- package/dist/schema/permission-fields.d.ts +96 -0
- package/dist/schema/permission-fields.d.ts.map +1 -0
- package/dist/schema/permissions.d.ts +173 -0
- package/dist/schema/permissions.d.ts.map +1 -0
- package/dist/schema/plugin-migrations.d.ts +204 -0
- package/dist/schema/plugin-migrations.d.ts.map +1 -0
- package/dist/schema/plugins.d.ts +1977 -0
- package/dist/schema/plugins.d.ts.map +1 -0
- package/dist/schema/relationships.d.ts +221 -0
- package/dist/schema/relationships.d.ts.map +1 -0
- package/dist/schema/role-permissions.d.ts +305 -0
- package/dist/schema/role-permissions.d.ts.map +1 -0
- package/dist/schema/roles.d.ts +260 -0
- package/dist/schema/roles.d.ts.map +1 -0
- package/dist/schema/scheduled-tasks.d.ts +1334 -0
- package/dist/schema/scheduled-tasks.d.ts.map +1 -0
- package/dist/schema/settings.d.ts +819 -0
- package/dist/schema/settings.d.ts.map +1 -0
- package/dist/schema/site-presentation.d.ts +1587 -0
- package/dist/schema/site-presentation.d.ts.map +1 -0
- package/dist/schema/teams.d.ts +381 -0
- package/dist/schema/teams.d.ts.map +1 -0
- package/dist/schema/web-design.d.ts +1542 -0
- package/dist/schema/web-design.d.ts.map +1 -0
- package/dist/schema/webhooks.d.ts +1016 -0
- package/dist/schema/webhooks.d.ts.map +1 -0
- package/dist/zod/index.d.ts +2 -0
- package/dist/zod/index.d.ts.map +1 -0
- package/dist/zod/index.js +6 -0
- package/dist/zod/index.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/entity.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/column-common.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/column.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/table.utils.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/foreign-keys.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/tracing-utils.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/common.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/int.common.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/table.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/subquery.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/tracing.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/view-common.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/sql/sql.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/utils.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/bigint.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/bigserial.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/boolean.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/char.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/cidr.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/array.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/codecs.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/custom.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/date.common.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/date.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/double-precision.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/inet.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/integer.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/interval.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/json.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/jsonb.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/line.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/macaddr.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/macaddr8.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/numeric.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/point.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/postgis_extension/geometry.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/real.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/serial.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/smallint.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/smallserial.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/text.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/time.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/timestamp.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/uuid.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/varchar.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/vector_extension/bit.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/vector_extension/halfvec.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/vector_extension/sparsevec.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/vector_extension/vector.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/columns/all.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/casing.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/table.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/checks.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/pg-core/indexes.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/column-builder.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/zod/column.ts","../../../../node_modules/.pnpm/drizzle-orm@1.0.0-rc.4_@electric-sql+pglite@0.5.4_@opentelemetry+api@1.9.1_@types+mssql_98bbfd59c1a14bd72c184eed0de56c55/node_modules/src/zod/schema.ts","../../src/schema/auth.ts","../../src/schema/teams.ts","../../src/schema/relationships.ts","../../src/schema/common.ts","../../src/schema/i18n.ts","../../src/schema/roles.ts","../../src/schema/role-permissions.ts","../../src/schema/permissions.ts","../../src/schema/menus.ts","../../src/schema/permission-fields.ts","../../src/schema/plugins.ts","../../src/schema/plugin-migrations.ts","../../src/schema/entity-extensions.ts","../../src/schema/action-journal.ts","../../src/schema/settings.ts","../../src/schema/feature-flags.ts","../../src/schema/media.ts","../../src/schema/web-design.ts","../../src/schema/site-presentation.ts","../../src/schema/notifications.ts","../../src/schema/notification-templates.ts","../../src/schema/notification-channels.ts","../../src/schema/notification-preferences.ts","../../src/schema/audit-logs.ts","../../src/schema/audit-events.ts","../../src/schema/audit-archive.ts","../../src/schema/entity-ownerships.ts","../../src/schema/billing.ts","../../src/schema/currency.ts","../../src/schema/geo.ts","../../src/schema/webhooks.ts","../../src/schema/scheduled-tasks.ts"],"names":["entityKind","is","value","type","cls","OriginalColumn","noop","v","Column","table","config","getColumnTable","column","TableName","ForeignKeyBuilder","actions","name","columns","foreignColumns","action","ForeignKey","builder","columnNames","foreignColumnNames","chunks","foreignKey","mappedConfig","iife","fn","args","PgColumnBuilder","dataType","columnType","casingFn","dimensions","dim","ref","as","foreignColumn","ExtraConfigColumn","PgColumn","originalFromDriver","originalToDriver","mapper","depth","opClass","IndexedColumn","keyAsName","indexConfig","PgIntColumnBuilder","sequence","options","TableSchema","TableColumns","ExtraConfigColumns","OriginalName","BaseName","IsAlias","ExtraConfigBuilder","IsDrizzleTable","Table","schema","baseName","isTable","getTableName","Subquery","sql","fields","alias","isWith","usedTables","tracer","ViewBaseConfig","isSQLWrapper","mergeQueries","queries","result","query","_mergeQueries","sqls","StringChunk","SQL","noopDecoder","queryChunks","chunk","schemaName","span","_config","escapeName","escapeParam","codecs","inlineParams","paramStartIndex","invokeSource","mappedChunks","Name","i","p","tableName","columnName","View","viewName","Param","useCodecs","Placeholder","escaped","mappedValue","escapeString","mappedValueAsString","decoder","condition","noopEncoder","encoder","codec","strings","params","paramIndex","param","empty","fromList","list","raw","str","join","separator","identifier","placeholder","comment","input","encoded","sqlCommenter","merge","input1","input2","encodeInput","sanitizeStringInput","parts","key","encodedKey","sanitizeObjectElement","encodedValue","Aliased","fieldAlias","IsDrizzleView","selectedFields","isView","view","getColumns","getColumnNameAndConfig","a","b","isWithEnum","CONSTANTS","PgBigInt53Builder","PgBigInt53","PgBigInt64Builder","PgBigInt64","PgBigIntStringBuilder","PgBigIntString","bigint","PgBigSerial53Builder","PgBigSerial53","PgBigSerial64Builder","PgBigSerial64","bigserial","PgBooleanBuilder","PgBoolean","boolean","PgCharBuilder","PgChar","char","PgCidrBuilder","PgCidr","cidr","parsePgArrayValue","arrayString","startFrom","inQuotes","parsePgNestedArray","lastCharIsComma","newStartFrom","parsePgArray","PG_ALIAS_TO_TYPE_MAP","resolvePgTypeAlias","PgCustomColumnBuilder","fieldConfig","customTypeParams","PgCustomColumn","cfgCodec","arr","customType","PgDateColumnBuilder","PgDateBuilder","PgDate","PgDateStringBuilder","PgDateString","date","PgDoublePrecisionBuilder","PgDoublePrecision","doublePrecision","PgInetBuilder","PgInet","inet","PgIntegerBuilder","PgInteger","integer","PgIntervalBuilder","intervalConfig","PgInterval","interval","PgJsonBuilder","PgJson","json","PgJsonbBuilder","PgJsonb","jsonb","PgLineBuilder","PgLineTuple","PgLineABCBuilder","PgLineABC","line","PgMacaddrBuilder","PgMacaddr","macaddr","PgMacaddr8Builder","PgMacaddr8","macaddr8","PgNumericBuilder","precision","scale","PgNumeric","PgNumericNumberBuilder","PgNumericNumber","PgNumericBigIntBuilder","PgNumericBigInt","numeric","mode","PgPointTupleBuilder","PgPointTuple","PgPointObjectBuilder","PgPointObject","point","PgGeometryBuilder","srid","PgGeometry","PgGeometryObjectBuilder","PgGeometryObject","geometry","PgRealBuilder","length","PgReal","real","PgSerialBuilder","PgSerial","serial","PgSmallIntBuilder","PgSmallInt","smallint","PgSmallSerialBuilder","PgSmallSerial","smallserial","PgTextBuilder","PgText","enumValues","text","PgTimeBuilder","withTimezone","PgTime","time","PgTimestampBuilder","PgTimestamp","PgTimestampStringBuilder","PgTimestampString","timestamp","PgUUIDBuilder","PgUUID","uuid","PgVarcharBuilder","PgVarchar","varchar","PgBinaryVectorBuilder","PgBinaryVector","bit","PgHalfVectorBuilder","PgHalfVector","halfvec","PgSparseVectorBuilder","PgSparseVector","sparsevec","PgVectorBuilder","PgVector","vector","getPgColumnBuilders","getCasingFn","casing","InlineForeignKeys","EnableRLS","PgTable","pgTableWithSchema","extraConfig","rawTable","parsedColumns","builtColumns","colBuilderBase","colBuilder","builtColumnsForExtraConfig","pgTableWithCasing","pgTable","CheckBuilder","Check","check","IndexBuilderOn","unique","IndexBuilder","it","clonedIndexedColumn","method","only","obj","Index","index","uniqueIndex","extractExtendedColumnType","constraint","literalSchema","zod","jsonSchema","bufferSchema","columnToSchema","factory","z","coerce","pgArrayColumnToSchema","arrayColumnToSchema","objectColumnToSchema","numberColumnToSchema","bigintColumnToSchema","stringColumnToSchema","min","max","bigintStringModeSchema","unsignedBigintStringModeSchema","baseType","baseConstraint","baseSchema","baseColumn","isLengthExact","regex","handleColumns","refinements","conditions","columnSchemas","selected","refinement","refined","handleEnum","enum_","selectConditions","insertConditions","createSelectSchema","entity","refine","createInsertSchema","user","session","CREDENTIAL_ACCOUNT_ISSUER","account","verification","organization","member","invitation","apikey","userSchema","sessionSchema","accountSchema","verificationSchema","organizationSchema","memberSchema","invitationSchema","apikeySchema","updateProfileMutation","team","teamMember","teamSchema","teamMemberSchema","relationship","relationshipSchema","paginationSchema","sortSchema","searchSchema","listQueryBase","I18N_MESSAGE_FORMATS","i18nLanguages","i18nMessages","i18nBundleVersions","canonicalizeLocale","locale","localeSchema","translationsObjectSchema","i18nDirectionSchema","i18nMessageTypeSchema","i18nMessageSourceSchema","i18nMessageFormatSchema","i18nLanguageSchema","i18nMessageSchema","getI18nMessagesQuery","getI18nBundlesQuery","i18nBundleSchema","getI18nBundlesResultSchema","listI18nLanguagesQuery","listI18nMessagesQuery","setDefaultLanguageMutation","batchUpdateMessagesMutation","roles","roleSchema","rolePermissions","rolePermissionSchema","permissions","permissionSchema","ROLE_PERMISSIONS","menus","SYS_INBOX_CODE","menuSchema","getMenuQuery","listMenusQuery","listAllMenusQuery","deleteMenuMutation","toggleMenuVisibilityMutation","createMenuSchema","updateMenuSchema","updateMenuMutation","scopeFields","ownerFields","lbacFields","permissionFields","createLbacIndexes","TagPrefix","PLUGIN_MARKETPLACE_STATES","PLUGIN_TRUST_LEVELS","PLUGIN_INSTALL_OPERATIONS","PLUGIN_INSTALL_SOURCES","PLUGIN_INSTALL_JOB_STATUSES","plugins","pluginInstances","pluginCatalogReleases","pluginRegistrySyncState","pluginInstallJobs","pluginConfigs","pluginSchema","pluginInstanceSchema","pluginCatalogReleaseSchema","pluginInstallJobSchema","pluginConfigSchema","listPluginCatalogQuery","installPluginFromRegistryMutation","createPluginUploadMutation","appendPluginUploadMutation","completePluginUploadMutation","getPluginInstallJobQuery","uninstallPluginFromInstanceMutation","rollbackPluginInstallMutation","pluginMigrations","pluginMigrationSchema","ENTITY_EXTENSION_VALUE_TYPES","ENTITY_EXTENSION_PROJECTION_STATUSES","extProjection","ACTION_JOURNAL_STATUSES","ACTION_JOURNAL_ACTIVE_STATUSES","actionExecutionJournal","actionExecutionOutbox","settings","settingSchemas","settingScopeSchema","settingValueTypeSchema","settingSchema","settingSchemaSchema","getSettingQuery","listSettingsQuery","setSettingMutation","deleteSettingMutation","featureFlags","featureFlagOverrides","flagConditionSchema","featureFlagSchema","featureFlagOverrideSchema","organizationInputSchema","data","checkFeatureFlagQuery","getFeatureFlagQuery","listFeatureFlagsQuery","listFlagOverridesQuery","updateFeatureFlagMutation","deleteFeatureFlagMutation","setFlagOverrideMutation","removeFlagOverrideMutation","media","mediaInsertSchema","mediaSelectSchema","importMediaFromUrlMutation","WEB_PAGE_STATUSES","WEB_DOMAIN_STATUSES","WEB_DOMAIN_CERTIFICATE_STATUSES","WEB_PAGE_RESERVED_PATHS","WEB_PAGE_RESERVED_PREFIXES","normalizeWebPagePath","webPages","webDomains","webPageSchema","webPageSelectSchema","webDomainSchema","webDomainSelectSchema","normalizeWebDomainHostname","isValidWebDomainHostname","labels","label","webDomainHostnameSchema","hostname","webPagePathSchema","path","prefix","segment","webDesignDocumentSchema","createWebPageMutation","updateWebPageMutation","getWebPageDocumentQuery","saveWebPageDocumentMutation","publishWebPageMutation","createWebDomainMutation","getWebDomainQuery","verifyWebDomainMutation","requestWebDomainCertificateMutation","updateWebDomainCertificateStatusMutation","setPrimaryWebDomainMutation","disableWebDomainMutation","deleteWebDomainMutation","WEB_THEME_REVISION_STATUSES","WEB_THEME_SELECTION_STATUSES","webThemeRevisions","webThemeSelections","webThemePluginIdSchema","webThemeHomeTargetSchema","webThemeJsonObjectSchema","webThemeAdapterSelectionSchema","selection","ctx","webThemeAdapterConfigSchema","targets","webThemeRevisionSchema","webThemeRevisionSelectSchema","webThemeSelectionSchema","webThemeSelectionSelectSchema","getWebThemeQuery","setWebThemeEnabledMutation","getWebThemeRevisionQuery","listWebThemeRevisionsQuery","saveWebThemeDraftMutation","activateWebThemeMutation","activateWebThemeRevisionMutation","publishWebThemeDraftMutation","rollbackWebThemeRevisionMutation","issueWebThemePreviewMutation","recoverWebThemeMutation","NotificationTypeEnum","notifications","notificationSchema","notificationTemplates","notificationTemplateSchema","notificationChannels","notificationChannelSchema","notificationPreferences","notificationPreferenceSchema","auditLogs","auditLogSchema","auditEvents","auditEventSchema","auditEventsArchive","auditLogsArchive","auditEventsArchiveSchema","auditLogsArchiveSchema","ScopeType","AccessLevel","entityOwnerships","ownershipAuditLog","entityOwnershipSchema","ownershipAuditLogSchema","capabilities","plans","planItems","userQuotas","wallets","transactions","billingEventOutbox","usageRecords","planSubscriptions","tenantQuotas","capabilitySchema","planSchema","planItemSchema","userQuotaSchema","walletSchema","transactionSchema","billingEventOutboxSchema","usageRecordSchema","planSubscriptionSchema","tenantQuotaSchema","currencies","exchangeRates","currencySchema","exchangeRateSchema","MARKET_REGIONS","geoNameSchema","countryCode2Schema","countryCode3Schema","subdivisionFullCodeSchema","geoCountries","geoSubdivisions","geoCountrySchema","geoSubdivisionSchema","getGeoCountryQuery","listGeoCountriesQuery","getGeoSubdivisionQuery","listGeoSubdivisionsQuery","listMarketRegionsQuery","webhookEndpoints","webhookDeliveries","webhookOutbox","webhookEndpointSchema","webhookDeliverySchema","webhookOutboxSchema","scheduledTasks","taskExecutions","schedulerProviders","scheduledTaskSchema","taskExecutionSchema","schedulerProviderSchema"],"mappings":"yDAAA,IAAaA,CAAAA,CAAa,MAAA,CAAO,GAAA,CAAI,oBAAA,CAAA,CAWrC,SAAgBC,CAAAA,CAAsCC,CAAAA,CAAYC,CAAAA,CAAmC,CACpG,GAAI,CAACD,CAAAA,EAAS,OAAOA,CAAAA,EAAU,QAAA,CAC9B,OAAO,MAAA,CAGR,GAAIA,CAAAA,YAAiBC,CAAAA,CACpB,OAAO,KAAA,CAGR,GAAI,CAAC,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAKA,EAAMH,CAAA,CAAA,CAC/C,MAAM,IAAI,KAAA,CACT,CAAA,OAAA,EACCG,CAAAA,CAAK,IAAA,EAAQ,WAAA,CAAA,6HAAA,CACb,CAAA,CAIH,IAAIC,CAAAA,CAAM,MAAA,CAAO,cAAA,CAAeF,CAAA,CAAA,EAAQ,WAAA,CACxC,GAAIE,CAAAA,CAEH,KAAOA,CAAAA,EAAK,CACX,GAAIJ,CAAAA,IAAcI,CAAAA,EAAOA,CAAAA,CAAIJ,CAAA,CAAA,GAAgBG,CAAAA,CAAKH,CAAA,CAAA,CACjD,OAAO,KAAA,CAGRI,CAAAA,CAAM,MAAA,CAAO,cAAA,CAAeA,CAAA,EAAA,CAI9B,OAAO,MAAA,CCxCR,IAAaC,EAAAA,CAAiB,MAAA,CAAO,GAAA,CAAI,wBAAA,CAAA,CC8BzC,IAAMC,EAAAA,CAAyEC,CAAAA,EAAMA,CAAAA,CACrFD,EAAAA,CAAK,MAAA,CAAS,IAAA,CAiBd,IAAsBE,CAAAA,CAAtB,KAGwE,CACvE,OAAiBR,CAAA,EAAsB,SAK9B,KAAA,CAEA,IAAA,CACA,SAAA,CACA,OAAA,CACA,OAAA,CACA,OAAA,CACA,SAAA,CACA,UAAA,CACA,UAAA,CACA,QAAA,CACA,UAAA,CACA,UAAA,CACA,QAAA,CACA,UAAA,CACA,UAAA,CAA8B,MAAA,CAC9B,SAAA,CAA0D,MAAA,CAC1D,iBAAA,CAAyD,MAAA,CACzD,MAAA,CACA,aAAA,CACA,OAAA,CAGC,MAAA,CAGD,KAAA,CAGC,MAAA,EAAe,CAAA,CAEzB,WAAA,CACCS,CAAAA,CACAC,EACC,CACD,IAAA,CAAK,MAAA,CAASA,CAAAA,CACd,IAAA,CAAK,MAAA,EAAA,CACL,IAAA,CAAK,KAAA,CAAQD,CAAAA,CAEb,IAAA,CAAK,IAAA,CAAOC,CAAAA,CAAO,IAAA,CACnB,IAAA,CAAK,OAAA,CAAU,KAAA,CACf,IAAA,CAAK,SAAA,CAAYA,CAAAA,CAAO,SAAA,CACxB,IAAA,CAAK,OAAA,CAAUA,CAAAA,CAAO,OAAA,CACtB,IAAA,CAAK,OAAA,CAAUA,CAAAA,CAAO,OAAA,CACtB,IAAA,CAAK,UAAYA,CAAAA,CAAO,SAAA,CACxB,IAAA,CAAK,UAAA,CAAaA,CAAAA,CAAO,UAAA,CACzB,IAAA,CAAK,UAAA,CAAaA,CAAAA,CAAO,UAAA,CACzB,IAAA,CAAK,OAAA,CAAUA,CAAAA,CAAO,UAAA,CACtB,IAAA,CAAK,QAAA,CAAWA,CAAAA,CAAO,QAAA,CACvB,IAAA,CAAK,UAAA,CAAaA,CAAAA,CAAO,UAAA,CACzB,IAAA,CAAK,UAAA,CAAaA,CAAAA,CAAO,UAAA,CACzB,IAAA,CAAK,QAAA,CAAWA,CAAAA,CAAO,QAAA,CACvB,KAAK,UAAA,CAAaA,CAAAA,CAAO,UAAA,CACzB,IAAA,CAAK,SAAA,CAAYA,CAAAA,CAAO,SAAA,CACxB,IAAA,CAAK,iBAAA,CAAoBA,CAAAA,CAAO,iBAAA,CAChC,IAAA,CAAK,MAAA,CAAgCA,CAAAA,CAAQ,MAAA,CAC7C,IAAA,CAAK,aAAA,CAA+CA,CAAAA,CAAQ,cAAA,CAK7D,kBAAA,CAAqBJ,EAAAA,CAErB,gBAAA,CAAmBA,EAAAA,CAInB,SAAA,EAAY,CACX,OAAO,IAAA,CAIR,mBAAA,EAA+B,CAC9B,OAAO,KAAK,MAAA,CAAO,SAAA,GAAc,MAAA,EAAa,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,IAAA,GAAS,WAAA,CAI9E,CAACD,EAAA,CAAA,EAAwB,CACxB,OAAO,IAAA,CAAA,CAAA,CAyBT,SAAgBM,EAAAA,CAAuDC,CAAAA,CAA6B,CACnG,OAAOA,CAAAA,CAAO,KAAA,CChKf,IAAaC,CAAAA,CAAY,MAAA,CAAO,GAAA,CAAI,cAAA,CAAA,CCapC,IAAaC,EAAAA,CAAb,KAA+B,CAC9B,OAAiBd,CAAA,EAAsB,qBAAA,CAGvC,SAAA,CAGA,SAAA,CAA4C,WAAA,CAG5C,SAAA,CAA4C,WAAA,CAE5C,WAAA,CACCU,CAAAA,CAKAK,CAAAA,CAIC,CACD,IAAA,CAAK,SAAA,CAAA,IAAkB,CACtB,GAAM,CAAE,IAAA,CAAAC,CAAAA,CAAM,OAAA,CAAAC,CAAAA,CAAS,cAAA,CAAAC,CAAA,CAAA,CAAmBR,CAAAA,EAAA,CAC1C,OAAO,CAAE,KAAAM,CAAAA,CAAM,OAAA,CAAAC,CAAAA,CAAS,YAAA,CAAcC,CAAAA,CAAe,CAAA,CAAA,CAAI,KAAA,CAAkB,cAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAExEH,CAAAA,GACH,IAAA,CAAK,SAAA,CAAYA,CAAAA,CAAQ,QAAA,CACzB,IAAA,CAAK,SAAA,CAAYA,CAAAA,CAAQ,QAAA,EAAA,CAI3B,QAAA,CAASI,CAAAA,CAAkC,CAC1C,OAAA,IAAA,CAAK,SAAA,CAAYA,CAAAA,GAAW,MAAA,CAAY,WAAA,CAAcA,CAAAA,CAC/C,IAAA,CAGR,QAAA,CAASA,EAAkC,CAC1C,OAAA,IAAA,CAAK,SAAA,CAAYA,CAAAA,GAAW,MAAA,CAAY,WAAA,CAAcA,CAAAA,CAC/C,IAAA,CAIR,KAAA,CAAMV,CAAAA,CAA4B,CACjC,OAAO,IAAIW,EAAAA,CAAWX,CAAAA,CAAO,IAAA,CAAA,CAAA,CAAA,CAMlBW,EAAAA,CAAb,KAAwB,CACvB,OAAiBpB,CAAA,EAAsB,cAAA,CAE9B,SAAA,CACA,QAAA,CACA,QAAA,CACA,IAAA,CAET,WAAA,CAAqBS,CAAAA,CAAgBY,EAA4B,CAA5C,IAAA,CAAA,KAAA,CAAAZ,CAAAA,CACpB,IAAA,CAAK,SAAA,CAAYY,CAAAA,CAAQ,SAAA,CACzB,IAAA,CAAK,QAAA,CAAWA,CAAAA,CAAQ,SAAA,CACxB,IAAA,CAAK,QAAA,CAAWA,CAAAA,CAAQ,UAAA,CAGzB,OAAA,EAAkB,CACjB,GAAM,CAAE,IAAA,CAAAL,CAAAA,CAAM,OAAA,CAAAC,CAAAA,CAAS,cAAA,CAAAC,CAAA,CAAA,CAAmB,IAAA,CAAK,SAAA,EAAA,CACzCI,EAAcL,CAAAA,CAAQ,GAAA,CAAKL,CAAAA,EAAWA,CAAAA,CAAO,IAAA,CAAA,CAC7CW,CAAAA,CAAqBL,CAAAA,CAAe,GAAA,CAAKN,CAAAA,EAAWA,CAAAA,CAAO,IAAA,CAAA,CAC3DY,CAAAA,CAAS,CACd,IAAA,CAAK,KAAA,CAAMX,CAAA,CAAA,CACX,GAAGS,CAAAA,CACHJ,CAAAA,CAAe,CAAA,CAAA,CAAI,KAAA,CAAML,CAAA,CAAA,CACzB,GAAGU,CAAAA,CAAAA,CAEJ,OAAOP,GAAQ,CAAA,EAAGQ,CAAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAA,GAAA,CAAA,CAGnC,cAAA,EAA0B,CACzB,OAAO,CAAC,CAAC,IAAA,CAAK,SAAA,EAAA,CAAY,IAAA,CAAA,CAAA,CAS5B,SAAgBC,EAAAA,CAKff,CAAAA,CAKoB,CACpB,SAASgB,CAAAA,EAAe,CACvB,GAAM,CAAE,IAAA,CAAAV,CAAAA,CAAM,OAAA,CAAAC,CAAAA,CAAS,cAAA,CAAAC,CAAA,EAAmBR,CAAAA,CAC1C,OAAO,CACN,IAAA,CAAAM,CAAAA,CACA,OAAA,CAAAC,CAAAA,CACA,cAAA,CAAAC,CAAAA,CAAAA,CAIF,OAAO,IAAIJ,EAAAA,CAAkBY,CAAA,CAAA,CC1H9B,SAAgBC,EAAAA,CAA6BC,CAAAA,CAAAA,GAA0BC,CAAAA,CAAY,CAClF,OAAOD,CAAAA,CAAG,GAAGC,CAAA,CAAA,CCqKd,IAAsBC,CAAAA,CAAtB,KAGE,CACD,OAAiB9B,CAAA,EAAsB,iBAAA,CAI/B,iBAAA,CAAuC,EAAA,CAErC,MAAA,CAEV,WAAA,CAAYgB,CAAAA,CAAce,CAAAA,CAAsBC,CAAAA,CAAoB,CACnE,IAAA,CAAK,MAAA,CAAS,CACb,IAAA,CAAAhB,CAAAA,CACA,SAAA,CAAWA,CAAAA,GAAS,EAAA,CACpB,OAAA,CAAS,KAAA,CACT,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,KAAA,CACZ,UAAA,CAAY,KAAA,CACZ,QAAA,CAAU,KAAA,CACV,UAAA,CAAY,MAAA,CACZ,WAAY,MAAA,CACZ,QAAA,CAAAe,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,SAAA,CAAW,MAAA,CACX,SAAA,CAAW,MAAA,CACX,UAAA,CAAY,MAAA,CACZ,iBAAA,CAAmB,MAAA,EAAA,CAerB,KAAA,EAAsC,CACrC,OAAO,IAAA,CAQR,OAAA,EAA4B,CAC3B,OAAA,IAAA,CAAK,MAAA,CAAO,OAAA,CAAU,IAAA,CACf,IAAA,CAUR,OAAA,CACC9B,CAAAA,CAQsB,CACtB,OAAA,IAAA,CAAK,MAAA,CAAO,OAAA,CAAUA,EACtB,IAAA,CAAK,MAAA,CAAO,UAAA,CAAa,IAAA,CAClB,IAAA,CASR,UAAA,CACC0B,CAAAA,CAQ6B,CAC7B,OAAA,IAAA,CAAK,MAAA,CAAO,SAAA,CAAYA,CAAAA,CACxB,IAAA,CAAK,MAAA,CAAO,UAAA,CAAa,IAAA,CAClB,IAAA,CAMR,QAAA,CAAW,IAAA,CAAK,UAAA,CAShB,WAAA,CACCA,CAAAA,CAQsB,CACtB,OAAA,IAAA,CAAK,MAAA,CAAO,UAAA,CAAaA,CAAAA,CACzB,IAAA,CAAK,MAAA,CAAO,UAAA,CAAa,KAClB,IAAA,CAMR,SAAA,CAAY,IAAA,CAAK,WAAA,CAOjB,UAAA,EAAoC,CACnC,OAAA,IAAA,CAAK,MAAA,CAAO,UAAA,CAAa,IAAA,CACzB,IAAA,CAAK,MAAA,CAAO,OAAA,CAAU,IAAA,CACf,IAAA,CAIR,OAAA,CAAQZ,CAAAA,CAAciB,CAAAA,CAAoC,CACrD,IAAA,CAAK,MAAA,CAAO,IAAA,GAAS,EAAA,GACzB,IAAA,CAAK,MAAA,CAAO,IAAA,CAAOA,CAAAA,CAASjB,CAAA,CAAA,EAAA,CAqB7B,KAAA,CACCkB,EAC0D,CAE1D,IAAMC,CAAAA,CAAMD,CAAAA,EAAc,IAAA,CACzB,OAAA,IAAA,CAAK,MAAA,CAAe,UAAA,CAAcC,CAAAA,CAAI,MAAA,CAAS,CAAA,CACzC,IAAA,CAGR,UAAA,CACCC,CAAAA,CACA1B,CAAAA,CAAoC,EAAA,CAC7B,CACP,OAAA,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,CAAE,GAAA,CAAA0B,CAAAA,CAAK,MAAA,CAAA1B,CAAAA,CAAQ,CAAA,CACpC,IAAA,CAGR,MAAA,CACCM,CAAAA,CACAN,EACO,CACP,OAAA,IAAA,CAAK,MAAA,CAAO,QAAA,CAAW,IAAA,CACvB,IAAA,CAAK,MAAA,CAAO,UAAA,CAAaM,CAAAA,CACzB,IAAA,CAAK,MAAA,CAAO,UAAA,CAAaN,CAAAA,EAAQ,KAAA,CAC1B,IAAA,CAGR,iBAAA,CACC2B,CAAAA,CAGwB,CACxB,OAAA,IAAA,CAAK,MAAA,CAAO,SAAA,CAAY,CACvB,EAAA,CAAAA,CAAAA,CACA,IAAA,CAAM,QAAA,CACN,IAAA,CAAM,QAAA,CAAA,CAEA,IAAA,CAIR,gBAAA,CAAiBzB,EAAkBH,CAAAA,CAA8B,CAChE,OAAO,IAAA,CAAK,iBAAA,CAAkB,GAAA,CAAA,CAAK,CAAE,GAAA,CAAA2B,CAAAA,CAAK,MAAA,CAAA1B,CAAA,CAAA,GAClCiB,EAAAA,CAAA,CACLS,CAAAA,CAAK1B,CAAAA,GAAW,CAChB,IAAMW,CAAAA,CAAU,IAAIP,EAAAA,CAAA,IAAwB,CAC3C,IAAMwB,CAAAA,CAAgBF,CAAAA,EAAA,CACtB,OAAO,CAAE,KAAM1B,CAAAA,CAAO,IAAA,CAAM,OAAA,CAAS,CAACE,CAAA,CAAA,CAAS,cAAA,CAAgB,CAAC0B,CAAA,CAAA,CAAA,CAAA,CAAA,CAEjE,OAAI5B,CAAAA,CAAO,QAAA,EACVW,CAAAA,CAAQ,QAAA,CAASX,CAAAA,CAAO,QAAA,CAAA,CAErBA,CAAAA,CAAO,QAAA,EACVW,CAAAA,CAAQ,QAAA,CAASX,CAAAA,CAAO,QAAA,CAAA,CAElBW,CAAAA,CAAQ,KAAA,CAAMZ,CAAA,CAAA,CAAA,CAEtB2B,CAAAA,CACA1B,CAAA,CAAA,CAAA,CASH,sBAAA,CACCD,CAAAA,CACoB,CACpB,OAAO,IAAI8B,EAAAA,CAAkB9B,CAAAA,CAAO,CAAE,GAAG,IAAA,CAAK,MAAA,CAAQ,UAAA,CAAa,IAAA,CAAK,MAAA,CAAe,UAAA,EAAc,CAAA,CAAG,CAAA,CAAA,CAAA,CAMpF+B,CAAAA,CAAtB,cAIUhC,CAA0B,CACnC,OAA0BR,CAAA,EAAsB,UAAA,CAM9B,KAAA,CAET,UAAA,CAET,WAAA,CACCS,CAAAA,CACAC,EACC,CACD,KAAA,CAAMD,CAAAA,CAAOC,CAAA,CAAA,CACb,IAAA,CAAK,KAAA,CAAQD,CAAAA,CACb,IAAA,CAAK,UAAA,CAAaC,CAAAA,CAAO,UAAA,EAAc,EAAA,CAI/B,SAAA,EAAY,CACpB,GAAI,IAAA,CAAK,UAAA,CAAY,CACpB,IAAM+B,CAAAA,CAAqB,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,IAAA,CAAA,CAClDC,CAAAA,CAAmB,IAAA,CAAK,gBAAA,CAAiB,IAAA,CAAK,IAAA,CAAA,CAEpD,IAAA,CAAK,kBAAA,CAAqB,IAAA,CAAK,kBAAA,CAAmB,MAAA,CAC/C,IAAA,CAAK,kBAAA,CACJxC,CAAAA,EACK,IAAA,CAAK,gBAAA,CAAiBA,CAAAA,CAAOuC,CAAAA,CAAoB,IAAA,CAAK,UAAA,CAAA,CAG/D,IAAA,CAAK,gBAAA,CAAmB,IAAA,CAAK,gBAAA,CAAiB,MAAA,CAC3C,IAAA,CAAK,gBAAA,CACJvC,CAAAA,EACK,IAAA,CAAK,gBAAA,CAAiBA,CAAAA,CAAoBwC,CAAAA,CAAkB,IAAA,CAAK,UAAA,GAI3E,OAAO,IAAA,CAIC,mBAAA,EAA+B,CACvC,OAAQ,IAAA,CAAK,MAAA,CAAO,iBAAA,GAAsB,MAAA,EAAa,IAAA,CAAK,MAAA,CAAO,iBAAA,CAAkB,IAAA,GAAS,WAAA,EACzF,IAAA,CAAK,MAAA,CAAO,SAAA,GAAc,MAAA,EAAa,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,IAAA,GAAS,WAAA,CAIpE,gBAAA,CAAiBxC,CAAAA,CAAgByC,CAAAA,CAAiCC,CAAAA,CAAwB,CACjG,OAAIA,CAAAA,CAAQ,GAAK,KAAA,CAAM,OAAA,CAAQ1C,CAAA,CAAA,CACvBA,CAAAA,CAAM,GAAA,CAAKK,CAAAA,EAAMA,CAAAA,GAAM,IAAA,CAAO,IAAA,CAAO,IAAA,CAAK,gBAAA,CAAiBA,CAAAA,CAAGoC,CAAAA,CAAQC,CAAAA,CAAQ,CAAA,CAAE,CAAA,CAEjFD,CAAAA,CAAOzC,CAAA,CAAA,CAAA,CAAA,CAMHqC,EAAAA,CAAb,cAEUC,CAAgD,CACzD,OAA0BxC,CAAA,EAAsB,mBAAA,CAG9B,KAAA,CAAQ,OAEjB,UAAA,EAAqB,CAC7B,OAAO,IAAA,CAAK,UAAA,EAAA,CAGb,WAAA,CAAsC,CACrC,KAAA,CAAO,IAAA,CAAK,MAAA,CAAO,KAAA,EAAS,KAAA,CAC5B,KAAA,CAAO,IAAA,CAAK,MAAA,CAAO,KAAA,EAAS,MAAA,CAC5B,OAAA,CAAS,IAAA,CAAK,MAAA,CAAO,OAAA,CAAA,CAEtB,aAAA,CAAwC,CACvC,KAAA,CAAO,KAAA,CACP,KAAA,CAAO,MAAA,CACP,OAAA,CAAS,MAAA,CAAA,CAGV,KAAkC,CACjC,OAAA,IAAA,CAAK,WAAA,CAAY,KAAA,CAAQ,KAAA,CAClB,IAAA,CAGR,IAAA,EAAmC,CAClC,OAAA,IAAA,CAAK,WAAA,CAAY,KAAA,CAAQ,MAAA,CAClB,IAAA,CAGR,UAAA,EAAqD,CACpD,OAAA,IAAA,CAAK,WAAA,CAAY,KAAA,CAAQ,OAAA,CAClB,IAAA,CAGR,SAAA,EAAoD,CACnD,OAAA,IAAA,CAAK,WAAA,CAAY,KAAA,CAAQ,MAAA,CAClB,IAAA,CAgCR,EAAA,CAAG6C,CAAAA,CAA2C,CAC7C,YAAK,WAAA,CAAY,OAAA,CAAUA,CAAAA,CACpB,IAAA,CAAA,CAAA,CAIIC,EAAAA,CAAb,KAA2B,CAC1B,OAAiB9C,CAAA,EAAsB,eAAA,CACvC,WAAA,CACCgB,CAAAA,CACA+B,CAAAA,CACA5C,CAAAA,CACA6C,CAAAA,CACC,CACD,IAAA,CAAK,IAAA,CAAOhC,CAAAA,CACZ,IAAA,CAAK,SAAA,CAAY+B,CAAAA,CACjB,IAAA,CAAK,IAAA,CAAO5C,CAAAA,CACZ,IAAA,CAAK,WAAA,CAAc6C,EAAAA,CAGpB,IAAA,CACA,SAAA,CACA,IAAA,CACA,WAAA,CAAA,CCjjBD,IAAsBC,EAAAA,CAAtB,cAGUnB,CAAmC,CAC5C,OAA0B9B,CAAA,EAAsB,wBAAA,CAMhD,yBAAA,CACCkD,CAAAA,CAC8B,CAC9B,GAAIA,CAAAA,CAAU,CACb,GAAM,CAAE,IAAA,CAAAlC,CAAAA,CAAM,GAAGmC,CAAA,CAAA,CAAYD,CAAAA,CAC7B,IAAA,CAAK,MAAA,CAAO,iBAAA,CAAoB,CAC/B,IAAA,CAAM,QAAA,CACN,aAAclC,CAAAA,CACd,eAAA,CAAiBmC,CAAAA,EAAAA,CAAAA,KAGlB,IAAA,CAAK,MAAA,CAAO,iBAAA,CAAoB,CAC/B,IAAA,CAAM,QAAA,CAAA,CAGR,OAAA,IAAA,CAAK,MAAA,CAAO,UAAA,CAAa,IAAA,CACzB,IAAA,CAAK,MAAA,CAAO,OAAA,CAAU,IAAA,CACf,IAAA,CAOR,4BAAA,CACCD,CAAAA,CACiC,CACjC,GAAIA,CAAAA,CAAU,CACb,GAAM,CAAE,IAAA,CAAAlC,CAAAA,CAAM,GAAGmC,CAAA,CAAA,CAAYD,CAAAA,CAC7B,IAAA,CAAK,MAAA,CAAO,iBAAA,CAAoB,CAC/B,IAAA,CAAM,WAAA,CACN,YAAA,CAAclC,CAAAA,CACd,eAAA,CAAiBmC,CAAAA,EAAAA,CAAAA,KAGlB,IAAA,CAAK,MAAA,CAAO,iBAAA,CAAoB,CAC/B,IAAA,CAAM,WAAA,CAAA,CAGR,OAAA,IAAA,CAAK,MAAA,CAAO,UAAA,CAAa,IAAA,CACzB,IAAA,CAAK,MAAA,CAAO,OAAA,CAAU,IAAA,CACf,IAAA,CAAA,CAAA,CCtCT,IAAaC,EAAAA,CAAc,OAAO,GAAA,CAAI,gBAAA,CAAA,CAGzBC,EAAAA,CAAe,MAAA,CAAO,GAAA,CAAI,iBAAA,CAAA,CAG1BC,EAAAA,CAAqB,MAAA,CAAO,GAAA,CAAI,4BAAA,CAAA,CAGhCC,EAAAA,CAAe,MAAA,CAAO,GAAA,CAAI,sBAAA,CAAA,CAG1BC,EAAAA,CAAW,MAAA,CAAO,GAAA,CAAI,kBAAA,CAAA,CAGtBC,EAAAA,CAAU,MAAA,CAAO,GAAA,CAAI,iBAAA,CAAA,CAGrBC,EAAAA,CAAqB,MAAA,CAAO,IAAI,4BAAA,CAAA,CAEvCC,EAAAA,CAAiB,MAAA,CAAO,GAAA,CAAI,wBAAA,CAAA,CAUrBC,CAAAA,CAAb,KAA4D,CAC3D,OAAiB5D,CAAA,EAAsB,OAAA,CAKvC,OAAgB,MAAA,CAAS,CACxB,IAAA,CAAMa,CAAAA,CACN,MAAA,CAAQuC,EAAAA,CACM,YAAA,CAAAG,EAAAA,CACd,OAAA,CAASF,EAAAA,CACW,kBAAA,CAAAC,EAAAA,CACV,QAAA,CAAAE,EAAAA,CACD,OAAA,CAAAC,GACW,kBAAA,CAAAC,EAAAA,CAAAA,CAOrB,CAAC7C,CAAA,EAMD,CAAC0C,EAAA,EAGD,CAACH,EAAA,EAGD,CAACC,EAAA,EAGD,CAACC,EAAA,EAMD,CAACE,EAAA,EAGD,CAACC,EAAA,EAAW,KAAA,CAGZ,CAACE,EAAA,EAAkB,IAAA,CAGnB,CAACD,EAAA,EAAwF,MAAA,CAEzF,WAAA,CAAY1C,CAAAA,CAAc6C,CAAAA,CAA4BC,CAAAA,CAAkB,CACvE,IAAA,CAAKjD,CAAA,CAAA,CAAa,IAAA,CAAK0C,EAAA,CAAA,CAAgBvC,CAAAA,CACvC,IAAA,CAAKoC,EAAA,CAAA,CAAeS,CAAAA,CACpB,IAAA,CAAKL,EAAA,CAAA,CAAYM,EAAAA,CAAAA,CAAAA,CAInB,SAAgBC,EAAAA,CAAQtD,CAAAA,CAAgC,CACvD,OAAO,OAAOA,CAAAA,EAAU,QAAA,EAAYA,CAAAA,GAAU,MAAQkD,EAAAA,IAAkBlD,CAAAA,CAsBzE,SAAgBuD,EAAAA,CAA8BvD,CAAAA,CAA0B,CACvE,OAAOA,CAAAA,CAAMI,CAAA,CAAA,CC1Hd,IAAaoD,EAAAA,CAAb,KAGwB,CACvB,OAAiBjE,CAAA,EAAsB,UAAA,CAWvC,WAAA,CAAYkE,CAAAA,CAAUC,CAAAA,CAAyBC,CAAAA,CAAeC,CAAAA,CAAS,KAAA,CAAOC,CAAAA,CAAuB,EAAA,CAAI,CACxG,IAAA,CAAK,CAAA,CAAI,CACR,KAAA,CAAO,UAAA,CACP,GAAA,CAAAJ,CAAAA,CACA,cAAA,CAAgBC,CAAAA,CACT,KAAA,CAAAC,CAAAA,CACP,MAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,EAAAA,CAAAA,CAAAA,CCRH,IAAaC,EAAAA,CAAS,CACrB,eAAA,CAAoDvD,CAAAA,CAAgBY,CAAAA,CAAsB,CAExF,OAAOA,CAAAA,EAAA,CAAA,CAAA,CC5BV,IAAa4C,CAAAA,CAAiB,MAAA,CAAO,GAAA,CAAI,wBAAA,CAAA,CCkEzC,SAAgBC,EAAAA,CAAavE,CAAAA,CAAqC,CACjE,OAAOA,CAAAA,EAAU,IAAA,EAA+B,OAAQA,CAAAA,CAAc,MAAA,EAAW,UAAA,CAGlF,SAASwE,EAAAA,CAAaC,CAAAA,CAAyB,CAC9C,IAAMC,CAAAA,CAAgB,CAAE,GAAA,CAAK,EAAA,CAAI,MAAA,CAAQ,EAAA,CAAA,CACzC,IAAA,IAAWC,CAAAA,IAASF,CAAAA,CACnBC,CAAAA,CAAO,GAAA,EAAOC,CAAAA,CAAM,GAAA,CACpBD,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,GAAGC,CAAAA,CAAM,MAAA,CAAA,CAE7B,OAAOD,CAAAA,CAGR,SAASE,EAAAA,CAAcH,CAAAA,CAAyB,CAC/C,IAAMC,CAAAA,CAAgB,CAAE,GAAA,CAAK,EAAA,CAAI,OAAQ,EAAA,CAAA,CACnCG,CAAAA,CAAO,EAAA,CACb,IAAA,IAAWF,CAAAA,IAASF,CAAAA,CACnBI,CAAAA,CAAK,IAAA,CAAKF,CAAAA,CAAM,GAAA,CAAA,CAChBD,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,GAAGC,CAAAA,CAAM,MAAA,CAAA,CAE7B,OAAAD,CAAAA,CAAO,IAAA,CAAO,MAAA,CAAO,MAAA,CAAOG,CAAAA,CAAM,CAAE,GAAA,CAAKA,CAAA,CAAM,EACxCH,CAAAA,CAGR,IAAaI,CAAAA,CAAb,KAA+C,CAC9C,OAAiBhF,CAAA,EAAsB,aAAA,CAE9B,KAAA,CAET,WAAA,CAAYE,CAAAA,CAA0B,CACrC,IAAA,CAAK,KAAA,CAAQ,KAAA,CAAM,OAAA,CAAQA,CAAA,CAAA,CAASA,CAAAA,CAAQ,CAACA,CAAA,EAAA,CAG9C,MAAA,EAAuB,CACtB,OAAO,IAAI+E,CAAAA,CAAI,CAAC,IAAA,CAAK,CAAA,CAAA,CAAA,CAIVA,CAAAA,CAAb,MAAaA,EAA0C,CACtD,OAAiBjF,CAAA,EAAsB,KAAA,CAQvC,OAAA,CAAsCkF,EAAAA,CAE/B,kBAAA,CAAqB,KAAA,CAG5B,UAAA,CAAuB,EAAA,CAEvB,WAAA,CAAqBC,CAAAA,CAAyB,CAAzB,IAAA,CAAA,WAAA,CAAAA,CAAAA,CACpB,IAAA,IAAWC,CAAAA,IAASD,CAAAA,CACnB,GAAIlF,CAAAA,CAAGmF,CAAAA,CAAOxB,CAAA,CAAA,CAAQ,CACrB,IAAMyB,CAAAA,CAAaD,CAAAA,CAAMxB,CAAAA,CAAM,MAAA,CAAO,MAAA,CAAA,CAEtC,IAAA,CAAK,UAAA,CAAW,IAAA,CACfyB,CAAAA,GAAe,MAAA,CACZD,CAAAA,CAAMxB,CAAAA,CAAM,MAAA,CAAO,IAAA,CAAA,CACnByB,CAAAA,CAAa,GAAA,CAAMD,CAAAA,CAAMxB,CAAAA,CAAM,MAAA,CAAO,IAAA,CAAA,EAAA,CAAA,CAM7C,MAAA,CAAOiB,CAAAA,CAAkB,CACxB,OAAA,IAAA,CAAK,WAAA,CAAY,KAAK,GAAGA,CAAAA,CAAM,WAAA,CAAA,CACxB,IAAA,CAGR,OAAA,CAAQnE,CAAAA,CAAiC,CACxC,OAAO6D,EAAAA,CAAO,eAAA,CAAgB,kBAAA,CAAqBe,CAAAA,EAAS,CAC3D,IAAMT,CAAAA,CAAQ,IAAA,CAAK,0BAAA,CAA2B,IAAA,CAAK,WAAA,CAAanE,CAAA,CAAA,CAChE,OAAA4E,CAAAA,EAAM,aAAA,CAAc,CACnB,oBAAA,CAAsBT,CAAAA,CAAM,GAAA,CAC5B,sBAAA,CAAwB,KAAK,SAAA,CAAUA,CAAAA,CAAM,MAAA,CAAA,CAC7C,CAAA,CACMA,CAAAA,CAAAA,CAAAA,CAIT,0BAAA,CAA2BrD,CAAAA,CAAoB+D,CAAAA,CAAkC,CAChF,IAAM7E,CAAAA,CAAS,MAAA,CAAO,MAAA,CAAO,EAAA,CAAI6E,CAAAA,CAAS,CACzC,YAAA,CAAcA,CAAAA,CAAQ,YAAA,EAAgB,IAAA,CAAK,kBAAA,CAC3C,eAAA,CAAiBA,CAAAA,CAAQ,eAAA,EAAmB,CAAE,KAAA,CAAO,CAAA,CAAA,CACrD,EAEK,CACL,UAAA,CAAAC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,MAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,eAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,CAAA,CAAA,CACGnF,CAAAA,CAEEoF,CAAAA,CAAetE,CAAAA,CAAO,GAAA,CAAK4D,CAAAA,EAAiB,CACjD,GAAInF,CAAAA,CAAGmF,CAAAA,CAAOJ,CAAA,CAAA,CACb,OAAO,CAAE,GAAA,CAAKI,CAAAA,CAAM,KAAA,CAAM,KAAK,EAAA,CAAA,CAAK,MAAA,CAAQ,EAAA,CAAA,CAG7C,GAAInF,CAAAA,CAAGmF,CAAAA,CAAOW,EAAA,CAAA,CACb,OAAO,CAAE,GAAA,CAAKP,CAAAA,CAAWJ,CAAAA,CAAM,KAAA,CAAA,CAAQ,MAAA,CAAQ,EAAA,CAAA,CAGhD,GAAIA,CAAAA,GAAU,MAAA,CACb,OAAO,CAAE,GAAA,CAAK,EAAA,CAAI,MAAA,CAAQ,EAAA,CAAA,CAG3B,GAAI,KAAA,CAAM,OAAA,CAAQA,CAAA,CAAA,CAAQ,CACzB,IAAMR,CAAAA,CAAqB,CAAC,IAAII,CAAAA,CAAY,GAAA,CAAI,CAAA,CAChD,IAAA,GAAW,CAACgB,CAAAA,CAAGC,CAAA,CAAA,GAAMb,CAAAA,CAAM,OAAA,EAAA,CAC1BR,CAAAA,CAAO,IAAA,CAAKqB,CAAA,CAAA,CACRD,CAAAA,CAAIZ,CAAAA,CAAM,MAAA,CAAS,CAAA,EACtBR,CAAAA,CAAO,KAAK,IAAII,CAAAA,CAAY,IAAA,CAAK,CAAA,CAGnC,OAAAJ,CAAAA,CAAO,IAAA,CAAK,IAAII,CAAAA,CAAY,GAAA,CAAI,CAAA,CACzB,IAAA,CAAK,0BAAA,CAA2BJ,CAAAA,CAAQlE,CAAA,CAAA,CAGhD,GAAIT,CAAAA,CAAGmF,CAAAA,CAAOH,EAAA,CAAA,CACb,OAAO,IAAA,CAAK,0BAAA,CAA2BG,CAAAA,CAAM,WAAA,CAAa,CACzD,GAAG1E,EACH,YAAA,CAAciF,CAAAA,EAAgBP,CAAAA,CAAM,kBAAA,CACpC,CAAA,CAGF,GAAInF,CAAAA,CAAGmF,CAAAA,CAAOxB,CAAA,CAAA,CAAQ,CACrB,IAAMyB,CAAAA,CAAaD,CAAAA,CAAMxB,CAAAA,CAAM,MAAA,CAAO,MAAA,CAAA,CAChCsC,CAAAA,CAAYd,CAAAA,CAAMxB,CAAAA,CAAM,MAAA,CAAO,IAAA,CAAA,CAErC,OAAIiC,CAAAA,GAAiB,+BAAA,CACb,CACN,GAAA,CAAiCL,CAAAA,CAA3BH,IAAe,MAAA,CAAuB,KAAA,CAAoBA,CAApB,CAAA,CAAmC,GAAA,CAC5EG,CAAAA,CAAWU,CAAA,CAAA,CACd,MAAA,CAAQ,EAAA,CAAA,CAIH,CACN,GAAA,CAAKb,CAAAA,GAAe,MAAA,EAAaD,CAAAA,CAAM3B,EAAA,CAAA,CACpC+B,CAAAA,CAAWU,CAAA,CAAA,CACXV,CAAAA,CAAWH,CAAA,CAAA,CAAc,GAAA,CAAMG,CAAAA,CAAWU,CAAA,CAAA,CAC7C,MAAA,CAAQ,IAIV,GAAIjG,CAAAA,CAAGmF,CAAAA,CAAO5E,CAAA,CAAA,CAAS,CACtB,IAAM2F,CAAAA,CAAaf,CAAAA,CAAM,IAAA,CACzB,GAAIG,CAAAA,CAAQ,YAAA,GAAiB,SAAA,CAC5B,OAAO,CAAE,GAAA,CAAKC,CAAAA,CAAWW,CAAA,CAAA,CAAa,MAAA,CAAQ,EAAA,CAAA,CAG/C,IAAMd,CAAAA,CAAaQ,CAAAA,GAAiB,aAAA,CAAgB,MAAA,CAAYT,CAAAA,CAAM,KAAA,CAAMxB,EAAM,MAAA,CAAO,MAAA,CAAA,CACzF,OAAO,CACN,GAAA,CAAKwB,CAAAA,CAAM,OAAA,CAAUI,CAAAA,CAAWJ,CAAAA,CAAM,IAAA,CAAA,CAAQA,CAAAA,CAAM,KAAA,CAAM3B,EAAA,CAAA,EAAY4B,CAAAA,GAAe,MAAA,CAClFG,CAAAA,CAAWJ,CAAAA,CAAM,KAAA,CAAMxB,CAAAA,CAAM,MAAA,CAAO,IAAA,CAAA,CAAA,CAAS,GAAA,CAAM4B,CAAAA,CAAWW,CAAA,CAAA,CAC9DX,EAAWH,CAAA,CAAA,CAAc,GAAA,CAAMG,CAAAA,CAAWJ,CAAAA,CAAM,KAAA,CAAMxB,CAAAA,CAAM,MAAA,CAAO,IAAA,CAAA,CAAA,CAAS,GAAA,CAC3E4B,CAAAA,CAAWW,CAAA,CAAA,CACf,MAAA,CAAQ,EAAA,CAAA,CAIV,GAAIlG,CAAAA,CAAGmF,CAAAA,CAAOgB,EAAA,CAAA,CAAO,CACpB,IAAMf,CAAAA,CAAaD,CAAAA,CAAMZ,CAAA,CAAA,CAAgB,MAAA,CACnC6B,EAAWjB,CAAAA,CAAMZ,CAAA,CAAA,CAAgB,IAAA,CACvC,OAAO,CACN,GAAA,CAAKa,CAAAA,GAAe,MAAA,EAAaD,CAAAA,CAAMZ,CAAA,CAAA,CAAgB,OAAA,CACpDgB,CAAAA,CAAWa,CAAA,CAAA,CACXb,CAAAA,CAAWH,CAAA,CAAA,CAAc,GAAA,CAAMG,CAAAA,CAAWa,CAAA,CAAA,CAC7C,MAAA,CAAQ,EAAA,CAAA,CAIV,GAAIpG,CAAAA,CAAGmF,CAAAA,CAAOkB,EAAA,EAAQ,CACrB,GAAIrG,CAAAA,CAAGmF,CAAAA,CAAM,KAAA,CAAOH,EAAA,CAAA,CACnB,OAAO,IAAA,CAAK,0BAAA,CAA2B,CAACG,CAAAA,CAAM,KAAA,CAAA,CAAQ1E,CAAA,CAAA,CAGvD,IAAM6F,CAAAA,CAAYb,CAAAA,EAAUzF,CAAAA,CAAGmF,CAAAA,CAAM,OAAA,CAAS5E,CAAA,CAAA,CAE9C,GAAIP,CAAAA,CAAGmF,CAAAA,CAAM,KAAA,CAAOoB,EAAA,CAAA,CAAc,CACjC,IAAMC,EAAAA,CAAUhB,CAAAA,CAAYG,CAAAA,CAAgB,KAAA,EAAA,CAASR,CAAA,CAAA,CACrD,OAAAA,CAAAA,CAAM,KAAA,CAAQmB,CAAAA,CACVrG,EAAAA,EAAUwF,CAAAA,CAAO,KAAA,CAAMN,CAAAA,CAAM,OAAA,CAAmB,gBAAA,CAAkBlF,EAAA,CAAA,CACnE,MAAA,CACI,CACN,GAAA,CAAKqG,CAAAA,CACFb,CAAAA,CAAO,KAAA,CAAMN,CAAAA,CAAM,OAAA,CAAS,WAAA,CAAaqB,EAAA,CAAA,CACzCA,GACH,MAAA,CAAQ,CAACrB,CAAA,CAAA,CAAA,CAIX,IAAIsB,CAAAA,CACJ,GAAItB,CAAAA,CAAM,KAAA,GAAU,IAAA,CACnBsB,CAAAA,CAActB,CAAAA,CAAM,KAAA,CAAA,KACd,CAKN,GAJAsB,CAAAA,CAActB,CAAAA,CAAM,OAAA,CAAQ,gBAAA,CAAiB,MAAA,CAC1CA,CAAAA,CAAM,KAAA,CACNA,CAAAA,CAAM,OAAA,CAAQ,gBAAA,CAAiBA,CAAAA,CAAM,KAAA,CAAA,CAEpCnF,CAAAA,CAAGyG,CAAAA,CAAazB,EAAA,CAAA,CACnB,OAAO,IAAA,CAAK,0BAAA,CAA2B,CAACyB,CAAA,CAAA,CAAchG,CAAA,CAAA,CAGnD6F,CAAAA,GACHG,CAAAA,CAAchB,CAAAA,CAAO,KAAA,CACpBN,CAAAA,CAAM,OAAA,CACN,gBAAA,CACAsB,CAAA,CAAA,EAAA,CAKH,GAAIf,CAAAA,CACH,OAAO,CAAE,GAAA,CAAK,IAAA,CAAK,cAAA,CAAee,CAAAA,CAAahG,CAAA,CAAA,CAAS,MAAA,CAAQ,IAGjE,IAAM+F,CAAAA,CAAUhB,CAAAA,CAAYG,CAAAA,CAAgB,KAAA,EAAA,CAASc,CAAA,CAAA,CACrD,OAAO,CACN,GAAA,CAAKH,CAAAA,CACFb,CAAAA,CAAO,KAAA,CAAMN,CAAAA,CAAM,OAAA,CAAS,WAAA,CAAaqB,CAAA,CAAA,CACzCA,CAAAA,CACH,MAAA,CAAQ,CAACC,CAAA,CAAA,CAAA,CAIX,OAAIzG,CAAAA,CAAGmF,CAAAA,CAAOoB,EAAA,CAAA,CACN,CAAE,GAAA,CAAKf,CAAAA,CAAYG,CAAAA,CAAgB,KAAA,EAAA,CAASR,CAAA,CAAA,CAAQ,MAAA,CAAQ,CAACA,CAAA,CAAA,CAAA,CAGjEnF,CAAAA,CAAGmF,CAAAA,CAAOH,EAAAA,CAAI,OAAA,CAAA,EAAYG,CAAAA,CAAM,UAAA,GAAe,MAAA,CAC3C,CACN,GAAA,CAAA,CAAMA,CAAAA,CAAM,MAAA,GAAW,MAAA,CAAYI,CAAAA,CAAWJ,CAAAA,CAAM,MAAA,CAAA,CAAU,GAAA,CAAM,EAAA,EAAMI,CAAAA,CAAWJ,CAAAA,CAAM,UAAA,CAAA,CAC3F,OAAQ,EAAA,CAAA,CAINnF,CAAAA,CAAGmF,CAAAA,CAAOnB,EAAA,CAAA,CACTmB,CAAAA,CAAM,CAAA,CAAE,MAAA,CACJ,CAAE,GAAA,CAAKI,CAAAA,CAAWJ,CAAAA,CAAM,CAAA,CAAE,KAAA,CAAA,CAAQ,MAAA,CAAQ,EAAA,CAAA,CAE3C,IAAA,CAAK,0BAAA,CAA2B,CACtC,IAAIJ,CAAAA,CAAY,GAAA,CAAA,CAChBI,CAAAA,CAAM,CAAA,CAAE,GAAA,CACR,IAAIJ,EAAY,IAAA,CAAA,CAChB,IAAIe,EAAAA,CAAKX,CAAAA,CAAM,CAAA,CAAE,KAAA,CAAA,CAAA,CACf1E,CAAA,CAAA,CAGA,OAAO0E,CAAAA,EAAU,UAAA,EAAc,UAAA,GAAcA,CAAAA,CAC5C,QAAA,GAAYA,CAAAA,EAASA,CAAAA,CAAM,MAAA,CACvB,CAAE,GAAA,CAAKI,CAAAA,CAAWJ,CAAAA,CAAM,MAAA,CAAA,CAAoB,GAAA,CAAMI,CAAAA,CAAWJ,CAAAA,CAAM,QAAA,CAAA,CAAqB,OAAQ,EAAA,CAAA,CAEjG,CAAE,GAAA,CAAKI,CAAAA,CAAWJ,CAAAA,CAAM,QAAA,CAAA,CAAqB,MAAA,CAAQ,EAAA,CAAA,CAGzDX,EAAAA,CAAaW,CAAA,CAAA,CACZA,CAAAA,CAAM,mBAAA,IAAA,CACF,IAAA,CAAK,0BAAA,CAA2B,CAACA,CAAAA,CAAM,MAAA,EAAQ,CAAA,CAAG1E,CAAA,CAAA,CAEnD,IAAA,CAAK,0BAAA,CAA2B,CACtC,IAAIsE,EAAY,GAAA,CAAA,CAChBI,CAAAA,CAAM,MAAA,EAAA,CACN,IAAIJ,CAAAA,CAAY,GAAA,CAAA,CAAA,CACdtE,CAAA,CAAA,CAGAiF,CAAAA,CACI,CAAE,GAAA,CAAK,IAAA,CAAK,cAAA,CAAeP,CAAAA,CAAO1E,CAAA,CAAA,CAAS,MAAA,CAAQ,EAAA,CAAA,CAGpD,CAAE,GAAA,CAAK+E,CAAAA,CAAYG,CAAAA,CAAgB,KAAA,EAAA,CAASR,CAAA,CAAA,CAAQ,MAAA,CAAQ,CAACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAGrE,OAAIG,CAAAA,CAAQ,MAAA,CACJT,EAAAA,CAAcgB,CAAA,CAAA,CAGfpB,EAAAA,CAAaoB,CAAA,CAAA,CAGb,cAAA,CACPV,CAAAA,CACA,CAAE,YAAA,CAAAuB,CAAA,CAAA,CACO,CACT,GAAIvB,CAAAA,GAAU,IAAA,CACb,OAAO,MAAA,CAER,GAAI,OAAOA,CAAAA,EAAU,QAAA,EAAY,OAAOA,CAAAA,EAAU,SAAA,EAAa,OAAOA,CAAAA,EAAU,QAAA,CAC/E,OAAOA,CAAAA,CAAM,QAAA,EAAA,CAEd,GAAI,OAAOA,CAAAA,EAAU,QAAA,CACpB,OAAOuB,CAAAA,CAAavB,CAAA,CAAA,CAErB,GAAI,OAAOA,CAAAA,EAAU,QAAA,CAAU,CAC9B,IAAMwB,CAAAA,CAAsBxB,CAAAA,CAAM,QAAA,EAAA,CAClC,OACQuB,CAAAA,CADJC,CAAAA,GAAwB,iBAAA,CACP,IAAA,CAAK,SAAA,CAAUxB,CAAA,CAAA,CAEhBwB,CAFsB,CAAA,CAI3C,MAAM,IAAI,KAAA,CAAM,0BAAA,CAA6BxB,CAAA,CAAA,CAG9C,MAAA,EAAiB,CAChB,OAAO,IAAA,CAcR,EAAA,CAAGhB,CAAAA,CAAyC,CAE3C,OAAIA,CAAAA,GAAU,MAAA,CACN,IAAA,CAGD,IAAIa,EAAAA,CAAI,OAAA,CAAQ,IAAA,CAAMb,CAAA,CAAA,CAG9B,OAAA,CAKCyC,CAAAA,CAID,CACC,OAAA,IAAA,CAAK,QAAU,OAAOA,CAAAA,EAAY,UAAA,CAAa,CAAE,kBAAA,CAAoBA,CAAA,CAAA,CAAYA,CAAAA,CAC1E,IAAA,CAGR,QAAA,EAA0B,CACzB,OAAO,IAAA,CAGR,YAAA,EAAqB,CACpB,OAAA,IAAA,CAAK,kBAAA,CAAqB,IAAA,CACnB,IAAA,CASR,EAAA,CAAGC,CAAAA,CAA8C,CAChD,OAAOA,CAAAA,CAAY,IAAA,CAAO,MAAA,CAAA,CAAA,CAYff,EAAAA,CAAb,KAAwC,CACvC,OAAiB/F,CAAA,EAAsB,MAAA,CAE7B,KAAA,CAEV,WAAA,CAAqBE,CAAAA,CAAe,CAAf,IAAA,CAAA,KAAA,CAAAA,EAAAA,CAErB,MAAA,EAAuB,CACtB,OAAO,IAAI+E,CAAAA,CAAI,CAAC,IAAA,CAAK,CAAA,CAAA,CAAA,CAqCvB,IAAaC,EAAAA,CAA4C,CACxD,kBAAA,CAAqBhF,CAAAA,EAAUA,CAAA,CAAA,CAGhCgF,EAAAA,CAAY,kBAAA,CAAmB,MAAA,CAAS,IAAA,CAExC,IAAa6B,GAA4C,CACxD,gBAAA,CAAmB7G,CAAAA,EAAUA,CAAA,CAAA,CAG9B6G,EAAAA,CAAY,gBAAA,CAAiB,MAAA,CAAS,IAAA,CAUtC,IAMaT,EAAAA,CAAb,KAAwF,CACvF,OAAiBtG,CAAA,EAAsB,OAAA,CAE7B,KAAA,CAMV,WAAA,CACUE,CAAAA,CACA8G,CAAAA,CAA2DD,EAAAA,CAC7DE,CAAAA,CACN,CAHQ,KAAA,KAAA,CAAA/G,CAAAA,CACA,IAAA,CAAA,OAAA,CAAA8G,CAAAA,CACF,IAAA,CAAA,KAAA,CAAAC,EAAAA,CAGR,MAAA,EAAuB,CACtB,OAAO,IAAIhC,CAAAA,CAAI,CAAC,IAAA,CAAK,CAAA,CAAA,EAuCvB,SAAgBf,CAAAA,CAAIgD,CAAAA,CAAAA,GAAkCC,CAAAA,CAAyB,CAC9E,IAAMhC,CAAAA,CAA0B,EAAA,CAAA,CAC5BgC,CAAAA,CAAO,MAAA,CAAS,CAAA,EAAMD,CAAAA,CAAQ,OAAS,CAAA,EAAKA,CAAAA,CAAQ,CAAA,CAAA,GAAO,EAAA,GAC9D/B,CAAAA,CAAY,IAAA,CAAK,IAAIH,CAAAA,CAAYkC,CAAAA,CAAQ,CAAA,CAAA,CAAI,CAAA,CAE9C,IAAA,GAAW,CAACE,CAAAA,CAAYC,CAAA,CAAA,GAAUF,CAAAA,CAAO,OAAA,EAAA,CACxChC,CAAAA,CAAY,IAAA,CAAKkC,CAAAA,CAAO,IAAIrC,CAAAA,CAAYkC,CAAAA,CAAQE,CAAAA,CAAa,CAAA,CAAA,CAAI,CAAA,CAGlE,OAAO,IAAInC,CAAAA,CAAIE,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAIR,SAASmC,CAAAA,EAAa,CAC5B,OAAO,IAAIrC,CAAAA,CAAI,EAAE,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAIX,SAASsC,CAAAA,CAASC,CAAAA,CAAuB,CAC/C,OAAO,IAAIvC,CAAAA,CAAIuC,CAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAOT,SAASC,CAAAA,CAAIC,CAAAA,CAAkB,CACrC,OAAO,IAAIzC,CAAAA,CAAI,CAAC,IAAID,CAAAA,CAAY0C,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAgB/B,SAASC,CAAAA,CAAKnG,CAAAA,CAAoBoG,CAAAA,CAA2B,CACnE,IAAMhD,CAAAA,CAAqB,EAAA,CAC3B,IAAA,GAAW,CAACoB,CAAAA,CAAGZ,CAAA,CAAA,GAAU5D,CAAAA,CAAO,OAAA,EAAA,CAC3BwE,CAAAA,CAAI,CAAA,EAAK4B,CAAAA,GAAc,MAAA,EAC1BhD,CAAAA,CAAO,KAAKgD,CAAA,CAAA,CAEbhD,CAAAA,CAAO,IAAA,CAAKQ,CAAA,CAAA,CAEb,OAAO,IAAIH,CAAAA,CAAIL,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAeT,SAASiD,CAAAA,CAAW3H,CAAAA,CAAqB,CAC/C,OAAO,IAAI6F,EAAAA,CAAK7F,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAGV,SAAS4H,CAAAA,CAAkC9G,CAAAA,CAAiC,CAClF,OAAO,IAAIwF,EAAAA,CAAYxF,CAAA,CAAA,CAAA,CAAA,CAAA,WAAA,CAAA,CAAA,CAGjB,SAASqG,EACfnH,CAAAA,CACA8G,CAAAA,CACwB,CACxB,OAAO,IAAIV,EAAAA,CAAMpG,CAAAA,CAAO8G,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAMlB,SAASe,CAAAA,CAAQC,CAAAA,CAAsC,CAC7D,IAAMC,CAAAA,CAAUC,EAAAA,CAAaF,CAAA,CAAA,CAC7B,GAAKC,CAAAA,CAAQ,MAAA,CAEb,OAAO/D,CAAAA,CAAI,GAAA,CAAI+D,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAIjB,SAAgBC,EAAAA,CAAaF,CAAAA,CAA6B,CACzD,IAAMC,CAAAA,CAAUC,EAAAA,CAAa,WAAA,CAAYF,CAAA,CAAA,CACzC,OAAKC,CAAAA,CAAQ,MAAA,CAEN,CAAA,EAAA,EAAKA,CAAA,CAAA,EAAA,CAAA,CAFgB,EAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAMrB,SAASE,CAAAA,CAAMC,CAAAA,CAAkCC,CAAAA,CAAkC,CACzF,IAAIJ,CAAAA,CACJ,GAAI,OAAOG,CAAAA,EAAW,QAAA,EAAY,OAAOC,CAAAA,EAAW,QAAA,CACnDJ,CAAAA,CAAUK,CAAAA,CAAY,CAAE,GAAGF,EAAQ,GAAGC,CAAAA,CAAQ,CAAA,CAAA,KAAA,GACpCD,CAAAA,EAAUC,CAAAA,CACpBJ,CAAAA,CAAU,CAACK,CAAAA,CAAYF,CAAA,CAAA,CAASE,CAAAA,CAAYD,CAAA,CAAO,CAAA,CAAE,MAAA,CAAQrC,CAAAA,EAAMA,CAAAA,CAAE,MAAA,CAAA,CAAQ,IAAA,CAAK,GAAA,CAAA,CAAA,KAAA,GACxEqC,CAAAA,CACVJ,CAAAA,CAAUK,CAAAA,CAAYD,CAAA,CAAA,CAAA,KAAA,GACZD,CAAAA,CACVH,CAAAA,CAAUK,CAAAA,CAAYF,CAAA,CAAA,CAAA,KAEtB,OAAO,EAAA,CAGR,OAAKH,CAAAA,CAAQ,MAAA,CAEN,CAAA,EAAA,EAAKA,CAAA,CAAA,EAAA,CAAA,CAFgB,EAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAKtB,SAASK,CAAAA,CAAYN,CAAAA,CAA6B,CACxD,GAAI,OAAOA,CAAAA,EAAU,QAAA,CACpB,OAAKA,CAAAA,CAAM,MAAA,CAEJO,CAAAA,CAAoBP,CAAA,CAAA,CAFDA,CAAAA,CAK3B,IAAMQ,CAAAA,CAAkB,EAAA,CAExB,IAAA,GAAW,CAACC,CAAAA,CAAKvI,CAAA,CAAA,GAAU,MAAA,CAAO,OAAA,CAAQ8H,CAAA,CAAA,CAAQ,CACjD,GAAI9H,CAAAA,EAAU,IAAA,EAA+BA,CAAAA,GAAU,EAAA,CAAI,SAE3D,IAAMwI,CAAAA,CAAaC,CAAAA,CAAsBF,CAAA,CAAA,CACnCG,CAAAA,CAAeD,CAAAA,CAAsB,MAAA,CAAOzI,CAAA,CAAM,CAAA,CAExDsI,CAAAA,CAAM,IAAA,CAAK,CAAA,EAAGE,CAAA,CAAA,EAAA,EAAeE,CAAA,CAAA,CAAA,CAAa,EAAA,CAG3C,OAAKJ,CAAAA,CAAM,MAAA,CAEJA,CAAAA,CAAM,IAAA,EAAA,CAAO,IAAA,CAAK,GAAA,CAAA,CAFC,EAAA,CAAA,CAAA,CAAA,WAAA,CAAA,CAAA,CAKpB,SAASG,CAAAA,CAAsBF,CAAAA,CAAqB,CAE1D,OADmB,kBAAA,CAAmBA,CAAA,CAAA,CACpB,OAAA,CAAQ,IAAA,CAAM,KAAA,CAAA,CAAA,CAAA,CAAA,qBAAA,CAAA,CAAA,CAG1B,SAASF,CAAAA,CAAoBP,CAAAA,CAAuB,CAC1D,OAAOA,CAAAA,CAAM,QAAQ,OAAA,CAAS,KAAA,CAAA,CAAO,OAAA,CAAQ,OAAA,CAAS,KAAA,CAAA,CAAA,CAAA,CAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,EAAA,GAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAYhD,MAAMa,CAA8C,CAC1D,OAAiB7I,CAAA,EAAsB,aAAA,CAQvC,gBAAA,CAAmB,KAAA,CAEnB,MAAA,CAEA,WAAA,CACUkE,CAAAA,CACA4E,CAAAA,CACR,CAFQ,IAAA,CAAA,GAAA,CAAA5E,CAAAA,CACA,IAAA,CAAA,UAAA,CAAA4E,EAAAA,CAGV,MAAA,EAAiB,CAChB,OAAO,KAAK,GAAA,CAIb,KAAA,EAAQ,CACP,OAAO,IAAID,CAAAA,CAAW,IAAA,CAAK,GAAA,CAAK,IAAA,CAAK,UAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAKxC,IAAarC,EAAAA,CAAb,KAA4F,CAC3F,OAAiBxG,CAAA,EAAsB,aAAA,CAIvC,WAAA,CAAqBgB,CAAAA,CAAa,CAAb,IAAA,CAAA,IAAA,CAAAA,EAAAA,CAErB,MAAA,EAAc,CACb,OAAO,IAAIiE,CAAAA,CAAI,CAAC,IAAA,CAAK,CAAA,CAAA,CAAA,CAwCvB,IAAM8D,EAAAA,CAAgB,MAAA,CAAO,GAAA,CAAI,uBAAA,CAAA,CAEX3C,EAAAA,CAAtB,KAIE,CACD,OAAiBpG,CAAA,EAAsB,MAAA,CAWvC,CAACwE,CAAA,EAWD,CAACuE,EAAA,EAAiB,IAAA,CAGlB,IAAYlI,CAAA,CAAA,EAAa,CACxB,OAAO,IAAA,CAAK2D,CAAA,EAAgB,IAAA,CAI7B,IAAYpB,EAAA,CAAA,EAAe,CAC1B,OAAO,IAAA,CAAKoB,CAAA,CAAA,CAAgB,MAAA,CAI7B,IAAYf,EAAA,CAAA,EAAW,CACtB,OAAO,IAAA,CAAKe,CAAA,CAAA,CAAgB,OAAA,CAI7B,IAAYjB,EAAA,CAAA,EAAgB,CAC3B,OAAO,IAAA,CAAKiB,CAAA,CAAA,CAAgB,YAAA,CAI7B,IAAYnB,EAAA,GAAgB,CAC3B,OAAQ,IAAA,CAAKmB,CAAA,CAAA,CAAgB,cAAA,CAK9B,WAAA,CACC,CAAE,IAAA,CAAAxD,CAAAA,CAAM,MAAA,CAAA6C,CAAAA,CAAQ,cAAA,CAAAmF,CAAAA,CAAgB,KAAA,CAAAnE,CAAA,CAAA,CAM/B,CACD,IAAA,CAAKL,CAAA,CAAA,CAAkB,CACtB,IAAA,CAAAxD,CAAAA,CACA,YAAA,CAAcA,CAAAA,CACd,MAAA,CAAA6C,CAAAA,CACA,cAAA,CAAAmF,CAAAA,CACO,MAAAnE,CAAAA,CACP,UAAA,CAAY,CAACA,CAAAA,CACb,OAAA,CAAS,KAAA,EAAA,CAAA,CAAA,CAKZ,SAAgBoE,EAAAA,CAAOC,CAAAA,CAA6B,CACnD,OAAO,OAAOA,CAAAA,EAAS,QAAA,EAAYA,CAAAA,GAAS,IAAA,EAAQH,EAAAA,IAAiBG,CAAAA,CAgBtE1I,CAAAA,CAAO,SAAA,CAAU,MAAA,CAAS,UAAW,CACpC,OAAO,IAAIyE,CAAAA,CAAI,CAAC,IAAA,CAAK,CAAA,CAAA,CAGtBhB,GAAS,SAAA,CAAU,MAAA,CAAS,UAAW,CACtC,OAAO,IAAIgB,CAAAA,CAAI,CAAC,IAAA,CAAK,CAAA,CAAA,CC/UtB,SAAgBkE,EAAAA,CACf1I,CAAAA,CAKD,CACC,OAAQR,CAAAA,CAAGQ,CAAAA,CAAOmD,CAAA,CAAA,CACfnD,CAAAA,CAAMmD,CAAAA,CAAM,OAAO,OAAA,CAAA,CACnB3D,CAAAA,CAAGQ,CAAAA,CAAO2F,EAAA,CAAA,CACV3F,CAAAA,CAAM+D,CAAA,CAAA,CAAgB,cAAA,CACtB/D,CAAAA,CAAM,CAAA,CAAE,cAAA,CA8CZ,SAAgB2I,CAAAA,CAEdC,CAAAA,CAAiCC,CAAAA,CAAwB,CAC1D,OAAO,CACN,IAAA,CAAM,OAAOD,CAAAA,EAAM,QAAA,EAAYA,CAAAA,CAAE,MAAA,CAAS,CAAA,CAAIA,CAAAA,CAAI,EAAA,CAClD,MAAA,CAAQ,OAAOA,CAAAA,EAAM,QAAA,CAAWA,CAAAA,CAAIC,CAAAA,CAAAA,CAyFX,OAAO,WAAA,CAAgB,GAAA,CAAc,IAAA,CAAO,IAAI,YAQ3E,SAAgBC,EAAAA,CAAWrJ,CAAAA,CAAyB,CACnD,OAAA,CAAS,OAAOA,CAAAA,EAAU,QAAA,EAAYA,CAAAA,GAAU,IAAA,EAAS,OAAOA,CAAAA,EAAU,UAAA,GAAe,YAAA,GAAgBA,CAAAA,EACrG,KAAA,CAAM,OAAA,CAAQA,CAAAA,CAAM,UAAA,CAAA,EACpBA,CAAAA,CAAM,UAAA,CAAW,MAAA,CAAS,CAAA,CAkC/B,IAAasJ,CAAAA,CAAY,CACxB,QAAA,CAAU,IAAA,CACV,QAAA,CAAU,GAAA,CACV,iBAAA,CAAmB,GAAA,CACnB,SAAA,CAAW,MAAA,CACX,SAAA,CAAW,KAAA,CACX,kBAAA,CAAoB,KAAA,CACpB,SAAA,CAAW,QAAA,CACX,SAAA,CAAW,OAAA,CACX,kBAAA,CAAoB,QAAA,CACpB,SAAA,CAAW,WAAA,CACX,SAAA,CAAW,UAAA,CACX,kBAAA,CAAoB,UAAA,CACpB,SAAA,CAAW,gBAAA,CACX,SAAA,CAAW,cAAA,CACX,kBAAA,CAAoB,cAAA,CACpB,SAAA,CAAW,CAAC,oBAAA,CACZ,SAAA,CAAW,oBAAA,CACX,kBAAA,CAAoB,qBAAA,CAAA,CC1wBrB,IAAaC,EAAAA,CAAb,cAAuCxG,EAIpC,CACF,OAA0BjD,CAAA,EAAsB,mBAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAc,CACzB,KAAA,CAAMA,CAAAA,CAAM,cAAA,CAAgB,YAAA,EAAA,CAIpB,MAAMP,CAAAA,CAAqB,CACnC,OAAO,IAAIiJ,EAAAA,CAAWjJ,CAAAA,CAAO,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAIvBiJ,EAAAA,CAAb,cAAgClH,CAAyB,CACxD,OAA0BxC,CAAA,EAAsB,YAAA,CAG9B,KAAA,CAAQ,eAAA,CAE1B,UAAA,EAAqB,CACpB,OAAO,QAAA,CAAA,CAAA,CAII2J,EAAAA,CAAb,cAAuC1G,EAIpC,CACF,OAA0BjD,CAAA,EAAsB,oBAEhD,WAAA,CAAYgB,CAAAA,CAAc,CACzB,KAAA,CAAMA,CAAAA,CAAM,cAAA,CAAgB,YAAA,EAAA,CAIpB,KAAA,CAAMP,CAAAA,CAAqB,CACnC,OAAO,IAAImJ,EAAAA,CAAWnJ,CAAAA,CAAO,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAIvBmJ,EAAAA,CAAb,cAAgCpH,CAAyB,CACxD,OAA0BxC,CAAA,EAAsB,YAAA,CAG9B,KAAA,CAAQ,QAAA,CAE1B,UAAA,EAAqB,CACpB,OAAO,QAAA,CAAA,CAAA,CAII6J,EAAAA,CAAb,cAA2C5G,EAIxC,CACF,OAA0BjD,CAAA,EAAsB,uBAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAc,CACzB,KAAA,CAAMA,CAAAA,CAAM,cAAA,CAAgB,gBAAA,EAAA,CAIpB,KAAA,CAAMP,CAAAA,CAAqB,CACnC,OAAO,IAAIqJ,EAAAA,CAAerJ,CAAAA,CAAO,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAI3BqJ,EAAAA,CAAb,cAAoCtH,CAAyB,CAC5D,OAA0BxC,CAAA,EAAsB,gBAAA,CAG9B,KAAA,CAAQ,eAAA,CAE1B,UAAA,EAAqB,CACpB,OAAO,QAAA,CAAA,CAAA,CAeT,SAAgB+J,EAAAA,CAAOV,CAAAA,CAA4BC,CAAAA,CAAoB,CACtE,GAAM,CAAE,IAAA,CAAAtI,CAAAA,CAAM,MAAA,CAAAN,CAAA,CAAA,CAAW0I,CAAAA,CAAuCC,CAAAA,CAAGC,CAAA,CAAA,CACnE,OAAI5I,CAAAA,CAAO,IAAA,GAAS,QAAA,CACZ,IAAI+I,EAAAA,CAAkBzI,CAAA,CAAA,CAE1BN,CAAAA,CAAO,IAAA,GAAS,QAAA,CACZ,IAAImJ,EAAAA,CAAsB7I,CAAA,CAAA,CAE3B,IAAI2I,EAAAA,CAAkB3I,CAAA,CAAA,CCxG9B,IAAagJ,EAAAA,CAAb,cAA0ClI,CAMvC,CACF,OAA0B9B,CAAA,EAAsB,sBAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAc,CACzB,KAAA,CAAMA,CAAAA,CAAM,cAAA,CAAgB,eAAA,EAC5B,IAAA,CAAK,MAAA,CAAO,UAAA,CAAa,IAAA,CACzB,IAAA,CAAK,MAAA,CAAO,OAAA,CAAU,KAAA,CAId,KAAA,CAAMP,CAAAA,CAAqB,CACnC,OAAO,IAAIwJ,EAAAA,CACVxJ,CAAAA,CACA,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAKKwJ,EAAAA,CAAb,cAAmCzH,CAAyB,CAC3D,OAA0BxC,CAAA,EAAsB,eAAA,CAG9B,KAAA,CAAQ,kBAAA,CAE1B,UAAA,EAAqB,CACpB,OAAO,WAAA,CAAA,CAAA,CAIIkK,EAAAA,CAAb,cAA0CpI,CAMvC,CACF,OAA0B9B,CAAA,EAAsB,sBAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAc,CACzB,KAAA,CAAMA,CAAAA,CAAM,cAAA,CAAgB,eAAA,CAAA,CAC5B,IAAA,CAAK,MAAA,CAAO,UAAA,CAAa,IAAA,CACzB,IAAA,CAAK,MAAA,CAAO,OAAA,CAAU,KAAA,CAId,KAAA,CAAMP,CAAAA,CAAqB,CACnC,OAAO,IAAI0J,GACV1J,CAAAA,CACA,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAKK0J,EAAAA,CAAb,cAAmC3H,CAAyB,CAC3D,OAA0BxC,CAAA,EAAsB,eAAA,CAG9B,KAAA,CAAQ,WAAA,CAE1B,UAAA,EAAqB,CACpB,OAAO,WAAA,CAAA,CAAA,CAeT,SAAgBoK,EAAAA,CAAUf,CAAAA,CAA+BC,CAAAA,CAAuB,CAC/E,GAAM,CAAE,IAAA,CAAAtI,CAAAA,CAAM,MAAA,CAAAN,CAAA,CAAA,CAAW0I,EAA0CC,CAAAA,CAAGC,CAAA,CAAA,CACtE,OAAI5I,CAAAA,CAAO,IAAA,GAAS,QAAA,CACZ,IAAIsJ,EAAAA,CAAqBhJ,CAAA,CAAA,CAE1B,IAAIkJ,EAAAA,CAAqBlJ,CAAA,CAAA,CCvFjC,IAAaqJ,EAAAA,CAAb,cAAsCvI,CAInC,CACF,OAA0B9B,CAAA,EAAsB,kBAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAc,CACzB,KAAA,CAAMA,CAAAA,CAAM,SAAA,CAAW,WAAA,EAAA,CAIf,KAAA,CAAMP,CAAAA,CAAqB,CACnC,OAAO,IAAI6J,EAAAA,CAAU7J,CAAAA,CAAO,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAItB6J,EAAAA,CAAb,cAA+B9H,CAAoB,CAClD,OAA0BxC,CAAA,EAAsB,WAAA,CAG9B,KAAA,CAAQ,MAAA,CAE1B,UAAA,EAAqB,CACpB,OAAO,SAAA,CAAA,CAAA,CAIT,SAAgBuK,CAAAA,CAAQvJ,CAAAA,CAAiC,CACxD,OAAO,IAAIqJ,EAAAA,CAAiBrJ,CAAAA,EAAQ,EAAA,CAAA,CCxBrC,IAAawJ,EAAAA,CAAb,cAAgG1I,CAG9F,CACD,OAA0B9B,CAAA,EAAsB,eAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAcN,CAAAA,CAA6B,CACtD,KAAA,CAAMM,CAAAA,CAAMN,CAAAA,CAAO,IAAA,EAAM,MAAA,CAAS,aAAA,CAAgB,QAAA,CAAU,QAAA,CAAA,CAC5D,IAAA,CAAK,MAAA,CAAO,MAAA,CAASA,CAAAA,CAAO,QAAU,CAAA,CACtC,IAAA,CAAK,MAAA,CAAO,SAAA,CAAYA,CAAAA,CAAO,MAAA,GAAW,MAAA,CAC1C,IAAA,CAAK,MAAA,CAAO,UAAA,CAAaA,CAAAA,CAAO,KAAA,CAIxB,KAAA,CAAMD,CAAAA,CAAqB,CACnC,OAAO,IAAIgK,EAAAA,CACVhK,CAAAA,CACA,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAKKgK,EAAAA,CAAb,cACSjI,CACT,CACC,OAA0BxC,CAAA,EAAsB,QAAA,CAG9B,MAAQ,MAAA,CAER,UAAA,CACD,SAAA,CAEjB,WAAA,CAAYS,CAAAA,CAAqBC,CAAAA,CAAwC,CACxE,KAAA,CAAMD,CAAAA,CAAOC,CAAA,CAAA,CACb,IAAA,CAAK,UAAA,CAAaA,CAAAA,CAAO,UAAA,CACzB,IAAA,CAAK,SAAA,CAAYA,CAAAA,CAAO,UAAA,CAGzB,UAAA,EAAqB,CACpB,OAAO,IAAA,CAAK,SAAA,CAAY,CAAA,KAAA,EAAQ,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAAY,MAAA,CAAA,CAAA,CAsBnD,SAAgBgK,GAAKrB,CAAAA,CAA2BC,CAAAA,CAAkB,EAAA,CAAS,CAC1E,GAAM,CAAE,IAAA,CAAAtI,CAAAA,CAAM,MAAA,CAAAN,CAAA,CAAA,CAAW0I,CAAAA,CAAqCC,CAAAA,CAAGC,CAAA,CAAA,CACjE,OAAO,IAAIkB,EAAAA,CAAcxJ,CAAAA,CAAMN,CAAA,CAAA,CCrEhC,IAAaiK,EAAAA,CAAb,cAAmC7I,CAIhC,CACF,OAA0B9B,CAAA,EAAsB,gBAEhD,WAAA,CAAYgB,CAAAA,CAAc,CACzB,KAAA,CAAMA,CAAAA,CAAM,aAAA,CAAe,QAAA,EAAA,CAInB,KAAA,CAAMP,CAAAA,CAAqB,CACnC,OAAO,IAAImK,EAAAA,CAAOnK,CAAAA,CAAO,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAInBmK,EAAAA,CAAb,cAA4BpI,CAAwB,CACnD,OAA0BxC,CAAA,EAAsB,QAAA,CAG9B,KAAA,CAAQ,MAAA,CAE1B,UAAA,EAAqB,CACpB,OAAO,MAAA,CAAA,CAAA,CAIT,SAAgB6K,EAAAA,CAAK7J,CAAAA,CAA8B,CAClD,OAAO,IAAI2J,EAAAA,CAAc3J,CAAAA,EAAQ,EAAA,CAAA,CCjClC,SAAS8J,EAAAA,CAAkBC,CAAAA,CAAqBC,CAAAA,CAAmBC,CAAAA,CAAqC,CACvG,IAAA,IAAS,CAAA,CAAID,CAAAA,CAAW,CAAA,CAAID,CAAAA,CAAY,MAAA,CAAQ,CAAA,EAAA,CAAK,CACpD,IAAML,CAAAA,CAAOK,CAAAA,CAAY,CAAA,CAAA,CAEzB,GAAIL,CAAAA,GAAS,IAAA,CAAM,CAClB,CAAA,EAAA,CACA,QAAA,CAGD,GAAIA,CAAAA,GAAS,GAAA,CACZ,OAAO,CAACK,CAAAA,CAAY,KAAA,CAAMC,CAAAA,CAAW,CAAA,CAAA,CAAG,OAAA,CAAQ,KAAA,CAAO,EAAA,CAAA,CAAK,CAAA,CAAI,CAAA,CAAA,CAGjE,GAAI,CAAAC,CAAAA,GAIAP,CAAAA,GAAS,GAAA,EAAOA,CAAAA,GAAS,GAAA,CAAA,CAC5B,OAAO,CAACK,CAAAA,CAAY,KAAA,CAAMC,CAAAA,CAAW,CAAA,CAAA,CAAG,OAAA,CAAQ,KAAA,CAAO,EAAA,CAAA,CAAK,CAAA,CAAA,CAI9D,OAAO,CAACD,CAAAA,CAAY,KAAA,CAAMC,CAAA,CAAA,CAAW,OAAA,CAAQ,KAAA,CAAO,EAAA,CAAA,CAAKD,CAAAA,CAAY,MAAA,CAAA,CAGtE,SAAgBG,EAAAA,CAAmBH,CAAAA,CAAqBC,CAAAA,CAAY,CAAA,CAAoB,CACvF,IAAMpG,CAAAA,CAAgB,EAAA,CAClB,CAAA,CAAIoG,CAAAA,CACJG,CAAAA,CAAkB,KAAA,CAEtB,KAAO,CAAA,CAAIJ,CAAAA,CAAY,MAAA,EAAQ,CAC9B,IAAML,CAAAA,CAAOK,CAAAA,CAAY,CAAA,CAAA,CAEzB,GAAIL,CAAAA,GAAS,GAAA,CAAK,CAAA,CACbS,CAAAA,EAAmB,CAAA,GAAMH,CAAAA,GAC5BpG,CAAAA,CAAO,IAAA,CAAK,EAAA,CAAA,CAEbuG,CAAAA,CAAkB,IAAA,CAClB,IACA,QAAA,CAKD,GAFAA,CAAAA,CAAkB,KAAA,CAEdT,CAAAA,GAAS,IAAA,CAAM,CAClB,CAAA,EAAK,CAAA,CACL,QAAA,CAGD,GAAIA,CAAAA,GAAS,GAAA,CAAK,CACjB,GAAM,CAACxK,CAAAA,CAAO8K,CAAA,CAAA,CAAaF,EAAAA,CAAkBC,CAAAA,CAAa,CAAA,CAAI,CAAA,CAAG,IAAA,CAAA,CACjEnG,CAAAA,CAAO,IAAA,CAAK1E,CAAA,CAAA,CACZ,CAAA,CAAI8K,EACJ,QAAA,CAGD,GAAIN,CAAAA,GAAS,GAAA,CACZ,OAAO,CAAC9F,CAAAA,CAAQ,CAAA,CAAI,CAAA,CAAA,CAGrB,GAAI8F,CAAAA,GAAS,GAAA,CAAK,CACjB,GAAM,CAACxK,CAAAA,CAAO8K,CAAA,CAAA,CAAaE,EAAAA,CAAmBH,CAAAA,CAAa,CAAA,CAAI,CAAA,CAAA,CAC/DnG,CAAAA,CAAO,IAAA,CAAK1E,CAAA,CAAA,CACZ,CAAA,CAAI8K,CAAAA,CACJ,SAGD,GAAM,CAAC9K,CAAAA,CAAOkL,CAAA,CAAA,CAAgBN,EAAAA,CAAkBC,CAAAA,CAAa,CAAA,CAAG,KAAA,CAAA,CAChEnG,CAAAA,CAAO,IAAA,CAAK1E,CAAA,CAAA,CACZ,CAAA,CAAIkL,EAAAA,CAGL,OAAO,CAACxG,CAAAA,CAAQ,CAAA,CAAA,CAGjB,SAAgByG,EAAAA,CAAaN,CAAAA,CAA4B,CACxD,GAAM,CAACnG,CAAA,CAAA,CAAUsG,EAAAA,CAAmBH,EAAa,CAAA,CAAA,CACjD,OAAOnG,CAAAA,CC2IR,IAAM0G,EAAAA,CAAgE,CACrE,IAAA,CAAM,UAAA,CACN,OAAA,CAAS,KAAA,CACT,IAAA,CAAM,KAAA,CACN,IAAA,CAAM,QAAA,CACN,OAAA,CAAS,SAAA,CACT,IAAA,CAAM,QAAA,CACN,MAAA,CAAQ,QAAA,CACR,kBAAA,CAAoB,QAAA,CACpB,OAAA,CAAS,aAAA,CACT,OAAA,CAAS,QAAA,CACT,OAAA,CAAS,YACT,SAAA,CAAW,MAAA,CACX,mBAAA,CAAqB,SAAA,CACrB,qBAAA,CAAuB,QAAA,CACvB,wBAAA,CAA0B,MAAA,CAC1B,0BAAA,CAA4B,aAAA,CAC5B,6BAAA,CAA+B,WAAA,CAC/B,OAAA,CAAS,MAAA,CACT,aAAA,CAAe,QAAA,CAAA,CAGhB,SAAgBC,EAAAA,CAAmBpL,CAAAA,CAAc,CAChD,OAAQmL,EAAAA,CAAkEnL,CAAA,CAAA,EAASA,CAAAA,CCzNpF,IAAaqL,EAAAA,CAAb,cAAwF1J,CAMtF,CACD,OAA0B9B,CAAA,EAAsB,uBAAA,CAEhD,WAAA,CACCgB,CAAAA,CACAyK,CAAAA,CACAC,CAAAA,CACC,CACD,KAAA,CAAM1K,CAAAA,CAAM,QAAA,CAAU,gBAAA,CAAA,CACtB,IAAA,CAAK,MAAA,CAAO,WAAA,CAAcyK,CAAAA,CAC1B,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAmBC,EAAAA,CAIvB,KAAA,CAAMjL,CAAAA,CAAqB,CACnC,OAAO,IAAIkL,EAAAA,CACVlL,CAAAA,CACA,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAKKkL,EAAAA,CAAb,cAAiFnJ,CAAmB,CACnG,OAA0BxC,CAAA,EAAsB,gBAAA,CAG9B,KAAA,CAEV,OAAA,CACC,gBAAA,CACA,oBAAA,CAET,WAAA,CACCS,CAAAA,CACAC,CAAAA,CACC,CACD,KAAA,CAAMD,CAAAA,CAAOC,CAAA,CAAA,CACb,IAAA,CAAK,OAAA,CAAUA,CAAAA,CAAO,gBAAA,CAAiB,QAAA,CAASA,CAAAA,CAAO,WAAA,CAAA,CACvD,IAAA,CAAK,gBAAA,CAAmBA,CAAAA,CAAO,gBAAA,CAAiB,QAAA,EAAY,IAAA,CAAK,gBAAA,CACjE,IAAA,CAAK,mBAAqBA,CAAAA,CAAO,gBAAA,CAAiB,UAAA,EAAc,IAAA,CAAK,kBAAA,CACrE,IAAA,CAAK,gBAAA,CAAmBA,CAAAA,CAAO,gBAAA,CAAiB,QAAA,CAChD,IAAA,CAAK,oBAAA,CAAuBA,CAAAA,CAAO,gBAAA,CAAiB,aAAA,CACpD,IAAMkL,CAAAA,CACL,OAAOlL,CAAAA,CAAO,gBAAA,CAAiB,KAAA,EAAU,QAAA,EAAY,OAAOA,CAAAA,CAAO,gBAAA,CAAiB,KAAA,CAAU,GAAA,CAC3FA,CAAAA,CAAO,gBAAA,CAAiB,KAAA,CACxBA,CAAAA,CAAO,gBAAA,CAAiB,KAAA,CAAMA,CAAAA,CAAO,WAAA,CAAA,CACzC,IAAA,CAAK,KAAA,CAAQ,OAAOkL,CAAAA,EAAa,QAAA,CAC9BL,EAAAA,CAAmBK,CAAA,CAAA,CACnB,MAAA,CAEC,IAAA,CAAK,UAAA,EAAclL,CAAAA,CAAO,gBAAA,CAAiB,QAAA,GAC9C,IAAA,CAAK,gBAAA,CAAoBR,CAAAA,EAA4B,CACpD,GAAIA,CAAAA,GAAU,IAAA,CAAM,OAAOA,CAAAA,CAC3B,IAAM2L,CAAAA,CAAM,OAAO3L,CAAAA,EAAU,QAAA,CAAWmL,GAAanL,CAAA,CAAA,CAASA,CAAAA,CAC9D,OAAO,IAAA,CAAK,oBAAA,CAAqB2L,CAAAA,CAAKnL,CAAAA,CAAO,gBAAA,CAAiB,QAAA,CAAW,IAAA,CAAK,UAAA,CAAA,CAAA,EAAA,CAMzE,oBAAA,CAAqBR,CAAAA,CAAgByC,CAAAA,CAAiCC,CAAAA,CAAwB,CACrG,OAAIA,CAAAA,CAAQ,CAAA,EAAK,KAAA,CAAM,OAAA,CAAQ1C,CAAA,CAAA,CACvBA,CAAAA,CAAM,GAAA,CAAKK,CAAAA,EAAMA,CAAAA,GAAM,IAAA,CAAO,IAAA,CAAO,IAAA,CAAK,qBAAqBA,CAAAA,CAAGoC,CAAAA,CAAQC,CAAAA,CAAQ,CAAA,CAAE,CAAA,CAErFD,CAAAA,CAAOzC,CAAA,CAAA,CAGf,UAAA,EAAqB,CACpB,OAAO,IAAA,CAAK,OAAA,CAAA,CAAA,CAwPd,SAAgB4L,EAAAA,CACfJ,CAAAA,CAmBD,CACC,OAAA,CACCrC,CAAAA,CACAC,CAAAA,GACmD,CACnD,GAAM,CAAE,IAAA,CAAAtI,CAAAA,CAAM,MAAA,CAAAN,CAAA,CAAA,CAAW0I,CAAAA,CAAoCC,CAAAA,CAAGC,CAAA,CAAA,CAChE,OAAO,IAAIkC,EAAAA,CAAsBxK,CAAAA,CAAMN,CAAAA,CAAQgL,CAAA,CAAA,CAAA,CC7WjD,IAAsBK,EAAAA,CAAtB,cAGUjK,CAAmC,CAC5C,OAA0B9B,CAAA,EAAsB,yBAAA,CAMhD,UAAA,EAAkC,CACjC,OAAO,IAAA,CAAK,OAAA,CAAQkE,CAAAA,CAAAA,KAAAA,CAAG,CAAA,CAAA,CAAA,CCVzB,IAAa8H,EAAAA,CAAb,cAAmCD,EAIhC,CACF,OAA0B/L,CAAA,EAAsB,eAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAc,CACzB,KAAA,CAAMA,CAAAA,CAAM,aAAA,CAAe,QAAA,EAAA,CAInB,KAAA,CAAMP,CAAAA,CAAqB,CACnC,OAAO,IAAIwL,EAAAA,CAAOxL,CAAAA,CAAO,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAInBwL,EAAAA,CAAb,cAA4BzJ,CAAwB,CACnD,OAA0BxC,CAAA,EAAsB,QAAA,CAG9B,KAAA,CAAQ,MAAA,CAE1B,UAAA,EAAqB,CACpB,OAAO,OAGC,gBAAA,CAAmB,SAASE,CAAAA,CAA8B,CAClE,OAAI,OAAOA,CAAAA,EAAU,QAAA,CAAiBA,CAAAA,CAC/BA,CAAAA,CAAM,WAAA,EAAA,CAAA,CAAA,CAIFgM,EAAAA,CAAb,cAAyCH,EAItC,CACF,OAA0B/L,CAAA,EAAsB,qBAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAc,CACzB,KAAA,CAAMA,CAAAA,CAAM,aAAA,CAAe,cAAA,EAAA,CAInB,KAAA,CAAMP,CAAAA,CAAqB,CACnC,OAAO,IAAI0L,EAAAA,CACV1L,CAAAA,CACA,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAKK0L,EAAAA,CAAb,cAAkC3J,CAAwB,CACzD,OAA0BxC,CAAA,EAAsB,cAAA,CAG9B,KAAA,CAAQ,aAAA,CAE1B,UAAA,EAAqB,CACpB,OAAO,MAAA,CAGC,gBAAA,CAAoBE,CAAAA,EACxB,OAAOA,CAAAA,EAAU,QAAA,CAAiBA,CAAAA,CAC/BA,CAAAA,CAAM,WAAA,EAAA,CAAA,CAef,SAAgBkM,EAAAA,CAAK/C,CAAAA,CAA2BC,CAAAA,CAAkB,CACjE,GAAM,CAAE,IAAA,CAAAtI,CAAAA,CAAM,MAAA,CAAAN,CAAA,CAAA,CAAW0I,CAAAA,CAAqCC,CAAAA,CAAGC,CAAA,CAAA,CACjE,OAAI5I,CAAAA,EAAQ,IAAA,GAAS,MAAA,CACb,IAAIsL,EAAAA,CAAchL,CAAA,CAAA,CAEnB,IAAIkL,EAAAA,CAAoBlL,CAAA,CAAA,CCvFhC,IAAaqL,EAAAA,CAAb,cAA8CvK,CAI3C,CACF,OAA0B9B,CAAA,EAAsB,0BAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAc,CACzB,KAAA,CAAMA,CAAAA,CAAM,eAAA,CAAiB,mBAAA,EAAA,CAIrB,KAAA,CAAMP,CAAAA,CAAqB,CACnC,OAAO,IAAI6L,EAAAA,CACV7L,CAAAA,CACA,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAKK6L,EAAAA,CAAb,cAAuC9J,CAA0B,CAChE,OAA0BxC,CAAA,EAAsB,mBAAA,CAG9B,KAAA,CAAQ,QAAA,CAE1B,UAAA,EAAqB,CACpB,OAAO,kBAAA,CAAA,CAAA,CAIT,SAAgBuM,EAAAA,CAAgBvL,CAAAA,CAAyC,CACxE,OAAO,IAAIqL,EAAAA,CAAyBrL,CAAAA,EAAQ,EAAA,CAAA,CChC7C,IAAawL,EAAAA,CAAb,cAAmC1K,CAIhC,CACF,OAA0B9B,CAAA,EAAsB,eAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAc,CACzB,KAAA,CAAMA,CAAAA,CAAM,aAAA,CAAe,QAAA,EAAA,CAInB,KAAA,CAAMP,CAAAA,CAAqB,CACnC,OAAO,IAAIgM,EAAAA,CAAOhM,CAAAA,CAAO,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAInBgM,EAAAA,CAAb,cAA4BjK,CAAwB,CACnD,OAA0BxC,CAAA,EAAsB,QAAA,CAG9B,KAAA,CAAQ,MAAA,CAE1B,UAAA,EAAqB,CACpB,OAAO,MAAA,CAAA,CAAA,CAIT,SAAgB0M,EAAAA,CAAK1L,CAAAA,CAA8B,CAClD,OAAO,IAAIwL,EAAAA,CAAcxL,CAAAA,EAAQ,EAAA,CAAA,CC5BlC,IAAa2L,EAAAA,CAAb,cAAsC1J,EAInC,CACF,OAA0BjD,CAAA,EAAsB,kBAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAc,CACzB,KAAA,CAAMA,CAAAA,CAAM,cAAA,CAAgB,WAAA,EAAA,CAIpB,KAAA,CAAMP,CAAAA,CAAqB,CACnC,OAAO,IAAImM,EAAAA,CAAUnM,CAAAA,CAAO,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAItBmM,EAAAA,CAAb,cAA+BpK,CAAyB,CACvD,OAA0BxC,CAAA,EAAsB,WAAA,CAG9B,KAAA,CAAQ,KAAA,CAE1B,UAAA,EAAqB,CACpB,OAAO,SAAA,CAAA,CAAA,CAIT,SAAgB6M,CAAAA,CAAQ7L,CAAAA,CAAiC,CACxD,OAAO,IAAI2L,EAAAA,CAAiB3L,CAAAA,EAAQ,EAAA,CAAA,CC5BrC,IAAa8L,EAAAA,CAAb,cAAuChL,CAIA,CACtC,OAA0B9B,CAAA,EAAsB,mBAAA,CAEhD,WAAA,CACCgB,CAAAA,CACA+L,CAAAA,CACC,CACD,KAAA,CAAM/L,CAAAA,CAAM,iBAAA,CAAmB,YAAA,CAAA,CAC/B,KAAK,MAAA,CAAO,cAAA,CAAiB+L,EAAAA,CAIrB,KAAA,CAAMtM,CAAAA,CAAqB,CACnC,OAAO,IAAIuM,EAAAA,CAAWvM,CAAAA,CAAO,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAIvBuM,EAAAA,CAAb,cAAgCxK,CAA4B,CAC3D,OAA0BxC,CAAA,EAAsB,YAAA,CAG9B,KAAA,CAAQ,UAAA,CAEjB,MAAA,CACA,SAAA,CAET,WAAA,CAAYS,CAAAA,CAAqBC,CAAAA,CAAqC,CACrE,KAAA,CAAMD,CAAAA,CAAOC,CAAA,EACb,IAAA,CAAK,MAAA,CAASA,CAAAA,CAAO,cAAA,CAAe,MAAA,CACpC,IAAA,CAAK,SAAA,CAAYA,CAAAA,CAAO,cAAA,CAAe,UAAA,CAGxC,UAAA,EAAqB,CAGpB,OAAO,CAAA,QAAA,EAFQ,IAAA,CAAK,MAAA,CAAS,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,CAAA,CAAA,CAAW,EAAA,CAAA,EAC/B,IAAA,CAAK,SAAA,CAAY,CAAA,CAAA,EAAI,IAAA,CAAK,SAAA,CAAA,CAAA,CAAA,CAAe,EAAA,CAAA,CAAA,CAAA,CAAA,CA8B7D,SAAgBuM,EAAAA,CAAS5D,EAA6BC,CAAAA,CAAoB,EAAA,CAAI,CAC7E,GAAM,CAAE,IAAA,CAAAtI,CAAAA,CAAM,MAAA,CAAAN,CAAA,CAAA,CAAW0I,CAAAA,CAAuCC,CAAAA,CAAGC,CAAA,CAAA,CACnE,OAAO,IAAIwD,EAAAA,CAAkB9L,CAAAA,CAAMN,CAAA,CAAA,CCxEpC,IAAawM,EAAAA,CAAb,cAAmCpL,CAMjC,CACD,OAA0B9B,CAAA,EAAsB,eAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAc,CACzB,KAAA,CAAMA,CAAAA,CAAM,aAAA,CAAe,QAAA,EAAA,CAInB,KAAA,CAAMP,CAAAA,CAAqB,CACnC,OAAO,IAAI0M,EAAAA,CAAO1M,CAAAA,CAAO,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAInB0M,EAAAA,CAAb,cAA4B3K,CAAwB,CACnD,OAA0BxC,CAAA,EAAsB,QAAA,CAG9B,KAAA,CAAQ,MAAA,CAE1B,WAAA,CAAYS,CAAAA,CAAqBC,CAAAA,CAAiC,CACjE,KAAA,CAAMD,CAAAA,CAAOC,CAAA,EAAA,CAGd,UAAA,EAAqB,CACpB,OAAO,MAAA,CAAA,CAAA,CAIT,SAAgB0M,EAAAA,CAAKpM,CAAAA,CAA8B,CAClD,OAAO,IAAIkM,EAAAA,CAAclM,CAAAA,EAAQ,EAAA,CAAA,CCnClC,IAAaqM,EAAAA,CAAb,cAAoCvL,CAIjC,CACF,OAA0B9B,CAAA,EAAsB,gBAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAc,CACzB,KAAA,CAAMA,CAAAA,CAAM,aAAA,CAAe,SAAA,EAAA,CAInB,MAAMP,CAAAA,CAAqB,CACnC,OAAO,IAAI6M,EAAAA,CAAQ7M,CAAAA,CAAO,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAIpB6M,EAAAA,CAAb,cAA6B9K,CAAwB,CACpD,OAA0BxC,CAAA,EAAsB,SAAA,CAG9B,KAAA,CAAQ,OAAA,CAE1B,WAAA,CAAYS,CAAAA,CAAqBC,CAAAA,CAAkC,CAClE,KAAA,CAAMD,CAAAA,CAAOC,CAAA,EAAA,CAGd,UAAA,EAAqB,CACpB,OAAO,OAAA,CAAA,CAAA,CAIT,SAAgB6M,EAAMvM,CAAAA,CAA+B,CACpD,OAAO,IAAIqM,EAAAA,CAAerM,CAAAA,EAAQ,EAAA,CAAA,CChCnC,IAAawM,EAAAA,CAAb,cAAmC1L,CAIhC,CACF,OAA0B9B,CAAA,EAAsB,eAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAc,CACzB,KAAA,CAAMA,CAAAA,CAAM,YAAA,CAAc,QAAA,EAAA,CAIlB,KAAA,CAAMP,CAAAA,CAAqB,CACnC,OAAO,IAAIgN,EAAAA,CACVhN,CAAAA,CACA,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAKKgN,EAAAA,CAAb,cAAiCjL,CAAuB,CACvD,OAA0BxC,CAAA,EAAsB,QAAA,CAG9B,KAAA,CAAQ,YAAA,CAEjB,IAAA,CAAO,OAAA,CAEhB,UAAA,EAAqB,CACpB,OAAO,MAAA,CAGC,gBAAA,CAAoBE,CAAAA,EACrB,CAAA,CAAA,EAAIA,CAAAA,CAAM,CAAA,CAAA,CAAA,CAAA,EAAMA,CAAAA,CAAM,CAAA,CAAA,CAAA,CAAA,EAAMA,CAAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAI9BwN,EAAAA,CAAb,cAAsC5L,CAInC,CACF,OAA0B9B,CAAA,EAAsB,kBAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAc,CACzB,KAAA,CAAMA,CAAAA,CAAM,aAAA,CAAe,WAAA,EAAA,CAInB,KAAA,CAAMP,CAAAA,CAAqB,CACnC,OAAO,IAAIkN,EAAAA,CACVlN,CAAAA,CACA,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAKKkN,EAAAA,CAAb,cAA+BnL,CAAwB,CACtD,OAA0BxC,CAAA,EAAsB,WAAA,CAG9B,KAAA,CAAQ,MAAA,CAEjB,IAAA,CAAO,KAAA,CAEhB,UAAA,EAAqB,CACpB,OAAO,MAAA,CAGC,gBAAA,CAAoBE,CAAAA,EACrB,CAAA,CAAA,EAAIA,CAAAA,CAAM,CAAA,CAAA,CAAA,EAAKA,CAAAA,CAAM,CAAA,CAAA,CAAA,EAAKA,CAAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAiBzC,SAAgB0N,EAAAA,CAAKvE,CAAAA,CAA+BC,CAAAA,CAAsB,CACzE,GAAM,CAAE,IAAA,CAAAtI,CAAAA,CAAM,MAAA,CAAAN,CAAA,CAAA,CAAW0I,CAAAA,CAAyCC,CAAAA,CAAGC,CAAA,CAAA,CACrE,OAAI,CAAC5I,CAAAA,EAAQ,IAAA,EAAQA,CAAAA,CAAO,IAAA,GAAS,OAAA,CAC7B,IAAI8M,EAAAA,CAAcxM,CAAA,CAAA,CAEnB,IAAI0M,EAAAA,CAAiB1M,CAAA,CAAA,CC7F7B,IAAa6M,EAAAA,CAAb,cAAsC/L,CAInC,CACF,OAA0B9B,CAAA,EAAsB,kBAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAc,CACzB,KAAA,CAAMA,CAAAA,CAAM,gBAAA,CAAkB,WAAA,EAAA,CAItB,KAAA,CAAMP,CAAAA,CAAqB,CACnC,OAAO,IAAIqN,EAAAA,CAAUrN,CAAAA,CAAO,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAItBqN,EAAAA,CAAb,cAA+BtL,CAA2B,CACzD,OAA0BxC,CAAA,EAAsB,WAAA,CAG9B,KAAA,CAAQ,SAAA,CAE1B,UAAA,EAAqB,CACpB,OAAO,SAAA,CAAA,CAAA,CAIT,SAAgB+N,EAAAA,CAAQ/M,CAAAA,CAAiC,CACxD,OAAO,IAAI6M,EAAAA,CAAiB7M,CAAAA,EAAQ,EAAA,CAAA,CC7BrC,IAAagN,EAAAA,CAAb,cAAuClM,CAIpC,CACF,OAA0B9B,CAAA,EAAsB,mBAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAc,CACzB,KAAA,CAAMA,CAAAA,CAAM,iBAAA,CAAmB,YAAA,EAAA,CAIvB,KAAA,CAAMP,CAAAA,CAAqB,CACnC,OAAO,IAAIwN,EAAAA,CAAWxN,CAAAA,CAAO,IAAA,CAAK,MAAA,IAIvBwN,EAAAA,CAAb,cAAgCzL,CAA4B,CAC3D,OAA0BxC,CAAA,EAAsB,YAAA,CAG9B,KAAA,CAAQ,UAAA,CAE1B,UAAA,EAAqB,CACpB,OAAO,UAAA,CAAA,CAAA,CAIT,SAAgBkO,EAAAA,CAASlN,CAAAA,CAAkC,CAC1D,OAAO,IAAIgN,EAAAA,CAAkBhN,CAAAA,EAAQ,EAAA,CAAA,CC5BtC,IAAamN,EAAAA,CAAb,cAAsCrM,CAUpC,CACD,OAA0B9B,CAAA,EAAsB,mBAEhD,WAAA,CAAYgB,CAAAA,CAAcoN,CAAAA,CAAoBC,CAAAA,CAAgB,CAC7D,KAAA,CAAMrN,CAAAA,CAAM,gBAAA,CAAkB,WAAA,CAAA,CAC9B,IAAA,CAAK,MAAA,CAAO,SAAA,CAAYoN,CAAAA,CACxB,IAAA,CAAK,MAAA,CAAO,KAAA,CAAQC,EAAAA,CAIZ,KAAA,CAAM5N,CAAAA,CAAqB,CACnC,OAAO,IAAI6N,EAAAA,CAAU7N,CAAAA,CAAO,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAItB6N,EAAAA,CAAb,cAA+B9L,CAA2B,CACzD,OAA0BxC,CAAA,EAAsB,WAAA,CAG9B,KAAA,CAAQ,SAAA,CAEjB,SAAA,CACA,KAAA,CAET,WAAA,CAAYS,CAAAA,CAAqBC,CAAAA,CAAoC,CACpE,KAAA,CAAMD,CAAAA,CAAOC,CAAA,CAAA,CACb,IAAA,CAAK,SAAA,CAAYA,CAAAA,CAAO,SAAA,CACxB,IAAA,CAAK,KAAA,CAAQA,CAAAA,CAAO,MAAA,CAGrB,UAAA,EAAqB,CACpB,OAAI,IAAA,CAAK,SAAA,GAAc,MAAA,EAAa,IAAA,CAAK,KAAA,GAAU,OAC3C,CAAA,QAAA,EAAW,IAAA,CAAK,SAAA,CAAA,EAAA,EAAc,IAAA,CAAK,KAAA,CAAA,CAAA,CAAA,CAChC,IAAA,CAAK,SAAA,GAAc,MAAA,CACtB,SAAA,CAEA,CAAA,QAAA,EAAW,IAAA,CAAK,SAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAKb6N,EAAAA,CAAb,cAA4CzM,CAU1C,CACD,OAA0B9B,CAAA,EAAsB,wBAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAcoN,CAAAA,CAAoBC,CAAAA,CAAgB,CAC7D,KAAA,CAAMrN,CAAAA,CAAM,QAAA,CAAU,iBAAA,EACtB,IAAA,CAAK,MAAA,CAAO,SAAA,CAAYoN,CAAAA,CACxB,IAAA,CAAK,MAAA,CAAO,KAAA,CAAQC,EAAAA,CAIZ,KAAA,CAAM5N,CAAAA,CAAqB,CACnC,OAAO,IAAI+N,EAAAA,CACV/N,CAAAA,CACA,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAKK+N,EAAAA,CAAb,cAAqChM,CAAmB,CACvD,OAA0BxC,CAAA,EAAsB,iBAAA,CAG9B,KAAA,CAAQ,gBAAA,CAEjB,SAAA,CACA,KAAA,CAET,WAAA,CAAYS,CAAAA,CAAqBC,EAA0C,CAC1E,KAAA,CAAMD,CAAAA,CAAOC,CAAA,CAAA,CACb,IAAA,CAAK,SAAA,CAAYA,CAAAA,CAAO,SAAA,CACxB,IAAA,CAAK,KAAA,CAAQA,CAAAA,CAAO,MAAA,CAGZ,gBAAA,CAAmB,MAAA,CAE5B,UAAA,EAAqB,CACpB,OAAI,IAAA,CAAK,SAAA,GAAc,MAAA,EAAa,IAAA,CAAK,KAAA,GAAU,MAAA,CAC3C,CAAA,QAAA,EAAW,IAAA,CAAK,SAAA,CAAA,EAAA,EAAc,IAAA,CAAK,KAAA,CAAA,CAAA,CAAA,CAChC,IAAA,CAAK,SAAA,GAAc,MAAA,CACtB,SAAA,CAEA,CAAA,QAAA,EAAW,IAAA,CAAK,SAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAKb+N,EAAAA,CAAb,cAA4C3M,CAU1C,CACD,OAA0B9B,CAAA,EAAsB,wBAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAcoN,CAAAA,CAAoBC,CAAAA,CAAgB,CAC7D,KAAA,CAAMrN,CAAAA,CAAM,cAAA,CAAgB,iBAAA,CAAA,CAC5B,IAAA,CAAK,MAAA,CAAO,SAAA,CAAYoN,CAAAA,CACxB,IAAA,CAAK,MAAA,CAAO,KAAA,CAAQC,GAIZ,KAAA,CAAM5N,CAAAA,CAAqB,CACnC,OAAO,IAAIiO,EAAAA,CACVjO,CAAAA,CACA,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAKKiO,EAAAA,CAAb,cAAqClM,CAAyB,CAC7D,OAA0BxC,CAAA,EAAsB,iBAAA,CAG9B,KAAA,CAAQ,gBAAA,CAEjB,SAAA,CACA,KAAA,CAET,WAAA,CAAYS,CAAAA,CAAqBC,CAAAA,CAA0C,CAC1E,KAAA,CAAMD,CAAAA,CAAOC,CAAA,CAAA,CACb,IAAA,CAAK,SAAA,CAAYA,EAAO,SAAA,CACxB,IAAA,CAAK,KAAA,CAAQA,CAAAA,CAAO,MAAA,CAGZ,gBAAA,CAAmB,MAAA,CAE5B,UAAA,EAAqB,CACpB,OAAI,IAAA,CAAK,SAAA,GAAc,MAAA,EAAa,IAAA,CAAK,KAAA,GAAU,MAAA,CAC3C,CAAA,QAAA,EAAW,IAAA,CAAK,SAAA,CAAA,EAAA,EAAc,IAAA,CAAK,KAAA,CAAA,CAAA,CAAA,CAChC,IAAA,CAAK,SAAA,GAAc,MAAA,CACtB,SAAA,CAEA,CAAA,QAAA,EAAW,IAAA,CAAK,SAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAqB1B,SAAgBiO,GAAQtF,CAAAA,CAA8BC,CAAAA,CAAqB,CAC1E,GAAM,CAAE,IAAA,CAAAtI,CAAAA,CAAM,MAAA,CAAAN,CAAA,CAAA,CAAW0I,CAAAA,CAAwCC,CAAAA,CAAGC,CAAA,CAAA,CAC9DsF,CAAAA,CAAOlO,CAAAA,EAAQ,IAAA,CACrB,OAAOkO,CAAAA,GAAS,QAAA,CACb,IAAIL,EAAAA,CAAuBvN,CAAAA,CAAMN,CAAAA,EAAQ,SAAA,CAAWA,CAAAA,EAAQ,KAAA,CAAA,CAC5DkO,CAAAA,GAAS,QAAA,CACT,IAAIH,EAAAA,CAAuBzN,CAAAA,CAAMN,CAAAA,EAAQ,SAAA,CAAWA,CAAAA,EAAQ,KAAA,CAAA,CAC5D,IAAIyN,EAAAA,CAAiBnN,CAAAA,CAAMN,CAAAA,EAAQ,SAAA,CAAWA,CAAAA,EAAQ,KAAA,CAAA,CC1L1D,IAAamO,EAAAA,CAAb,cAAyC/M,CAItC,CACF,OAA0B9B,CAAA,EAAsB,qBAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAc,CACzB,KAAA,CAAMA,CAAAA,CAAM,aAAA,CAAe,cAAA,EAAA,CAInB,KAAA,CAAMP,EAAqB,CACnC,OAAO,IAAIqO,EAAAA,CACVrO,CAAAA,CACA,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAKKqO,EAAAA,CAAb,cAAkCtM,CAAwB,CACzD,OAA0BxC,CAAA,EAAsB,cAAA,CAG9B,KAAA,CAAQ,aAAA,CAEjB,IAAA,CAAO,OAAA,CAEhB,UAAA,EAAqB,CACpB,OAAO,OAAA,CAGC,gBAAA,CAAoBE,CAAAA,EACrB,CAAA,CAAA,EAAIA,CAAAA,CAAM,CAAA,CAAA,CAAA,CAAA,EAAMA,CAAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAIlB6O,EAAAA,CAAb,cAA0CjN,CAIvC,CACF,OAA0B9B,CAAA,EAAsB,sBAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAc,CACzB,KAAA,CAAMA,CAAAA,CAAM,cAAA,CAAgB,eAAA,EAAA,CAIpB,KAAA,CAAMP,CAAAA,CAAqB,CACnC,OAAO,IAAIuO,EAAAA,CACVvO,CAAAA,CACA,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAKKuO,EAAAA,CAAb,cAAmCxM,CAAyB,CAC3D,OAA0BxC,CAAA,EAAsB,eAAA,CAG9B,KAAA,CAAQ,OAAA,CAEjB,IAAA,CAAO,IAAA,CAEhB,UAAA,EAAqB,CACpB,OAAO,OAAA,CAGC,gBAAA,CAAoBE,CAAAA,EACrB,CAAA,CAAA,EAAIA,CAAAA,CAAM,CAAA,CAAA,CAAA,EAAKA,CAAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAiB9B,SAAgB+O,EAAAA,CAAM5F,CAAAA,CAA4BC,CAAAA,CAAmB,CACpE,GAAM,CAAE,IAAA,CAAAtI,CAAAA,CAAM,MAAA,CAAAN,CAAA,CAAA,CAAW0I,CAAAA,CAAsCC,CAAAA,CAAGC,CAAA,CAAA,CAClE,OAAI,CAAC5I,CAAAA,EAAQ,IAAA,EAAQA,CAAAA,CAAO,IAAA,GAAS,OAAA,CAC7B,IAAImO,EAAAA,CAAoB7N,CAAA,CAAA,CAEzB,IAAI+N,EAAAA,CAAqB/N,CAAA,CAAA,CC3FjC,IAAakO,EAAAA,CAAb,cAAuCpN,CAIN,CAChC,OAA0B9B,CAAA,EAAsB,mBAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAcmO,CAAAA,CAAe,CACxC,MAAMnO,CAAAA,CAAM,gBAAA,CAAkB,YAAA,CAAA,CAC9B,IAAA,CAAK,MAAA,CAAO,IAAA,CAAOmO,EAAAA,CAIX,KAAA,CAAM1O,CAAAA,CAAqB,CACnC,OAAO,IAAI2O,EAAAA,CACV3O,CAAAA,CACA,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAKK2O,EAAAA,CAAb,cACS5M,CACT,CACC,OAA0BxC,CAAA,EAAsB,YAAA,CAG9B,KAAA,CAAQ,uBAAA,CAEjB,IAAA,CAAO,IAAA,CAAK,MAAA,CAAO,IAAA,CACnB,IAAA,CAAO,OAAA,CAEhB,UAAA,EAAqB,CACpB,OAAO,CAAA,cAAA,EAAiB,IAAA,CAAK,IAAA,GAAS,MAAA,CAAY,EAAA,CAAK,CAAA,CAAA,EAAI,IAAA,CAAK,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAGxD,gBAAA,CAAoBE,CAAAA,EACrB,CAAA,MAAA,EAASA,CAAAA,CAAM,CAAA,CAAA,CAAA,CAAA,EAAMA,CAAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAIvBmP,EAAAA,CAAb,cAA6CvN,CAIvB,CACrB,OAA0B9B,CAAA,EAAsB,yBAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAcmO,CAAAA,CAA0B,CACnD,KAAA,CAAMnO,CAAAA,CAAM,iBAAA,CAAmB,kBAAA,CAAA,CAC/B,IAAA,CAAK,MAAA,CAAO,IAAA,CAAOmO,EAAAA,CAIX,KAAA,CAAM1O,CAAAA,CAAqB,CACnC,OAAO,IAAI6O,EAAAA,CACV7O,CAAAA,CACA,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAKK6O,EAAAA,CAAb,cACS9M,CACT,CACC,OAA0BxC,CAAA,EAAsB,kBAAA,CAG9B,KAAA,CAAQ,iBAAA,CAEjB,IAAA,CAAO,IAAA,CAAK,MAAA,CAAO,IAAA,CACnB,IAAA,CAAO,QAAA,CAEhB,UAAA,EAAqB,CACpB,OAAO,CAAA,cAAA,EAAiB,IAAA,CAAK,IAAA,GAAS,MAAA,CAAY,EAAA,CAAK,CAAA,CAAA,EAAI,IAAA,CAAK,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAGxD,gBAAA,CAAoBE,CAAAA,EACrB,CAAA,MAAA,EAASA,CAAAA,CAAM,CAAA,CAAA,CAAA,EAAKA,CAAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAiBnC,SAAgBqP,EAAAA,CAASlG,EAA+BC,CAAAA,CAAsB,CAC7E,GAAM,CAAE,IAAA,CAAAtI,CAAAA,CAAM,MAAA,CAAAN,CAAA,CAAA,CAAW0I,CAAAA,CAAyCC,CAAAA,CAAGC,CAAA,CAAA,CACrE,OAAI,CAAC5I,CAAAA,EAAQ,IAAA,EAAQA,CAAAA,CAAO,IAAA,GAAS,OAAA,CAC7B,IAAIwO,EAAAA,CAAkBlO,CAAAA,CAAMN,CAAAA,EAAQ,IAAA,CAAA,CAErC,IAAI2O,EAAAA,CAAwBrO,CAAAA,CAAMN,CAAAA,EAAQ,IAAA,CAAA,CCtGlD,IAAa8O,EAAAA,CAAb,cAAmC1N,CAOjC,CACD,OAA0B9B,CAAA,EAAsB,eAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAcyO,CAAAA,CAAiB,CAC1C,KAAA,CAAMzO,CAAAA,CAAM,cAAA,CAAgB,QAAA,CAAA,CAC5B,IAAA,CAAK,MAAA,CAAO,MAAA,CAASyO,EAAAA,CAIb,KAAA,CAAMhP,CAAAA,CAAqB,CACnC,OAAO,IAAIiP,EAAAA,CAAOjP,CAAAA,CAAO,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAInBiP,EAAAA,CAAb,cAA4BlN,CAAyB,CACpD,OAA0BxC,CAAA,EAAsB,QAAA,CAG9B,KAAA,CAAQ,QAAA,CAE1B,WAAA,CAAYS,CAAAA,CAAqBC,CAAAA,CAAiC,CACjE,KAAA,CAAMD,CAAAA,CAAOC,CAAA,EAAA,CAGd,UAAA,EAAqB,CACpB,OAAO,MAAA,CAAA,CAAA,CAIT,SAAgBiP,EAAAA,CAAK3O,CAAAA,CAA8B,CAClD,OAAO,IAAIwO,EAAAA,CAAcxO,CAAAA,EAAQ,EAAA,CAAA,CCrClC,IAAa4O,EAAAA,CAAb,cAAqC9N,CAOlC,CACF,OAA0B9B,CAAA,EAAsB,iBAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAc,CACzB,KAAA,CAAMA,CAAAA,CAAM,cAAA,CAAgB,UAAA,CAAA,CAC5B,IAAA,CAAK,MAAA,CAAO,UAAA,CAAa,IAAA,CACzB,IAAA,CAAK,MAAA,CAAO,OAAA,CAAU,KAAA,CAId,KAAA,CAAMP,CAAAA,CAAqB,CACnC,OAAO,IAAIoP,EAAAA,CAASpP,CAAAA,CAAO,IAAA,CAAK,MAAA,IAIrBoP,EAAAA,CAAb,cAA8BrN,CAAyB,CACtD,OAA0BxC,CAAA,EAAsB,UAAA,CAG9B,KAAA,CAAQ,QAAA,CAE1B,UAAA,EAAqB,CACpB,OAAO,QAAA,CAAA,CAAA,CAIT,SAAgB8P,EAAAA,CAAO9O,CAAAA,CAAgC,CACtD,OAAO,IAAI4O,EAAAA,CAAgB5O,CAAAA,EAAQ,EAAA,CAAA,CCjCpC,IAAa+O,EAAAA,CAAb,cAAuC9M,EAIpC,CACF,OAA0BjD,CAAA,EAAsB,oBAEhD,WAAA,CAAYgB,CAAAA,CAAc,CACzB,KAAA,CAAMA,CAAAA,CAAM,cAAA,CAAgB,YAAA,EAAA,CAIpB,KAAA,CAAMP,CAAAA,CAAqB,CACnC,OAAO,IAAIuP,EAAAA,CAAWvP,CAAAA,CAAO,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAIvBuP,EAAAA,CAAb,cAAgCxN,CAAyB,CACxD,OAA0BxC,CAAA,EAAsB,YAAA,CAG9B,KAAA,CAAQ,UAAA,CAE1B,UAAA,EAAqB,CACpB,OAAO,UAAA,CAAA,CAAA,CAGT,SAAgBiQ,EAAAA,CAASjP,CAAAA,CAAkC,CAC1D,OAAO,IAAI+O,EAAAA,CAAkB/O,CAAAA,EAAQ,EAAA,CAAA,CC7BtC,IAAakP,EAAAA,CAAb,cAA0CpO,CAMvC,CACF,OAA0B9B,CAAA,EAAsB,sBAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAc,CACzB,KAAA,CAAMA,CAAAA,CAAM,cAAA,CAAgB,eAAA,CAAA,CAC5B,IAAA,CAAK,MAAA,CAAO,UAAA,CAAa,IAAA,CACzB,IAAA,CAAK,MAAA,CAAO,OAAA,CAAU,KAAA,CAId,KAAA,CAAMP,CAAAA,CAAqB,CACnC,OAAO,IAAI0P,EAAAA,CACV1P,CAAAA,CACA,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAKK0P,EAAAA,CAAb,cAAmC3N,CAAyB,CAC3D,OAA0BxC,CAAA,EAAsB,eAAA,CAG9B,KAAA,CAAQ,aAAA,CAE1B,UAAA,EAAqB,CACpB,OAAO,aAAA,CAAA,CAAA,CAIT,SAAgBoQ,EAAAA,CAAYpP,CAAAA,CAAqC,CAChE,OAAO,IAAIkP,GAAqBlP,CAAAA,EAAQ,EAAA,CAAA,CC/BzC,IAAaqP,EAAAA,CAAb,cAAgGvO,CAG9F,CACD,OAA0B9B,CAAA,EAAsB,eAAA,CAEhD,WAAA,CACCgB,CAAAA,CACAN,CAAAA,CACC,CACD,KAAA,CAAMM,CAAAA,CAAMN,CAAAA,CAAO,IAAA,EAAM,MAAA,CAAS,aAAA,CAAgB,QAAA,CAAU,QAAA,CAAA,CAC5D,IAAA,CAAK,MAAA,CAAO,UAAA,CAAaA,CAAAA,CAAO,KAAA,CAIxB,KAAA,CAAMD,CAAAA,CAAqB,CACnC,OAAO,IAAI6P,EAAAA,CAAO7P,CAAAA,CAAO,IAAA,CAAK,MAAA,CAAe,IAAA,CAAK,MAAA,CAAO,UAAA,CAAA,CAAA,CAAA,CAI9C6P,EAAAA,CAAb,cAAyF9N,CAEvF,CACD,OAA0BxC,CAAA,EAAsB,QAAA,CAC9B,UAAA,CAGA,KAAA,CAAQ,MAAA,CAE1B,WAAA,CACCS,CAAAA,CACAC,CAAAA,CACA6P,CAAAA,CACC,CACD,KAAA,CAAM9P,CAAAA,CAAOC,CAAA,CAAA,CACb,IAAA,CAAK,UAAA,CAAa6P,GAGnB,UAAA,EAAqB,CACpB,OAAO,MAAA,CAAA,CAAA,CAoBT,SAAgBC,CAAAA,CAAKnH,CAAAA,CAA2BC,CAAAA,CAAkB,EAAA,CAAS,CAC1E,GAAM,CAAE,IAAA,CAAAtI,CAAAA,CAAM,MAAA,CAAAN,CAAA,CAAA,CAAW0I,CAAAA,CAAqCC,CAAAA,CAAGC,CAAA,CAAA,CACjE,OAAO,IAAI+G,EAAAA,CAAcrP,CAAAA,CAAMN,CAAA,CAAA,CC/DhC,IAAa+P,EAAAA,CAAb,cAAmC1E,EAOjC,CACD,OAA0B/L,CAAA,EAAsB,eAAA,CAEhD,WAAA,CACCgB,CAAAA,CACS0P,CAAAA,CACAtC,CAAAA,CACR,CACD,KAAA,CAAMpN,CAAAA,CAAM,aAAA,CAAe,QAAA,CAAA,CAHlB,IAAA,CAAA,YAAA,CAAA0P,CAAAA,CACA,IAAA,CAAA,SAAA,CAAAtC,CAAAA,CAGT,IAAA,CAAK,MAAA,CAAO,YAAA,CAAesC,CAAAA,CAC3B,IAAA,CAAK,MAAA,CAAO,SAAA,CAAYtC,EAAAA,CAIhB,KAAA,CAAM3N,CAAAA,CAAqB,CACnC,OAAO,IAAIkQ,EAAAA,CAAOlQ,CAAAA,CAAO,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAInBkQ,EAAAA,CAAb,cAA4BnO,CAAwB,CACnD,OAA0BxC,CAAA,EAAsB,QAAA,CAG9B,KAAA,CAAQ,MAAA,CAEjB,YAAA,CACA,SAAA,CAET,WAAA,CAAYS,CAAAA,CAAqBC,CAAAA,CAAiC,CACjE,KAAA,CAAMD,CAAAA,CAAOC,CAAA,CAAA,CACb,IAAA,CAAK,YAAA,CAAeA,CAAAA,CAAO,YAAA,CAC3B,IAAA,CAAK,SAAA,CAAYA,CAAAA,CAAO,UAAA,CAGzB,UAAA,EAAqB,CAEpB,OAAO,CAAA,IAAA,EADW,IAAA,CAAK,SAAA,GAAc,MAAA,CAAY,EAAA,CAAK,CAAA,CAAA,EAAI,IAAA,CAAK,SAAA,CAAA,CAAA,CAAU,CAAA,EAC/C,IAAA,CAAK,YAAA,CAAe,iBAAA,CAAoB,EAAA,CAAA,CAAA,CAAA,CAAA,CAWpE,SAAgBkQ,EAAAA,CAAKvH,CAAAA,CAAyBC,CAAAA,CAAgB,EAAA,CAAI,CACjE,GAAM,CAAE,IAAA,CAAAtI,CAAAA,CAAM,MAAA,CAAAN,CAAA,CAAA,CAAW0I,CAAAA,CAAmCC,CAAAA,CAAGC,CAAA,CAAA,CAC/D,OAAO,IAAImH,EAAAA,CAAczP,CAAAA,CAAMN,CAAAA,CAAO,YAAA,EAAgB,KAAA,CAAOA,CAAAA,CAAO,SAAA,CAAA,CCzDrE,IAAamQ,EAAAA,CAAb,cAAwC9E,EAOtC,CACD,OAA0B/L,CAAA,EAAsB,oBAAA,CAEhD,WAAA,CACCgB,CAAAA,CACA0P,CAAAA,CACAtC,CAAAA,CACC,CACD,KAAA,CAAMpN,CAAAA,CAAM,aAAA,CAAe,aAAA,CAAA,CAC3B,IAAA,CAAK,MAAA,CAAO,YAAA,CAAe0P,CAAAA,CAC3B,IAAA,CAAK,MAAA,CAAO,SAAA,CAAYtC,EAAAA,CAIhB,KAAA,CAAM3N,CAAAA,CAAqB,CACnC,OAAO,IAAIqQ,EAAAA,CAAYrQ,CAAAA,CAAO,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAIxBqQ,EAAAA,CAAb,cAAiCtO,CAAwB,CACxD,OAA0BxC,CAAA,EAAsB,aAAA,CAG9B,KAAA,CAET,YAAA,CACA,SAAA,CAET,WAAA,CAAYS,EAAqBC,CAAAA,CAAsC,CACtE,KAAA,CAAMD,CAAAA,CAAOC,CAAA,CAAA,CACb,IAAA,CAAK,YAAA,CAAeA,CAAAA,CAAO,YAAA,CAC3B,IAAA,CAAK,SAAA,CAAYA,CAAAA,CAAO,SAAA,CACxB,IAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,YAAA,CAAe,aAAA,CAAgB,YAAA,CAGlD,UAAA,EAAqB,CAEpB,OAAO,CAAA,SAAA,EADW,IAAA,CAAK,SAAA,GAAc,MAAA,CAAY,EAAA,CAAK,CAAA,EAAA,EAAK,IAAA,CAAK,SAAA,CAAA,CAAA,CAAU,GAC3C,IAAA,CAAK,YAAA,CAAe,iBAAA,CAAoB,EAAA,CAAA,CAAA,CAG/D,gBAAA,CAAoBR,CAAAA,EACxB,OAAOA,CAAAA,EAAU,QAAA,CAAiBA,CAAAA,CAC/BA,CAAAA,CAAM,WAAA,EAAA,CAAA,CAIF6Q,EAAAA,CAAb,cAA8ChF,EAO5C,CACD,OAA0B/L,CAAA,EAAsB,0BAAA,CAEhD,WAAA,CACCgB,CAAAA,CACA0P,CAAAA,CACAtC,CAAAA,CACC,CACD,KAAA,CAAMpN,CAAAA,CAAM,kBAAA,CAAoB,mBAAA,CAAA,CAChC,KAAK,MAAA,CAAO,YAAA,CAAe0P,CAAAA,CAC3B,IAAA,CAAK,MAAA,CAAO,SAAA,CAAYtC,EAAAA,CAIhB,KAAA,CAAM3N,CAAAA,CAAqB,CACnC,OAAO,IAAIuQ,EAAAA,CACVvQ,CAAAA,CACA,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAKKuQ,EAAAA,CAAb,cAAuCxO,CAA6B,CACnE,OAA0BxC,CAAA,EAAsB,mBAAA,CAG9B,KAAA,CAET,YAAA,CACA,SAAA,CAET,WAAA,CAAYS,CAAAA,CAAqBC,CAAAA,CAA4C,CAC5E,KAAA,CAAMD,CAAAA,CAAOC,CAAA,CAAA,CACb,IAAA,CAAK,YAAA,CAAeA,CAAAA,CAAO,YAAA,CAC3B,IAAA,CAAK,SAAA,CAAYA,CAAAA,CAAO,SAAA,CACxB,IAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,YAAA,CAAe,oBAAA,CAAuB,mBAAA,CAGzD,UAAA,EAAqB,CAEpB,OAAO,CAAA,SAAA,EADW,IAAA,CAAK,SAAA,GAAc,MAAA,CAAY,EAAA,CAAK,CAAA,CAAA,EAAI,IAAA,CAAK,SAAA,CAAA,CAAA,CAAU,CAAA,EAC1C,IAAA,CAAK,aAAe,iBAAA,CAAoB,EAAA,CAAA,CAAA,CAG/D,gBAAA,CAAoBR,CAAAA,EACxB,OAAOA,CAAAA,EAAU,QAAA,CAAiBA,CAAAA,CAC/BA,CAAAA,CAAM,WAAA,EAAA,CAAA,CAmBf,SAAgB+Q,CAAAA,CAAU5H,CAAAA,CAAgCC,CAAAA,CAAuB,EAAA,CAAI,CACpF,GAAM,CAAE,IAAA,CAAAtI,CAAAA,CAAM,MAAA,CAAAN,CAAA,CAAA,CAAW0I,CAAAA,CAAsDC,CAAAA,CAAGC,CAAA,CAAA,CAClF,OAAI5I,CAAAA,EAAQ,OAAS,QAAA,CACb,IAAIqQ,EAAAA,CAAyB/P,CAAAA,CAAMN,CAAAA,CAAO,YAAA,EAAgB,KAAA,CAAOA,CAAAA,CAAO,SAAA,CAAA,CAEzE,IAAImQ,EAAAA,CAAmB7P,CAAAA,CAAMN,CAAAA,EAAQ,YAAA,EAAgB,KAAA,CAAOA,CAAAA,EAAQ,SAAA,CAAA,CClI5E,IAAawQ,EAAAA,CAAb,cAAmCpP,CAIhC,CACF,OAA0B9B,CAAA,EAAsB,eAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAc,CACzB,KAAA,CAAMA,EAAM,aAAA,CAAe,QAAA,EAAA,CAM5B,aAAA,EAA6C,CAC5C,OAAO,IAAA,CAAK,OAAA,CAAQkD,CAAAA,CAAAA,iBAAAA,CAAG,CAAA,CAIf,KAAA,CAAMzD,CAAAA,CAAqB,CACnC,OAAO,IAAI0Q,EAAAA,CAAO1Q,CAAAA,CAAO,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAInB0Q,EAAAA,CAAb,cAA4B3O,CAAwB,CACnD,OAA0BxC,CAAA,EAAsB,QAAA,CAG9B,KAAA,CAAQ,MAAA,CAE1B,UAAA,EAAqB,CACpB,OAAO,MAAA,CAAA,CAAA,CAIT,SAAgBoR,CAAAA,CAAKpQ,CAAAA,CAA8B,CAClD,OAAO,IAAIkQ,EAAAA,CAAclQ,CAAAA,EAAQ,EAAA,CAAA,CChClC,IAAaqQ,EAAAA,CAAb,cAAmGvP,CAGjG,CACD,OAA0B9B,CAAA,EAAsB,kBAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAcN,CAAAA,CAAgC,CACzD,KAAA,CAAMM,CAAAA,CAAMN,CAAAA,CAAO,IAAA,EAAM,MAAA,CAAS,aAAA,CAAgB,QAAA,CAAU,WAAA,CAAA,CAC5D,IAAA,CAAK,MAAA,CAAO,MAAA,CAASA,CAAAA,CAAO,MAAA,CAC5B,IAAA,CAAK,MAAA,CAAO,UAAA,CAAaA,CAAAA,CAAO,KAAA,CAIxB,KAAA,CAAMD,CAAAA,CAAqB,CACnC,OAAO,IAAI6Q,EAAAA,CACV7Q,CAAAA,CACA,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAKK6Q,EAAAA,CAAb,cACS9O,CACT,CACC,OAA0BxC,CAAA,EAAsB,WAAA,CAG9B,KAAA,CAAQ,SAAA,CAER,UAAA,CAElB,YAAYS,CAAAA,CAAqBC,CAAAA,CAA2C,CAC3E,KAAA,CAAMD,CAAAA,CAAOC,CAAA,CAAA,CACb,IAAA,CAAK,UAAA,CAAaA,CAAAA,CAAO,WAAA,CAG1B,UAAA,EAAqB,CACpB,OAAO,IAAA,CAAK,MAAA,GAAW,MAAA,CAAY,SAAA,CAAY,CAAA,QAAA,EAAW,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAsBjE,SAAgB6Q,CAAAA,CAAQlI,CAAAA,CAA8BC,CAAAA,CAAqB,EAAA,CAAS,CACnF,GAAM,CAAE,IAAA,CAAAtI,EAAM,MAAA,CAAAN,CAAA,CAAA,CAAW0I,CAAAA,CAAwCC,CAAAA,CAAGC,CAAA,CAAA,CACpE,OAAO,IAAI+H,EAAAA,CAAiBrQ,CAAAA,CAAMN,CAAA,CAAA,CCjEnC,IAAa8Q,EAAAA,CAAb,cAA2C1P,CAOzC,CACD,OAA0B9B,CAAA,EAAsB,uBAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAcN,CAAAA,CAA8B,CACvD,KAAA,CAAMM,CAAAA,CAAM,eAAA,CAAiB,gBAAA,CAAA,CAC7B,IAAA,CAAK,MAAA,CAAO,MAAA,CAASN,CAAAA,CAAO,UAAA,CAC5B,IAAA,CAAK,MAAA,CAAO,aAAA,CAAgB,KAAA,CAIpB,KAAA,CAAMD,CAAAA,CAAqB,CACnC,OAAO,IAAIgR,EAAAA,CACVhR,CAAAA,CACA,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAKKgR,EAAAA,CAAb,cAAoCjP,CAA0B,CAC7D,OAA0BxC,CAAA,EAAsB,gBAAA,CAG9B,KAAA,CAAQ,KAAA,CAE1B,UAAA,EAAqB,CACpB,OAAO,CAAA,IAAA,EAAO,KAAK,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAerB,SAAgB0R,EAAAA,CAAIrI,CAAAA,CAAkCC,CAAAA,CAA0B,CAC/E,GAAM,CAAE,IAAA,CAAAtI,CAAAA,CAAM,MAAA,CAAAN,CAAA,CAAA,CAAW0I,CAAAA,CAA6CC,CAAAA,CAAGC,CAAA,CAAA,CACzE,OAAO,IAAIkI,EAAAA,CAAsBxQ,CAAAA,CAAMN,CAAA,CAAA,CCjDxC,IAAaiR,EAAAA,CAAb,cAAyC7P,CAOvC,CACD,OAA0B9B,CAAA,EAAsB,qBAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAcN,CAAAA,CAA4B,CACrD,KAAA,CAAMM,CAAAA,CAAM,kBAAA,CAAoB,cAAA,CAAA,CAChC,IAAA,CAAK,MAAA,CAAO,MAAA,CAASN,CAAAA,CAAO,UAAA,CAC5B,IAAA,CAAK,MAAA,CAAO,aAAA,CAAgB,KAAA,CAIpB,KAAA,CAAMD,CAAAA,CAAqB,CACnC,OAAO,IAAImR,EAAAA,CACVnR,CAAAA,CACA,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAKKmR,EAAAA,CAAb,cAAkCpP,CAA6B,CAC9D,OAA0BxC,CAAA,EAAsB,cAAA,CAG9B,KAAA,CAAQ,SAAA,CAE1B,UAAA,EAAqB,CACpB,OAAO,CAAA,QAAA,EAAW,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAGf,gBAAA,CAAoBE,CAAAA,EACrB,IAAA,CAAK,SAAA,CAAUA,CAAA,CAAA,CAAA,CAexB,SAAgB2R,EAAAA,CAAQxI,CAAAA,CAAgCC,CAAAA,CAAwB,CAC/E,GAAM,CAAE,IAAA,CAAAtI,CAAAA,CAAM,MAAA,CAAAN,CAAA,CAAA,CAAW0I,CAAAA,CAA2CC,CAAAA,CAAGC,CAAA,CAAA,CACvE,OAAO,IAAIqI,EAAAA,CAAoB3Q,CAAAA,CAAMN,CAAA,CAAA,CCpDtC,IAAaoR,EAAAA,CAAb,cAA2ChQ,CAOzC,CACD,OAA0B9B,CAAA,EAAsB,uBAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAcN,CAAAA,CAA8B,CACvD,KAAA,CAAMM,CAAAA,CAAM,kBAAA,CAAoB,gBAAA,CAAA,CAChC,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAmBN,CAAAA,CAAO,WAAA,CAI9B,MAAMD,CAAAA,CAAqB,CACnC,OAAO,IAAIsR,EAAAA,CACVtR,CAAAA,CACA,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAKKsR,EAAAA,CAAb,cACSvP,CACT,CACC,OAA0BxC,CAAA,EAAsB,gBAAA,CAG9B,KAAA,CAAQ,WAAA,CAEjB,gBAAA,CAAmB,IAAA,CAAK,MAAA,CAAO,gBAAA,CAExC,UAAA,EAAqB,CACpB,OAAO,CAAA,UAAA,EAAa,IAAA,CAAK,gBAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAe3B,SAAgBgS,EAAAA,CAAU3I,EAAkCC,CAAAA,CAA0B,CACrF,GAAM,CAAE,IAAA,CAAAtI,CAAAA,CAAM,MAAA,CAAAN,CAAA,CAAA,CAAW0I,CAAAA,CAA6CC,CAAAA,CAAGC,CAAA,CAAA,CACzE,OAAO,IAAIwI,EAAAA,CAAsB9Q,CAAAA,CAAMN,CAAA,CAAA,CCrDxC,IAAauR,EAAAA,CAAb,cAAqCnQ,CAOnC,CACD,OAA0B9B,CAAA,EAAsB,iBAAA,CAEhD,WAAA,CAAYgB,CAAAA,CAAcN,CAAAA,CAAwB,CACjD,MAAMM,CAAAA,CAAM,cAAA,CAAgB,UAAA,CAAA,CAC5B,IAAA,CAAK,MAAA,CAAO,MAAA,CAASN,CAAAA,CAAO,UAAA,CAC5B,IAAA,CAAK,MAAA,CAAO,aAAA,CAAgB,KAAA,CAIpB,KAAA,CAAMD,CAAAA,CAAqB,CACnC,OAAO,IAAIyR,EAAAA,CACVzR,CAAAA,CACA,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAKKyR,EAAAA,CAAb,cAA8B1P,CAAyB,CACtD,OAA0BxC,CAAA,EAAsB,UAAA,CAG9B,KAAA,CAAQ,QAAA,CAE1B,UAAA,EAAqB,CACpB,OAAO,CAAA,OAAA,EAAU,IAAA,CAAK,MAAA,CAAA,CAAA,CAAA,CAGd,gBAAA,CAAoBE,CAAAA,EACrB,IAAA,CAAK,SAAA,CAAUA,CAAA,CAAA,CAAA,CAexB,SAAgBiS,EAAAA,CAAO9I,CAAAA,CAA4BC,CAAAA,CAAoB,CACtE,GAAM,CAAE,IAAA,CAAAtI,CAAAA,CAAM,MAAA,CAAAN,CAAA,CAAA,CAAW0I,CAAAA,CAAuCC,CAAAA,CAAGC,CAAA,CAAA,CACnE,OAAO,IAAI2I,GAAgBjR,CAAAA,CAAMN,CAAA,CAAA,CCzBlC,SAAgB0R,EAAAA,EAAsB,CACrC,OAAO,CACN,MAAA,CAAArI,EAAAA,CACA,SAAA,CAAAK,EAAAA,CACA,OAAA,CAAAG,CAAAA,CACA,IAAA,CAAAG,EAAAA,CACA,IAAA,CAAAG,EAAAA,CACA,UAAA,CAAAiB,EAAAA,CACA,IAAA,CAAAM,EAAAA,CACA,eAAA,CAAAG,EAAAA,CACA,IAAA,CAAAG,EAAAA,CACA,OAAA,CAAAG,CAAAA,CACA,QAAA,CAAAI,EAAAA,CACA,IAAA,CAAAG,EAAAA,CACA,MAAAG,CAAAA,CACA,IAAA,CAAAK,EAAAA,CACA,OAAA,CAAAG,EAAAA,CACA,QAAA,CAAAG,EAAAA,CACA,OAAA,CAAAS,EAAAA,CACA,KAAA,CAAAM,EAAAA,CACA,QAAA,CAAAM,EAAAA,CACA,IAAA,CAAAI,EAAAA,CACA,MAAA,CAAAG,EAAAA,CACA,QAAA,CAAAG,EAAAA,CACA,WAAA,CAAAG,EAAAA,CACA,IAAA,CAAAI,CAAAA,CACA,IAAA,CAAAI,EAAAA,CACA,SAAA,CAAAK,CAAAA,CACA,IAAA,CAAAG,CAAAA,CACA,OAAA,CAAAG,CAAAA,CACA,GAAA,CAAAG,GACA,OAAA,CAAAG,EAAAA,CACA,SAAA,CAAAG,EAAAA,CACA,MAAA,CAAAG,EAAAA,CAAAA,CC7CF,SAAgBE,EAAAA,CAAYC,CAAAA,CAA4B,CACvD,OAEQtR,CAAAA,EAAiBA,CAAAA,CCU1B,IAAauR,EAAAA,CAAoB,MAAA,CAAO,GAAA,CAAI,6BAAA,CAAA,CAE/BC,EAAAA,CAAY,MAAA,CAAO,GAAA,CAAI,mBAAA,CAAA,CAEvBC,EAAAA,CAAb,cAAsE7O,CAAS,CAC9E,OAA0B5D,CAAA,EAAsB,SAAA,CAGhD,OAAyB,MAAA,CAAS,MAAA,CAAO,MAAA,CAAO,EAAA,CAAI4D,CAAAA,CAAM,MAAA,CAAQ,CAC9C,iBAAA,CAAA2O,EAAAA,CACR,SAAA,CAAAC,EAAAA,CACX,CAAA,CAGD,CAACD,EAAA,EAAmC,EAAA,CAGpC,CAACC,EAAA,EAAsB,KAAA,CAGvB,CAAU5O,CAAAA,CAAM,MAAA,CAAO,kBAAA,EACtB,OAGD,CAAUA,CAAAA,CAAM,MAAA,CAAO,kBAAA,EAAyD,EAAA,CAAA,CAqBjF,SAAgB8O,EAAAA,CAKf1R,CAAAA,CACAC,CAAAA,CACA0R,CAAAA,CAGA9O,CAAAA,CACAyO,CAAAA,CACAxO,CAAAA,CAAW9C,CAAAA,CAMT,CACF,IAAMiB,CAAAA,CAAWoQ,EAAAA,CAAY,CAAA,CACvBO,CAAAA,CAAW,IAAIH,EAAAA,CAKlBzR,CAAAA,CAAM6C,CAAAA,CAAQC,CAAA,CAAA,CAEX+O,CAAAA,CAA6B,OAAO5R,CAAAA,EAAY,UAAA,CAAaA,CAAAA,CAAQmR,EAAAA,EAAqB,CAAA,CAAInR,CAAAA,CAE9F6R,CAAAA,CAAe,MAAA,CAAO,WAAA,CAC3B,MAAA,CAAO,OAAA,CAAQD,CAAA,CAAA,CAAe,GAAA,CAAA,CAAK,CAAC7R,CAAAA,CAAM+R,CAAA,CAAA,GAAoB,CAC7D,IAAMC,CAAAA,CAAaD,CAAAA,CACnBC,CAAAA,CAAW,OAAA,CAAQhS,CAAAA,CAAMiB,CAAA,CAAA,CACzB,IAAMrB,EAAAA,CAASoS,CAAAA,CAAW,KAAA,CAAMJ,CAAA,CAAA,CAAU,SAAA,EAAA,CAC1C,OAAAA,CAAAA,CAASL,EAAA,CAAA,CAAmB,IAAA,CAAK,GAAGS,CAAAA,CAAW,gBAAA,CAAiBpS,EAAAA,CAAQgS,CAAA,CAAS,CAAA,CAC1E,CAAC5R,CAAAA,CAAMJ,EAAA,CAAA,CAAA,CACb,CAAA,CAGGqS,CAAAA,CAA6B,MAAA,CAAO,WAAA,CACzC,MAAA,CAAO,OAAA,CAAQJ,CAAA,CAAA,CAAe,GAAA,CAAA,CAAK,CAAC7R,CAAAA,CAAM+R,CAAA,IAAoB,CAC7D,IAAMC,CAAAA,CAAaD,CAAAA,CACnB,OAAAC,CAAAA,CAAW,OAAA,CAAQhS,CAAAA,CAAMiB,CAAA,CAAA,CAElB,CAACjB,CAAAA,CADOgS,CAAAA,CAAW,sBAAA,CAAuBJ,CAAA,CAAS,CAAA,CAAA,CAEzD,CAAA,CAGGnS,CAAAA,CAAQ,MAAA,CAAO,MAAA,CAAOmS,CAAAA,CAAUE,CAAA,CAAA,CAEtC,OAAArS,CAAAA,CAAMmD,CAAAA,CAAM,MAAA,CAAO,OAAA,CAAA,CAAWkP,CAAAA,CAC9BrS,CAAAA,CAAMmD,EAAM,MAAA,CAAO,kBAAA,CAAA,CAAsBqP,CAAAA,CAErCN,CAAAA,GACHlS,CAAAA,CAAMgS,EAAAA,CAAQ,MAAA,CAAO,kBAAA,CAAA,CAAsBE,CAAAA,CAAAA,CAGrC,MAAA,CAAO,MAAA,CAAOlS,CAAAA,CAAO,CAC3B,SAAA,CAAA,KACCA,CAAAA,CAAMgS,EAAAA,CAAQ,MAAA,CAAO,SAAA,CAAA,CAAa,IAAA,CAC3BhS,CAAAA,CAAAA,CAOR,CAAA,CAgHF,SAAgByS,EAAAA,CAAkBZ,CAAAA,CAAuC,CAYxE,OAAO,MAAA,CAAO,MAAA,CAXR,CAAsCtR,CAAAA,CAAMC,CAAAA,CAAS0R,CAAAA,GACnDD,EAAAA,CAAkB1R,CAAAA,CAAMC,CAAAA,CAAS0R,CAAAA,CAAa,MAAW,CAAA,CAU3B,CAAE,OAAA,CAPlC,CAAwC3R,CAAAA,CAAMC,CAAAA,CAAS0R,CAAAA,GAAgB,CAC5E,IAAMlS,CAAAA,CAAQiS,EAAAA,CAAkB1R,CAAAA,CAAMC,CAAAA,CAAS0R,CAAAA,CAAa,MAAW,CAAA,CACvE,OAAAlS,CAAAA,CAAM+R,EAAA,CAAA,CAAa,IAAA,CAEZ/R,EAGyC,CAAgB,CAAA,CAGlE,IAAa0S,CAAAA,CAAUD,EAAAA,CAAkB,CAAA,CC7QzC,IAAaE,EAAAA,CAAb,KAA0B,CACzB,OAAiBpT,CAAA,EAAsB,gBAAA,CAE7B,KAAA,CAEV,WAAA,CAAmBgB,CAAAA,CAAqBd,CAAAA,CAAY,CAAjC,IAAA,CAAA,IAAA,CAAAc,CAAAA,CAAqB,IAAA,CAAA,KAAA,CAAAd,EAAAA,CAGxC,KAAA,CAAMO,CAAAA,CAAuB,CAC5B,OAAO,IAAI4S,EAAAA,CAAM5S,EAAO,IAAA,CAAA,CAAA,CAAA,CAIb4S,EAAAA,CAAb,KAAmB,CAClB,OAAiBrT,CAAA,EAAsB,SAAA,CAE9B,IAAA,CACA,KAAA,CAET,WAAA,CAAmBS,CAAAA,CAAgBY,CAAAA,CAAuB,CAAvC,IAAA,CAAA,KAAA,CAAAZ,CAAAA,CAClB,IAAA,CAAK,IAAA,CAAOY,CAAAA,CAAQ,IAAA,CACpB,IAAA,CAAK,KAAA,CAAQA,CAAAA,CAAQ,MAAA,CAAA,CAAA,CAIvB,SAAgBiS,EAAAA,CAAMtS,CAAAA,CAAcd,CAAAA,CAA0B,CAC7D,OAAO,IAAIkT,EAAAA,CAAapS,CAAAA,CAAMd,CAAA,CAAA,CC8E/B,IAAaqT,EAAAA,CAAb,KAA4B,CAC3B,OAAiBvT,CAAA,EAAsB,kBAAA,CAEvC,WAAA,CAAoBwT,CAAAA,CAAyBxS,CAAAA,CAAe,CAAxC,IAAA,CAAA,MAAA,CAAAwS,CAAAA,CAAyB,IAAA,CAAA,IAAA,CAAAxS,EAAAA,CAE7C,EAAA,CAAA,GACIC,CAAAA,CACY,CACf,OAAO,IAAIwS,EAAAA,CACVxS,CAAAA,CAAQ,GAAA,CAAKyS,CAAAA,EAAO,CACnB,GAAIzT,CAAAA,CAAGyT,CAAAA,CAAIzO,CAAA,CAAA,CACV,OAAOyO,CAAAA,CAGR,GAAIzT,CAAAA,CAAGyT,CAAAA,CAAInR,EAAA,CAAA,CAAoB,CAC9B,IAAMoR,CAAAA,CAAsB,IAAI7Q,EAAAA,CAC/B4Q,CAAAA,CAAG,IAAA,CACH,CAAC,CAACA,CAAAA,CAAG,SAAA,CACLA,CAAAA,CAAG,UAAA,CACHA,CAAAA,CAAG,WAAA,CAAA,CAEJ,OAAAA,CAAAA,CAAG,WAAA,CAAc,IAAA,CAAK,MAAM,IAAA,CAAK,SAAA,CAAUA,CAAAA,CAAG,aAAA,CAAc,CAAA,CACrDC,CAAAA,CAGR,OAAAD,CAAAA,CAAKA,CAAAA,CAEE,IAAI5Q,EAAAA,CACV4Q,CAAAA,CAAG,IAAA,CACH,CAAC,CAACA,CAAAA,CAAG,SAAA,CACLA,CAAAA,CAAG,UAAA,CACH,EAAE,CAAA,CAAA,CAAA,CAGJ,IAAA,CAAK,MAAA,CACL,KAAA,CACA,IAAA,CAAK,IAAA,CAAA,CAIP,MAAA,CAAA,GACIzS,CAAAA,CACY,CACf,OAAO,IAAIwS,EAAAA,CACVxS,CAAAA,CAAQ,GAAA,CAAKyS,CAAAA,EAAO,CACnB,GAAIzT,CAAAA,CAAGyT,CAAAA,CAAIzO,CAAA,CAAA,CACV,OAAOyO,CAAAA,CAGR,GAAIzT,CAAAA,CAAGyT,CAAAA,CAAInR,EAAA,CAAA,CAAoB,CAC9B,IAAMoR,CAAAA,CAAsB,IAAI7Q,EAAAA,CAC/B4Q,CAAAA,CAAG,IAAA,CACH,CAAC,CAACA,CAAAA,CAAG,SAAA,CACLA,CAAAA,CAAG,UAAA,CACHA,CAAAA,CAAG,WAAA,CAAA,CAEJ,OAAAA,CAAAA,CAAG,WAAA,CAAc,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAUA,CAAAA,CAAG,aAAA,CAAc,CAAA,CACrDC,CAAAA,CAGR,OAAAD,CAAAA,CAAKA,CAAAA,CAEE,IAAI5Q,EAAAA,CACV4Q,CAAAA,CAAG,IAAA,CACH,CAAC,CAACA,CAAAA,CAAG,SAAA,CACLA,CAAAA,CAAG,UAAA,CACH,EAAE,CAAA,CAAA,CAAA,CAGJ,IAAA,CAAK,MAAA,CACL,IAAA,CACA,IAAA,CAAK,IAAA,CAAA,CAeP,KAAA,CACCE,CAAAA,CAAAA,GACG3S,CAAAA,CACY,CACf,OAAO,IAAIwS,EAAAA,CACVxS,CAAAA,CAAQ,GAAA,CAAKyS,CAAAA,EAAO,CACnB,GAAIzT,CAAAA,CAAGyT,CAAAA,CAAIzO,CAAA,CAAA,CACV,OAAOyO,CAAAA,CAER,GAAIzT,CAAAA,CAAGyT,CAAAA,CAAInR,EAAA,CAAA,CAAoB,CAC9B,IAAMoR,CAAAA,CAAsB,IAAI7Q,EAAAA,CAC/B4Q,CAAAA,CAAG,KACH,CAAC,CAACA,CAAAA,CAAG,SAAA,CACLA,CAAAA,CAAG,UAAA,CACHA,CAAAA,CAAG,WAAA,CAAA,CAEJ,OAAAA,CAAAA,CAAG,WAAA,CAAc,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAUA,CAAAA,CAAG,aAAA,CAAc,CAAA,CACrDC,CAAAA,CAGR,OAAAD,CAAAA,CAAKA,CAAAA,CAEE,IAAI5Q,EAAAA,CACV4Q,CAAAA,CAAG,IAAA,CACH,CAAC,CAACA,CAAAA,CAAG,SAAA,CACLA,EAAG,UAAA,CACH,EAAE,CAAA,CAAA,CAAA,CAGJ,IAAA,CAAK,MAAA,CACL,IAAA,CACA,IAAA,CAAK,IAAA,CACLE,CAAA,CAAA,CAAA,CAAA,CAYUH,EAAAA,CAAb,KAAqD,CACpD,OAAiBzT,CAAA,EAAsB,gBAAA,CAGvC,MAAA,CAEA,WAAA,CACCiB,CAAAA,CACAuS,CAAAA,CACAK,CAAAA,CACA7S,CAAAA,CACA4S,CAAAA,CAAiB,OAAA,CAChB,CACD,IAAA,CAAK,MAAA,CAAS,CACb,IAAA,CAAA5S,CAAAA,CACA,QAAAC,CAAAA,CACA,MAAA,CAAAuS,CAAAA,CACA,IAAA,CAAAK,CAAAA,CACA,MAAA,CAAAD,CAAAA,EAAAA,CAIF,YAAA,EAAqB,CACpB,OAAA,IAAA,CAAK,MAAA,CAAO,YAAA,CAAe,IAAA,CACpB,IAAA,CAGR,IAAA,CAAKE,CAAAA,CAAgC,CACpC,OAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAOA,CAAAA,CACZ,IAAA,CAGR,KAAA,CAAMhN,CAAAA,CAAsB,CAC3B,OAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAQA,CAAAA,CACb,IAAA,CAIR,KAAA,CAAMrG,CAAAA,CAAuB,CAC5B,OAAO,IAAIsT,EAAAA,CAAM,IAAA,CAAK,MAAA,CAAQtT,CAAA,CAAA,CAAA,CAAA,CAInBsT,EAAAA,CAAb,KAAmB,CAClB,OAAiB/T,CAAA,EAAsB,SAAA,CAE9B,MAAA,CACA,cAAA,CAET,WAAA,CAAYU,CAAAA,CAAqBD,CAAAA,CAAgB,CAChD,IAAA,CAAK,MAAA,CAAS,CAAE,GAAGC,CAAAA,CAAQ,KAAA,CAAAD,CAAAA,CAAAA,CAC3B,IAAA,CAAK,cAAA,CAAiB,CAAC,CAACC,EAAO,KAAA,CAAA,CAAA,CAQjC,SAAgBsT,CAAAA,CAAMhT,CAAAA,CAA+B,CACpD,OAAO,IAAIuS,EAAAA,CAAe,KAAA,CAAOvS,CAAA,CAAA,CAGlC,SAAgBiT,CAAAA,CAAYjT,CAAAA,CAA+B,CAC1D,OAAO,IAAIuS,EAAAA,CAAe,IAAA,CAAMvS,CAAA,CAAA,CC/LjC,SAAgBkT,EAAAA,CACftT,CAAAA,CACkD,CAClD,GAAM,CAACT,CAAAA,CAAMgU,CAAA,CAAA,CAAcvT,CAAAA,CAAO,QAAA,CAAS,KAAA,CAAM,GAAA,CAAA,CAEjD,OAAO,CAAE,IAAA,CAAAT,CAAAA,CAAM,UAAA,CAAAgU,CAAAA,CAAAA,CCtGhB,IAAaC,GAAgBC,GAAAA,CAAI,KAAA,CAAM,CAACA,GAAAA,CAAI,MAAA,EAAA,CAAUA,GAAAA,CAAI,MAAA,EAAA,CAAUA,GAAAA,CAAI,OAAA,EAAA,CAAWA,GAAAA,CAAI,IAAA,EAAA,CAAO,CAAA,CACjFC,EAAAA,CAAgCD,GAAAA,CAAI,KAAA,CAAM,CACtDD,EAAAA,CACAC,GAAAA,CAAI,MAAA,CAAOA,GAAAA,CAAI,MAAA,EAAA,CAAUA,GAAAA,CAAI,GAAA,EAAK,CAAA,CAClCA,GAAAA,CAAI,KAAA,CAAMA,IAAI,GAAA,EAAK,CAAA,CACnB,CAAA,CACYE,EAAAA,CAAoCF,GAAAA,CAAI,MAAA,CAAgB9T,CAAAA,EAAMA,CAAAA,YAAa,MAAA,CAAA,CAExF,SAAgBiU,EAAAA,CACf5T,CAAAA,CACA6T,CAAAA,CAGc,CACd,IAAMC,CAAAA,CAAgBD,CAAAA,EAAS,WAAA,EAAeJ,GAAAA,CACxCM,CAAAA,CAASF,CAAAA,EAAS,MAAA,EAAU,EAAA,CAC9B5Q,CAAAA,CAGE3B,CAAAA,CAAwCtB,CAAAA,CAAQ,UAAA,CACtD,GAAI,OAAOsB,CAAAA,EAAe,QAAA,EAAYA,CAAAA,CAAa,CAAA,CAClD,OAAO0S,EAAAA,CAAsBhU,CAAAA,CAAQsB,CAAAA,CAAYwS,CAAAA,CAAGC,CAAA,CAAA,CAGrD,GAAM,CAAE,IAAA,CAAAxU,CAAAA,CAAM,UAAA,CAAAgU,CAAA,CAAA,CAAeD,EAAAA,CAA0BtT,CAAA,CAAA,CAEvD,OAAQT,CAAAA,EACP,KAAK,OAAA,CACJ0D,CAAAA,CAASgR,EAAAA,CAAoBjU,CAAAA,CAAQuT,CAAAA,CAAYO,CAAAA,CAAGC,CAAA,EACpD,MAED,KAAK,QAAA,CACJ9Q,CAAAA,CAASiR,EAAAA,CAAqBlU,CAAAA,CAAQuT,CAAAA,CAAYO,CAAAA,CAAGC,CAAA,CAAA,CACrD,MAED,KAAK,QAAA,CACJ9Q,CAAAA,CAASkR,EAAAA,CAAqBnU,CAAAA,CAAQuT,CAAAA,CAAYO,CAAAA,CAAGC,CAAA,CAAA,CACrD,MAED,KAAK,QAAA,CACJ9Q,CAAAA,CAASmR,EAAAA,CAAqBpU,CAAAA,CAAQuT,CAAAA,CAAYO,CAAAA,CAAGC,CAAA,CAAA,CACrD,MAED,KAAK,UACJ9Q,CAAAA,CAAS8Q,CAAAA,GAAW,IAAA,EAAQA,CAAAA,CAAO,OAAA,CAAUD,CAAAA,CAAE,MAAA,CAAO,OAAA,EAAA,CAAYA,CAAAA,CAAE,OAAA,EAAA,CACpE,MAED,KAAK,QAAA,CACJ7Q,CAAAA,CAASoR,EAAAA,CAAqBrU,CAAAA,CAAQuT,CAAAA,CAAYO,CAAAA,CAAGC,CAAA,CAAA,CACrD,MAED,KAAK,QAAA,CACJ9Q,CAAAA,CAAS6Q,CAAAA,CAAE,GAAA,EAAA,CACX,MAED,QACC7Q,CAAAA,CAAS6Q,EAAE,GAAA,GAAA,CAIb,OAAO7Q,CAAAA,CAGR,SAASkR,EAAAA,CACRnU,CAAAA,CACAuT,CAAAA,CACAO,CAAAA,CACAC,CAAAA,CACc,CACd,IAAIO,CAAAA,CACAC,CAAAA,CACAtI,CAAAA,CAAU,KAAA,CAEd,OAAQsH,CAAAA,EACP,KAAK,MAAA,CACJe,CAAAA,CAAM1L,CAAAA,CAAU,QAAA,CAChB2L,CAAAA,CAAM3L,CAAAA,CAAU,QAAA,CAChBqD,CAAAA,CAAU,IAAA,CACV,MAED,KAAK,OAAA,CACJqI,CAAAA,CAAM,CAAA,CACNC,CAAAA,CAAM3L,CAAAA,CAAU,iBAAA,CAChBqD,CAAAA,CAAU,IAAA,CACV,MAED,KAAK,OAAA,CACJqI,CAAAA,CAAM1L,CAAAA,CAAU,SAAA,CAChB2L,CAAAA,CAAM3L,CAAAA,CAAU,SAAA,CAChBqD,CAAAA,CAAU,IAAA,CACV,MAED,KAAK,QAAA,CACJqI,CAAAA,CAAM,CAAA,CACNC,CAAAA,CAAM3L,CAAAA,CAAU,kBAAA,CAChBqD,CAAAA,CAAU,IAAA,CACV,MAED,KAAK,OAAA,CACJqI,CAAAA,CAAM1L,EAAU,SAAA,CAChB2L,CAAAA,CAAM3L,CAAAA,CAAU,SAAA,CAChBqD,CAAAA,CAAU,IAAA,CACV,MAED,KAAK,QAAA,CACJqI,CAAAA,CAAM,CAAA,CACNC,CAAAA,CAAM3L,CAAAA,CAAU,kBAAA,CAChBqD,CAAAA,CAAU,IAAA,CACV,MAED,KAAK,OAAA,CACJqI,CAAAA,CAAM1L,CAAAA,CAAU,SAAA,CAChB2L,CAAAA,CAAM3L,CAAAA,CAAU,SAAA,CAChBqD,CAAAA,CAAU,IAAA,CACV,MAED,KAAK,QAAA,CACJqI,CAAAA,CAAM,CAAA,CACNC,EAAM3L,CAAAA,CAAU,kBAAA,CAChBqD,CAAAA,CAAU,IAAA,CACV,MAED,KAAK,OAAA,CACJqI,CAAAA,CAAM,MAAA,CAAO,gBAAA,CACbC,CAAAA,CAAM,MAAA,CAAO,gBAAA,CACbtI,CAAAA,CAAU,IAAA,CACV,MAED,KAAK,QAAA,CACJqI,CAAAA,CAAM,CAAA,CACNC,CAAAA,CAAM,MAAA,CAAO,gBAAA,CACbtI,CAAAA,CAAU,IAAA,CACV,MAED,KAAK,OAAA,CACJqI,CAAAA,CAAM1L,CAAAA,CAAU,SAAA,CAChB2L,CAAAA,CAAM3L,EAAU,SAAA,CAChB,MAED,KAAK,QAAA,CACJ0L,CAAAA,CAAM,CAAA,CACNC,CAAAA,CAAM3L,CAAAA,CAAU,kBAAA,CAChB,MAED,KAAK,QAAA,CACJ0L,CAAAA,CAAM1L,CAAAA,CAAU,SAAA,CAChB2L,CAAAA,CAAM3L,CAAAA,CAAU,SAAA,CAChB,MAED,KAAK,SAAA,CACJ0L,CAAAA,CAAM,CAAA,CACNC,CAAAA,CAAM3L,CAAAA,CAAU,kBAAA,CAChB,MAED,KAAK,MAAA,CACJ0L,CAAAA,CAAM,IAAA,CACNC,CAAAA,CAAM,IAAA,CACNtI,CAAAA,CAAU,IAAA,CACV,MAED,KAAK,UAAA,CACJqI,CAAAA,CAAM,CAAA,CACNC,CAAAA,CAAM,MAAA,CAAO,gBAAA,CACb,MAED,QACCD,CAAAA,CAAM,MAAA,CAAO,gBAAA,CACbC,CAAAA,CAAM,MAAA,CAAO,gBAAA,CACb,KAAA,CAIF,IAAItR,CAAAA,CAAS8Q,CAAAA,GAAW,IAAA,EAAQA,CAAAA,EAAQ,MAAA,CACrC9H,CAAAA,CAAU6H,CAAAA,CAAE,MAAA,CAAO,MAAA,EAAA,CAAS,GAAA,GAAQA,CAAAA,CAAE,MAAA,CAAO,MAAA,EAAA,CAC7C7H,CAAAA,CACA6H,CAAAA,CAAE,GAAA,EAAA,CACFA,CAAAA,CAAE,MAAA,EAAA,CACL,OAAA7Q,CAAAA,CAASA,CAAAA,CAAO,GAAA,CAAIqR,CAAA,CAAA,CAAK,GAAA,CAAIC,CAAA,CAAA,CACtBtR,CAAAA,CAGR,IAAauR,EAAAA,CAAyBf,GAAAA,CAAI,MAAA,EAAA,CAAS,KAAA,CAAM,SAAA,CAAA,CAAW,SAAA,CAAU,MAAA,CAAA,CAAQ,IAAA,CACrFA,GAAAA,CAAI,MAAA,EAAA,CAAS,GAAA,CAAI7K,CAAAA,CAAU,SAAA,CAAA,CAAW,GAAA,CAAIA,CAAAA,CAAU,SAAA,CAAU,CAAA,CAC7D,SAAA,CAAU,MAAA,CAAA,CAEC6L,EAAAA,CAAiChB,GAAAA,CAAI,MAAA,EAAA,CAAS,KAAA,CAAM,OAAA,CAAA,CAAS,SAAA,CAAU,MAAA,CAAA,CAAQ,IAAA,CAC3FA,GAAAA,CAAI,MAAA,EAAA,CAAS,GAAA,CAAI,EAAA,EAAI,GAAA,CAAI7K,CAAAA,CAAU,SAAA,CAAU,CAAA,CAC5C,SAAA,CAAU,MAAA,CAAA,CAEZ,SAASwL,EAAAA,CACRpU,CAAAA,CACAuT,CAAAA,CACAO,CAAAA,CACAC,CAAAA,CACc,CACd,IAAIO,CAAAA,CACAC,CAAAA,CAEJ,OAAQhB,CAAAA,EACP,KAAK,OAAA,CACJe,CAAAA,CAAM1L,CAAAA,CAAU,SAAA,CAChB2L,CAAAA,CAAM3L,CAAAA,CAAU,SAAA,CAChB,MAED,KAAK,QAAA,CACJ0L,CAAAA,CAAM,EAAA,CACNC,CAAAA,CAAM3L,CAAAA,CAAU,kBAAA,CAChB,KAAA,CAIF,IAAI3F,CAAAA,CAAS8Q,CAAAA,GAAW,IAAA,EAAQA,CAAAA,EAAQ,MAAA,CAASD,CAAAA,CAAE,MAAA,CAAO,MAAA,EAAA,CAAWA,CAAAA,CAAE,MAAA,EAAA,CAEvE,OAAIQ,CAAAA,GAAQ,MAAA,GAAWrR,CAAAA,CAASA,CAAAA,CAAO,GAAA,CAAIqR,CAAA,CAAA,CAAA,CACvCC,CAAAA,GAAQ,MAAA,GAAWtR,CAAAA,CAASA,CAAAA,CAAO,GAAA,CAAIsR,CAAA,CAAA,CAAA,CACpCtR,CAAAA,CAGR,SAAS+Q,EAAAA,CACRhU,CAAAA,CACAsB,CAAAA,CACAwS,CAAAA,CACAC,CAAAA,CACc,CAGd,GAAM,CAACW,CAAAA,CAAUC,CAAA,CAAA,CAAkB3U,CAAAA,CAAO,QAAA,CAAS,KAAA,CAAM,GAAA,CAAA,CACrD4U,CAAAA,CAEJ,OAAQF,CAAAA,EACP,KAAK,QAAA,CACJE,CAAAA,CAAaT,EAAAA,CAAqBnU,CAAAA,CAAQ2U,CAAAA,CAA8Cb,CAAAA,CAAGC,CAAA,CAAA,CAC3F,MACD,KAAK,QAAA,CACJa,CAAAA,CAAaR,EAAAA,CAAqBpU,CAAAA,CAAQ2U,CAAAA,CAA8Cb,CAAAA,CAAGC,CAAA,CAAA,CAC3F,MACD,KAAK,SAAA,CACJa,CAAAA,CAAab,CAAAA,GAAW,IAAA,EAAQA,CAAAA,EAAQ,OAAA,CAAUD,CAAAA,CAAE,MAAA,CAAO,OAAA,EAAA,CAAYA,CAAAA,CAAE,OAAA,EAAA,CACzE,MACD,KAAK,QAAA,CACJc,CAAAA,CAAaP,EAAAA,CAAqBrU,CAAAA,CAAQ2U,CAAAA,CAA8Cb,CAAAA,CAAGC,CAAA,CAAA,CAC3F,MACD,KAAK,QAAA,CACJa,CAAAA,CAAaV,EAAAA,CAAqBlU,CAAAA,CAAQ2U,CAAAA,CAA8Cb,CAAAA,CAAGC,CAAA,CAAA,CAC3F,MACD,KAAK,OAAA,CAEJa,CAAAA,CAAaX,EAAAA,CAAoBjU,CAAAA,CAAQ2U,CAAAA,CAA6Cb,CAAAA,CAAGC,CAAA,CAAA,CACzF,MACD,QACCa,CAAAA,CAAad,CAAAA,CAAE,GAAA,GAAA,CAKjB,IAAI7Q,CAAAA,CAAsB6Q,CAAAA,CAAE,KAAA,CAAMc,CAAA,CAAA,CAClC,IAAA,IAASxP,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI9D,CAAAA,CAAY8D,CAAAA,EAAAA,CAC/BnC,CAAAA,CAAS6Q,CAAAA,CAAE,KAAA,CAAM7Q,CAAA,CAAA,CAElB,OAAOA,CAAAA,CAGR,SAASgR,EAAAA,CACRjU,CAAAA,CACAuT,CAAAA,CACAO,CAAAA,CACAC,CAAAA,CACc,CACd,OAAQR,CAAAA,EACP,KAAK,UAAA,CACL,KAAK,OAAA,CACJ,OAAOO,CAAAA,CAAE,KAAA,CAAM,CAACA,EAAE,MAAA,EAAA,CAAUA,CAAAA,CAAE,MAAA,EAAQ,CAAC,CAAA,CAExC,KAAK,MAAA,CACJ,OAAOA,CAAAA,CAAE,KAAA,CAAM,CAACA,CAAAA,CAAE,MAAA,EAAA,CAAUA,CAAAA,CAAE,MAAA,EAAA,CAAUA,CAAAA,CAAE,MAAA,EAAA,CAAS,CAAA,CAEpD,KAAK,QAAA,CACL,KAAK,YAAA,CAAc,CAClB,IAAMjF,CAAAA,CAAS7O,CAAAA,CAAO,MAAA,CACtB,OAAO6O,CAAAA,CACJiF,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,MAAA,CAAOjF,CAAA,CAAA,CAC3BiF,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAEtB,KAAK,aAAA,CAAe,CACnB,IAAMjF,CAAAA,CAAS7O,CAAAA,CAAO,MAAA,CACtB,OAAO6O,CAAAA,CACJiF,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAA,CAAS,GAAA,CAAIlL,CAAAA,CAAU,SAAA,CAAA,CAAW,GAAA,CAAIA,CAAAA,CAAU,SAAA,CAAU,CAAA,CAAE,MAAA,CAAOiG,CAAA,CAAA,CAC7EiF,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAA,CAAS,GAAA,CAAIlL,CAAAA,CAAU,SAAA,CAAA,CAAW,GAAA,CAAIA,CAAAA,CAAU,SAAA,CAAU,CAAA,CAExE,KAAK,YAAA,CAAc,CAElB,IAAMiM,CAAAA,CAAwC7U,CAAAA,CAAQ,UAAA,CACtD,GAAI6U,CAAAA,CAAY,CACf,IAAMD,CAAAA,CAAahB,EAAAA,CAAeiB,CAAAA,CAAY,CAC7C,WAAA,CAAaf,CAAAA,CACb,MAAA,CAAAC,CAAAA,CACA,CAAA,CAEKlF,CAAAA,CAAS7O,CAAAA,CAAO,MAAA,CAChBiD,CAAAA,CAAsB6Q,CAAAA,CAAE,KAAA,CAAMc,CAAA,CAAA,CACpC,OAAI/F,CAAAA,CAAgB5L,CAAAA,CAA6B,MAAA,CAAO4L,CAAA,CAAA,CACjD5L,CAAAA,CAER,OAAO6Q,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,GAAA,EAAK,EAEvB,QACC,OAAOA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,GAAA,EAAK,CAAA,CAAA,CAKzB,SAASI,EAAAA,CACRlU,CAAAA,CACAuT,CAAAA,CACAO,CAAAA,CACAC,CAAAA,CACc,CACd,OAAQR,CAAAA,EACP,KAAK,QAAA,CACJ,OAAOI,EAAAA,CAER,KAAK,MAAA,CACJ,OAAOI,CAAAA,GAAW,IAAA,EAAQA,CAAAA,EAAQ,IAAA,CAAOD,CAAAA,CAAE,MAAA,CAAO,IAAA,GAASA,CAAAA,CAAE,IAAA,EAAA,CAE9D,KAAK,UAAA,CACL,KAAK,OAAA,CACJ,OAAOA,CAAAA,CAAE,MAAA,CAAO,CACf,CAAA,CAAGA,CAAAA,CAAE,MAAA,EAAA,CACL,CAAA,CAAGA,CAAAA,CAAE,MAAA,EAAA,CACL,CAAA,CAEF,KAAK,MAAA,CACJ,OAAOJ,EAAAA,CAER,KAAK,MAAA,CACJ,OAAOI,CAAAA,CAAE,MAAA,CAAO,CACf,CAAA,CAAGA,CAAAA,CAAE,QAAA,CACL,CAAA,CAAGA,CAAAA,CAAE,MAAA,EAAA,CACL,CAAA,CAAGA,CAAAA,CAAE,MAAA,EAAA,CACL,CAAA,CAEF,QACC,OAAOA,CAAAA,CAAE,WAAA,CAAY,EAAE,CAAA,CAAA,CAK1B,SAASO,EAAAA,CACRrU,CAAAA,CACAuT,CAAAA,CACAO,CAAAA,CACAC,CAAAA,CACc,CACd,GAAM,CAAE,IAAA,CAAMxO,CAAAA,CAAY,MAAA,CAAAsJ,CAAAA,CAAQ,aAAA,CAAAiG,CAAA,CAAA,CAAkB9U,CAAAA,CAChD+U,CAAAA,CAKJ,GAHIxB,CAAAA,GAAe,QAAA,GAClBwB,CAAAA,CAAQ,SAAA,CAAA,CAELxB,CAAAA,GAAe,MAAA,CAAQ,OAAOO,CAAAA,CAAE,IAAA,EAAA,CACpC,GAAIP,CAAAA,GAAe,MAAA,CAAQ,CAC1B,IAAM5D,CAAAA,CAAa3P,CAAAA,CAAO,UAAA,CAC1B,GAAI,CAAC2P,CAAAA,CACJ,MAAM,IAAI,KAAA,CACT,CAAA,QAAA,EAAWvM,EAAAA,CAAarD,EAAAA,CAAeC,CAAA,CAAO,CAAC,CAAA,GAAA,EAAMuF,CAAA,CAAA,0CAAA,CAAW,CAAA,CAGlE,OAAOuO,CAAAA,CAAE,IAAA,CAAKnE,CAAA,CAAA,CAEf,GAAI4D,CAAAA,GAAe,OAAA,CAClB,OAAOiB,EAAAA,CAER,GAAIjB,CAAAA,GAAe,QAAA,CAClB,OAAOkB,EAAAA,CAGR,IAAIxR,CAAAA,CAAS8Q,CAAAA,GAAW,IAAA,EAAQA,CAAAA,EAAQ,MAAA,CAASD,CAAAA,CAAE,MAAA,CAAO,MAAA,EAAA,CAAWA,CAAAA,CAAE,MAAA,EAAA,CACvE,OAAA7Q,CAAAA,CAAS8R,CAAAA,CAAQ9R,CAAAA,CAAO,KAAA,CAAM8R,CAAA,CAAA,CAAS9R,CAAAA,CAChC4L,CAAAA,EAAUiG,CAAAA,CAAgB7R,CAAAA,CAAO,MAAA,CAAO4L,CAAA,CAAA,CAAUA,CAAAA,CAAS5L,CAAAA,CAAO,GAAA,CAAI4L,CAAA,CAAA,CAAU5L,CAAAA,CCrXxF,SAAS+R,EAAAA,CACR3U,CAAAA,CACA4U,CAAAA,CACAC,CAAAA,CACArB,CAAAA,CACY,CACZ,IAAMsB,CAAAA,CAA2C,EAAA,CAEjD,OAAW,CAACtN,CAAAA,CAAKuN,CAAA,CAAA,GAAa,MAAA,CAAO,OAAA,CAAQ/U,CAAA,CAAA,CAAU,CACtD,GAAI,CAAChB,CAAAA,CAAG+V,CAAAA,CAAUxV,CAAA,CAAA,EAAW,CAACP,CAAAA,CAAG+V,CAAAA,CAAU/Q,CAAA,CAAA,EAAQ,CAAChF,CAAAA,CAAG+V,CAAAA,CAAU/Q,CAAAA,CAAI,OAAA,CAAA,EAAY,OAAO+Q,CAAAA,EAAa,QAAA,CAAU,CAE9GD,CAAAA,CAActN,CAAA,CAAA,CAAOmN,EAAAA,CADL7R,EAAAA,CAAQiS,CAAA,CAAA,EAAa/M,EAAAA,CAAO+M,CAAA,CAAA,CAAY7M,EAAAA,CAAW6M,CAAA,CAAA,CAAYA,CAAAA,CACnCH,CAAAA,CAAYpN,CAAA,CAAA,EAAQ,EAAA,CAAIqN,CAAAA,CAAYrB,CAAA,CAAA,CAChF,QAAA,CAGD,IAAMwB,CAAAA,CAAaJ,CAAAA,CAAYpN,CAAA,CAAA,CAC/B,GAAIwN,CAAAA,GAAe,MAAA,EAAa,OAAOA,CAAAA,EAAe,UAAA,CAAY,CACjEF,CAAAA,CAActN,CAAA,CAAA,CAAOwN,CAAAA,CACrB,QAAA,CAGD,IAAMrV,CAAAA,CAASX,CAAAA,CAAG+V,CAAAA,CAAUxV,CAAA,CAAA,CAAUwV,CAAAA,CAAW,MAAA,CAC3CnS,CAAAA,CAASjD,CAAAA,CAAS4T,EAAAA,CAAe5T,CAAAA,CAAQ6T,CAAA,CAAA,CAAWC,GAAAA,CAAE,GAAA,EAAA,CACtDwB,CAAAA,CAAU,OAAOD,CAAAA,EAAe,UAAA,CAAaA,CAAAA,CAAWpS,CAAA,CAAA,CAAUA,CAAAA,CAEpEiS,CAAAA,CAAW,KAAA,CAAMlV,CAAA,CAAA,GAGpBmV,CAAAA,CAActN,CAAA,CAAA,CAAOyN,CAAAA,CAGlBtV,CAAAA,GACCkV,CAAAA,CAAW,QAAA,CAASlV,CAAA,CAAA,GACvBmV,CAAAA,CAActN,CAAA,CAAA,CAAOsN,CAAAA,CAActN,CAAA,CAAA,CAAM,QAAA,EAAA,CAAA,CAGtCqN,CAAAA,CAAW,QAAA,CAASlV,CAAA,CAAA,GACvBmV,CAAAA,CAActN,CAAA,CAAA,CAAOsN,CAAAA,CAActN,CAAA,CAAA,CAAM,QAAA,EAAA,CAAA,CAAA,EAAA,CAK5C,OAAOiM,GAAAA,CAAE,OAAOqB,CAAA,CAAA,CAGjB,SAASI,EAAAA,CACRC,CAAAA,CACA3B,CAAAA,CACC,CAED,OAAA,CAD8CC,GAAAA,EACnC,IAAA,CAAK0B,CAAAA,CAAM,UAAA,CAAA,CAGvB,IAAMC,EAAAA,CAA+B,CACpC,KAAA,CAAA,IAAa,KAAA,CACb,QAAA,CAAA,IAAgB,KAAA,CAChB,QAAA,CAAWzV,CAAAA,EAAW,CAACA,CAAAA,CAAO,OAAA,CAAA,CAGzB0V,EAAAA,CAA+B,CACpC,KAAA,CAAQ1V,CAAAA,EACPA,CAAAA,EAAQ,SAAA,EAAW,IAAA,GAAS,QAAA,EAAYA,CAAAA,EAAQ,iBAAA,EAAmB,IAAA,GAAS,QAAA,EACxE,UAAA,GAAeA,CAAAA,EAAU,EAAA,CAAA,EAAO,OAAQA,CAAAA,EAAgB,QAAA,CAAa,GAAA,CAC1E,QAAA,CAAWA,CAAAA,EAAW,CAACA,CAAAA,CAAO,OAAA,EAAYA,CAAAA,CAAO,OAAA,EAAWA,CAAAA,CAAO,UAAA,CACnE,QAAA,CAAWA,CAAAA,EAAW,CAACA,CAAAA,CAAO,OAAA,CAAA,CAW/B,IAAa2V,GAAA,CACZC,CAAAA,CACAC,CAAAA,GAEIlN,EAAAA,CAAWiN,CAAA,CAAA,CACPL,EAAAA,CAAWK,CAAA,CAAA,CAGZZ,EAAAA,CADSzM,EAAAA,CAAWqN,CAAA,CAAA,CACa,EAAA,CAAIH,EAAA,CAAA,CAGhCK,CAAAA,CAAA,CACZF,CAAAA,CACAC,CAAAA,GAGOb,EAAAA,CADSzM,EAAAA,CAAWqN,CAAA,CAAA,CACGC,CAAAA,EAAU,EAAA,CAAIH,EAAA,CAAA,CCxFtC,IAAMK,CAAAA,CAAOxD,CAAAA,CAAQ,MAAA,CAAQ,CAClC,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CAAE,UAAA,EAAW,CAC1B,IAAA,CAAMA,CAAAA,CAAK,MAAM,CAAA,CAAE,OAAA,EAAQ,CAC3B,KAAA,CAAOA,CAAAA,CAAK,OAAO,CAAA,CAAE,OAAA,EAAQ,CAAE,MAAA,EAAO,CACtC,aAAA,CAAejG,CAAAA,CAAQ,gBAAgB,CAAA,CAAE,OAAA,CAAQ,KAAK,CAAA,CAAE,OAAA,EAAQ,CAChE,KAAA,CAAOiG,CAAAA,CAAK,OAAO,CAAA,CACnB,WAAA,CAAaA,CAAAA,CAAK,cAAc,CAAA,CAAE,MAAA,EAAO,CACzC,mBAAA,CAAqBjG,CAAAA,CAAQ,uBAAuB,CAAA,CAAE,OAAA,CAAQ,KAAK,CAAA,CAAE,OAAA,EAAQ,CAC7E,eAAA,CAAiBiG,CAAAA,CAAK,kBAAkB,CAAA,CACxC,SAAA,CAAWS,CAAAA,CAAU,YAAY,CAAA,CAAE,UAAA,EAAW,CAAE,OAAA,EAAQ,CACxD,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAC9B,UAAA,EAAW,CACX,SAAA,CAAU,IAAM,IAAI,IAAM,CAAA,CAC1B,OAAA,EAAQ,CAEX,IAAA,CAAMT,CAAAA,CAAK,MAAM,CAAA,CAAE,OAAA,CAAQ,MAAM,CAAA,CACjC,MAAA,CAAQjG,CAAAA,CAAQ,QAAQ,CAAA,CAAE,OAAA,CAAQ,KAAK,CAAA,CACvC,SAAA,CAAWiG,CAAAA,CAAK,YAAY,EAC5B,UAAA,CAAYS,CAAAA,CAAU,aAAa,CACrC,CAAC,CAAA,CAMY2F,EAAAA,CAAUzD,CAAAA,CACrB,SAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CAAE,UAAA,EAAW,CAC1B,SAAA,CAAWS,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAC3C,KAAA,CAAOT,CAAAA,CAAK,OAAO,CAAA,CAAE,OAAA,EAAQ,CAAE,MAAA,EAAO,CACtC,SAAA,CAAWS,CAAAA,CAAU,YAAY,CAAA,CAAE,UAAA,EAAW,CAAE,OAAA,EAAQ,CACxD,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAC9B,UAAA,EAAW,CACX,SAAA,CAAU,IAAM,IAAI,IAAM,CAAA,CAC1B,OAAA,EAAQ,CACX,SAAA,CAAWT,CAAAA,CAAK,YAAY,CAAA,CAC5B,SAAA,CAAWA,CAAAA,CAAK,YAAY,CAAA,CAE5B,MAAA,CAAQA,CAAAA,CAAK,SAAS,CAAA,CACnB,OAAA,EAAQ,CACR,WAAW,IAAMmG,CAAAA,CAAK,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CACpD,oBAAA,CAAsBnG,CAAAA,CAAK,wBAAwB,CAAA,CAEnD,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,CACxC,CAAA,CACC/P,CAAAA,EAAU,CAACuT,CAAAA,CAAM,oBAAoB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,MAAM,CAAC,CAC1D,CAAA,CAMaoW,EAAAA,CAA4B,kBAAA,CAE5BC,EAAAA,CAAU3D,CAAAA,CACrB,SAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CAAE,UAAA,EAAW,CAC1B,SAAA,CAAWA,CAAAA,CAAK,YAAY,CAAA,CAAE,OAAA,EAAQ,CACtC,UAAA,CAAYA,CAAAA,CAAK,aAAa,CAAA,CAAE,OAAA,EAAQ,CACxC,MAAA,CAAQA,CAAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,EAAQ,CAE/B,MAAA,CAAQA,CAAAA,CAAK,SAAS,CAAA,CACnB,OAAA,EAAQ,CACR,WAAW,IAAMmG,CAAAA,CAAK,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CACpD,WAAA,CAAanG,CAAAA,CAAK,cAAc,CAAA,CAChC,YAAA,CAAcA,CAAAA,CAAK,eAAe,CAAA,CAClC,OAAA,CAASA,CAAAA,CAAK,UAAU,CAAA,CACxB,oBAAA,CAAsBS,CAAAA,CAAU,yBAAyB,CAAA,CACzD,qBAAA,CAAuBA,CAAAA,CAAU,0BAA0B,CAAA,CAC3D,KAAA,CAAOT,CAAAA,CAAK,OAAO,CAAA,CACnB,SAAUA,CAAAA,CAAK,UAAU,CAAA,CACzB,SAAA,CAAWS,CAAAA,CAAU,YAAY,CAAA,CAAE,UAAA,EAAW,CAAE,OAAA,EAAQ,CACxD,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAC9B,UAAA,EAAW,CACX,SAAA,CAAU,IAAM,IAAI,IAAM,CAAA,CAC1B,OAAA,EACL,CAAA,CACCxQ,CAAAA,EAAU,CACTuT,CAAAA,CAAM,oBAAoB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,MAAM,CAAA,CAC3CwT,CAAAA,CAAY,+BAA+B,CAAA,CAAE,EAAA,CAAGxT,CAAAA,CAAM,MAAA,CAAQA,CAAAA,CAAM,SAAS,CAC/E,CACF,CAAA,CAMasW,EAAAA,CAAe5D,CAAAA,CAC1B,cAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CAAE,UAAA,EAAW,CAC1B,UAAA,CAAYA,CAAAA,CAAK,YAAY,CAAA,CAAE,OAAA,EAAQ,CACvC,KAAA,CAAOA,CAAAA,CAAK,OAAO,CAAA,CAAE,OAAA,EAAQ,CAC7B,SAAA,CAAWS,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAC3C,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAAE,UAAA,EAAW,CAAE,OAAA,EAAQ,CACxD,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAC9B,UAAA,EAAW,CACX,SAAA,CAAU,IAAM,IAAI,IAAM,CAAA,CAC1B,OAAA,EACL,CAAA,CACCxQ,CAAAA,EAAU,CAACuT,EAAM,6BAA6B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,UAAU,CAAC,CACvE,CAAA,CAMauW,CAAAA,CAAe7D,CAAAA,CAC1B,cAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CAAE,UAAA,EAAW,CAC1B,IAAA,CAAMA,CAAAA,CAAK,MAAM,CAAA,CAAE,OAAA,EAAQ,CAC3B,IAAA,CAAMA,CAAAA,CAAK,MAAM,CAAA,CAAE,OAAA,EAAQ,CAAE,MAAA,EAAO,CACpC,KAAMA,CAAAA,CAAK,MAAM,CAAA,CACjB,SAAA,CAAWS,CAAAA,CAAU,YAAY,CAAA,CAAE,UAAA,EAAW,CAAE,OAAA,EAAQ,CACxD,QAAA,CAAUT,CAAAA,CAAK,UAAU,CAC3B,CAAA,CACC/P,CAAAA,EAAU,CAACwT,CAAAA,CAAY,wBAAwB,CAAA,CAAE,EAAA,CAAGxT,CAAAA,CAAM,IAAI,CAAC,CAClE,CAAA,CAMawW,EAAAA,CAAS9D,CAAAA,CACpB,QAAA,CACA,CACE,EAAA,CAAI3C,EAAK,IAAI,CAAA,CAAE,UAAA,EAAW,CAE1B,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAE5D,MAAA,CAAQxG,CAAAA,CAAK,SAAS,CAAA,CACnB,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMmG,CAAAA,CAAK,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CACpD,IAAA,CAAMnG,CAAAA,CAAK,MAAM,CAAA,CAAE,OAAA,CAAQ,QAAQ,CAAA,CAAE,OAAA,EAAQ,CAC7C,SAAA,CAAWS,CAAAA,CAAU,YAAY,CAAA,CAAE,UAAA,EAAW,CAAE,OAAA,EAAQ,CAExD,MAAA,CAAQT,CAAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,CAAQ,QAAQ,CAAA,CAAE,OAAA,EAAQ,CACjD,SAAA,CAAWA,CAAAA,CAAK,YAAY,CAAA,CAC5B,WAAYS,CAAAA,CAAU,aAAa,CACrC,CAAA,CACCxQ,CAAAA,EAAU,CACTuT,CAAAA,CAAM,2BAA2B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,cAAc,CAAA,CAC1DuT,CAAAA,CAAM,mBAAmB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,MAAM,CAC5C,CACF,CAAA,CAMayW,EAAAA,CAAa/D,CAAAA,CACxB,YAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CAAE,UAAA,EAAW,CAE1B,eAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAC5D,KAAA,CAAOxG,CAAAA,CAAK,OAAO,CAAA,CAAE,OAAA,EAAQ,CAC7B,IAAA,CAAMA,CAAAA,CAAK,MAAM,CAAA,CACjB,MAAA,CAAQA,CAAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,CAAQ,SAAS,CAAA,CAAE,OAAA,GAC1C,SAAA,CAAWS,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAC3C,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAAE,UAAA,EAAW,CAAE,OAAA,EAAQ,CAExD,SAAA,CAAWT,CAAAA,CAAK,YAAY,CAAA,CACzB,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMmG,CAAAA,CAAK,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CACtD,CAAA,CACClW,CAAAA,EAAU,CACTuT,CAAAA,CAAM,+BAA+B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,cAAc,CAAA,CAC9DuT,CAAAA,CAAM,sBAAsB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,KAAK,CAC9C,CACF,CAAA,CAMa0W,EAAAA,CAAShE,CAAAA,CACpB,QAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CAAE,UAAA,EAAW,CAC1B,QAAA,CAAUA,CAAAA,CAAK,WAAW,CAAA,CAAE,OAAA,CAAQ,SAAS,EAAE,OAAA,EAAQ,CACvD,IAAA,CAAMA,CAAAA,CAAK,MAAM,CAAA,CACjB,KAAA,CAAOA,CAAAA,CAAK,OAAO,CAAA,CACnB,MAAA,CAAQA,CAAAA,CAAK,QAAQ,CAAA,CACrB,GAAA,CAAKA,CAAAA,CAAK,KAAK,CAAA,CAAE,OAAA,EAAQ,CAEzB,WAAA,CAAaA,CAAAA,CAAK,SAAS,CAAA,CACxB,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMmG,CAAAA,CAAK,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CACpD,cAAA,CAAgB9J,CAAAA,CAAQ,iBAAiB,CAAA,CACzC,YAAA,CAAcA,CAAAA,CAAQ,eAAe,CAAA,CACrC,YAAA,CAAcoE,CAAAA,CAAU,gBAAgB,CAAA,CACxC,OAAA,CAAS1G,CAAAA,CAAQ,SAAS,CAAA,CAAE,OAAA,CAAQ,IAAI,CAAA,CACxC,gBAAA,CAAkBA,CAAAA,CAAQ,oBAAoB,CAAA,CAAE,OAAA,CAAQ,IAAI,CAAA,CAC5D,mBAAA,CAAqBsC,CAAAA,CAAQ,wBAAwB,CAAA,CACrD,aAAcA,CAAAA,CAAQ,gBAAgB,CAAA,CACtC,YAAA,CAAcA,CAAAA,CAAQ,eAAe,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,CAChD,SAAA,CAAWA,CAAAA,CAAQ,WAAW,CAAA,CAC9B,WAAA,CAAaoE,CAAAA,CAAU,cAAc,CAAA,CACrC,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CACjC,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAAE,UAAA,EAAW,CAAE,OAAA,EAAQ,CACxD,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAC9B,UAAA,EAAW,CACX,SAAA,CAAU,IAAM,IAAI,IAAM,CAAA,CAC1B,OAAA,EAAQ,CACX,WAAA,CAAaT,CAAAA,CAAK,aAAa,CAAA,CAC/B,QAAA,CAAUA,CAAAA,CAAK,UAAU,CAC3B,CAAA,CACC/P,CAAAA,EAAU,CACTuT,CAAAA,CAAM,qBAAqB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,QAAQ,CAAA,CAC9CuT,CAAAA,CAAM,mBAAmB,CAAA,CAAE,GAAGvT,CAAAA,CAAM,WAAW,CACjD,CACF,CAAA,CAMa2W,EAAAA,CAAaV,CAAAA,CAAmBC,CAAI,CAAA,CACpCU,EAAAA,CAAgBX,CAAAA,CAAmBE,EAAO,CAAA,CAC1CU,EAAAA,CAAgBZ,CAAAA,CAAmBI,EAAO,CAAA,CAC1CS,EAAAA,CAAqBb,CAAAA,CAAmBK,EAAY,CAAA,CACpDS,EAAAA,CAAqBd,CAAAA,CAAmBM,CAAY,CAAA,CACpDS,EAAAA,CAAef,CAAAA,CAAmBO,EAAM,CAAA,CACxCS,EAAAA,CAAmBhB,CAAAA,CAAmBQ,EAAU,CAAA,CAChDS,EAAAA,CAAejB,CAAAA,CAAmBS,EAAM,CAAA,CAExCS,EAAAA,CAAwBlD,GAAAA,CAAE,MAAA,CAAO,CAC5C,IAAA,CAAMA,GAAAA,CACH,UAAA,CACExU,CAAAA,EAAW,OAAOA,CAAAA,EAAU,QAAA,CAAWA,CAAAA,CAAM,IAAA,EAAK,CAAIA,CAAAA,CACvDwU,GAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAA,CAAG,sCAAQ,CAAA,CAAE,GAAA,CAAI,EAAA,CAAI,4DAAe,CAAA,CAAE,QAAA,EACvD,CAAA,CACF,eAAA,CAAiBA,GAAAA,CACd,UAAA,CACExU,CAAAA,EAAW,OAAOA,CAAAA,EAAU,QAAA,CAAWA,CAAAA,CAAM,IAAA,EAAK,CAAIA,CAAAA,CACvDwU,GAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,EAAE,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAChC,CAAA,CACC,SAAA,CAAWxU,CAAAA,EAAWA,CAAAA,GAAU,EAAA,CAAK,IAAA,CAAOA,CAAM,CACvD,CAAC,ECtPM,IAAM2X,EAAAA,CAAO1E,CAAAA,CAClB,MAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CAAE,UAAA,EAAW,CAC1B,IAAA,CAAMA,CAAAA,CAAK,MAAM,CAAA,CAAE,OAAA,EAAQ,CAE3B,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAC5D,UAAW/F,CAAAA,CAAU,YAAY,CAAA,CAAE,UAAA,EAAW,CAAE,OAAA,EAAQ,CACxD,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAC9B,UAAA,EAAW,CACX,SAAA,CAAU,IAAM,IAAI,IAAM,CAAA,CAC1B,OAAA,EAAQ,CAEX,QAAA,CAAUT,CAAAA,CAAK,WAAW,CAAA,CAC1B,IAAA,CAAMA,CAAAA,CAAK,MAAM,CAAA,CACjB,KAAA,CAAO3D,CAAAA,CAAQ,OAAO,CAAA,CAAE,QAAQ,CAAC,CAAA,CAAE,OAAA,EACrC,CAAA,CACCpM,CAAAA,EAAU,CACTuT,CAAAA,CAAM,yBAAyB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,cAAc,CAAA,CACxDuT,CAAAA,CAAM,iBAAiB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,QAAQ,CAAA,CAC1CuT,CAAAA,CAAM,mBAAmB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,cAAA,CAAgBA,CAAAA,CAAM,IAAI,CAChE,CACF,CAAA,CAMaqX,GAAa3E,CAAAA,CACxB,aAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CAAE,UAAA,EAAW,CAE1B,MAAA,CAAQA,CAAAA,CAAK,SAAS,CAAA,CACnB,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMqH,EAAAA,CAAK,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAEpD,MAAA,CAAQrH,CAAAA,CAAK,SAAS,CAAA,CACnB,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMmG,CAAAA,CAAK,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CACpD,SAAA,CAAW1F,CAAAA,CAAU,YAAY,CAAA,CAAE,UAAA,EAAW,CAAE,OAAA,EAClD,CAAA,CACCxQ,CAAAA,EAAU,CACTwT,CAAAA,CAAY,2BAA2B,CAAA,CAAE,EAAA,CAAGxT,CAAAA,CAAM,MAAA,CAAQA,CAAAA,CAAM,MAAM,CAAA,CACtEuT,CAAAA,CAAM,uBAAuB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,MAAM,CAAA,CAC9CuT,CAAAA,CAAM,uBAAuB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,MAAM,CAChD,CACF,CAAA,CAMasX,EAAAA,CAAarB,CAAAA,CAAmBmB,EAAI,CAAA,CACpCG,EAAAA,CAAmBtB,CAAAA,CAAmBoB,EAAU,ECzDtD,IAAMG,EAAAA,CAAe9E,CAAAA,CAC1B,cAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CAAE,UAAA,EAAW,CAE1B,IAAA,CAAMA,CAAAA,CAAK,MAAM,EAAE,OAAA,EAAQ,CAE3B,QAAA,CAAUA,CAAAA,CAAK,WAAW,CAAA,CAAE,OAAA,EAAQ,CAEpC,QAAA,CAAUA,CAAAA,CAAK,WAAW,CAAA,CAAE,OAAA,EAAQ,CAEpC,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAE5D,QAAA,CAAUzJ,CAAAA,CAAM,UAAU,EAC1B,SAAA,CAAW0D,CAAAA,CAAU,YAAY,CAAA,CAAE,UAAA,EAAW,CAAE,OAAA,EAClD,CAAA,CACCxQ,CAAAA,EAAU,CACTuT,CAAAA,CAAM,sBAAsB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,cAAc,CAAA,CACrDuT,CAAAA,CAAM,yBAAyB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,IAAA,CAAMA,CAAAA,CAAM,QAAQ,CAAA,CAC9DuT,CAAAA,CAAM,yBAAyB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,IAAA,CAAMA,CAAAA,CAAM,QAAQ,CAAA,CAC9DwT,CAAAA,CAAY,yBAAyB,CAAA,CAAE,EAAA,CACrCxT,CAAAA,CAAM,IAAA,CACNA,CAAAA,CAAM,QAAA,CACNA,CAAAA,CAAM,QACR,CACF,CACF,CAAA,CAMayX,EAAAA,CAAqBxB,CAAAA,CAAmBuB,EAAY,ECxC1D,IAAME,CAAAA,CAAmBzD,GAAAA,CAAE,OAAO,CACvC,KAAA,CAAOA,GAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA,CAClD,MAAA,CAAQA,GAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,OAAA,CAAQ,CAAC,CAC3C,CAAC,CAAA,CAKqCA,GAAAA,CAAE,OAAO,CAC7C,MAAA,CAAQA,GAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS,CAC5B,KAAA,CAAOA,GAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,OAAA,CAAQ,EAAE,CACpD,CAAC,CAAA,KASY0D,EAAAA,CAAa1D,GAAAA,CAAE,MAAA,CAAO,CACjC,MAAA,CAAQA,GAAAA,CAAE,MAAA,EAAO,CAAE,UAAS,CAC5B,SAAA,CAAWA,GAAAA,CAAE,IAAA,CAAK,CAAC,KAAA,CAAO,MAAM,CAAC,CAAA,CAAE,OAAA,CAAQ,KAAK,CAClD,CAAC,CAAA,CASY2D,EAAAA,CAAe3D,GAAAA,CAAE,MAAA,CAAO,CACnC,CAAA,CAAGA,GAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EACvB,CAAC,CAAA,CASY4D,EAAAA,CAAgBH,CAAAA,CAAiB,KAAA,CAAMC,EAAU,CAAA,CAK3BE,EAAAA,CAAc,KAAA,CAAMD,EAAY,CAAA,CAS3C3D,GAAAA,CAAE,MAAA,CAAO,CAC/B,EAAA,CAAIA,GAAAA,CAAE,MAAA,EACR,CAAC,CAAA,CAKyBA,GAAAA,CAAE,MAAA,CAAO,CACjC,EAAA,CAAIA,GAAAA,CAAE,MAAA,EAAO,CAAE,IAAA,EACjB,CAAC,CAAA,CAK6BA,GAAAA,CAAE,MAAA,CAAO,CACrC,GAAA,CAAKA,GAAAA,CAAE,KAAA,CAAMA,GAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,CAChC,CAAC,CAAA,CAS8BA,GAAAA,CAAE,MAAA,CAAO,CACtC,SAAA,CAAWA,GAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS,CAC1C,OAAA,CAASA,GAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS,CAAE,QAAA,EACjC,CAAC,EC3DM,IAAM6D,EAAAA,CAAuB,CAClC,cAAA,CACA,YAAA,CACA,mBACF,CAAA,CA8BaC,EAAAA,CAAgBrF,CAAAA,CAC3B,gBAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,EAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,UAAA,EAAY,CAAA,CAGvC,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAG5D,MAAA,CAAQxG,CAAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,EAAQ,CAC/B,IAAA,CAAMA,CAAAA,CAAK,MAAM,CAAA,CAAE,OAAA,EAAQ,CAC3B,UAAA,CAAYA,CAAAA,CAAK,aAAa,CAAA,CAG9B,SAAA,CAAWjG,CAAAA,CAAQ,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,KAAK,CAAA,CACxD,SAAA,CAAWA,CAAAA,CAAQ,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,IAAI,CAAA,CAGvD,SAAA,CAAWsC,CAAAA,CAAQ,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,CAAC,CAAA,CAGpD,SAAA,CAAW2D,CAAAA,CAAK,WAAW,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,KAAK,CAAA,CAAE,KAAA,EAAqB,CAG3E,SAAA,CAAWS,CAAAA,CAAU,YAAY,EAAE,OAAA,EAAQ,CAAE,UAAA,EAAW,CACxD,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAC9B,OAAA,EAAQ,CACR,UAAA,EAAW,CACX,SAAA,CAAU,IAAM,IAAI,IAAM,CAC/B,CAAA,CACCxQ,CAAAA,EAAU,CAETwT,CAAAA,CAAY,gCAAgC,CAAA,CAAE,EAAA,CAC5CxT,CAAAA,CAAM,cAAA,CACNA,CAAAA,CAAM,MACR,CAAA,CAEAuT,CAAAA,CAAM,wBAAwB,CAAA,CAAE,GAAGvT,CAAAA,CAAM,cAAc,CAAA,CAEvDuT,CAAAA,CAAM,4BAA4B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,cAAA,CAAgBA,CAAAA,CAAM,SAAS,CAC9E,CACF,CAAA,CAgBagY,EAAAA,CAAetF,CAAAA,CAC1B,eAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,EAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,UAAA,EAAY,CAAA,CAGvC,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAG5D,GAAA,CAAKxG,CAAAA,CAAK,KAAK,CAAA,CAAE,OAAA,EAAQ,CACzB,SAAA,CAAWA,CAAAA,CAAK,WAAW,CAAA,CAAE,OAAA,EAAQ,CAGrC,IAAA,CAAMA,CAAAA,CAAK,MAAM,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,MAAM,CAAA,CAAE,KAAA,EAAuB,CAGpE,YAAA,CAAcjD,CAAAA,CAAM,cAAc,CAAA,CAC/B,OAAA,EAAQ,CACR,OAAA,CAAQ,EAAE,CAAA,CACV,KAAA,EAA0B,CAG7B,WAAA,CAAaiD,CAAAA,CAAK,aAAa,CAAA,CAG/B,MAAA,CAAQA,CAAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,MAAM,CAAA,CAAE,KAAA,EAAyB,CAC1E,QAAA,CAAUA,CAAAA,CAAK,WAAW,CAAA,CAI1B,YAAA,CAAcjG,CAAAA,CAAQ,eAAe,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,KAAK,CAAA,CAC9D,eAAA,CAAiBgD,CAAAA,CAAM,kBAAkB,CAAA,CACtC,OAAA,EAAQ,CACR,OAAA,CAAQ,EAAE,CAAA,CACV,KAAA,EAAgB,CACnB,eAAA,CAAiBA,CAAAA,CAAM,kBAAkB,CAAA,CACtC,OAAA,EAAQ,CACR,OAAA,CAAQ,EAAE,CAAA,CACV,OAAgB,CACnB,aAAA,CAAegE,CAAAA,CAAQ,gBAAA,CAAkB,CACvC,MAAA,CAAQ,EAAA,CACR,IAAA,CAAMgH,EACR,CAAC,CAAA,CACE,OAAA,EAAQ,CACR,OAAA,CAAQ,YAAY,CAAA,CACpB,KAAA,EAAyB,CAG5B,SAAA,CAAWhO,CAAAA,CAAQ,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,IAAI,CAAA,CAGvD,OAAA,CAASsC,CAAAA,CAAQ,SAAS,CAAA,CAAE,OAAA,GAAU,OAAA,CAAQ,CAAC,CAAA,CAG/C,SAAA,CAAWoE,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAAW,CACxD,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAC9B,OAAA,EAAQ,CACR,UAAA,EAAW,CACX,SAAA,CAAU,IAAM,IAAI,IAAM,CAC/B,CAAA,CACCxQ,CAAAA,EAAU,CAETwT,CAAAA,CAAY,+BAA+B,CAAA,CAAE,EAAA,CAC3CxT,CAAAA,CAAM,cAAA,CACNA,CAAAA,CAAM,SAAA,CACNA,CAAAA,CAAM,GACR,CAAA,CAEAuT,CAAAA,CAAM,uBAAuB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,cAAc,CAAA,CAEtDuT,CAAAA,CAAM,0BAA0B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,cAAA,CAAgBA,CAAAA,CAAM,SAAS,CAAA,CAE1EuT,CAAAA,CAAM,0BAA0B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,MAAA,CAAQA,CAAAA,CAAM,QAAQ,CACnE,CACF,EAQaiY,EAAAA,CAAqBvF,CAAAA,CAChC,sBAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,EAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,UAAA,EAAY,CAAA,CACvC,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAC5D,SAAA,CAAWxG,EAAK,WAAW,CAAA,CAAE,OAAA,EAAQ,CACrC,UAAA,CAAY3D,CAAAA,CAAQ,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,CAAC,CAAA,CACrD,UAAA,CAAYtC,CAAAA,CAAQ,aAAa,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,KAAK,CAAA,CAC1D,SAAA,CAAW0G,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAAW,CACxD,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAC9B,OAAA,EAAQ,CACR,UAAA,EAAW,CACX,SAAA,CAAU,IAAM,IAAI,IAAM,CAC/B,CAAA,CACCxQ,CAAAA,EAAU,CACTwT,CAAAA,CAAY,kCAAkC,CAAA,CAAE,EAAA,CAC9CxT,CAAAA,CAAM,cAAA,CACNA,CAAAA,CAAM,SACR,CAAA,CACAuT,CAAAA,CAAM,gCAAgC,CAAA,CAAE,EAAA,CACtCvT,CAAAA,CAAM,UAAA,CACNA,CAAAA,CAAM,cACR,CACF,CACF,EAaA,SAASkY,EAAAA,CAAmBzY,CAAAA,CAAoC,CAC9D,GAAI,OAAOA,CAAAA,EAAU,QAAA,CAAU,OAC/B,IAAM0Y,CAAAA,CAAS1Y,CAAAA,CAAM,IAAA,EAAK,CAC1B,GAAI,EAAA,CAAC0Y,CAAAA,EAAUA,CAAAA,GAAW,GAAA,CAAA,CAE1B,GAAI,CACF,OAAO,IAAA,CAAK,mBAAA,CAAoBA,CAAM,CAAA,CAAE,CAAC,CAC3C,CAAA,KAAQ,CACN,MACF,CACF,CAEO,IAAMC,CAAAA,CAAenE,GAAAA,CACzB,MAAA,EAAO,CACP,GAAA,CAAI,CAAC,CAAA,CACL,MAAA,CAAQxU,CAAAA,EAAUyY,EAAAA,CAAmBzY,CAAK,CAAA,GAAM,MAAA,CAAW,uBAAuB,CAAA,CAClF,SAAA,CAAWA,CAAAA,EAAUyY,EAAAA,CAAmBzY,CAAK,CAAE,CAAA,CAErC4Y,EAAAA,CAA2BpE,GAAAA,CAAE,MAAA,CAAOA,GAAAA,CAAE,MAAA,EAAO,CAAGA,GAAAA,CAAE,MAAA,EAAQ,CAAA,CAE1DqE,EAAAA,CAAsBrE,GAAAA,CAAE,IAAA,CAAK,CAAC,KAAA,CAAO,KAAK,CAAC,CAAA,CAC3CsE,EAAAA,CAAwBtE,GAAAA,CAAE,IAAA,CAAK,CAAC,MAAA,CAAQ,KAAK,CAAC,CAAA,CAC9CuE,EAAAA,CAA0BvE,GAAAA,CAAE,IAAA,CAAK,CAAC,MAAA,CAAQ,QAAA,CAAU,MAAM,CAAC,CAAA,CAC3DwE,EAAAA,CAA0BxE,GAAAA,CAAE,IAAA,CAAK6D,EAAoB,CAAA,CAGrDY,EAAAA,CAAqBzC,EAAmB8B,EAAAA,CAAe,CAClE,MAAA,CAAQ,IAAMK,CAAAA,CACd,IAAA,CAAOhV,CAAAA,EAAWA,CAAAA,CAAO,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,EAAE,CAAA,CACtC,UAAA,CAAaA,CAAAA,EAAWA,CAAAA,CAAO,GAAA,CAAI,EAAE,CACvC,CAAC,CAAA,CAGYuV,EAAAA,CAAoB1C,CAAAA,CAAmB+B,EAAAA,CAAc,CAChE,GAAA,CAAM5U,CAAAA,EAAWA,CAAAA,CAAO,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CACtC,SAAA,CAAYA,CAAAA,EAAWA,CAAAA,CAAO,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAC9C,CAAC,CAAA,CAOYwV,EAAAA,CAAuB3E,GAAAA,CAAE,MAAA,CAAO,CAC3C,MAAA,CAAQmE,CAAAA,CACR,UAAA,CAAYnE,GAAAA,CAAE,KAAA,CAAMA,GAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CACzC,OAAA,CAASA,GAAAA,CAAE,MAAA,GAAS,QAAA,EACtB,CAAC,CAAA,CAGY4E,EAAAA,CAAsB5E,GAAAA,CAAE,MAAA,CAAO,CAC1C,MAAA,CAAQmE,CAAAA,CACR,UAAA,CAAYnE,GAAAA,CAAE,KAAA,CAAMA,GAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,EAAE,CAAA,CAC7D,QAAA,CAAUA,GAAAA,CAAE,MAAA,CAAOA,IAAE,MAAA,EAAO,CAAGA,GAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAC7C,CAAC,CAAA,CAEY6E,EAAAA,CAAmB7E,GAAAA,CAAE,MAAA,CAAO,CACvC,OAAA,CAASA,GAAAA,CAAE,MAAA,EAAO,CAClB,WAAA,CAAaA,GAAAA,CAAE,OAAA,EAAQ,CACvB,QAAA,CAAUoE,EAAAA,CAAyB,QAAA,EACrC,CAAC,CAAA,CAEYU,EAAAA,CAA6B9E,GAAAA,CAAE,MAAA,CAAO,CACjD,QAASA,GAAAA,CAAE,MAAA,CAAOA,GAAAA,CAAE,MAAA,EAAO,CAAG6E,EAAgB,CAChD,CAAC,CAAA,CAGYE,EAAAA,CAAyBtB,CAAAA,CAAiB,OAAA,EAAQ,CAGlDuB,EAAAA,CAAwBhF,GAAAA,CAAE,MAAA,CAAO,CAC5C,SAAA,CAAWA,GAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS,CAC/B,GAAA,CAAKA,GAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAClB,CAAC,CAAA,CAAE,KAAA,CAAMyD,CAAAA,CAAiB,OAAA,EAAS,CAAA,CAOtBwB,EAAAA,CAA6BjF,GAAAA,CAAE,MAAA,CAAO,CACjD,MAAA,CAAQmE,CACV,CAAC,CAAA,CAGYe,EAAAA,CAA8BlF,GAAAA,CAAE,MAAA,CAAO,CAClD,QAAA,CAAUA,GAAAA,CAAE,KAAA,CAAMA,GAAAA,CAAE,MAAA,CAAO,CACzB,GAAA,CAAKA,GAAAA,CAAE,MAAA,EAAO,CACd,SAAA,CAAWA,GAAAA,CAAE,MAAA,EAAO,CACpB,YAAA,CAAcoE,EAChB,CAAC,CAAC,CACJ,CAAC,ECrUM,IAAMe,EAAAA,CAAQ1G,CAAAA,CACnB,OAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,EAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,UAAA,EAAY,CAAA,CAEvC,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,SAAU,SAAU,CAAC,CAAA,CAC5D,IAAA,CAAMxG,CAAAA,CAAK,MAAM,CAAA,CAAE,OAAA,EAAQ,CAC3B,IAAA,CAAMA,CAAAA,CAAK,MAAM,CAAA,CAAE,OAAA,EAAQ,CAC3B,WAAA,CAAaA,CAAAA,CAAK,aAAa,CAAA,CAC/B,QAAA,CAAUjG,CAAAA,CAAQ,WAAW,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,KAAK,CAAA,CACtD,SAAA,CAAW0G,CAAAA,CAAU,YAAY,CAAA,CAAE,SAAQ,CAAE,UAAA,EAAW,CACxD,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAC9B,OAAA,EAAQ,CACR,UAAA,EAAW,CACX,SAAA,CAAU,IAAM,IAAI,IAAM,CAC/B,CAAA,CACCxQ,CAAAA,EAAU,CACTwT,CAAAA,CAAY,qBAAqB,CAAA,CAAE,EAAA,CAAGxT,CAAAA,CAAM,cAAA,CAAgBA,CAAAA,CAAM,IAAI,CAAA,CACtEuT,CAAAA,CAAM,2BAA2B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,cAAc,CAC5D,CACF,CAAA,CAMaqZ,EAAAA,CAAapD,CAAAA,CAAmBmD,EAAK,ECxB3C,IAAME,EAAAA,CAAkB5G,CAAAA,CAC7B,kBAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,EAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,UAAA,EAAY,CAAA,CAEvC,MAAA,CAAQA,CAAAA,CAAK,SAAS,CAAA,CACnB,OAAA,EAAQ,CACR,WAAW,IAAMqJ,EAAAA,CAAM,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAErD,MAAA,CAAQrJ,CAAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,EAAQ,CAC/B,OAAA,CAASA,CAAAA,CAAK,SAAS,CAAA,CAAE,OAAA,EAAQ,CACjC,MAAA,CAAQjD,CAAAA,CAAM,QAAQ,CAAA,CAAE,KAAA,EAAuB,CAC/C,UAAA,CAAYA,CAAAA,CAAM,YAAY,CAAA,CAAE,KAAA,EAAsC,CACtE,SAAUhD,CAAAA,CAAQ,UAAU,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,KAAK,CAAA,CAErD,MAAA,CAAQiG,CAAAA,CAAK,QAAQ,CAAA,CACrB,SAAA,CAAWS,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAC/C,CAAA,CACCxQ,CAAAA,EAAU,CAETwT,CAAAA,CAAY,2CAA2C,CAAA,CAAE,EAAA,CACvDxT,CAAAA,CAAM,MAAA,CACNA,CAAAA,CAAM,MAAA,CACNA,CAAAA,CAAM,OACR,CAAA,CACAuT,CAAAA,CAAM,8BAA8B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,MAAM,CAAA,CACrDuT,CAAAA,CAAM,6BAA6B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,MAAM,CACtD,CACF,CAAA,CAMauZ,EAAAA,CAAuBtD,CAAAA,CAAmBqD,EAAe,ECrD/D,IAAME,EAAAA,CAAc9G,CAAAA,CAAQ,aAAA,CAAe,CAChD,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,EAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,UAAA,EAAY,CAAA,CACvC,UAAA,CAAYA,CAAAA,CAAK,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,MAAA,EAAO,CAChD,MAAA,CAAQA,CAAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,EAAQ,CAC/B,WAAA,CAAaA,CAAAA,CAAK,aAAa,CAAA,CAC/B,SAAA,CAAWS,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAC/C,CAAC,CAAA,CAMYiJ,EAAAA,CAAmBxD,CAAAA,CAAmBuD,EAAW,CAAA,CAcjDE,EAAAA,CAA6C,CACxD,KAAA,CAAO,CAAC,OAAO,CAAA,CACf,KAAA,CAAO,CAAC,kBAAA,CAAoB,YAAA,CAAc,eAAA,CAAiB,aAAa,CAAA,CACxE,MAAA,CAAQ,CAAC,sBAAA,CAAwB,oBAAA,CAAsB,gBAAgB,CAAA,CACvE,MAAA,CAAQ,CAAC,oBAAA,CAAsB,mBAAmB,CAAA,CAClD,MAAA,CAAQ,CAAC,qBAAqB,CAChC,ECFO,IAAMC,EAAAA,CAAQjH,CAAAA,CACnB,OAAA,CACA,CAEE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,EAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,UAAA,EAAY,CAAA,CAIvC,IAAA,CAAMA,CAAAA,CAAK,MAAM,CAAA,CAAE,OAAA,EAAQ,CAG3B,IAAA,CAAMA,CAAAA,CAAK,MAAM,CAAA,CAAE,SAAQ,CAAE,KAAA,EAAgB,CAG7C,MAAA,CAAQA,CAAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,EAAQ,CAG/B,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,UAAA,CAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAG5D,KAAA,CAAOxG,CAAAA,CAAK,OAAO,CAAA,CAAE,OAAA,EAAQ,CAC7B,IAAA,CAAMA,CAAAA,CAAK,MAAM,CAAA,CACjB,IAAA,CAAMA,CAAAA,CAAK,MAAM,CAAA,CACjB,QAAA,CAAUA,CAAAA,CAAK,WAAW,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,OAAO,CAAA,CAAE,KAAA,EAAoB,CAG3E,UAAA,CAAYA,CAAAA,CAAK,aAAa,CAAA,CAC9B,KAAA,CAAO3D,CAAAA,CAAQ,OAAO,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,CAAC,CAAA,CAG3C,OAAA,CAAStC,CAAAA,CAAQ,SAAS,CAAA,CAAE,SAAQ,CAAE,OAAA,CAAQ,IAAI,CAAA,CAGlD,kBAAA,CAAoBiG,CAAAA,CAAK,qBAAqB,CAAA,CAG9C,MAAA,CAAQA,CAAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,EAAkB,CAGnD,QAAA,CAAUjD,CAAAA,CAAM,UAAU,CAAA,CAG1B,SAAA,CAAW0D,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAAW,CACxD,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAAE,SAAQ,CAAE,UAAA,EAC/C,CAAA,CACCxQ,CAAAA,EAAU,CAETwT,CAAAA,CAAY,oBAAoB,CAAA,CAAE,EAAA,CAAGxT,CAAAA,CAAM,IAAA,CAAMA,CAAAA,CAAM,cAAc,CAAA,CAErEuT,CAAAA,CAAM,eAAe,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,cAAc,CAAA,CAC9CuT,CAAAA,CAAM,sBAAsB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,MAAA,CAAQA,CAAAA,CAAM,cAAc,CAAA,CACnEuT,CAAAA,CAAM,kBAAkB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,MAAM,CAAA,CACzCuT,CAAAA,CAAM,uBAAuB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,UAAU,CAAA,CAClDuT,CAAAA,CAAM,gBAAgB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,IAAI,CACvC,CACF,CAAA,CAUa4Z,EAAAA,CAAiB,WAAA,CAOjBC,EAAAA,CAAa5D,CAAAA,CAAmB0D,EAAK,CAAA,CAOrCG,EAAAA,CAAe7F,GAAAA,CAAE,MAAA,CAAO,CACnC,IAAA,CAAMA,GAAAA,CAAE,MAAA,EACV,CAAC,CAAA,CAGY8F,EAAAA,CAAiB9F,GAAAA,CAAE,MAAA,CAAO,CACrC,MAAA,CAAQA,GAAAA,CAAE,IAAA,CAAK,CAAC,OAAA,CAAS,KAAK,CAAC,CACjC,CAAC,CAAA,CAGY+F,EAAAA,CAAoB/F,GAAAA,CAAE,MAAA,CAAO,CACxC,MAAA,CAAQA,GAAAA,CAAE,IAAA,CAAK,CAAC,OAAA,CAAS,KAAK,CAAC,CAAA,CAAE,QAAA,EACnC,CAAC,CAAA,CAAE,KAAA,CAAMyD,CAAAA,CAAiB,OAAA,EAAS,CAAA,CAOtBuC,EAAAA,CAAqBhG,GAAAA,CAAE,MAAA,CAAO,CACzC,IAAA,CAAMA,GAAAA,CAAE,MAAA,EACV,CAAC,CAAA,CAGYiG,EAAAA,CAA+BjG,GAAAA,CAAE,MAAA,CAAO,CACnD,IAAA,CAAMA,GAAAA,CAAE,MAAA,EAAO,CACf,OAAA,CAASA,GAAAA,CAAE,OAAA,EACb,CAAC,CAAA,CAGYkG,EAAAA,CAAmBN,GAAW,IAAA,CAAK,CAC9C,IAAA,CAAM,IAAA,CACN,KAAA,CAAO,IAAA,CACP,IAAA,CAAM,IAAA,CACN,IAAA,CAAM,IAAA,CACN,QAAA,CAAU,IAAA,CACV,UAAA,CAAY,IAAA,CACZ,KAAA,CAAO,IAAA,CACP,MAAA,CAAQ,IAAA,CACR,QAAA,CAAU,IACZ,CAAC,CAAA,CAAE,MAAA,CAAO,CACR,QAAA,CAAU5F,GAAAA,CAAE,IAAA,CAAK,CAAC,OAAA,CAAS,UAAU,CAAC,CAAA,CAAE,UAAS,CACjD,MAAA,CAAQA,GAAAA,CAAE,IAAA,CAAK,CAAC,OAAA,CAAS,KAAK,CAAC,CACjC,CAAC,CAAA,CAGYmG,EAAAA,CAAmBP,EAAAA,CAAW,IAAA,CAAK,CAC9C,KAAA,CAAO,IAAA,CACP,IAAA,CAAM,IAAA,CACN,IAAA,CAAM,IAAA,CACN,QAAA,CAAU,IAAA,CACV,UAAA,CAAY,IAAA,CACZ,KAAA,CAAO,IAAA,CACP,OAAA,CAAS,IAAA,CACT,QAAA,CAAU,IACZ,CAAC,CAAA,CAAE,OAAA,EAAQ,CAAE,MAAA,CAAO,CAClB,QAAA,CAAU5F,GAAAA,CAAE,IAAA,CAAK,CAAC,OAAA,CAAS,UAAU,CAAC,CAAA,CAAE,QAAA,EAC1C,CAAC,CAAA,CAGYoG,EAAAA,CAAqBR,EAAAA,CAC/B,IAAA,CAAK,CACJ,EAAA,CAAI,IAAA,CACJ,SAAA,CAAW,IAAA,CACX,SAAA,CAAW,IACb,CAAC,CAAA,CACA,OAAA,EAAQ,CACR,MAAA,CAAO,CACN,IAAA,CAAM5F,GAAAA,CAAE,MAAA,EACV,CAAC,EC7KI,IAAMqG,EAAAA,CAAc,CAEzB,OAAA,CAASvK,CAAAA,CAAK,UAAU,CAAA,CAGxB,MAAA,CAAQA,CAAAA,CAAK,SAAS,CACxB,CAAA,CAWawK,EAAAA,CAAc,CAEzB,OAAA,CAASxK,CAAAA,CAAK,UAAU,CAAA,CAGxB,SAAA,CAAWA,CAAAA,CAAK,YAAY,CAC9B,CAAA,CAcayK,EAAAA,CAAa,CAExB,OAAA,CAASzK,EAAK,UAAU,CAAA,CAAE,KAAA,EAAM,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,EAAE,CAAA,CAGtD,QAAA,CAAUA,CAAAA,CAAK,WAAW,CAAA,CAAE,KAAA,EAAM,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,EAAE,CAC1D,CAAA,CAca0K,EAAAA,CAAmB,CAC9B,GAAGH,EAAAA,CACH,GAAGC,EAAAA,CACH,GAAGC,EACL,CAAA,CAcaE,GAAqBjV,CAAAA,EAAsB;AAAA,+BAAA,EACvBA,CAAS,iBAAiBA,CAAS,CAAA;AAAA,+BAAA,EACnCA,CAAS,kBAAkBA,CAAS,CAAA;AAAA,CAAA,CAMxDkV,EAAAA,CAAY,CACvB,IAAA,CAAM,MAAA,CACN,IAAK,KAAA,CACL,IAAA,CAAM,MAAA,CACN,KAAA,CAAO,OAAA,CACP,IAAA,CAAM,MAAA,CACN,MAAA,CAAQ,QACV,ECvEO,IAAMC,EAAAA,CAA4B,CACvC,QACA,WAAA,CACA,UAAA,CACA,WAAA,CACA,SACF,CAAA,CAGaC,EAAAA,CAAsB,CAAC,aAAA,CAAe,aAAa,CAAA,CAGnDC,EAAAA,CAA4B,CAAC,SAAA,CAAW,QAAA,CAAU,WAAA,CAAa,UAAU,CAAA,CAGzEC,GAAyB,CAAC,UAAA,CAAY,QAAA,CAAU,QAAQ,CAAA,CAGxDC,EAAAA,CAA8B,CACzC,QAAA,CACA,aACA,SAAA,CACA,iBAAA,CACA,WAAA,CACA,QAAA,CACA,aACF,CAAA,CA6BaC,EAAAA,CAAUvI,CAAAA,CACrB,UACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,EAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,UAAA,EAAY,CAAA,CACvC,QAAA,CAAUA,CAAAA,CAAK,WAAW,CAAA,CAAE,SAAQ,CAEpC,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAC5D,OAAA,CAASxG,EAAK,SAAS,CAAA,CAAE,OAAA,EAAQ,CACjC,kBAAA,CAAoBA,CAAAA,CAAK,qBAAqB,CAAA,CAC3C,SAAQ,CACR,KAAA,EAAgC,CAChC,OAAA,CAAQ,WAAW,CAAA,CACtB,gBAAA,CAAkBA,CAAAA,CAAK,mBAAmB,CAAA,CACvC,OAAA,EAAQ,CACR,KAAA,EAA8B,CAC9B,OAAA,CAAQ,SAAS,CAAA,CACpB,OAAQA,CAAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,EAAoB,CACrD,QAAA,CAAUjD,EAAM,UAAU,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,EAA0B,CAChE,WAAA,CAAa0D,CAAAA,CAAU,cAAc,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAAW,CAC5D,SAAA,CAAWA,CAAAA,CAAU,YAAY,EAAE,OAAA,EAAQ,CAAE,UAAA,EAAW,CACxD,mBAAA,CAAqBA,CAAAA,CAAU,uBAAuB,CACxD,EACCxQ,CAAAA,EAAU,CACTwT,CAAAA,CAAY,uBAAuB,CAAA,CAAE,EAAA,CAAGxT,CAAAA,CAAM,cAAA,CAAgBA,EAAM,QAAQ,CAAA,CAC5EuT,CAAAA,CAAM,iCAAiC,CAAA,CAAE,EAAA,CACvCvT,CAAAA,CAAM,QAAA,CACNA,EAAM,kBAAA,CACNA,CAAAA,CAAM,cACR,CACF,CACF,CAAA,CAWakb,EAAAA,CAAkBxI,CAAAA,CAC7B,mBACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,EAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,UAAA,EAAY,CAAA,CACvC,QAAA,CAAUA,CAAAA,CAAK,WAAW,CAAA,CAAE,SAAQ,CACpC,OAAA,CAASA,CAAAA,CAAK,SAAS,CAAA,CAAE,OAAA,EAAQ,CACjC,MAAA,CAAQA,EAAK,QAAQ,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,EAA4B,CAC7D,QAAA,CAAUjD,CAAAA,CAAM,UAAU,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,EAA0B,CAChE,WAAA,CAAa0D,CAAAA,CAAU,cAAc,EAAE,OAAA,EAAQ,CAAE,UAAA,EAAW,CAC5D,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAAE,SAAQ,CAAE,UAAA,EAC/C,CAAA,CACCxQ,CAAAA,EAAU,CACTwT,CAAAA,CAAY,4BAA4B,EAAE,EAAA,CAAGxT,CAAAA,CAAM,QAAQ,CAC7D,CACF,CAAA,CAUamb,EAAAA,CAAwBzI,CAAAA,CACnC,0BACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,EAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,UAAA,EAAY,CAAA,CACvC,QAAA,CAAUA,CAAAA,CAAK,WAAW,CAAA,CAAE,SAAQ,CACpC,QAAA,CAAUe,CAAAA,CAAQ,WAAA,CAAa,CAAE,MAAA,CAAQ,GAAI,CAAC,CAAA,CAAE,SAAQ,CACxD,OAAA,CAASA,CAAAA,CAAQ,SAAA,CAAW,CAAE,MAAA,CAAQ,EAAG,CAAC,EAAE,OAAA,EAAQ,CACpD,KAAA,CAAOA,CAAAA,CAAQ,OAAA,CAAS,CAAE,MAAA,CAAQ,EAAA,CAAI,KAAM8J,EAA0B,CAAC,CAAA,CACpE,OAAA,EAAQ,CACR,KAAA,EAA8B,CACjC,UAAA,CAAY9J,EAAQ,aAAA,CAAe,CAAE,MAAA,CAAQ,EAAA,CAAI,IAAA,CAAM+J,EAAoB,CAAC,CAAA,CACzE,SAAQ,CACR,KAAA,EAAwB,CAC3B,QAAA,CAAU/N,CAAAA,CAAM,UAAU,CAAA,CAAE,OAAA,GAAU,KAAA,EAA0B,CAChE,OAAA,CAASA,CAAAA,CAAM,SAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,OAA+B,CACnE,WAAA,CAAaiD,CAAAA,CAAK,cAAc,CAAA,CAAE,OAAA,EAAQ,CAC1C,cAAA,CAAgBe,EAAQ,iBAAA,CAAmB,CAAE,MAAA,CAAQ,EAAG,CAAC,CAAA,CAAE,OAAA,EAAQ,CACnE,YAAaA,CAAAA,CAAQ,cAAA,CAAgB,CAAE,MAAA,CAAQ,GAAI,CAAC,CAAA,CACpD,aAAA,CAAeA,EAAQ,gBAAA,CAAkB,CAAE,MAAA,CAAQ,EAAG,CAAC,CAAA,CACvD,kBAAA,CAAoBhE,CAAAA,CAAM,qBAAqB,CAAA,CAAE,KAAA,EAA+B,CAChF,iBAAA,CAAmBA,CAAAA,CAAM,oBAAoB,CAAA,CAAE,KAAA,GAE/C,SAAA,CAAWA,CAAAA,CAAM,WAAW,CAAA,CAAE,KAAA,EAA+B,CAC7D,WAAA,CAAa0D,CAAAA,CAAU,cAAc,CAAA,CAAE,OAAA,EAAQ,CAC/C,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,GAAU,UAAA,EAC/C,CAAA,CACCxQ,CAAAA,EAAU,CACTwT,CAAAA,CAAY,+BAA+B,CAAA,CAAE,GAAGxT,CAAAA,CAAM,QAAA,CAAUA,CAAAA,CAAM,QAAA,CAAUA,CAAAA,CAAM,OAAO,CAAA,CAC7FuT,CAAAA,CAAM,mCAAmC,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,QAAA,CAAUA,EAAM,KAAA,CAAOA,CAAAA,CAAM,WAAW,CAC9F,CACF,CAAA,CAGaob,EAAAA,CAA0B1I,CAAAA,CAAQ,4BAAA,CAA8B,CAC3E,QAAA,CAAU3C,CAAAA,CAAK,WAAW,EAAE,UAAA,EAAW,CACvC,UAAA,CAAYe,CAAAA,CAAQ,aAAA,CAAe,CAAE,MAAA,CAAQ,GAAI,CAAC,CAAA,CAAE,OAAA,EAAQ,CAC5D,WAAA,CAAaN,CAAAA,CAAU,cAAc,CAAA,CAAE,OAAA,GACvC,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAC/C,CAAC,CAAA,CAKY6K,EAAAA,CAAoB3I,CAAAA,CAC/B,qBAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,EACV,UAAA,EAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,UAAA,EAAY,CAAA,CACvC,SAAUe,CAAAA,CAAQ,WAAA,CAAa,CAAE,MAAA,CAAQ,GAAI,CAAC,CAAA,CAAE,OAAA,GAChD,SAAA,CAAWA,CAAAA,CAAQ,WAAA,CAAa,CAAE,MAAA,CAAQ,EAAA,CAAI,IAAA,CAAMgK,EAA0B,CAAC,CAAA,CAC5E,OAAA,EAAQ,CACR,KAAA,EAA8B,CACjC,MAAA,CAAQhK,CAAAA,CAAQ,QAAA,CAAU,CAAE,MAAA,CAAQ,EAAA,CAAI,IAAA,CAAMiK,EAAuB,CAAC,CAAA,CACnE,OAAA,EAAQ,CACR,OAA2B,CAC9B,QAAA,CAAUhL,CAAAA,CAAK,WAAW,CAAA,CAC1B,SAAA,CAAWA,CAAAA,CAAK,YAAY,EACzB,UAAA,CAAW,IAAMoL,EAAAA,CAAsB,EAAA,CAAI,CAAE,QAAA,CAAU,UAAW,CAAC,EACtE,eAAA,CAAiBrK,CAAAA,CAAQ,kBAAA,CAAoB,CAAE,MAAA,CAAQ,EAAG,CAAC,CAAA,CAC3D,cAAeA,CAAAA,CAAQ,gBAAA,CAAkB,CAAE,MAAA,CAAQ,EAAG,CAAC,CAAA,CACvD,MAAA,CAAQA,EAAQ,QAAA,CAAU,CAAE,MAAA,CAAQ,EAAA,CAAI,IAAA,CAAMkK,EAA4B,CAAC,CAAA,CACxE,SAAQ,CACR,KAAA,EAA8B,CAC9B,OAAA,CAAQ,QAAQ,CAAA,CACnB,cAAA,CAAgBlK,CAAAA,CAAQ,iBAAA,CAAmB,CAAE,MAAA,CAAQ,EAAG,CAAC,CAAA,CACzD,WAAA,CAAaf,CAAAA,CAAK,cAAc,CAAA,CAAE,SAAQ,CAC1C,SAAA,CAAWe,CAAAA,CAAQ,YAAA,CAAc,CAAE,MAAA,CAAQ,EAAG,CAAC,EAC/C,YAAA,CAAcf,CAAAA,CAAK,eAAe,CAAA,CAClC,QAAA,CAAUjD,CAAAA,CAAM,UAAU,CAAA,CAAE,SAAQ,CAAE,KAAA,EAA+B,CAAE,OAAA,CAAQ,EAAE,CAAA,CACjF,SAAA,CAAW0D,EAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAAW,CACxD,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAAW,CACxD,WAAA,CAAaA,CAAAA,CAAU,cAAc,CACvC,CAAA,CACCxQ,CAAAA,EAAU,CACTwT,CAAAA,CAAY,wCAAwC,CAAA,CACjD,EAAA,CAAGxT,CAAAA,CAAM,QAAQ,CAAA,CACjB,KAAA,CAAMyD,CAAAA,CAAAA,EAAMzD,CAAAA,CAAM,MAAM,CAAA,0DAAA,CAA4D,CAAA,CACvFuT,CAAAA,CAAM,gCAAgC,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,QAAA,CAAUA,CAAAA,CAAM,SAAS,CAAA,CAC1EuT,CAAAA,CAAM,gCAAgC,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,MAAA,CAAQA,CAAAA,CAAM,SAAS,CAC1E,CACF,EAWasb,EAAAA,CAAgB5I,CAAAA,CAC3B,gBAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,YAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,UAAA,EAAY,CAAA,CACvC,QAAA,CAAUA,EAAK,WAAW,CAAA,CAAE,OAAA,EAAQ,CAEpC,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,SAAQ,CACR,UAAA,CAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAC5D,GAAA,CAAKxG,CAAAA,CAAK,KAAK,CAAA,CAAE,OAAA,EAAQ,CACzB,KAAA,CAAOjD,EAAM,OAAO,CAAA,CAAE,OAAA,EAAQ,CAC9B,SAAA,CAAW0D,CAAAA,CAAU,YAAY,CAAA,CAAE,SAAQ,CAAE,UAAA,EAC/C,CAAA,CACCxQ,CAAAA,EAAU,CACTwT,CAAAA,CAAY,mBAAmB,EAAE,EAAA,CAC/BxT,CAAAA,CAAM,cAAA,CACNA,CAAAA,CAAM,QAAA,CACNA,CAAAA,CAAM,GACR,CACF,CACF,CAAA,CAMaub,EAAAA,CAAetF,CAAAA,CAAmBgF,EAAO,CAAA,CACzCO,EAAAA,CAAuBvF,CAAAA,CAAmBiF,EAAe,EACzDO,EAAAA,CAA6BxF,CAAAA,CAAmBkF,EAAAA,CAAuB,CAClF,WAAA,CAAa,IAAMlH,GAAAA,CAAE,GAAA,GACrB,cAAA,CAAgB,IAAMA,GAAAA,CAAE,MAAA,EAAO,CAAE,KAAA,CAAM,gBAAgB,CACzD,CAAC,CAAA,CACYyH,EAAAA,CAAyBzF,CAAAA,CAAmBoF,EAAiB,CAAA,CAC7DM,EAAAA,CAAqB1F,CAAAA,CAAmBqF,EAAa,EAErDM,EAAAA,CAAyB3H,GAAAA,CAAE,MAAA,CAAO,CAC7C,KAAA,CAAOA,GAAAA,CAAE,MAAA,EAAO,CAAE,MAAK,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,QAAA,GACzC,KAAA,CAAOA,GAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,GAAA,CAAI,CAAC,EAAE,GAAA,CAAI,GAAG,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA,CAClD,MAAA,CAAQA,GAAAA,CAAE,QAAO,CAAE,GAAA,EAAI,CAAE,WAAA,EAAY,CAAE,OAAA,CAAQ,CAAC,CAClD,CAAC,CAAA,CAEY4H,EAAAA,CAAoC5H,GAAAA,CAAE,MAAA,CAAO,CACxD,QAAA,CAAUA,GAAAA,CAAE,MAAA,GAAS,KAAA,CAAM,uCAAuC,CAAA,CAClE,OAAA,CAASA,GAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,EAAE,CACnC,CAAC,CAAA,CAEY6H,EAAAA,CAA6B7H,GAAAA,CAAE,OAAO,CACjD,QAAA,CAAUA,GAAAA,CAAE,MAAA,EAAO,CAAE,KAAA,CAAM,uCAAuC,CAAA,CAClE,QAASA,GAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,EAAE,CAAA,CACjC,UAAWA,GAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,QAAA,EAAS,CAAE,GAAA,CAAI,IAAM,IAAA,CAAO,IAAI,CAAA,CAC5D,MAAA,CAAQA,GAAAA,CAAE,MAAA,EAAO,CAAE,KAAA,CAAM,gBAAgB,CAC3C,CAAC,CAAA,CAEY8H,EAAAA,CAA6B9H,GAAAA,CAAE,MAAA,CAAO,CACjD,QAAA,CAAUA,IAAE,MAAA,EAAO,CAAE,IAAA,EAAK,CAC1B,MAAA,CAAQA,GAAAA,CAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,EAAY,CACrC,WAAA,CAAaA,GAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,IAAA,CAAO,IAAI,CAChD,CAAC,CAAA,CAEY+H,EAAAA,CAA+B/H,IAAE,MAAA,CAAO,CACnD,QAAA,CAAUA,GAAAA,CAAE,MAAA,EAAO,CAAE,IAAA,EACvB,CAAC,CAAA,CAEYgI,EAAAA,CAA2BP,EAAAA,CAAuB,IAAA,CAAK,CAAE,EAAA,CAAI,IAAK,CAAC,EAAE,QAAA,EAAS,CAC9EQ,EAAAA,CAAsCjI,GAAAA,CAAE,MAAA,CAAO,CAC1D,QAAA,CAAUA,GAAAA,CAAE,QAAO,CAAE,KAAA,CAAM,uCAAuC,CAAA,CAClE,eAAA,CAAiBA,GAAAA,CAAE,IAAA,CAAK,CAAC,SAAU,SAAA,CAAW,QAAQ,CAAC,CAAA,CAAE,QAAA,EAAS,CAClE,SAAA,CAAWA,GAAAA,CAAE,SAAQ,CAAE,QAAA,EACzB,CAAC,CAAA,CACYkI,EAAAA,CAAgCF,GCxTtC,IAAMG,GAAmB1J,CAAAA,CAC9B,mBAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,GACA,UAAA,CAAW,IAAM,MAAA,CAAO,UAAA,EAAY,CAAA,CACvC,QAAA,CAAUA,CAAAA,CAAK,WAAW,CAAA,CAAE,OAAA,EAAQ,CAEpC,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,OAAA,GACH,aAAA,CAAeA,CAAAA,CAAK,gBAAgB,CAAA,CAAE,SAAQ,CAC9C,SAAA,CAAWS,CAAAA,CAAU,YAAY,EAAE,OAAA,EAAQ,CAAE,UAAA,EAAW,CACxD,QAAA,CAAUT,CAAAA,CAAK,UAAU,CAAA,CAAE,SAC7B,CAAA,CACC/P,CAAAA,EAAU,CACTwT,CAAAA,CAAY,yBAAyB,CAAA,CAAE,EAAA,CACrCxT,EAAM,cAAA,CACNA,CAAAA,CAAM,QAAA,CACNA,CAAAA,CAAM,aACR,CACF,CACF,CAAA,CAMaqc,GAAwBpG,CAAAA,CAAmBmG,EAAgB,ECjCjE,IAAME,EAAAA,CAA+B,CAC1C,MAAA,CACA,QAAA,CACA,UACA,MAAA,CACA,UAAA,CACA,QAAA,CACA,KAAA,CACA,MACF,CAAA,CAGaC,EAAAA,CAAuC,CAClD,SACA,OAAA,CACA,SACF,CAAA,CAGaC,EAAAA,CAAgB9J,CAAAA,CAC3B,gBAAA,CACA,CACE,EAAA,CAAI3C,EAAK,IAAI,CAAA,CACV,UAAA,EAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,UAAA,EAAY,CAAA,CACvC,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAC5D,QAAA,CAAUxG,EAAK,WAAW,CAAA,CAAE,OAAA,EAAQ,CACpC,MAAA,CAAQe,CAAAA,CAAQ,QAAA,CAAU,CAAE,OAAQ,GAAI,CAAC,CAAA,CAAE,OAAA,EAAQ,CACnD,QAAA,CAAUf,CAAAA,CAAK,WAAW,EAAE,OAAA,EAAQ,CACpC,KAAA,CAAOe,CAAAA,CAAQ,OAAA,CAAS,CAAE,MAAA,CAAQ,EAAG,CAAC,CAAA,CAAE,OAAA,EAAQ,CAChD,IAAA,CAAMA,CAAAA,CAAQ,MAAA,CAAQ,CAAE,MAAA,CAAQ,EAAG,CAAC,CAAA,CACjC,OAAA,EAAQ,CACR,KAAA,EAAgC,CACnC,SAAA,CAAWf,CAAAA,CAAK,YAAY,CAAA,CAC5B,WAAA,CAAa7B,EAAAA,CAAQ,cAAc,CAAA,CACnC,YAAA,CAAcpE,CAAAA,CAAQ,eAAe,EACrC,SAAA,CAAW0G,CAAAA,CAAU,YAAA,CAAc,CAAE,aAAc,IAAK,CAAC,CAAA,CACzD,SAAA,CAAW1D,EAAM,YAAY,CAAA,CAAE,KAAA,EAAe,CAC9C,SAAA,CAAWgE,CAAAA,CAAQ,YAAA,CAAc,CAAE,OAAQ,GAAI,CAAC,CAAA,CAChD,KAAA,CAAOf,CAAAA,CAAK,QAAQ,CAAA,CACpB,OAAA,CAASA,EAAK,SAAS,CAAA,CACvB,MAAA,CAAQA,CAAAA,CAAK,QAAQ,CAAA,CACrB,MAAA,CAAQe,CAAAA,CAAQ,SAAU,CAAE,MAAA,CAAQ,EAAG,CAAC,CAAA,CACrC,OAAA,EAAQ,CACR,KAAA,GACA,OAAA,CAAQ,QAAQ,CAAA,CACnB,QAAA,CAAUN,CAAAA,CAAU,WAAA,CAAa,CAAE,YAAA,CAAc,IAAK,CAAC,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAAW,CAC9E,SAAA,CAAWA,CAAAA,CAAU,aAAc,CAAE,YAAA,CAAc,IAAK,CAAC,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,GACrE,SAAA,CAAWA,CAAAA,CAAU,YAAA,CAAc,CAAE,YAAA,CAAc,IAAK,CAAC,CAAA,CAAE,SAAQ,CAAE,UAAA,EACvE,CAAA,CACCxQ,CAAAA,EAAU,CACTwT,CAAAA,CAAY,6BAA6B,EAAE,EAAA,CACzCxT,CAAAA,CAAM,cAAA,CACNA,CAAAA,CAAM,QAAA,CACNA,CAAAA,CAAM,MAAA,CACNA,CAAAA,CAAM,SACNA,CAAAA,CAAM,KACR,CAAA,CACAuT,CAAAA,CAAM,2BAA2B,CAAA,CAAE,EAAA,CACjCvT,CAAAA,CAAM,eACNA,CAAAA,CAAM,MAAA,CACNA,CAAAA,CAAM,QACR,CAAA,CACAuT,CAAAA,CAAM,0BAA0B,CAAA,CAAE,GAChCvT,CAAAA,CAAM,cAAA,CACNA,CAAAA,CAAM,MAAA,CACNA,CAAAA,CAAM,KAAA,CACNA,CAAAA,CAAM,MACR,EACAuT,CAAAA,CAAM,wBAAwB,CAAA,CAAE,EAAA,CAC9BvT,CAAAA,CAAM,cAAA,CACNA,CAAAA,CAAM,SAAA,CACNA,EAAM,KACR,CACF,CACF,EC1EO,IAAMyc,EAAAA,CAA0B,CACrC,UAAA,CACA,mBACA,YAAA,CACA,YAAA,CACA,WAAA,CACA,QAAA,CACA,SAAA,CACA,YAAA,CACA,QAAA,CACA,SACF,EAKaC,EAAAA,CAAiC,CAC5C,UAAA,CACA,kBAAA,CACA,YAAA,CACA,YACF,CAAA,CAEaC,EAAAA,CAAyBjK,EACpC,0BAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,EAAW,CACX,QAAQtM,CAAAA,CAAAA,iBAAAA,CAAsB,CAAA,CACjC,cAAA,CAAgBsM,CAAAA,CAAK,iBAAiB,CAAA,CAAE,OAAA,EAAQ,CAEhD,gBAAiBA,CAAAA,CAAK,mBAAmB,CAAA,CAAE,OAAA,EAAQ,CAEnD,OAAA,CAASA,CAAAA,CAAK,SAAS,EAAE,OAAA,EAAQ,CAEjC,QAAA,CAAUA,CAAAA,CAAK,WAAW,CAAA,CAAE,OAAA,EAAQ,CACpC,SAAU3D,CAAAA,CAAQ,UAAU,CAAA,CAAE,OAAA,EAAQ,CAEtC,QAAA,CAAU2D,CAAAA,CAAK,WAAW,EAAE,OAAA,EAAQ,CAEpC,KAAA,CAAOA,CAAAA,CAAK,OAAO,CAAA,CAAE,OAAA,EAAQ,CAC7B,OAAQe,CAAAA,CAAQ,QAAA,CAAU,CAAE,MAAA,CAAQ,EAAA,CAAI,IAAA,CAAM2L,EAAwB,CAAC,EACpE,OAAA,EAAQ,CACR,KAAA,EAA2B,CAC3B,OAAA,CAAQ,UAAU,CAAA,CACrB,OAAA,CAASrQ,EAAQ,SAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,CAAC,CAAA,CAE/C,WAAA,CAAa2D,EAAK,cAAc,CAAA,CAChC,SAAA,CAAWA,CAAAA,CAAK,YAAY,CAAA,CAE5B,OAAA,CAASA,CAAAA,CAAK,SAAS,CAAA,CACvB,SAAA,CAAWS,CAAAA,CAAU,YAAA,CAAc,CAAE,YAAA,CAAc,IAAK,CAAC,EAAE,OAAA,EAAQ,CAAE,UAAA,EAAW,CAChF,SAAA,CAAWA,CAAAA,CAAU,YAAA,CAAc,CAAE,aAAc,IAAK,CAAC,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAAW,CAChF,YAAA,CAAcA,EAAU,eAAA,CAAiB,CAAE,YAAA,CAAc,IAAK,CAAC,CAAA,CAC/D,UAAA,CAAYA,CAAAA,CAAU,cAAe,CAAE,YAAA,CAAc,IAAK,CAAC,CAC7D,CAAA,CACCxQ,CAAAA,EAAU,CACTwT,CAAAA,CAAY,qCAAqC,CAAA,CAAE,EAAA,CAAGxT,CAAAA,CAAM,KAAK,CAAA,CACjEwT,CAAAA,CAAY,sCAAsC,CAAA,CAC/C,GAAGxT,CAAAA,CAAM,cAAA,CAAgBA,CAAAA,CAAM,QAAA,CAAUA,CAAAA,CAAM,QAAQ,CAAA,CACvD,KAAA,CAAMyD,IAAMzD,CAAAA,CAAM,MAAM,CAAA,6DAAA,CAA+D,CAAA,CAC1FuT,CAAAA,CAAM,qCAAqC,CAAA,CAAE,EAAA,CAAGvT,EAAM,MAAA,CAAQA,CAAAA,CAAM,SAAS,CAAA,CAC7EuT,CAAAA,CAAM,kCAAkC,CAAA,CAAE,EAAA,CAAGvT,EAAM,cAAA,CAAgBA,CAAAA,CAAM,SAAS,CACpF,CACF,CAAA,CAMa4c,EAAAA,CAAwBlK,CAAAA,CACnC,0BACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,EAAW,CACX,OAAA,CAAQtM,oBAAsB,CAAA,CACjC,SAAA,CAAWsM,CAAAA,CAAK,YAAY,CAAA,CACzB,OAAA,EAAQ,CACR,UAAA,CAAW,IAAM4M,EAAAA,CAAuB,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CACtE,IAAA,CAAM5M,EAAK,MAAM,CAAA,CAAE,OAAA,EAAQ,CAC3B,WAAA,CAAaS,CAAAA,CAAU,cAAA,CAAgB,CAAE,aAAc,IAAK,CAAC,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAAW,CACpF,QAAA,CAAUpE,EAAQ,UAAU,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,CAAC,CAAA,CACjD,QAAA,CAAUoE,EAAU,WAAA,CAAa,CAAE,YAAA,CAAc,IAAK,CAAC,CAAA,CACvD,SAAA,CAAWT,CAAAA,CAAK,YAAY,CAC9B,CAAA,CACC/P,CAAAA,EAAU,CAACuT,CAAAA,CAAM,uCAAuC,CAAA,CAAE,EAAA,CAAGvT,EAAM,WAAW,CAAC,CAClF,MCpCa6c,EAAAA,CAAWnK,CAAAA,CACtB,UAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,YAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,YAAY,CAAA,CAGvC,KAAA,CAAOA,CAAAA,CAAK,OAAO,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,EAAoB,CACnD,OAAA,CAASA,CAAAA,CAAK,UAAU,EAExB,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,UAAA,CAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAG5D,GAAA,CAAKxG,CAAAA,CAAK,KAAK,CAAA,CAAE,SAAQ,CACzB,KAAA,CAAOjD,CAAAA,CAAM,OAAO,CAAA,CACpB,SAAA,CAAWiD,CAAAA,CAAK,YAAY,EAAE,KAAA,EAAwB,CAAE,OAAA,CAAQ,QAAQ,CAAA,CAGxE,SAAA,CAAWjG,CAAAA,CAAQ,WAAW,EAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,KAAK,CAAA,CAGvD,aAAA,CAAesC,CAAAA,CAAQ,gBAAgB,EAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,CAAC,CAAA,CAG5D,WAAA,CAAa2D,CAAAA,CAAK,aAAa,EAG/B,SAAA,CAAWA,CAAAA,CAAK,YAAY,CAAA,CAC5B,SAAA,CAAWA,CAAAA,CAAK,YAAY,CAAA,CAC5B,UAAWS,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAAW,CACxD,SAAA,CAAWA,EAAU,YAAY,CAAA,CAC9B,OAAA,EAAQ,CACR,UAAA,EAAW,CACX,SAAA,CAAU,IAAM,IAAI,IAAM,CAC/B,CAAA,CACCxQ,CAAAA,EAAU,CAETwT,CAAAA,CAAY,qBAAqB,CAAA,CAAE,GACjCxT,CAAAA,CAAM,KAAA,CACNyD,CAAAA,CAAAA,SAAAA,EAAezD,CAAAA,CAAM,OAAO,CAAA,KAAA,CAAA,CAC5ByD,CAAAA,CAAAA,SAAAA,EAAezD,CAAAA,CAAM,cAAc,CAAA,KAAA,CAAA,CACnCA,CAAAA,CAAM,GACR,CAAA,CAEAuT,CAAAA,CAAM,wBAAwB,CAAA,CAAE,EAAA,CAAGvT,EAAM,KAAA,CAAOA,CAAAA,CAAM,GAAG,CAAA,CAEzDuT,CAAAA,CAAM,qBAAqB,CAAA,CAAE,EAAA,CAAGvT,EAAM,cAAc,CAAA,CAEpDuT,CAAAA,CAAM,qBAAqB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,OAAO,CAC/C,CACF,CAAA,CAYa8c,EAAAA,CAAiBpK,CAAAA,CAC5B,kBACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,EACV,UAAA,EAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,UAAA,EAAY,CAAA,CAGvC,WAAYA,CAAAA,CAAK,aAAa,CAAA,CAAE,OAAA,EAAQ,CAGxC,MAAA,CAAQjD,CAAAA,CAAM,QAAQ,EAAE,OAAA,EAAQ,CAAE,KAAA,EAA+B,CAGjE,OAAA,CAASV,CAAAA,CAAQ,SAAS,CAAA,CAAE,SAAQ,CAAE,OAAA,CAAQ,CAAC,CAAA,CAG/C,YAAA,CAAcU,CAAAA,CAAM,eAAe,CAAA,CAGnC,YAAaiD,CAAAA,CAAK,aAAa,CAAA,CAC/B,UAAA,CAAYjG,CAAAA,CAAQ,YAAY,CAAA,CAAE,OAAA,GAAU,OAAA,CAAQ,KAAK,CAAA,CAEzD,SAAA,CAAW0G,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,GAAU,UAAA,EAC/C,CAAA,CACCxQ,CAAAA,EAAU,CAETwT,CAAAA,CAAY,qCAAqC,CAAA,CAAE,GACjDxT,CAAAA,CAAM,UAAA,CACNA,CAAAA,CAAM,OACR,CACF,CACF,CAAA,CAMa+c,EAAAA,CAAqB9I,IAAE,IAAA,CAAK,CAAC,QAAA,CAAU,QAAA,CAAU,eAAA,CAAiB,eAAe,CAAC,CAAA,CAClF+I,GAAyB/I,GAAAA,CAAE,IAAA,CAAK,CAAC,QAAA,CAAU,QAAA,CAAU,SAAA,CAAW,MAAM,CAAC,EAEvEgJ,EAAAA,CAAgBhH,CAAAA,CAAmB4G,EAAQ,CAAA,CAC3CK,EAAAA,CAAsBjH,CAAAA,CAAmB6G,EAAc,CAAA,CASvDK,GAAkBF,EAAAA,CAAc,IAAA,CAAK,CAChD,KAAA,CAAO,IAAA,CACP,GAAA,CAAK,IAAA,CACL,cAAA,CAAgB,KAChB,OAAA,CAAS,IACX,CAAC,CAAA,CAAE,MAAA,CAAO,CACR,YAAA,CAAchJ,GAAAA,CAAE,SAAQ,CAAE,QAAA,EAC5B,CAAC,CAAA,CAKYmJ,EAAAA,CAAoBH,EAAAA,CAC9B,IAAA,CAAK,CACJ,KAAA,CAAO,IAAA,CACP,cAAA,CAAgB,IAAA,CAChB,OAAA,CAAS,IACX,CAAC,CAAA,CACA,MAAMvF,CAAgB,CAAA,CACtB,MAAA,CAAO,CACN,SAAA,CAAWzD,GAAAA,CAAE,MAAA,EAAO,CAAE,UACxB,CAAC,CAAA,CAKUoJ,EAAAA,CAAqBJ,EAAAA,CAAc,IAAA,CAAK,CACnD,KAAA,CAAO,KACP,GAAA,CAAK,IAAA,CACL,KAAA,CAAO,IAAA,CACP,cAAA,CAAgB,IAAA,CAChB,OAAA,CAAS,IAAA,CACT,UAAW,IAAA,CACX,WAAA,CAAa,IAAA,CACb,SAAA,CAAW,IACb,CAAC,CAAA,CAKYK,EAAAA,CAAwBL,GAAc,IAAA,CAAK,CACtD,KAAA,CAAO,IAAA,CACP,GAAA,CAAK,IAAA,CACL,cAAA,CAAgB,IAAA,CAChB,QAAS,IACX,CAAC,EClLM,IAAMM,GAAe7K,CAAAA,CAC1B,eAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,GACA,UAAA,CAAW,IAAM,MAAA,CAAO,UAAA,EAAY,CAAA,CAGvC,GAAA,CAAKA,CAAAA,CAAK,KAAK,CAAA,CAAE,OAAA,EAAQ,CAAE,MAAA,EAAO,CAClC,IAAA,CAAMA,CAAAA,CAAK,MAAM,EAAE,OAAA,EAAQ,CAG3B,WAAA,CAAaA,CAAAA,CAAK,aAAa,CAAA,CAC/B,OAAA,CAASjG,CAAAA,CAAQ,SAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,KAAK,CAAA,CAGnD,iBAAA,CAAmBsC,CAAAA,CAAQ,oBAAoB,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,GAAG,CAAA,CAGtE,UAAA,CAAYU,CAAAA,CAAM,YAAY,CAAA,CAC3B,OAAA,EAAQ,CACR,OAAA,CAAQ,EAAE,CAAA,CACV,KAAA,GAGH,SAAA,CAAWiD,CAAAA,CAAK,YAAY,CAAA,CAC5B,SAAA,CAAWS,CAAAA,CAAU,YAAY,CAAA,CAAE,SAAQ,CAAE,UAAA,EAAW,CACxD,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAC9B,OAAA,GACA,UAAA,EAAW,CACX,SAAA,CAAU,IAAM,IAAI,IAAM,CAC/B,CAAA,CACCxQ,GAAU,CAACuT,CAAAA,CAAM,uBAAuB,CAAA,CAAE,GAAGvT,CAAAA,CAAM,GAAG,CAAC,CAC1D,EAYawd,EAAAA,CAAuB9K,CAAAA,CAClC,wBAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,YAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,UAAA,EAAY,CAAA,CAGvC,MAAA,CAAQA,EAAK,SAAS,CAAA,CACnB,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMwN,EAAAA,CAAa,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAE5D,cAAA,CAAgBxN,CAAAA,CAAK,iBAAiB,CAAA,CACnC,SAAQ,CACR,UAAA,CAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAG5D,OAAA,CAASzM,CAAAA,CAAQ,SAAS,CAAA,CAAE,OAAA,EAAQ,CACpC,iBAAA,CAAmBsC,EAAQ,oBAAoB,CAAA,CAC/C,UAAA,CAAYU,CAAAA,CAAM,YAAY,CAAA,CAAE,KAAA,EAAuB,CAGvD,UAAWiD,CAAAA,CAAK,YAAY,CAAA,CAC5B,SAAA,CAAWS,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,GAAU,UAAA,EAC/C,CAAA,CACCxQ,CAAAA,EAAU,CAETwT,CAAAA,CAAY,8BAA8B,CAAA,CAAE,GAAGxT,CAAAA,CAAM,MAAA,CAAQA,CAAAA,CAAM,cAAc,CAAA,CAEjFuT,CAAAA,CAAM,yBAAyB,CAAA,CAAE,GAAGvT,CAAAA,CAAM,cAAc,CAC1D,CACF,CAAA,CAOayd,EAAAA,CAAsBxJ,GAAAA,CAAE,MAAA,CAAO,CAC1C,IAAA,CAAMA,GAAAA,CAAE,IAAA,CAAK,CAAC,WAAA,CAAa,aAAA,CAAe,SAAA,CAAW,YAAY,CAAC,CAAA,CAClE,QAAA,CAAUA,GAAAA,CAAE,IAAA,CAAK,CAAC,IAAA,CAAM,KAAA,CAAO,IAAA,CAAM,MAAO,IAAA,CAAM,IAAA,CAAM,KAAA,CAAO,KAAK,CAAC,CAAA,CACrE,KAAA,CAAOA,GAAAA,CAAE,SACX,CAAC,CAAA,CAGYyJ,EAAAA,CAAoBzH,CAAAA,CAAmBsH,EAAY,CAAA,CACnDI,EAAAA,CAA4B1H,EAAmBuH,EAAoB,CAAA,CAO1EI,EAAAA,CAA0B3J,GAAAA,CAC7B,OAAO,CACN,cAAA,CAAgBA,GAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAAS,CAC3C,QAAA,CAAUA,GAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAC9B,CAAC,CAAA,CACA,MAAA,CAAQ4J,GAAS,CAAC,EAAEA,CAAAA,CAAK,cAAA,EAAkBA,CAAAA,CAAK,QAAA,CAAA,CAAW,CAC1D,OAAA,CAAS,6BACT,IAAA,CAAM,CAAC,gBAAgB,CACzB,CAAC,CAAA,CACA,SAAA,CAAWA,CAAAA,GAAU,CACpB,cAAA,CAAgBA,CAAAA,CAAK,cAAA,EAAkBA,CAAAA,CAAK,QAC9C,CAAA,CAAE,CAAA,CAOSC,EAAAA,CAAwB7J,IAAE,MAAA,CAAO,CAC5C,GAAA,CAAKA,GAAAA,CAAE,MAAA,EAAO,CACd,cAAA,CAAgBA,GAAAA,CAAE,QAAO,CAAE,QAAA,EAAS,CACpC,QAAA,CAAUA,GAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GACrB,MAAA,CAAQA,GAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS,CAC5B,QAAA,CAAUA,GAAAA,CAAE,QAAO,CAAE,QAAA,EAAS,CAC9B,UAAA,CAAYA,GAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EACzB,CAAC,CAAA,CAAE,SAAA,CAAW4J,CAAAA,GAAU,CACtB,GAAGA,CAAAA,CACH,cAAA,CAAgBA,EAAK,cAAA,EAAkBA,CAAAA,CAAK,QAC9C,CAAA,CAAE,CAAA,CAGWE,EAAAA,CAAsB9J,GAAAA,CAAE,MAAA,CAAO,CAC1C,GAAA,CAAKA,GAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CACvB,CAAC,EAGY+J,EAAAA,CAAwBtG,CAAAA,CAAiB,OAAA,EAAQ,CAGjDuG,EAAAA,CAAyBhK,GAAAA,CAAE,MAAA,CAAO,CAC7C,eAAgBA,GAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAAS,CAC3C,SAAUA,GAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAC9B,CAAC,CAAA,CACE,MAAA,CAAQ4J,CAAAA,EAAS,CAAC,EAAEA,CAAAA,CAAK,cAAA,EAAkBA,CAAAA,CAAK,QAAA,CAAA,CAAW,CAC1D,OAAA,CAAS,4BAAA,CACT,IAAA,CAAM,CAAC,gBAAgB,CACzB,CAAC,CAAA,CACA,UAAWA,CAAAA,GAAU,CACpB,cAAA,CAAgBA,CAAAA,CAAK,cAAA,EAAkBA,CAAAA,CAAK,QAC9C,CAAA,CAAE,EAOSK,EAAAA,CAA4BR,EAAAA,CACtC,IAAA,CAAK,CACJ,EAAA,CAAI,IAAA,CACJ,SAAA,CAAW,IAAA,CACX,UAAW,IACb,CAAC,CAAA,CACA,OAAA,EAAQ,CACR,MAAA,CAAO,CACN,EAAA,CAAIzJ,IAAE,MAAA,EACR,CAAC,CAAA,CAGUkK,EAAAA,CAA4BlK,GAAAA,CAAE,MAAA,CAAO,CAChD,GAAIA,GAAAA,CAAE,MAAA,EAAO,CAAE,IAAA,EACjB,CAAC,CAAA,CAGYmK,EAAAA,CAA0BnK,IAAE,MAAA,CAAO,CAC9C,OAAA,CAASA,GAAAA,CAAE,MAAA,EAAO,CAClB,cAAA,CAAgBA,GAAAA,CAAE,QAAO,CAAE,QAAA,EAAS,CACpC,QAAA,CAAUA,GAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GACrB,OAAA,CAASA,GAAAA,CAAE,OAAA,EAAQ,CACnB,iBAAA,CAAmBA,GAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,QAAA,EAAS,CACvD,UAAA,CAAYA,IAAE,KAAA,CAAMwJ,EAAmB,CAAA,CAAE,QAAA,EAC3C,CAAC,CAAA,CAAE,GAAA,CAAIG,EAAuB,CAAA,CAC3B,SAAA,CAAWC,CAAAA,GAAU,CACpB,OAAA,CAASA,CAAAA,CAAK,OAAA,CACd,cAAA,CAAgBA,EAAK,cAAA,CACrB,OAAA,CAASA,CAAAA,CAAK,OAAA,CACd,iBAAA,CAAmBA,CAAAA,CAAK,iBAAA,CACxB,UAAA,CAAYA,EAAK,UACnB,CAAA,CAAE,CAAA,CAGSQ,EAAAA,CAA6BpK,GAAAA,CAAE,MAAA,CAAO,CACjD,OAAA,CAASA,IAAE,MAAA,EAAO,CAClB,cAAA,CAAgBA,GAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS,CACpC,SAAUA,GAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EACvB,CAAC,CAAA,CAAE,GAAA,CAAI2J,EAAuB,CAAA,CAC3B,SAAA,CAAWC,CAAAA,GAAU,CACpB,OAAA,CAASA,CAAAA,CAAK,OAAA,CACd,cAAA,CAAgBA,EAAK,cACvB,CAAA,CAAE,ECtNG,IAAMS,GAAQ5L,CAAAA,CACnB,OAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,GACA,UAAA,CAAW,IAAM,MAAA,CAAO,UAAA,EAAY,CAAA,CAEvC,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,SAAU,SAAU,CAAC,CAAA,CAG5D,QAAA,CAAUxG,CAAAA,CAAK,WAAW,CAAA,CAAE,UAAA,CAAW,IAAmBuO,EAAAA,CAAM,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAC3F,WAAA,CAAavO,EAAK,cAAc,CAAA,CAGhC,QAAA,CAAUA,CAAAA,CAAK,UAAU,CAAA,CAAE,OAAA,EAAQ,CACnC,SAAUA,CAAAA,CAAK,WAAW,CAAA,CAAE,OAAA,EAAQ,CACpC,IAAA,CAAMzG,EAAAA,CAAO,MAAA,CAAQ,CAAE,IAAA,CAAM,QAAS,CAAC,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,CAAC,EAG5D,eAAA,CAAiByG,CAAAA,CAAK,kBAAkB,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,EAA2B,CAC/E,WAAYA,CAAAA,CAAK,aAAa,CAAA,CAAE,OAAA,EAAQ,CACxC,aAAA,CAAeA,CAAAA,CAAK,gBAAgB,EAGpC,SAAA,CAAWA,CAAAA,CAAK,YAAY,CAAA,CAC5B,QAAA,CAAUjG,CAAAA,CAAQ,WAAW,CAAA,CAAE,SAAQ,CAAE,OAAA,CAAQ,KAAK,CAAA,CAGtD,QAAA,CAAUiG,CAAAA,CAAK,UAAU,CAAA,CAGzB,MAAO3D,CAAAA,CAAQ,OAAO,CAAA,CACtB,MAAA,CAAQA,CAAAA,CAAQ,QAAQ,CAAA,CACxB,MAAA,CAAQ2D,EAAK,QAAQ,CAAA,CAGrB,GAAA,CAAKA,CAAAA,CAAK,KAAK,CAAA,CACf,KAAA,CAAOA,CAAAA,CAAK,OAAO,EACnB,IAAA,CAAMA,CAAAA,CAAK,MAAM,CAAA,CAAE,KAAA,EAAM,CAAE,OAAA,CAAQ,EAAE,CAAA,CACrC,UAAA,CAAYA,CAAAA,CAAK,aAAa,CAAA,CAG9B,QAAA,CAAUjD,CAAAA,CAAM,UAAU,EAAE,KAAA,EAA+B,CAAE,OAAA,CAAQ,EAAE,CAAA,CAGvE,SAAA,CAAWiD,CAAAA,CAAK,YAAY,CAAA,CAAE,OAAA,EAAQ,CACtC,SAAA,CAAWS,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,GAAU,UAAA,EAAW,CACxD,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAC9B,OAAA,EAAQ,CACR,YAAW,CACX,SAAA,CAAU,IAAM,IAAI,IAAM,CAAA,CAC7B,SAAA,CAAWA,CAAAA,CAAU,YAAY,CACnC,CAAA,CACCxQ,CAAAA,EAAU,CAETwT,CAAAA,CAAY,sBAAsB,CAAA,CAAE,EAAA,CAClCxT,EAAM,cAAA,CACNA,CAAAA,CAAM,eAAA,CACNA,CAAAA,CAAM,UACR,CAAA,CAEAwT,CAAAA,CAAY,6BAA6B,EACtC,EAAA,CAAGxT,CAAAA,CAAM,QAAA,CAAUA,CAAAA,CAAM,WAAW,CAAA,CACpC,KAAA,CAAMyD,CAAAA,CAAAA,EAAMzD,EAAM,QAAQ,CAAA,YAAA,CAAc,CAAA,CAE3C6S,EAAAA,CAAM,mBAAA,CAAqBpP,CAAAA,CAAAA,EAAMzD,CAAAA,CAAM,QAAQ,qBAAqBA,CAAAA,CAAM,EAAE,CAAA,CAAE,CAAA,CAE9EuT,CAAAA,CAAM,sBAAsB,CAAA,CACzB,EAAA,CAAGvT,EAAM,cAAA,CAAgBA,CAAAA,CAAM,UAAU,CAAA,CACzC,KAAA,CAAMyD,CAAAA,CAAAA,EAAMzD,CAAAA,CAAM,SAAS,UAAU,CAAA,CACxCuT,CAAAA,CAAM,oBAAoB,CAAA,CACvB,EAAA,CAAGvT,CAAAA,CAAM,cAAA,CAAgBA,CAAAA,CAAM,QAAQ,CAAA,CACvC,KAAA,CAAMyD,CAAAA,CAAAA,EAAMzD,CAAAA,CAAM,SAAS,CAAA,QAAA,CAAU,CAAA,CACxCuT,CAAAA,CAAM,kBAAkB,CAAA,CACrB,EAAA,CAAGvT,CAAAA,CAAM,QAAQ,CAAA,CACjB,KAAA,CAAMyD,CAAAA,CAAAA,EAAMzD,CAAAA,CAAM,QAAQ,CAAA,YAAA,CAAc,CAAA,CAC3CuT,CAAAA,CAAM,gBAAgB,EACnB,KAAA,CAAM,KAAA,CAAOvT,CAAAA,CAAM,IAAI,EACvB,KAAA,CAAMyD,CAAAA,CAAAA,EAAMzD,CAAAA,CAAM,SAAS,CAAA,QAAA,CAAU,CAAA,CACxCuT,CAAAA,CAAM,uBAAuB,EAC1B,EAAA,CAAGvT,CAAAA,CAAM,cAAA,CAAgBA,CAAAA,CAAM,SAAS,CAAA,CACxC,KAAA,CAAMyD,CAAAA,CAAAA,EAAMzD,EAAM,SAAS,CAAA,QAAA,CAAU,CAAA,CACxCuT,CAAAA,CAAM,mBAAmB,CAAA,CACtB,EAAA,CAAGvT,CAAAA,CAAM,SAAS,CAAA,CAClB,KAAA,CAAMyD,CAAAA,CAAAA,EAAMzD,CAAAA,CAAM,SAAS,CAAA,YAAA,CAAc,CAC9C,CACF,EAMaue,EAAAA,CAAoBtI,CAAAA,CAAmBqI,EAAK,CAAA,CAC5CE,EAAAA,CAAoB1I,EAAAA,CAAmBwI,EAAK,CAAA,CAE5CG,GAA6BxK,GAAAA,CAAE,MAAA,CAAO,CACjD,GAAA,CAAKA,GAAAA,CAAE,MAAA,EAAO,CAAE,IAAA,GAAO,GAAA,EAAI,CAAE,GAAA,CAAI,IAAI,CAAA,CACrC,UAAA,CAAYA,GAAAA,CAAE,MAAA,GAAS,IAAA,EAAK,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,UAChD,CAAC,ECrHM,IAAMyK,GAAoB,CAAC,OAAA,CAAS,WAAA,CAAa,UAAU,CAAA,CAErDC,EAAAA,CAAsB,CAAC,SAAA,CAAW,WAAY,QAAA,CAAU,UAAU,CAAA,CAElEC,EAAAA,CAAkC,CAC7C,eAAA,CACA,WAAA,CACA,cAAA,CACA,SACA,QACF,CAAA,CAGaC,EAAAA,CAA0B,CACrC,cAAA,CACA,aAAA,CACA,cAAA,CACA,gBACF,EAEaC,EAAAA,CAA6B,CACxC,QAAA,CACA,MAAA,CACA,SAAA,CACA,UAAA,CACA,SAAA,CACA,OACF,EAIA,SAASC,EAAAA,CAAqBtf,CAAAA,CAAuB,CAQnD,OAPmBA,CAAAA,CAChB,IAAA,EAAK,CACL,QAAQ,MAAA,CAAQ,GAAG,CAAA,CACnB,OAAA,CAAQ,MAAA,CAAQ,GAAG,CAAA,CACnB,OAAA,CAAQ,MAAO,EAAE,CAAA,CACjB,WAAA,EAAY,EAEM,GACvB,CAEO,IAAMuf,EAAAA,CAAWtM,CAAAA,CACtB,YACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,EAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,UAAA,EAAY,CAAA,CAEvC,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,SAAQ,CACR,UAAA,CAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAE5D,KAAA,CAAOxG,CAAAA,CAAK,OAAO,CAAA,CAAE,OAAA,EAAQ,CAC7B,IAAA,CAAMA,EAAK,MAAM,CAAA,CAAE,OAAA,EAAQ,CAC3B,MAAA,CAAQe,CAAAA,CAAQ,QAAA,CAAU,CAAE,OAAQ,EAAA,CAAI,IAAA,CAAM4N,EAAkB,CAAC,CAAA,CAC9D,OAAA,EAAQ,CACR,OAAA,CAAQ,OAAO,CAAA,CAElB,OAAA,CAAS3O,CAAAA,CAAK,UAAU,CAAA,CACxB,UAAA,CAAYA,CAAAA,CAAK,aAAa,EAC9B,QAAA,CAAUA,CAAAA,CAAK,WAAW,CAAA,CAC1B,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CAEtC,SAAUjD,CAAAA,CAAM,UAAU,CAAA,CACvB,OAAA,EAAQ,CACR,OAAA,CAAQ,EAAE,EACV,KAAA,EAAyB,CAC5B,iBAAA,CAAmBA,CAAAA,CAAM,oBAAoB,CAAA,CAAE,KAAA,EAAgC,CAC/E,YAAa0D,CAAAA,CAAU,cAAc,CAAA,CAErC,SAAA,CAAWT,CAAAA,CAAK,YAAY,CAAA,CAC5B,SAAA,CAAWA,EAAK,YAAY,CAAA,CAC5B,SAAA,CAAWS,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,YAAW,CACxD,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAC9B,OAAA,EAAQ,CACR,UAAA,GACA,SAAA,CAAU,IAAM,IAAI,IAAM,CAC/B,CAAA,CACCxQ,CAAAA,EAAU,CACTwT,EAAY,yBAAyB,CAAA,CAAE,EAAA,CAAGxT,CAAAA,CAAM,cAAA,CAAgBA,CAAAA,CAAM,IAAI,CAAA,CAC1EuT,EAAM,0BAA0B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,cAAA,CAAgBA,CAAAA,CAAM,MAAM,CAAA,CACvEuT,EAAM,qBAAqB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,OAAO,CAC/C,CACF,CAAA,CAEaif,GAAavM,CAAAA,CACxB,aAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,GACA,UAAA,CAAW,IAAM,MAAA,CAAO,UAAA,EAAY,CAAA,CAEvC,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,SAAU,SAAU,CAAC,CAAA,CAE5D,QAAA,CAAUxG,CAAAA,CAAK,UAAU,CAAA,CAAE,OAAA,GAC3B,MAAA,CAAQe,CAAAA,CAAQ,QAAA,CAAU,CAAE,MAAA,CAAQ,EAAA,CAAI,IAAA,CAAM6N,EAAoB,CAAC,CAAA,CAChE,OAAA,EAAQ,CACR,OAAA,CAAQ,SAAS,CAAA,CACpB,SAAA,CAAW7U,CAAAA,CAAQ,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,KAAK,CAAA,CACxD,iBAAA,CAAmBiG,CAAAA,CAAK,oBAAoB,CAAA,CAC5C,iBAAA,CAAmBe,CAAAA,CAAQ,oBAAA,CAAsB,CAAE,MAAA,CAAQ,EAAA,CAAI,IAAA,CAAM8N,EAAgC,CAAC,CAAA,CACnG,OAAA,EAAQ,CACR,OAAA,CAAQ,eAAe,CAAA,CAC1B,sBAAA,CAAwBpO,EAAU,0BAA0B,CAAA,CAC5D,mBAAA,CAAqBA,CAAAA,CAAU,uBAAuB,CAAA,CACtD,gBAAA,CAAkBT,CAAAA,CAAK,mBAAmB,CAAA,CAC1C,mBAAA,CAAqBjD,CAAAA,CAAM,sBAAsB,CAAA,CAAE,KAAA,EAAsC,CACzF,aAAA,CAAe0D,EAAU,iBAAiB,CAAA,CAC1C,UAAA,CAAYA,CAAAA,CAAU,aAAa,CAAA,CACnC,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAAW,CACxD,SAAA,CAAWA,CAAAA,CAAU,YAAY,EAC9B,OAAA,EAAQ,CACR,UAAA,EAAW,CACX,SAAA,CAAU,IAAM,IAAI,IAAM,CAC/B,CAAA,CACCxQ,CAAAA,EAAU,CACTwT,CAAAA,CAAY,2BAA2B,CAAA,CAAE,EAAA,CAAGxT,CAAAA,CAAM,QAAQ,EAC1DuT,CAAAA,CAAM,qBAAqB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,cAAc,CAAA,CACpDuT,CAAAA,CAAM,wBAAwB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,MAAM,CACjD,CACF,CAAA,CAEakf,EAAAA,CAAgBjJ,EAAmB+I,EAAQ,CAAA,CAC3CG,EAAAA,CAAsBrJ,EAAAA,CAAmBkJ,EAAQ,CAAA,CACjDI,EAAAA,CAAkBnJ,CAAAA,CAAmBgJ,EAAU,CAAA,CAC/CI,EAAAA,CAAwBvJ,EAAAA,CAAmBmJ,EAAU,EAElE,SAASK,EAAAA,CAA2B7f,CAAAA,CAAuB,CACzD,OAAOA,CAAAA,CAAM,IAAA,EAAK,CAAE,WAAA,EAAY,CAAE,OAAA,CAAQ,KAAA,CAAO,EAAE,CACrD,CAEA,SAAS8f,EAAAA,CAAyB9f,CAAAA,CAAwB,CAIxD,GAHIA,CAAAA,CAAM,OAAS,GAAA,EACfA,CAAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EAAKA,CAAAA,CAAM,QAAA,CAAS,IAAI,GAAKA,CAAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EACjEA,CAAAA,GAAU,WAAA,EAAeA,CAAAA,CAAM,QAAA,CAAS,YAAY,CAAA,EACpD,yBAAA,CAA0B,IAAA,CAAKA,CAAK,CAAA,CAAG,OAAO,MAAA,CAElD,IAAM+f,EAAS/f,CAAAA,CAAM,KAAA,CAAM,GAAG,CAAA,CAC9B,OAAI+f,CAAAA,CAAO,MAAA,CAAS,CAAA,CAAU,MAEvBA,CAAAA,CAAO,KAAA,CAAOC,CAAAA,EACnBA,CAAAA,CAAM,MAAA,CAAS,CAAA,EACZA,CAAAA,CAAM,MAAA,EAAU,IAChB,mCAAA,CAAoC,IAAA,CAAKA,CAAK,CAClD,CACH,CAEO,IAAMC,EAAAA,CAA0BzL,IACpC,MAAA,EAAO,CACP,IAAA,EAAK,CACL,GAAA,CAAI,CAAA,CAAG,sBAAsB,CAAA,CAC7B,IAAI,GAAA,CAAK,yCAAyC,CAAA,CAClD,SAAA,CAAUqL,EAA0B,CAAA,CACpC,MAAA,CAAQK,CAAAA,EAAa,CAAC,0BAAA,CAA2B,IAAA,CAAKA,CAAQ,CAAA,CAAG,CAChE,OAAA,CAAS,sCACX,CAAC,EACA,MAAA,CAAOJ,EAAAA,CAA0B,CAChC,OAAA,CAAS,6CACX,CAAC,CAAA,CAEUK,EAAAA,CAAoB3L,GAAAA,CAC9B,QAAO,CACP,IAAA,EAAK,CACL,GAAA,CAAI,CAAA,CAAG,kBAAkB,CAAA,CACzB,GAAA,CAAI,IAAK,qCAAqC,CAAA,CAC9C,SAAA,CAAU8K,EAAoB,CAAA,CAC9B,MAAA,CAAQc,CAAAA,EAAS,CAAChB,GAAwB,QAAA,CAASgB,CAAgD,CAAA,CAAG,CACrG,OAAA,CAAS,kCACX,CAAC,CAAA,CACA,OAAQA,CAAAA,EAAS,CAACf,EAAAA,CAA2B,IAAA,CAAMgB,CAAAA,EAAWD,CAAAA,GAASC,CAAAA,EAAUD,CAAAA,CAAK,WAAW,CAAA,EAAGC,CAAM,CAAA,CAAA,CAAG,CAAC,CAAA,CAAG,CAChH,OAAA,CAAS,oCACX,CAAC,CAAA,CACA,MAAA,CAAQD,CAAAA,EAASA,CAAAA,GAAS,GAAA,EAAO,0BAAA,CAA2B,IAAA,CAAKA,CAAI,EAAG,CACvE,OAAA,CAAS,4EACX,CAAC,CAAA,CACA,MAAA,CAAQA,CAAAA,EAAS,CAACA,EAAK,KAAA,CAAM,GAAG,CAAA,CAAE,IAAA,CAAME,CAAAA,EAAYA,CAAAA,GAAY,GAAA,EAAOA,CAAAA,GAAY,IAAI,CAAA,CAAG,CACzF,OAAA,CAAS,kCACX,CAAC,CAAA,CACUC,EAAAA,CAA0B/L,GAAAA,CAAE,OAAOA,GAAAA,CAAE,MAAA,EAAO,CAAGA,GAAAA,CAAE,OAAA,EAAS,CAAA,CAE1DgM,EAAAA,CAAwBf,GAClC,IAAA,CAAK,CACJ,KAAA,CAAO,IAAA,CACP,IAAA,CAAM,IAAA,CACN,MAAA,CAAQ,IAAA,CACR,QAAS,IAAA,CACT,UAAA,CAAY,IAAA,CACZ,QAAA,CAAU,IAAA,CACV,cAAA,CAAgB,IAClB,CAAC,EACA,MAAA,CAAO,CACN,IAAA,CAAMU,EACR,CAAC,CAAA,CAEUM,EAAAA,CAAwBD,EAAAA,CAAsB,SAAQ,CAEtDE,EAAAA,CAA0BhB,EAAAA,CAAoB,IAAA,CAAK,CAC9D,EAAA,CAAI,IACN,CAAC,EAEYiB,EAAAA,CAA8BD,EAAAA,CAAwB,MAAA,CAAO,CACxE,QAAA,CAAUH,EACZ,CAAC,CAAA,CAEYK,GAAyBF,EAAAA,CAEzBG,EAAAA,CAA0BlB,EAAAA,CACpC,IAAA,CAAK,CACJ,QAAA,CAAU,IACZ,CAAC,CAAA,CACA,OAAO,CACN,QAAA,CAAUM,EACZ,CAAC,CAAA,CAEUa,EAAAA,CAAoBlB,EAAAA,CAAsB,IAAA,CAAK,CAC1D,EAAA,CAAI,IACN,CAAC,CAAA,CAEYmB,EAAAA,CAA0BD,EAAAA,CAC1BE,EAAAA,CAAsCF,EAAAA,CAEtCG,GAA2CH,EAAAA,CAAkB,MAAA,CAAO,CAC/E,MAAA,CAAQtM,GAAAA,CAAE,IAAA,CAAK2K,EAA+B,CAAA,CAC9C,MAAO3K,GAAAA,CAAE,MAAA,EAAO,CAAE,IAAA,EAAK,CAAE,GAAA,CAAI,GAAI,CAAA,CAAE,UACrC,CAAC,CAAA,CAEY0M,EAAAA,CAA8BJ,EAAAA,CAC9BK,EAAAA,CAA2BL,EAAAA,CAC3BM,EAAAA,CAA0BN,GClOhC,IAAMO,EAAAA,CAA8B,CACzC,OAAA,CACA,YACA,UAAA,CACA,SACF,CAAA,CAGaC,EAAAA,CAA+B,CAAC,QAAA,CAAU,WAAW,CAAA,CA2BrDC,GAAoBtO,CAAAA,CAC/B,qBAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,GACA,UAAA,CAAW,IAAM,MAAA,CAAO,UAAA,EAAY,CAAA,CACvC,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,SAAU,SAAU,CAAC,CAAA,CAC5D,QAAA,CAAUzF,CAAAA,CAAQ,WAAA,CAAa,CAAE,MAAA,CAAQ,GAAI,CAAC,CAAA,CAAE,OAAA,EAAQ,CACxD,aAAA,CAAeA,CAAAA,CAAQ,gBAAA,CAAkB,CAAE,OAAQ,EAAG,CAAC,CAAA,CAAE,OAAA,EAAQ,CACjE,QAAA,CAAU1E,CAAAA,CAAQ,UAAU,EAAE,OAAA,EAAQ,CACtC,MAAA,CAAQ0E,CAAAA,CAAQ,QAAA,CAAU,CAAE,MAAA,CAAQ,EAAA,CAAI,KAAMgQ,EAA4B,CAAC,CAAA,CACxE,OAAA,EAAQ,CACR,KAAA,EAA8B,CAC9B,OAAA,CAAQ,OAAO,CAAA,CAClB,OAAA,CAAS1U,CAAAA,CAAQ,SAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,CAAC,CAAA,CAC/C,UAAA,CAAYU,CAAAA,CAAM,aAAa,CAAA,CAC5B,OAAA,EAAQ,CACR,KAAA,GACA,OAAA,CAAQ,CAAE,IAAA,CAAM,SAAU,CAAC,CAAA,CAC9B,QAAA,CAAUA,CAAAA,CAAM,UAAU,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,EAA0B,CAAE,OAAA,CAAQ,EAAE,EAC5E,cAAA,CAAgBA,CAAAA,CAAM,iBAAiB,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,EAA0B,CAAE,QAAQ,EAAE,CAAA,CACzF,aAAA,CAAeA,CAAAA,CAAM,gBAAgB,CAAA,CAAE,OAAA,GAAU,KAAA,EAA6B,CAAE,OAAA,CAAQ,EAAE,CAAA,CAC1F,WAAA,CAAaA,CAAAA,CAAM,cAAc,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,EAA0B,CAAE,OAAA,CAAQ,EAAE,EACnF,cAAA,CAAgBA,CAAAA,CAAM,iBAAiB,CAAA,CACpC,OAAA,EAAQ,CACR,KAAA,EAA8B,CAC9B,QAAQ,EAAE,CAAA,CACb,qBAAA,CAAuBA,CAAAA,CAAM,wBAAwB,CAAA,CAClD,KAAA,GACH,SAAA,CAAWiD,CAAAA,CAAK,YAAY,CAAA,CAAE,OAAA,EAAQ,CACtC,SAAA,CAAWA,CAAAA,CAAK,YAAY,CAAA,CAAE,OAAA,EAAQ,CACtC,WAAA,CAAaA,CAAAA,CAAK,cAAc,CAAA,CAChC,SAAA,CAAWS,EAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAAW,CACxD,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAC9B,OAAA,EAAQ,CACR,UAAA,EAAW,CACX,SAAA,CAAU,IAAM,IAAI,IAAM,CAAA,CAC7B,WAAA,CAAaA,CAAAA,CAAU,cAAc,CACvC,CAAA,CACCxQ,CAAAA,EAAU,CACTwT,EAAY,8CAA8C,CAAA,CAAE,EAAA,CAC1DxT,CAAAA,CAAM,cAAA,CACNA,CAAAA,CAAM,QAAA,CACNA,CAAAA,CAAM,QACR,CAAA,CACAwT,CAAAA,CAAY,iCAAiC,CAAA,CAAE,GAAGxT,CAAAA,CAAM,cAAA,CAAgBA,CAAAA,CAAM,EAAE,EAChFwT,CAAAA,CAAY,oCAAoC,CAAA,CAC7C,EAAA,CAAGxT,CAAAA,CAAM,cAAA,CAAgBA,CAAAA,CAAM,QAAQ,EACvC,KAAA,CAAMyD,CAAAA,CAAAA,EAAMzD,CAAAA,CAAM,MAAM,CAAA,UAAA,CAAY,CAAA,CACvCuT,CAAAA,CAAM,4CAA4C,EAAE,EAAA,CAClDvT,CAAAA,CAAM,cAAA,CACNA,CAAAA,CAAM,QAAA,CACNA,CAAAA,CAAM,SACR,CAAA,CACAuT,EAAM,oCAAoC,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,cAAA,CAAgBA,CAAAA,CAAM,MAAM,CACnF,CACF,CAAA,CAEaihB,EAAAA,CAAqBvO,CAAAA,CAChC,sBAAA,CACA,CACE,cAAA,CAAgB3C,CAAAA,CAAK,iBAAiB,EACnC,UAAA,EAAW,CACX,UAAA,CAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAC5D,gBAAA,CAAkBxG,CAAAA,CAAK,oBAAoB,CAAA,CAC3C,kBAAA,CAAoBA,CAAAA,CAAK,sBAAsB,CAAA,CAC/C,6BAAA,CAA+BA,CAAAA,CAAK,mCAAmC,CAAA,CACvE,MAAA,CAAQe,CAAAA,CAAQ,QAAA,CAAU,CAAE,MAAA,CAAQ,EAAA,CAAI,IAAA,CAAMiQ,EAA6B,CAAC,CAAA,CACzE,OAAA,EAAQ,CACR,OAA+B,CAC/B,OAAA,CAAQ,QAAQ,CAAA,CACnB,OAAA,CAAS3U,CAAAA,CAAQ,SAAS,CAAA,CAAE,SAAQ,CAAE,OAAA,CAAQ,CAAC,CAAA,CAC/C,WAAA,CAAaU,CAAAA,CAAM,aAAa,CAAA,CAAE,SAAQ,CAAE,KAAA,EAAiB,CAAE,OAAA,CAAQ,EAAE,CAAA,CACzE,cAAA,CAAgBiD,EAAK,kBAAkB,CAAA,CACvC,iBAAA,CAAmBS,CAAAA,CAAU,sBAAsB,CAAA,CACnD,SAAA,CAAWT,CAAAA,CAAK,YAAY,CAAA,CAAE,OAAA,EAAQ,CACtC,SAAA,CAAWS,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,GAAU,UAAA,EAAW,CACxD,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAC9B,OAAA,EAAQ,CACR,YAAW,CACX,SAAA,CAAU,IAAM,IAAI,IAAM,CAC/B,CAAA,CACCxQ,CAAAA,EAAU,CACTgB,GAAW,CACT,IAAA,CAAM,yCAAA,CACN,OAAA,CAAS,CAAChB,CAAAA,CAAM,cAAA,CAAgBA,CAAAA,CAAM,gBAAgB,CAAA,CACtD,cAAA,CAAgB,CAACghB,EAAAA,CAAkB,cAAA,CAAgBA,EAAAA,CAAkB,EAAE,CACzE,CAAC,CAAA,CAAE,QAAA,CAAS,UAAU,CAAA,CACtBhgB,EAAAA,CAAW,CACT,IAAA,CAAM,2CAAA,CACN,QAAS,CAAChB,CAAAA,CAAM,cAAA,CAAgBA,CAAAA,CAAM,kBAAkB,CAAA,CACxD,cAAA,CAAgB,CAACghB,GAAkB,cAAA,CAAgBA,EAAAA,CAAkB,EAAE,CACzE,CAAC,CAAA,CAAE,QAAA,CAAS,UAAU,EACtBhgB,EAAAA,CAAW,CACT,IAAA,CAAM,kDAAA,CACN,OAAA,CAAS,CAAChB,CAAAA,CAAM,cAAA,CAAgBA,EAAM,6BAA6B,CAAA,CACnE,cAAA,CAAgB,CAACghB,EAAAA,CAAkB,cAAA,CAAgBA,EAAAA,CAAkB,EAAE,CACzE,CAAC,CAAA,CAAE,QAAA,CAAS,UAAU,CAAA,CACtBnO,EAAAA,CACE,mDAAA,CACApP,CAAAA,CAAAA,EAAMzD,EAAM,gBAAgB,CAAA,YAAA,EAAeA,CAAAA,CAAM,kBAAkB,CAAA,YAAA,EAAeA,CAAAA,CAAM,gBAAgB,CAAA,IAAA,EAAOA,EAAM,kBAAkB,CAAA,CACzI,CAAA,CACAuT,CAAAA,CAAM,0CAA0C,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,gBAAgB,CAAA,CAC3EuT,CAAAA,CAAM,iCAAiC,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,MAAM,CAC1D,CACF,CAAA,CAEMkhB,EAAAA,CAAyBjN,GAAAA,CAC5B,MAAA,EAAO,CACP,GAAA,CAAI,CAAC,CAAA,CACL,IAAI,GAAG,CAAA,CACP,KAAA,CAAM,uCAAuC,CAAA,CAEnCkN,EAAAA,CAA0DlN,GAAAA,CAAE,kBAAA,CAAmB,OAAQ,CAClGA,GAAAA,CAAE,MAAA,CAAO,CAAE,IAAA,CAAMA,GAAAA,CAAE,OAAA,CAAQ,aAAa,EAAG,OAAA,CAASA,GAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAE,CAAC,CAAA,CAChFA,GAAAA,CAAE,OAAO,CACP,IAAA,CAAMA,GAAAA,CAAE,OAAA,CAAQ,cAAc,CAAA,CAC9B,QAAA,CAAUiN,EAAAA,CACV,OAAA,CAASjN,GAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CACpC,CAAC,CAAA,CACDA,GAAAA,CAAE,MAAA,CAAO,CAAE,IAAA,CAAMA,GAAAA,CAAE,OAAA,CAAQ,eAAe,CAAA,CAAG,MAAA,CAAQA,GAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAE,CAAC,CAAA,CACjFA,IAAE,MAAA,CAAO,CAAE,IAAA,CAAMA,GAAAA,CAAE,OAAA,CAAQ,SAAS,CAAE,CAAC,CACzC,CAAC,CAAA,CAEKmN,EAAAA,CAA2BnN,GAAAA,CAAE,MAAA,CAAOA,GAAAA,CAAE,MAAA,EAAO,CAAGA,IAAE,IAAA,EAAM,CAAA,CACjDoN,EAAAA,CAAiCpN,GAAAA,CAAE,MAAA,CAAO,CACrD,aAAA,CAAeiN,GACf,SAAA,CAAWjN,GAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,KAAA,CAAM,wBAAwB,CAAA,CACpE,MAAA,CAAQA,GAAAA,CAAE,IAAA,CAAK,CAAC,QAAS,QAAA,CAAU,OAAO,CAAC,CAAA,CAC3C,gBAAA,CAAkBiN,EAAAA,CAAuB,QAAA,EAC3C,CAAC,CAAA,CAAE,WAAA,CAAY,CAACI,CAAAA,CAAWC,CAAAA,GAAQ,CAC7BD,CAAAA,CAAU,MAAA,GAAW,UAAY,CAACA,CAAAA,CAAU,gBAAA,EAC9CC,CAAAA,CAAI,QAAA,CAAS,CACX,IAAA,CAAM,QAAA,CACN,KAAM,CAAC,kBAAkB,CAAA,CACzB,OAAA,CAAS,oDACX,CAAC,CAAA,CAECD,CAAAA,CAAU,SAAW,QAAA,EAAYA,CAAAA,CAAU,gBAAA,EAC7CC,CAAAA,CAAI,QAAA,CAAS,CACX,IAAA,CAAM,QAAA,CACN,KAAM,CAAC,kBAAkB,CAAA,CACzB,OAAA,CAAS,gEACX,CAAC,EAEL,CAAC,EAEYC,EAAAA,CAAgEvN,GAAAA,CAAE,MAAA,CAAO,CACpF,UAAA,CAAYA,GAAAA,CAAE,KAAA,CAAMoN,EAA8B,EAAE,QAAA,EAAS,CAC7D,SAAA,CAAWpN,GAAAA,CAAE,MAAA,CAAOiN,EAAAA,CAAwBE,EAAwB,CAAA,CAAE,UACxE,CAAC,CAAA,CAAE,WAAA,CAAY,CAACnhB,CAAAA,CAAQshB,CAAAA,GAAQ,CAC9B,IAAME,CAAAA,CAAU,IAAI,GAAA,CACpB,IAAA,GAAW,CAAClO,CAAAA,CAAO+N,CAAS,CAAA,GAAA,CAAMrhB,EAAO,UAAA,EAAc,EAAC,EAAG,OAAA,EAAQ,CAAG,CACpE,IAAM+H,CAAAA,CAAM,GAAGsZ,CAAAA,CAAU,aAAa,CAAA,CAAA,EAAIA,CAAAA,CAAU,SAAS,CAAA,CAAA,CACzDG,CAAAA,CAAQ,GAAA,CAAIzZ,CAAG,CAAA,EACjBuZ,CAAAA,CAAI,QAAA,CAAS,CACX,IAAA,CAAM,QAAA,CACN,IAAA,CAAM,CAAC,aAAchO,CAAAA,CAAO,WAAW,CAAA,CACvC,OAAA,CAAS,CAAA,oCAAA,EAAuCvL,CAAG,CAAA,CACrD,CAAC,EAEHyZ,CAAAA,CAAQ,GAAA,CAAIzZ,CAAG,EACjB,CACF,CAAC,CAAA,CAEY0Z,EAAAA,CAAyBzL,EAAmB+K,EAAAA,CAAmB,CAC1E,UAAA,CAAY,IAAMG,EAAAA,CAClB,QAAA,CAAU,IAAMC,EAAAA,CAChB,eAAgB,IAAMA,EAAAA,CACtB,aAAA,CAAe,IAAMI,EAAAA,CACrB,WAAA,CAAa,IAAMJ,EAAAA,CACnB,eAAgB,IAAMnN,GAAAA,CAAE,MAAA,CAAOA,GAAAA,CAAE,MAAA,EAAO,CAAGA,GAAAA,CAAE,MAAA,GAAS,GAAA,EAAI,CAAE,WAAA,EAAa,CAC3E,CAAC,CAAA,CACY0N,EAAAA,CAA+B7L,GAAmBkL,EAAiB,CAAA,CACnEY,EAAAA,CAA0B3L,CAAAA,CAAmBgL,EAAkB,CAAA,CAC/DY,EAAAA,CAAgC/L,EAAAA,CAAmBmL,EAAkB,CAAA,CAErEa,EAAAA,CAAmB7N,GAAAA,CAAE,MAAA,CAAO,CAAE,QAAA,CAAUiN,EAAuB,CAAC,EAChEa,EAAAA,CAA6BD,EAAAA,CAAiB,MAAA,CAAO,CAAE,OAAA,CAAS7N,GAAAA,CAAE,OAAA,EAAU,CAAC,CAAA,CAC7E+N,EAAAA,CAA2BL,EAAAA,CAA6B,IAAA,CAAK,CAAE,EAAA,CAAI,IAAK,CAAC,CAAA,CACzEM,GAA6BH,EAAAA,CAAiB,KAAA,CAAMpK,CAAgB,CAAA,CACpEwK,EAAAA,CAA4BJ,EAAAA,CAAiB,MAAA,CAAO,CAC/D,gBAAiB7N,GAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,QAAA,EAAS,CAAE,QAAA,GAC7C,UAAA,CAAYkN,EAAAA,CAAyB,QAAA,EAAS,CAC9C,QAAA,CAAUC,EAAAA,CAAyB,QAAA,EAAS,CAC5C,eAAgBA,EAAAA,CAAyB,QAAA,EAAS,CAClD,aAAA,CAAeI,EAAAA,CAA4B,QAAA,EAAS,CACpD,WAAA,CAAaJ,GAAyB,QAAA,EACxC,CAAC,CAAA,CACYe,EAAAA,CAA2BL,EAAAA,CAAiB,MAAA,CAAO,CAC9D,yBAA0B7N,GAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,QAAA,EAAS,CAAE,QAAA,EACxD,CAAC,CAAA,CACYmO,EAAAA,CAAmCJ,EAAAA,CAAyB,MAAA,CAAO,CAC9E,wBAAA,CAA0B/N,GAAAA,CAAE,QAAO,CAAE,GAAA,EAAI,CAAE,QAAA,EAAS,CAAE,QAAA,EACxD,CAAC,EACYoO,EAAAA,CAA+BL,EAAAA,CAAyB,MAAA,CAAO,CAC1E,oBAAA,CAAsB/N,GAAAA,CAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CAChD,wBAAA,CAA0BA,GAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS,CAAE,QAAA,EACxD,CAAC,CAAA,CACYqO,EAAAA,CAAmCN,EAAAA,CAAyB,OAAO,CAC9E,wBAAA,CAA0B/N,GAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,QAAA,EAC7C,CAAC,CAAA,CACYsO,EAAAA,CAA+BP,EAAAA,CAAyB,MAAA,CAAO,CAC1E,IAAA,CAAM/N,GAAAA,CAAE,QAAO,CAAE,IAAA,EAAK,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,EACtC,MAAA,CAAQA,GAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,QAAA,EAAS,CAC5C,gBAAA,CAAkBA,IAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,IAAI,EAAE,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,QAAA,EACtD,CAAC,EACYuO,EAAAA,CAA0BvO,GAAAA,CAAE,MAAA,CAAO,CAC9C,wBAAA,CAA0BA,GAAAA,CAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CACpD,UAAA,CAAYA,GAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAChC,CAAC,EC3OM,IAAMwO,EAAAA,CAAuB,CAElC,aAAc,cAAA,CACd,cAAA,CAAgB,gBAAA,CAChB,aAAA,CAAe,eAAA,CACf,cAAA,CAAgB,gBAAA,CAChB,YAAA,CAAc,eAGd,aAAA,CAAe,eAAA,CACf,eAAA,CAAiB,iBAAA,CACjB,SAAA,CAAW,WAAA,CAGX,UAAA,CAAY,YAAA,CACZ,eAAgB,gBAAA,CAChB,aAAA,CAAe,eACjB,CAAA,CAgEaC,EAAAA,CAAgBhQ,CAAAA,CAC3B,eAAA,CACA,CACE,GAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,EAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,YAAY,CAAA,CAGvC,MAAA,CAAQA,CAAAA,CAAK,SAAS,CAAA,CACnB,OAAA,EAAQ,CACR,WAAW,IAAMmG,CAAAA,CAAK,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAEpD,eAAgBnG,CAAAA,CAAK,iBAAiB,CAAA,CACnC,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMwG,CAAAA,CAAa,GAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAG5D,OAAA,CAASxG,CAAAA,CAAK,UAAU,EACxB,QAAA,CAAUA,CAAAA,CAAK,WAAW,CAAA,CAC1B,UAAA,CAAYA,CAAAA,CAAK,aAAa,CAAA,CAG9B,YAAaA,CAAAA,CAAK,cAAc,CAAA,CAChC,iBAAA,CAAmBjD,CAAAA,CAAM,oBAAoB,CAAA,CAAE,KAAA,GAG/C,IAAA,CAAMiD,CAAAA,CAAK,MAAM,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,EAAwB,CACrD,MAAOA,CAAAA,CAAK,OAAO,CAAA,CAAE,OAAA,GACrB,OAAA,CAASA,CAAAA,CAAK,SAAS,CAAA,CAAE,SAAQ,CACjC,IAAA,CAAMA,CAAAA,CAAK,MAAM,CAAA,CAGjB,IAAA,CAAMjG,CAAAA,CAAQ,MAAM,EAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,KAAK,CAAA,CAC7C,QAAA,CAAUA,CAAAA,CAAQ,UAAU,EAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,KAAK,CAAA,CAGrD,YAAA,CAAcgD,CAAAA,CAAM,eAAe,EAAE,KAAA,EAAgB,CACrD,cAAA,CAAgBA,CAAAA,CAAM,iBAAiB,CAAA,CAAE,KAAA,EAAgB,CACzD,UAAWhD,CAAAA,CAAQ,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,KAAK,CAAA,CACxD,YAAa0G,CAAAA,CAAU,eAAe,CAAA,CAGtC,QAAA,CAAUT,CAAAA,CAAK,WAAW,CAAA,CAC1B,UAAA,CAAY3D,EAAQ,aAAa,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,CAAC,CAAA,CAGtD,cAAA,CAAgB2D,EAAK,iBAAiB,CAAA,CAAE,MAAA,EAAO,CAG/C,cAAA,CAAgBA,CAAAA,CAAK,kBAAkB,CAAA,CAGvC,SAAUA,CAAAA,CAAK,UAAU,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,QAAQ,CAAA,CAAE,OAA4B,CAGnF,MAAA,CAAQA,CAAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,QAAQ,CAAA,CAAE,KAAA,EAA0B,CAG7E,QAAA,CAAUA,CAAAA,CAAK,UAAU,CAAA,CAAE,OAAA,GAAU,OAAA,CAAQ,QAAQ,CAAA,CAAE,KAAA,EAA4B,CAGnF,YAAA,CAAcjD,CAAAA,CAAM,eAAe,EAAE,KAAA,EAA2B,CAAE,OAAA,CAAQ,EAAE,CAAA,CAG5E,MAAA,CAAQhD,CAAAA,CAAQ,QAAQ,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,KAAK,CAAA,CAGjD,cAAA,CAAgBiG,CAAAA,CAAK,iBAAiB,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,QAAQ,CAAA,CAAE,KAAA,EAAsB,CAG1F,MAAOjD,CAAAA,CAAM,OAAO,CAAA,CAAE,KAAA,EAAyB,CAG/C,MAAA,CAAQA,CAAAA,CAAM,QAAQ,EAAE,KAAA,EAA0B,CAGlD,mBAAA,CAAqBiD,CAAAA,CAAK,sBAAsB,CAAA,CAC7C,OAAA,EAAQ,CACR,QAAQ,MAAM,CAAA,CACd,KAAA,EAA2B,CAG9B,QAAA,CAAUjD,CAAAA,CAAM,UAAU,CAAA,CAAE,OAGzB,CAGH,SAAA,CAAW0D,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,GAC7C,SAAA,CAAWA,CAAAA,CAAU,YAAY,CACnC,CAAA,CACCxQ,CAAAA,EAAU,CACTuT,CAAAA,CAAM,6BAA6B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,MAAA,CAAQA,CAAAA,CAAM,IAAI,CAAA,CAChEuT,CAAAA,CAAM,4BAA4B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,WAAW,CAAA,CACxDuT,CAAAA,CAAM,yBAAyB,CAAA,CAAE,GAAGvT,CAAAA,CAAM,QAAQ,CAAA,CAClDuT,CAAAA,CAAM,2BAA2B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,SAAS,CAAA,CACrDuT,CAAAA,CAAM,+BAA+B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,cAAA,CAAgBA,CAAAA,CAAM,MAAM,CAAA,CAC5EuT,CAAAA,CAAM,4BAA4B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,QAAQ,CAAA,CACrDuT,EAAM,0BAA0B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,MAAM,CAAA,CACjDuT,CAAAA,CAAM,0BAA0B,EAAE,EAAA,CAAGvT,CAAAA,CAAM,MAAM,CAAA,CACjDuT,CAAAA,CAAM,2BAA2B,CAAA,CAAE,EAAA,CAAGvT,EAAM,QAAA,CAAUA,CAAAA,CAAM,IAAA,CAAMA,CAAAA,CAAM,SAAS,CACnF,CACF,CAAA,CAMa2iB,GAAqB1M,CAAAA,CAAmByM,EAAa,ECzL3D,IAAME,EAAAA,CAAwBlQ,CAAAA,CACnC,wBAAA,CACA,CACE,GAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,EAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,YAAY,CAAA,CAGvC,GAAA,CAAKA,CAAAA,CAAK,KAAK,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAO,CAGlC,IAAA,CAAMA,CAAAA,CAAK,MAAM,EAAE,OAAA,EAAQ,CAC3B,WAAA,CAAaA,CAAAA,CAAK,aAAa,CAAA,CAG/B,QAAA,CAAUA,CAAAA,CAAK,UAAU,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,GAGrC,KAAA,CAAOjD,CAAAA,CAAM,OAAO,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,EAAgB,CAChD,QAASA,CAAAA,CAAM,SAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,EAAgB,CAGpD,SAAA,CAAWA,EAAM,WAAW,CAAA,CAAE,KAAA,EAAgB,CAG9C,eAAA,CAAiBA,CAAAA,CAAM,kBAAkB,CAAA,CACtC,SAAQ,CACR,OAAA,CAAQ,CAAC,QAAQ,CAAC,CAAA,CAClB,KAAA,EAAgB,CAGnB,SAAUiD,CAAAA,CAAK,UAAU,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,QAAQ,CAAA,CAAE,OAA4B,CAGnF,QAAA,CAAUA,CAAAA,CAAK,WAAW,CAAA,CAG1B,UAAA,CAAYjG,CAAAA,CAAQ,YAAY,EAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,KAAK,CAAA,CACzD,OAAA,CAASsC,CAAAA,CAAQ,SAAS,EAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,CAAC,CAAA,CAG/C,SAAA,CAAWoE,CAAAA,CAAU,YAAY,EAAE,OAAA,EAAQ,CAAE,UAAA,EAAW,CACxD,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAAE,SAAQ,CAAE,UAAA,EAC/C,CAAA,CACCxQ,CAAAA,EAAU,CACTuT,CAAAA,CAAM,sBAAsB,EAAE,EAAA,CAAGvT,CAAAA,CAAM,QAAQ,CAAA,CAC/CuT,CAAAA,CAAM,wBAAwB,CAAA,CAAE,EAAA,CAAGvT,EAAM,QAAQ,CACnD,CACF,CAAA,CAMa6iB,EAAAA,CAA6B5M,CAAAA,CAAmB2M,EAAqB,MCrErEE,EAAAA,CAAuBpQ,CAAAA,CAClC,uBAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,YAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,UAAA,EAAY,CAAA,CAIvC,GAAA,CAAKA,EAAK,KAAK,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAO,CAGlC,IAAA,CAAMjD,CAAAA,CAAM,MAAM,EAAE,OAAA,EAAQ,CAAE,KAAA,EAAgB,CAG9C,WAAA,CAAaA,CAAAA,CAAM,aAAa,CAAA,CAAE,OAAgB,CAGlD,IAAA,CAAMiD,CAAAA,CAAK,MAAM,CAAA,CAGjB,QAAA,CAAUA,CAAAA,CAAK,WAAW,EAAE,OAAA,EAAQ,CAGpC,OAAA,CAASjG,CAAAA,CAAQ,SAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA,CAGlD,YAAA,CAAcgD,CAAAA,CAAM,eAAe,CAAA,CAGnC,SAAA,CAAW0D,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAC/C,CAAA,CACCxQ,CAAAA,EAAU,CACTuT,EAAM,qBAAqB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,QAAQ,CAAA,CAC9CuT,CAAAA,CAAM,sBAAsB,EAAE,EAAA,CAAGvT,CAAAA,CAAM,OAAO,CAChD,CACF,CAAA,CAMa+iB,EAAAA,CAA4B9M,CAAAA,CAAmB6M,EAAoB,ECxBzE,IAAME,EAAAA,CAA0BtQ,CAAAA,CACrC,0BAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,EAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,UAAA,EAAY,EAGvC,MAAA,CAAQA,CAAAA,CAAK,SAAS,CAAA,CACnB,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMmG,EAAK,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAEpD,cAAA,CAAgBnG,CAAAA,CAAK,iBAAiB,CAAA,CACnC,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,SAAU,SAAU,CAAC,CAAA,CAG5D,eAAA,CAAiBzJ,CAAAA,CAAM,kBAAkB,CAAA,CACtC,OAAA,GACA,OAAA,CAAQ,CAAC,QAAQ,CAAC,CAAA,CAClB,KAAA,EAAgB,CAInB,iBAAA,CAAmBA,EAAM,oBAAoB,CAAA,CAAE,KAAA,EAE7C,CAGF,UAAA,CAAYA,CAAAA,CAAM,aAAa,CAAA,CAAE,OAAwB,CAGzD,cAAA,CAAgBiD,CAAAA,CAAK,iBAAiB,EACnC,OAAA,EAAQ,CACR,OAAA,CAAQ,SAAS,EACjB,KAAA,EAAsB,CAGzB,SAAA,CAAWS,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,YAAW,CACxD,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAC/C,CAAA,CACCxQ,CAAAA,EAAU,CACTwT,CAAAA,CAAY,6BAA6B,CAAA,CAAE,EAAA,CACzCxT,CAAAA,CAAM,OACNA,CAAAA,CAAM,cACR,CACF,CACF,CAAA,CAMaijB,EAAAA,CAA+BhN,CAAAA,CAAmB+M,EAAuB,EC3D/E,IAAME,EAAAA,CAAYxQ,CAAAA,CACvB,YAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,EACV,UAAA,EAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,UAAA,EAAY,CAAA,CAGvC,UAAWA,CAAAA,CAAK,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,EAAiB,CACzD,OAAA,CAASA,EAAK,UAAU,CAAA,CAAE,OAAA,EAAQ,CAGlC,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,SAAQ,CACR,UAAA,CAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAG5D,MAAA,CAAQxG,CAAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,EAAQ,CAC/B,QAAA,CAAUA,EAAK,UAAU,CAAA,CAGzB,MAAA,CAAQA,CAAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAmB,CACpD,MAAA,CAAQA,CAAAA,CAAK,QAAQ,CAAA,CAGrB,QAAA,CAAUjD,CAAAA,CAAM,UAAU,EAG1B,OAAA,CAASiD,CAAAA,CAAK,UAAU,CAAA,CACxB,SAAA,CAAWA,CAAAA,CAAK,YAAY,CAAA,CAC5B,QAASA,CAAAA,CAAK,UAAU,CAAA,CAExB,SAAA,CAAWS,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,GAAU,UAAA,EAC/C,CAAA,CACCxQ,CAAAA,EAAU,CACTuT,CAAAA,CAAM,6BAA6B,CAAA,CAAE,GAAGvT,CAAAA,CAAM,cAAc,CAAA,CAC5DuT,CAAAA,CAAM,sBAAsB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,UAAWA,CAAAA,CAAM,OAAO,CAAA,CAC/DuT,CAAAA,CAAM,uBAAuB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,MAAM,CAAA,CAC9CuT,CAAAA,CAAM,2BAA2B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,SAAS,CAAA,CACrDuT,EAAM,sBAAsB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,OAAO,CAChD,CACF,CAAA,CAMamjB,GAAiBlN,CAAAA,CAAmBiN,EAAS,ECrBnD,IAAME,EAAAA,CAAc1Q,CAAAA,CACzB,cAAA,CACA,CACE,GAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,EAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,YAAY,CAAA,CAGvC,UAAA,CAAYA,CAAAA,CAAK,aAAa,CAAA,CAAE,OAAA,EAAQ,CACxC,SAAUA,CAAAA,CAAK,WAAW,CAAA,CAG1B,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,UAAA,CAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAG5D,MAAA,CAAQxG,EAAK,QAAQ,CAAA,CAAE,OAAA,EAAQ,CAG/B,OAAA,CAASjD,CAAAA,CAAM,SAAS,CAAA,CAAE,OAAoB,CAC9C,QAAA,CAAUA,CAAAA,CAAM,UAAU,CAAA,CAAE,KAAA,EAA+B,CAG3D,OAAA,CAASiD,EAAK,UAAU,CAAA,CAAE,OAAA,EAAQ,CAClC,SAAA,CAAWA,CAAAA,CAAK,YAAY,CAAA,CAAE,SAAQ,CAAE,KAAA,EAA2B,CAAE,OAAA,CAAQ,MAAM,CAAA,CACnF,OAAA,CAASA,CAAAA,CAAK,UAAU,CAAA,CACxB,SAAA,CAAWA,CAAAA,CAAK,YAAY,CAAA,CAG5B,SAAA,CAAWA,CAAAA,CAAK,YAAY,EAC5B,SAAA,CAAWA,CAAAA,CAAK,YAAY,CAAA,CAC5B,OAAA,CAASA,CAAAA,CAAK,UAAU,CAAA,CAGxB,UAAWS,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAC/C,CAAA,CACCxQ,GAAU,CAETuT,CAAAA,CAAM,yBAAyB,CAAA,CAAE,GAAGvT,CAAAA,CAAM,UAAA,CAAYA,CAAAA,CAAM,QAAQ,EAEpEuT,CAAAA,CAAM,+BAA+B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,cAAc,CAAA,CAE9DuT,CAAAA,CAAM,wBAAwB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,OAAO,CAAA,CAEhDuT,CAAAA,CAAM,uBAAuB,CAAA,CAAE,GAAGvT,CAAAA,CAAM,SAAS,CAAA,CAEjDuT,CAAAA,CAAM,yBAAyB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,WAAYA,CAAAA,CAAM,MAAM,CAAA,CAElEuT,CAAAA,CAAM,wBAAwB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,OAAO,CAClD,CACF,CAAA,CAMaqjB,EAAAA,CAAmBpN,CAAAA,CAAmBmN,EAAW,EC7FvD,IAAME,GAAqB5Q,CAAAA,CAChC,sBAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CAAE,UAAA,GAGf,UAAA,CAAYA,CAAAA,CAAK,aAAa,CAAA,CAAE,OAAA,EAAQ,CACxC,QAAA,CAAUA,CAAAA,CAAK,WAAW,CAAA,CAG1B,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,UAAA,CAAW,IAAMwG,CAAAA,CAAa,GAAI,CAAE,QAAA,CAAU,UAAW,CAAC,CAAA,CAG7D,MAAA,CAAQxG,CAAAA,CAAK,QAAQ,EAAE,OAAA,EAAQ,CAG/B,OAAA,CAASjD,CAAAA,CAAM,SAAS,CAAA,CAAE,KAAA,EAAoB,CAC9C,SAAUA,CAAAA,CAAM,UAAU,CAAA,CAAE,KAAA,EAA+B,CAG3D,OAAA,CAASiD,CAAAA,CAAK,UAAU,EAAE,OAAA,EAAQ,CAClC,SAAA,CAAWA,CAAAA,CAAK,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAwB,CAAE,OAAA,CAAQ,MAAM,CAAA,CAChF,OAAA,CAASA,CAAAA,CAAK,UAAU,CAAA,CACxB,UAAWA,CAAAA,CAAK,YAAY,CAAA,CAG5B,SAAA,CAAWA,CAAAA,CAAK,YAAY,CAAA,CAC5B,SAAA,CAAWA,EAAK,YAAY,CAAA,CAC5B,OAAA,CAASA,CAAAA,CAAK,UAAU,CAAA,CAGxB,SAAA,CAAWS,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAC3C,UAAA,CAAYA,EAAU,aAAa,CAAA,CAAE,OAAA,EAAQ,CAAE,YACjD,CAAA,CACCxQ,CAAAA,EAAU,CACTuT,CAAAA,CAAM,iCAAiC,CAAA,CAAE,EAAA,CAAGvT,EAAM,UAAA,CAAYA,CAAAA,CAAM,QAAQ,CAAA,CAC5EuT,CAAAA,CAAM,uCAAuC,CAAA,CAAE,EAAA,CAAGvT,EAAM,cAAc,CAAA,CACtEuT,CAAAA,CAAM,+BAA+B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,SAAS,CAC3D,CACF,CAAA,CAWaujB,EAAAA,CAAmB7Q,CAAAA,CAC9B,oBAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CAAE,UAAA,EAAW,CAG1B,SAAA,CAAWA,CAAAA,CAAK,YAAY,CAAA,CAAE,OAAA,GAAU,KAAA,EAAwB,CAChE,OAAA,CAASA,CAAAA,CAAK,UAAU,CAAA,CAAE,OAAA,EAAQ,CAGlC,eAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMwG,CAAAA,CAAa,GAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAG5D,MAAA,CAAQxG,CAAAA,CAAK,QAAQ,EAAE,OAAA,EAAQ,CAC/B,QAAA,CAAUA,CAAAA,CAAK,UAAU,CAAA,CAGzB,MAAA,CAAQA,CAAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,EAAkC,CACnE,MAAA,CAAQA,CAAAA,CAAK,QAAQ,EAGrB,QAAA,CAAUjD,CAAAA,CAAM,UAAU,CAAA,CAG1B,OAAA,CAASiD,CAAAA,CAAK,UAAU,CAAA,CACxB,UAAWA,CAAAA,CAAK,YAAY,CAAA,CAC5B,OAAA,CAASA,CAAAA,CAAK,UAAU,CAAA,CAGxB,SAAA,CAAWS,EAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAC3C,UAAA,CAAYA,CAAAA,CAAU,aAAa,CAAA,CAAE,SAAQ,CAAE,UAAA,EACjD,CAAA,CACCxQ,CAAAA,EAAU,CACTuT,CAAAA,CAAM,qCAAqC,EAAE,EAAA,CAAGvT,CAAAA,CAAM,cAAc,CAAA,CACpEuT,CAAAA,CAAM,8BAA8B,CAAA,CAAE,EAAA,CAAGvT,EAAM,SAAA,CAAWA,CAAAA,CAAM,OAAO,CAAA,CACvEuT,EAAM,6BAA6B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,SAAS,CACzD,CACF,CAAA,CAMawjB,EAAAA,CAA2BvN,CAAAA,CAAmBqN,EAAkB,CAAA,CAChEG,EAAAA,CAAyBxN,EAAmBsN,EAAgB,ECpGlE,IAAMG,EAAAA,CAAY,CACvB,IAAA,CAAM,MAAA,CACN,IAAA,CAAM,OACN,IAAA,CAAM,MAAA,CACN,KAAA,CAAO,OAAA,CACP,GAAA,CAAK,KACP,CAAA,CAOaC,EAAAA,CAAc,CACzB,IAAA,CAAM,MAAA,CACN,KAAA,CAAO,OACT,CAAA,CAcaC,EAAAA,CAAmBlR,CAAAA,CAC9B,mBAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,EAAW,CACX,UAAA,CAAW,IAAM,OAAO,UAAA,EAAY,CAAA,CAGvC,UAAA,CAAYA,CAAAA,CAAK,aAAa,CAAA,CAAE,OAAA,GAChC,QAAA,CAAUA,CAAAA,CAAK,WAAW,CAAA,CAAE,OAAA,EAAQ,CAGpC,SAAA,CAAWA,CAAAA,CAAK,YAAY,CAAA,CAAE,OAAA,EAAQ,CACtC,OAAA,CAASA,CAAAA,CAAK,UAAU,CAAA,CAAE,OAAA,GAG1B,KAAA,CAAOA,CAAAA,CAAK,OAAO,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,MAAM,EAG7C,iBAAA,CAAmBA,CAAAA,CAAK,qBAAqB,CAAA,CAC7C,eAAA,CAAiBA,CAAAA,CAAK,mBAAmB,CAAA,CAGzC,eAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMwG,CAAAA,CAAa,GAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAG5D,QAAA,CAAU/F,CAAAA,CAAU,WAAW,EAG/B,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAAE,UAAA,EAAW,CAAE,OAAA,EAAQ,CACxD,UAAWA,CAAAA,CAAU,YAAY,CAAA,CAAE,UAAA,EAAW,CAAE,OAAA,EAAQ,CACxD,SAAA,CAAWT,EAAK,YAAY,CAC9B,CAAA,CACC/P,CAAAA,EAAU,CAETwT,CAAAA,CAAY,sBAAsB,CAAA,CAAE,GAClCxT,CAAAA,CAAM,UAAA,CACNA,CAAAA,CAAM,QAAA,CACNA,CAAAA,CAAM,SAAA,CACNA,CAAAA,CAAM,OACR,EAEAuT,CAAAA,CAAM,sBAAsB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,UAAA,CAAYA,CAAAA,CAAM,QAAQ,EAEjEuT,CAAAA,CAAM,qBAAqB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,SAAA,CAAWA,CAAAA,CAAM,OAAO,EAE9DuT,CAAAA,CAAM,yBAAyB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,iBAAA,CAAmBA,CAAAA,CAAM,eAAe,EAElFuT,CAAAA,CAAM,mBAAmB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,cAAc,CAAA,CAElDuT,CAAAA,CAAM,sBAAsB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,QAAQ,CACjD,CACF,CAAA,CAWa6jB,EAAAA,CAAoBnR,EAC/B,qBAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,EAAW,CACX,WAAW,IAAM,MAAA,CAAO,UAAA,EAAY,CAAA,CAGvC,WAAA,CAAaA,CAAAA,CAAK,cAAc,EAAE,OAAA,EAAQ,CAC1C,UAAA,CAAYA,CAAAA,CAAK,aAAa,CAAA,CAAE,OAAA,EAAQ,CACxC,SAAUA,CAAAA,CAAK,WAAW,CAAA,CAAE,OAAA,EAAQ,CACpC,SAAA,CAAWA,CAAAA,CAAK,YAAY,EAAE,OAAA,EAAQ,CACtC,OAAA,CAASA,CAAAA,CAAK,UAAU,CAAA,CAAE,OAAA,EAAQ,CAGlC,OAAQA,CAAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,EAAQ,CAG/B,WAAA,CAAajD,CAAAA,CAAM,cAAc,EACjC,UAAA,CAAYA,CAAAA,CAAM,aAAa,CAAA,CAG/B,OAAA,CAASiD,CAAAA,CAAK,UAAU,CAAA,CAAE,SAAQ,CAClC,SAAA,CAAWA,CAAAA,CAAK,YAAY,CAAA,CAAE,OAAA,EAAQ,CACtC,MAAA,CAAQA,EAAK,QAAQ,CAAA,CAGrB,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,OAAA,EAAQ,CACR,WAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAG5D,UAAW/F,CAAAA,CAAU,WAAW,CAAA,CAAE,UAAA,GAAa,OAAA,EACjD,CAAA,CACCxQ,CAAAA,EAAU,CACTuT,CAAAA,CAAM,qBAAqB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,WAAW,CAAA,CACjDuT,CAAAA,CAAM,kBAAkB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,UAAA,CAAYA,CAAAA,CAAM,QAAQ,CAAA,CAC7DuT,CAAAA,CAAM,iBAAiB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,OAAO,CAAA,CACzCuT,CAAAA,CAAM,eAAe,CAAA,CAAE,GAAGvT,CAAAA,CAAM,cAAc,CAAA,CAC9CuT,CAAAA,CAAM,qBAAqB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,SAAS,CACjD,CACF,CAAA,CAMa8jB,EAAAA,CAAwB7N,CAAAA,CAAmB2N,EAAgB,CAAA,CAC3DG,EAAAA,CAA0B9N,EAAmB4N,EAAiB,EC3HpE,IAAMG,EAAAA,CAAetR,CAAAA,CAC1B,cAAA,CACA,CACE,OAAA,CAAS3C,EAAK,SAAS,CAAA,CAAE,UAAA,EAAW,CACpC,IAAA,CAAMA,CAAAA,CAAK,MAAM,CAAA,CAAE,SAAQ,CAAE,KAAA,EAAsB,CACnD,IAAA,CAAMA,CAAAA,CAAK,MAAM,CAAA,CACjB,WAAA,CAAaA,EAAK,aAAa,CAAA,CAC/B,MAAA,CAAQA,CAAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAwB,CACzD,QAAA,CAAUA,CAAAA,CAAK,WAAW,CAAA,CAC1B,MAAA,CAAQA,CAAAA,CAAK,QAAQ,EAAE,OAAA,EAAQ,CAAE,KAAA,EAAwB,CAAE,OAAA,CAAQ,SAAS,CAAA,CAC5E,SAAA,CAAWS,EAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAC/C,CAAA,CACCxQ,CAAAA,EAAU,CACTuT,CAAAA,CAAM,gCAAgC,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,MAAA,CAAQA,CAAAA,CAAM,MAAM,EACrEuT,CAAAA,CAAM,4BAA4B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,QAAQ,CACvD,CACF,EAQaikB,EAAAA,CAAQvR,CAAAA,CAAQ,OAAA,CAAS,CACpC,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CAAE,YAAW,CAAE,UAAA,CAAW,IAAM,MAAA,CAAO,YAAY,CAAA,CAChE,IAAA,CAAMA,CAAAA,CAAK,MAAM,CAAA,CAAE,OAAA,EAAQ,CAC3B,WAAA,CAAaA,CAAAA,CAAK,aAAa,CAAA,CAC/B,QAAA,CAAUA,EAAK,UAAU,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,EAAoB,CACzD,aAAA,CAAe3D,CAAAA,CAAQ,gBAAgB,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,CAAC,CAAA,CAC5D,QAAA,CAAU2D,CAAAA,CAAK,UAAU,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,KAAK,CAAA,CAClD,UAAA,CAAY3D,CAAAA,CAAQ,aAAa,CAAA,CAAE,OAAA,EAAQ,CAC3C,QAAA,CAAUA,CAAAA,CAAQ,WAAW,CAAA,CAAE,OAAA,GAAU,OAAA,CAAQ,CAAC,CAAA,CAClD,QAAA,CAAUU,CAAAA,CAAM,UAAU,CAAA,CAAE,KAAA,GAC5B,SAAA,CAAW0D,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAAW,CACxD,UAAWA,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAC/C,CAAC,EAQY0T,EAAAA,CAAYxR,CAAAA,CACvB,YAAA,CACA,CACE,EAAA,CAAI/B,CAAAA,CAAK,IAAI,CAAA,CAAE,YAAW,CAAE,aAAA,EAAc,CAC1C,MAAA,CAAQZ,CAAAA,CAAK,SAAS,CAAA,CACnB,OAAA,GACA,UAAA,CAAW,IAAMkU,EAAAA,CAAM,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,EACrD,OAAA,CAASlU,CAAAA,CAAK,SAAS,CAAA,CAAE,OAAA,EAAQ,CACjC,aAAA,CAAeA,CAAAA,CAAK,gBAAgB,CAAA,CACpC,QAAA,CAAUA,CAAAA,CAAK,WAAW,CAAA,CAC1B,IAAA,CAAMA,CAAAA,CAAK,MAAM,EAAE,OAAA,EAAQ,CAAE,KAAA,EAAoB,CACjD,MAAA,CAAQ3D,CAAAA,CAAQ,QAAQ,CAAA,CACxB,UAAW2D,CAAAA,CAAK,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,EAAiB,CACzD,QAAA,CAAU3D,EAAQ,UAAU,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,CAAC,CAAA,CACjD,aAAA,CAAe2D,CAAAA,CAAK,gBAAgB,CAAA,CAAE,KAAA,EAAqB,CAAE,OAAA,CAAQ,MAAM,CAAA,CAC3E,iBAAA,CAAmB3D,CAAAA,CAAQ,qBAAqB,CAAA,CAChD,aAAA,CAAe2D,CAAAA,CAAK,gBAAgB,CAAA,CAAE,KAAA,EAAqB,CAAE,OAAA,CAAQ,MAAM,CAAA,CAC3E,QAAA,CAAU3D,CAAAA,CAAQ,WAAW,CAAA,CAC7B,UAAA,CAAY2D,CAAAA,CAAK,aAAa,EAAE,KAAA,EAAkB,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,QAAQ,CAAA,CAC9E,QAAA,CAAUjD,EAAM,UAAU,CAAA,CAAE,KAAA,EAA+B,CAC3D,SAAA,CAAW0D,CAAAA,CAAU,YAAY,CAAA,CAAE,SAAQ,CAAE,UAAA,EAAW,CACxD,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,GAAU,UAAA,EAC/C,CAAA,CACCxQ,CAAAA,EAAU,CACTuT,CAAAA,CAAM,wBAAwB,CAAA,CAAE,GAAGvT,CAAAA,CAAM,MAAM,CAAA,CAC/CuT,CAAAA,CAAM,wBAAwB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,OAAO,CAAA,CAChDuT,CAAAA,CAAM,+BAA+B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,aAAa,CAAA,CAC7DwT,EAAY,mCAAmC,CAAA,CAC5C,EAAA,CAAGxT,CAAAA,CAAM,MAAA,CAAQA,CAAAA,CAAM,aAAa,CAAA,CACpC,MAAMyD,CAAAA,CAAAA,EAAMzD,CAAAA,CAAM,aAAa,CAAA,YAAA,CAAc,CAClD,CACF,CAAA,CAQamkB,EAAAA,CAAazR,EACxB,aAAA,CACA,CACE,EAAA,CAAI/B,CAAAA,CAAK,IAAI,CAAA,CAAE,UAAA,EAAW,CAAE,eAAc,CAC1C,MAAA,CAAQZ,CAAAA,CAAK,SAAS,CAAA,CACnB,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMmG,CAAAA,CAAK,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CACpD,cAAA,CAAgBnG,EAAK,iBAAiB,CAAA,CACnC,UAAA,CAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAC5D,OAAA,CAASxG,CAAAA,CAAK,SAAS,CAAA,CAAE,OAAA,EAAQ,CACjC,QAAS3D,CAAAA,CAAQ,SAAS,CAAA,CAAE,OAAA,EAAQ,CACpC,QAAA,CAAUA,CAAAA,CAAQ,UAAU,EAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,CAAC,CAAA,CACjD,SAAA,CAAWoE,CAAAA,CAAU,YAAY,EACjC,UAAA,CAAYT,CAAAA,CAAK,aAAa,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,EAAuB,CACjE,SAAUA,CAAAA,CAAK,WAAW,CAAA,CAAE,OAAA,EAAQ,CACpC,QAAA,CAAUjD,CAAAA,CAAM,UAAU,EAAE,KAAA,EAA+B,CAC3D,SAAA,CAAW0D,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,YAAW,CACxD,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAC/C,CAAA,CACCxQ,CAAAA,EAAU,CACTuT,CAAAA,CAAM,8BAA8B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,OAAQA,CAAAA,CAAM,OAAO,CAAA,CACpEuT,CAAAA,CAAM,2BAA2B,CAAA,CAAE,EAAA,CACjCvT,CAAAA,CAAM,OACNA,CAAAA,CAAM,OAAA,CACNA,CAAAA,CAAM,OAAA,CACNA,CAAAA,CAAM,QAAA,CACNA,CAAAA,CAAM,SACR,EACAwT,CAAAA,CAAY,uBAAuB,CAAA,CAAE,EAAA,CACnCxT,CAAAA,CAAM,cAAA,CACNA,CAAAA,CAAM,MAAA,CACNA,EAAM,OAAA,CACNA,CAAAA,CAAM,UAAA,CACNA,CAAAA,CAAM,QACR,CAAA,CACAwT,CAAAA,CAAY,8BAA8B,EACvC,EAAA,CAAGxT,CAAAA,CAAM,MAAA,CAAQA,CAAAA,CAAM,OAAA,CAASA,CAAAA,CAAM,UAAA,CAAYA,CAAAA,CAAM,QAAQ,CAAA,CAChE,KAAA,CAAMyD,CAAAA,CAAAA,EAAMzD,CAAAA,CAAM,cAAc,CAAA,QAAA,CAAU,CAC/C,CACF,EAQaokB,EAAAA,CAAU1R,CAAAA,CAAQ,SAAA,CAAW,CACxC,MAAA,CAAQ3C,CAAAA,CAAK,SAAS,CAAA,CACnB,YAAW,CACX,UAAA,CAAW,IAAMmG,CAAAA,CAAK,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CACpD,YAAA,CAAc9J,CAAAA,CAAQ,eAAe,EAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,CAAC,EAC1D,QAAA,CAAU2D,CAAAA,CAAK,UAAU,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,KAAK,EAClD,SAAA,CAAWS,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAC/C,CAAC,CAAA,CAQY6T,EAAAA,CAAe3R,CAAAA,CAC1B,cAAA,CACA,CACE,EAAA,CAAI/B,CAAAA,CAAK,IAAI,EAAE,UAAA,EAAW,CAAE,aAAA,EAAc,CAC1C,MAAA,CAAQZ,CAAAA,CAAK,SAAS,CAAA,CACnB,SAAQ,CACR,UAAA,CAAW,IAAMmG,CAAAA,CAAK,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CACpD,WAAA,CAAa9J,CAAAA,CAAQ,cAAc,CAAA,CAAE,OAAA,EAAQ,CAC7C,QAAA,CAAU2D,EAAK,UAAU,CAAA,CAAE,OAAA,EAAQ,CACnC,UAAA,CAAYA,CAAAA,CAAK,aAAa,CAAA,CAAE,SAAQ,CAAE,KAAA,EAA6B,CACvE,QAAA,CAAUA,CAAAA,CAAK,WAAW,CAAA,CAAE,OAAA,GAC5B,MAAA,CAAQA,CAAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,EAAyB,CAAE,QAAQ,SAAS,CAAA,CAC7E,OAAA,CAASA,CAAAA,CAAK,SAAS,CAAA,CACvB,UAAA,CAAYA,CAAAA,CAAK,aAAa,CAAA,CAC9B,YAAA,CAAcA,CAAAA,CAAK,eAAe,CAAA,CAClC,eAAA,CAAiB3D,CAAAA,CAAQ,mBAAmB,EAC5C,kBAAA,CAAoB2D,CAAAA,CAAK,qBAAqB,CAAA,CAC9C,qBAAA,CAAuB3D,CAAAA,CAAQ,yBAAyB,CAAA,CACxD,aAAc2D,CAAAA,CAAK,eAAe,CAAA,CAClC,cAAA,CAAgBS,CAAAA,CAAU,kBAAkB,CAAA,CAC5C,QAAA,CAAU1D,EAAM,UAAU,CAAA,CAAE,KAAA,EAA+B,CAC3D,MAAA,CAAQ0D,CAAAA,CAAU,SAAS,CAAA,CAC3B,UAAWA,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAAW,CACxD,SAAA,CAAWA,EAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,YAC/C,CAAA,CACCxQ,CAAAA,EAAU,CACTuT,EAAM,8BAA8B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,MAAA,CAAQA,CAAAA,CAAM,UAAA,CAAYA,CAAAA,CAAM,QAAQ,CAAA,CACvFwT,CAAAA,CAAY,6BAA6B,CAAA,CAAE,EAAA,CAAGxT,CAAAA,CAAM,UAAU,CAAA,CAC9DuT,EAAM,yBAAyB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,MAAM,CAClD,CACF,CAAA,CAaaskB,GAAqB5R,CAAAA,CAChC,sBAAA,CACA,CACE,EAAA,CAAI/B,CAAAA,CAAK,IAAI,CAAA,CAAE,UAAA,GAAa,aAAA,EAAc,CAC1C,SAAA,CAAWZ,CAAAA,CAAK,YAAY,CAAA,CAAE,OAAA,EAAQ,CACtC,cAAeY,CAAAA,CAAK,gBAAgB,CAAA,CACjC,OAAA,EAAQ,CACR,UAAA,CAAW,IAAM0T,EAAAA,CAAa,GAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAC5D,SAAA,CAAWtU,CAAAA,CAAK,YAAY,EAAE,OAAA,EAAQ,CACtC,OAAA,CAASjD,CAAAA,CAAM,SAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,OAA+B,CACnE,MAAA,CAAQiD,CAAAA,CAAK,QAAQ,CAAA,CAClB,OAAA,EAAQ,CACR,KAAA,GACA,OAAA,CAAQ,SAAS,CAAA,CACpB,QAAA,CAAU3D,CAAAA,CAAQ,UAAU,CAAA,CAAE,OAAA,GAAU,OAAA,CAAQ,CAAC,CAAA,CACjD,WAAA,CAAaoE,CAAAA,CAAU,cAAA,CAAgB,CAAE,YAAA,CAAc,IAAK,CAAC,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAAW,CACpF,OAAA,CAASG,CAAAA,CAAK,UAAU,CAAA,CACxB,cAAA,CAAgBH,CAAAA,CAAU,kBAAA,CAAoB,CAAE,YAAA,CAAc,IAAK,CAAC,EACpE,SAAA,CAAWT,CAAAA,CAAK,YAAY,CAAA,CAC5B,WAAA,CAAaS,CAAAA,CAAU,cAAA,CAAgB,CAAE,aAAc,IAAK,CAAC,CAAA,CAC7D,SAAA,CAAWA,CAAAA,CAAU,YAAA,CAAc,CAAE,YAAA,CAAc,IAAK,CAAC,CAAA,CAAE,OAAA,EAAQ,CAAE,YAAW,CAChF,SAAA,CAAWA,CAAAA,CAAU,YAAA,CAAc,CAAE,YAAA,CAAc,IAAK,CAAC,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EACvE,EACCxQ,CAAAA,EAAU,CACTwT,CAAAA,CAAY,kCAAkC,CAAA,CAAE,EAAA,CAAGxT,CAAAA,CAAM,SAAS,EAClEuT,CAAAA,CAAM,oCAAoC,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,MAAA,CAAQA,CAAAA,CAAM,WAAW,EAC9EuT,CAAAA,CAAM,sCAAsC,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,aAAa,CACtE,CACF,EAQaukB,EAAAA,CAAe7R,CAAAA,CAC1B,eAAA,CACA,CACE,EAAA,CAAI/B,CAAAA,CAAK,IAAI,CAAA,CAAE,YAAW,CAAE,aAAA,EAAc,CAC1C,MAAA,CAAQZ,CAAAA,CAAK,SAAS,CAAA,CACnB,OAAA,GACA,UAAA,CAAW,IAAMmG,CAAAA,CAAK,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,EACpD,OAAA,CAASnG,CAAAA,CAAK,SAAS,CAAA,CAAE,OAAA,EAAQ,CACjC,MAAA,CAAQ3D,CAAAA,CAAQ,QAAQ,CAAA,CAAE,OAAA,EAAQ,CAClC,QAAA,CAAUU,CAAAA,CAAM,WAAW,CAAA,CAAE,KAAA,GAC7B,mBAAA,CAAqBV,CAAAA,CAAQ,uBAAuB,CAAA,CACpD,UAAA,CAAYoE,CAAAA,CAAU,aAAa,CAAA,CAAE,SAAQ,CAAE,UAAA,EAAW,CAC1D,QAAA,CAAU1D,CAAAA,CAAM,UAAU,CAAA,CAAE,KAAA,EAC9B,CAAA,CACC9M,CAAAA,EAAU,CACTuT,CAAAA,CAAM,gCAAgC,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,OAAQA,CAAAA,CAAM,OAAO,CAAA,CACtEuT,CAAAA,CAAM,+BAA+B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,UAAU,CAC5D,CACF,CAAA,CAQawkB,EAAAA,CAAoB9R,CAAAA,CAC/B,oBAAA,CACA,CACE,EAAA,CAAI/B,EAAK,IAAI,CAAA,CAAE,UAAA,EAAW,CAAE,aAAA,EAAc,CAC1C,cAAA,CAAgBZ,CAAAA,CAAK,iBAAiB,CAAA,CACnC,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,SAAU,SAAU,CAAC,CAAA,CAC5D,MAAA,CAAQxG,CAAAA,CAAK,SAAS,CAAA,CACnB,OAAA,GACA,UAAA,CAAW,IAAMkU,EAAAA,CAAM,EAAA,CAAI,CAAE,QAAA,CAAU,UAAW,CAAC,EACtD,MAAA,CAAQlU,CAAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,EAA0B,CAC3D,QAAS3D,CAAAA,CAAQ,SAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,CAAC,CAAA,CAC/C,mBAAoBoE,CAAAA,CAAU,sBAAsB,CAAA,CAAE,OAAA,EAAQ,CAC9D,gBAAA,CAAkBA,CAAAA,CAAU,oBAAoB,EAAE,OAAA,EAAQ,CAC1D,kBAAA,CAAoBpE,CAAAA,CAAQ,sBAAsB,CAAA,CAClD,UAAA,CAAYoE,CAAAA,CAAU,aAAa,CAAA,CACnC,QAAA,CAAUA,CAAAA,CAAU,WAAW,CAAA,CAC/B,YAAA,CAAcpE,CAAAA,CAAQ,eAAe,EAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,CAAC,CAAA,CAC1D,aAAA,CAAeoE,CAAAA,CAAU,iBAAiB,EAC1C,OAAA,CAAST,CAAAA,CAAK,SAAS,CAAA,CACvB,sBAAA,CAAwBA,CAAAA,CAAK,0BAA0B,CAAA,CACvD,qBAAsBY,CAAAA,CAAK,wBAAwB,CAAA,CAChD,UAAA,CAAW,IAAM0T,EAAAA,CAAa,EAAA,CAAI,CAAE,SAAU,UAAW,CAAC,CAAA,CAC7D,mBAAA,CAAqB1T,CAAAA,CAAK,uBAAuB,CAAA,CAC9C,UAAA,CAAW,IAAM0T,EAAAA,CAAa,EAAA,CAAI,CAAE,QAAA,CAAU,UAAW,CAAC,CAAA,CAC7D,UAAA,CAAY7T,EAAU,aAAa,CAAA,CACnC,YAAA,CAAcT,CAAAA,CAAK,eAAe,CAAA,CAClC,iBAAA,CAAmB3D,CAAAA,CAAQ,sBAAsB,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,CAC5D,eAAA,CAAiB2D,CAAAA,CAAK,mBAAmB,CAAA,CACtC,WAAW,IAAMkU,EAAAA,CAAM,EAAA,CAAI,CAAE,QAAA,CAAU,UAAW,CAAC,CAAA,CACtD,kBAAmBzT,CAAAA,CAAU,qBAAqB,CAAA,CAClD,QAAA,CAAU1D,EAAM,UAAU,CAAA,CAAE,KAAA,EAA+B,CAC3D,UAAW0D,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAAW,CACxD,SAAA,CAAWA,EAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAC/C,CAAA,CACCxQ,CAAAA,EAAU,CACTuT,CAAAA,CAAM,0BAA0B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,cAAc,CAAA,CACzDuT,CAAAA,CAAM,0BAA0B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,MAAM,CAAA,CACjDuT,CAAAA,CAAM,8BAA8B,CAAA,CAAE,GAAGvT,CAAAA,CAAM,gBAAgB,CAAA,CAC/DwT,CAAAA,CAAY,8BAA8B,CAAA,CAAE,EAAA,CAAGxT,CAAAA,CAAM,sBAAsB,CAAA,CAC3EwT,CAAAA,CAAY,qCAAqC,CAAA,CAC9C,EAAA,CAAGxT,CAAAA,CAAM,cAAA,CAAgBA,CAAAA,CAAM,MAAM,CAAA,CACrC,KAAA,CAAMyD,CAAAA,CAAAA,4CAAAA,CAAiD,CAC5D,CACF,CAAA,CAQaghB,EAAAA,CAAe/R,CAAAA,CAC1B,gBACA,CACE,EAAA,CAAI/B,CAAAA,CAAK,IAAI,CAAA,CAAE,UAAA,EAAW,CAAE,aAAA,GAC5B,cAAA,CAAgBZ,CAAAA,CAAK,iBAAiB,CAAA,CACnC,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMwG,EAAa,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAC5D,OAAA,CAASxG,CAAAA,CAAK,SAAS,CAAA,CAAE,OAAA,EAAQ,CACjC,OAAA,CAAS3D,CAAAA,CAAQ,SAAS,CAAA,CAAE,OAAA,GAC5B,QAAA,CAAUA,CAAAA,CAAQ,UAAU,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,GAAG,EACnD,SAAA,CAAWoE,CAAAA,CAAU,YAAY,CAAA,CACjC,UAAA,CAAYT,CAAAA,CAAK,aAAa,CAAA,CAAE,SAAQ,CAAE,KAAA,EAAuB,CACjE,QAAA,CAAUA,CAAAA,CAAK,WAAW,CAAA,CAAE,OAAA,GAC5B,QAAA,CAAUjD,CAAAA,CAAM,UAAU,CAAA,CAAE,KAAA,EAA+B,CAC3D,SAAA,CAAW0D,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,GAC7C,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAAE,SAAQ,CAAE,UAAA,EAC/C,CAAA,CACCxQ,CAAAA,EAAU,CACTuT,CAAAA,CAAM,kCAAkC,EAAE,EAAA,CAAGvT,CAAAA,CAAM,cAAA,CAAgBA,CAAAA,CAAM,OAAO,CAAA,CAChFuT,CAAAA,CAAM,6BAA6B,EAAE,EAAA,CACnCvT,CAAAA,CAAM,cAAA,CACNA,CAAAA,CAAM,OAAA,CACNA,CAAAA,CAAM,OAAA,CACNA,CAAAA,CAAM,SACNA,CAAAA,CAAM,SACR,CAAA,CACAwT,CAAAA,CAAY,yBAAyB,CAAA,CAAE,EAAA,CACrCxT,CAAAA,CAAM,eACNA,CAAAA,CAAM,OAAA,CACNA,CAAAA,CAAM,UAAA,CACNA,CAAAA,CAAM,QACR,CACF,CACF,EAMa0kB,EAAAA,CAAmBzO,CAAAA,CAAmB+N,EAAY,CAAA,CAClDW,EAAAA,CAAa1O,CAAAA,CAAmBgO,EAAK,CAAA,CACrCW,GAAiB3O,CAAAA,CAAmBiO,EAAS,CAAA,CAC7CW,EAAAA,CAAkB5O,CAAAA,CAAmBkO,EAAU,CAAA,CAC/CW,EAAAA,CAAe7O,EAAmBmO,EAAO,CAAA,CACzCW,EAAAA,CAAoB9O,CAAAA,CAAmBoO,EAAY,CAAA,CACnDW,EAAAA,CAA2B/O,CAAAA,CAAmBqO,EAAkB,CAAA,CAChEW,EAAAA,CAAoBhP,CAAAA,CAAmBsO,EAAY,CAAA,CACnDW,EAAAA,CAAyBjP,CAAAA,CAAmBuO,EAAiB,EAC7DW,EAAAA,CAAoBlP,CAAAA,CAAmBwO,EAAY,EC7VzD,IAAMW,EAAAA,CAAa1S,CAAAA,CACxB,YAAA,CACA,CACE,EAAA,CAAI/B,CAAAA,CAAK,IAAI,CAAA,CAAE,UAAA,EAAW,CAAE,aAAA,EAAc,CAE1C,eAAgBZ,CAAAA,CAAK,iBAAiB,CAAA,CACnC,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMwG,CAAAA,CAAa,GAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAC5D,IAAA,CAAMxG,CAAAA,CAAK,MAAM,EAAE,OAAA,EAAQ,CAC3B,QAAA,CAAUjD,CAAAA,CAAM,WAAW,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAwB,CAC/D,MAAA,CAAQiD,CAAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,EAAQ,CAC/B,aAAA,CAAe3D,EAAQ,gBAAgB,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,CAAC,CAAA,CAC5D,SAAA,CAAWA,CAAAA,CAAQ,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,CAAC,CAAA,CACpD,MAAA,CAAQA,CAAAA,CAAQ,SAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,CAAC,CAAA,CAC9C,WAAA,CAAa8B,EAAAA,CAAQ,eAAgB,CAAE,SAAA,CAAW,EAAA,CAAI,KAAA,CAAO,CAAE,CAAC,CAAA,CAChE,SAAA,CAAW6B,EAAK,YAAY,CAAA,CAC5B,SAAA,CAAWA,CAAAA,CAAK,YAAY,CAAA,CAC5B,SAAA,CAAWS,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAAW,CACxD,SAAA,CAAWA,CAAAA,CAAU,YAAY,EAAE,OAAA,EAAQ,CAAE,UAAA,EAC/C,CAAA,CACCxQ,CAAAA,EAAU,CACTwT,CAAAA,CAAY,wBAAwB,CAAA,CAAE,EAAA,CAAGxT,CAAAA,CAAM,cAAA,CAAgBA,CAAAA,CAAM,IAAI,CAAA,CACzEwT,CAAAA,CAAY,wBAAwB,CAAA,CACjC,EAAA,CAAGxT,CAAAA,CAAM,cAAc,CAAA,CACvB,KAAA,CAAMyD,CAAAA,CAAAA,WAAAA,CAAgB,CAAA,CACzB8P,EAAM,oBAAoB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,cAAc,CACrD,CACF,CAAA,CAcaqlB,GAAgB3S,CAAAA,CAC3B,gBAAA,CACA,CACE,EAAA,CAAI/B,CAAAA,CAAK,IAAI,CAAA,CAAE,UAAA,GAAa,aAAA,EAAc,CAE1C,cAAA,CAAgBZ,CAAAA,CAAK,iBAAiB,CAAA,CACnC,OAAA,EAAQ,CACR,WAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAC5D,aAAcxG,CAAAA,CAAK,eAAe,CAAA,CAAE,OAAA,EAAQ,CAC5C,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,EAAE,OAAA,EAAQ,CAChD,IAAA,CAAM7B,EAAAA,CAAQ,MAAA,CAAQ,CAAE,SAAA,CAAW,EAAA,CAAI,MAAO,CAAE,CAAC,CAAA,CAAE,OAAA,EAAQ,CAC3D,MAAA,CAAQ6B,CAAAA,CAAK,QAAQ,EAAE,OAAA,EAAQ,CAAE,KAAA,EAA0B,CAC3D,WAAA,CAAaS,CAAAA,CAAU,cAAc,CAAA,CAAE,SAAQ,CAC/C,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CACjC,SAAA,CAAWT,CAAAA,CAAK,YAAY,EAC5B,SAAA,CAAWA,CAAAA,CAAK,YAAY,CAAA,CAC5B,SAAA,CAAWS,CAAAA,CAAU,YAAY,CAAA,CAAE,SAAQ,CAAE,UAAA,EAAW,CACxD,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,GAAU,UAAA,EAC/C,CAAA,CACCxQ,CAAAA,EAAU,CACTwT,CAAAA,CAAY,iCAAiC,CAAA,CAAE,GAC7CxT,CAAAA,CAAM,cAAA,CACNA,CAAAA,CAAM,YAAA,CACNA,CAAAA,CAAM,cAAA,CACNA,CAAAA,CAAM,WACR,EACAuT,CAAAA,CAAM,wBAAwB,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,cAAc,CAAA,CACvDuT,CAAAA,CAAM,4BAA4B,CAAA,CAAE,EAAA,CAClCvT,CAAAA,CAAM,cAAA,CACNA,CAAAA,CAAM,YAAA,CACNA,CAAAA,CAAM,cACR,EAAE,KAAA,CAAMyD,CAAAA,CAAAA,kBAAAA,CAAuB,CACjC,CACF,CAAA,CAQa6hB,EAAAA,CAAiBrP,CAAAA,CAAmBmP,EAAU,EAC9CG,EAAAA,CAAqBtP,CAAAA,CAAmBoP,EAAa,MC7FrDG,EAAAA,CAA0C,CACrD,CAAE,IAAA,CAAM,eAAA,CAAiB,IAAA,CAAM,CAAE,OAAA,CAAS,eAAM,OAAA,CAAS,eAAgB,CAAA,CAAG,SAAA,CAAW,EAAG,CAAA,CAC1F,CAAE,IAAA,CAAM,SAAU,IAAA,CAAM,CAAE,OAAA,CAAS,cAAA,CAAM,OAAA,CAAS,QAAS,CAAA,CAAG,SAAA,CAAW,EAAG,CAAA,CAC5E,CAAE,IAAA,CAAM,cAAA,CAAgB,IAAA,CAAM,CAAE,OAAA,CAAS,cAAA,CAAM,QAAS,cAAe,CAAA,CAAG,SAAA,CAAW,EAAG,CAAA,CACxF,CAAE,IAAA,CAAM,eAAA,CAAiB,KAAM,CAAE,OAAA,CAAS,cAAA,CAAM,OAAA,CAAS,eAAgB,CAAA,CAAG,SAAA,CAAW,EAAG,EAC1F,CAAE,IAAA,CAAM,aAAA,CAAe,IAAA,CAAM,CAAE,OAAA,CAAS,cAAA,CAAM,OAAA,CAAS,aAAc,EAAG,SAAA,CAAW,EAAG,CAAA,CACtF,CAAE,IAAA,CAAM,QAAA,CAAU,IAAA,CAAM,CAAE,QAAS,cAAA,CAAM,OAAA,CAAS,QAAS,CAAA,CAAG,SAAA,CAAW,EAAG,CAAA,CAC5E,CAAE,KAAM,QAAA,CAAU,IAAA,CAAM,CAAE,OAAA,CAAS,cAAA,CAAM,OAAA,CAAS,QAAS,CAAA,CAAG,UAAW,EAAG,CAC9E,CAAA,CAEaC,EAAAA,CAAgBxR,GAAAA,CAC1B,MAAA,CAAOA,GAAAA,CAAE,MAAA,GAAUA,GAAAA,CAAE,MAAA,EAAQ,CAAA,CAC7B,MAAA,CAAQxU,CAAAA,EAAU,MAAA,CAAO,IAAA,CAAKA,CAAK,CAAA,CAAE,MAAA,CAAS,CAAA,CAAG,CAChD,OAAA,CAAS,yCACX,CAAC,CAAA,CAEUimB,GAAqBzR,GAAAA,CAC/B,MAAA,EAAO,CACP,MAAA,CAAO,CAAC,CAAA,CACR,KAAA,CAAM,eAAA,CAAiB,yCAAyC,CAAA,CAChE,SAAA,CAAWxU,CAAAA,EAAUA,CAAAA,CAAM,WAAA,EAAa,CAAA,CAE9BkmB,EAAAA,CAAqB1R,IAC/B,MAAA,EAAO,CACP,MAAA,CAAO,CAAC,CAAA,CACR,KAAA,CAAM,eAAA,CAAiB,yCAAyC,EAChE,SAAA,CAAWxU,CAAAA,EAAUA,CAAAA,CAAM,WAAA,EAAa,CAAA,CAE9BmmB,EAAAA,CAA4B3R,GAAAA,CACtC,QAAO,CACP,GAAA,CAAI,CAAC,CAAA,CACL,KAAA,CAAM,4BAAA,CAA8B,4CAA4C,CAAA,CAChF,UAAWxU,CAAAA,EAAUA,CAAAA,CAAM,WAAA,EAAa,CAAA,CAE9BomB,EAAAA,CAAenT,CAAAA,CAC1B,eAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,EAAW,CACX,UAAA,CAAW,IAAM,OAAO,UAAA,EAAY,CAAA,CACvC,KAAA,CAAOA,CAAAA,CAAK,OAAO,CAAA,CAAE,OAAA,GACrB,KAAA,CAAOA,CAAAA,CAAK,OAAO,CAAA,CACnB,WAAA,CAAaA,CAAAA,CAAK,cAAc,CAAA,CAChC,KAAMjD,CAAAA,CAAM,MAAM,CAAA,CAAE,OAAA,GAAU,KAAA,EAAe,CAC7C,YAAA,CAAcA,CAAAA,CAAM,eAAe,CAAA,CAAE,KAAA,EAAsB,CAC3D,KAAA,CAAOA,CAAAA,CAAM,OAAO,CAAA,CAAE,KAAA,GACtB,YAAA,CAAciD,CAAAA,CAAK,eAAe,CAAA,CAClC,YAAA,CAAcA,CAAAA,CAAK,eAAe,CAAA,CAClC,OAAQA,CAAAA,CAAK,QAAQ,CAAA,CACrB,SAAA,CAAWA,CAAAA,CAAK,YAAY,CAAA,CAC5B,WAAA,CAAajG,EAAQ,cAAc,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,IAAI,CAAA,CAC3D,SAAA,CAAWsC,EAAQ,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,CAAC,CAAA,CACpD,SAAA,CAAWoE,EAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAAW,CACxD,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAC9B,OAAA,EAAQ,CACR,UAAA,EAAW,CACX,SAAA,CAAU,IAAM,IAAI,IAAM,CAC/B,CAAA,CACCxQ,CAAAA,EAAU,CACTwT,CAAAA,CAAY,0BAA0B,CAAA,CAAE,EAAA,CAAGxT,EAAM,KAAK,CAAA,CACtDwT,CAAAA,CAAY,0BAA0B,CAAA,CAAE,EAAA,CAAGxT,CAAAA,CAAM,KAAK,EACtDuT,CAAAA,CAAM,kCAAkC,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,WAAA,CAAaA,CAAAA,CAAM,SAAS,CACjF,CACF,CAAA,CAEa8lB,EAAAA,CAAkBpT,CAAAA,CAC7B,kBAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,EAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,UAAA,EAAY,EACvC,YAAA,CAAcA,CAAAA,CAAK,eAAe,CAAA,CAC/B,OAAA,EAAQ,CACR,UAAA,CAAW,IAAM8V,GAAa,KAAA,CAAO,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAC/D,IAAA,CAAM9V,CAAAA,CAAK,MAAM,CAAA,CAAE,OAAA,EAAQ,CAC3B,QAAA,CAAUA,CAAAA,CAAK,WAAW,CAAA,CAAE,OAAA,GAC5B,IAAA,CAAMjD,CAAAA,CAAM,MAAM,CAAA,CAAE,SAAQ,CAAE,KAAA,EAAe,CAC7C,IAAA,CAAMiD,EAAK,MAAM,CAAA,CACjB,WAAA,CAAajG,CAAAA,CAAQ,cAAc,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA,CAC3D,SAAA,CAAWsC,CAAAA,CAAQ,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,CAAC,CAAA,CACpD,SAAA,CAAWoE,CAAAA,CAAU,YAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,YAAW,CACxD,SAAA,CAAWA,CAAAA,CAAU,YAAY,CAAA,CAC9B,OAAA,EAAQ,CACR,UAAA,GACA,SAAA,CAAU,IAAM,IAAI,IAAM,CAC/B,CAAA,CACCxQ,CAAAA,EAAU,CACTwT,EAAY,iCAAiC,CAAA,CAAE,EAAA,CAAGxT,CAAAA,CAAM,QAAQ,CAAA,CAChEwT,CAAAA,CAAY,oCAAoC,EAAE,EAAA,CAAGxT,CAAAA,CAAM,YAAA,CAAcA,CAAAA,CAAM,IAAI,CAAA,CACnFuT,CAAAA,CAAM,mCAAmC,EAAE,EAAA,CAAGvT,CAAAA,CAAM,YAAA,CAAcA,CAAAA,CAAM,SAAS,CAAA,CACjFuT,CAAAA,CAAM,wCAAwC,EAAE,EAAA,CAAGvT,CAAAA,CAAM,YAAA,CAAcA,CAAAA,CAAM,WAAW,CAC1F,CACF,CAAA,CAKa+lB,GAAmB9P,CAAAA,CAAmB4P,EAAAA,CAAc,CAC/D,KAAA,CAAO,IAAMH,EAAAA,CACb,KAAA,CAAO,IAAMC,GAAmB,QAAA,EAAS,CACzC,IAAA,CAAM,IAAMF,EAAAA,CACZ,YAAA,CAAc,IAAMA,EAAAA,CAAc,SACpC,CAAC,CAAA,CAEYO,EAAAA,CAAuB/P,CAAAA,CAAmB6P,EAAAA,CAAiB,CACtE,YAAA,CAAc,IAAMJ,EAAAA,CACpB,QAAA,CAAU,IAAME,EAAAA,CAChB,IAAA,CAAM,IAAMH,EACd,CAAC,EAEYQ,EAAAA,CAAqBhS,GAAAA,CAAE,MAAA,CAAO,CACzC,KAAA,CAAOyR,EAAAA,CACP,MAAA,CAAQtN,CAAAA,CAAa,UACvB,CAAC,CAAA,CAEY8N,EAAAA,CAAwBxO,CAAAA,CAAiB,OAAA,EAAQ,CAAE,MAAA,CAAO,CACrE,KAAA,CAAOzD,GAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,GAAA,CAAI,CAAC,EAAE,GAAA,CAAI,GAAG,CAAA,CAAE,OAAA,CAAQ,GAAG,CAAA,CACnD,MAAA,CAAQA,GAAAA,CAAE,QAAO,CAAE,GAAA,EAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,OAAA,CAAQ,CAAC,EACzC,MAAA,CAAQmE,CAAAA,CAAa,QAAA,EAAS,CAC9B,aAAA,CAAenE,GAAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CACzC,CAAC,CAAA,CAEYkS,EAAAA,CAAyBlS,GAAAA,CAAE,MAAA,CAAO,CAC7C,SAAU2R,EAAAA,CACV,MAAA,CAAQxN,CAAAA,CAAa,QAAA,EACvB,CAAC,CAAA,CAEYgO,EAAAA,CAA2B1O,EAAiB,OAAA,EAAQ,CAAE,MAAA,CAAO,CACxE,KAAA,CAAOzD,GAAAA,CAAE,MAAA,EAAO,CAAE,KAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,OAAA,CAAQ,GAAG,CAAA,CACnD,MAAA,CAAQA,GAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,CACzC,YAAA,CAAcyR,EAAAA,CACd,MAAA,CAAQtN,CAAAA,CAAa,UAAS,CAC9B,aAAA,CAAenE,GAAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,IAAI,CACzC,CAAC,CAAA,CAEYoS,EAAAA,CAAyB3O,CAAAA,CAAiB,OAAA,EAAQ,CAAE,MAAA,CAAO,CACtE,KAAA,CAAOzD,IAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,OAAA,CAAQ,GAAG,CAAA,CACnD,MAAA,CAAQA,GAAAA,CAAE,MAAA,EAAO,CAAE,KAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,CACzC,MAAA,CAAQmE,EAAa,QAAA,EACvB,CAAC,ECtIM,IAAMkO,EAAAA,CAAmB5T,CAAAA,CAC9B,mBAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,YAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,YAAY,CAAA,CAEvC,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,OAAA,EAAQ,CACR,WAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAC5D,IAAKxG,CAAAA,CAAK,KAAK,CAAA,CAAE,OAAA,EAAQ,CACzB,MAAA,CAAQA,CAAAA,CAAK,QAAQ,EAAE,OAAA,EAAQ,CAC/B,MAAA,CAAQA,CAAAA,CAAK,QAAQ,CAAA,CAClB,KAAA,EAAM,CACN,SAAQ,CACR,UAAA,CAAW,IAAM,EAAE,CAAA,CACtB,OAAA,CAASjG,CAAAA,CAAQ,SAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,IAAI,CAAA,CAClD,WAAA,CAAagD,CAAAA,CAAM,cAAc,CAAA,CAC9B,OAAA,EAAQ,CACR,KAAA,EAAmB,CACnB,OAAA,CAAQ,CAAE,QAAA,CAAU,EAAG,SAAA,CAAW,GAAK,CAAC,CAAA,CAC3C,SAAA,CAAW0D,CAAAA,CAAU,YAAA,CAAc,CAAE,aAAc,IAAK,CAAC,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAAW,CAChF,SAAA,CAAWA,EAAU,YAAA,CAAc,CAAE,YAAA,CAAc,IAAK,CAAC,CAAA,CAAE,OAAA,EAAQ,CAAE,YACvE,CAAA,CACCxQ,CAAAA,EAAU,CACTuT,CAAAA,CAAM,8BAA8B,CAAA,CAAE,EAAA,CAAGvT,EAAM,cAAc,CAAA,CAC7DuT,CAAAA,CAAM,+BAA+B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,cAAA,CAAgBA,EAAM,OAAO,CAAA,CAC7EwT,CAAAA,CAAY,iCAAiC,CAAA,CAAE,EAAA,CAAGxT,CAAAA,CAAM,cAAA,CAAgBA,EAAM,GAAG,CACnF,CACF,CAAA,CAaaumB,EAAAA,CAAoB7T,CAAAA,CAC/B,oBAAA,CACA,CACE,GAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,EAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,YAAY,CAAA,CAEvC,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAE5D,UAAA,CAAYxG,EAAK,aAAa,CAAA,CAC3B,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMuW,EAAAA,CAAiB,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAChE,SAAA,CAAWvW,CAAAA,CAAK,YAAY,CAAA,CAAE,SAAQ,CACtC,OAAA,CAASjD,CAAAA,CAAM,SAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,GACpC,MAAA,CAAQiD,CAAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,EAAqB,CAAE,QAAQ,SAAS,CAAA,CACzE,QAAA,CAAU3D,CAAAA,CAAQ,UAAU,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,CAAC,CAAA,CACjD,aAAA,CAAeoE,CAAAA,CAAU,iBAAA,CAAmB,CAAE,YAAA,CAAc,IAAK,CAAC,CAAA,CAClE,YAAA,CAAcpE,CAAAA,CAAQ,eAAe,CAAA,CACrC,KAAA,CAAO2D,CAAAA,CAAK,OAAO,EACnB,SAAA,CAAWA,CAAAA,CAAK,YAAY,CAAA,CAAE,OAAA,EAAQ,CACtC,SAAA,CAAWS,CAAAA,CAAU,aAAc,CAAE,YAAA,CAAc,IAAK,CAAC,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,GACrE,SAAA,CAAWA,CAAAA,CAAU,YAAA,CAAc,CAAE,YAAA,CAAc,IAAK,CAAC,CAAA,CAAE,SAAQ,CAAE,UAAA,EACvE,CAAA,CACCxQ,CAAAA,EAAU,CACTuT,CAAAA,CAAM,iCAAiC,EAAE,EAAA,CAAGvT,CAAAA,CAAM,UAAU,CAAA,CAC5DuT,CAAAA,CAAM,sCAAsC,CAAA,CAAE,EAAA,CAAGvT,EAAM,cAAA,CAAgBA,CAAAA,CAAM,MAAM,CAAA,CACnFwT,CAAAA,CAAY,+BAA+B,CAAA,CAAE,EAAA,CAAGxT,EAAM,SAAS,CAAA,CAC/DuT,CAAAA,CAAM,gCAAgC,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,SAAS,CAC5D,CACF,CAAA,CAcawmB,EAAAA,CAAgB9T,CAAAA,CAC3B,iBACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,EACV,UAAA,EAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,UAAA,EAAY,CAAA,CAEvC,eAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMwG,CAAAA,CAAa,GAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAE5D,UAAA,CAAYxG,CAAAA,CAAK,aAAa,EAC3B,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMuW,EAAAA,CAAiB,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAChE,SAAA,CAAWvW,CAAAA,CAAK,YAAY,CAAA,CAAE,OAAA,EAAQ,CACtC,QAASjD,CAAAA,CAAM,SAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,EAA+B,CACnE,SAAA,CAAWiD,EAAK,YAAY,CAAA,CAAE,OAAA,EAAQ,CACtC,WAAA,CAAaS,CAAAA,CAAU,cAAA,CAAgB,CAAE,aAAc,IAAK,CAAC,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,EAAW,CACpF,QAAA,CAAUA,EAAU,WAAA,CAAa,CAAE,YAAA,CAAc,IAAK,CAAC,CAAA,CACvD,SAAA,CAAWT,CAAAA,CAAK,YAAY,CAAA,CAC5B,SAAA,CAAWS,CAAAA,CAAU,YAAA,CAAc,CAAE,YAAA,CAAc,IAAK,CAAC,EAAE,OAAA,EAAQ,CAAE,UAAA,EACvE,CAAA,CACCxQ,CAAAA,EAAU,CACTuT,CAAAA,CAAM,8BAA8B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,WAAW,CAAA,CAC1DwT,CAAAA,CAAY,2BAA2B,CAAA,CAAE,GAAGxT,CAAAA,CAAM,SAAS,CAAA,CAC3DuT,CAAAA,CAAM,2BAA2B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,cAAc,CAC5D,CACF,CAAA,CAMaymB,EAAAA,CAAwBxQ,CAAAA,CAAmBqQ,EAAgB,CAAA,CAC3DI,EAAAA,CAAwBzQ,EAAmBsQ,EAAiB,CAAA,CAC5DI,EAAAA,CAAsB1Q,CAAAA,CAAmBuQ,EAAa,ECrG5D,IAAMI,EAAAA,CAAiBlU,EAC5B,iBAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,EAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,UAAA,EAAY,CAAA,CAEvC,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CACnC,SAAQ,CACR,UAAA,CAAW,IAAMwG,CAAAA,CAAa,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAC5D,IAAA,CAAMxG,CAAAA,CAAK,MAAM,CAAA,CAAE,OAAA,EAAQ,CAC3B,WAAA,CAAaA,EAAK,aAAa,CAAA,CAC/B,cAAA,CAAgBA,CAAAA,CAAK,iBAAiB,CAAA,CAAE,OAAA,EAAQ,CAChD,SAAUA,CAAAA,CAAK,UAAU,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,KAAK,CAAA,CAClD,YAAaA,CAAAA,CAAK,cAAc,CAAA,CAAE,KAAA,EAAmB,CAAE,OAAA,EAAQ,CAC/D,aAAA,CAAejD,EAAM,gBAAgB,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,EAAqB,CACtE,OAAA,CAASA,CAAAA,CAAM,SAAS,CAAA,CACxB,OAAA,CAAShD,CAAAA,CAAQ,SAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,IAAI,CAAA,CAClD,SAAA,CAAW0G,CAAAA,CAAU,aAAA,CAAe,CAAE,YAAA,CAAc,IAAK,CAAC,EAC1D,UAAA,CAAYT,CAAAA,CAAK,aAAa,CAAA,CAAE,KAAA,EAAkB,CAClD,SAAA,CAAWS,CAAAA,CAAU,cAAe,CAAE,YAAA,CAAc,IAAK,CAAC,CAAA,CAAE,OAAA,EAAQ,CACpE,mBAAA,CAAqBpE,EAAQ,sBAAsB,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,CAAC,CAAA,CACxE,UAAA,CAAYA,EAAQ,aAAa,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,CAAC,CAAA,CACtD,sBAAA,CAAwB8C,GAAK,0BAA0B,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,CAAC,CAAA,CAC5E,UAAA,CAAYa,EAAK,aAAa,CAAA,CAAE,OAAA,EAAQ,CAAE,OAAA,CAAQ,SAAS,CAAA,CAC3D,gBAAA,CAAkBjD,EAAM,mBAAmB,CAAA,CAC3C,SAAA,CAAWiD,CAAAA,CAAK,YAAY,CAAA,CAAE,OAAA,EAAQ,CACtC,aAAA,CAAeA,EAAK,iBAAiB,CAAA,CAAE,KAAA,EAAqB,CAAE,OAAA,EAAQ,CACtE,SAAA,CAAWS,CAAAA,CAAU,aAAc,CAAE,YAAA,CAAc,IAAK,CAAC,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,GACrE,SAAA,CAAWA,CAAAA,CAAU,YAAA,CAAc,CAAE,YAAA,CAAc,IAAK,CAAC,CAAA,CAAE,SAAQ,CAAE,UAAA,EACvE,CAAA,CACCxQ,CAAAA,EAAU,CACTuT,CAAAA,CAAM,kCAAkC,EAAE,EAAA,CAAGvT,CAAAA,CAAM,cAAc,CAAA,CACjEuT,CAAAA,CAAM,8BAA8B,CAAA,CAAE,EAAA,CAAGvT,EAAM,SAAA,CAAWA,CAAAA,CAAM,OAAO,CAAA,CACvEuT,CAAAA,CAAM,8BAA8B,CAAA,CAAE,EAAA,CAAGvT,EAAM,UAAU,CAC3D,CACF,CAAA,CAaa6mB,EAAAA,CAAiBnU,CAAAA,CAC5B,iBAAA,CACA,CACE,GAAI3C,CAAAA,CAAK,IAAI,CAAA,CACV,UAAA,EAAW,CACX,UAAA,CAAW,IAAM,MAAA,CAAO,YAAY,CAAA,CAEvC,MAAA,CAAQA,CAAAA,CAAK,SAAS,CAAA,CACnB,OAAA,EAAQ,CACR,WAAW,IAAM6W,EAAAA,CAAe,EAAA,CAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAE9D,eAAgB7W,CAAAA,CAAK,iBAAiB,CAAA,CACnC,OAAA,EAAQ,CACR,UAAA,CAAW,IAAMwG,CAAAA,CAAa,GAAI,CAAE,QAAA,CAAU,SAAU,CAAC,CAAA,CAC5D,WAAA,CAAa/F,CAAAA,CAAU,cAAA,CAAgB,CAAE,YAAA,CAAc,IAAK,CAAC,CAAA,CAAE,OAAA,EAAQ,CACvE,SAAA,CAAWA,CAAAA,CAAU,aAAc,CAAE,YAAA,CAAc,IAAK,CAAC,CAAA,CAAE,OAAA,EAAQ,CACnE,WAAA,CAAaA,EAAU,cAAA,CAAgB,CAAE,YAAA,CAAc,IAAK,CAAC,CAAA,CAC7D,MAAA,CAAQT,CAAAA,CAAK,QAAQ,CAAA,CAAE,KAAA,EAAuB,CAAE,OAAA,GAChD,OAAA,CAAS3D,CAAAA,CAAQ,SAAS,CAAA,CAAE,SAAQ,CAAE,OAAA,CAAQ,CAAC,CAAA,CAC/C,MAAA,CAAQU,CAAAA,CAAM,QAAQ,CAAA,CACtB,MAAOA,CAAAA,CAAM,OAAO,CAAA,CAAE,KAAA,EAAsB,CAC5C,OAAA,CAASiD,CAAAA,CAAK,UAAU,EAAE,OAAA,EAAQ,CAClC,QAAA,CAAUA,CAAAA,CAAK,WAAW,CAAA,CAAE,OAAA,EAC9B,EACC/P,CAAAA,EAAU,CACTuT,CAAAA,CAAM,0BAA0B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,MAAA,CAAQA,EAAM,SAAS,CAAA,CAClEuT,CAAAA,CAAM,kCAAkC,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,cAAc,EACjEuT,CAAAA,CAAM,4BAA4B,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,MAAM,CACrD,CACF,EAaa8mB,EAAAA,CAAqBpU,CAAAA,CAChC,qBAAA,CACA,CACE,EAAA,CAAI3C,CAAAA,CAAK,IAAI,CAAA,CAAE,YAAW,CAC1B,IAAA,CAAMA,CAAAA,CAAK,MAAM,CAAA,CAAE,OAAA,EAAQ,CAC3B,OAAA,CAASA,EAAK,SAAS,CAAA,CAAE,OAAA,EAAQ,CACjC,QAAA,CAAUA,CAAAA,CAAK,WAAW,CAAA,CAC1B,aAAcjD,CAAAA,CAAM,cAAc,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,EAA4B,CAC1E,MAAA,CAAQiD,EAAK,QAAQ,CAAA,CAAE,KAAA,EAAsB,CAAE,OAAA,EAAQ,CACvD,YAAA,CAAcS,CAAAA,CAAU,gBAAiB,CAAE,YAAA,CAAc,IAAK,CAAC,CAAA,CAAE,OAAA,EAAQ,CAAE,UAAA,GAC3E,cAAA,CAAgBA,CAAAA,CAAU,iBAAA,CAAmB,CAAE,YAAA,CAAc,IAAK,CAAC,CACrE,EACCxQ,CAAAA,EAAU,CACTuT,CAAAA,CAAM,gCAAgC,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,QAAQ,EACzDuT,CAAAA,CAAM,gCAAgC,CAAA,CAAE,EAAA,CAAGvT,CAAAA,CAAM,MAAM,CACzD,CACF,EAMa+mB,EAAAA,CAAsB9Q,CAAAA,CAAmB2Q,EAAc,CAAA,CACvDI,GAAsB/Q,CAAAA,CAAmB4Q,EAAc,CAAA,CACvDI,EAAAA,CAA0BhR,EAAmB6Q,EAAkB","file":"index.js","sourcesContent":["export const entityKind = Symbol.for('drizzle:entityKind');\nexport const hasOwnEntityKind = Symbol.for('drizzle:hasOwnEntityKind');\n\nexport interface DrizzleEntity {\n\t[entityKind]: string;\n}\n\nexport type DrizzleEntityClass<T> =\n\t& ((abstract new(...args: any[]) => T) | (new(...args: any[]) => T))\n\t& DrizzleEntity;\n\nexport function is<T extends DrizzleEntityClass<any>>(value: any, type: T): value is InstanceType<T> {\n\tif (!value || typeof value !== 'object') {\n\t\treturn false;\n\t}\n\n\tif (value instanceof type) { // oxlint-disable-line drizzle-internal/no-instanceof\n\t\treturn true;\n\t}\n\n\tif (!Object.prototype.hasOwnProperty.call(type, entityKind)) {\n\t\tthrow new Error(\n\t\t\t`Class \"${\n\t\t\t\ttype.name ?? '<unknown>'\n\t\t\t}\" doesn't look like a Drizzle entity. If this is incorrect and the class is provided by Drizzle, please report this as a bug.`,\n\t\t);\n\t}\n\n\tlet cls = Object.getPrototypeOf(value)?.constructor;\n\tif (cls) {\n\t\t// Traverse the prototype chain to find the entityKind\n\t\twhile (cls) {\n\t\t\tif (entityKind in cls && cls[entityKind] === type[entityKind]) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tcls = Object.getPrototypeOf(cls);\n\t\t}\n\t}\n\n\treturn false;\n}\n","export const OriginalColumn = Symbol.for('drizzle:OriginalColumn');\n","import type {\n\tColumnBuilderRuntimeConfig,\n\tColumnType,\n\tGeneratedColumnConfig,\n\tGeneratedIdentityConfig,\n} from './column-builder.ts';\nimport { OriginalColumn } from './column-common.ts';\nimport { entityKind } from './entity.ts';\nimport type { DriverValueDecoderFn, DriverValueEncoderFn, DriverValueMapper, SQL, SQLWrapper } from './sql/sql.ts';\nimport type { Table } from './table.ts';\nimport type { Update } from './utils.ts';\n\nexport type Columns = Record<string, Column<any>>;\n\nexport interface ColumnBaseConfig<TDataType extends ColumnType> {\n\tname: string;\n\tdataType: TDataType;\n\ttableName: string;\n\tnotNull: boolean;\n\thasDefault: boolean;\n\tisPrimaryKey: boolean;\n\tisAutoincrement: boolean;\n\thasRuntimeDefault: boolean;\n\tdata: unknown;\n\tdriverParam: unknown;\n\tenumValues: string[] | undefined;\n\tgenerated: unknown;\n\tidentity: undefined | 'always' | 'byDefault';\n}\n\nconst noop: DriverValueDecoderFn<any, any> | DriverValueEncoderFn<any, any> = (v) => v;\nnoop.isNoop = true;\n\nexport interface Column<\n\tout T extends ColumnBaseConfig<ColumnType> = ColumnBaseConfig<ColumnType>,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tout TRuntimeConfig extends object = object,\n> extends DriverValueMapper<T['data'], T['driverParam']>, SQLWrapper {\n\t// SQLWrapper runtime implementation is defined in 'sql/sql.ts'\n\t// `as` runtime implementation is defined in 'alias.ts'\n\tas(alias: string): this;\n}\n\n/*\n\t`Column` only accepts a full `ColumnConfig` as its generic.\n\tTo infer parts of the config, use `AnyColumn` that accepts a partial config.\n\tSee `GetColumnData` for example usage of inferring.\n*/\nexport abstract class Column<\n\tout T extends ColumnBaseConfig<ColumnType> = ColumnBaseConfig<ColumnType>,\n\tout TRuntimeConfig extends object = object,\n> implements DriverValueMapper<T['data'], T['driverParam']>, SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Column';\n\n\tdeclare readonly _: T;\n\n\t/** @internal */\n\treadonly codec?: string;\n\n\treadonly name: string;\n\treadonly keyAsName: boolean;\n\treadonly primary: boolean;\n\treadonly notNull: boolean;\n\treadonly default: T['data'] | SQL | undefined;\n\treadonly defaultFn: (() => T['data'] | SQL) | undefined;\n\treadonly onUpdateFn: (() => T['data'] | SQL) | undefined;\n\treadonly hasDefault: boolean;\n\treadonly isUnique: boolean;\n\treadonly uniqueName: string | undefined;\n\treadonly uniqueType: string | undefined;\n\treadonly dataType: T['dataType'];\n\treadonly columnType: string;\n\treadonly enumValues: T['enumValues'] = undefined;\n\treadonly generated: GeneratedColumnConfig<T['data']> | undefined = undefined;\n\treadonly generatedIdentity: GeneratedIdentityConfig | undefined = undefined;\n\treadonly length: number | undefined;\n\treadonly isLengthExact: boolean | undefined;\n\treadonly isAlias: boolean;\n\n\t/** @internal */\n\tprotected config: ColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig;\n\n\t/** @internal */\n\treadonly table: Table;\n\n\t/** @internal */\n\tprotected onInit(): void {}\n\n\tconstructor(\n\t\ttable: Table,\n\t\tconfig: ColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig,\n\t) {\n\t\tthis.config = config;\n\t\tthis.onInit();\n\t\tthis.table = table;\n\n\t\tthis.name = config.name;\n\t\tthis.isAlias = false;\n\t\tthis.keyAsName = config.keyAsName;\n\t\tthis.notNull = config.notNull;\n\t\tthis.default = config.default;\n\t\tthis.defaultFn = config.defaultFn;\n\t\tthis.onUpdateFn = config.onUpdateFn;\n\t\tthis.hasDefault = config.hasDefault;\n\t\tthis.primary = config.primaryKey;\n\t\tthis.isUnique = config.isUnique;\n\t\tthis.uniqueName = config.uniqueName;\n\t\tthis.uniqueType = config.uniqueType;\n\t\tthis.dataType = config.dataType as T['dataType'];\n\t\tthis.columnType = config.columnType;\n\t\tthis.generated = config.generated;\n\t\tthis.generatedIdentity = config.generatedIdentity;\n\t\tthis.length = (<{ length?: number }> config)['length'];\n\t\tthis.isLengthExact = (<{ isLengthExact?: boolean }> config)['isLengthExact'];\n\t}\n\n\tabstract getSQLType(): string;\n\n\tmapFromDriverValue = noop;\n\n\tmapToDriverValue = noop;\n\n\t// TODO: Revisit\n\t/** @internal */\n\tpostBuild() {\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tshouldDisableInsert(): boolean {\n\t\treturn this.config.generated !== undefined && this.config.generated.type !== 'byDefault';\n\t}\n\n\t/** @internal */\n\t[OriginalColumn](): this {\n\t\treturn this;\n\t}\n}\n\nexport type UpdateColConfig<\n\tT extends ColumnBaseConfig<ColumnType>,\n\tTUpdate extends Partial<ColumnBaseConfig<ColumnType>>,\n> = Update<T, TUpdate>;\n\nexport type AnyColumn<TPartial extends Partial<ColumnBaseConfig<ColumnType>> = {}> = Column<\n\tRequired<Update<ColumnBaseConfig<ColumnType>, TPartial>>\n>;\n\nexport type GetColumnData<TColumn extends Column, TInferMode extends 'query' | 'raw' = 'query'> =\n\t// dprint-ignore\n\tTInferMode extends 'raw' // Raw mode\n\t\t? TColumn['_']['data'] // Just return the underlying type\n\t\t: TColumn['_']['notNull'] extends true // Query mode\n\t\t? TColumn['_']['data'] // Query mode, not null\n\t\t: TColumn['_']['data'] | null; // Query mode, nullable\n\nexport type InferColumnsDataTypes<TColumns extends Record<string, Column>> = {\n\t[Key in keyof TColumns]: GetColumnData<TColumns[Key], 'query'>;\n};\n\nexport function getColumnTable<TTable extends Table<any> = Table<any>>(column: Column<any>): TTable {\n\treturn column.table as TTable;\n}\n","/** @internal */\nexport const TableName = Symbol.for('drizzle:Name');\n","import { entityKind } from '~/entity.ts';\nimport { TableName } from '~/table.utils.ts';\nimport type { AnyPgColumn, PgColumn } from './columns/index.ts';\nimport type { PgTable } from './table.ts';\n\nexport type UpdateDeleteAction = 'cascade' | 'restrict' | 'no action' | 'set null' | 'set default';\n\nexport type Reference = () => {\n\treadonly name?: string;\n\treadonly columns: PgColumn[];\n\treadonly foreignTable: PgTable;\n\treadonly foreignColumns: PgColumn[];\n};\n\nexport class ForeignKeyBuilder {\n\tstatic readonly [entityKind]: string = 'PgForeignKeyBuilder';\n\n\t/** @internal */\n\treference: Reference;\n\n\t/** @internal */\n\t_onUpdate: UpdateDeleteAction | undefined = 'no action';\n\n\t/** @internal */\n\t_onDelete: UpdateDeleteAction | undefined = 'no action';\n\n\tconstructor(\n\t\tconfig: () => {\n\t\t\tname?: string;\n\t\t\tcolumns: PgColumn[];\n\t\t\tforeignColumns: PgColumn[];\n\t\t},\n\t\tactions?: {\n\t\t\tonUpdate?: UpdateDeleteAction;\n\t\t\tonDelete?: UpdateDeleteAction;\n\t\t} | undefined,\n\t) {\n\t\tthis.reference = () => {\n\t\t\tconst { name, columns, foreignColumns } = config();\n\t\t\treturn { name, columns, foreignTable: foreignColumns[0]!.table as PgTable, foreignColumns };\n\t\t};\n\t\tif (actions) {\n\t\t\tthis._onUpdate = actions.onUpdate;\n\t\t\tthis._onDelete = actions.onDelete;\n\t\t}\n\t}\n\n\tonUpdate(action: UpdateDeleteAction): this {\n\t\tthis._onUpdate = action === undefined ? 'no action' : action;\n\t\treturn this;\n\t}\n\n\tonDelete(action: UpdateDeleteAction): this {\n\t\tthis._onDelete = action === undefined ? 'no action' : action;\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tbuild(table: PgTable): ForeignKey {\n\t\treturn new ForeignKey(table, this);\n\t}\n}\n\nexport type AnyForeignKeyBuilder = ForeignKeyBuilder;\n\nexport class ForeignKey {\n\tstatic readonly [entityKind]: string = 'PgForeignKey';\n\n\treadonly reference: Reference;\n\treadonly onUpdate: UpdateDeleteAction | undefined;\n\treadonly onDelete: UpdateDeleteAction | undefined;\n\treadonly name?: string;\n\n\tconstructor(readonly table: PgTable, builder: ForeignKeyBuilder) {\n\t\tthis.reference = builder.reference;\n\t\tthis.onUpdate = builder._onUpdate;\n\t\tthis.onDelete = builder._onDelete;\n\t}\n\n\tgetName(): string {\n\t\tconst { name, columns, foreignColumns } = this.reference();\n\t\tconst columnNames = columns.map((column) => column.name);\n\t\tconst foreignColumnNames = foreignColumns.map((column) => column.name);\n\t\tconst chunks = [\n\t\t\tthis.table[TableName],\n\t\t\t...columnNames,\n\t\t\tforeignColumns[0]!.table[TableName],\n\t\t\t...foreignColumnNames,\n\t\t];\n\t\treturn name ?? `${chunks.join('_')}_fk`;\n\t}\n\n\tisNameExplicit(): boolean {\n\t\treturn !!this.reference().name;\n\t}\n}\n\ntype ColumnsWithTable<\n\tTTableName extends string,\n\tTColumns extends PgColumn[],\n> = { [Key in keyof TColumns]: AnyPgColumn<{ tableName: TTableName }> };\n\nexport function foreignKey<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends [AnyPgColumn<{ tableName: TTableName }>, ...AnyPgColumn<{ tableName: TTableName }>[]],\n>(\n\tconfig: {\n\t\tname?: string;\n\t\tcolumns: TColumns;\n\t\tforeignColumns: ColumnsWithTable<TForeignTableName, TColumns>;\n\t},\n): ForeignKeyBuilder {\n\tfunction mappedConfig() {\n\t\tconst { name, columns, foreignColumns } = config;\n\t\treturn {\n\t\t\tname,\n\t\t\tcolumns,\n\t\t\tforeignColumns,\n\t\t};\n\t}\n\n\treturn new ForeignKeyBuilder(mappedConfig);\n}\n","export function iife<T extends unknown[], U>(fn: (...args: T) => U, ...args: T): U {\n\treturn fn(...args);\n}\n","import type { ColumnType, GeneratedColumnConfig, GeneratedIdentityConfig } from '~/column-builder.ts';\nimport { Column } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { ForeignKey, UpdateDeleteAction } from '~/pg-core/foreign-keys.ts';\nimport { ForeignKeyBuilder } from '~/pg-core/foreign-keys.ts';\nimport type { AnyPgTable, PgTable } from '~/pg-core/table.ts';\nimport type { SQL } from '~/sql/sql.ts';\nimport { iife } from '~/tracing-utils.ts';\nimport type { Update } from '~/utils.ts';\nimport type { PostgresType } from '../codecs.ts';\nimport type { PgIndexOpClass } from '../indexes.ts';\n\nexport type PgArrayDimension = 0 | 1 | 2 | 3 | 4 | 5;\ntype PgArrayDimensionString = '[]' | '[][]' | '[][][]' | '[][][][]' | '[][][][][]';\n\ntype ArrayDimensionStringToNumber<T extends PgArrayDimensionString> = T extends '[]' ? 1\n\t: T extends '[][]' ? 2\n\t: T extends '[][][]' ? 3\n\t: T extends '[][][][]' ? 4\n\t: T extends '[][][][][]' ? 5\n\t: never;\n\nexport interface PgColumnBuilderConfig {\n\tdataType: ColumnType;\n\tdata: unknown;\n\tdriverParam: unknown;\n\t// Optional - set via chain methods\n\tnotNull?: boolean;\n\thasDefault?: boolean;\n\tisPrimaryKey?: boolean;\n\tisAutoincrement?: boolean;\n\thasRuntimeDefault?: boolean;\n\tenumValues?: string[];\n\tidentity?: 'always' | 'byDefault';\n\tgenerated?: unknown;\n\tdimensions?: PgArrayDimension;\n\t$type?: unknown;\n}\n\nexport interface PgColumnBuilderRuntimeConfig<TData> {\n\tname: string;\n\tkeyAsName: boolean;\n\tnotNull: boolean;\n\tdefault: TData | SQL | undefined;\n\tdefaultFn: (() => TData | SQL) | undefined;\n\tonUpdateFn: (() => TData | SQL) | undefined;\n\thasDefault: boolean;\n\tprimaryKey: boolean;\n\tisUnique: boolean;\n\tuniqueName: string | undefined;\n\tuniqueType: string | undefined;\n\tdataType: string;\n\tcolumnType: string;\n\tgenerated: GeneratedColumnConfig<TData> | undefined;\n\tgeneratedIdentity: GeneratedIdentityConfig | undefined;\n\tdimensions?: PgArrayDimension;\n}\n\n// TODO: remove isAutoincrement and hasRuntimeDefault\nexport interface PgColumnBaseConfig<out TDataType extends ColumnType = ColumnType> {\n\tname: string;\n\tdataType: TDataType;\n\ttableName: string;\n\tnotNull: boolean;\n\thasDefault: boolean;\n\tisPrimaryKey: boolean;\n\tisAutoincrement: boolean;\n\thasRuntimeDefault: boolean;\n\tdata: unknown;\n\tdriverParam: unknown;\n\tenumValues: string[] | undefined;\n\tgenerated: unknown;\n\tidentity: undefined | 'always' | 'byDefault';\n}\n\ntype WrapArray<T, N extends number> = N extends 1 ? T[]\n\t: N extends 2 ? T[][]\n\t: N extends 3 ? T[][][]\n\t: N extends 4 ? T[][][][]\n\t: N extends 5 ? T[][][][][]\n\t: T;\n\nexport type SetNotNull<T> = T & { readonly _: { notNull: true } };\nexport type SetHasDefault<T> = T & { readonly _: { hasDefault: true } };\nexport type SetIsPrimaryKey<T> = T & { readonly _: { isPrimaryKey: true; notNull: true } };\nexport type SetHasRuntimeDefault<T> = T & {\n\treadonly _: { hasRuntimeDefault: true; hasDefault: true };\n};\nexport type Set$Type<T, TType> = T & { readonly _: { $type: TType } };\nexport type SetHasGenerated<T> = T & {\n\treadonly _: { hasDefault: true; generated: true };\n};\nexport type SetDimensions<T, TDim extends PgArrayDimension> = T & {\n\treadonly _: { dimensions: TDim };\n};\nexport type SetIdentity<T, TType extends 'always' | 'byDefault'> = T & {\n\treadonly _: { notNull: true; hasDefault: true; identity: TType };\n};\n\nexport type HasIdentity<T, TType extends 'always' | 'byDefault'> = SetIdentity<T, TType>;\n\ntype GetBaseData<T> = T extends { $type: infer U } ? U : T extends { data: infer D } ? D : unknown;\n\nexport type ResolvePgColumnConfig<\n\tout T extends PgColumnBuilderConfig,\n\tout TTableName extends string,\n\tout TData = T['dimensions'] extends 1 | 2 | 3 | 4 | 5 ? WrapArray<GetBaseData<T>, T['dimensions']>\n\t\t: GetBaseData<T>,\n> = {\n\tname: string;\n\ttableName: TTableName;\n\tdataType: T['dataType'];\n\tdata: TData;\n\tdriverParam: T['dimensions'] extends 1 | 2 | 3 | 4 | 5 ? WrapArray<T['driverParam'], T['dimensions']> | string\n\t\t: T['driverParam'];\n\tnotNull: T['notNull'] extends true ? true : false;\n\thasDefault: T['hasDefault'] extends true ? true : false;\n\tisPrimaryKey: false;\n\tisAutoincrement: false;\n\thasRuntimeDefault: false;\n\tenumValues: T extends { enumValues: infer E extends string[] } ? E : undefined;\n\tidentity: T['identity'] extends 'always' | 'byDefault' ? T['identity'] : undefined;\n\tgenerated: T['generated'] extends true ? true : undefined;\n} & {};\n\nexport interface AnyPgColumnBuilder {\n\treadonly _: PgColumnBuilderConfig;\n}\n\nexport type PgBuildColumn<\n\tTTableName extends string,\n\tTBuilder extends AnyPgColumnBuilder,\n\tTBuiltConfig extends PgColumnBaseConfig<ColumnType> = ResolvePgColumnConfig<\n\t\tTBuilder['_'],\n\t\tTTableName\n\t>,\n> = PgColumn<ColumnType, TBuiltConfig, {}>;\n\nexport type PgBuildColumns<\n\tout TTableName extends string,\n\tout TConfigMap extends Record<string, AnyPgColumnBuilder>,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: PgBuildColumn<TTableName, TConfigMap[Key]>;\n\t}\n\t& {};\n\nexport type PgBuildExtraConfigColumns<\n\tout TConfigMap extends Record<string, AnyPgColumnBuilder>,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: ExtraConfigColumn;\n\t}\n\t& {};\n\nexport type PgColumns = Record<string, PgColumn>;\n\nexport interface ReferenceConfig {\n\tref: () => PgColumn;\n\tconfig: {\n\t\tname?: string;\n\t\tonUpdate?: UpdateDeleteAction;\n\t\tonDelete?: UpdateDeleteAction;\n\t};\n}\n\nexport abstract class PgColumnBuilder<\n\tout T extends PgColumnBuilderConfig = PgColumnBuilderConfig,\n\tout TRuntimeConfig extends object = object,\n> {\n\tstatic readonly [entityKind]: string = 'PgColumnBuilder';\n\n\tdeclare readonly _: T;\n\n\tprivate foreignKeyConfigs: ReferenceConfig[] = [];\n\n\tprotected config: PgColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig;\n\n\tconstructor(name: string, dataType: ColumnType, columnType: string) {\n\t\tthis.config = {\n\t\t\tname,\n\t\t\tkeyAsName: name === '',\n\t\t\tnotNull: false,\n\t\t\tdefault: undefined,\n\t\t\thasDefault: false,\n\t\t\tprimaryKey: false,\n\t\t\tisUnique: false,\n\t\t\tuniqueName: undefined,\n\t\t\tuniqueType: undefined,\n\t\t\tdataType,\n\t\t\tcolumnType,\n\t\t\tgenerated: undefined,\n\t\t\tdefaultFn: undefined,\n\t\t\tonUpdateFn: undefined,\n\t\t\tgeneratedIdentity: undefined,\n\t\t} as PgColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig;\n\t}\n\n\t/**\n\t * Changes the data type of the column. Commonly used with `json` columns. Also, useful for branded types.\n\t *\n\t * @example\n\t * ```ts\n\t * const users = pgTable('users', {\n\t * \tid: integer('id').$type<UserId>().primaryKey(),\n\t * \tdetails: json('details').$type<UserDetails>().notNull(),\n\t * });\n\t * ```\n\t */\n\t$type<TType>(): Set$Type<this, TType> {\n\t\treturn this as Set$Type<this, TType>;\n\t}\n\n\t/**\n\t * Adds a `not null` clause to the column definition.\n\t *\n\t * Affects the `select` model of the table - columns *without* `not null` will be nullable on select.\n\t */\n\tnotNull(): SetNotNull<this> {\n\t\tthis.config.notNull = true;\n\t\treturn this as SetNotNull<this>;\n\t}\n\n\t/**\n\t * Adds a `default <value>` clause to the column definition.\n\t *\n\t * Affects the `insert` model of the table - columns *with* `default` are optional on insert.\n\t *\n\t * If you need to set a dynamic default value, use {@link $defaultFn} instead.\n\t */\n\tdefault(\n\t\tvalue:\n\t\t\t| (this['_'] extends { dimensions: 1 | 2 | 3 | 4 | 5 } ? WrapArray<\n\t\t\t\t\tthis['_'] extends { $type: infer U } ? U : this['_']['data'],\n\t\t\t\t\tthis['_']['dimensions']\n\t\t\t\t>\n\t\t\t\t: this['_'] extends { $type: infer U } ? U\n\t\t\t\t: this['_']['data'])\n\t\t\t| SQL,\n\t): SetHasDefault<this> {\n\t\tthis.config.default = value;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as SetHasDefault<this>;\n\t}\n\n\t/**\n\t * Adds a dynamic default value to the column.\n\t * The function will be called when the row is inserted, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$defaultFn(\n\t\tfn: () =>\n\t\t\t| (this['_'] extends { dimensions: 1 | 2 | 3 | 4 | 5 } ? WrapArray<\n\t\t\t\t\tthis['_'] extends { $type: infer U } ? U : this['_']['data'],\n\t\t\t\t\tthis['_']['dimensions']\n\t\t\t\t>\n\t\t\t\t: this['_'] extends { $type: infer U } ? U\n\t\t\t\t: this['_']['data'])\n\t\t\t| SQL,\n\t): SetHasRuntimeDefault<this> {\n\t\tthis.config.defaultFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as SetHasRuntimeDefault<this>;\n\t}\n\n\t/**\n\t * Alias for {@link $defaultFn}.\n\t */\n\t$default = this.$defaultFn;\n\n\t/**\n\t * Adds a dynamic update value to the column.\n\t * The function will be called when the row is updated, and the returned value will be used as the column value if none is provided.\n\t * If no `default` (or `$defaultFn`) value is provided, the function will be called when the row is inserted as well, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$onUpdateFn(\n\t\tfn: () =>\n\t\t\t| (this['_'] extends { dimensions: 1 | 2 | 3 | 4 | 5 } ? WrapArray<\n\t\t\t\t\tthis['_'] extends { $type: infer U } ? U : this['_']['data'],\n\t\t\t\t\tthis['_']['dimensions']\n\t\t\t\t>\n\t\t\t\t: this['_'] extends { $type: infer U } ? U\n\t\t\t\t: this['_']['data'])\n\t\t\t| SQL,\n\t): SetHasDefault<this> {\n\t\tthis.config.onUpdateFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as SetHasDefault<this>;\n\t}\n\n\t/**\n\t * Alias for {@link $onUpdateFn}.\n\t */\n\t$onUpdate = this.$onUpdateFn;\n\n\t/**\n\t * Adds a `primary key` clause to the column definition. This implicitly makes the column `not null`.\n\t *\n\t * In SQLite, `integer primary key` implicitly makes the column auto-incrementing.\n\t */\n\tprimaryKey(): SetIsPrimaryKey<this> {\n\t\tthis.config.primaryKey = true;\n\t\tthis.config.notNull = true;\n\t\treturn this as SetIsPrimaryKey<this>;\n\t}\n\n\t/** @internal Sets the name of the column to the key within the table definition if a name was not given. */\n\tsetName(name: string, casingFn: (name: string) => string) {\n\t\tif (this.config.name !== '') return;\n\t\tthis.config.name = casingFn(name);\n\t}\n\n\t/**\n\t * Makes this column a PostgreSQL array column.\n\t *\n\t * @example\n\t * ```ts\n\t * const t = pgTable('t', {\n\t * // 1D array: number[]\n\t * tags: integer().array(),\n\t * // Or explicitly: integer().array('[]')\n\t * // 2D array: number[][]\n\t * matrix: integer().array('[][]'),\n\t * });\n\t * ```\n\t */\n\tarray(): SetDimensions<this, 1>;\n\tarray<TDim extends PgArrayDimensionString>(\n\t\tdimensions: TDim,\n\t): SetDimensions<this, ArrayDimensionStringToNumber<TDim>>;\n\tarray<TDim extends PgArrayDimensionString>(\n\t\tdimensions?: TDim,\n\t): SetDimensions<this, ArrayDimensionStringToNumber<TDim>> {\n\t\t// Calculate dimensions as number from string notation\n\t\tconst dim = dimensions ?? '[]';\n\t\t(this.config as any).dimensions = (dim.length / 2) as PgArrayDimension;\n\t\treturn this as SetDimensions<this, ArrayDimensionStringToNumber<TDim>>;\n\t}\n\n\treferences(\n\t\tref: ReferenceConfig['ref'],\n\t\tconfig: ReferenceConfig['config'] = {},\n\t): this {\n\t\tthis.foreignKeyConfigs.push({ ref, config });\n\t\treturn this;\n\t}\n\n\tunique(\n\t\tname?: string,\n\t\tconfig?: { nulls: 'distinct' | 'not distinct' },\n\t): this {\n\t\tthis.config.isUnique = true;\n\t\tthis.config.uniqueName = name;\n\t\tthis.config.uniqueType = config?.nulls;\n\t\treturn this;\n\t}\n\n\tgeneratedAlwaysAs(\n\t\tas:\n\t\t\t| SQL\n\t\t\t| (() => SQL),\n\t): SetHasGenerated<this> {\n\t\tthis.config.generated = {\n\t\t\tas,\n\t\t\ttype: 'always',\n\t\t\tmode: 'stored',\n\t\t};\n\t\treturn this as SetHasGenerated<this>;\n\t}\n\n\t/** @internal */\n\tbuildForeignKeys(column: PgColumn, table: PgTable): ForeignKey[] {\n\t\treturn this.foreignKeyConfigs.map(({ ref, config }) => {\n\t\t\treturn iife(\n\t\t\t\t(ref, config) => {\n\t\t\t\t\tconst builder = new ForeignKeyBuilder(() => {\n\t\t\t\t\t\tconst foreignColumn = ref();\n\t\t\t\t\t\treturn { name: config.name, columns: [column], foreignColumns: [foreignColumn] };\n\t\t\t\t\t});\n\t\t\t\t\tif (config.onUpdate) {\n\t\t\t\t\t\tbuilder.onUpdate(config.onUpdate);\n\t\t\t\t\t}\n\t\t\t\t\tif (config.onDelete) {\n\t\t\t\t\t\tbuilder.onDelete(config.onDelete);\n\t\t\t\t\t}\n\t\t\t\t\treturn builder.build(table);\n\t\t\t\t},\n\t\t\t\tref,\n\t\t\t\tconfig,\n\t\t\t);\n\t\t});\n\t}\n\n\t/** @internal */\n\tabstract build(table: PgTable): PgColumn<any>;\n\n\t/** @internal */\n\tbuildExtraConfigColumn<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): ExtraConfigColumn {\n\t\treturn new ExtraConfigColumn(table, { ...this.config, dimensions: (this.config as any).dimensions ?? 0 });\n\t}\n}\n\n// TODO: we should potenitally do column to be\n// in charge of map value/array of values/json value and json array of values in 1 place\nexport abstract class PgColumn<\n\tout TColumnType extends ColumnType = any,\n\tout T extends PgColumnBaseConfig<TColumnType> = PgColumnBaseConfig<TColumnType>,\n\tout TRuntimeConfig extends object = {},\n> extends Column<T, TRuntimeConfig> {\n\tstatic override readonly [entityKind]: string = 'PgColumn';\n\n\t/** @internal */\n\tabstract override readonly codec?: PostgresType;\n\n\t/** @internal */\n\toverride readonly table: PgTable;\n\n\treadonly dimensions: PgArrayDimension;\n\n\tconstructor(\n\t\ttable: PgTable,\n\t\tconfig: PgColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig,\n\t) {\n\t\tsuper(table, config);\n\t\tthis.table = table;\n\t\tthis.dimensions = config.dimensions ?? 0;\n\t}\n\n\t/** @internal */\n\toverride postBuild() {\n\t\tif (this.dimensions) {\n\t\t\tconst originalFromDriver = this.mapFromDriverValue.bind(this);\n\t\t\tconst originalToDriver = this.mapToDriverValue.bind(this);\n\n\t\t\tthis.mapFromDriverValue = this.mapFromDriverValue.isNoop\n\t\t\t\t? this.mapFromDriverValue\n\t\t\t\t: (value: unknown): unknown => {\n\t\t\t\t\treturn this.mapArrayElements(value, originalFromDriver, this.dimensions);\n\t\t\t\t};\n\n\t\t\tthis.mapToDriverValue = this.mapToDriverValue.isNoop\n\t\t\t\t? this.mapToDriverValue\n\t\t\t\t: (value: unknown): unknown => {\n\t\t\t\t\treturn this.mapArrayElements(value as unknown[], originalToDriver, this.dimensions);\n\t\t\t\t};\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\toverride shouldDisableInsert(): boolean {\n\t\treturn (this.config.generatedIdentity !== undefined && this.config.generatedIdentity.type !== 'byDefault')\n\t\t\t|| (this.config.generated !== undefined && this.config.generated.type !== 'byDefault');\n\t}\n\n\t/** @internal */\n\tprivate mapArrayElements(value: unknown, mapper: (v: unknown) => unknown, depth: number): unknown {\n\t\tif (depth > 0 && Array.isArray(value)) {\n\t\t\treturn value.map((v) => v === null ? null : this.mapArrayElements(v, mapper, depth - 1));\n\t\t}\n\t\treturn mapper(value);\n\t}\n}\n\nexport type IndexedExtraConfigType = { order?: 'asc' | 'desc'; nulls?: 'first' | 'last'; opClass?: string };\n\nexport class ExtraConfigColumn<\n\tout T extends PgColumnBaseConfig<ColumnType> = PgColumnBaseConfig<ColumnType>,\n> extends PgColumn<ColumnType, T, IndexedExtraConfigType> {\n\tstatic override readonly [entityKind]: string = 'ExtraConfigColumn';\n\n\t/** @itnernal */\n\toverride readonly codec = undefined;\n\n\toverride getSQLType(): string {\n\t\treturn this.getSQLType();\n\t}\n\n\tindexConfig: IndexedExtraConfigType = {\n\t\torder: this.config.order ?? 'asc',\n\t\tnulls: this.config.nulls ?? 'last',\n\t\topClass: this.config.opClass,\n\t};\n\tdefaultConfig: IndexedExtraConfigType = {\n\t\torder: 'asc',\n\t\tnulls: 'last',\n\t\topClass: undefined,\n\t};\n\n\tasc(): Omit<this, 'asc' | 'desc'> {\n\t\tthis.indexConfig.order = 'asc';\n\t\treturn this;\n\t}\n\n\tdesc(): Omit<this, 'asc' | 'desc'> {\n\t\tthis.indexConfig.order = 'desc';\n\t\treturn this;\n\t}\n\n\tnullsFirst(): Omit<this, 'nullsFirst' | 'nullsLast'> {\n\t\tthis.indexConfig.nulls = 'first';\n\t\treturn this;\n\t}\n\n\tnullsLast(): Omit<this, 'nullsFirst' | 'nullsLast'> {\n\t\tthis.indexConfig.nulls = 'last';\n\t\treturn this;\n\t}\n\n\t/**\n\t * ### PostgreSQL documentation quote\n\t *\n\t * > An operator class with optional parameters can be specified for each column of an index.\n\t * The operator class identifies the operators to be used by the index for that column.\n\t * For example, a B-tree index on four-byte integers would use the int4_ops class;\n\t * this operator class includes comparison functions for four-byte integers.\n\t * In practice the default operator class for the column's data type is usually sufficient.\n\t * The main point of having operator classes is that for some data types, there could be more than one meaningful ordering.\n\t * For example, we might want to sort a complex-number data type either by absolute value or by real part.\n\t * We could do this by defining two operator classes for the data type and then selecting the proper class when creating an index.\n\t * More information about operator classes check:\n\t *\n\t * ### Useful links\n\t * https://www.postgresql.org/docs/current/sql-createindex.html\n\t *\n\t * https://www.postgresql.org/docs/current/indexes-opclass.html\n\t *\n\t * https://www.postgresql.org/docs/current/xindex.html\n\t *\n\t * ### Additional types\n\t * If you have the `pg_vector` extension installed in your database, you can use the\n\t * `vector_l2_ops`, `vector_ip_ops`, `vector_cosine_ops`, `vector_l1_ops`, `bit_hamming_ops`, `bit_jaccard_ops`, `halfvec_l2_ops`, `sparsevec_l2_ops` options, which are predefined types.\n\t *\n\t * **You can always specify any string you want in the operator class, in case Drizzle doesn't have it natively in its types**\n\t *\n\t * @param opClass\n\t * @returns\n\t */\n\top(opClass: PgIndexOpClass): Omit<this, 'op'> {\n\t\tthis.indexConfig.opClass = opClass;\n\t\treturn this;\n\t}\n}\n\nexport class IndexedColumn {\n\tstatic readonly [entityKind]: string = 'IndexedColumn';\n\tconstructor(\n\t\tname: string,\n\t\tkeyAsName: boolean,\n\t\ttype: string,\n\t\tindexConfig: IndexedExtraConfigType,\n\t) {\n\t\tthis.name = name;\n\t\tthis.keyAsName = keyAsName;\n\t\tthis.type = type;\n\t\tthis.indexConfig = indexConfig;\n\t}\n\n\tname: string;\n\tkeyAsName: boolean;\n\ttype: string;\n\tindexConfig: IndexedExtraConfigType;\n}\n\nexport type AnyPgColumn<\n\tTPartial extends Partial<PgColumnBaseConfig<ColumnType>> = {},\n> = PgColumn<\n\tany,\n\tRequired<Update<PgColumnBaseConfig<ColumnType>, TPartial>>\n>;\n","import type { GeneratedIdentityConfig } from '~/column-builder.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { PgSequenceOptions } from '../sequence.ts';\nimport type { HasIdentity, PgColumnBuilderConfig } from './common.ts';\nimport { PgColumnBuilder } from './common.ts';\n\nexport abstract class PgIntColumnBuilder<\n\tout T extends PgColumnBuilderConfig = PgColumnBuilderConfig,\n\tout TRuntimeConfig extends object = object,\n> extends PgColumnBuilder<T, TRuntimeConfig> {\n\tstatic override readonly [entityKind]: string = 'PgIntColumnBaseBuilder';\n\n\t/**\n\t * Adds an `ALWAYS AS IDENTITY` clause to the column definition.\n\t * Available for integer column types.\n\t */\n\tgeneratedAlwaysAsIdentity(\n\t\tsequence?: PgSequenceOptions & { name?: string },\n\t): HasIdentity<this, 'always'> {\n\t\tif (sequence) {\n\t\t\tconst { name, ...options } = sequence;\n\t\t\tthis.config.generatedIdentity = {\n\t\t\t\ttype: 'always',\n\t\t\t\tsequenceName: name,\n\t\t\t\tsequenceOptions: options,\n\t\t\t} satisfies GeneratedIdentityConfig;\n\t\t} else {\n\t\t\tthis.config.generatedIdentity = {\n\t\t\t\ttype: 'always',\n\t\t\t} satisfies GeneratedIdentityConfig;\n\t\t}\n\t\tthis.config.hasDefault = true;\n\t\tthis.config.notNull = true;\n\t\treturn this as HasIdentity<this, 'always'>;\n\t}\n\n\t/**\n\t * Adds a `BY DEFAULT AS IDENTITY` clause to the column definition.\n\t * Available for integer column types.\n\t */\n\tgeneratedByDefaultAsIdentity(\n\t\tsequence?: PgSequenceOptions & { name?: string },\n\t): HasIdentity<this, 'byDefault'> {\n\t\tif (sequence) {\n\t\t\tconst { name, ...options } = sequence;\n\t\t\tthis.config.generatedIdentity = {\n\t\t\t\ttype: 'byDefault',\n\t\t\t\tsequenceName: name,\n\t\t\t\tsequenceOptions: options,\n\t\t\t} satisfies GeneratedIdentityConfig;\n\t\t} else {\n\t\t\tthis.config.generatedIdentity = {\n\t\t\t\ttype: 'byDefault',\n\t\t\t} satisfies GeneratedIdentityConfig;\n\t\t}\n\t\tthis.config.hasDefault = true;\n\t\tthis.config.notNull = true;\n\t\treturn this as HasIdentity<this, 'byDefault'>;\n\t}\n}\n","import type { Column, Columns, GetColumnData } from './column.ts';\nimport { entityKind } from './entity.ts';\nimport type { OptionalKeyOnly, RequiredKeyOnly } from './operations.ts';\nimport type { View } from './sql/sql.ts';\nimport { TableName } from './table.utils.ts';\nimport type { Simplify, Update } from './utils.ts';\n\nexport interface TableConfig<TColumns extends Columns = Columns> {\n\tname: string;\n\tschema: string | undefined;\n\tcolumns: TColumns;\n\tdialect: string;\n}\n\nexport type UpdateTableConfig<T extends TableConfig, TUpdate extends Partial<TableConfig>> = Required<\n\tUpdate<T, TUpdate>\n>;\n\n/** @internal */\nexport const TableSchema = Symbol.for('drizzle:Schema');\n\n/** @internal */\nexport const TableColumns = Symbol.for('drizzle:Columns');\n\n/** @internal */\nexport const ExtraConfigColumns = Symbol.for('drizzle:ExtraConfigColumns');\n\n/** @internal */\nexport const OriginalName = Symbol.for('drizzle:OriginalName');\n\n/** @internal */\nexport const BaseName = Symbol.for('drizzle:BaseName');\n\n/** @internal */\nexport const IsAlias = Symbol.for('drizzle:IsAlias');\n\n/** @internal */\nexport const ExtraConfigBuilder = Symbol.for('drizzle:ExtraConfigBuilder');\n\nconst IsDrizzleTable = Symbol.for('drizzle:IsDrizzleTable');\n\nexport interface TableTypeConfig<T extends TableConfig> {\n\treadonly brand: 'Table';\n\treadonly name: T['name'];\n\treadonly schema: T['schema'];\n\treadonly columns: T['columns'];\n\treadonly dialect: T['dialect'];\n}\n\nexport class Table<out T extends TableConfig = TableConfig> {\n\tstatic readonly [entityKind]: string = 'Table';\n\n\tdeclare readonly _: TableTypeConfig<T>;\n\n\t/** @internal */\n\tstatic readonly Symbol = {\n\t\tName: TableName as typeof TableName,\n\t\tSchema: TableSchema as typeof TableSchema,\n\t\tOriginalName: OriginalName as typeof OriginalName,\n\t\tColumns: TableColumns as typeof TableColumns,\n\t\tExtraConfigColumns: ExtraConfigColumns as typeof ExtraConfigColumns,\n\t\tBaseName: BaseName as typeof BaseName,\n\t\tIsAlias: IsAlias as typeof IsAlias,\n\t\tExtraConfigBuilder: ExtraConfigBuilder as typeof ExtraConfigBuilder,\n\t};\n\n\t/**\n\t * @internal\n\t * Can be changed if the table is aliased.\n\t */\n\t[TableName]: string;\n\n\t/**\n\t * @internal\n\t * Used to store the original name of the table, before any aliasing.\n\t */\n\t[OriginalName]: string;\n\n\t/** @internal */\n\t[TableSchema]: string | undefined;\n\n\t/** @internal */\n\t[TableColumns]!: T['columns'];\n\n\t/** @internal */\n\t[ExtraConfigColumns]!: Record<string, unknown>;\n\n\t/**\n\t * @internal\n\t * Used to store the table name before the transformation via the `tableCreator` functions.\n\t */\n\t[BaseName]: string;\n\n\t/** @internal */\n\t[IsAlias] = false;\n\n\t/** @internal */\n\t[IsDrizzleTable] = true;\n\n\t/** @internal */\n\t[ExtraConfigBuilder]: ((self: any) => Record<string, unknown> | unknown[]) | undefined = undefined;\n\n\tconstructor(name: string, schema: string | undefined, baseName: string) {\n\t\tthis[TableName] = this[OriginalName] = name;\n\t\tthis[TableSchema] = schema;\n\t\tthis[BaseName] = baseName;\n\t}\n}\n\nexport function isTable(table: unknown): table is Table {\n\treturn typeof table === 'object' && table !== null && IsDrizzleTable in table;\n}\n\n/**\n * Any table with a specified boundary.\n *\n * @example\n\t```ts\n\t// Any table with a specific name\n\ttype AnyUsersTable = AnyTable<{ name: 'users' }>;\n\t```\n *\n * To describe any table with any config, simply use `Table` without any type arguments, like this:\n *\n\t```ts\n\tfunction needsTable(table: Table) {\n\t\t...\n\t}\n\t```\n */\nexport type AnyTable<TPartial extends Partial<TableConfig>> = Table<UpdateTableConfig<TableConfig, TPartial>>;\n\nexport function getTableName<T extends Table>(table: T): T['_']['name'] {\n\treturn table[TableName];\n}\n\nexport function getTableUniqueName<\n\tT extends Table | View,\n\tTResult extends string = T extends Table ? T['_']['schema'] extends undefined ? `public.${T['_']['name']}`\n\t\t: `${T['_']['schema']}.${T['_']['name']}`\n\t\t// Views don't have type-level schema names, to be added\n\t\t: `${string}.${T['_']['name']}`,\n>(\n\ttable: T,\n): TResult {\n\treturn `${table[TableSchema] ?? 'public'}.${table[TableName]}` as TResult;\n}\n\nexport type MapColumnName<TName extends string, TColumn extends Column, TDBColumNames extends boolean> =\n\tTDBColumNames extends true ? TColumn['_']['name']\n\t\t: TName;\n\nexport type InferModelFromColumns<\n\tTColumns extends Columns,\n\tTInferMode extends 'select' | 'insert' = 'select',\n\tTConfig extends { override?: boolean } = { dbColumnNames: false; override: false },\n> = Simplify<\n\tTInferMode extends 'insert' ?\n\t\t\t& {\n\t\t\t\t[\n\t\t\t\t\tKey in keyof TColumns & string as RequiredKeyOnly<\n\t\t\t\t\t\tKey,\n\t\t\t\t\t\tTColumns[Key]\n\t\t\t\t\t>\n\t\t\t\t]: GetColumnData<TColumns[Key], 'query'>;\n\t\t\t}\n\t\t\t& {\n\t\t\t\t[\n\t\t\t\t\tKey in keyof TColumns & string as OptionalKeyOnly<\n\t\t\t\t\t\tKey,\n\t\t\t\t\t\tTColumns[Key],\n\t\t\t\t\t\tTConfig['override']\n\t\t\t\t\t>\n\t\t\t\t]?: GetColumnData<TColumns[Key], 'query'> | undefined;\n\t\t\t}\n\t\t: {\n\t\t\t[\n\t\t\t\tKey in keyof TColumns & string\n\t\t\t]: GetColumnData<TColumns[Key], 'query'>;\n\t\t}\n>;\n\n/** @deprecated Use one of the alternatives: {@link InferSelectModel} / {@link InferInsertModel}, or `table.$inferSelect` / `table.$inferInsert`\n */\nexport type InferModel<\n\tTTable extends Table,\n\tTInferMode extends 'select' | 'insert' = 'select',\n> = InferModelFromColumns<TTable['_']['columns'], TInferMode>;\n\nexport type InferSelectModel<\n\tTTable extends Table,\n> = InferModelFromColumns<TTable['_']['columns'], 'select'>;\n\nexport type InferInsertModel<\n\tTTable extends Table,\n\tTOverride extends { override?: boolean } = { override: false },\n> = InferModelFromColumns<TTable['_']['columns'], 'insert', TOverride>;\n\nexport type InferEnum<T> = T extends { enumValues: readonly (infer U)[] } ? U\n\t: never;\n\nexport interface InferTableColumnsModels<TColumns extends Columns> {\n\treadonly $inferSelect: InferModelFromColumns<TColumns, 'select'>;\n\treadonly $inferInsert: InferModelFromColumns<TColumns, 'insert', { override: false }>;\n}\n","import { entityKind } from './entity.ts';\nimport type { SQL, SQLWrapper } from './sql/sql.ts';\n\nexport interface Subquery<\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTAlias extends string = string,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTSelectedFields extends Record<string, unknown> = Record<string, unknown>,\n> extends SQLWrapper {\n\t// SQLWrapper runtime implementation is defined in 'sql/sql.ts'\n}\nexport class Subquery<\n\tTAlias extends string = string,\n\tTSelectedFields extends Record<string, unknown> = Record<string, unknown>,\n> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Subquery';\n\n\tdeclare _: {\n\t\tbrand: 'Subquery';\n\t\tsql: SQL;\n\t\tselectedFields: TSelectedFields;\n\t\talias: TAlias;\n\t\tisWith: boolean;\n\t\tusedTables?: string[];\n\t};\n\n\tconstructor(sql: SQL, fields: TSelectedFields, alias: string, isWith = false, usedTables: string[] = []) {\n\t\tthis._ = {\n\t\t\tbrand: 'Subquery',\n\t\t\tsql,\n\t\t\tselectedFields: fields as TSelectedFields,\n\t\t\talias: alias as TAlias,\n\t\t\tisWith,\n\t\t\tusedTables,\n\t\t};\n\t}\n\n\t// getSQL(): SQL<unknown> {\n\t// \treturn new SQL([this]);\n\t// }\n}\n\nexport class WithSubquery<\n\tTAlias extends string = string,\n\tTSelection extends Record<string, unknown> = Record<string, unknown>,\n> extends Subquery<TAlias, TSelection> {\n\tstatic override readonly [entityKind]: string = 'WithSubquery';\n}\n\nexport type WithSubqueryWithoutSelection<TAlias extends string> = WithSubquery<TAlias, {}>;\n","import type { Span, Tracer } from '@opentelemetry/api';\nimport { iife } from '~/tracing-utils.ts';\nimport { npmVersion } from '~/version.ts';\n\nlet otel: typeof import('@opentelemetry/api') | undefined; // oxlint-disable-line\nlet rawTracer: Tracer | undefined;\n// try {\n// \totel = await import('@opentelemetry/api');\n// } catch (err: any) {\n// \tif (err.code !== 'MODULE_NOT_FOUND' && err.code !== 'ERR_MODULE_NOT_FOUND') {\n// \t\tthrow err;\n// \t}\n// }\n\ntype SpanName =\n\t| 'drizzle.operation'\n\t| 'drizzle.prepareQuery'\n\t| 'drizzle.buildSQL'\n\t| 'drizzle.execute'\n\t| 'drizzle.driver.execute'\n\t| 'drizzle.mapResponse';\n\nexport const hasTelemetry = !!otel;\n\n/** @internal */\nexport const tracer = {\n\tstartActiveSpan<F extends (span?: Span) => unknown>(name: SpanName, fn: F): ReturnType<F> {\n\t\tif (!otel) {\n\t\t\treturn fn() as ReturnType<F>;\n\t\t}\n\n\t\tif (!rawTracer) {\n\t\t\trawTracer = otel.trace.getTracer('drizzle-orm', npmVersion);\n\t\t}\n\n\t\treturn iife(\n\t\t\t(otel, rawTracer) =>\n\t\t\t\trawTracer.startActiveSpan(\n\t\t\t\t\tname,\n\t\t\t\t\t((span: Span) => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\treturn fn(span);\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\t\t\tcode: otel.SpanStatusCode.ERROR,\n\t\t\t\t\t\t\t\tmessage: e instanceof Error ? e.message : 'Unknown error', // oxlint-disable-line drizzle-internal/no-instanceof\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tspan.end();\n\t\t\t\t\t\t}\n\t\t\t\t\t}) as F,\n\t\t\t\t),\n\t\t\totel,\n\t\t\trawTracer,\n\t\t);\n\t},\n};\n","export const ViewBaseConfig = Symbol.for('drizzle:ViewBaseConfig');\n","import type { CodecsCollection } from '~/codecs.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport type { SelectResult } from '~/query-builders/select.types.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { TableName } from '~/table.utils.ts';\nimport { tracer } from '~/tracing.ts';\nimport type { Assume, Equal } from '~/utils.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport type { AnyColumn } from '../column.ts';\nimport { Column } from '../column.ts';\nimport { IsAlias, OriginalName, Table, TableColumns, TableSchema } from '../table.ts';\n\n/**\n * This class is used to indicate a primitive param value that is used in `sql` tag.\n * It is only used on type level and is never instantiated at runtime.\n * If you see a value of this type in the code, its runtime value is actually the primitive param value.\n */\nexport class FakePrimitiveParam {\n\tstatic readonly [entityKind]: string = 'FakePrimitiveParam';\n}\n\nexport type Chunk =\n\t| string\n\t| Table\n\t| View\n\t| AnyColumn\n\t| Name\n\t| Param\n\t| Placeholder\n\t| SQL;\n\nexport interface BuildQueryConfig {\n\tescapeName(name: string): string;\n\tescapeParam(num: number, value: unknown): string;\n\tescapeString(str: string): string;\n\tcodecs?: CodecsCollection;\n\tparamStartIndex?: { value: number };\n\tinlineParams?: boolean;\n\tinvokeSource?: 'indexes' | 'mssql-check' | 'mssql-view-with-schemabinding' | undefined;\n\ttagged?: true;\n}\n\nexport interface Query {\n\tsql: string;\n\tparams: unknown[];\n\t_sql?: TemplateStringsArray;\n\t// ^ TODO: revisit\n\t// for Bun.SQL cache performance\n}\n\n/**\n * Any value that implements the `getSQL` method. The implementations include:\n * - `Table`\n * - `Column`\n * - `View`\n * - `Subquery`\n * - `SQL`\n * - `SQL.Aliased`\n * - `Placeholder`\n * - `Param`\n */\nexport interface SQLWrapper<T = unknown> {\n\tgetSQL(): SQL<T>;\n\tshouldOmitSQLParens?(): boolean;\n}\n\nexport function isSQLWrapper(value: unknown): value is SQLWrapper {\n\treturn value !== null && value !== undefined && typeof (value as any).getSQL === 'function';\n}\n\nfunction mergeQueries(queries: Query[]): Query {\n\tconst result: Query = { sql: '', params: [] };\n\tfor (const query of queries) {\n\t\tresult.sql += query.sql;\n\t\tresult.params.push(...query.params);\n\t}\n\treturn result;\n}\n\nfunction _mergeQueries(queries: Query[]): Query {\n\tconst result: Query = { sql: '', params: [] };\n\tconst sqls = [] as string[];\n\tfor (const query of queries) {\n\t\tsqls.push(query.sql);\n\t\tresult.params.push(...query.params);\n\t}\n\tresult._sql = Object.assign(sqls, { raw: sqls }) as unknown as TemplateStringsArray;\n\treturn result;\n}\n\nexport class StringChunk implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'StringChunk';\n\n\treadonly value: string[];\n\n\tconstructor(value: string | string[]) {\n\t\tthis.value = Array.isArray(value) ? value : [value];\n\t}\n\n\tgetSQL(): SQL<unknown> {\n\t\treturn new SQL([this]);\n\t}\n}\n\nexport class SQL<T = unknown> implements SQLWrapper<T> {\n\tstatic readonly [entityKind]: string = 'SQL';\n\n\tdeclare _: {\n\t\tbrand: 'SQL';\n\t\ttype: T;\n\t};\n\n\t/** @internal */\n\tdecoder: DriverValueDecoder<T, any> = noopDecoder;\n\t/** @internal */\n\tpublic shouldInlineParams = false;\n\n\t/** @internal */\n\tusedTables: string[] = [];\n\n\tconstructor(readonly queryChunks: SQLChunk[]) {\n\t\tfor (const chunk of queryChunks) {\n\t\t\tif (is(chunk, Table)) {\n\t\t\t\tconst schemaName = chunk[Table.Symbol.Schema];\n\n\t\t\t\tthis.usedTables.push(\n\t\t\t\t\tschemaName === undefined\n\t\t\t\t\t\t? chunk[Table.Symbol.Name]\n\t\t\t\t\t\t: schemaName + '.' + chunk[Table.Symbol.Name],\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tappend(query: SQL): this {\n\t\tthis.queryChunks.push(...query.queryChunks);\n\t\treturn this;\n\t}\n\n\ttoQuery(config: BuildQueryConfig): Query {\n\t\treturn tracer.startActiveSpan('drizzle.buildSQL', (span) => {\n\t\t\tconst query = this.buildQueryFromSourceParams(this.queryChunks, config);\n\t\t\tspan?.setAttributes({\n\t\t\t\t'drizzle.query.text': query.sql,\n\t\t\t\t'drizzle.query.params': JSON.stringify(query.params),\n\t\t\t});\n\t\t\treturn query;\n\t\t});\n\t}\n\n\tbuildQueryFromSourceParams(chunks: SQLChunk[], _config: BuildQueryConfig): Query {\n\t\tconst config = Object.assign({}, _config, {\n\t\t\tinlineParams: _config.inlineParams || this.shouldInlineParams,\n\t\t\tparamStartIndex: _config.paramStartIndex || { value: 0 },\n\t\t});\n\n\t\tconst {\n\t\t\tescapeName,\n\t\t\tescapeParam,\n\t\t\tcodecs,\n\t\t\tinlineParams,\n\t\t\tparamStartIndex,\n\t\t\tinvokeSource,\n\t\t} = config;\n\n\t\tconst mappedChunks = chunks.map((chunk): Query => {\n\t\t\tif (is(chunk, StringChunk)) {\n\t\t\t\treturn { sql: chunk.value.join(''), params: [] };\n\t\t\t}\n\n\t\t\tif (is(chunk, Name)) {\n\t\t\t\treturn { sql: escapeName(chunk.value), params: [] };\n\t\t\t}\n\n\t\t\tif (chunk === undefined) {\n\t\t\t\treturn { sql: '', params: [] };\n\t\t\t}\n\n\t\t\tif (Array.isArray(chunk)) {\n\t\t\t\tconst result: SQLChunk[] = [new StringChunk('(')];\n\t\t\t\tfor (const [i, p] of chunk.entries()) {\n\t\t\t\t\tresult.push(p);\n\t\t\t\t\tif (i < chunk.length - 1) {\n\t\t\t\t\t\tresult.push(new StringChunk(', '));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresult.push(new StringChunk(')'));\n\t\t\t\treturn this.buildQueryFromSourceParams(result, config);\n\t\t\t}\n\n\t\t\tif (is(chunk, SQL)) {\n\t\t\t\treturn this.buildQueryFromSourceParams(chunk.queryChunks, {\n\t\t\t\t\t...config,\n\t\t\t\t\tinlineParams: inlineParams || chunk.shouldInlineParams,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (is(chunk, Table)) {\n\t\t\t\tconst schemaName = chunk[Table.Symbol.Schema];\n\t\t\t\tconst tableName = chunk[Table.Symbol.Name];\n\n\t\t\t\tif (invokeSource === 'mssql-view-with-schemabinding') {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsql: (schemaName === undefined ? escapeName('dbo') : escapeName(schemaName)) + '.'\n\t\t\t\t\t\t\t+ escapeName(tableName),\n\t\t\t\t\t\tparams: [],\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tsql: schemaName === undefined || chunk[IsAlias]\n\t\t\t\t\t\t? escapeName(tableName)\n\t\t\t\t\t\t: escapeName(schemaName) + '.' + escapeName(tableName),\n\t\t\t\t\tparams: [],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (is(chunk, Column)) {\n\t\t\t\tconst columnName = chunk.name;\n\t\t\t\tif (_config.invokeSource === 'indexes') {\n\t\t\t\t\treturn { sql: escapeName(columnName), params: [] };\n\t\t\t\t}\n\n\t\t\t\tconst schemaName = invokeSource === 'mssql-check' ? undefined : chunk.table[Table.Symbol.Schema];\n\t\t\t\treturn {\n\t\t\t\t\tsql: chunk.isAlias ? escapeName(chunk.name) : chunk.table[IsAlias] || schemaName === undefined\n\t\t\t\t\t\t? escapeName(chunk.table[Table.Symbol.Name]) + '.' + escapeName(columnName)\n\t\t\t\t\t\t: escapeName(schemaName) + '.' + escapeName(chunk.table[Table.Symbol.Name]) + '.'\n\t\t\t\t\t\t\t+ escapeName(columnName),\n\t\t\t\t\tparams: [],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (is(chunk, View)) {\n\t\t\t\tconst schemaName = chunk[ViewBaseConfig].schema;\n\t\t\t\tconst viewName = chunk[ViewBaseConfig].name;\n\t\t\t\treturn {\n\t\t\t\t\tsql: schemaName === undefined || chunk[ViewBaseConfig].isAlias\n\t\t\t\t\t\t? escapeName(viewName)\n\t\t\t\t\t\t: escapeName(schemaName) + '.' + escapeName(viewName),\n\t\t\t\t\tparams: [],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (is(chunk, Param)) {\n\t\t\t\tif (is(chunk.value, SQL)) {\n\t\t\t\t\treturn this.buildQueryFromSourceParams([chunk.value], config);\n\t\t\t\t}\n\n\t\t\t\tconst useCodecs = codecs && is(chunk.encoder, Column);\n\n\t\t\t\tif (is(chunk.value, Placeholder)) {\n\t\t\t\t\tconst escaped = escapeParam(paramStartIndex.value++, chunk);\n\t\t\t\t\tchunk.codec = useCodecs\n\t\t\t\t\t\t? (value) => codecs.apply(chunk.encoder as Column, 'normalizeParam', value)\n\t\t\t\t\t\t: undefined;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsql: useCodecs\n\t\t\t\t\t\t\t? codecs.apply(chunk.encoder, 'castParam', escaped)\n\t\t\t\t\t\t\t: escaped,\n\t\t\t\t\t\tparams: [chunk],\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tlet mappedValue: any;\n\t\t\t\tif (chunk.value === null) {\n\t\t\t\t\tmappedValue = chunk.value;\n\t\t\t\t} else {\n\t\t\t\t\tmappedValue = chunk.encoder.mapToDriverValue.isNoop\n\t\t\t\t\t\t? chunk.value\n\t\t\t\t\t\t: chunk.encoder.mapToDriverValue(chunk.value);\n\n\t\t\t\t\tif (is(mappedValue, SQL)) {\n\t\t\t\t\t\treturn this.buildQueryFromSourceParams([mappedValue], config);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (useCodecs) {\n\t\t\t\t\t\tmappedValue = codecs.apply(\n\t\t\t\t\t\t\tchunk.encoder,\n\t\t\t\t\t\t\t'normalizeParam',\n\t\t\t\t\t\t\tmappedValue,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (inlineParams) {\n\t\t\t\t\treturn { sql: this.mapInlineParam(mappedValue, config), params: [] };\n\t\t\t\t}\n\n\t\t\t\tconst escaped = escapeParam(paramStartIndex.value++, mappedValue);\n\t\t\t\treturn {\n\t\t\t\t\tsql: useCodecs\n\t\t\t\t\t\t? codecs.apply(chunk.encoder, 'castParam', escaped)\n\t\t\t\t\t\t: escaped,\n\t\t\t\t\tparams: [mappedValue],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (is(chunk, Placeholder)) {\n\t\t\t\treturn { sql: escapeParam(paramStartIndex.value++, chunk), params: [chunk] };\n\t\t\t}\n\n\t\t\tif (is(chunk, SQL.Aliased) && chunk.fieldAlias !== undefined) {\n\t\t\t\treturn {\n\t\t\t\t\tsql: (chunk.origin !== undefined ? escapeName(chunk.origin) + '.' : '') + escapeName(chunk.fieldAlias),\n\t\t\t\t\tparams: [],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (is(chunk, Subquery)) {\n\t\t\t\tif (chunk._.isWith) {\n\t\t\t\t\treturn { sql: escapeName(chunk._.alias), params: [] };\n\t\t\t\t}\n\t\t\t\treturn this.buildQueryFromSourceParams([\n\t\t\t\t\tnew StringChunk('('),\n\t\t\t\t\tchunk._.sql,\n\t\t\t\t\tnew StringChunk(') '),\n\t\t\t\t\tnew Name(chunk._.alias),\n\t\t\t\t], config);\n\t\t\t}\n\n\t\t\tif (typeof chunk === 'function' && 'enumName' in chunk) {\n\t\t\t\tif ('schema' in chunk && chunk.schema) {\n\t\t\t\t\treturn { sql: escapeName(chunk.schema as string) + '.' + escapeName(chunk.enumName as string), params: [] };\n\t\t\t\t}\n\t\t\t\treturn { sql: escapeName(chunk.enumName as string), params: [] };\n\t\t\t}\n\n\t\t\tif (isSQLWrapper(chunk)) {\n\t\t\t\tif (chunk.shouldOmitSQLParens?.()) {\n\t\t\t\t\treturn this.buildQueryFromSourceParams([chunk.getSQL()], config);\n\t\t\t\t}\n\t\t\t\treturn this.buildQueryFromSourceParams([\n\t\t\t\t\tnew StringChunk('('),\n\t\t\t\t\tchunk.getSQL(),\n\t\t\t\t\tnew StringChunk(')'),\n\t\t\t\t], config);\n\t\t\t}\n\n\t\t\tif (inlineParams) {\n\t\t\t\treturn { sql: this.mapInlineParam(chunk, config), params: [] };\n\t\t\t}\n\n\t\t\treturn { sql: escapeParam(paramStartIndex.value++, chunk), params: [chunk] };\n\t\t});\n\n\t\tif (_config.tagged) {\n\t\t\treturn _mergeQueries(mappedChunks);\n\t\t}\n\n\t\treturn mergeQueries(mappedChunks);\n\t}\n\n\tprivate mapInlineParam(\n\t\tchunk: unknown,\n\t\t{ escapeString }: BuildQueryConfig,\n\t): string {\n\t\tif (chunk === null) {\n\t\t\treturn 'null';\n\t\t}\n\t\tif (typeof chunk === 'number' || typeof chunk === 'boolean' || typeof chunk === 'bigint') {\n\t\t\treturn chunk.toString();\n\t\t}\n\t\tif (typeof chunk === 'string') {\n\t\t\treturn escapeString(chunk);\n\t\t}\n\t\tif (typeof chunk === 'object') {\n\t\t\tconst mappedValueAsString = chunk.toString();\n\t\t\tif (mappedValueAsString === '[object Object]') {\n\t\t\t\treturn escapeString(JSON.stringify(chunk));\n\t\t\t}\n\t\t\treturn escapeString(mappedValueAsString);\n\t\t}\n\t\tthrow new Error('Unexpected param value: ' + chunk);\n\t}\n\n\tgetSQL(): SQL<T> {\n\t\treturn this;\n\t}\n\n\tas(alias: string): SQL.Aliased<T>;\n\t/**\n\t * @deprecated\n\t * Use ``sql<DataType>`query`.as(alias)`` instead.\n\t */\n\tas<TData>(): SQL<TData>;\n\t/**\n\t * @deprecated\n\t * Use ``sql<DataType>`query`.as(alias)`` instead.\n\t */\n\tas<TData>(alias: string): SQL.Aliased<TData>;\n\tas(alias?: string): SQL<T> | SQL.Aliased<T> {\n\t\t// TODO: remove with deprecated overloads\n\t\tif (alias === undefined) {\n\t\t\treturn this;\n\t\t}\n\n\t\treturn new SQL.Aliased(this, alias);\n\t}\n\n\tmapWith<\n\t\tTDecoder extends\n\t\t\t| DriverValueDecoder<any, Exclude<T, null>>\n\t\t\t| DriverValueDecoder<any, Exclude<T, null>>['mapFromDriverValue'],\n\t>(\n\t\tdecoder: TDecoder,\n\t): Equal<T, unknown> extends true ? SQL<GetDecoderResult<TDecoder>>\n\t\t: Equal<T, any> extends true ? SQL<GetDecoderResult<TDecoder>>\n\t\t: SQL<GetDecoderResult<TDecoder> | (null extends T ? null : never)>\n\t{\n\t\tthis.decoder = typeof decoder === 'function' ? { mapFromDriverValue: decoder } : decoder;\n\t\treturn this as SQL<any>;\n\t}\n\n\tnullable(): SQL<T | null> {\n\t\treturn this;\n\t}\n\n\tinlineParams(): this {\n\t\tthis.shouldInlineParams = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * This method is used to conditionally include a part of the query.\n\t *\n\t * @param condition - Condition to check\n\t * @returns itself if the condition is `true`, otherwise `undefined`\n\t */\n\tif(condition: any | undefined): this | undefined {\n\t\treturn condition ? this : undefined;\n\t}\n}\n\nexport type GetDecoderResult<T> = T extends Column ? T['_']['data'] : T extends\n\t| DriverValueDecoder<infer TData, any>\n\t| DriverValueDecoder<infer TData, any>['mapFromDriverValue'] ? TData\n: never;\n\n/**\n * Any DB name (table, column, index etc.)\n */\nexport class Name implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Name';\n\n\tprotected brand!: 'Name';\n\n\tconstructor(readonly value: string) {}\n\n\tgetSQL(): SQL<unknown> {\n\t\treturn new SQL([this]);\n\t}\n}\n\n/**\n * Any DB name (table, column, index etc.)\n * @deprecated Use `sql.identifier` instead.\n */\nexport function name(value: string): Name {\n\treturn new Name(value);\n}\n\nexport interface DriverValueDecoderFn<TData, TDriverParam> {\n\t(value: TDriverParam): TData;\n\t/** @internal */\n\tisNoop?: true | undefined;\n}\n\nexport interface DriverValueDecoder<TData, TDriverParam> {\n\tmapFromDriverValue: DriverValueDecoderFn<TData, TDriverParam>;\n}\n\nexport interface DriverValueEncoderFn<TData, TDriverParam> {\n\t(value: TData): TDriverParam;\n\t/** @internal */\n\tisNoop?: true | undefined;\n}\n\nexport interface DriverValueEncoder<TData, TDriverParam> {\n\tmapToDriverValue: DriverValueEncoderFn<TData, TDriverParam>;\n}\n\nexport function isDriverValueEncoder(value: unknown): value is DriverValueEncoder<any, any> {\n\treturn typeof value === 'object' && value !== null && 'mapToDriverValue' in value\n\t\t&& typeof (value as any).mapToDriverValue === 'function';\n}\n\nexport const noopDecoder: DriverValueDecoder<any, any> = {\n\tmapFromDriverValue: (value) => value,\n};\n\nnoopDecoder.mapFromDriverValue.isNoop = true;\n\nexport const noopEncoder: DriverValueEncoder<any, any> = {\n\tmapToDriverValue: (value) => value,\n};\n\nnoopEncoder.mapToDriverValue.isNoop = true;\n\nexport interface DriverValueMapper<TData, TDriverParam>\n\textends DriverValueDecoder<TData, TDriverParam>, DriverValueEncoder<TData, TDriverParam>\n{}\n\nexport function isNoop(mapper: DriverValueEncoderFn<any, any> | DriverValueDecoderFn<any, any>) {\n\treturn mapper.isNoop;\n}\n\nexport const noopMapper: DriverValueMapper<any, any> = {\n\t...noopDecoder,\n\t...noopEncoder,\n};\n\n/** Parameter value that is optionally bound to an encoder (for example, a column). */\nexport class Param<TDataType = any, TDriverParamType = TDataType> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Param';\n\n\tprotected brand!: 'BoundParamValue';\n\n\t/**\n\t * @param value - Parameter value\n\t * @param encoder - Encoder to convert the value to a driver parameter\n\t */\n\tconstructor(\n\t\treadonly value: TDataType | Placeholder<string, TDataType>,\n\t\treadonly encoder: DriverValueEncoder<TDataType, TDriverParamType> = noopEncoder,\n\t\tpublic codec?: (value: any) => any,\n\t) {}\n\n\tgetSQL(): SQL<unknown> {\n\t\treturn new SQL([this]);\n\t}\n}\n\n/** @deprecated Use `sql.param` instead. */\nexport function param<TData, TDriver>(\n\tvalue: TData,\n\tencoder?: DriverValueEncoder<TData, TDriver>,\n): Param<TData, TDriver> {\n\treturn new Param(value, encoder);\n}\n\n/**\n * Anything that can be passed to the `` sql`...` `` tagged function.\n */\nexport type SQLChunk =\n\t| StringChunk\n\t| SQLChunk[]\n\t| SQLWrapper\n\t| SQL\n\t| Table\n\t| View\n\t| Subquery\n\t| AnyColumn\n\t| Param\n\t| Name\n\t| undefined\n\t| FakePrimitiveParam\n\t| Placeholder;\n\nexport type SQLGenerator<T = unknown> = typeof sql<T>;\n\nexport function sql<T>(strings: TemplateStringsArray, ...params: any[]): SQL<T>;\n/*\n\tThe type of `params` is specified as `SQLChunk[]`, but that's slightly incorrect -\n\tin runtime, users won't pass `FakePrimitiveParam` instances as `params` - they will pass primitive values\n\twhich will be wrapped in `Param`. That's why the overload specifies `params` as `any[]` and not as `SQLSourceParam[]`.\n\tThis type is used to make our lives easier and the type checker happy.\n*/\nexport function sql(strings: TemplateStringsArray, ...params: SQLChunk[]): SQL {\n\tconst queryChunks: SQLChunk[] = [];\n\tif (params.length > 0 || (strings.length > 0 && strings[0] !== '')) {\n\t\tqueryChunks.push(new StringChunk(strings[0]!));\n\t}\n\tfor (const [paramIndex, param] of params.entries()) {\n\t\tqueryChunks.push(param, new StringChunk(strings[paramIndex + 1]!));\n\t}\n\n\treturn new SQL(queryChunks);\n}\n\nexport namespace sql {\n\texport function empty(): SQL {\n\t\treturn new SQL([]);\n\t}\n\n\t/** @deprecated - use `sql.join()` */\n\texport function fromList(list: SQLChunk[]): SQL {\n\t\treturn new SQL(list);\n\t}\n\n\t/**\n\t * Convenience function to create an SQL query from a raw string.\n\t * @param str The raw SQL query string.\n\t */\n\texport function raw(str: string): SQL {\n\t\treturn new SQL([new StringChunk(str)]);\n\t}\n\n\t/**\n\t * Join a list of SQL chunks with a separator.\n\t * @example\n\t * ```ts\n\t * const query = sql.join([sql`a`, sql`b`, sql`c`]);\n\t * // sql`abc`\n\t * ```\n\t * @example\n\t * ```ts\n\t * const query = sql.join([sql`a`, sql`b`, sql`c`], sql`, `);\n\t * // sql`a, b, c`\n\t * ```\n\t */\n\texport function join(chunks: SQLChunk[], separator?: SQLChunk): SQL {\n\t\tconst result: SQLChunk[] = [];\n\t\tfor (const [i, chunk] of chunks.entries()) {\n\t\t\tif (i > 0 && separator !== undefined) {\n\t\t\t\tresult.push(separator);\n\t\t\t}\n\t\t\tresult.push(chunk);\n\t\t}\n\t\treturn new SQL(result);\n\t}\n\n\t/**\n\t * Create a SQL chunk that represents a DB identifier (table, column, index etc.).\n\t * When used in a query, the identifier will be escaped based on the DB engine.\n\t * For example, in PostgreSQL, identifiers are escaped with double quotes.\n\t *\n\t * **WARNING: This function does not offer any protection against SQL injections, so you must validate any user input beforehand.**\n\t *\n\t * @example ```ts\n\t * const query = sql`SELECT * FROM ${sql.identifier('my-table')}`;\n\t * // 'SELECT * FROM \"my-table\"'\n\t * ```\n\t */\n\texport function identifier(value: string): Name {\n\t\treturn new Name(value);\n\t}\n\n\texport function placeholder<TName extends string>(name: TName): Placeholder<TName> {\n\t\treturn new Placeholder(name);\n\t}\n\n\texport function param<TData, TDriver>(\n\t\tvalue: TData | Placeholder<string, TData>,\n\t\tencoder?: DriverValueEncoder<TData, TDriver>,\n\t): Param<TData, TDriver> {\n\t\treturn new Param(value, encoder);\n\t}\n\n\t/**\n\t * Attach [sqlcommenter](https://google.github.io/sqlcommenter) comment to a query\n\t */\n\texport function comment(input: CommentInput): SQL | undefined {\n\t\tconst encoded = sqlCommenter(input);\n\t\tif (!encoded.length) return undefined;\n\n\t\treturn sql.raw(encoded);\n\t}\n}\n\nexport function sqlCommenter(input: CommentInput): string {\n\tconst encoded = sqlCommenter.encodeInput(input);\n\tif (!encoded.length) return '';\n\n\treturn `/*${encoded}*/`;\n}\n\nexport namespace sqlCommenter {\n\texport function merge(input1: CommentInput | undefined, input2: CommentInput | undefined) {\n\t\tlet encoded: CommentInput;\n\t\tif (typeof input1 === 'object' && typeof input2 === 'object') {\n\t\t\tencoded = encodeInput({ ...input1, ...input2 });\n\t\t} else if (input1 && input2) {\n\t\t\tencoded = [encodeInput(input1), encodeInput(input2)].filter((i) => i.length).join(',');\n\t\t} else if (input2) {\n\t\t\tencoded = encodeInput(input2);\n\t\t} else if (input1) {\n\t\t\tencoded = encodeInput(input1);\n\t\t} else {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (!encoded.length) return '';\n\n\t\treturn `/*${encoded}*/`;\n\t}\n\n\texport function encodeInput(input: CommentInput): string {\n\t\tif (typeof input === 'string') {\n\t\t\tif (!input.length) return input;\n\n\t\t\treturn sanitizeStringInput(input);\n\t\t}\n\n\t\tconst parts: string[] = [];\n\n\t\tfor (const [key, value] of Object.entries(input)) {\n\t\t\tif (value === null || value === undefined || value === '') continue;\n\n\t\t\tconst encodedKey = sanitizeObjectElement(key);\n\t\t\tconst encodedValue = sanitizeObjectElement(String(value));\n\n\t\t\tparts.push(`${encodedKey}='${encodedValue}'`);\n\t\t}\n\n\t\tif (!parts.length) return '';\n\n\t\treturn parts.sort().join(',');\n\t}\n\n\texport function sanitizeObjectElement(key: string): string {\n\t\tconst urlEncoded = encodeURIComponent(key);\n\t\treturn urlEncoded.replace(/'/g, `\\\\'`);\n\t}\n\n\texport function sanitizeStringInput(input: string): string {\n\t\treturn input.replace(/\\/\\*/g, '/ *').replace(/\\*\\//g, '* /');\n\t}\n}\n\nexport type CommentInput = string | SqlCommenterInput;\n\nexport type SqlCommenterInput = Record<\n\tstring,\n\tstring | number | bigint | boolean | null | undefined\n>;\n\nexport namespace SQL {\n\texport class Aliased<T = unknown> implements SQLWrapper<T> {\n\t\tstatic readonly [entityKind]: string = 'SQL.Aliased';\n\n\t\tdeclare _: {\n\t\t\tbrand: 'SQL.Aliased';\n\t\t\ttype: T;\n\t\t};\n\n\t\t/** @internal */\n\t\tisSelectionField = false;\n\t\t/** @internal */\n\t\torigin?: string;\n\n\t\tconstructor(\n\t\t\treadonly sql: SQL<T>,\n\t\t\treadonly fieldAlias: string,\n\t\t) {}\n\n\t\tgetSQL(): SQL<T> {\n\t\t\treturn this.sql as SQL<T>;\n\t\t}\n\n\t\t/** @internal */\n\t\tclone() {\n\t\t\treturn new Aliased<T>(this.sql, this.fieldAlias);\n\t\t}\n\t}\n}\n\nexport class Placeholder<TName extends string = string, TValue = any> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Placeholder';\n\n\tdeclare protected: TValue;\n\n\tconstructor(readonly name: TName) {}\n\n\tgetSQL(): SQL {\n\t\treturn new SQL([this]);\n\t}\n}\n\n/** @deprecated Use `sql.placeholder` instead. */\nexport function placeholder<TName extends string>(name: TName): Placeholder<TName> {\n\treturn new Placeholder(name);\n}\n\nexport function fillPlaceholders(params: unknown[], values: Record<string, unknown>): unknown[] {\n\treturn params.map((p) => {\n\t\tif (is(p, Placeholder)) {\n\t\t\tif (!(p.name in values)) {\n\t\t\t\tthrow new Error(`No value for placeholder \"${p.name}\" was provided`);\n\t\t\t}\n\n\t\t\treturn values[p.name];\n\t\t}\n\n\t\tif (is(p, Param) && is(p.value, Placeholder)) {\n\t\t\tif (!(p.value.name in values)) {\n\t\t\t\tthrow new Error(`No value for placeholder \"${p.value.name}\" was provided`);\n\t\t\t}\n\n\t\t\tconst value = values[p.value.name];\n\t\t\tif (value === null) return value;\n\n\t\t\tconst mapped = p.encoder.mapToDriverValue.isNoop\n\t\t\t\t? value\n\t\t\t\t: p.encoder.mapToDriverValue(value);\n\n\t\t\treturn p.codec ? p.codec(mapped) : mapped;\n\t\t}\n\n\t\treturn p;\n\t});\n}\n\nexport type ColumnsSelection = Record<string, unknown>;\n\nconst IsDrizzleView = Symbol.for('drizzle:IsDrizzleView');\n\nexport abstract class View<\n\tTName extends string = string,\n\tTExisting extends boolean = boolean,\n\tTSelection extends ColumnsSelection = ColumnsSelection,\n> {\n\tstatic readonly [entityKind]: string = 'View';\n\n\tdeclare _: {\n\t\tbrand: 'View';\n\t\tviewBrand: string;\n\t\tname: TName;\n\t\texisting: TExisting;\n\t\tselectedFields: TSelection;\n\t};\n\n\t/** @internal */\n\t[ViewBaseConfig]: {\n\t\tname: TName;\n\t\toriginalName: TName;\n\t\tschema: string | undefined;\n\t\tselectedFields: ColumnsSelection;\n\t\tisExisting: TExisting;\n\t\tquery: TExisting extends true ? undefined : SQL;\n\t\tisAlias: boolean;\n\t};\n\n\t/** @internal */\n\t[IsDrizzleView] = true;\n\n\t/** @internal */\n\tpublic get [TableName]() {\n\t\treturn this[ViewBaseConfig].name;\n\t}\n\n\t/** @internal */\n\tpublic get [TableSchema]() {\n\t\treturn this[ViewBaseConfig].schema;\n\t}\n\n\t/** @internal */\n\tpublic get [IsAlias]() {\n\t\treturn this[ViewBaseConfig].isAlias;\n\t}\n\n\t/** @internal */\n\tpublic get [OriginalName]() {\n\t\treturn this[ViewBaseConfig].originalName;\n\t}\n\n\t/** @internal */\n\tpublic get [TableColumns]() {\n\t\treturn (this[ViewBaseConfig].selectedFields) as any as Record<string, unknown>;\n\t}\n\n\tdeclare readonly $inferSelect: InferSelectViewModel<View<Assume<TName, string>, TExisting, TSelection>>;\n\n\tconstructor(\n\t\t{ name, schema, selectedFields, query }: {\n\t\t\tname: TName;\n\t\t\tschema: string | undefined;\n\t\t\tselectedFields: ColumnsSelection;\n\t\t\tquery: SQL | undefined;\n\t\t},\n\t) {\n\t\tthis[ViewBaseConfig] = {\n\t\t\tname,\n\t\t\toriginalName: name,\n\t\t\tschema,\n\t\t\tselectedFields,\n\t\t\tquery: query as (TExisting extends true ? undefined : SQL),\n\t\t\tisExisting: !query as TExisting,\n\t\t\tisAlias: false,\n\t\t};\n\t}\n}\n\nexport function isView(view: unknown): view is View {\n\treturn typeof view === 'object' && view !== null && IsDrizzleView in view;\n}\n\nexport function getViewName<T extends View>(view: T): T['_']['name'] {\n\treturn view[ViewBaseConfig].name;\n}\n\nexport type InferSelectViewModel<TView extends View> =\n\tEqual<TView['_']['selectedFields'], { [x: string]: unknown }> extends true ? { [x: string]: unknown }\n\t\t: SelectResult<\n\t\t\tTView['_']['selectedFields'],\n\t\t\t'single',\n\t\t\tRecord<TView['_']['name'], 'not-null'>\n\t\t>;\n\n// Defined separately from the Column class to resolve circular dependency\nColumn.prototype.getSQL = function() {\n\treturn new SQL([this]);\n};\n// Defined separately from the Subquery class to resolve circular dependency\nSubquery.prototype.getSQL = function() {\n\treturn new SQL([this]);\n};\n\nexport type SQLEntity = SQL | SQLWrapper | SQL.Aliased | Table | View;\n","import type { Cache } from './cache/core/cache.ts';\nimport type { CodecsCollection } from './codecs.ts';\nimport type { AnyColumn } from './column.ts';\nimport { Column } from './column.ts';\nimport { is } from './entity.ts';\nimport type { Logger } from './logger.ts';\nimport type { SelectedFieldsFlat, SelectedFieldsOrdered } from './operations.ts';\nimport type { TableLike } from './query-builders/select.types.ts';\nimport type { AnyRelations, EmptyRelations } from './relations.ts';\nimport { Param, SQL, View } from './sql/sql.ts';\nimport type { DriverValueDecoder, SQLWrapper } from './sql/sql.ts';\nimport { Subquery } from './subquery.ts';\nimport { getTableName, Table } from './table.ts';\nimport { ViewBaseConfig } from './view-common.ts';\n\n/** @internal */\nexport function mapResultRow<TResult>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\trow: unknown[] | (readonly unknown[]),\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): TResult {\n\t// Key -> nested object key, value -> table name if all fields in the nested object are from the same table, false otherwise\n\tconst nullifyMap: Record<string, string | false> = {};\n\n\tconst result = columns.reduce<Record<string, any>>(\n\t\t(result, { path, field, codec, arrayDimensions }, columnIndex) => {\n\t\t\tlet decoder: DriverValueDecoder<unknown, unknown>;\n\t\t\tif (is(field, Column)) {\n\t\t\t\tdecoder = field;\n\t\t\t} else if (is(field, SQL)) {\n\t\t\t\tdecoder = field.decoder;\n\t\t\t} else if (is(field, Subquery)) {\n\t\t\t\tdecoder = field._.sql.decoder;\n\t\t\t} else {\n\t\t\t\tdecoder = field.sql.decoder;\n\t\t\t}\n\t\t\tlet node = result;\n\t\t\tfor (const [pathChunkIndex, pathChunk] of path.entries()) {\n\t\t\t\tif (pathChunkIndex < path.length - 1) {\n\t\t\t\t\tif (!(pathChunk in node)) {\n\t\t\t\t\t\tnode[pathChunk] = {};\n\t\t\t\t\t}\n\t\t\t\t\tnode = node[pathChunk];\n\t\t\t\t} else {\n\t\t\t\t\tconst rawValue = row[columnIndex]!;\n\t\t\t\t\tconst value = node[pathChunk] = rawValue === null\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: decoder.mapFromDriverValue(codec ? codec(rawValue, arrayDimensions!) : rawValue);\n\n\t\t\t\t\tif (joinsNotNullableMap && is(field, Column) && path.length === 2) {\n\t\t\t\t\t\tconst objectName = path[0]!;\n\t\t\t\t\t\tif (!(objectName in nullifyMap)) {\n\t\t\t\t\t\t\tnullifyMap[objectName] = value === null ? getTableName(field.table) : false;\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\ttypeof nullifyMap[objectName] === 'string' && nullifyMap[objectName] !== getTableName(field.table)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnullifyMap[objectName] = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\t{},\n\t);\n\n\t// Nullify all nested objects from nullifyMap that are nullable\n\tif (joinsNotNullableMap && Object.keys(nullifyMap).length > 0) {\n\t\tfor (const [objectName, tableName] of Object.entries(nullifyMap)) {\n\t\t\tif (typeof tableName === 'string' && !joinsNotNullableMap[tableName]) {\n\t\t\t\tresult[objectName] = null;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result as TResult;\n}\n\n/** @internal bypass bundle-time filtering */\nexport const FnConstructor = Object.getPrototypeOf(() => null).constructor as typeof Function;\n\n/** @internal */\nfunction makeJitQueryMapperInner(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> = {},\n): string {\n\tconst preFn = [] as string[];\n\tconst fn = [] as string[];\n\tfn.push(`const [ ${columns.map((_, i) => `c${i}`).join(', ')} ] = rows[i];`);\n\n\tconst nullifyMap: Record<string, string | false> = {};\n\tconst objectIds: Record<string, string[]> = {};\n\tconst decodes = Array.from<string>({ length: columns.length });\n\n\tfor (let idx = 0; idx < columns.length; ++idx) {\n\t\tconst { field, path, codec, arrayDimensions } = columns[idx]!;\n\t\tlet decoder: DriverValueDecoder<unknown, unknown>;\n\t\tlet decoderStr: string;\n\t\tlet decoderFieldDestructure: string;\n\t\tlet isColumn = false;\n\t\tif (is(field, Column)) {\n\t\t\tisColumn = true;\n\t\t\tdecoder = field;\n\t\t\tdecoderFieldDestructure = `field: decoder${idx}`;\n\t\t} else if (is(field, SQL)) {\n\t\t\tdecoder = field.decoder;\n\t\t\tdecoderFieldDestructure = `field: { decoder: decoder${idx} }`;\n\t\t} else if (is(field, Subquery)) {\n\t\t\tdecoder = field._.sql.decoder;\n\t\t\tdecoderFieldDestructure = `field: { _: { sql: { decoder: decoder${idx} } } }`;\n\t\t} else {\n\t\t\tdecoder = field.sql.decoder;\n\t\t\tdecoderFieldDestructure = `field: { sql: { decoder: decoder${idx} } }`;\n\t\t}\n\t\tdecoderStr = `decoder${idx}.mapFromDriverValue`;\n\t\tif (decoder.mapFromDriverValue.isNoop) decoderStr = '';\n\t\tif (decoderStr) {\n\t\t\tpreFn.push(`const { ${decoderFieldDestructure}${codec ? `, codec: codec${idx}` : ''} } = columns[${idx}];`);\n\t\t} else if (codec) {\n\t\t\tpreFn.push(`const { codec: codec${idx} } = columns[${idx}];`);\n\t\t}\n\n\t\tconst colStr = `c${idx}`;\n\t\tlet decodedValue = colStr;\n\t\tif (codec) decodedValue = `codec${idx}(${decodedValue}, ${arrayDimensions})`;\n\t\tif (decoderStr) decodedValue = `${decoderStr}(${decodedValue})`;\n\t\tdecodes[idx] = colStr === decodedValue\n\t\t\t? `${colStr}`\n\t\t\t: `${colStr} === null ? ${colStr} : ${decodedValue}`;\n\n\t\tif (path.length !== 2 || !isColumn) continue;\n\t\tif (objectIds[path[0]!] === undefined) objectIds[path[0]!] = [`c${idx}`];\n\t\telse objectIds[path[0]!]?.push(`c${idx}`);\n\t\tconst [objectName] = path as [string];\n\t\tconst tableName = getTableName((<Column> field).table);\n\t\tnullifyMap[objectName] = joinsNotNullableMap[tableName] ? false : typeof nullifyMap[objectName] === 'string'\n\t\t\t? nullifyMap[objectName] === tableName ? tableName : false\n\t\t\t: tableName;\n\t}\n\n\tfn.push(`mapped[i] = {`);\n\tlet currentObjectPath: string[] = [];\n\tfor (let idx = 0; idx < columns.length; ++idx) {\n\t\tconst { path } = columns[idx]!;\n\t\tconst jsonPath = path.map((e) => JSON.stringify(e));\n\t\tconst decodedValue = decodes[idx]!;\n\n\t\tconst objectPath = path.slice(0, -1);\n\t\tlet commonLen = 0;\n\t\twhile (\n\t\t\tcommonLen < currentObjectPath.length\n\t\t\t&& commonLen < objectPath.length\n\t\t\t&& currentObjectPath[commonLen] === objectPath[commonLen]\n\t\t) commonLen++;\n\n\t\tfor (let d = currentObjectPath.length - 1; d >= commonLen; --d) {\n\t\t\tfn.push(`${'\\t'.repeat(d + 1)}},`);\n\t\t}\n\n\t\tfor (let d = commonLen; d < objectPath.length; ++d) {\n\t\t\tfn.push(\n\t\t\t\t`${'\\t'.repeat(d + 1)}${jsonPath[d]}: ${\n\t\t\t\t\td === 0 && objectPath.length === 1 && typeof nullifyMap[path[0]!] === 'string'\n\t\t\t\t\t\t? `${objectIds[path[0]!]?.map((c) => `${c} === null`).join(' && ')} ? null : {`\n\t\t\t\t\t\t: '{'\n\t\t\t\t}`,\n\t\t\t);\n\t\t}\n\n\t\tcurrentObjectPath = objectPath;\n\t\tfn.push(`${'\\t'.repeat(path.length)}${jsonPath[path.length - 1]}: ${decodedValue},`);\n\t}\n\n\tfor (let d = currentObjectPath.length - 1; d >= 0; --d) {\n\t\tfn.push(`${'\\t'.repeat(d + 1)}},`);\n\t}\n\tfn.push(`};`);\n\n\treturn `${preFn.length ? `${preFn.join('\\n\\t')}\\n\\t` : ''}for (let i = 0; i < length; ++i) {\n\t\t${fn.join('\\n\\t\\t')}\n\t}`;\n}\n\nexport type RowsMapperGenerator = <TResult = any>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n) => RowsMapper<TResult>;\nexport interface RowsMapper<TResult = Record<string, unknown>[]> {\n\t(rows: unknown[][]): TResult;\n\t/** @internal jit mapper's function body for debugging */\n\tbody?: string;\n}\n\nexport function makeJitQueryMapper<TResult>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): RowsMapper<TResult> {\n\tconst internals = `\\t\"use strict\";\n\tconst { columns } = this;\n\tconst { length } = rows;\n\tconst mapped = Array.from({ length });\n\t${makeJitQueryMapperInner(columns, joinsNotNullableMap)}\n\treturn mapped;\n\t//# sourceURL=drizzle:jit-query-mapper`;\n\n\tconst fn = Object.assign(\n\t\tnew FnConstructor(\n\t\t\t'rows',\n\t\t\tinternals,\n\t\t).bind({\n\t\t\tcolumns,\n\t\t}),\n\t\t{ body: `function jitQueryMapper (rows) {\\n${internals}\\n}` },\n\t) as RowsMapper<TResult>;\n\n\treturn fn;\n}\n\n/** @internal */\nexport function jitCompatCheck(isEnabled?: boolean): boolean {\n\tif (!isEnabled) return false;\n\n\ttry {\n\t\tconst res = new FnConstructor('input', '\"use strict\"; return input;')(true);\n\t\tif (res !== true) {\n\t\t\t// In case it's broken in runtime but not forbidden\n\t\t\tconsole.warn(\n\t\t\t\t'Unable to use jit mappers due to incompatibility: corrupted jit function output.\\nFalling back to premade mappers.\\nError details:',\n\t\t\t);\n\t\t\tconsole.error(`Expected to receive \\`true\\`, got: ${res}`);\n\t\t}\n\t\treturn true;\n\t} catch (e) {\n\t\tconsole.warn(\n\t\t\t'Unable to use jit mappers due to incompatibility.\\nFalling back to premade mappers.\\nError details:',\n\t\t);\n\t\tconsole.error(e);\n\t\treturn false;\n\t}\n}\n\nexport function makeDefaultQueryMapper<TResult>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): RowsMapper<TResult> {\n\tconst interpretedData = columns.map(({ field, codec, arrayDimensions, path }) => {\n\t\tlet processNullifyMap: ((nullifyMap: Record<string, string | false>, value: any) => void) | undefined;\n\t\tlet decoderSrc: DriverValueDecoder<unknown, unknown>;\n\t\tif (is(field, Column)) {\n\t\t\tdecoderSrc = field;\n\n\t\t\tif (joinsNotNullableMap && path.length === 2) {\n\t\t\t\tconst objectName = path[0]!;\n\t\t\t\tprocessNullifyMap = (nullifyMap, value) => {\n\t\t\t\t\tif (!(objectName in nullifyMap)) {\n\t\t\t\t\t\tnullifyMap[objectName] = value === null ? getTableName(field.table) : false;\n\t\t\t\t\t} else if (\n\t\t\t\t\t\ttypeof nullifyMap[objectName] === 'string' && nullifyMap[objectName] !== getTableName(field.table)\n\t\t\t\t\t) {\n\t\t\t\t\t\tnullifyMap[objectName] = false;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t} else if (is(field, SQL)) {\n\t\t\tdecoderSrc = field.decoder;\n\t\t} else if (is(field, Subquery)) {\n\t\t\tdecoderSrc = field._.sql.decoder;\n\t\t} else {\n\t\t\tdecoderSrc = field.sql.decoder;\n\t\t}\n\n\t\tlet decoder: ((v: any) => any) | undefined;\n\t\tif (decoderSrc.mapFromDriverValue.isNoop) {\n\t\t\tdecoder = codec ? (v: any) => codec(v, arrayDimensions!) : undefined;\n\t\t} else {\n\t\t\tdecoder = codec\n\t\t\t\t? (v: any) => decoderSrc.mapFromDriverValue(codec(v, arrayDimensions!))\n\t\t\t\t: (v: any) => decoderSrc.mapFromDriverValue(v);\n\t\t}\n\n\t\treturn [decoder, processNullifyMap] as const;\n\t});\n\n\treturn ((rows) =>\n\t\trows.map((row) => {\n\t\t\t// Key -> nested object key, value -> table name if all fields in the nested object are from the same table, false otherwise\n\t\t\tconst nullifyMap: Record<string, string | false> = {};\n\n\t\t\tconst result = columns.reduce<Record<string, any>>(\n\t\t\t\t(result, { path }, columnIndex) => {\n\t\t\t\t\tlet node = result;\n\t\t\t\t\tfor (const [pathChunkIndex, pathChunk] of path.entries()) {\n\t\t\t\t\t\tif (pathChunkIndex < path.length - 1) {\n\t\t\t\t\t\t\tif (!(pathChunk in node)) {\n\t\t\t\t\t\t\t\tnode[pathChunk] = {};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnode = node[pathChunk];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst [decoder, processNullifyMap] = interpretedData[columnIndex]!;\n\n\t\t\t\t\t\t\tconst rawValue = row[columnIndex]!;\n\t\t\t\t\t\t\tconst value = node[pathChunk] = rawValue === null\n\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t: decoder\n\t\t\t\t\t\t\t\t? decoder(rawValue)\n\t\t\t\t\t\t\t\t: rawValue;\n\n\t\t\t\t\t\t\tprocessNullifyMap?.(nullifyMap, value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\t\t\t\t{},\n\t\t\t);\n\n\t\t\t// Nullify all nested objects from nullifyMap that are nullable\n\t\t\tif (joinsNotNullableMap && Object.keys(nullifyMap).length > 0) {\n\t\t\t\tfor (const [objectName, tableName] of Object.entries(nullifyMap)) {\n\t\t\t\t\tif (typeof tableName === 'string' && !joinsNotNullableMap[tableName]) {\n\t\t\t\t\t\tresult[objectName] = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result as TResult;\n\t\t})) as RowsMapper<TResult>;\n}\n\nexport function make$ReturningResponseMapper(\n\treturningIds: SelectedFieldsOrdered<Column> | undefined,\n\tgeneratedIds?: Record<string, unknown>[],\n) {\n\tif (!returningIds) return;\n\n\treturn ({ insertId, affectedRows }: {\n\t\tinsertId: number;\n\t\taffectedRows: number;\n\t}) => {\n\t\tconst returningResponse = [];\n\t\tlet j = 0;\n\t\tfor (let i = insertId; i < insertId + affectedRows; i++) {\n\t\t\tfor (const column of returningIds) {\n\t\t\t\tconst key = returningIds[0]!.path[0]!;\n\t\t\t\tif (is(column.field, Column)) {\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tif (column.field.primary && column.field.autoIncrement) {\n\t\t\t\t\t\treturningResponse.push({ [key]: i });\n\t\t\t\t\t}\n\t\t\t\t\tif (column.field.defaultFn && generatedIds) {\n\t\t\t\t\t\t// generatedIds[rowIdx][key]\n\t\t\t\t\t\treturningResponse.push({ [key]: generatedIds[j]![key] });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tj++;\n\t\t}\n\n\t\treturn returningResponse;\n\t};\n}\n\n/** @internal */\nexport function orderSelectedFields<TColumn extends AnyColumn>(\n\tfields: Record<string, unknown>,\n\tpathPrefix?: string[],\n\tcodecs?: CodecsCollection,\n): SelectedFieldsOrdered<TColumn> {\n\treturn Object.entries(fields).reduce<SelectedFieldsOrdered<AnyColumn>>((result, [name, field]) => {\n\t\tif (typeof name !== 'string') {\n\t\t\treturn result;\n\t\t}\n\n\t\tconst newPath = pathPrefix ? [...pathPrefix, name] : [name];\n\t\tif (is(field, Column)) {\n\t\t\tresult.push({\n\t\t\t\tpath: newPath,\n\t\t\t\tfield,\n\t\t\t\tcodec: codecs?.get(field, 'normalize'),\n\t\t\t\tarrayDimensions: (<any> field).dimensions,\n\t\t\t\tcolumn: field,\n\t\t\t});\n\t\t} else if (is(field, SQL) || is(field, SQL.Aliased)) {\n\t\t\tconst col = getColumnFromDecoder(field);\n\t\t\tresult.push(\n\t\t\t\tcol\n\t\t\t\t\t? {\n\t\t\t\t\t\tpath: newPath,\n\t\t\t\t\t\tfield,\n\t\t\t\t\t\tcodec: codecs?.get(col, 'normalize'),\n\t\t\t\t\t\tarrayDimensions: (<any> col).dimensions,\n\t\t\t\t\t\tcolumn: col,\n\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\tpath: newPath,\n\t\t\t\t\t\tfield,\n\t\t\t\t\t},\n\t\t\t);\n\t\t} else if (is(field, Subquery)) {\n\t\t\tlet column: Column | undefined;\n\t\t\tconst entries = Object.values(field._.selectedFields) as (SQL.Aliased | Column | SQL)[];\n\t\t\tconst entry = entries[0]!;\n\n\t\t\tlet fieldDecoder: DriverValueDecoder<any, any>;\n\t\t\tif (is(entry, Column)) {\n\t\t\t\tcolumn = entry;\n\t\t\t\tfieldDecoder = entry;\n\t\t\t} else if (is(entry, SQL)) {\n\t\t\t\tcolumn = getColumnFromDecoder(entry);\n\t\t\t\tfieldDecoder = entry.decoder;\n\t\t\t} else {\n\t\t\t\tcolumn = getColumnFromDecoder(entry);\n\t\t\t\tfieldDecoder = entry.sql.decoder;\n\t\t\t}\n\n\t\t\tif (fieldDecoder) {\n\t\t\t\tfield._.sql.decoder = fieldDecoder;\n\t\t\t}\n\n\t\t\tresult.push(\n\t\t\t\tcolumn\n\t\t\t\t\t? {\n\t\t\t\t\t\tpath: newPath,\n\t\t\t\t\t\tfield,\n\t\t\t\t\t\tcodec: codecs?.get(column, 'normalize'),\n\t\t\t\t\t\tarrayDimensions: (<any> column).dimensions,\n\t\t\t\t\t\tcolumn,\n\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\tpath: newPath,\n\t\t\t\t\t\tfield,\n\t\t\t\t\t},\n\t\t\t);\n\t\t} else if (is(field, Table)) {\n\t\t\tresult.push(...orderSelectedFields(field[Table.Symbol.Columns], newPath, codecs));\n\t\t} else {\n\t\t\tresult.push(...orderSelectedFields(field as Record<string, unknown>, newPath, codecs));\n\t\t}\n\t\treturn result;\n\t}, []) as SelectedFieldsOrdered<TColumn>;\n}\n\nexport function getColumnFromDecoder(source: SQL | SQL.Aliased | SQLWrapper): Column | undefined {\n\tconst query = source.getSQL();\n\n\tif (is(query.decoder, Column)) return query.decoder;\n\treturn undefined;\n}\n\nexport function haveSameKeys(left: Record<string, unknown>, right: Record<string, unknown>) {\n\tconst leftKeys = Object.keys(left);\n\tconst rightKeys = Object.keys(right);\n\n\tif (leftKeys.length !== rightKeys.length) {\n\t\treturn false;\n\t}\n\n\tfor (const [index, key] of leftKeys.entries()) {\n\t\tif (key !== rightKeys[index]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n/** @internal */\nexport function mapUpdateSet(table: Table, values: Record<string, unknown>): UpdateSet {\n\tconst entries: [string, UpdateSet[string]][] = Object.entries(values)\n\t\t.filter(([, value]) => value !== undefined)\n\t\t.map(([key, value]) => {\n\t\t\t// eslint-disable-next-line unicorn/prefer-ternary\n\t\t\tif (is(value, SQL) || is(value, Column)) {\n\t\t\t\treturn [key, value];\n\t\t\t} else {\n\t\t\t\treturn [key, new Param(value, table[Table.Symbol.Columns][key])];\n\t\t\t}\n\t\t});\n\n\tif (entries.length === 0) {\n\t\tthrow new Error('No values to set');\n\t}\n\n\treturn Object.fromEntries(entries);\n}\n\nexport type UpdateSet = Record<string, SQL | Param | AnyColumn | null | undefined>;\n\nexport type OneOrMany<T> = T | T[];\n\nexport type Update<T, TUpdate> =\n\t& {\n\t\t[K in Exclude<keyof T, keyof TUpdate>]: T[K];\n\t}\n\t& TUpdate;\n\nexport type Simplify<T> =\n\t& {\n\t\t// @ts-ignore - \"Type parameter 'K' has a circular constraint\", not sure why\n\t\t[K in keyof T]: T[K];\n\t}\n\t& {};\n\nexport type Not<T extends boolean> = T extends true ? false : true;\n\nexport type IsNever<T> = [T] extends [never] ? true : false;\n\nexport type IsUnion<T, U extends T = T> = (T extends any ? (U extends T ? false : true) : never) extends false ? false\n\t: true;\n\nexport type SingleKeyObject<T, TError extends string, K = keyof T> = IsNever<K> extends true ? never\n\t: IsUnion<K> extends true ? DrizzleTypeError<TError>\n\t: T;\n\nexport type FromSingleKeyObject<T, Result, TError extends string, K = keyof T> = IsNever<K> extends true ? never\n\t: IsUnion<K> extends true ? DrizzleTypeError<TError>\n\t: Result;\n\nexport type SimplifyMappedType<T> = [T] extends [unknown] ? T : never;\n\nexport type ShallowRecord<K extends keyof any, T> = SimplifyMappedType<{ [P in K]: T }>;\n\nexport type Assume<T, U> = T extends U ? T : U;\n\nexport type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2) ? true : false;\n\nexport interface DrizzleTypeError<T extends string> {\n\t$drizzleTypeError: T;\n}\n\nexport type ValueOrArray<T> = T | T[];\n\n/** @internal */\nexport function applyMixins(baseClass: any, extendedClasses: any[]) {\n\tfor (const extendedClass of extendedClasses) {\n\t\tfor (const name of Object.getOwnPropertyNames(extendedClass.prototype)) {\n\t\t\tif (name === 'constructor') continue;\n\n\t\t\tObject.defineProperty(\n\t\t\t\tbaseClass.prototype,\n\t\t\t\tname,\n\t\t\t\tObject.getOwnPropertyDescriptor(extendedClass.prototype, name) || Object.create(null),\n\t\t\t);\n\t\t}\n\t}\n}\n\nexport type Or<T1, T2> = T1 extends true ? true : T2 extends true ? true : false;\n\nexport type IfThenElse<If, Then, Else> = If extends true ? Then : Else;\n\nexport type PromiseOf<T> = T extends Promise<infer U> ? U : T;\n\nexport type Writable<T> = {\n\t-readonly [P in keyof T]: T[P];\n};\n\nexport type NonArray<T> = T extends any[] ? never : T;\n\n/**\n * @deprecated\n * Use `getColumns` instead\n */\nexport function getTableColumns<T extends Table>(table: T): T['_']['columns'] {\n\treturn table[Table.Symbol.Columns];\n}\n\nexport function getViewSelectedFields<T extends View>(view: T): T['_']['selectedFields'] {\n\treturn view[ViewBaseConfig].selectedFields;\n}\n\nexport function getColumns<T extends Table | View | Subquery>(\n\ttable: T,\n): T extends Table ? T['_']['columns']\n\t: T extends View ? T['_']['selectedFields']\n\t: T extends Subquery ? T['_']['selectedFields']\n\t: never\n{\n\treturn (is(table, Table)\n\t\t? table[Table.Symbol.Columns]\n\t\t: is(table, View)\n\t\t? table[ViewBaseConfig].selectedFields\n\t\t: table._.selectedFields) as any;\n}\n\n/** @internal */\nexport function getTableLikeName(table: TableLike): string | undefined {\n\treturn is(table, Subquery)\n\t\t? table._.alias\n\t\t: is(table, View)\n\t\t? table[ViewBaseConfig].name\n\t\t: is(table, SQL)\n\t\t? undefined\n\t\t: table[Table.Symbol.IsAlias]\n\t\t? table[Table.Symbol.Name]\n\t\t: table[Table.Symbol.BaseName];\n}\n\nexport type ColumnsWithTable<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends AnyColumn<{ tableName: TTableName }>[],\n> = { [Key in keyof TColumns]: AnyColumn<{ tableName: TForeignTableName }> };\n\nexport interface DrizzleConfig<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTRelationConfigs extends AnyRelations = EmptyRelations,\n> {\n\tlogger?: boolean | Logger | undefined;\n\tschema?: TSchema | undefined;\n\trelations?: TRelationConfigs | undefined;\n\tcache?: Cache | undefined;\n\tjit?: boolean | undefined;\n}\nexport type ValidateShape<T, ValidShape, TResult = T> = T extends ValidShape\n\t? Exclude<keyof T, keyof ValidShape> extends never ? TResult\n\t: DrizzleTypeError<\n\t\t`Invalid key(s): ${Exclude<(keyof T) & (string | number | bigint | boolean | null | undefined), keyof ValidShape>}`\n\t>\n\t: never;\n\nexport type KnownKeysOnly<T, U> = {\n\t[K in keyof T]: K extends keyof U ? T[K] : never;\n};\n\nexport type IsAny<T> = 0 extends (1 & T) ? true : false;\n\n/** @internal */\nexport function getColumnNameAndConfig<\n\tTConfig extends Record<string, any> | undefined,\n>(a: string | TConfig | undefined, b: TConfig | undefined) {\n\treturn {\n\t\tname: typeof a === 'string' && a.length > 0 ? a : '' as string,\n\t\tconfig: typeof a === 'object' ? a : b as TConfig,\n\t};\n}\n\nexport type IfNotImported<T, Y, N> = unknown extends T ? Y : N;\n\nexport type ImportTypeError<TPackageName extends string> =\n\t`Please install \\`${TPackageName}\\` to allow Drizzle ORM to connect to the database`;\n\nexport type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Keys extends any\n\t? Required<Pick<T, Keys>> & Partial<Omit<T, Keys>>\n\t: never;\n\ntype ExpectedConfigShape = {\n\tlogger?: boolean | {\n\t\tlogQuery(query: string, params: unknown[]): void;\n\t} | undefined;\n\tschema?: Record<string, never> | undefined;\n\trelations?: AnyRelations | undefined;\n};\n\n// If this errors, you must update config shape checker function with new config specs\nconst _: DrizzleConfig<any, any> = {} as ExpectedConfigShape;\nconst __: ExpectedConfigShape = {} as DrizzleConfig;\n\nexport function isConfig(data: any): boolean {\n\tif (typeof data !== 'object' || data === null) return false;\n\n\tif (data.constructor.name !== 'Object') return false;\n\n\tif ('logger' in data) {\n\t\tconst type = typeof data['logger'];\n\t\tif (\n\t\t\ttype !== 'boolean' && (type !== 'object' || typeof data['logger']['logQuery'] !== 'function')\n\t\t\t&& type !== 'undefined'\n\t\t) return false;\n\n\t\treturn true;\n\t}\n\n\tif ('schema' in data) {\n\t\tconst type = typeof data['schema'];\n\t\tif (type !== 'object' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('relations' in data) {\n\t\tconst type = typeof data['relations'];\n\t\tif (type !== 'object' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('connection' in data) {\n\t\tconst type = typeof data['connection'];\n\t\tif (type !== 'string' && type !== 'object' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('client' in data) {\n\t\tconst type = typeof data['client'];\n\t\tif (type !== 'object' && type !== 'function' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('jit' in data) {\n\t\tconst type = typeof data['jit'];\n\t\tif (type !== 'boolean' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('codecs' in data) {\n\t\tconst type = typeof data['connection'];\n\t\tif (type !== 'object' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif (Object.keys(data).length === 0) return true;\n\n\treturn false;\n}\n\nexport type NeonAuthToken = string | (() => string | Promise<string>);\n\nexport const textDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder();\n\nexport function assertUnreachable(_x: never | undefined): never {\n\tthrow new Error(\"Didn't expect to get here\");\n}\n\nexport function isWithEnum(column: Column<any>): column is typeof column & { enumValues: [string, ...string[]] };\nexport function isWithEnum(value: unknown): value is { enumValues: [string, ...string[]] };\nexport function isWithEnum(value: unknown): boolean {\n\treturn ((typeof value === 'object' && value !== null) || typeof value === 'function') && 'enumValues' in value\n\t\t&& Array.isArray(value.enumValues)\n\t\t&& value.enumValues.length > 0;\n}\n\nexport type Literal = string | number | boolean | null;\nexport type Json = Literal | { [key: string]: any } | any[];\n\nexport type ColumnIsGeneratedAlwaysAs<TColumn> = TColumn extends Column<any>\n\t? TColumn['_']['identity'] extends 'always' ? true\n\t: TColumn['_'] extends { generated: undefined } ? false\n\t: TColumn['_']['generated'] extends { type: 'byDefault' } ? false\n\t: true\n\t: false;\n\nexport type GetSelection<T extends SelectedFieldsFlat<Column<any>> | Table<any> | View> = T extends Table<any>\n\t? T['_']['columns']\n\t: T extends View ? T['_']['selectedFields']\n\t: T;\n\nexport type RemoveNeverElements<T extends any[]> = T extends [infer First, ...infer Rest]\n\t? IsNever<First> extends true ? RemoveNeverElements<Rest>\n\t: [First, ...RemoveNeverElements<Rest>]\n\t: [];\n\nexport type HasBaseColumn<TColumn> = TColumn extends { _: { baseColumn: Column | undefined } }\n\t? IsNever<TColumn['_']['baseColumn']> extends false ? true\n\t: false\n\t: false;\n\nexport type EnumValuesToEnum<TEnumValues extends [string, ...string[]]> = { [K in TEnumValues[number]]: K };\n\nexport type EnumValuesToReadonlyEnum<TEnumValues extends [string, ...string[]]> = {\n\treadonly [K in TEnumValues[number]]: K;\n};\n\nexport const CONSTANTS = {\n\tINT8_MIN: -128,\n\tINT8_MAX: 127,\n\tINT8_UNSIGNED_MAX: 255,\n\tINT16_MIN: -32768,\n\tINT16_MAX: 32767,\n\tINT16_UNSIGNED_MAX: 65535,\n\tINT24_MIN: -8388608,\n\tINT24_MAX: 8388607,\n\tINT24_UNSIGNED_MAX: 16777215,\n\tINT32_MIN: -2147483648,\n\tINT32_MAX: 2147483647,\n\tINT32_UNSIGNED_MAX: 4294967295,\n\tINT48_MIN: -140737488355328,\n\tINT48_MAX: 140737488355327,\n\tINT48_UNSIGNED_MAX: 281474976710655,\n\tINT64_MIN: -9223372036854775808n,\n\tINT64_MAX: 9223372036854775807n,\n\tINT64_UNSIGNED_MAX: 18446744073709551615n,\n};\n\nexport function base64ToUint8Array(base64: string): Uint8Array {\n\tif (!base64) return new Uint8Array(0);\n\tconst binary = atob(base64);\n\tconst len = binary.length;\n\tconst bytes = new Uint8Array(len);\n\n\tfor (let i = 0; i < len; ++i) {\n\t\tbytes[i] = binary.charCodeAt(i);\n\t}\n\n\treturn bytes;\n}\n\nexport type PartialWithUndefined<T> = {\n\t[K in keyof T]?: T[K] | undefined;\n};\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport { getColumnNameAndConfig } from '~/utils.ts';\nimport { PgColumn } from './common.ts';\nimport { PgIntColumnBuilder } from './int.common.ts';\n\nexport class PgBigInt53Builder extends PgIntColumnBuilder<{\n\tdataType: 'number int53';\n\tdata: number;\n\tdriverParam: number | string;\n}> {\n\tstatic override readonly [entityKind]: string = 'PgBigInt53Builder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'number int53', 'PgBigInt53');\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgBigInt53(table, this.config as any);\n\t}\n}\n\nexport class PgBigInt53 extends PgColumn<'number int53'> {\n\tstatic override readonly [entityKind]: string = 'PgBigInt53';\n\n\t/** @internal */\n\toverride readonly codec = 'bigint:number';\n\n\tgetSQLType(): string {\n\t\treturn 'bigint';\n\t}\n}\n\nexport class PgBigInt64Builder extends PgIntColumnBuilder<{\n\tdataType: 'bigint int64';\n\tdata: bigint;\n\tdriverParam: string;\n}> {\n\tstatic override readonly [entityKind]: string = 'PgBigInt64Builder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'bigint int64', 'PgBigInt64');\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgBigInt64(table, this.config as any);\n\t}\n}\n\nexport class PgBigInt64 extends PgColumn<'bigint int64'> {\n\tstatic override readonly [entityKind]: string = 'PgBigInt64';\n\n\t/** @internal */\n\toverride readonly codec = 'bigint';\n\n\tgetSQLType(): string {\n\t\treturn 'bigint';\n\t}\n}\n\nexport class PgBigIntStringBuilder extends PgIntColumnBuilder<{\n\tdataType: 'string int64';\n\tdata: string;\n\tdriverParam: string;\n}> {\n\tstatic override readonly [entityKind]: string = 'PgBigIntStringBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'string int64', 'PgBigIntString');\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgBigIntString(table, this.config as any);\n\t}\n}\n\nexport class PgBigIntString extends PgColumn<'string int64'> {\n\tstatic override readonly [entityKind]: string = 'PgBigIntString';\n\n\t/** @internal */\n\toverride readonly codec = 'bigint:string';\n\n\tgetSQLType(): string {\n\t\treturn 'bigint';\n\t}\n}\n\nexport interface PgBigIntConfig<T extends 'number' | 'bigint' | 'string' = 'number' | 'bigint' | 'string'> {\n\tmode: T;\n}\n\nexport function bigint<TMode extends PgBigIntConfig['mode']>(\n\tconfig: PgBigIntConfig<TMode>,\n): TMode extends 'string' ? PgBigIntStringBuilder : TMode extends 'bigint' ? PgBigInt64Builder : PgBigInt53Builder;\nexport function bigint<TMode extends PgBigIntConfig['mode']>(\n\tname: string,\n\tconfig: PgBigIntConfig<TMode>,\n): TMode extends 'string' ? PgBigIntStringBuilder : TMode extends 'bigint' ? PgBigInt64Builder : PgBigInt53Builder;\nexport function bigint(a: string | PgBigIntConfig, b?: PgBigIntConfig) {\n\tconst { name, config } = getColumnNameAndConfig<PgBigIntConfig>(a, b);\n\tif (config.mode === 'number') {\n\t\treturn new PgBigInt53Builder(name);\n\t}\n\tif (config.mode === 'string') {\n\t\treturn new PgBigIntStringBuilder(name);\n\t}\n\treturn new PgBigInt64Builder(name);\n}\n","import { entityKind } from '~/entity.ts';\nimport { getColumnNameAndConfig } from '~/utils.ts';\nimport type { PgTable } from '../table.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport class PgBigSerial53Builder extends PgColumnBuilder<{\n\tdataType: 'number int53';\n\tdata: number;\n\tdriverParam: number;\n\tnotNull: true;\n\thasDefault: true;\n}> {\n\tstatic override readonly [entityKind]: string = 'PgBigSerial53Builder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'number int53', 'PgBigSerial53');\n\t\tthis.config.hasDefault = true;\n\t\tthis.config.notNull = true;\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgBigSerial53(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class PgBigSerial53 extends PgColumn<'number int53'> {\n\tstatic override readonly [entityKind]: string = 'PgBigSerial53';\n\n\t/** @internal */\n\toverride readonly codec = 'bigserial:number';\n\n\tgetSQLType(): string {\n\t\treturn 'bigserial';\n\t}\n}\n\nexport class PgBigSerial64Builder extends PgColumnBuilder<{\n\tdataType: 'bigint int64';\n\tdata: bigint;\n\tdriverParam: string;\n\tnotNull: true;\n\thasDefault: true;\n}> {\n\tstatic override readonly [entityKind]: string = 'PgBigSerial64Builder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'bigint int64', 'PgBigSerial64');\n\t\tthis.config.hasDefault = true;\n\t\tthis.config.notNull = true;\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgBigSerial64(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class PgBigSerial64 extends PgColumn<'bigint int64'> {\n\tstatic override readonly [entityKind]: string = 'PgBigSerial64';\n\n\t/** @internal */\n\toverride readonly codec = 'bigserial';\n\n\tgetSQLType(): string {\n\t\treturn 'bigserial';\n\t}\n}\n\nexport interface PgBigSerialConfig<T extends 'number' | 'bigint' = 'number' | 'bigint'> {\n\tmode: T;\n}\n\nexport function bigserial<TMode extends PgBigSerialConfig['mode']>(\n\tconfig: PgBigSerialConfig<TMode>,\n): TMode extends 'number' ? PgBigSerial53Builder : PgBigSerial64Builder;\nexport function bigserial<TMode extends PgBigSerialConfig['mode']>(\n\tname: string,\n\tconfig: PgBigSerialConfig<TMode>,\n): TMode extends 'number' ? PgBigSerial53Builder : PgBigSerial64Builder;\nexport function bigserial(a: string | PgBigSerialConfig, b?: PgBigSerialConfig) {\n\tconst { name, config } = getColumnNameAndConfig<PgBigSerialConfig>(a, b);\n\tif (config.mode === 'number') {\n\t\treturn new PgBigSerial53Builder(name);\n\t}\n\treturn new PgBigSerial64Builder(name);\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport class PgBooleanBuilder extends PgColumnBuilder<{\n\tdataType: 'boolean';\n\tdata: boolean;\n\tdriverParam: boolean;\n}> {\n\tstatic override readonly [entityKind]: string = 'PgBooleanBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'boolean', 'PgBoolean');\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgBoolean(table, this.config as any);\n\t}\n}\n\nexport class PgBoolean extends PgColumn<'boolean'> {\n\tstatic override readonly [entityKind]: string = 'PgBoolean';\n\n\t/** @internal */\n\toverride readonly codec = 'bool';\n\n\tgetSQLType(): string {\n\t\treturn 'boolean';\n\t}\n}\n\nexport function boolean(name?: string): PgBooleanBuilder {\n\treturn new PgBooleanBuilder(name ?? '');\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport { type Equal, getColumnNameAndConfig, type Writable } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\ntype PgCharBuilderConfig<TEnum extends [string, ...string[]]> = Equal<TEnum, [string, ...string[]]> extends true\n\t? { dataType: 'string'; data: string; driverParam: string }\n\t: { dataType: 'string enum'; data: TEnum[number]; enumValues: TEnum; driverParam: string };\n\nexport class PgCharBuilder<TEnum extends [string, ...string[]] = [string, ...string[]]> extends PgColumnBuilder<\n\tPgCharBuilderConfig<TEnum>,\n\t{ enumValues: TEnum; length: number; setLength: boolean }\n> {\n\tstatic override readonly [entityKind]: string = 'PgCharBuilder';\n\n\tconstructor(name: string, config: PgCharConfig<TEnum>) {\n\t\tsuper(name, config.enum?.length ? 'string enum' : 'string', 'PgChar');\n\t\tthis.config.length = config.length ?? 1;\n\t\tthis.config.setLength = config.length !== undefined;\n\t\tthis.config.enumValues = config.enum as TEnum;\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgChar(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class PgChar<TEnum extends [string, ...string[]] = [string, ...string[]]>\n\textends PgColumn<Equal<TEnum, [string, ...string[]]> extends true ? 'string' : 'string enum'>\n{\n\tstatic override readonly [entityKind]: string = 'PgChar';\n\n\t/** @internal */\n\toverride readonly codec = 'char';\n\n\toverride readonly enumValues: TEnum;\n\tprivate readonly setLength: boolean;\n\n\tconstructor(table: PgTable<any>, config: PgCharBuilder<TEnum>['config']) {\n\t\tsuper(table, config as any);\n\t\tthis.enumValues = config.enumValues;\n\t\tthis.setLength = config.setLength;\n\t}\n\n\tgetSQLType(): string {\n\t\treturn this.setLength ? `char(${this.length})` : `char`;\n\t}\n}\n\nexport interface PgCharConfig<\n\tTEnum extends readonly string[] | string[] | undefined = readonly string[] | string[] | undefined,\n> {\n\tenum?: TEnum;\n\tlength?: number;\n}\n\nexport function char(): PgCharBuilder;\nexport function char(name: string): PgCharBuilder;\nexport function char(config: { length?: number }): PgCharBuilder;\nexport function char(name: string, config: { length?: number }): PgCharBuilder;\nexport function char<U extends string, T extends Readonly<[U, ...U[]]>>(\n\tconfig: PgCharConfig<T | Writable<T>> & { enum: T | Writable<T> },\n): PgCharBuilder<Writable<T>>;\nexport function char<U extends string, T extends Readonly<[U, ...U[]]>>(\n\tname: string,\n\tconfig: PgCharConfig<T | Writable<T>> & { enum: T | Writable<T> },\n): PgCharBuilder<Writable<T>>;\nexport function char(a?: string | PgCharConfig, b: PgCharConfig = {}): any {\n\tconst { name, config } = getColumnNameAndConfig<PgCharConfig>(a, b);\n\treturn new PgCharBuilder(name, config as any);\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '../table.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport class PgCidrBuilder extends PgColumnBuilder<{\n\tdataType: 'string cidr';\n\tdata: string;\n\tdriverParam: string;\n}> {\n\tstatic override readonly [entityKind]: string = 'PgCidrBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'string cidr', 'PgCidr');\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgCidr(table, this.config as any);\n\t}\n}\n\nexport class PgCidr extends PgColumn<'string cidr'> {\n\tstatic override readonly [entityKind]: string = 'PgCidr';\n\n\t/** @internal */\n\toverride readonly codec = 'cidr';\n\n\tgetSQLType(): string {\n\t\treturn 'cidr';\n\t}\n}\n\nexport function cidr(name?: string): PgCidrBuilder {\n\treturn new PgCidrBuilder(name ?? '');\n}\n","function parsePgArrayValue(arrayString: string, startFrom: number, inQuotes: boolean): [string, number] {\n\tfor (let i = startFrom; i < arrayString.length; i++) {\n\t\tconst char = arrayString[i];\n\n\t\tif (char === '\\\\') {\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === '\"') {\n\t\t\treturn [arrayString.slice(startFrom, i).replace(/\\\\/g, ''), i + 1];\n\t\t}\n\n\t\tif (inQuotes) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === ',' || char === '}') {\n\t\t\treturn [arrayString.slice(startFrom, i).replace(/\\\\/g, ''), i];\n\t\t}\n\t}\n\n\treturn [arrayString.slice(startFrom).replace(/\\\\/g, ''), arrayString.length];\n}\n\nexport function parsePgNestedArray(arrayString: string, startFrom = 0): [any[], number] {\n\tconst result: any[] = [];\n\tlet i = startFrom;\n\tlet lastCharIsComma = false;\n\n\twhile (i < arrayString.length) {\n\t\tconst char = arrayString[i];\n\n\t\tif (char === ',') {\n\t\t\tif (lastCharIsComma || i === startFrom) {\n\t\t\t\tresult.push('');\n\t\t\t}\n\t\t\tlastCharIsComma = true;\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\n\t\tlastCharIsComma = false;\n\n\t\tif (char === '\\\\') {\n\t\t\ti += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === '\"') {\n\t\t\tconst [value, startFrom] = parsePgArrayValue(arrayString, i + 1, true);\n\t\t\tresult.push(value);\n\t\t\ti = startFrom;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === '}') {\n\t\t\treturn [result, i + 1];\n\t\t}\n\n\t\tif (char === '{') {\n\t\t\tconst [value, startFrom] = parsePgNestedArray(arrayString, i + 1);\n\t\t\tresult.push(value);\n\t\t\ti = startFrom;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst [value, newStartFrom] = parsePgArrayValue(arrayString, i, false);\n\t\tresult.push(value);\n\t\ti = newStartFrom;\n\t}\n\n\treturn [result, i];\n}\n\nexport function parsePgArray(arrayString: string): any[] {\n\tconst [result] = parsePgNestedArray(arrayString, 1);\n\treturn result;\n}\n\nexport function makePgArray(array: any[]): string {\n\treturn `{${\n\t\tarray.map((item) => {\n\t\t\tif (Array.isArray(item)) {\n\t\t\t\treturn makePgArray(item);\n\t\t\t}\n\n\t\t\tif (typeof item === 'string') {\n\t\t\t\treturn `\"${item.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')}\"`;\n\t\t\t}\n\n\t\t\treturn `${item}`;\n\t\t}).join(',')\n\t}}`;\n}\n","import {\n\ttype CastArrayCodec,\n\ttype CastCodec,\n\ttype Codecs,\n\ttype NormalizeArrayCodec,\n\ttype NormalizeCodec,\n\trefineCodecs,\n} from '~/codecs.ts';\nimport { type Name, sql, type SQLChunk } from '~/sql/sql.ts';\nimport type { PartialWithUndefined } from '~/utils.ts';\nimport { makePgArray, parsePgArray } from './array.ts';\nimport { parseEWKB } from './columns/postgis_extension/utils.ts';\n\nexport type PostGISType =\n\t| 'geometry(point)'\n\t| 'geometry(pointz)'\n\t| 'geometry(pointm)'\n\t| 'geometry(pointzm)'\n\t| 'geometry(linestring)'\n\t| 'geometry(linestringz)'\n\t| 'geometry(linestringm)'\n\t| 'geometry(linestringzm)'\n\t| 'geometry(polygon)'\n\t| 'geometry(polygonz)'\n\t| 'geometry(polygonm)'\n\t| 'geometry(polygonzm)'\n\t| 'geometry(multipoint)'\n\t| 'geometry(multipointz)'\n\t| 'geometry(multipointm)'\n\t| 'geometry(multipointzm)'\n\t| 'geometry(multilinestring)'\n\t| 'geometry(multilinestringz)'\n\t| 'geometry(multilinestringm)'\n\t| 'geometry(multilinestringzm)'\n\t| 'geometry(multipolygon)'\n\t| 'geometry(multipolygonz)'\n\t| 'geometry(multipolygonm)'\n\t| 'geometry(multipolygonzm)'\n\t| 'geometry(geometrycollection)'\n\t| 'geometry(geometrycollectionz)'\n\t| 'geometry(geometrycollectionm)'\n\t| 'geometry(geometrycollectionzm)'\n\t| 'geometry(circularstring)'\n\t| 'geometry(circularstringz)'\n\t| 'geometry(circularstringm)'\n\t| 'geometry(circularstringzm)'\n\t| 'geometry(compoundcurve)'\n\t| 'geometry(compoundcurvez)'\n\t| 'geometry(compoundcurvem)'\n\t| 'geometry(compoundcurvezm)'\n\t| 'geometry(curvepolygon)'\n\t| 'geometry(curvepolygonz)'\n\t| 'geometry(curvepolygonm)'\n\t| 'geometry(curvepolygonzm)'\n\t| 'geometry(multicurve)'\n\t| 'geometry(multicurvez)'\n\t| 'geometry(multicurvem)'\n\t| 'geometry(multicurvezm)'\n\t| 'geometry(multisurface)'\n\t| 'geometry(multisurfacez)'\n\t| 'geometry(multisurfacem)'\n\t| 'geometry(multisurfacezm)'\n\t| 'geometry(polyhedralsurface)'\n\t| 'geometry(polyhedralsurfacez)'\n\t| 'geometry(polyhedralsurfacem)'\n\t| 'geometry(polyhedralsurfacezm)'\n\t| 'geometry(tin)'\n\t| 'geometry(tinz)'\n\t| 'geometry(tinm)'\n\t| 'geometry(tinzm)'\n\t| 'geometry(triangle)'\n\t| 'geometry(trianglez)'\n\t| 'geometry(trianglem)'\n\t| 'geometry(trianglezm)'\n\t| 'geography(point)'\n\t| 'geography(linestring)'\n\t| 'geography(polygon)'\n\t| 'geography(multipoint)'\n\t| 'geography(multilinestring)'\n\t| 'geography(multipolygon)'\n\t| 'geography(geometrycollection)'\n\t| 'box2d'\n\t| 'box3d'\n\t| 'raster';\n\nexport type PostgresType =\n\t// Numeric\n\t| 'smallint'\n\t| 'int'\n\t| 'bigint'\n\t| 'bigint:number'\n\t| 'bigint:string'\n\t| 'numeric'\n\t| 'numeric:number'\n\t| 'numeric:bigint'\n\t| 'float4'\n\t| 'float8'\n\t| 'money'\n\t| 'smallserial'\n\t| 'serial'\n\t| 'bigserial'\n\t| 'bigserial:number'\n\t// Text\n\t| 'char'\n\t| 'varchar'\n\t| 'text'\n\t// Binary\n\t| 'bytea'\n\t// Datetime\n\t| 'date'\n\t| 'date:string'\n\t| 'time'\n\t| 'timetz'\n\t| 'timestamp'\n\t| 'timestamptz'\n\t| 'timestamp:string'\n\t| 'timestamptz:string'\n\t| 'interval'\n\t| 'interval:tuple'\n\t// Boolean\n\t| 'bool'\n\t// Enumerated\n\t| 'enum'\n\t// Geometric\n\t| 'point'\n\t| 'point:tuple'\n\t| 'line'\n\t| 'line:tuple'\n\t| 'lseg'\n\t| 'box'\n\t| 'path'\n\t| 'polygon'\n\t| 'circle'\n\t// Network Address\n\t| 'cidr'\n\t| 'inet'\n\t| 'macaddr'\n\t| 'macaddr8'\n\t// Bit String\n\t| 'bit'\n\t| 'varbit'\n\t// Full-Text Search\n\t| 'tsvector'\n\t| 'tsquery'\n\t// UUID\n\t| 'uuid'\n\t// XML\n\t| 'xml'\n\t// JSON\n\t| 'json'\n\t| 'jsonb'\n\t// Range\n\t| 'int4range'\n\t| 'int8range'\n\t| 'numrange'\n\t| 'tsrange'\n\t| 'tstzrange'\n\t| 'daterange'\n\t// Multirange\n\t| 'int4multirange'\n\t| 'int8multirange'\n\t| 'nummultirange'\n\t| 'tsmultirange'\n\t| 'tstzmultirange'\n\t| 'datemultirange'\n\t// Object Identifier / System Reference\n\t| 'oid'\n\t| 'regproc'\n\t| 'regprocedure'\n\t| 'regoper'\n\t| 'regoperator'\n\t| 'regclass'\n\t| 'regtype'\n\t| 'regrole'\n\t| 'regnamespace'\n\t| 'regconfig'\n\t| 'regdictionary'\n\t// PostGIS\n\t| PostGISType\n\t| `${PostGISType}:tuple`\n\t// pgvector\n\t| 'halfvec'\n\t| 'sparsevec'\n\t| 'vector';\n\n// Some originals were swapped with aliases for simpler keys\nexport type PostgresAliasType =\n\t// Numeric\n\t| 'int2' // smallint\n\t| 'integer' // int\n\t| 'int4' // int\n\t| 'int8' // bigint\n\t| 'decimal' // numeric\n\t| 'real' // float4\n\t| 'double' // float8\n\t| 'double precision' // float8\n\t| 'serial2' // smallserial\n\t| 'serial4' // serial\n\t| 'serial8' // bigserial\n\t// Text\n\t| 'character' // char\n\t| 'character varying' // varchar\n\t// Datetime\n\t| 'time with time zone' // timetz\n\t| 'time without time zone' // timetz\n\t| 'timestamp with time zone' // timestamptz\n\t| 'timestamp without time zone' // timestamptz\n\t// Boolean\n\t| 'boolean' // bool\n\t// Bit String\n\t| 'bit varying'; // varbit;\n\nexport type PostgresColumnType =\n\t| PostgresType\n\t| PostgresAliasType;\n\nconst PG_ALIAS_TO_TYPE_MAP: Record<PostgresAliasType, PostgresType> = {\n\tint2: 'smallint',\n\tinteger: 'int',\n\tint4: 'int',\n\tint8: 'bigint',\n\tdecimal: 'numeric',\n\treal: 'float4',\n\tdouble: 'float8',\n\t'double precision': 'float8',\n\tserial2: 'smallserial',\n\tserial4: 'serial',\n\tserial8: 'bigserial',\n\tcharacter: 'char',\n\t'character varying': 'varchar',\n\t'time with time zone': 'timetz',\n\t'time without time zone': 'time',\n\t'timestamp with time zone': 'timestamptz',\n\t'timestamp without time zone': 'timestamp',\n\tboolean: 'bool',\n\t'bit varying': 'varbit',\n};\n\nexport function resolvePgTypeAlias(type: string) {\n\treturn (PG_ALIAS_TO_TYPE_MAP as Record<string, PostgresType | undefined>)[type] ?? type;\n}\n\n// Cross-type unions mutate data types\n// update codec based on type combination\nexport const unionsTypeTable = {\n\tsmallint: {\n\t\tsmallint: 'smallint',\n\t\tint: 'int',\n\t\tbigint: 'bigint:number',\n\t\t'bigint:number': 'bigint:number',\n\t\t'bigint:string': 'bigint:number',\n\t\tnumeric: 'numeric:number',\n\t\t'numeric:number': 'numeric:number',\n\t\t'numeric:bigint': 'numeric:number',\n\t\tfloat4: 'float4',\n\t\tfloat8: 'float8',\n\t\tsmallserial: 'smallint',\n\t\tserial: 'int',\n\t\tbigserial: 'bigint:number',\n\t\t'bigserial:number': 'bigint:number',\n\t\toid: 'oid',\n\t\tregproc: 'regproc',\n\t\tregprocedure: 'regprocedure',\n\t\tregoper: 'regoper',\n\t\tregoperator: 'regoperator',\n\t\tregclass: 'regclass',\n\t\tregtype: 'regtype',\n\t\tregrole: 'regrole',\n\t\tregnamespace: 'regnamespace',\n\t\tregconfig: 'regconfig',\n\t\tregdictionary: 'regdictionary',\n\t},\n\tint: {\n\t\tsmallint: 'int',\n\t\tint: 'int',\n\t\tbigint: 'bigint:number',\n\t\t'bigint:number': 'bigint:number',\n\t\t'bigint:string': 'bigint:number',\n\t\tnumeric: 'numeric:number',\n\t\t'numeric:number': 'numeric:number',\n\t\t'numeric:bigint': 'numeric:number',\n\t\tfloat4: 'float4',\n\t\tfloat8: 'float8',\n\t\tsmallserial: 'int',\n\t\tserial: 'int',\n\t\tbigserial: 'bigint:number',\n\t\t'bigserial:number': 'bigint:number',\n\t\toid: 'oid',\n\t\tregproc: 'regproc',\n\t\tregprocedure: 'regprocedure',\n\t\tregoper: 'regoper',\n\t\tregoperator: 'regoperator',\n\t\tregclass: 'regclass',\n\t\tregtype: 'regtype',\n\t\tregrole: 'regrole',\n\t\tregnamespace: 'regnamespace',\n\t\tregconfig: 'regconfig',\n\t\tregdictionary: 'regdictionary',\n\t},\n\tbigint: {\n\t\tsmallint: 'bigint',\n\t\tint: 'bigint',\n\t\tbigint: 'bigint',\n\t\t'bigint:number': 'bigint',\n\t\t'bigint:string': 'bigint',\n\t\tnumeric: 'numeric:bigint',\n\t\t'numeric:number': 'numeric:bigint',\n\t\t'numeric:bigint': 'numeric:bigint',\n\t\tfloat4: 'float4',\n\t\tfloat8: 'float8',\n\t\tsmallserial: 'bigint',\n\t\tserial: 'bigint',\n\t\tbigserial: 'bigint',\n\t\t'bigserial:number': 'bigint',\n\t\toid: 'oid',\n\t\tregproc: 'regproc',\n\t\tregprocedure: 'regprocedure',\n\t\tregoper: 'regoper',\n\t\tregoperator: 'regoperator',\n\t\tregclass: 'regclass',\n\t\tregtype: 'regtype',\n\t\tregrole: 'regrole',\n\t\tregnamespace: 'regnamespace',\n\t\tregconfig: 'regconfig',\n\t\tregdictionary: 'regdictionary',\n\t},\n\t'bigint:number': {\n\t\tsmallint: 'bigint:number',\n\t\tint: 'bigint:number',\n\t\tbigint: 'bigint:number',\n\t\t'bigint:number': 'bigint:number',\n\t\t'bigint:string': 'bigint:number',\n\t\tnumeric: 'numeric:number',\n\t\t'numeric:number': 'numeric:number',\n\t\t'numeric:bigint': 'numeric:number',\n\t\tfloat4: 'float4',\n\t\tfloat8: 'float8',\n\t\tsmallserial: 'bigint:number',\n\t\tserial: 'bigint:number',\n\t\tbigserial: 'bigint:number',\n\t\t'bigserial:number': 'bigint:number',\n\t\toid: 'oid',\n\t\tregproc: 'regproc',\n\t\tregprocedure: 'regprocedure',\n\t\tregoper: 'regoper',\n\t\tregoperator: 'regoperator',\n\t\tregclass: 'regclass',\n\t\tregtype: 'regtype',\n\t\tregrole: 'regrole',\n\t\tregnamespace: 'regnamespace',\n\t\tregconfig: 'regconfig',\n\t\tregdictionary: 'regdictionary',\n\t},\n\t'bigint:string': {\n\t\tsmallint: 'bigint:string',\n\t\tint: 'bigint:string',\n\t\tbigint: 'bigint:string',\n\t\t'bigint:number': 'bigint:string',\n\t\t'bigint:string': 'bigint:string',\n\t\tnumeric: 'numeric',\n\t\t'numeric:number': 'numeric',\n\t\t'numeric:bigint': 'numeric',\n\t\tfloat4: 'float4',\n\t\tfloat8: 'float8',\n\t\tsmallserial: 'bigint:string',\n\t\tserial: 'bigint:string',\n\t\tbigserial: 'bigint:string',\n\t\t'bigserial:number': 'bigint:string',\n\t\toid: 'oid',\n\t\tregproc: 'regproc',\n\t\tregprocedure: 'regprocedure',\n\t\tregoper: 'regoper',\n\t\tregoperator: 'regoperator',\n\t\tregclass: 'regclass',\n\t\tregtype: 'regtype',\n\t\tregrole: 'regrole',\n\t\tregnamespace: 'regnamespace',\n\t\tregconfig: 'regconfig',\n\t\tregdictionary: 'regdictionary',\n\t},\n\tnumeric: {\n\t\tsmallint: 'numeric',\n\t\tint: 'numeric',\n\t\tbigint: 'numeric',\n\t\t'bigint:number': 'numeric',\n\t\t'bigint:string': 'numeric',\n\t\tnumeric: 'numeric',\n\t\t'numeric:number': 'numeric',\n\t\t'numeric:bigint': 'numeric',\n\t\tfloat4: 'float4',\n\t\tfloat8: 'float8',\n\t\tsmallserial: 'numeric',\n\t\tserial: 'numeric',\n\t\tbigserial: 'numeric',\n\t\t'bigserial:number': 'numeric',\n\t},\n\t'numeric:number': {\n\t\tsmallint: 'numeric:number',\n\t\tint: 'numeric:number',\n\t\tbigint: 'numeric:number',\n\t\t'bigint:number': 'numeric:number',\n\t\t'bigint:string': 'numeric:number',\n\t\tnumeric: 'numeric:number',\n\t\t'numeric:number': 'numeric:number',\n\t\t'numeric:bigint': 'numeric:number',\n\t\tfloat4: 'float4',\n\t\tfloat8: 'float8',\n\t\tsmallserial: 'numeric:number',\n\t\tserial: 'numeric:number',\n\t\tbigserial: 'numeric:number',\n\t\t'bigserial:number': 'numeric:number',\n\t},\n\t'numeric:bigint': {\n\t\tsmallint: 'numeric:bigint',\n\t\tint: 'numeric:bigint',\n\t\tbigint: 'numeric:bigint',\n\t\t'bigint:number': 'numeric:bigint',\n\t\t'bigint:string': 'numeric:bigint',\n\t\tnumeric: 'numeric:bigint',\n\t\t'numeric:number': 'numeric:bigint',\n\t\t'numeric:bigint': 'numeric:bigint',\n\t\tfloat4: 'float4',\n\t\tfloat8: 'float8',\n\t\tsmallserial: 'numeric:bigint',\n\t\tserial: 'numeric:bigint',\n\t\tbigserial: 'numeric:bigint',\n\t\t'bigserial:number': 'numeric:bigint',\n\t},\n\tfloat4: {\n\t\tsmallint: 'float4',\n\t\tint: 'float4',\n\t\tbigint: 'float4',\n\t\t'bigint:number': 'float4',\n\t\t'bigint:string': 'float4',\n\t\tnumeric: 'float4',\n\t\t'numeric:number': 'float4',\n\t\t'numeric:bigint': 'float4',\n\t\tfloat4: 'float4',\n\t\tfloat8: 'float8',\n\t\tsmallserial: 'float4',\n\t\tserial: 'float4',\n\t\tbigserial: 'float4',\n\t\t'bigserial:number': 'float4',\n\t},\n\tfloat8: {\n\t\tsmallint: 'float8',\n\t\tint: 'float8',\n\t\tbigint: 'float8',\n\t\t'bigint:number': 'float8',\n\t\t'bigint:string': 'float8',\n\t\tnumeric: 'float8',\n\t\t'numeric:number': 'float8',\n\t\t'numeric:bigint': 'float8',\n\t\tfloat4: 'float8',\n\t\tfloat8: 'float8',\n\t\tsmallserial: 'float8',\n\t\tserial: 'float8',\n\t\tbigserial: 'float8',\n\t\t'bigserial:number': 'float8',\n\t},\n\tmoney: {\n\t\tmoney: 'money',\n\t},\n\tsmallserial: {\n\t\tsmallint: 'smallint',\n\t\tint: 'int',\n\t\tbigint: 'bigint:number',\n\t\t'bigint:number': 'bigint:number',\n\t\t'bigint:string': 'bigint:number',\n\t\tnumeric: 'numeric:number',\n\t\t'numeric:number': 'numeric:number',\n\t\t'numeric:bigint': 'numeric:number',\n\t\tfloat4: 'float4',\n\t\tfloat8: 'float8',\n\t\tsmallserial: 'smallint',\n\t\tserial: 'int',\n\t\tbigserial: 'bigint:number',\n\t\t'bigserial:number': 'bigint:number',\n\t\toid: 'oid',\n\t\tregproc: 'regproc',\n\t\tregprocedure: 'regprocedure',\n\t\tregoper: 'regoper',\n\t\tregoperator: 'regoperator',\n\t\tregclass: 'regclass',\n\t\tregtype: 'regtype',\n\t\tregrole: 'regrole',\n\t\tregnamespace: 'regnamespace',\n\t\tregconfig: 'regconfig',\n\t\tregdictionary: 'regdictionary',\n\t},\n\tserial: {\n\t\tsmallint: 'int',\n\t\tint: 'int',\n\t\tbigint: 'bigint:number',\n\t\t'bigint:number': 'bigint:number',\n\t\t'bigint:string': 'bigint:number',\n\t\tnumeric: 'numeric:number',\n\t\t'numeric:number': 'numeric:number',\n\t\t'numeric:bigint': 'numeric:number',\n\t\tfloat4: 'float4',\n\t\tfloat8: 'float8',\n\t\tsmallserial: 'int',\n\t\tserial: 'int',\n\t\tbigserial: 'bigint:number',\n\t\t'bigserial:number': 'bigint:number',\n\t\toid: 'oid',\n\t\tregproc: 'regproc',\n\t\tregprocedure: 'regprocedure',\n\t\tregoper: 'regoper',\n\t\tregoperator: 'regoperator',\n\t\tregclass: 'regclass',\n\t\tregtype: 'regtype',\n\t\tregrole: 'regrole',\n\t\tregnamespace: 'regnamespace',\n\t\tregconfig: 'regconfig',\n\t\tregdictionary: 'regdictionary',\n\t},\n\tbigserial: {\n\t\tsmallint: 'bigint',\n\t\tint: 'bigint',\n\t\tbigint: 'bigint',\n\t\t'bigint:number': 'bigint',\n\t\t'bigint:string': 'bigint',\n\t\tnumeric: 'numeric:bigint',\n\t\t'numeric:number': 'numeric:bigint',\n\t\t'numeric:bigint': 'numeric:bigint',\n\t\tfloat4: 'float4',\n\t\tfloat8: 'float8',\n\t\tsmallserial: 'bigint',\n\t\tserial: 'bigint',\n\t\tbigserial: 'bigint',\n\t\t'bigserial:number': 'bigint',\n\t\toid: 'oid',\n\t\tregproc: 'regproc',\n\t\tregprocedure: 'regprocedure',\n\t\tregoper: 'regoper',\n\t\tregoperator: 'regoperator',\n\t\tregclass: 'regclass',\n\t\tregtype: 'regtype',\n\t\tregrole: 'regrole',\n\t\tregnamespace: 'regnamespace',\n\t\tregconfig: 'regconfig',\n\t\tregdictionary: 'regdictionary',\n\t},\n\t'bigserial:number': {\n\t\tsmallint: 'bigint:number',\n\t\tint: 'bigint:number',\n\t\tbigint: 'bigint:number',\n\t\t'bigint:number': 'bigint:number',\n\t\t'bigint:string': 'bigint:number',\n\t\tnumeric: 'numeric:number',\n\t\t'numeric:number': 'numeric:number',\n\t\t'numeric:bigint': 'numeric:number',\n\t\tfloat4: 'float4',\n\t\tfloat8: 'float8',\n\t\tsmallserial: 'bigint:number',\n\t\tserial: 'bigint:number',\n\t\tbigserial: 'bigint:number',\n\t\t'bigserial:number': 'bigint:number',\n\t\toid: 'oid',\n\t\tregproc: 'regproc',\n\t\tregprocedure: 'regprocedure',\n\t\tregoper: 'regoper',\n\t\tregoperator: 'regoperator',\n\t\tregclass: 'regclass',\n\t\tregtype: 'regtype',\n\t\tregrole: 'regrole',\n\t\tregnamespace: 'regnamespace',\n\t\tregconfig: 'regconfig',\n\t\tregdictionary: 'regdictionary',\n\t},\n\tchar: {\n\t\tchar: 'char',\n\t\tvarchar: 'char',\n\t\ttext: 'char',\n\t},\n\tvarchar: {\n\t\tchar: 'varchar',\n\t\tvarchar: 'varchar',\n\t\ttext: 'varchar',\n\t},\n\ttext: {\n\t\tchar: 'text',\n\t\tvarchar: 'text',\n\t\ttext: 'text',\n\t},\n\tbytea: {\n\t\tbytea: 'bytea',\n\t},\n\tdate: {\n\t\tdate: 'date',\n\t\t'date:string': 'date',\n\t\ttimestamp: 'timestamp',\n\t\t'timestamp:string': 'timestamp',\n\t\ttimestamptz: 'timestamptz',\n\t\t'timestamptz:string': 'timestamptz',\n\t},\n\t'date:string': {\n\t\tdate: 'date:string',\n\t\t'date:string': 'date:string',\n\t\ttimestamp: 'timestamp:string',\n\t\t'timestamp:string': 'timestamp:string',\n\t\ttimestamptz: 'timestamptz:string',\n\t\t'timestamptz:string': 'timestamptz:string',\n\t},\n\ttime: {\n\t\ttime: 'time',\n\t\ttimetz: 'timetz',\n\t},\n\ttimetz: {\n\t\ttime: 'timetz',\n\t\ttimetz: 'timetz',\n\t},\n\ttimestamp: {\n\t\tdate: 'timestamp',\n\t\t'date:string': 'timestamp',\n\t\ttimestamp: 'timestamp',\n\t\t'timestamp:string': 'timestamp',\n\t\ttimestamptz: 'timestamptz',\n\t\t'timestamptz:string': 'timestamptz',\n\t},\n\t'timestamp:string': {\n\t\tdate: 'timestamp:string',\n\t\t'date:string': 'timestamp:string',\n\t\ttimestamp: 'timestamp:string',\n\t\t'timestamp:string': 'timestamp:string',\n\t\ttimestamptz: 'timestamptz:string',\n\t\t'timestamptz:string': 'timestamptz:string',\n\t},\n\ttimestamptz: {\n\t\tdate: 'timestamptz',\n\t\t'date:string': 'timestamptz',\n\t\ttimestamp: 'timestamptz',\n\t\t'timestamp:string': 'timestamptz',\n\t\ttimestamptz: 'timestamptz',\n\t\t'timestamptz:string': 'timestamptz',\n\t},\n\t'timestamptz:string': {\n\t\tdate: 'timestamptz:string',\n\t\t'date:string': 'timestamptz:string',\n\t\ttimestamp: 'timestamptz:string',\n\t\t'timestamp:string': 'timestamptz:string',\n\t\ttimestamptz: 'timestamptz:string',\n\t\t'timestamptz:string': 'timestamptz:string',\n\t},\n\tinterval: {\n\t\tinterval: 'interval',\n\t\t'interval:tuple': 'interval',\n\t},\n\t'interval:tuple': {\n\t\tinterval: 'interval:tuple',\n\t\t'interval:tuple': 'interval:tuple',\n\t},\n\tbool: {\n\t\tbool: 'bool',\n\t},\n\tenum: {\n\t\tenum: 'enum',\n\t},\n\tpoint: {\n\t\tpoint: 'point',\n\t\t'point:tuple': 'point',\n\t},\n\t'point:tuple': {\n\t\tpoint: 'point:tuple',\n\t\t'point:tuple': 'point:tuple',\n\t},\n\tline: {\n\t\tline: 'line',\n\t\t'line:tuple': 'line',\n\t},\n\t'line:tuple': {\n\t\tline: 'line:tuple',\n\t\t'line:tuple': 'line:tuple',\n\t},\n\tlseg: {\n\t\tlseg: 'lseg',\n\t},\n\tbox: {\n\t\tbox: 'box',\n\t},\n\tpath: {\n\t\tpath: 'path',\n\t},\n\tpolygon: {\n\t\tpolygon: 'polygon',\n\t},\n\tcircle: {\n\t\tcircle: 'circle',\n\t},\n\tcidr: {\n\t\tcidr: 'cidr',\n\t\tinet: 'inet',\n\t},\n\tinet: {\n\t\tcidr: 'inet',\n\t\tinet: 'inet',\n\t},\n\tmacaddr: {\n\t\tmacaddr: 'macaddr',\n\t\tmacaddr8: 'macaddr',\n\t},\n\tmacaddr8: {\n\t\tmacaddr: 'macaddr8',\n\t\tmacaddr8: 'macaddr8',\n\t},\n\tbit: {\n\t\tbit: 'bit',\n\t\tvarbit: 'bit',\n\t},\n\tvarbit: {\n\t\tbit: 'varbit',\n\t\tvarbit: 'varbit',\n\t},\n\ttsvector: {\n\t\ttsvector: 'tsvector',\n\t},\n\ttsquery: {\n\t\ttsquery: 'tsquery',\n\t},\n\tuuid: {\n\t\tuuid: 'uuid',\n\t},\n\txml: {\n\t\txml: 'xml',\n\t},\n\tjson: {\n\t\tjson: 'json',\n\t},\n\tjsonb: {\n\t\tjsonb: 'jsonb',\n\t},\n\tint4range: {\n\t\tint4range: 'int4range',\n\t},\n\tint8range: {\n\t\tint8range: 'int8range',\n\t},\n\tnumrange: {\n\t\tnumrange: 'numrange',\n\t},\n\ttsrange: {\n\t\ttsrange: 'tsrange',\n\t},\n\ttstzrange: {\n\t\ttstzrange: 'tstzrange',\n\t},\n\tdaterange: {\n\t\tdaterange: 'daterange',\n\t},\n\tint4multirange: {\n\t\tint4multirange: 'int4multirange',\n\t},\n\tint8multirange: {\n\t\tint8multirange: 'int8multirange',\n\t},\n\tnummultirange: {\n\t\tnummultirange: 'nummultirange',\n\t},\n\ttsmultirange: {\n\t\ttsmultirange: 'tsmultirange',\n\t},\n\ttstzmultirange: {\n\t\ttstzmultirange: 'tstzmultirange',\n\t},\n\tdatemultirange: {\n\t\tdatemultirange: 'datemultirange',\n\t},\n\toid: {\n\t\tsmallint: 'oid',\n\t\tint: 'oid',\n\t\tbigint: 'oid',\n\t\t'bigint:number': 'oid',\n\t\t'bigint:string': 'oid',\n\t\tsmallserial: 'oid',\n\t\tserial: 'oid',\n\t\tbigserial: 'oid',\n\t\t'bigserial:number': 'oid',\n\t\toid: 'oid',\n\t\tregproc: 'oid',\n\t\tregprocedure: 'oid',\n\t\tregoper: 'oid',\n\t\tregoperator: 'oid',\n\t\tregclass: 'oid',\n\t\tregtype: 'oid',\n\t\tregrole: 'oid',\n\t\tregnamespace: 'oid',\n\t\tregconfig: 'oid',\n\t\tregdictionary: 'oid',\n\t},\n\tregproc: {\n\t\tsmallint: 'regproc',\n\t\tint: 'regproc',\n\t\tbigint: 'regproc',\n\t\t'bigint:number': 'regproc',\n\t\t'bigint:string': 'regproc',\n\t\tsmallserial: 'regproc',\n\t\tserial: 'regproc',\n\t\tbigserial: 'regproc',\n\t\t'bigserial:number': 'regproc',\n\t\toid: 'regproc',\n\t\tregproc: 'regproc',\n\t\tregprocedure: 'regproc',\n\t},\n\tregprocedure: {\n\t\tsmallint: 'regprocedure',\n\t\tint: 'regprocedure',\n\t\tbigint: 'regprocedure',\n\t\t'bigint:number': 'regprocedure',\n\t\t'bigint:string': 'regprocedure',\n\t\tsmallserial: 'regprocedure',\n\t\tserial: 'regprocedure',\n\t\tbigserial: 'regprocedure',\n\t\t'bigserial:number': 'regprocedure',\n\t\toid: 'regprocedure',\n\t\tregproc: 'regprocedure',\n\t\tregprocedure: 'regprocedure',\n\t},\n\tregoper: {\n\t\tsmallint: 'regoper',\n\t\tint: 'regoper',\n\t\tbigint: 'regoper',\n\t\t'bigint:number': 'regoper',\n\t\t'bigint:string': 'regoper',\n\t\tsmallserial: 'regoper',\n\t\tserial: 'regoper',\n\t\tbigserial: 'regoper',\n\t\t'bigserial:number': 'regoper',\n\t\toid: 'regoper',\n\t\tregoper: 'regoper',\n\t\tregoperator: 'regoper',\n\t},\n\tregoperator: {\n\t\tsmallint: 'regoperator',\n\t\tint: 'regoperator',\n\t\tbigint: 'regoperator',\n\t\t'bigint:number': 'regoperator',\n\t\t'bigint:string': 'regoperator',\n\t\tsmallserial: 'regoperator',\n\t\tserial: 'regoperator',\n\t\tbigserial: 'regoperator',\n\t\t'bigserial:number': 'regoperator',\n\t\toid: 'regoperator',\n\t\tregoper: 'regoperator',\n\t\tregoperator: 'regoperator',\n\t},\n\tregclass: {\n\t\tsmallint: 'regclass',\n\t\tint: 'regclass',\n\t\tbigint: 'regclass',\n\t\t'bigint:number': 'regclass',\n\t\t'bigint:string': 'regclass',\n\t\tsmallserial: 'regclass',\n\t\tserial: 'regclass',\n\t\tbigserial: 'regclass',\n\t\t'bigserial:number': 'regclass',\n\t\toid: 'regclass',\n\t\tregclass: 'regclass',\n\t},\n\tregtype: {\n\t\tsmallint: 'regtype',\n\t\tint: 'regtype',\n\t\tbigint: 'regtype',\n\t\t'bigint:number': 'regtype',\n\t\t'bigint:string': 'regtype',\n\t\tsmallserial: 'regtype',\n\t\tserial: 'regtype',\n\t\tbigserial: 'regtype',\n\t\t'bigserial:number': 'regtype',\n\t\toid: 'regtype',\n\t\tregtype: 'regtype',\n\t},\n\tregrole: {\n\t\tsmallint: 'regrole',\n\t\tint: 'regrole',\n\t\tbigint: 'regrole',\n\t\t'bigint:number': 'regrole',\n\t\t'bigint:string': 'regrole',\n\t\tsmallserial: 'regrole',\n\t\tserial: 'regrole',\n\t\tbigserial: 'regrole',\n\t\t'bigserial:number': 'regrole',\n\t\toid: 'regrole',\n\t\tregrole: 'regrole',\n\t},\n\tregnamespace: {\n\t\tsmallint: 'regnamespace',\n\t\tint: 'regnamespace',\n\t\tbigint: 'regnamespace',\n\t\t'bigint:number': 'regnamespace',\n\t\t'bigint:string': 'regnamespace',\n\t\tsmallserial: 'regnamespace',\n\t\tserial: 'regnamespace',\n\t\tbigserial: 'regnamespace',\n\t\t'bigserial:number': 'regnamespace',\n\t\toid: 'regnamespace',\n\t\tregnamespace: 'regnamespace',\n\t},\n\tregconfig: {\n\t\tsmallint: 'regconfig',\n\t\tint: 'regconfig',\n\t\tbigint: 'regconfig',\n\t\t'bigint:number': 'regconfig',\n\t\t'bigint:string': 'regconfig',\n\t\tsmallserial: 'regconfig',\n\t\tserial: 'regconfig',\n\t\tbigserial: 'regconfig',\n\t\t'bigserial:number': 'regconfig',\n\t\toid: 'regconfig',\n\t\tregconfig: 'regconfig',\n\t},\n\tregdictionary: {\n\t\tsmallint: 'regdictionary',\n\t\tint: 'regdictionary',\n\t\tbigint: 'regdictionary',\n\t\t'bigint:number': 'regdictionary',\n\t\t'bigint:string': 'regdictionary',\n\t\tsmallserial: 'regdictionary',\n\t\tserial: 'regdictionary',\n\t\tbigserial: 'regdictionary',\n\t\t'bigserial:number': 'regdictionary',\n\t\toid: 'regdictionary',\n\t\tregdictionary: 'regdictionary',\n\t},\n} as const satisfies Partial<Record<PostgresColumnType, Partial<Record<PostgresColumnType, PostgresColumnType>>>>;\n\nexport type PgCodecs = Codecs<PostgresType>;\n\nexport const castToText: CastCodec = (name) => sql`${name}::text`;\nexport const castToTextArr: CastArrayCodec = (name, arrayDimensions) =>\n\tsql`${name}::text${sql.raw('[]'.repeat(arrayDimensions))}`;\n\n/** Used for cases when casting requires to unwrap and rebuild arrays\n *\n * @example\n * string_mtx::text[][] // can be casted to array directly\n *\n * encode(bytea_mtx, 'base64')[][] // invalid syntax, cast requires unwrapping and rebuilding array\n */\nexport const arrayCompatCast = (cast: CastCodec) =>\n(\n\tname: SQLChunk,\n\tarrayDimensions: number | undefined,\n): SQLChunk => {\n\tif (!arrayDimensions) return cast(name);\n\n\tconst aliases: Name[] = [];\n\tfor (let i = 0; i < arrayDimensions; i++) {\n\t\taliases.push(sql.identifier(`s${i}`));\n\t}\n\n\tlet indexed = name;\n\tfor (const alias of aliases) {\n\t\tindexed = sql`${indexed}[${alias}]`;\n\t}\n\n\tlet expression = sql`array(\\\nselect ${cast(indexed)} \\\nfrom generate_subscripts(${name}, ${sql.raw(arrayDimensions.toString())}) ${aliases[arrayDimensions - 1]} \\\norder by ${aliases[arrayDimensions - 1]})`;\n\n\tfor (let dim = arrayDimensions - 1; dim > 0; dim--) {\n\t\texpression = sql`array(\\\nselect ${expression} \\\nfrom generate_subscripts(${name}, ${sql.raw(dim.toString())}) ${aliases[dim - 1]} \\\norder by ${aliases[dim - 1]})`;\n\t}\n\n\t// Otherwise null returns as []\n\treturn sql`case when ${name} is null then null else ${expression} end`;\n};\n\n/** Used to recursively apply value normalizer to array of unknown dimensions */\nexport const arrayCompatNormalize = (normalize: NormalizeCodec) => {\n\tconst loop: NormalizeArrayCodec = (value, arrayDimensions) => {\n\t\tconst innerDimensions = arrayDimensions - 1;\n\t\tif (arrayDimensions > 1) {\n\t\t\tfor (let i = 0; i < (value as unknown[][]).length; ++i) {\n\t\t\t\tloop((value as unknown[][])[i]!, innerDimensions);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (let i = 0; i < (value as unknown[][]).length; ++i) {\n\t\t\t\tvalue[i] = normalize((value as unknown[][])[i]!);\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t};\n\n\treturn loop;\n};\n\n/** Doesn't mutate original data - used for insertions */\nexport const arrayCompatNormalizeInput = (normalize: NormalizeCodec, transformToPgArray = false) => {\n\tconst loop: NormalizeArrayCodec = (value, arrayDimensions): any => {\n\t\tconst innerDimensions = arrayDimensions - 1;\n\t\tconst out = Array.from({ length: value.length });\n\t\tif (arrayDimensions > 1) {\n\t\t\tfor (let i = 0; i < (value as unknown[][]).length; ++i) {\n\t\t\t\tout[i] = loop((value as unknown[][])[i]!, innerDimensions);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (let i = 0; i < (value as unknown[][]).length; ++i) {\n\t\t\t\tout[i] = normalize((value as unknown[][])[i]!);\n\t\t\t}\n\t\t}\n\n\t\treturn out;\n\t};\n\n\treturn transformToPgArray ? (v: any, d: number) => makePgArray(loop(v, d)) : loop;\n};\n\n/** Parses a raw PG array text representation, then applies a per-item normalizer */\nexport const parsePgArrayAndNormalize = (normalize: NormalizeCodec): NormalizeArrayCodec => {\n\tconst codec = arrayCompatNormalize(normalize);\n\treturn (value, arrayDimensions) => codec(parsePgArray(value), arrayDimensions);\n};\n\nexport const parseLineTuple = (v: string): [number, number, number] => {\n\tconst [a, b, c] = v.slice(1, -1).split(',');\n\treturn [Number.parseFloat(a!), Number.parseFloat(b!), Number.parseFloat(c!)];\n};\n\nexport const parseLineABC = (v: string): { a: number; b: number; c: number } => {\n\tconst [a, b, c] = v.slice(1, -1).split(',');\n\treturn { a: Number.parseFloat(a!), b: Number.parseFloat(b!), c: Number.parseFloat(c!) };\n};\n\nexport const parsePointTuple = (v: string): [number, number] => {\n\tconst [x, y] = v.slice(1, -1).split(',');\n\treturn [Number.parseFloat(x!), Number.parseFloat(y!)];\n};\n\nexport const parsePointXY = (v: string): { x: number; y: number } => {\n\tconst [x, y] = v.slice(1, -1).split(',');\n\treturn { x: Number.parseFloat(x!), y: Number.parseFloat(y!) };\n};\n\nexport const parseGeometryTuple = (v: string): [number, number] => parseEWKB(v).point;\n\nexport const parseGeometryXY = (v: string): { x: number; y: number } => {\n\tconst parsed = parseEWKB(v);\n\treturn { x: parsed.point[0], y: parsed.point[1] };\n};\n\nexport const textToDate = (v: string): Date => new Date(v);\nexport const textToDateWithTz = (v: string): Date => new Date(v + '+0000');\n\nexport const parsePgVector = (v: string): number[] => {\n\tconst body = v.slice(1, -1);\n\tif (body.length === 0) return [];\n\treturn body.split(',').map(Number.parseFloat);\n};\n\nexport const genericPgCodecs = {\n\tbytea: {\n\t\tcastInJson: (name) => sql`encode(${name}, 'base64')`,\n\t\tcastArrayInJson: arrayCompatCast((name) => sql`encode(${name}, 'base64')`),\n\t\tnormalizeInJson: (v: string) => Buffer.from(v, 'base64'),\n\t\tnormalizeArrayInJson: arrayCompatNormalize((v: string) => Buffer.from(v, 'base64')),\n\t},\n\tbigint: {\n\t\tcastInJson: castToText,\n\t\tcastArrayInJson: castToTextArr,\n\t\tnormalizeInJson: BigInt,\n\t\tnormalizeArrayInJson: arrayCompatNormalize(BigInt),\n\t},\n\t'bigint:number': {\n\t\tcastInJson: castToText,\n\t\tcastArrayInJson: castToTextArr,\n\t\tnormalize: Number,\n\t\tnormalizeArray: arrayCompatNormalize(Number),\n\t\tnormalizeInJson: Number,\n\t\tnormalizeArrayInJson: arrayCompatNormalize(Number),\n\t},\n\t'bigint:string': {\n\t\tcastInJson: castToText,\n\t\tcastArrayInJson: castToTextArr,\n\t},\n\tbigserial: {\n\t\tcastInJson: castToText,\n\t\tcastArrayInJson: castToTextArr,\n\t\tnormalizeInJson: BigInt,\n\t\tnormalizeArrayInJson: arrayCompatNormalize(BigInt),\n\t\tnormalize: BigInt,\n\t\tnormalizeArray: arrayCompatNormalize(BigInt),\n\t},\n\t'bigserial:number': {\n\t\tcastInJson: castToText,\n\t\tcastArrayInJson: castToTextArr,\n\t\tnormalize: Number,\n\t\tnormalizeArray: arrayCompatNormalize(Number),\n\t\tnormalizeInJson: Number,\n\t\tnormalizeArrayInJson: arrayCompatNormalize(Number),\n\t},\n\tdate: {\n\t\tnormalizeInJson: textToDate,\n\t\tnormalizeArrayInJson: arrayCompatNormalize(textToDate),\n\t},\n\t'date:string': {},\n\tenum: {\n\t\tcastArray: castToTextArr,\n\t\tnormalizeParamArray: makePgArray,\n\t},\n\t'geometry(point)': {\n\t\tcastInJson: castToText,\n\t\tcastArrayInJson: castToTextArr,\n\t\tnormalize: parseGeometryXY,\n\t\tnormalizeArray: arrayCompatNormalize(parseGeometryXY),\n\t\tnormalizeInJson: parseGeometryXY,\n\t\tnormalizeArrayInJson: arrayCompatNormalize(parseGeometryXY),\n\t},\n\t'geometry(point):tuple': {\n\t\tcastInJson: castToText,\n\t\tcastArrayInJson: castToTextArr,\n\t\tnormalize: parseGeometryTuple,\n\t\tnormalizeArray: arrayCompatNormalize(parseGeometryTuple),\n\t\tnormalizeInJson: parseGeometryTuple,\n\t\tnormalizeArrayInJson: arrayCompatNormalize(parseGeometryTuple),\n\t},\n\tinterval: {\n\t\tcastArrayInJson: castToTextArr,\n\t},\n\tjson: {\n\t\tnormalizeParamArray: arrayCompatNormalizeInput((v) => JSON.stringify(v), true),\n\t},\n\tjsonb: {\n\t\tnormalizeParamArray: arrayCompatNormalizeInput((v) => JSON.stringify(v), true),\n\t},\n\tline: {\n\t\tcastInJson: castToText,\n\t\tcastArrayInJson: castToTextArr,\n\t\tnormalize: parseLineABC,\n\t\tnormalizeArray: arrayCompatNormalize(parseLineABC),\n\t\tnormalizeInJson: parseLineABC,\n\t\tnormalizeArrayInJson: arrayCompatNormalize(parseLineABC),\n\t},\n\t'line:tuple': {\n\t\tcastInJson: castToText,\n\t\tcastArrayInJson: castToTextArr,\n\t\tnormalize: parseLineTuple,\n\t\tnormalizeArray: arrayCompatNormalize(parseLineTuple),\n\t\tnormalizeInJson: parseLineTuple,\n\t\tnormalizeArrayInJson: arrayCompatNormalize(parseLineTuple),\n\t},\n\tnumeric: {\n\t\tcastInJson: castToText,\n\t\tcastArrayInJson: castToTextArr,\n\t\tcastArray: castToTextArr,\n\t},\n\t'numeric:number': {\n\t\tcastInJson: castToText,\n\t\tcastArrayInJson: castToTextArr,\n\t\tcastArray: castToTextArr,\n\t\tnormalize: Number,\n\t\tnormalizeArray: arrayCompatNormalize(Number),\n\t\tnormalizeInJson: Number,\n\t\tnormalizeArrayInJson: arrayCompatNormalize(Number),\n\t},\n\t'numeric:bigint': {\n\t\tcastInJson: castToText,\n\t\tcastArrayInJson: castToTextArr,\n\t\tcastArray: castToTextArr,\n\t\tnormalize: BigInt,\n\t\tnormalizeArray: arrayCompatNormalize(BigInt),\n\t\tnormalizeInJson: BigInt,\n\t\tnormalizeArrayInJson: arrayCompatNormalize(BigInt),\n\t},\n\tpoint: {\n\t\tcastInJson: castToText,\n\t\tcastArrayInJson: castToTextArr,\n\t\tnormalize: parsePointXY,\n\t\tnormalizeArray: arrayCompatNormalize(parsePointXY),\n\t\tnormalizeInJson: parsePointXY,\n\t\tnormalizeArrayInJson: arrayCompatNormalize(parsePointXY),\n\t},\n\t'point:tuple': {\n\t\tcastInJson: castToText,\n\t\tcastArrayInJson: castToTextArr,\n\t\tnormalize: parsePointTuple,\n\t\tnormalizeArray: arrayCompatNormalize(parsePointTuple),\n\t\tnormalizeInJson: parsePointTuple,\n\t\tnormalizeArrayInJson: arrayCompatNormalize(parsePointTuple),\n\t},\n\ttimestamp: {\n\t\tcastInJson: castToText,\n\t\tcastArrayInJson: castToTextArr,\n\t\tnormalizeInJson: textToDateWithTz,\n\t\tnormalizeArrayInJson: arrayCompatNormalize(textToDateWithTz),\n\t},\n\ttimestamptz: {\n\t\tcastInJson: castToText,\n\t\tcastArrayInJson: castToTextArr,\n\t\tnormalizeInJson: textToDate,\n\t\tnormalizeArrayInJson: arrayCompatNormalize(textToDate),\n\t},\n\t'timestamp:string': {\n\t\tcastInJson: castToText,\n\t\tcastArrayInJson: castToTextArr,\n\t},\n\t'timestamptz:string': {\n\t\tcastInJson: castToText,\n\t\tcastArrayInJson: castToTextArr,\n\t},\n\thalfvec: {\n\t\tnormalize: parsePgVector,\n\t\tnormalizeArray: parsePgArrayAndNormalize(parsePgVector),\n\t\tnormalizeInJson: parsePgVector,\n\t\tnormalizeArrayInJson: arrayCompatNormalize(parsePgVector),\n\t},\n\tvector: {\n\t\tnormalize: parsePgVector,\n\t\tnormalizeArray: parsePgArrayAndNormalize(parsePgVector),\n\t\tnormalizeInJson: parsePgVector,\n\t\tnormalizeArrayInJson: arrayCompatNormalize(parsePgVector),\n\t},\n} as const satisfies PgCodecs;\n\nexport const refineGenericPgCodecs = (extension?: PartialWithUndefined<PgCodecs>): PgCodecs =>\n\trefineCodecs<PostgresType>(genericPgCodecs, extension);\n","import type { ColumnBuilderBaseConfig } from '~/column-builder.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport type { SQL, SQLGenerator } from '~/sql/sql.ts';\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { parsePgArray } from '../array.ts';\nimport { type PostgresColumnType, type PostgresType, resolvePgTypeAlias } from '../codecs.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport type ConvertCustomConfig<T extends Partial<CustomTypeValues>> =\n\t& {\n\t\tdataType: 'custom';\n\t\tdata: T['data'];\n\t\tdriverParam: T['driverData'];\n\t}\n\t& (T['notNull'] extends true ? { notNull: true } : {})\n\t& (T['default'] extends true ? { hasDefault: true } : {});\n\nexport interface PgCustomColumnInnerConfig {\n\tcustomTypeValues: CustomTypeValues;\n}\n\nexport class PgCustomColumnBuilder<T extends ColumnBuilderBaseConfig<'custom'>> extends PgColumnBuilder<\n\tT,\n\t{\n\t\tfieldConfig: CustomTypeValues['config'];\n\t\tcustomTypeParams: CustomTypeParams<any>;\n\t}\n> {\n\tstatic override readonly [entityKind]: string = 'PgCustomColumnBuilder';\n\n\tconstructor(\n\t\tname: string,\n\t\tfieldConfig: CustomTypeValues['config'],\n\t\tcustomTypeParams: CustomTypeParams<any>,\n\t) {\n\t\tsuper(name, 'custom', 'PgCustomColumn');\n\t\tthis.config.fieldConfig = fieldConfig;\n\t\tthis.config.customTypeParams = customTypeParams;\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgCustomColumn(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class PgCustomColumn<T extends ColumnBuilderBaseConfig<'custom'>> extends PgColumn<'custom'> {\n\tstatic override readonly [entityKind]: string = 'PgCustomColumn';\n\n\t/** @internal */\n\toverride readonly codec?: PostgresType | undefined;\n\n\tprivate sqlName: string;\n\treadonly mapFromJsonValue?: (value: unknown) => T['data'];\n\treadonly jsonSelectIdentifier?: (identifier: SQL, sql: SQLGenerator, arrayDimensions?: number) => SQL;\n\n\tconstructor(\n\t\ttable: PgTable<any>,\n\t\tconfig: PgCustomColumnBuilder<T>['config'],\n\t) {\n\t\tsuper(table, config as any);\n\t\tthis.sqlName = config.customTypeParams.dataType(config.fieldConfig);\n\t\tthis.mapToDriverValue = config.customTypeParams.toDriver ?? this.mapToDriverValue;\n\t\tthis.mapFromDriverValue = config.customTypeParams.fromDriver ?? this.mapFromDriverValue;\n\t\tthis.mapFromJsonValue = config.customTypeParams.fromJson;\n\t\tthis.jsonSelectIdentifier = config.customTypeParams.forJsonSelect;\n\t\tconst cfgCodec =\n\t\t\ttypeof config.customTypeParams.codec === 'string' || typeof config.customTypeParams.codec === 'undefined'\n\t\t\t\t? config.customTypeParams.codec\n\t\t\t\t: config.customTypeParams.codec(config.fieldConfig);\n\t\tthis.codec = typeof cfgCodec === 'string'\n\t\t\t? resolvePgTypeAlias(cfgCodec) as PostgresType // If it isn't `PostgresType`, codec search will simply resolve to no codec, which is supported behaviour\n\t\t\t: undefined;\n\n\t\tif (this.dimensions && config.customTypeParams.fromJson) {\n\t\t\tthis.mapFromJsonValue = (value: unknown): unknown => {\n\t\t\t\tif (value === null) return value;\n\t\t\t\tconst arr = typeof value === 'string' ? parsePgArray(value) : value as unknown[];\n\t\t\t\treturn this.mapJsonArrayElements(arr, config.customTypeParams.fromJson!, this.dimensions);\n\t\t\t};\n\t\t}\n\t}\n\n\t/** @internal */\n\tprivate mapJsonArrayElements(value: unknown, mapper: (v: unknown) => unknown, depth: number): unknown {\n\t\tif (depth > 0 && Array.isArray(value)) {\n\t\t\treturn value.map((v) => v === null ? null : this.mapJsonArrayElements(v, mapper, depth - 1));\n\t\t}\n\t\treturn mapper(value);\n\t}\n\n\tgetSQLType(): string {\n\t\treturn this.sqlName;\n\t}\n}\n\nexport interface CustomTypeValues {\n\t/**\n\t * Required type for custom column, that will infer proper type model\n\t *\n\t * Examples:\n\t *\n\t * If you want your column to be `string` type after selecting/or on inserting - use `data: string`. Like `text`, `varchar`\n\t *\n\t * If you want your column to be `number` type after selecting/or on inserting - use `data: number`. Like `integer`\n\t */\n\tdata: unknown;\n\n\t/**\n\t * Type helper, that represents what type database driver is accepting for specific database data type\n\t */\n\tdriverData?: unknown;\n\n\t/**\n\t * @deprecated Use codecs instead\n\t *\n\t * Type helper, that represents what type database driver is returning for specific database data type\n\t *\n\t * Needed only in case driver's output and input for type differ\n\t *\n\t * Defaults to {@link driverData}\n\t */\n\tdriverOutput?: unknown;\n\n\t/**\n\t * @deprecated Use codecs instead\n\t *\n\t * Type helper, that represents what type field returns after being aggregated to JSON\n\t */\n\tjsonData?: unknown;\n\n\t/**\n\t * What config type should be used for {@link CustomTypeParams} `dataType` generation\n\t */\n\tconfig?: Record<string, any>;\n\n\t/**\n\t * Whether the config argument should be required or not\n\t * @default false\n\t */\n\tconfigRequired?: boolean;\n\n\t/**\n\t * If your custom data type should be notNull by default you can use `notNull: true`\n\t *\n\t * @example\n\t * const customSerial = customType<{ data: number, notNull: true, default: true }>({\n\t * \t dataType() {\n\t * \t return 'serial';\n\t * },\n\t * });\n\t */\n\tnotNull?: boolean;\n\n\t/**\n\t * If your custom data type has default you can use `default: true`\n\t *\n\t * @example\n\t * const customSerial = customType<{ data: number, notNull: true, default: true }>({\n\t * \t dataType() {\n\t * \t return 'serial';\n\t * },\n\t * });\n\t */\n\tdefault?: boolean;\n}\n\nexport interface CustomTypeParams<T extends CustomTypeValues> {\n\t/**\n\t * Database data type string representation, that is used for migrations\n\t * @example\n\t * ```\n\t * `jsonb`, `text`\n\t * ```\n\t *\n\t * If database data type needs additional params you can use them from `config` param\n\t * @example\n\t * ```\n\t * `varchar(256)`, `numeric(2,3)`\n\t * ```\n\t *\n\t * To make `config` be of specific type please use config generic in {@link CustomTypeValues}\n\t *\n\t * @example\n\t * Usage example\n\t * ```\n\t * dataType() {\n\t * return 'boolean';\n\t * },\n\t * ```\n\t * Or\n\t * ```\n\t * dataType(config) {\n\t * \t return typeof config.length !== 'undefined' ? `varchar(${config.length})` : `varchar`;\n\t * \t }\n\t * ```\n\t */\n\tdataType: (config: T['config'] | (Equal<T['configRequired'], true> extends true ? never : undefined)) => string;\n\n\t/**\n\t * Optional mapping function, that is used to transform inputs from desired to be used in code format to one suitable for driver\n\t * @example\n\t * For example, when using jsonb we need to map JS/TS object to string before writing to database\n\t * ```\n\t * toDriver(value: TData): string {\n\t * \t return JSON.stringify(value);\n\t * }\n\t * ```\n\t */\n\ttoDriver?: (value: T['data']) => T['driverData'] | SQL;\n\n\t/**\n\t * Optional mapping function, that is used for transforming data returned by driver to desired column's output format\n\t * @example\n\t * For example, when using timestamp we need to map string Date representation to JS Date\n\t * ```\n\t * fromDriver(value: string): Date {\n\t * \treturn new Date(value);\n\t * }\n\t * ```\n\t *\n\t * It'll cause the returned data to change from:\n\t * ```\n\t * {\n\t * \tcustomField: \"2025-04-07T03:25:16.635Z\";\n\t * }\n\t * ```\n\t * to:\n\t * ```\n\t * {\n\t * \tcustomField: new Date(\"2025-04-07T03:25:16.635Z\");\n\t * }\n\t * ```\n\t */\n\tfromDriver?: (value: 'driverOutput' extends keyof T ? T['driverOutput'] : T['driverData']) => T['data'];\n\n\t/**\n\t * @deprecated Use codecs instead; bypasses JSON codecs if used\n\t *\n\t * Optional mapping function, that is used for transforming data returned by transofmed to JSON in database data to desired format\n\t *\n\t * Used by [relational queries](https://orm.drizzle.team/docs/rqb-v2)\n\t *\n\t * Defaults to {@link fromDriver} function\n\t * @example\n\t * For example, when querying bigint column via [RQB](https://orm.drizzle.team/docs/rqb-v2) or [JSON functions](https://orm.drizzle.team/docs/json-functions), the result field will be returned as it's string representation, as opposed to bigint from regular query\n\t * To handle that, we need a separate function to handle such field's mapping:\n\t * ```\n\t * fromJson(value: string): bigint {\n\t * \treturn BigInt(value);\n\t * },\n\t * ```\n\t *\n\t * It'll cause the returned data to change from:\n\t * ```\n\t * {\n\t * \tcustomField: \"5044565289845416380\";\n\t * }\n\t * ```\n\t * to:\n\t * ```\n\t * {\n\t * \tcustomField: 5044565289845416380n;\n\t * }\n\t * ```\n\t */\n\tfromJson?: (value: T['jsonData']) => T['data'];\n\n\t/**\n\t * @deprecated Use codecs instead; bypasses JSON codecs if used\n\t *\n\t * Optional selection modifier function, that is used for modifying selection of column inside [JSON functions](https://orm.drizzle.team/docs/json-functions)\n\t *\n\t * Additional mapping that could be required for such scenarios can be handled using {@link fromJson} function\n\t *\n\t * Used by [relational queries](https://orm.drizzle.team/docs/rqb-v2)\n\t *\n\t * Following types are being casted to text by default: `bytea`, `geometry`, `timestamp`, `numeric`, `bigint`\n\t * @example\n\t * For example, when using bigint we need to cast field to text to preserve data integrity\n\t * ```\n\t * forJsonSelect(identifier: SQL, sql: SQLGenerator, arrayDimensions?: number): SQL {\n\t * \treturn sql`${identifier}::text`\n\t * },\n\t * ```\n\t *\n\t * This will change query from:\n\t * ```\n\t * SELECT\n\t * \trow_to_json(\"t\".*)\n\t * \tFROM\n\t * \t(\n\t * \t\tSELECT\n\t * \t\t\"table\".\"custom_bigint\" AS \"bigint\"\n\t * \t\tFROM\n\t * \t\t\"table\"\n\t * \t) AS \"t\"\n\t * ```\n\t * to:\n\t * ```\n\t * SELECT\n\t * \trow_to_json(\"t\".*)\n\t * \tFROM\n\t * \t(\n\t * \t\tSELECT\n\t * \t\t\"table\".\"custom_bigint\"::text AS \"bigint\"\n\t * \t\tFROM\n\t * \t\t\"table\"\n\t * \t) AS \"t\"\n\t * ```\n\t *\n\t * Returned by query object will change from:\n\t * ```\n\t * {\n\t * \tbigint: 5044565289845416000; // Partial data loss due to direct conversion to JSON format\n\t * }\n\t * ```\n\t * to:\n\t * ```\n\t * {\n\t * \tbigint: \"5044565289845416380\"; // Data is preserved due to conversion of field to text before JSON-ification\n\t * }\n\t * ```\n\t */\n\tforJsonSelect?: (identifier: SQL, sql: SQLGenerator, arrayDimensions?: number) => SQL;\n\n\t/**\n\t * Select which column type codec will be used for this column\n\t */\n\tcodec?:\n\t\t| PostgresColumnType\n\t\t| undefined\n\t\t| ((\n\t\t\tconfig: T['config'] | (Equal<T['configRequired'], true> extends true ? never : undefined),\n\t\t) => PostgresColumnType | undefined);\n}\n\n/**\n * Custom pg database data type generator\n */\nexport function customType<T extends CustomTypeValues = CustomTypeValues>(\n\tcustomTypeParams: CustomTypeParams<T>,\n): Equal<T['configRequired'], true> extends true ? {\n\t\t<TConfig extends Record<string, any> & T['config']>(\n\t\t\tfieldConfig: TConfig,\n\t\t): PgCustomColumnBuilder<ConvertCustomConfig<T>>;\n\t\t(\n\t\t\tdbName: string,\n\t\t\tfieldConfig: T['config'],\n\t\t): PgCustomColumnBuilder<ConvertCustomConfig<T>>;\n\t}\n\t: {\n\t\t<TConfig extends Record<string, any> & T['config']>(\n\t\t\tfieldConfig?: TConfig,\n\t\t): PgCustomColumnBuilder<ConvertCustomConfig<T>>;\n\t\t(\n\t\t\tdbName: string,\n\t\t\tfieldConfig?: T['config'],\n\t\t): PgCustomColumnBuilder<ConvertCustomConfig<T>>;\n\t}\n{\n\treturn (\n\t\ta?: string | T['config'],\n\t\tb?: T['config'],\n\t): PgCustomColumnBuilder<ConvertCustomConfig<T>> => {\n\t\tconst { name, config } = getColumnNameAndConfig<T['config']>(a, b);\n\t\treturn new PgCustomColumnBuilder(name, config, customTypeParams);\n\t};\n}\n","import { entityKind } from '~/entity.ts';\nimport { sql } from '~/sql/sql.ts';\nimport type { PgColumnBuilderConfig, SetHasDefault } from './common.ts';\nimport { PgColumnBuilder } from './common.ts';\n\nexport abstract class PgDateColumnBuilder<\n\tout T extends PgColumnBuilderConfig = PgColumnBuilderConfig,\n\tout TRuntimeConfig extends object = object,\n> extends PgColumnBuilder<T, TRuntimeConfig> {\n\tstatic override readonly [entityKind]: string = 'PgDateColumnBaseBuilder';\n\n\t/**\n\t * Adds a `default now()` clause to the column definition.\n\t * Available for date/time column types.\n\t */\n\tdefaultNow(): SetHasDefault<this> {\n\t\treturn this.default(sql`now()`);\n\t}\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { PgColumn } from './common.ts';\nimport { PgDateColumnBuilder } from './date.common.ts';\n\nexport class PgDateBuilder extends PgDateColumnBuilder<{\n\tdataType: 'object date';\n\tdata: Date;\n\tdriverParam: string;\n}> {\n\tstatic override readonly [entityKind]: string = 'PgDateBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'object date', 'PgDate');\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgDate(table, this.config as any);\n\t}\n}\n\nexport class PgDate extends PgColumn<'object date'> {\n\tstatic override readonly [entityKind]: string = 'PgDate';\n\n\t/** @internal */\n\toverride readonly codec = 'date';\n\n\tgetSQLType(): string {\n\t\treturn 'date';\n\t}\n\n\toverride mapToDriverValue = function(value: Date | string): string {\n\t\tif (typeof value === 'string') return value;\n\t\treturn value.toISOString();\n\t};\n}\n\nexport class PgDateStringBuilder extends PgDateColumnBuilder<{\n\tdataType: 'string date';\n\tdata: string;\n\tdriverParam: string;\n}> {\n\tstatic override readonly [entityKind]: string = 'PgDateStringBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'string date', 'PgDateString');\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgDateString(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class PgDateString extends PgColumn<'string date'> {\n\tstatic override readonly [entityKind]: string = 'PgDateString';\n\n\t/** @internal */\n\toverride readonly codec = 'date:string';\n\n\tgetSQLType(): string {\n\t\treturn 'date';\n\t}\n\n\toverride mapToDriverValue = (value: Date | string): string => {\n\t\tif (typeof value === 'string') return value;\n\t\treturn value.toISOString();\n\t};\n}\n\nexport interface PgDateConfig<T extends 'date' | 'string' = 'date' | 'string'> {\n\tmode: T;\n}\n\nexport function date<TMode extends PgDateConfig['mode'] & {}>(\n\tconfig?: PgDateConfig<TMode>,\n): Equal<TMode, 'date'> extends true ? PgDateBuilder : PgDateStringBuilder;\nexport function date<TMode extends PgDateConfig['mode'] & {}>(\n\tname: string,\n\tconfig?: PgDateConfig<TMode>,\n): Equal<TMode, 'date'> extends true ? PgDateBuilder : PgDateStringBuilder;\nexport function date(a?: string | PgDateConfig, b?: PgDateConfig) {\n\tconst { name, config } = getColumnNameAndConfig<PgDateConfig>(a, b);\n\tif (config?.mode === 'date') {\n\t\treturn new PgDateBuilder(name);\n\t}\n\treturn new PgDateStringBuilder(name);\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport class PgDoublePrecisionBuilder extends PgColumnBuilder<{\n\tdataType: 'number double';\n\tdata: number;\n\tdriverParam: string | number;\n}> {\n\tstatic override readonly [entityKind]: string = 'PgDoublePrecisionBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'number double', 'PgDoublePrecision');\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgDoublePrecision(\n\t\t\ttable,\n\t\t\tthis.config,\n\t\t);\n\t}\n}\n\nexport class PgDoublePrecision extends PgColumn<'number double'> {\n\tstatic override readonly [entityKind]: string = 'PgDoublePrecision';\n\n\t/** @internal */\n\toverride readonly codec = 'float8';\n\n\tgetSQLType(): string {\n\t\treturn 'double precision';\n\t}\n}\n\nexport function doublePrecision(name?: string): PgDoublePrecisionBuilder {\n\treturn new PgDoublePrecisionBuilder(name ?? '');\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '../table.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport class PgInetBuilder extends PgColumnBuilder<{\n\tdataType: 'string inet';\n\tdata: string;\n\tdriverParam: string;\n}> {\n\tstatic override readonly [entityKind]: string = 'PgInetBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'string inet', 'PgInet');\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgInet(table, this.config as any);\n\t}\n}\n\nexport class PgInet extends PgColumn<'string inet'> {\n\tstatic override readonly [entityKind]: string = 'PgInet';\n\n\t/** @internal */\n\toverride readonly codec = 'inet';\n\n\tgetSQLType(): string {\n\t\treturn 'inet';\n\t}\n}\n\nexport function inet(name?: string): PgInetBuilder {\n\treturn new PgInetBuilder(name ?? '');\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '../table.ts';\nimport { PgColumn } from './common.ts';\nimport { PgIntColumnBuilder } from './int.common.ts';\n\nexport class PgIntegerBuilder extends PgIntColumnBuilder<{\n\tdataType: 'number int32';\n\tdata: number;\n\tdriverParam: number | string;\n}> {\n\tstatic override readonly [entityKind]: string = 'PgIntegerBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'number int32', 'PgInteger');\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgInteger(table, this.config as any);\n\t}\n}\n\nexport class PgInteger extends PgColumn<'number int32'> {\n\tstatic override readonly [entityKind]: string = 'PgInteger';\n\n\t/** @internal */\n\toverride readonly codec = 'int';\n\n\tgetSQLType(): string {\n\t\treturn 'integer';\n\t}\n}\n\nexport function integer(name?: string): PgIntegerBuilder {\n\treturn new PgIntegerBuilder(name ?? '');\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport { getColumnNameAndConfig } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\nimport type { Precision } from './timestamp.ts';\n\nexport class PgIntervalBuilder extends PgColumnBuilder<{\n\tdataType: 'string interval';\n\tdata: string;\n\tdriverParam: string;\n}, { intervalConfig: IntervalConfig }> {\n\tstatic override readonly [entityKind]: string = 'PgIntervalBuilder';\n\n\tconstructor(\n\t\tname: string,\n\t\tintervalConfig: IntervalConfig,\n\t) {\n\t\tsuper(name, 'string interval', 'PgInterval');\n\t\tthis.config.intervalConfig = intervalConfig;\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgInterval(table, this.config as any);\n\t}\n}\n\nexport class PgInterval extends PgColumn<'string interval'> {\n\tstatic override readonly [entityKind]: string = 'PgInterval';\n\n\t/** @internal */\n\toverride readonly codec = 'interval';\n\n\treadonly fields: IntervalConfig['fields'];\n\treadonly precision: IntervalConfig['precision'];\n\n\tconstructor(table: PgTable<any>, config: PgIntervalBuilder['config']) {\n\t\tsuper(table, config);\n\t\tthis.fields = config.intervalConfig.fields;\n\t\tthis.precision = config.intervalConfig.precision;\n\t}\n\n\tgetSQLType(): string {\n\t\tconst fields = this.fields ? ` ${this.fields}` : '';\n\t\tconst precision = this.precision ? `(${this.precision})` : '';\n\t\treturn `interval${fields}${precision}`;\n\t}\n}\n\nexport interface IntervalConfig {\n\tfields?:\n\t\t| 'year'\n\t\t| 'month'\n\t\t| 'day'\n\t\t| 'hour'\n\t\t| 'minute'\n\t\t| 'second'\n\t\t| 'year to month'\n\t\t| 'day to hour'\n\t\t| 'day to minute'\n\t\t| 'day to second'\n\t\t| 'hour to minute'\n\t\t| 'hour to second'\n\t\t| 'minute to second';\n\tprecision?: Precision;\n}\n\nexport function interval(\n\tconfig?: IntervalConfig,\n): PgIntervalBuilder;\nexport function interval(\n\tname: string,\n\tconfig?: IntervalConfig,\n): PgIntervalBuilder;\nexport function interval(a?: string | IntervalConfig, b: IntervalConfig = {}) {\n\tconst { name, config } = getColumnNameAndConfig<IntervalConfig>(a, b);\n\treturn new PgIntervalBuilder(name, config);\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport class PgJsonBuilder extends PgColumnBuilder<\n\t{\n\t\tdataType: 'object json';\n\t\tdata: unknown;\n\t\tdriverParam: unknown;\n\t}\n> {\n\tstatic override readonly [entityKind]: string = 'PgJsonBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'object json', 'PgJson');\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgJson(table, this.config as any);\n\t}\n}\n\nexport class PgJson extends PgColumn<'object json'> {\n\tstatic override readonly [entityKind]: string = 'PgJson';\n\n\t/** @internal */\n\toverride readonly codec = 'json';\n\n\tconstructor(table: PgTable<any>, config: PgJsonBuilder['config']) {\n\t\tsuper(table, config);\n\t}\n\n\tgetSQLType(): string {\n\t\treturn 'json';\n\t}\n}\n\nexport function json(name?: string): PgJsonBuilder {\n\treturn new PgJsonBuilder(name ?? '');\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport class PgJsonbBuilder extends PgColumnBuilder<{\n\tdataType: 'object json';\n\tdata: unknown;\n\tdriverParam: unknown;\n}> {\n\tstatic override readonly [entityKind]: string = 'PgJsonbBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'object json', 'PgJsonb');\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgJsonb(table, this.config as any);\n\t}\n}\n\nexport class PgJsonb extends PgColumn<'object json'> {\n\tstatic override readonly [entityKind]: string = 'PgJsonb';\n\n\t/** @internal */\n\toverride readonly codec = 'jsonb';\n\n\tconstructor(table: PgTable<any>, config: PgJsonbBuilder['config']) {\n\t\tsuper(table, config);\n\t}\n\n\tgetSQLType(): string {\n\t\treturn 'jsonb';\n\t}\n}\n\nexport function jsonb(name?: string): PgJsonbBuilder {\n\treturn new PgJsonbBuilder(name ?? '');\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport class PgLineBuilder extends PgColumnBuilder<{\n\tdataType: 'array line';\n\tdata: [number, number, number];\n\tdriverParam: number | string;\n}> {\n\tstatic override readonly [entityKind]: string = 'PgLineBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'array line', 'PgLine');\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgLineTuple(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class PgLineTuple extends PgColumn<'array line'> {\n\tstatic override readonly [entityKind]: string = 'PgLine';\n\n\t/** @internal */\n\toverride readonly codec = 'line:tuple';\n\n\treadonly mode = 'tuple';\n\n\tgetSQLType(): string {\n\t\treturn 'line';\n\t}\n\n\toverride mapToDriverValue = (value: [number, number, number]): string => {\n\t\treturn `{${value[0]},${value[1]},${value[2]}}`;\n\t};\n}\n\nexport class PgLineABCBuilder extends PgColumnBuilder<{\n\tdataType: 'object line';\n\tdata: { a: number; b: number; c: number };\n\tdriverParam: string;\n}> {\n\tstatic override readonly [entityKind]: string = 'PgLineABCBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'object line', 'PgLineABC');\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgLineABC(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class PgLineABC extends PgColumn<'object line'> {\n\tstatic override readonly [entityKind]: string = 'PgLineABC';\n\n\t/** @internal */\n\toverride readonly codec = 'line';\n\n\treadonly mode = 'abc';\n\n\tgetSQLType(): string {\n\t\treturn 'line';\n\t}\n\n\toverride mapToDriverValue = (value: { a: number; b: number; c: number }): string => {\n\t\treturn `{${value.a},${value.b},${value.c}}`;\n\t};\n}\n\nexport interface PgLineTypeConfig<T extends 'tuple' | 'abc' = 'tuple' | 'abc'> {\n\tmode?: T;\n}\n\nexport function line<TMode extends PgLineTypeConfig['mode'] & {}>(\n\tconfig?: PgLineTypeConfig<TMode>,\n): Equal<TMode, 'abc'> extends true ? PgLineABCBuilder\n\t: PgLineBuilder;\nexport function line<TMode extends PgLineTypeConfig['mode'] & {}>(\n\tname: string,\n\tconfig?: PgLineTypeConfig<TMode>,\n): Equal<TMode, 'abc'> extends true ? PgLineABCBuilder\n\t: PgLineBuilder;\nexport function line(a?: string | PgLineTypeConfig, b?: PgLineTypeConfig) {\n\tconst { name, config } = getColumnNameAndConfig<PgLineTypeConfig>(a, b);\n\tif (!config?.mode || config.mode === 'tuple') {\n\t\treturn new PgLineBuilder(name);\n\t}\n\treturn new PgLineABCBuilder(name);\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '../table.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport class PgMacaddrBuilder extends PgColumnBuilder<{\n\tdataType: 'string macaddr';\n\tdata: string;\n\tdriverParam: string;\n}> {\n\tstatic override readonly [entityKind]: string = 'PgMacaddrBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'string macaddr', 'PgMacaddr');\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgMacaddr(table, this.config as any);\n\t}\n}\n\nexport class PgMacaddr extends PgColumn<'string macaddr'> {\n\tstatic override readonly [entityKind]: string = 'PgMacaddr';\n\n\t/** @internal */\n\toverride readonly codec = 'macaddr';\n\n\tgetSQLType(): string {\n\t\treturn 'macaddr';\n\t}\n}\n\nexport function macaddr(name?: string): PgMacaddrBuilder {\n\treturn new PgMacaddrBuilder(name ?? '');\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '../table.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport class PgMacaddr8Builder extends PgColumnBuilder<{\n\tdataType: 'string macaddr8';\n\tdata: string;\n\tdriverParam: string;\n}> {\n\tstatic override readonly [entityKind]: string = 'PgMacaddr8Builder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'string macaddr8', 'PgMacaddr8');\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgMacaddr8(table, this.config as any);\n\t}\n}\n\nexport class PgMacaddr8 extends PgColumn<'string macaddr8'> {\n\tstatic override readonly [entityKind]: string = 'PgMacaddr8';\n\n\t/** @internal */\n\toverride readonly codec = 'macaddr8';\n\n\tgetSQLType(): string {\n\t\treturn 'macaddr8';\n\t}\n}\n\nexport function macaddr8(name?: string): PgMacaddr8Builder {\n\treturn new PgMacaddr8Builder(name ?? '');\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport class PgNumericBuilder extends PgColumnBuilder<\n\t{\n\t\tdataType: 'string numeric';\n\t\tdata: string;\n\t\tdriverParam: string;\n\t},\n\t{\n\t\tprecision: number | undefined;\n\t\tscale: number | undefined;\n\t}\n> {\n\tstatic override readonly [entityKind]: string = 'PgNumericBuilder';\n\n\tconstructor(name: string, precision?: number, scale?: number) {\n\t\tsuper(name, 'string numeric', 'PgNumeric');\n\t\tthis.config.precision = precision;\n\t\tthis.config.scale = scale;\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgNumeric(table, this.config as any);\n\t}\n}\n\nexport class PgNumeric extends PgColumn<'string numeric'> {\n\tstatic override readonly [entityKind]: string = 'PgNumeric';\n\n\t/** @internal */\n\toverride readonly codec = 'numeric';\n\n\treadonly precision: number | undefined;\n\treadonly scale: number | undefined;\n\n\tconstructor(table: PgTable<any>, config: PgNumericBuilder['config']) {\n\t\tsuper(table, config);\n\t\tthis.precision = config.precision;\n\t\tthis.scale = config.scale;\n\t}\n\n\tgetSQLType(): string {\n\t\tif (this.precision !== undefined && this.scale !== undefined) {\n\t\t\treturn `numeric(${this.precision}, ${this.scale})`;\n\t\t} else if (this.precision === undefined) {\n\t\t\treturn 'numeric';\n\t\t} else {\n\t\t\treturn `numeric(${this.precision})`;\n\t\t}\n\t}\n}\n\nexport class PgNumericNumberBuilder extends PgColumnBuilder<\n\t{\n\t\tdataType: 'number';\n\t\tdata: number;\n\t\tdriverParam: string;\n\t},\n\t{\n\t\tprecision: number | undefined;\n\t\tscale: number | undefined;\n\t}\n> {\n\tstatic override readonly [entityKind]: string = 'PgNumericNumberBuilder';\n\n\tconstructor(name: string, precision?: number, scale?: number) {\n\t\tsuper(name, 'number', 'PgNumericNumber');\n\t\tthis.config.precision = precision;\n\t\tthis.config.scale = scale;\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgNumericNumber(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class PgNumericNumber extends PgColumn<'number'> {\n\tstatic override readonly [entityKind]: string = 'PgNumericNumber';\n\n\t/** @internal */\n\toverride readonly codec = 'numeric:number';\n\n\treadonly precision: number | undefined;\n\treadonly scale: number | undefined;\n\n\tconstructor(table: PgTable<any>, config: PgNumericNumberBuilder['config']) {\n\t\tsuper(table, config);\n\t\tthis.precision = config.precision;\n\t\tthis.scale = config.scale;\n\t}\n\n\toverride mapToDriverValue = String;\n\n\tgetSQLType(): string {\n\t\tif (this.precision !== undefined && this.scale !== undefined) {\n\t\t\treturn `numeric(${this.precision}, ${this.scale})`;\n\t\t} else if (this.precision === undefined) {\n\t\t\treturn 'numeric';\n\t\t} else {\n\t\t\treturn `numeric(${this.precision})`;\n\t\t}\n\t}\n}\n\nexport class PgNumericBigIntBuilder extends PgColumnBuilder<\n\t{\n\t\tdataType: 'bigint int64';\n\t\tdata: bigint;\n\t\tdriverParam: string;\n\t},\n\t{\n\t\tprecision: number | undefined;\n\t\tscale: number | undefined;\n\t}\n> {\n\tstatic override readonly [entityKind]: string = 'PgNumericBigIntBuilder';\n\n\tconstructor(name: string, precision?: number, scale?: number) {\n\t\tsuper(name, 'bigint int64', 'PgNumericBigInt');\n\t\tthis.config.precision = precision;\n\t\tthis.config.scale = scale;\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgNumericBigInt(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class PgNumericBigInt extends PgColumn<'bigint int64'> {\n\tstatic override readonly [entityKind]: string = 'PgNumericBigInt';\n\n\t/** @internal */\n\toverride readonly codec = 'numeric:bigint';\n\n\treadonly precision: number | undefined;\n\treadonly scale: number | undefined;\n\n\tconstructor(table: PgTable<any>, config: PgNumericBigIntBuilder['config']) {\n\t\tsuper(table, config);\n\t\tthis.precision = config.precision;\n\t\tthis.scale = config.scale;\n\t}\n\n\toverride mapToDriverValue = String;\n\n\tgetSQLType(): string {\n\t\tif (this.precision !== undefined && this.scale !== undefined) {\n\t\t\treturn `numeric(${this.precision}, ${this.scale})`;\n\t\t} else if (this.precision === undefined) {\n\t\t\treturn 'numeric';\n\t\t} else {\n\t\t\treturn `numeric(${this.precision})`;\n\t\t}\n\t}\n}\n\nexport type PgNumericConfig<T extends 'string' | 'number' | 'bigint' = 'string' | 'number' | 'bigint'> =\n\t| { precision: number; scale?: number; mode?: T }\n\t| { precision?: number; scale: number; mode?: T }\n\t| { precision?: number; scale?: number; mode: T };\n\nexport function numeric<TMode extends 'string' | 'number' | 'bigint'>(\n\tconfig?: PgNumericConfig<TMode>,\n): Equal<TMode, 'number'> extends true ? PgNumericNumberBuilder\n\t: Equal<TMode, 'bigint'> extends true ? PgNumericBigIntBuilder\n\t: PgNumericBuilder;\nexport function numeric<TMode extends 'string' | 'number' | 'bigint'>(\n\tname: string,\n\tconfig?: PgNumericConfig<TMode>,\n): Equal<TMode, 'number'> extends true ? PgNumericNumberBuilder\n\t: Equal<TMode, 'bigint'> extends true ? PgNumericBigIntBuilder\n\t: PgNumericBuilder;\nexport function numeric(a?: string | PgNumericConfig, b?: PgNumericConfig) {\n\tconst { name, config } = getColumnNameAndConfig<PgNumericConfig>(a, b);\n\tconst mode = config?.mode;\n\treturn mode === 'number'\n\t\t? new PgNumericNumberBuilder(name, config?.precision, config?.scale)\n\t\t: mode === 'bigint'\n\t\t? new PgNumericBigIntBuilder(name, config?.precision, config?.scale)\n\t\t: new PgNumericBuilder(name, config?.precision, config?.scale);\n}\n\nexport const decimal = numeric;\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport class PgPointTupleBuilder extends PgColumnBuilder<{\n\tdataType: 'array point';\n\tdata: [number, number];\n\tdriverParam: number | string;\n}> {\n\tstatic override readonly [entityKind]: string = 'PgPointTupleBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'array point', 'PgPointTuple');\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgPointTuple(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class PgPointTuple extends PgColumn<'array point'> {\n\tstatic override readonly [entityKind]: string = 'PgPointTuple';\n\n\t/** @internal */\n\toverride readonly codec = 'point:tuple';\n\n\treadonly mode = 'tuple';\n\n\tgetSQLType(): string {\n\t\treturn 'point';\n\t}\n\n\toverride mapToDriverValue = (value: [number, number]): string => {\n\t\treturn `(${value[0]},${value[1]})`;\n\t};\n}\n\nexport class PgPointObjectBuilder extends PgColumnBuilder<{\n\tdataType: 'object point';\n\tdata: { x: number; y: number };\n\tdriverParam: string;\n}> {\n\tstatic override readonly [entityKind]: string = 'PgPointObjectBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'object point', 'PgPointObject');\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgPointObject(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class PgPointObject extends PgColumn<'object point'> {\n\tstatic override readonly [entityKind]: string = 'PgPointObject';\n\n\t/** @internal */\n\toverride readonly codec = 'point';\n\n\treadonly mode = 'xy';\n\n\tgetSQLType(): string {\n\t\treturn 'point';\n\t}\n\n\toverride mapToDriverValue = (value: { x: number; y: number }): string => {\n\t\treturn `(${value.x},${value.y})`;\n\t};\n}\n\nexport interface PgPointConfig<T extends 'tuple' | 'xy' = 'tuple' | 'xy'> {\n\tmode?: T;\n}\n\nexport function point<TMode extends PgPointConfig['mode'] & {}>(\n\tconfig?: PgPointConfig<TMode>,\n): Equal<TMode, 'xy'> extends true ? PgPointObjectBuilder\n\t: PgPointTupleBuilder;\nexport function point<TMode extends PgPointConfig['mode'] & {}>(\n\tname: string,\n\tconfig?: PgPointConfig<TMode>,\n): Equal<TMode, 'xy'> extends true ? PgPointObjectBuilder\n\t: PgPointTupleBuilder;\nexport function point(a?: string | PgPointConfig, b?: PgPointConfig) {\n\tconst { name, config } = getColumnNameAndConfig<PgPointConfig>(a, b);\n\tif (!config?.mode || config.mode === 'tuple') {\n\t\treturn new PgPointTupleBuilder(name);\n\t}\n\treturn new PgPointObjectBuilder(name);\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport type { PgColumnBaseConfig } from '../common.ts';\nimport { PgColumn, PgColumnBuilder } from '../common.ts';\n\nexport class PgGeometryBuilder extends PgColumnBuilder<{\n\tdataType: 'array geometry';\n\tdata: [number, number];\n\tdriverParam: string;\n}, { srid: number | undefined }> {\n\tstatic override readonly [entityKind]: string = 'PgGeometryBuilder';\n\n\tconstructor(name: string, srid?: number) {\n\t\tsuper(name, 'array geometry', 'PgGeometry');\n\t\tthis.config.srid = srid;\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgGeometry(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class PgGeometry\n\textends PgColumn<'array geometry', PgColumnBaseConfig<'array geometry'>, { srid: number | undefined }>\n{\n\tstatic override readonly [entityKind]: string = 'PgGeometry';\n\n\t/** @internal */\n\toverride readonly codec = 'geometry(point):tuple';\n\n\treadonly srid = this.config.srid;\n\treadonly mode = 'tuple';\n\n\tgetSQLType(): string {\n\t\treturn `geometry(point${this.srid === undefined ? '' : `,${this.srid}`})`;\n\t}\n\n\toverride mapToDriverValue = (value: [number, number]): string => {\n\t\treturn `point(${value[0]} ${value[1]})`;\n\t};\n}\n\nexport class PgGeometryObjectBuilder extends PgColumnBuilder<{\n\tdataType: 'object geometry';\n\tdata: { x: number; y: number };\n\tdriverParam: string;\n}, { srid?: number }> {\n\tstatic override readonly [entityKind]: string = 'PgGeometryObjectBuilder';\n\n\tconstructor(name: string, srid: number | undefined) {\n\t\tsuper(name, 'object geometry', 'PgGeometryObject');\n\t\tthis.config.srid = srid;\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgGeometryObject(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class PgGeometryObject\n\textends PgColumn<'object geometry', PgColumnBaseConfig<'object geometry'>, { srid: number | undefined }>\n{\n\tstatic override readonly [entityKind]: string = 'PgGeometryObject';\n\n\t/** @internal */\n\toverride readonly codec = 'geometry(point)';\n\n\treadonly srid = this.config.srid;\n\treadonly mode = 'object';\n\n\tgetSQLType(): string {\n\t\treturn `geometry(point${this.srid === undefined ? '' : `,${this.srid}`})`;\n\t}\n\n\toverride mapToDriverValue = (value: { x: number; y: number }): string => {\n\t\treturn `point(${value.x} ${value.y})`;\n\t};\n}\n\nexport interface PgGeometryConfig<T extends 'tuple' | 'xy' = 'tuple' | 'xy'> {\n\tmode?: T;\n\ttype?: 'point' | (string & {});\n\tsrid?: number;\n}\n\nexport function geometry<TMode extends PgGeometryConfig['mode'] & {}>(\n\tconfig?: PgGeometryConfig<TMode>,\n): Equal<TMode, 'xy'> extends true ? PgGeometryObjectBuilder : PgGeometryBuilder;\nexport function geometry<TMode extends PgGeometryConfig['mode'] & {}>(\n\tname: string,\n\tconfig?: PgGeometryConfig<TMode>,\n): Equal<TMode, 'xy'> extends true ? PgGeometryObjectBuilder : PgGeometryBuilder;\nexport function geometry(a?: string | PgGeometryConfig, b?: PgGeometryConfig) {\n\tconst { name, config } = getColumnNameAndConfig<PgGeometryConfig>(a, b);\n\tif (!config?.mode || config.mode === 'tuple') {\n\t\treturn new PgGeometryBuilder(name, config?.srid);\n\t}\n\treturn new PgGeometryObjectBuilder(name, config?.srid);\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport class PgRealBuilder extends PgColumnBuilder<\n\t{\n\t\tdataType: 'number float';\n\t\tdata: number;\n\t\tdriverParam: string | number;\n\t},\n\t{ length: number | undefined }\n> {\n\tstatic override readonly [entityKind]: string = 'PgRealBuilder';\n\n\tconstructor(name: string, length?: number) {\n\t\tsuper(name, 'number float', 'PgReal');\n\t\tthis.config.length = length;\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgReal(table, this.config as any);\n\t}\n}\n\nexport class PgReal extends PgColumn<'number float'> {\n\tstatic override readonly [entityKind]: string = 'PgReal';\n\n\t/** @internal */\n\toverride readonly codec = 'float4';\n\n\tconstructor(table: PgTable<any>, config: PgRealBuilder['config']) {\n\t\tsuper(table, config);\n\t}\n\n\tgetSQLType(): string {\n\t\treturn 'real';\n\t}\n}\n\nexport function real(name?: string): PgRealBuilder {\n\treturn new PgRealBuilder(name ?? '');\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport class PgSerialBuilder extends PgColumnBuilder<{\n\tdataType: 'number int32';\n\tdata: number;\n\tdriverParam: number;\n\n\tnotNull: true;\n\thasDefault: true;\n}> {\n\tstatic override readonly [entityKind]: string = 'PgSerialBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'number int32', 'PgSerial');\n\t\tthis.config.hasDefault = true;\n\t\tthis.config.notNull = true;\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgSerial(table, this.config as any);\n\t}\n}\n\nexport class PgSerial extends PgColumn<'number int32'> {\n\tstatic override readonly [entityKind]: string = 'PgSerial';\n\n\t/** @internal */\n\toverride readonly codec = 'serial';\n\n\tgetSQLType(): string {\n\t\treturn 'serial';\n\t}\n}\n\nexport function serial(name?: string): PgSerialBuilder {\n\treturn new PgSerialBuilder(name ?? '');\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport { PgColumn } from './common.ts';\nimport { PgIntColumnBuilder } from './int.common.ts';\n\nexport class PgSmallIntBuilder extends PgIntColumnBuilder<{\n\tdataType: 'number int16';\n\tdata: number;\n\tdriverParam: number | string;\n}> {\n\tstatic override readonly [entityKind]: string = 'PgSmallIntBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'number int16', 'PgSmallInt');\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgSmallInt(table, this.config as any);\n\t}\n}\n\nexport class PgSmallInt extends PgColumn<'number int16'> {\n\tstatic override readonly [entityKind]: string = 'PgSmallInt';\n\n\t/** @internal */\n\toverride readonly codec = 'smallint';\n\n\tgetSQLType(): string {\n\t\treturn 'smallint';\n\t}\n}\nexport function smallint(name?: string): PgSmallIntBuilder {\n\treturn new PgSmallIntBuilder(name ?? '');\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport class PgSmallSerialBuilder extends PgColumnBuilder<{\n\tdataType: 'number int16';\n\tdata: number;\n\tdriverParam: number;\n\tnotNull: true;\n\thasDefault: true;\n}> {\n\tstatic override readonly [entityKind]: string = 'PgSmallSerialBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'number int16', 'PgSmallSerial');\n\t\tthis.config.hasDefault = true;\n\t\tthis.config.notNull = true;\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgSmallSerial(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class PgSmallSerial extends PgColumn<'number int16'> {\n\tstatic override readonly [entityKind]: string = 'PgSmallSerial';\n\n\t/** @internal */\n\toverride readonly codec = 'smallserial';\n\n\tgetSQLType(): string {\n\t\treturn 'smallserial';\n\t}\n}\n\nexport function smallserial(name?: string): PgSmallSerialBuilder {\n\treturn new PgSmallSerialBuilder(name ?? '');\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport { type Equal, getColumnNameAndConfig, type Writable } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\ntype PgTextBuilderConfig<TEnum extends [string, ...string[]]> = Equal<TEnum, [string, ...string[]]> extends true\n\t? { dataType: 'string'; data: string; driverParam: string }\n\t: { dataType: 'string enum'; data: TEnum[number]; enumValues: TEnum; driverParam: string };\n\nexport class PgTextBuilder<TEnum extends [string, ...string[]] = [string, ...string[]]> extends PgColumnBuilder<\n\tPgTextBuilderConfig<TEnum>,\n\t{ enumValues: TEnum }\n> {\n\tstatic override readonly [entityKind]: string = 'PgTextBuilder';\n\n\tconstructor(\n\t\tname: string,\n\t\tconfig: PgTextConfig<TEnum>,\n\t) {\n\t\tsuper(name, config.enum?.length ? 'string enum' : 'string', 'PgText');\n\t\tthis.config.enumValues = config.enum as TEnum;\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgText(table, this.config as any, this.config.enumValues);\n\t}\n}\n\nexport class PgText<TEnum extends [string, ...string[]] = [string, ...string[]]> extends PgColumn<\n\tEqual<TEnum, [string, ...string[]]> extends true ? 'string' : 'string enum'\n> {\n\tstatic override readonly [entityKind]: string = 'PgText';\n\toverride readonly enumValues;\n\n\t/** @internal */\n\toverride readonly codec = 'text';\n\n\tconstructor(\n\t\ttable: PgTable<any>,\n\t\tconfig: any,\n\t\tenumValues?: string[],\n\t) {\n\t\tsuper(table, config);\n\t\tthis.enumValues = enumValues;\n\t}\n\n\tgetSQLType(): string {\n\t\treturn 'text';\n\t}\n}\n\nexport interface PgTextConfig<\n\tTEnum extends readonly string[] | undefined = readonly string[] | undefined,\n> {\n\tenum?: TEnum;\n}\n\n// Original function overloads style\nexport function text(): PgTextBuilder;\nexport function text(name: string): PgTextBuilder;\nexport function text<U extends string, T extends Readonly<[U, ...U[]]>>(\n\tconfig: PgTextConfig<T | Writable<T>>,\n): PgTextBuilder<Writable<T>>;\nexport function text<U extends string, T extends Readonly<[U, ...U[]]>>(\n\tname: string,\n\tconfig: PgTextConfig<T | Writable<T>>,\n): PgTextBuilder<Writable<T>>;\nexport function text(a?: string | PgTextConfig, b: PgTextConfig = {}): any {\n\tconst { name, config } = getColumnNameAndConfig<PgTextConfig>(a, b);\n\treturn new PgTextBuilder(name, config as any);\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport { getColumnNameAndConfig } from '~/utils.ts';\nimport { PgColumn } from './common.ts';\nimport { PgDateColumnBuilder } from './date.common.ts';\nimport type { Precision } from './timestamp.ts';\n\nexport class PgTimeBuilder extends PgDateColumnBuilder<\n\t{\n\t\tdataType: 'string time';\n\t\tdata: string;\n\t\tdriverParam: string;\n\t},\n\t{ withTimezone: boolean; precision: number | undefined }\n> {\n\tstatic override readonly [entityKind]: string = 'PgTimeBuilder';\n\n\tconstructor(\n\t\tname: string,\n\t\treadonly withTimezone: boolean,\n\t\treadonly precision: number | undefined,\n\t) {\n\t\tsuper(name, 'string time', 'PgTime');\n\t\tthis.config.withTimezone = withTimezone;\n\t\tthis.config.precision = precision;\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgTime(table, this.config as any);\n\t}\n}\n\nexport class PgTime extends PgColumn<'string time'> {\n\tstatic override readonly [entityKind]: string = 'PgTime';\n\n\t/** @internal */\n\toverride readonly codec = 'time';\n\n\treadonly withTimezone: boolean;\n\treadonly precision: number | undefined;\n\n\tconstructor(table: PgTable<any>, config: PgTimeBuilder['config']) {\n\t\tsuper(table, config);\n\t\tthis.withTimezone = config.withTimezone;\n\t\tthis.precision = config.precision;\n\t}\n\n\tgetSQLType(): string {\n\t\tconst precision = this.precision === undefined ? '' : `(${this.precision})`;\n\t\treturn `time${precision}${this.withTimezone ? ' with time zone' : ''}`;\n\t}\n}\n\nexport interface TimeConfig {\n\tprecision?: Precision;\n\twithTimezone?: boolean;\n}\n\nexport function time(config?: TimeConfig): PgTimeBuilder;\nexport function time(name: string, config?: TimeConfig): PgTimeBuilder;\nexport function time(a?: string | TimeConfig, b: TimeConfig = {}) {\n\tconst { name, config } = getColumnNameAndConfig<TimeConfig>(a, b);\n\treturn new PgTimeBuilder(name, config.withTimezone ?? false, config.precision);\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { PgColumn } from './common.ts';\nimport { PgDateColumnBuilder } from './date.common.ts';\n\nexport class PgTimestampBuilder extends PgDateColumnBuilder<\n\t{\n\t\tdataType: 'object date';\n\t\tdata: Date;\n\t\tdriverParam: string;\n\t},\n\t{ withTimezone: boolean; precision: number | undefined }\n> {\n\tstatic override readonly [entityKind]: string = 'PgTimestampBuilder';\n\n\tconstructor(\n\t\tname: string,\n\t\twithTimezone: boolean,\n\t\tprecision: number | undefined,\n\t) {\n\t\tsuper(name, 'object date', 'PgTimestamp');\n\t\tthis.config.withTimezone = withTimezone;\n\t\tthis.config.precision = precision;\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgTimestamp(table, this.config as any);\n\t}\n}\n\nexport class PgTimestamp extends PgColumn<'object date'> {\n\tstatic override readonly [entityKind]: string = 'PgTimestamp';\n\n\t/** @internal */\n\toverride readonly codec: 'timestamp' | 'timestamptz';\n\n\treadonly withTimezone: boolean;\n\treadonly precision: number | undefined;\n\n\tconstructor(table: PgTable<any>, config: PgTimestampBuilder['config']) {\n\t\tsuper(table, config);\n\t\tthis.withTimezone = config.withTimezone;\n\t\tthis.precision = config.precision;\n\t\tthis.codec = this.withTimezone ? 'timestamptz' : 'timestamp';\n\t}\n\n\tgetSQLType(): string {\n\t\tconst precision = this.precision === undefined ? '' : ` (${this.precision})`;\n\t\treturn `timestamp${precision}${this.withTimezone ? ' with time zone' : ''}`;\n\t}\n\n\toverride mapToDriverValue = (value: Date | string): string => {\n\t\tif (typeof value === 'string') return value;\n\t\treturn value.toISOString();\n\t};\n}\n\nexport class PgTimestampStringBuilder extends PgDateColumnBuilder<\n\t{\n\t\tdataType: 'string timestamp';\n\t\tdata: string;\n\t\tdriverParam: string;\n\t},\n\t{ withTimezone: boolean; precision: number | undefined }\n> {\n\tstatic override readonly [entityKind]: string = 'PgTimestampStringBuilder';\n\n\tconstructor(\n\t\tname: string,\n\t\twithTimezone: boolean,\n\t\tprecision: number | undefined,\n\t) {\n\t\tsuper(name, 'string timestamp', 'PgTimestampString');\n\t\tthis.config.withTimezone = withTimezone;\n\t\tthis.config.precision = precision;\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgTimestampString(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class PgTimestampString extends PgColumn<'string timestamp'> {\n\tstatic override readonly [entityKind]: string = 'PgTimestampString';\n\n\t/** @internal */\n\toverride readonly codec: 'timestamp:string' | 'timestamptz:string';\n\n\treadonly withTimezone: boolean;\n\treadonly precision: number | undefined;\n\n\tconstructor(table: PgTable<any>, config: PgTimestampStringBuilder['config']) {\n\t\tsuper(table, config);\n\t\tthis.withTimezone = config.withTimezone;\n\t\tthis.precision = config.precision;\n\t\tthis.codec = this.withTimezone ? 'timestamptz:string' : 'timestamp:string';\n\t}\n\n\tgetSQLType(): string {\n\t\tconst precision = this.precision === undefined ? '' : `(${this.precision})`;\n\t\treturn `timestamp${precision}${this.withTimezone ? ' with time zone' : ''}`;\n\t}\n\n\toverride mapToDriverValue = (value: Date | string): string => {\n\t\tif (typeof value === 'string') return value;\n\t\treturn value.toISOString();\n\t};\n}\n\nexport type Precision = 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\nexport interface PgTimestampConfig<TMode extends 'date' | 'string' = 'date' | 'string'> {\n\tmode?: TMode;\n\tprecision?: Precision;\n\twithTimezone?: boolean;\n}\n\nexport function timestamp<TMode extends PgTimestampConfig['mode'] & {}>(\n\tconfig?: PgTimestampConfig<TMode>,\n): Equal<TMode, 'string'> extends true ? PgTimestampStringBuilder : PgTimestampBuilder;\nexport function timestamp<TMode extends PgTimestampConfig['mode'] & {}>(\n\tname: string,\n\tconfig?: PgTimestampConfig<TMode>,\n): Equal<TMode, 'string'> extends true ? PgTimestampStringBuilder : PgTimestampBuilder;\nexport function timestamp(a?: string | PgTimestampConfig, b: PgTimestampConfig = {}) {\n\tconst { name, config } = getColumnNameAndConfig<PgTimestampConfig | undefined>(a, b);\n\tif (config?.mode === 'string') {\n\t\treturn new PgTimestampStringBuilder(name, config.withTimezone ?? false, config.precision);\n\t}\n\treturn new PgTimestampBuilder(name, config?.withTimezone ?? false, config?.precision);\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport { sql } from '~/sql/sql.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\nexport class PgUUIDBuilder extends PgColumnBuilder<{\n\tdataType: 'string uuid';\n\tdata: string;\n\tdriverParam: string;\n}> {\n\tstatic override readonly [entityKind]: string = 'PgUUIDBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'string uuid', 'PgUUID');\n\t}\n\n\t/**\n\t * Adds `default gen_random_uuid()` to the column definition.\n\t */\n\tdefaultRandom(): ReturnType<this['default']> {\n\t\treturn this.default(sql`gen_random_uuid()`) as ReturnType<this['default']>;\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgUUID(table, this.config as any);\n\t}\n}\n\nexport class PgUUID extends PgColumn<'string uuid'> {\n\tstatic override readonly [entityKind]: string = 'PgUUID';\n\n\t/** @internal */\n\toverride readonly codec = 'uuid';\n\n\tgetSQLType(): string {\n\t\treturn 'uuid';\n\t}\n}\n\nexport function uuid(name?: string): PgUUIDBuilder {\n\treturn new PgUUIDBuilder(name ?? '');\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport { type Equal, getColumnNameAndConfig, type Writable } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\ntype PgVarcharBuilderConfig<TEnum extends [string, ...string[]]> = Equal<TEnum, [string, ...string[]]> extends true\n\t? { dataType: 'string'; data: string; driverParam: string }\n\t: { dataType: 'string enum'; data: TEnum[number]; enumValues: TEnum; driverParam: string };\n\nexport class PgVarcharBuilder<TEnum extends [string, ...string[]] = [string, ...string[]]> extends PgColumnBuilder<\n\tPgVarcharBuilderConfig<TEnum>,\n\t{ length: number | undefined; enumValues: TEnum }\n> {\n\tstatic override readonly [entityKind]: string = 'PgVarcharBuilder';\n\n\tconstructor(name: string, config: PgVarcharConfig<TEnum>) {\n\t\tsuper(name, config.enum?.length ? 'string enum' : 'string', 'PgVarchar');\n\t\tthis.config.length = config.length!;\n\t\tthis.config.enumValues = config.enum as TEnum;\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgVarchar(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class PgVarchar<TEnum extends [string, ...string[]] = [string, ...string[]]>\n\textends PgColumn<Equal<TEnum, [string, ...string[]]> extends true ? 'string' : 'string enum'>\n{\n\tstatic override readonly [entityKind]: string = 'PgVarchar';\n\n\t/** @internal */\n\toverride readonly codec = 'varchar';\n\n\toverride readonly enumValues: TEnum;\n\n\tconstructor(table: PgTable<any>, config: PgVarcharBuilder<TEnum>['config']) {\n\t\tsuper(table, config as any);\n\t\tthis.enumValues = config.enumValues;\n\t}\n\n\tgetSQLType(): string {\n\t\treturn this.length === undefined ? `varchar` : `varchar(${this.length})`;\n\t}\n}\n\nexport interface PgVarcharConfig<\n\tTEnum extends readonly string[] | string[] | undefined = readonly string[] | string[] | undefined,\n> {\n\tenum?: TEnum;\n\tlength?: number;\n}\n\nexport function varchar(): PgVarcharBuilder;\nexport function varchar(name: string): PgVarcharBuilder;\nexport function varchar(config: { length?: number }): PgVarcharBuilder;\nexport function varchar(name: string, config: { length?: number }): PgVarcharBuilder;\nexport function varchar<U extends string, T extends Readonly<[U, ...U[]]>>(\n\tconfig: PgVarcharConfig<T | Writable<T>> & { enum: T | Writable<T> },\n): PgVarcharBuilder<Writable<T>>;\nexport function varchar<U extends string, T extends Readonly<[U, ...U[]]>>(\n\tname: string,\n\tconfig: PgVarcharConfig<T | Writable<T>> & { enum: T | Writable<T> },\n): PgVarcharBuilder<Writable<T>>;\nexport function varchar(a?: string | PgVarcharConfig, b: PgVarcharConfig = {}): any {\n\tconst { name, config } = getColumnNameAndConfig<PgVarcharConfig>(a, b);\n\treturn new PgVarcharBuilder(name, config as any);\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport { getColumnNameAndConfig } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from '../common.ts';\n\nexport class PgBinaryVectorBuilder extends PgColumnBuilder<\n\t{\n\t\tdataType: 'string binary';\n\t\tdata: string;\n\t\tdriverParam: string;\n\t},\n\t{ length: number; isLengthExact: true }\n> {\n\tstatic override readonly [entityKind]: string = 'PgBinaryVectorBuilder';\n\n\tconstructor(name: string, config: PgBinaryVectorConfig) {\n\t\tsuper(name, 'string binary', 'PgBinaryVector');\n\t\tthis.config.length = config.dimensions;\n\t\tthis.config.isLengthExact = true;\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgBinaryVector(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class PgBinaryVector extends PgColumn<'string binary'> {\n\tstatic override readonly [entityKind]: string = 'PgBinaryVector';\n\n\t/** @internal */\n\toverride readonly codec = 'bit';\n\n\tgetSQLType(): string {\n\t\treturn `bit(${this.length})`;\n\t}\n}\n\nexport interface PgBinaryVectorConfig {\n\tdimensions: number;\n}\n\nexport function bit(\n\tconfig: PgBinaryVectorConfig,\n): PgBinaryVectorBuilder;\nexport function bit(\n\tname: string,\n\tconfig: PgBinaryVectorConfig,\n): PgBinaryVectorBuilder;\nexport function bit(a: string | PgBinaryVectorConfig, b?: PgBinaryVectorConfig) {\n\tconst { name, config } = getColumnNameAndConfig<PgBinaryVectorConfig>(a, b);\n\treturn new PgBinaryVectorBuilder(name, config);\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport { getColumnNameAndConfig } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from '../common.ts';\n\nexport class PgHalfVectorBuilder extends PgColumnBuilder<\n\t{\n\t\tdataType: 'array halfvector';\n\t\tdata: number[];\n\t\tdriverParam: string;\n\t},\n\t{ length: number; isLengthExact: true }\n> {\n\tstatic override readonly [entityKind]: string = 'PgHalfVectorBuilder';\n\n\tconstructor(name: string, config: PgHalfVectorConfig) {\n\t\tsuper(name, 'array halfvector', 'PgHalfVector');\n\t\tthis.config.length = config.dimensions;\n\t\tthis.config.isLengthExact = true;\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgHalfVector(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class PgHalfVector extends PgColumn<'array halfvector'> {\n\tstatic override readonly [entityKind]: string = 'PgHalfVector';\n\n\t/** @internal */\n\toverride readonly codec = 'halfvec';\n\n\tgetSQLType(): string {\n\t\treturn `halfvec(${this.length})`;\n\t}\n\n\toverride mapToDriverValue = (value: unknown): unknown => {\n\t\treturn JSON.stringify(value);\n\t};\n}\n\nexport interface PgHalfVectorConfig {\n\tdimensions: number;\n}\n\nexport function halfvec(\n\tconfig: PgHalfVectorConfig,\n): PgHalfVectorBuilder;\nexport function halfvec(\n\tname: string,\n\tconfig: PgHalfVectorConfig,\n): PgHalfVectorBuilder;\nexport function halfvec(a: string | PgHalfVectorConfig, b?: PgHalfVectorConfig) {\n\tconst { name, config } = getColumnNameAndConfig<PgHalfVectorConfig>(a, b);\n\treturn new PgHalfVectorBuilder(name, config);\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport { getColumnNameAndConfig } from '~/utils.ts';\nimport type { PgColumnBaseConfig } from '../common.ts';\nimport { PgColumn, PgColumnBuilder } from '../common.ts';\n\nexport class PgSparseVectorBuilder extends PgColumnBuilder<\n\t{\n\t\tdataType: 'string sparsevec';\n\t\tdata: string;\n\t\tdriverParam: string;\n\t},\n\t{ vectorDimensions: number | undefined }\n> {\n\tstatic override readonly [entityKind]: string = 'PgSparseVectorBuilder';\n\n\tconstructor(name: string, config: PgSparseVectorConfig) {\n\t\tsuper(name, 'string sparsevec', 'PgSparseVector');\n\t\tthis.config.vectorDimensions = config.dimensions;\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgSparseVector(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class PgSparseVector\n\textends PgColumn<'string sparsevec', PgColumnBaseConfig<'string sparsevec'>, { vectorDimensions: number | undefined }>\n{\n\tstatic override readonly [entityKind]: string = 'PgSparseVector';\n\n\t/** @internal */\n\toverride readonly codec = 'sparsevec';\n\n\treadonly vectorDimensions = this.config.vectorDimensions;\n\n\tgetSQLType(): string {\n\t\treturn `sparsevec(${this.vectorDimensions})`;\n\t}\n}\n\nexport interface PgSparseVectorConfig {\n\tdimensions: number;\n}\n\nexport function sparsevec(\n\tconfig: PgSparseVectorConfig,\n): PgSparseVectorBuilder;\nexport function sparsevec(\n\tname: string,\n\tconfig: PgSparseVectorConfig,\n): PgSparseVectorBuilder;\nexport function sparsevec(a: string | PgSparseVectorConfig, b?: PgSparseVectorConfig) {\n\tconst { name, config } = getColumnNameAndConfig<PgSparseVectorConfig>(a, b);\n\treturn new PgSparseVectorBuilder(name, config);\n}\n","import { entityKind } from '~/entity.ts';\nimport type { PgTable } from '~/pg-core/table.ts';\nimport { getColumnNameAndConfig } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from '../common.ts';\n\nexport class PgVectorBuilder extends PgColumnBuilder<\n\t{\n\t\tdataType: 'array vector';\n\t\tdata: number[];\n\t\tdriverParam: string;\n\t},\n\t{ length: number; isLengthExact: true }\n> {\n\tstatic override readonly [entityKind]: string = 'PgVectorBuilder';\n\n\tconstructor(name: string, config: PgVectorConfig) {\n\t\tsuper(name, 'array vector', 'PgVector');\n\t\tthis.config.length = config.dimensions;\n\t\tthis.config.isLengthExact = true;\n\t}\n\n\t/** @internal */\n\toverride build(table: PgTable<any>) {\n\t\treturn new PgVector(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class PgVector extends PgColumn<'array vector'> {\n\tstatic override readonly [entityKind]: string = 'PgVector';\n\n\t/** @internal */\n\toverride readonly codec = 'vector';\n\n\tgetSQLType(): string {\n\t\treturn `vector(${this.length})`;\n\t}\n\n\toverride mapToDriverValue = (value: unknown): unknown => {\n\t\treturn JSON.stringify(value);\n\t};\n}\n\nexport interface PgVectorConfig {\n\tdimensions: number;\n}\n\nexport function vector(\n\tconfig: PgVectorConfig,\n): PgVectorBuilder;\nexport function vector(\n\tname: string,\n\tconfig: PgVectorConfig,\n): PgVectorBuilder;\nexport function vector(a: string | PgVectorConfig, b?: PgVectorConfig) {\n\tconst { name, config } = getColumnNameAndConfig<PgVectorConfig>(a, b);\n\treturn new PgVectorBuilder(name, config);\n}\n","import { bigint } from './bigint.ts';\nimport { bigserial } from './bigserial.ts';\nimport { boolean } from './boolean.ts';\nimport { char } from './char.ts';\nimport { cidr } from './cidr.ts';\nimport { customType } from './custom.ts';\nimport { date } from './date.ts';\nimport { doublePrecision } from './double-precision.ts';\nimport { inet } from './inet.ts';\nimport { integer } from './integer.ts';\nimport { interval } from './interval.ts';\nimport { json } from './json.ts';\nimport { jsonb } from './jsonb.ts';\nimport { line } from './line.ts';\nimport { macaddr } from './macaddr.ts';\nimport { macaddr8 } from './macaddr8.ts';\nimport { numeric } from './numeric.ts';\nimport { point } from './point.ts';\nimport { geometry } from './postgis_extension/geometry.ts';\nimport { real } from './real.ts';\nimport { serial } from './serial.ts';\nimport { smallint } from './smallint.ts';\nimport { smallserial } from './smallserial.ts';\nimport { text } from './text.ts';\nimport { time } from './time.ts';\nimport { timestamp } from './timestamp.ts';\nimport { uuid } from './uuid.ts';\nimport { varchar } from './varchar.ts';\nimport { bit } from './vector_extension/bit.ts';\nimport { halfvec } from './vector_extension/halfvec.ts';\nimport { sparsevec } from './vector_extension/sparsevec.ts';\nimport { vector } from './vector_extension/vector.ts';\n\nexport function getPgColumnBuilders() {\n\treturn {\n\t\tbigint,\n\t\tbigserial,\n\t\tboolean,\n\t\tchar,\n\t\tcidr,\n\t\tcustomType,\n\t\tdate,\n\t\tdoublePrecision,\n\t\tinet,\n\t\tinteger,\n\t\tinterval,\n\t\tjson,\n\t\tjsonb,\n\t\tline,\n\t\tmacaddr,\n\t\tmacaddr8,\n\t\tnumeric,\n\t\tpoint,\n\t\tgeometry,\n\t\treal,\n\t\tserial,\n\t\tsmallint,\n\t\tsmallserial,\n\t\ttext,\n\t\ttime,\n\t\ttimestamp,\n\t\tuuid,\n\t\tvarchar,\n\t\tbit,\n\t\thalfvec,\n\t\tsparsevec,\n\t\tvector,\n\t};\n}\n\nexport type PgColumnsBuilders = ReturnType<typeof getPgColumnBuilders>;\n","export type Casing = 'snake_case' | 'camelCase';\n\nexport function toSnakeCase(input: string) {\n\tconst words = input\n\t\t.replace(/['\\u2019]/g, '')\n\t\t.match(/[\\da-z]+|[A-Z]+(?![a-z])|[A-Z][\\da-z]+/g) ?? [];\n\n\treturn words.map((word) => word.toLowerCase()).join('_');\n}\n\nexport function toCamelCase(input: string) {\n\tconst words = input\n\t\t.replace(/['\\u2019]/g, '')\n\t\t.match(/[\\da-z]+|[A-Z]+(?![a-z])|[A-Z][\\da-z]+/g) ?? [];\n\n\treturn words.reduce((acc, word, i) => {\n\t\tconst formattedWord = i === 0 ? word.toLowerCase() : `${word[0]!.toUpperCase()}${word.slice(1)}`;\n\t\treturn acc + formattedWord;\n\t}, '');\n}\n\nexport function getCasingFn(casing: Casing | undefined) {\n\tif (casing === 'snake_case') return toSnakeCase;\n\tif (casing === 'camelCase') return toCamelCase;\n\treturn (name: string) => name;\n}\n","import { type Casing, getCasingFn } from '~/casing.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { InferModelFromColumns } from '~/table.ts';\nimport { Table, type TableConfig as TableConfigBase, type UpdateTableConfig } from '~/table.ts';\nimport type { CheckBuilder } from './checks.ts';\nimport { getPgColumnBuilders, type PgColumnsBuilders } from './columns/all.ts';\nimport type {\n\tAnyPgColumnBuilder,\n\tExtraConfigColumn,\n\tPgBuildColumns,\n\tPgBuildExtraConfigColumns,\n\tPgColumn,\n\tPgColumnBuilder,\n\tPgColumns,\n} from './columns/common.ts';\nimport type { ForeignKey, ForeignKeyBuilder } from './foreign-keys.ts';\nimport type { AnyIndexBuilder } from './indexes.ts';\nimport type { PgPolicy } from './policies.ts';\nimport type { PrimaryKeyBuilder } from './primary-keys.ts';\nimport type { UniqueConstraintBuilder } from './unique-constraint.ts';\n\nexport type PgTableExtraConfigValue =\n\t| AnyIndexBuilder\n\t| CheckBuilder\n\t| ForeignKeyBuilder\n\t| PrimaryKeyBuilder\n\t| UniqueConstraintBuilder\n\t| PgPolicy;\n\nexport type PgTableExtraConfig = Record<string, PgTableExtraConfigValue>;\n\nexport type TableConfig = TableConfigBase<PgColumns>;\n\n/** @internal */\nexport const InlineForeignKeys = Symbol.for('drizzle:PgInlineForeignKeys');\n/** @internal */\nexport const EnableRLS = Symbol.for('drizzle:EnableRLS');\n\nexport class PgTable<out T extends TableConfig = TableConfig> extends Table<T> {\n\tstatic override readonly [entityKind]: string = 'PgTable';\n\n\t/** @internal */\n\tstatic override readonly Symbol = Object.assign({}, Table.Symbol, {\n\t\tInlineForeignKeys: InlineForeignKeys as typeof InlineForeignKeys,\n\t\tEnableRLS: EnableRLS as typeof EnableRLS,\n\t});\n\n\t/**@internal */\n\t[InlineForeignKeys]: ForeignKey[] = [];\n\n\t/** @internal */\n\t[EnableRLS]: boolean = false;\n\n\t/** @internal */\n\toverride [Table.Symbol.ExtraConfigBuilder]: ((self: Record<string, PgColumn>) => PgTableExtraConfig) | undefined =\n\t\tundefined;\n\n\t/** @internal */\n\toverride [Table.Symbol.ExtraConfigColumns]: Record<string, ExtraConfigColumn> = {};\n}\n\nexport type AnyPgTable<TPartial extends Partial<TableConfig> = {}> = PgTable<UpdateTableConfig<TableConfig, TPartial>>;\n\nexport type PgTableWithColumns<T extends TableConfig> =\n\t& PgTable<T>\n\t& T['columns']\n\t& {\n\t\treadonly $inferSelect: InferModelFromColumns<T['columns'], 'select'>;\n\t\treadonly $inferInsert: InferModelFromColumns<T['columns'], 'insert'>;\n\t}\n\t& {\n\t\t/** @deprecated use `pgTable.withRLS()` instead*/\n\t\tenableRLS: () => Omit<\n\t\t\tPgTableWithColumns<T>,\n\t\t\t'enableRLS'\n\t\t>;\n\t};\n\n/** @internal */\nexport function pgTableWithSchema<\n\tTTableName extends string,\n\tTSchemaName extends string | undefined,\n\tTColumnsMap extends Record<string, AnyPgColumnBuilder>,\n>(\n\tname: TTableName,\n\tcolumns: TColumnsMap | ((columnTypes: PgColumnsBuilders) => TColumnsMap),\n\textraConfig:\n\t\t| ((self: PgBuildExtraConfigColumns<TColumnsMap>) => PgTableExtraConfig | PgTableExtraConfigValue[])\n\t\t| undefined,\n\tschema: TSchemaName,\n\tcasing: Casing | undefined,\n\tbaseName = name,\n): PgTableWithColumns<{\n\tname: TTableName;\n\tschema: TSchemaName;\n\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\tdialect: 'pg';\n}> {\n\tconst casingFn = getCasingFn(casing);\n\tconst rawTable = new PgTable<{\n\t\tname: TTableName;\n\t\tschema: TSchemaName;\n\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\tdialect: 'pg';\n\t}>(name, schema, baseName);\n\n\tconst parsedColumns: TColumnsMap = typeof columns === 'function' ? columns(getPgColumnBuilders()) : columns;\n\n\tconst builtColumns = Object.fromEntries(\n\t\tObject.entries(parsedColumns).map(([name, colBuilderBase]) => {\n\t\t\tconst colBuilder = colBuilderBase as PgColumnBuilder;\n\t\t\tcolBuilder.setName(name, casingFn);\n\t\t\tconst column = colBuilder.build(rawTable).postBuild();\n\t\t\trawTable[InlineForeignKeys].push(...colBuilder.buildForeignKeys(column, rawTable));\n\t\t\treturn [name, column];\n\t\t}),\n\t) as unknown as PgBuildColumns<TTableName, TColumnsMap>;\n\n\tconst builtColumnsForExtraConfig = Object.fromEntries(\n\t\tObject.entries(parsedColumns).map(([name, colBuilderBase]) => {\n\t\t\tconst colBuilder = colBuilderBase as PgColumnBuilder;\n\t\t\tcolBuilder.setName(name, casingFn);\n\t\t\tconst column = colBuilder.buildExtraConfigColumn(rawTable);\n\t\t\treturn [name, column];\n\t\t}),\n\t) as unknown as PgBuildExtraConfigColumns<TColumnsMap>;\n\n\tconst table = Object.assign(rawTable, builtColumns);\n\n\ttable[Table.Symbol.Columns] = builtColumns;\n\ttable[Table.Symbol.ExtraConfigColumns] = builtColumnsForExtraConfig;\n\n\tif (extraConfig) {\n\t\ttable[PgTable.Symbol.ExtraConfigBuilder] = extraConfig as any;\n\t}\n\n\treturn Object.assign(table, {\n\t\tenableRLS: () => {\n\t\t\ttable[PgTable.Symbol.EnableRLS] = true;\n\t\t\treturn table as PgTableWithColumns<{\n\t\t\t\tname: TTableName;\n\t\t\t\tschema: TSchemaName;\n\t\t\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\t\t\tdialect: 'pg';\n\t\t\t}>;\n\t\t},\n\t}) as any;\n}\nexport interface PgTableFnInternal<TSchema extends string | undefined = undefined> {\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, AnyPgColumnBuilder>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig?: (\n\t\t\tself: PgBuildExtraConfigColumns<TColumnsMap>,\n\t\t) => PgTableExtraConfigValue[],\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\tdialect: 'pg';\n\t}>;\n\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, AnyPgColumnBuilder>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: PgColumnsBuilders) => TColumnsMap,\n\t\textraConfig?: (self: PgBuildExtraConfigColumns<TColumnsMap>) => PgTableExtraConfigValue[],\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\tdialect: 'pg';\n\t}>;\n\t/**\n\t * @deprecated The third parameter of pgTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, AnyPgColumnBuilder>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig: (\n\t\t\tself: PgBuildExtraConfigColumns<TColumnsMap>,\n\t\t) => PgTableExtraConfig,\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\tdialect: 'pg';\n\t}>;\n\n\t/**\n\t * @deprecated The third parameter of pgTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, AnyPgColumnBuilder>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: PgColumnsBuilders) => TColumnsMap,\n\t\textraConfig: (self: PgBuildExtraConfigColumns<TColumnsMap>) => PgTableExtraConfig,\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\tdialect: 'pg';\n\t}>;\n}\n\nexport interface PgTableFn<TSchema extends string | undefined = undefined> extends PgTableFnInternal<TSchema> {\n\twithRLS: PgTableFnInternal<TSchema>;\n}\n\n/** @internal */\nexport function pgTableWithCasing(casing: Casing | undefined): PgTableFn {\n\tconst pgTableInternal: PgTableFnInternal = (name, columns, extraConfig) => {\n\t\treturn pgTableWithSchema(name, columns, extraConfig, undefined, casing);\n\t};\n\n\tconst pgTableWithRLS: PgTableFn['withRLS'] = (name, columns, extraConfig) => {\n\t\tconst table = pgTableWithSchema(name, columns, extraConfig, undefined, casing);\n\t\ttable[EnableRLS] = true;\n\n\t\treturn table;\n\t};\n\n\treturn Object.assign(pgTableInternal, { withRLS: pgTableWithRLS });\n}\n\nexport const pgTable = pgTableWithCasing(undefined);\n\nexport function pgTableCreator(customizeTableName: (name: string) => string, casing?: Casing | undefined): PgTableFn {\n\tconst fn: PgTableFnInternal = (name, columns, extraConfig) => {\n\t\treturn pgTableWithSchema(customizeTableName(name) as typeof name, columns, extraConfig, undefined, casing, name);\n\t};\n\n\treturn Object.assign(fn, {\n\t\twithRLS: ((name, columns, extraConfig) => {\n\t\t\tconst table = pgTableWithSchema(\n\t\t\t\tcustomizeTableName(name) as typeof name,\n\t\t\t\tcolumns,\n\t\t\t\textraConfig,\n\t\t\t\tundefined,\n\t\t\t\tcasing,\n\t\t\t\tname,\n\t\t\t);\n\t\t\ttable[EnableRLS] = true;\n\n\t\t\treturn table;\n\t\t}) as PgTableFnInternal,\n\t});\n}\n","import { entityKind } from '~/entity.ts';\nimport type { SQL } from '~/sql/index.ts';\nimport type { PgTable } from './table.ts';\n\nexport class CheckBuilder {\n\tstatic readonly [entityKind]: string = 'PgCheckBuilder';\n\n\tprotected brand!: 'PgConstraintBuilder';\n\n\tconstructor(public name: string, public value: SQL) {}\n\n\t/** @internal */\n\tbuild(table: PgTable): Check {\n\t\treturn new Check(table, this);\n\t}\n}\n\nexport class Check {\n\tstatic readonly [entityKind]: string = 'PgCheck';\n\n\treadonly name: string;\n\treadonly value: SQL;\n\n\tconstructor(public table: PgTable, builder: CheckBuilder) {\n\t\tthis.name = builder.name;\n\t\tthis.value = builder.value;\n\t}\n}\n\nexport function check(name: string, value: SQL): CheckBuilder {\n\treturn new CheckBuilder(name, value);\n}\n","import { entityKind, is } from '~/entity.ts';\nimport { SQL } from '~/sql/sql.ts';\nimport { ExtraConfigColumn } from './columns/index.ts';\nimport type { PgColumn } from './columns/index.ts';\nimport { IndexedColumn } from './columns/index.ts';\nimport type { PgTable } from './table.ts';\n\ninterface IndexConfig {\n\tname?: string;\n\n\tcolumns: Partial<IndexedColumn | SQL>[];\n\n\t/**\n\t * If true, the index will be created as `create unique index` instead of `create index`.\n\t */\n\tunique: boolean;\n\n\t/**\n\t * If true, the index will be created as `create index concurrently` instead of `create index`.\n\t */\n\tconcurrently?: boolean;\n\n\t/**\n\t * If true, the index will be created as `create index ... on only <table>` instead of `create index ... on <table>`.\n\t */\n\tonly: boolean;\n\n\t/**\n\t * Condition for partial index.\n\t */\n\twhere?: SQL;\n\n\t/**\n\t * The optional WITH clause specifies storage parameters for the index\n\t */\n\twith?: Record<string, any>;\n\n\t/**\n\t * The optional WITH clause method for the index\n\t */\n\tmethod?: 'btree' | string;\n}\n\nexport type IndexColumn = PgColumn;\n\nexport type PgIndexMethod = 'btree' | 'hash' | 'gist' | 'spgist' | 'gin' | 'brin' | 'hnsw' | 'ivfflat' | (string & {});\n\nexport type PgIndexOpClass =\n\t| 'abstime_ops'\n\t| 'access_method'\n\t| 'anyarray_eq'\n\t| 'anyarray_ge'\n\t| 'anyarray_gt'\n\t| 'anyarray_le'\n\t| 'anyarray_lt'\n\t| 'anyarray_ne'\n\t| 'bigint_ops'\n\t| 'bit_ops'\n\t| 'bool_ops'\n\t| 'box_ops'\n\t| 'bpchar_ops'\n\t| 'char_ops'\n\t| 'cidr_ops'\n\t| 'cstring_ops'\n\t| 'date_ops'\n\t| 'float_ops'\n\t| 'int2_ops'\n\t| 'int4_ops'\n\t| 'int8_ops'\n\t| 'interval_ops'\n\t| 'jsonb_ops'\n\t| 'macaddr_ops'\n\t| 'name_ops'\n\t| 'numeric_ops'\n\t| 'oid_ops'\n\t| 'oidint4_ops'\n\t| 'oidint8_ops'\n\t| 'oidname_ops'\n\t| 'oidvector_ops'\n\t| 'point_ops'\n\t| 'polygon_ops'\n\t| 'range_ops'\n\t| 'record_eq'\n\t| 'record_ge'\n\t| 'record_gt'\n\t| 'record_le'\n\t| 'record_lt'\n\t| 'record_ne'\n\t| 'text_ops'\n\t| 'time_ops'\n\t| 'timestamp_ops'\n\t| 'timestamptz_ops'\n\t| 'timetz_ops'\n\t| 'uuid_ops'\n\t| 'varbit_ops'\n\t| 'varchar_ops'\n\t// pg_vector types\n\t| 'xml_ops'\n\t| 'vector_l2_ops'\n\t| 'vector_ip_ops'\n\t| 'vector_cosine_ops'\n\t| 'vector_l1_ops'\n\t| 'bit_hamming_ops'\n\t| 'bit_jaccard_ops'\n\t| 'halfvec_l2_ops'\n\t| 'sparsevec_l2_op'\n\t| (string & {});\n\nexport class IndexBuilderOn {\n\tstatic readonly [entityKind]: string = 'PgIndexBuilderOn';\n\n\tconstructor(private unique: boolean, private name?: string) {}\n\n\ton(\n\t\t...columns: [Partial<ExtraConfigColumn> | SQL | PgColumn, ...(Partial<ExtraConfigColumn | SQL | PgColumn>)[]]\n\t): IndexBuilder {\n\t\treturn new IndexBuilder(\n\t\t\tcolumns.map((it) => {\n\t\t\t\tif (is(it, SQL)) {\n\t\t\t\t\treturn it;\n\t\t\t\t}\n\n\t\t\t\tif (is(it, ExtraConfigColumn)) {\n\t\t\t\t\tconst clonedIndexedColumn = new IndexedColumn(\n\t\t\t\t\t\tit.name,\n\t\t\t\t\t\t!!it.keyAsName,\n\t\t\t\t\t\tit.columnType!,\n\t\t\t\t\t\tit.indexConfig!,\n\t\t\t\t\t);\n\t\t\t\t\tit.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));\n\t\t\t\t\treturn clonedIndexedColumn;\n\t\t\t\t}\n\n\t\t\t\tit = it as PgColumn;\n\n\t\t\t\treturn new IndexedColumn(\n\t\t\t\t\tit.name!,\n\t\t\t\t\t!!it.keyAsName,\n\t\t\t\t\tit.columnType!,\n\t\t\t\t\t{},\n\t\t\t\t);\n\t\t\t}),\n\t\t\tthis.unique,\n\t\t\tfalse,\n\t\t\tthis.name,\n\t\t);\n\t}\n\n\tonOnly(\n\t\t...columns: [Partial<ExtraConfigColumn | SQL | PgColumn>, ...Partial<ExtraConfigColumn | SQL | PgColumn>[]]\n\t): IndexBuilder {\n\t\treturn new IndexBuilder(\n\t\t\tcolumns.map((it) => {\n\t\t\t\tif (is(it, SQL)) {\n\t\t\t\t\treturn it;\n\t\t\t\t}\n\n\t\t\t\tif (is(it, ExtraConfigColumn)) {\n\t\t\t\t\tconst clonedIndexedColumn = new IndexedColumn(\n\t\t\t\t\t\tit.name,\n\t\t\t\t\t\t!!it.keyAsName,\n\t\t\t\t\t\tit.columnType!,\n\t\t\t\t\t\tit.indexConfig!,\n\t\t\t\t\t);\n\t\t\t\t\tit.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));\n\t\t\t\t\treturn clonedIndexedColumn;\n\t\t\t\t}\n\n\t\t\t\tit = it as PgColumn;\n\n\t\t\t\treturn new IndexedColumn(\n\t\t\t\t\tit.name!,\n\t\t\t\t\t!!it.keyAsName,\n\t\t\t\t\tit.columnType!,\n\t\t\t\t\t{},\n\t\t\t\t);\n\t\t\t}),\n\t\t\tthis.unique,\n\t\t\ttrue,\n\t\t\tthis.name,\n\t\t);\n\t}\n\n\t/**\n\t * Specify what index method to use. Choices are `btree`, `hash`, `gist`, `spgist`, `gin`, `brin`, or user-installed access methods like `bloom`. The default method is `btree.\n\t *\n\t * If you have the `pg_vector` extension installed in your database, you can use the `hnsw` and `ivfflat` options, which are predefined types.\n\t *\n\t * **You can always specify any string you want in the method, in case Drizzle doesn't have it natively in its types**\n\t *\n\t * @param method The name of the index method to be used\n\t * @param columns\n\t * @returns\n\t */\n\tusing(\n\t\tmethod: PgIndexMethod,\n\t\t...columns: [Partial<ExtraConfigColumn | SQL | PgColumn>, ...Partial<ExtraConfigColumn | SQL | PgColumn>[]]\n\t): IndexBuilder {\n\t\treturn new IndexBuilder(\n\t\t\tcolumns.map((it) => {\n\t\t\t\tif (is(it, SQL)) {\n\t\t\t\t\treturn it;\n\t\t\t\t}\n\t\t\t\tif (is(it, ExtraConfigColumn)) {\n\t\t\t\t\tconst clonedIndexedColumn = new IndexedColumn(\n\t\t\t\t\t\tit.name,\n\t\t\t\t\t\t!!it.keyAsName,\n\t\t\t\t\t\tit.columnType!,\n\t\t\t\t\t\tit.indexConfig!,\n\t\t\t\t\t);\n\t\t\t\t\tit.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));\n\t\t\t\t\treturn clonedIndexedColumn;\n\t\t\t\t}\n\n\t\t\t\tit = it as PgColumn;\n\n\t\t\t\treturn new IndexedColumn(\n\t\t\t\t\tit.name!,\n\t\t\t\t\t!!it.keyAsName,\n\t\t\t\t\tit.columnType!,\n\t\t\t\t\t{},\n\t\t\t\t);\n\t\t\t}),\n\t\t\tthis.unique,\n\t\t\ttrue,\n\t\t\tthis.name,\n\t\t\tmethod,\n\t\t);\n\t}\n}\n\nexport interface AnyIndexBuilder {\n\tbuild(table: PgTable): Index;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IndexBuilder extends AnyIndexBuilder {}\n\nexport class IndexBuilder implements AnyIndexBuilder {\n\tstatic readonly [entityKind]: string = 'PgIndexBuilder';\n\n\t/** @internal */\n\tconfig: IndexConfig;\n\n\tconstructor(\n\t\tcolumns: Partial<IndexedColumn | SQL>[],\n\t\tunique: boolean,\n\t\tonly: boolean,\n\t\tname?: string,\n\t\tmethod: string = 'btree',\n\t) {\n\t\tthis.config = {\n\t\t\tname,\n\t\t\tcolumns,\n\t\t\tunique,\n\t\t\tonly,\n\t\t\tmethod,\n\t\t};\n\t}\n\n\tconcurrently(): this {\n\t\tthis.config.concurrently = true;\n\t\treturn this;\n\t}\n\n\twith(obj: Record<string, any>): this {\n\t\tthis.config.with = obj;\n\t\treturn this;\n\t}\n\n\twhere(condition: SQL): this {\n\t\tthis.config.where = condition;\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tbuild(table: PgTable): Index {\n\t\treturn new Index(this.config, table);\n\t}\n}\n\nexport class Index {\n\tstatic readonly [entityKind]: string = 'PgIndex';\n\n\treadonly config: IndexConfig & { table: PgTable };\n\treadonly isNameExplicit: boolean;\n\n\tconstructor(config: IndexConfig, table: PgTable) {\n\t\tthis.config = { ...config, table };\n\t\tthis.isNameExplicit = !!config.name;\n\t}\n}\n\nexport type GetColumnsTableName<TColumns> = TColumns extends PgColumn ? TColumns['_']['name']\n\t: TColumns extends PgColumn[] ? TColumns[number]['_']['name']\n\t: never;\n\nexport function index(name?: string): IndexBuilderOn {\n\treturn new IndexBuilderOn(false, name);\n}\n\nexport function uniqueIndex(name?: string): IndexBuilderOn {\n\treturn new IndexBuilderOn(true, name);\n}\n","import { entityKind } from '~/entity.ts';\nimport type { CockroachColumn, ExtraConfigColumn as CockroachExtraConfigColumn } from './cockroach-core/index.ts';\nimport type { Column, ColumnBaseConfig } from './column.ts';\nimport type { MsSqlColumn } from './mssql-core/index.ts';\nimport type { MySqlColumn } from './mysql-core/index.ts';\nimport type { ExtraConfigColumn, PgColumn, PgSequenceOptions } from './pg-core/index.ts';\nimport type { SingleStoreColumn } from './singlestore-core/index.ts';\nimport type { SQL } from './sql/sql.ts';\nimport type { SQLiteColumn } from './sqlite-core/index.ts';\nimport type { Assume } from './utils.ts';\n\nexport type ColumnDataType =\n\t| 'array'\n\t| 'bigint'\n\t| 'boolean'\n\t| 'custom'\n\t| 'number'\n\t| 'object'\n\t| 'string';\n\nexport type ColumnDataArrayConstraint =\n\t| 'vector'\n\t| 'int64vector'\n\t| 'halfvector'\n\t| 'basecolumn'\n\t| 'point'\n\t| 'geometry'\n\t| 'line';\n\nexport type ColumnDataBigIntConstraint = 'int64' | 'uint64';\n\nexport type ColumnDataNumberConstraint =\n\t| 'double'\n\t| 'float'\n\t| 'int8'\n\t| 'int16'\n\t| 'int24'\n\t| 'int32'\n\t| 'int53'\n\t| 'udouble'\n\t| 'ufloat'\n\t| 'uint8'\n\t| 'uint16'\n\t| 'uint24'\n\t| 'uint32'\n\t| 'uint53'\n\t| 'unsigned'\n\t| 'year';\n\nexport type ColumnDataObjectConstraint =\n\t| 'buffer'\n\t| 'date'\n\t| 'geometry'\n\t| 'json'\n\t| 'line'\n\t| 'point'\n\t// Gel-specific\n\t| 'dateDuration'\n\t| 'duration'\n\t| 'localDate'\n\t| 'localDateTime'\n\t| 'localTime'\n\t| 'relDuration';\n\nexport type ColumnDataStringConstraint =\n\t| 'binary'\n\t| 'cidr'\n\t| 'date'\n\t| 'datetime'\n\t| 'enum'\n\t| 'inet'\n\t| 'int64'\n\t| 'interval'\n\t| 'macaddr'\n\t| 'macaddr8'\n\t| 'numeric'\n\t| 'sparsevec'\n\t| 'time'\n\t| 'timestamp'\n\t| 'uint64'\n\t| 'unumeric'\n\t| 'uuid';\n\nexport type ColumnDataConstraint =\n\t| ColumnDataArrayConstraint\n\t| ColumnDataBigIntConstraint\n\t| ColumnDataNumberConstraint\n\t| ColumnDataObjectConstraint\n\t| ColumnDataStringConstraint;\n\nexport type ColumnType =\n\t| ColumnDataType\n\t| `array ${ColumnDataArrayConstraint}`\n\t| `bigint ${ColumnDataBigIntConstraint}`\n\t| `number ${ColumnDataNumberConstraint}`\n\t| `object ${ColumnDataObjectConstraint}`\n\t| `string ${ColumnDataStringConstraint}`;\n\nexport interface ColumnTypeData<\n\tTType extends ColumnDataType = ColumnDataType,\n\tTConstraint extends ColumnDataConstraint | undefined = ColumnDataConstraint | undefined,\n> {\n\ttype: TType;\n\tconstraint: TConstraint;\n}\n\nexport type ExtractColumnTypeData<T extends ColumnType> = T extends\n\t`${infer Type extends ColumnDataType} ${infer Constraint extends ColumnDataConstraint}`\n\t? ColumnTypeData<Type, Constraint>\n\t: ColumnTypeData<Assume<T, ColumnDataType>, undefined>;\n\nexport function extractExtendedColumnType<TColumn extends Column>(\n\tcolumn: TColumn,\n): ExtractColumnTypeData<TColumn['_']['dataType']> {\n\tconst [type, constraint] = column.dataType.split(' ');\n\n\treturn { type, constraint } as any;\n}\n\nexport type Dialect = 'pg' | 'mysql' | 'sqlite' | 'singlestore' | 'mssql' | 'common' | 'cockroach';\n\n// TODO update description\n// 'virtual' | 'stored' for postgres\n// 'stored' for mysql\n// 'virtual' | 'persisted' for mssql\n// We should remove this option from common Column and store it per dialect common\n// Was discussed with Andrew\nexport type GeneratedStorageMode = 'virtual' | 'stored' | 'persisted';\n\nexport type GeneratedType = 'always' | 'byDefault';\n\nexport interface GeneratedColumnConfig<TDataType> {\n\tas: TDataType | SQL | (() => SQL);\n\ttype?: GeneratedType;\n\tmode?: GeneratedStorageMode;\n}\n\nexport interface GeneratedIdentityConfig {\n\tsequenceName?: string;\n\tsequenceOptions?: PgSequenceOptions;\n\ttype: 'always' | 'byDefault';\n}\n\nexport interface ColumnBuilderBaseConfig<TDataType extends ColumnType> {\n\tdataType: TDataType;\n\tdata: unknown;\n\tdriverParam: unknown;\n\tnotNull?: boolean;\n\thasDefault?: boolean;\n}\n\nexport type MakeColumnConfig<\n\tT extends ColumnBuilderBaseConfig<ColumnType>,\n\tTTableName extends string,\n\tTDialect extends Dialect = 'common',\n\tTData = T extends { $type: infer U } ? U : T['data'],\n> = {\n\tname: string;\n\ttableName: TTableName;\n\tdataType: T['dataType'];\n\tdata: TData;\n\tdriverParam: T['driverParam'];\n\tnotNull: T['notNull'] extends true ? true : false;\n\thasDefault: T['hasDefault'] extends true ? true : false;\n\tisPrimaryKey: T extends { isPrimaryKey: true } ? true : false;\n\tisAutoincrement: T extends { isAutoincrement: true } ? true : false;\n\thasRuntimeDefault: T extends { hasRuntimeDefault: true } ? true : false;\n\tenumValues: T extends { enumValues: [string, ...string[]] } ? T['enumValues'] : undefined;\n\tbaseColumn: T extends { baseBuilder: infer U extends ColumnBuilderBase } ? BuildColumn<TTableName, U, TDialect>\n\t\t: never;\n\tidentity: T extends { identity: 'always' } ? 'always' : T extends { identity: 'byDefault' } ? 'byDefault' : undefined;\n\tgenerated: T extends { generated: infer G } ? unknown extends G ? undefined\n\t\t: G extends undefined ? undefined\n\t\t: G\n\t\t: undefined;\n} & {};\n\nexport interface ColumnBuilderRuntimeConfig<TData> {\n\tname: string;\n\tkeyAsName: boolean;\n\tnotNull: boolean;\n\tdefault: TData | SQL | undefined;\n\tdefaultFn: (() => TData | SQL) | undefined;\n\tonUpdateFn: (() => TData | SQL) | undefined;\n\thasDefault: boolean;\n\tprimaryKey: boolean;\n\tisUnique: boolean;\n\tuniqueName: string | undefined;\n\tuniqueType: string | undefined;\n\tdataType: string;\n\tcolumnType: string;\n\tgenerated: GeneratedColumnConfig<TData> | undefined;\n\tgeneratedIdentity: GeneratedIdentityConfig | undefined;\n}\n\nexport interface ColumnBuilderExtraConfig {\n\tprimaryKeyHasDefault?: boolean;\n}\n\nexport type NotNull<T> = T & {\n\t_: {\n\t\tnotNull: true;\n\t};\n};\n\nexport type HasDefault<T> = T & {\n\t_: {\n\t\thasDefault: true;\n\t};\n};\n\nexport type IsPrimaryKey<T> = T & {\n\t_: {\n\t\tisPrimaryKey: true;\n\t\tnotNull: true;\n\t};\n};\n\nexport type IsAutoincrement<T> = T & {\n\t_: {\n\t\tisAutoincrement: true;\n\t};\n};\n\nexport type HasRuntimeDefault<T> = T & {\n\t_: {\n\t\thasRuntimeDefault: true;\n\t};\n};\n\nexport type $Type<T, TType> = T & {\n\t_: {\n\t\t$type: TType;\n\t};\n};\n\nexport type HasGenerated<T, TGenerated = {}> = T & {\n\t_: {\n\t\thasDefault: true;\n\t\tgenerated: TGenerated;\n\t};\n};\n\nexport type IsIdentity<T, TType extends 'always' | 'byDefault'> = T & {\n\t_: {\n\t\tnotNull: true;\n\t\thasDefault: true;\n\t\tidentity: TType;\n\t};\n};\n\nexport interface ColumnBuilderBase<\n\tout T extends ColumnBuilderBaseConfig<ColumnType> = ColumnBuilderBaseConfig<ColumnType>,\n> {\n\t_: T;\n}\n\n// To understand how to use `ColumnBuilder` and `AnyColumnBuilder`, see `Column` and `AnyColumn` documentation.\nexport abstract class ColumnBuilder<\n\tout T extends ColumnBuilderBaseConfig<ColumnType>,\n\tTRuntimeConfig extends object = object,\n\tTExtraConfig extends ColumnBuilderExtraConfig = ColumnBuilderExtraConfig,\n> implements ColumnBuilderBase<T> {\n\tstatic readonly [entityKind]: string = 'ColumnBuilder';\n\n\tdeclare _: T;\n\n\t/** @internal */\n\tprotected config: ColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig;\n\n\tconstructor(name: string, dataType: ColumnType, columnType: string) {\n\t\tthis.config = {\n\t\t\tname,\n\t\t\tkeyAsName: name === '',\n\t\t\tnotNull: false,\n\t\t\tdefault: undefined,\n\t\t\thasDefault: false,\n\t\t\tprimaryKey: false,\n\t\t\tisUnique: false,\n\t\t\tuniqueName: undefined,\n\t\t\tuniqueType: undefined,\n\t\t\tdataType,\n\t\t\tcolumnType,\n\t\t\tgenerated: undefined,\n\t\t} as ColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig; // TODO: ??\n\t}\n\n\t/**\n\t * Changes the data type of the column. Commonly used with `json` columns. Also, useful for branded types.\n\t *\n\t * @example\n\t * ```ts\n\t * const users = pgTable('users', {\n\t * \tid: integer('id').$type<UserId>().primaryKey(),\n\t * \tdetails: json('details').$type<UserDetails>().notNull(),\n\t * });\n\t * ```\n\t */\n\t$type<TType>(): $Type<this, TType> {\n\t\treturn this as $Type<this, TType>;\n\t}\n\n\t/**\n\t * Adds a `not null` clause to the column definition.\n\t *\n\t * Affects the `select` model of the table - columns *without* `not null` will be nullable on select.\n\t */\n\tnotNull(): NotNull<this> {\n\t\tthis.config.notNull = true;\n\t\treturn this as NotNull<this>;\n\t}\n\n\t/**\n\t * Adds a `default <value>` clause to the column definition.\n\t *\n\t * Affects the `insert` model of the table - columns *with* `default` are optional on insert.\n\t *\n\t * If you need to set a dynamic default value, use {@link $defaultFn} instead.\n\t */\n\tdefault(value: (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL): HasDefault<this> {\n\t\tthis.config.default = value;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasDefault<this>;\n\t}\n\n\t/**\n\t * Adds a dynamic default value to the column.\n\t * The function will be called when the row is inserted, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$defaultFn(\n\t\tfn: () => (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL,\n\t): HasRuntimeDefault<HasDefault<this>> {\n\t\tthis.config.defaultFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasRuntimeDefault<HasDefault<this>>;\n\t}\n\n\t/**\n\t * Alias for {@link $defaultFn}.\n\t */\n\t$default = this.$defaultFn;\n\n\t/**\n\t * Adds a dynamic update value to the column.\n\t * The function will be called when the row is updated, and the returned value will be used as the column value if none is provided.\n\t * If no `default` (or `$defaultFn`) value is provided, the function will be called when the row is inserted as well, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$onUpdateFn(\n\t\tfn: () => (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL,\n\t): HasDefault<this> {\n\t\tthis.config.onUpdateFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasDefault<this>;\n\t}\n\n\t/**\n\t * Alias for {@link $onUpdateFn}.\n\t */\n\t$onUpdate = this.$onUpdateFn;\n\n\t/**\n\t * Adds a `primary key` clause to the column definition. This implicitly makes the column `not null`.\n\t *\n\t * In SQLite, `integer primary key` implicitly makes the column auto-incrementing.\n\t */\n\tprimaryKey(): TExtraConfig['primaryKeyHasDefault'] extends true ? IsPrimaryKey<HasDefault<this>>\n\t\t: IsPrimaryKey<this>\n\t{\n\t\tthis.config.primaryKey = true;\n\t\tthis.config.notNull = true;\n\t\treturn this as TExtraConfig['primaryKeyHasDefault'] extends true ? IsPrimaryKey<HasDefault<this>>\n\t\t\t: IsPrimaryKey<this>;\n\t}\n\n\tabstract generatedAlwaysAs(\n\t\tas: SQL | T['data'] | (() => SQL),\n\t\tconfig?: Partial<GeneratedColumnConfig<unknown>>,\n\t): HasGenerated<this, {\n\t\ttype: 'always';\n\t}>;\n\n\t/** @internal Sets the name of the column to the key within the table definition if a name was not given. */\n\tsetName(name: string, casingFn: (name: string) => string) {\n\t\tif (this.config.name !== '') return;\n\t\tthis.config.name = casingFn(name);\n\t}\n}\n\nexport type BuildColumn<\n\tTTableName extends string,\n\tTBuilder extends ColumnBuilderBase,\n\tTDialect extends Dialect,\n\tTBuiltConfig extends ColumnBaseConfig<ColumnType> = MakeColumnConfig<TBuilder['_'], TTableName, TDialect>,\n> =\n\t// TDialect extends 'pg' ? PgColumn<TBuiltConfig, {}>\n\tTDialect extends 'mysql' ? MySqlColumn<TBuiltConfig, {}>\n\t\t: TDialect extends 'mssql' ? MsSqlColumn<TBuiltConfig, {}>\n\t\t: TDialect extends 'sqlite' ? SQLiteColumn<TBuiltConfig, {}>\n\t\t: TDialect extends 'singlestore' ? SingleStoreColumn<TBuiltConfig, {}>\n\t\t: TDialect extends 'cockroach' ? CockroachColumn<TBuiltConfig, {}>\n\t\t: TDialect extends 'common' ? Column<TBuiltConfig, {}>\n\t\t: never;\n\nexport type BuildIndexColumn<\n\tTDialect extends Dialect,\n> = TDialect extends 'pg' ? ExtraConfigColumn\n\t: TDialect extends 'cockroach' ? CockroachExtraConfigColumn\n\t: never;\n\n// TODO\n// try to make sql as well + indexRaw\n\n// optional after everything will be working as expected\n// also try to leave only needed methods for extraConfig\n// make an error if I pass .asc() to fk and so on\n\nexport type BuildColumns<\n\tTTableName extends string,\n\tTConfigMap extends Record<string, ColumnBuilderBase>,\n\tTDialect extends Dialect,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: BuildColumn<\n\t\t\tTTableName,\n\t\t\tTConfigMap[Key],\n\t\t\tTDialect\n\t\t>;\n\t}\n\t& {};\n\nexport type BuildExtraConfigColumns<\n\t_TTableName extends string,\n\tTConfigMap extends Record<string, ColumnBuilderBase>,\n\tTDialect extends Dialect,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: BuildIndexColumn<TDialect>;\n\t}\n\t& {};\n\nexport type ChangeColumnTableName<\n\tTColumn extends Column,\n\tTAlias extends string,\n\tTDialect extends Dialect,\n> =\n\t// TODO: optimise\n\tTDialect extends 'pg' ? PgColumn<\n\t\t\tTColumn['_']['dataType'],\n\t\t\tOmit<TColumn['_'], 'tableName'> & { tableName: TAlias; insertType: unknown }\n\t\t>\n\t\t: TDialect extends 'mysql' ? MySqlColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: TDialect extends 'singlestore' ? SingleStoreColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: TDialect extends 'sqlite' ? SQLiteColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: TDialect extends 'mssql' ? MsSqlColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: TDialect extends 'cockroach' ? CockroachColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: never;\n","import { z as zod } from 'zod/v4';\nimport {\n\ttype ColumnDataArrayConstraint,\n\ttype ColumnDataBigIntConstraint,\n\ttype ColumnDataNumberConstraint,\n\ttype ColumnDataObjectConstraint,\n\ttype ColumnDataStringConstraint,\n\textractExtendedColumnType,\n} from '~/column-builder.ts';\nimport { type Column, getColumnTable } from '~/column.ts';\nimport { getTableName } from '~/table.ts';\nimport { CONSTANTS, type Json } from '../utils.ts';\nimport type { CoerceOptions, FactoryOptions } from './schema.types.ts';\n\nexport const literalSchema = zod.union([zod.string(), zod.number(), zod.boolean(), zod.null()]);\nexport const jsonSchema: zod.ZodType<Json> = zod.union([\n\tliteralSchema,\n\tzod.record(zod.string(), zod.any()),\n\tzod.array(zod.any()),\n]);\nexport const bufferSchema: zod.ZodType<Buffer> = zod.custom<Buffer>((v) => v instanceof Buffer); // oxlint-disable-line no-instanceof-builtins drizzle-internal/no-instanceof\n\nexport function columnToSchema(\n\tcolumn: Column,\n\tfactory:\n\t\t| FactoryOptions\n\t\t| undefined,\n): zod.ZodType {\n\tconst z: typeof zod = factory?.zodInstance ?? zod;\n\tconst coerce = factory?.coerce ?? {};\n\tlet schema!: zod.ZodType;\n\n\t// Check for PG array columns (have dimensions property instead of changing dataType)\n\tconst dimensions = (<{ dimensions?: number }> column).dimensions;\n\tif (typeof dimensions === 'number' && dimensions > 0) {\n\t\treturn pgArrayColumnToSchema(column, dimensions, z, coerce);\n\t}\n\n\tconst { type, constraint } = extractExtendedColumnType(column);\n\n\tswitch (type) {\n\t\tcase 'array': {\n\t\t\tschema = arrayColumnToSchema(column, constraint, z, coerce);\n\t\t\tbreak;\n\t\t}\n\t\tcase 'object': {\n\t\t\tschema = objectColumnToSchema(column, constraint, z, coerce);\n\t\t\tbreak;\n\t\t}\n\t\tcase 'number': {\n\t\t\tschema = numberColumnToSchema(column, constraint, z, coerce);\n\t\t\tbreak;\n\t\t}\n\t\tcase 'bigint': {\n\t\t\tschema = bigintColumnToSchema(column, constraint, z, coerce);\n\t\t\tbreak;\n\t\t}\n\t\tcase 'boolean': {\n\t\t\tschema = coerce === true || coerce.boolean ? z.coerce.boolean() : z.boolean();\n\t\t\tbreak;\n\t\t}\n\t\tcase 'string': {\n\t\t\tschema = stringColumnToSchema(column, constraint, z, coerce);\n\t\t\tbreak;\n\t\t}\n\t\tcase 'custom': {\n\t\t\tschema = z.any();\n\t\t\tbreak;\n\t\t}\n\t\tdefault: {\n\t\t\tschema = z.any();\n\t\t}\n\t}\n\n\treturn schema;\n}\n\nfunction numberColumnToSchema(\n\tcolumn: Column,\n\tconstraint: ColumnDataNumberConstraint | undefined,\n\tz: typeof zod,\n\tcoerce: CoerceOptions,\n): zod.ZodType {\n\tlet min!: number;\n\tlet max!: number;\n\tlet integer = false;\n\n\tswitch (constraint) {\n\t\tcase 'int8': {\n\t\t\tmin = CONSTANTS.INT8_MIN;\n\t\t\tmax = CONSTANTS.INT8_MAX;\n\t\t\tinteger = true;\n\t\t\tbreak;\n\t\t}\n\t\tcase 'uint8': {\n\t\t\tmin = 0;\n\t\t\tmax = CONSTANTS.INT8_UNSIGNED_MAX;\n\t\t\tinteger = true;\n\t\t\tbreak;\n\t\t}\n\t\tcase 'int16': {\n\t\t\tmin = CONSTANTS.INT16_MIN;\n\t\t\tmax = CONSTANTS.INT16_MAX;\n\t\t\tinteger = true;\n\t\t\tbreak;\n\t\t}\n\t\tcase 'uint16': {\n\t\t\tmin = 0;\n\t\t\tmax = CONSTANTS.INT16_UNSIGNED_MAX;\n\t\t\tinteger = true;\n\t\t\tbreak;\n\t\t}\n\t\tcase 'int24': {\n\t\t\tmin = CONSTANTS.INT24_MIN;\n\t\t\tmax = CONSTANTS.INT24_MAX;\n\t\t\tinteger = true;\n\t\t\tbreak;\n\t\t}\n\t\tcase 'uint24': {\n\t\t\tmin = 0;\n\t\t\tmax = CONSTANTS.INT24_UNSIGNED_MAX;\n\t\t\tinteger = true;\n\t\t\tbreak;\n\t\t}\n\t\tcase 'int32': {\n\t\t\tmin = CONSTANTS.INT32_MIN;\n\t\t\tmax = CONSTANTS.INT32_MAX;\n\t\t\tinteger = true;\n\t\t\tbreak;\n\t\t}\n\t\tcase 'uint32': {\n\t\t\tmin = 0;\n\t\t\tmax = CONSTANTS.INT32_UNSIGNED_MAX;\n\t\t\tinteger = true;\n\t\t\tbreak;\n\t\t}\n\t\tcase 'int53': {\n\t\t\tmin = Number.MIN_SAFE_INTEGER;\n\t\t\tmax = Number.MAX_SAFE_INTEGER;\n\t\t\tinteger = true;\n\t\t\tbreak;\n\t\t}\n\t\tcase 'uint53': {\n\t\t\tmin = 0;\n\t\t\tmax = Number.MAX_SAFE_INTEGER;\n\t\t\tinteger = true;\n\t\t\tbreak;\n\t\t}\n\t\tcase 'float': {\n\t\t\tmin = CONSTANTS.INT24_MIN;\n\t\t\tmax = CONSTANTS.INT24_MAX;\n\t\t\tbreak;\n\t\t}\n\t\tcase 'ufloat': {\n\t\t\tmin = 0;\n\t\t\tmax = CONSTANTS.INT24_UNSIGNED_MAX;\n\t\t\tbreak;\n\t\t}\n\t\tcase 'double': {\n\t\t\tmin = CONSTANTS.INT48_MIN;\n\t\t\tmax = CONSTANTS.INT48_MAX;\n\t\t\tbreak;\n\t\t}\n\t\tcase 'udouble': {\n\t\t\tmin = 0;\n\t\t\tmax = CONSTANTS.INT48_UNSIGNED_MAX;\n\t\t\tbreak;\n\t\t}\n\t\tcase 'year': {\n\t\t\tmin = 1901;\n\t\t\tmax = 2155;\n\t\t\tinteger = true;\n\t\t\tbreak;\n\t\t}\n\t\tcase 'unsigned': {\n\t\t\tmin = 0;\n\t\t\tmax = Number.MAX_SAFE_INTEGER;\n\t\t\tbreak;\n\t\t}\n\t\tdefault: {\n\t\t\tmin = Number.MIN_SAFE_INTEGER;\n\t\t\tmax = Number.MAX_SAFE_INTEGER;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tlet schema = coerce === true || coerce?.number\n\t\t? integer ? z.coerce.number().int() : z.coerce.number()\n\t\t: integer\n\t\t? z.int()\n\t\t: z.number();\n\tschema = schema.gte(min).lte(max);\n\treturn schema;\n}\n\nexport const bigintStringModeSchema = zod.string().regex(/^-?\\d+$/).transform(BigInt).pipe(\n\tzod.bigint().gte(CONSTANTS.INT64_MIN).lte(CONSTANTS.INT64_MAX),\n).transform(String);\n\nexport const unsignedBigintStringModeSchema = zod.string().regex(/^\\d+$/).transform(BigInt).pipe(\n\tzod.bigint().gte(0n).lte(CONSTANTS.INT64_MAX),\n).transform(String);\n\nfunction bigintColumnToSchema(\n\tcolumn: Column,\n\tconstraint: ColumnDataBigIntConstraint | undefined,\n\tz: typeof zod,\n\tcoerce: CoerceOptions,\n): zod.ZodType {\n\tlet min!: bigint | undefined;\n\tlet max!: bigint | undefined;\n\n\tswitch (constraint) {\n\t\tcase 'int64': {\n\t\t\tmin = CONSTANTS.INT64_MIN;\n\t\t\tmax = CONSTANTS.INT64_MAX;\n\t\t\tbreak;\n\t\t}\n\t\tcase 'uint64': {\n\t\t\tmin = 0n;\n\t\t\tmax = CONSTANTS.INT64_UNSIGNED_MAX;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tlet schema = coerce === true || coerce?.bigint ? z.coerce.bigint() : z.bigint();\n\n\tif (min !== undefined) schema = schema.min(min);\n\tif (max !== undefined) schema = schema.max(max);\n\treturn schema;\n}\n\nfunction pgArrayColumnToSchema(\n\tcolumn: Column,\n\tdimensions: number,\n\tz: typeof zod,\n\tcoerce: CoerceOptions,\n): zod.ZodType {\n\t// PG style: the column IS the base type, with dimensions indicating array depth\n\t// Get the base schema from the column's own dataType\n\tconst [baseType, baseConstraint] = column.dataType.split(' ');\n\tlet baseSchema: zod.ZodType;\n\n\tswitch (baseType) {\n\t\tcase 'number':\n\t\t\tbaseSchema = numberColumnToSchema(column, baseConstraint as ColumnDataNumberConstraint, z, coerce);\n\t\t\tbreak;\n\t\tcase 'bigint':\n\t\t\tbaseSchema = bigintColumnToSchema(column, baseConstraint as ColumnDataBigIntConstraint, z, coerce);\n\t\t\tbreak;\n\t\tcase 'boolean':\n\t\t\tbaseSchema = coerce === true || coerce?.boolean ? z.coerce.boolean() : z.boolean();\n\t\t\tbreak;\n\t\tcase 'string':\n\t\t\tbaseSchema = stringColumnToSchema(column, baseConstraint as ColumnDataStringConstraint, z, coerce);\n\t\t\tbreak;\n\t\tcase 'object':\n\t\t\tbaseSchema = objectColumnToSchema(column, baseConstraint as ColumnDataObjectConstraint, z, coerce);\n\t\t\tbreak;\n\t\tcase 'array':\n\t\t\t// Handle array types like point, line, etc.\n\t\t\tbaseSchema = arrayColumnToSchema(column, baseConstraint as ColumnDataArrayConstraint, z, coerce);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbaseSchema = z.any();\n\t}\n\n\t// Wrap in arrays based on dimensions\n\t// Note: For PG arrays, column.length is the base type's length (e.g., varchar(10)), not array size\n\tlet schema: zod.ZodType = z.array(baseSchema);\n\tfor (let i = 1; i < dimensions; i++) {\n\t\tschema = z.array(schema);\n\t}\n\treturn schema;\n}\n\nfunction arrayColumnToSchema(\n\tcolumn: Column,\n\tconstraint: ColumnDataArrayConstraint | undefined,\n\tz: typeof zod,\n\tcoerce: CoerceOptions,\n): zod.ZodType {\n\tswitch (constraint) {\n\t\tcase 'geometry':\n\t\tcase 'point': {\n\t\t\treturn z.tuple([z.number(), z.number()]);\n\t\t}\n\t\tcase 'line': {\n\t\t\treturn z.tuple([z.number(), z.number(), z.number()]);\n\t\t}\n\t\tcase 'vector':\n\t\tcase 'halfvector': {\n\t\t\tconst length = column.length;\n\t\t\treturn length\n\t\t\t\t? z.array(z.number()).length(length)\n\t\t\t\t: z.array(z.number());\n\t\t}\n\t\tcase 'int64vector': {\n\t\t\tconst length = column.length;\n\t\t\treturn length\n\t\t\t\t? z.array(z.bigint().min(CONSTANTS.INT64_MIN).max(CONSTANTS.INT64_MAX)).length(length)\n\t\t\t\t: z.array(z.bigint().min(CONSTANTS.INT64_MIN).max(CONSTANTS.INT64_MAX));\n\t\t}\n\t\tcase 'basecolumn': {\n\t\t\t// CockroachDB/GEL style: has a separate baseColumn\n\t\t\tconst baseColumn = (<{ baseColumn?: Column }> column).baseColumn;\n\t\t\tif (baseColumn) {\n\t\t\t\tconst baseSchema = columnToSchema(baseColumn, {\n\t\t\t\t\tzodInstance: z,\n\t\t\t\t\tcoerce,\n\t\t\t\t});\n\t\t\t\t// For CockroachDB style, column.length is the array size\n\t\t\t\tconst length = column.length;\n\t\t\t\tconst schema: zod.ZodType = z.array(baseSchema);\n\t\t\t\tif (length) return (schema as zod.ZodArray<any>).length(length);\n\t\t\t\treturn schema;\n\t\t\t}\n\t\t\treturn z.array(z.any());\n\t\t}\n\t\tdefault: {\n\t\t\treturn z.array(z.any());\n\t\t}\n\t}\n}\n\nfunction objectColumnToSchema(\n\tcolumn: Column,\n\tconstraint: ColumnDataObjectConstraint | undefined,\n\tz: typeof zod,\n\tcoerce: CoerceOptions,\n): zod.ZodType {\n\tswitch (constraint) {\n\t\tcase 'buffer': {\n\t\t\treturn bufferSchema;\n\t\t}\n\t\tcase 'date': {\n\t\t\treturn coerce === true || coerce?.date ? z.coerce.date() : z.date();\n\t\t}\n\t\tcase 'geometry':\n\t\tcase 'point': {\n\t\t\treturn z.object({\n\t\t\t\tx: z.number(),\n\t\t\t\ty: z.number(),\n\t\t\t});\n\t\t}\n\t\tcase 'json': {\n\t\t\treturn jsonSchema;\n\t\t}\n\t\tcase 'line': {\n\t\t\treturn z.object({\n\t\t\t\ta: z.number(),\n\t\t\t\tb: z.number(),\n\t\t\t\tc: z.number(),\n\t\t\t});\n\t\t}\n\t\tdefault: {\n\t\t\treturn z.looseObject({});\n\t\t}\n\t}\n}\n\nfunction stringColumnToSchema(\n\tcolumn: Column<any>,\n\tconstraint: ColumnDataStringConstraint | undefined,\n\tz: typeof zod,\n\tcoerce: CoerceOptions,\n): zod.ZodType {\n\tconst { name: columnName, length, isLengthExact } = column;\n\tlet regex: RegExp | undefined;\n\n\tif (constraint === 'binary') {\n\t\tregex = /^[01]*$/;\n\t}\n\tif (constraint === 'uuid') return z.uuid();\n\tif (constraint === 'enum') {\n\t\tconst enumValues = column.enumValues;\n\t\tif (!enumValues) {\n\t\t\tthrow new Error(\n\t\t\t\t`Column \"${getTableName(getColumnTable(column))}\".\"${columnName}\" is of 'enum' type, but lacks enum values`,\n\t\t\t);\n\t\t}\n\t\treturn z.enum(enumValues);\n\t}\n\tif (constraint === 'int64') {\n\t\treturn bigintStringModeSchema;\n\t}\n\tif (constraint === 'uint64') {\n\t\treturn unsignedBigintStringModeSchema;\n\t}\n\n\tlet schema = coerce === true || coerce?.string ? z.coerce.string() : z.string();\n\tschema = regex ? schema.regex(regex) : schema;\n\treturn length && isLengthExact ? schema.length(length) : length ? schema.max(length) : schema;\n}\n","import { z } from 'zod/v4';\nimport { Column } from '~/column.ts';\nimport { is } from '~/entity.ts';\nimport type { PgEnum } from '~/pg-core/columns/enum.ts';\nimport { isView, SQL, type View } from '~/sql/sql.ts';\nimport { isTable, type Table } from '~/table.ts';\nimport { getColumns } from '~/utils.ts';\nimport { isWithEnum } from '../utils.ts';\nimport { columnToSchema } from './column.ts';\nimport type { Conditions } from './schema.types.internal.ts';\nimport type {\n\tCoerceOptions,\n\tCreateInsertSchema,\n\tCreateSchemaFactoryOptions,\n\tCreateSelectSchema,\n\tCreateUpdateSchema,\n\tFactoryOptions,\n} from './schema.types.ts';\n\nfunction handleColumns(\n\tcolumns: Record<string, any>,\n\trefinements: Record<string, any>,\n\tconditions: Conditions,\n\tfactory?: FactoryOptions,\n): z.ZodType {\n\tconst columnSchemas: Record<string, z.ZodType> = {};\n\n\tfor (const [key, selected] of Object.entries(columns)) {\n\t\tif (!is(selected, Column) && !is(selected, SQL) && !is(selected, SQL.Aliased) && typeof selected === 'object') {\n\t\t\tconst columns = isTable(selected) || isView(selected) ? getColumns(selected) : selected;\n\t\t\tcolumnSchemas[key] = handleColumns(columns, refinements[key] ?? {}, conditions, factory);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst refinement = refinements[key];\n\t\tif (refinement !== undefined && typeof refinement !== 'function') {\n\t\t\tcolumnSchemas[key] = refinement;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst column = is(selected, Column) ? selected : undefined;\n\t\tconst schema = column ? columnToSchema(column, factory) : z.any();\n\t\tconst refined = typeof refinement === 'function' ? refinement(schema) : schema;\n\n\t\tif (conditions.never(column)) {\n\t\t\tcontinue;\n\t\t} else {\n\t\t\tcolumnSchemas[key] = refined;\n\t\t}\n\n\t\tif (column) {\n\t\t\tif (conditions.nullable(column)) {\n\t\t\t\tcolumnSchemas[key] = columnSchemas[key]!.nullable();\n\t\t\t}\n\n\t\t\tif (conditions.optional(column)) {\n\t\t\t\tcolumnSchemas[key] = columnSchemas[key]!.optional();\n\t\t\t}\n\t\t}\n\t}\n\n\treturn z.object(columnSchemas) as any;\n}\n\nfunction handleEnum(\n\tenum_: PgEnum<any>,\n\tfactory?: FactoryOptions,\n) {\n\tconst zod: typeof z = factory?.zodInstance ?? z;\n\treturn zod.enum(enum_.enumValues);\n}\n\nconst selectConditions: Conditions = {\n\tnever: () => false,\n\toptional: () => false,\n\tnullable: (column) => !column.notNull,\n};\n\nconst insertConditions: Conditions = {\n\tnever: (column) =>\n\t\tcolumn?.generated?.type === 'always' || column?.generatedIdentity?.type === 'always'\n\t\t|| ('identity' in (column ?? {}) && typeof (column as any)?.identity !== 'undefined'),\n\toptional: (column) => !column.notNull || (column.notNull && column.hasDefault),\n\tnullable: (column) => !column.notNull,\n};\n\nconst updateConditions: Conditions = {\n\tnever: (column) =>\n\t\tcolumn?.generated?.type === 'always' || column?.generatedIdentity?.type === 'always'\n\t\t|| ('identity' in (column ?? {}) && typeof (column as any)?.identity !== 'undefined'),\n\toptional: () => true,\n\tnullable: (column) => !column.notNull,\n};\n\nexport const createSelectSchema: CreateSelectSchema<undefined> = (\n\tentity: Table | View | PgEnum<[string, ...string[]]>,\n\trefine?: Record<string, any>,\n) => {\n\tif (isWithEnum(entity)) {\n\t\treturn handleEnum(entity);\n\t}\n\tconst columns = getColumns(entity);\n\treturn handleColumns(columns, refine ?? {}, selectConditions) as any;\n};\n\nexport const createInsertSchema: CreateInsertSchema<undefined> = (\n\tentity: Table,\n\trefine?: Record<string, any>,\n) => {\n\tconst columns = getColumns(entity);\n\treturn handleColumns(columns, refine ?? {}, insertConditions) as any;\n};\n\nexport const createUpdateSchema: CreateUpdateSchema<undefined> = (\n\tentity: Table,\n\trefine?: Record<string, any>,\n) => {\n\tconst columns = getColumns(entity);\n\treturn handleColumns(columns, refine ?? {}, updateConditions) as any;\n};\n\nexport function createSchemaFactory<\n\tTCoerce extends CoerceOptions,\n>(options?: CreateSchemaFactoryOptions<TCoerce>) {\n\tconst createSelectSchema: CreateSelectSchema<TCoerce> = (\n\t\tentity: Table | View | PgEnum<[string, ...string[]]>,\n\t\trefine?: Record<string, any>,\n\t) => {\n\t\tif (isWithEnum(entity)) {\n\t\t\treturn handleEnum(entity, options);\n\t\t}\n\t\tconst columns = getColumns(entity);\n\t\treturn handleColumns(columns, refine ?? {}, selectConditions, options) as any;\n\t};\n\n\tconst createInsertSchema: CreateInsertSchema<TCoerce> = (\n\t\tentity: Table,\n\t\trefine?: Record<string, any>,\n\t) => {\n\t\tconst columns = getColumns(entity);\n\t\treturn handleColumns(columns, refine ?? {}, insertConditions, options) as any;\n\t};\n\n\tconst createUpdateSchema: CreateUpdateSchema<TCoerce> = (\n\t\tentity: Table,\n\t\trefine?: Record<string, any>,\n\t) => {\n\t\tconst columns = getColumns(entity);\n\t\treturn handleColumns(columns, refine ?? {}, updateConditions, options) as any;\n\t};\n\n\treturn { createSelectSchema, createInsertSchema, createUpdateSchema };\n}\n","/**\n * Auth Database Schema\n *\n * Drizzle ORM table definitions for authentication (Better Auth compatible).\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n integer,\n timestamp,\n boolean,\n index,\n uniqueIndex,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { z } from 'zod';\n\n// ============================================================\n// User Table\n// ============================================================\n\nexport const user = pgTable('user', {\n id: text('id').primaryKey(),\n name: text('name').notNull(),\n email: text('email').notNull().unique(),\n emailVerified: boolean('email_verified').default(false).notNull(),\n image: text('image'),\n phoneNumber: text('phone_number').unique(),\n phoneNumberVerified: boolean('phone_number_verified').default(false).notNull(),\n whatsappAccount: text('whatsapp_account'),\n createdAt: timestamp('created_at').defaultNow().notNull(),\n updatedAt: timestamp('updated_at')\n .defaultNow()\n .$onUpdate(() => new Date())\n .notNull(),\n // Admin plugin fields\n role: text('role').default('user'),\n banned: boolean('banned').default(false),\n banReason: text('ban_reason'),\n banExpires: timestamp('ban_expires'),\n});\n\n// ============================================================\n// Session Table\n// ============================================================\n\nexport const session = pgTable(\n 'session',\n {\n id: text('id').primaryKey(),\n expiresAt: timestamp('expires_at').notNull(),\n token: text('token').notNull().unique(),\n createdAt: timestamp('created_at').defaultNow().notNull(),\n updatedAt: timestamp('updated_at')\n .defaultNow()\n .$onUpdate(() => new Date())\n .notNull(),\n ipAddress: text('ip_address'),\n userAgent: text('user_agent'),\n // FK to user table\n userId: text('user_id')\n .notNull()\n .references(() => user.id, { onDelete: 'cascade' }),\n activeOrganizationId: text('active_organization_id'),\n // Admin plugin field for impersonation\n impersonatedBy: text('impersonated_by'),\n },\n (table) => [index('session_userId_idx').on(table.userId)],\n);\n\n// ============================================================\n// Account Table (OAuth providers)\n// ============================================================\n\nexport const CREDENTIAL_ACCOUNT_ISSUER = 'local:credential';\n\nexport const account = pgTable(\n 'account',\n {\n id: text('id').primaryKey(),\n accountId: text('account_id').notNull(),\n providerId: text('provider_id').notNull(),\n issuer: text('issuer').notNull(),\n // FK to user table\n userId: text('user_id')\n .notNull()\n .references(() => user.id, { onDelete: 'cascade' }),\n accessToken: text('access_token'),\n refreshToken: text('refresh_token'),\n idToken: text('id_token'),\n accessTokenExpiresAt: timestamp('access_token_expires_at'),\n refreshTokenExpiresAt: timestamp('refresh_token_expires_at'),\n scope: text('scope'),\n password: text('password'),\n createdAt: timestamp('created_at').defaultNow().notNull(),\n updatedAt: timestamp('updated_at')\n .defaultNow()\n .$onUpdate(() => new Date())\n .notNull(),\n },\n (table) => [\n index('account_userId_idx').on(table.userId),\n uniqueIndex('account_issuer_accountId_uidx').on(table.issuer, table.accountId),\n ],\n);\n\n// ============================================================\n// Verification Table (Email verification, password reset)\n// ============================================================\n\nexport const verification = pgTable(\n 'verification',\n {\n id: text('id').primaryKey(),\n identifier: text('identifier').notNull(),\n value: text('value').notNull(),\n expiresAt: timestamp('expires_at').notNull(),\n createdAt: timestamp('created_at').defaultNow().notNull(),\n updatedAt: timestamp('updated_at')\n .defaultNow()\n .$onUpdate(() => new Date())\n .notNull(),\n },\n (table) => [index('verification_identifier_idx').on(table.identifier)],\n);\n\n// ============================================================\n// Organization Table (Multi-tenancy)\n// ============================================================\n\nexport const organization = pgTable(\n 'organization',\n {\n id: text('id').primaryKey(),\n name: text('name').notNull(),\n slug: text('slug').notNull().unique(),\n logo: text('logo'),\n createdAt: timestamp('created_at').defaultNow().notNull(),\n metadata: text('metadata'),\n },\n (table) => [uniqueIndex('organization_slug_uidx').on(table.slug)],\n);\n\n// ============================================================\n// Member Table (Organization membership)\n// ============================================================\n\nexport const member = pgTable(\n 'member',\n {\n id: text('id').primaryKey(),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n // FK to user table\n userId: text('user_id')\n .notNull()\n .references(() => user.id, { onDelete: 'cascade' }),\n role: text('role').default('member').notNull(),\n createdAt: timestamp('created_at').defaultNow().notNull(),\n // Tenant-level ban fields\n status: text('status').default('active').notNull(),\n banReason: text('ban_reason'),\n banExpires: timestamp('ban_expires'),\n },\n (table) => [\n index('member_organizationId_idx').on(table.organizationId),\n index('member_userId_idx').on(table.userId),\n ],\n);\n\n// ============================================================\n// Invitation Table\n// ============================================================\n\nexport const invitation = pgTable(\n 'invitation',\n {\n id: text('id').primaryKey(),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n email: text('email').notNull(),\n role: text('role'),\n status: text('status').default('pending').notNull(),\n expiresAt: timestamp('expires_at').notNull(),\n createdAt: timestamp('created_at').defaultNow().notNull(),\n // FK to user table\n inviterId: text('inviter_id')\n .notNull()\n .references(() => user.id, { onDelete: 'cascade' }),\n },\n (table) => [\n index('invitation_organizationId_idx').on(table.organizationId),\n index('invitation_email_idx').on(table.email),\n ],\n);\n\n// ============================================================\n// API Key Table (Better Auth API Key plugin)\n// ============================================================\n\nexport const apikey = pgTable(\n 'apikey',\n {\n id: text('id').primaryKey(),\n configId: text('config_id').default('default').notNull(),\n name: text('name'),\n start: text('start'),\n prefix: text('prefix'),\n key: text('key').notNull(),\n // FK to user table\n referenceId: text('user_id')\n .notNull()\n .references(() => user.id, { onDelete: 'cascade' }),\n refillInterval: integer('refill_interval'),\n refillAmount: integer('refill_amount'),\n lastRefillAt: timestamp('last_refill_at'),\n enabled: boolean('enabled').default(true),\n rateLimitEnabled: boolean('rate_limit_enabled').default(true),\n rateLimitTimeWindow: integer('rate_limit_time_window'),\n rateLimitMax: integer('rate_limit_max'),\n requestCount: integer('request_count').default(0),\n remaining: integer('remaining'),\n lastRequest: timestamp('last_request'),\n expiresAt: timestamp('expires_at'),\n createdAt: timestamp('created_at').defaultNow().notNull(),\n updatedAt: timestamp('updated_at')\n .defaultNow()\n .$onUpdate(() => new Date())\n .notNull(),\n permissions: text('permissions'),\n metadata: text('metadata'),\n },\n (table) => [\n index('apikey_configId_idx').on(table.configId),\n index('apikey_userId_idx').on(table.referenceId),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const userSchema = createInsertSchema(user);\nexport const sessionSchema = createInsertSchema(session);\nexport const accountSchema = createInsertSchema(account);\nexport const verificationSchema = createInsertSchema(verification);\nexport const organizationSchema = createInsertSchema(organization);\nexport const memberSchema = createInsertSchema(member);\nexport const invitationSchema = createInsertSchema(invitation);\nexport const apikeySchema = createInsertSchema(apikey);\n\nexport const updateProfileMutation = z.object({\n name: z\n .preprocess(\n (value) => (typeof value === 'string' ? value.trim() : value),\n z.string().min(1, '姓名不能为空').max(80, '姓名不能超过 80 个字符').optional(),\n ),\n whatsappAccount: z\n .preprocess(\n (value) => (typeof value === 'string' ? value.trim() : value),\n z.string().max(64).nullable().optional(),\n )\n .transform((value) => (value === '' ? null : value)),\n});\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type User = typeof user.$inferSelect;\nexport type Session = typeof session.$inferSelect;\nexport type Account = typeof account.$inferSelect;\nexport type Verification = typeof verification.$inferSelect;\nexport type Organization = typeof organization.$inferSelect;\nexport type Member = typeof member.$inferSelect;\nexport type Invitation = typeof invitation.$inferSelect;\nexport type Apikey = typeof apikey.$inferSelect;\n","/**\n * Team Database Schema\n *\n * Drizzle ORM table definitions for teams and team membership.\n * Supports hierarchical team structures with parent-child relationships.\n */\nimport {\n pgTable,\n text,\n timestamp,\n integer,\n index,\n uniqueIndex,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { organization } from './auth';\nimport { user } from './auth';\n\n// ============================================================\n// Team Table (Hierarchical Teams)\n// ============================================================\n\nexport const team = pgTable(\n 'team',\n {\n id: text('id').primaryKey(),\n name: text('name').notNull(),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n createdAt: timestamp('created_at').defaultNow().notNull(),\n updatedAt: timestamp('updated_at')\n .defaultNow()\n .$onUpdate(() => new Date())\n .notNull(),\n // Hierarchical structure\n parentId: text('parent_id'),\n path: text('path'), // Materialized path for efficient tree queries\n level: integer('level').default(0).notNull(),\n },\n (table) => [\n index('team_organizationId_idx').on(table.organizationId),\n index('team_parent_idx').on(table.parentId),\n index('team_org_path_idx').on(table.organizationId, table.path),\n ],\n);\n\n// ============================================================\n// Team Member Table (Many-to-Many: Team <-> User)\n// ============================================================\n\nexport const teamMember = pgTable(\n 'team_member',\n {\n id: text('id').primaryKey(),\n // FK to team table\n teamId: text('team_id')\n .notNull()\n .references(() => team.id, { onDelete: 'cascade' }),\n // FK to user table\n userId: text('user_id')\n .notNull()\n .references(() => user.id, { onDelete: 'cascade' }),\n createdAt: timestamp('created_at').defaultNow().notNull(),\n },\n (table) => [\n uniqueIndex('teamMember_team_user_uidx').on(table.teamId, table.userId),\n index('teamMember_teamId_idx').on(table.teamId),\n index('teamMember_userId_idx').on(table.userId),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const teamSchema = createInsertSchema(team);\nexport const teamMemberSchema = createInsertSchema(teamMember);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type Team = typeof team.$inferSelect;\nexport type TeamMember = typeof teamMember.$inferSelect;\n","/**\n * Relationship Database Schema\n *\n * Drizzle ORM table definitions for entity relationships.\n * Generic relationship table for linking entities (e.g., user follows user, team contains team).\n */\nimport {\n pgTable,\n text,\n timestamp,\n jsonb,\n index,\n uniqueIndex,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { organization } from './auth';\n\n// ============================================================\n// Relationship Table (Generic Entity Relationships)\n// ============================================================\n\nexport const relationship = pgTable(\n 'relationship',\n {\n id: text('id').primaryKey(),\n // Relationship type (e.g., 'follows', 'contains', 'manages')\n type: text('type').notNull(),\n // Source entity ID\n sourceId: text('source_id').notNull(),\n // Target entity ID\n targetId: text('target_id').notNull(),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n // Additional metadata for the relationship\n metadata: jsonb('metadata'),\n createdAt: timestamp('created_at').defaultNow().notNull(),\n },\n (table) => [\n index('relationship_org_idx').on(table.organizationId),\n index('relationship_source_idx').on(table.type, table.sourceId),\n index('relationship_target_idx').on(table.type, table.targetId),\n uniqueIndex('relationship_unique_idx').on(\n table.type,\n table.sourceId,\n table.targetId,\n ),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const relationshipSchema = createInsertSchema(relationship);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type Relationship = typeof relationship.$inferSelect;\n","/**\n * Common Zod Schemas\n *\n * Reusable validation schemas for common patterns like pagination, sorting, etc.\n */\n\nimport { z } from 'zod/v4';\n\n// ============================================================\n// Pagination\n// ============================================================\n\n/**\n * 分页参数\n */\nexport const paginationSchema = z.object({\n limit: z.number().int().min(1).max(100).default(20),\n offset: z.number().int().min(0).default(0),\n});\n\n/**\n * Cursor 分页(可选,用于大数据集)\n */\nexport const cursorPaginationSchema = z.object({\n cursor: z.string().optional(),\n limit: z.number().int().min(1).max(100).default(20),\n});\n\n// ============================================================\n// Sorting\n// ============================================================\n\n/**\n * 排序参数\n */\nexport const sortSchema = z.object({\n sortBy: z.string().optional(),\n sortOrder: z.enum(['asc', 'desc']).default('asc'),\n});\n\n// ============================================================\n// Search\n// ============================================================\n\n/**\n * 搜索参数\n */\nexport const searchSchema = z.object({\n q: z.string().min(1).optional(),\n});\n\n// ============================================================\n// Common Combinations\n// ============================================================\n\n/**\n * 列表查询基础(分页 + 排序)\n */\nexport const listQueryBase = paginationSchema.merge(sortSchema);\n\n/**\n * 搜索列表查询(分页 + 排序 + 搜索)\n */\nexport const searchListQueryBase = listQueryBase.merge(searchSchema);\n\n// ============================================================\n// ID Schemas\n// ============================================================\n\n/**\n * 通用 ID 参数\n */\nexport const idSchema = z.object({\n id: z.string(),\n});\n\n/**\n * UUID 参数(严格验证)\n */\nexport const uuidSchema = z.object({\n id: z.string().uuid(),\n});\n\n/**\n * 批量 ID 操作\n */\nexport const batchIdsSchema = z.object({\n ids: z.array(z.string()).min(1),\n});\n\n// ============================================================\n// Date Range\n// ============================================================\n\n/**\n * 日期范围查询\n */\nexport const dateRangeSchema = z.object({\n startDate: z.string().datetime().optional(),\n endDate: z.string().datetime().optional(),\n});\n","/**\n * i18n Database Schema\n *\n * Drizzle ORM table definitions for internationalization.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n timestamp,\n boolean,\n integer,\n jsonb,\n varchar,\n index,\n uniqueIndex,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { z } from 'zod/v4';\nimport { organization } from './auth';\nimport { paginationSchema } from './common';\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * i18n Message Type\n * - page: Frontend UI text (buttons, labels, messages)\n * - api: Backend API text (error messages, notifications)\n */\nexport type I18nMessageType = 'page' | 'api';\n\n/**\n * i18n Message Source\n * - core: System built-in translations\n * - plugin: Plugin-provided translations\n * - user: User-created translations\n */\nexport type I18nMessageSource = 'core' | 'plugin' | 'user';\n\nexport const I18N_MESSAGE_FORMATS = [\n 'legacy-mixed',\n 'i18next-v4',\n 'legacy-projection',\n] as const;\n\nexport type I18nMessageFormat = (typeof I18N_MESSAGE_FORMATS)[number];\n\n/**\n * Text Direction\n */\nexport type I18nDirection = 'ltr' | 'rtl';\n\n/**\n * Translations JSONB structure\n * Key: BCP 47 locale code (e.g., \"en-US\", \"zh-CN\")\n * Value: Translated text\n */\nexport type TranslationsObject = Record<string, string>;\n\n// ============================================================\n// Tables\n// ============================================================\n\n/**\n * i18n Languages Table\n *\n * Stores available languages for each organization.\n * Each organization has exactly one default language.\n *\n * @example\n * { locale: 'zh-CN', name: '简体中文', isDefault: true }\n * { locale: 'en-US', name: 'English', isDefault: false }\n */\nexport const i18nLanguages = pgTable(\n 'i18n_languages',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n // Language identification (BCP 47)\n locale: text('locale').notNull(), // e.g., 'en-US', 'zh-CN', 'ar-SA'\n name: text('name').notNull(), // e.g., 'English', '简体中文', 'العربية'\n nativeName: text('native_name'), // e.g., 'English', '中文', 'العربية'\n\n // Status\n isDefault: boolean('is_default').notNull().default(false),\n isEnabled: boolean('is_enabled').notNull().default(true),\n\n // Display order\n sortOrder: integer('sort_order').notNull().default(0),\n\n // RTL support\n direction: text('direction').notNull().default('ltr').$type<I18nDirection>(),\n\n // Audit fields\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at')\n .notNull()\n .defaultNow()\n .$onUpdate(() => new Date()),\n },\n (table) => [\n // Each locale is unique per organization\n uniqueIndex('i18n_languages_org_locale_uidx').on(\n table.organizationId,\n table.locale\n ),\n // Fast lookup by organization\n index('i18n_languages_org_idx').on(table.organizationId),\n // Fast lookup for enabled languages\n index('i18n_languages_enabled_idx').on(table.organizationId, table.isEnabled),\n ]\n);\n\n/**\n * i18n Messages Table\n *\n * Stores UI translation entries with JSONB for multi-language values.\n * This is for UI text (buttons, labels, messages), NOT content data.\n *\n * @example\n * {\n * key: 'order.submit',\n * namespace: 'commerce',\n * type: 'page',\n * translations: { 'zh-CN': '提交订单', 'en-US': 'Submit Order' }\n * }\n */\nexport const i18nMessages = pgTable(\n 'i18n_messages',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n // Message identification\n key: text('key').notNull(), // e.g., 'order.submit', 'common.save'\n namespace: text('namespace').notNull(), // e.g., 'core', 'admin', 'plugin:dsneo.orders'\n\n // Message type\n type: text('type').notNull().default('page').$type<I18nMessageType>(),\n\n // Translations (JSONB)\n translations: jsonb('translations')\n .notNull()\n .default({})\n .$type<TranslationsObject>(),\n\n // Description for translators\n description: text('description'),\n\n // Source tracking\n source: text('source').notNull().default('user').$type<I18nMessageSource>(),\n sourceId: text('source_id'), // Plugin ID if source is 'plugin'\n\n // User modification tracking (for plugin upgrade protection)\n // Deprecated rollback-only mirror. New runtime code must not read or write it.\n userModified: boolean('user_modified').notNull().default(false),\n modifiedLocales: jsonb('modified_locales')\n .notNull()\n .default([])\n .$type<string[]>(),\n archivedLocales: jsonb('archived_locales')\n .notNull()\n .default([])\n .$type<string[]>(),\n messageFormat: varchar('message_format', {\n length: 32,\n enum: I18N_MESSAGE_FORMATS,\n })\n .notNull()\n .default('i18next-v4')\n .$type<I18nMessageFormat>(),\n\n // Status\n isEnabled: boolean('is_enabled').notNull().default(true),\n\n // Version for optimistic locking\n version: integer('version').notNull().default(1),\n\n // Audit fields\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at')\n .notNull()\n .defaultNow()\n .$onUpdate(() => new Date()),\n },\n (table) => [\n // Each key is unique per organization + namespace\n uniqueIndex('i18n_messages_org_ns_key_uidx').on(\n table.organizationId,\n table.namespace,\n table.key\n ),\n // Fast lookup by organization\n index('i18n_messages_org_idx').on(table.organizationId),\n // Fast lookup by namespace (for loading translations)\n index('i18n_messages_org_ns_idx').on(table.organizationId, table.namespace),\n // Fast lookup by source (for plugin lifecycle)\n index('i18n_messages_source_idx').on(table.source, table.sourceId),\n ]\n);\n\n/**\n * Authoritative namespace generation used by every i18n cache layer.\n *\n * A message write and its generation increment must commit in the same\n * transaction. cacheDirty remains true until strict Redis/L1 cleanup succeeds.\n */\nexport const i18nBundleVersions = pgTable(\n 'i18n_bundle_versions',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n namespace: text('namespace').notNull(),\n generation: integer('generation').notNull().default(1),\n cacheDirty: boolean('cache_dirty').notNull().default(false),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at')\n .notNull()\n .defaultNow()\n .$onUpdate(() => new Date()),\n },\n (table) => [\n uniqueIndex('i18n_bundle_versions_org_ns_uidx').on(\n table.organizationId,\n table.namespace,\n ),\n index('i18n_bundle_versions_dirty_idx').on(\n table.cacheDirty,\n table.organizationId,\n ),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\n/**\n * Canonical BCP 47 locale input.\n *\n * Intl is the source of truth here: it accepts complete BCP 47 tags,\n * including scripts, variants, and Unicode extensions, and returns the\n * canonical casing used by every runtime surface.\n */\nfunction canonicalizeLocale(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n const locale = value.trim();\n if (!locale || locale === '*') return undefined;\n\n try {\n return Intl.getCanonicalLocales(locale)[0];\n } catch {\n return undefined;\n }\n}\n\nexport const localeSchema = z\n .string()\n .min(1)\n .refine((value) => canonicalizeLocale(value) !== undefined, 'Invalid BCP 47 locale')\n .transform((value) => canonicalizeLocale(value)!);\n\nexport const translationsObjectSchema = z.record(z.string(), z.string());\n\nexport const i18nDirectionSchema = z.enum(['ltr', 'rtl']);\nexport const i18nMessageTypeSchema = z.enum(['page', 'api']);\nexport const i18nMessageSourceSchema = z.enum(['core', 'plugin', 'user']);\nexport const i18nMessageFormatSchema = z.enum(I18N_MESSAGE_FORMATS);\n\n/** Base Schema - 直接用于 Create/Update */\nexport const i18nLanguageSchema = createInsertSchema(i18nLanguages, {\n locale: () => localeSchema,\n name: (schema) => schema.min(1).max(50),\n nativeName: (schema) => schema.max(50),\n});\n\n/** Base Schema - 直接用于 Create/Update */\nexport const i18nMessageSchema = createInsertSchema(i18nMessages, {\n key: (schema) => schema.min(1).max(200),\n namespace: (schema) => schema.min(1).max(100),\n});\n\n// ============================================================\n// Query Schemas\n// ============================================================\n\n/** Get translations for client (public API) */\nexport const getI18nMessagesQuery = z.object({\n locale: localeSchema,\n namespaces: z.array(z.string()).optional(),\n version: z.string().optional(),\n});\n\n/** Namespace-local i18next JSON v4 bundles with independent versions. */\nexport const getI18nBundlesQuery = z.object({\n locale: localeSchema,\n namespaces: z.array(z.string().min(1).max(160)).min(1).max(32),\n versions: z.record(z.string(), z.string()).optional(),\n});\n\nexport const i18nBundleSchema = z.object({\n version: z.string(),\n notModified: z.boolean(),\n messages: translationsObjectSchema.optional(),\n});\n\nexport const getI18nBundlesResultSchema = z.object({\n bundles: z.record(z.string(), i18nBundleSchema),\n});\n\n/** List languages */\nexport const listI18nLanguagesQuery = paginationSchema.partial();\n\n/** List messages */\nexport const listI18nMessagesQuery = z.object({\n namespace: z.string().optional(),\n key: z.string().optional(),\n}).merge(paginationSchema.partial());\n\n// ============================================================\n// Mutation Schemas\n// ============================================================\n\n/** Set default language mutation */\nexport const setDefaultLanguageMutation = z.object({\n locale: localeSchema,\n});\n\n/** Batch update messages mutation */\nexport const batchUpdateMessagesMutation = z.object({\n messages: z.array(z.object({\n key: z.string(),\n namespace: z.string(),\n translations: translationsObjectSchema,\n })),\n});\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type I18nLanguage = typeof i18nLanguages.$inferSelect;\nexport type I18nMessage = typeof i18nMessages.$inferSelect;\nexport type I18nBundleVersion = typeof i18nBundleVersions.$inferSelect;\nexport type GetI18nBundlesInput = z.infer<typeof getI18nBundlesQuery>;\nexport type GetI18nBundlesResult = z.infer<typeof getI18nBundlesResultSchema>;\n","/**\n * Roles Database Schema\n *\n * Drizzle ORM table definitions for role-based access control.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n timestamp,\n boolean,\n uniqueIndex,\n index,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { organization } from './auth';\n\n// ============================================================\n// Roles Table\n// ============================================================\n\n/**\n * Roles Table\n *\n * Stores role definitions.\n * - organizationId = 'platform': Platform organization roles (admin, owner, etc.)\n * - organizationId = 'xxx': Tenant-scoped roles (owner, admin, member, viewer)\n * System roles are protected from deletion.\n */\nexport const roles = pgTable(\n 'roles',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n name: text('name').notNull(),\n slug: text('slug').notNull(),\n description: text('description'),\n isSystem: boolean('is_system').notNull().default(false),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at')\n .notNull()\n .defaultNow()\n .$onUpdate(() => new Date()),\n },\n (table) => [\n uniqueIndex('roles_org_slug_uidx').on(table.organizationId, table.slug),\n index('roles_organization_id_idx').on(table.organizationId),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const roleSchema = createInsertSchema(roles);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type Role = typeof roles.$inferSelect;\nexport type InsertRole = typeof roles.$inferInsert;\n","/**\n * Role Permissions Database Schema\n *\n * Drizzle ORM table definitions for CASL-compatible permission rules.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n timestamp,\n boolean,\n jsonb,\n uniqueIndex,\n index,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { roles } from './roles';\n\n// ============================================================\n// Role Permissions Table\n// ============================================================\n\n/**\n * Role Permissions Table (CASL Format)\n *\n * Maps roles to CASL-compatible permission rules.\n *\n * CASL Rule Format:\n * - action: The action being permitted (e.g., 'read', 'update', 'manage')\n * - subject: The resource being protected (e.g., 'User', 'Order', 'all')\n * - fields: Optional array of allowed fields for field-level security\n * - conditions: Optional JSON object for ABAC conditions (e.g., { \"ownerId\": \"${user.id}\" })\n * - inverted: If true, this is a \"cannot\" rule (deny instead of allow)\n * - source: Plugin ID if this permission was registered by a plugin\n */\nexport const rolePermissions = pgTable(\n 'role_permissions',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n // FK to roles table\n roleId: text('role_id')\n .notNull()\n .references(() => roles.id, { onDelete: 'cascade' }),\n // CASL rule fields\n action: text('action').notNull(),\n subject: text('subject').notNull(),\n fields: jsonb('fields').$type<string[] | null>(),\n conditions: jsonb('conditions').$type<Record<string, unknown> | null>(),\n inverted: boolean('inverted').notNull().default(false),\n // Plugin tracking\n source: text('source'), // Plugin ID if from a plugin, null for core permissions\n createdAt: timestamp('created_at').notNull().defaultNow(),\n },\n (table) => [\n // Unique constraint on role + action + subject combination\n uniqueIndex('role_permissions_role_action_subject_uidx').on(\n table.roleId,\n table.action,\n table.subject,\n ),\n index('role_permissions_role_id_idx').on(table.roleId),\n index('role_permissions_source_idx').on(table.source),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const rolePermissionSchema = createInsertSchema(rolePermissions);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type RolePermission = typeof rolePermissions.$inferSelect;\nexport type InsertRolePermission = typeof rolePermissions.$inferInsert;\n\n/**\n * Type for CASL rule representation (used in API responses)\n */\nexport interface CaslRule {\n action: string;\n subject: string;\n fields?: string[] | null;\n conditions?: Record<string, unknown> | null;\n inverted?: boolean;\n}\n","/**\n * Permissions Database Schema\n *\n * Drizzle ORM table definitions for capability definitions.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport { pgTable, text, timestamp } from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\n\n// ============================================================\n// Permissions Table\n// ============================================================\n\n/**\n * Permissions Table\n *\n * Stores capability definitions (Core + Plugin).\n */\nexport const permissions = pgTable('permissions', {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n capability: text('capability').notNull().unique(),\n source: text('source').notNull(), // 'core' | pluginId\n description: text('description'),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n});\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const permissionSchema = createInsertSchema(permissions);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type Permission = typeof permissions.$inferSelect;\nexport type InsertPermission = typeof permissions.$inferInsert;\n\n/**\n * Role-Permission Mapping (MVP: In-memory constant)\n *\n * Maps roles to capabilities. In production, this would be a database table.\n */\nexport const ROLE_PERMISSIONS: Record<string, string[]> = {\n owner: ['*:*:*'],\n admin: ['organization:*:*', 'plugin:*:*', 'user:manage:*', 'content:*:*'],\n editor: ['content:create:space', 'content:update:own', 'content:read:*'],\n member: ['content:read:space', 'content:comment:*'],\n viewer: ['content:read:public'],\n};\n","/**\n * Menus Database Schema\n *\n * Drizzle ORM table definitions for navigation menus.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n integer,\n timestamp,\n jsonb,\n index,\n uniqueIndex,\n boolean,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { z } from 'zod/v4';\nimport { organization } from './auth';\nimport { paginationSchema } from './common';\n\n// ============================================================\n// Types\n// ============================================================\n\nexport type MenuType = 'system' | 'custom';\nexport type MenuOpenMode = 'route' | 'external';\nexport type MenuTarget = 'admin' | 'web';\n\n// ============================================================\n// Menus Table\n// ============================================================\n\n/**\n * Menus Table (Future-Ready Design for Plan D)\n *\n * Single-Table approach with code-based logical references:\n * - `code`: Logical identifier (e.g., 'dashboard', 'settings')\n * - `parent_code`: Hierarchy reference using code\n * - `organization_id`: Scope (NULL = global template, UUID = organization-specific)\n *\n * Menu Types:\n * - type='system': Core/Plugin menus (from global templates)\n * - type='custom': Organization-created menus\n *\n * Resolution Strategy:\n * 1. Merge global (organization_id=NULL) and organization-specific items\n * 2. Organization item with same code overrides global (Copy-on-Write)\n * 3. Auto-Inbox: Orphaned system menus go to SYS_INBOX\n */\nexport const menus = pgTable(\n 'menus',\n {\n // Primary key (UUID for database)\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // Logical identifier (stable across tenants)\n // Format: 'core:dashboard', 'plugin:blog:posts', 'custom:my-menu'\n code: text('code').notNull(),\n\n // Menu Type\n type: text('type').notNull().$type<MenuType>(), // system = core/plugin, custom = tenant-created\n\n // Source (for system menus: 'core' | pluginId)\n source: text('source').notNull(), // 'core' | pluginId | 'custom'\n\n // FK to organization table (nullable: NULL = global template, value = organization-specific)\n organizationId: text('organization_id')\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n // Menu Display\n label: text('label').notNull(),\n icon: text('icon'),\n path: text('path'), // NULL for directory menus\n openMode: text('open_mode').notNull().default('route').$type<MenuOpenMode>(),\n\n // Hierarchy (using code for logical reference)\n parentCode: text('parent_code'), // NULL = root level, 'SYS_INBOX' = orphaned\n order: integer('order').notNull().default(0),\n\n // Visibility Control\n visible: boolean('visible').notNull().default(true), // Tenant can hide menus\n\n // Permission Control\n requiredPermission: text('required_permission'),\n\n // Target Application\n target: text('target').notNull().$type<MenuTarget>(),\n\n // Extensibility\n metadata: jsonb('metadata'),\n\n // Timestamps\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n },\n (table) => [\n // Unique constraint: code + organizationId (allows same code in different organizations)\n uniqueIndex('menus_code_org_idx').on(table.code, table.organizationId),\n // Query optimization indexes\n index('menus_org_idx').on(table.organizationId),\n index('menus_source_org_idx').on(table.source, table.organizationId),\n index('menus_target_idx').on(table.target),\n index('menus_parent_code_idx').on(table.parentCode),\n index('menus_type_idx').on(table.type),\n ],\n);\n\n// ============================================================\n// Constants\n// ============================================================\n\n/**\n * Virtual Inbox code for orphaned system menus\n * When a system menu's parent is deleted/hidden, it moves here\n */\nexport const SYS_INBOX_CODE = 'SYS_INBOX';\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\n/** Base Schema - 直接用于 Create/Update */\nexport const menuSchema = createInsertSchema(menus);\n\n// ============================================================\n// Query Schemas\n// ============================================================\n\n/** Get menu by code */\nexport const getMenuQuery = z.object({\n code: z.string(),\n});\n\n/** List menus for sidebar */\nexport const listMenusQuery = z.object({\n target: z.enum(['admin', 'web']),\n});\n\n/** List all menus for admin management */\nexport const listAllMenusQuery = z.object({\n target: z.enum(['admin', 'web']).optional(),\n}).merge(paginationSchema.partial());\n\n// ============================================================\n// Mutation Schemas\n// ============================================================\n\n/** Delete menu mutation */\nexport const deleteMenuMutation = z.object({\n code: z.string(),\n});\n\n/** Toggle visibility mutation */\nexport const toggleMenuVisibilityMutation = z.object({\n code: z.string(),\n visible: z.boolean(),\n});\n\n/** Schema for creating a menu (used by menu.service) */\nexport const createMenuSchema = menuSchema.pick({\n code: true,\n label: true,\n path: true,\n icon: true,\n openMode: true,\n parentCode: true,\n order: true,\n target: true,\n metadata: true,\n}).extend({\n openMode: z.enum(['route', 'external']).optional(),\n target: z.enum(['admin', 'web']),\n});\n\n/** Schema for updating a menu (all fields optional, used by menu.service) */\nexport const updateMenuSchema = menuSchema.pick({\n label: true,\n icon: true,\n path: true,\n openMode: true,\n parentCode: true,\n order: true,\n visible: true,\n metadata: true,\n}).partial().extend({\n openMode: z.enum(['route', 'external']).optional(),\n});\n\n/** Update menu mutation (code for identification + partial fields) */\nexport const updateMenuMutation = menuSchema\n .omit({\n id: true,\n createdAt: true,\n updatedAt: true,\n })\n .partial()\n .extend({\n code: z.string(), // Required for identification\n });\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type Menu = typeof menus.$inferSelect;\nexport type InsertMenu = typeof menus.$inferInsert;\n","/**\n * Permission Fields Database Schema\n *\n * Predefined fields for business tables that support LBAC.\n * Core may not use all fields, but plugins can extend them.\n *\n * Usage:\n * ```typescript\n * export const articles = pgTable('articles', {\n * id: text('id').primaryKey(),\n * organizationId: text('organization_id').notNull(),\n * title: text('title').notNull(),\n * ...permissionFields, // Spread permission fields\n * });\n * ```\n */\n\nimport { text } from 'drizzle-orm/pg-core';\n\n// ============================================================\n// Scope Fields\n// ============================================================\n\n/**\n * Scope ownership fields\n * - spaceId: Resource space (used by Space plugin)\n * - teamId: Team ownership\n */\nexport const scopeFields = {\n /** Resource space ID (used by Space plugin, reserved by Core) */\n spaceId: text('space_id'),\n\n /** Team ID (used by Team feature) */\n teamId: text('team_id'),\n};\n\n// ============================================================\n// Owner Fields\n// ============================================================\n\n/**\n * Person ownership fields\n * - ownerId: Current owner (transferable)\n * - creatorId: Original creator (immutable, for audit)\n */\nexport const ownerFields = {\n /** Current owner ID */\n ownerId: text('owner_id'),\n\n /** Original creator ID (for audit, preserved after ownership transfer) */\n creatorId: text('creator_id'),\n};\n\n// ============================================================\n// LBAC Fields\n// ============================================================\n\n/**\n * LBAC fields\n * - aclTags: List of tags that allow access\n * - denyTags: List of tags that deny access (higher priority than aclTags)\n *\n * Tag format: '{prefix}:{id}'\n * Examples: 'user:123', 'org:456', 'team:tech', 'space:marketing'\n */\nexport const lbacFields = {\n /** Allow list - match any tag to grant access */\n aclTags: text('acl_tags').array().notNull().default([]),\n\n /** Deny list - match any tag to deny access (higher priority than allow) */\n denyTags: text('deny_tags').array().notNull().default([]),\n};\n\n// ============================================================\n// Combined Permission Fields\n// ============================================================\n\n/**\n * Complete permission fields (recommended for business tables)\n *\n * Includes:\n * - spaceId, teamId (scope ownership)\n * - ownerId, creatorId (person ownership)\n * - aclTags, denyTags (LBAC)\n */\nexport const permissionFields = {\n ...scopeFields,\n ...ownerFields,\n ...lbacFields,\n};\n\n// ============================================================\n// Utilities\n// ============================================================\n\n/**\n * LBAC index SQL generator\n *\n * Creates GIN indexes for aclTags and denyTags to accelerate queries\n *\n * @param tableName - Table name\n * @returns SQL statement\n */\nexport const createLbacIndexes = (tableName: string) => `\nCREATE INDEX IF NOT EXISTS idx_${tableName}_acl_tags ON \"${tableName}\" USING GIN(acl_tags);\nCREATE INDEX IF NOT EXISTS idx_${tableName}_deny_tags ON \"${tableName}\" USING GIN(deny_tags);\n`;\n\n/**\n * Tag prefix constants\n */\nexport const TagPrefix = {\n USER: 'user',\n ORG: 'org',\n TEAM: 'team',\n SPACE: 'space',\n ROLE: 'role',\n PUBLIC: 'public',\n} as const;\n\nexport type TagPrefixType = (typeof TagPrefix)[keyof typeof TagPrefix];\n","/**\n * Plugins Database Schema\n *\n * Drizzle ORM table definitions for plugin management.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n boolean,\n index,\n pgTable,\n text,\n timestamp,\n jsonb,\n uniqueIndex,\n varchar,\n} from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { z } from 'zod';\nimport { organization } from './auth';\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Plugin Status\n */\nexport type PluginStatus =\n | 'enabled'\n | 'disabled'\n | 'crashed'\n | 'invalid'\n | 'archived'\n | 'uninstalled';\n\nexport type PluginInstallationStatus = 'installed' | 'uninstalled' | 'suspended';\nexport type PluginActivationStatus = 'enabled' | 'disabled';\n\n/**\n * Instance-level plugin status.\n *\n * This models whether the current deployment instance has the plugin\n * activated and available at runtime.\n */\nexport type PluginInstanceStatus = 'installed' | 'loaded' | 'failed';\n\nexport const PLUGIN_MARKETPLACE_STATES = [\n 'draft',\n 'published',\n 'archived',\n 'suspended',\n 'removed',\n] as const;\nexport type PluginMarketplaceState = (typeof PLUGIN_MARKETPLACE_STATES)[number];\n\nexport const PLUGIN_TRUST_LEVELS = ['first_party', 'third_party'] as const;\nexport type PluginTrustLevel = (typeof PLUGIN_TRUST_LEVELS)[number];\n\nexport const PLUGIN_INSTALL_OPERATIONS = ['install', 'update', 'uninstall', 'rollback'] as const;\nexport type PluginInstallOperation = (typeof PLUGIN_INSTALL_OPERATIONS)[number];\n\nexport const PLUGIN_INSTALL_SOURCES = ['registry', 'upload', 'system'] as const;\nexport type PluginInstallSource = (typeof PLUGIN_INSTALL_SOURCES)[number];\n\nexport const PLUGIN_INSTALL_JOB_STATUSES = [\n 'queued',\n 'validating',\n 'staging',\n 'awaiting_reload',\n 'succeeded',\n 'failed',\n 'rolled_back',\n] as const;\nexport type PluginInstallJobStatus = (typeof PLUGIN_INSTALL_JOB_STATUSES)[number];\n\n/**\n * Plugin Manifest interface (simplified for packages/db)\n * Full type is defined in @wordrhyme/plugin\n */\nexport interface PluginManifestBase {\n id: string;\n name: string;\n version: string;\n description?: string;\n author?: string;\n [key: string]: unknown;\n}\n\n// ============================================================\n// Plugins Table\n// ============================================================\n\n/**\n * Plugins Table\n *\n * Stores tenant-scoped plugin installation and activation state.\n *\n * In the default Shopify-first governance model:\n * - this table controls tenant availability and activation only\n * - schema migration ownership remains instance-scoped\n */\nexport const plugins = pgTable(\n 'plugins',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n pluginId: text('plugin_id').notNull(),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n version: text('version').notNull(),\n installationStatus: text('installation_status')\n .notNull()\n .$type<PluginInstallationStatus>()\n .default('installed'),\n activationStatus: text('activation_status')\n .notNull()\n .$type<PluginActivationStatus>()\n .default('enabled'),\n status: text('status').notNull().$type<PluginStatus>(),\n manifest: jsonb('manifest').notNull().$type<PluginManifestBase>(),\n installedAt: timestamp('installed_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n scheduledDeletionAt: timestamp('scheduled_deletion_at'),\n },\n (table) => [\n uniqueIndex('unique_plugin_per_org').on(table.organizationId, table.pluginId),\n index('plugins_plugin_installation_idx').on(\n table.pluginId,\n table.installationStatus,\n table.organizationId,\n ),\n ],\n);\n\n/**\n * Plugin Instances Table\n *\n * Stores plugin availability for the current running instance.\n *\n * This is intentionally separate from the tenant-scoped `plugins` table:\n * - `plugin_instances` answers \"is the plugin loaded for this deployment?\"\n * - `plugins` answers \"is the plugin installed/enabled for this tenant?\"\n */\nexport const pluginInstances = pgTable(\n 'plugin_instances',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n pluginId: text('plugin_id').notNull(),\n version: text('version').notNull(),\n status: text('status').notNull().$type<PluginInstanceStatus>(),\n manifest: jsonb('manifest').notNull().$type<PluginManifestBase>(),\n installedAt: timestamp('installed_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n },\n (table) => [\n uniqueIndex('unique_plugin_per_instance').on(table.pluginId),\n ],\n);\n\n// ============================================================\n// Plugin Registry and Installation\n// ============================================================\n\n/**\n * Local cache of immutable releases advertised by the deployment-bound Registry.\n * sourceId is a stable provenance label, not a database-owned Registry configuration.\n */\nexport const pluginCatalogReleases = pgTable(\n 'plugin_catalog_releases',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n sourceId: text('source_id').notNull(),\n pluginId: varchar('plugin_id', { length: 160 }).notNull(),\n version: varchar('version', { length: 80 }).notNull(),\n state: varchar('state', { length: 20, enum: PLUGIN_MARKETPLACE_STATES })\n .notNull()\n .$type<PluginMarketplaceState>(),\n trustLevel: varchar('trust_level', { length: 20, enum: PLUGIN_TRUST_LEVELS })\n .notNull()\n .$type<PluginTrustLevel>(),\n manifest: jsonb('manifest').notNull().$type<PluginManifestBase>(),\n release: jsonb('release').notNull().$type<Record<string, unknown>>(),\n artifactUrl: text('artifact_url').notNull(),\n artifactSha256: varchar('artifact_sha256', { length: 64 }).notNull(),\n publisherId: varchar('publisher_id', { length: 160 }),\n releaseSha256: varchar('release_sha256', { length: 64 }),\n publisherSignature: jsonb('publisher_signature').$type<Record<string, unknown>>(),\n registrySignature: jsonb('registry_signature').$type<Record<string, unknown>>(),\n /** @deprecated Legacy alias for publisherSignature. */\n signature: jsonb('signature').$type<Record<string, unknown>>(),\n publishedAt: timestamp('published_at').notNull(),\n fetchedAt: timestamp('fetched_at').notNull().defaultNow(),\n },\n (table) => [\n uniqueIndex('plugin_catalog_release_unique').on(table.sourceId, table.pluginId, table.version),\n index('plugin_catalog_release_lookup_idx').on(table.pluginId, table.state, table.publishedAt),\n ],\n);\n\n/** Last verified Registry snapshot committed for each deployment-bound source. */\nexport const pluginRegistrySyncState = pgTable('plugin_registry_sync_state', {\n sourceId: text('source_id').primaryKey(),\n snapshotId: varchar('snapshot_id', { length: 160 }).notNull(),\n generatedAt: timestamp('generated_at').notNull(),\n fetchedAt: timestamp('fetched_at').notNull().defaultNow(),\n});\n\n/**\n * Durable instance-level install/update/uninstall orchestration state.\n */\nexport const pluginInstallJobs = pgTable(\n 'plugin_install_jobs',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n pluginId: varchar('plugin_id', { length: 160 }).notNull(),\n operation: varchar('operation', { length: 20, enum: PLUGIN_INSTALL_OPERATIONS })\n .notNull()\n .$type<PluginInstallOperation>(),\n source: varchar('source', { length: 20, enum: PLUGIN_INSTALL_SOURCES })\n .notNull()\n .$type<PluginInstallSource>(),\n sourceId: text('source_id'),\n releaseId: text('release_id')\n .references(() => pluginCatalogReleases.id, { onDelete: 'set null' }),\n previousVersion: varchar('previous_version', { length: 80 }),\n targetVersion: varchar('target_version', { length: 80 }),\n status: varchar('status', { length: 24, enum: PLUGIN_INSTALL_JOB_STATUSES })\n .notNull()\n .$type<PluginInstallJobStatus>()\n .default('queued'),\n artifactSha256: varchar('artifact_sha256', { length: 64 }),\n requestedBy: text('requested_by').notNull(),\n errorCode: varchar('error_code', { length: 80 }),\n errorMessage: text('error_message'),\n metadata: jsonb('metadata').notNull().$type<Record<string, unknown>>().default({}),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n completedAt: timestamp('completed_at'),\n },\n (table) => [\n uniqueIndex('plugin_install_jobs_active_plugin_uidx')\n .on(table.pluginId)\n .where(sql`${table.status} IN ('queued', 'validating', 'staging', 'awaiting_reload')`),\n index('plugin_install_jobs_plugin_idx').on(table.pluginId, table.createdAt),\n index('plugin_install_jobs_status_idx').on(table.status, table.createdAt),\n ],\n);\n\n// ============================================================\n// Plugin Configs Table\n// ============================================================\n\n/**\n * Plugin Configs Table\n *\n * Stores plugin configuration (key-value) per organization.\n */\nexport const pluginConfigs = pgTable(\n 'plugin_configs',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n pluginId: text('plugin_id').notNull(),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n key: text('key').notNull(),\n value: jsonb('value').notNull(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n },\n (table) => [\n uniqueIndex('unique_config_key').on(\n table.organizationId,\n table.pluginId,\n table.key,\n ),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const pluginSchema = createInsertSchema(plugins);\nexport const pluginInstanceSchema = createInsertSchema(pluginInstances);\nexport const pluginCatalogReleaseSchema = createInsertSchema(pluginCatalogReleases, {\n artifactUrl: () => z.url(),\n artifactSha256: () => z.string().regex(/^[a-f0-9]{64}$/),\n});\nexport const pluginInstallJobSchema = createInsertSchema(pluginInstallJobs);\nexport const pluginConfigSchema = createInsertSchema(pluginConfigs);\n\nexport const listPluginCatalogQuery = z.object({\n query: z.string().trim().min(1).max(120).optional(),\n limit: z.number().int().min(1).max(100).default(20),\n offset: z.number().int().nonnegative().default(0),\n});\n\nexport const installPluginFromRegistryMutation = z.object({\n pluginId: z.string().regex(/^[a-z][a-z0-9-]*(\\.[a-z][a-z0-9-]*)+$/),\n version: z.string().min(1).max(80),\n});\n\nexport const createPluginUploadMutation = z.object({\n pluginId: z.string().regex(/^[a-z][a-z0-9-]*(\\.[a-z][a-z0-9-]*)+$/),\n version: z.string().min(1).max(80),\n totalSize: z.number().int().positive().max(100 * 1024 * 1024),\n sha256: z.string().regex(/^[a-f0-9]{64}$/),\n});\n\nexport const appendPluginUploadMutation = z.object({\n uploadId: z.string().uuid(),\n offset: z.number().int().nonnegative(),\n chunkBase64: z.base64().min(1).max(1024 * 1024),\n});\n\nexport const completePluginUploadMutation = z.object({\n uploadId: z.string().uuid(),\n});\n\nexport const getPluginInstallJobQuery = pluginInstallJobSchema.pick({ id: true }).required();\nexport const uninstallPluginFromInstanceMutation = z.object({\n pluginId: z.string().regex(/^[a-z][a-z0-9-]*(\\.[a-z][a-z0-9-]*)+$/),\n retentionChoice: z.enum([\"retain\", \"archive\", \"delete\"]).optional(),\n confirmed: z.boolean().optional(),\n});\nexport const rollbackPluginInstallMutation = getPluginInstallJobQuery;\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type Plugin = typeof plugins.$inferSelect;\nexport type InsertPlugin = typeof plugins.$inferInsert;\nexport type PluginInstance = typeof pluginInstances.$inferSelect;\nexport type InsertPluginInstance = typeof pluginInstances.$inferInsert;\nexport type PluginCatalogRelease = typeof pluginCatalogReleases.$inferSelect;\nexport type InsertPluginCatalogRelease = typeof pluginCatalogReleases.$inferInsert;\nexport type PluginInstallJob = typeof pluginInstallJobs.$inferSelect;\nexport type InsertPluginInstallJob = typeof pluginInstallJobs.$inferInsert;\nexport type PluginConfig = typeof pluginConfigs.$inferSelect;\nexport type InsertPluginConfig = typeof pluginConfigs.$inferInsert;\n","/**\n * Plugin Migrations Database Schema\n *\n * Drizzle ORM table definitions for plugin migration tracking.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport { pgTable, text, timestamp, uniqueIndex } from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { organization } from './auth';\n\n// ============================================================\n// Plugin Migrations Table\n// ============================================================\n\n/**\n * Plugin Migrations Table\n *\n * Tracks applied plugin database migrations by migration owner.\n *\n * Current runtime default:\n * - the `organization_id` column stores the instance migration owner key\n * - the reserved value `'default'` means \"current deployment instance\"\n *\n * This preserves the current table shape while the runtime model converges on\n * instance-scoped schema ownership.\n */\nexport const pluginMigrations = pgTable(\n 'plugin_migrations',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n pluginId: text('plugin_id').notNull(),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull(),\n migrationFile: text('migration_file').notNull(),\n appliedAt: timestamp('applied_at').notNull().defaultNow(),\n checksum: text('checksum').notNull(), // SHA256 of file content\n },\n (table) => [\n uniqueIndex('unique_plugin_migration').on(\n table.organizationId,\n table.pluginId,\n table.migrationFile,\n ),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const pluginMigrationSchema = createInsertSchema(pluginMigrations);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type PluginMigration = typeof pluginMigrations.$inferSelect;\nexport type InsertPluginMigration = typeof pluginMigrations.$inferInsert;\n","/**\n * Entity extension standard projection schema.\n *\n * Core stores standard extension field values plus the read model needed for\n * list display/search/filter/sort. Plugins only need private tables when they\n * have their own derived business data.\n */\nimport {\n boolean,\n index,\n jsonb,\n numeric,\n pgTable,\n text,\n timestamp,\n uniqueIndex,\n varchar,\n} from 'drizzle-orm/pg-core';\nimport { organization } from './auth';\n\nexport const ENTITY_EXTENSION_VALUE_TYPES = [\n 'text',\n 'number',\n 'boolean',\n 'date',\n 'datetime',\n 'select',\n 'ref',\n 'json',\n] as const;\nexport type EntityExtensionValueType = (typeof ENTITY_EXTENSION_VALUE_TYPES)[number];\n\nexport const ENTITY_EXTENSION_PROJECTION_STATUSES = [\n 'active',\n 'stale',\n 'deleted',\n] as const;\nexport type EntityExtensionProjectionStatus = (typeof ENTITY_EXTENSION_PROJECTION_STATUSES)[number];\n\nexport const extProjection = pgTable(\n 'ext_projection',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n pluginId: text('plugin_id').notNull(),\n entity: varchar('entity', { length: 160 }).notNull(),\n entityId: text('entity_id').notNull(),\n field: varchar('field', { length: 80 }).notNull(),\n type: varchar('type', { length: 30 })\n .notNull()\n .$type<EntityExtensionValueType>(),\n valueText: text('value_text'),\n valueNumber: numeric('value_number'),\n valueBoolean: boolean('value_boolean'),\n valueDate: timestamp('value_date', { withTimezone: true }),\n valueJson: jsonb('value_json').$type<unknown>(),\n refEntity: varchar('ref_entity', { length: 160 }),\n refId: text('ref_id'),\n display: text('display'),\n search: text('search'),\n status: varchar('status', { length: 20 })\n .notNull()\n .$type<EntityExtensionProjectionStatus>()\n .default('active'),\n syncedAt: timestamp('synced_at', { withTimezone: true }).notNull().defaultNow(),\n createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),\n updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),\n },\n (table) => [\n uniqueIndex('ext_projection_unique_field').on(\n table.organizationId,\n table.pluginId,\n table.entity,\n table.entityId,\n table.field,\n ),\n index('ext_projection_entity_idx').on(\n table.organizationId,\n table.entity,\n table.entityId,\n ),\n index('ext_projection_field_idx').on(\n table.organizationId,\n table.entity,\n table.field,\n table.status,\n ),\n index('ext_projection_ref_idx').on(\n table.organizationId,\n table.refEntity,\n table.refId,\n ),\n ],\n);\n\nexport type ExtProjection = typeof extProjection.$inferSelect;\nexport type InsertExtProjection = typeof extProjection.$inferInsert;\n","/**\n * Action Execution Journal Schema (AI Action Gateway)\n *\n * The gateway's own fail-closed execution ledger. Core audit is deliberately\n * fail-open (AUDIT_GOVERNANCE §7) and therefore cannot carry the guarantee that\n * every high-risk action is accountable: a target system can apply a change\n * while the audit write is lost. Journal writes are awaited and must succeed\n * BEFORE any external side effect.\n *\n * prepared → approval_pending → authorized → dispatched\n * ↘ denied | expired (terminal)\n * → succeeded | failed | unknown → reconciled\n *\n * `unknown` (target may have applied the change, response lost) is a first-class\n * state and must never be silently downgraded to `failed`.\n *\n * Two indexes carry the correctness guarantees:\n * - `nonce` unique → an approval token drives exactly one execution\n * - active partial unique → one in-flight execution per (org, action, args)\n */\nimport { index, integer, pgTable, text, timestamp, uniqueIndex, varchar } from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\n\nexport const ACTION_JOURNAL_STATUSES = [\n 'prepared',\n 'approval_pending',\n 'authorized',\n 'dispatched',\n 'succeeded',\n 'failed',\n 'unknown',\n 'reconciled',\n 'denied',\n 'expired',\n] as const;\n\nexport type ActionJournalStatus = (typeof ACTION_JOURNAL_STATUSES)[number];\n\n/** Statuses that still occupy the in-flight slot for (org, action, args). */\nexport const ACTION_JOURNAL_ACTIVE_STATUSES = [\n 'prepared',\n 'approval_pending',\n 'authorized',\n 'dispatched',\n] as const;\n\nexport const actionExecutionJournal = pgTable(\n 'action_execution_journal',\n {\n id: text('id')\n .primaryKey()\n .default(sql`gen_random_uuid()`),\n organizationId: text('organization_id').notNull(),\n /** Authorizing subject. The only permission source (plan §4.3 B2). */\n principalUserId: text('principal_user_id').notNull(),\n /** Who initiated, e.g. `agent:<pluginId>`. Audit chain only, never authorization. */\n invoker: text('invoker').notNull(),\n /** Stable Action Contract id, decoupled from the procedure path. */\n actionId: text('action_id').notNull(),\n revision: integer('revision').notNull(),\n /** Canonicalized argument hash; binds the approval token to these arguments. */\n argsHash: text('args_hash').notNull(),\n /** Approval token nonce, or an `auto-` prefixed value for ungated executions. */\n nonce: text('nonce').notNull(),\n status: varchar('status', { length: 24, enum: ACTION_JOURNAL_STATUSES })\n .notNull()\n .$type<ActionJournalStatus>()\n .default('prepared'),\n attempt: integer('attempt').notNull().default(0),\n /** Target-system identifier used to reconcile `unknown` executions. */\n externalRef: text('external_ref'),\n errorCode: text('error_code'),\n /** Resolved verdict recorded by reconciliation. */\n outcome: text('outcome'),\n createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),\n updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),\n dispatchedAt: timestamp('dispatched_at', { withTimezone: true }),\n terminalAt: timestamp('terminal_at', { withTimezone: true }),\n },\n (table) => [\n uniqueIndex('action_execution_journal_nonce_uidx').on(table.nonce),\n uniqueIndex('action_execution_journal_active_uidx')\n .on(table.organizationId, table.actionId, table.argsHash)\n .where(sql`${table.status} IN ('prepared','approval_pending','authorized','dispatched')`),\n index('action_execution_journal_status_idx').on(table.status, table.updatedAt),\n index('action_execution_journal_org_idx').on(table.organizationId, table.createdAt),\n ],\n);\n\n/**\n * Outbox for work that must survive a crash — reconciliation probes and retries.\n * Written in the same transaction as the journal transition it belongs to.\n */\nexport const actionExecutionOutbox = pgTable(\n 'action_execution_outbox',\n {\n id: text('id')\n .primaryKey()\n .default(sql`gen_random_uuid()`),\n journalId: text('journal_id')\n .notNull()\n .references(() => actionExecutionJournal.id, { onDelete: 'cascade' }),\n kind: text('kind').notNull(),\n availableAt: timestamp('available_at', { withTimezone: true }).notNull().defaultNow(),\n attempts: integer('attempts').notNull().default(0),\n lockedAt: timestamp('locked_at', { withTimezone: true }),\n lockToken: text('lock_token'),\n },\n (table) => [index('action_execution_outbox_available_idx').on(table.availableAt)],\n);\n\nexport type ActionExecutionJournal = typeof actionExecutionJournal.$inferSelect;\nexport type InsertActionExecutionJournal = typeof actionExecutionJournal.$inferInsert;\nexport type ActionExecutionOutbox = typeof actionExecutionOutbox.$inferSelect;\n","/**\n * Settings Database Schema\n *\n * Drizzle ORM table definitions for configuration storage.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n timestamp,\n jsonb,\n index,\n boolean,\n integer,\n uniqueIndex,\n} from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { z } from 'zod/v4';\nimport { organization } from './auth';\nimport { paginationSchema } from './common';\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Setting Scope Types\n *\n * - global: Platform-wide configuration\n * - tenant: Organization-specific configuration\n * - plugin_global: Plugin's global configuration\n * - plugin_tenant: Plugin's organization-specific configuration\n */\nexport type SettingScope =\n | 'global'\n | 'tenant'\n | 'plugin_global'\n | 'plugin_tenant';\n\n/**\n * Setting Value Types\n */\nexport type SettingValueType = 'string' | 'number' | 'boolean' | 'json';\n\n/**\n * Encrypted Value Structure\n */\nexport interface EncryptedValue {\n ciphertext: string; // Base64 encoded\n iv: string; // 12 bytes, Base64\n authTag: string; // 16 bytes, Base64\n keyVersion: number; // Key version for rotation\n}\n\n// ============================================================\n// Settings Table\n// ============================================================\n\n/**\n * Settings Table\n *\n * Unified configuration storage with four-scope model.\n * Supports encrypted values for sensitive data.\n *\n * Field Matrix:\n * | Scope | scope_id | organization_id |\n * |----------------|--------------|----------------------|\n * | global | NULL | NULL |\n * | tenant | NULL | 'tenant-123' |\n * | plugin_global | 'my-plugin' | NULL |\n * | plugin_tenant | 'my-plugin' | 'tenant-123' |\n */\nexport const settings = pgTable(\n 'settings',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // Scope identification\n scope: text('scope').notNull().$type<SettingScope>(),\n scopeId: text('scope_id'), // pluginId (only for plugin_* scopes)\n // FK to organization table (nullable - only for tenant and plugin_tenant scopes)\n organizationId: text('organization_id')\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n // Setting data\n key: text('key').notNull(), // Setting key (e.g., \"email.smtp.host\")\n value: jsonb('value'), // Setting value (or EncryptedValue if encrypted)\n valueType: text('value_type').$type<SettingValueType>().default('string'),\n\n // Encryption\n encrypted: boolean('encrypted').notNull().default(false),\n\n // Schema version for migration support\n schemaVersion: integer('schema_version').notNull().default(1),\n\n // Metadata\n description: text('description'),\n\n // Audit fields\n createdBy: text('created_by'),\n updatedBy: text('updated_by'),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at')\n .notNull()\n .defaultNow()\n .$onUpdate(() => new Date()),\n },\n (table) => [\n // Unique constraint with COALESCE to handle NULL values\n uniqueIndex('idx_settings_unique').on(\n table.scope,\n sql`COALESCE(${table.scopeId}, '')`,\n sql`COALESCE(${table.organizationId}, '')`,\n table.key,\n ),\n // Index for scope + key queries\n index('idx_settings_scope_key').on(table.scope, table.key),\n // Index for tenant queries (partial)\n index('idx_settings_tenant').on(table.organizationId),\n // Index for plugin queries (partial)\n index('idx_settings_plugin').on(table.scopeId),\n ],\n);\n\n// ============================================================\n// Setting Schemas Table\n// ============================================================\n\n/**\n * Setting Schemas Table\n *\n * Defines JSON Schema validation for settings.\n * Supports wildcard patterns for matching multiple keys.\n */\nexport const settingSchemas = pgTable(\n 'setting_schemas',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // Pattern matching (supports wildcards, e.g., \"email.*\" or \"plugin:*:api_key\")\n keyPattern: text('key_pattern').notNull(),\n\n // JSON Schema definition\n schema: jsonb('schema').notNull().$type<Record<string, unknown>>(),\n\n // Version for schema evolution\n version: integer('version').notNull().default(1),\n\n // Default value if setting doesn't exist\n defaultValue: jsonb('default_value'),\n\n // Metadata\n description: text('description'),\n deprecated: boolean('deprecated').notNull().default(false),\n\n createdAt: timestamp('created_at').notNull().defaultNow(),\n },\n (table) => [\n // Unique constraint on pattern + version\n uniqueIndex('idx_setting_schemas_pattern_version').on(\n table.keyPattern,\n table.version,\n ),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const settingScopeSchema = z.enum(['global', 'tenant', 'plugin_global', 'plugin_tenant']);\nexport const settingValueTypeSchema = z.enum(['string', 'number', 'boolean', 'json']);\n\nexport const settingSchema = createInsertSchema(settings);\nexport const settingSchemaSchema = createInsertSchema(settingSchemas);\n\n// ============================================================\n// Query Schemas\n// ============================================================\n\n/**\n * Get setting query - 获取单个配置\n */\nexport const getSettingQuery = settingSchema.pick({\n scope: true,\n key: true,\n organizationId: true,\n scopeId: true,\n}).extend({\n defaultValue: z.unknown().optional(),\n});\n\n/**\n * List settings query - 列表查询配置\n */\nexport const listSettingsQuery = settingSchema\n .pick({\n scope: true,\n organizationId: true,\n scopeId: true,\n })\n .merge(paginationSchema)\n .extend({\n keyPrefix: z.string().optional(),\n });\n\n/**\n * Set setting mutation - 设置配置值\n */\nexport const setSettingMutation = settingSchema.pick({\n scope: true,\n key: true,\n value: true,\n organizationId: true,\n scopeId: true,\n encrypted: true,\n description: true,\n valueType: true,\n});\n\n/**\n * Delete setting mutation - 删除配置\n */\nexport const deleteSettingMutation = settingSchema.pick({\n scope: true,\n key: true,\n organizationId: true,\n scopeId: true,\n});\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type Setting = typeof settings.$inferSelect;\nexport type InsertSetting = typeof settings.$inferInsert;\nexport type SettingSchemaType = typeof settingSchemas.$inferSelect;\n/** @alias SettingSchemaType - backward compatibility */\nexport type SettingSchema = SettingSchemaType;\nexport type InsertSettingSchema = typeof settingSchemas.$inferInsert;\n\n/**\n * Get options for retrieving settings\n */\nexport interface GetSettingOptions {\n organizationId?: string | undefined;\n scopeId?: string | undefined; // pluginId for plugin scopes\n defaultValue?: unknown;\n}\n\n/**\n * Set options for storing settings\n */\nexport interface SetSettingOptions {\n organizationId?: string | undefined;\n scopeId?: string | undefined; // pluginId for plugin scopes\n encrypted?: boolean | undefined;\n description?: string | undefined;\n valueType?: SettingValueType | undefined;\n}\n\n/**\n * List options for querying settings\n */\nexport interface ListSettingsOptions {\n organizationId?: string | undefined;\n scopeId?: string | undefined;\n keyPrefix?: string | undefined;\n includeEncrypted?: boolean | undefined;\n}\n","/**\n * Feature Flags Database Schema\n *\n * Drizzle ORM table definitions for feature flag management.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n timestamp,\n jsonb,\n index,\n boolean,\n integer,\n uniqueIndex,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { z } from 'zod/v4';\nimport { organization } from './auth';\nimport { paginationSchema } from './common';\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Feature Flag Condition Types\n */\nexport type ConditionType =\n | 'user_role'\n | 'tenant_plan'\n | 'user_id'\n | 'percentage';\n\nexport type ConditionOperator = 'eq' | 'neq' | 'in' | 'nin' | 'gt' | 'lt' | 'gte' | 'lte';\n\n/**\n * Feature Flag Condition\n */\nexport interface FlagCondition {\n type: ConditionType;\n operator: ConditionOperator;\n value?: unknown;\n}\n\n// ============================================================\n// Feature Flags Table\n// ============================================================\n\n/**\n * Feature Flags Table\n *\n * Platform-level feature flag definitions.\n * Supports conditions and rollout percentages.\n */\nexport const featureFlags = pgTable(\n 'feature_flags',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // Identification\n key: text('key').notNull().unique(), // Unique flag key (e.g., \"dark_mode\", \"ai_features\")\n name: text('name').notNull(), // Display name\n\n // Configuration\n description: text('description'),\n enabled: boolean('enabled').notNull().default(false),\n\n // Rollout configuration\n rolloutPercentage: integer('rollout_percentage').notNull().default(100), // 0-100\n\n // Condition rules (evaluated in order, all must pass)\n conditions: jsonb('conditions')\n .notNull()\n .default([])\n .$type<FlagCondition[]>(),\n\n // Audit fields\n createdBy: text('created_by'),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at')\n .notNull()\n .defaultNow()\n .$onUpdate(() => new Date()),\n },\n (table) => [index('idx_feature_flags_key').on(table.key)],\n);\n\n// ============================================================\n// Feature Flag Overrides Table\n// ============================================================\n\n/**\n * Feature Flag Overrides Table\n *\n * Tenant-level overrides for feature flags.\n * Allows per-tenant configuration of global flags.\n */\nexport const featureFlagOverrides = pgTable(\n 'feature_flag_overrides',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // References\n flagId: text('flag_id')\n .notNull()\n .references(() => featureFlags.id, { onDelete: 'cascade' }),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n // Override configuration\n enabled: boolean('enabled').notNull(),\n rolloutPercentage: integer('rollout_percentage'), // NULL means use global value\n conditions: jsonb('conditions').$type<FlagCondition[]>(), // NULL means use global conditions\n\n // Audit fields\n createdBy: text('created_by'),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n },\n (table) => [\n // Unique constraint: one override per flag per tenant\n uniqueIndex('idx_ff_overrides_flag_tenant').on(table.flagId, table.organizationId),\n // Index for tenant lookups\n index('idx_ff_overrides_tenant').on(table.organizationId),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\n/** Flag condition schema */\nexport const flagConditionSchema = z.object({\n type: z.enum(['user_role', 'tenant_plan', 'user_id', 'percentage']),\n operator: z.enum(['eq', 'neq', 'in', 'nin', 'gt', 'lt', 'gte', 'lte']),\n value: z.unknown(),\n});\n\n/** Base Schema - 直接用于 Create/Update */\nexport const featureFlagSchema = createInsertSchema(featureFlags);\nexport const featureFlagOverrideSchema = createInsertSchema(featureFlagOverrides);\n\n/**\n * Backward-compatible tenant/org input:\n * - New field: organizationId\n * - Legacy field: tenantId\n */\nconst organizationInputSchema = z\n .object({\n organizationId: z.string().min(1).optional(),\n tenantId: z.string().min(1).optional(),\n })\n .refine((data) => !!(data.organizationId ?? data.tenantId), {\n message: 'organizationId is required',\n path: ['organizationId'],\n })\n .transform((data) => ({\n organizationId: data.organizationId ?? data.tenantId!,\n }));\n\n// ============================================================\n// Query Schemas\n// ============================================================\n\n/** Check if a feature flag is enabled */\nexport const checkFeatureFlagQuery = z.object({\n key: z.string(),\n organizationId: z.string().optional(),\n tenantId: z.string().optional(),\n userId: z.string().optional(),\n userRole: z.string().optional(),\n tenantPlan: z.string().optional(),\n}).transform((data) => ({\n ...data,\n organizationId: data.organizationId ?? data.tenantId,\n}));\n\n/** Get feature flag by key */\nexport const getFeatureFlagQuery = z.object({\n key: z.string().min(1),\n});\n\n/** List feature flags */\nexport const listFeatureFlagsQuery = paginationSchema.partial();\n\n/** List overrides for a tenant */\nexport const listFlagOverridesQuery = z.object({\n organizationId: z.string().min(1).optional(),\n tenantId: z.string().min(1).optional(),\n})\n .refine((data) => !!(data.organizationId ?? data.tenantId), {\n message: 'organizationId is required',\n path: ['organizationId'],\n })\n .transform((data) => ({\n organizationId: data.organizationId ?? data.tenantId!,\n }));\n\n// ============================================================\n// Mutation Schemas\n// ============================================================\n\n/** Update feature flag mutation (id for identification + partial fields) */\nexport const updateFeatureFlagMutation = featureFlagSchema\n .omit({\n id: true,\n createdAt: true,\n updatedAt: true,\n })\n .partial()\n .extend({\n id: z.string(), // Required for identification\n });\n\n/** Delete feature flag mutation */\nexport const deleteFeatureFlagMutation = z.object({\n id: z.string().uuid(),\n});\n\n/** Set flag override mutation */\nexport const setFlagOverrideMutation = z.object({\n flagKey: z.string(),\n organizationId: z.string().optional(),\n tenantId: z.string().optional(),\n enabled: z.boolean(),\n rolloutPercentage: z.number().min(0).max(100).optional(),\n conditions: z.array(flagConditionSchema).optional(),\n}).and(organizationInputSchema)\n .transform((data) => ({\n flagKey: data.flagKey,\n organizationId: data.organizationId,\n enabled: data.enabled,\n rolloutPercentage: data.rolloutPercentage,\n conditions: data.conditions,\n }));\n\n/** Remove flag override mutation */\nexport const removeFlagOverrideMutation = z.object({\n flagKey: z.string(),\n organizationId: z.string().optional(),\n tenantId: z.string().optional(),\n}).and(organizationInputSchema)\n .transform((data) => ({\n flagKey: data.flagKey,\n organizationId: data.organizationId,\n }));\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type FeatureFlag = typeof featureFlags.$inferSelect;\nexport type InsertFeatureFlag = typeof featureFlags.$inferInsert;\nexport type FeatureFlagOverride = typeof featureFlagOverrides.$inferSelect;\nexport type InsertFeatureFlagOverride = typeof featureFlagOverrides.$inferInsert;\n\n/**\n * Feature Flag Evaluation Context\n */\nexport interface FlagEvaluationContext {\n organizationId: string;\n userId: string;\n userRole?: string | undefined;\n tenantPlan?: string | undefined;\n [key: string]: unknown;\n}\n\n/**\n * Feature Flag Check Result\n */\nexport interface FlagCheckResult {\n enabled: boolean;\n source: 'global' | 'override';\n evaluatedConditions?: boolean;\n rolloutIncluded?: boolean;\n}\n","/**\n * Media Database Schema\n *\n * Unified table for content assets (images, videos, documents).\n * Replaces the separate `files` + `assets` tables.\n * Variants are stored as self-referencing rows via `parent_id`.\n *\n * System files (exports, imports, temp) do NOT belong here.\n */\nimport {\n pgTable,\n text,\n timestamp,\n boolean,\n bigint,\n integer,\n jsonb,\n index,\n uniqueIndex,\n check,\n type AnyPgColumn,\n} from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\nimport { createInsertSchema, createSelectSchema } from 'drizzle-orm/zod';\nimport { z } from 'zod';\nimport { organization } from './auth';\n\n// ============================================================\n// Types\n// ============================================================\n\nexport type StorageProviderType = 'local' | 'minio' | string;\n\n// ============================================================\n// Media Table\n// ============================================================\n\nexport const media = pgTable(\n 'media',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n // Self-reference: variants point to their original media\n parentId: text('parent_id').references((): AnyPgColumn => media.id, { onDelete: 'cascade' }),\n variantName: text('variant_name'),\n\n // File information\n filename: text('filename').notNull(),\n mimeType: text('mime_type').notNull(),\n size: bigint('size', { mode: 'number' }).notNull().default(0),\n\n // Storage information\n storageProvider: text('storage_provider').notNull().$type<StorageProviderType>(),\n storageKey: text('storage_key').notNull(),\n storageBucket: text('storage_bucket'),\n\n // Public access\n publicUrl: text('public_url'),\n isPublic: boolean('is_public').notNull().default(false),\n\n // Integrity\n checksum: text('checksum'),\n\n // Image-specific (null for non-image media)\n width: integer('width'),\n height: integer('height'),\n format: text('format'),\n\n // CMS semantics\n alt: text('alt'),\n title: text('title'),\n tags: text('tags').array().default([]),\n folderPath: text('folder_path'),\n\n // Extensible metadata\n metadata: jsonb('metadata').$type<Record<string, unknown>>().default({}),\n\n // Audit\n createdBy: text('created_by').notNull(),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at')\n .notNull()\n .defaultNow()\n .$onUpdate(() => new Date()),\n deletedAt: timestamp('deleted_at'),\n },\n (table) => [\n // Storage key uniqueness per tenant\n uniqueIndex('media_storage_unique').on(\n table.organizationId,\n table.storageProvider,\n table.storageKey,\n ),\n // Variant name uniqueness per parent\n uniqueIndex('media_parent_variant_unique')\n .on(table.parentId, table.variantName)\n .where(sql`${table.parentId} IS NOT NULL`),\n // Prevent self-referencing\n check('media_no_self_ref', sql`${table.parentId} IS DISTINCT FROM ${table.id}`),\n // Query indexes\n index('idx_media_org_folder')\n .on(table.organizationId, table.folderPath)\n .where(sql`${table.deletedAt} IS NULL`),\n index('idx_media_org_mime')\n .on(table.organizationId, table.mimeType)\n .where(sql`${table.deletedAt} IS NULL`),\n index('idx_media_parent')\n .on(table.parentId)\n .where(sql`${table.parentId} IS NOT NULL`),\n index('idx_media_tags')\n .using('gin', table.tags)\n .where(sql`${table.deletedAt} IS NULL`),\n index('idx_media_org_created')\n .on(table.organizationId, table.createdAt)\n .where(sql`${table.deletedAt} IS NULL`),\n index('idx_media_deleted')\n .on(table.deletedAt)\n .where(sql`${table.deletedAt} IS NOT NULL`),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const mediaInsertSchema = createInsertSchema(media);\nexport const mediaSelectSchema = createSelectSchema(media);\n\nexport const importMediaFromUrlMutation = z.object({\n url: z.string().trim().url().max(2048),\n providerId: z.string().trim().min(1).max(100).optional(),\n});\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type Media = typeof media.$inferSelect;\nexport type InsertMedia = typeof media.$inferInsert;\n/** @alias Media - backward compatibility for code referencing the old `files` table */\nexport type File = Media;\n","/**\n * Web Design Database Schema\n *\n * Stores tenant-scoped public web page design documents. The document payload is\n * the Designable/Formily transformer output; platform metadata lives beside it.\n */\nimport {\n boolean,\n index,\n jsonb,\n pgTable,\n text,\n timestamp,\n uniqueIndex,\n varchar,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema, createSelectSchema } from 'drizzle-orm/zod';\nimport { z } from 'zod';\nimport { organization } from './auth';\n\nexport const WEB_PAGE_STATUSES = ['draft', 'published', 'archived'] as const;\nexport type WebPageStatus = (typeof WEB_PAGE_STATUSES)[number];\nexport const WEB_DOMAIN_STATUSES = ['pending', 'verified', 'active', 'disabled'] as const;\nexport type WebDomainStatus = (typeof WEB_DOMAIN_STATUSES)[number];\nexport const WEB_DOMAIN_CERTIFICATE_STATUSES = [\n 'not_requested',\n 'requested',\n 'provisioning',\n 'active',\n 'failed',\n] as const;\nexport type WebDomainCertificateStatus = (typeof WEB_DOMAIN_CERTIFICATE_STATUSES)[number];\n\nexport const WEB_PAGE_RESERVED_PATHS = [\n '/favicon.ico',\n '/robots.txt',\n '/sitemap.xml',\n '/manifest.json',\n] as const;\n\nexport const WEB_PAGE_RESERVED_PREFIXES = [\n '/_next',\n '/api',\n '/assets',\n '/plugins',\n '/static',\n '/trpc',\n] as const;\n\nexport type WebDesignDocument = Record<string, unknown>;\n\nfunction normalizeWebPagePath(value: string): string {\n const normalized = value\n .trim()\n .replace(/^\\/?/, '/')\n .replace(/\\/+/g, '/')\n .replace(/\\/$/, '')\n .toLowerCase();\n\n return normalized || '/';\n}\n\nexport const webPages = pgTable(\n 'web_pages',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n title: text('title').notNull(),\n path: text('path').notNull(),\n status: varchar('status', { length: 24, enum: WEB_PAGE_STATUSES })\n .notNull()\n .default('draft'),\n\n routeId: text('route_id'),\n templateId: text('template_id'),\n seoTitle: text('seo_title'),\n seoDescription: text('seo_description'),\n\n document: jsonb('document')\n .notNull()\n .default({})\n .$type<WebDesignDocument>(),\n publishedDocument: jsonb('published_document').$type<WebDesignDocument | null>(),\n publishedAt: timestamp('published_at'),\n\n createdBy: text('created_by'),\n updatedBy: text('updated_by'),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at')\n .notNull()\n .defaultNow()\n .$onUpdate(() => new Date()),\n },\n (table) => [\n uniqueIndex('web_pages_org_path_uidx').on(table.organizationId, table.path),\n index('web_pages_org_status_idx').on(table.organizationId, table.status),\n index('web_pages_route_idx').on(table.routeId),\n ],\n);\n\nexport const webDomains = pgTable(\n 'web_domains',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n hostname: text('hostname').notNull(),\n status: varchar('status', { length: 24, enum: WEB_DOMAIN_STATUSES })\n .notNull()\n .default('pending'),\n isPrimary: boolean('is_primary').notNull().default(false),\n verificationToken: text('verification_token'),\n certificateStatus: varchar('certificate_status', { length: 24, enum: WEB_DOMAIN_CERTIFICATE_STATUSES })\n .notNull()\n .default('not_requested'),\n certificateRequestedAt: timestamp('certificate_requested_at'),\n certificateIssuedAt: timestamp('certificate_issued_at'),\n certificateError: text('certificate_error'),\n verificationDetails: jsonb('verification_details').$type<Record<string, unknown> | null>(),\n lastCheckedAt: timestamp('last_checked_at'),\n verifiedAt: timestamp('verified_at'),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at')\n .notNull()\n .defaultNow()\n .$onUpdate(() => new Date()),\n },\n (table) => [\n uniqueIndex('web_domains_hostname_uidx').on(table.hostname),\n index('web_domains_org_idx').on(table.organizationId),\n index('web_domains_status_idx').on(table.status),\n ],\n);\n\nexport const webPageSchema = createInsertSchema(webPages);\nexport const webPageSelectSchema = createSelectSchema(webPages);\nexport const webDomainSchema = createInsertSchema(webDomains);\nexport const webDomainSelectSchema = createSelectSchema(webDomains);\n\nfunction normalizeWebDomainHostname(value: string): string {\n return value.trim().toLowerCase().replace(/\\.$/, '');\n}\n\nfunction isValidWebDomainHostname(value: string): boolean {\n if (value.length > 253) return false;\n if (value.includes('/') || value.includes('\\\\') || value.includes(':')) return false;\n if (value === 'localhost' || value.endsWith('.localhost')) return false;\n if (/^\\d{1,3}(\\.\\d{1,3}){3}$/.test(value)) return false;\n\n const labels = value.split('.');\n if (labels.length < 2) return false;\n\n return labels.every((label) => (\n label.length > 0\n && label.length <= 63\n && /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/.test(label)\n ));\n}\n\nexport const webDomainHostnameSchema = z\n .string()\n .trim()\n .min(1, 'Hostname is required')\n .max(253, 'Hostname must be 253 characters or less')\n .transform(normalizeWebDomainHostname)\n .refine((hostname) => !/^[a-z][a-z\\d+\\-.]*:\\/\\//i.test(hostname), {\n message: 'Hostname must not include a protocol',\n })\n .refine(isValidWebDomainHostname, {\n message: 'Hostname must be a valid public domain name',\n });\n\nexport const webPagePathSchema = z\n .string()\n .trim()\n .min(1, 'Path is required')\n .max(200, 'Path must be 200 characters or less')\n .transform(normalizeWebPagePath)\n .refine((path) => !WEB_PAGE_RESERVED_PATHS.includes(path as (typeof WEB_PAGE_RESERVED_PATHS)[number]), {\n message: 'Path is reserved by the web host',\n })\n .refine((path) => !WEB_PAGE_RESERVED_PREFIXES.some((prefix) => path === prefix || path.startsWith(`${prefix}/`)), {\n message: 'Path uses a reserved system prefix',\n })\n .refine((path) => path === '/' || /^\\/[a-z0-9][a-z0-9/_-]*$/.test(path), {\n message: 'Path must use lowercase letters, numbers, dashes, underscores, and slashes',\n })\n .refine((path) => !path.split('/').some((segment) => segment === '.' || segment === '..'), {\n message: 'Path cannot contain dot segments',\n });\nexport const webDesignDocumentSchema = z.record(z.string(), z.unknown());\n\nexport const createWebPageMutation = webPageSchema\n .pick({\n title: true,\n path: true,\n status: true,\n routeId: true,\n templateId: true,\n seoTitle: true,\n seoDescription: true,\n })\n .extend({\n path: webPagePathSchema,\n });\n\nexport const updateWebPageMutation = createWebPageMutation.partial();\n\nexport const getWebPageDocumentQuery = webPageSelectSchema.pick({\n id: true,\n});\n\nexport const saveWebPageDocumentMutation = getWebPageDocumentQuery.extend({\n document: webDesignDocumentSchema,\n});\n\nexport const publishWebPageMutation = getWebPageDocumentQuery;\n\nexport const createWebDomainMutation = webDomainSchema\n .pick({\n hostname: true,\n })\n .extend({\n hostname: webDomainHostnameSchema,\n });\n\nexport const getWebDomainQuery = webDomainSelectSchema.pick({\n id: true,\n});\n\nexport const verifyWebDomainMutation = getWebDomainQuery;\nexport const requestWebDomainCertificateMutation = getWebDomainQuery;\n\nexport const updateWebDomainCertificateStatusMutation = getWebDomainQuery.extend({\n status: z.enum(WEB_DOMAIN_CERTIFICATE_STATUSES),\n error: z.string().trim().max(1000).optional(),\n});\n\nexport const setPrimaryWebDomainMutation = getWebDomainQuery;\nexport const disableWebDomainMutation = getWebDomainQuery;\nexport const deleteWebDomainMutation = getWebDomainQuery;\n\nexport type WebPage = typeof webPages.$inferSelect;\nexport type InsertWebPage = typeof webPages.$inferInsert;\nexport type WebDomain = typeof webDomains.$inferSelect;\nexport type InsertWebDomain = typeof webDomains.$inferInsert;\n","/**\n * Tenant Site Presentation Schema\n *\n * Core-owned tenant routing/presentation state. Theme code remains a normal\n * plugin; these tables persist the tenant's draft/history and the single\n * active published revision pointer even when the plugin cannot load.\n */\nimport { sql } from 'drizzle-orm';\nimport {\n check,\n foreignKey,\n index,\n integer,\n jsonb,\n pgTable,\n text,\n timestamp,\n uniqueIndex,\n varchar,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema, createSelectSchema } from 'drizzle-orm/zod';\nimport { z } from 'zod';\nimport { organization } from './auth';\nimport { paginationSchema } from './common';\n\nexport const WEB_THEME_REVISION_STATUSES = [\n 'draft',\n 'published',\n 'archived',\n 'invalid',\n] as const;\nexport type WebThemeRevisionStatus = (typeof WEB_THEME_REVISION_STATUSES)[number];\n\nexport const WEB_THEME_SELECTION_STATUSES = ['active', 'safe_mode'] as const;\nexport type WebThemeSelectionStatus = (typeof WEB_THEME_SELECTION_STATUSES)[number];\n\nexport type WebThemeHomeTarget =\n | { type: 'theme-route'; routeId: string }\n | { type: 'plugin-route'; pluginId: string; routeId: string }\n | { type: 'designer-page'; pageId: string }\n | { type: 'default' };\n\nexport type WebThemeJsonObject = Record<string, unknown>;\nexport type WebThemeAdapterSelection = {\n ownerPluginId: string;\n surfaceId: string;\n source: 'theme' | 'plugin' | 'owner';\n providerPluginId?: string | undefined;\n};\nexport type WebThemeAdapterConfig = {\n selections?: WebThemeAdapterSelection[] | undefined;\n providers?: Record<string, WebThemeJsonObject> | undefined;\n};\nexport type WebThemeCompatibilitySnapshot = {\n status: 'compatible' | 'degraded' | 'incompatible';\n generation: number;\n checkedAt: string;\n results: unknown[];\n};\n\nexport const webThemeRevisions = pgTable(\n 'web_theme_revisions',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n pluginId: varchar('plugin_id', { length: 160 }).notNull(),\n pluginVersion: varchar('plugin_version', { length: 80 }).notNull(),\n revision: integer('revision').notNull(),\n status: varchar('status', { length: 24, enum: WEB_THEME_REVISION_STATUSES })\n .notNull()\n .$type<WebThemeRevisionStatus>()\n .default('draft'),\n version: integer('version').notNull().default(1),\n homeTarget: jsonb('home_target')\n .notNull()\n .$type<WebThemeHomeTarget>()\n .default({ type: 'default' }),\n settings: jsonb('settings').notNull().$type<WebThemeJsonObject>().default({}),\n tokenOverrides: jsonb('token_overrides').notNull().$type<WebThemeJsonObject>().default({}),\n adapterConfig: jsonb('adapter_config').notNull().$type<WebThemeAdapterConfig>().default({}),\n embedConfig: jsonb('embed_config').notNull().$type<WebThemeJsonObject>().default({}),\n schemaVersions: jsonb('schema_versions')\n .notNull()\n .$type<Record<string, number>>()\n .default({}),\n compatibilitySnapshot: jsonb('compatibility_snapshot')\n .$type<WebThemeCompatibilitySnapshot | null>(),\n createdBy: text('created_by').notNull(),\n updatedBy: text('updated_by').notNull(),\n publishedBy: text('published_by'),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at')\n .notNull()\n .defaultNow()\n .$onUpdate(() => new Date()),\n publishedAt: timestamp('published_at'),\n },\n (table) => [\n uniqueIndex('web_theme_revisions_org_plugin_revision_uidx').on(\n table.organizationId,\n table.pluginId,\n table.revision,\n ),\n uniqueIndex('web_theme_revisions_org_id_uidx').on(table.organizationId, table.id),\n uniqueIndex('web_theme_revisions_one_draft_uidx')\n .on(table.organizationId, table.pluginId)\n .where(sql`${table.status} = 'draft'`),\n index('web_theme_revisions_org_plugin_history_idx').on(\n table.organizationId,\n table.pluginId,\n table.createdAt,\n ),\n index('web_theme_revisions_org_status_idx').on(table.organizationId, table.status),\n ],\n);\n\nexport const webThemeSelections = pgTable(\n 'web_theme_selections',\n {\n organizationId: text('organization_id')\n .primaryKey()\n .references(() => organization.id, { onDelete: 'cascade' }),\n activeRevisionId: text('active_revision_id'),\n previousRevisionId: text('previous_revision_id'),\n lastKnownCompatibleRevisionId: text('last_known_compatible_revision_id'),\n status: varchar('status', { length: 24, enum: WEB_THEME_SELECTION_STATUSES })\n .notNull()\n .$type<WebThemeSelectionStatus>()\n .default('active'),\n version: integer('version').notNull().default(1),\n diagnostics: jsonb('diagnostics').notNull().$type<unknown[]>().default([]),\n safeModeReason: text('safe_mode_reason'),\n safeModeEnteredAt: timestamp('safe_mode_entered_at'),\n updatedBy: text('updated_by').notNull(),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at')\n .notNull()\n .defaultNow()\n .$onUpdate(() => new Date()),\n },\n (table) => [\n foreignKey({\n name: 'web_theme_selections_active_revision_fk',\n columns: [table.organizationId, table.activeRevisionId],\n foreignColumns: [webThemeRevisions.organizationId, webThemeRevisions.id],\n }).onDelete('restrict'),\n foreignKey({\n name: 'web_theme_selections_previous_revision_fk',\n columns: [table.organizationId, table.previousRevisionId],\n foreignColumns: [webThemeRevisions.organizationId, webThemeRevisions.id],\n }).onDelete('restrict'),\n foreignKey({\n name: 'web_theme_selections_last_compatible_revision_fk',\n columns: [table.organizationId, table.lastKnownCompatibleRevisionId],\n foreignColumns: [webThemeRevisions.organizationId, webThemeRevisions.id],\n }).onDelete('restrict'),\n check(\n 'web_theme_selections_active_previous_distinct_chk',\n sql`${table.activeRevisionId} IS NULL OR ${table.previousRevisionId} IS NULL OR ${table.activeRevisionId} <> ${table.previousRevisionId}`,\n ),\n index('web_theme_selections_active_revision_idx').on(table.activeRevisionId),\n index('web_theme_selections_status_idx').on(table.status),\n ],\n);\n\nconst webThemePluginIdSchema = z\n .string()\n .min(3)\n .max(160)\n .regex(/^[a-z][a-z0-9-]*(\\.[a-z][a-z0-9-]*)+$/);\n\nexport const webThemeHomeTargetSchema: z.ZodType<WebThemeHomeTarget> = z.discriminatedUnion('type', [\n z.object({ type: z.literal('theme-route'), routeId: z.string().min(1).max(160) }),\n z.object({\n type: z.literal('plugin-route'),\n pluginId: webThemePluginIdSchema,\n routeId: z.string().min(1).max(160),\n }),\n z.object({ type: z.literal('designer-page'), pageId: z.string().min(1).max(160) }),\n z.object({ type: z.literal('default') }),\n]);\n\nconst webThemeJsonObjectSchema = z.record(z.string(), z.json());\nexport const webThemeAdapterSelectionSchema = z.object({\n ownerPluginId: webThemePluginIdSchema,\n surfaceId: z.string().min(1).max(160).regex(/^[a-z0-9][a-z0-9._-]*$/),\n source: z.enum(['theme', 'plugin', 'owner']),\n providerPluginId: webThemePluginIdSchema.optional(),\n}).superRefine((selection, ctx) => {\n if (selection.source === 'plugin' && !selection.providerPluginId) {\n ctx.addIssue({\n code: 'custom',\n path: ['providerPluginId'],\n message: 'plugin adapter selections require providerPluginId',\n });\n }\n if (selection.source !== 'plugin' && selection.providerPluginId) {\n ctx.addIssue({\n code: 'custom',\n path: ['providerPluginId'],\n message: 'providerPluginId is only allowed for plugin adapter selections',\n });\n }\n});\n\nexport const webThemeAdapterConfigSchema: z.ZodType<WebThemeAdapterConfig> = z.object({\n selections: z.array(webThemeAdapterSelectionSchema).optional(),\n providers: z.record(webThemePluginIdSchema, webThemeJsonObjectSchema).optional(),\n}).superRefine((config, ctx) => {\n const targets = new Set<string>();\n for (const [index, selection] of (config.selections ?? []).entries()) {\n const key = `${selection.ownerPluginId}:${selection.surfaceId}`;\n if (targets.has(key)) {\n ctx.addIssue({\n code: 'custom',\n path: ['selections', index, 'surfaceId'],\n message: `duplicate adapter selection target: ${key}`,\n });\n }\n targets.add(key);\n }\n});\n\nexport const webThemeRevisionSchema = createInsertSchema(webThemeRevisions, {\n homeTarget: () => webThemeHomeTargetSchema,\n settings: () => webThemeJsonObjectSchema,\n tokenOverrides: () => webThemeJsonObjectSchema,\n adapterConfig: () => webThemeAdapterConfigSchema,\n embedConfig: () => webThemeJsonObjectSchema,\n schemaVersions: () => z.record(z.string(), z.number().int().nonnegative()),\n});\nexport const webThemeRevisionSelectSchema = createSelectSchema(webThemeRevisions);\nexport const webThemeSelectionSchema = createInsertSchema(webThemeSelections);\nexport const webThemeSelectionSelectSchema = createSelectSchema(webThemeSelections);\n\nexport const getWebThemeQuery = z.object({ pluginId: webThemePluginIdSchema });\nexport const setWebThemeEnabledMutation = getWebThemeQuery.extend({ enabled: z.boolean() });\nexport const getWebThemeRevisionQuery = webThemeRevisionSelectSchema.pick({ id: true });\nexport const listWebThemeRevisionsQuery = getWebThemeQuery.merge(paginationSchema);\nexport const saveWebThemeDraftMutation = getWebThemeQuery.extend({\n expectedVersion: z.number().int().positive().optional(),\n homeTarget: webThemeHomeTargetSchema.optional(),\n settings: webThemeJsonObjectSchema.optional(),\n tokenOverrides: webThemeJsonObjectSchema.optional(),\n adapterConfig: webThemeAdapterConfigSchema.optional(),\n embedConfig: webThemeJsonObjectSchema.optional(),\n});\nexport const activateWebThemeMutation = getWebThemeQuery.extend({\n expectedSelectionVersion: z.number().int().positive().optional(),\n});\nexport const activateWebThemeRevisionMutation = getWebThemeRevisionQuery.extend({\n expectedSelectionVersion: z.number().int().positive().optional(),\n});\nexport const publishWebThemeDraftMutation = getWebThemeRevisionQuery.extend({\n expectedDraftVersion: z.number().int().positive(),\n expectedSelectionVersion: z.number().int().positive().optional(),\n});\nexport const rollbackWebThemeRevisionMutation = getWebThemeRevisionQuery.extend({\n expectedSelectionVersion: z.number().int().positive(),\n});\nexport const issueWebThemePreviewMutation = getWebThemeRevisionQuery.extend({\n host: z.string().trim().min(1).max(253),\n pageId: z.string().min(1).max(160).optional(),\n expiresInSeconds: z.number().int().min(30).max(900).optional(),\n});\nexport const recoverWebThemeMutation = z.object({\n expectedSelectionVersion: z.number().int().positive(),\n revisionId: z.string().min(1).optional(),\n});\n\nexport type WebThemeRevision = typeof webThemeRevisions.$inferSelect;\nexport type InsertWebThemeRevision = typeof webThemeRevisions.$inferInsert;\nexport type WebThemeSelection = typeof webThemeSelections.$inferSelect;\nexport type InsertWebThemeSelection = typeof webThemeSelections.$inferInsert;\n","/**\n * Notifications Database Schema\n *\n * Drizzle ORM table definitions for notification management.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n timestamp,\n jsonb,\n boolean,\n integer,\n index,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { user, organization } from './auth';\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Notification priority levels\n */\nexport type NotificationPriority = 'low' | 'normal' | 'high' | 'urgent';\n\n/**\n * Legacy Notification type (kept for backward compatibility)\n * @deprecated Use NotificationTypeEnum instead\n */\nexport type NotificationType = 'info' | 'success' | 'warning' | 'error';\n\n/**\n * Notification Type Enum - Strong typing for notification categories\n * Following Actor-Action-Object pattern\n */\nexport const NotificationTypeEnum = {\n // System / SaaS\n SYSTEM_ALERT: 'system_alert',\n SYSTEM_WARNING: 'system_warning',\n TASK_ASSIGNED: 'task_assigned',\n TASK_COMPLETED: 'task_completed',\n EXPORT_READY: 'export_ready',\n\n // Collaboration\n COMMENT_ADDED: 'comment_added',\n COMMENT_REPLIED: 'comment_replied',\n MENTIONED: 'mentioned',\n\n // Social (reserved for future)\n POST_LIKED: 'post_liked',\n POST_COMMENTED: 'post_commented',\n USER_FOLLOWED: 'user_followed',\n} as const;\n\nexport type NotificationTypeEnumValue =\n (typeof NotificationTypeEnum)[keyof typeof NotificationTypeEnum];\n\n/**\n * Notification Source - who triggered the notification\n */\nexport type NotificationSource = 'system' | 'plugin' | 'user';\n\n/**\n * Notification Category - determines retention and view strategy\n */\nexport type NotificationCategory = 'system' | 'collaboration' | 'social';\n\n/**\n * Visual Priority - determines UI styling\n */\nexport type VisualPriority = 'high' | 'medium' | 'low';\n\n/**\n * Aggregation Strategy for plugin notifications\n */\nexport type AggregationStrategy = 'none' | 'by_target' | 'by_actor' | 'by_type';\n\n/**\n * Actor information for notification\n */\nexport interface NotificationActor {\n id: string;\n type: 'user' | 'system' | 'plugin';\n name: string;\n avatarUrl?: string;\n}\n\n/**\n * Target object for notification\n */\nexport interface NotificationTarget {\n type: string;\n id: string;\n url?: string | undefined;\n previewImage?: string | undefined;\n}\n\n/**\n * Channel decision trace for debugging\n */\nexport interface ChannelDecisionTrace {\n channel: string;\n included: boolean;\n reason: string;\n}\n\n// ============================================================\n// Notifications Table\n// ============================================================\n\n/**\n * Notifications Table\n *\n * Stores in-app notifications for users.\n * Supports unified notification contract for SaaS + Social scenarios.\n */\nexport const notifications = pgTable(\n 'notifications',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // FK to user table\n userId: text('user_id')\n .notNull()\n .references(() => user.id, { onDelete: 'cascade' }),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n // Actor/Entity for better UI rendering\n actorId: text('actor_id'),\n entityId: text('entity_id'),\n entityType: text('entity_type'),\n\n // Template reference\n templateKey: text('template_key'),\n templateVariables: jsonb('template_variables').$type<Record<string, unknown>>(),\n\n // Content (rendered)\n type: text('type').notNull().$type<NotificationType>(),\n title: text('title').notNull(),\n message: text('message').notNull(),\n link: text('link'),\n\n // Status\n read: boolean('read').notNull().default(false),\n archived: boolean('archived').notNull().default(false),\n\n // Channel tracking\n channelsSent: jsonb('channels_sent').$type<string[]>(),\n channelsFailed: jsonb('channels_failed').$type<string[]>(),\n emailSent: boolean('email_sent').notNull().default(false),\n emailSentAt: timestamp('email_sent_at'),\n\n // Grouping/Bundling support\n groupKey: text('group_key'),\n groupCount: integer('group_count').notNull().default(1),\n\n // Idempotency\n idempotencyKey: text('idempotency_key').unique(),\n\n // Source tracking\n sourcePluginId: text('source_plugin_id'),\n\n // Priority\n priority: text('priority').notNull().default('normal').$type<NotificationPriority>(),\n\n // Source - who triggered the notification (system/plugin/user)\n source: text('source').notNull().default('system').$type<NotificationSource>(),\n\n // Category - determines retention policy and view strategy\n category: text('category').notNull().default('system').$type<NotificationCategory>(),\n\n // Latest Actors - for aggregation display (\"Alice and 4 others...\")\n latestActors: jsonb('latest_actors').$type<NotificationActor[]>().default([]),\n\n // Pinned - for system alerts that need to stay at top\n pinned: boolean('pinned').notNull().default(false),\n\n // Visual Priority - for UI styling\n visualPriority: text('visual_priority').notNull().default('medium').$type<VisualPriority>(),\n\n // Actor info - structured actor data for rendering\n actor: jsonb('actor').$type<NotificationActor>(),\n\n // Target info - what the notification is about\n target: jsonb('target').$type<NotificationTarget>(),\n\n // Aggregation Strategy - how to group notifications\n aggregationStrategy: text('aggregation_strategy')\n .notNull()\n .default('none')\n .$type<AggregationStrategy>(),\n\n // Metadata includes decisionTrace for debugging\n metadata: jsonb('metadata').$type<{\n decisionTrace?: ChannelDecisionTrace[];\n [key: string]: unknown;\n }>(),\n\n // Timestamps\n createdAt: timestamp('created_at').notNull().defaultNow(),\n expiresAt: timestamp('expires_at'),\n },\n (table) => [\n index('idx_notifications_user_read').on(table.userId, table.read),\n index('idx_notifications_template').on(table.templateKey),\n index('idx_notifications_group').on(table.groupKey),\n index('idx_notifications_expires').on(table.expiresAt),\n index('idx_notifications_tenant_user').on(table.organizationId, table.userId),\n index('idx_notifications_category').on(table.category),\n index('idx_notifications_source').on(table.source),\n index('idx_notifications_pinned').on(table.pinned),\n index('idx_notifications_cleanup').on(table.category, table.read, table.createdAt),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const notificationSchema = createInsertSchema(notifications);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type Notification = typeof notifications.$inferSelect;\nexport type InsertNotification = typeof notifications.$inferInsert;\n\n/**\n * Grouped notification response for API\n */\nexport interface GroupedNotification {\n id: string;\n type: NotificationType | NotificationTypeEnumValue;\n actor: NotificationActor;\n title: string;\n body?: string;\n target: NotificationTarget;\n groupInfo?: {\n key: string;\n count: number;\n latestActors: NotificationActor[];\n };\n read: boolean;\n pinned: boolean;\n visualPriority: VisualPriority;\n createdAt: Date;\n}\n","/**\n * Notification Templates Database Schema\n *\n * Drizzle ORM table definitions for notification templates.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n timestamp,\n jsonb,\n boolean,\n integer,\n index,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport type { NotificationPriority } from './notifications';\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * i18n text structure\n */\nexport type I18nText = Record<string, string>;\n\n/**\n * Template category\n */\nexport type TemplateCategory = 'system' | 'plugin' | 'custom';\n\n// ============================================================\n// Notification Templates Table\n// ============================================================\n\n/**\n * Notification Templates Table\n *\n * Stores configurable notification templates with i18n support.\n */\nexport const notificationTemplates = pgTable(\n 'notification_templates',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // Unique key (e.g., 'comment.new', 'order.shipped')\n key: text('key').notNull().unique(),\n\n // Display name\n name: text('name').notNull(),\n description: text('description'),\n\n // Category\n category: text('category').notNull().$type<TemplateCategory>(),\n\n // i18n content\n title: jsonb('title').notNull().$type<I18nText>(),\n message: jsonb('message').notNull().$type<I18nText>(),\n\n // Variables that can be interpolated\n variables: jsonb('variables').$type<string[]>(),\n\n // Default channels for this template\n defaultChannels: jsonb('default_channels')\n .notNull()\n .default(['in-app'])\n .$type<string[]>(),\n\n // Priority\n priority: text('priority').notNull().default('normal').$type<NotificationPriority>(),\n\n // Plugin reference (if registered by plugin)\n pluginId: text('plugin_id'),\n\n // Template evolution\n deprecated: boolean('deprecated').notNull().default(false),\n version: integer('version').notNull().default(1),\n\n // Timestamps\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n },\n (table) => [\n index('idx_templates_plugin').on(table.pluginId),\n index('idx_templates_category').on(table.category),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const notificationTemplateSchema = createInsertSchema(notificationTemplates);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type NotificationTemplate = typeof notificationTemplates.$inferSelect;\nexport type InsertNotificationTemplate = typeof notificationTemplates.$inferInsert;\n","/**\n * Notification Channels Database Schema\n *\n * Drizzle ORM table definitions for notification channel management.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n timestamp,\n jsonb,\n boolean,\n index,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport type { I18nText } from './notification-templates';\n\n// ============================================================\n// Notification Channels Table\n// ============================================================\n\n/**\n * Notification Channels Table\n *\n * Stores available notification channels (plugin-registered).\n */\nexport const notificationChannels = pgTable(\n 'notification_channels',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // Unique key (namespaced)\n // Format: 'in-app' (Core) or 'plugin:{pluginId}:{channel}'\n key: text('key').notNull().unique(),\n\n // Display name (i18n)\n name: jsonb('name').notNull().$type<I18nText>(),\n\n // Description (i18n)\n description: jsonb('description').$type<I18nText>(),\n\n // Icon name\n icon: text('icon'),\n\n // Plugin reference\n pluginId: text('plugin_id').notNull(),\n\n // Is this channel currently enabled\n enabled: boolean('enabled').notNull().default(true),\n\n // User configuration schema (Zod schema as JSON)\n configSchema: jsonb('config_schema'),\n\n // Timestamps\n createdAt: timestamp('created_at').notNull().defaultNow(),\n },\n (table) => [\n index('idx_channels_plugin').on(table.pluginId),\n index('idx_channels_enabled').on(table.enabled),\n ]\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const notificationChannelSchema = createInsertSchema(notificationChannels);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type NotificationChannel = typeof notificationChannels.$inferSelect;\nexport type InsertNotificationChannel = typeof notificationChannels.$inferInsert;\n","/**\n * Notification Preferences Database Schema\n *\n * Drizzle ORM table definitions for user notification preferences.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n timestamp,\n jsonb,\n uniqueIndex,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { user, organization } from './auth';\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Quiet hours configuration\n */\nexport interface QuietHoursConfig {\n enabled: boolean;\n start: string; // '22:00'\n end: string; // '08:00'\n timezone: string;\n}\n\n/**\n * Email frequency options\n */\nexport type EmailFrequency = 'instant' | 'hourly' | 'daily';\n\n// ============================================================\n// Notification Preferences Table\n// ============================================================\n\n/**\n * Notification Preferences Table\n *\n * Stores user notification preferences per tenant.\n */\nexport const notificationPreferences = pgTable(\n 'notification_preferences',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // FK to user table\n userId: text('user_id')\n .notNull()\n .references(() => user.id, { onDelete: 'cascade' }),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n // Enabled channels (global)\n enabledChannels: jsonb('enabled_channels')\n .notNull()\n .default(['in-app'])\n .$type<string[]>(),\n\n // Per-template channel overrides\n // e.g., { 'order.urgent': ['in-app', 'email', 'sms'] }\n templateOverrides: jsonb('template_overrides').$type<\n Record<string, string[]>\n >(),\n\n // Quiet hours (do not disturb)\n quietHours: jsonb('quiet_hours').$type<QuietHoursConfig>(),\n\n // Email digest frequency\n emailFrequency: text('email_frequency')\n .notNull()\n .default('instant')\n .$type<EmailFrequency>(),\n\n // Timestamps\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n },\n (table) => [\n uniqueIndex('idx_preferences_user_tenant').on(\n table.userId,\n table.organizationId\n ),\n ]\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const notificationPreferenceSchema = createInsertSchema(notificationPreferences);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type NotificationPreference = typeof notificationPreferences.$inferSelect;\nexport type InsertNotificationPreference = typeof notificationPreferences.$inferInsert;\n","/**\n * Audit Logs Database Schema\n *\n * Drizzle ORM table definitions for audit logging.\n * These are the source of truth - Zod schemas are generated from these.\n *\n * IMPORTANT: This table is APPEND-ONLY. No UPDATE or DELETE operations allowed.\n */\nimport { pgTable, text, timestamp, jsonb, index } from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { organization } from './auth';\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Actor Type - who performed the action\n */\nexport type ActorType = 'user' | 'plugin' | 'system';\n\n/**\n * Audit Result - outcome of the action\n */\nexport type AuditResult = 'allow' | 'deny' | 'error';\n\n// ============================================================\n// Audit Logs Table\n// ============================================================\n\n/**\n * Audit Logs Table\n *\n * Records permission checks, sensitive operations.\n *\n * IMPORTANT: This table is APPEND-ONLY. No UPDATE or DELETE operations allowed.\n * Use archive() method to move old records to audit_logs_archive.\n */\nexport const auditLogs = pgTable(\n 'audit_logs',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // Actor\n actorType: text('actor_type').notNull().$type<ActorType>(),\n actorId: text('actor_id').notNull(),\n\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n // Action\n action: text('action').notNull(),\n resource: text('resource'),\n\n // Result\n result: text('result').notNull().$type<AuditResult>(),\n reason: text('reason'),\n\n // Metadata\n metadata: jsonb('metadata'),\n\n // Audit enhancement fields\n actorIp: text('actor_ip'),\n userAgent: text('user_agent'),\n traceId: text('trace_id'),\n\n createdAt: timestamp('created_at').notNull().defaultNow(),\n },\n (table) => [\n index('audit_logs_organization_idx').on(table.organizationId),\n index('audit_logs_actor_idx').on(table.actorType, table.actorId),\n index('audit_logs_action_idx').on(table.action),\n index('audit_logs_created_at_idx').on(table.createdAt),\n index('audit_logs_trace_idx').on(table.traceId),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const auditLogSchema = createInsertSchema(auditLogs);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type AuditLogEntry = typeof auditLogs.$inferSelect;\nexport type InsertAuditLogEntry = typeof auditLogs.$inferInsert;\n","/**\n * Audit Events Database Schema\n *\n * Drizzle ORM table definitions for generic entity change tracking.\n * These are the source of truth - Zod schemas are generated from these.\n *\n * IMPORTANT: This table is APPEND-ONLY. No UPDATE or DELETE operations allowed.\n */\nimport { pgTable, text, timestamp, jsonb, index } from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { organization } from './auth';\n\n// ============================================================\n// Types\n// ============================================================\n\nexport type AuditEventActorType = 'user' | 'system' | 'plugin' | 'api-token';\n\nexport interface AuditChanges {\n old?: unknown;\n new?: unknown;\n}\n\n/**\n * Audit Event Input Interface\n *\n * Used by AuditService.log() - actor context is auto-populated from AsyncLocalStorage\n */\nexport interface AuditEventInput {\n entityType: string;\n entityId?: string | undefined;\n organizationId?: string | undefined;\n action: string;\n changes?: AuditChanges;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Audit Query Filters\n */\nexport interface AuditQueryFilters {\n entityType?: string;\n entityId?: string;\n organizationId?: string;\n actorId?: string;\n action?: string;\n startTime?: Date;\n endTime?: Date;\n limit?: number;\n offset?: number;\n}\n\n// ============================================================\n// Audit Events Table\n// ============================================================\n\n/**\n * Audit Events Table - Generic Entity Change Tracking\n *\n * This is a platform-level audit table that tracks changes to any entity.\n * Used by Settings, Users, Roles, Feature Flags, and other modules.\n *\n * Different from audit_logs which is specifically for permission checks.\n */\nexport const auditEvents = pgTable(\n 'audit_events',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // Entity identification\n entityType: text('entity_type').notNull(), // 'setting', 'user', 'role', 'feature_flag', etc.\n entityId: text('entity_id'), // Entity ID (can be NULL for batch operations)\n\n // FK to organization table (nullable for global operations)\n organizationId: text('organization_id')\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n // Action\n action: text('action').notNull(), // 'create', 'update', 'delete', 'login', 'logout', etc.\n\n // Changes (flexible structure)\n changes: jsonb('changes').$type<AuditChanges>(), // { old: {...}, new: {...} } or custom structure\n metadata: jsonb('metadata').$type<Record<string, unknown>>(), // Extra context\n\n // Actor\n actorId: text('actor_id').notNull(),\n actorType: text('actor_type').notNull().$type<AuditEventActorType>().default('user'),\n actorIp: text('actor_ip'),\n userAgent: text('user_agent'),\n\n // Correlation & Tracing\n requestId: text('request_id'), // Request tracking ID\n sessionId: text('session_id'),\n traceId: text('trace_id'), // Distributed trace ID\n\n // Timestamp\n createdAt: timestamp('created_at').notNull().defaultNow(),\n },\n (table) => [\n // Index for entity queries\n index('audit_events_entity_idx').on(table.entityType, table.entityId),\n // Index for tenant queries\n index('audit_events_organization_idx').on(table.organizationId),\n // Index for actor queries\n index('audit_events_actor_idx').on(table.actorId),\n // Index for time-based queries\n index('audit_events_time_idx').on(table.createdAt),\n // Index for action queries\n index('audit_events_action_idx').on(table.entityType, table.action),\n // Index for trace queries\n index('audit_events_trace_idx').on(table.traceId),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const auditEventSchema = createInsertSchema(auditEvents);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type AuditEvent = typeof auditEvents.$inferSelect;\nexport type InsertAuditEvent = typeof auditEvents.$inferInsert;\n","/**\n * Audit Archive Database Schema\n *\n * Drizzle ORM table definitions for archived audit records.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport { pgTable, text, timestamp, jsonb, index } from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { organization } from './auth';\nimport type { AuditChanges } from './audit-events';\n\n// ============================================================\n// Types\n// ============================================================\n\nexport type ArchiveActorType = 'user' | 'plugin' | 'system';\n\n// ============================================================\n// Audit Events Archive Table\n// ============================================================\n\n/**\n * Audit Events Archive Table\n *\n * Same structure as audit_events, used for cold storage of old records.\n * Records are moved here by the archive() method after retention period.\n */\nexport const auditEventsArchive = pgTable(\n 'audit_events_archive',\n {\n id: text('id').primaryKey(),\n\n // Entity identification\n entityType: text('entity_type').notNull(),\n entityId: text('entity_id'),\n\n // FK to organization table (nullable for global operations)\n organizationId: text('organization_id')\n .references(() => organization.id, { onDelete: 'set null' }),\n\n // Action\n action: text('action').notNull(),\n\n // Changes\n changes: jsonb('changes').$type<AuditChanges>(),\n metadata: jsonb('metadata').$type<Record<string, unknown>>(),\n\n // Actor\n actorId: text('actor_id').notNull(),\n actorType: text('actor_type').notNull().$type<ArchiveActorType>().default('user'),\n actorIp: text('actor_ip'),\n userAgent: text('user_agent'),\n\n // Correlation & Tracing\n requestId: text('request_id'),\n sessionId: text('session_id'),\n traceId: text('trace_id'),\n\n // Timestamps\n createdAt: timestamp('created_at').notNull(),\n archivedAt: timestamp('archived_at').notNull().defaultNow(),\n },\n (table) => [\n index('audit_events_archive_entity_idx').on(table.entityType, table.entityId),\n index('audit_events_archive_organization_idx').on(table.organizationId),\n index('audit_events_archive_time_idx').on(table.createdAt),\n ]\n);\n\n// ============================================================\n// Audit Logs Archive Table\n// ============================================================\n\n/**\n * Audit Logs Archive Table\n *\n * Same structure as audit_logs, used for cold storage of old records.\n */\nexport const auditLogsArchive = pgTable(\n 'audit_logs_archive',\n {\n id: text('id').primaryKey(),\n\n // Actor\n actorType: text('actor_type').notNull().$type<ArchiveActorType>(),\n actorId: text('actor_id').notNull(),\n\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n // Action\n action: text('action').notNull(),\n resource: text('resource'),\n\n // Result\n result: text('result').notNull().$type<'allow' | 'deny' | 'error'>(),\n reason: text('reason'),\n\n // Metadata\n metadata: jsonb('metadata'),\n\n // Audit enhancement fields\n actorIp: text('actor_ip'),\n userAgent: text('user_agent'),\n traceId: text('trace_id'),\n\n // Timestamps\n createdAt: timestamp('created_at').notNull(),\n archivedAt: timestamp('archived_at').notNull().defaultNow(),\n },\n (table) => [\n index('audit_logs_archive_organization_idx').on(table.organizationId),\n index('audit_logs_archive_actor_idx').on(table.actorType, table.actorId),\n index('audit_logs_archive_time_idx').on(table.createdAt),\n ]\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const auditEventsArchiveSchema = createInsertSchema(auditEventsArchive);\nexport const auditLogsArchiveSchema = createInsertSchema(auditLogsArchive);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type ArchivedAuditEvent = typeof auditEventsArchive.$inferSelect;\nexport type ArchivedAuditLog = typeof auditLogsArchive.$inferSelect;\n","/**\n * Entity Ownerships Database Schema\n *\n * Drizzle ORM table definitions for LBAC (Label-Based Access Control).\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n timestamp,\n index,\n uniqueIndex,\n jsonb,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { organization } from './auth';\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * Scope Types for ownership\n */\nexport const ScopeType = {\n USER: 'user',\n TEAM: 'team',\n ROLE: 'role',\n SPACE: 'space',\n ORG: 'org',\n} as const;\n\nexport type ScopeTypeValue = (typeof ScopeType)[keyof typeof ScopeType];\n\n/**\n * Access Levels\n */\nexport const AccessLevel = {\n READ: 'read',\n WRITE: 'write',\n} as const;\n\nexport type AccessLevelValue = (typeof AccessLevel)[keyof typeof AccessLevel];\n\n// ============================================================\n// Entity Ownerships Table\n// ============================================================\n\n/**\n * Entity Ownerships Table (Write Model - SoT)\n *\n * Records WHO can access WHAT at WHAT level.\n * This is the ONLY authoritative source for permission grants.\n */\nexport const entityOwnerships = pgTable(\n 'entity_ownerships',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // Target Entity\n entityType: text('entity_type').notNull(), // 'article', 'document', etc.\n entityId: text('entity_id').notNull(),\n\n // Scope (who has access)\n scopeType: text('scope_type').notNull(), // 'user' | 'team' | 'role' | 'space' | 'org'\n scopeId: text('scope_id').notNull(),\n\n // Access Level\n level: text('level').notNull().default('read'), // 'read' | 'write'\n\n // Inheritance Tracking (for rebuild)\n inheritedFromType: text('inherited_from_type'), // 'team' | 'space' | null\n inheritedFromId: text('inherited_from_id'), // Source scope ID\n\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n // Expiration (optional, for time-limited access)\n expireAt: timestamp('expire_at'),\n\n // Metadata\n createdAt: timestamp('created_at').defaultNow().notNull(),\n updatedAt: timestamp('updated_at').defaultNow().notNull(),\n createdBy: text('created_by'), // Actor who granted this\n },\n (table) => [\n // Unique constraint: one grant per entity-scope combination\n uniqueIndex('ownership_unique_idx').on(\n table.entityType,\n table.entityId,\n table.scopeType,\n table.scopeId,\n ),\n // Query by entity\n index('ownership_entity_idx').on(table.entityType, table.entityId),\n // Query by scope (who has access to what)\n index('ownership_scope_idx').on(table.scopeType, table.scopeId),\n // Query inherited ownerships (for rebuild on membership change)\n index('ownership_inherited_idx').on(table.inheritedFromType, table.inheritedFromId),\n // Tenant isolation\n index('ownership_org_idx').on(table.organizationId),\n // Expiration cleanup\n index('ownership_expire_idx').on(table.expireAt),\n ],\n);\n\n// ============================================================\n// Ownership Audit Log Table\n// ============================================================\n\n/**\n * Ownership Audit Log - For compliance and debugging\n *\n * Records all changes to ownerships for audit trail.\n */\nexport const ownershipAuditLog = pgTable(\n 'ownership_audit_log',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n\n // Reference to ownership (may be deleted)\n ownershipId: text('ownership_id').notNull(),\n entityType: text('entity_type').notNull(),\n entityId: text('entity_id').notNull(),\n scopeType: text('scope_type').notNull(),\n scopeId: text('scope_id').notNull(),\n\n // Action\n action: text('action').notNull(), // 'grant' | 'revoke' | 'inherit_expand' | 'inherit_collapse' | 'expire'\n\n // State snapshot\n beforeState: jsonb('before_state'),\n afterState: jsonb('after_state'),\n\n // Actor\n actorId: text('actor_id').notNull(),\n actorType: text('actor_type').notNull(), // 'user' | 'system' | 'plugin'\n reason: text('reason'),\n\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n\n // Timestamp\n timestamp: timestamp('timestamp').defaultNow().notNull(),\n },\n (table) => [\n index('audit_ownership_idx').on(table.ownershipId),\n index('audit_entity_idx').on(table.entityType, table.entityId),\n index('audit_actor_idx').on(table.actorId),\n index('audit_org_idx').on(table.organizationId),\n index('audit_timestamp_idx').on(table.timestamp),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const entityOwnershipSchema = createInsertSchema(entityOwnerships);\nexport const ownershipAuditLogSchema = createInsertSchema(ownershipAuditLog);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type EntityOwnership = typeof entityOwnerships.$inferSelect;\nexport type EntityOwnershipInsert = typeof entityOwnerships.$inferInsert;\nexport type OwnershipAuditLog = typeof ownershipAuditLog.$inferSelect;\n","/**\n * Billing Database Schema\n *\n * Drizzle ORM table definitions for subscription and billing management.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n timestamp,\n jsonb,\n uuid,\n integer,\n index,\n uniqueIndex,\n} from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { organization } from './auth';\nimport { user } from './auth';\n\n// ============================================================\n// Types\n// ============================================================\n\nexport type PlanInterval = 'month' | 'year' | 'one_time';\nexport type PlanItemType = 'boolean' | 'metered';\nexport type ResetMode = 'period' | 'never';\nexport type ResetStrategy = 'hard' | 'soft' | 'capped';\nexport type QuotaScope = 'tenant' | 'user';\nexport type QuotaSourceType = 'membership' | 'shop_order' | 'plugin' | 'admin_grant';\nexport type TransactionStatus = 'PENDING' | 'PAID' | 'FAILED' | 'REFUNDED';\nexport type TransactionSourceType = 'membership' | 'shop_order' | 'plugin' | 'wallet_topup';\nexport type BillingEventOutboxStatus = 'pending' | 'processing' | 'completed';\nexport type SubscriptionStatus = 'trialing' | 'active' | 'past_due' | 'canceled' | 'expired';\nexport type CapabilityType = 'boolean' | 'metered';\nexport type CapabilitySource = 'core' | 'plugin';\nexport type CapabilityStatus = 'pending' | 'approved' | 'rejected';\nexport type OveragePolicy = 'deny' | 'charge' | 'throttle' | 'downgrade';\n\n// ============================================================\n// Capabilities Table\n// ============================================================\n\nexport const capabilities = pgTable(\n 'capabilities',\n {\n subject: text('subject').primaryKey(),\n type: text('type').notNull().$type<CapabilityType>(),\n unit: text('unit'),\n description: text('description'),\n source: text('source').notNull().$type<CapabilitySource>(),\n pluginId: text('plugin_id'),\n status: text('status').notNull().$type<CapabilityStatus>().default('pending'),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n },\n (table) => [\n index('idx_capabilities_source_status').on(table.source, table.status),\n index('idx_capabilities_plugin_id').on(table.pluginId),\n ],\n);\n\nexport type Capability = typeof capabilities.$inferSelect;\n\n// ============================================================\n// Plans Table\n// ============================================================\n\nexport const plans = pgTable('plans', {\n id: text('id').primaryKey().$defaultFn(() => crypto.randomUUID()),\n name: text('name').notNull(),\n description: text('description'),\n interval: text('interval').notNull().$type<PlanInterval>(),\n intervalCount: integer('interval_count').notNull().default(1),\n currency: text('currency').notNull().default('usd'),\n priceCents: integer('price_cents').notNull(),\n isActive: integer('is_active').notNull().default(1),\n metadata: jsonb('metadata').$type<Record<string, unknown>>(),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n});\n\nexport type Plan = typeof plans.$inferSelect;\n\n// ============================================================\n// Plan Items Table\n// ============================================================\n\nexport const planItems = pgTable(\n 'plan_items',\n {\n id: uuid('id').primaryKey().defaultRandom(),\n planId: text('plan_id')\n .notNull()\n .references(() => plans.id, { onDelete: 'cascade' }),\n subject: text('subject').notNull(),\n procedurePath: text('procedure_path'),\n groupKey: text('group_key'),\n type: text('type').notNull().$type<PlanItemType>(),\n amount: integer('amount'),\n resetMode: text('reset_mode').notNull().$type<ResetMode>(),\n priority: integer('priority').notNull().default(0),\n overagePolicy: text('overage_policy').$type<OveragePolicy>().default('deny'),\n overagePriceCents: integer('overage_price_cents'),\n resetStrategy: text('reset_strategy').$type<ResetStrategy>().default('hard'),\n resetCap: integer('reset_cap'),\n quotaScope: text('quota_scope').$type<QuotaScope>().notNull().default('tenant'),\n metadata: jsonb('metadata').$type<Record<string, unknown>>(),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n },\n (table) => [\n index('idx_plan_items_plan_id').on(table.planId),\n index('idx_plan_items_subject').on(table.subject),\n index('idx_plan_items_procedure_path').on(table.procedurePath),\n uniqueIndex('uq_plan_items_plan_procedure_path')\n .on(table.planId, table.procedurePath)\n .where(sql`${table.procedurePath} IS NOT NULL`),\n ],\n);\n\nexport type PlanItem = typeof planItems.$inferSelect;\n\n// ============================================================\n// User Quotas Table\n// ============================================================\n\nexport const userQuotas = pgTable(\n 'user_quotas',\n {\n id: uuid('id').primaryKey().defaultRandom(),\n userId: text('user_id')\n .notNull()\n .references(() => user.id, { onDelete: 'cascade' }),\n organizationId: text('organization_id')\n .references(() => organization.id, { onDelete: 'cascade' }),\n subject: text('subject').notNull(),\n balance: integer('balance').notNull(),\n priority: integer('priority').notNull().default(0),\n expiresAt: timestamp('expires_at'),\n sourceType: text('source_type').notNull().$type<QuotaSourceType>(),\n sourceId: text('source_id').notNull(),\n metadata: jsonb('metadata').$type<Record<string, unknown>>(),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n },\n (table) => [\n index('idx_user_quotas_user_feature').on(table.userId, table.subject),\n index('idx_user_quotas_waterfall').on(\n table.userId,\n table.subject,\n table.balance,\n table.priority,\n table.expiresAt,\n ),\n uniqueIndex('uq_user_quotas_source').on(\n table.organizationId,\n table.userId,\n table.subject,\n table.sourceType,\n table.sourceId,\n ),\n uniqueIndex('uq_user_quotas_legacy_source')\n .on(table.userId, table.subject, table.sourceType, table.sourceId)\n .where(sql`${table.organizationId} IS NULL`),\n ],\n);\n\nexport type UserQuota = typeof userQuotas.$inferSelect;\n\n// ============================================================\n// Wallets Table\n// ============================================================\n\nexport const wallets = pgTable('wallets', {\n userId: text('user_id')\n .primaryKey()\n .references(() => user.id, { onDelete: 'cascade' }),\n balanceCents: integer('balance_cents').notNull().default(0),\n currency: text('currency').notNull().default('usd'),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n});\n\nexport type Wallet = typeof wallets.$inferSelect;\n\n// ============================================================\n// Transactions Table\n// ============================================================\n\nexport const transactions = pgTable(\n 'transactions',\n {\n id: uuid('id').primaryKey().defaultRandom(),\n userId: text('user_id')\n .notNull()\n .references(() => user.id, { onDelete: 'cascade' }),\n amountCents: integer('amount_cents').notNull(),\n currency: text('currency').notNull(),\n sourceType: text('source_type').notNull().$type<TransactionSourceType>(),\n sourceId: text('source_id').notNull(),\n status: text('status').notNull().$type<TransactionStatus>().default('PENDING'),\n gateway: text('gateway'),\n externalId: text('external_id'),\n baseCurrency: text('base_currency'),\n baseAmountCents: integer('base_amount_cents'),\n settlementCurrency: text('settlement_currency'),\n settlementAmountCents: integer('settlement_amount_cents'),\n exchangeRate: text('exchange_rate'),\n exchangeRateAt: timestamp('exchange_rate_at'),\n metadata: jsonb('metadata').$type<Record<string, unknown>>(),\n paidAt: timestamp('paid_at'),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n },\n (table) => [\n index('idx_transactions_user_source').on(table.userId, table.sourceType, table.sourceId),\n uniqueIndex('uq_transactions_external_id').on(table.externalId),\n index('idx_transactions_status').on(table.status),\n ],\n);\n\nexport type Transaction = typeof transactions.$inferSelect;\n\n// ============================================================\n// Billing Event Outbox\n// ============================================================\n\n/**\n * Durable hand-off between billing state transitions and the in-process\n * EventBus. Delivery is at-least-once; dedupeKey/eventId let consumers apply\n * their own durable idempotency without rerunning billing state changes.\n */\nexport const billingEventOutbox = pgTable(\n 'billing_event_outbox',\n {\n id: uuid('id').primaryKey().defaultRandom(),\n dedupeKey: text('dedupe_key').notNull(),\n transactionId: uuid('transaction_id')\n .notNull()\n .references(() => transactions.id, { onDelete: 'cascade' }),\n eventName: text('event_name').notNull(),\n payload: jsonb('payload').notNull().$type<Record<string, unknown>>(),\n status: text('status')\n .notNull()\n .$type<BillingEventOutboxStatus>()\n .default('pending'),\n attempts: integer('attempts').notNull().default(0),\n availableAt: timestamp('available_at', { withTimezone: true }).notNull().defaultNow(),\n claimId: uuid('claim_id'),\n leaseExpiresAt: timestamp('lease_expires_at', { withTimezone: true }),\n lastError: text('last_error'),\n completedAt: timestamp('completed_at', { withTimezone: true }),\n createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),\n updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),\n },\n (table) => [\n uniqueIndex('billing_event_outbox_dedupe_uidx').on(table.dedupeKey),\n index('billing_event_outbox_available_idx').on(table.status, table.availableAt),\n index('billing_event_outbox_transaction_idx').on(table.transactionId),\n ],\n);\n\nexport type BillingEventOutbox = typeof billingEventOutbox.$inferSelect;\n\n// ============================================================\n// Usage Records Table\n// ============================================================\n\nexport const usageRecords = pgTable(\n 'usage_records',\n {\n id: uuid('id').primaryKey().defaultRandom(),\n userId: text('user_id')\n .notNull()\n .references(() => user.id, { onDelete: 'cascade' }),\n subject: text('subject').notNull(),\n amount: integer('amount').notNull(),\n quotaIds: jsonb('quota_ids').$type<string[]>(),\n overageChargedCents: integer('overage_charged_cents'),\n occurredAt: timestamp('occurred_at').notNull().defaultNow(),\n metadata: jsonb('metadata').$type<Record<string, unknown>>(),\n },\n (table) => [\n index('idx_usage_records_user_feature').on(table.userId, table.subject),\n index('idx_usage_records_occurred_at').on(table.occurredAt),\n ],\n);\n\nexport type UsageRecord = typeof usageRecords.$inferSelect;\n\n// ============================================================\n// Plan Subscriptions Table\n// ============================================================\n\nexport const planSubscriptions = pgTable(\n 'plan_subscriptions',\n {\n id: uuid('id').primaryKey().defaultRandom(),\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n planId: text('plan_id')\n .notNull()\n .references(() => plans.id, { onDelete: 'restrict' }),\n status: text('status').notNull().$type<SubscriptionStatus>(),\n version: integer('version').notNull().default(1),\n currentPeriodStart: timestamp('current_period_start').notNull(),\n currentPeriodEnd: timestamp('current_period_end').notNull(),\n billingCycleAnchor: integer('billing_cycle_anchor'),\n trialStart: timestamp('trial_start'),\n trialEnd: timestamp('trial_end'),\n renewalCount: integer('renewal_count').notNull().default(0),\n lastRenewalAt: timestamp('last_renewal_at'),\n gateway: text('gateway'),\n externalSubscriptionId: text('external_subscription_id'),\n initialTransactionId: uuid('initial_transaction_id')\n .references(() => transactions.id, { onDelete: 'set null' }),\n latestTransactionId: uuid('latest_transaction_id')\n .references(() => transactions.id, { onDelete: 'set null' }),\n canceledAt: timestamp('canceled_at'),\n cancelReason: text('cancel_reason'),\n cancelAtPeriodEnd: integer('cancel_at_period_end').default(0),\n scheduledPlanId: text('scheduled_plan_id')\n .references(() => plans.id, { onDelete: 'set null' }),\n scheduledChangeAt: timestamp('scheduled_change_at'),\n metadata: jsonb('metadata').$type<Record<string, unknown>>(),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n },\n (table) => [\n index('idx_subscriptions_tenant').on(table.organizationId),\n index('idx_subscriptions_status').on(table.status),\n index('idx_subscriptions_period_end').on(table.currentPeriodEnd),\n uniqueIndex('uq_subscriptions_external_id').on(table.externalSubscriptionId),\n uniqueIndex('uq_subscriptions_tenant_plan_active')\n .on(table.organizationId, table.planId)\n .where(sql`status IN ('active', 'trialing', 'past_due')`),\n ],\n);\n\nexport type PlanSubscription = typeof planSubscriptions.$inferSelect;\n\n// ============================================================\n// Tenant Quotas Table\n// ============================================================\n\nexport const tenantQuotas = pgTable(\n 'tenant_quotas',\n {\n id: uuid('id').primaryKey().defaultRandom(),\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n subject: text('subject').notNull(),\n balance: integer('balance').notNull(),\n priority: integer('priority').notNull().default(100),\n expiresAt: timestamp('expires_at'),\n sourceType: text('source_type').notNull().$type<QuotaSourceType>(),\n sourceId: text('source_id').notNull(),\n metadata: jsonb('metadata').$type<Record<string, unknown>>(),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n },\n (table) => [\n index('idx_tenant_quotas_tenant_feature').on(table.organizationId, table.subject),\n index('idx_tenant_quotas_waterfall').on(\n table.organizationId,\n table.subject,\n table.balance,\n table.priority,\n table.expiresAt,\n ),\n uniqueIndex('uq_tenant_quotas_source').on(\n table.organizationId,\n table.subject,\n table.sourceType,\n table.sourceId,\n ),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const capabilitySchema = createInsertSchema(capabilities);\nexport const planSchema = createInsertSchema(plans);\nexport const planItemSchema = createInsertSchema(planItems);\nexport const userQuotaSchema = createInsertSchema(userQuotas);\nexport const walletSchema = createInsertSchema(wallets);\nexport const transactionSchema = createInsertSchema(transactions);\nexport const billingEventOutboxSchema = createInsertSchema(billingEventOutbox);\nexport const usageRecordSchema = createInsertSchema(usageRecords);\nexport const planSubscriptionSchema = createInsertSchema(planSubscriptions);\nexport const tenantQuotaSchema = createInsertSchema(tenantQuotas);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type TenantQuota = typeof tenantQuotas.$inferSelect;\nexport type InsertPlan = typeof plans.$inferInsert;\nexport type InsertPlanItem = typeof planItems.$inferInsert;\nexport type InsertCapability = typeof capabilities.$inferInsert;\nexport type InsertUserQuota = typeof userQuotas.$inferInsert;\nexport type InsertTransaction = typeof transactions.$inferInsert;\nexport type InsertBillingEventOutbox = typeof billingEventOutbox.$inferInsert;\nexport type InsertUsageRecord = typeof usageRecords.$inferInsert;\nexport type InsertPlanSubscription = typeof planSubscriptions.$inferInsert;\nexport type InsertTenantQuota = typeof tenantQuotas.$inferInsert;\n","/**\n * Currency Database Schema\n *\n * Drizzle ORM table definitions for multi-currency support.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n timestamp,\n jsonb,\n uuid,\n integer,\n index,\n uniqueIndex,\n numeric,\n} from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { organization } from './auth';\n\n// ============================================================\n// Types\n// ============================================================\n\n/**\n * I18n text for currency name\n */\nexport type CurrencyNameI18n = Record<string, string>;\n\n/**\n * Exchange rate source type\n */\nexport type ExchangeRateSource = 'manual' | `api:${string}`;\n\n// ============================================================\n// Currencies Table\n// ============================================================\n\n/**\n * Currencies Table\n *\n * Stores currency configurations per organization.\n * Each organization can have multiple currencies with one base currency.\n */\nexport const currencies = pgTable(\n 'currencies',\n {\n id: uuid('id').primaryKey().defaultRandom(),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n code: text('code').notNull(), // ISO 4217 uppercase (USD, CNY, EUR)\n nameI18n: jsonb('name_i18n').notNull().$type<CurrencyNameI18n>(),\n symbol: text('symbol').notNull(), // '$', '¥', '€'\n decimalDigits: integer('decimal_digits').notNull().default(2),\n isEnabled: integer('is_enabled').notNull().default(1),\n isBase: integer('is_base').notNull().default(0),\n currentRate: numeric('current_rate', { precision: 18, scale: 8 }),\n createdBy: text('created_by'),\n updatedBy: text('updated_by'),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n },\n (table) => [\n uniqueIndex('uq_currencies_org_code').on(table.organizationId, table.code),\n uniqueIndex('uq_currencies_org_base')\n .on(table.organizationId)\n .where(sql`is_base = 1`),\n index('idx_currencies_org').on(table.organizationId),\n ],\n);\n\nexport type Currency = typeof currencies.$inferSelect;\n\n// ============================================================\n// Exchange Rates Table\n// ============================================================\n\n/**\n * Exchange Rates Table\n *\n * Stores exchange rates between currencies for each organization.\n * Supports historical rates with effective_at timestamp.\n */\nexport const exchangeRates = pgTable(\n 'exchange_rates',\n {\n id: uuid('id').primaryKey().defaultRandom(),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n baseCurrency: text('base_currency').notNull(),\n targetCurrency: text('target_currency').notNull(),\n rate: numeric('rate', { precision: 18, scale: 8 }).notNull(),\n source: text('source').notNull().$type<ExchangeRateSource>(),\n effectiveAt: timestamp('effective_at').notNull(),\n expiresAt: timestamp('expires_at'),\n createdBy: text('created_by'),\n updatedBy: text('updated_by'),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at').notNull().defaultNow(),\n },\n (table) => [\n uniqueIndex('uq_exchange_rates_org_pair_time').on(\n table.organizationId,\n table.baseCurrency,\n table.targetCurrency,\n table.effectiveAt,\n ),\n index('idx_exchange_rates_org').on(table.organizationId),\n index('idx_exchange_rates_current').on(\n table.organizationId,\n table.baseCurrency,\n table.targetCurrency,\n ).where(sql`expires_at IS NULL`),\n ],\n);\n\nexport type ExchangeRate = typeof exchangeRates.$inferSelect;\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const currencySchema = createInsertSchema(currencies);\nexport const exchangeRateSchema = createInsertSchema(exchangeRates);\n","/**\n * Geo Reference Database Schema\n *\n * Core-owned country and subdivision reference data.\n * Source of truth lives in static seed data, database is the runtime read model.\n */\nimport {\n pgTable,\n text,\n timestamp,\n boolean,\n integer,\n jsonb,\n index,\n uniqueIndex,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { z } from 'zod/v4';\nimport { paginationSchema } from './common';\nimport { localeSchema } from './i18n';\n\nexport type GeoName = Record<string, string>;\nexport type GeoFlags = {\n png: string;\n svg: string;\n alt?: string | null;\n emoji?: string | null;\n};\n\nexport type MarketRegion = {\n code: string;\n name: GeoName;\n sortOrder: number;\n};\n\nexport const MARKET_REGIONS: readonly MarketRegion[] = [\n { code: 'north_america', name: { 'zh-CN': '北美', 'en-US': 'North America' }, sortOrder: 10 },\n { code: 'europe', name: { 'zh-CN': '欧洲', 'en-US': 'Europe' }, sortOrder: 20 },\n { code: 'asia_pacific', name: { 'zh-CN': '亚太', 'en-US': 'Asia Pacific' }, sortOrder: 30 },\n { code: 'latin_america', name: { 'zh-CN': '拉美', 'en-US': 'Latin America' }, sortOrder: 40 },\n { code: 'middle_east', name: { 'zh-CN': '中东', 'en-US': 'Middle East' }, sortOrder: 50 },\n { code: 'africa', name: { 'zh-CN': '非洲', 'en-US': 'Africa' }, sortOrder: 60 },\n { code: 'global', name: { 'zh-CN': '全球', 'en-US': 'Global' }, sortOrder: 70 },\n] as const;\n\nexport const geoNameSchema = z\n .record(z.string(), z.string())\n .refine((value) => Object.keys(value).length > 0, {\n message: 'At least one localized name is required',\n });\n\nexport const countryCode2Schema = z\n .string()\n .length(2)\n .regex(/^[A-Za-z]{2}$/, 'Country code must be ISO 3166-1 alpha-2')\n .transform((value) => value.toUpperCase());\n\nexport const countryCode3Schema = z\n .string()\n .length(3)\n .regex(/^[A-Za-z]{3}$/, 'Country code must be ISO 3166-1 alpha-3')\n .transform((value) => value.toUpperCase());\n\nexport const subdivisionFullCodeSchema = z\n .string()\n .min(4)\n .regex(/^[A-Za-z]{2}-[A-Za-z0-9]+$/, 'Subdivision code must look like ISO 3166-2')\n .transform((value) => value.toUpperCase());\n\nexport const geoCountries = pgTable(\n 'geo_countries',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n code2: text('code2').notNull(),\n code3: text('code3'),\n numericCode: text('numeric_code'),\n name: jsonb('name').notNull().$type<GeoName>(),\n officialName: jsonb('official_name').$type<GeoName | null>(),\n flags: jsonb('flags').$type<GeoFlags | null>(),\n currencyCode: text('currency_code'),\n languageCode: text('language_code'),\n locale: text('locale'),\n phoneCode: text('phone_code'),\n isSupported: boolean('is_supported').notNull().default(true),\n sortOrder: integer('sort_order').notNull().default(0),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at')\n .notNull()\n .defaultNow()\n .$onUpdate(() => new Date()),\n },\n (table) => [\n uniqueIndex('geo_countries_code2_uidx').on(table.code2),\n uniqueIndex('geo_countries_code3_uidx').on(table.code3),\n index('geo_countries_supported_sort_idx').on(table.isSupported, table.sortOrder),\n ]\n);\n\nexport const geoSubdivisions = pgTable(\n 'geo_subdivisions',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n countryCode2: text('country_code2')\n .notNull()\n .references(() => geoCountries.code2, { onDelete: 'cascade' }),\n code: text('code').notNull(),\n fullCode: text('full_code').notNull(),\n name: jsonb('name').notNull().$type<GeoName>(),\n type: text('type'),\n isSupported: boolean('is_supported').notNull().default(true),\n sortOrder: integer('sort_order').notNull().default(0),\n createdAt: timestamp('created_at').notNull().defaultNow(),\n updatedAt: timestamp('updated_at')\n .notNull()\n .defaultNow()\n .$onUpdate(() => new Date()),\n },\n (table) => [\n uniqueIndex('geo_subdivisions_full_code_uidx').on(table.fullCode),\n uniqueIndex('geo_subdivisions_country_code_uidx').on(table.countryCode2, table.code),\n index('geo_subdivisions_country_sort_idx').on(table.countryCode2, table.sortOrder),\n index('geo_subdivisions_country_supported_idx').on(table.countryCode2, table.isSupported),\n ]\n);\n\nexport type GeoCountry = typeof geoCountries.$inferSelect;\nexport type GeoSubdivision = typeof geoSubdivisions.$inferSelect;\n\nexport const geoCountrySchema = createInsertSchema(geoCountries, {\n code2: () => countryCode2Schema,\n code3: () => countryCode3Schema.optional(),\n name: () => geoNameSchema,\n officialName: () => geoNameSchema.nullish(),\n});\n\nexport const geoSubdivisionSchema = createInsertSchema(geoSubdivisions, {\n countryCode2: () => countryCode2Schema,\n fullCode: () => subdivisionFullCodeSchema,\n name: () => geoNameSchema,\n});\n\nexport const getGeoCountryQuery = z.object({\n code2: countryCode2Schema,\n locale: localeSchema.optional(),\n});\n\nexport const listGeoCountriesQuery = paginationSchema.partial().extend({\n limit: z.number().int().min(1).max(300).default(300),\n offset: z.number().int().min(0).default(0),\n locale: localeSchema.optional(),\n supportedOnly: z.boolean().default(true),\n});\n\nexport const getGeoSubdivisionQuery = z.object({\n fullCode: subdivisionFullCodeSchema,\n locale: localeSchema.optional(),\n});\n\nexport const listGeoSubdivisionsQuery = paginationSchema.partial().extend({\n limit: z.number().int().min(1).max(500).default(500),\n offset: z.number().int().min(0).default(0),\n countryCode2: countryCode2Schema,\n locale: localeSchema.optional(),\n supportedOnly: z.boolean().default(true),\n});\n\nexport const listMarketRegionsQuery = paginationSchema.partial().extend({\n limit: z.number().int().min(1).max(100).default(100),\n offset: z.number().int().min(0).default(0),\n locale: localeSchema.optional(),\n});\n","/**\n * Webhooks Database Schema\n *\n * Drizzle ORM table definitions for webhook system.\n * Implements transactional outbox pattern for reliable delivery.\n */\nimport {\n pgTable,\n text,\n timestamp,\n boolean,\n jsonb,\n integer,\n index,\n uniqueIndex,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { organization } from './auth';\n\n// ============================================================\n// Types\n// ============================================================\n\nexport type WebhookStatus = 'pending' | 'success' | 'failed';\n\nexport interface RetryPolicy {\n attempts: number;\n backoffMs: number;\n maxBackoffMs?: number;\n}\n\n// ============================================================\n// Webhook Endpoints Table\n// ============================================================\n\n/**\n * Webhook Endpoints Table\n *\n * Stores user-configured webhook endpoints with subscription settings.\n */\nexport const webhookEndpoints = pgTable(\n 'webhook_endpoints',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n url: text('url').notNull(),\n secret: text('secret').notNull(),\n events: text('events')\n .array()\n .notNull()\n .$defaultFn(() => []),\n enabled: boolean('enabled').notNull().default(true),\n retryPolicy: jsonb('retry_policy')\n .notNull()\n .$type<RetryPolicy>()\n .default({ attempts: 5, backoffMs: 1000 }),\n createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),\n updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),\n },\n (table) => [\n index('idx_webhook_endpoints_tenant').on(table.organizationId),\n index('idx_webhook_endpoints_enabled').on(table.organizationId, table.enabled),\n uniqueIndex('uq_webhook_endpoints_tenant_url').on(table.organizationId, table.url),\n ],\n);\n\nexport type WebhookEndpoint = typeof webhookEndpoints.$inferSelect;\n\n// ============================================================\n// Webhook Deliveries Table\n// ============================================================\n\n/**\n * Webhook Deliveries Table\n *\n * Records every webhook delivery attempt with results.\n */\nexport const webhookDeliveries = pgTable(\n 'webhook_deliveries',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n // FK to webhookEndpoints table\n endpointId: text('endpoint_id')\n .notNull()\n .references(() => webhookEndpoints.id, { onDelete: 'cascade' }),\n eventType: text('event_type').notNull(),\n payload: jsonb('payload').notNull().$type<Record<string, unknown>>(),\n status: text('status').notNull().$type<WebhookStatus>().default('pending'),\n attempts: integer('attempts').notNull().default(0),\n lastAttemptAt: timestamp('last_attempt_at', { withTimezone: true }),\n responseCode: integer('response_code'),\n error: text('error'),\n dedupeKey: text('dedupe_key').notNull(),\n createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),\n updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),\n },\n (table) => [\n index('idx_webhook_deliveries_endpoint').on(table.endpointId),\n index('idx_webhook_deliveries_tenant_status').on(table.organizationId, table.status),\n uniqueIndex('idx_webhook_deliveries_dedupe').on(table.dedupeKey),\n index('idx_webhook_deliveries_created').on(table.createdAt),\n ],\n);\n\nexport type WebhookDelivery = typeof webhookDeliveries.$inferSelect;\n\n// ============================================================\n// Webhook Outbox Table\n// ============================================================\n\n/**\n * Webhook Outbox Table\n *\n * Transactional outbox for reliable event delivery.\n * Events are written here first, then processed by a background worker.\n */\nexport const webhookOutbox = pgTable(\n 'webhook_outbox',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n // FK to webhookEndpoints table\n endpointId: text('endpoint_id')\n .notNull()\n .references(() => webhookEndpoints.id, { onDelete: 'cascade' }),\n eventType: text('event_type').notNull(),\n payload: jsonb('payload').notNull().$type<Record<string, unknown>>(),\n dedupeKey: text('dedupe_key').notNull(),\n availableAt: timestamp('available_at', { withTimezone: true }).notNull().defaultNow(),\n lockedAt: timestamp('locked_at', { withTimezone: true }),\n lockToken: text('lock_token'),\n createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),\n },\n (table) => [\n index('idx_webhook_outbox_available').on(table.availableAt),\n uniqueIndex('idx_webhook_outbox_dedupe').on(table.dedupeKey),\n index('idx_webhook_outbox_tenant').on(table.organizationId),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const webhookEndpointSchema = createInsertSchema(webhookEndpoints);\nexport const webhookDeliverySchema = createInsertSchema(webhookDeliveries);\nexport const webhookOutboxSchema = createInsertSchema(webhookOutbox);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type WebhookOutbox = typeof webhookOutbox.$inferSelect;\nexport type InsertWebhookEndpoint = typeof webhookEndpoints.$inferInsert;\nexport type InsertWebhookDelivery = typeof webhookDeliveries.$inferInsert;\nexport type InsertWebhookOutbox = typeof webhookOutbox.$inferInsert;\n","/**\n * Scheduled Tasks Database Schema\n *\n * Drizzle ORM table definitions for scheduled task management.\n * These are the source of truth - Zod schemas are generated from these.\n */\nimport {\n pgTable,\n text,\n timestamp,\n jsonb,\n boolean,\n integer,\n real,\n index,\n} from 'drizzle-orm/pg-core';\nimport { createInsertSchema } from 'drizzle-orm/zod';\nimport { organization } from './auth';\n\n// ============================================================\n// Types\n// ============================================================\n\nexport type HandlerType = 'queue-job' | 'webhook' | 'plugin-callback';\nexport type TaskStatus = 'success' | 'failed';\nexport type ExecutionStatus = 'pending' | 'running' | 'success' | 'failed' | 'timeout';\nexport type ProviderStatus = 'registered' | 'active' | 'inactive' | 'unregistered';\nexport type CreatedByType = 'user' | 'plugin' | 'system';\n\nexport interface HandlerConfig {\n queueName?: string;\n jobName?: string;\n url?: string;\n pluginId?: string;\n methodName?: string;\n}\n\nexport interface ExecutionError {\n code: string;\n message: string;\n stack?: string;\n}\n\nexport interface ProviderCapabilities {\n supportsSeconds: boolean;\n supportsTimezone: boolean;\n supportsPauseResume: boolean;\n minInterval: number;\n maxTasks: number;\n requiresWebhook: boolean;\n}\n\n// ============================================================\n// Scheduled Tasks Table\n// ============================================================\n\n/**\n * Scheduled Tasks Table\n *\n * 存储定时任务配置\n */\nexport const scheduledTasks = pgTable(\n 'scheduled_tasks',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n name: text('name').notNull(),\n description: text('description'),\n cronExpression: text('cron_expression').notNull(),\n timezone: text('timezone').notNull().default('UTC'),\n handlerType: text('handler_type').$type<HandlerType>().notNull(),\n handlerConfig: jsonb('handler_config').notNull().$type<HandlerConfig>(),\n payload: jsonb('payload'),\n enabled: boolean('enabled').notNull().default(true),\n lastRunAt: timestamp('last_run_at', { withTimezone: true }),\n lastStatus: text('last_status').$type<TaskStatus>(),\n nextRunAt: timestamp('next_run_at', { withTimezone: true }).notNull(),\n consecutiveFailures: integer('consecutive_failures').notNull().default(0),\n maxRetries: integer('max_retries').notNull().default(3),\n retryBackoffMultiplier: real('retry_backoff_multiplier').notNull().default(2),\n providerId: text('provider_id').notNull().default('builtin'),\n providerMetadata: jsonb('provider_metadata'),\n createdBy: text('created_by').notNull(),\n createdByType: text('created_by_type').$type<CreatedByType>().notNull(),\n createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),\n updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),\n },\n (table) => [\n index('scheduled_tasks_organization_idx').on(table.organizationId),\n index('scheduled_tasks_next_run_idx').on(table.nextRunAt, table.enabled),\n index('scheduled_tasks_provider_idx').on(table.providerId),\n ],\n);\n\nexport type ScheduledTask = typeof scheduledTasks.$inferSelect;\n\n// ============================================================\n// Task Executions Table\n// ============================================================\n\n/**\n * Task Executions Table\n *\n * 存储任务执行历史\n */\nexport const taskExecutions = pgTable(\n 'task_executions',\n {\n id: text('id')\n .primaryKey()\n .$defaultFn(() => crypto.randomUUID()),\n // FK to scheduledTasks table\n taskId: text('task_id')\n .notNull()\n .references(() => scheduledTasks.id, { onDelete: 'cascade' }),\n // FK to organization table\n organizationId: text('organization_id')\n .notNull()\n .references(() => organization.id, { onDelete: 'cascade' }),\n scheduledAt: timestamp('scheduled_at', { withTimezone: true }).notNull(),\n startedAt: timestamp('started_at', { withTimezone: true }).notNull(),\n completedAt: timestamp('completed_at', { withTimezone: true }),\n status: text('status').$type<ExecutionStatus>().notNull(),\n attempt: integer('attempt').notNull().default(1),\n result: jsonb('result'),\n error: jsonb('error').$type<ExecutionError>(),\n lockKey: text('lock_key').notNull(),\n workerId: text('worker_id').notNull(),\n },\n (table) => [\n index('task_executions_task_idx').on(table.taskId, table.startedAt),\n index('task_executions_organization_idx').on(table.organizationId),\n index('task_executions_status_idx').on(table.status),\n ],\n);\n\nexport type TaskExecution = typeof taskExecutions.$inferSelect;\n\n// ============================================================\n// Scheduler Providers Table\n// ============================================================\n\n/**\n * Scheduler Providers Table\n *\n * 存储已注册的 Scheduler Provider(第三方插件)\n */\nexport const schedulerProviders = pgTable(\n 'scheduler_providers',\n {\n id: text('id').primaryKey(),\n name: text('name').notNull(),\n version: text('version').notNull(),\n pluginId: text('plugin_id'),\n capabilities: jsonb('capabilities').notNull().$type<ProviderCapabilities>(),\n status: text('status').$type<ProviderStatus>().notNull(),\n registeredAt: timestamp('registered_at', { withTimezone: true }).notNull().defaultNow(),\n unregisteredAt: timestamp('unregistered_at', { withTimezone: true }),\n },\n (table) => [\n index('scheduler_providers_plugin_idx').on(table.pluginId),\n index('scheduler_providers_status_idx').on(table.status),\n ],\n);\n\n// ============================================================\n// Zod Schemas\n// ============================================================\n\nexport const scheduledTaskSchema = createInsertSchema(scheduledTasks);\nexport const taskExecutionSchema = createInsertSchema(taskExecutions);\nexport const schedulerProviderSchema = createInsertSchema(schedulerProviders);\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type SchedulerProvider = typeof schedulerProviders.$inferSelect;\nexport type InsertScheduledTask = typeof scheduledTasks.$inferInsert;\nexport type InsertTaskExecution = typeof taskExecutions.$inferInsert;\nexport type InsertSchedulerProvider = typeof schedulerProviders.$inferInsert;\n"]}
|