{"version":3,"file":"plugins.cjs","names":["NodeTypes","getTranslation","getEnumeration","getInsertion","getPlural","getCondition","getGender","getNesting"],"sources":["../../../../src/interpreter/getContent/plugins.ts"],"sourcesContent":["import type { Locale } from '@intlayer/types/allLocales';\nimport type { KeyPath } from '@intlayer/types/keyPath';\nimport type {\n  DeclaredLocales,\n  DictionaryKeys,\n  LocalesValues,\n} from '@intlayer/types/module_augmentation';\nimport type { NodeType } from '@intlayer/types/nodeType';\nimport * as NodeTypes from '@intlayer/types/nodeType';\nimport type {\n  ConditionContent,\n  EnumerationContent,\n  FileContent,\n  Gender,\n  GenderContent,\n  InsertionContent,\n  NestedContent,\n  PluralContent,\n  PluralContentState,\n  TranslationContent,\n} from '../../transpiler';\nimport { getCondition } from '../getCondition';\nimport { getEnumeration } from '../getEnumeration';\nimport { getGender } from '../getGender';\nimport { getInsertion } from '../getInsertion';\nimport { type GetNestingResult, getNesting } from '../getNesting';\nimport { getPlural } from '../getPlural';\nimport { getTranslation } from '../getTranslation';\n\n// ── Tree-shake constants ──────────────────────────────────────────────────────\n// When these env vars are injected at build time, bundlers eliminate the\n// branches guarded by these constants.\n\n/** ---------------------------------------------\n * PLUGIN DEFINITION\n * --------------------------------------------- */\n\n/**\n * A plugin/transformer that can optionally transform a node during a single DFS pass.\n * - `canHandle` decides if the node is transformable by this plugin.\n * - `transform` returns the transformed node (and does not recurse further).\n *\n * > `transformFn` is a function that can be used to deeply transform inside the plugin.\n */\nexport type Plugins = {\n  id: string;\n  canHandle: (node: any) => boolean;\n  transform: (\n    node: any,\n    props: NodeProps,\n    transformFn: (node: any, props: NodeProps) => any\n  ) => any;\n};\n\n/** ---------------------------------------------\n * FALLBACK PLUGIN\n *\n * Used to fallback a tree-shaken plugin\n * --------------------------------------------- */\n\nexport const fallbackPlugin: Plugins = {\n  id: 'fallback-plugin',\n  canHandle: () => false,\n  transform: (node) => node,\n};\n\n/** ---------------------------------------------\n * TRANSLATION PLUGIN\n * --------------------------------------------- */\n\nexport type UnionKeys<T> = T extends unknown ? keyof T : never;\nexport type ValueAtKey<T, K> = T extends unknown\n  ? K extends keyof T\n    ? T[K]\n    : never\n  : never;\n\nexport type TranslationCond<T, S, L extends LocalesValues> = T extends {\n  nodeType: NodeType | string;\n  [NodeTypes.TRANSLATION]: infer U;\n}\n  ? U extends Record<PropertyKey, unknown>\n    ? U[keyof U] extends Record<PropertyKey, unknown>\n      ? {\n          [K in UnionKeys<U[keyof U]>]: L extends keyof U\n            ? K extends keyof U[L]\n              ? U[L][K]\n              : ValueAtKey<U[keyof U], K>\n            : ValueAtKey<U[keyof U], K>;\n        } extends infer Content\n        ? DeepTransformContent<Content, S>\n        : never\n      : (L extends keyof U ? U[L] : U[keyof U]) extends infer Content\n        ? DeepTransformContent<Content, S>\n        : never\n    : never\n  : never;\n\n/** Translation plugin. Replaces node with a locale string if nodeType = Translation. */\nexport const translationPlugin = (\n  locale: LocalesValues,\n  fallback?: LocalesValues\n): Plugins =>\n  process.env['INTLAYER_NODE_TYPE_TRANSLATION'] === 'false'\n    ? fallbackPlugin\n    : {\n        id: 'translation-plugin',\n        canHandle: (node) =>\n          typeof node === 'object' && node?.nodeType === NodeTypes.TRANSLATION,\n        transform: (node: TranslationContent, props, deepTransformNode) => {\n          const original = node[NodeTypes.TRANSLATION] ?? {};\n          const result: Record<string, any> = {};\n\n          for (const key in original) {\n            const childProps = {\n              ...props,\n              children: original[key as keyof typeof original],\n              keyPath: [\n                ...props.keyPath,\n                { type: NodeTypes.TRANSLATION, key } as KeyPath,\n              ],\n            };\n            result[key] = deepTransformNode(\n              original[key as keyof typeof original],\n              childProps\n            );\n          }\n\n          return getTranslation(result, locale, fallback);\n        },\n      };\n\n/** ---------------------------------------------\n * ENUMERATION PLUGIN\n * --------------------------------------------- */\n\nexport type EnumerationCond<T, S, _L> = T extends {\n  nodeType: NodeType | string;\n  [NodeTypes.ENUMERATION]: object;\n}\n  ? (\n      quantity: number\n    ) => DeepTransformContent<\n      T[typeof NodeTypes.ENUMERATION][keyof T[typeof NodeTypes.ENUMERATION]],\n      S\n    >\n  : never;\n\n/** Enumeration plugin. Replaces node with a function that takes quantity => string. */\nexport const enumerationPlugin: Plugins =\n  process.env['INTLAYER_NODE_TYPE_ENUMERATION'] === 'false'\n    ? fallbackPlugin\n    : {\n        id: 'enumeration-plugin',\n        canHandle: (node) =>\n          typeof node === 'object' && node?.nodeType === NodeTypes.ENUMERATION,\n        transform: (node: EnumerationContent, props, deepTransformNode) => {\n          const original = node[NodeTypes.ENUMERATION];\n          const result: Record<string, any> = {};\n\n          for (const key in original) {\n            const child = original[key as unknown as keyof typeof original];\n            const childProps = {\n              ...props,\n              children: child,\n              keyPath: [\n                ...props.keyPath,\n                { type: NodeTypes.ENUMERATION, key } as KeyPath,\n              ],\n            };\n            result[key] = deepTransformNode(child, childProps);\n          }\n\n          return (arg: number | { count: number }) => {\n            const quantity = typeof arg === 'number' ? arg : arg.count;\n            const subResult = getEnumeration(result, quantity);\n\n            if (typeof subResult === 'function' && typeof arg === 'object') {\n              return subResult(arg);\n            }\n\n            return subResult;\n          };\n        },\n      };\n\n/** ---------------------------------------------\n * PLURAL PLUGIN\n * --------------------------------------------- */\n\nexport type PluralCond<T, S, _L> = T extends {\n  nodeType: NodeType | string;\n  [NodeTypes.PLURAL]: object;\n}\n  ? (\n      arg: number | { count: number; [key: string]: unknown }\n    ) => DeepTransformContent<\n      T[typeof NodeTypes.PLURAL][keyof T[typeof NodeTypes.PLURAL]],\n      S\n    >\n  : never;\n\ntype SubResultFunction = (values: Record<string, string | number>) => string;\n\n/**\n * Plural plugin. Replaces node with a function that takes a count (or\n * `{ count, ...values }`) => string, picking the matching CLDR plural form\n * for the active locale and interpolating `{{count}}` (and other values).\n */\nexport const pluralPlugin = (locale?: LocalesValues): Plugins =>\n  process.env['INTLAYER_NODE_TYPE_PLURAL'] === 'false'\n    ? fallbackPlugin\n    : {\n        id: 'plural-plugin',\n        canHandle: (node) =>\n          typeof node === 'object' && node?.nodeType === NodeTypes.PLURAL,\n        transform: (node: PluralContent, props, deepTransformNode) => {\n          const original = node[NodeTypes.PLURAL];\n          const result: Record<string, any> = {};\n\n          /** String plugin for plural. Replaces string node with a component that renders the insertion. */\n          const pluralStringPlugin: Plugins = {\n            id: 'plural-string-plugin',\n            canHandle: (node) => typeof node === 'string',\n            transform: (node: string, subProps, deepTransformNode) => {\n              const transformedResult = deepTransformNode(node, {\n                ...subProps,\n                children: node,\n                plugins: [\n                  ...(props.plugins ?? ([] as Plugins[])).filter(\n                    (plugin) => plugin.id !== 'intlayer-node-plugin'\n                  ),\n                ],\n              });\n\n              return (values: { [k: string]: string | number }) => {\n                const children = getInsertion(transformedResult, values);\n\n                return deepTransformNode(children, {\n                  ...subProps,\n                  plugins: props.plugins,\n                  children,\n                });\n              };\n            },\n          };\n\n          for (const key in original) {\n            const child = original[key as keyof typeof original];\n            const childProps = {\n              ...props,\n              children: child,\n              keyPath: [\n                ...props.keyPath,\n                { type: NodeTypes.PLURAL, key } as KeyPath,\n              ],\n              plugins: [pluralStringPlugin, ...(props.plugins ?? [])],\n            };\n            result[key] = deepTransformNode(child, childProps);\n          }\n\n          const effectiveLocale = String(locale ?? props.locale ?? 'en');\n\n          return (arg: number | { count: number; [key: string]: unknown }) => {\n            const count = typeof arg === 'number' ? arg : arg.count;\n            const values =\n              typeof arg === 'number'\n                ? { count: arg }\n                : (arg as { count: number; [key: string]: unknown });\n\n            const subResult: string | SubResultFunction = getPlural(\n              result as PluralContent['plural'] as PluralContentState<string>,\n              count,\n              effectiveLocale\n            );\n\n            if (typeof subResult === 'function') {\n              return (subResult as SubResultFunction)(values);\n            }\n\n            return subResult;\n          };\n        },\n      };\n\n/** ---------------------------------------------\n * CONDITION PLUGIN\n * --------------------------------------------- */\n\nexport type ConditionCond<T, S, _L> = T extends {\n  nodeType: NodeType | string;\n  [NodeTypes.CONDITION]: object;\n}\n  ? (\n      value: boolean | { value: boolean }\n    ) => DeepTransformContent<\n      T[typeof NodeTypes.CONDITION][keyof T[typeof NodeTypes.CONDITION]],\n      S\n    >\n  : never;\n\n/** Condition plugin. Replaces node with a function that takes boolean => string. */\nexport const conditionPlugin: Plugins =\n  process.env['INTLAYER_NODE_TYPE_CONDITION'] === 'false'\n    ? fallbackPlugin\n    : {\n        id: 'condition-plugin',\n        canHandle: (node) =>\n          typeof node === 'object' && node?.nodeType === NodeTypes.CONDITION,\n        transform: (node: ConditionContent, props, deepTransformNode) => {\n          const original = node[NodeTypes.CONDITION];\n          const result: Record<string, any> = {};\n\n          for (const key in original) {\n            const child = original[key as keyof typeof original];\n            const childProps = {\n              ...props,\n              children: child,\n              keyPath: [\n                ...props.keyPath,\n                { type: NodeTypes.CONDITION, key } as KeyPath,\n              ],\n            };\n            result[key] = deepTransformNode(child, childProps);\n          }\n\n          return (arg: boolean | { value: boolean }) => {\n            const value = typeof arg === 'boolean' ? arg : arg.value;\n            const subResult = getCondition(result as any, value);\n\n            if (typeof subResult === 'function' && typeof arg === 'object') {\n              return subResult(arg);\n            }\n\n            return subResult;\n          };\n        },\n      };\n\n/** ---------------------------------------------\n *  INSERTION PLUGIN\n *  --------------------------------------------- */\n\nexport type InsertionCond<T, S, _L> = T extends {\n  nodeType: NodeType | string;\n  [NodeTypes.INSERTION]: infer I;\n  fields: readonly string[];\n}\n  ? (\n      values: {\n        [K in T['fields'][number]]: string | number;\n      }\n    ) => I extends string\n      ? DeepTransformContent<string, S>\n      : DeepTransformContent<I, S>\n  : never;\n\n/** Insertion plugin. Replaces node with a function that takes quantity => string. */\nexport const insertionPlugin: Plugins =\n  process.env['INTLAYER_NODE_TYPE_INSERTION'] === 'false'\n    ? fallbackPlugin\n    : {\n        id: 'insertion-plugin',\n        canHandle: (node) =>\n          typeof node === 'object' && node?.nodeType === NodeTypes.INSERTION,\n        transform: (node: InsertionContent, props, deepTransformNode) => {\n          const newKeyPath: KeyPath[] = [\n            ...props.keyPath,\n            {\n              type: NodeTypes.INSERTION,\n            },\n          ];\n\n          const children = node[NodeTypes.INSERTION];\n\n          /** Insertion string plugin. Replaces string node with a component that render the insertion. */\n          const insertionStringPlugin: Plugins = {\n            id: 'insertion-string-plugin',\n            canHandle: (node) => typeof node === 'string',\n            transform: (node: string, subProps, deepTransformNode) => {\n              const transformedResult = deepTransformNode(node, {\n                ...subProps,\n                children: node,\n                plugins: [\n                  ...(props.plugins ?? ([] as Plugins[])).filter(\n                    (plugin) => plugin.id !== 'intlayer-node-plugin'\n                  ),\n                ],\n              });\n\n              return (\n                values: {\n                  [K in InsertionContent['fields'][number]]: string | number;\n                }\n              ) => {\n                const children = getInsertion(transformedResult, values);\n\n                return deepTransformNode(children, {\n                  ...subProps,\n                  plugins: props.plugins,\n                  children,\n                });\n              };\n            },\n          };\n\n          return deepTransformNode(children, {\n            ...props,\n            children,\n            keyPath: newKeyPath,\n            plugins: [insertionStringPlugin, ...(props.plugins ?? [])],\n          });\n        },\n      };\n\n/** ---------------------------------------------\n * GENDER PLUGIN\n * --------------------------------------------- */\n\nexport type GenderCond<T, S, _L> = T extends {\n  nodeType: NodeType | string;\n  [NodeTypes.GENDER]: object;\n}\n  ? (\n      value: Gender\n    ) => DeepTransformContent<\n      T[typeof NodeTypes.GENDER][keyof T[typeof NodeTypes.GENDER]],\n      S\n    >\n  : never;\n\n/** Gender plugin. Replaces node with a function that takes gender => string. */\nexport const genderPlugin: Plugins =\n  process.env['INTLAYER_NODE_TYPE_GENDER'] === 'false'\n    ? fallbackPlugin\n    : {\n        id: 'gender-plugin',\n        canHandle: (node) =>\n          typeof node === 'object' && node?.nodeType === NodeTypes.GENDER,\n        transform: (node: GenderContent, props, deepTransformNode) => {\n          const original = node[NodeTypes.GENDER];\n          const result: Record<string, any> = {};\n\n          for (const key in original) {\n            const child = original[key as keyof typeof original];\n            const childProps = {\n              ...props,\n              children: child,\n              keyPath: [\n                ...props.keyPath,\n                { type: NodeTypes.GENDER, key } as KeyPath,\n              ],\n            };\n            result[key] = deepTransformNode(child, childProps);\n          }\n\n          return (value: Gender) => getGender(result as any, value);\n        },\n      };\n\n/** ---------------------------------------------\n * NESTED PLUGIN\n * --------------------------------------------- */\n\nexport type NestedCond<T, S, _L> = T extends {\n  nodeType: NodeType | string;\n  [NodeTypes.NESTED]: infer U;\n}\n  ? U extends {\n      dictionaryKey: infer K extends DictionaryKeys;\n      path?: infer P;\n    }\n    ? GetNestingResult<K, P, S>\n    : never\n  : never;\n\n/** Nested plugin. Replaces node with the result of `getNesting`. */\nexport const nestedPlugin = (locale?: LocalesValues): Plugins =>\n  process.env['INTLAYER_NODE_TYPE_NESTED'] === 'false'\n    ? fallbackPlugin\n    : {\n        id: 'nested-plugin',\n        canHandle: (node) =>\n          typeof node === 'object' &&\n          (node?.nodeType === NodeTypes.NESTED || node?.nodeType === 'n'),\n        transform: (node: NestedContent, props) =>\n          getNesting(\n            node[NodeTypes.NESTED].dictionaryKey,\n            node[NodeTypes.NESTED].path,\n            {\n              ...props,\n              locale: (locale ?? props.locale) as Locale,\n            }\n          ),\n      };\n\n/** ---------------------------------------------\n * FILE PLUGIN\n * --------------------------------------------- */\n\nexport type FileCond<T, S, _L> = T extends {\n  nodeType: NodeType | string;\n  [NodeTypes.FILE]: string;\n  content?: string;\n}\n  ? DeepTransformContent<string, S>\n  : never;\n\n/** File plugin. Replaces node with the result of `getNesting`. */\nexport const filePlugin: Plugins =\n  process.env['INTLAYER_NODE_TYPE_FILE'] === 'false'\n    ? fallbackPlugin\n    : {\n        id: 'file-plugin',\n        canHandle: (node) =>\n          typeof node === 'object' && node?.nodeType === NodeTypes.FILE,\n        transform: (node: FileContent, props, deepTransform) =>\n          deepTransform(node.content, {\n            ...props,\n            children: node.content,\n          }),\n      };\n\n/**\n * PLUGIN RESULT\n */\n\n/**\n * Interface that defines the properties of a node.\n * This interface can be augmented in other packages, such as `react-intlayer`.\n */\nexport interface NodeProps {\n  dictionaryKey: string;\n  keyPath: KeyPath[];\n  plugins?: Plugins[];\n  locale?: Locale;\n  dictionaryPath?: string;\n  children?: any;\n  /**\n   * Forces eager traversal of plain objects in `deepTransformNode`. By default\n   * traversal is lazy (property getters), so callers that discard the returned\n   * value never trigger plugins on nested nodes. Set this when running plugins\n   * for their side effects only (e.g. missing-locale detection).\n   */\n  eager?: boolean;\n}\n\n/**\n * Interface that defines the plugins that can be used to transform a node.\n * This interface can be augmented in other packages, such as `react-intlayer`.\n */\nexport interface IInterpreterPlugin<T, S, L extends LocalesValues> {\n  translation: TranslationCond<T, S, L>;\n  enumeration: EnumerationCond<T, S, L>;\n  plural: PluralCond<T, S, L>;\n  condition: ConditionCond<T, S, L>;\n  insertion: InsertionCond<T, S, L>;\n  gender: GenderCond<T, S, L>;\n  nested: NestedCond<T, S, L>;\n  file: FileCond<T, S, L>;\n}\n\n/**\n * Allow to avoid overwriting import from `intlayer` package when `IInterpreterPlugin<T>` interface is augmented in another package, such as `react-intlayer`.\n */\nexport type IInterpreterPluginState = {\n  translation: true;\n  enumeration: true;\n  plural: true;\n  condition: true;\n  insertion: true;\n  gender: true;\n  nested: true;\n  file: true;\n};\n\n/**\n * Utility type to check if a plugin can be applied to a node.\n */\ntype CheckApplyPlugin<\n  T,\n  K extends keyof IInterpreterPlugin<T, S, L>,\n  S,\n  L extends LocalesValues = DeclaredLocales,\n> = K extends keyof S // Test if the key is a key of S.\n  ? // Test if the key of S is true. Then the plugin can be applied.\n    S[K] extends true\n    ? // Test if the key of S exist\n      IInterpreterPlugin<T, S, L>[K] extends never\n      ? never\n      : // Test if the plugin condition is true (if it's not, the plugin is skipped for this node)\n        IInterpreterPlugin<T, S, L>[K]\n    : never\n  : never;\n\n/**\n * Traverse recursively through an object or array, applying each plugin as needed.\n */\ntype Traverse<T, S, L extends LocalesValues = DeclaredLocales> =\n  T extends ReadonlyArray<infer U> // Turn any read-only array into a plain mutable array\n    ? Array<DeepTransformContent<U, S, L>>\n    : T extends object\n      ? { [K in keyof T]: DeepTransformContent<T[K], S, L> }\n      : T;\n\nexport type IsAny<T> = 0 extends 1 & T ? true : false;\n\n/**\n * Traverse recursively through an object or array, applying each plugin as needed.\n */\nexport type DeepTransformContent<\n  T,\n  S = IInterpreterPluginState,\n  L extends LocalesValues = DeclaredLocales,\n> =\n  IsAny<T> extends true\n    ? T\n    : CheckApplyPlugin<T, keyof IInterpreterPlugin<T, S, L>, S, L> extends never // Check if there is a plugin for T:\n      ? // No plugin was found, so try to transform T recursively:\n        Traverse<T, S, L>\n      : // A plugin was found – use the plugin's transformation.\n        CheckApplyPlugin<T, keyof IInterpreterPlugin<T, S, L>, S, L>;\n"],"mappings":";;;;;;;;;;;;;;;;;;AA4DA,MAAa,iBAA0B;CACrC,IAAI;CACJ,iBAAiB;CACjB,YAAY,SAAS;CACtB;;AAmCD,MAAa,qBACX,QACA,aAEA,QAAQ,IAAI,sCAAsC,UAC9C,iBACA;CACE,IAAI;CACJ,YAAY,SACV,OAAO,SAAS,YAAY,MAAM,aAAaA,yBAAU;CAC3D,YAAY,MAA0B,OAAO,sBAAsB;EACjE,MAAM,WAAW,KAAKA,yBAAU,gBAAgB,EAAE;EAClD,MAAM,SAA8B,EAAE;AAEtC,OAAK,MAAM,OAAO,UAAU;GAC1B,MAAM,aAAa;IACjB,GAAG;IACH,UAAU,SAAS;IACnB,SAAS,CACP,GAAG,MAAM,SACT;KAAE,MAAMA,yBAAU;KAAa;KAAK,CACrC;IACF;AACD,UAAO,OAAO,kBACZ,SAAS,MACT,WACD;;AAGH,SAAOC,kDAAe,QAAQ,QAAQ,SAAS;;CAElD;;AAmBP,MAAa,oBACX,QAAQ,IAAI,sCAAsC,UAC9C,iBACA;CACE,IAAI;CACJ,YAAY,SACV,OAAO,SAAS,YAAY,MAAM,aAAaD,yBAAU;CAC3D,YAAY,MAA0B,OAAO,sBAAsB;EACjE,MAAM,WAAW,KAAKA,yBAAU;EAChC,MAAM,SAA8B,EAAE;AAEtC,OAAK,MAAM,OAAO,UAAU;GAC1B,MAAM,QAAQ,SAAS;AASvB,UAAO,OAAO,kBAAkB,OAAO;IAPrC,GAAG;IACH,UAAU;IACV,SAAS,CACP,GAAG,MAAM,SACT;KAAE,MAAMA,yBAAU;KAAa;KAAK,CACrC;IAE8C,CAAC;;AAGpD,UAAQ,QAAoC;GAE1C,MAAM,YAAYE,kDAAe,QADhB,OAAO,QAAQ,WAAW,MAAM,IAAI,MACH;AAElD,OAAI,OAAO,cAAc,cAAc,OAAO,QAAQ,SACpD,QAAO,UAAU,IAAI;AAGvB,UAAO;;;CAGZ;;;;;;AAyBP,MAAa,gBAAgB,WAC3B,QAAQ,IAAI,iCAAiC,UACzC,iBACA;CACE,IAAI;CACJ,YAAY,SACV,OAAO,SAAS,YAAY,MAAM,aAAaF,yBAAU;CAC3D,YAAY,MAAqB,OAAO,sBAAsB;EAC5D,MAAM,WAAW,KAAKA,yBAAU;EAChC,MAAM,SAA8B,EAAE;;EAGtC,MAAM,qBAA8B;GAClC,IAAI;GACJ,YAAY,SAAS,OAAO,SAAS;GACrC,YAAY,MAAc,UAAU,sBAAsB;IACxD,MAAM,oBAAoB,kBAAkB,MAAM;KAChD,GAAG;KACH,UAAU;KACV,SAAS,CACP,IAAI,MAAM,WAAY,EAAE,EAAgB,QACrC,WAAW,OAAO,OAAO,uBAC3B,CACF;KACF,CAAC;AAEF,YAAQ,WAA6C;KACnD,MAAM,WAAWG,8CAAa,mBAAmB,OAAO;AAExD,YAAO,kBAAkB,UAAU;MACjC,GAAG;MACH,SAAS,MAAM;MACf;MACD,CAAC;;;GAGP;AAED,OAAK,MAAM,OAAO,UAAU;GAC1B,MAAM,QAAQ,SAAS;AAUvB,UAAO,OAAO,kBAAkB,OAAO;IARrC,GAAG;IACH,UAAU;IACV,SAAS,CACP,GAAG,MAAM,SACT;KAAE,MAAMH,yBAAU;KAAQ;KAAK,CAChC;IACD,SAAS,CAAC,oBAAoB,GAAI,MAAM,WAAW,EAAE,CAAE;IAER,CAAC;;EAGpD,MAAM,kBAAkB,OAAO,UAAU,MAAM,UAAU,KAAK;AAE9D,UAAQ,QAA4D;GAClE,MAAM,QAAQ,OAAO,QAAQ,WAAW,MAAM,IAAI;GAClD,MAAM,SACJ,OAAO,QAAQ,WACX,EAAE,OAAO,KAAK,GACb;GAEP,MAAM,YAAwCI,wCAC5C,QACA,OACA,gBACD;AAED,OAAI,OAAO,cAAc,WACvB,QAAQ,UAAgC,OAAO;AAGjD,UAAO;;;CAGZ;;AAmBP,MAAa,kBACX,QAAQ,IAAI,oCAAoC,UAC5C,iBACA;CACE,IAAI;CACJ,YAAY,SACV,OAAO,SAAS,YAAY,MAAM,aAAaJ,yBAAU;CAC3D,YAAY,MAAwB,OAAO,sBAAsB;EAC/D,MAAM,WAAW,KAAKA,yBAAU;EAChC,MAAM,SAA8B,EAAE;AAEtC,OAAK,MAAM,OAAO,UAAU;GAC1B,MAAM,QAAQ,SAAS;AASvB,UAAO,OAAO,kBAAkB,OAAO;IAPrC,GAAG;IACH,UAAU;IACV,SAAS,CACP,GAAG,MAAM,SACT;KAAE,MAAMA,yBAAU;KAAW;KAAK,CACnC;IAE8C,CAAC;;AAGpD,UAAQ,QAAsC;GAE5C,MAAM,YAAYK,8CAAa,QADjB,OAAO,QAAQ,YAAY,MAAM,IAAI,MACC;AAEpD,OAAI,OAAO,cAAc,cAAc,OAAO,QAAQ,SACpD,QAAO,UAAU,IAAI;AAGvB,UAAO;;;CAGZ;;AAqBP,MAAa,kBACX,QAAQ,IAAI,oCAAoC,UAC5C,iBACA;CACE,IAAI;CACJ,YAAY,SACV,OAAO,SAAS,YAAY,MAAM,aAAaL,yBAAU;CAC3D,YAAY,MAAwB,OAAO,sBAAsB;EAC/D,MAAM,aAAwB,CAC5B,GAAG,MAAM,SACT,EACE,MAAMA,yBAAU,WACjB,CACF;EAED,MAAM,WAAW,KAAKA,yBAAU;;EAGhC,MAAM,wBAAiC;GACrC,IAAI;GACJ,YAAY,SAAS,OAAO,SAAS;GACrC,YAAY,MAAc,UAAU,sBAAsB;IACxD,MAAM,oBAAoB,kBAAkB,MAAM;KAChD,GAAG;KACH,UAAU;KACV,SAAS,CACP,IAAI,MAAM,WAAY,EAAE,EAAgB,QACrC,WAAW,OAAO,OAAO,uBAC3B,CACF;KACF,CAAC;AAEF,YACE,WAGG;KACH,MAAM,WAAWG,8CAAa,mBAAmB,OAAO;AAExD,YAAO,kBAAkB,UAAU;MACjC,GAAG;MACH,SAAS,MAAM;MACf;MACD,CAAC;;;GAGP;AAED,SAAO,kBAAkB,UAAU;GACjC,GAAG;GACH;GACA,SAAS;GACT,SAAS,CAAC,uBAAuB,GAAI,MAAM,WAAW,EAAE,CAAE;GAC3D,CAAC;;CAEL;;AAmBP,MAAa,eACX,QAAQ,IAAI,iCAAiC,UACzC,iBACA;CACE,IAAI;CACJ,YAAY,SACV,OAAO,SAAS,YAAY,MAAM,aAAaH,yBAAU;CAC3D,YAAY,MAAqB,OAAO,sBAAsB;EAC5D,MAAM,WAAW,KAAKA,yBAAU;EAChC,MAAM,SAA8B,EAAE;AAEtC,OAAK,MAAM,OAAO,UAAU;GAC1B,MAAM,QAAQ,SAAS;AASvB,UAAO,OAAO,kBAAkB,OAAO;IAPrC,GAAG;IACH,UAAU;IACV,SAAS,CACP,GAAG,MAAM,SACT;KAAE,MAAMA,yBAAU;KAAQ;KAAK,CAChC;IAE8C,CAAC;;AAGpD,UAAQ,UAAkBM,wCAAU,QAAe,MAAM;;CAE5D;;AAmBP,MAAa,gBAAgB,WAC3B,QAAQ,IAAI,iCAAiC,UACzC,iBACA;CACE,IAAI;CACJ,YAAY,SACV,OAAO,SAAS,aACf,MAAM,aAAaN,yBAAU,UAAU,MAAM,aAAa;CAC7D,YAAY,MAAqB,UAC/BO,0CACE,KAAKP,yBAAU,QAAQ,eACvB,KAAKA,yBAAU,QAAQ,MACvB;EACE,GAAG;EACH,QAAS,UAAU,MAAM;EAC1B,CACF;CACJ;;AAeP,MAAa,aACX,QAAQ,IAAI,+BAA+B,UACvC,iBACA;CACE,IAAI;CACJ,YAAY,SACV,OAAO,SAAS,YAAY,MAAM,aAAaA,yBAAU;CAC3D,YAAY,MAAmB,OAAO,kBACpC,cAAc,KAAK,SAAS;EAC1B,GAAG;EACH,UAAU,KAAK;EAChB,CAAC;CACL"}