@wildo-ai/zod-decorators 1.1.3 → 1.1.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"zod-utils.shared.js","sourceRoot":"","sources":["../../../src/zod-utils.shared.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\n\nimport type {\n ArrayUIParams, BigDecimalUIParams, BooleanUIParams, CodeUIParams,\n DateUIParams, DateTimeUIParams, DurationUIParams, EnumUIParams,\n FileUIParams, ForeignKeyUIParams, MoneyUIParams, NumberUIParams,\n ObjectUIParams, PhoneUIParams, StringUIParams, TimeUIParams,\n PrimitiveUIBaseParams, PrimitiveUIBaseEditParams, PrimitiveUIBaseDisplayParams,\n} from './zod-decorators.types';\nimport { BooleanEditMode, EnumEditMode, NumberEditMode, StringEditMode } from './zod-decorators.types';\nimport { AutosaveFieldParams, BackendOnlyFieldParams, BusinessKeySetParams, WriteOnlySecretFieldParams, BigDecimalSchemaMetadata,\n DurationSchemaMetadata, CodeSchemaMetadata, DEFAULT_FOREIGN_KEY_DISPLAY_MODE, DiscriminatorFieldParams, FileGenerationSource, FileSchemaMetadata, ForeignKeyStructuralParams, ForeignKeyUIDisplayParams, MoneySchemaMetadata, CustomFieldMetadata, DecoratorInput, FieldSchemaType, FormFieldComponent, HiddenFieldParams, ImpersonalizeFieldParams, NotEditableFieldParams, OtpFieldParams, PhoneSchemaMetadata, PolymorphicFkVariant, RagSourceConfiguration, RangeConstraintValue, RangeSchemaMetadata, RangeType, SCHEMA_METADATA, SerializableZodSchema, SummaryFieldParams, ValidationMode, VersionedForeignKeySchemaMetadata, VersionedSchemaMetadata, ZodDecorator, UniqueFieldParams, VirtualFieldParams, TtlFieldParams, ShowWhenParams } from './zod-decorators.types';\nimport { z_range } from './zod-range';\nimport { addDecorators, getMetadataRecursive } from './zod.module-override';\n\n\n// Type guard to check if a schema has Zod v4 internals\n// Zod v4 can have two structures:\n// - Legacy: schema._zod.def.type (older Zod v4 builds)\n// - Current: schema.def.type with schema.type at root (newer Zod v4 builds)\nexport function hasZodInternals(schema: unknown): schema is { def: { type: string; [key: string]: unknown }; type?: string } {\n if (!schema || typeof schema !== 'object') return false;\n\n // First check for legacy structure: schema._zod.def.type\n if ('_zod' in schema) {\n const schemaObj = schema as unknown as Record<string, unknown>;\n const zodProp = schemaObj._zod;\n if (typeof zodProp === 'object' && zodProp !== null && 'def' in zodProp) {\n const zodObj = zodProp as Record<string, unknown>;\n const defProp = zodObj.def;\n if (typeof defProp === 'object' && defProp !== null && 'type' in defProp) {\n return true;\n }\n }\n }\n\n // Check for current structure: schema.def.type (with schema.type at root)\n if ('def' in schema) {\n const schemaObj = schema as unknown as Record<string, unknown>;\n const defProp = schemaObj.def;\n if (typeof defProp === 'object' && defProp !== null && 'type' in defProp) {\n return true;\n }\n }\n\n return false;\n}\n\n\n\n\n\n/**\n * Check if a schema has a specific decorator.\n * Note: getCustomFieldMetadata already handles recursive unwrapping for all wrapper types\n * including pipe (from refine/superRefine), optional, nullable, default, etc.\n */\nexport function hasDecorator(schema: z.ZodTypeAny, decorator: ZodDecorator): boolean {\n const metadata = getCustomFieldMetadata(schema);\n const value = metadata[decorator];\n\n // Handle different value types properly\n if (value !== undefined) {\n // For strings: non-empty = has decorator, empty = no decorator (defensive guard)\n if (typeof value === 'string') {\n return (value as string).length > 0;\n }\n // For numbers: any number including 0 = has decorator\n if (typeof value === 'number') {\n return true;\n }\n // For booleans: true = has decorator, false = no decorator\n if (typeof value === 'boolean') {\n return value;\n }\n\n if (typeof value === 'object' && value === null) {\n return false;\n }\n\n // For other types: truthy = has decorator\n return Boolean(value);\n }\n\n return false;\n}\n\n// =============================================================================\n// SCHEMA UNWRAPPING\n// =============================================================================\n\n/**\n * Unwrap optional, nullable, default, and other wrapper schemas\n * to get the underlying base schema\n */\nexport function unwrapSchema(schema: z.ZodTypeAny): z.ZodTypeAny {\n const type = getZodType(schema);\n\n switch (type) {\n case 'optional':\n case 'nullable': {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema ? unwrapSchema(innerSchema) : schema;\n }\n case 'default': {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema ? unwrapSchema(innerSchema) : schema;\n }\n case 'pipe': {\n const inSchema = getZodDefSchemaProperty(schema, 'in');\n return inSchema ? unwrapSchema(inSchema) : schema;\n }\n case 'readonly': {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema ? unwrapSchema(innerSchema) : schema;\n }\n case 'catch': {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema ? unwrapSchema(innerSchema) : schema;\n }\n default:\n return schema;\n }\n}\n\n/**\n * Make a field OPTIONAL for a PATCH-style UPDATE DTO, peeling any OUTER\n * `.default()` wrapper first.\n *\n * PATCH semantics: a field the caller OMITS must be left untouched. A field\n * declared `z.number().default(0)` breaks this — Zod re-materialises `0` for the\n * absent key on every parse, so the derived `$set` silently CLOBBERS the stored\n * value with the default. (Live defect: a webhook delivery row's `attemptCount`\n * counter was reset to `0` by every status transition that did not set it, so\n * the retry cap `attemptCount >= MAX_ATTEMPTS` was never reached and dead\n * deliveries retried forever.)\n *\n * It is ALSO where the framework's field-CLEARING contract is admitted onto the wire. An optional\n * field additionally gains a `.nullable()` wrapper here, so a caller can distinguish the two\n * PATCH intents that an absent key alone cannot express:\n *\n * - key ABSENT → leave the stored value untouched (classic PATCH semantics, above);\n * - value NULL → this field has no value (clear it).\n *\n * Eligibility is decided by `fieldAdmitsAddedNullClear` — notably NOT by `isOptional()`, which\n * would wrongly admit `.default()` fields. Required fields keep rejecting `null`. The wrapper is\n * added INSIDE the optional (`ZodOptional<ZodNullable<…>>`) so the outer type stays `optional` for\n * every consumer that introspects it.\n *\n * Behaviour:\n * - Non-default fields: `fieldSchema.optional()`, plus a `.nullable()` wrapper when the field is\n * optional and does not already accept null.\n * - Default-wrapped fields: the outer `ZodDefault` is peeled, the inner schema\n * (keeping `.int()` / `.min()` / refinements) is made optional, and any\n * decorator metadata attached to the default wrapper (e.g.\n * `.default(0).isSummaryField()`) is carried onto the resulting optional so\n * `getMetadataRecursive` is unchanged. The inner schema is SHARED, never\n * mutated, so the source schema is left intact.\n *\n * Defaults remain correct for CREATE (a new row gets them) — this transform is\n * for the UPDATE DTO only.\n */\nexport function toPatchOptionalField(fieldSchema: z.ZodTypeAny): z.ZodTypeAny {\n const admitsNullClear = fieldAdmitsAddedNullClear(fieldSchema);\n\n if (!isZodDefault(fieldSchema)) {\n return admitsNullClear ? fieldSchema.nullable().optional() : fieldSchema.optional();\n }\n\n const innerType = getZodDefSchemaProperty(fieldSchema, 'innerType');\n if (!innerType) return fieldSchema.optional();\n\n // A defaulted field is never null-clearable (see `fieldAdmitsAddedNullClear`), so the peeled\n // inner is made optional WITHOUT a nullable wrapper.\n const optionalInner = innerType.optional();\n const defaultWrapperMetadata = (fieldSchema as unknown as Record<symbol, unknown>)[SCHEMA_METADATA];\n if (defaultWrapperMetadata) {\n const optionalRecord = optionalInner as unknown as Record<symbol, unknown>;\n const existing = (optionalRecord[SCHEMA_METADATA] as Record<string, unknown>) ?? {};\n optionalRecord[SCHEMA_METADATA] = {\n ...existing,\n ...(defaultWrapperMetadata as Record<string, unknown>),\n };\n }\n return optionalInner;\n}\n\n/**\n * The value an edit control should contribute to form state, once a \"the user emptied this field\"\n * gesture has been normalised into the framework's single CLEARED representation.\n *\n * # Why a normalisation step has to exist at all\n *\n * An HTML form control cannot express \"no value\". The platform defines a form entry's value as a\n * string (or a `File`), and assigning `null` to `input.value` is coerced to `\"\"` at the DOM\n * boundary. So a user clearing a text box produces `''`, a user clearing a date picker produces\n * `undefined`, and neither of those is a wire representation of \"clear this field\". Left alone they\n * produce three different wrong outcomes: `''` fails a refined schema outright (a colour or phone\n * field could never be emptied once set), `''` passes a plain string schema and PERSISTS an empty\n * string as a second, redundant \"no data\" value, and `undefined` is dropped by `JSON.stringify` so\n * the clear silently never reaches the server at all.\n *\n * # What it normalises TO, and why not `undefined`\n *\n * Always `null`, never `undefined`. React Hook Form reserves `undefined` to mean \"fall back to\n * defaultValue\" and documents that calling `onChange` with it is not valid, so `undefined` is not a\n * representable field value there. `null` is the value RHF itself prescribes for a cleared field,\n * and it is the one sentinel that survives every downstream seam: the submission path keeps it, the\n * section-save path keeps it, and `JSON.stringify` keeps it.\n *\n * # Where this must be called\n *\n * At the ONE place a control's change reaches form state, before the value is handed to both the\n * form library and the autosave queue. Normalising later (at submit) is too late — validation has\n * already rejected the empty string — and normalising only for validation is the documented Formik\n * defect, where the schema validates a value the server never receives.\n *\n * # What it deliberately leaves alone\n *\n * - **Fields that cannot be cleared** — a required field, or one whose declaration otherwise\n * rejects null. Their empty value is returned untouched so validation still fails with the normal\n * message rather than being silently rewritten.\n * - **Password and OTP inputs** — an empty password box conventionally means \"unchanged\", never\n * \"remove the credential\". Removing a secret must be an explicit destructive action, not a blank\n * field.\n * - **Any non-empty value**, including `0` and `false`, which are values rather than absences.\n *\n * # Two entry points, because the caller's schema decides the question\n *\n * A form validates the operation's REQUEST DTO; inline edit on a display surface only ever holds\n * the resource's MAIN schema. Those two answer \"can this be cleared?\" differently and cannot be\n * told apart by shape, so the caller picks the entry point matching what it holds — see\n * `requestDtoFieldIsClearable` for why merging them is unsound. This is the REQUEST-DTO one.\n *\n * @param fieldSchema - the field as it appears on the operation's request DTO.\n * @param value - the raw value the control emitted.\n * @returns `null` when the gesture is a clear on a clearable field; otherwise `value` unchanged.\n */\nexport function normalizeClearedRequestDtoValue(fieldSchema: z.ZodTypeAny, value: unknown): unknown {\n return normalizeClearedValue(fieldSchema, value, requestDtoFieldIsClearable);\n}\n\n/**\n * `normalizeClearedFieldValue` for a caller holding the resource's MAIN schema — inline edit on a\n * display surface, and any edit control reasoning about its own declared field.\n *\n * Same contract, different question asked of the schema. See `mainSchemaFieldIsClearable`.\n */\nexport function normalizeClearedMainSchemaValue(fieldSchema: z.ZodTypeAny, value: unknown): unknown {\n return normalizeClearedValue(fieldSchema, value, mainSchemaFieldIsClearable);\n}\n\nfunction normalizeClearedValue(\n fieldSchema: z.ZodTypeAny,\n value: unknown,\n isClearable: (fieldSchema: z.ZodTypeAny) => boolean,\n): unknown {\n if (!isEmptyFieldGesture(value)) return value;\n\n const editMode = getStringUI(fieldSchema)?.edit?.editMode;\n if (editMode === StringEditMode.PASSWORD || editMode === StringEditMode.OTP) return value;\n\n if (!isClearable(fieldSchema)) return value;\n\n return null;\n}\n\n/**\n * Is \"clear it\" a meaningful instruction for this field, as declared on an UPDATE REQUEST DTO?\n *\n * On a request DTO the answer is exactly \"does it accept null\", because `toPatchOptionalField` adds\n * a nullable wrapper to the clearable fields and to no others.\n *\n * **This must never be asked of a MAIN-schema field, and its sibling must never be asked of a DTO\n * field.** The two schemas cannot be told apart by shape, and each answers only its own question\n * correctly:\n *\n * - On a DTO, PATCH semantics make EVERY field optional, so a required field is shape-identical to\n * an optional one. \"Declares absence\" is therefore meaningless here and would report every\n * required field clearable.\n * - On a main schema, an `.optional()` field does NOT accept null, so \"accepts null\" would report\n * every ordinary optional field un-clearable.\n *\n * Merging them into one permissive predicate looks convenient and is unsound in the first\n * direction: it silently made required fields clearable, which a pin caught.\n */\nexport function requestDtoFieldIsClearable(fieldSchema: z.ZodTypeAny): boolean {\n return fieldSchema.safeParse(null).success;\n}\n\n/**\n * Is \"clear it\" a meaningful instruction for this field, as declared on a resource's MAIN schema?\n *\n * Here the author's own declaration is the answer: a field that may be absent (`.optional()`) or\n * explicitly null (`.nullish()`) can be cleared; a required or defaulted one cannot. Read the\n * warning on `requestDtoFieldIsClearable` before using either.\n */\nexport function mainSchemaFieldIsClearable(fieldSchema: z.ZodTypeAny): boolean {\n return fieldSchema.safeParse(null).success || fieldAdmitsAddedNullClear(fieldSchema);\n}\n\n/**\n * Is this value an edit control's way of saying \"the user emptied me\"?\n *\n * The three shapes are the three the framework's controls actually emit: `''` from the string,\n * enum and number families, `undefined` from the date/time family, and `null` from a control that\n * has already been normalised (so re-normalising is idempotent).\n */\nfunction isEmptyFieldGesture(value: unknown): boolean {\n return value === '' || value === undefined || value === null;\n}\n\n/**\n * Should an UPDATE DTO ADD a `.nullable()` wrapper to this field so a caller can CLEAR it?\n *\n * This is the eligibility half of the framework's field-clearing contract. The wire rule is\n * JSON-Merge-Patch shaped and has exactly one meaning: an ABSENT key leaves the stored value\n * untouched, and an explicit `null` means \"this field has no value\". The repository write boundary\n * then derives the STORAGE representation from the field's own declaration — `$unset` / SQL NULL\n * for a field whose schema rejects null, a stored null for one authored `.nullish()`.\n *\n * Three declarations must be told apart, and the distinction is not the one `isOptional()` draws:\n *\n * - **Optional (`.optional()`, `.nullish()`)** — the author said this field may have no value, so\n * clearing it is meaningful. ELIGIBLE.\n * - **Required (`z.string()`)** — no \"no value\" state exists. NOT eligible: `null` must keep\n * failing validation, which is also what the industry guidance prescribes (a field that cannot be\n * deleted answers 400 rather than silently ignoring the instruction).\n * - **Defaulted (`.default('x')`)** — `isOptional()` reports TRUE for these because the *input* may\n * be omitted, but the *output* type is non-optional: the schema guarantees a value is always\n * present, and the READ path validates against that guarantee. Clearing one would persist an\n * absence the resource's own main schema rejects, turning the next read into a 500. NOT eligible,\n * and this is precisely why this predicate exists instead of reusing `isOptional()`.\n *\n * A field that ALREADY accepts null (authored `.nullable()` / `.nullish()`) is reported `false` —\n * not because it cannot be cleared, but because nothing needs adding: it accepts `null` on its own,\n * and re-wrapping would emit a redundant nullable in the generated JSON Schema / OpenAPI document.\n *\n * @param fieldSchema - the field as declared on the resource's main schema.\n * @returns `true` only when a nullable wrapper must be ADDED for the field to be clearable.\n */\nexport function fieldAdmitsAddedNullClear(fieldSchema: z.ZodTypeAny): boolean {\n // A default makes the OUTPUT non-optional — see the JSDoc above. Checked first because\n // `ZodDefault` wraps an inner schema that is frequently optional-looking.\n if (isZodDefault(fieldSchema)) return false;\n\n if (!declaresAbsenceAsAValidState(fieldSchema)) return false;\n\n // Already null-accepting (`.nullable()` / `.nullish()`): clearable without any addition.\n return !fieldSchema.safeParse(null).success;\n}\n\n/**\n * Does this field's declaration allow the value to be ABSENT (i.e. accept `undefined`)?\n *\n * Deliberately NOT `isOptional()`: that helper answers \"may the user omit this input?\", which is\n * true for `.default()` fields, whereas this answers \"may this field legitimately hold no value?\",\n * which is false for them. Merging the two is what would make a defaulted field clearable.\n */\nfunction declaresAbsenceAsAValidState(fieldSchema: z.ZodTypeAny): boolean {\n if (isZodDefault(fieldSchema)) return false;\n if (isZodOptional(fieldSchema)) return true;\n\n const type = getZodType(fieldSchema);\n if (type === 'nullable' || type === 'pipe' || type === 'readonly' || type === 'catch') {\n const innerSchema = getZodDefSchemaProperty(fieldSchema, 'innerType') ?? getZodDefSchemaProperty(fieldSchema, 'in');\n return innerSchema ? declaresAbsenceAsAValidState(innerSchema) : false;\n }\n\n return false;\n}\n\n\n// =============================================================================\n// ZOD TYPE DETECTION HELPERS\n//\n// Helper function to safely get the type from a Zod v4 schema\n// Supports both structures:\n// - Legacy: schema._zod.def.type\n// - Current: schema.def.type (or schema.type at root)\n// Type values are lowercase strings like \"object\", \"array\", \"string\", etc.\n// =============================================================================\n\nexport function getZodType(schema: z.ZodTypeAny): string | undefined {\n // Guard against null/undefined schemas\n if (!schema || typeof schema !== 'object') {\n return undefined;\n }\n\n const def = getZodDef(schema);\n if (def?.type) return def.type;\n\n // Fallback: check schema.type at root level\n if ('type' in schema && typeof (schema as unknown as Record<string, unknown>).type === 'string') {\n return (schema as unknown as Record<string, unknown>).type as string;\n }\n\n return undefined;\n}\n\n/**\n * Type guard to check if a schema has a specific type\n * Uses Zod v4's type system where types are lowercase strings\n */\nexport function hasZodType(schema: z.ZodTypeAny, type: string): boolean {\n return getZodType(schema) === type;\n}\n\nexport function isZodObject(schema: z.ZodTypeAny): schema is z.ZodObject<any> {\n return hasZodType(schema, 'object');\n}\n\nexport function isZodArray(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'array');\n}\n\n/**\n * The same array schema with a different ELEMENT, keeping everything else it carries.\n *\n * Use this instead of `z.array(newElement)` whenever an existing array is being rewritten.\n * A fresh `z.array()` is a brand-new schema that carries none of the original's own checks, so\n * every authored `.min()` / `.max()` / `.length()` / `.nonempty()` is silently dropped — the\n * rewritten schema still parses, just without the constraint the author declared. That is\n * invisible to types and to any test that only feeds it valid data.\n *\n * It cost real time to find: all FOUR DTO-boundary walkers (templatable-file stripping,\n * network-boundary coercion, backend-only stripping, summary-field extraction) rebuilt arrays this\n * way, so an authored array constraint never reached the schema the controller and the repository\n * validate against. `reset_to_defaults` depended on exactly such a constraint to reject a request\n * naming no preference block, and without it the route answered HTTP 200 having written nothing.\n *\n * Native `.clone()` re-instantiates from the schema's own definition, so checks, error maps and\n * metadata survive by construction rather than by a copy loop that the next Zod version could\n * outgrow.\n *\n * @param arraySchema - the array being rewritten. Returned untouched when it is not an array or\n * carries no element, so callers do not need to pre-check.\n * @param element - the replacement element schema.\n */\nexport function withArrayElement(arraySchema: z.ZodTypeAny, element: z.ZodTypeAny): z.ZodTypeAny {\n if (!isZodArray(arraySchema)) {\n return arraySchema;\n }\n\n const def = (arraySchema as unknown as { _zod?: { def?: Record<string, unknown> } })._zod?.def;\n if (!def) {\n return arraySchema;\n }\n\n return (arraySchema as unknown as { clone: (def: unknown) => z.ZodTypeAny }).clone({ ...def, element });\n}\n\nexport function isZodOptional(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'optional');\n}\n\nexport function isZodNullable(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'nullable');\n}\n\nexport function isZodDefault(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'default');\n}\n\nexport function isZodUnion(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'union');\n}\n\nexport function isZodIntersection(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'intersection');\n}\n\nexport function isZodLiteral(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'literal');\n}\n\nexport function isZodLazy(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'lazy');\n}\n\nexport function isZodTuple(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'tuple');\n}\n\nexport function isZodRecord(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'record');\n}\n\nexport function isZodSet(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'set');\n}\n\nexport function isZodPipe(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'pipe');\n}\n\nexport function isZodTransform(schema: z.ZodTypeAny): boolean {\n const type = getZodType(schema);\n if (type === 'transform') return true;\n // In Zod v4, `.transform()` returns a pipe schema whose output is a transform schema.\n if (type === 'pipe') {\n const outSchema = getZodDefSchemaProperty(schema, 'out');\n return outSchema ? getZodType(outSchema) === 'transform' : false;\n }\n return false;\n}\n\nexport function isZodCustom(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'custom');\n}\n\n\nexport function isArray(value: unknown): value is unknown[] {\n return Array.isArray(value);\n}\n\nexport function isZodTypeAny(value: unknown): value is z.ZodTypeAny {\n return value !== null &&\n value !== undefined &&\n typeof value === 'object' &&\n hasZodInternals(value);\n}\n\n/**\n * Check if a union is discriminated (has discriminator property)\n * In Zod v4, discriminated unions have type: \"union\" with a discriminator property\n */\nexport function isDiscriminatedUnion(schema: z.ZodTypeAny): boolean {\n if (!isZodUnion(schema)) return false;\n return getZodDefStringProperty(schema, 'discriminator') !== undefined;\n}\n\n/**\n * Check if a schema is optional (can be undefined)\n */\nexport function isOptional(schema: z.ZodTypeAny): boolean {\n const type = getZodType(schema);\n\n if (type === 'optional') return true;\n if (type === 'default') return true; // Has default, so not required from user\n\n if (type === 'nullable' || type === 'pipe' || type === 'readonly' || type === 'catch') {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType') ?? getZodDefSchemaProperty(schema, 'in');\n return innerSchema ? isOptional(innerSchema) : false;\n }\n\n return false;\n}\n\n/**\n * Check if a schema has refine/superRefine transformations\n * This triggers onChange validation mode\n */\nexport function hasRefine(schema: z.ZodTypeAny): boolean {\n const type = getZodType(schema);\n\n // Check for pipe with refinement effect\n if (type === 'pipe') {\n const outSchema = getZodDefSchemaProperty(schema, 'out');\n if (outSchema) {\n const outType = getZodType(outSchema);\n if (outType === 'custom') {\n // Custom type in pipe output usually indicates refinement\n return true;\n }\n }\n const inSchema = getZodDefSchemaProperty(schema, 'in');\n return inSchema ? hasRefine(inSchema) : false;\n }\n\n // Check for custom type (refine creates these)\n if (type === 'custom') {\n return true;\n }\n\n // Unwrap wrappers and check inner\n if (type === 'optional' || type === 'nullable' || type === 'default' || type === 'readonly' || type === 'catch') {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema ? hasRefine(innerSchema) : false;\n }\n\n return false;\n}\n\n\n// =============================================================================\n// SCHEMA TYPE DETECTION\n// =============================================================================\n\n/**\n * Get the schema type category for component selection.\n *\n * Important: RANGE schemas (created by z_range()) are detected by their\n * SCHEMA_METADATA.rangeConfig before checking for object type. This allows range schemas\n * to be rendered with appropriate range components instead of as composite objects.\n */\nexport function getSchemaType(schema: z.ZodTypeAny): FieldSchemaType {\n // Check for range schema FIRST (before object check)\n // Range schemas are z.object({from, to}) with SCHEMA_METADATA.rangeConfig\n // isRangeSchema and getRangeType now handle unwrapping internally\n if (isRangeSchema(schema)) {\n // Return specialized range type based on the range's value type\n const rangeType = getRangeType(schema);\n switch (rangeType) {\n case RangeType.NUMBER:\n return FieldSchemaType.RANGE_NUMBER;\n case RangeType.DATE:\n return FieldSchemaType.RANGE_DATE;\n case RangeType.DATETIME:\n return FieldSchemaType.RANGE_DATETIME;\n case RangeType.TIME:\n return FieldSchemaType.RANGE_TIME;\n case RangeType.BIGDECIMAL:\n return FieldSchemaType.RANGE_BIGDECIMAL;\n case RangeType.MONEY:\n return FieldSchemaType.RANGE_MONEY;\n default:\n // z_range() only accepts valid RangeType values, so this should never happen\n return FieldSchemaType.UNKNOWN;\n }\n }\n\n // Check for money schemas (created by z_money())\n // isMoneySchema now handles unwrapping internally\n if (isMoneySchema(schema)) {\n return FieldSchemaType.MONEY;\n }\n\n // Check for bigdecimal schemas (created by z_bigdecimal())\n // isBigDecimalSchema now handles unwrapping internally\n if (isBigDecimalSchema(schema)) {\n return FieldSchemaType.BIGDECIMAL;\n }\n\n // Check for code schemas (created by z_code())\n // isCodeSchema now handles unwrapping internally\n if (isCodeSchema(schema)) {\n return FieldSchemaType.CODE;\n }\n\n // Check for file schemas (created by z_file())\n // isFileSchema now handles unwrapping internally\n if (isFileSchema(schema)) {\n return FieldSchemaType.FILE;\n }\n\n // Check for duration schemas (created by z_duration())\n if (isDurationSchema(schema)) {\n return FieldSchemaType.DURATION;\n }\n\n // Check for phone schemas (created by z_phone())\n if (isPhoneSchema(schema)) {\n return FieldSchemaType.PHONE;\n }\n\n // Check for versioned foreign key schemas (created by z_foreignKeyVersioned())\n if (isVersionedForeignKeySchema(schema)) {\n return FieldSchemaType.VERSIONED_FOREIGN_KEY;\n }\n\n // Check for versioned object schemas (created by versioned())\n if (isVersionedObjectSchema(schema)) {\n return FieldSchemaType.VERSIONED_OBJECT;\n }\n\n const unwrapped = unwrapSchema(schema);\n const type = getZodType(unwrapped);\n\n switch (type) {\n case 'string': {\n // Check for datetime/time formats (z.iso.datetime(), z.iso.time())\n const format = getStringFormat(unwrapped);\n if (format === 'datetime') return FieldSchemaType.DATETIME;\n if (format === 'time') return FieldSchemaType.TIME;\n return FieldSchemaType.STRING;\n }\n case 'number':\n case 'int': return FieldSchemaType.NUMBER;\n case 'bigint': return FieldSchemaType.BIGINT;\n case 'boolean': return FieldSchemaType.BOOLEAN;\n case 'enum':\n return FieldSchemaType.ENUM;\n case 'literal': {\n // In Zod v4, literal values are stored in def.values as an array\n const values = getZodDefProperty(unwrapped, 'values') as unknown[] | undefined;\n const literalValue = values?.[0];\n if (literalValue === null || literalValue === undefined) {\n return FieldSchemaType.UNKNOWN;\n }\n // Infer type based on the value type\n switch (typeof literalValue) {\n case 'string':\n // String literals are treated as single-value enums (for select fields)\n return FieldSchemaType.ENUM;\n case 'number':\n case 'bigint':\n return FieldSchemaType.NUMBER;\n case 'boolean':\n return FieldSchemaType.BOOLEAN;\n default:\n return FieldSchemaType.UNKNOWN;\n }\n }\n case 'date': return FieldSchemaType.DATE;\n case 'object': return FieldSchemaType.OBJECT;\n case 'array': return FieldSchemaType.ARRAY;\n case 'set': return FieldSchemaType.SET;\n case 'tuple': return FieldSchemaType.TUPLE;\n case 'record': return FieldSchemaType.RECORD;\n case 'map': return FieldSchemaType.MAP;\n case 'union': {\n // For unions, try to infer type from options\n // If all options are enums, treat as ENUM (combined values)\n // Otherwise, use the type of the first option\n const options = getZodDefArrayProperty(unwrapped, 'options') ?? [];\n if (options.length === 0) return FieldSchemaType.UNKNOWN;\n\n // Check if all options are enums or string literals (treat as combined enum)\n const allEnumLike = options.every((opt: unknown) => {\n if (!isZodTypeAny(opt)) return false;\n const optType = getZodType(opt as z.ZodTypeAny);\n return optType === 'enum' || optType === 'literal';\n });\n\n if (allEnumLike) {\n return FieldSchemaType.ENUM;\n }\n\n // Otherwise, infer from the first option\n const firstOption = options[0];\n if (isZodTypeAny(firstOption)) {\n return getSchemaType(firstOption as z.ZodTypeAny);\n }\n\n return FieldSchemaType.UNKNOWN;\n }\n default: return FieldSchemaType.UNKNOWN;\n }\n}\n\n\n// =============================================================================\n// ZOD HELPER GETTER\n// =============================================================================\n\n\n/**\n * Get the type string from a Zod v4 schema's internal structure.\n * Returns undefined if schema is not a valid Zod 4 schema.\n */\nfunction getZodTypeInternal(schema: z.ZodTypeAny): string | undefined {\n if (!schema || typeof schema !== 'object') return undefined;\n\n const zodProp = (schema as any)._zod;\n if (!zodProp || typeof zodProp !== 'object') return undefined;\n\n const def = zodProp.def;\n if (!def || typeof def !== 'object') return undefined;\n\n return typeof def.type === 'string' ? def.type : undefined;\n}\n\n\n/**\n * Get the shape of a Zod object schema.\n *\n * IMPORTANT: This function only returns valid Zod schema instances, not definitions.\n * In Zod 4, `def.shape` contains JSON-serializable definitions, not schema instances\n * with methods like safeParse.\n *\n * Prefer using getObjectShape() which handles unwrapping and validation.\n */\nexport function getZodObjectShape(schema: z.ZodTypeAny): Record<string, z.ZodTypeAny> {\n if (!isZodObject(schema)) {\n return {};\n }\n\n // Use the improved getObjectShape which validates schema instances\n const shape = getObjectShape(schema);\n return shape ?? {};\n}\n\n/**\n * Field shape of an object schema OR a discriminated union, merged across ALL\n * variants. Unlike {@link getZodObjectShape} (which returns `{}` for a union),\n * this walks the union's variant options and merges their shapes, so callers that\n * need the full field set of a polymorphic resource — FK/ObjectId discovery,\n * field-access checks, etc. — see every variant's fields instead of nothing.\n *\n * For a field present in multiple variants the FIRST occurrence wins (variants\n * share the common base fields, so the common shape is identical across them).\n * Returns `{}` for non-object, non-union schemas.\n */\nexport function getMergedObjectOrUnionShape(schema: z.ZodTypeAny): Record<string, z.ZodTypeAny> {\n if (isZodObject(schema)) {\n return getZodObjectShape(schema);\n }\n if (isDiscriminatedUnion(schema)) {\n const options = getZodDefArrayProperty(schema, 'options') as z.ZodTypeAny[] | undefined;\n if (!options) {\n return {};\n }\n const merged: Record<string, z.ZodTypeAny> = {};\n for (const option of options) {\n const optionShape = isZodObject(option) ? getZodObjectShape(option) : {};\n for (const [fieldName, fieldSchema] of Object.entries(optionShape)) {\n if (!(fieldName in merged)) {\n merged[fieldName] = fieldSchema;\n }\n }\n }\n return merged;\n }\n return {};\n}\n\n/**\n * Resolve the ONE variant of a discriminated union that a given value belongs to.\n *\n * Distinct from {@link getMergedObjectOrUnionShape}, and the difference is the point: merging every\n * variant answers \"what fields COULD this union carry\", which is what a schema-only caller (a\n * validator, a drift check) needs. A caller holding a VALUE can do better — the discriminator says\n * which variant this is, so the shape can be exactly that variant's, with no fields belonging to\n * the alternatives the value did not choose.\n *\n * Returns `null` when the schema is not a discriminated union, when the value carries no\n * discriminator, or when no variant matches it — all three are \"this caller cannot narrow\", and a\n * caller that renders should say nothing rather than guess a variant.\n */\nexport function resolveDiscriminatedUnionVariant(\n schema: z.ZodTypeAny,\n value: unknown,\n): z.ZodTypeAny | null {\n if (!isDiscriminatedUnion(schema)) return null;\n if (typeof value !== 'object' || value === null) return null;\n\n const discriminator = getZodDefStringProperty(schema, 'discriminator');\n if (!discriminator) return null;\n\n const discriminatorValue = (value as Record<string, unknown>)[discriminator];\n if (discriminatorValue === undefined) return null;\n\n const options = (getZodDefArrayProperty(schema, 'options') ?? []) as z.ZodTypeAny[];\n for (const option of options) {\n if (!isZodObject(option)) continue;\n const optionShape = getZodObjectShape(option);\n const discriminatorSchema = optionShape[discriminator];\n if (!discriminatorSchema) continue;\n /*\n * A variant's discriminator is a LITERAL (`z.literal(ICPArchetype.LEGAL_ENTITY)`), whose value\n * Zod 4 stores as an array under `values` — the same shape `getEnumValues` reads for the\n * literal case. Comparing against that is what makes the match exact rather than structural.\n */\n const literalValues = getZodDefArrayProperty(discriminatorSchema, 'values') ?? [];\n if (literalValues.includes(discriminatorValue)) return option;\n }\n return null;\n}\n\nexport function getZodDef(schema: z.ZodTypeAny): { type: string; [key: string]: unknown } | undefined {\n if (!hasZodInternals(schema)) return undefined;\n\n // First check legacy structure: schema._zod.def\n if ('_zod' in schema) {\n const zodProp = (schema as unknown as Record<string, unknown>)._zod;\n if (typeof zodProp === 'object' && zodProp !== null && 'def' in zodProp) {\n return (zodProp as { def: { type: string; [key: string]: unknown } }).def;\n }\n }\n\n // Use current structure: schema.def directly\n return (schema as unknown as { def: { type: string; [key: string]: unknown } }).def;\n}\n\nexport function getZodDefSchemaProperty(schema: z.ZodTypeAny, property: string): z.ZodTypeAny | undefined {\n const def = getZodDef(schema);\n const value = def?.[property];\n return isZodTypeAny(value) ? value : undefined;\n}\n\nexport function getZodDefArrayProperty(schema: z.ZodTypeAny, property: string): unknown[] | undefined {\n const def = getZodDef(schema);\n const value = def?.[property];\n return isArray(value) ? value : undefined;\n}\n\nexport function getZodDefStringProperty(schema: z.ZodTypeAny, property: string): string | undefined {\n const def = getZodDef(schema);\n const value = def?.[property];\n return typeof value === 'string' ? value : undefined;\n}\n\nexport function getZodDefFunctionProperty(schema: z.ZodTypeAny, property: string): (() => z.ZodTypeAny) | undefined {\n const def = getZodDef(schema);\n const value = def?.[property];\n if (typeof value === 'function') {\n return value as () => z.ZodTypeAny;\n }\n return undefined;\n}\n\nexport function getZodDefProperty(schema: z.ZodTypeAny, property: string): unknown {\n const def = getZodDef(schema);\n return def?.[property];\n}\n\n/**\n * Get the inner schema from a pipe type (for transforms/refinements)\n * In Zod v4, pipe types have def.in and def.out\n * For most cases, we want def.in (the input schema before transformation)\n */\nexport function getPipeInputSchema(schema: z.ZodTypeAny): z.ZodTypeAny | undefined {\n if (!isZodPipe(schema)) return undefined;\n return getZodDefSchemaProperty(schema, 'in');\n}\n\n\n\n/**\n * Get all custom field metadata from a schema, traversing through wrapper types\n * (optional, nullable, default, pipe, readonly, catch, array, effects).\n * Always returns an object (never undefined) — empty `{}` if no metadata found.\n *\n * Delegates to the unified getMetadataRecursive from zod.module-override.ts.\n */\nexport function getCustomFieldMetadata(schema: z.ZodTypeAny): CustomFieldMetadata {\n if (!schema) {\n return {};\n }\n return getMetadataRecursive(schema) ?? {};\n}\n\n\n// =============================================================================\n// GENERIC {primitive}UI CROSS-CUTTING READERS\n// =============================================================================\n\n/**\n * All `*_UI` decorator keys. Used by cross-cutting readers to extract\n * base params (`edit`, `display`) from whichever primitive UI decorator\n * is present on a schema, without needing to know the concrete primitive.\n */\nconst UI_DECORATOR_KEYS = [\n ZodDecorator.BOOLEAN_UI, ZodDecorator.STRING_UI, ZodDecorator.NUMBER_UI,\n ZodDecorator.ENUM_UI, ZodDecorator.DATE_UI, ZodDecorator.DATETIME_UI,\n ZodDecorator.TIME_UI, ZodDecorator.MONEY_UI, ZodDecorator.CODE_UI,\n ZodDecorator.FILE_UI, ZodDecorator.DURATION_UI, ZodDecorator.PHONE_UI,\n ZodDecorator.BIGDECIMAL_UI, ZodDecorator.FOREIGN_KEY_UI,\n ZodDecorator.ARRAY_UI, ZodDecorator.OBJECT_UI,\n] as const;\n\n/**\n * Extract the edit-context base params from whichever `{primitive}UI` decorator\n * is present on the schema. Works generically because all `*UIEditParams`\n * extend `PrimitiveUIBaseEditParams`.\n *\n * Use this for cross-cutting concerns (validationMode, autosave, tooltip, etc.)\n * where the consumer doesn't know the concrete primitive type.\n */\nexport function getFieldUIEditConfig(schema: z.ZodTypeAny): PrimitiveUIBaseEditParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n for (const key of UI_DECORATOR_KEYS) {\n const params = metadata[key];\n if (params && typeof params === 'object' && 'edit' in params) {\n return (params as PrimitiveUIBaseParams).edit;\n }\n }\n return undefined;\n}\n\n/**\n * Extract the display-context base params from whichever `{primitive}UI` decorator\n * is present on the schema. Works generically because all `*UIDisplayParams`\n * extend `PrimitiveUIBaseDisplayParams`.\n *\n * Use this for cross-cutting concerns (tooltip, inlineEditable, etc.)\n * where the consumer doesn't know the concrete primitive type.\n */\nexport function getFieldUIDisplayConfig(schema: z.ZodTypeAny): PrimitiveUIBaseDisplayParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n for (const key of UI_DECORATOR_KEYS) {\n const params = metadata[key];\n if (params && typeof params === 'object' && 'display' in params) {\n return (params as PrimitiveUIBaseParams).display;\n }\n }\n return undefined;\n}\n\n/**\n * Display-context base params resolved for the SUMMARY context (cards, list\n * items, FK reference previews): `summaryOverride` merged over `display`,\n * key-by-key. A field with no `summaryOverride` behaves exactly as in the\n * regular display context.\n *\n * Summary renderers (the `ResourceSummaryDisplayer` pipeline) call this instead\n * of {@link getFieldUIDisplayConfig}; everything else keeps reading the plain\n * display params. The same merge convention applies to the primitive-specific\n * params (`getEnumUI(s)` consumers merge `{...ui.display, ...ui.summaryOverride}`\n * when rendering a summary surface).\n */\nexport function getFieldUISummaryDisplayConfig(schema: z.ZodTypeAny): PrimitiveUIBaseDisplayParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n for (const key of UI_DECORATOR_KEYS) {\n const params = metadata[key];\n if (params && typeof params === 'object' && ('display' in params || 'summaryOverride' in params)) {\n const typed = params as PrimitiveUIBaseParams;\n if (!typed.display && !typed.summaryOverride) return undefined;\n return { ...typed.display, ...typed.summaryOverride };\n }\n }\n return undefined;\n}\n\n// =============================================================================\n// TOOLTIP DECORATOR UTILITIES\n// =============================================================================\n\n/**\n * Check if a field should show a tooltip in display mode.\n * Reads from `{primitive}UI.display.tooltip` (boolean flag).\n * The actual tooltip text comes from the i18n label system, NOT from the decorator.\n */\nexport function hasTooltipForDisplay(schema: z.ZodTypeAny): boolean {\n return getFieldUIDisplayConfig(schema)?.tooltip === true;\n}\n\n/**\n * Check if a field should show a tooltip in edit mode.\n * Reads from `{primitive}UI.edit.tooltip` (boolean flag).\n * The actual tooltip text comes from the i18n label system, NOT from the decorator.\n */\nexport function hasTooltipForEdit(schema: z.ZodTypeAny): boolean {\n return getFieldUIEditConfig(schema)?.tooltip === true;\n}\n\n\n/**\n * Check if a field is marked as draft-relaxed (validation is relaxed in draft mode).\n *\n * @param schema - Zod schema to check\n * @returns true if the field is draft-relaxed\n *\n * @example\n * if (isDraftRelaxed(schema) && isDraftMode) {\n * // Skip strict validation for this field\n * }\n */\nexport function isDraftRelaxed(schema: z.ZodTypeAny): boolean {\n const metadata = getCustomFieldMetadata(schema);\n return metadata[ZodDecorator.IS_DRAFT_RELAXED] === true;\n}\n\n\n/**\n * FIX-P5-H1: Get showWhen parameters from a field schema.\n * Returns the conditional visibility configuration if present.\n *\n * @param schema - The field schema to get showWhen params from\n * @returns ShowWhenParams if decorator was applied, undefined otherwise\n *\n * @example\n * const showWhenParams = getShowWhenParams(fieldSchema);\n * if (showWhenParams) {\n * // Evaluate visibility based on conditions\n * const isVisible = evaluateShowWhenConditions(showWhenParams, formValues);\n * }\n */\nexport function getShowWhenParams(schema: z.ZodTypeAny): ShowWhenParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n return metadata[ZodDecorator.SHOW_WHEN] as ShowWhenParams | undefined;\n}\n\n\n// =============================================================================\n// Enhanced Primitive Helpers\n// =============================================================================\n\n\n// ------------------------------------------------------------\n// STRING SCHEMA UTILITIES\n// ------------------------------------------------------------\n\n\n/**\n * String format types detected from schema\n */\nexport type StringFormat = 'email' | 'url' | 'uuid' | 'cuid' | 'cuid2' | 'ulid' | 'regex' | 'datetime' | 'time' | 'ip' | null;\n\n\n/**\n * Get string format from schema checks (email, url, etc.)\n */\nexport function getStringFormat(schema: z.ZodTypeAny): StringFormat {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'string') {\n return null;\n }\n\n const checks = getZodDefArrayProperty(unwrapped, 'checks') ?? [];\n\n for (const check of checks) {\n if (typeof check !== 'object' || check === null) continue;\n const kind = (check as Record<string, unknown>).kind;\n\n switch (kind) {\n case 'email': return 'email';\n case 'url': return 'url';\n case 'uuid': return 'uuid';\n case 'cuid': return 'cuid';\n case 'cuid2': return 'cuid2';\n case 'ulid': return 'ulid';\n case 'regex': return 'regex';\n case 'datetime': return 'datetime';\n case 'time': return 'time';\n case 'ip': return 'ip';\n }\n }\n\n return null;\n}\n\n/**\n * Get min/max length constraints from string schema\n */\nexport function getStringConstraints(schema: z.ZodTypeAny): { minLength?: number; maxLength?: number } {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'string') {\n return {};\n }\n\n const checks = getZodDefArrayProperty(unwrapped, 'checks') ?? [];\n const result: { minLength?: number; maxLength?: number } = {};\n\n for (const check of checks) {\n if (typeof check !== 'object' || check === null) continue;\n const kind = (check as Record<string, unknown>).kind;\n const value = (check as Record<string, unknown>).value;\n\n if (typeof value !== 'number') continue;\n\n if (kind === 'min') {\n result.minLength = value;\n }\n if (kind === 'max') {\n result.maxLength = value;\n }\n if (kind === 'length') {\n result.minLength = value;\n result.maxLength = value;\n }\n }\n\n return result;\n}\n\n\n// ------------------------------------------------------------\n// NUMBER SCHEMA UTILITIES\n// ------------------------------------------------------------\n\n/**\n * Get min/max value constraints from number schema\n */\nexport function getNumberConstraints(schema: z.ZodTypeAny): {\n min?: number;\n max?: number;\n step?: number;\n isInt?: boolean;\n} {\n const unwrapped = unwrapSchema(schema);\n const type = getZodType(unwrapped);\n\n if (type !== 'number' && type !== 'int') {\n return {};\n }\n\n const checks = getZodDefArrayProperty(unwrapped, 'checks') ?? [];\n const result: { min?: number; max?: number; step?: number; isInt?: boolean } = {};\n\n // int type in Zod v4\n if (type === 'int') {\n result.isInt = true;\n result.step = 1;\n }\n\n for (const check of checks) {\n if (typeof check !== 'object' || check === null) continue;\n const kind = (check as Record<string, unknown>).kind;\n const value = (check as Record<string, unknown>).value;\n\n if (kind === 'min' && typeof value === 'number') {\n result.min = value;\n }\n if (kind === 'max' && typeof value === 'number') {\n result.max = value;\n }\n if (kind === 'int') {\n result.isInt = true;\n result.step = 1;\n }\n if (kind === 'multipleOf' && typeof value === 'number') {\n result.step = value;\n }\n }\n\n return result;\n}\n\n// ------------------------------------------------------------\n// ENUM SCHEMA UTILITIES\n// ------------------------------------------------------------\n\n/**\n * Extract enum values from z.enum (Zod 4)\n * In Zod 4, both z.enum() and z.enum() create schemas with type 'enum'\n * - z.enum(['a', 'b', 'c']) - def.entries is an object map (e.g. { a: 'a', b: 'b' })\n * - z.enum(TypeScriptEnum) / z.enum(TypeScriptEnum) - def.entries is the enum object map\n */\nexport function getEnumValues(schema: z.ZodTypeAny): string[] {\n const unwrapped = unwrapSchema(schema);\n const type = getZodType(unwrapped);\n\n // Handle string literal types (z.literal(\"value\")) - return single value as array\n // Only string literals are treated as enums (for select fields)\n // In Zod v4, literal values are stored in def.values as an array\n if (type === 'literal') {\n const values = getZodDefProperty(unwrapped, 'values') as unknown[] | undefined;\n const literalValue = values?.[0];\n // Only string literals are valid enum values\n if (typeof literalValue === 'string') {\n return [literalValue];\n }\n return [];\n }\n\n // Handle union types - combine enum values from all options\n // This handles cases like z.union([z.enum(A), z.enum(B)])\n if (type === 'union') {\n const options = getZodDefArrayProperty(unwrapped, 'options') ?? [];\n const allValues: string[] = [];\n const seenValues = new Set<string>();\n\n for (const opt of options) {\n if (isZodTypeAny(opt)) {\n const optValues = getEnumValues(opt as z.ZodTypeAny);\n for (const val of optValues) {\n if (!seenValues.has(val)) {\n seenValues.add(val);\n allValues.push(val);\n }\n }\n }\n }\n\n return allValues;\n }\n\n if (type !== 'enum') {\n return [];\n }\n\n // In Zod v4.1.x, enum values are stored in def.entries (object map).\n const entries = getZodDefProperty(unwrapped, 'entries');\n if (!entries || typeof entries !== 'object') return [];\n\n const values: string[] = [];\n for (const key of Object.keys(entries as Record<string, unknown>)) {\n const value = (entries as Record<string, unknown>)[key];\n // For numeric enums, TypeScript creates reverse mappings: entries[\"0\"] = \"A\", entries[\"A\"] = 0\n if (typeof value === 'string') {\n // Skip reverse mapping values where key is numeric (e.g., \"0\" -> \"A\")\n if (!Number.isNaN(Number(key))) continue;\n values.push(value);\n } else if (typeof value === 'number') {\n values.push(String(value));\n }\n }\n return values;\n}\n\n\n// ------------------------------------------------------------\n// OBJECT SCHEMA UTILITIES\n// ------------------------------------------------------------\n\n/**\n * Validates that an object contains actual Zod schema instances (not definitions).\n * A valid Zod 4 schema instance has either:\n * - _zod property (internal structure)\n * - safeParse method (public API)\n */\nfunction isValidSchemaShape(shape: Record<string, unknown>): shape is Record<string, z.ZodTypeAny> {\n // Skip $-prefixed keys (Zod v4 internals like $id, $brand) when picking\n // the representative entry to validate — their values are primitives, not schemas.\n const keys = Object.keys(shape);\n const firstUserKey = keys.find(k => !k.startsWith('$'));\n if (!firstUserKey) return keys.length === 0; // Only internal keys or empty → valid if empty\n\n const firstValue = shape[firstUserKey];\n if (!firstValue || typeof firstValue !== 'object') return false;\n\n const hasZodInternals = '_zod' in firstValue;\n const hasSafeParse = 'safeParse' in firstValue && typeof (firstValue as Record<string, unknown>).safeParse === 'function';\n\n return hasZodInternals || hasSafeParse;\n}\n\ndeclare const console: { warn(...args: unknown[]): void };\n\n/**\n * Strips Zod v4 internal properties (e.g. $id, $brand) from a shape record.\n * These are runtime metadata, not user-defined fields, and leak into\n * Object.entries() when iterating the raw .shape object.\n *\n * Uses warn-once to avoid log flooding (same pattern as _warnedStorageProviders in zod-file.ts).\n * This is a low-level shared lib used by both frontend and backend — console.warn\n * is the only available logging primitive here (no injected logger).\n */\nconst _warnedInternalKeys = new Set<string>();\n\nfunction stripZodInternalKeys(shape: Record<string, z.ZodTypeAny>): Record<string, z.ZodTypeAny> {\n const keys = Object.keys(shape);\n const internalKeys = keys.filter(k => k.startsWith('$'));\n if (internalKeys.length === 0) return shape;\n\n const warnKey = internalKeys.sort().join(',');\n if (!_warnedInternalKeys.has(warnKey)) {\n _warnedInternalKeys.add(warnKey);\n console.warn(\n `[getObjectShape] Stripping Zod internal keys from shape: [${internalKeys.join(', ')}]. ` +\n `If a legitimate user-defined field starts with '$', this filter is incorrect. ` +\n `Stripped keys had values: ${internalKeys.map(k => `${k}=${typeof shape[k] === 'object' ? 'object' : shape[k]}`).join(', ')}`\n );\n }\n\n const clean: Record<string, z.ZodTypeAny> = {};\n for (const k of keys) {\n if (!k.startsWith('$')) clean[k] = shape[k];\n }\n return clean;\n}\n\n/**\n * Get the shape of an object schema.\n *\n * IMPORTANT: In Zod 4, `def.shape` contains schema DEFINITIONS (JSON-serializable),\n * NOT schema instances with methods. This function validates that returned shapes\n * contain actual Zod schema instances.\n *\n * If the schema is wrapped (e.g., with .default()), it will be unwrapped first.\n */\n/**\n * Resolve ONE field's declared schema from an object-like root, seeing through a discriminated\n * union.\n *\n * `getObjectShape()` deliberately returns `null` for a union, which is correct for its own contract\n * but useless to a caller that only needs to ask a question about a single named field. Polymorphic\n * resources (`createSchemaFamily` output) present exactly that shape, so a caller using\n * `getObjectShape()` alone silently answers \"field unknown\" for every field of every polymorphic\n * resource — the failure mode that once left polymorphic form fields unlabelled.\n *\n * Union handling returns the FIRST variant that declares the name. Variants of one resource family\n * share a field's declaration for any field they have in common, so the first match is\n * representative; a caller needing per-variant precision must narrow the union itself first.\n *\n * @param schema - object, or discriminated union of objects (wrappers are unwrapped).\n * @param fieldName - top-level field name.\n * @returns the field's declared schema, or `undefined` when no variant declares it.\n */\nexport function getObjectLikeFieldSchema(schema: z.ZodTypeAny, fieldName: string): z.ZodTypeAny | undefined {\n const directShape = getObjectShape(schema);\n if (directShape) return directShape[fieldName];\n\n const unwrapped = unwrapSchema(schema);\n if (!isZodUnion(unwrapped)) return undefined;\n\n const options = getZodDefArrayProperty(unwrapped, 'options') ?? [];\n for (const option of options) {\n const optionShape = getObjectShape(option as z.ZodTypeAny);\n const fieldSchema = optionShape?.[fieldName];\n if (fieldSchema) return fieldSchema;\n }\n\n return undefined;\n}\n\nexport function getObjectShape(schema: z.ZodTypeAny): Record<string, z.ZodTypeAny> | null {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'object') {\n return null;\n }\n\n // Try public .shape property - this should contain actual schema instances\n if ('shape' in unwrapped && typeof unwrapped.shape === 'object' && unwrapped.shape !== null) {\n const shape = unwrapped.shape as Record<string, unknown>;\n\n // Validate that the shape contains actual Zod schemas, not definitions\n if (isValidSchemaShape(shape)) {\n return stripZodInternalKeys(shape as Record<string, z.ZodTypeAny>);\n }\n // Shape exists but contains corrupted definitions - will be caught by fail-fast below\n }\n\n // Try accessing shape through _zod internals (Zod 4 structure)\n // In some Zod 4 versions, _zod.def.shape might still contain actual schema instances\n if ('_zod' in unwrapped) {\n const zodInternals = (unwrapped as unknown as { _zod: { def?: { shape?: Record<string, unknown> } } })._zod;\n if (zodInternals?.def?.shape && typeof zodInternals.def.shape === 'object') {\n const shape = zodInternals.def.shape;\n\n // Validate that it contains actual schema instances\n if (isValidSchemaShape(shape)) {\n return stripZodInternalKeys(shape as Record<string, z.ZodTypeAny>);\n }\n }\n }\n\n // FAIL-FAST: Do NOT return corrupted schemas silently\n // Throw with diagnostic info to identify the corruption source\n if ('shape' in unwrapped && typeof unwrapped.shape === 'object' && unwrapped.shape !== null) {\n const shape = unwrapped.shape as Record<string, unknown>;\n const firstKey = Object.keys(shape)[0];\n const firstValue = shape[firstKey];\n const firstValueKeys = firstValue && typeof firstValue === 'object'\n ? Object.keys(firstValue as object).slice(0, 10).join(', ')\n : 'N/A';\n\n throw new Error(\n `[getObjectShape] Schema shape contains corrupted objects (not valid Zod schemas). ` +\n `First field \"${firstKey}\" is missing safeParse method. ` +\n `Keys on corrupted object: [${firstValueKeys}]. ` +\n `This usually means the schema was JSON.stringify/parsed or incorrectly cloned.`\n );\n }\n\n // Also check _zod.def.shape - same fail-fast approach\n if ('_zod' in unwrapped) {\n const zodInternals = (unwrapped as unknown as { _zod: { def?: { shape?: Record<string, unknown> } } })._zod;\n if (zodInternals?.def?.shape && typeof zodInternals.def.shape === 'object') {\n const shape = zodInternals.def.shape;\n const firstKey = Object.keys(shape)[0];\n const firstValue = shape[firstKey];\n const firstValueKeys = firstValue && typeof firstValue === 'object'\n ? Object.keys(firstValue as object).slice(0, 10).join(', ')\n : 'N/A';\n\n throw new Error(\n `[getObjectShape] _zod.def.shape contains corrupted objects (not valid Zod schemas). ` +\n `First field \"${firstKey}\" is missing safeParse. ` +\n `Keys: [${firstValueKeys}]. ` +\n `This usually means the schema was JSON.stringify/parsed or incorrectly cloned.`\n );\n }\n }\n\n return null;\n}\n\n/**\n * Get the keys of an object schema shape\n */\nexport function getObjectKeys(schema: z.ZodTypeAny): string[] {\n const shape = getObjectShape(schema);\n return shape ? Object.keys(shape) : [];\n}\n\n/**\n * Extract all flattened paths from a Zod schema.\n * Recursively traverses object schemas to build dot-notation paths (e.g., 'field.nestedField').\n * Handles optional, nullable, array, and union types.\n *\n * @param zodSchema - The Zod schema to extract paths from\n * @param prefix - Current path prefix (used for recursion)\n * @param schemaDepthCounters - Map to track depth per schema instance (prevents infinite recursion)\n * @param maxDepthPerSchema - Maximum depth to traverse per schema instance (default: 3)\n * @returns Array of flattened dot-notation paths\n */\nexport function extractFlattenedPathsFromZodSchema(\n zodSchema: z.ZodTypeAny,\n prefix: string = '',\n schemaDepthCounters: Map<any, number> = new Map(),\n maxDepthPerSchema: number = 3\n): string[] {\n const paths: string[] = [];\n\n if (!zodSchema) {\n return paths;\n }\n\n // Check depth for this specific schema instance to prevent infinite recursion\n const currentDepth = schemaDepthCounters.get(zodSchema) || 0;\n if (currentDepth >= maxDepthPerSchema) {\n return paths;\n }\n\n // Increment depth counter for this schema\n schemaDepthCounters.set(zodSchema, currentDepth + 1);\n\n try {\n const zodType = getZodType(zodSchema);\n\n switch (zodType) {\n case 'object': {\n // Extract shape from zod object using public API\n const shape = getZodObjectShape(zodSchema);\n\n Object.entries(shape).forEach(([fieldName, fieldSchema]) => {\n const currentPath = prefix ? `${prefix}.${fieldName}` : fieldName;\n\n // Add the current path\n paths.push(currentPath);\n\n // Recursively process nested objects\n const nestedPaths = extractFlattenedPathsFromZodSchema(\n fieldSchema as z.ZodTypeAny,\n currentPath,\n new Map(schemaDepthCounters) // Pass a copy to avoid shared state issues\n );\n paths.push(...nestedPaths);\n });\n break;\n }\n\n case 'optional': {\n // Process the inner type for optional fields\n const innerType = getZodDefSchemaProperty(zodSchema, 'innerType');\n if (innerType) {\n const innerPaths = extractFlattenedPathsFromZodSchema(\n innerType,\n prefix,\n new Map(schemaDepthCounters)\n );\n paths.push(...innerPaths);\n }\n break;\n }\n\n case 'nullable': {\n // Process the inner type for nullable fields\n const innerType = getZodDefSchemaProperty(zodSchema, 'innerType');\n if (innerType) {\n const innerPaths = extractFlattenedPathsFromZodSchema(\n innerType,\n prefix,\n new Map(schemaDepthCounters)\n );\n paths.push(...innerPaths);\n }\n break;\n }\n\n case 'array': {\n // For arrays, extract paths from the element type\n // This allows finding nested fields in array elements (e.g., \"items.organizationId\")\n const element = getZodDefSchemaProperty(zodSchema, 'element');\n if (element) {\n const elementPaths = extractFlattenedPathsFromZodSchema(\n element,\n prefix,\n new Map(schemaDepthCounters)\n );\n paths.push(...elementPaths);\n }\n break;\n }\n\n case 'union': {\n // For unions, try to extract paths from all possible schemas\n const options = getZodDefArrayProperty(zodSchema, 'options') || [];\n options.forEach((option: unknown) => {\n if (option && typeof option === 'object' && hasZodInternals(option)) {\n const unionPaths = extractFlattenedPathsFromZodSchema(\n option as unknown as z.ZodTypeAny,\n prefix,\n new Map(schemaDepthCounters)\n );\n paths.push(...unionPaths);\n }\n });\n break;\n }\n\n default: {\n // For primitive types (string, number, boolean, etc.), no nested paths\n break;\n }\n }\n } catch (error) {\n // Silently handle errors - return paths collected so far\n }\n\n // Decrement depth counter when done processing this schema\n schemaDepthCounters.set(zodSchema, currentDepth);\n return paths;\n}\n\n// ------------------------------------------------------------\n// ARRAY SCHEMA UTILITIES\n// ------------------------------------------------------------\n\n/**\n * Get the item schema from an array schema\n */\nexport function getArrayItemSchema(schema: z.ZodTypeAny): z.ZodTypeAny | null {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'array') {\n return null;\n }\n\n const element = getZodDefSchemaProperty(unwrapped, 'element');\n return element ?? null;\n}\n\n/**\n * Get min/max constraints for array\n */\nexport function getArrayConstraints(schema: z.ZodTypeAny): { minLength?: number; maxLength?: number } {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'array') {\n return {};\n }\n\n const result: { minLength?: number; maxLength?: number } = {};\n\n const minLength = getZodDefProperty(unwrapped, 'minLength');\n const maxLength = getZodDefProperty(unwrapped, 'maxLength');\n\n if (minLength && typeof minLength === 'object' && 'value' in minLength) {\n const value = (minLength as Record<string, unknown>).value;\n if (typeof value === 'number') result.minLength = value;\n }\n if (maxLength && typeof maxLength === 'object' && 'value' in maxLength) {\n const value = (maxLength as Record<string, unknown>).value;\n if (typeof value === 'number') result.maxLength = value;\n }\n\n return result;\n}\n\n// ------------------------------------------------------------\n// RECORD/MAP SCHEMA UTILITIES\n// ------------------------------------------------------------\n\n/**\n * Get the value schema from a record schema\n */\nexport function getRecordValueSchema(schema: z.ZodTypeAny): z.ZodTypeAny | null {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'record') {\n return null;\n }\n\n const valueSchema = getZodDefSchemaProperty(unwrapped, 'valueType');\n return valueSchema ?? null;\n}\n\n/**\n * Get the key and value schemas from a map schema\n */\nexport function getMapSchemas(schema: z.ZodTypeAny): { keySchema: z.ZodTypeAny; valueSchema: z.ZodTypeAny } | null {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'map') {\n return null;\n }\n\n const keySchema = getZodDefSchemaProperty(unwrapped, 'keyType');\n const valueSchema = getZodDefSchemaProperty(unwrapped, 'valueType');\n\n if (keySchema && valueSchema) {\n return { keySchema, valueSchema };\n }\n\n return null;\n}\n\n// ------------------------------------------------------------\n// DEFAULT VALUE UTILITIES\n// ------------------------------------------------------------\n\n/**\n * Get the default value from a schema if it has one\n */\nexport function getDefaultValue(schema: z.ZodTypeAny): unknown | undefined {\n const type = getZodType(schema);\n\n if (type === 'default') {\n const defaultValue = getZodDefProperty(schema, 'defaultValue');\n if (typeof defaultValue === 'function') {\n return defaultValue();\n }\n return defaultValue;\n }\n\n if (type === 'optional' || type === 'nullable') {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema ? getDefaultValue(innerSchema) : undefined;\n }\n\n return undefined;\n}\n\n\n// =============================================================================\n// DB related\n// =============================================================================\n\nexport function isDBIndexed(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.IS_DB_INDEXED);\n}\n\n/** @see isForeignKeyField — alias for backward compatibility */\nexport function isForeignKey(schema: z.ZodTypeAny): boolean {\n return isForeignKeyField(schema);\n}\n\n/** @see isUniqueField — alias for backward compatibility */\nexport function isUnique(schema: z.ZodTypeAny): boolean {\n return isUniqueField(schema);\n}\n\n/** @see getUniqueFieldParams — alias for backward compatibility */\nexport function getUniqueParams(schema: z.ZodTypeAny): UniqueFieldParams | undefined {\n return getUniqueFieldParams(schema);\n}\n\n/**\n * Check if a field is a primary key.\n * Primary keys are automatically: excludeFromCreate, isHidden, isUnique, isDBIndexed\n * @see isPrimaryKeyField — alias for backward compatibility\n */\nexport function isPrimaryKey(schema: z.ZodTypeAny): boolean {\n return isPrimaryKeyField(schema);\n}\n\n/**\n * Check if a field has a TTL (Time To Live) decorator.\n * TTL fields are used for MongoDB document expiration.\n */\nexport function hasTtl(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.TTL);\n}\n\n/**\n * Get TTL field params from a schema.\n * Returns undefined if the schema is not a TTL field.\n */\nexport function getTtlParams(schema: z.ZodTypeAny): TtlFieldParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n return metadata[ZodDecorator.TTL];\n}\n\n// =============================================================================\n// DECORATOR READER FUNCTIONS (using getMetadataRecursive — recursive unwrapping)\n// These handle .optional(), .nullable(), .default(), .refine(), array wrappers etc.\n// =============================================================================\n\n/**\n * Get the structural FK params (polymorphicVariants) from `IS_FOREIGN_KEY`.\n * Returns undefined if the schema is not a foreign key.\n */\nexport function getForeignKeyParams(schema: z.ZodTypeAny): ForeignKeyStructuralParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_FOREIGN_KEY];\n\n if (value === undefined) return undefined;\n if (value === true) return {};\n\n return value as ForeignKeyStructuralParams;\n}\n\n/**\n * Get FK UI display params from `FOREIGN_KEY_UI.display`. Returns mode, linkable, displayPresetOverride.\n *\n * When the FK exists but authors no explicit `display` config, `mode` falls back to\n * {@link DEFAULT_FOREIGN_KEY_DISPLAY_MODE} — the single source for that default. Do not\n * restate a `ForeignKeyDisplayMode` member here: a second declaration of the\n * default is how this surface and the display preset came to disagree.\n */\nexport function getForeignKeyUIDisplay(schema: z.ZodTypeAny): ForeignKeyUIDisplayParams | undefined {\n if (!isForeignKeyField(schema)) return undefined;\n\n const metadata = getCustomFieldMetadata(schema);\n const uiParams = metadata[ZodDecorator.FOREIGN_KEY_UI] as ForeignKeyUIParams | undefined;\n const display = uiParams?.display;\n\n return { mode: DEFAULT_FOREIGN_KEY_DISPLAY_MODE, ...display };\n}\n\n/**\n * Get the polymorphic variants from a foreign key field.\n * Returns the array of PolymorphicFkVariant if the FK is polymorphic, or undefined.\n */\nexport function getPolymorphicFkVariants(schema: z.ZodTypeAny): PolymorphicFkVariant[] | undefined {\n const params = getForeignKeyParams(schema);\n return params?.polymorphicVariants;\n}\n\n/**\n * Resolve the per-record DISCRIMINATED polymorphic FK declaration, if any.\n *\n * Returns `{ discriminatorField, variants }` only when the FK is a single\n * SHARED field pointing at a polymorphic branch group — i.e. BOTH a\n * `polymorphicDiscriminatorField` AND at least one `polymorphicVariants` entry\n * are declared. Returns `undefined` for plain FKs and for rename-only\n * polymorphic FKs (variants present, no discriminator field).\n *\n * Consumers (registry FK→type map builders, FK display/link resolution) use\n * this as the signal that the FK resolves to a different branch PER RECORD: the\n * holder record's `discriminatorField` value is matched against each variant's\n * `discriminatorValue` to pick the branch. See\n * {@link ForeignKeyStructuralParams.polymorphicDiscriminatorField}.\n */\nexport function getDiscriminatedPolymorphicForeignKey(\n schema: z.ZodTypeAny,\n): { discriminatorField: string; variants: PolymorphicFkVariant[] } | undefined {\n const params = getForeignKeyParams(schema);\n const discriminatorField = params?.polymorphicDiscriminatorField;\n const variants = params?.polymorphicVariants;\n if (!discriminatorField || !variants || variants.length === 0) return undefined;\n return { discriminatorField, variants };\n}\n\n/**\n * Check if a schema field is a foreign key (recursive traversal through wrappers).\n */\nexport function isForeignKeyField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_FOREIGN_KEY] !== undefined;\n}\n\n/**\n * Check if a schema field has the isSummaryField decorator.\n */\nexport function isSummaryField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_SUMMARY_FIELD] !== undefined;\n}\n\n/**\n * Get the isSummaryField decorator parameters.\n * @returns SummaryFieldParams or default empty object if decorator is used without params\n */\nexport function getSummaryFieldParams(schema: z.ZodTypeAny): SummaryFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_SUMMARY_FIELD];\n if (value === undefined) return undefined;\n if (value === true) return {}; // Default params when decorator is used without params\n return value as SummaryFieldParams;\n}\n\n/**\n * Check if a schema field has the isBackendOnly decorator.\n */\nexport function isBackendOnlyField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_BACKEND_ONLY] !== undefined;\n}\n\n/**\n * Get the isBackendOnly decorator parameters.\n */\nexport function getBackendOnlyParams(schema: z.ZodTypeAny): BackendOnlyFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_BACKEND_ONLY];\n if (value === undefined) return undefined;\n if (value === true) return {}; // Default params when decorator is used without params\n return value as BackendOnlyFieldParams;\n}\n\n/**\n * Check if a schema field has the isWriteOnlySecret decorator.\n */\nexport function isWriteOnlySecretField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_WRITE_ONLY_SECRET] !== undefined;\n}\n\n/**\n * Read a field's stored impersonalization params, declared via the fluent\n * `.impersonalizeWith(treatment, options?)` method or the equivalent\n * `addImpersonalizeWith(schema, treatment, options?)` helper.\n *\n * Reads through wrapper types (`getMetadataRecursive` walks outer → inner), so it observes the\n * declaration whether it was made before or after `.optional()` / `.nullable()` / `.nullish()` /\n * `.default()`. This matters because the retention guards `safeParse` the OUTER wrapper, and\n * treatments are commonly declared on `.nullish()` fields (`REMOVE` writes `null`).\n *\n * The decorator chokepoint normalizes both authoring forms to the params object, so the stored\n * value is always an object. The bare-string branch below is a defensive read for metadata written\n * by any path that bypassed the chokepoint — it keeps a legal treatment legible rather than\n * silently reading as UNTREATED, which is the PII-leak failure mode this decorator exists to\n * prevent.\n */\n/**\n * Read a field's declared portability provenance — where its value came from — set via the fluent\n * `.portabilityProvenance(provenance)` method or `addPortabilityProvenance(schema, provenance)`.\n *\n * Returns the raw string; the saas-models layer types it as `DataPortabilityProvenance`\n * (zod-decorators sits below saas-models and cannot import the enum).\n *\n * Reads through wrapper types (`getMetadataRecursive` walks outer → inner), so it observes the\n * declaration whether it was made before or after `.optional()` / `.nullable()` / `.nullish()` /\n * `.default()` — the same wrapper-transparency `getImpersonalizeTreatment` needs, and for the same\n * reason: personal-data fields are commonly optional.\n *\n * `undefined` means the field carries NO declaration of its own. That is not an error — the field\n * inherits its resource's `portabilityPolicy.defaultProvenance`, and only if THAT is absent too\n * does an Art. 20 export refuse. Resolving that fallback chain belongs to the resource factory,\n * which knows the resource; this reader answers only \"did the field itself say?\".\n */\nexport function getPortabilityProvenance(schema: z.ZodTypeAny): string | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.PORTABILITY_PROVENANCE];\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\n/**\n * WHICH KINDS of personal data does this field hold? Returns the declared `PersonalDataCategory`\n * values (as opaque strings — this package sits below `saas-models` and cannot import the enum),\n * or `undefined` when the field carries no declaration.\n *\n * Set via the fluent `.dataCategories(...)` method or `addDataCategories(schema, ...)`. Always an\n * ARRAY, deduped and non-empty: the decorator chokepoint normalizes a single-value authoring form\n * on the way in, so a caller never has to handle two shapes.\n *\n * Reads through wrapper types (`getMetadataRecursive` walks outer → inner), so it observes the\n * declaration whether it was written before or after `.optional()` / `.nullable()` / `.nullish()` /\n * `.default()`. An optional field is the common shape for exactly the data a notice enumerates, so\n * a reader that missed the wrapper would under-report — the silent direction.\n *\n * `undefined` is the correct and common answer: most fields hold no personal data and carry no\n * declaration. It is ABSENCE, not an empty array, that the compliance gap report reads — the\n * chokepoint refuses to store an empty declaration for that reason.\n *\n * @wildo_source:part:start zod.decorators.data-categories facet:layer:shared facet:family:decorator facet:kind:api facet:audience:app-developer\n */\nexport function getDataCategories(schema: z.ZodTypeAny): readonly string[] | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.DATA_CATEGORIES];\n return Array.isArray(value) && value.length > 0 ? (value as readonly string[]) : undefined;\n}\n/** @wildo_source:part:end zod.decorators.data-categories */\n\n/**\n * Is this field's VALUE recorded on the resource-operation audit event when an operation changes\n * it? Set via the fluent `.isAuditEvidence()` method or `addAuditEvidence(schema)`.\n *\n * Reads through wrapper types (`getMetadataRecursive` walks outer → inner), so it observes the\n * marker whether it was declared before or after `.optional()` / `.nullable()` / `.nullish()` /\n * `.default()`. That matters here in both directions: a nullable `suspendedUntil` is exactly the\n * kind of lifecycle field worth marking, and a marker the reader missed would silently drop the\n * evidence rather than fail.\n *\n * `false` is the correct and common answer — the audit event still records that the field CHANGED\n * (by name); only its before/after VALUES are withheld. Withholding is the default on purpose:\n * audit rows reach the immutable ledger, which cannot be scrubbed.\n *\n * ⚠️ This is the WRITE-side question. The READ-side one (\"was this value disclosed?\") is answered\n * only by `isBackendOnly({ isReturnedAtCreation: true })`, which fires a `FIELD_ACCESS` event when a\n * server-minted secret is first exposed. The two are independent claims; neither implies the other.\n */\nexport function isAuditEvidenceField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_AUDIT_EVIDENCE] === true;\n}\n\nfunction getImpersonalizeParams(schema: z.ZodTypeAny): ImpersonalizeFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IMPERSONALIZE_WITH];\n if (typeof value === 'string') return { treatment: value };\n if (value !== null && typeof value === 'object' && typeof (value as ImpersonalizeFieldParams).treatment === 'string') {\n return value as ImpersonalizeFieldParams;\n }\n return undefined;\n}\n\n/**\n * Get a field's impersonalization scrub treatment (a `RedactionType` value). Returns the raw\n * string; the saas-models layer types it as `RedactionType` (zod-decorators is below saas-models\n * and cannot import it). `undefined` means the field carries no treatment and is left intact.\n */\nexport function getImpersonalizeTreatment(schema: z.ZodTypeAny): string | undefined {\n return getImpersonalizeParams(schema)?.treatment;\n}\n\n/**\n * @wildo_source:part:start zod.decorators.rag-source facet:layer:shared facet:family:decorator facet:kind:api facet:audience:app-developer\n *\n * Read a field's stored RAG-source configuration, declared via the fluent `.ragSource(config?)`\n * method, the `addRagSource(schema, config?)` helper, or `z_file({ ragSource })`.\n *\n * Import from `@wildo-ai/zod-decorators`. Use it in custom implementations or checks that need to\n * ask \"is this field part of the retrieval corpus?\" — never to re-derive the corpus itself, which\n * the framework already does.\n *\n * `undefined` means the field is NOT a retrieval-corpus source — presence of the returned object is\n * the declaration itself (there is no `enabled` flag), and a bare `.ragSource()` reads back as `{}`\n * because the decorator chokepoint normalizes an omitted config to the empty object.\n *\n * Reads through wrapper types (`getMetadataRecursive` walks outer → inner), so it observes the\n * declaration whether it was made before or after `.optional()` / `.nullable()` / `.nullish()` /\n * `.default()` — corpus-source fields (descriptions, knowledge bodies) are routinely optional.\n * This is the ONE detection door: `RagSourceFieldDetection` in the backend walks resource schemas\n * with it, uniformly for plain string fields and `z_file()` fields.\n */\nexport function getRagSourceConfig(schema: z.ZodTypeAny): RagSourceConfiguration | undefined {\n const metadata = getMetadataRecursive(schema);\n // Typed as the normalized object, but read defensively as `unknown`: metadata written by any\n // path that bypassed the chokepoint's normalization (a raw `true` sentinel) must still read as\n // \"declared, default config\" rather than silently reading as NOT-a-source, which would drop the\n // field from every downstream seam (detection, chunk store, erasure).\n const value = metadata?.[ZodDecorator.RAG_SOURCE] as unknown;\n if (value === undefined || value === null || value === false) return undefined;\n return typeof value === 'object' ? (value as RagSourceConfiguration) : {};\n}\n/** @wildo_source:part:end zod.decorators.rag-source */\n\n/**\n * Get a field's `MASK` override value — the literal written in place of the field, instead of the\n * framework mask constant. `undefined` means \"use the constant\".\n *\n * Authored for CONSTRAINED string fields (`z.email()`, `z.uuid()`, `.min(n)`) that the default\n * constant cannot satisfy. See {@link ImpersonalizeFieldParams} for the contract; the saas-models\n * boot guard validates the value against the field's own schema and rejects it on a non-`MASK`\n * treatment.\n */\nexport function getImpersonalizeMaskValue(schema: z.ZodTypeAny): string | undefined {\n return getImpersonalizeParams(schema)?.maskValue;\n}\n\n/**\n * Get the isWriteOnlySecret decorator parameters.\n */\nexport function getWriteOnlySecretParams(schema: z.ZodTypeAny): WriteOnlySecretFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_WRITE_ONLY_SECRET];\n if (value === undefined) return undefined;\n if (value === true) return {}; // Default params when decorator is used without params\n return value as WriteOnlySecretFieldParams;\n}\n\n/**\n * Check if a schema field has the isDiscriminator decorator.\n */\nexport function isDiscriminatorField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_DISCRIMINATOR] !== undefined;\n}\n\n/**\n * Get the isDiscriminator decorator parameters.\n */\nexport function getDiscriminatorParams(schema: z.ZodTypeAny): DiscriminatorFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_DISCRIMINATOR];\n if (value === undefined) return undefined;\n if (value === true) return {}; // Default params when decorator is used without params\n return value as DiscriminatorFieldParams;\n}\n\n/**\n * Check if a schema field has the excludeFromCreate decorator.\n */\nexport function isExcludedFromCreate(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.EXCLUDE_FROM_CREATE] !== undefined;\n}\n\n/**\n * Check if a schema field has the excludeFromUpdate decorator.\n */\nexport function isExcludedFromUpdate(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.EXCLUDE_FROM_UPDATE] !== undefined;\n}\n\n/**\n * Check if a schema field is hidden (recursive traversal through wrappers).\n */\nexport function isHiddenField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_HIDDEN] !== undefined;\n}\n\n/**\n * Get the isHidden decorator parameters.\n * Returns default params (hidden in both display and edit) when decorator is used without params.\n */\nexport function getHiddenFieldParams(schema: z.ZodTypeAny): HiddenFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_HIDDEN];\n if (value === undefined) return undefined;\n // Default: hidden in both display and edit mode when decorator is used without params\n if (value === true) return { display: true, edit: true };\n return value as HiddenFieldParams;\n}\n\n/**\n * Check if a schema field is not editable (recursive traversal through wrappers).\n */\nexport function isNotEditableField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_NOT_EDITABLE] !== undefined;\n}\n\n/**\n * Get the isNotEditable decorator parameters.\n */\nexport function getNotEditableFieldParams(schema: z.ZodTypeAny): NotEditableFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_NOT_EDITABLE];\n if (value === undefined) return undefined;\n if (value === true) return {}; // Default params when decorator is used without params\n return value as NotEditableFieldParams;\n}\n\n/**\n * Check if a schema field has the isUnique decorator (recursive traversal through wrappers).\n */\nexport function isUniqueField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_UNIQUE] !== undefined;\n}\n\n/**\n * Get the isUnique decorator parameters (recursive traversal through wrappers).\n * Returns default params { scope: 'global', sparse: true } when decorator is used without params.\n */\nexport function getUniqueFieldParams(schema: z.ZodTypeAny): UniqueFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_UNIQUE];\n if (value === undefined) return undefined;\n if (value === true) return { scope: 'global', sparse: true }; // Default params from original getUniqueParams\n return value as UniqueFieldParams;\n}\n\n/**\n * Check if a schema field has the isPrimaryKey decorator (recursive traversal through wrappers).\n */\nexport function isPrimaryKeyField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_PRIMARY_KEY] === true;\n}\n\n// =============================================================================\n// BUSINESS KEY HELPERS (data-seeding subsystem)\n// =============================================================================\n\n/**\n * Check if a schema field has the `isBusinessKey` decorator (recursive\n * traversal through wrappers — `optional`, `nullable`, etc.).\n *\n * A business key is the **declaration-side identity** used by the data-seeding\n * subsystem to upsert / upgrade / sync seeded rows independently from the\n * random `_id` (`isPrimaryKey`). See `.cursor/plans/seeding-first-class.md`\n * §3.3 for the semantic contract.\n */\nexport function isBusinessKeyField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_BUSINESS_KEY] === true;\n}\n\n/**\n * Read the composite business key declared on an object schema via\n * `businessKeySet([...])` (object-level decorator). Returns the ordered\n * list of field names, or `undefined` if no composite key is declared.\n *\n * The composite key is the schema-level analog of `isBusinessKey` — used\n * when identity is `(orgId, templateKey)` rather than a single field. See\n * `.cursor/plans/seeding-first-class.md` §3.3.\n */\nexport function getBusinessKeySet(schema: z.ZodTypeAny): string[] | undefined {\n return getBusinessKeySetParams(schema)?.fields;\n}\n\n/**\n * Read the FULL composite-business-key declaration, not just its field list.\n *\n * `getBusinessKeySet` answers \"what identifies a row\" and is all the seeding filter builder needs.\n * The storage adapter needs more: which members take a row out of the constraint when absent\n * (`skipRowsMissing`), and which error the API should raise when the resulting index is violated\n * (`conflictMessageReference`). Both are properties OF the key, so they are read from the same\n * declaration rather than re-derived — a second source would be free to disagree with the first.\n */\nexport function getBusinessKeySetParams(schema: z.ZodTypeAny): BusinessKeySetParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const params = metadata?.[ZodDecorator.OBJECT_BUSINESS_KEY_SET];\n return params?.fields ? params : undefined;\n}\n\n/**\n * Convenience predicate: does the schema declare any business key\n * identity (single field-level marker OR composite object-level set)?\n */\nexport function hasBusinessKey(schema: z.ZodTypeAny): boolean {\n return isBusinessKeyField(schema) || getBusinessKeySet(schema) !== undefined;\n}\n\n/**\n * Get all metadata for a schema field (non-recursive, direct access only).\n */\nexport function getFieldMetadata(schema: z.ZodTypeAny): CustomFieldMetadata | undefined {\n return (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n}\n\n/**\n * Get all metadata for a schema field, traversing through wrapper types.\n */\nexport function getFieldMetadataRecursive(schema: z.ZodTypeAny): CustomFieldMetadata | undefined {\n return getMetadataRecursive(schema);\n}\n\n// =============================================================================\n// RANGE SCHEMA HELPERS\n// =============================================================================\n\n/**\n * Check if a schema is a range schema (created by z_range()).\n * Detects by the presence of rangeConfig in SCHEMA_METADATA.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isRangeSchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.rangeConfig?.isRange === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.rangeConfig?.isRange === true;\n }\n\n return false;\n}\n\n/**\n * Get the range metadata from a schema.\n * Returns undefined if not a range schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getRangeMetadata(schema: z.ZodTypeAny): RangeSchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.rangeConfig?.isRange) {\n return schemaMetadata.rangeConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.rangeConfig?.isRange) {\n return unwrappedMetadata.rangeConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Get the range type from a schema.\n * Returns undefined if not a range schema.\n */\nexport function getRangeType(schema: z.ZodTypeAny): RangeType | undefined {\n return getRangeMetadata(schema)?.type;\n}\n\n// =============================================================================\n// CURRENCY SCHEMA HELPERS\n// =============================================================================\n\n/**\n * Check if a schema is a money schema (created by z_money()).\n * Detects by the presence of moneyConfig in SCHEMA_METADATA.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isMoneySchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.moneyConfig?.isMoney === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.moneyConfig?.isMoney === true;\n }\n\n return false;\n}\n\n/**\n * Get the money metadata from a schema.\n * Returns undefined if not a money schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getMoneyMetadata(schema: z.ZodTypeAny): MoneySchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.moneyConfig?.isMoney) {\n return schemaMetadata.moneyConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.moneyConfig?.isMoney) {\n return unwrappedMetadata.moneyConfig;\n }\n }\n\n return undefined;\n}\n\n// =============================================================================\n// BIGDECIMAL SCHEMA HELPERS\n// =============================================================================\n\n/**\n * Check if a schema is a bigdecimal schema (created by z_bigdecimal()).\n * Detects by the presence of bigDecimalConfig in SCHEMA_METADATA.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isBigDecimalSchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.bigDecimalConfig?.isBigDecimal === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.bigDecimalConfig?.isBigDecimal === true;\n }\n\n return false;\n}\n\n/**\n * Get the bigdecimal metadata from a schema.\n * Returns undefined if not a bigdecimal schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getBigDecimalMetadata(schema: z.ZodTypeAny): BigDecimalSchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.bigDecimalConfig?.isBigDecimal) {\n return schemaMetadata.bigDecimalConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.bigDecimalConfig?.isBigDecimal) {\n return unwrappedMetadata.bigDecimalConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Get bigdecimal constraints from schema metadata.\n * Returns min, max, precision from the bigdecimal schema configuration.\n */\nexport function getBigDecimalConstraints(schema: z.ZodTypeAny): {\n min?: string;\n max?: string;\n precision?: number;\n} {\n const metadata = getBigDecimalMetadata(schema);\n if (!metadata) {\n return {};\n }\n\n return {\n min: metadata.min,\n max: metadata.max,\n precision: metadata.precision,\n };\n}\n\n// =============================================================================\n// DURATION SCHEMA HELPERS\n// =============================================================================\n\n/**\n * Check if a schema is a duration schema (created by z_duration()).\n * Detects by the presence of durationConfig in SCHEMA_METADATA.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isDurationSchema(schema: z.ZodTypeAny): boolean {\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.durationConfig?.isDuration === true) {\n return true;\n }\n\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.durationConfig?.isDuration === true;\n }\n\n return false;\n}\n\n/**\n * Get the duration metadata from a schema.\n * Returns undefined if not a duration schema.\n */\nexport function getDurationMetadata(schema: z.ZodTypeAny): DurationSchemaMetadata | undefined {\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.durationConfig?.isDuration) {\n return schemaMetadata.durationConfig;\n }\n\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.durationConfig?.isDuration) {\n return unwrappedMetadata.durationConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Get duration constraints from schema metadata.\n */\nexport function getDurationConstraints(schema: z.ZodTypeAny): {\n minValue?: number;\n maxValue?: number;\n allowedUnits?: string[];\n} {\n const metadata = getDurationMetadata(schema);\n if (!metadata) {\n return {};\n }\n\n return {\n minValue: metadata.minValue,\n maxValue: metadata.maxValue,\n allowedUnits: metadata.allowedUnits,\n };\n}\n\n/**\n * Check if a schema is a phone schema (created by z_phone()).\n * Detects by the presence of phoneConfig in SCHEMA_METADATA.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isPhoneSchema(schema: z.ZodTypeAny): boolean {\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.phoneConfig?.isPhone === true) {\n return true;\n }\n\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.phoneConfig?.isPhone === true;\n }\n\n return false;\n}\n\n/**\n * Get the phone metadata from a schema.\n * Returns undefined if not a phone schema.\n */\nexport function getPhoneMetadata(schema: z.ZodTypeAny): PhoneSchemaMetadata | undefined {\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.phoneConfig?.isPhone) {\n return schemaMetadata.phoneConfig;\n }\n\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.phoneConfig?.isPhone) {\n return unwrappedMetadata.phoneConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Check if a schema is a code schema created by z_code().\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isCodeSchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.codeConfig?.isCode === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.codeConfig?.isCode === true;\n }\n\n return false;\n}\n\n/**\n * Get code schema metadata if this is a code schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getCodeMetadata(schema: z.ZodTypeAny): CodeSchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.codeConfig?.isCode) {\n return schemaMetadata.codeConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.codeConfig?.isCode) {\n return unwrappedMetadata.codeConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Check if a schema is a file schema created by z_file().\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isFileSchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.fileConfig?.isFile === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.fileConfig?.isFile === true;\n }\n\n return false;\n}\n\n/**\n * Check if a file schema is generated from a backend-bound PDF template.\n *\n * This helper intentionally keys off frontend-safe metadata only. Runtime\n * template objects are bound later by backend resource configuration and must\n * not leak into shared schema metadata.\n */\nexport function isTemplatableFileField(schema: z.ZodTypeAny): boolean {\n const fileMetadata = getFileMetadata(schema);\n return fileMetadata?.generation?.source === FileGenerationSource.PDF_TEMPLATE;\n}\n\n/**\n * Get file schema metadata if this is a file schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getFileMetadata(schema: z.ZodTypeAny): FileSchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.fileConfig?.isFile) {\n return schemaMetadata.fileConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.fileConfig?.isFile) {\n return unwrappedMetadata.fileConfig;\n }\n }\n\n return undefined;\n}\n\n// -----------------------------------------------------------------------------\n// VERSIONED SCHEMA HELPERS\n// -----------------------------------------------------------------------------\n\n/**\n * Check if a schema is a versioned foreign key schema created by z_foreignKeyVersioned().\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isVersionedForeignKeySchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.versionedForeignKeyConfig?.isVersionedForeignKey === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.versionedForeignKeyConfig?.isVersionedForeignKey === true;\n }\n\n return false;\n}\n\n/**\n * Get versioned foreign key schema metadata if this is a versioned foreign key schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getVersionedForeignKeyMetadata(schema: z.ZodTypeAny): VersionedForeignKeySchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.versionedForeignKeyConfig?.isVersionedForeignKey) {\n return schemaMetadata.versionedForeignKeyConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.versionedForeignKeyConfig?.isVersionedForeignKey) {\n return unwrappedMetadata.versionedForeignKeyConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Check if a schema is a versioned object schema created by versioned().\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isVersionedObjectSchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.versionedConfig?.isVersioned === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.versionedConfig?.isVersioned === true;\n }\n\n return false;\n}\n\n/**\n * Get versioned schema metadata if this is a versioned object schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getVersionedObjectMetadata(schema: z.ZodTypeAny): VersionedSchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.versionedConfig?.isVersioned) {\n return schemaMetadata.versionedConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.versionedConfig?.isVersioned) {\n return unwrappedMetadata.versionedConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Check if the 'from' field is optional in a range schema.\n */\nexport function isRangeFromOptional(schema: z.ZodTypeAny): boolean | undefined {\n return getRangeMetadata(schema)?.fromOptional;\n}\n\n/**\n * Check if the 'to' field is optional in a range schema.\n */\nexport function isRangeToOptional(schema: z.ZodTypeAny): boolean | undefined {\n return getRangeMetadata(schema)?.toOptional;\n}\n\n/**\n * Get the min constraint from a range schema.\n */\nexport function getRangeMin(schema: z.ZodTypeAny): RangeConstraintValue | undefined {\n return getRangeMetadata(schema)?.min;\n}\n\n/**\n * Get the max constraint from a range schema.\n */\nexport function getRangeMax(schema: z.ZodTypeAny): RangeConstraintValue | undefined {\n return getRangeMetadata(schema)?.max;\n}\n\n\n// =============================================================================\n// FORM FIELD DECORATOR UTILITIES\n// =============================================================================\n\n/**\n * Get the form component from `{primitive}UI.edit.component`.\n * Returns undefined if no form component is specified.\n */\nexport function getFormFieldComponent(schema: z.ZodTypeAny): FormFieldComponent | undefined {\n return getFieldUIEditConfig(schema)?.component;\n}\n\n/**\n * Check if a field should be hidden based on the current context.\n * @param schema - The Zod schema to check\n * @param context - Optional context with mode ('display' | 'edit') and operation name\n */\nexport function shouldHideField(\n schema: z.ZodTypeAny,\n context?: { mode?: 'display' | 'edit'; operation?: string }\n): boolean {\n if (!hasHiddenDecorator(schema)) {\n return false;\n }\n\n const hidden = getHiddenFieldMetadata(schema);\n\n // If hidden is true, always hide\n if (hidden === true) {\n return true;\n }\n\n // Check mode-specific hiding\n if (context?.mode === 'display' && hidden?.display) {\n return true;\n }\n if (context?.mode === 'edit' && hidden?.edit) {\n return true;\n }\n\n // Check operation-specific hiding\n if (context?.operation && hidden?.operations?.includes(context.operation)) {\n return true;\n }\n\n return false;\n}\n\n\n\n// -----------------------------------------------------------------------------\n// Form Component Check Functions (isFormXX)\n// -----------------------------------------------------------------------------\n\nexport function isFormInput(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.INPUT;\n}\n\n/**\n * Does the author declare TEXTAREA on the CROSS-CUTTING `edit.component` axis?\n *\n * This is a question about the DECLARATION, not about what the field renders\n * as, and the distinction is load-bearing: a field declaring the per-type\n * `edit.editMode: TEXTAREA` edits as a textarea and this predicate answers\n * `false` for it. Asking this when you meant the rendering question is exactly\n * how the inline editor came to bind Enter as \"save\" inside a textarea.\n *\n * For \"does this field edit into a multi-line control\", ask\n * `isMultilineEditField`, which resolves both axes.\n */\nexport function isFormTextarea(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.TEXTAREA;\n}\n\nexport function isFormSelect(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.SELECT;\n}\n\nexport function isFormRadioGroup(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.RADIO_GROUP;\n}\n\nexport function isFormCheckbox(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.CHECKBOX;\n}\n\nexport function isFormCheckboxGroup(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.CHECKBOX_GROUP;\n}\n\nexport function isFormSwitch(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.SWITCH;\n}\n\nexport function isFormSlider(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.SLIDER;\n}\n\nexport function isFormDate(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.DATE;\n}\n\n\n// -----------------------------------------------------------------------------\n// EDIT-MODE RESOLUTION — the ONE reconciliation of the two edit axes\n// -----------------------------------------------------------------------------\n//\n// A field's editing shape is declared on TWO axes and they overlap:\n//\n// `{primitive}UI.edit.editMode` — per-type, closed per type (`StringEditMode`\n// cannot name a slider), read by every\n// `FormField{Type}` component;\n// `{primitive}UI.edit.component` — cross-cutting `FormFieldComponent`, one\n// vocabulary spanning every type.\n//\n// Neither half of the system used to read both, so whichever axis an author\n// picked, something was wrong: the RENDER path (`FormFieldString` and its\n// siblings) read only `editMode`, so an authored `component: TEXTAREA` rendered\n// a single-line input — live on six declarations, including the engine's own\n// billing presets. The INLINE-EDIT keyboard path (`DisplayFieldEditable`) read\n// only `component` through `isFormTextarea`, so a field that correctly declares\n// `editMode: TEXTAREA` was treated as single-line and Enter saved instead of\n// inserting a newline.\n//\n// These resolvers are that one source. Precedence is the contract already\n// written on `PrimitiveUIBaseEditParams.component` — \"Type-specific `editMode`\n// takes precedence\" — so the per-type axis wins and the cross-cutting one is\n// the fallback rather than a competitor.\n//\n// Only members that name the SAME control on both sides are mapped. A\n// `FormFieldComponent` member with no counterpart (`TOGGLE`-less booleans,\n// `COLOR`/`PASSWORD`/`OTP`/`MARKDOWN` strings) simply has no mapping, and\n// `CHECKBOX_GROUP` is deliberately absent: it is an ARRAY-of-enum control\n// reached through `AutomatedArrayField`, never through `FormFieldEnum`, so\n// mapping it to an enum edit mode would claim a route that does not exist.\n\nconst STRING_EDIT_MODE_BY_FORM_COMPONENT: Partial<Record<FormFieldComponent, StringEditMode>> = {\n [FormFieldComponent.INPUT]: StringEditMode.INPUT,\n [FormFieldComponent.TEXTAREA]: StringEditMode.TEXTAREA,\n};\n\nconst BOOLEAN_EDIT_MODE_BY_FORM_COMPONENT: Partial<Record<FormFieldComponent, BooleanEditMode>> = {\n [FormFieldComponent.CHECKBOX]: BooleanEditMode.CHECKBOX,\n [FormFieldComponent.SWITCH]: BooleanEditMode.SWITCH,\n [FormFieldComponent.RADIO_GROUP]: BooleanEditMode.RADIO,\n};\n\nconst ENUM_EDIT_MODE_BY_FORM_COMPONENT: Partial<Record<FormFieldComponent, EnumEditMode>> = {\n [FormFieldComponent.SELECT]: EnumEditMode.SELECT,\n [FormFieldComponent.RADIO_GROUP]: EnumEditMode.RADIO,\n};\n\nconst NUMBER_EDIT_MODE_BY_FORM_COMPONENT: Partial<Record<FormFieldComponent, NumberEditMode>> = {\n [FormFieldComponent.INPUT]: NumberEditMode.INPUT,\n [FormFieldComponent.SLIDER]: NumberEditMode.SLIDER,\n};\n\n/** Resolve the shape a string field edits as, honoring both edit axes. */\nexport function resolveStringEditMode(schema: z.ZodTypeAny): StringEditMode {\n const declared = getStringUI(schema)?.edit?.editMode;\n if (declared !== undefined) return declared;\n const component = getFormFieldComponent(schema);\n return (component !== undefined ? STRING_EDIT_MODE_BY_FORM_COMPONENT[component] : undefined) ?? StringEditMode.INPUT;\n}\n\n/** Resolve the shape a boolean field edits as, honoring both edit axes. */\nexport function resolveBooleanEditMode(schema: z.ZodTypeAny): BooleanEditMode {\n const declared = getBooleanUI(schema)?.edit?.editMode;\n if (declared !== undefined) return declared;\n const component = getFormFieldComponent(schema);\n return (component !== undefined ? BOOLEAN_EDIT_MODE_BY_FORM_COMPONENT[component] : undefined) ?? BooleanEditMode.SWITCH;\n}\n\n/** Resolve the shape an enum field edits as, honoring both edit axes. */\nexport function resolveEnumEditMode(schema: z.ZodTypeAny): EnumEditMode {\n const declared = getEnumUI(schema)?.edit?.editMode;\n if (declared !== undefined) return declared;\n const component = getFormFieldComponent(schema);\n return (component !== undefined ? ENUM_EDIT_MODE_BY_FORM_COMPONENT[component] : undefined) ?? EnumEditMode.SELECT;\n}\n\n/** Resolve the shape a number field edits as, honoring both edit axes. */\nexport function resolveNumberEditMode(schema: z.ZodTypeAny): NumberEditMode {\n const declared = getNumberUI(schema)?.edit?.editMode;\n if (declared !== undefined) return declared;\n const component = getFormFieldComponent(schema);\n return (component !== undefined ? NUMBER_EDIT_MODE_BY_FORM_COMPONENT[component] : undefined) ?? NumberEditMode.INPUT;\n}\n\n/**\n * Does this field edit into a control where Enter inserts a newline rather than\n * submitting? Asked by the inline editor to decide its Enter binding, and the\n * reason it must go through the resolver: the answer is true whether the author\n * declared `editMode: TEXTAREA` or `component: TEXTAREA`, and `isFormTextarea`\n * only ever saw the second.\n */\nexport function isMultilineEditField(schema: z.ZodTypeAny): boolean {\n return resolveStringEditMode(schema) === StringEditMode.TEXTAREA;\n}\n\n\n// =============================================================================\n// HIDDEN FIELD DECORATOR UTILITIES\n// =============================================================================\n\n/**\n * Get the hidden field metadata from schema decorator.\n * Returns undefined if no hidden decorator is set.\n * Returns true if field is hidden in all cases.\n * Returns HiddenFieldParams if conditional hiding is configured.\n * Note: getCustomFieldMetadata already handles recursive unwrapping for all wrapper types\n * including pipe (from refine/superRefine), optional, nullable, default, etc.\n */\nexport function getHiddenFieldMetadata(schema: z.ZodTypeAny): HiddenFieldParams | true | undefined {\n const metadata = getCustomFieldMetadata(schema);\n return metadata[ZodDecorator.IS_HIDDEN];\n}\n\n/**\n * Check if a schema has a hidden decorator.\n */\nexport function hasHiddenDecorator(schema: z.ZodTypeAny): boolean {\n return getHiddenFieldMetadata(schema) !== undefined;\n}\n\n/**\n * Check if a field should be hidden for display mode.\n * @param schema - The Zod schema to check\n * @returns true if the field should be hidden in display mode\n */\nexport function isHiddenForDisplay(schema: z.ZodTypeAny): boolean {\n const hidden = getHiddenFieldMetadata(schema);\n if (hidden === undefined) return false;\n if (hidden === true) return true;\n return hidden.display === true;\n}\n\n/**\n * Check if a field should be hidden for edit mode.\n * @param schema - The Zod schema to check\n * @returns true if the field should be hidden in edit mode\n */\nexport function isHiddenForEdit(schema: z.ZodTypeAny): boolean {\n const hidden = getHiddenFieldMetadata(schema);\n if (hidden === undefined) return false;\n if (hidden === true) return true;\n return hidden.edit === true;\n}\n\n/**\n * Check if a field should be hidden for a specific operation.\n * @param schema - The Zod schema to check\n * @param operation - The operation identifier (e.g., 'create', 'update')\n * @returns true if the field should be hidden for the given operation\n */\nexport function isHiddenForOperation(schema: z.ZodTypeAny, operation: string): boolean {\n const hidden = getHiddenFieldMetadata(schema);\n if (hidden === undefined) return false;\n if (hidden === true) return true;\n return hidden.operations?.includes(operation) ?? false;\n}\n\n// =============================================================================\n// NOT EDITABLE FIELD DECORATOR UTILITIES\n// =============================================================================\n\n/**\n * Get the not editable field metadata from schema decorator.\n * Returns undefined if no isNotEditable decorator is set.\n * Returns true if field is not editable for all operations.\n * Returns NotEditableFieldParams if operation-specific.\n * Note: getCustomFieldMetadata already handles recursive unwrapping for all wrapper types\n * including pipe (from refine/superRefine), optional, nullable, default, etc.\n */\nexport function getNotEditableFieldMetadata(schema: z.ZodTypeAny): NotEditableFieldParams | true | undefined {\n const metadata = getCustomFieldMetadata(schema);\n return metadata[ZodDecorator.IS_NOT_EDITABLE];\n}\n\n/**\n * Check if a schema has a isNotEditable decorator.\n */\nexport function hasNotEditableDecorator(schema: z.ZodTypeAny): boolean {\n return getNotEditableFieldMetadata(schema) !== undefined;\n}\n\n/**\n * Check if a field is not editable for a specific operation (or all operations).\n * @param schema - The Zod schema to check\n * @param operation - Optional operation identifier. If not provided, checks if not editable for all operations.\n * @returns true if the field is not editable\n */\nexport function isNotEditableForOperation(schema: z.ZodTypeAny, operation?: string): boolean {\n const notEditable = getNotEditableFieldMetadata(schema);\n if (notEditable === undefined) return false;\n\n // If true, not editable for all operations\n if (notEditable === true) return true;\n\n // If no operations specified in params, not editable for all operations\n if (!notEditable.operations || notEditable.operations.length === 0) return true;\n\n // If operation is provided, check if it matches\n if (operation) {\n return notEditable.operations.includes(operation);\n }\n\n // Operation not provided but params have specific operations - not editable only for those\n return false;\n}\n\n\n\n// ============================================================================\n// SORTABLE FIELD HELPERS (now absorbed into ARRAY_UI)\n// ============================================================================\n// Sortable configuration is now managed via arrayUI({ edit: { isSortable, dnd, upDownIcons } }).\n// The .isSortable() convenience composite sets ARRAY_UI metadata directly.\n\n\n// ============================================================================\n// INLINE EDITABLE FIELD HELPERS\n// ============================================================================\n\n/**\n * Resolved inline editable params with all defaults applied.\n */\nexport interface ResolvedInlineEditableParams {\n mode: 'direct' | 'button';\n saveOn: 'blur' | 'explicit';\n showSaveButton: boolean;\n showCancelButton: boolean;\n}\n\n/**\n * Check if a schema has inline editable configuration.\n * Reads from `{primitive}UI.display.inlineEditable`.\n */\nexport function hasInlineEditableDecorator(schema: z.ZodTypeAny): boolean {\n return getFieldUIDisplayConfig(schema)?.inlineEditable != null;\n}\n\n/**\n * Get the resolved inline editable params from `{primitive}UI.display.inlineEditable`.\n * Handles both `true` shorthand and full object config.\n */\nexport function getInlineEditableParams(schema: z.ZodTypeAny): ResolvedInlineEditableParams | undefined {\n const config = getFieldUIDisplayConfig(schema)?.inlineEditable;\n if (config == null) return undefined;\n\n if (config === true) {\n return { mode: 'direct', saveOn: 'blur', showSaveButton: false, showCancelButton: true };\n }\n if (config === false) return undefined;\n\n const saveOn = config.saveOn ?? 'blur';\n const showSaveButton = config.showSaveButton ?? (saveOn === 'explicit');\n return {\n mode: config.mode ?? 'direct',\n saveOn,\n showSaveButton,\n showCancelButton: config.showCancelButton ?? true,\n };\n}\n\n\n// ============================================================================\n// ZOD .describe() UTILITY (NOT for UI descriptions — developer/AI/API docs only)\n// ============================================================================\n\n/**\n * Extract the `.describe()` text from a Zod schema, unwrapping optional/nullable/default wrappers.\n * Returns undefined if no `.describe(\"...\")` is set.\n *\n * **IMPORTANT**: Zod `.describe(\"...\")` is for developer documentation, AI prompting systems,\n * and API documentation generation. It is NOT used for UI field descriptions — those are\n * managed through `{primitive}UI.display.showDescription` + i18n system.\n *\n * In Zod 4, `.describe(\"...\")` sets the `.description` property on the schema.\n * When `.optional()`, `.nullable()`, or `.default()` wrap the schema, the description\n * may live on the inner schema. We check both levels.\n */\nexport function getZodDescription(schema: z.ZodTypeAny): string | undefined {\n // Check outer schema first\n if (schema.description) return schema.description;\n\n // Unwrap optional/nullable/default to check inner schema\n const inner = (schema as any)._zod?.innerType ?? (schema as any).unwrap?.();\n if (inner?.description) return inner.description;\n\n return undefined;\n}\n\n// ============================================================================\n// FIELD DESCRIPTION HELPERS (opt-in i18n key generation, mirrors tooltip pattern)\n// ============================================================================\n\n/**\n * Check if a field should have a description i18n key generated for **display** mode.\n *\n * Reads from `{primitive}UI.display.showDescription` (boolean flag).\n * This follows the same opt-in pattern as tooltips: only generate i18n keys for\n * fields that explicitly declare intent via a decorator.\n *\n * **NOTE**: Zod `.describe(\"...\")` is NOT an opt-in signal for UI descriptions.\n * `.describe()` serves a different purpose (developer docs, AI prompting, API docs).\n * UI field descriptions are purely decorator-driven + i18n-resolved.\n *\n * @param schema - The Zod schema to check\n * @returns true if a description i18n key should be generated for display mode\n */\nexport function hasDescriptionForDisplay(schema: z.ZodTypeAny): boolean {\n return getFieldUIDisplayConfig(schema)?.showDescription === true;\n}\n\n/**\n * Check if a field should have a description i18n key generated for **edit** mode.\n *\n * Reads from `{primitive}UI.edit.showDescription` (boolean flag).\n * If a field declares it wants a description, both display AND edit i18n keys are generated\n * so translators can provide mode-appropriate text.\n *\n * @param schema - The Zod schema to check\n * @returns true if a description i18n key should be generated for edit mode\n */\nexport function hasDescriptionForEdit(schema: z.ZodTypeAny): boolean {\n return getFieldUIEditConfig(schema)?.showDescription === true;\n}\n\n// ============================================================================\n// BOOLEAN DISPLAY POLICY HELPERS\n// ============================================================================\n\n/**\n * Check if a string schema should render as a password input.\n * Checks IS_PASSWORD structural marker first, then STRING_UI editMode fallback.\n */\nexport function isPasswordField(schema: z.ZodTypeAny): boolean {\n const metadata = getCustomFieldMetadata(schema);\n if (metadata?.[ZodDecorator.IS_PASSWORD]) {\n return true;\n }\n const stringUI = getStringUI(schema);\n return stringUI?.edit?.editMode === 'password';\n}\n\n/**\n * Check if a string schema should render as an OTP input.\n * Checks IS_OTP structural marker first, then STRING_UI editMode fallback.\n */\nexport function isOtpField(schema: z.ZodTypeAny): boolean {\n const metadata = getCustomFieldMetadata(schema);\n if (metadata?.[ZodDecorator.IS_OTP]) {\n return true;\n }\n const stringUI = getStringUI(schema);\n return stringUI?.edit?.editMode === 'otp';\n}\n\n/**\n * Check if a string schema should render as a color input.\n * Checks IS_COLOR structural marker first, then STRING_UI editMode fallback.\n */\nexport function isColorField(schema: z.ZodTypeAny): boolean {\n const metadata = getCustomFieldMetadata(schema);\n if (metadata?.[ZodDecorator.IS_COLOR]) {\n return true;\n }\n const stringUI = getStringUI(schema);\n return stringUI?.edit?.editMode === 'color';\n}\n\n/**\n * Get OTP field params from a schema.\n * Returns the OTP params with defaults merged in if the decorator is present.\n * Defaults: maxLength=6\n */\nexport function getOtpFieldParams(schema: z.ZodTypeAny): OtpFieldParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n const otpParams = metadata?.[ZodDecorator.IS_OTP];\n\n if (!otpParams) {\n return undefined;\n }\n\n // If params is true (enabled without params), return defaults\n if (otpParams === true) {\n return { maxLength: 6 };\n }\n\n // Merge with defaults\n return {\n maxLength: 6,\n ...otpParams,\n };\n}\n\n/**\n * Get the system enum name from a schema's metadata.\n * Returns the name string (e.g. 'AvailableCurrency') if the .systemEnum() decorator is set,\n * or undefined if the field is not a system enum.\n */\nexport function getSystemEnumName(schema: z.ZodTypeAny): string | undefined {\n const metadata = getCustomFieldMetadata(schema);\n return metadata[ZodDecorator.SYSTEM_ENUM];\n}\n\n\n//===============================================\n// SERIALIZATION (Zod 4)\n//===============================================\n\n/**\n * Serialize a Zod schema to a JSON-serializable format.\n * Uses Zod 4 internal structure (_zod.def.type).\n */\nexport function serializeZodSchema(schema: z.ZodTypeAny | undefined, seen: Set<z.ZodTypeAny> = new Set()): SerializableZodSchema | null {\n if (!schema) return null;\n\n // Avoid circular refs\n if (seen.has(schema)) {\n return { type: 'lazy' };\n }\n seen.add(schema);\n\n // Helper to add optional/nullable flags\n function withOptionals(base: SerializableZodSchema, optional?: boolean, nullable?: boolean): SerializableZodSchema {\n return {\n ...base,\n ...(optional ? { optional: true } : {}),\n ...(nullable ? { nullable: true } : {})\n };\n }\n\n // Unwrap wrappers and track optional/nullable state (Zod 4 structure)\n const unwrapWithFlags = (s: z.ZodTypeAny): { inner: z.ZodTypeAny; optional: boolean; nullable: boolean } => {\n let cur = s;\n let optional = false;\n let nullable = false;\n\n let type = getZodType(cur);\n\n // Iteratively unwrap wrappers\n while (type) {\n switch (type) {\n case 'optional':\n optional = true;\n cur = getZodDefSchemaProperty(cur, 'innerType') ?? cur;\n break;\n case 'nullable':\n nullable = true;\n cur = getZodDefSchemaProperty(cur, 'innerType') ?? cur;\n break;\n case 'default':\n cur = getZodDefSchemaProperty(cur, 'innerType') ?? cur;\n break;\n case 'pipe':\n // For pipe/effects, prefer the output schema for serialization\n cur = getZodDefSchemaProperty(cur, 'out') ?? getZodDefSchemaProperty(cur, 'in') ?? cur;\n break;\n case 'readonly':\n cur = getZodDefSchemaProperty(cur, 'innerType') ?? cur;\n break;\n case 'catch':\n cur = getZodDefSchemaProperty(cur, 'innerType') ?? cur;\n break;\n default:\n // Not a wrapper type, stop unwrapping\n return { inner: cur, optional, nullable };\n }\n type = getZodType(cur);\n }\n\n return { inner: cur, optional, nullable };\n };\n\n const { inner, optional, nullable } = unwrapWithFlags(schema);\n\n // Get custom field metadata from the ORIGINAL schema (not inner)\n // This ensures we find decorators at any wrapper level\n const metadata = getCustomFieldMetadata(schema);\n\n // Also check for range metadata (stored in SCHEMA_METADATA.rangeConfig)\n const rangeMetadata = getRangeMetadata(schema) ?? getRangeMetadata(inner);\n\n const withMeta = (o: SerializableZodSchema): SerializableZodSchema => {\n const hasMeta = metadata && Object.keys(metadata).length > 0;\n const hasRangeMeta = rangeMetadata !== undefined;\n\n if (!hasMeta && !hasRangeMeta) return o;\n\n // Merge custom field metadata with range metadata if present\n const fullMetadata: CustomFieldMetadata = {\n ...metadata,\n ...(hasRangeMeta ? { rangeType: rangeMetadata.type, rangeConfig: rangeMetadata } : {}),\n };\n\n return { ...o, metadata: fullMetadata };\n };\n\n // Get type from Zod 4 structure (_zod.def.type)\n const type = getZodType(inner);\n\n switch (type) {\n case 'string': {\n const description = (inner as z.ZodString).description;\n return withOptionals(withMeta({ type: 'string', ...(description ? { description } : {}) }), optional, nullable);\n }\n case 'number':\n case 'int':\n return withOptionals(withMeta({ type: 'number' }), optional, nullable);\n case 'bigint':\n return withOptionals(withMeta({ type: 'bigint' }), optional, nullable);\n case 'boolean':\n return withOptionals(withMeta({ type: 'boolean' }), optional, nullable);\n case 'date':\n return withOptionals(withMeta({ type: 'date' }), optional, nullable);\n case 'any':\n return withOptionals(withMeta({ type: 'any' }), optional, nullable);\n case 'unknown':\n return withOptionals(withMeta({ type: 'unknown' }), optional, nullable);\n case 'literal': {\n // In Zod 4 a literal's value lives in def.values (an ARRAY — z.literal(['a','b'])\n // is legal in v4); the legacy Zod-3 def.value is always undefined in v4. Reading\n // def.value alone emitted { type: 'literal', value: undefined } for EVERY literal,\n // which then round-tripped through deserializeZodSchema as z.literal(undefined).\n // Read def.values first, fall back to def.value, and take the first non-nullish\n // entry — preserving string/number/boolean literals. (A bare z.literal(null) has no\n // non-nullish entry and legitimately serializes as value: undefined.) Mirrors the\n // Zod-4 literal read in zod-to-mongoose-schema-convertor.backend.service.ts.\n const literalValues = (getZodDefArrayProperty(inner, 'values') ?? [getZodDefProperty(inner, 'value')])\n .filter((entry) => entry !== undefined && entry !== null);\n const value = literalValues[0];\n return withOptionals(withMeta({ type: 'literal', value }), optional, nullable);\n }\n case 'enum': {\n // In Zod 4, both z.enum() and z.enum() use type 'enum'\n // Use the existing getEnumValues helper which handles both cases\n const values = getEnumValues(inner);\n return withOptionals(withMeta({ type: 'enum', values }), optional, nullable);\n }\n case 'array': {\n const element = getZodDefSchemaProperty(inner, 'element');\n return withOptionals(withMeta({\n type: 'array',\n element: serializeZodSchema(element, new Set(seen))!\n }), optional, nullable);\n }\n case 'set': {\n const element = getZodDefSchemaProperty(inner, 'valueType');\n return withOptionals(withMeta({\n type: 'set',\n element: serializeZodSchema(element, new Set(seen))!\n }), optional, nullable);\n }\n case 'tuple': {\n const items = getZodDefArrayProperty(inner, 'items') ?? [];\n return withOptionals(withMeta({\n type: 'tuple',\n items: items\n .filter((o): o is z.ZodTypeAny => isZodTypeAny(o))\n .map(o => serializeZodSchema(o, new Set(seen))!)\n }), optional, nullable);\n }\n case 'record': {\n const keySchema = getZodDefSchemaProperty(inner, 'keyType');\n const valueSchema = getZodDefSchemaProperty(inner, 'valueType');\n return withOptionals(withMeta({\n type: 'record',\n key: serializeZodSchema(keySchema, new Set(seen))!,\n value: serializeZodSchema(valueSchema, new Set(seen))!\n }), optional, nullable);\n }\n case 'union': {\n const options = getZodDefArrayProperty(inner, 'options') ?? [];\n return withOptionals(withMeta({\n type: 'union',\n options: options\n .filter((o): o is z.ZodTypeAny => isZodTypeAny(o))\n .map(o => serializeZodSchema(o, new Set(seen))!)\n }), optional, nullable);\n }\n case 'object': {\n // Use the existing getZodObjectShape helper (Zod 4 uses .shape property)\n const shape = getZodObjectShape(inner);\n const props: Record<string, SerializableZodSchema> = {};\n for (const [k, v] of Object.entries(shape)) {\n props[k] = serializeZodSchema(v, new Set(seen)) || { type: 'unknown' };\n }\n return withOptionals(withMeta({ type: 'object', properties: props }), optional, nullable);\n }\n case 'lazy':\n return withOptionals(withMeta({ type: 'lazy' }), optional, nullable);\n default:\n return withOptionals(withMeta({ type: 'unknown' }), optional, nullable);\n }\n}\n\n\n\n/**\n * Deserialize a SerializableZodSchema back into a Zod schema.\n * - Reconstructs approximate Zod types from the descriptor\n * - Re-applies optional/nullable wrappers\n * - Re-applies SCHEMA_METADATA as decorators when possible\n */\nexport function deserializeZodSchema(desc: SerializableZodSchema | null | undefined): any {\n if (!desc) return undefined;\n\n const applyOptionalNullable = (schema: z.ZodTypeAny, d: SerializableZodSchema): z.ZodTypeAny => {\n let s: z.ZodTypeAny = schema;\n if ((d as any).optional) s = s.optional();\n if ((d as any).nullable) s = s.nullable();\n return s;\n };\n\n const applyMetadata = <T extends z.ZodTypeAny>(schema: T, metadata?: CustomFieldMetadata): T => {\n if (!metadata || Object.keys(metadata).length === 0) return schema;\n const decorators: DecoratorInput[] = [];\n\n // Boolean decorators (no params)\n if (metadata[ZodDecorator.IS_DB_INDEXED]) {\n decorators.push(ZodDecorator.IS_DB_INDEXED);\n }\n if (metadata[ZodDecorator.IS_FOREIGN_KEY]) {\n decorators.push(ZodDecorator.IS_FOREIGN_KEY);\n }\n\n // Hidden decorator (HiddenFieldParams | true)\n const hidden = metadata[ZodDecorator.IS_HIDDEN];\n if (hidden !== undefined) {\n decorators.push({\n ref: ZodDecorator.IS_HIDDEN,\n params: hidden === true ? undefined : hidden\n });\n }\n\n // Not editable decorator (NotEditableFieldParams | true)\n const notEditable = metadata[ZodDecorator.IS_NOT_EDITABLE];\n if (notEditable !== undefined) {\n decorators.push({\n ref: ZodDecorator.IS_NOT_EDITABLE,\n params: notEditable === true ? undefined : notEditable\n });\n }\n\n // Array UI decorator (ArrayUIParams) — also carries absorbed isSortable config\n const arrayUI = metadata[ZodDecorator.ARRAY_UI];\n if (arrayUI !== undefined) {\n decorators.push({\n ref: ZodDecorator.ARRAY_UI,\n params: arrayUI\n });\n }\n\n // Object UI decorator (ObjectUIParams)\n const objectUI = metadata[ZodDecorator.OBJECT_UI];\n if (objectUI !== undefined) {\n decorators.push({\n ref: ZodDecorator.OBJECT_UI,\n params: objectUI\n });\n }\n\n return (decorators.length > 0 ? addDecorators(schema, decorators) : schema) as T;\n };\n\n const build = (d: SerializableZodSchema): z.ZodTypeAny => {\n switch (d.type) {\n case 'string': {\n let s = z.string();\n // Note: description is used for API docs; set if present\n if ((d as any).description) s = s.describe((d as any).description);\n s = applyMetadata(s, (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'number': {\n const s = applyMetadata(z.number(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'bigint': {\n const s = applyMetadata(z.bigint(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'boolean': {\n const s = applyMetadata(z.boolean(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'date': {\n const s = applyMetadata(z.date(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'any': {\n const s = applyMetadata(z.any(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'unknown': {\n const s = applyMetadata(z.unknown(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'literal': {\n const s = applyMetadata(z.literal((d as any).value), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'enum': {\n const values = (d as any).values as string[];\n // If values are missing/empty, fall back to string (cannot build z.enum([]))\n const base = values && values.length > 0\n ? z.enum(values as [string, ...string[]])\n : z.string();\n const s = applyMetadata(base, (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'array': {\n const el = build((d as any).element);\n const s = applyMetadata(z.array(el), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'set': {\n const el = build((d as any).element);\n const s = applyMetadata(z.set(el), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'tuple': {\n const items = ((d as any).items as SerializableZodSchema[]).map(build);\n const s = applyMetadata(\n items.length >= 1\n ? z.tuple(items as [z.ZodTypeAny, ...z.ZodTypeAny[]])\n : z.tuple([z.any()]),\n (d as any).metadata\n );\n return applyOptionalNullable(s as any, d);\n }\n case 'record': {\n const val = build((d as any).value);\n // Zod records only support string keys; fall back to string keys for non-string keys\n const keyDesc = (d as any).key as SerializableZodSchema | undefined;\n const keySchema = keyDesc && keyDesc.type === 'string' ? z.string() : z.string();\n const s = applyMetadata(z.record(keySchema, val), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'union': {\n const options = ((d as any).options as SerializableZodSchema[]).map(build);\n const s = applyMetadata(options.length >= 2 ? z.union(options as [z.ZodTypeAny, z.ZodTypeAny, ...z.ZodTypeAny[]]) : (options[0] || z.any()), (d as any).metadata);\n return applyOptionalNullable(s as any, d);\n }\n case 'object': {\n const metadata = (d as any).metadata as CustomFieldMetadata | undefined;\n const rangeConfig = metadata?.rangeConfig;\n\n // Check if this is a range schema (has rangeConfig metadata)\n if (rangeConfig && rangeConfig.type) {\n const rangeSchema = z_range(rangeConfig.type, {\n fromOptional: rangeConfig.fromOptional,\n toOptional: rangeConfig.toOptional,\n min: rangeConfig.min,\n max: rangeConfig.max,\n });\n // Apply other decorators (excluding range-specific ones that are already applied)\n const metadataWithoutRange = { ...metadata };\n delete metadataWithoutRange.rangeType;\n delete metadataWithoutRange.rangeConfig;\n const s = applyMetadata(rangeSchema, metadataWithoutRange);\n return applyOptionalNullable(s, d);\n }\n\n // Regular object schema\n const props = (d as any).properties as Record<string, SerializableZodSchema>;\n const shape: Record<string, z.ZodTypeAny> = {};\n for (const [k, v] of Object.entries(props || {})) {\n shape[k] = build(v as SerializableZodSchema) || z.unknown();\n }\n const s = applyMetadata(z.object(shape), metadata);\n return applyOptionalNullable(s, d);\n }\n case 'lazy': {\n // Cannot reconstruct true lazy structure; fallback\n const s = applyMetadata(z.any(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n default: {\n const s = applyMetadata(z.unknown(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n }\n };\n\n return build(desc);\n}\n\n\n\n// =============================================================================\n// VIRTUAL FIELD UTILITIES\n// =============================================================================\n\n/**\n * Check if a schema is marked as a virtual field.\n * Virtual fields are computed at runtime and not stored in the database.\n */\nexport function isVirtualField(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.IS_VIRTUAL);\n}\n\n\n/**\n * Get the virtual field parameters from a schema.\n * Returns undefined if the field is not virtual.\n */\nexport function getVirtualFieldParams(schema: z.ZodTypeAny): VirtualFieldParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n const virtualMetadata = metadata[ZodDecorator.IS_VIRTUAL];\n\n if (!virtualMetadata) return undefined;\n\n return virtualMetadata as VirtualFieldParams;\n}\n\n/**\n * Get the dependencies declared for a virtual field.\n * Returns an empty array if no dependencies are declared or the field is not virtual.\n */\nexport function getVirtualFieldDependencies(schema: z.ZodTypeAny): string[] {\n const params = getVirtualFieldParams(schema);\n return params?.dependencies ?? [];\n}\n\n/**\n * Check if a virtual field needs object context (parents/children) for computation.\n */\nexport function virtualFieldNeedsObjectContext(schema: z.ZodTypeAny): boolean {\n const params = getVirtualFieldParams(schema);\n return params?.needsObjectContext ?? false;\n}\n\n/**\n * Check if a virtual field needs user context for computation.\n */\nexport function virtualFieldNeedsUserContext(schema: z.ZodTypeAny): boolean {\n const params = getVirtualFieldParams(schema);\n return params?.needsUserContext ?? false;\n}\n\n\n// =============================================================================\n// FORM SCHEMA PREPARATION UTILITIES\n// =============================================================================\n\n/**\n * Operation type for schema preparation.\n */\nexport type FormSchemaOperationType = 'CREATE' | 'UPDATE' | 'READ';\n\n/**\n * Options for prepareFormSchema utility.\n */\nexport interface PrepareFormSchemaOptions {\n /**\n * The operation type (CREATE, UPDATE, or READ).\n * Used to filter excludeFromCreate/excludeFromUpdate fields.\n */\n operationType: FormSchemaOperationType;\n\n /**\n * Whether the form is in draft mode.\n * When true, fields with isDraftRelaxed() become optional.\n * @default false\n */\n isDraftMode?: boolean;\n\n /**\n * Optional operation that behaves like a core operation.\n * For example, 'DUPLICATE' might behave like 'CREATE'.\n */\n operationLike?: FormSchemaOperationType;\n}\n\n/**\n * Check if a field should be excluded from form validation based on its decorators.\n */\nexport function shouldExcludeFieldFromForm(\n fieldSchema: z.ZodTypeAny,\n operationType: FormSchemaOperationType\n): boolean {\n // Exclude virtual fields (computed at runtime)\n if (hasDecorator(fieldSchema, ZodDecorator.IS_VIRTUAL)) {\n return true;\n }\n\n // Exclude backend-only fields (never sent to frontend)\n if (hasDecorator(fieldSchema, ZodDecorator.IS_BACKEND_ONLY)) {\n return true;\n }\n\n // Exclude hidden fields (but respect edit: false param which means visible in edit mode)\n const hiddenMetadata = getHiddenFieldMetadata(fieldSchema);\n if (hiddenMetadata !== undefined) {\n // If hiddenMetadata is true (no params), field is hidden everywhere\n if (hiddenMetadata === true) {\n return true;\n }\n // If hiddenMetadata has params, check the edit flag\n // edit: false means \"NOT hidden in edit mode\" (visible in forms)\n // edit: true or undefined means \"hidden in edit mode\"\n if (hiddenMetadata.edit !== false) {\n return true;\n }\n // edit: false - field is visible in forms, don't exclude\n }\n\n // Exclude excludeFromCreate fields for CREATE operations\n if (operationType === 'CREATE' && hasDecorator(fieldSchema, ZodDecorator.EXCLUDE_FROM_CREATE)) {\n return true;\n }\n\n // Exclude excludeFromUpdate fields for UPDATE operations\n if (operationType === 'UPDATE' && hasDecorator(fieldSchema, ZodDecorator.EXCLUDE_FROM_UPDATE)) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Check if a field has isDraftRelaxed decorator.\n */\nexport function isDraftRelaxedField(fieldSchema: z.ZodTypeAny): boolean {\n return hasDecorator(fieldSchema, ZodDecorator.IS_DRAFT_RELAXED);\n}\n\n/**\n * Prepare a schema for form validation by filtering out fields that shouldn't be validated\n * and adjusting optionality based on draft mode.\n *\n * This function:\n * - Removes virtual fields\n * - Removes backend-only fields\n * - Removes hidden fields\n * - Removes excludeFromCreate fields (for CREATE operations)\n * - Removes excludeFromUpdate fields (for UPDATE operations)\n * - Makes isDraftRelaxed fields optional when in draft mode\n *\n * **WARNING: Schema-level refinements (.refine(), .superRefine()) are NOT carried over.**\n * The returned schema is a new z.object() with the filtered shape — any cross-field\n * validation defined via refinements on the original schema will be silently lost.\n * This is intentional for draft mode (draft = relaxed validation), but callers using\n * this outside of draft mode should be aware that cross-field rules won't apply.\n * For non-draft form validation, use the original schema (e.g., operation.requestDto) directly.\n *\n * @param schema - The original object schema\n * @param options - Preparation options\n * @returns A new schema suitable for form validation (without schema-level refinements)\n */\nexport function prepareFormSchema<T extends z.ZodObject<z.ZodRawShape>>(\n schema: T,\n options: PrepareFormSchemaOptions\n): z.ZodObject<z.ZodRawShape> {\n const { operationType, isDraftMode = false, operationLike } = options;\n const effectiveOperationType = operationLike ?? operationType;\n\n // Get the shape of the object schema\n const shape = schema.shape as Record<string, z.ZodTypeAny>;\n const newShape: Record<string, z.ZodTypeAny> = {};\n\n // Process each field\n for (const [fieldName, fieldSchema] of Object.entries(shape)) {\n // Skip fields that should be excluded\n if (shouldExcludeFieldFromForm(fieldSchema, effectiveOperationType)) {\n continue;\n }\n\n // If in draft mode and field is draft-relaxed, make it optional\n if (isDraftMode && isDraftRelaxedField(fieldSchema)) {\n // Wrap in optional if not already optional\n if (!isOptional(fieldSchema)) {\n newShape[fieldName] = fieldSchema.optional();\n } else {\n newShape[fieldName] = fieldSchema;\n }\n } else {\n newShape[fieldName] = fieldSchema;\n }\n }\n\n // Create new object schema with filtered shape\n const newSchema = z.object(newShape);\n\n // M5: Preserve schema-level metadata from original schema (e.g., isHidden, showWhen)\n // Use double assertion via unknown to handle symbol indexing safely\n type SchemaWithMetadata = { [key: symbol]: unknown };\n const schemaAsAny = schema as unknown as SchemaWithMetadata;\n const originalMetadata = schemaAsAny[SCHEMA_METADATA];\n if (originalMetadata && typeof originalMetadata === 'object') {\n const newSchemaAsAny = newSchema as unknown as SchemaWithMetadata;\n newSchemaAsAny[SCHEMA_METADATA] = { ...(originalMetadata as Record<string, unknown>) };\n }\n\n // Note: We don't copy schema-level refinements in draft mode to avoid cross-field validation\n // For non-draft mode, refinements should ideally be copied but that requires deeper schema introspection\n return newSchema;\n}\n\n/**\n * Check if a schema field is marked as ephemeral (transient response-only data).\n * Ephemeral fields are shown once (e.g., API keys upon creation) and not persisted in the UI.\n */\nexport function isEphemeralField(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.IS_EPHEMERAL);\n}\n\n\n// =============================================================================\n// Unified {primitive}UI Reader Functions\n// =============================================================================\n// Return the full nested structure: { display?, summaryOverride?, edit? }.\n// Consumers access context-specific params via e.g. getStringUI(s)?.edit?.editMode.\n\nexport function getBooleanUI(schema: z.ZodTypeAny): BooleanUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.BOOLEAN_UI];\n}\nexport function hasBooleanUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.BOOLEAN_UI);\n}\n\nexport function getStringUI(schema: z.ZodTypeAny): StringUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.STRING_UI];\n}\nexport function hasStringUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.STRING_UI);\n}\n\nexport function getNumberUI(schema: z.ZodTypeAny): NumberUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.NUMBER_UI];\n}\nexport function hasNumberUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.NUMBER_UI);\n}\n\nexport function getEnumUI(schema: z.ZodTypeAny): EnumUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.ENUM_UI];\n}\nexport function hasEnumUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.ENUM_UI);\n}\n\nexport function getDateUI(schema: z.ZodTypeAny): DateUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.DATE_UI];\n}\nexport function hasDateUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.DATE_UI);\n}\n\nexport function getDateTimeUI(schema: z.ZodTypeAny): DateTimeUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.DATETIME_UI];\n}\nexport function hasDateTimeUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.DATETIME_UI);\n}\n\nexport function getTimeUI(schema: z.ZodTypeAny): TimeUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.TIME_UI];\n}\nexport function hasTimeUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.TIME_UI);\n}\n\nexport function getMoneyUI(schema: z.ZodTypeAny): MoneyUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.MONEY_UI];\n}\nexport function hasMoneyUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.MONEY_UI);\n}\n\nexport function getCodeUI(schema: z.ZodTypeAny): CodeUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.CODE_UI];\n}\nexport function hasCodeUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.CODE_UI);\n}\n\nexport function getFileUI(schema: z.ZodTypeAny): FileUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.FILE_UI];\n}\nexport function hasFileUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.FILE_UI);\n}\n\nexport function getDurationUI(schema: z.ZodTypeAny): DurationUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.DURATION_UI];\n}\nexport function hasDurationUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.DURATION_UI);\n}\n\nexport function getPhoneUI(schema: z.ZodTypeAny): PhoneUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.PHONE_UI];\n}\nexport function hasPhoneUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.PHONE_UI);\n}\n\nexport function getBigDecimalUI(schema: z.ZodTypeAny): BigDecimalUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.BIGDECIMAL_UI];\n}\nexport function hasBigDecimalUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.BIGDECIMAL_UI);\n}\n\nexport function getForeignKeyUI(schema: z.ZodTypeAny): ForeignKeyUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.FOREIGN_KEY_UI];\n}\nexport function hasForeignKeyUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.FOREIGN_KEY_UI);\n}\n\nexport function getArrayUI(schema: z.ZodTypeAny): ArrayUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.ARRAY_UI];\n}\nexport function hasArrayUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.ARRAY_UI);\n}\n\nexport function getObjectUI(schema: z.ZodTypeAny): ObjectUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.OBJECT_UI];\n}\nexport function hasObjectUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.OBJECT_UI);\n}\n\n\n"]}
1
+ {"version":3,"file":"zod-utils.shared.js","sourceRoot":"","sources":["../../src/zod-utils.shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACvG,OAAO,EACuC,gCAAgC,EAA4B,oBAAoB,EAAuI,eAAe,EAAE,kBAAkB,EAAqM,SAAS,EAAE,eAAe,EAAyH,YAAY,EAAyE,MAAM,wBAAwB,CAAC;AACpvB,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAG5E,uDAAuD;AACvD,kCAAkC;AAClC,uDAAuD;AACvD,4EAA4E;AAC5E,MAAM,UAAU,eAAe,CAAC,MAAe;IAC7C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAExD,yDAAyD;IACzD,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;QACrB,MAAM,SAAS,GAAG,MAA4C,CAAC;QAC/D,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC;QAC/B,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;YACxE,MAAM,MAAM,GAAG,OAAkC,CAAC;YAClD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;YAC3B,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;gBACzE,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;QACpB,MAAM,SAAS,GAAG,MAA4C,CAAC;QAC/D,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC;QAC9B,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;YACzE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAMD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAAoB,EAAE,SAAuB;IACxE,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IAElC,wCAAwC;IACxC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,iFAAiF;QACjF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAQ,KAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;QACtC,CAAC;QACD,sDAAsD;QACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,2DAA2D;QAC3D,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAChD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,0CAA0C;QAC1C,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAEhC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,UAAU,CAAC;QAChB,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACjE,OAAO,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1D,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACjE,OAAO,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1D,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,QAAQ,GAAG,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACvD,OAAO,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACpD,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACjE,OAAO,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1D,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACjE,OAAO,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1D,CAAC;QACD;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,UAAU,oBAAoB,CAAC,WAAyB;IAC5D,MAAM,eAAe,GAAG,yBAAyB,CAAC,WAAW,CAAC,CAAC;IAE/D,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,OAAO,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;IACtF,CAAC;IAED,MAAM,SAAS,GAAG,uBAAuB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACpE,IAAI,CAAC,SAAS;QAAE,OAAO,WAAW,CAAC,QAAQ,EAAE,CAAC;IAE9C,6FAA6F;IAC7F,qDAAqD;IACrD,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;IAC3C,MAAM,sBAAsB,GAAI,WAAkD,CAAC,eAAe,CAAC,CAAC;IACpG,IAAI,sBAAsB,EAAE,CAAC;QAC3B,MAAM,cAAc,GAAG,aAAmD,CAAC;QAC3E,MAAM,QAAQ,GAAI,cAAc,CAAC,eAAe,CAA6B,IAAI,EAAE,CAAC;QACpF,cAAc,CAAC,eAAe,CAAC,GAAG;YAChC,GAAG,QAAQ;YACX,GAAI,sBAAkD;SACvD,CAAC;IACJ,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,MAAM,UAAU,+BAA+B,CAAC,WAAyB,EAAE,KAAc;IACvF,OAAO,qBAAqB,CAAC,WAAW,EAAE,KAAK,EAAE,0BAA0B,CAAC,CAAC;AAC/E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,+BAA+B,CAAC,WAAyB,EAAE,KAAc;IACvF,OAAO,qBAAqB,CAAC,WAAW,EAAE,KAAK,EAAE,0BAA0B,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,qBAAqB,CAC5B,WAAyB,EACzB,KAAc,EACd,WAAmD;IAEnD,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAE9C,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC;IAC1D,IAAI,QAAQ,KAAK,cAAc,CAAC,QAAQ,IAAI,QAAQ,KAAK,cAAc,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IAE1F,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAC;IAE5C,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,0BAA0B,CAAC,WAAyB;IAClE,OAAO,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;AAC7C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B,CAAC,WAAyB;IAClE,OAAO,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,yBAAyB,CAAC,WAAW,CAAC,CAAC;AACvF,CAAC;AAED;;;;;;GAMG;AACH,SAAS,mBAAmB,CAAC,KAAc;IACzC,OAAO,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;AAC/D,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,yBAAyB,CAAC,WAAyB;IACjE,uFAAuF;IACvF,0EAA0E;IAC1E,IAAI,YAAY,CAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAC;IAE5C,IAAI,CAAC,4BAA4B,CAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAC;IAE7D,yFAAyF;IACzF,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;AAC9C,CAAC;AAED;;;;;;GAMG;AACH,SAAS,4BAA4B,CAAC,WAAyB;IAC7D,IAAI,YAAY,CAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,aAAa,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAE5C,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACrC,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACtF,MAAM,WAAW,GAAG,uBAAuB,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,uBAAuB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACpH,OAAO,WAAW,CAAC,CAAC,CAAC,4BAA4B,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACzE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAGD,gFAAgF;AAChF,6BAA6B;AAC7B,EAAE;AACF,8DAA8D;AAC9D,4BAA4B;AAC5B,iCAAiC;AACjC,sDAAsD;AACtD,2EAA2E;AAC3E,gFAAgF;AAEhF,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,uCAAuC;IACvC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,GAAG,EAAE,IAAI;QAAE,OAAO,GAAG,CAAC,IAAI,CAAC;IAE/B,4CAA4C;IAC5C,IAAI,MAAM,IAAI,MAAM,IAAI,OAAQ,MAA6C,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAChG,OAAQ,MAA6C,CAAC,IAAc,CAAC;IACvE,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,MAAoB,EAAE,IAAY;IAC3D,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC9C,OAAO,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,OAAO,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAyB,EAAE,OAAqB;IAC/E,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,MAAM,GAAG,GAAI,WAAuE,CAAC,IAAI,EAAE,GAAG,CAAC;IAC/F,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,OAAQ,WAAoE,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;AAC1G,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAoB;IAChD,OAAO,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAoB;IAChD,OAAO,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,OAAO,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,OAAO,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACpD,OAAO,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,OAAO,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAoB;IAC5C,OAAO,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,OAAO,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC9C,OAAO,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAoB;IAC3C,OAAO,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAoB;IAC5C,OAAO,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IACtC,sFAAsF;IACtF,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,MAAM,SAAS,GAAG,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACzD,OAAO,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC;IACnE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC9C,OAAO,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC;AAGD,MAAM,UAAU,OAAO,CAAC,KAAc;IACpC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,KAAK,KAAK,IAAI;QACd,KAAK,KAAK,SAAS;QACnB,OAAO,KAAK,KAAK,QAAQ;QACzB,eAAe,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAoB;IACvD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,uBAAuB,CAAC,MAAM,EAAE,eAAe,CAAC,KAAK,SAAS,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAEhC,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,CAAC,yCAAyC;IAE9E,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACtF,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC1G,OAAO,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACvD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,MAAoB;IAC5C,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAEhC,wCAAwC;IACxC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,MAAM,SAAS,GAAG,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACzD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;YACtC,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACzB,0DAA0D;gBAC1D,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,MAAM,QAAQ,GAAG,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACvD,OAAO,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAChD,CAAC;IAED,+CAA+C;IAC/C,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kCAAkC;IAClC,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QAChH,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACjE,OAAO,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACtD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAGD,gFAAgF;AAChF,wBAAwB;AACxB,gFAAgF;AAEhF;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,MAAoB;IAChD,qDAAqD;IACrD,0EAA0E;IAC1E,kEAAkE;IAClE,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,gEAAgE;QAChE,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACvC,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,SAAS,CAAC,MAAM;gBACnB,OAAO,eAAe,CAAC,YAAY,CAAC;YACtC,KAAK,SAAS,CAAC,IAAI;gBACjB,OAAO,eAAe,CAAC,UAAU,CAAC;YACpC,KAAK,SAAS,CAAC,QAAQ;gBACrB,OAAO,eAAe,CAAC,cAAc,CAAC;YACxC,KAAK,SAAS,CAAC,IAAI;gBACjB,OAAO,eAAe,CAAC,UAAU,CAAC;YACpC,KAAK,SAAS,CAAC,UAAU;gBACvB,OAAO,eAAe,CAAC,gBAAgB,CAAC;YAC1C,KAAK,SAAS,CAAC,KAAK;gBAClB,OAAO,eAAe,CAAC,WAAW,CAAC;YACrC;gBACE,6EAA6E;gBAC7E,OAAO,eAAe,CAAC,OAAO,CAAC;QACnC,CAAC;IACH,CAAC;IAED,iDAAiD;IACjD,kDAAkD;IAClD,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,eAAe,CAAC,KAAK,CAAC;IAC/B,CAAC;IAED,2DAA2D;IAC3D,uDAAuD;IACvD,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,OAAO,eAAe,CAAC,UAAU,CAAC;IACpC,CAAC;IAED,+CAA+C;IAC/C,iDAAiD;IACjD,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,eAAe,CAAC,IAAI,CAAC;IAC9B,CAAC;IAED,+CAA+C;IAC/C,iDAAiD;IACjD,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,eAAe,CAAC,IAAI,CAAC;IAC9B,CAAC;IAED,uDAAuD;IACvD,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,OAAO,eAAe,CAAC,QAAQ,CAAC;IAClC,CAAC;IAED,iDAAiD;IACjD,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,eAAe,CAAC,KAAK,CAAC;IAC/B,CAAC;IAED,+EAA+E;IAC/E,IAAI,2BAA2B,CAAC,MAAM,CAAC,EAAE,CAAC;QACxC,OAAO,eAAe,CAAC,qBAAqB,CAAC;IAC/C,CAAC;IAED,8DAA8D;IAC9D,IAAI,uBAAuB,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,OAAO,eAAe,CAAC,gBAAgB,CAAC;IAC1C,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAEnC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,mEAAmE;YACnE,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;YAC1C,IAAI,MAAM,KAAK,UAAU;gBAAE,OAAO,eAAe,CAAC,QAAQ,CAAC;YAC3D,IAAI,MAAM,KAAK,MAAM;gBAAE,OAAO,eAAe,CAAC,IAAI,CAAC;YACnD,OAAO,eAAe,CAAC,MAAM,CAAC;QAChC,CAAC;QACD,KAAK,QAAQ,CAAC;QACd,KAAK,KAAK,CAAC,CAAC,OAAO,eAAe,CAAC,MAAM,CAAC;QAC1C,KAAK,QAAQ,CAAC,CAAC,OAAO,eAAe,CAAC,MAAM,CAAC;QAC7C,KAAK,SAAS,CAAC,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC;QAC/C,KAAK,MAAM;YACT,OAAO,eAAe,CAAC,IAAI,CAAC;QAC9B,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,iEAAiE;YACjE,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,EAAE,QAAQ,CAA0B,CAAC;YAC/E,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBACxD,OAAO,eAAe,CAAC,OAAO,CAAC;YACjC,CAAC;YACD,qCAAqC;YACrC,QAAQ,OAAO,YAAY,EAAE,CAAC;gBAC5B,KAAK,QAAQ;oBACX,wEAAwE;oBACxE,OAAO,eAAe,CAAC,IAAI,CAAC;gBAC9B,KAAK,QAAQ,CAAC;gBACd,KAAK,QAAQ;oBACX,OAAO,eAAe,CAAC,MAAM,CAAC;gBAChC,KAAK,SAAS;oBACZ,OAAO,eAAe,CAAC,OAAO,CAAC;gBACjC;oBACE,OAAO,eAAe,CAAC,OAAO,CAAC;YACnC,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC;QACzC,KAAK,QAAQ,CAAC,CAAC,OAAO,eAAe,CAAC,MAAM,CAAC;QAC7C,KAAK,OAAO,CAAC,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC;QAC3C,KAAK,KAAK,CAAC,CAAC,OAAO,eAAe,CAAC,GAAG,CAAC;QACvC,KAAK,OAAO,CAAC,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC;QAC3C,KAAK,QAAQ,CAAC,CAAC,OAAO,eAAe,CAAC,MAAM,CAAC;QAC7C,KAAK,KAAK,CAAC,CAAC,OAAO,eAAe,CAAC,GAAG,CAAC;QACvC,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,6CAA6C;YAC7C,4DAA4D;YAC5D,8CAA8C;YAC9C,MAAM,OAAO,GAAG,sBAAsB,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;YACnE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,eAAe,CAAC,OAAO,CAAC;YAEzD,6EAA6E;YAC7E,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;gBACjD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACrC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAmB,CAAC,CAAC;gBAChD,OAAO,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,SAAS,CAAC;YACrD,CAAC,CAAC,CAAC;YAEH,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,eAAe,CAAC,IAAI,CAAC;YAC9B,CAAC;YAED,yCAAyC;YACzC,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC9B,OAAO,aAAa,CAAC,WAA2B,CAAC,CAAC;YACpD,CAAC;YAED,OAAO,eAAe,CAAC,OAAO,CAAC;QACjC,CAAC;QACD,OAAO,CAAC,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC;IAC1C,CAAC;AACH,CAAC;AAGD,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAGhF;;;GAGG;AACH,SAAS,kBAAkB,CAAC,MAAoB;IAC9C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAE5D,MAAM,OAAO,GAAI,MAAc,CAAC,IAAI,CAAC;IACrC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAE9D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACxB,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAEtD,OAAO,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,CAAC;AAGD;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACpD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,mEAAmE;IACnE,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,KAAK,IAAI,EAAE,CAAC;AACrB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAAoB;IAC9D,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,sBAAsB,CAAC,MAAM,EAAE,SAAS,CAA+B,CAAC;QACxF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,MAAM,GAAiC,EAAE,CAAC;QAChD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACzE,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBACnE,IAAI,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,EAAE,CAAC;oBAC3B,MAAM,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC;gBAClC,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gCAAgC,CAC9C,MAAoB,EACpB,KAAc;IAEd,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAE7D,MAAM,aAAa,GAAG,uBAAuB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACvE,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAEhC,MAAM,kBAAkB,GAAI,KAAiC,CAAC,aAAa,CAAC,CAAC;IAC7E,IAAI,kBAAkB,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAElD,MAAM,OAAO,GAAG,CAAC,sBAAsB,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,EAAE,CAAmB,CAAC;IACpF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YAAE,SAAS;QACnC,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,mBAAmB,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;QACvD,IAAI,CAAC,mBAAmB;YAAE,SAAS;QACnC;;;;WAIG;QACH,MAAM,aAAa,GAAG,sBAAsB,CAAC,mBAAmB,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClF,IAAI,aAAa,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAAE,OAAO,MAAM,CAAC;IAChE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAoB;IAC5C,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IAE/C,gDAAgD;IAChD,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;QACrB,MAAM,OAAO,GAAI,MAA6C,CAAC,IAAI,CAAC;QACpE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;YACxE,OAAQ,OAA6D,CAAC,GAAG,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,OAAQ,MAAuE,CAAC,GAAG,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAoB,EAAE,QAAgB;IAC5E,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC9B,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAoB,EAAE,QAAgB;IAC3E,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC9B,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAoB,EAAE,QAAgB;IAC5E,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAAoB,EAAE,QAAgB;IAC9E,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC9B,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,OAAO,KAA2B,CAAC;IACrC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAoB,EAAE,QAAgB;IACtE,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC9B,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACrD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC/C,CAAC;AAID;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAoB;IACzD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,oBAAoB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AAC5C,CAAC;AAGD,gFAAgF;AAChF,8CAA8C;AAC9C,gFAAgF;AAEhF;;;;GAIG;AACH,MAAM,iBAAiB,GAAG;IACxB,YAAY,CAAC,UAAU,EAAE,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,SAAS;IACvE,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,WAAW;IACpE,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO;IACjE,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,QAAQ;IACrE,YAAY,CAAC,aAAa,EAAE,YAAY,CAAC,cAAc;IACvD,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,SAAS;CACrC,CAAC;AAEX;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAoB;IACvD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAChD,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;YAC7D,OAAQ,MAAgC,CAAC,IAAI,CAAC;QAChD,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAoB;IAC1D,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAChD,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;YAChE,OAAQ,MAAgC,CAAC,OAAO,CAAC;QACnD,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,8BAA8B,CAAC,MAAoB;IACjE,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAChD,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,SAAS,IAAI,MAAM,IAAI,iBAAiB,IAAI,MAAM,CAAC,EAAE,CAAC;YACjG,MAAM,KAAK,GAAG,MAA+B,CAAC;YAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe;gBAAE,OAAO,SAAS,CAAC;YAC/D,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,eAAe,EAAE,CAAC;QACxD,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,gFAAgF;AAChF,8BAA8B;AAC9B,gFAAgF;AAEhF;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAoB;IACvD,OAAO,uBAAuB,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AAC3D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACpD,OAAO,oBAAoB,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AACxD,CAAC;AAGD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO,QAAQ,CAAC,YAAY,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;AAC1D,CAAC;AAGD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACpD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO,QAAQ,CAAC,YAAY,CAAC,SAAS,CAA+B,CAAC;AACxE,CAAC;AAmBD;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAEvC,IAAI,UAAU,CAAC,SAAS,CAAC,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEjE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAC1D,MAAM,IAAI,GAAI,KAAiC,CAAC,IAAI,CAAC;QAErD,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC;YAC7B,KAAK,KAAK,CAAC,CAAC,OAAO,KAAK,CAAC;YACzB,KAAK,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC;YAC3B,KAAK,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC;YAC3B,KAAK,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC;YAC7B,KAAK,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC;YAC3B,KAAK,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC;YAC7B,KAAK,UAAU,CAAC,CAAC,OAAO,UAAU,CAAC;YACnC,KAAK,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC;YAC3B,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAoB;IACvD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAEvC,IAAI,UAAU,CAAC,SAAS,CAAC,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;IACjE,MAAM,MAAM,GAA+C,EAAE,CAAC;IAE9D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAC1D,MAAM,IAAI,GAAI,KAAiC,CAAC,IAAI,CAAC;QACrD,MAAM,KAAK,GAAI,KAAiC,CAAC,KAAK,CAAC;QAEvD,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,SAAS;QAExC,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;QAC3B,CAAC;QACD,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;QAC3B,CAAC;QACD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;YACzB,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAGD,+DAA+D;AAC/D,0BAA0B;AAC1B,+DAA+D;AAE/D;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAoB;IAMvD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAEnC,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACxC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;IACjE,MAAM,MAAM,GAAmE,EAAE,CAAC;IAElF,qBAAqB;IACrB,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;IAClB,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAC1D,MAAM,IAAI,GAAI,KAAiC,CAAC,IAAI,CAAC;QACrD,MAAM,KAAK,GAAI,KAAiC,CAAC,KAAK,CAAC;QAEvD,IAAI,IAAI,KAAK,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC;QACrB,CAAC;QACD,IAAI,IAAI,KAAK,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC;QACrB,CAAC;QACD,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;YACpB,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,IAAI,KAAK,YAAY,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,wBAAwB;AACxB,+DAA+D;AAE/D;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,MAAoB;IAChD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAEnC,kFAAkF;IAClF,gEAAgE;IAChE,iEAAiE;IACjE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,EAAE,QAAQ,CAA0B,CAAC;QAC/E,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QACjC,6CAA6C;QAC7C,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;YACrC,OAAO,CAAC,YAAY,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,4DAA4D;IAC5D,0DAA0D;IAC1D,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,sBAAsB,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;QACnE,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QAErC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,SAAS,GAAG,aAAa,CAAC,GAAmB,CAAC,CAAC;gBACrD,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;oBAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;wBACzB,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBACpB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACtB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,qEAAqE;IACrE,MAAM,OAAO,GAAG,iBAAiB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACxD,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IAEvD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAkC,CAAC,EAAE,CAAC;QAClE,MAAM,KAAK,GAAI,OAAmC,CAAC,GAAG,CAAC,CAAC;QACxD,+FAA+F;QAC/F,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,sEAAsE;YACtE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAAE,SAAS;YACzC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAGD,+DAA+D;AAC/D,0BAA0B;AAC1B,+DAA+D;AAE/D;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,KAA8B;IACxD,wEAAwE;IACxE,mFAAmF;IACnF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,+CAA+C;IAE5F,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;IACvC,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAEhE,MAAM,eAAe,GAAG,MAAM,IAAI,UAAU,CAAC;IAC7C,MAAM,YAAY,GAAG,WAAW,IAAI,UAAU,IAAI,OAAQ,UAAsC,CAAC,SAAS,KAAK,UAAU,CAAC;IAE1H,OAAO,eAAe,IAAI,YAAY,CAAC;AACzC,CAAC;AAID;;;;;;;;GAQG;AACH,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;AAE9C,SAAS,oBAAoB,CAAC,KAAmC;IAC/D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACzD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAE5C,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjC,OAAO,CAAC,IAAI,CACV,6DAA6D,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;YACzF,gFAAgF;YAChF,6BAA6B,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC9H,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAiC,EAAE,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;GAQG;AACH;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAoB,EAAE,SAAiB;IAC9E,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC;IAE/C,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAE7C,MAAM,OAAO,GAAG,sBAAsB,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;IACnE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,cAAc,CAAC,MAAsB,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,WAAW;YAAE,OAAO,WAAW,CAAC;IACtC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAEvC,IAAI,UAAU,CAAC,SAAS,CAAC,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2EAA2E;IAC3E,IAAI,OAAO,IAAI,SAAS,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ,IAAI,SAAS,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QAC5F,MAAM,KAAK,GAAG,SAAS,CAAC,KAAgC,CAAC;QAEzD,uEAAuE;QACvE,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,oBAAoB,CAAC,KAAqC,CAAC,CAAC;QACrE,CAAC;QACD,sFAAsF;IACxF,CAAC;IAED,+DAA+D;IAC/D,qFAAqF;IACrF,IAAI,MAAM,IAAI,SAAS,EAAE,CAAC;QACxB,MAAM,YAAY,GAAI,SAAgF,CAAC,IAAI,CAAC;QAC5G,IAAI,YAAY,EAAE,GAAG,EAAE,KAAK,IAAI,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC3E,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;YAErC,oDAAoD;YACpD,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,OAAO,oBAAoB,CAAC,KAAqC,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;IACH,CAAC;IAED,sDAAsD;IACtD,+DAA+D;IAC/D,IAAI,OAAO,IAAI,SAAS,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ,IAAI,SAAS,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QAC5F,MAAM,KAAK,GAAG,SAAS,CAAC,KAAgC,CAAC;QACzD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,cAAc,GAAG,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ;YACjE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3D,CAAC,CAAC,KAAK,CAAC;QAEV,MAAM,IAAI,KAAK,CACb,oFAAoF;YACpF,gBAAgB,QAAQ,iCAAiC;YACzD,8BAA8B,cAAc,KAAK;YACjD,gFAAgF,CACjF,CAAC;IACJ,CAAC;IAED,sDAAsD;IACtD,IAAI,MAAM,IAAI,SAAS,EAAE,CAAC;QACxB,MAAM,YAAY,GAAI,SAAgF,CAAC,IAAI,CAAC;QAC5G,IAAI,YAAY,EAAE,GAAG,EAAE,KAAK,IAAI,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC3E,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;YACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,cAAc,GAAG,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ;gBACjE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC3D,CAAC,CAAC,KAAK,CAAC;YAEV,MAAM,IAAI,KAAK,CACb,sFAAsF;gBACtF,gBAAgB,QAAQ,0BAA0B;gBAClD,UAAU,cAAc,KAAK;gBAC7B,gFAAgF,CACjF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAAoB;IAChD,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACzC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kCAAkC,CAChD,SAAuB,EACvB,SAAiB,EAAE,EACnB,sBAAwC,IAAI,GAAG,EAAE,EACjD,oBAA4B,CAAC;IAE7B,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IAED,8EAA8E;IAC9E,MAAM,YAAY,GAAG,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7D,IAAI,YAAY,IAAI,iBAAiB,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,0CAA0C;IAC1C,mBAAmB,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QAEtC,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,iDAAiD;gBACjD,MAAM,KAAK,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;gBAE3C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,EAAE;oBACzD,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;oBAElE,uBAAuB;oBACvB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBAExB,qCAAqC;oBACrC,MAAM,WAAW,GAAG,kCAAkC,CACpD,WAA2B,EAC3B,WAAW,EACX,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAAC,2CAA2C;qBACzE,CAAC;oBACF,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;gBAC7B,CAAC,CAAC,CAAC;gBACH,MAAM;YACR,CAAC;YAED,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,6CAA6C;gBAC7C,MAAM,SAAS,GAAG,uBAAuB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;gBAClE,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,UAAU,GAAG,kCAAkC,CACnD,SAAS,EACT,MAAM,EACN,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAC7B,CAAC;oBACF,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;gBAC5B,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,6CAA6C;gBAC7C,MAAM,SAAS,GAAG,uBAAuB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;gBAClE,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,UAAU,GAAG,kCAAkC,CACnD,SAAS,EACT,MAAM,EACN,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAC7B,CAAC;oBACF,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;gBAC5B,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,kDAAkD;gBAClD,qFAAqF;gBACrF,MAAM,OAAO,GAAG,uBAAuB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;gBAC9D,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,YAAY,GAAG,kCAAkC,CACrD,OAAO,EACP,MAAM,EACN,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAC7B,CAAC;oBACF,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;gBAC9B,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,6DAA6D;gBAC7D,MAAM,OAAO,GAAG,sBAAsB,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;gBACnE,OAAO,CAAC,OAAO,CAAC,CAAC,MAAe,EAAE,EAAE;oBAClC,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;wBACpE,MAAM,UAAU,GAAG,kCAAkC,CACnD,MAAiC,EACjC,MAAM,EACN,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAC7B,CAAC;wBACF,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;oBAC5B,CAAC;gBACH,CAAC,CAAC,CAAC;gBACH,MAAM;YACR,CAAC;YAED,OAAO,CAAC,CAAC,CAAC;gBACR,uEAAuE;gBACvE,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,yDAAyD;IAC3D,CAAC;IAED,2DAA2D;IAC3D,mBAAmB,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACjD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+DAA+D;AAC/D,yBAAyB;AACzB,+DAA+D;AAE/D;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACrD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAEvC,IAAI,UAAU,CAAC,SAAS,CAAC,KAAK,OAAO,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,uBAAuB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC9D,OAAO,OAAO,IAAI,IAAI,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAoB;IACtD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAEvC,IAAI,UAAU,CAAC,SAAS,CAAC,KAAK,OAAO,EAAE,CAAC;QACtC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAA+C,EAAE,CAAC;IAE9D,MAAM,SAAS,GAAG,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAE5D,IAAI,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC;QACvE,MAAM,KAAK,GAAI,SAAqC,CAAC,KAAK,CAAC;QAC3D,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;IAC1D,CAAC;IACD,IAAI,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC;QACvE,MAAM,KAAK,GAAI,SAAqC,CAAC,KAAK,CAAC;QAC3D,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;IAC1D,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,8BAA8B;AAC9B,+DAA+D;AAE/D;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAoB;IACvD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAEvC,IAAI,UAAU,CAAC,SAAS,CAAC,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,uBAAuB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACpE,OAAO,WAAW,IAAI,IAAI,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAAoB;IAChD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAEvC,IAAI,UAAU,CAAC,SAAS,CAAC,KAAK,KAAK,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAG,uBAAuB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAChE,MAAM,WAAW,GAAG,uBAAuB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAEpE,IAAI,SAAS,IAAI,WAAW,EAAE,CAAC;QAC7B,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;IACpC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+DAA+D;AAC/D,0BAA0B;AAC1B,+DAA+D;AAE/D;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAEhC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAC/D,IAAI,OAAO,YAAY,KAAK,UAAU,EAAE,CAAC;YACvC,OAAO,YAAY,EAAE,CAAC;QACxB,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/C,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACjE,OAAO,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAGD,gFAAgF;AAChF,aAAa;AACb,gFAAgF;AAEhF,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC9C,OAAO,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;AAC1D,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,QAAQ,CAAC,MAAoB;IAC3C,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,MAAoB;IACzC,OAAO,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;AAChD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,gFAAgF;AAChF,iFAAiF;AACjF,oFAAoF;AACpF,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAoB;IACtD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;IAEtD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAE9B,OAAO,KAAmC,CAAC;AAC7C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAoB;IACzD,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IAEjD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAmC,CAAC;IACzF,MAAM,OAAO,GAAG,QAAQ,EAAE,OAAO,CAAC;IAElC,OAAO,EAAE,IAAI,EAAE,gCAAgC,EAAE,GAAG,OAAO,EAAE,CAAC;AAChE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAoB;IAC3D,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,MAAM,EAAE,mBAAmB,CAAC;AACrC,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,qCAAqC,CACnD,MAAoB;IAEpB,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,kBAAkB,GAAG,MAAM,EAAE,6BAA6B,CAAC;IACjE,MAAM,QAAQ,GAAG,MAAM,EAAE,mBAAmB,CAAC;IAC7C,IAAI,CAAC,kBAAkB,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAChF,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACpD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,QAAQ,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,SAAS,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,QAAQ,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,KAAK,SAAS,CAAC;AACjE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAoB;IACxD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;IACxD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC,CAAC,uDAAuD;IACtF,OAAO,KAA2B,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACrD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,QAAQ,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,SAAS,CAAC;AAChE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAoB;IACvD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;IACvD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC,CAAC,uDAAuD;IACtF,OAAO,KAA+B,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAoB;IACzD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,QAAQ,EAAE,CAAC,YAAY,CAAC,oBAAoB,CAAC,KAAK,SAAS,CAAC;AACrE,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAoB;IAC3D,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC;IAC9D,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3E,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACpD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;IACvD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAE,KAA2B,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7F,CAAC;AACD,4DAA4D;AAE5D;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAoB;IACvD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,QAAQ,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;AAC7D,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAoB;IAClD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;IAC1D,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC3D,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAQ,KAAkC,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QACrH,OAAO,KAAiC,CAAC;IAC3C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAoB;IAC5D,OAAO,sBAAsB,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;AACnD,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACrD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,6FAA6F;IAC7F,+FAA+F;IAC/F,gGAAgG;IAChG,sEAAsE;IACtE,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC,YAAY,CAAC,UAAU,CAAY,CAAC;IAC7D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC;IAC/E,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAE,KAAgC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5E,CAAC;AACD,uDAAuD;AAEvD;;;;;;;;GAQG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAoB;IAC5D,OAAO,sBAAsB,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAoB;IAC3D,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;IAC5D,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC,CAAC,uDAAuD;IACtF,OAAO,KAAmC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAoB;IACvD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,QAAQ,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,KAAK,SAAS,CAAC;AACjE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAoB;IACzD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;IACxD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC,CAAC,uDAAuD;IACtF,OAAO,KAAiC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAoB;IACvD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,QAAQ,EAAE,CAAC,YAAY,CAAC,mBAAmB,CAAC,KAAK,SAAS,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAoB;IACvD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,QAAQ,EAAE,CAAC,YAAY,CAAC,mBAAmB,CAAC,KAAK,SAAS,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAAoB;IAChD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,QAAQ,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAoB;IACvD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACjD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,sFAAsF;IACtF,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACzD,OAAO,KAA0B,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACrD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,QAAQ,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,SAAS,CAAC;AAChE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAoB;IAC5D,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;IACvD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC,CAAC,uDAAuD;IACtF,OAAO,KAA+B,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAAoB;IAChD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,QAAQ,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAoB;IACvD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACjD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,+CAA+C;IAC7G,OAAO,KAA0B,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACpD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,QAAQ,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;AAC1D,CAAC;AAED,gFAAgF;AAChF,gDAAgD;AAChD,gFAAgF;AAEhF;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACrD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,QAAQ,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC;AAC3D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACpD,OAAO,uBAAuB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;AACjD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAoB;IAC1D,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC;IAChE,OAAO,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,OAAO,kBAAkB,CAAC,MAAM,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC;AAC/E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAoB;IACnD,OAAQ,MAAc,CAAC,eAAe,CAAoC,CAAC;AAC7E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAoB;IAC5D,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC;AAED,gFAAgF;AAChF,uBAAuB;AACvB,gFAAgF;AAEhF;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,MAAoB;IAChD,kCAAkC;IAClC,MAAM,cAAc,GAAI,MAAc,CAAC,eAAe,CAAoC,CAAC;IAC3F,IAAI,cAAc,EAAE,WAAW,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sEAAsE;IACtE,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,iBAAiB,GAAI,SAAiB,CAAC,eAAe,CAAoC,CAAC;QACjG,OAAO,iBAAiB,EAAE,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1D,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAoB;IACnD,kCAAkC;IAClC,MAAM,cAAc,GAAI,MAAc,CAAC,eAAe,CAAoC,CAAC;IAC3F,IAAI,cAAc,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;QACzC,OAAO,cAAc,CAAC,WAAW,CAAC;IACpC,CAAC;IAED,kCAAkC;IAClC,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,iBAAiB,GAAI,SAAiB,CAAC,eAAe,CAAoC,CAAC;QACjG,IAAI,iBAAiB,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;YAC5C,OAAO,iBAAiB,CAAC,WAAW,CAAC;QACvC,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,OAAO,gBAAgB,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC;AACxC,CAAC;AAED,gFAAgF;AAChF,0BAA0B;AAC1B,gFAAgF;AAEhF;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,MAAoB;IAChD,kCAAkC;IAClC,MAAM,cAAc,GAAI,MAAc,CAAC,eAAe,CAAoC,CAAC;IAC3F,IAAI,cAAc,EAAE,WAAW,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sEAAsE;IACtE,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,iBAAiB,GAAI,SAAiB,CAAC,eAAe,CAAoC,CAAC;QACjG,OAAO,iBAAiB,EAAE,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1D,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAoB;IACnD,kCAAkC;IAClC,MAAM,cAAc,GAAI,MAAc,CAAC,eAAe,CAAoC,CAAC;IAC3F,IAAI,cAAc,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;QACzC,OAAO,cAAc,CAAC,WAAW,CAAC;IACpC,CAAC;IAED,kCAAkC;IAClC,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,iBAAiB,GAAI,SAAiB,CAAC,eAAe,CAAoC,CAAC;QACjG,IAAI,iBAAiB,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;YAC5C,OAAO,iBAAiB,CAAC,WAAW,CAAC;QACvC,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,gFAAgF;AAChF,4BAA4B;AAC5B,gFAAgF;AAEhF;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACrD,kCAAkC;IAClC,MAAM,cAAc,GAAI,MAAc,CAAC,eAAe,CAAoC,CAAC;IAC3F,IAAI,cAAc,EAAE,gBAAgB,EAAE,YAAY,KAAK,IAAI,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sEAAsE;IACtE,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,iBAAiB,GAAI,SAAiB,CAAC,eAAe,CAAoC,CAAC;QACjG,OAAO,iBAAiB,EAAE,gBAAgB,EAAE,YAAY,KAAK,IAAI,CAAC;IACpE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAoB;IACxD,kCAAkC;IAClC,MAAM,cAAc,GAAI,MAAc,CAAC,eAAe,CAAoC,CAAC;IAC3F,IAAI,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAC;QACnD,OAAO,cAAc,CAAC,gBAAgB,CAAC;IACzC,CAAC;IAED,kCAAkC;IAClC,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,iBAAiB,GAAI,SAAiB,CAAC,eAAe,CAAoC,CAAC;QACjG,IAAI,iBAAiB,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAC;YACtD,OAAO,iBAAiB,CAAC,gBAAgB,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAoB;IAK3D,MAAM,QAAQ,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO;QACL,GAAG,EAAE,QAAQ,CAAC,GAAG;QACjB,GAAG,EAAE,QAAQ,CAAC,GAAG;QACjB,SAAS,EAAE,QAAQ,CAAC,SAAS;KAC9B,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,0BAA0B;AAC1B,gFAAgF;AAEhF;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAoB;IACnD,MAAM,cAAc,GAAI,MAAc,CAAC,eAAe,CAAoC,CAAC;IAC3F,IAAI,cAAc,EAAE,cAAc,EAAE,UAAU,KAAK,IAAI,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,iBAAiB,GAAI,SAAiB,CAAC,eAAe,CAAoC,CAAC;QACjG,OAAO,iBAAiB,EAAE,cAAc,EAAE,UAAU,KAAK,IAAI,CAAC;IAChE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAoB;IACtD,MAAM,cAAc,GAAI,MAAc,CAAC,eAAe,CAAoC,CAAC;IAC3F,IAAI,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC;QAC/C,OAAO,cAAc,CAAC,cAAc,CAAC;IACvC,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,iBAAiB,GAAI,SAAiB,CAAC,eAAe,CAAoC,CAAC;QACjG,IAAI,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC;YAClD,OAAO,iBAAiB,CAAC,cAAc,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAoB;IAKzD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,YAAY,EAAE,QAAQ,CAAC,YAAY;KACpC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,MAAoB;IAChD,MAAM,cAAc,GAAI,MAAc,CAAC,eAAe,CAAoC,CAAC;IAC3F,IAAI,cAAc,EAAE,WAAW,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,iBAAiB,GAAI,SAAiB,CAAC,eAAe,CAAoC,CAAC;QACjG,OAAO,iBAAiB,EAAE,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1D,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAoB;IACnD,MAAM,cAAc,GAAI,MAAc,CAAC,eAAe,CAAoC,CAAC;IAC3F,IAAI,cAAc,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;QACzC,OAAO,cAAc,CAAC,WAAW,CAAC;IACpC,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,iBAAiB,GAAI,SAAiB,CAAC,eAAe,CAAoC,CAAC;QACjG,IAAI,iBAAiB,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;YAC5C,OAAO,iBAAiB,CAAC,WAAW,CAAC;QACvC,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,kCAAkC;IAClC,MAAM,cAAc,GAAI,MAAc,CAAC,eAAe,CAAoC,CAAC;IAC3F,IAAI,cAAc,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sEAAsE;IACtE,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,iBAAiB,GAAI,SAAiB,CAAC,eAAe,CAAoC,CAAC;QACjG,OAAO,iBAAiB,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACxD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,kCAAkC;IAClC,MAAM,cAAc,GAAI,MAAc,CAAC,eAAe,CAAoC,CAAC;IAC3F,IAAI,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QACvC,OAAO,cAAc,CAAC,UAAU,CAAC;IACnC,CAAC;IAED,kCAAkC;IAClC,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,iBAAiB,GAAI,SAAiB,CAAC,eAAe,CAAoC,CAAC;QACjG,IAAI,iBAAiB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;YAC1C,OAAO,iBAAiB,CAAC,UAAU,CAAC;QACtC,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,kCAAkC;IAClC,MAAM,cAAc,GAAI,MAAc,CAAC,eAAe,CAAoC,CAAC;IAC3F,IAAI,cAAc,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sEAAsE;IACtE,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,iBAAiB,GAAI,SAAiB,CAAC,eAAe,CAAoC,CAAC;QACjG,OAAO,iBAAiB,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACxD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAoB;IACzD,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC7C,OAAO,YAAY,EAAE,UAAU,EAAE,MAAM,KAAK,oBAAoB,CAAC,YAAY,CAAC;AAChF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,kCAAkC;IAClC,MAAM,cAAc,GAAI,MAAc,CAAC,eAAe,CAAoC,CAAC;IAC3F,IAAI,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QACvC,OAAO,cAAc,CAAC,UAAU,CAAC;IACnC,CAAC;IAED,kCAAkC;IAClC,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,iBAAiB,GAAI,SAAiB,CAAC,eAAe,CAAoC,CAAC;QACjG,IAAI,iBAAiB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;YAC1C,OAAO,iBAAiB,CAAC,UAAU,CAAC;QACtC,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,gFAAgF;AAChF,2BAA2B;AAC3B,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAAoB;IAC9D,kCAAkC;IAClC,MAAM,cAAc,GAAI,MAAc,CAAC,eAAe,CAAoC,CAAC;IAC3F,IAAI,cAAc,EAAE,yBAAyB,EAAE,qBAAqB,KAAK,IAAI,EAAE,CAAC;QAC9E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sEAAsE;IACtE,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,iBAAiB,GAAI,SAAiB,CAAC,eAAe,CAAoC,CAAC;QACjG,OAAO,iBAAiB,EAAE,yBAAyB,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACtF,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,8BAA8B,CAAC,MAAoB;IACjE,kCAAkC;IAClC,MAAM,cAAc,GAAI,MAAc,CAAC,eAAe,CAAoC,CAAC;IAC3F,IAAI,cAAc,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,CAAC;QACrE,OAAO,cAAc,CAAC,yBAAyB,CAAC;IAClD,CAAC;IAED,kCAAkC;IAClC,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,iBAAiB,GAAI,SAAiB,CAAC,eAAe,CAAoC,CAAC;QACjG,IAAI,iBAAiB,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,CAAC;YACxE,OAAO,iBAAiB,CAAC,yBAAyB,CAAC;QACrD,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAoB;IAC1D,kCAAkC;IAClC,MAAM,cAAc,GAAI,MAAc,CAAC,eAAe,CAAoC,CAAC;IAC3F,IAAI,cAAc,EAAE,eAAe,EAAE,WAAW,KAAK,IAAI,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sEAAsE;IACtE,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,iBAAiB,GAAI,SAAiB,CAAC,eAAe,CAAoC,CAAC;QACjG,OAAO,iBAAiB,EAAE,eAAe,EAAE,WAAW,KAAK,IAAI,CAAC;IAClE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAoB;IAC7D,kCAAkC;IAClC,MAAM,cAAc,GAAI,MAAc,CAAC,eAAe,CAAoC,CAAC;IAC3F,IAAI,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC;QACjD,OAAO,cAAc,CAAC,eAAe,CAAC;IACxC,CAAC;IAED,kCAAkC;IAClC,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,iBAAiB,GAAI,SAAiB,CAAC,eAAe,CAAoC,CAAC;QACjG,IAAI,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC;YACpD,OAAO,iBAAiB,CAAC,eAAe,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAoB;IACtD,OAAO,gBAAgB,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACpD,OAAO,gBAAgB,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC9C,OAAO,gBAAgB,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC9C,OAAO,gBAAgB,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC;AACvC,CAAC;AAGD,gFAAgF;AAChF,iCAAiC;AACjC,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAoB;IACxD,OAAO,oBAAoB,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAoB,EACpB,OAA2D;IAE3D,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE9C,iCAAiC;IACjC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6BAA6B;IAC7B,IAAI,OAAO,EAAE,IAAI,KAAK,SAAS,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,EAAE,IAAI,KAAK,MAAM,IAAI,MAAM,EAAE,IAAI,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kCAAkC;IAClC,IAAI,OAAO,EAAE,SAAS,IAAI,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAID,gFAAgF;AAChF,4CAA4C;AAC5C,gFAAgF;AAEhF,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC9C,OAAO,qBAAqB,CAAC,MAAM,CAAC,KAAK,kBAAkB,CAAC,KAAK,CAAC;AACpE,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,OAAO,qBAAqB,CAAC,MAAM,CAAC,KAAK,kBAAkB,CAAC,QAAQ,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,OAAO,qBAAqB,CAAC,MAAM,CAAC,KAAK,kBAAkB,CAAC,MAAM,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAoB;IACnD,OAAO,qBAAqB,CAAC,MAAM,CAAC,KAAK,kBAAkB,CAAC,WAAW,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,OAAO,qBAAqB,CAAC,MAAM,CAAC,KAAK,kBAAkB,CAAC,QAAQ,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAoB;IACtD,OAAO,qBAAqB,CAAC,MAAM,CAAC,KAAK,kBAAkB,CAAC,cAAc,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,OAAO,qBAAqB,CAAC,MAAM,CAAC,KAAK,kBAAkB,CAAC,MAAM,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,OAAO,qBAAqB,CAAC,MAAM,CAAC,KAAK,kBAAkB,CAAC,MAAM,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,OAAO,qBAAqB,CAAC,MAAM,CAAC,KAAK,kBAAkB,CAAC,IAAI,CAAC;AACnE,CAAC;AAGD,gFAAgF;AAChF,qEAAqE;AACrE,gFAAgF;AAChF,EAAE;AACF,oEAAoE;AACpE,EAAE;AACF,iFAAiF;AACjF,0EAA0E;AAC1E,kEAAkE;AAClE,6EAA6E;AAC7E,qEAAqE;AACrE,EAAE;AACF,4EAA4E;AAC5E,0EAA0E;AAC1E,gFAAgF;AAChF,6EAA6E;AAC7E,+EAA+E;AAC/E,gFAAgF;AAChF,6EAA6E;AAC7E,uBAAuB;AACvB,EAAE;AACF,0EAA0E;AAC1E,+EAA+E;AAC/E,6EAA6E;AAC7E,yCAAyC;AACzC,EAAE;AACF,sEAAsE;AACtE,2EAA2E;AAC3E,0EAA0E;AAC1E,0EAA0E;AAC1E,2EAA2E;AAC3E,2EAA2E;AAE3E,MAAM,kCAAkC,GAAwD;IAC9F,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,KAAK;IAChD,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,QAAQ;CACvD,CAAC;AAEF,MAAM,mCAAmC,GAAyD;IAChG,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC,QAAQ;IACvD,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,MAAM;IACnD,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE,eAAe,CAAC,KAAK;CACxD,CAAC;AAEF,MAAM,gCAAgC,GAAsD;IAC1F,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,MAAM;IAChD,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC,KAAK;CACrD,CAAC;AAEF,MAAM,kCAAkC,GAAwD;IAC9F,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,KAAK;IAChD,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC,MAAM;CACnD,CAAC;AAEF,0EAA0E;AAC1E,MAAM,UAAU,qBAAqB,CAAC,MAAoB;IACxD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC;IACrD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC5C,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,kCAAkC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC;AACvH,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,sBAAsB,CAAC,MAAoB;IACzD,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC;IACtD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC5C,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,mCAAmC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC;AAC1H,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,mBAAmB,CAAC,MAAoB;IACtD,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC;IACnD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC5C,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,gCAAgC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC;AACpH,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,qBAAqB,CAAC,MAAoB;IACxD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC;IACrD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC5C,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,kCAAkC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC;AACvH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAoB;IACvD,OAAO,qBAAqB,CAAC,MAAM,CAAC,KAAK,cAAc,CAAC,QAAQ,CAAC;AACnE,CAAC;AAGD,gFAAgF;AAChF,mCAAmC;AACnC,gFAAgF;AAEhF;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAoB;IACzD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACrD,OAAO,sBAAsB,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC;AACtD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACrD,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACvC,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACjC,OAAO,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACvC,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACjC,OAAO,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC;AAC9B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAoB,EAAE,SAAiB;IAC1E,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACvC,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACjC,OAAO,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC;AACzD,CAAC;AAED,gFAAgF;AAChF,yCAAyC;AACzC,gFAAgF;AAEhF;;;;;;;GAOG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAAoB;IAC9D,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO,QAAQ,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAoB;IAC1D,OAAO,2BAA2B,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC;AAC3D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAoB,EAAE,SAAkB;IAChF,MAAM,WAAW,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACxD,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAE5C,2CAA2C;IAC3C,IAAI,WAAW,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEtC,wEAAwE;IACxE,IAAI,CAAC,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhF,gDAAgD;IAChD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;IAED,2FAA2F;IAC3F,OAAO,KAAK,CAAC;AACf,CAAC;AAyBD;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAoB;IAC7D,OAAO,uBAAuB,CAAC,MAAM,CAAC,EAAE,cAAc,IAAI,IAAI,CAAC;AACjE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAoB;IAC1D,MAAM,MAAM,GAAG,uBAAuB,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC;IAC/D,IAAI,MAAM,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC;IAErC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;IAC3F,CAAC;IACD,IAAI,MAAM,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC;IAEvC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC;IACvC,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;IACxE,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,QAAQ;QAC7B,MAAM;QACN,cAAc;QACd,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,IAAI;KAClD,CAAC;AACJ,CAAC;AAGD,+EAA+E;AAC/E,iFAAiF;AACjF,+EAA+E;AAE/E;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACpD,2BAA2B;IAC3B,IAAI,MAAM,CAAC,WAAW;QAAE,OAAO,MAAM,CAAC,WAAW,CAAC;IAElD,yDAAyD;IACzD,MAAM,KAAK,GAAI,MAAc,CAAC,IAAI,EAAE,SAAS,IAAK,MAAc,CAAC,MAAM,EAAE,EAAE,CAAC;IAC5E,IAAI,KAAK,EAAE,WAAW;QAAE,OAAO,KAAK,CAAC,WAAW,CAAC;IAEjD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,+EAA+E;AAC/E,kFAAkF;AAClF,+EAA+E;AAE/E;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAoB;IAC3D,OAAO,uBAAuB,CAAC,MAAM,CAAC,EAAE,eAAe,KAAK,IAAI,CAAC;AACnE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAoB;IACxD,OAAO,oBAAoB,CAAC,MAAM,CAAC,EAAE,eAAe,KAAK,IAAI,CAAC;AAChE,CAAC;AAED,+EAA+E;AAC/E,iCAAiC;AACjC,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,QAAQ,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,QAAQ,EAAE,IAAI,EAAE,QAAQ,KAAK,UAAU,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,QAAQ,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,QAAQ,EAAE,IAAI,EAAE,QAAQ,KAAK,KAAK,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,QAAQ,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,QAAQ,EAAE,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC9C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACpD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,QAAQ,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAElD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,8DAA8D;IAC9D,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IAC1B,CAAC;IAED,sBAAsB;IACtB,OAAO;QACL,SAAS,EAAE,CAAC;QACZ,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACpD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;AAC5C,CAAC;AAGD,iDAAiD;AACjD,wBAAwB;AACxB,iDAAiD;AAEjD;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAgC,EAAE,OAA0B,IAAI,GAAG,EAAE;IACtG,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,sBAAsB;IACtB,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEjB,wCAAwC;IACxC,SAAS,aAAa,CAAC,IAA2B,EAAE,QAAkB,EAAE,QAAkB;QACxF,OAAO;YACL,GAAG,IAAI;YACP,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxC,CAAC;IACJ,CAAC;IAED,sEAAsE;IACtE,MAAM,eAAe,GAAG,CAAC,CAAe,EAAiE,EAAE;QACzG,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,IAAI,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAE3B,8BAA8B;QAC9B,OAAO,IAAI,EAAE,CAAC;YACZ,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,UAAU;oBACb,QAAQ,GAAG,IAAI,CAAC;oBAChB,GAAG,GAAG,uBAAuB,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,GAAG,CAAC;oBACvD,MAAM;gBACR,KAAK,UAAU;oBACb,QAAQ,GAAG,IAAI,CAAC;oBAChB,GAAG,GAAG,uBAAuB,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,GAAG,CAAC;oBACvD,MAAM;gBACR,KAAK,SAAS;oBACZ,GAAG,GAAG,uBAAuB,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,GAAG,CAAC;oBACvD,MAAM;gBACR,KAAK,MAAM;oBACT,+DAA+D;oBAC/D,GAAG,GAAG,uBAAuB,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,uBAAuB,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC;oBACvF,MAAM;gBACR,KAAK,UAAU;oBACb,GAAG,GAAG,uBAAuB,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,GAAG,CAAC;oBACvD,MAAM;gBACR,KAAK,OAAO;oBACV,GAAG,GAAG,uBAAuB,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,GAAG,CAAC;oBACvD,MAAM;gBACR;oBACE,sCAAsC;oBACtC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;YAC9C,CAAC;YACD,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAC5C,CAAC,CAAC;IAEF,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAE9D,iEAAiE;IACjE,uDAAuD;IACvD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAEhD,wEAAwE;IACxE,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAE1E,MAAM,QAAQ,GAAG,CAAC,CAAwB,EAAyB,EAAE;QACnE,MAAM,OAAO,GAAG,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAC7D,MAAM,YAAY,GAAG,aAAa,KAAK,SAAS,CAAC;QAEjD,IAAI,CAAC,OAAO,IAAI,CAAC,YAAY;YAAE,OAAO,CAAC,CAAC;QAExC,6DAA6D;QAC7D,MAAM,YAAY,GAAwB;YACxC,GAAG,QAAQ;YACX,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvF,CAAC;QAEF,OAAO,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;IAC1C,CAAC,CAAC;IAEF,gDAAgD;IAChD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAE/B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,WAAW,GAAI,KAAqB,CAAC,WAAW,CAAC;YACvD,OAAO,aAAa,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAClH,CAAC;QACD,KAAK,QAAQ,CAAC;QACd,KAAK,KAAK;YACR,OAAO,aAAa,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACzE,KAAK,QAAQ;YACX,OAAO,aAAa,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACzE,KAAK,SAAS;YACZ,OAAO,aAAa,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC1E,KAAK,MAAM;YACT,OAAO,aAAa,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACvE,KAAK,KAAK;YACR,OAAO,aAAa,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACtE,KAAK,SAAS;YACZ,OAAO,aAAa,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC1E,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,kFAAkF;YAClF,iFAAiF;YACjF,mFAAmF;YACnF,iFAAiF;YACjF,gFAAgF;YAChF,oFAAoF;YACpF,kFAAkF;YAClF,6EAA6E;YAC7E,MAAM,aAAa,GAAG,CAAC,sBAAsB,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;iBACnG,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC;YAC5D,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAC/B,OAAO,aAAa,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACjF,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,uDAAuD;YACvD,iEAAiE;YACjE,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;YACpC,OAAO,aAAa,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/E,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAC1D,OAAO,aAAa,CAAC,QAAQ,CAAC;gBAC5B,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,kBAAkB,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,CAAE;aACrD,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC1B,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YAC5D,OAAO,aAAa,CAAC,QAAQ,CAAC;gBAC5B,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,kBAAkB,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,CAAE;aACrD,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC1B,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,KAAK,GAAG,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;YAC3D,OAAO,aAAa,CAAC,QAAQ,CAAC;gBAC5B,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,KAAK;qBACT,MAAM,CAAC,CAAC,CAAC,EAAqB,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;qBACjD,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,CAAE,CAAC;aACnD,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC1B,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,SAAS,GAAG,uBAAuB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAC5D,MAAM,WAAW,GAAG,uBAAuB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YAChE,OAAO,aAAa,CAAC,QAAQ,CAAC;gBAC5B,IAAI,EAAE,QAAQ;gBACd,GAAG,EAAE,kBAAkB,CAAC,SAAS,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,CAAE;gBAClD,KAAK,EAAE,kBAAkB,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,CAAE;aACvD,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC1B,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;YAC/D,OAAO,aAAa,CAAC,QAAQ,CAAC;gBAC5B,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,OAAO;qBACb,MAAM,CAAC,CAAC,CAAC,EAAqB,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;qBACjD,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,CAAE,CAAC;aACnD,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC1B,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,yEAAyE;YACzE,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACvC,MAAM,KAAK,GAA0C,EAAE,CAAC;YACxD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3C,KAAK,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YACzE,CAAC;YACD,OAAO,aAAa,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC5F,CAAC;QACD,KAAK,MAAM;YACT,OAAO,aAAa,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACvE;YACE,OAAO,aAAa,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAID;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAA8C;IACjF,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAE5B,MAAM,qBAAqB,GAAG,CAAC,MAAoB,EAAE,CAAwB,EAAgB,EAAE;QAC7F,IAAI,CAAC,GAAiB,MAAM,CAAC;QAC7B,IAAK,CAAS,CAAC,QAAQ;YAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC1C,IAAK,CAAS,CAAC,QAAQ;YAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC1C,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAyB,MAAS,EAAE,QAA8B,EAAK,EAAE;QAC7F,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC;QACnE,MAAM,UAAU,GAAqB,EAAE,CAAC;QAExC,iCAAiC;QACjC,IAAI,QAAQ,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC;YACzC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,CAAC;YAC1C,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QAC/C,CAAC;QAED,8CAA8C;QAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,UAAU,CAAC,IAAI,CAAC;gBACd,GAAG,EAAE,YAAY,CAAC,SAAS;gBAC3B,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;aAC7C,CAAC,CAAC;QACL,CAAC;QAED,yDAAyD;QACzD,MAAM,WAAW,GAAG,QAAQ,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;QAC3D,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,UAAU,CAAC,IAAI,CAAC;gBACd,GAAG,EAAE,YAAY,CAAC,eAAe;gBACjC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;aACvD,CAAC,CAAC;QACL,CAAC;QAED,+EAA+E;QAC/E,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,UAAU,CAAC,IAAI,CAAC;gBACd,GAAG,EAAE,YAAY,CAAC,QAAQ;gBAC1B,MAAM,EAAE,OAAO;aAChB,CAAC,CAAC;QACL,CAAC;QAED,uCAAuC;QACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,UAAU,CAAC,IAAI,CAAC;gBACd,GAAG,EAAE,YAAY,CAAC,SAAS;gBAC3B,MAAM,EAAE,QAAQ;aACjB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAM,CAAC;IACnF,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,CAAC,CAAwB,EAAgB,EAAE;QACvD,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;YACf,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;gBACnB,yDAAyD;gBACzD,IAAK,CAAS,CAAC,WAAW;oBAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAE,CAAS,CAAC,WAAW,CAAC,CAAC;gBACnE,CAAC,GAAG,aAAa,CAAC,CAAC,EAAG,CAAS,CAAC,QAAQ,CAAC,CAAC;gBAC1C,OAAO,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrC,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,MAAM,EAAE,EAAG,CAAS,CAAC,QAAQ,CAAC,CAAC;gBACzD,OAAO,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrC,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,MAAM,EAAE,EAAG,CAAS,CAAC,QAAQ,CAAC,CAAC;gBACzD,OAAO,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrC,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,OAAO,EAAE,EAAG,CAAS,CAAC,QAAQ,CAAC,CAAC;gBAC1D,OAAO,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrC,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,EAAG,CAAS,CAAC,QAAQ,CAAC,CAAC;gBACvD,OAAO,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrC,CAAC;YACD,KAAK,KAAK,CAAC,CAAC,CAAC;gBACX,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,EAAE,EAAG,CAAS,CAAC,QAAQ,CAAC,CAAC;gBACtD,OAAO,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrC,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,OAAO,EAAE,EAAG,CAAS,CAAC,QAAQ,CAAC,CAAC;gBAC1D,OAAO,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrC,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,OAAO,CAAE,CAAS,CAAC,KAAK,CAAC,EAAG,CAAS,CAAC,QAAQ,CAAC,CAAC;gBAC1E,OAAO,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrC,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,MAAM,GAAI,CAAS,CAAC,MAAkB,CAAC;gBAC7C,6EAA6E;gBAC7E,MAAM,IAAI,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;oBACtC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAA+B,CAAC;oBACzC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;gBACf,MAAM,CAAC,GAAG,aAAa,CAAC,IAAI,EAAG,CAAS,CAAC,QAAQ,CAAC,CAAC;gBACnD,OAAO,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrC,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,EAAE,GAAG,KAAK,CAAE,CAAS,CAAC,OAAO,CAAC,CAAC;gBACrC,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAG,CAAS,CAAC,QAAQ,CAAC,CAAC;gBAC1D,OAAO,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrC,CAAC;YACD,KAAK,KAAK,CAAC,CAAC,CAAC;gBACX,MAAM,EAAE,GAAG,KAAK,CAAE,CAAS,CAAC,OAAO,CAAC,CAAC;gBACrC,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAG,CAAS,CAAC,QAAQ,CAAC,CAAC;gBACxD,OAAO,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrC,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,KAAK,GAAK,CAAS,CAAC,KAAiC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACvE,MAAM,CAAC,GAAG,aAAa,CACrB,KAAK,CAAC,MAAM,IAAI,CAAC;oBACf,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAA0C,CAAC;oBACrD,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EACrB,CAAS,CAAC,QAAQ,CACpB,CAAC;gBACF,OAAO,qBAAqB,CAAC,CAAQ,EAAE,CAAC,CAAC,CAAC;YAC5C,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,GAAG,GAAG,KAAK,CAAE,CAAS,CAAC,KAAK,CAAC,CAAC;gBACpC,qFAAqF;gBACrF,MAAM,OAAO,GAAI,CAAS,CAAC,GAAwC,CAAC;gBACpE,MAAM,SAAS,GAAG,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;gBACjF,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,EAAG,CAAS,CAAC,QAAQ,CAAC,CAAC;gBACvE,OAAO,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrC,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,OAAO,GAAK,CAAS,CAAC,OAAmC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC3E,MAAM,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAA0D,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,EAAG,CAAS,CAAC,QAAQ,CAAC,CAAC;gBAClK,OAAO,qBAAqB,CAAC,CAAQ,EAAE,CAAC,CAAC,CAAC;YAC5C,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,QAAQ,GAAI,CAAS,CAAC,QAA2C,CAAC;gBACxE,MAAM,WAAW,GAAG,QAAQ,EAAE,WAAW,CAAC;gBAE1C,6DAA6D;gBAC7D,IAAI,WAAW,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;oBACpC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE;wBAC5C,YAAY,EAAE,WAAW,CAAC,YAAY;wBACtC,UAAU,EAAE,WAAW,CAAC,UAAU;wBAClC,GAAG,EAAE,WAAW,CAAC,GAAG;wBACpB,GAAG,EAAE,WAAW,CAAC,GAAG;qBACrB,CAAC,CAAC;oBACH,kFAAkF;oBAClF,MAAM,oBAAoB,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;oBAC7C,OAAO,oBAAoB,CAAC,SAAS,CAAC;oBACtC,OAAO,oBAAoB,CAAC,WAAW,CAAC;oBACxC,MAAM,CAAC,GAAG,aAAa,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;oBAC3D,OAAO,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACrC,CAAC;gBAED,wBAAwB;gBACxB,MAAM,KAAK,GAAI,CAAS,CAAC,UAAmD,CAAC;gBAC7E,MAAM,KAAK,GAAiC,EAAE,CAAC;gBAC/C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;oBACjD,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAA0B,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC9D,CAAC;gBACD,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;gBACnD,OAAO,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrC,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,mDAAmD;gBACnD,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,EAAE,EAAG,CAAS,CAAC,QAAQ,CAAC,CAAC;gBACtD,OAAO,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrC,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,OAAO,EAAE,EAAG,CAAS,CAAC,QAAQ,CAAC,CAAC;gBAC1D,OAAO,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC;AAID,gFAAgF;AAChF,0BAA0B;AAC1B,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,OAAO,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;AACvD,CAAC;AAGD;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAoB;IACxD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,eAAe,GAAG,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IAE1D,IAAI,CAAC,eAAe;QAAE,OAAO,SAAS,CAAC;IAEvC,OAAO,eAAqC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAAoB;IAC9D,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC7C,OAAO,MAAM,EAAE,YAAY,IAAI,EAAE,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,8BAA8B,CAAC,MAAoB;IACjE,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC7C,OAAO,MAAM,EAAE,kBAAkB,IAAI,KAAK,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAAoB;IAC/D,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC7C,OAAO,MAAM,EAAE,gBAAgB,IAAI,KAAK,CAAC;AAC3C,CAAC;AAoCD;;GAEG;AACH,MAAM,UAAU,0BAA0B,CACxC,WAAyB,EACzB,aAAsC;IAEtC,+CAA+C;IAC/C,IAAI,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uDAAuD;IACvD,IAAI,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,eAAe,CAAC,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yFAAyF;IACzF,MAAM,cAAc,GAAG,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAC3D,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,oEAAoE;QACpE,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,oDAAoD;QACpD,iEAAiE;QACjE,sDAAsD;QACtD,IAAI,cAAc,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,yDAAyD;IAC3D,CAAC;IAED,yDAAyD;IACzD,IAAI,aAAa,KAAK,QAAQ,IAAI,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC9F,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yDAAyD;IACzD,IAAI,aAAa,KAAK,QAAQ,IAAI,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC9F,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAyB;IAC3D,OAAO,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC;AAClE,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAS,EACT,OAAiC;IAEjC,MAAM,EAAE,aAAa,EAAE,WAAW,GAAG,KAAK,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IACtE,MAAM,sBAAsB,GAAG,aAAa,IAAI,aAAa,CAAC;IAE9D,qCAAqC;IACrC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAqC,CAAC;IAC3D,MAAM,QAAQ,GAAiC,EAAE,CAAC;IAElD,qBAAqB;IACrB,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7D,sCAAsC;QACtC,IAAI,0BAA0B,CAAC,WAAW,EAAE,sBAAsB,CAAC,EAAE,CAAC;YACpE,SAAS;QACX,CAAC;QAED,gEAAgE;QAChE,IAAI,WAAW,IAAI,mBAAmB,CAAC,WAAW,CAAC,EAAE,CAAC;YACpD,2CAA2C;YAC3C,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC7B,QAAQ,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC;YACpC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC;QACpC,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAKrC,MAAM,WAAW,GAAG,MAAuC,CAAC;IAC5D,MAAM,gBAAgB,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;IACtD,IAAI,gBAAgB,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE,CAAC;QAC7D,MAAM,cAAc,GAAG,SAA0C,CAAC;QAClE,cAAc,CAAC,eAAe,CAAC,GAAG,EAAE,GAAI,gBAA4C,EAAE,CAAC;IACzF,CAAC;IAED,6FAA6F;IAC7F,yGAAyG;IACzG,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAoB;IACnD,OAAO,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,YAAY,CAAC,CAAC;AACzD,CAAC;AAGD,gFAAgF;AAChF,yCAAyC;AACzC,gFAAgF;AAChF,2EAA2E;AAC3E,oFAAoF;AAEpF,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;AACjE,CAAC;AACD,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,OAAO,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC9C,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;AAChE,CAAC;AACD,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC9C,OAAO,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC9C,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;AAChE,CAAC;AACD,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC9C,OAAO,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAoB;IAC5C,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAC9D,CAAC;AACD,MAAM,UAAU,SAAS,CAAC,MAAoB;IAC5C,OAAO,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAoB;IAC5C,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAC9D,CAAC;AACD,MAAM,UAAU,SAAS,CAAC,MAAoB;IAC5C,OAAO,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAoB;IAChD,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;AAClE,CAAC;AACD,MAAM,UAAU,aAAa,CAAC,MAAoB;IAChD,OAAO,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAoB;IAC5C,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAC9D,CAAC;AACD,MAAM,UAAU,SAAS,CAAC,MAAoB;IAC5C,OAAO,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AAC/D,CAAC;AACD,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,OAAO,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAoB;IAC5C,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAC9D,CAAC;AACD,MAAM,UAAU,SAAS,CAAC,MAAoB;IAC5C,OAAO,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAoB;IAC5C,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAC9D,CAAC;AACD,MAAM,UAAU,SAAS,CAAC,MAAoB;IAC5C,OAAO,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAoB;IAChD,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;AAClE,CAAC;AACD,MAAM,UAAU,aAAa,CAAC,MAAoB;IAChD,OAAO,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AAC/D,CAAC;AACD,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,OAAO,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;AACpE,CAAC;AACD,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,OAAO,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;AACrE,CAAC;AACD,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,OAAO,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,cAAc,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AAC/D,CAAC;AACD,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,OAAO,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC9C,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;AAChE,CAAC;AACD,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC9C,OAAO,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;AACtD,CAAC","sourcesContent":["import { z } from 'zod';\n\nimport type {\n ArrayUIParams, BigDecimalUIParams, BooleanUIParams, CodeUIParams,\n DateUIParams, DateTimeUIParams, DurationUIParams, EnumUIParams,\n FileUIParams, ForeignKeyUIParams, MoneyUIParams, NumberUIParams,\n ObjectUIParams, PhoneUIParams, StringUIParams, TimeUIParams,\n PrimitiveUIBaseParams, PrimitiveUIBaseEditParams, PrimitiveUIBaseDisplayParams,\n} from './zod-decorators.types';\nimport { BooleanEditMode, EnumEditMode, NumberEditMode, StringEditMode } from './zod-decorators.types';\nimport { AutosaveFieldParams, BackendOnlyFieldParams, BusinessKeySetParams, WriteOnlySecretFieldParams, BigDecimalSchemaMetadata,\n DurationSchemaMetadata, CodeSchemaMetadata, DEFAULT_FOREIGN_KEY_DISPLAY_MODE, DiscriminatorFieldParams, FileGenerationSource, FileSchemaMetadata, ForeignKeyStructuralParams, ForeignKeyUIDisplayParams, MoneySchemaMetadata, CustomFieldMetadata, DecoratorInput, FieldSchemaType, FormFieldComponent, HiddenFieldParams, ImpersonalizeFieldParams, NotEditableFieldParams, OtpFieldParams, PhoneSchemaMetadata, PolymorphicFkVariant, RagSourceConfiguration, RangeConstraintValue, RangeSchemaMetadata, RangeType, SCHEMA_METADATA, SerializableZodSchema, SummaryFieldParams, ValidationMode, VersionedForeignKeySchemaMetadata, VersionedSchemaMetadata, ZodDecorator, UniqueFieldParams, VirtualFieldParams, TtlFieldParams, ShowWhenParams } from './zod-decorators.types';\nimport { z_range } from './zod-range';\nimport { addDecorators, getMetadataRecursive } from './zod.module-override';\n\n\n// Type guard to check if a schema has Zod v4 internals\n// Zod v4 can have two structures:\n// - Legacy: schema._zod.def.type (older Zod v4 builds)\n// - Current: schema.def.type with schema.type at root (newer Zod v4 builds)\nexport function hasZodInternals(schema: unknown): schema is { def: { type: string; [key: string]: unknown }; type?: string } {\n if (!schema || typeof schema !== 'object') return false;\n\n // First check for legacy structure: schema._zod.def.type\n if ('_zod' in schema) {\n const schemaObj = schema as unknown as Record<string, unknown>;\n const zodProp = schemaObj._zod;\n if (typeof zodProp === 'object' && zodProp !== null && 'def' in zodProp) {\n const zodObj = zodProp as Record<string, unknown>;\n const defProp = zodObj.def;\n if (typeof defProp === 'object' && defProp !== null && 'type' in defProp) {\n return true;\n }\n }\n }\n\n // Check for current structure: schema.def.type (with schema.type at root)\n if ('def' in schema) {\n const schemaObj = schema as unknown as Record<string, unknown>;\n const defProp = schemaObj.def;\n if (typeof defProp === 'object' && defProp !== null && 'type' in defProp) {\n return true;\n }\n }\n\n return false;\n}\n\n\n\n\n\n/**\n * Check if a schema has a specific decorator.\n * Note: getCustomFieldMetadata already handles recursive unwrapping for all wrapper types\n * including pipe (from refine/superRefine), optional, nullable, default, etc.\n */\nexport function hasDecorator(schema: z.ZodTypeAny, decorator: ZodDecorator): boolean {\n const metadata = getCustomFieldMetadata(schema);\n const value = metadata[decorator];\n\n // Handle different value types properly\n if (value !== undefined) {\n // For strings: non-empty = has decorator, empty = no decorator (defensive guard)\n if (typeof value === 'string') {\n return (value as string).length > 0;\n }\n // For numbers: any number including 0 = has decorator\n if (typeof value === 'number') {\n return true;\n }\n // For booleans: true = has decorator, false = no decorator\n if (typeof value === 'boolean') {\n return value;\n }\n\n if (typeof value === 'object' && value === null) {\n return false;\n }\n\n // For other types: truthy = has decorator\n return Boolean(value);\n }\n\n return false;\n}\n\n// =============================================================================\n// SCHEMA UNWRAPPING\n// =============================================================================\n\n/**\n * Unwrap optional, nullable, default, and other wrapper schemas\n * to get the underlying base schema\n */\nexport function unwrapSchema(schema: z.ZodTypeAny): z.ZodTypeAny {\n const type = getZodType(schema);\n\n switch (type) {\n case 'optional':\n case 'nullable': {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema ? unwrapSchema(innerSchema) : schema;\n }\n case 'default': {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema ? unwrapSchema(innerSchema) : schema;\n }\n case 'pipe': {\n const inSchema = getZodDefSchemaProperty(schema, 'in');\n return inSchema ? unwrapSchema(inSchema) : schema;\n }\n case 'readonly': {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema ? unwrapSchema(innerSchema) : schema;\n }\n case 'catch': {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema ? unwrapSchema(innerSchema) : schema;\n }\n default:\n return schema;\n }\n}\n\n/**\n * Make a field OPTIONAL for a PATCH-style UPDATE DTO, peeling any OUTER\n * `.default()` wrapper first.\n *\n * PATCH semantics: a field the caller OMITS must be left untouched. A field\n * declared `z.number().default(0)` breaks this — Zod re-materialises `0` for the\n * absent key on every parse, so the derived `$set` silently CLOBBERS the stored\n * value with the default. (Live defect: a webhook delivery row's `attemptCount`\n * counter was reset to `0` by every status transition that did not set it, so\n * the retry cap `attemptCount >= MAX_ATTEMPTS` was never reached and dead\n * deliveries retried forever.)\n *\n * It is ALSO where the framework's field-CLEARING contract is admitted onto the wire. An optional\n * field additionally gains a `.nullable()` wrapper here, so a caller can distinguish the two\n * PATCH intents that an absent key alone cannot express:\n *\n * - key ABSENT → leave the stored value untouched (classic PATCH semantics, above);\n * - value NULL → this field has no value (clear it).\n *\n * Eligibility is decided by `fieldAdmitsAddedNullClear` — notably NOT by `isOptional()`, which\n * would wrongly admit `.default()` fields. Required fields keep rejecting `null`. The wrapper is\n * added INSIDE the optional (`ZodOptional<ZodNullable<…>>`) so the outer type stays `optional` for\n * every consumer that introspects it.\n *\n * Behaviour:\n * - Non-default fields: `fieldSchema.optional()`, plus a `.nullable()` wrapper when the field is\n * optional and does not already accept null.\n * - Default-wrapped fields: the outer `ZodDefault` is peeled, the inner schema\n * (keeping `.int()` / `.min()` / refinements) is made optional, and any\n * decorator metadata attached to the default wrapper (e.g.\n * `.default(0).isSummaryField()`) is carried onto the resulting optional so\n * `getMetadataRecursive` is unchanged. The inner schema is SHARED, never\n * mutated, so the source schema is left intact.\n *\n * Defaults remain correct for CREATE (a new row gets them) — this transform is\n * for the UPDATE DTO only.\n */\nexport function toPatchOptionalField(fieldSchema: z.ZodTypeAny): z.ZodTypeAny {\n const admitsNullClear = fieldAdmitsAddedNullClear(fieldSchema);\n\n if (!isZodDefault(fieldSchema)) {\n return admitsNullClear ? fieldSchema.nullable().optional() : fieldSchema.optional();\n }\n\n const innerType = getZodDefSchemaProperty(fieldSchema, 'innerType');\n if (!innerType) return fieldSchema.optional();\n\n // A defaulted field is never null-clearable (see `fieldAdmitsAddedNullClear`), so the peeled\n // inner is made optional WITHOUT a nullable wrapper.\n const optionalInner = innerType.optional();\n const defaultWrapperMetadata = (fieldSchema as unknown as Record<symbol, unknown>)[SCHEMA_METADATA];\n if (defaultWrapperMetadata) {\n const optionalRecord = optionalInner as unknown as Record<symbol, unknown>;\n const existing = (optionalRecord[SCHEMA_METADATA] as Record<string, unknown>) ?? {};\n optionalRecord[SCHEMA_METADATA] = {\n ...existing,\n ...(defaultWrapperMetadata as Record<string, unknown>),\n };\n }\n return optionalInner;\n}\n\n/**\n * The value an edit control should contribute to form state, once a \"the user emptied this field\"\n * gesture has been normalised into the framework's single CLEARED representation.\n *\n * # Why a normalisation step has to exist at all\n *\n * An HTML form control cannot express \"no value\". The platform defines a form entry's value as a\n * string (or a `File`), and assigning `null` to `input.value` is coerced to `\"\"` at the DOM\n * boundary. So a user clearing a text box produces `''`, a user clearing a date picker produces\n * `undefined`, and neither of those is a wire representation of \"clear this field\". Left alone they\n * produce three different wrong outcomes: `''` fails a refined schema outright (a colour or phone\n * field could never be emptied once set), `''` passes a plain string schema and PERSISTS an empty\n * string as a second, redundant \"no data\" value, and `undefined` is dropped by `JSON.stringify` so\n * the clear silently never reaches the server at all.\n *\n * # What it normalises TO, and why not `undefined`\n *\n * Always `null`, never `undefined`. React Hook Form reserves `undefined` to mean \"fall back to\n * defaultValue\" and documents that calling `onChange` with it is not valid, so `undefined` is not a\n * representable field value there. `null` is the value RHF itself prescribes for a cleared field,\n * and it is the one sentinel that survives every downstream seam: the submission path keeps it, the\n * section-save path keeps it, and `JSON.stringify` keeps it.\n *\n * # Where this must be called\n *\n * At the ONE place a control's change reaches form state, before the value is handed to both the\n * form library and the autosave queue. Normalising later (at submit) is too late — validation has\n * already rejected the empty string — and normalising only for validation is the documented Formik\n * defect, where the schema validates a value the server never receives.\n *\n * # What it deliberately leaves alone\n *\n * - **Fields that cannot be cleared** — a required field, or one whose declaration otherwise\n * rejects null. Their empty value is returned untouched so validation still fails with the normal\n * message rather than being silently rewritten.\n * - **Password and OTP inputs** — an empty password box conventionally means \"unchanged\", never\n * \"remove the credential\". Removing a secret must be an explicit destructive action, not a blank\n * field.\n * - **Any non-empty value**, including `0` and `false`, which are values rather than absences.\n *\n * # Two entry points, because the caller's schema decides the question\n *\n * A form validates the operation's REQUEST DTO; inline edit on a display surface only ever holds\n * the resource's MAIN schema. Those two answer \"can this be cleared?\" differently and cannot be\n * told apart by shape, so the caller picks the entry point matching what it holds — see\n * `requestDtoFieldIsClearable` for why merging them is unsound. This is the REQUEST-DTO one.\n *\n * @param fieldSchema - the field as it appears on the operation's request DTO.\n * @param value - the raw value the control emitted.\n * @returns `null` when the gesture is a clear on a clearable field; otherwise `value` unchanged.\n */\nexport function normalizeClearedRequestDtoValue(fieldSchema: z.ZodTypeAny, value: unknown): unknown {\n return normalizeClearedValue(fieldSchema, value, requestDtoFieldIsClearable);\n}\n\n/**\n * `normalizeClearedFieldValue` for a caller holding the resource's MAIN schema — inline edit on a\n * display surface, and any edit control reasoning about its own declared field.\n *\n * Same contract, different question asked of the schema. See `mainSchemaFieldIsClearable`.\n */\nexport function normalizeClearedMainSchemaValue(fieldSchema: z.ZodTypeAny, value: unknown): unknown {\n return normalizeClearedValue(fieldSchema, value, mainSchemaFieldIsClearable);\n}\n\nfunction normalizeClearedValue(\n fieldSchema: z.ZodTypeAny,\n value: unknown,\n isClearable: (fieldSchema: z.ZodTypeAny) => boolean,\n): unknown {\n if (!isEmptyFieldGesture(value)) return value;\n\n const editMode = getStringUI(fieldSchema)?.edit?.editMode;\n if (editMode === StringEditMode.PASSWORD || editMode === StringEditMode.OTP) return value;\n\n if (!isClearable(fieldSchema)) return value;\n\n return null;\n}\n\n/**\n * Is \"clear it\" a meaningful instruction for this field, as declared on an UPDATE REQUEST DTO?\n *\n * On a request DTO the answer is exactly \"does it accept null\", because `toPatchOptionalField` adds\n * a nullable wrapper to the clearable fields and to no others.\n *\n * **This must never be asked of a MAIN-schema field, and its sibling must never be asked of a DTO\n * field.** The two schemas cannot be told apart by shape, and each answers only its own question\n * correctly:\n *\n * - On a DTO, PATCH semantics make EVERY field optional, so a required field is shape-identical to\n * an optional one. \"Declares absence\" is therefore meaningless here and would report every\n * required field clearable.\n * - On a main schema, an `.optional()` field does NOT accept null, so \"accepts null\" would report\n * every ordinary optional field un-clearable.\n *\n * Merging them into one permissive predicate looks convenient and is unsound in the first\n * direction: it silently made required fields clearable, which a pin caught.\n */\nexport function requestDtoFieldIsClearable(fieldSchema: z.ZodTypeAny): boolean {\n return fieldSchema.safeParse(null).success;\n}\n\n/**\n * Is \"clear it\" a meaningful instruction for this field, as declared on a resource's MAIN schema?\n *\n * Here the author's own declaration is the answer: a field that may be absent (`.optional()`) or\n * explicitly null (`.nullish()`) can be cleared; a required or defaulted one cannot. Read the\n * warning on `requestDtoFieldIsClearable` before using either.\n */\nexport function mainSchemaFieldIsClearable(fieldSchema: z.ZodTypeAny): boolean {\n return fieldSchema.safeParse(null).success || fieldAdmitsAddedNullClear(fieldSchema);\n}\n\n/**\n * Is this value an edit control's way of saying \"the user emptied me\"?\n *\n * The three shapes are the three the framework's controls actually emit: `''` from the string,\n * enum and number families, `undefined` from the date/time family, and `null` from a control that\n * has already been normalised (so re-normalising is idempotent).\n */\nfunction isEmptyFieldGesture(value: unknown): boolean {\n return value === '' || value === undefined || value === null;\n}\n\n/**\n * Should an UPDATE DTO ADD a `.nullable()` wrapper to this field so a caller can CLEAR it?\n *\n * This is the eligibility half of the framework's field-clearing contract. The wire rule is\n * JSON-Merge-Patch shaped and has exactly one meaning: an ABSENT key leaves the stored value\n * untouched, and an explicit `null` means \"this field has no value\". The repository write boundary\n * then derives the STORAGE representation from the field's own declaration — `$unset` / SQL NULL\n * for a field whose schema rejects null, a stored null for one authored `.nullish()`.\n *\n * Three declarations must be told apart, and the distinction is not the one `isOptional()` draws:\n *\n * - **Optional (`.optional()`, `.nullish()`)** — the author said this field may have no value, so\n * clearing it is meaningful. ELIGIBLE.\n * - **Required (`z.string()`)** — no \"no value\" state exists. NOT eligible: `null` must keep\n * failing validation, which is also what the industry guidance prescribes (a field that cannot be\n * deleted answers 400 rather than silently ignoring the instruction).\n * - **Defaulted (`.default('x')`)** — `isOptional()` reports TRUE for these because the *input* may\n * be omitted, but the *output* type is non-optional: the schema guarantees a value is always\n * present, and the READ path validates against that guarantee. Clearing one would persist an\n * absence the resource's own main schema rejects, turning the next read into a 500. NOT eligible,\n * and this is precisely why this predicate exists instead of reusing `isOptional()`.\n *\n * A field that ALREADY accepts null (authored `.nullable()` / `.nullish()`) is reported `false` —\n * not because it cannot be cleared, but because nothing needs adding: it accepts `null` on its own,\n * and re-wrapping would emit a redundant nullable in the generated JSON Schema / OpenAPI document.\n *\n * @param fieldSchema - the field as declared on the resource's main schema.\n * @returns `true` only when a nullable wrapper must be ADDED for the field to be clearable.\n */\nexport function fieldAdmitsAddedNullClear(fieldSchema: z.ZodTypeAny): boolean {\n // A default makes the OUTPUT non-optional — see the JSDoc above. Checked first because\n // `ZodDefault` wraps an inner schema that is frequently optional-looking.\n if (isZodDefault(fieldSchema)) return false;\n\n if (!declaresAbsenceAsAValidState(fieldSchema)) return false;\n\n // Already null-accepting (`.nullable()` / `.nullish()`): clearable without any addition.\n return !fieldSchema.safeParse(null).success;\n}\n\n/**\n * Does this field's declaration allow the value to be ABSENT (i.e. accept `undefined`)?\n *\n * Deliberately NOT `isOptional()`: that helper answers \"may the user omit this input?\", which is\n * true for `.default()` fields, whereas this answers \"may this field legitimately hold no value?\",\n * which is false for them. Merging the two is what would make a defaulted field clearable.\n */\nfunction declaresAbsenceAsAValidState(fieldSchema: z.ZodTypeAny): boolean {\n if (isZodDefault(fieldSchema)) return false;\n if (isZodOptional(fieldSchema)) return true;\n\n const type = getZodType(fieldSchema);\n if (type === 'nullable' || type === 'pipe' || type === 'readonly' || type === 'catch') {\n const innerSchema = getZodDefSchemaProperty(fieldSchema, 'innerType') ?? getZodDefSchemaProperty(fieldSchema, 'in');\n return innerSchema ? declaresAbsenceAsAValidState(innerSchema) : false;\n }\n\n return false;\n}\n\n\n// =============================================================================\n// ZOD TYPE DETECTION HELPERS\n//\n// Helper function to safely get the type from a Zod v4 schema\n// Supports both structures:\n// - Legacy: schema._zod.def.type\n// - Current: schema.def.type (or schema.type at root)\n// Type values are lowercase strings like \"object\", \"array\", \"string\", etc.\n// =============================================================================\n\nexport function getZodType(schema: z.ZodTypeAny): string | undefined {\n // Guard against null/undefined schemas\n if (!schema || typeof schema !== 'object') {\n return undefined;\n }\n\n const def = getZodDef(schema);\n if (def?.type) return def.type;\n\n // Fallback: check schema.type at root level\n if ('type' in schema && typeof (schema as unknown as Record<string, unknown>).type === 'string') {\n return (schema as unknown as Record<string, unknown>).type as string;\n }\n\n return undefined;\n}\n\n/**\n * Type guard to check if a schema has a specific type\n * Uses Zod v4's type system where types are lowercase strings\n */\nexport function hasZodType(schema: z.ZodTypeAny, type: string): boolean {\n return getZodType(schema) === type;\n}\n\nexport function isZodObject(schema: z.ZodTypeAny): schema is z.ZodObject<any> {\n return hasZodType(schema, 'object');\n}\n\nexport function isZodArray(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'array');\n}\n\n/**\n * The same array schema with a different ELEMENT, keeping everything else it carries.\n *\n * Use this instead of `z.array(newElement)` whenever an existing array is being rewritten.\n * A fresh `z.array()` is a brand-new schema that carries none of the original's own checks, so\n * every authored `.min()` / `.max()` / `.length()` / `.nonempty()` is silently dropped — the\n * rewritten schema still parses, just without the constraint the author declared. That is\n * invisible to types and to any test that only feeds it valid data.\n *\n * It cost real time to find: all FOUR DTO-boundary walkers (templatable-file stripping,\n * network-boundary coercion, backend-only stripping, summary-field extraction) rebuilt arrays this\n * way, so an authored array constraint never reached the schema the controller and the repository\n * validate against. `reset_to_defaults` depended on exactly such a constraint to reject a request\n * naming no preference block, and without it the route answered HTTP 200 having written nothing.\n *\n * Native `.clone()` re-instantiates from the schema's own definition, so checks, error maps and\n * metadata survive by construction rather than by a copy loop that the next Zod version could\n * outgrow.\n *\n * @param arraySchema - the array being rewritten. Returned untouched when it is not an array or\n * carries no element, so callers do not need to pre-check.\n * @param element - the replacement element schema.\n */\nexport function withArrayElement(arraySchema: z.ZodTypeAny, element: z.ZodTypeAny): z.ZodTypeAny {\n if (!isZodArray(arraySchema)) {\n return arraySchema;\n }\n\n const def = (arraySchema as unknown as { _zod?: { def?: Record<string, unknown> } })._zod?.def;\n if (!def) {\n return arraySchema;\n }\n\n return (arraySchema as unknown as { clone: (def: unknown) => z.ZodTypeAny }).clone({ ...def, element });\n}\n\nexport function isZodOptional(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'optional');\n}\n\nexport function isZodNullable(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'nullable');\n}\n\nexport function isZodDefault(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'default');\n}\n\nexport function isZodUnion(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'union');\n}\n\nexport function isZodIntersection(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'intersection');\n}\n\nexport function isZodLiteral(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'literal');\n}\n\nexport function isZodLazy(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'lazy');\n}\n\nexport function isZodTuple(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'tuple');\n}\n\nexport function isZodRecord(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'record');\n}\n\nexport function isZodSet(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'set');\n}\n\nexport function isZodPipe(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'pipe');\n}\n\nexport function isZodTransform(schema: z.ZodTypeAny): boolean {\n const type = getZodType(schema);\n if (type === 'transform') return true;\n // In Zod v4, `.transform()` returns a pipe schema whose output is a transform schema.\n if (type === 'pipe') {\n const outSchema = getZodDefSchemaProperty(schema, 'out');\n return outSchema ? getZodType(outSchema) === 'transform' : false;\n }\n return false;\n}\n\nexport function isZodCustom(schema: z.ZodTypeAny): boolean {\n return hasZodType(schema, 'custom');\n}\n\n\nexport function isArray(value: unknown): value is unknown[] {\n return Array.isArray(value);\n}\n\nexport function isZodTypeAny(value: unknown): value is z.ZodTypeAny {\n return value !== null &&\n value !== undefined &&\n typeof value === 'object' &&\n hasZodInternals(value);\n}\n\n/**\n * Check if a union is discriminated (has discriminator property)\n * In Zod v4, discriminated unions have type: \"union\" with a discriminator property\n */\nexport function isDiscriminatedUnion(schema: z.ZodTypeAny): boolean {\n if (!isZodUnion(schema)) return false;\n return getZodDefStringProperty(schema, 'discriminator') !== undefined;\n}\n\n/**\n * Check if a schema is optional (can be undefined)\n */\nexport function isOptional(schema: z.ZodTypeAny): boolean {\n const type = getZodType(schema);\n\n if (type === 'optional') return true;\n if (type === 'default') return true; // Has default, so not required from user\n\n if (type === 'nullable' || type === 'pipe' || type === 'readonly' || type === 'catch') {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType') ?? getZodDefSchemaProperty(schema, 'in');\n return innerSchema ? isOptional(innerSchema) : false;\n }\n\n return false;\n}\n\n/**\n * Check if a schema has refine/superRefine transformations\n * This triggers onChange validation mode\n */\nexport function hasRefine(schema: z.ZodTypeAny): boolean {\n const type = getZodType(schema);\n\n // Check for pipe with refinement effect\n if (type === 'pipe') {\n const outSchema = getZodDefSchemaProperty(schema, 'out');\n if (outSchema) {\n const outType = getZodType(outSchema);\n if (outType === 'custom') {\n // Custom type in pipe output usually indicates refinement\n return true;\n }\n }\n const inSchema = getZodDefSchemaProperty(schema, 'in');\n return inSchema ? hasRefine(inSchema) : false;\n }\n\n // Check for custom type (refine creates these)\n if (type === 'custom') {\n return true;\n }\n\n // Unwrap wrappers and check inner\n if (type === 'optional' || type === 'nullable' || type === 'default' || type === 'readonly' || type === 'catch') {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema ? hasRefine(innerSchema) : false;\n }\n\n return false;\n}\n\n\n// =============================================================================\n// SCHEMA TYPE DETECTION\n// =============================================================================\n\n/**\n * Get the schema type category for component selection.\n *\n * Important: RANGE schemas (created by z_range()) are detected by their\n * SCHEMA_METADATA.rangeConfig before checking for object type. This allows range schemas\n * to be rendered with appropriate range components instead of as composite objects.\n */\nexport function getSchemaType(schema: z.ZodTypeAny): FieldSchemaType {\n // Check for range schema FIRST (before object check)\n // Range schemas are z.object({from, to}) with SCHEMA_METADATA.rangeConfig\n // isRangeSchema and getRangeType now handle unwrapping internally\n if (isRangeSchema(schema)) {\n // Return specialized range type based on the range's value type\n const rangeType = getRangeType(schema);\n switch (rangeType) {\n case RangeType.NUMBER:\n return FieldSchemaType.RANGE_NUMBER;\n case RangeType.DATE:\n return FieldSchemaType.RANGE_DATE;\n case RangeType.DATETIME:\n return FieldSchemaType.RANGE_DATETIME;\n case RangeType.TIME:\n return FieldSchemaType.RANGE_TIME;\n case RangeType.BIGDECIMAL:\n return FieldSchemaType.RANGE_BIGDECIMAL;\n case RangeType.MONEY:\n return FieldSchemaType.RANGE_MONEY;\n default:\n // z_range() only accepts valid RangeType values, so this should never happen\n return FieldSchemaType.UNKNOWN;\n }\n }\n\n // Check for money schemas (created by z_money())\n // isMoneySchema now handles unwrapping internally\n if (isMoneySchema(schema)) {\n return FieldSchemaType.MONEY;\n }\n\n // Check for bigdecimal schemas (created by z_bigdecimal())\n // isBigDecimalSchema now handles unwrapping internally\n if (isBigDecimalSchema(schema)) {\n return FieldSchemaType.BIGDECIMAL;\n }\n\n // Check for code schemas (created by z_code())\n // isCodeSchema now handles unwrapping internally\n if (isCodeSchema(schema)) {\n return FieldSchemaType.CODE;\n }\n\n // Check for file schemas (created by z_file())\n // isFileSchema now handles unwrapping internally\n if (isFileSchema(schema)) {\n return FieldSchemaType.FILE;\n }\n\n // Check for duration schemas (created by z_duration())\n if (isDurationSchema(schema)) {\n return FieldSchemaType.DURATION;\n }\n\n // Check for phone schemas (created by z_phone())\n if (isPhoneSchema(schema)) {\n return FieldSchemaType.PHONE;\n }\n\n // Check for versioned foreign key schemas (created by z_foreignKeyVersioned())\n if (isVersionedForeignKeySchema(schema)) {\n return FieldSchemaType.VERSIONED_FOREIGN_KEY;\n }\n\n // Check for versioned object schemas (created by versioned())\n if (isVersionedObjectSchema(schema)) {\n return FieldSchemaType.VERSIONED_OBJECT;\n }\n\n const unwrapped = unwrapSchema(schema);\n const type = getZodType(unwrapped);\n\n switch (type) {\n case 'string': {\n // Check for datetime/time formats (z.iso.datetime(), z.iso.time())\n const format = getStringFormat(unwrapped);\n if (format === 'datetime') return FieldSchemaType.DATETIME;\n if (format === 'time') return FieldSchemaType.TIME;\n return FieldSchemaType.STRING;\n }\n case 'number':\n case 'int': return FieldSchemaType.NUMBER;\n case 'bigint': return FieldSchemaType.BIGINT;\n case 'boolean': return FieldSchemaType.BOOLEAN;\n case 'enum':\n return FieldSchemaType.ENUM;\n case 'literal': {\n // In Zod v4, literal values are stored in def.values as an array\n const values = getZodDefProperty(unwrapped, 'values') as unknown[] | undefined;\n const literalValue = values?.[0];\n if (literalValue === null || literalValue === undefined) {\n return FieldSchemaType.UNKNOWN;\n }\n // Infer type based on the value type\n switch (typeof literalValue) {\n case 'string':\n // String literals are treated as single-value enums (for select fields)\n return FieldSchemaType.ENUM;\n case 'number':\n case 'bigint':\n return FieldSchemaType.NUMBER;\n case 'boolean':\n return FieldSchemaType.BOOLEAN;\n default:\n return FieldSchemaType.UNKNOWN;\n }\n }\n case 'date': return FieldSchemaType.DATE;\n case 'object': return FieldSchemaType.OBJECT;\n case 'array': return FieldSchemaType.ARRAY;\n case 'set': return FieldSchemaType.SET;\n case 'tuple': return FieldSchemaType.TUPLE;\n case 'record': return FieldSchemaType.RECORD;\n case 'map': return FieldSchemaType.MAP;\n case 'union': {\n // For unions, try to infer type from options\n // If all options are enums, treat as ENUM (combined values)\n // Otherwise, use the type of the first option\n const options = getZodDefArrayProperty(unwrapped, 'options') ?? [];\n if (options.length === 0) return FieldSchemaType.UNKNOWN;\n\n // Check if all options are enums or string literals (treat as combined enum)\n const allEnumLike = options.every((opt: unknown) => {\n if (!isZodTypeAny(opt)) return false;\n const optType = getZodType(opt as z.ZodTypeAny);\n return optType === 'enum' || optType === 'literal';\n });\n\n if (allEnumLike) {\n return FieldSchemaType.ENUM;\n }\n\n // Otherwise, infer from the first option\n const firstOption = options[0];\n if (isZodTypeAny(firstOption)) {\n return getSchemaType(firstOption as z.ZodTypeAny);\n }\n\n return FieldSchemaType.UNKNOWN;\n }\n default: return FieldSchemaType.UNKNOWN;\n }\n}\n\n\n// =============================================================================\n// ZOD HELPER GETTER\n// =============================================================================\n\n\n/**\n * Get the type string from a Zod v4 schema's internal structure.\n * Returns undefined if schema is not a valid Zod 4 schema.\n */\nfunction getZodTypeInternal(schema: z.ZodTypeAny): string | undefined {\n if (!schema || typeof schema !== 'object') return undefined;\n\n const zodProp = (schema as any)._zod;\n if (!zodProp || typeof zodProp !== 'object') return undefined;\n\n const def = zodProp.def;\n if (!def || typeof def !== 'object') return undefined;\n\n return typeof def.type === 'string' ? def.type : undefined;\n}\n\n\n/**\n * Get the shape of a Zod object schema.\n *\n * IMPORTANT: This function only returns valid Zod schema instances, not definitions.\n * In Zod 4, `def.shape` contains JSON-serializable definitions, not schema instances\n * with methods like safeParse.\n *\n * Prefer using getObjectShape() which handles unwrapping and validation.\n */\nexport function getZodObjectShape(schema: z.ZodTypeAny): Record<string, z.ZodTypeAny> {\n if (!isZodObject(schema)) {\n return {};\n }\n\n // Use the improved getObjectShape which validates schema instances\n const shape = getObjectShape(schema);\n return shape ?? {};\n}\n\n/**\n * Field shape of an object schema OR a discriminated union, merged across ALL\n * variants. Unlike {@link getZodObjectShape} (which returns `{}` for a union),\n * this walks the union's variant options and merges their shapes, so callers that\n * need the full field set of a polymorphic resource — FK/ObjectId discovery,\n * field-access checks, etc. — see every variant's fields instead of nothing.\n *\n * For a field present in multiple variants the FIRST occurrence wins (variants\n * share the common base fields, so the common shape is identical across them).\n * Returns `{}` for non-object, non-union schemas.\n */\nexport function getMergedObjectOrUnionShape(schema: z.ZodTypeAny): Record<string, z.ZodTypeAny> {\n if (isZodObject(schema)) {\n return getZodObjectShape(schema);\n }\n if (isDiscriminatedUnion(schema)) {\n const options = getZodDefArrayProperty(schema, 'options') as z.ZodTypeAny[] | undefined;\n if (!options) {\n return {};\n }\n const merged: Record<string, z.ZodTypeAny> = {};\n for (const option of options) {\n const optionShape = isZodObject(option) ? getZodObjectShape(option) : {};\n for (const [fieldName, fieldSchema] of Object.entries(optionShape)) {\n if (!(fieldName in merged)) {\n merged[fieldName] = fieldSchema;\n }\n }\n }\n return merged;\n }\n return {};\n}\n\n/**\n * Resolve the ONE variant of a discriminated union that a given value belongs to.\n *\n * Distinct from {@link getMergedObjectOrUnionShape}, and the difference is the point: merging every\n * variant answers \"what fields COULD this union carry\", which is what a schema-only caller (a\n * validator, a drift check) needs. A caller holding a VALUE can do better — the discriminator says\n * which variant this is, so the shape can be exactly that variant's, with no fields belonging to\n * the alternatives the value did not choose.\n *\n * Returns `null` when the schema is not a discriminated union, when the value carries no\n * discriminator, or when no variant matches it — all three are \"this caller cannot narrow\", and a\n * caller that renders should say nothing rather than guess a variant.\n */\nexport function resolveDiscriminatedUnionVariant(\n schema: z.ZodTypeAny,\n value: unknown,\n): z.ZodTypeAny | null {\n if (!isDiscriminatedUnion(schema)) return null;\n if (typeof value !== 'object' || value === null) return null;\n\n const discriminator = getZodDefStringProperty(schema, 'discriminator');\n if (!discriminator) return null;\n\n const discriminatorValue = (value as Record<string, unknown>)[discriminator];\n if (discriminatorValue === undefined) return null;\n\n const options = (getZodDefArrayProperty(schema, 'options') ?? []) as z.ZodTypeAny[];\n for (const option of options) {\n if (!isZodObject(option)) continue;\n const optionShape = getZodObjectShape(option);\n const discriminatorSchema = optionShape[discriminator];\n if (!discriminatorSchema) continue;\n /*\n * A variant's discriminator is a LITERAL (`z.literal(ICPArchetype.LEGAL_ENTITY)`), whose value\n * Zod 4 stores as an array under `values` — the same shape `getEnumValues` reads for the\n * literal case. Comparing against that is what makes the match exact rather than structural.\n */\n const literalValues = getZodDefArrayProperty(discriminatorSchema, 'values') ?? [];\n if (literalValues.includes(discriminatorValue)) return option;\n }\n return null;\n}\n\nexport function getZodDef(schema: z.ZodTypeAny): { type: string; [key: string]: unknown } | undefined {\n if (!hasZodInternals(schema)) return undefined;\n\n // First check legacy structure: schema._zod.def\n if ('_zod' in schema) {\n const zodProp = (schema as unknown as Record<string, unknown>)._zod;\n if (typeof zodProp === 'object' && zodProp !== null && 'def' in zodProp) {\n return (zodProp as { def: { type: string; [key: string]: unknown } }).def;\n }\n }\n\n // Use current structure: schema.def directly\n return (schema as unknown as { def: { type: string; [key: string]: unknown } }).def;\n}\n\nexport function getZodDefSchemaProperty(schema: z.ZodTypeAny, property: string): z.ZodTypeAny | undefined {\n const def = getZodDef(schema);\n const value = def?.[property];\n return isZodTypeAny(value) ? value : undefined;\n}\n\nexport function getZodDefArrayProperty(schema: z.ZodTypeAny, property: string): unknown[] | undefined {\n const def = getZodDef(schema);\n const value = def?.[property];\n return isArray(value) ? value : undefined;\n}\n\nexport function getZodDefStringProperty(schema: z.ZodTypeAny, property: string): string | undefined {\n const def = getZodDef(schema);\n const value = def?.[property];\n return typeof value === 'string' ? value : undefined;\n}\n\nexport function getZodDefFunctionProperty(schema: z.ZodTypeAny, property: string): (() => z.ZodTypeAny) | undefined {\n const def = getZodDef(schema);\n const value = def?.[property];\n if (typeof value === 'function') {\n return value as () => z.ZodTypeAny;\n }\n return undefined;\n}\n\nexport function getZodDefProperty(schema: z.ZodTypeAny, property: string): unknown {\n const def = getZodDef(schema);\n return def?.[property];\n}\n\n/**\n * Get the inner schema from a pipe type (for transforms/refinements)\n * In Zod v4, pipe types have def.in and def.out\n * For most cases, we want def.in (the input schema before transformation)\n */\nexport function getPipeInputSchema(schema: z.ZodTypeAny): z.ZodTypeAny | undefined {\n if (!isZodPipe(schema)) return undefined;\n return getZodDefSchemaProperty(schema, 'in');\n}\n\n\n\n/**\n * Get all custom field metadata from a schema, traversing through wrapper types\n * (optional, nullable, default, pipe, readonly, catch, array, effects).\n * Always returns an object (never undefined) — empty `{}` if no metadata found.\n *\n * Delegates to the unified getMetadataRecursive from zod.module-override.ts.\n */\nexport function getCustomFieldMetadata(schema: z.ZodTypeAny): CustomFieldMetadata {\n if (!schema) {\n return {};\n }\n return getMetadataRecursive(schema) ?? {};\n}\n\n\n// =============================================================================\n// GENERIC {primitive}UI CROSS-CUTTING READERS\n// =============================================================================\n\n/**\n * All `*_UI` decorator keys. Used by cross-cutting readers to extract\n * base params (`edit`, `display`) from whichever primitive UI decorator\n * is present on a schema, without needing to know the concrete primitive.\n */\nconst UI_DECORATOR_KEYS = [\n ZodDecorator.BOOLEAN_UI, ZodDecorator.STRING_UI, ZodDecorator.NUMBER_UI,\n ZodDecorator.ENUM_UI, ZodDecorator.DATE_UI, ZodDecorator.DATETIME_UI,\n ZodDecorator.TIME_UI, ZodDecorator.MONEY_UI, ZodDecorator.CODE_UI,\n ZodDecorator.FILE_UI, ZodDecorator.DURATION_UI, ZodDecorator.PHONE_UI,\n ZodDecorator.BIGDECIMAL_UI, ZodDecorator.FOREIGN_KEY_UI,\n ZodDecorator.ARRAY_UI, ZodDecorator.OBJECT_UI,\n] as const;\n\n/**\n * Extract the edit-context base params from whichever `{primitive}UI` decorator\n * is present on the schema. Works generically because all `*UIEditParams`\n * extend `PrimitiveUIBaseEditParams`.\n *\n * Use this for cross-cutting concerns (validationMode, autosave, tooltip, etc.)\n * where the consumer doesn't know the concrete primitive type.\n */\nexport function getFieldUIEditConfig(schema: z.ZodTypeAny): PrimitiveUIBaseEditParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n for (const key of UI_DECORATOR_KEYS) {\n const params = metadata[key];\n if (params && typeof params === 'object' && 'edit' in params) {\n return (params as PrimitiveUIBaseParams).edit;\n }\n }\n return undefined;\n}\n\n/**\n * Extract the display-context base params from whichever `{primitive}UI` decorator\n * is present on the schema. Works generically because all `*UIDisplayParams`\n * extend `PrimitiveUIBaseDisplayParams`.\n *\n * Use this for cross-cutting concerns (tooltip, inlineEditable, etc.)\n * where the consumer doesn't know the concrete primitive type.\n */\nexport function getFieldUIDisplayConfig(schema: z.ZodTypeAny): PrimitiveUIBaseDisplayParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n for (const key of UI_DECORATOR_KEYS) {\n const params = metadata[key];\n if (params && typeof params === 'object' && 'display' in params) {\n return (params as PrimitiveUIBaseParams).display;\n }\n }\n return undefined;\n}\n\n/**\n * Display-context base params resolved for the SUMMARY context (cards, list\n * items, FK reference previews): `summaryOverride` merged over `display`,\n * key-by-key. A field with no `summaryOverride` behaves exactly as in the\n * regular display context.\n *\n * Summary renderers (the `ResourceSummaryDisplayer` pipeline) call this instead\n * of {@link getFieldUIDisplayConfig}; everything else keeps reading the plain\n * display params. The same merge convention applies to the primitive-specific\n * params (`getEnumUI(s)` consumers merge `{...ui.display, ...ui.summaryOverride}`\n * when rendering a summary surface).\n */\nexport function getFieldUISummaryDisplayConfig(schema: z.ZodTypeAny): PrimitiveUIBaseDisplayParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n for (const key of UI_DECORATOR_KEYS) {\n const params = metadata[key];\n if (params && typeof params === 'object' && ('display' in params || 'summaryOverride' in params)) {\n const typed = params as PrimitiveUIBaseParams;\n if (!typed.display && !typed.summaryOverride) return undefined;\n return { ...typed.display, ...typed.summaryOverride };\n }\n }\n return undefined;\n}\n\n// =============================================================================\n// TOOLTIP DECORATOR UTILITIES\n// =============================================================================\n\n/**\n * Check if a field should show a tooltip in display mode.\n * Reads from `{primitive}UI.display.tooltip` (boolean flag).\n * The actual tooltip text comes from the i18n label system, NOT from the decorator.\n */\nexport function hasTooltipForDisplay(schema: z.ZodTypeAny): boolean {\n return getFieldUIDisplayConfig(schema)?.tooltip === true;\n}\n\n/**\n * Check if a field should show a tooltip in edit mode.\n * Reads from `{primitive}UI.edit.tooltip` (boolean flag).\n * The actual tooltip text comes from the i18n label system, NOT from the decorator.\n */\nexport function hasTooltipForEdit(schema: z.ZodTypeAny): boolean {\n return getFieldUIEditConfig(schema)?.tooltip === true;\n}\n\n\n/**\n * Check if a field is marked as draft-relaxed (validation is relaxed in draft mode).\n *\n * @param schema - Zod schema to check\n * @returns true if the field is draft-relaxed\n *\n * @example\n * if (isDraftRelaxed(schema) && isDraftMode) {\n * // Skip strict validation for this field\n * }\n */\nexport function isDraftRelaxed(schema: z.ZodTypeAny): boolean {\n const metadata = getCustomFieldMetadata(schema);\n return metadata[ZodDecorator.IS_DRAFT_RELAXED] === true;\n}\n\n\n/**\n * FIX-P5-H1: Get showWhen parameters from a field schema.\n * Returns the conditional visibility configuration if present.\n *\n * @param schema - The field schema to get showWhen params from\n * @returns ShowWhenParams if decorator was applied, undefined otherwise\n *\n * @example\n * const showWhenParams = getShowWhenParams(fieldSchema);\n * if (showWhenParams) {\n * // Evaluate visibility based on conditions\n * const isVisible = evaluateShowWhenConditions(showWhenParams, formValues);\n * }\n */\nexport function getShowWhenParams(schema: z.ZodTypeAny): ShowWhenParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n return metadata[ZodDecorator.SHOW_WHEN] as ShowWhenParams | undefined;\n}\n\n\n// =============================================================================\n// Enhanced Primitive Helpers\n// =============================================================================\n\n\n// ------------------------------------------------------------\n// STRING SCHEMA UTILITIES\n// ------------------------------------------------------------\n\n\n/**\n * String format types detected from schema\n */\nexport type StringFormat = 'email' | 'url' | 'uuid' | 'cuid' | 'cuid2' | 'ulid' | 'regex' | 'datetime' | 'time' | 'ip' | null;\n\n\n/**\n * Get string format from schema checks (email, url, etc.)\n */\nexport function getStringFormat(schema: z.ZodTypeAny): StringFormat {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'string') {\n return null;\n }\n\n const checks = getZodDefArrayProperty(unwrapped, 'checks') ?? [];\n\n for (const check of checks) {\n if (typeof check !== 'object' || check === null) continue;\n const kind = (check as Record<string, unknown>).kind;\n\n switch (kind) {\n case 'email': return 'email';\n case 'url': return 'url';\n case 'uuid': return 'uuid';\n case 'cuid': return 'cuid';\n case 'cuid2': return 'cuid2';\n case 'ulid': return 'ulid';\n case 'regex': return 'regex';\n case 'datetime': return 'datetime';\n case 'time': return 'time';\n case 'ip': return 'ip';\n }\n }\n\n return null;\n}\n\n/**\n * Get min/max length constraints from string schema\n */\nexport function getStringConstraints(schema: z.ZodTypeAny): { minLength?: number; maxLength?: number } {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'string') {\n return {};\n }\n\n const checks = getZodDefArrayProperty(unwrapped, 'checks') ?? [];\n const result: { minLength?: number; maxLength?: number } = {};\n\n for (const check of checks) {\n if (typeof check !== 'object' || check === null) continue;\n const kind = (check as Record<string, unknown>).kind;\n const value = (check as Record<string, unknown>).value;\n\n if (typeof value !== 'number') continue;\n\n if (kind === 'min') {\n result.minLength = value;\n }\n if (kind === 'max') {\n result.maxLength = value;\n }\n if (kind === 'length') {\n result.minLength = value;\n result.maxLength = value;\n }\n }\n\n return result;\n}\n\n\n// ------------------------------------------------------------\n// NUMBER SCHEMA UTILITIES\n// ------------------------------------------------------------\n\n/**\n * Get min/max value constraints from number schema\n */\nexport function getNumberConstraints(schema: z.ZodTypeAny): {\n min?: number;\n max?: number;\n step?: number;\n isInt?: boolean;\n} {\n const unwrapped = unwrapSchema(schema);\n const type = getZodType(unwrapped);\n\n if (type !== 'number' && type !== 'int') {\n return {};\n }\n\n const checks = getZodDefArrayProperty(unwrapped, 'checks') ?? [];\n const result: { min?: number; max?: number; step?: number; isInt?: boolean } = {};\n\n // int type in Zod v4\n if (type === 'int') {\n result.isInt = true;\n result.step = 1;\n }\n\n for (const check of checks) {\n if (typeof check !== 'object' || check === null) continue;\n const kind = (check as Record<string, unknown>).kind;\n const value = (check as Record<string, unknown>).value;\n\n if (kind === 'min' && typeof value === 'number') {\n result.min = value;\n }\n if (kind === 'max' && typeof value === 'number') {\n result.max = value;\n }\n if (kind === 'int') {\n result.isInt = true;\n result.step = 1;\n }\n if (kind === 'multipleOf' && typeof value === 'number') {\n result.step = value;\n }\n }\n\n return result;\n}\n\n// ------------------------------------------------------------\n// ENUM SCHEMA UTILITIES\n// ------------------------------------------------------------\n\n/**\n * Extract enum values from z.enum (Zod 4)\n * In Zod 4, both z.enum() and z.enum() create schemas with type 'enum'\n * - z.enum(['a', 'b', 'c']) - def.entries is an object map (e.g. { a: 'a', b: 'b' })\n * - z.enum(TypeScriptEnum) / z.enum(TypeScriptEnum) - def.entries is the enum object map\n */\nexport function getEnumValues(schema: z.ZodTypeAny): string[] {\n const unwrapped = unwrapSchema(schema);\n const type = getZodType(unwrapped);\n\n // Handle string literal types (z.literal(\"value\")) - return single value as array\n // Only string literals are treated as enums (for select fields)\n // In Zod v4, literal values are stored in def.values as an array\n if (type === 'literal') {\n const values = getZodDefProperty(unwrapped, 'values') as unknown[] | undefined;\n const literalValue = values?.[0];\n // Only string literals are valid enum values\n if (typeof literalValue === 'string') {\n return [literalValue];\n }\n return [];\n }\n\n // Handle union types - combine enum values from all options\n // This handles cases like z.union([z.enum(A), z.enum(B)])\n if (type === 'union') {\n const options = getZodDefArrayProperty(unwrapped, 'options') ?? [];\n const allValues: string[] = [];\n const seenValues = new Set<string>();\n\n for (const opt of options) {\n if (isZodTypeAny(opt)) {\n const optValues = getEnumValues(opt as z.ZodTypeAny);\n for (const val of optValues) {\n if (!seenValues.has(val)) {\n seenValues.add(val);\n allValues.push(val);\n }\n }\n }\n }\n\n return allValues;\n }\n\n if (type !== 'enum') {\n return [];\n }\n\n // In Zod v4.1.x, enum values are stored in def.entries (object map).\n const entries = getZodDefProperty(unwrapped, 'entries');\n if (!entries || typeof entries !== 'object') return [];\n\n const values: string[] = [];\n for (const key of Object.keys(entries as Record<string, unknown>)) {\n const value = (entries as Record<string, unknown>)[key];\n // For numeric enums, TypeScript creates reverse mappings: entries[\"0\"] = \"A\", entries[\"A\"] = 0\n if (typeof value === 'string') {\n // Skip reverse mapping values where key is numeric (e.g., \"0\" -> \"A\")\n if (!Number.isNaN(Number(key))) continue;\n values.push(value);\n } else if (typeof value === 'number') {\n values.push(String(value));\n }\n }\n return values;\n}\n\n\n// ------------------------------------------------------------\n// OBJECT SCHEMA UTILITIES\n// ------------------------------------------------------------\n\n/**\n * Validates that an object contains actual Zod schema instances (not definitions).\n * A valid Zod 4 schema instance has either:\n * - _zod property (internal structure)\n * - safeParse method (public API)\n */\nfunction isValidSchemaShape(shape: Record<string, unknown>): shape is Record<string, z.ZodTypeAny> {\n // Skip $-prefixed keys (Zod v4 internals like $id, $brand) when picking\n // the representative entry to validate — their values are primitives, not schemas.\n const keys = Object.keys(shape);\n const firstUserKey = keys.find(k => !k.startsWith('$'));\n if (!firstUserKey) return keys.length === 0; // Only internal keys or empty → valid if empty\n\n const firstValue = shape[firstUserKey];\n if (!firstValue || typeof firstValue !== 'object') return false;\n\n const hasZodInternals = '_zod' in firstValue;\n const hasSafeParse = 'safeParse' in firstValue && typeof (firstValue as Record<string, unknown>).safeParse === 'function';\n\n return hasZodInternals || hasSafeParse;\n}\n\ndeclare const console: { warn(...args: unknown[]): void };\n\n/**\n * Strips Zod v4 internal properties (e.g. $id, $brand) from a shape record.\n * These are runtime metadata, not user-defined fields, and leak into\n * Object.entries() when iterating the raw .shape object.\n *\n * Uses warn-once to avoid log flooding (same pattern as _warnedStorageProviders in zod-file.ts).\n * This is a low-level shared lib used by both frontend and backend — console.warn\n * is the only available logging primitive here (no injected logger).\n */\nconst _warnedInternalKeys = new Set<string>();\n\nfunction stripZodInternalKeys(shape: Record<string, z.ZodTypeAny>): Record<string, z.ZodTypeAny> {\n const keys = Object.keys(shape);\n const internalKeys = keys.filter(k => k.startsWith('$'));\n if (internalKeys.length === 0) return shape;\n\n const warnKey = internalKeys.sort().join(',');\n if (!_warnedInternalKeys.has(warnKey)) {\n _warnedInternalKeys.add(warnKey);\n console.warn(\n `[getObjectShape] Stripping Zod internal keys from shape: [${internalKeys.join(', ')}]. ` +\n `If a legitimate user-defined field starts with '$', this filter is incorrect. ` +\n `Stripped keys had values: ${internalKeys.map(k => `${k}=${typeof shape[k] === 'object' ? 'object' : shape[k]}`).join(', ')}`\n );\n }\n\n const clean: Record<string, z.ZodTypeAny> = {};\n for (const k of keys) {\n if (!k.startsWith('$')) clean[k] = shape[k];\n }\n return clean;\n}\n\n/**\n * Get the shape of an object schema.\n *\n * IMPORTANT: In Zod 4, `def.shape` contains schema DEFINITIONS (JSON-serializable),\n * NOT schema instances with methods. This function validates that returned shapes\n * contain actual Zod schema instances.\n *\n * If the schema is wrapped (e.g., with .default()), it will be unwrapped first.\n */\n/**\n * Resolve ONE field's declared schema from an object-like root, seeing through a discriminated\n * union.\n *\n * `getObjectShape()` deliberately returns `null` for a union, which is correct for its own contract\n * but useless to a caller that only needs to ask a question about a single named field. Polymorphic\n * resources (`createSchemaFamily` output) present exactly that shape, so a caller using\n * `getObjectShape()` alone silently answers \"field unknown\" for every field of every polymorphic\n * resource — the failure mode that once left polymorphic form fields unlabelled.\n *\n * Union handling returns the FIRST variant that declares the name. Variants of one resource family\n * share a field's declaration for any field they have in common, so the first match is\n * representative; a caller needing per-variant precision must narrow the union itself first.\n *\n * @param schema - object, or discriminated union of objects (wrappers are unwrapped).\n * @param fieldName - top-level field name.\n * @returns the field's declared schema, or `undefined` when no variant declares it.\n */\nexport function getObjectLikeFieldSchema(schema: z.ZodTypeAny, fieldName: string): z.ZodTypeAny | undefined {\n const directShape = getObjectShape(schema);\n if (directShape) return directShape[fieldName];\n\n const unwrapped = unwrapSchema(schema);\n if (!isZodUnion(unwrapped)) return undefined;\n\n const options = getZodDefArrayProperty(unwrapped, 'options') ?? [];\n for (const option of options) {\n const optionShape = getObjectShape(option as z.ZodTypeAny);\n const fieldSchema = optionShape?.[fieldName];\n if (fieldSchema) return fieldSchema;\n }\n\n return undefined;\n}\n\nexport function getObjectShape(schema: z.ZodTypeAny): Record<string, z.ZodTypeAny> | null {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'object') {\n return null;\n }\n\n // Try public .shape property - this should contain actual schema instances\n if ('shape' in unwrapped && typeof unwrapped.shape === 'object' && unwrapped.shape !== null) {\n const shape = unwrapped.shape as Record<string, unknown>;\n\n // Validate that the shape contains actual Zod schemas, not definitions\n if (isValidSchemaShape(shape)) {\n return stripZodInternalKeys(shape as Record<string, z.ZodTypeAny>);\n }\n // Shape exists but contains corrupted definitions - will be caught by fail-fast below\n }\n\n // Try accessing shape through _zod internals (Zod 4 structure)\n // In some Zod 4 versions, _zod.def.shape might still contain actual schema instances\n if ('_zod' in unwrapped) {\n const zodInternals = (unwrapped as unknown as { _zod: { def?: { shape?: Record<string, unknown> } } })._zod;\n if (zodInternals?.def?.shape && typeof zodInternals.def.shape === 'object') {\n const shape = zodInternals.def.shape;\n\n // Validate that it contains actual schema instances\n if (isValidSchemaShape(shape)) {\n return stripZodInternalKeys(shape as Record<string, z.ZodTypeAny>);\n }\n }\n }\n\n // FAIL-FAST: Do NOT return corrupted schemas silently\n // Throw with diagnostic info to identify the corruption source\n if ('shape' in unwrapped && typeof unwrapped.shape === 'object' && unwrapped.shape !== null) {\n const shape = unwrapped.shape as Record<string, unknown>;\n const firstKey = Object.keys(shape)[0];\n const firstValue = shape[firstKey];\n const firstValueKeys = firstValue && typeof firstValue === 'object'\n ? Object.keys(firstValue as object).slice(0, 10).join(', ')\n : 'N/A';\n\n throw new Error(\n `[getObjectShape] Schema shape contains corrupted objects (not valid Zod schemas). ` +\n `First field \"${firstKey}\" is missing safeParse method. ` +\n `Keys on corrupted object: [${firstValueKeys}]. ` +\n `This usually means the schema was JSON.stringify/parsed or incorrectly cloned.`\n );\n }\n\n // Also check _zod.def.shape - same fail-fast approach\n if ('_zod' in unwrapped) {\n const zodInternals = (unwrapped as unknown as { _zod: { def?: { shape?: Record<string, unknown> } } })._zod;\n if (zodInternals?.def?.shape && typeof zodInternals.def.shape === 'object') {\n const shape = zodInternals.def.shape;\n const firstKey = Object.keys(shape)[0];\n const firstValue = shape[firstKey];\n const firstValueKeys = firstValue && typeof firstValue === 'object'\n ? Object.keys(firstValue as object).slice(0, 10).join(', ')\n : 'N/A';\n\n throw new Error(\n `[getObjectShape] _zod.def.shape contains corrupted objects (not valid Zod schemas). ` +\n `First field \"${firstKey}\" is missing safeParse. ` +\n `Keys: [${firstValueKeys}]. ` +\n `This usually means the schema was JSON.stringify/parsed or incorrectly cloned.`\n );\n }\n }\n\n return null;\n}\n\n/**\n * Get the keys of an object schema shape\n */\nexport function getObjectKeys(schema: z.ZodTypeAny): string[] {\n const shape = getObjectShape(schema);\n return shape ? Object.keys(shape) : [];\n}\n\n/**\n * Extract all flattened paths from a Zod schema.\n * Recursively traverses object schemas to build dot-notation paths (e.g., 'field.nestedField').\n * Handles optional, nullable, array, and union types.\n *\n * @param zodSchema - The Zod schema to extract paths from\n * @param prefix - Current path prefix (used for recursion)\n * @param schemaDepthCounters - Map to track depth per schema instance (prevents infinite recursion)\n * @param maxDepthPerSchema - Maximum depth to traverse per schema instance (default: 3)\n * @returns Array of flattened dot-notation paths\n */\nexport function extractFlattenedPathsFromZodSchema(\n zodSchema: z.ZodTypeAny,\n prefix: string = '',\n schemaDepthCounters: Map<any, number> = new Map(),\n maxDepthPerSchema: number = 3\n): string[] {\n const paths: string[] = [];\n\n if (!zodSchema) {\n return paths;\n }\n\n // Check depth for this specific schema instance to prevent infinite recursion\n const currentDepth = schemaDepthCounters.get(zodSchema) || 0;\n if (currentDepth >= maxDepthPerSchema) {\n return paths;\n }\n\n // Increment depth counter for this schema\n schemaDepthCounters.set(zodSchema, currentDepth + 1);\n\n try {\n const zodType = getZodType(zodSchema);\n\n switch (zodType) {\n case 'object': {\n // Extract shape from zod object using public API\n const shape = getZodObjectShape(zodSchema);\n\n Object.entries(shape).forEach(([fieldName, fieldSchema]) => {\n const currentPath = prefix ? `${prefix}.${fieldName}` : fieldName;\n\n // Add the current path\n paths.push(currentPath);\n\n // Recursively process nested objects\n const nestedPaths = extractFlattenedPathsFromZodSchema(\n fieldSchema as z.ZodTypeAny,\n currentPath,\n new Map(schemaDepthCounters) // Pass a copy to avoid shared state issues\n );\n paths.push(...nestedPaths);\n });\n break;\n }\n\n case 'optional': {\n // Process the inner type for optional fields\n const innerType = getZodDefSchemaProperty(zodSchema, 'innerType');\n if (innerType) {\n const innerPaths = extractFlattenedPathsFromZodSchema(\n innerType,\n prefix,\n new Map(schemaDepthCounters)\n );\n paths.push(...innerPaths);\n }\n break;\n }\n\n case 'nullable': {\n // Process the inner type for nullable fields\n const innerType = getZodDefSchemaProperty(zodSchema, 'innerType');\n if (innerType) {\n const innerPaths = extractFlattenedPathsFromZodSchema(\n innerType,\n prefix,\n new Map(schemaDepthCounters)\n );\n paths.push(...innerPaths);\n }\n break;\n }\n\n case 'array': {\n // For arrays, extract paths from the element type\n // This allows finding nested fields in array elements (e.g., \"items.organizationId\")\n const element = getZodDefSchemaProperty(zodSchema, 'element');\n if (element) {\n const elementPaths = extractFlattenedPathsFromZodSchema(\n element,\n prefix,\n new Map(schemaDepthCounters)\n );\n paths.push(...elementPaths);\n }\n break;\n }\n\n case 'union': {\n // For unions, try to extract paths from all possible schemas\n const options = getZodDefArrayProperty(zodSchema, 'options') || [];\n options.forEach((option: unknown) => {\n if (option && typeof option === 'object' && hasZodInternals(option)) {\n const unionPaths = extractFlattenedPathsFromZodSchema(\n option as unknown as z.ZodTypeAny,\n prefix,\n new Map(schemaDepthCounters)\n );\n paths.push(...unionPaths);\n }\n });\n break;\n }\n\n default: {\n // For primitive types (string, number, boolean, etc.), no nested paths\n break;\n }\n }\n } catch (error) {\n // Silently handle errors - return paths collected so far\n }\n\n // Decrement depth counter when done processing this schema\n schemaDepthCounters.set(zodSchema, currentDepth);\n return paths;\n}\n\n// ------------------------------------------------------------\n// ARRAY SCHEMA UTILITIES\n// ------------------------------------------------------------\n\n/**\n * Get the item schema from an array schema\n */\nexport function getArrayItemSchema(schema: z.ZodTypeAny): z.ZodTypeAny | null {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'array') {\n return null;\n }\n\n const element = getZodDefSchemaProperty(unwrapped, 'element');\n return element ?? null;\n}\n\n/**\n * Get min/max constraints for array\n */\nexport function getArrayConstraints(schema: z.ZodTypeAny): { minLength?: number; maxLength?: number } {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'array') {\n return {};\n }\n\n const result: { minLength?: number; maxLength?: number } = {};\n\n const minLength = getZodDefProperty(unwrapped, 'minLength');\n const maxLength = getZodDefProperty(unwrapped, 'maxLength');\n\n if (minLength && typeof minLength === 'object' && 'value' in minLength) {\n const value = (minLength as Record<string, unknown>).value;\n if (typeof value === 'number') result.minLength = value;\n }\n if (maxLength && typeof maxLength === 'object' && 'value' in maxLength) {\n const value = (maxLength as Record<string, unknown>).value;\n if (typeof value === 'number') result.maxLength = value;\n }\n\n return result;\n}\n\n// ------------------------------------------------------------\n// RECORD/MAP SCHEMA UTILITIES\n// ------------------------------------------------------------\n\n/**\n * Get the value schema from a record schema\n */\nexport function getRecordValueSchema(schema: z.ZodTypeAny): z.ZodTypeAny | null {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'record') {\n return null;\n }\n\n const valueSchema = getZodDefSchemaProperty(unwrapped, 'valueType');\n return valueSchema ?? null;\n}\n\n/**\n * Get the key and value schemas from a map schema\n */\nexport function getMapSchemas(schema: z.ZodTypeAny): { keySchema: z.ZodTypeAny; valueSchema: z.ZodTypeAny } | null {\n const unwrapped = unwrapSchema(schema);\n\n if (getZodType(unwrapped) !== 'map') {\n return null;\n }\n\n const keySchema = getZodDefSchemaProperty(unwrapped, 'keyType');\n const valueSchema = getZodDefSchemaProperty(unwrapped, 'valueType');\n\n if (keySchema && valueSchema) {\n return { keySchema, valueSchema };\n }\n\n return null;\n}\n\n// ------------------------------------------------------------\n// DEFAULT VALUE UTILITIES\n// ------------------------------------------------------------\n\n/**\n * Get the default value from a schema if it has one\n */\nexport function getDefaultValue(schema: z.ZodTypeAny): unknown | undefined {\n const type = getZodType(schema);\n\n if (type === 'default') {\n const defaultValue = getZodDefProperty(schema, 'defaultValue');\n if (typeof defaultValue === 'function') {\n return defaultValue();\n }\n return defaultValue;\n }\n\n if (type === 'optional' || type === 'nullable') {\n const innerSchema = getZodDefSchemaProperty(schema, 'innerType');\n return innerSchema ? getDefaultValue(innerSchema) : undefined;\n }\n\n return undefined;\n}\n\n\n// =============================================================================\n// DB related\n// =============================================================================\n\nexport function isDBIndexed(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.IS_DB_INDEXED);\n}\n\n/** @see isForeignKeyField — alias for backward compatibility */\nexport function isForeignKey(schema: z.ZodTypeAny): boolean {\n return isForeignKeyField(schema);\n}\n\n/** @see isUniqueField — alias for backward compatibility */\nexport function isUnique(schema: z.ZodTypeAny): boolean {\n return isUniqueField(schema);\n}\n\n/** @see getUniqueFieldParams — alias for backward compatibility */\nexport function getUniqueParams(schema: z.ZodTypeAny): UniqueFieldParams | undefined {\n return getUniqueFieldParams(schema);\n}\n\n/**\n * Check if a field is a primary key.\n * Primary keys are automatically: excludeFromCreate, isHidden, isUnique, isDBIndexed\n * @see isPrimaryKeyField — alias for backward compatibility\n */\nexport function isPrimaryKey(schema: z.ZodTypeAny): boolean {\n return isPrimaryKeyField(schema);\n}\n\n/**\n * Check if a field has a TTL (Time To Live) decorator.\n * TTL fields are used for MongoDB document expiration.\n */\nexport function hasTtl(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.TTL);\n}\n\n/**\n * Get TTL field params from a schema.\n * Returns undefined if the schema is not a TTL field.\n */\nexport function getTtlParams(schema: z.ZodTypeAny): TtlFieldParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n return metadata[ZodDecorator.TTL];\n}\n\n// =============================================================================\n// DECORATOR READER FUNCTIONS (using getMetadataRecursive — recursive unwrapping)\n// These handle .optional(), .nullable(), .default(), .refine(), array wrappers etc.\n// =============================================================================\n\n/**\n * Get the structural FK params (polymorphicVariants) from `IS_FOREIGN_KEY`.\n * Returns undefined if the schema is not a foreign key.\n */\nexport function getForeignKeyParams(schema: z.ZodTypeAny): ForeignKeyStructuralParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_FOREIGN_KEY];\n\n if (value === undefined) return undefined;\n if (value === true) return {};\n\n return value as ForeignKeyStructuralParams;\n}\n\n/**\n * Get FK UI display params from `FOREIGN_KEY_UI.display`. Returns mode, linkable, displayPresetOverride.\n *\n * When the FK exists but authors no explicit `display` config, `mode` falls back to\n * {@link DEFAULT_FOREIGN_KEY_DISPLAY_MODE} — the single source for that default. Do not\n * restate a `ForeignKeyDisplayMode` member here: a second declaration of the\n * default is how this surface and the display preset came to disagree.\n */\nexport function getForeignKeyUIDisplay(schema: z.ZodTypeAny): ForeignKeyUIDisplayParams | undefined {\n if (!isForeignKeyField(schema)) return undefined;\n\n const metadata = getCustomFieldMetadata(schema);\n const uiParams = metadata[ZodDecorator.FOREIGN_KEY_UI] as ForeignKeyUIParams | undefined;\n const display = uiParams?.display;\n\n return { mode: DEFAULT_FOREIGN_KEY_DISPLAY_MODE, ...display };\n}\n\n/**\n * Get the polymorphic variants from a foreign key field.\n * Returns the array of PolymorphicFkVariant if the FK is polymorphic, or undefined.\n */\nexport function getPolymorphicFkVariants(schema: z.ZodTypeAny): PolymorphicFkVariant[] | undefined {\n const params = getForeignKeyParams(schema);\n return params?.polymorphicVariants;\n}\n\n/**\n * Resolve the per-record DISCRIMINATED polymorphic FK declaration, if any.\n *\n * Returns `{ discriminatorField, variants }` only when the FK is a single\n * SHARED field pointing at a polymorphic branch group — i.e. BOTH a\n * `polymorphicDiscriminatorField` AND at least one `polymorphicVariants` entry\n * are declared. Returns `undefined` for plain FKs and for rename-only\n * polymorphic FKs (variants present, no discriminator field).\n *\n * Consumers (registry FK→type map builders, FK display/link resolution) use\n * this as the signal that the FK resolves to a different branch PER RECORD: the\n * holder record's `discriminatorField` value is matched against each variant's\n * `discriminatorValue` to pick the branch. See\n * {@link ForeignKeyStructuralParams.polymorphicDiscriminatorField}.\n */\nexport function getDiscriminatedPolymorphicForeignKey(\n schema: z.ZodTypeAny,\n): { discriminatorField: string; variants: PolymorphicFkVariant[] } | undefined {\n const params = getForeignKeyParams(schema);\n const discriminatorField = params?.polymorphicDiscriminatorField;\n const variants = params?.polymorphicVariants;\n if (!discriminatorField || !variants || variants.length === 0) return undefined;\n return { discriminatorField, variants };\n}\n\n/**\n * Check if a schema field is a foreign key (recursive traversal through wrappers).\n */\nexport function isForeignKeyField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_FOREIGN_KEY] !== undefined;\n}\n\n/**\n * Check if a schema field has the isSummaryField decorator.\n */\nexport function isSummaryField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_SUMMARY_FIELD] !== undefined;\n}\n\n/**\n * Get the isSummaryField decorator parameters.\n * @returns SummaryFieldParams or default empty object if decorator is used without params\n */\nexport function getSummaryFieldParams(schema: z.ZodTypeAny): SummaryFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_SUMMARY_FIELD];\n if (value === undefined) return undefined;\n if (value === true) return {}; // Default params when decorator is used without params\n return value as SummaryFieldParams;\n}\n\n/**\n * Check if a schema field has the isBackendOnly decorator.\n */\nexport function isBackendOnlyField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_BACKEND_ONLY] !== undefined;\n}\n\n/**\n * Get the isBackendOnly decorator parameters.\n */\nexport function getBackendOnlyParams(schema: z.ZodTypeAny): BackendOnlyFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_BACKEND_ONLY];\n if (value === undefined) return undefined;\n if (value === true) return {}; // Default params when decorator is used without params\n return value as BackendOnlyFieldParams;\n}\n\n/**\n * Check if a schema field has the isWriteOnlySecret decorator.\n */\nexport function isWriteOnlySecretField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_WRITE_ONLY_SECRET] !== undefined;\n}\n\n/**\n * Read a field's stored impersonalization params, declared via the fluent\n * `.impersonalizeWith(treatment, options?)` method or the equivalent\n * `addImpersonalizeWith(schema, treatment, options?)` helper.\n *\n * Reads through wrapper types (`getMetadataRecursive` walks outer → inner), so it observes the\n * declaration whether it was made before or after `.optional()` / `.nullable()` / `.nullish()` /\n * `.default()`. This matters because the retention guards `safeParse` the OUTER wrapper, and\n * treatments are commonly declared on `.nullish()` fields (`REMOVE` writes `null`).\n *\n * The decorator chokepoint normalizes both authoring forms to the params object, so the stored\n * value is always an object. The bare-string branch below is a defensive read for metadata written\n * by any path that bypassed the chokepoint — it keeps a legal treatment legible rather than\n * silently reading as UNTREATED, which is the PII-leak failure mode this decorator exists to\n * prevent.\n */\n/**\n * Read a field's declared portability provenance — where its value came from — set via the fluent\n * `.portabilityProvenance(provenance)` method or `addPortabilityProvenance(schema, provenance)`.\n *\n * Returns the raw string; the saas-models layer types it as `DataPortabilityProvenance`\n * (zod-decorators sits below saas-models and cannot import the enum).\n *\n * Reads through wrapper types (`getMetadataRecursive` walks outer → inner), so it observes the\n * declaration whether it was made before or after `.optional()` / `.nullable()` / `.nullish()` /\n * `.default()` — the same wrapper-transparency `getImpersonalizeTreatment` needs, and for the same\n * reason: personal-data fields are commonly optional.\n *\n * `undefined` means the field carries NO declaration of its own. That is not an error — the field\n * inherits its resource's `portabilityPolicy.defaultProvenance`, and only if THAT is absent too\n * does an Art. 20 export refuse. Resolving that fallback chain belongs to the resource factory,\n * which knows the resource; this reader answers only \"did the field itself say?\".\n */\nexport function getPortabilityProvenance(schema: z.ZodTypeAny): string | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.PORTABILITY_PROVENANCE];\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\n/**\n * WHICH KINDS of personal data does this field hold? Returns the declared `PersonalDataCategory`\n * values (as opaque strings — this package sits below `saas-models` and cannot import the enum),\n * or `undefined` when the field carries no declaration.\n *\n * Set via the fluent `.dataCategories(...)` method or `addDataCategories(schema, ...)`. Always an\n * ARRAY, deduped and non-empty: the decorator chokepoint normalizes a single-value authoring form\n * on the way in, so a caller never has to handle two shapes.\n *\n * Reads through wrapper types (`getMetadataRecursive` walks outer → inner), so it observes the\n * declaration whether it was written before or after `.optional()` / `.nullable()` / `.nullish()` /\n * `.default()`. An optional field is the common shape for exactly the data a notice enumerates, so\n * a reader that missed the wrapper would under-report — the silent direction.\n *\n * `undefined` is the correct and common answer: most fields hold no personal data and carry no\n * declaration. It is ABSENCE, not an empty array, that the compliance gap report reads — the\n * chokepoint refuses to store an empty declaration for that reason.\n *\n * @wildo_source:part:start zod.decorators.data-categories facet:layer:shared facet:family:decorator facet:kind:api facet:audience:app-developer\n */\nexport function getDataCategories(schema: z.ZodTypeAny): readonly string[] | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.DATA_CATEGORIES];\n return Array.isArray(value) && value.length > 0 ? (value as readonly string[]) : undefined;\n}\n/** @wildo_source:part:end zod.decorators.data-categories */\n\n/**\n * Is this field's VALUE recorded on the resource-operation audit event when an operation changes\n * it? Set via the fluent `.isAuditEvidence()` method or `addAuditEvidence(schema)`.\n *\n * Reads through wrapper types (`getMetadataRecursive` walks outer → inner), so it observes the\n * marker whether it was declared before or after `.optional()` / `.nullable()` / `.nullish()` /\n * `.default()`. That matters here in both directions: a nullable `suspendedUntil` is exactly the\n * kind of lifecycle field worth marking, and a marker the reader missed would silently drop the\n * evidence rather than fail.\n *\n * `false` is the correct and common answer — the audit event still records that the field CHANGED\n * (by name); only its before/after VALUES are withheld. Withholding is the default on purpose:\n * audit rows reach the immutable ledger, which cannot be scrubbed.\n *\n * ⚠️ This is the WRITE-side question. The READ-side one (\"was this value disclosed?\") is answered\n * only by `isBackendOnly({ isReturnedAtCreation: true })`, which fires a `FIELD_ACCESS` event when a\n * server-minted secret is first exposed. The two are independent claims; neither implies the other.\n */\nexport function isAuditEvidenceField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_AUDIT_EVIDENCE] === true;\n}\n\nfunction getImpersonalizeParams(schema: z.ZodTypeAny): ImpersonalizeFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IMPERSONALIZE_WITH];\n if (typeof value === 'string') return { treatment: value };\n if (value !== null && typeof value === 'object' && typeof (value as ImpersonalizeFieldParams).treatment === 'string') {\n return value as ImpersonalizeFieldParams;\n }\n return undefined;\n}\n\n/**\n * Get a field's impersonalization scrub treatment (a `RedactionType` value). Returns the raw\n * string; the saas-models layer types it as `RedactionType` (zod-decorators is below saas-models\n * and cannot import it). `undefined` means the field carries no treatment and is left intact.\n */\nexport function getImpersonalizeTreatment(schema: z.ZodTypeAny): string | undefined {\n return getImpersonalizeParams(schema)?.treatment;\n}\n\n/**\n * @wildo_source:part:start zod.decorators.rag-source facet:layer:shared facet:family:decorator facet:kind:api facet:audience:app-developer\n *\n * Read a field's stored RAG-source configuration, declared via the fluent `.ragSource(config?)`\n * method, the `addRagSource(schema, config?)` helper, or `z_file({ ragSource })`.\n *\n * Import from `@wildo-ai/zod-decorators`. Use it in custom implementations or checks that need to\n * ask \"is this field part of the retrieval corpus?\" — never to re-derive the corpus itself, which\n * the framework already does.\n *\n * `undefined` means the field is NOT a retrieval-corpus source — presence of the returned object is\n * the declaration itself (there is no `enabled` flag), and a bare `.ragSource()` reads back as `{}`\n * because the decorator chokepoint normalizes an omitted config to the empty object.\n *\n * Reads through wrapper types (`getMetadataRecursive` walks outer → inner), so it observes the\n * declaration whether it was made before or after `.optional()` / `.nullable()` / `.nullish()` /\n * `.default()` — corpus-source fields (descriptions, knowledge bodies) are routinely optional.\n * This is the ONE detection door: `RagSourceFieldDetection` in the backend walks resource schemas\n * with it, uniformly for plain string fields and `z_file()` fields.\n */\nexport function getRagSourceConfig(schema: z.ZodTypeAny): RagSourceConfiguration | undefined {\n const metadata = getMetadataRecursive(schema);\n // Typed as the normalized object, but read defensively as `unknown`: metadata written by any\n // path that bypassed the chokepoint's normalization (a raw `true` sentinel) must still read as\n // \"declared, default config\" rather than silently reading as NOT-a-source, which would drop the\n // field from every downstream seam (detection, chunk store, erasure).\n const value = metadata?.[ZodDecorator.RAG_SOURCE] as unknown;\n if (value === undefined || value === null || value === false) return undefined;\n return typeof value === 'object' ? (value as RagSourceConfiguration) : {};\n}\n/** @wildo_source:part:end zod.decorators.rag-source */\n\n/**\n * Get a field's `MASK` override value — the literal written in place of the field, instead of the\n * framework mask constant. `undefined` means \"use the constant\".\n *\n * Authored for CONSTRAINED string fields (`z.email()`, `z.uuid()`, `.min(n)`) that the default\n * constant cannot satisfy. See {@link ImpersonalizeFieldParams} for the contract; the saas-models\n * boot guard validates the value against the field's own schema and rejects it on a non-`MASK`\n * treatment.\n */\nexport function getImpersonalizeMaskValue(schema: z.ZodTypeAny): string | undefined {\n return getImpersonalizeParams(schema)?.maskValue;\n}\n\n/**\n * Get the isWriteOnlySecret decorator parameters.\n */\nexport function getWriteOnlySecretParams(schema: z.ZodTypeAny): WriteOnlySecretFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_WRITE_ONLY_SECRET];\n if (value === undefined) return undefined;\n if (value === true) return {}; // Default params when decorator is used without params\n return value as WriteOnlySecretFieldParams;\n}\n\n/**\n * Check if a schema field has the isDiscriminator decorator.\n */\nexport function isDiscriminatorField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_DISCRIMINATOR] !== undefined;\n}\n\n/**\n * Get the isDiscriminator decorator parameters.\n */\nexport function getDiscriminatorParams(schema: z.ZodTypeAny): DiscriminatorFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_DISCRIMINATOR];\n if (value === undefined) return undefined;\n if (value === true) return {}; // Default params when decorator is used without params\n return value as DiscriminatorFieldParams;\n}\n\n/**\n * Check if a schema field has the excludeFromCreate decorator.\n */\nexport function isExcludedFromCreate(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.EXCLUDE_FROM_CREATE] !== undefined;\n}\n\n/**\n * Check if a schema field has the excludeFromUpdate decorator.\n */\nexport function isExcludedFromUpdate(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.EXCLUDE_FROM_UPDATE] !== undefined;\n}\n\n/**\n * Check if a schema field is hidden (recursive traversal through wrappers).\n */\nexport function isHiddenField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_HIDDEN] !== undefined;\n}\n\n/**\n * Get the isHidden decorator parameters.\n * Returns default params (hidden in both display and edit) when decorator is used without params.\n */\nexport function getHiddenFieldParams(schema: z.ZodTypeAny): HiddenFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_HIDDEN];\n if (value === undefined) return undefined;\n // Default: hidden in both display and edit mode when decorator is used without params\n if (value === true) return { display: true, edit: true };\n return value as HiddenFieldParams;\n}\n\n/**\n * Check if a schema field is not editable (recursive traversal through wrappers).\n */\nexport function isNotEditableField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_NOT_EDITABLE] !== undefined;\n}\n\n/**\n * Get the isNotEditable decorator parameters.\n */\nexport function getNotEditableFieldParams(schema: z.ZodTypeAny): NotEditableFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_NOT_EDITABLE];\n if (value === undefined) return undefined;\n if (value === true) return {}; // Default params when decorator is used without params\n return value as NotEditableFieldParams;\n}\n\n/**\n * Check if a schema field has the isUnique decorator (recursive traversal through wrappers).\n */\nexport function isUniqueField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_UNIQUE] !== undefined;\n}\n\n/**\n * Get the isUnique decorator parameters (recursive traversal through wrappers).\n * Returns default params { scope: 'global', sparse: true } when decorator is used without params.\n */\nexport function getUniqueFieldParams(schema: z.ZodTypeAny): UniqueFieldParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const value = metadata?.[ZodDecorator.IS_UNIQUE];\n if (value === undefined) return undefined;\n if (value === true) return { scope: 'global', sparse: true }; // Default params from original getUniqueParams\n return value as UniqueFieldParams;\n}\n\n/**\n * Check if a schema field has the isPrimaryKey decorator (recursive traversal through wrappers).\n */\nexport function isPrimaryKeyField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_PRIMARY_KEY] === true;\n}\n\n// =============================================================================\n// BUSINESS KEY HELPERS (data-seeding subsystem)\n// =============================================================================\n\n/**\n * Check if a schema field has the `isBusinessKey` decorator (recursive\n * traversal through wrappers — `optional`, `nullable`, etc.).\n *\n * A business key is the **declaration-side identity** used by the data-seeding\n * subsystem to upsert / upgrade / sync seeded rows independently from the\n * random `_id` (`isPrimaryKey`). See `.cursor/plans/seeding-first-class.md`\n * §3.3 for the semantic contract.\n */\nexport function isBusinessKeyField(schema: z.ZodTypeAny): boolean {\n const metadata = getMetadataRecursive(schema);\n return metadata?.[ZodDecorator.IS_BUSINESS_KEY] === true;\n}\n\n/**\n * Read the composite business key declared on an object schema via\n * `businessKeySet([...])` (object-level decorator). Returns the ordered\n * list of field names, or `undefined` if no composite key is declared.\n *\n * The composite key is the schema-level analog of `isBusinessKey` — used\n * when identity is `(orgId, templateKey)` rather than a single field. See\n * `.cursor/plans/seeding-first-class.md` §3.3.\n */\nexport function getBusinessKeySet(schema: z.ZodTypeAny): string[] | undefined {\n return getBusinessKeySetParams(schema)?.fields;\n}\n\n/**\n * Read the FULL composite-business-key declaration, not just its field list.\n *\n * `getBusinessKeySet` answers \"what identifies a row\" and is all the seeding filter builder needs.\n * The storage adapter needs more: which members take a row out of the constraint when absent\n * (`skipRowsMissing`), and which error the API should raise when the resulting index is violated\n * (`conflictMessageReference`). Both are properties OF the key, so they are read from the same\n * declaration rather than re-derived — a second source would be free to disagree with the first.\n */\nexport function getBusinessKeySetParams(schema: z.ZodTypeAny): BusinessKeySetParams | undefined {\n const metadata = getMetadataRecursive(schema);\n const params = metadata?.[ZodDecorator.OBJECT_BUSINESS_KEY_SET];\n return params?.fields ? params : undefined;\n}\n\n/**\n * Convenience predicate: does the schema declare any business key\n * identity (single field-level marker OR composite object-level set)?\n */\nexport function hasBusinessKey(schema: z.ZodTypeAny): boolean {\n return isBusinessKeyField(schema) || getBusinessKeySet(schema) !== undefined;\n}\n\n/**\n * Get all metadata for a schema field (non-recursive, direct access only).\n */\nexport function getFieldMetadata(schema: z.ZodTypeAny): CustomFieldMetadata | undefined {\n return (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n}\n\n/**\n * Get all metadata for a schema field, traversing through wrapper types.\n */\nexport function getFieldMetadataRecursive(schema: z.ZodTypeAny): CustomFieldMetadata | undefined {\n return getMetadataRecursive(schema);\n}\n\n// =============================================================================\n// RANGE SCHEMA HELPERS\n// =============================================================================\n\n/**\n * Check if a schema is a range schema (created by z_range()).\n * Detects by the presence of rangeConfig in SCHEMA_METADATA.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isRangeSchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.rangeConfig?.isRange === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.rangeConfig?.isRange === true;\n }\n\n return false;\n}\n\n/**\n * Get the range metadata from a schema.\n * Returns undefined if not a range schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getRangeMetadata(schema: z.ZodTypeAny): RangeSchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.rangeConfig?.isRange) {\n return schemaMetadata.rangeConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.rangeConfig?.isRange) {\n return unwrappedMetadata.rangeConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Get the range type from a schema.\n * Returns undefined if not a range schema.\n */\nexport function getRangeType(schema: z.ZodTypeAny): RangeType | undefined {\n return getRangeMetadata(schema)?.type;\n}\n\n// =============================================================================\n// CURRENCY SCHEMA HELPERS\n// =============================================================================\n\n/**\n * Check if a schema is a money schema (created by z_money()).\n * Detects by the presence of moneyConfig in SCHEMA_METADATA.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isMoneySchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.moneyConfig?.isMoney === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.moneyConfig?.isMoney === true;\n }\n\n return false;\n}\n\n/**\n * Get the money metadata from a schema.\n * Returns undefined if not a money schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getMoneyMetadata(schema: z.ZodTypeAny): MoneySchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.moneyConfig?.isMoney) {\n return schemaMetadata.moneyConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.moneyConfig?.isMoney) {\n return unwrappedMetadata.moneyConfig;\n }\n }\n\n return undefined;\n}\n\n// =============================================================================\n// BIGDECIMAL SCHEMA HELPERS\n// =============================================================================\n\n/**\n * Check if a schema is a bigdecimal schema (created by z_bigdecimal()).\n * Detects by the presence of bigDecimalConfig in SCHEMA_METADATA.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isBigDecimalSchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.bigDecimalConfig?.isBigDecimal === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.bigDecimalConfig?.isBigDecimal === true;\n }\n\n return false;\n}\n\n/**\n * Get the bigdecimal metadata from a schema.\n * Returns undefined if not a bigdecimal schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getBigDecimalMetadata(schema: z.ZodTypeAny): BigDecimalSchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.bigDecimalConfig?.isBigDecimal) {\n return schemaMetadata.bigDecimalConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.bigDecimalConfig?.isBigDecimal) {\n return unwrappedMetadata.bigDecimalConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Get bigdecimal constraints from schema metadata.\n * Returns min, max, precision from the bigdecimal schema configuration.\n */\nexport function getBigDecimalConstraints(schema: z.ZodTypeAny): {\n min?: string;\n max?: string;\n precision?: number;\n} {\n const metadata = getBigDecimalMetadata(schema);\n if (!metadata) {\n return {};\n }\n\n return {\n min: metadata.min,\n max: metadata.max,\n precision: metadata.precision,\n };\n}\n\n// =============================================================================\n// DURATION SCHEMA HELPERS\n// =============================================================================\n\n/**\n * Check if a schema is a duration schema (created by z_duration()).\n * Detects by the presence of durationConfig in SCHEMA_METADATA.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isDurationSchema(schema: z.ZodTypeAny): boolean {\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.durationConfig?.isDuration === true) {\n return true;\n }\n\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.durationConfig?.isDuration === true;\n }\n\n return false;\n}\n\n/**\n * Get the duration metadata from a schema.\n * Returns undefined if not a duration schema.\n */\nexport function getDurationMetadata(schema: z.ZodTypeAny): DurationSchemaMetadata | undefined {\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.durationConfig?.isDuration) {\n return schemaMetadata.durationConfig;\n }\n\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.durationConfig?.isDuration) {\n return unwrappedMetadata.durationConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Get duration constraints from schema metadata.\n */\nexport function getDurationConstraints(schema: z.ZodTypeAny): {\n minValue?: number;\n maxValue?: number;\n allowedUnits?: string[];\n} {\n const metadata = getDurationMetadata(schema);\n if (!metadata) {\n return {};\n }\n\n return {\n minValue: metadata.minValue,\n maxValue: metadata.maxValue,\n allowedUnits: metadata.allowedUnits,\n };\n}\n\n/**\n * Check if a schema is a phone schema (created by z_phone()).\n * Detects by the presence of phoneConfig in SCHEMA_METADATA.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isPhoneSchema(schema: z.ZodTypeAny): boolean {\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.phoneConfig?.isPhone === true) {\n return true;\n }\n\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.phoneConfig?.isPhone === true;\n }\n\n return false;\n}\n\n/**\n * Get the phone metadata from a schema.\n * Returns undefined if not a phone schema.\n */\nexport function getPhoneMetadata(schema: z.ZodTypeAny): PhoneSchemaMetadata | undefined {\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.phoneConfig?.isPhone) {\n return schemaMetadata.phoneConfig;\n }\n\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.phoneConfig?.isPhone) {\n return unwrappedMetadata.phoneConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Check if a schema is a code schema created by z_code().\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isCodeSchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.codeConfig?.isCode === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.codeConfig?.isCode === true;\n }\n\n return false;\n}\n\n/**\n * Get code schema metadata if this is a code schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getCodeMetadata(schema: z.ZodTypeAny): CodeSchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.codeConfig?.isCode) {\n return schemaMetadata.codeConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.codeConfig?.isCode) {\n return unwrappedMetadata.codeConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Check if a schema is a file schema created by z_file().\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isFileSchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.fileConfig?.isFile === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.fileConfig?.isFile === true;\n }\n\n return false;\n}\n\n/**\n * Check if a file schema is generated from a backend-bound PDF template.\n *\n * This helper intentionally keys off frontend-safe metadata only. Runtime\n * template objects are bound later by backend resource configuration and must\n * not leak into shared schema metadata.\n */\nexport function isTemplatableFileField(schema: z.ZodTypeAny): boolean {\n const fileMetadata = getFileMetadata(schema);\n return fileMetadata?.generation?.source === FileGenerationSource.PDF_TEMPLATE;\n}\n\n/**\n * Get file schema metadata if this is a file schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getFileMetadata(schema: z.ZodTypeAny): FileSchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.fileConfig?.isFile) {\n return schemaMetadata.fileConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.fileConfig?.isFile) {\n return unwrappedMetadata.fileConfig;\n }\n }\n\n return undefined;\n}\n\n// -----------------------------------------------------------------------------\n// VERSIONED SCHEMA HELPERS\n// -----------------------------------------------------------------------------\n\n/**\n * Check if a schema is a versioned foreign key schema created by z_foreignKeyVersioned().\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isVersionedForeignKeySchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.versionedForeignKeyConfig?.isVersionedForeignKey === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.versionedForeignKeyConfig?.isVersionedForeignKey === true;\n }\n\n return false;\n}\n\n/**\n * Get versioned foreign key schema metadata if this is a versioned foreign key schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getVersionedForeignKeyMetadata(schema: z.ZodTypeAny): VersionedForeignKeySchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.versionedForeignKeyConfig?.isVersionedForeignKey) {\n return schemaMetadata.versionedForeignKeyConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.versionedForeignKeyConfig?.isVersionedForeignKey) {\n return unwrappedMetadata.versionedForeignKeyConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Check if a schema is a versioned object schema created by versioned().\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function isVersionedObjectSchema(schema: z.ZodTypeAny): boolean {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.versionedConfig?.isVersioned === true) {\n return true;\n }\n\n // Also check the unwrapped schema (metadata might be on inner schema)\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n return unwrappedMetadata?.versionedConfig?.isVersioned === true;\n }\n\n return false;\n}\n\n/**\n * Get versioned schema metadata if this is a versioned object schema.\n * Checks both the schema directly and the unwrapped inner schema.\n */\nexport function getVersionedObjectMetadata(schema: z.ZodTypeAny): VersionedSchemaMetadata | undefined {\n // Check the schema directly first\n const schemaMetadata = (schema as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (schemaMetadata?.versionedConfig?.isVersioned) {\n return schemaMetadata.versionedConfig;\n }\n\n // Also check the unwrapped schema\n const unwrapped = unwrapSchema(schema);\n if (unwrapped !== schema) {\n const unwrappedMetadata = (unwrapped as any)[SCHEMA_METADATA] as CustomFieldMetadata | undefined;\n if (unwrappedMetadata?.versionedConfig?.isVersioned) {\n return unwrappedMetadata.versionedConfig;\n }\n }\n\n return undefined;\n}\n\n/**\n * Check if the 'from' field is optional in a range schema.\n */\nexport function isRangeFromOptional(schema: z.ZodTypeAny): boolean | undefined {\n return getRangeMetadata(schema)?.fromOptional;\n}\n\n/**\n * Check if the 'to' field is optional in a range schema.\n */\nexport function isRangeToOptional(schema: z.ZodTypeAny): boolean | undefined {\n return getRangeMetadata(schema)?.toOptional;\n}\n\n/**\n * Get the min constraint from a range schema.\n */\nexport function getRangeMin(schema: z.ZodTypeAny): RangeConstraintValue | undefined {\n return getRangeMetadata(schema)?.min;\n}\n\n/**\n * Get the max constraint from a range schema.\n */\nexport function getRangeMax(schema: z.ZodTypeAny): RangeConstraintValue | undefined {\n return getRangeMetadata(schema)?.max;\n}\n\n\n// =============================================================================\n// FORM FIELD DECORATOR UTILITIES\n// =============================================================================\n\n/**\n * Get the form component from `{primitive}UI.edit.component`.\n * Returns undefined if no form component is specified.\n */\nexport function getFormFieldComponent(schema: z.ZodTypeAny): FormFieldComponent | undefined {\n return getFieldUIEditConfig(schema)?.component;\n}\n\n/**\n * Check if a field should be hidden based on the current context.\n * @param schema - The Zod schema to check\n * @param context - Optional context with mode ('display' | 'edit') and operation name\n */\nexport function shouldHideField(\n schema: z.ZodTypeAny,\n context?: { mode?: 'display' | 'edit'; operation?: string }\n): boolean {\n if (!hasHiddenDecorator(schema)) {\n return false;\n }\n\n const hidden = getHiddenFieldMetadata(schema);\n\n // If hidden is true, always hide\n if (hidden === true) {\n return true;\n }\n\n // Check mode-specific hiding\n if (context?.mode === 'display' && hidden?.display) {\n return true;\n }\n if (context?.mode === 'edit' && hidden?.edit) {\n return true;\n }\n\n // Check operation-specific hiding\n if (context?.operation && hidden?.operations?.includes(context.operation)) {\n return true;\n }\n\n return false;\n}\n\n\n\n// -----------------------------------------------------------------------------\n// Form Component Check Functions (isFormXX)\n// -----------------------------------------------------------------------------\n\nexport function isFormInput(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.INPUT;\n}\n\n/**\n * Does the author declare TEXTAREA on the CROSS-CUTTING `edit.component` axis?\n *\n * This is a question about the DECLARATION, not about what the field renders\n * as, and the distinction is load-bearing: a field declaring the per-type\n * `edit.editMode: TEXTAREA` edits as a textarea and this predicate answers\n * `false` for it. Asking this when you meant the rendering question is exactly\n * how the inline editor came to bind Enter as \"save\" inside a textarea.\n *\n * For \"does this field edit into a multi-line control\", ask\n * `isMultilineEditField`, which resolves both axes.\n */\nexport function isFormTextarea(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.TEXTAREA;\n}\n\nexport function isFormSelect(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.SELECT;\n}\n\nexport function isFormRadioGroup(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.RADIO_GROUP;\n}\n\nexport function isFormCheckbox(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.CHECKBOX;\n}\n\nexport function isFormCheckboxGroup(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.CHECKBOX_GROUP;\n}\n\nexport function isFormSwitch(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.SWITCH;\n}\n\nexport function isFormSlider(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.SLIDER;\n}\n\nexport function isFormDate(schema: z.ZodTypeAny): boolean {\n return getFormFieldComponent(schema) === FormFieldComponent.DATE;\n}\n\n\n// -----------------------------------------------------------------------------\n// EDIT-MODE RESOLUTION — the ONE reconciliation of the two edit axes\n// -----------------------------------------------------------------------------\n//\n// A field's editing shape is declared on TWO axes and they overlap:\n//\n// `{primitive}UI.edit.editMode` — per-type, closed per type (`StringEditMode`\n// cannot name a slider), read by every\n// `FormField{Type}` component;\n// `{primitive}UI.edit.component` — cross-cutting `FormFieldComponent`, one\n// vocabulary spanning every type.\n//\n// Neither half of the system used to read both, so whichever axis an author\n// picked, something was wrong: the RENDER path (`FormFieldString` and its\n// siblings) read only `editMode`, so an authored `component: TEXTAREA` rendered\n// a single-line input — live on six declarations, including the engine's own\n// billing presets. The INLINE-EDIT keyboard path (`DisplayFieldEditable`) read\n// only `component` through `isFormTextarea`, so a field that correctly declares\n// `editMode: TEXTAREA` was treated as single-line and Enter saved instead of\n// inserting a newline.\n//\n// These resolvers are that one source. Precedence is the contract already\n// written on `PrimitiveUIBaseEditParams.component` — \"Type-specific `editMode`\n// takes precedence\" — so the per-type axis wins and the cross-cutting one is\n// the fallback rather than a competitor.\n//\n// Only members that name the SAME control on both sides are mapped. A\n// `FormFieldComponent` member with no counterpart (`TOGGLE`-less booleans,\n// `COLOR`/`PASSWORD`/`OTP`/`MARKDOWN` strings) simply has no mapping, and\n// `CHECKBOX_GROUP` is deliberately absent: it is an ARRAY-of-enum control\n// reached through `AutomatedArrayField`, never through `FormFieldEnum`, so\n// mapping it to an enum edit mode would claim a route that does not exist.\n\nconst STRING_EDIT_MODE_BY_FORM_COMPONENT: Partial<Record<FormFieldComponent, StringEditMode>> = {\n [FormFieldComponent.INPUT]: StringEditMode.INPUT,\n [FormFieldComponent.TEXTAREA]: StringEditMode.TEXTAREA,\n};\n\nconst BOOLEAN_EDIT_MODE_BY_FORM_COMPONENT: Partial<Record<FormFieldComponent, BooleanEditMode>> = {\n [FormFieldComponent.CHECKBOX]: BooleanEditMode.CHECKBOX,\n [FormFieldComponent.SWITCH]: BooleanEditMode.SWITCH,\n [FormFieldComponent.RADIO_GROUP]: BooleanEditMode.RADIO,\n};\n\nconst ENUM_EDIT_MODE_BY_FORM_COMPONENT: Partial<Record<FormFieldComponent, EnumEditMode>> = {\n [FormFieldComponent.SELECT]: EnumEditMode.SELECT,\n [FormFieldComponent.RADIO_GROUP]: EnumEditMode.RADIO,\n};\n\nconst NUMBER_EDIT_MODE_BY_FORM_COMPONENT: Partial<Record<FormFieldComponent, NumberEditMode>> = {\n [FormFieldComponent.INPUT]: NumberEditMode.INPUT,\n [FormFieldComponent.SLIDER]: NumberEditMode.SLIDER,\n};\n\n/** Resolve the shape a string field edits as, honoring both edit axes. */\nexport function resolveStringEditMode(schema: z.ZodTypeAny): StringEditMode {\n const declared = getStringUI(schema)?.edit?.editMode;\n if (declared !== undefined) return declared;\n const component = getFormFieldComponent(schema);\n return (component !== undefined ? STRING_EDIT_MODE_BY_FORM_COMPONENT[component] : undefined) ?? StringEditMode.INPUT;\n}\n\n/** Resolve the shape a boolean field edits as, honoring both edit axes. */\nexport function resolveBooleanEditMode(schema: z.ZodTypeAny): BooleanEditMode {\n const declared = getBooleanUI(schema)?.edit?.editMode;\n if (declared !== undefined) return declared;\n const component = getFormFieldComponent(schema);\n return (component !== undefined ? BOOLEAN_EDIT_MODE_BY_FORM_COMPONENT[component] : undefined) ?? BooleanEditMode.SWITCH;\n}\n\n/** Resolve the shape an enum field edits as, honoring both edit axes. */\nexport function resolveEnumEditMode(schema: z.ZodTypeAny): EnumEditMode {\n const declared = getEnumUI(schema)?.edit?.editMode;\n if (declared !== undefined) return declared;\n const component = getFormFieldComponent(schema);\n return (component !== undefined ? ENUM_EDIT_MODE_BY_FORM_COMPONENT[component] : undefined) ?? EnumEditMode.SELECT;\n}\n\n/** Resolve the shape a number field edits as, honoring both edit axes. */\nexport function resolveNumberEditMode(schema: z.ZodTypeAny): NumberEditMode {\n const declared = getNumberUI(schema)?.edit?.editMode;\n if (declared !== undefined) return declared;\n const component = getFormFieldComponent(schema);\n return (component !== undefined ? NUMBER_EDIT_MODE_BY_FORM_COMPONENT[component] : undefined) ?? NumberEditMode.INPUT;\n}\n\n/**\n * Does this field edit into a control where Enter inserts a newline rather than\n * submitting? Asked by the inline editor to decide its Enter binding, and the\n * reason it must go through the resolver: the answer is true whether the author\n * declared `editMode: TEXTAREA` or `component: TEXTAREA`, and `isFormTextarea`\n * only ever saw the second.\n */\nexport function isMultilineEditField(schema: z.ZodTypeAny): boolean {\n return resolveStringEditMode(schema) === StringEditMode.TEXTAREA;\n}\n\n\n// =============================================================================\n// HIDDEN FIELD DECORATOR UTILITIES\n// =============================================================================\n\n/**\n * Get the hidden field metadata from schema decorator.\n * Returns undefined if no hidden decorator is set.\n * Returns true if field is hidden in all cases.\n * Returns HiddenFieldParams if conditional hiding is configured.\n * Note: getCustomFieldMetadata already handles recursive unwrapping for all wrapper types\n * including pipe (from refine/superRefine), optional, nullable, default, etc.\n */\nexport function getHiddenFieldMetadata(schema: z.ZodTypeAny): HiddenFieldParams | true | undefined {\n const metadata = getCustomFieldMetadata(schema);\n return metadata[ZodDecorator.IS_HIDDEN];\n}\n\n/**\n * Check if a schema has a hidden decorator.\n */\nexport function hasHiddenDecorator(schema: z.ZodTypeAny): boolean {\n return getHiddenFieldMetadata(schema) !== undefined;\n}\n\n/**\n * Check if a field should be hidden for display mode.\n * @param schema - The Zod schema to check\n * @returns true if the field should be hidden in display mode\n */\nexport function isHiddenForDisplay(schema: z.ZodTypeAny): boolean {\n const hidden = getHiddenFieldMetadata(schema);\n if (hidden === undefined) return false;\n if (hidden === true) return true;\n return hidden.display === true;\n}\n\n/**\n * Check if a field should be hidden for edit mode.\n * @param schema - The Zod schema to check\n * @returns true if the field should be hidden in edit mode\n */\nexport function isHiddenForEdit(schema: z.ZodTypeAny): boolean {\n const hidden = getHiddenFieldMetadata(schema);\n if (hidden === undefined) return false;\n if (hidden === true) return true;\n return hidden.edit === true;\n}\n\n/**\n * Check if a field should be hidden for a specific operation.\n * @param schema - The Zod schema to check\n * @param operation - The operation identifier (e.g., 'create', 'update')\n * @returns true if the field should be hidden for the given operation\n */\nexport function isHiddenForOperation(schema: z.ZodTypeAny, operation: string): boolean {\n const hidden = getHiddenFieldMetadata(schema);\n if (hidden === undefined) return false;\n if (hidden === true) return true;\n return hidden.operations?.includes(operation) ?? false;\n}\n\n// =============================================================================\n// NOT EDITABLE FIELD DECORATOR UTILITIES\n// =============================================================================\n\n/**\n * Get the not editable field metadata from schema decorator.\n * Returns undefined if no isNotEditable decorator is set.\n * Returns true if field is not editable for all operations.\n * Returns NotEditableFieldParams if operation-specific.\n * Note: getCustomFieldMetadata already handles recursive unwrapping for all wrapper types\n * including pipe (from refine/superRefine), optional, nullable, default, etc.\n */\nexport function getNotEditableFieldMetadata(schema: z.ZodTypeAny): NotEditableFieldParams | true | undefined {\n const metadata = getCustomFieldMetadata(schema);\n return metadata[ZodDecorator.IS_NOT_EDITABLE];\n}\n\n/**\n * Check if a schema has a isNotEditable decorator.\n */\nexport function hasNotEditableDecorator(schema: z.ZodTypeAny): boolean {\n return getNotEditableFieldMetadata(schema) !== undefined;\n}\n\n/**\n * Check if a field is not editable for a specific operation (or all operations).\n * @param schema - The Zod schema to check\n * @param operation - Optional operation identifier. If not provided, checks if not editable for all operations.\n * @returns true if the field is not editable\n */\nexport function isNotEditableForOperation(schema: z.ZodTypeAny, operation?: string): boolean {\n const notEditable = getNotEditableFieldMetadata(schema);\n if (notEditable === undefined) return false;\n\n // If true, not editable for all operations\n if (notEditable === true) return true;\n\n // If no operations specified in params, not editable for all operations\n if (!notEditable.operations || notEditable.operations.length === 0) return true;\n\n // If operation is provided, check if it matches\n if (operation) {\n return notEditable.operations.includes(operation);\n }\n\n // Operation not provided but params have specific operations - not editable only for those\n return false;\n}\n\n\n\n// ============================================================================\n// SORTABLE FIELD HELPERS (now absorbed into ARRAY_UI)\n// ============================================================================\n// Sortable configuration is now managed via arrayUI({ edit: { isSortable, dnd, upDownIcons } }).\n// The .isSortable() convenience composite sets ARRAY_UI metadata directly.\n\n\n// ============================================================================\n// INLINE EDITABLE FIELD HELPERS\n// ============================================================================\n\n/**\n * Resolved inline editable params with all defaults applied.\n */\nexport interface ResolvedInlineEditableParams {\n mode: 'direct' | 'button';\n saveOn: 'blur' | 'explicit';\n showSaveButton: boolean;\n showCancelButton: boolean;\n}\n\n/**\n * Check if a schema has inline editable configuration.\n * Reads from `{primitive}UI.display.inlineEditable`.\n */\nexport function hasInlineEditableDecorator(schema: z.ZodTypeAny): boolean {\n return getFieldUIDisplayConfig(schema)?.inlineEditable != null;\n}\n\n/**\n * Get the resolved inline editable params from `{primitive}UI.display.inlineEditable`.\n * Handles both `true` shorthand and full object config.\n */\nexport function getInlineEditableParams(schema: z.ZodTypeAny): ResolvedInlineEditableParams | undefined {\n const config = getFieldUIDisplayConfig(schema)?.inlineEditable;\n if (config == null) return undefined;\n\n if (config === true) {\n return { mode: 'direct', saveOn: 'blur', showSaveButton: false, showCancelButton: true };\n }\n if (config === false) return undefined;\n\n const saveOn = config.saveOn ?? 'blur';\n const showSaveButton = config.showSaveButton ?? (saveOn === 'explicit');\n return {\n mode: config.mode ?? 'direct',\n saveOn,\n showSaveButton,\n showCancelButton: config.showCancelButton ?? true,\n };\n}\n\n\n// ============================================================================\n// ZOD .describe() UTILITY (NOT for UI descriptions — developer/AI/API docs only)\n// ============================================================================\n\n/**\n * Extract the `.describe()` text from a Zod schema, unwrapping optional/nullable/default wrappers.\n * Returns undefined if no `.describe(\"...\")` is set.\n *\n * **IMPORTANT**: Zod `.describe(\"...\")` is for developer documentation, AI prompting systems,\n * and API documentation generation. It is NOT used for UI field descriptions — those are\n * managed through `{primitive}UI.display.showDescription` + i18n system.\n *\n * In Zod 4, `.describe(\"...\")` sets the `.description` property on the schema.\n * When `.optional()`, `.nullable()`, or `.default()` wrap the schema, the description\n * may live on the inner schema. We check both levels.\n */\nexport function getZodDescription(schema: z.ZodTypeAny): string | undefined {\n // Check outer schema first\n if (schema.description) return schema.description;\n\n // Unwrap optional/nullable/default to check inner schema\n const inner = (schema as any)._zod?.innerType ?? (schema as any).unwrap?.();\n if (inner?.description) return inner.description;\n\n return undefined;\n}\n\n// ============================================================================\n// FIELD DESCRIPTION HELPERS (opt-in i18n key generation, mirrors tooltip pattern)\n// ============================================================================\n\n/**\n * Check if a field should have a description i18n key generated for **display** mode.\n *\n * Reads from `{primitive}UI.display.showDescription` (boolean flag).\n * This follows the same opt-in pattern as tooltips: only generate i18n keys for\n * fields that explicitly declare intent via a decorator.\n *\n * **NOTE**: Zod `.describe(\"...\")` is NOT an opt-in signal for UI descriptions.\n * `.describe()` serves a different purpose (developer docs, AI prompting, API docs).\n * UI field descriptions are purely decorator-driven + i18n-resolved.\n *\n * @param schema - The Zod schema to check\n * @returns true if a description i18n key should be generated for display mode\n */\nexport function hasDescriptionForDisplay(schema: z.ZodTypeAny): boolean {\n return getFieldUIDisplayConfig(schema)?.showDescription === true;\n}\n\n/**\n * Check if a field should have a description i18n key generated for **edit** mode.\n *\n * Reads from `{primitive}UI.edit.showDescription` (boolean flag).\n * If a field declares it wants a description, both display AND edit i18n keys are generated\n * so translators can provide mode-appropriate text.\n *\n * @param schema - The Zod schema to check\n * @returns true if a description i18n key should be generated for edit mode\n */\nexport function hasDescriptionForEdit(schema: z.ZodTypeAny): boolean {\n return getFieldUIEditConfig(schema)?.showDescription === true;\n}\n\n// ============================================================================\n// BOOLEAN DISPLAY POLICY HELPERS\n// ============================================================================\n\n/**\n * Check if a string schema should render as a password input.\n * Checks IS_PASSWORD structural marker first, then STRING_UI editMode fallback.\n */\nexport function isPasswordField(schema: z.ZodTypeAny): boolean {\n const metadata = getCustomFieldMetadata(schema);\n if (metadata?.[ZodDecorator.IS_PASSWORD]) {\n return true;\n }\n const stringUI = getStringUI(schema);\n return stringUI?.edit?.editMode === 'password';\n}\n\n/**\n * Check if a string schema should render as an OTP input.\n * Checks IS_OTP structural marker first, then STRING_UI editMode fallback.\n */\nexport function isOtpField(schema: z.ZodTypeAny): boolean {\n const metadata = getCustomFieldMetadata(schema);\n if (metadata?.[ZodDecorator.IS_OTP]) {\n return true;\n }\n const stringUI = getStringUI(schema);\n return stringUI?.edit?.editMode === 'otp';\n}\n\n/**\n * Check if a string schema should render as a color input.\n * Checks IS_COLOR structural marker first, then STRING_UI editMode fallback.\n */\nexport function isColorField(schema: z.ZodTypeAny): boolean {\n const metadata = getCustomFieldMetadata(schema);\n if (metadata?.[ZodDecorator.IS_COLOR]) {\n return true;\n }\n const stringUI = getStringUI(schema);\n return stringUI?.edit?.editMode === 'color';\n}\n\n/**\n * Get OTP field params from a schema.\n * Returns the OTP params with defaults merged in if the decorator is present.\n * Defaults: maxLength=6\n */\nexport function getOtpFieldParams(schema: z.ZodTypeAny): OtpFieldParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n const otpParams = metadata?.[ZodDecorator.IS_OTP];\n\n if (!otpParams) {\n return undefined;\n }\n\n // If params is true (enabled without params), return defaults\n if (otpParams === true) {\n return { maxLength: 6 };\n }\n\n // Merge with defaults\n return {\n maxLength: 6,\n ...otpParams,\n };\n}\n\n/**\n * Get the system enum name from a schema's metadata.\n * Returns the name string (e.g. 'AvailableCurrency') if the .systemEnum() decorator is set,\n * or undefined if the field is not a system enum.\n */\nexport function getSystemEnumName(schema: z.ZodTypeAny): string | undefined {\n const metadata = getCustomFieldMetadata(schema);\n return metadata[ZodDecorator.SYSTEM_ENUM];\n}\n\n\n//===============================================\n// SERIALIZATION (Zod 4)\n//===============================================\n\n/**\n * Serialize a Zod schema to a JSON-serializable format.\n * Uses Zod 4 internal structure (_zod.def.type).\n */\nexport function serializeZodSchema(schema: z.ZodTypeAny | undefined, seen: Set<z.ZodTypeAny> = new Set()): SerializableZodSchema | null {\n if (!schema) return null;\n\n // Avoid circular refs\n if (seen.has(schema)) {\n return { type: 'lazy' };\n }\n seen.add(schema);\n\n // Helper to add optional/nullable flags\n function withOptionals(base: SerializableZodSchema, optional?: boolean, nullable?: boolean): SerializableZodSchema {\n return {\n ...base,\n ...(optional ? { optional: true } : {}),\n ...(nullable ? { nullable: true } : {})\n };\n }\n\n // Unwrap wrappers and track optional/nullable state (Zod 4 structure)\n const unwrapWithFlags = (s: z.ZodTypeAny): { inner: z.ZodTypeAny; optional: boolean; nullable: boolean } => {\n let cur = s;\n let optional = false;\n let nullable = false;\n\n let type = getZodType(cur);\n\n // Iteratively unwrap wrappers\n while (type) {\n switch (type) {\n case 'optional':\n optional = true;\n cur = getZodDefSchemaProperty(cur, 'innerType') ?? cur;\n break;\n case 'nullable':\n nullable = true;\n cur = getZodDefSchemaProperty(cur, 'innerType') ?? cur;\n break;\n case 'default':\n cur = getZodDefSchemaProperty(cur, 'innerType') ?? cur;\n break;\n case 'pipe':\n // For pipe/effects, prefer the output schema for serialization\n cur = getZodDefSchemaProperty(cur, 'out') ?? getZodDefSchemaProperty(cur, 'in') ?? cur;\n break;\n case 'readonly':\n cur = getZodDefSchemaProperty(cur, 'innerType') ?? cur;\n break;\n case 'catch':\n cur = getZodDefSchemaProperty(cur, 'innerType') ?? cur;\n break;\n default:\n // Not a wrapper type, stop unwrapping\n return { inner: cur, optional, nullable };\n }\n type = getZodType(cur);\n }\n\n return { inner: cur, optional, nullable };\n };\n\n const { inner, optional, nullable } = unwrapWithFlags(schema);\n\n // Get custom field metadata from the ORIGINAL schema (not inner)\n // This ensures we find decorators at any wrapper level\n const metadata = getCustomFieldMetadata(schema);\n\n // Also check for range metadata (stored in SCHEMA_METADATA.rangeConfig)\n const rangeMetadata = getRangeMetadata(schema) ?? getRangeMetadata(inner);\n\n const withMeta = (o: SerializableZodSchema): SerializableZodSchema => {\n const hasMeta = metadata && Object.keys(metadata).length > 0;\n const hasRangeMeta = rangeMetadata !== undefined;\n\n if (!hasMeta && !hasRangeMeta) return o;\n\n // Merge custom field metadata with range metadata if present\n const fullMetadata: CustomFieldMetadata = {\n ...metadata,\n ...(hasRangeMeta ? { rangeType: rangeMetadata.type, rangeConfig: rangeMetadata } : {}),\n };\n\n return { ...o, metadata: fullMetadata };\n };\n\n // Get type from Zod 4 structure (_zod.def.type)\n const type = getZodType(inner);\n\n switch (type) {\n case 'string': {\n const description = (inner as z.ZodString).description;\n return withOptionals(withMeta({ type: 'string', ...(description ? { description } : {}) }), optional, nullable);\n }\n case 'number':\n case 'int':\n return withOptionals(withMeta({ type: 'number' }), optional, nullable);\n case 'bigint':\n return withOptionals(withMeta({ type: 'bigint' }), optional, nullable);\n case 'boolean':\n return withOptionals(withMeta({ type: 'boolean' }), optional, nullable);\n case 'date':\n return withOptionals(withMeta({ type: 'date' }), optional, nullable);\n case 'any':\n return withOptionals(withMeta({ type: 'any' }), optional, nullable);\n case 'unknown':\n return withOptionals(withMeta({ type: 'unknown' }), optional, nullable);\n case 'literal': {\n // In Zod 4 a literal's value lives in def.values (an ARRAY — z.literal(['a','b'])\n // is legal in v4); the legacy Zod-3 def.value is always undefined in v4. Reading\n // def.value alone emitted { type: 'literal', value: undefined } for EVERY literal,\n // which then round-tripped through deserializeZodSchema as z.literal(undefined).\n // Read def.values first, fall back to def.value, and take the first non-nullish\n // entry — preserving string/number/boolean literals. (A bare z.literal(null) has no\n // non-nullish entry and legitimately serializes as value: undefined.) Mirrors the\n // Zod-4 literal read in zod-to-mongoose-schema-convertor.backend.service.ts.\n const literalValues = (getZodDefArrayProperty(inner, 'values') ?? [getZodDefProperty(inner, 'value')])\n .filter((entry) => entry !== undefined && entry !== null);\n const value = literalValues[0];\n return withOptionals(withMeta({ type: 'literal', value }), optional, nullable);\n }\n case 'enum': {\n // In Zod 4, both z.enum() and z.enum() use type 'enum'\n // Use the existing getEnumValues helper which handles both cases\n const values = getEnumValues(inner);\n return withOptionals(withMeta({ type: 'enum', values }), optional, nullable);\n }\n case 'array': {\n const element = getZodDefSchemaProperty(inner, 'element');\n return withOptionals(withMeta({\n type: 'array',\n element: serializeZodSchema(element, new Set(seen))!\n }), optional, nullable);\n }\n case 'set': {\n const element = getZodDefSchemaProperty(inner, 'valueType');\n return withOptionals(withMeta({\n type: 'set',\n element: serializeZodSchema(element, new Set(seen))!\n }), optional, nullable);\n }\n case 'tuple': {\n const items = getZodDefArrayProperty(inner, 'items') ?? [];\n return withOptionals(withMeta({\n type: 'tuple',\n items: items\n .filter((o): o is z.ZodTypeAny => isZodTypeAny(o))\n .map(o => serializeZodSchema(o, new Set(seen))!)\n }), optional, nullable);\n }\n case 'record': {\n const keySchema = getZodDefSchemaProperty(inner, 'keyType');\n const valueSchema = getZodDefSchemaProperty(inner, 'valueType');\n return withOptionals(withMeta({\n type: 'record',\n key: serializeZodSchema(keySchema, new Set(seen))!,\n value: serializeZodSchema(valueSchema, new Set(seen))!\n }), optional, nullable);\n }\n case 'union': {\n const options = getZodDefArrayProperty(inner, 'options') ?? [];\n return withOptionals(withMeta({\n type: 'union',\n options: options\n .filter((o): o is z.ZodTypeAny => isZodTypeAny(o))\n .map(o => serializeZodSchema(o, new Set(seen))!)\n }), optional, nullable);\n }\n case 'object': {\n // Use the existing getZodObjectShape helper (Zod 4 uses .shape property)\n const shape = getZodObjectShape(inner);\n const props: Record<string, SerializableZodSchema> = {};\n for (const [k, v] of Object.entries(shape)) {\n props[k] = serializeZodSchema(v, new Set(seen)) || { type: 'unknown' };\n }\n return withOptionals(withMeta({ type: 'object', properties: props }), optional, nullable);\n }\n case 'lazy':\n return withOptionals(withMeta({ type: 'lazy' }), optional, nullable);\n default:\n return withOptionals(withMeta({ type: 'unknown' }), optional, nullable);\n }\n}\n\n\n\n/**\n * Deserialize a SerializableZodSchema back into a Zod schema.\n * - Reconstructs approximate Zod types from the descriptor\n * - Re-applies optional/nullable wrappers\n * - Re-applies SCHEMA_METADATA as decorators when possible\n */\nexport function deserializeZodSchema(desc: SerializableZodSchema | null | undefined): any {\n if (!desc) return undefined;\n\n const applyOptionalNullable = (schema: z.ZodTypeAny, d: SerializableZodSchema): z.ZodTypeAny => {\n let s: z.ZodTypeAny = schema;\n if ((d as any).optional) s = s.optional();\n if ((d as any).nullable) s = s.nullable();\n return s;\n };\n\n const applyMetadata = <T extends z.ZodTypeAny>(schema: T, metadata?: CustomFieldMetadata): T => {\n if (!metadata || Object.keys(metadata).length === 0) return schema;\n const decorators: DecoratorInput[] = [];\n\n // Boolean decorators (no params)\n if (metadata[ZodDecorator.IS_DB_INDEXED]) {\n decorators.push(ZodDecorator.IS_DB_INDEXED);\n }\n if (metadata[ZodDecorator.IS_FOREIGN_KEY]) {\n decorators.push(ZodDecorator.IS_FOREIGN_KEY);\n }\n\n // Hidden decorator (HiddenFieldParams | true)\n const hidden = metadata[ZodDecorator.IS_HIDDEN];\n if (hidden !== undefined) {\n decorators.push({\n ref: ZodDecorator.IS_HIDDEN,\n params: hidden === true ? undefined : hidden\n });\n }\n\n // Not editable decorator (NotEditableFieldParams | true)\n const notEditable = metadata[ZodDecorator.IS_NOT_EDITABLE];\n if (notEditable !== undefined) {\n decorators.push({\n ref: ZodDecorator.IS_NOT_EDITABLE,\n params: notEditable === true ? undefined : notEditable\n });\n }\n\n // Array UI decorator (ArrayUIParams) — also carries absorbed isSortable config\n const arrayUI = metadata[ZodDecorator.ARRAY_UI];\n if (arrayUI !== undefined) {\n decorators.push({\n ref: ZodDecorator.ARRAY_UI,\n params: arrayUI\n });\n }\n\n // Object UI decorator (ObjectUIParams)\n const objectUI = metadata[ZodDecorator.OBJECT_UI];\n if (objectUI !== undefined) {\n decorators.push({\n ref: ZodDecorator.OBJECT_UI,\n params: objectUI\n });\n }\n\n return (decorators.length > 0 ? addDecorators(schema, decorators) : schema) as T;\n };\n\n const build = (d: SerializableZodSchema): z.ZodTypeAny => {\n switch (d.type) {\n case 'string': {\n let s = z.string();\n // Note: description is used for API docs; set if present\n if ((d as any).description) s = s.describe((d as any).description);\n s = applyMetadata(s, (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'number': {\n const s = applyMetadata(z.number(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'bigint': {\n const s = applyMetadata(z.bigint(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'boolean': {\n const s = applyMetadata(z.boolean(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'date': {\n const s = applyMetadata(z.date(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'any': {\n const s = applyMetadata(z.any(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'unknown': {\n const s = applyMetadata(z.unknown(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'literal': {\n const s = applyMetadata(z.literal((d as any).value), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'enum': {\n const values = (d as any).values as string[];\n // If values are missing/empty, fall back to string (cannot build z.enum([]))\n const base = values && values.length > 0\n ? z.enum(values as [string, ...string[]])\n : z.string();\n const s = applyMetadata(base, (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'array': {\n const el = build((d as any).element);\n const s = applyMetadata(z.array(el), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'set': {\n const el = build((d as any).element);\n const s = applyMetadata(z.set(el), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'tuple': {\n const items = ((d as any).items as SerializableZodSchema[]).map(build);\n const s = applyMetadata(\n items.length >= 1\n ? z.tuple(items as [z.ZodTypeAny, ...z.ZodTypeAny[]])\n : z.tuple([z.any()]),\n (d as any).metadata\n );\n return applyOptionalNullable(s as any, d);\n }\n case 'record': {\n const val = build((d as any).value);\n // Zod records only support string keys; fall back to string keys for non-string keys\n const keyDesc = (d as any).key as SerializableZodSchema | undefined;\n const keySchema = keyDesc && keyDesc.type === 'string' ? z.string() : z.string();\n const s = applyMetadata(z.record(keySchema, val), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n case 'union': {\n const options = ((d as any).options as SerializableZodSchema[]).map(build);\n const s = applyMetadata(options.length >= 2 ? z.union(options as [z.ZodTypeAny, z.ZodTypeAny, ...z.ZodTypeAny[]]) : (options[0] || z.any()), (d as any).metadata);\n return applyOptionalNullable(s as any, d);\n }\n case 'object': {\n const metadata = (d as any).metadata as CustomFieldMetadata | undefined;\n const rangeConfig = metadata?.rangeConfig;\n\n // Check if this is a range schema (has rangeConfig metadata)\n if (rangeConfig && rangeConfig.type) {\n const rangeSchema = z_range(rangeConfig.type, {\n fromOptional: rangeConfig.fromOptional,\n toOptional: rangeConfig.toOptional,\n min: rangeConfig.min,\n max: rangeConfig.max,\n });\n // Apply other decorators (excluding range-specific ones that are already applied)\n const metadataWithoutRange = { ...metadata };\n delete metadataWithoutRange.rangeType;\n delete metadataWithoutRange.rangeConfig;\n const s = applyMetadata(rangeSchema, metadataWithoutRange);\n return applyOptionalNullable(s, d);\n }\n\n // Regular object schema\n const props = (d as any).properties as Record<string, SerializableZodSchema>;\n const shape: Record<string, z.ZodTypeAny> = {};\n for (const [k, v] of Object.entries(props || {})) {\n shape[k] = build(v as SerializableZodSchema) || z.unknown();\n }\n const s = applyMetadata(z.object(shape), metadata);\n return applyOptionalNullable(s, d);\n }\n case 'lazy': {\n // Cannot reconstruct true lazy structure; fallback\n const s = applyMetadata(z.any(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n default: {\n const s = applyMetadata(z.unknown(), (d as any).metadata);\n return applyOptionalNullable(s, d);\n }\n }\n };\n\n return build(desc);\n}\n\n\n\n// =============================================================================\n// VIRTUAL FIELD UTILITIES\n// =============================================================================\n\n/**\n * Check if a schema is marked as a virtual field.\n * Virtual fields are computed at runtime and not stored in the database.\n */\nexport function isVirtualField(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.IS_VIRTUAL);\n}\n\n\n/**\n * Get the virtual field parameters from a schema.\n * Returns undefined if the field is not virtual.\n */\nexport function getVirtualFieldParams(schema: z.ZodTypeAny): VirtualFieldParams | undefined {\n const metadata = getCustomFieldMetadata(schema);\n const virtualMetadata = metadata[ZodDecorator.IS_VIRTUAL];\n\n if (!virtualMetadata) return undefined;\n\n return virtualMetadata as VirtualFieldParams;\n}\n\n/**\n * Get the dependencies declared for a virtual field.\n * Returns an empty array if no dependencies are declared or the field is not virtual.\n */\nexport function getVirtualFieldDependencies(schema: z.ZodTypeAny): string[] {\n const params = getVirtualFieldParams(schema);\n return params?.dependencies ?? [];\n}\n\n/**\n * Check if a virtual field needs object context (parents/children) for computation.\n */\nexport function virtualFieldNeedsObjectContext(schema: z.ZodTypeAny): boolean {\n const params = getVirtualFieldParams(schema);\n return params?.needsObjectContext ?? false;\n}\n\n/**\n * Check if a virtual field needs user context for computation.\n */\nexport function virtualFieldNeedsUserContext(schema: z.ZodTypeAny): boolean {\n const params = getVirtualFieldParams(schema);\n return params?.needsUserContext ?? false;\n}\n\n\n// =============================================================================\n// FORM SCHEMA PREPARATION UTILITIES\n// =============================================================================\n\n/**\n * Operation type for schema preparation.\n */\nexport type FormSchemaOperationType = 'CREATE' | 'UPDATE' | 'READ';\n\n/**\n * Options for prepareFormSchema utility.\n */\nexport interface PrepareFormSchemaOptions {\n /**\n * The operation type (CREATE, UPDATE, or READ).\n * Used to filter excludeFromCreate/excludeFromUpdate fields.\n */\n operationType: FormSchemaOperationType;\n\n /**\n * Whether the form is in draft mode.\n * When true, fields with isDraftRelaxed() become optional.\n * @default false\n */\n isDraftMode?: boolean;\n\n /**\n * Optional operation that behaves like a core operation.\n * For example, 'DUPLICATE' might behave like 'CREATE'.\n */\n operationLike?: FormSchemaOperationType;\n}\n\n/**\n * Check if a field should be excluded from form validation based on its decorators.\n */\nexport function shouldExcludeFieldFromForm(\n fieldSchema: z.ZodTypeAny,\n operationType: FormSchemaOperationType\n): boolean {\n // Exclude virtual fields (computed at runtime)\n if (hasDecorator(fieldSchema, ZodDecorator.IS_VIRTUAL)) {\n return true;\n }\n\n // Exclude backend-only fields (never sent to frontend)\n if (hasDecorator(fieldSchema, ZodDecorator.IS_BACKEND_ONLY)) {\n return true;\n }\n\n // Exclude hidden fields (but respect edit: false param which means visible in edit mode)\n const hiddenMetadata = getHiddenFieldMetadata(fieldSchema);\n if (hiddenMetadata !== undefined) {\n // If hiddenMetadata is true (no params), field is hidden everywhere\n if (hiddenMetadata === true) {\n return true;\n }\n // If hiddenMetadata has params, check the edit flag\n // edit: false means \"NOT hidden in edit mode\" (visible in forms)\n // edit: true or undefined means \"hidden in edit mode\"\n if (hiddenMetadata.edit !== false) {\n return true;\n }\n // edit: false - field is visible in forms, don't exclude\n }\n\n // Exclude excludeFromCreate fields for CREATE operations\n if (operationType === 'CREATE' && hasDecorator(fieldSchema, ZodDecorator.EXCLUDE_FROM_CREATE)) {\n return true;\n }\n\n // Exclude excludeFromUpdate fields for UPDATE operations\n if (operationType === 'UPDATE' && hasDecorator(fieldSchema, ZodDecorator.EXCLUDE_FROM_UPDATE)) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Check if a field has isDraftRelaxed decorator.\n */\nexport function isDraftRelaxedField(fieldSchema: z.ZodTypeAny): boolean {\n return hasDecorator(fieldSchema, ZodDecorator.IS_DRAFT_RELAXED);\n}\n\n/**\n * Prepare a schema for form validation by filtering out fields that shouldn't be validated\n * and adjusting optionality based on draft mode.\n *\n * This function:\n * - Removes virtual fields\n * - Removes backend-only fields\n * - Removes hidden fields\n * - Removes excludeFromCreate fields (for CREATE operations)\n * - Removes excludeFromUpdate fields (for UPDATE operations)\n * - Makes isDraftRelaxed fields optional when in draft mode\n *\n * **WARNING: Schema-level refinements (.refine(), .superRefine()) are NOT carried over.**\n * The returned schema is a new z.object() with the filtered shape — any cross-field\n * validation defined via refinements on the original schema will be silently lost.\n * This is intentional for draft mode (draft = relaxed validation), but callers using\n * this outside of draft mode should be aware that cross-field rules won't apply.\n * For non-draft form validation, use the original schema (e.g., operation.requestDto) directly.\n *\n * @param schema - The original object schema\n * @param options - Preparation options\n * @returns A new schema suitable for form validation (without schema-level refinements)\n */\nexport function prepareFormSchema<T extends z.ZodObject<z.ZodRawShape>>(\n schema: T,\n options: PrepareFormSchemaOptions\n): z.ZodObject<z.ZodRawShape> {\n const { operationType, isDraftMode = false, operationLike } = options;\n const effectiveOperationType = operationLike ?? operationType;\n\n // Get the shape of the object schema\n const shape = schema.shape as Record<string, z.ZodTypeAny>;\n const newShape: Record<string, z.ZodTypeAny> = {};\n\n // Process each field\n for (const [fieldName, fieldSchema] of Object.entries(shape)) {\n // Skip fields that should be excluded\n if (shouldExcludeFieldFromForm(fieldSchema, effectiveOperationType)) {\n continue;\n }\n\n // If in draft mode and field is draft-relaxed, make it optional\n if (isDraftMode && isDraftRelaxedField(fieldSchema)) {\n // Wrap in optional if not already optional\n if (!isOptional(fieldSchema)) {\n newShape[fieldName] = fieldSchema.optional();\n } else {\n newShape[fieldName] = fieldSchema;\n }\n } else {\n newShape[fieldName] = fieldSchema;\n }\n }\n\n // Create new object schema with filtered shape\n const newSchema = z.object(newShape);\n\n // M5: Preserve schema-level metadata from original schema (e.g., isHidden, showWhen)\n // Use double assertion via unknown to handle symbol indexing safely\n type SchemaWithMetadata = { [key: symbol]: unknown };\n const schemaAsAny = schema as unknown as SchemaWithMetadata;\n const originalMetadata = schemaAsAny[SCHEMA_METADATA];\n if (originalMetadata && typeof originalMetadata === 'object') {\n const newSchemaAsAny = newSchema as unknown as SchemaWithMetadata;\n newSchemaAsAny[SCHEMA_METADATA] = { ...(originalMetadata as Record<string, unknown>) };\n }\n\n // Note: We don't copy schema-level refinements in draft mode to avoid cross-field validation\n // For non-draft mode, refinements should ideally be copied but that requires deeper schema introspection\n return newSchema;\n}\n\n/**\n * Check if a schema field is marked as ephemeral (transient response-only data).\n * Ephemeral fields are shown once (e.g., API keys upon creation) and not persisted in the UI.\n */\nexport function isEphemeralField(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.IS_EPHEMERAL);\n}\n\n\n// =============================================================================\n// Unified {primitive}UI Reader Functions\n// =============================================================================\n// Return the full nested structure: { display?, summaryOverride?, edit? }.\n// Consumers access context-specific params via e.g. getStringUI(s)?.edit?.editMode.\n\nexport function getBooleanUI(schema: z.ZodTypeAny): BooleanUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.BOOLEAN_UI];\n}\nexport function hasBooleanUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.BOOLEAN_UI);\n}\n\nexport function getStringUI(schema: z.ZodTypeAny): StringUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.STRING_UI];\n}\nexport function hasStringUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.STRING_UI);\n}\n\nexport function getNumberUI(schema: z.ZodTypeAny): NumberUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.NUMBER_UI];\n}\nexport function hasNumberUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.NUMBER_UI);\n}\n\nexport function getEnumUI(schema: z.ZodTypeAny): EnumUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.ENUM_UI];\n}\nexport function hasEnumUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.ENUM_UI);\n}\n\nexport function getDateUI(schema: z.ZodTypeAny): DateUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.DATE_UI];\n}\nexport function hasDateUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.DATE_UI);\n}\n\nexport function getDateTimeUI(schema: z.ZodTypeAny): DateTimeUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.DATETIME_UI];\n}\nexport function hasDateTimeUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.DATETIME_UI);\n}\n\nexport function getTimeUI(schema: z.ZodTypeAny): TimeUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.TIME_UI];\n}\nexport function hasTimeUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.TIME_UI);\n}\n\nexport function getMoneyUI(schema: z.ZodTypeAny): MoneyUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.MONEY_UI];\n}\nexport function hasMoneyUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.MONEY_UI);\n}\n\nexport function getCodeUI(schema: z.ZodTypeAny): CodeUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.CODE_UI];\n}\nexport function hasCodeUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.CODE_UI);\n}\n\nexport function getFileUI(schema: z.ZodTypeAny): FileUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.FILE_UI];\n}\nexport function hasFileUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.FILE_UI);\n}\n\nexport function getDurationUI(schema: z.ZodTypeAny): DurationUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.DURATION_UI];\n}\nexport function hasDurationUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.DURATION_UI);\n}\n\nexport function getPhoneUI(schema: z.ZodTypeAny): PhoneUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.PHONE_UI];\n}\nexport function hasPhoneUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.PHONE_UI);\n}\n\nexport function getBigDecimalUI(schema: z.ZodTypeAny): BigDecimalUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.BIGDECIMAL_UI];\n}\nexport function hasBigDecimalUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.BIGDECIMAL_UI);\n}\n\nexport function getForeignKeyUI(schema: z.ZodTypeAny): ForeignKeyUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.FOREIGN_KEY_UI];\n}\nexport function hasForeignKeyUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.FOREIGN_KEY_UI);\n}\n\nexport function getArrayUI(schema: z.ZodTypeAny): ArrayUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.ARRAY_UI];\n}\nexport function hasArrayUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.ARRAY_UI);\n}\n\nexport function getObjectUI(schema: z.ZodTypeAny): ObjectUIParams | undefined {\n return getCustomFieldMetadata(schema)[ZodDecorator.OBJECT_UI];\n}\nexport function hasObjectUI(schema: z.ZodTypeAny): boolean {\n return hasDecorator(schema, ZodDecorator.OBJECT_UI);\n}\n\n\n"]}