@opengeni/artifact-tool 0.2.2

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.
Files changed (203) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +104 -0
  3. package/dist/bounded-zip.d.ts +28 -0
  4. package/dist/chunk-4BSENMAE.js +39 -0
  5. package/dist/chunk-4BSENMAE.js.map +1 -0
  6. package/dist/chunk-4FRFNNBM.js +276 -0
  7. package/dist/chunk-4FRFNNBM.js.map +1 -0
  8. package/dist/chunk-5XIA6KHZ.js +49 -0
  9. package/dist/chunk-5XIA6KHZ.js.map +1 -0
  10. package/dist/chunk-66CT2ZRP.js +2229 -0
  11. package/dist/chunk-66CT2ZRP.js.map +1 -0
  12. package/dist/chunk-72SYDU4O.js +319 -0
  13. package/dist/chunk-72SYDU4O.js.map +1 -0
  14. package/dist/chunk-B2ZJRZDA.js +279 -0
  15. package/dist/chunk-B2ZJRZDA.js.map +1 -0
  16. package/dist/chunk-DCTLTNPW.js +2458 -0
  17. package/dist/chunk-DCTLTNPW.js.map +1 -0
  18. package/dist/chunk-FGZM4FQ6.js +473 -0
  19. package/dist/chunk-FGZM4FQ6.js.map +1 -0
  20. package/dist/chunk-HTJBLBDE.js +591 -0
  21. package/dist/chunk-HTJBLBDE.js.map +1 -0
  22. package/dist/chunk-IYFXZQ34.js +5306 -0
  23. package/dist/chunk-IYFXZQ34.js.map +1 -0
  24. package/dist/chunk-J6N7IR44.js +172 -0
  25. package/dist/chunk-J6N7IR44.js.map +1 -0
  26. package/dist/chunk-N2IHNWBS.js +1002 -0
  27. package/dist/chunk-N2IHNWBS.js.map +1 -0
  28. package/dist/chunk-NAG44K67.js +549 -0
  29. package/dist/chunk-NAG44K67.js.map +1 -0
  30. package/dist/chunk-O24KTEGP.js +33 -0
  31. package/dist/chunk-O24KTEGP.js.map +1 -0
  32. package/dist/chunk-PI2AZVGK.js +2074 -0
  33. package/dist/chunk-PI2AZVGK.js.map +1 -0
  34. package/dist/chunk-Q2FFHEY7.js +40 -0
  35. package/dist/chunk-Q2FFHEY7.js.map +1 -0
  36. package/dist/chunk-RBGQADXA.js +57 -0
  37. package/dist/chunk-RBGQADXA.js.map +1 -0
  38. package/dist/chunk-U5G2BKM2.js +613 -0
  39. package/dist/chunk-U5G2BKM2.js.map +1 -0
  40. package/dist/chunk-VOJHMSM3.js +39 -0
  41. package/dist/chunk-VOJHMSM3.js.map +1 -0
  42. package/dist/chunk-VUNV25KB.js +16 -0
  43. package/dist/chunk-VUNV25KB.js.map +1 -0
  44. package/dist/chunk-XIFUNVBO.js +101 -0
  45. package/dist/chunk-XIFUNVBO.js.map +1 -0
  46. package/dist/chunk-ZCJYRJGB.js +489 -0
  47. package/dist/chunk-ZCJYRJGB.js.map +1 -0
  48. package/dist/chunk-ZZXPEE4S.js +2260 -0
  49. package/dist/chunk-ZZXPEE4S.js.map +1 -0
  50. package/dist/document-docx-api.d.ts +49 -0
  51. package/dist/document-docx-codec.d.ts +9 -0
  52. package/dist/document-docx-codec.js +4765 -0
  53. package/dist/document-docx-codec.js.map +1 -0
  54. package/dist/document-docx-import.d.ts +261 -0
  55. package/dist/document-docx-packer.d.ts +18 -0
  56. package/dist/document-docx-state.d.ts +12 -0
  57. package/dist/document-render.d.ts +3 -0
  58. package/dist/document-render.js +492 -0
  59. package/dist/document-render.js.map +1 -0
  60. package/dist/document.d.ts +432 -0
  61. package/dist/document.js +37 -0
  62. package/dist/document.js.map +1 -0
  63. package/dist/errors.d.ts +23 -0
  64. package/dist/file-blob.d.ts +11 -0
  65. package/dist/index.d.ts +4 -0
  66. package/dist/index.js +186 -0
  67. package/dist/index.js.map +1 -0
  68. package/dist/inspection.d.ts +12 -0
  69. package/dist/kernel.d.ts +101 -0
  70. package/dist/lib-GQLPACFK.js +9746 -0
  71. package/dist/lib-GQLPACFK.js.map +1 -0
  72. package/dist/materializer-cli-entry.d.ts +2 -0
  73. package/dist/materializer-cli-entry.js +29 -0
  74. package/dist/materializer-cli-entry.js.map +1 -0
  75. package/dist/materializer-cli.d.ts +24 -0
  76. package/dist/materializer-cli.js +24 -0
  77. package/dist/materializer-cli.js.map +1 -0
  78. package/dist/native-raster.d.ts +10 -0
  79. package/dist/native.d.ts +129 -0
  80. package/dist/native.js +31 -0
  81. package/dist/native.js.map +1 -0
  82. package/dist/office-import.d.ts +48 -0
  83. package/dist/office-import.js +154 -0
  84. package/dist/office-import.js.map +1 -0
  85. package/dist/presentation-pptx-api.d.ts +60 -0
  86. package/dist/presentation-pptx-import.d.ts +5 -0
  87. package/dist/presentation-pptx-state-digest-765CZZED.js +10 -0
  88. package/dist/presentation-pptx-state-digest-765CZZED.js.map +1 -0
  89. package/dist/presentation-pptx-state-digest.d.ts +3 -0
  90. package/dist/presentation-pptx-state.d.ts +4 -0
  91. package/dist/presentation-pptx-xml.d.ts +29 -0
  92. package/dist/presentation-pptx.d.ts +5 -0
  93. package/dist/presentation-pptx.js +2365 -0
  94. package/dist/presentation-pptx.js.map +1 -0
  95. package/dist/presentation-render.d.ts +29 -0
  96. package/dist/presentation-render.js +375 -0
  97. package/dist/presentation-render.js.map +1 -0
  98. package/dist/presentation.d.ts +565 -0
  99. package/dist/presentation.js +71 -0
  100. package/dist/presentation.js.map +1 -0
  101. package/dist/production-composite.d.ts +68 -0
  102. package/dist/production-document.d.ts +2 -0
  103. package/dist/production-document.js +176 -0
  104. package/dist/production-document.js.map +1 -0
  105. package/dist/production-native-codecs.d.ts +94 -0
  106. package/dist/production-presentation.d.ts +2 -0
  107. package/dist/production-presentation.js +176 -0
  108. package/dist/production-presentation.js.map +1 -0
  109. package/dist/production-sha256.d.ts +2 -0
  110. package/dist/production-spreadsheet-native.d.ts +12 -0
  111. package/dist/production-spreadsheet.d.ts +2 -0
  112. package/dist/production-spreadsheet.js +176 -0
  113. package/dist/production-spreadsheet.js.map +1 -0
  114. package/dist/production.d.ts +96 -0
  115. package/dist/raster-image.d.ts +34 -0
  116. package/dist/reference.d.ts +17 -0
  117. package/dist/reference.js +574 -0
  118. package/dist/reference.js.map +1 -0
  119. package/dist/runtime-cli-entry.d.ts +2 -0
  120. package/dist/runtime-cli-entry.js +21 -0
  121. package/dist/runtime-cli-entry.js.map +1 -0
  122. package/dist/runtime-cli.d.ts +76 -0
  123. package/dist/runtime-cli.js +26 -0
  124. package/dist/runtime-cli.js.map +1 -0
  125. package/dist/runtime-development.d.ts +73 -0
  126. package/dist/runtime-development.js +30 -0
  127. package/dist/runtime-development.js.map +1 -0
  128. package/dist/runtime-receipt.d.ts +19 -0
  129. package/dist/runtime.d.ts +355 -0
  130. package/dist/runtime.js +42 -0
  131. package/dist/runtime.js.map +1 -0
  132. package/dist/snapshot.d.ts +26 -0
  133. package/dist/snapshot.js +61 -0
  134. package/dist/snapshot.js.map +1 -0
  135. package/dist/spreadsheet-address.d.ts +18 -0
  136. package/dist/spreadsheet-file.d.ts +17 -0
  137. package/dist/spreadsheet-formula.d.ts +67 -0
  138. package/dist/spreadsheet-image.d.ts +17 -0
  139. package/dist/spreadsheet-render.d.ts +5 -0
  140. package/dist/spreadsheet-render.js +752 -0
  141. package/dist/spreadsheet-render.js.map +1 -0
  142. package/dist/spreadsheet-types.d.ts +155 -0
  143. package/dist/spreadsheet-xlsx-api.d.ts +88 -0
  144. package/dist/spreadsheet-xlsx-codec.d.ts +16 -0
  145. package/dist/spreadsheet-xlsx-codec.js +16 -0
  146. package/dist/spreadsheet-xlsx-codec.js.map +1 -0
  147. package/dist/spreadsheet-xlsx-state.d.ts +16 -0
  148. package/dist/spreadsheet.d.ts +724 -0
  149. package/dist/spreadsheet.js +67 -0
  150. package/dist/spreadsheet.js.map +1 -0
  151. package/package.json +129 -0
  152. package/src/bounded-zip.ts +450 -0
  153. package/src/document-docx-api.ts +64 -0
  154. package/src/document-docx-codec.ts +2253 -0
  155. package/src/document-docx-import.ts +3814 -0
  156. package/src/document-docx-packer.ts +72 -0
  157. package/src/document-docx-state.ts +59 -0
  158. package/src/document-render.ts +615 -0
  159. package/src/document.ts +2800 -0
  160. package/src/errors.ts +45 -0
  161. package/src/file-blob.ts +43 -0
  162. package/src/index.ts +4 -0
  163. package/src/inspection.ts +50 -0
  164. package/src/kernel.ts +525 -0
  165. package/src/materializer-cli-entry.ts +11 -0
  166. package/src/materializer-cli.ts +743 -0
  167. package/src/native-raster.ts +141 -0
  168. package/src/native.ts +390 -0
  169. package/src/office-import.ts +243 -0
  170. package/src/presentation-pptx-api.ts +107 -0
  171. package/src/presentation-pptx-import.ts +2065 -0
  172. package/src/presentation-pptx-state-digest.ts +46 -0
  173. package/src/presentation-pptx-state.ts +18 -0
  174. package/src/presentation-pptx-xml.ts +473 -0
  175. package/src/presentation-pptx.ts +447 -0
  176. package/src/presentation-render.ts +532 -0
  177. package/src/presentation.ts +2599 -0
  178. package/src/production-composite.ts +805 -0
  179. package/src/production-document.ts +2 -0
  180. package/src/production-native-codecs.ts +1141 -0
  181. package/src/production-presentation.ts +2 -0
  182. package/src/production-sha256.ts +150 -0
  183. package/src/production-spreadsheet-native.ts +686 -0
  184. package/src/production-spreadsheet.ts +2 -0
  185. package/src/production.ts +1022 -0
  186. package/src/raster-image.ts +586 -0
  187. package/src/reference.ts +17 -0
  188. package/src/runtime-cli-entry.ts +13 -0
  189. package/src/runtime-cli.ts +670 -0
  190. package/src/runtime-development.ts +689 -0
  191. package/src/runtime-receipt.ts +169 -0
  192. package/src/runtime.ts +1463 -0
  193. package/src/snapshot.ts +88 -0
  194. package/src/spreadsheet-address.ts +90 -0
  195. package/src/spreadsheet-file.ts +71 -0
  196. package/src/spreadsheet-formula.ts +1212 -0
  197. package/src/spreadsheet-image.ts +242 -0
  198. package/src/spreadsheet-render.ts +985 -0
  199. package/src/spreadsheet-types.ts +171 -0
  200. package/src/spreadsheet-xlsx-api.ts +123 -0
  201. package/src/spreadsheet-xlsx-codec.ts +3063 -0
  202. package/src/spreadsheet-xlsx-state.ts +191 -0
  203. package/src/spreadsheet.ts +5195 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/document-docx-packer.ts","../src/document-docx-import.ts","../src/document-docx-codec.ts"],"sourcesContent":["/**\n * Narrow adapter around the pinned `docx` compiler.\n *\n * `docx`'s public Packer hard-codes DEFLATE, which can make valid repetitive\n * text exceed our secure importer's 100:1 ceiling. Its pinned compiler already\n * produces a JSZip-compatible archive, so generate those exact OOXML parts as\n * STORE. If that controlled runtime contract changes, fail closed instead of\n * silently shipping a second ZIP implementation or masking the incompatibility.\n */\n\nconst DOCX_MIME_TYPE = \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\";\n\ntype GeneratedDocxZip = {\n forEach(callback: (relativePath: string, entry: { date: Date }) => void): void;\n generateAsync(options: {\n type: \"uint8array\";\n mimeType: string;\n compression: \"STORE\";\n }): Promise<Uint8Array>;\n};\n\ntype DocxCompilerAdapter = {\n compile(\n file: unknown,\n prettify?: undefined,\n overrides?: readonly DocxXmlOverride[],\n ): GeneratedDocxZip;\n};\n\nexport type DocxXmlOverride = { path: string; data: string };\n\nexport class DocxExportCompatibilityError extends Error {\n readonly name = \"DocxExportCompatibilityError\";\n readonly code = \"incompatible_docx_runtime\" as const;\n}\n\nexport async function packDocxWithBoundedCompression(\n file: unknown,\n packer: unknown,\n overrides: readonly DocxXmlOverride[] = [],\n): Promise<Uint8Array> {\n if ((typeof packer !== \"object\" && typeof packer !== \"function\") || packer === null) {\n throw incompatibleRuntime();\n }\n const compiler = Reflect.get(packer, \"compiler\") as Partial<DocxCompilerAdapter> | undefined;\n if (!compiler || typeof compiler.compile !== \"function\") throw incompatibleRuntime();\n const archive = compiler.compile(file, undefined, overrides);\n if (\n !archive ||\n typeof archive.generateAsync !== \"function\" ||\n typeof archive.forEach !== \"function\"\n )\n throw incompatibleRuntime();\n archive.forEach((_path, entry) => {\n // ZIP stores local wall-clock fields. Local 1980-01-01 is the portable DOS\n // epoch and therefore encodes identically regardless of host timezone.\n entry.date = new Date(1980, 0, 1, 0, 0, 0, 0);\n });\n const bytes = await archive.generateAsync({\n type: \"uint8array\",\n mimeType: DOCX_MIME_TYPE,\n compression: \"STORE\",\n });\n if (!(bytes instanceof Uint8Array) || bytes.byteLength === 0) throw incompatibleRuntime();\n return bytes;\n}\n\nfunction incompatibleRuntime(): DocxExportCompatibilityError {\n return new DocxExportCompatibilityError(\n \"The pinned DOCX runtime no longer exposes the verified bounded-compression compiler adapter\",\n );\n}\n","/**\n * A dependency-free, browser-safe DOCX reader.\n *\n * This module deliberately returns a neutral DTO. The editable document model\n * can consume that DTO without making the ZIP/XML reader depend on it (or on a\n * Node-only OOXML library). Unsupported fidelity-bearing content fails closed.\n */\n\nimport {\n inflateBoundedZipEntry,\n parseBoundedZip,\n type BoundedZipEntry,\n type BoundedZipFailure,\n} from \"./bounded-zip\";\nimport type {\n DocumentOpaqueContent,\n DocumentOpaqueContentType,\n DocumentOpaqueRelationship,\n} from \"./document-docx-api\";\n\nexport type DocxImportLimits = {\n maxCompressedBytes: number;\n maxEntries: number;\n maxEntryCompressedBytes: number;\n maxEntryUncompressedBytes: number;\n maxTotalUncompressedBytes: number;\n maxCompressionRatio: number;\n maxXmlBytes: number;\n maxTotalXmlBytes: number;\n maxRetainedXmlCharacters: number;\n maxXmlNodes: number;\n maxXmlDepth: number;\n maxXmlAttributesPerElement: number;\n maxRelationshipsPerPart: number;\n maxTotalRelationships: number;\n maxBlocks: number;\n maxTextCharacters: number;\n maxSections: number;\n maxProjectedStoryBlocks: number;\n maxProjectedStoryCharacters: number;\n maxStyles: number;\n maxStyleInheritanceDepth: number;\n maxNumberingDefinitions: number;\n maxComments: number;\n maxProjectedCommentWork: number;\n};\n\nexport type DocxImportErrorCode =\n | \"invalid_input\"\n | \"invalid_zip\"\n | \"limit_exceeded\"\n | \"invalid_xml\"\n | \"invalid_package\"\n | \"unsupported_feature\"\n | \"unsupported_platform\";\n\nexport class DocxImportError extends Error {\n readonly name = \"DocxImportError\";\n constructor(\n readonly code: DocxImportErrorCode,\n message: string,\n readonly partName?: string,\n ) {\n super(partName ? `${message} (${partName})` : message);\n }\n}\n\nexport type ImportedDocument = {\n format: \"docx\";\n schemaVersion: 1;\n evenAndOddHeaders: boolean;\n trackRevisions: boolean;\n blocks: ImportedBlock[];\n sections: ImportedSection[];\n styles: ImportedStyle[];\n lists: ImportedListDefinition[];\n headers: ImportedHeaderFooter[];\n footers: ImportedHeaderFooter[];\n comments: ImportedComment[];\n trackedChanges: ImportedTrackedChange[];\n opaqueContent: DocumentOpaqueContent;\n};\n\nexport type ImportedBlock = ImportedParagraph | ImportedTable | ImportedPageBreak;\n\nexport type ImportedParagraph = {\n kind: \"paragraph\";\n id: string;\n styleId?: string;\n style: ImportedParagraphStyle;\n inlines: ImportedInline[];\n commentAnchors: ImportedCommentAnchor[];\n};\n\nexport type ImportedInline = ImportedRun | ImportedPageBreak;\n\nexport type ImportedRun = {\n kind: \"run\";\n text: string;\n styleId?: string;\n style: ImportedRunStyle;\n changeId?: string;\n};\n\nexport type ImportedPageBreak = { kind: \"pageBreak\" };\n\nexport type ImportedTable = {\n kind: \"table\";\n id: string;\n styleId?: string;\n width?: ImportedMeasure;\n indent?: ImportedMeasure;\n alignment?: string;\n layout?: \"fixed\" | \"autofit\";\n cellMargins?: ImportedBoxMeasures;\n borders?: ImportedTableBorders;\n gridColumnWidthsPt: number[];\n rows: ImportedTableRow[];\n};\n\nexport type ImportedTableRow = {\n header: boolean;\n cannotSplit: boolean;\n heightPt?: number;\n heightRule?: \"auto\" | \"atLeast\" | \"exact\";\n cells: ImportedTableCell[];\n};\n\nexport type ImportedTableCell = {\n width?: ImportedMeasure;\n margins?: ImportedBoxMeasures;\n columnSpan: number;\n verticalMerge?: \"restart\" | \"continue\";\n verticalAlignment?: string;\n fill?: string;\n blocks: ImportedBlock[];\n};\n\nexport type ImportedMeasure = { value: number; unit: \"pt\" | \"percent\" | \"auto\" };\n\nexport type ImportedBoxMeasures = {\n top?: ImportedMeasure;\n right?: ImportedMeasure;\n bottom?: ImportedMeasure;\n left?: ImportedMeasure;\n start?: ImportedMeasure;\n end?: ImportedMeasure;\n};\n\nexport type ImportedBorder = {\n style: string;\n color?: string;\n sizePt?: number;\n spacePt?: number;\n shadow?: boolean;\n frame?: boolean;\n};\n\nexport type ImportedTableBorders = {\n top?: ImportedBorder;\n right?: ImportedBorder;\n bottom?: ImportedBorder;\n left?: ImportedBorder;\n insideHorizontal?: ImportedBorder;\n insideVertical?: ImportedBorder;\n};\n\nexport type ImportedParagraphStyle = {\n alignment?: string;\n spaceBeforePt?: number;\n spaceAfterPt?: number;\n line?: number;\n lineRule?: string;\n indentLeftPt?: number;\n indentRightPt?: number;\n firstLinePt?: number;\n hangingPt?: number;\n keepNext?: boolean;\n keepLines?: boolean;\n pageBreakBefore?: boolean;\n outlineLevel?: number;\n bidirectional?: boolean;\n list?: { numId: string; level: number };\n};\n\nexport type ImportedRunStyle = {\n fontFamily?: string;\n fontSizePt?: number;\n fontSizeComplexScriptPt?: number;\n color?: string;\n bold?: boolean;\n boldComplexScript?: boolean;\n italic?: boolean;\n italicComplexScript?: boolean;\n underline?: string;\n strike?: boolean;\n highlight?: string;\n verticalAlign?: string;\n language?: string;\n};\n\nexport type ImportedStyle = {\n styleId: string;\n kind: string;\n name?: string;\n basedOn?: string;\n next?: string;\n isDefault: boolean;\n paragraph: ImportedParagraphStyle;\n run: ImportedRunStyle;\n};\n\nexport type ImportedListLevel = {\n level: number;\n start: number;\n restart?: number;\n legal?: boolean;\n alignment?: string;\n format?: string;\n text?: string;\n suffix?: string;\n paragraphStyleId?: string;\n paragraph: ImportedParagraphStyle;\n run: ImportedRunStyle;\n};\n\nexport type ImportedListDefinition = {\n numId: string;\n abstractNumId: string;\n levels: ImportedListLevel[];\n overrides: Array<{ level: number; start?: number; definition?: ImportedListLevel }>;\n};\n\nexport type ImportedSection = {\n startBlockIndex: number;\n endBlockIndex: number;\n type?: string;\n titlePage: boolean;\n page: {\n widthPt: number;\n heightPt: number;\n orientation?: string;\n marginTopPt: number;\n marginRightPt: number;\n marginBottomPt: number;\n marginLeftPt: number;\n headerPt: number;\n footerPt: number;\n gutterPt: number;\n };\n headers: ImportedSectionReference[];\n footers: ImportedSectionReference[];\n};\n\nexport type ImportedSectionReference = {\n kind: string;\n relationshipId: string;\n partName: string;\n};\n\nexport type ImportedHeaderFooter = {\n kind: \"header\" | \"footer\";\n partName: string;\n blocks: ImportedBlock[];\n};\n\nexport type ImportedCommentAnchor = {\n commentId: string;\n kind: \"start\" | \"end\" | \"reference\";\n textOffset: number;\n};\n\nexport type ImportedComment = {\n id: string;\n parentId?: string;\n resolved?: boolean;\n author?: string;\n initials?: string;\n createdAt?: string;\n blocks: ImportedBlock[];\n};\n\nexport type ImportedTrackedChange = {\n id: string;\n kind: \"insert\" | \"delete\";\n author?: string;\n createdAt?: string;\n blockId: string;\n startInlineIndex: number;\n endInlineIndex: number;\n startTextOffset: number;\n endTextOffset: number;\n};\n\nconst DEFAULT_LIMITS: DocxImportLimits = {\n maxCompressedBytes: 32 * 1024 * 1024,\n maxEntries: 1_024,\n maxEntryCompressedBytes: 16 * 1024 * 1024,\n maxEntryUncompressedBytes: 24 * 1024 * 1024,\n maxTotalUncompressedBytes: 64 * 1024 * 1024,\n maxCompressionRatio: 100,\n maxXmlBytes: 16 * 1024 * 1024,\n maxTotalXmlBytes: 32 * 1024 * 1024,\n maxRetainedXmlCharacters: 16_000_000,\n maxXmlNodes: 100_000,\n maxXmlDepth: 128,\n maxXmlAttributesPerElement: 256,\n maxRelationshipsPerPart: 10_000,\n maxTotalRelationships: 100_000,\n maxBlocks: 100_000,\n maxTextCharacters: 10_000_000,\n maxSections: 4_096,\n maxProjectedStoryBlocks: 200_000,\n maxProjectedStoryCharacters: 20_000_000,\n maxStyles: 10_000,\n maxStyleInheritanceDepth: 64,\n maxNumberingDefinitions: 20_000,\n maxComments: 10_000,\n maxProjectedCommentWork: 1_000_000,\n};\n\nconst WORD_RELATIONSHIP_BASE =\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/\";\nconst PACKAGE_RELATIONSHIP_BASE =\n \"http://schemas.openxmlformats.org/package/2006/relationships/metadata/\";\nconst WORDPROCESSINGML_NAMESPACE = \"http://schemas.openxmlformats.org/wordprocessingml/2006/main\";\nconst CONTENT_TYPES_NAMESPACE = \"http://schemas.openxmlformats.org/package/2006/content-types\";\nconst RELATIONSHIPS_NAMESPACE = \"http://schemas.openxmlformats.org/package/2006/relationships\";\nconst COMMENTS_EXTENDED_NAMESPACE = \"http://schemas.microsoft.com/office/word/2012/wordml\";\n\ntype ZipEntry = BoundedZipEntry;\n\ntype XmlNode = XmlElement | XmlText;\ntype XmlElement = {\n type: \"element\";\n name: string;\n localName: string;\n attributes: ReadonlyMap<string, string>;\n children: XmlNode[];\n};\ntype XmlText = { type: \"text\"; value: string };\n\ntype Relationship = {\n id: string;\n type: string;\n target: string;\n sourcePart: string;\n partName: string;\n};\n\ntype ImportBudget = {\n limits: DocxImportLimits;\n xmlBytes: number;\n xmlRetainedCharacters: number;\n xmlNodes: number;\n blocks: number;\n textCharacters: number;\n nextBlockId: number;\n};\n\ntype ParseContext = {\n budget: ImportBudget;\n trackedChanges: ImportedTrackedChange[];\n idPrefix: string;\n};\n\n/**\n * Imports the fidelity-bearing, editable WordprocessingML subset into a neutral\n * DTO. The function has no Node imports and is suitable for a browser worker.\n */\nexport async function importDocx(\n input: Blob | ArrayBuffer,\n options: Partial<DocxImportLimits> = {},\n): Promise<ImportedDocument> {\n const limits = resolveLimits(options);\n const bytes = await readInput(input, limits.maxCompressedBytes);\n const entries = parseZipDirectory(bytes, limits);\n const opaqueParts = validatePartNames(entries);\n const entriesByName = new Map(\n entries.filter((entry) => !entry.directory).map((entry) => [entry.name, entry]),\n );\n const partNames = new Set(entriesByName.keys());\n validatePackageParts(partNames);\n\n const budget: ImportBudget = {\n limits,\n xmlBytes: 0,\n xmlRetainedCharacters: 0,\n xmlNodes: 0,\n blocks: 0,\n textCharacters: 0,\n nextBlockId: 1,\n };\n const parsedParts = new Set<string>();\n const readXml = async (partName: string): Promise<XmlElement> => {\n const entry = entriesByName.get(partName);\n if (!entry)\n throw new DocxImportError(\"invalid_package\", \"Required DOCX part is missing\", partName);\n if (parsedParts.has(partName)) {\n throw new DocxImportError(\n \"invalid_package\",\n \"DOCX part was consumed more than once\",\n partName,\n );\n }\n parsedParts.add(partName);\n // Inflate and parse one part at a time. The expanded byte buffer and XML\n // source string become collectible as soon as this consumer returns; no\n // archive-wide expanded-parts or parsed-tree cache is retained.\n const value = await inflateBoundedZipEntry(\n bytes,\n entry,\n limits.maxEntryUncompressedBytes,\n docxZipFailure,\n );\n return parseXmlPart(value, partName, budget);\n };\n\n // Validate ignored metadata/theme/config one part at a time, without retaining\n // either its expanded bytes or parsed tree. Ignored semantics cannot become a\n // budget or entity-expansion bypass.\n for (const partName of partNames) {\n if (isSyntaxOnlyXmlPart(partName) || (opaqueParts.has(partName) && partName.endsWith(\".xml\")))\n await readXml(partName);\n }\n\n const contentTypes = await readXml(\"[Content_Types].xml\");\n const contentTypeByPart = validateContentTypes(contentTypes, partNames);\n const opaqueContentTypes: DocumentOpaqueContentType[] = [];\n for (const partName of opaqueParts) {\n const contentType = contentTypeByPart.get(partName);\n if (!contentType || !isSafeOpaqueContentType(partName, contentType)) {\n throw new DocxImportError(\n \"unsupported_feature\",\n `Opaque DOCX part has an unsupported content type: ${contentType ?? \"missing\"}`,\n partName,\n );\n }\n opaqueContentTypes.push({ partName, contentType });\n }\n if (partNames.has(\"word/footnotes.xml\"))\n validateEmptyNotePart(await readXml(\"word/footnotes.xml\"), \"footnote\", \"word/footnotes.xml\");\n if (partNames.has(\"word/endnotes.xml\"))\n validateEmptyNotePart(await readXml(\"word/endnotes.xml\"), \"endnote\", \"word/endnotes.xml\");\n const settings = partNames.has(\"word/settings.xml\")\n ? validateSettings(await readXml(\"word/settings.xml\"))\n : { evenAndOddHeaders: false, trackRevisions: false };\n let totalRelationships = 0;\n const readRelationships = async (partName: string): Promise<Relationship[]> => {\n const parsed = parseRelationships(\n await readXml(partName),\n partName,\n limits.maxRelationshipsPerPart,\n );\n if (totalRelationships + parsed.length > limits.maxTotalRelationships) {\n throw limitError(\"DOCX exceeds maxTotalRelationships\", partName);\n }\n totalRelationships += parsed.length;\n return parsed;\n };\n const rootRelationships = await readRelationships(\"_rels/.rels\");\n const officeDocuments = rootRelationships.filter(\n (relationship) => relationship.type === `${WORD_RELATIONSHIP_BASE}officeDocument`,\n );\n const officeDocument = officeDocuments[0];\n if (\n officeDocuments.length !== 1 ||\n !officeDocument ||\n officeDocument.partName !== \"word/document.xml\"\n ) {\n throw new DocxImportError(\n \"invalid_package\",\n \"DOCX officeDocument must target word/document.xml\",\n \"_rels/.rels\",\n );\n }\n\n const documentRelationships = partNames.has(\"word/_rels/document.xml.rels\")\n ? await readRelationships(\"word/_rels/document.xml.rels\")\n : [];\n const auxiliaryRelationships: Relationship[] = [];\n for (const partName of partNames) {\n if (\n !partName.endsWith(\".rels\") ||\n partName === \"_rels/.rels\" ||\n partName === \"word/_rels/document.xml.rels\"\n )\n continue;\n for (const relationship of await readRelationships(partName))\n auxiliaryRelationships.push(relationship);\n }\n const allRelationships = [\n ...rootRelationships,\n ...documentRelationships,\n ...auxiliaryRelationships,\n ];\n const opaqueRelationships = validateRelationships(allRelationships, opaqueParts);\n for (const relationship of allRelationships) {\n if (!partNames.has(relationship.partName)) {\n throw new DocxImportError(\n \"invalid_package\",\n \"Relationship targets a missing package part\",\n relationship.partName,\n );\n }\n }\n validateRelationshipCoverage(partNames, allRelationships);\n const relationshipById = new Map(\n documentRelationships.map((relationship) => [relationship.id, relationship]),\n );\n\n const styles = partNames.has(\"word/styles.xml\")\n ? parseStyles(await readXml(\"word/styles.xml\"), limits)\n : [];\n const lists = partNames.has(\"word/numbering.xml\")\n ? parseNumbering(await readXml(\"word/numbering.xml\"), limits)\n : [];\n const trackedChanges: ImportedTrackedChange[] = [];\n const mainContext: ParseContext = { budget, trackedChanges, idPrefix: \"body\" };\n const main = parseMainDocument(await readXml(\"word/document.xml\"), mainContext, relationshipById);\n resolveSectionStoryInheritance(main.sections);\n\n const headers: ImportedHeaderFooter[] = [];\n const footers: ImportedHeaderFooter[] = [];\n const parsedStoryParts = new Set<string>();\n for (const relationship of documentRelationships) {\n const kind =\n relationship.type === `${WORD_RELATIONSHIP_BASE}header`\n ? \"header\"\n : relationship.type === `${WORD_RELATIONSHIP_BASE}footer`\n ? \"footer\"\n : undefined;\n if (!kind) continue;\n if (parsedStoryParts.has(relationship.partName)) continue;\n parsedStoryParts.add(relationship.partName);\n const root = await readXml(relationship.partName);\n requireLocalName(root, kind === \"header\" ? \"hdr\" : \"ftr\", relationship.partName);\n requireWordNamespace(root, relationship.partName);\n const context: ParseContext = {\n budget,\n trackedChanges,\n idPrefix: `${kind}:${relationship.partName}`,\n };\n const blocks = parseBlockContainer(root, context);\n (kind === \"header\" ? headers : footers).push({ kind, partName: relationship.partName, blocks });\n }\n validateProjectedStories(\n main.sections,\n headers,\n footers,\n limits.maxProjectedStoryBlocks,\n limits.maxProjectedStoryCharacters,\n );\n\n const commentsExtended = partNames.has(\"word/commentsExtended.xml\")\n ? parseCommentsExtended(await readXml(\"word/commentsExtended.xml\"), limits.maxComments)\n : new Map<string, ExtendedComment>();\n const comments = partNames.has(\"word/comments.xml\")\n ? parseComments(\n await readXml(\"word/comments.xml\"),\n { budget, trackedChanges, idPrefix: \"comment\" },\n commentsExtended,\n limits.maxComments,\n )\n : [];\n if (commentsExtended.size > 0 && comments.length === 0) {\n throw new DocxImportError(\n \"invalid_package\",\n \"commentsExtended.xml exists without comments.xml\",\n \"word/commentsExtended.xml\",\n );\n }\n validateCommentReferences(main.blocks, headers, footers, comments);\n const rootCommentCount = comments.reduce(\n (count, comment) => count + Number(comment.parentId === undefined),\n 0,\n );\n if (\n rootCommentCount > 0 &&\n rootCommentCount * (budget.blocks + comments.length) > limits.maxProjectedCommentWork\n ) {\n throw limitError(\"DOCX exceeds maxProjectedCommentWork\", \"word/comments.xml\");\n }\n\n return {\n format: \"docx\",\n schemaVersion: 1,\n evenAndOddHeaders: settings.evenAndOddHeaders,\n trackRevisions: settings.trackRevisions,\n blocks: main.blocks,\n sections: main.sections,\n styles,\n lists,\n headers,\n footers,\n comments,\n trackedChanges,\n opaqueContent: {\n parts: [...opaqueParts].sort(compareStrings),\n relationships: opaqueRelationships\n .map(({ sourcePart, type, partName }) => ({ sourcePart, type, targetPart: partName }))\n .sort(compareOpaqueRelationships),\n contentTypes: opaqueContentTypes.sort(compareOpaqueContentTypes),\n },\n };\n}\n\nfunction resolveLimits(options: Partial<DocxImportLimits>): DocxImportLimits {\n if (\n options === null ||\n typeof options !== \"object\" ||\n Array.isArray(options) ||\n Object.getPrototypeOf(options) !== Object.prototype ||\n Object.getOwnPropertySymbols(options).length > 0\n )\n throw new DocxImportError(\"invalid_input\", \"DOCX import limits must be a plain data object\");\n for (const [name, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(options))) {\n if (!(\"value\" in descriptor) || !descriptor.enumerable) {\n throw new DocxImportError(\n \"invalid_input\",\n \"DOCX import limits must contain only enumerable data properties\",\n );\n }\n if (!Object.prototype.hasOwnProperty.call(DEFAULT_LIMITS, name)) {\n throw new DocxImportError(\"invalid_input\", `Unknown DOCX import limit: ${name}`);\n }\n }\n const limits = { ...DEFAULT_LIMITS, ...options };\n for (const [name, value] of Object.entries(limits)) {\n if (\n !Number.isFinite(value) ||\n value <= 0 ||\n (name !== \"maxCompressionRatio\" && !Number.isInteger(value))\n ) {\n throw new DocxImportError(\"invalid_input\", `Invalid DOCX import limit: ${name}`);\n }\n }\n // Limits are caller-tightenable, never caller-expandable. This keeps every\n // public invocation inside the browser-safe envelope audited here.\n for (const [name, cap] of Object.entries(DEFAULT_LIMITS) as Array<\n [keyof DocxImportLimits, number]\n >) {\n if (limits[name] > cap)\n throw new DocxImportError(\n \"invalid_input\",\n `${name} cannot exceed the hard safety cap of ${cap}`,\n );\n }\n return limits;\n}\n\nasync function readInput(input: Blob | ArrayBuffer, maxBytes: number): Promise<Uint8Array> {\n if (input instanceof ArrayBuffer) {\n if (input.byteLength > maxBytes) throw limitError(\"Compressed DOCX exceeds maxCompressedBytes\");\n return new Uint8Array(input);\n }\n if (typeof Blob !== \"undefined\" && input instanceof Blob) {\n if (input.size > maxBytes) throw limitError(\"Compressed DOCX exceeds maxCompressedBytes\");\n return new Uint8Array(await input.arrayBuffer());\n }\n throw new DocxImportError(\"invalid_input\", \"DOCX input must be a Blob or ArrayBuffer\");\n}\n\nfunction parseZipDirectory(bytes: Uint8Array, limits: DocxImportLimits): ZipEntry[] {\n return parseBoundedZip(\n bytes,\n {\n entries: limits.maxEntries,\n compressedEntryBytes: limits.maxEntryCompressedBytes,\n expandedEntryBytes: limits.maxEntryUncompressedBytes,\n expandedBytes: limits.maxTotalUncompressedBytes,\n compressionRatio: limits.maxCompressionRatio,\n },\n docxZipFailure,\n );\n}\n\nfunction docxZipFailure(\n kind: Parameters<BoundedZipFailure>[0],\n message: string,\n partName?: string,\n): never {\n const code: DocxImportErrorCode =\n kind === \"limit\"\n ? \"limit_exceeded\"\n : kind === \"invalid\"\n ? \"invalid_zip\"\n : kind === \"platform\"\n ? \"unsupported_platform\"\n : \"unsupported_feature\";\n throw new DocxImportError(code, message, partName);\n}\n\nfunction validatePartNames(parts: readonly ZipEntry[]): Set<string> {\n const opaqueParts = new Set<string>();\n for (const entry of parts) {\n if (entry.directory) continue;\n const name = entry.name;\n const supported =\n name === \"[Content_Types].xml\" ||\n name === \"_rels/.rels\" ||\n /^docProps\\/(?:core|app|custom)\\.xml$/.test(name) ||\n name === \"word/document.xml\" ||\n name === \"word/styles.xml\" ||\n name === \"word/numbering.xml\" ||\n name === \"word/comments.xml\" ||\n name === \"word/commentsExtended.xml\" ||\n name === \"word/footnotes.xml\" ||\n name === \"word/endnotes.xml\" ||\n name === \"word/settings.xml\" ||\n name === \"word/webSettings.xml\" ||\n name === \"word/fontTable.xml\" ||\n /^word\\/theme\\/theme\\d+\\.xml$/.test(name) ||\n /^word\\/(?:header|footer)\\d+\\.xml$/.test(name) ||\n /^word\\/_rels\\/(?:document|header\\d+|footer\\d+|footnotes|endnotes|comments|fontTable)\\.xml\\.rels$/.test(\n name,\n );\n if (supported) {\n if (isSyntaxOnlyXmlPart(name)) opaqueParts.add(name);\n continue;\n }\n if (isSafeOpaquePartName(name)) {\n opaqueParts.add(name);\n continue;\n }\n const active =\n /(?:^|\\/)(?:vbaProject|macros?|activeX|embeddings|oleObject|customUI|webExtensions?|signatures?|drm|encryptedPackage)(?:\\/|\\.|$)/i.test(\n name,\n );\n const media = /(?:^|\\/)media(?:\\/|$)|\\.(?:png|jpe?g|gif|webp|svg|emf|wmf|tiff?|bmp|bin)$/i.test(\n name,\n );\n throw new DocxImportError(\n \"unsupported_feature\",\n active\n ? \"Active, executable, embedded, encrypted, or signed DOCX content is unsupported\"\n : media\n ? \"DOCX media is not represented by the editable document model\"\n : \"DOCX part is neither represented nor in the inert opaque-part allowlist\",\n name,\n );\n }\n return opaqueParts;\n}\n\nfunction isSafeOpaquePartName(partName: string): boolean {\n return (\n /^customXml\\/item\\d+\\.xml$/.test(partName) ||\n /^customXml\\/itemProps\\d+\\.xml$/.test(partName) ||\n /^customXml\\/_rels\\/item\\d+\\.xml\\.rels$/.test(partName) ||\n partName === \"word/glossary/document.xml\" ||\n partName === \"word/glossary/_rels/document.xml.rels\"\n );\n}\n\nfunction validatePackageParts(parts: ReadonlySet<string>): void {\n for (const required of [\"[Content_Types].xml\", \"_rels/.rels\", \"word/document.xml\"]) {\n if (!parts.has(required))\n throw new DocxImportError(\"invalid_package\", \"Required DOCX part is missing\", required);\n }\n}\n\nfunction isSyntaxOnlyXmlPart(partName: string): boolean {\n return (\n /^docProps\\/(?:core|app|custom)\\.xml$/.test(partName) ||\n partName === \"word/webSettings.xml\" ||\n partName === \"word/fontTable.xml\" ||\n /^word\\/theme\\/theme\\d+\\.xml$/.test(partName)\n );\n}\n\nfunction parseXmlPart(bytes: Uint8Array, partName: string, budget: ImportBudget): XmlElement {\n if (bytes.byteLength > budget.limits.maxXmlBytes)\n throw limitError(\"XML part exceeds maxXmlBytes\", partName);\n budget.xmlBytes += bytes.byteLength;\n if (budget.xmlBytes > budget.limits.maxTotalXmlBytes)\n throw limitError(\"DOCX exceeds maxTotalXmlBytes\", partName);\n const xml = decodeUtf8(bytes, \"XML\", partName);\n if (/<!\\s*(?:DOCTYPE|ENTITY)\\b/i.test(xml)) {\n throw new DocxImportError(\n \"invalid_xml\",\n \"DOCTYPE and entity declarations are forbidden\",\n partName,\n );\n }\n const parsed = parseXml(\n xml,\n partName,\n budget.limits.maxXmlDepth,\n budget.limits.maxXmlNodes - budget.xmlNodes,\n budget.limits.maxRetainedXmlCharacters - budget.xmlRetainedCharacters,\n budget.limits.maxXmlAttributesPerElement,\n partName.endsWith(\".rels\") ? budget.limits.maxRelationshipsPerPart : undefined,\n );\n validateNamespaceWellFormedness(parsed.root, partName);\n budget.xmlNodes += parsed.nodeCount;\n if (budget.xmlNodes > budget.limits.maxXmlNodes)\n throw limitError(\"DOCX exceeds maxXmlNodes\", partName);\n budget.xmlRetainedCharacters += parsed.retainedCharacters;\n if (budget.xmlRetainedCharacters > budget.limits.maxRetainedXmlCharacters) {\n throw limitError(\"DOCX exceeds maxRetainedXmlCharacters\", partName);\n }\n return parsed.root;\n}\n\nfunction parseXml(\n xml: string,\n partName: string,\n maxDepth: number,\n remainingNodes: number,\n remainingRetainedCharacters: number,\n maxAttributesPerElement: number,\n maxRootElementChildren: number | undefined,\n): { root: XmlElement; nodeCount: number; retainedCharacters: number } {\n const stack: XmlElement[] = [];\n let root: XmlElement | undefined;\n let cursor = 0;\n let nodeCount = 0;\n let retainedCharacters = 0;\n let sawXmlDeclaration = false;\n let rootElementChildren = 0;\n const addNode = (node: XmlNode): void => {\n nodeCount += 1;\n if (nodeCount > remainingNodes) throw limitError(\"DOCX exceeds maxXmlNodes\", partName);\n retainedCharacters += retainedXmlCharacters(node);\n if (retainedCharacters > remainingRetainedCharacters) {\n throw limitError(\"DOCX exceeds maxRetainedXmlCharacters\", partName);\n }\n const parent = stack.at(-1);\n if (parent) {\n if (parent === root && node.type === \"element\" && maxRootElementChildren !== undefined) {\n if (rootElementChildren >= maxRootElementChildren) {\n throw limitError(\"Relationships part exceeds maxRelationshipsPerPart\", partName);\n }\n rootElementChildren += 1;\n }\n parent.children.push(node);\n } else if (node.type === \"text\" && isOnlyXmlWhitespace(node.value)) return;\n else if (node.type === \"element\" && !root) root = node;\n else\n throw new DocxImportError(\n \"invalid_xml\",\n \"XML has multiple roots or text outside the root\",\n partName,\n );\n };\n while (cursor < xml.length) {\n const opening = xml.indexOf(\"<\", cursor);\n if (opening < 0) {\n const tail = xml.slice(cursor);\n if (tail.length > 0) addNode({ type: \"text\", value: decodeXmlEntities(tail, partName) });\n cursor = xml.length;\n break;\n }\n if (opening > cursor)\n addNode({ type: \"text\", value: decodeXmlEntities(xml.slice(cursor, opening), partName) });\n if (xml.startsWith(\"<!--\", opening)) {\n const end = xml.indexOf(\"-->\", opening + 4);\n const content = end < 0 ? \"\" : xml.slice(opening + 4, end);\n if (end < 0 || content.includes(\"--\") || content.endsWith(\"-\"))\n throw new DocxImportError(\"invalid_xml\", \"Malformed XML comment\", partName);\n validateXmlCharacters(content, partName);\n cursor = end + 3;\n continue;\n }\n if (xml.startsWith(\"<?\", opening)) {\n const end = xml.indexOf(\"?>\", opening + 2);\n if (end < 0)\n throw new DocxImportError(\"invalid_xml\", \"Malformed XML processing instruction\", partName);\n const instruction = xml.slice(opening + 2, end);\n const validDeclaration =\n /^xml[\\x20\\t\\r\\n]+version=(?:\"1\\.[01]\"|'1\\.[01]')(?:[\\x20\\t\\r\\n]+encoding=(?:\"[Uu][Tt][Ff]-8\"|'[Uu][Tt][Ff]-8'))?(?:[\\x20\\t\\r\\n]+standalone=(?:\"(?:yes|no)\"|'(?:yes|no)'))?[\\x20\\t\\r\\n]*$/.test(\n instruction,\n );\n if (!validDeclaration || opening !== 0 || root || stack.length > 0 || sawXmlDeclaration) {\n throw new DocxImportError(\n \"invalid_xml\",\n \"XML processing instructions are unsupported\",\n partName,\n );\n }\n sawXmlDeclaration = true;\n cursor = end + 2;\n continue;\n }\n if (xml.startsWith(\"<!\", opening))\n throw new DocxImportError(\n \"invalid_xml\",\n \"XML declarations and CDATA are unsupported\",\n partName,\n );\n const end = findXmlTagEnd(xml, opening + 1, partName);\n const source = xml.slice(opening + 1, end);\n if (source.startsWith(\"/\")) {\n const closing = /^\\/([^\\x20\\t\\r\\n]+)[\\x20\\t\\r\\n]*$/.exec(source);\n const name = closing?.[1];\n if (!name || !XML_QNAME.test(name))\n throw new DocxImportError(\"invalid_xml\", \"Malformed XML closing tag\", partName);\n const current = stack.pop();\n if (!current || current.name !== name)\n throw new DocxImportError(\"invalid_xml\", \"Mismatched XML closing tag\", partName);\n } else {\n if (isXmlSpace(source[0]))\n throw new DocxImportError(\"invalid_xml\", \"XML start tag has leading whitespace\", partName);\n const selfClosing = /\\/[\\x20\\t\\r\\n]*$/.test(source);\n const element = parseXmlStartTag(\n selfClosing ? source.replace(/\\/[\\x20\\t\\r\\n]*$/, \"\") : source,\n partName,\n maxAttributesPerElement,\n );\n addNode(element);\n if (!selfClosing) {\n stack.push(element);\n if (stack.length > maxDepth) throw limitError(\"XML exceeds maxXmlDepth\", partName);\n }\n }\n cursor = end + 1;\n }\n if (stack.length > 0)\n throw new DocxImportError(\"invalid_xml\", \"XML document ended with unclosed elements\", partName);\n if (!root) throw new DocxImportError(\"invalid_xml\", \"XML root element is missing\", partName);\n return { root, nodeCount, retainedCharacters };\n}\n\nfunction retainedXmlCharacters(node: XmlNode): number {\n if (node.type === \"text\") return node.value.length;\n let characters = node.name.length + node.localName.length;\n for (const [name, value] of node.attributes) characters += name.length + value.length;\n return characters;\n}\n\nfunction findXmlTagEnd(xml: string, start: number, partName: string): number {\n let quote: string | undefined;\n for (let index = start; index < xml.length; index += 1) {\n const character = xml[index];\n if (quote) {\n if (character === quote) quote = undefined;\n } else if (character === '\"' || character === \"'\") quote = character;\n else if (character === \">\") return index;\n }\n throw new DocxImportError(\"invalid_xml\", \"Unterminated XML tag\", partName);\n}\n\nfunction parseXmlStartTag(source: string, partName: string, maxAttributes: number): XmlElement {\n let cursor = 0;\n const skipSpace = (): void => {\n while (cursor < source.length && isXmlSpace(source[cursor])) cursor += 1;\n };\n skipSpace();\n const nameStart = cursor;\n while (cursor < source.length && !isXmlSpace(source[cursor])) cursor += 1;\n const name = source.slice(nameStart, cursor);\n if (!XML_QNAME.test(name))\n throw new DocxImportError(\"invalid_xml\", \"Invalid XML element name\", partName);\n const attributes = new Map<string, string>();\n const localAttributeNames = new Set<string>();\n while (cursor < source.length) {\n if (!isXmlSpace(source[cursor]))\n throw new DocxImportError(\n \"invalid_xml\",\n \"XML attributes must be separated by whitespace\",\n partName,\n );\n skipSpace();\n if (cursor >= source.length) break;\n const attributeStart = cursor;\n while (cursor < source.length && !isXmlSpace(source[cursor]) && source[cursor] !== \"=\")\n cursor += 1;\n const attributeName = source.slice(attributeStart, cursor);\n if (!XML_QNAME.test(attributeName))\n throw new DocxImportError(\"invalid_xml\", \"Invalid XML attribute name\", partName);\n skipSpace();\n if (source[cursor] !== \"=\")\n throw new DocxImportError(\"invalid_xml\", \"XML attribute lacks a value\", partName);\n cursor += 1;\n skipSpace();\n const quote = source[cursor];\n if (quote !== '\"' && quote !== \"'\")\n throw new DocxImportError(\"invalid_xml\", \"XML attribute value must be quoted\", partName);\n cursor += 1;\n const valueStart = cursor;\n const valueEnd = source.indexOf(quote, valueStart);\n if (valueEnd < 0)\n throw new DocxImportError(\"invalid_xml\", \"Unterminated XML attribute value\", partName);\n if (attributes.has(attributeName))\n throw new DocxImportError(\"invalid_xml\", \"Duplicate XML attribute\", partName);\n if (attributes.size >= maxAttributes)\n throw limitError(\"XML element exceeds maxXmlAttributesPerElement\", partName);\n const attributeLocalName = localName(attributeName);\n const namespaceDeclaration = attributeName === \"xmlns\" || attributeName.startsWith(\"xmlns:\");\n if (!namespaceDeclaration && localAttributeNames.has(attributeLocalName)) {\n throw new DocxImportError(\n \"invalid_xml\",\n \"Ambiguous namespace-local XML attributes\",\n partName,\n );\n }\n localAttributeNames.add(attributeLocalName);\n const rawValue = source.slice(valueStart, valueEnd);\n if (rawValue.includes(\"<\"))\n throw new DocxImportError(\n \"invalid_xml\",\n \"XML attribute contains an unescaped less-than sign\",\n partName,\n );\n attributes.set(attributeName, decodeXmlEntities(rawValue, partName));\n cursor = valueEnd + 1;\n }\n return { type: \"element\", name, localName: localName(name), attributes, children: [] };\n}\n\n// Deliberately ASCII: OOXML uses ASCII QNames, and accepting the full XML\n// Unicode Name production would add a large parser surface for no fidelity.\n// A QName has at most one colon and non-empty NCName components.\nconst XML_QNAME = /^(?:[A-Za-z_][A-Za-z0-9_.-]*:)?[A-Za-z_][A-Za-z0-9_.-]*$/;\n\nfunction isXmlSpace(value: string | undefined): boolean {\n return value === \" \" || value === \"\\t\" || value === \"\\r\" || value === \"\\n\";\n}\n\nfunction isOnlyXmlWhitespace(value: string): boolean {\n for (let index = 0; index < value.length; index += 1) if (!isXmlSpace(value[index])) return false;\n return true;\n}\n\nfunction decodeXmlEntities(value: string, partName: string): string {\n validateXmlCharacters(value, partName);\n if (value.includes(\"]]>\"))\n throw new DocxImportError(\"invalid_xml\", \"XML contains malformed character data\", partName);\n let ampersand = value.indexOf(\"&\");\n if (ampersand < 0) return value;\n const output: string[] = [];\n let cursor = 0;\n let referenceCount = 0;\n while (ampersand >= 0) {\n referenceCount += 1;\n if (referenceCount > 65_536)\n throw limitError(\"XML text node exceeds the entity-reference safety cap\", partName);\n output.push(value.slice(cursor, ampersand));\n const semicolon = value.indexOf(\";\", ampersand + 1);\n const nestedAmpersand = value.indexOf(\"&\", ampersand + 1);\n if (semicolon < 0 || (nestedAmpersand >= 0 && nestedAmpersand < semicolon)) {\n throw new DocxImportError(\n \"invalid_xml\",\n \"XML contains an unterminated entity reference\",\n partName,\n );\n }\n const entity = value.slice(ampersand + 1, semicolon);\n if (entity.length === 0 || entity.length > 16) {\n throw new DocxImportError(\n \"invalid_xml\",\n \"XML contains a malformed entity reference\",\n partName,\n );\n }\n output.push(decodeXmlEntity(entity, partName));\n cursor = semicolon + 1;\n ampersand = value.indexOf(\"&\", cursor);\n }\n output.push(value.slice(cursor));\n return output.join(\"\");\n}\n\nfunction decodeXmlEntity(entity: string, partName: string): string {\n if (entity === \"amp\") return \"&\";\n if (entity === \"lt\") return \"<\";\n if (entity === \"gt\") return \">\";\n if (entity === \"quot\") return '\"';\n if (entity === \"apos\") return \"'\";\n const decimal = /^#([0-9]+)$/.exec(entity);\n const hex = /^#x([0-9a-f]+)$/i.exec(entity);\n const codePoint = decimal ? Number(decimal[1]) : hex ? Number.parseInt(hex[1] ?? \"\", 16) : NaN;\n if (!Number.isInteger(codePoint) || !isValidXmlCodePoint(codePoint)) {\n throw new DocxImportError(\n \"invalid_xml\",\n `Unsupported or invalid XML entity: &${entity};`,\n partName,\n );\n }\n return String.fromCodePoint(codePoint);\n}\n\nfunction validateXmlCharacters(value: string, partName: string): void {\n for (const character of value) {\n const codePoint = character.codePointAt(0) ?? 0;\n if (!isValidXmlCodePoint(codePoint)) {\n throw new DocxImportError(\"invalid_xml\", \"XML contains a forbidden character\", partName);\n }\n }\n}\n\nfunction isValidXmlCodePoint(codePoint: number): boolean {\n return (\n codePoint === 0x09 ||\n codePoint === 0x0a ||\n codePoint === 0x0d ||\n (codePoint >= 0x20 && codePoint <= 0xd7ff) ||\n (codePoint >= 0xe000 && codePoint <= 0xfffd) ||\n (codePoint >= 0x10000 && codePoint <= 0x10ffff)\n );\n}\n\nfunction validateContentTypes(root: XmlElement, parts: ReadonlySet<string>): Map<string, string> {\n requireLocalName(root, \"Types\", \"[Content_Types].xml\");\n requireDefaultNamespaceTree(root, CONTENT_TYPES_NAMESPACE, \"[Content_Types].xml\");\n const defaults = new Map<string, string>();\n const overrides = new Map<string, string>();\n for (const entry of elementChildren(root)) {\n if ((entry.name !== \"Default\" && entry.name !== \"Override\") || entry.localName !== entry.name) {\n throw new DocxImportError(\n \"invalid_package\",\n \"Unknown content-type declaration\",\n \"[Content_Types].xml\",\n );\n }\n assertExactAttributes(\n entry,\n entry.name === \"Default\"\n ? new Set([\"Extension\", \"ContentType\"])\n : new Set([\"PartName\", \"ContentType\"]),\n \"[Content_Types].xml\",\n );\n requireLeafElement(entry, \"[Content_Types].xml\");\n const contentType = exactAttribute(entry, \"ContentType\") ?? \"\";\n if (contentType.length === 0)\n throw new DocxImportError(\n \"invalid_package\",\n \"Content-type declaration lacks ContentType\",\n \"[Content_Types].xml\",\n );\n // A Default image MIME declaration is emitted even by some generators\n // that contain no image part. Actual binary/media parts are rejected by\n // validatePartNames; declarations alone carry no discarded content.\n if (\n /(?:macroEnabled|vbaProject|activeX|oleObject|encryptedPackage|digital-signature|customUI|webExtension)/i.test(\n contentType,\n )\n ) {\n throw new DocxImportError(\n \"unsupported_feature\",\n `Unsupported DOCX content type: ${contentType}`,\n \"[Content_Types].xml\",\n );\n }\n if (entry.localName === \"Default\") {\n const extension = requiredExactAttribute(\n entry,\n \"Extension\",\n \"[Content_Types].xml\",\n ).toLowerCase();\n if (!/^[a-z0-9]+$/.test(extension) || defaults.has(extension)) {\n throw new DocxImportError(\n \"invalid_package\",\n \"Invalid or duplicate default content type\",\n \"[Content_Types].xml\",\n );\n }\n defaults.set(extension, contentType);\n } else {\n const declared = requiredExactAttribute(entry, \"PartName\", \"[Content_Types].xml\");\n if (declared.length > 1_025)\n throw limitError(\"Override PartName exceeds its safety cap\", \"[Content_Types].xml\");\n if (!declared.startsWith(\"/\") || declared.includes(\"\\\\\") || /%(?:2e|2f|5c)/i.test(declared)) {\n throw new DocxImportError(\n \"invalid_package\",\n \"Unsafe override PartName\",\n \"[Content_Types].xml\",\n );\n }\n const partName = declared.slice(1);\n let segmentCount = 1;\n for (let index = 0; index < partName.length; index += 1) {\n if (partName.charCodeAt(index) === 47 && ++segmentCount > 256) {\n throw limitError(\n \"Override PartName exceeds its path-segment safety cap\",\n \"[Content_Types].xml\",\n );\n }\n }\n const segments = partName.split(\"/\");\n if (segments.some((segment) => segment === \"\" || segment === \".\" || segment === \"..\")) {\n throw new DocxImportError(\n \"invalid_package\",\n \"Unsafe override PartName\",\n \"[Content_Types].xml\",\n );\n }\n const key = partName.toLowerCase();\n if (overrides.has(key))\n throw new DocxImportError(\n \"invalid_package\",\n \"Duplicate override content type\",\n \"[Content_Types].xml\",\n );\n if (!parts.has(partName))\n throw new DocxImportError(\n \"invalid_package\",\n \"Content-type override targets a missing part\",\n partName,\n );\n overrides.set(key, contentType);\n }\n }\n const contentTypeByPart = new Map<string, string>();\n for (const partName of parts.keys()) {\n if (partName === \"[Content_Types].xml\") continue;\n const extensionIndex = partName.lastIndexOf(\".\");\n const extension = extensionIndex < 0 ? \"\" : partName.slice(extensionIndex + 1).toLowerCase();\n const contentType = overrides.get(partName.toLowerCase()) ?? defaults.get(extension);\n if (!contentType) {\n throw new DocxImportError(\n \"invalid_package\",\n \"Package part has no declared content type\",\n partName,\n );\n }\n contentTypeByPart.set(partName, contentType);\n }\n const documentType = overrides.get(\"word/document.xml\");\n if (\n documentType !==\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\"\n ) {\n throw new DocxImportError(\n \"invalid_package\",\n \"word/document.xml has the wrong content type\",\n \"[Content_Types].xml\",\n );\n }\n return contentTypeByPart;\n}\n\nfunction isSafeOpaqueContentType(partName: string, contentType: string): boolean {\n if (\n /(?:macroEnabled|vbaProject|activeX|oleObject|encryptedPackage|digital-signature|customUI|webExtension)/i.test(\n contentType,\n )\n ) {\n return false;\n }\n if (partName.endsWith(\".rels\")) {\n return contentType === \"application/vnd.openxmlformats-package.relationships+xml\";\n }\n return (\n /^(?:application|text)\\/xml$/i.test(contentType) ||\n /^(?:application|text)\\/[A-Za-z0-9!#$&^_.+-]+\\+xml$/i.test(contentType)\n );\n}\n\nfunction parseRelationships(\n root: XmlElement,\n relationshipsPart: string,\n maxRelationships: number,\n): Relationship[] {\n requireLocalName(root, \"Relationships\", relationshipsPart);\n requireDefaultNamespaceTree(root, RELATIONSHIPS_NAMESPACE, relationshipsPart);\n const sourcePart = relationshipSourcePart(relationshipsPart);\n const relationships: Relationship[] = [];\n const ids = new Set<string>();\n for (const child of elementChildren(root)) {\n if (relationships.length >= maxRelationships)\n throw limitError(\"Relationships part exceeds maxRelationshipsPerPart\", relationshipsPart);\n if (child.name !== \"Relationship\")\n throw new DocxImportError(\n \"invalid_package\",\n \"Unknown relationship element\",\n relationshipsPart,\n );\n requireLeafElement(child, relationshipsPart);\n assertExactAttributes(\n child,\n new Set([\"Id\", \"Type\", \"Target\", \"TargetMode\"]),\n relationshipsPart,\n );\n const id = requiredExactAttribute(child, \"Id\", relationshipsPart);\n const type = requiredExactAttribute(child, \"Type\", relationshipsPart);\n const target = requiredExactAttribute(child, \"Target\", relationshipsPart);\n if (id.length > 512 || type.length > 2_048 || target.length > 4_096) {\n throw limitError(\n \"Relationship Id, Type, or Target exceeds its safety cap\",\n relationshipsPart,\n );\n }\n if (ids.has(id))\n throw new DocxImportError(\"invalid_package\", \"Duplicate relationship id\", relationshipsPart);\n ids.add(id);\n if ((exactAttribute(child, \"TargetMode\") ?? \"Internal\") !== \"Internal\") {\n throw new DocxImportError(\n \"unsupported_feature\",\n \"External DOCX relationships are unsupported\",\n relationshipsPart,\n );\n }\n relationships.push({\n id,\n type,\n target,\n sourcePart,\n partName: resolvePartTarget(sourcePart, target, relationshipsPart),\n });\n }\n return relationships;\n}\n\nfunction validateRelationships(\n relationships: readonly Relationship[],\n opaqueParts: ReadonlySet<string>,\n): Relationship[] {\n const allowed = new Set([\n `${WORD_RELATIONSHIP_BASE}officeDocument`,\n `${WORD_RELATIONSHIP_BASE}styles`,\n `${WORD_RELATIONSHIP_BASE}settings`,\n `${WORD_RELATIONSHIP_BASE}webSettings`,\n `${WORD_RELATIONSHIP_BASE}theme`,\n `${WORD_RELATIONSHIP_BASE}fontTable`,\n `${WORD_RELATIONSHIP_BASE}numbering`,\n `${WORD_RELATIONSHIP_BASE}header`,\n `${WORD_RELATIONSHIP_BASE}footer`,\n `${WORD_RELATIONSHIP_BASE}comments`,\n \"http://schemas.microsoft.com/office/2011/relationships/commentsExtended\",\n `${WORD_RELATIONSHIP_BASE}footnotes`,\n `${WORD_RELATIONSHIP_BASE}endnotes`,\n `${PACKAGE_RELATIONSHIP_BASE}core-properties`,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\",\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties\",\n ]);\n const opaqueRelationships: Relationship[] = [];\n for (const relationship of relationships) {\n if (allowed.has(relationship.type)) {\n validateRelationshipRoute(relationship);\n if (opaqueParts.has(relationship.partName)) opaqueRelationships.push(relationship);\n continue;\n }\n if (!isSafeOpaqueRelationship(relationship) || !opaqueParts.has(relationship.partName)) {\n throw new DocxImportError(\n \"unsupported_feature\",\n `Unsupported DOCX relationship: ${relationship.type}`,\n relationship.partName,\n );\n }\n opaqueRelationships.push(relationship);\n }\n const singletonTypes = new Set(\n [\n \"styles\",\n \"settings\",\n \"webSettings\",\n \"theme\",\n \"fontTable\",\n \"numbering\",\n \"comments\",\n \"footnotes\",\n \"endnotes\",\n ]\n .map((suffix) => `${WORD_RELATIONSHIP_BASE}${suffix}`)\n .concat([\"http://schemas.microsoft.com/office/2011/relationships/commentsExtended\"]),\n );\n const seenSingletons = new Set<string>();\n for (const relationship of relationships) {\n if (relationship.sourcePart !== \"word/document.xml\" || !singletonTypes.has(relationship.type))\n continue;\n if (seenSingletons.has(relationship.type)) {\n throw new DocxImportError(\n \"invalid_package\",\n \"Document contains duplicate singleton relationships\",\n relationship.partName,\n );\n }\n seenSingletons.add(relationship.type);\n }\n return opaqueRelationships;\n}\n\nfunction isSafeOpaqueRelationship(relationship: Relationship): boolean {\n const { sourcePart, type, partName } = relationship;\n if (type === `${WORD_RELATIONSHIP_BASE}customXml`) {\n return sourcePart === \"word/document.xml\" && /^customXml\\/item\\d+\\.xml$/.test(partName);\n }\n if (type === `${WORD_RELATIONSHIP_BASE}customXmlProps`) {\n return (\n /^customXml\\/item\\d+\\.xml$/.test(sourcePart) &&\n /^customXml\\/itemProps\\d+\\.xml$/.test(partName)\n );\n }\n if (type === `${WORD_RELATIONSHIP_BASE}glossaryDocument`) {\n return sourcePart === \"word/document.xml\" && partName === \"word/glossary/document.xml\";\n }\n return false;\n}\n\nfunction validateRelationshipRoute(relationship: Relationship): void {\n const { sourcePart, type, partName } = relationship;\n if (sourcePart === \"\") {\n const expected = new Map<string, string>([\n [`${WORD_RELATIONSHIP_BASE}officeDocument`, \"word/document.xml\"],\n [`${PACKAGE_RELATIONSHIP_BASE}core-properties`, \"docProps/core.xml\"],\n [\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\",\n \"docProps/app.xml\",\n ],\n [\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties\",\n \"docProps/custom.xml\",\n ],\n ]).get(type);\n if (!expected || partName !== expected) {\n throw new DocxImportError(\n \"invalid_package\",\n \"Package-root relationship has an invalid type or target\",\n partName,\n );\n }\n return;\n }\n if (sourcePart !== \"word/document.xml\") {\n // For the currently supported fidelity subset, generator-created story,\n // comment, note, and font relationship parts are empty. Any auxiliary\n // relationship necessarily points at content the DTO cannot represent.\n throw new DocxImportError(\n \"unsupported_feature\",\n \"Relationships from auxiliary Word parts are not yet supported\",\n sourcePart,\n );\n }\n const fixedTargets = new Map<string, string>([\n [`${WORD_RELATIONSHIP_BASE}styles`, \"word/styles.xml\"],\n [`${WORD_RELATIONSHIP_BASE}settings`, \"word/settings.xml\"],\n [`${WORD_RELATIONSHIP_BASE}webSettings`, \"word/webSettings.xml\"],\n [`${WORD_RELATIONSHIP_BASE}fontTable`, \"word/fontTable.xml\"],\n [`${WORD_RELATIONSHIP_BASE}numbering`, \"word/numbering.xml\"],\n [`${WORD_RELATIONSHIP_BASE}comments`, \"word/comments.xml\"],\n [`${WORD_RELATIONSHIP_BASE}footnotes`, \"word/footnotes.xml\"],\n [`${WORD_RELATIONSHIP_BASE}endnotes`, \"word/endnotes.xml\"],\n [\n \"http://schemas.microsoft.com/office/2011/relationships/commentsExtended\",\n \"word/commentsExtended.xml\",\n ],\n ]);\n const fixed = fixedTargets.get(type);\n const valid =\n fixed !== undefined\n ? partName === fixed\n : type === `${WORD_RELATIONSHIP_BASE}theme`\n ? /^word\\/theme\\/theme\\d+\\.xml$/.test(partName)\n : type === `${WORD_RELATIONSHIP_BASE}header`\n ? /^word\\/header\\d+\\.xml$/.test(partName)\n : type === `${WORD_RELATIONSHIP_BASE}footer` && /^word\\/footer\\d+\\.xml$/.test(partName);\n if (!valid)\n throw new DocxImportError(\n \"invalid_package\",\n \"Document relationship has an invalid type or target\",\n partName,\n );\n}\n\nfunction validateRelationshipCoverage(\n parts: ReadonlySet<string>,\n relationships: readonly Relationship[],\n): void {\n const targets = new Set(relationships.map((relationship) => relationship.partName));\n for (const partName of parts.keys()) {\n if (partName === \"[Content_Types].xml\" || partName.endsWith(\".rels\")) continue;\n if (!targets.has(partName))\n throw new DocxImportError(\n \"invalid_package\",\n \"Package contains an orphaned content part\",\n partName,\n );\n }\n for (const partName of parts.keys()) {\n if (!partName.endsWith(\".rels\") || partName === \"_rels/.rels\") continue;\n const sourcePart = relationshipSourcePart(partName);\n if (!parts.has(sourcePart))\n throw new DocxImportError(\n \"invalid_package\",\n \"Relationships part has no source part\",\n partName,\n );\n }\n}\n\nfunction validateEmptyNotePart(\n root: XmlElement,\n itemName: \"footnote\" | \"endnote\",\n partName: string,\n): void {\n requireLocalName(root, `${itemName}s`, partName);\n requireWordNamespace(root, partName);\n for (const item of elementChildren(root)) {\n if (item.localName !== itemName)\n throw new DocxImportError(\"invalid_package\", `Unknown ${itemName} element`, partName);\n const id = Number(requiredAttribute(item, \"id\", partName));\n const type = attribute(item, \"type\");\n // Word generators commonly include separator and continuation-separator\n // records (the latter is often id 0). Their explicit type makes them\n // pagination metadata; any ordinary note must not be silently dropped.\n if (!Number.isInteger(id) || (type !== \"separator\" && type !== \"continuationSeparator\")) {\n throw new DocxImportError(\n \"unsupported_feature\",\n `DOCX ${itemName}s are not yet supported`,\n partName,\n );\n }\n }\n}\n\nfunction validateSettings(root: XmlElement): {\n evenAndOddHeaders: boolean;\n trackRevisions: boolean;\n} {\n requireLocalName(root, \"settings\", \"word/settings.xml\");\n requireWordNamespace(root, \"word/settings.xml\");\n assertAllowedContentChildren(\n root,\n new Set([\n \"displayBackgroundShape\",\n \"evenAndOddHeaders\",\n \"trackRevisions\",\n \"compat\",\n \"documentProtection\",\n \"writeProtection\",\n ]),\n \"document settings\",\n );\n for (const protectedFeature of [\"documentProtection\", \"writeProtection\"] as const) {\n if (firstChild(root, protectedFeature)) {\n throw new DocxImportError(\n \"unsupported_feature\",\n `DOCX ${protectedFeature} is not preserved by import`,\n \"word/settings.xml\",\n );\n }\n }\n const background = singletonChild(root, \"displayBackgroundShape\", \"document settings\");\n const evenAndOdd = singletonChild(root, \"evenAndOddHeaders\", \"document settings\");\n const trackRevisions = singletonChild(root, \"trackRevisions\", \"document settings\");\n const compat = singletonChild(root, \"compat\", \"document settings\");\n assertAllowedAttributes(background, new Set([\"val\"]), \"display-background-shape setting\");\n assertAllowedAttributes(evenAndOdd, new Set([\"val\"]), \"even-and-odd-headers setting\");\n assertAllowedAttributes(trackRevisions, new Set([\"val\"]), \"track-revisions setting\");\n assertAllowedAttributes(compat, new Set(), \"compatibility settings\");\n assertAllowedContentChildren(background, new Set(), \"display-background-shape setting\");\n assertAllowedContentChildren(evenAndOdd, new Set(), \"even-and-odd-headers setting\");\n assertAllowedContentChildren(trackRevisions, new Set(), \"track-revisions setting\");\n const tracksRevisions = booleanValue(trackRevisions, false);\n assertAllowedContentChildren(compat, new Set([\"compatSetting\"]), \"compatibility settings\");\n const seenCompat = new Set<string>();\n for (const setting of children(compat, \"compatSetting\")) {\n assertAllowedAttributes(setting, new Set([\"name\", \"uri\", \"val\"]), \"compatibility setting\");\n assertAllowedContentChildren(setting, new Set(), \"compatibility setting\");\n const name = attribute(setting, \"name\");\n const uri = attribute(setting, \"uri\");\n const value = attribute(setting, \"val\");\n const key = `${uri ?? \"\"}\\u0000${name ?? \"\"}`;\n if (seenCompat.has(key))\n throw new DocxImportError(\n \"invalid_package\",\n \"Duplicate compatibility setting\",\n \"word/settings.xml\",\n );\n seenCompat.add(key);\n if (\n name !== \"compatibilityMode\" ||\n uri !== \"http://schemas.microsoft.com/office/word\" ||\n value !== \"15\"\n ) {\n throw new DocxImportError(\n \"unsupported_feature\",\n \"Document compatibility setting is not represented\",\n \"word/settings.xml\",\n );\n }\n }\n return { evenAndOddHeaders: booleanValue(evenAndOdd, false), trackRevisions: tracksRevisions };\n}\n\nfunction parseMainDocument(\n root: XmlElement,\n context: ParseContext,\n relationships: ReadonlyMap<string, Relationship>,\n): { blocks: ImportedBlock[]; sections: ImportedSection[] } {\n requireLocalName(root, \"document\", \"word/document.xml\");\n rejectUnsupportedContent(root, \"word/document.xml\");\n requireWordNamespace(root, \"word/document.xml\");\n const body = onlyElement(root, \"body\", \"word/document.xml\");\n const blocks: ImportedBlock[] = [];\n const sections: ImportedSection[] = [];\n let sectionStart = 0;\n const addSection = (section: ImportedSection): void => {\n if (sections.length >= context.budget.limits.maxSections) {\n throw limitError(\"DOCX exceeds maxSections\", \"word/document.xml\");\n }\n sections.push(section);\n };\n for (const child of elementChildren(body)) {\n if (child.localName === \"p\") {\n const sectionProperties = firstChild(firstChild(child, \"pPr\"), \"sectPr\");\n if (!sectionProperties || !isPureSectionBoundaryParagraph(child)) {\n blocks.push(parseParagraph(child, context));\n }\n if (sectionProperties) {\n addSection(parseSection(sectionProperties, sectionStart, blocks.length, relationships));\n sectionStart = blocks.length;\n }\n } else if (child.localName === \"tbl\") blocks.push(parseTable(child, context));\n else if (child.localName === \"sectPr\") {\n addSection(parseSection(child, sectionStart, blocks.length, relationships));\n sectionStart = blocks.length;\n } else if (!NON_CONTENT_MARKERS.has(child.localName)) {\n throw unsupportedElement(child, \"word/document.xml\");\n }\n }\n if (sections.length === 0 || sectionStart < blocks.length) {\n addSection(defaultSection(sectionStart, blocks.length));\n }\n return { blocks, sections };\n}\n\nfunction parseBlockContainer(root: XmlElement, context: ParseContext): ImportedBlock[] {\n rejectUnsupportedContent(root, context.idPrefix);\n const blocks: ImportedBlock[] = [];\n for (const child of elementChildren(root)) {\n if (child.localName === \"p\") blocks.push(parseParagraph(child, context));\n else if (child.localName === \"tbl\") blocks.push(parseTable(child, context));\n else if (!NON_CONTENT_MARKERS.has(child.localName))\n throw unsupportedElement(child, context.idPrefix);\n }\n return blocks;\n}\n\nfunction parseParagraph(element: XmlElement, context: ParseContext): ImportedParagraph {\n consumeBlock(context.budget);\n const id = `${context.idPrefix}:p${context.budget.nextBlockId++}`;\n const properties = singletonChild(element, \"pPr\", \"paragraph\");\n const styleId = valueOf(firstChild(properties, \"pStyle\"));\n const paragraph: ImportedParagraph = {\n kind: \"paragraph\",\n id,\n ...(styleId !== undefined ? { styleId } : {}),\n style: parseParagraphProperties(properties),\n inlines: [],\n commentAnchors: [],\n };\n const firstTrackedChange = context.trackedChanges.length;\n let textOffset = 0;\n const addRun = (run: ImportedRun | ImportedPageBreak): void => {\n paragraph.inlines.push(run);\n if (run.kind === \"run\") {\n textOffset += run.text.length;\n consumeText(context.budget, run.text.length);\n }\n };\n const parseChildren = (parent: XmlElement, change?: ChangeMetadata): void => {\n for (const child of elementChildren(parent)) {\n if (child.localName === \"pPr\") continue;\n if (child.localName === \"r\") {\n const paragraphOffset = textOffset;\n const parsed = parseRun(child, change, (commentId, runOffset) => {\n paragraph.commentAnchors.push({\n commentId,\n kind: \"reference\",\n textOffset: paragraphOffset + runOffset,\n });\n });\n for (const inline of parsed) addRun(inline);\n } else if (child.localName === \"ins\" || child.localName === \"del\") {\n if (change)\n throw new DocxImportError(\n \"invalid_package\",\n \"Tracked changes cannot be nested\",\n context.idPrefix,\n );\n const changeStart = paragraph.inlines.length;\n const changeTextStart = textOffset;\n const author = attribute(child, \"author\");\n const createdAt = attribute(child, \"date\");\n const metadata: ChangeMetadata = {\n id: requiredAttribute(child, \"id\", context.idPrefix),\n kind: child.localName === \"ins\" ? \"insert\" : \"delete\",\n ...(author !== undefined ? { author } : {}),\n ...(createdAt !== undefined ? { createdAt } : {}),\n };\n parseChildren(child, metadata);\n context.trackedChanges.push({\n id: metadata.id,\n kind: metadata.kind,\n ...(metadata.author !== undefined ? { author: metadata.author } : {}),\n ...(metadata.createdAt !== undefined ? { createdAt: metadata.createdAt } : {}),\n blockId: id,\n startInlineIndex: changeStart,\n endInlineIndex: paragraph.inlines.length,\n startTextOffset: changeTextStart,\n endTextOffset: textOffset,\n });\n } else if (child.localName === \"commentRangeStart\" || child.localName === \"commentRangeEnd\") {\n paragraph.commentAnchors.push({\n commentId: requiredAttribute(child, \"id\", context.idPrefix),\n kind: child.localName === \"commentRangeStart\" ? \"start\" : \"end\",\n textOffset,\n });\n } else if (child.localName === \"commentReference\") {\n paragraph.commentAnchors.push({\n commentId: requiredAttribute(child, \"id\", context.idPrefix),\n kind: \"reference\",\n textOffset,\n });\n } else if (!NON_CONTENT_MARKERS.has(child.localName))\n throw unsupportedElement(child, context.idPrefix);\n }\n };\n parseChildren(element);\n validateScalarBoundaries(paragraph, context.trackedChanges, firstTrackedChange, context.idPrefix);\n return stripUndefined(paragraph);\n}\n\nfunction isPureSectionBoundaryParagraph(element: XmlElement): boolean {\n const paragraphChildren = elementChildren(element);\n if (paragraphChildren.length !== 1 || paragraphChildren[0]?.localName !== \"pPr\") return false;\n const propertyChildren = elementChildren(paragraphChildren[0]);\n return propertyChildren.length === 1 && propertyChildren[0]?.localName === \"sectPr\";\n}\n\nfunction validateScalarBoundaries(\n paragraph: ImportedParagraph,\n trackedChanges: readonly ImportedTrackedChange[],\n firstTrackedChange: number,\n partName: string,\n): void {\n const chunks: string[] = [];\n for (const inline of paragraph.inlines) if (inline.kind === \"run\") chunks.push(inline.text);\n const text = chunks.join(\"\");\n const validate = (offset: number, label: string): void => {\n if (!Number.isInteger(offset) || offset < 0 || offset > text.length) {\n throw new DocxImportError(\"invalid_package\", `${label} is outside its paragraph`, partName);\n }\n const before = offset > 0 ? text.charCodeAt(offset - 1) : 0;\n const after = offset < text.length ? text.charCodeAt(offset) : 0;\n if (before >= 0xd800 && before <= 0xdbff && after >= 0xdc00 && after <= 0xdfff) {\n throw new DocxImportError(\n \"invalid_package\",\n `${label} splits a Unicode scalar value`,\n partName,\n );\n }\n };\n for (const anchor of paragraph.commentAnchors) validate(anchor.textOffset, \"Comment anchor\");\n for (let index = firstTrackedChange; index < trackedChanges.length; index += 1) {\n const change = trackedChanges[index];\n if (!change || change.blockId !== paragraph.id) continue;\n validate(change.startTextOffset, \"Tracked-change start\");\n validate(change.endTextOffset, \"Tracked-change end\");\n }\n}\n\ntype ChangeMetadata = {\n id: string;\n kind: \"insert\" | \"delete\";\n author?: string;\n createdAt?: string;\n};\n\nfunction parseRun(\n element: XmlElement,\n change?: ChangeMetadata,\n onCommentReference?: (commentId: string, textOffset: number) => void,\n): ImportedInline[] {\n const properties = singletonChild(element, \"rPr\", \"run\");\n const styleId = valueOf(firstChild(properties, \"rStyle\"));\n const style = parseRunProperties(properties);\n const styled = styleId !== undefined || Object.keys(style).length > 0;\n const inlines: ImportedInline[] = [];\n let text = \"\";\n let emittedTextLength = 0;\n let hasCommentReference = false;\n const flush = (): void => {\n if (text.length === 0) return;\n inlines.push(\n stripUndefined({\n kind: \"run\" as const,\n text,\n styleId,\n style,\n changeId: change?.id,\n }),\n );\n emittedTextLength += text.length;\n text = \"\";\n };\n for (const child of elementChildren(element)) {\n if (child.localName === \"rPr\") continue;\n if (child.localName === \"t\" || child.localName === \"delText\") text += textContent(child);\n else if (child.localName === \"tab\") text += \"\\t\";\n else if (child.localName === \"cr\") text += \"\\n\";\n else if (child.localName === \"noBreakHyphen\") text += \"\\u2011\";\n else if (child.localName === \"softHyphen\") text += \"\\u00ad\";\n else if (child.localName === \"br\") {\n assertAllowedAttributes(child, new Set([\"type\"]), \"run break\");\n assertAllowedContentChildren(child, new Set(), \"run break\");\n const type = attribute(child, \"type\") ?? \"textWrapping\";\n if (type === \"page\") {\n flush();\n inlines.push({ kind: \"pageBreak\" });\n } else if (type === \"textWrapping\") text += \"\\n\";\n else throw new DocxImportError(\"unsupported_feature\", `Unsupported break type: ${type}`);\n } else if (child.localName === \"commentReference\") {\n hasCommentReference = true;\n const commentId = requiredAttribute(child, \"id\", \"word/document.xml\");\n onCommentReference?.(commentId, emittedTextLength + text.length);\n } else if (\n child.localName !== \"lastRenderedPageBreak\" &&\n !NON_CONTENT_MARKERS.has(child.localName)\n ) {\n throw unsupportedElement(child, \"word/document.xml\");\n }\n }\n flush();\n if (emittedTextLength === 0 && styled && (hasCommentReference || inlines.length > 0)) {\n throw new DocxImportError(\n \"unsupported_feature\",\n \"Formatting on a non-text run cannot be represented without changing marker behavior\",\n \"word/document.xml\",\n );\n }\n // Empty text runs are meaningful insertion-point style carriers in Word and\n // are represented exactly by DocumentTextRun. Keep one inline rather than\n // flattening the style or silently changing where subsequent typing lands.\n if (emittedTextLength === 0 && inlines.length === 0 && !hasCommentReference) {\n inlines.push(\n stripUndefined({\n kind: \"run\" as const,\n text: \"\",\n styleId,\n style,\n changeId: change?.id,\n }),\n );\n }\n return inlines;\n}\n\nfunction parseTable(element: XmlElement, context: ParseContext): ImportedTable {\n consumeBlock(context.budget);\n assertAllowedContentChildren(element, new Set([\"tblPr\", \"tblGrid\", \"tr\"]), \"table\");\n const id = `${context.idPrefix}:tbl${context.budget.nextBlockId++}`;\n const properties = singletonChild(element, \"tblPr\", \"table\");\n assertAllowedPropertyChildren(\n properties,\n new Set([\"tblStyle\", \"tblW\", \"tblInd\", \"jc\", \"tblLayout\", \"tblCellMar\", \"tblBorders\"]),\n \"table properties\",\n );\n assertUniqueChildNames(properties, \"table properties\");\n assertAllowedAttributes(firstChild(properties, \"tblStyle\"), new Set([\"val\"]), \"table style\");\n assertAllowedAttributes(firstChild(properties, \"jc\"), new Set([\"val\"]), \"table alignment\");\n const grid = singletonChild(element, \"tblGrid\", \"table\");\n assertAllowedContentChildren(grid, new Set([\"gridCol\"]), \"table grid\");\n assertAllowedAttributes(grid, new Set(), \"table grid\");\n for (const column of children(grid, \"gridCol\")) {\n assertAllowedAttributes(column, new Set([\"w\"]), \"table grid column\");\n assertAllowedContentChildren(column, new Set(), \"table grid column\");\n }\n const rows: ImportedTableRow[] = [];\n for (const rowElement of children(element, \"tr\")) {\n assertAllowedContentChildren(rowElement, new Set([\"trPr\", \"tc\"]), \"table row\");\n const rowProperties = singletonChild(rowElement, \"trPr\", \"table row\");\n assertAllowedPropertyChildren(\n rowProperties,\n new Set([\"tblHeader\", \"cantSplit\", \"trHeight\"]),\n \"table row properties\",\n );\n assertUniqueChildNames(rowProperties, \"table row properties\");\n assertAllowedAttributes(rowProperties, new Set(), \"table row properties\");\n assertAllowedAttributes(\n firstChild(rowProperties, \"tblHeader\"),\n new Set([\"val\"]),\n \"table header-row setting\",\n );\n assertAllowedAttributes(\n firstChild(rowProperties, \"cantSplit\"),\n new Set([\"val\"]),\n \"table row-splitting setting\",\n );\n assertAllowedAttributes(\n firstChild(rowProperties, \"trHeight\"),\n new Set([\"val\", \"hRule\"]),\n \"table row height\",\n );\n const cells: ImportedTableCell[] = [];\n for (const cellElement of children(rowElement, \"tc\")) {\n assertAllowedContentChildren(cellElement, new Set([\"tcPr\", \"p\", \"tbl\"]), \"table cell\");\n const cellProperties = singletonChild(cellElement, \"tcPr\", \"table cell\");\n assertAllowedPropertyChildren(\n cellProperties,\n new Set([\"tcW\", \"tcMar\", \"gridSpan\", \"vMerge\", \"vAlign\", \"shd\"]),\n \"table cell properties\",\n );\n assertUniqueChildNames(cellProperties, \"table cell properties\");\n assertAllowedAttributes(cellProperties, new Set(), \"table cell properties\");\n for (const name of [\"gridSpan\", \"vMerge\", \"vAlign\"] as const) {\n assertAllowedAttributes(\n firstChild(cellProperties, name),\n new Set([\"val\"]),\n `table cell ${name}`,\n );\n }\n const verticalMergeElement = firstChild(cellProperties, \"vMerge\");\n const verticalMergeValue = verticalMergeElement\n ? (valueOf(verticalMergeElement) ?? \"continue\")\n : undefined;\n if (\n verticalMergeValue !== undefined &&\n verticalMergeValue !== \"restart\" &&\n verticalMergeValue !== \"continue\"\n ) {\n throw new DocxImportError(\n \"invalid_package\",\n `Invalid vertical merge value: ${verticalMergeValue}`,\n context.idPrefix,\n );\n }\n const columnSpan = integerValue(firstChild(cellProperties, \"gridSpan\"), 1);\n if (columnSpan < 1)\n throw new DocxImportError(\n \"invalid_package\",\n \"Table gridSpan must be positive\",\n context.idPrefix,\n );\n const blocks: ImportedBlock[] = [];\n for (const block of elementChildren(cellElement)) {\n if (block.localName === \"tcPr\") continue;\n if (block.localName === \"p\") blocks.push(parseParagraph(block, context));\n else if (block.localName === \"tbl\") blocks.push(parseTable(block, context));\n else if (!NON_CONTENT_MARKERS.has(block.localName))\n throw unsupportedElement(block, context.idPrefix);\n }\n const shading = firstChild(cellProperties, \"shd\");\n validateShading(shading, context.idPrefix);\n cells.push(\n stripUndefined({\n width: parseMeasure(firstChild(cellProperties, \"tcW\")),\n margins: parseBoxMeasures(firstChild(cellProperties, \"tcMar\"), \"table cell margins\"),\n columnSpan,\n verticalMerge:\n verticalMergeValue === undefined\n ? undefined\n : verticalMergeValue === \"restart\"\n ? (\"restart\" as const)\n : (\"continue\" as const),\n verticalAlignment: valueOf(firstChild(cellProperties, \"vAlign\")),\n fill: attribute(shading, \"fill\"),\n blocks,\n }),\n );\n }\n const height = firstChild(rowProperties, \"trHeight\");\n const heightRule = attribute(height, \"hRule\");\n if (\n heightRule !== undefined &&\n heightRule !== \"auto\" &&\n heightRule !== \"atLeast\" &&\n heightRule !== \"exact\"\n ) {\n throw new DocxImportError(\n \"invalid_package\",\n `Invalid table row height rule: ${heightRule}`,\n context.idPrefix,\n );\n }\n rows.push(\n stripUndefined({\n header: booleanValue(firstChild(rowProperties, \"tblHeader\"), false),\n cannotSplit: booleanValue(firstChild(rowProperties, \"cantSplit\"), false),\n heightPt: numberAttribute(height, \"val\", twipsToPt),\n heightRule,\n cells,\n }),\n );\n }\n return stripUndefined({\n kind: \"table\" as const,\n id,\n styleId: valueOf(firstChild(properties, \"tblStyle\")),\n width: parseMeasure(firstChild(properties, \"tblW\")),\n indent: parseMeasure(firstChild(properties, \"tblInd\")),\n alignment: valueOf(firstChild(properties, \"jc\")),\n layout: parseTableLayout(firstChild(properties, \"tblLayout\")),\n cellMargins: parseBoxMeasures(firstChild(properties, \"tblCellMar\"), \"table cell margins\"),\n borders: parseTableBorders(firstChild(properties, \"tblBorders\"), context.idPrefix),\n gridColumnWidthsPt: children(grid, \"gridCol\").map(\n (column) => numberAttribute(column, \"w\", twipsToPt) ?? 0,\n ),\n rows,\n });\n}\n\nfunction parseBoxMeasures(\n element: XmlElement | undefined,\n label: string,\n): ImportedBoxMeasures | undefined {\n if (!element) return undefined;\n assertAllowedAttributes(element, new Set(), label);\n const allowed = new Set([\"top\", \"right\", \"bottom\", \"left\", \"start\", \"end\"]);\n assertAllowedPropertyChildren(element, allowed, label);\n assertUniqueChildNames(element, label);\n if (\n (firstChild(element, \"left\") && firstChild(element, \"start\")) ||\n (firstChild(element, \"right\") && firstChild(element, \"end\"))\n ) {\n throw new DocxImportError(\n \"unsupported_feature\",\n `${label} mixes physical and logical side aliases`,\n label,\n );\n }\n const result = stripUndefined<ImportedBoxMeasures>({\n top: parseMeasure(firstChild(element, \"top\")),\n right: parseMeasure(firstChild(element, \"right\")),\n bottom: parseMeasure(firstChild(element, \"bottom\")),\n left: parseMeasure(firstChild(element, \"left\")),\n start: parseMeasure(firstChild(element, \"start\")),\n end: parseMeasure(firstChild(element, \"end\")),\n });\n return Object.keys(result).length > 0 ? result : undefined;\n}\n\nfunction parseTableBorders(\n element: XmlElement | undefined,\n partName: string,\n): ImportedTableBorders | undefined {\n if (!element) return undefined;\n assertAllowedAttributes(element, new Set(), \"table borders\");\n assertAllowedPropertyChildren(\n element,\n new Set([\"top\", \"right\", \"bottom\", \"left\", \"insideH\", \"insideV\"]),\n \"table borders\",\n );\n assertUniqueChildNames(element, \"table borders\");\n const parse = (name: string): ImportedBorder | undefined => {\n const border = firstChild(element, name);\n if (!border) return undefined;\n assertAllowedAttributes(\n border,\n new Set([\"val\", \"color\", \"sz\", \"space\", \"shadow\", \"frame\"]),\n \"table border\",\n );\n const style = valueOf(border);\n if (!style)\n throw new DocxImportError(\"invalid_package\", \"Table border lacks a style\", partName);\n return stripUndefined({\n style,\n color: attribute(border, \"color\"),\n sizePt: numberAttribute(border, \"sz\", (value) => value / 8),\n spacePt: numberAttribute(border, \"space\"),\n shadow: optionalBooleanAttribute(border, \"shadow\"),\n frame: optionalBooleanAttribute(border, \"frame\"),\n });\n };\n const result = stripUndefined<ImportedTableBorders>({\n top: parse(\"top\"),\n right: parse(\"right\"),\n bottom: parse(\"bottom\"),\n left: parse(\"left\"),\n insideHorizontal: parse(\"insideH\"),\n insideVertical: parse(\"insideV\"),\n });\n return Object.keys(result).length > 0 ? result : undefined;\n}\n\nfunction validateShading(element: XmlElement | undefined, partName: string): void {\n if (!element) return;\n assertAllowedAttributes(element, new Set([\"val\", \"color\", \"fill\"]), \"table cell shading\");\n const pattern = valueOf(element);\n const foreground = attribute(element, \"color\");\n if (pattern !== undefined && pattern !== \"clear\" && pattern !== \"solid\") {\n throw new DocxImportError(\n \"unsupported_feature\",\n `Table shading pattern ${pattern} is not represented`,\n partName,\n );\n }\n if (foreground !== undefined && foreground.toLowerCase() !== \"auto\") {\n throw new DocxImportError(\n \"unsupported_feature\",\n \"Patterned table foreground colors are not represented\",\n partName,\n );\n }\n}\n\nfunction parseTableLayout(element: XmlElement | undefined): \"fixed\" | \"autofit\" | undefined {\n if (!element) return undefined;\n assertAllowedAttributes(element, new Set([\"type\"]), \"table layout\");\n const value = attribute(element, \"type\");\n if (value === \"fixed\") return \"fixed\";\n if (value === \"autofit\") return \"autofit\";\n throw new DocxImportError(\n \"invalid_package\",\n `Invalid table layout type: ${String(value)}`,\n \"table layout\",\n );\n}\n\nfunction parseMeasure(element: XmlElement | undefined): ImportedMeasure | undefined {\n if (!element) return undefined;\n assertAllowedAttributes(element, new Set([\"w\", \"type\"]), \"OOXML measure\");\n const width = attribute(element, \"w\");\n if (width === undefined)\n throw new DocxImportError(\"invalid_package\", \"OOXML measure lacks a width\");\n const raw = Number(width);\n if (!Number.isFinite(raw))\n throw new DocxImportError(\"invalid_package\", \"OOXML measure width is invalid\");\n const type = attribute(element, \"type\") ?? \"dxa\";\n if (type === \"dxa\") return { value: twipsToPt(raw), unit: \"pt\" };\n if (type === \"pct\") return { value: raw / 50, unit: \"percent\" };\n if (type === \"auto\" || type === \"nil\") return { value: raw, unit: \"auto\" };\n throw new DocxImportError(\"unsupported_feature\", `Unsupported OOXML measure type: ${type}`);\n}\n\nfunction parseStyles(root: XmlElement, limits: DocxImportLimits): ImportedStyle[] {\n requireLocalName(root, \"styles\", \"word/styles.xml\");\n requireWordNamespace(root, \"word/styles.xml\");\n rejectUnsupportedContent(root, \"word/styles.xml\");\n assertAllowedContentChildren(\n root,\n new Set([\"docDefaults\", \"latentStyles\", \"style\"]),\n \"styles root\",\n );\n const defaults = children(root, \"docDefaults\");\n if (defaults.length > 1)\n throw new DocxImportError(\"invalid_package\", \"Styles repeats docDefaults\", \"word/styles.xml\");\n if (defaults[0]) validateEmptyStyleDefaults(defaults[0]);\n const styles: ImportedStyle[] = [];\n const styleIds = new Set<string>();\n for (const element of children(root, \"style\")) {\n if (styles.length >= limits.maxStyles)\n throw limitError(\"DOCX exceeds maxStyles\", \"word/styles.xml\");\n const styleId = requiredAttribute(element, \"styleId\", \"word/styles.xml\");\n if (styleIds.has(styleId))\n throw new DocxImportError(\"invalid_package\", \"Duplicate style id\", \"word/styles.xml\");\n styleIds.add(styleId);\n const kind = attribute(element, \"type\") ?? \"paragraph\";\n if (kind !== \"paragraph\" && kind !== \"character\") {\n throw new DocxImportError(\n \"unsupported_feature\",\n `Style type ${kind} is not represented`,\n \"word/styles.xml\",\n );\n }\n assertAllowedAttributes(\n element,\n new Set([\"styleId\", \"type\", \"default\", \"customStyle\"]),\n \"style\",\n );\n assertAllowedPropertyChildren(\n element,\n new Set([\n \"name\",\n \"aliases\",\n \"basedOn\",\n \"next\",\n \"link\",\n \"uiPriority\",\n \"semiHidden\",\n \"unhideWhenUsed\",\n \"qFormat\",\n \"locked\",\n \"personal\",\n \"personalCompose\",\n \"personalReply\",\n \"rsid\",\n \"pPr\",\n \"rPr\",\n ]),\n \"style definition\",\n );\n styles.push(\n stripUndefined({\n styleId,\n kind,\n name: valueOf(firstChild(element, \"name\")),\n basedOn: valueOf(firstChild(element, \"basedOn\")),\n next: valueOf(firstChild(element, \"next\")),\n isDefault: booleanAttribute(element, \"default\", false),\n paragraph: parseParagraphProperties(singletonChild(element, \"pPr\", \"style definition\")),\n run: parseRunProperties(singletonChild(element, \"rPr\", \"style definition\")),\n }),\n );\n }\n const styleById = new Map(styles.map((style) => [style.styleId, style]));\n for (const style of styles) {\n const seen = new Set<string>();\n let current: ImportedStyle | undefined = style;\n let depth = 0;\n while (current?.basedOn !== undefined) {\n if (!seen.add(current.styleId)) {\n throw new DocxImportError(\n \"invalid_package\",\n \"Style inheritance contains a cycle\",\n \"word/styles.xml\",\n );\n }\n depth += 1;\n if (depth > limits.maxStyleInheritanceDepth) {\n throw limitError(\"DOCX exceeds maxStyleInheritanceDepth\", \"word/styles.xml\");\n }\n current = styleById.get(current.basedOn);\n }\n }\n return styles;\n}\n\nfunction validateEmptyStyleDefaults(defaults: XmlElement): void {\n assertAllowedPropertyChildren(defaults, new Set([\"pPrDefault\", \"rPrDefault\"]), \"style defaults\");\n for (const [wrapperName, propertyName, parse] of [\n [\"pPrDefault\", \"pPr\", parseParagraphProperties],\n [\"rPrDefault\", \"rPr\", parseRunProperties],\n ] as const) {\n const wrappers = children(defaults, wrapperName);\n if (wrappers.length > 1)\n throw new DocxImportError(\n \"invalid_package\",\n `Styles repeats ${wrapperName}`,\n \"word/styles.xml\",\n );\n const wrapper = wrappers[0];\n assertAllowedPropertyChildren(wrapper, new Set([propertyName]), \"style defaults\");\n const properties = singletonChild(wrapper, propertyName, \"style defaults\");\n if (properties && Object.keys(parse(properties)).length > 0) {\n throw new DocxImportError(\n \"unsupported_feature\",\n \"Non-empty document style defaults are not yet represented\",\n \"word/styles.xml\",\n );\n }\n }\n}\n\nfunction parseNumbering(root: XmlElement, limits: DocxImportLimits): ImportedListDefinition[] {\n requireLocalName(root, \"numbering\", \"word/numbering.xml\");\n requireWordNamespace(root, \"word/numbering.xml\");\n rejectUnsupportedContent(root, \"word/numbering.xml\");\n assertAllowedContentChildren(\n root,\n new Set([\"numPicBullet\", \"abstractNum\", \"num\"]),\n \"numbering root\",\n );\n if (children(root, \"numPicBullet\").length > 0) {\n throw new DocxImportError(\n \"unsupported_feature\",\n \"Picture bullets are not yet supported\",\n \"word/numbering.xml\",\n );\n }\n const abstract = new Map<string, ImportedListLevel[]>();\n for (const definition of children(root, \"abstractNum\")) {\n if (abstract.size >= limits.maxNumberingDefinitions) {\n throw limitError(\"DOCX exceeds maxNumberingDefinitions\", \"word/numbering.xml\");\n }\n const id = requiredAttribute(definition, \"abstractNumId\", \"word/numbering.xml\");\n assertAllowedAttributes(\n definition,\n new Set([\"abstractNumId\", \"w15:restartNumberingAfterBreak\"]),\n \"abstract numbering definition\",\n );\n const restartAfterBreak = prefixedAttribute(definition, \"w15\", \"restartNumberingAfterBreak\");\n if (restartAfterBreak !== undefined && parseBooleanLexical(restartAfterBreak)) {\n throw new DocxImportError(\n \"unsupported_feature\",\n \"Restarting numbering after section breaks is not represented\",\n \"word/numbering.xml\",\n );\n }\n assertAllowedPropertyChildren(\n definition,\n new Set([\"nsid\", \"multiLevelType\", \"tmpl\", \"name\", \"lvl\"]),\n \"abstract numbering definition\",\n );\n if (abstract.has(id))\n throw new DocxImportError(\n \"invalid_package\",\n \"Duplicate abstract numbering id\",\n \"word/numbering.xml\",\n );\n const levels = children(definition, \"lvl\").map(parseListLevel);\n validateListLevels(levels, \"abstract numbering definition\");\n abstract.set(id, levels);\n }\n const numIds = new Set<string>();\n const nums = children(root, \"num\");\n if (nums.length > limits.maxNumberingDefinitions) {\n throw limitError(\"DOCX exceeds maxNumberingDefinitions\", \"word/numbering.xml\");\n }\n return nums.map((numbering): ImportedListDefinition => {\n assertAllowedAttributes(numbering, new Set([\"numId\"]), \"numbering definition\");\n assertAllowedPropertyChildren(\n numbering,\n new Set([\"abstractNumId\", \"lvlOverride\"]),\n \"numbering definition\",\n );\n const numId = requiredAttribute(numbering, \"numId\", \"word/numbering.xml\");\n if (numIds.has(numId))\n throw new DocxImportError(\"invalid_package\", \"Duplicate numbering id\", \"word/numbering.xml\");\n numIds.add(numId);\n const abstractNumId = valueOf(firstChild(numbering, \"abstractNumId\"));\n if (!abstractNumId || !abstract.has(abstractNumId))\n throw new DocxImportError(\n \"invalid_package\",\n \"Numbering references a missing abstract definition\",\n \"word/numbering.xml\",\n );\n const overrides = children(numbering, \"lvlOverride\").map((override) => {\n assertAllowedAttributes(override, new Set([\"ilvl\"]), \"numbering override\");\n assertAllowedPropertyChildren(\n override,\n new Set([\"startOverride\", \"lvl\"]),\n \"numbering override\",\n );\n return stripUndefined<{\n level: number;\n start?: number;\n definition?: ImportedListLevel;\n }>({\n level: parseLevelIndex(override),\n start: numberValue(firstChild(override, \"startOverride\")),\n definition: firstChild(override, \"lvl\")\n ? parseListLevel(firstChild(override, \"lvl\") as XmlElement)\n : undefined,\n });\n });\n validateOverrideLevels(overrides);\n return {\n numId,\n abstractNumId,\n levels: (abstract.get(abstractNumId) ?? []).map((level) => ({ ...level })),\n overrides,\n };\n });\n}\n\nfunction parseListLevel(level: XmlElement): ImportedListLevel {\n assertAllowedAttributes(level, new Set([\"ilvl\", \"tplc\", \"w15:tentative\"]), \"numbering level\");\n assertAllowedPropertyChildren(\n level,\n new Set([\n \"start\",\n \"numFmt\",\n \"lvlRestart\",\n \"pStyle\",\n \"isLgl\",\n \"suff\",\n \"lvlText\",\n \"lvlJc\",\n \"pPr\",\n \"rPr\",\n ]),\n \"numbering level\",\n );\n assertUniqueChildNames(level, \"numbering level\");\n for (const name of [\n \"start\",\n \"numFmt\",\n \"lvlRestart\",\n \"pStyle\",\n \"isLgl\",\n \"suff\",\n \"lvlText\",\n \"lvlJc\",\n ] as const) {\n assertAllowedAttributes(firstChild(level, name), new Set([\"val\"]), `numbering level ${name}`);\n }\n const restartElement = firstChild(level, \"lvlRestart\");\n const restart = restartElement ? integerValue(restartElement, 0) : undefined;\n if (restart !== undefined && (restart < 0 || restart > 9)) {\n throw new DocxImportError(\n \"invalid_package\",\n \"Numbering restart level must be from 0 through 9\",\n \"word/numbering.xml\",\n );\n }\n return stripUndefined({\n level: parseLevelIndex(level),\n start: integerValue(firstChild(level, \"start\"), 1),\n restart,\n legal: optionalBoolean(firstChild(level, \"isLgl\")),\n alignment: valueOf(firstChild(level, \"lvlJc\")),\n format: valueOf(firstChild(level, \"numFmt\")),\n text: valueOf(firstChild(level, \"lvlText\")),\n suffix: valueOf(firstChild(level, \"suff\")),\n paragraphStyleId: valueOf(firstChild(level, \"pStyle\")),\n paragraph: parseParagraphProperties(singletonChild(level, \"pPr\", \"numbering level\")),\n run: parseRunProperties(singletonChild(level, \"rPr\", \"numbering level\")),\n });\n}\n\nfunction parseLevelIndex(element: XmlElement): number {\n const raw = requiredAttribute(element, \"ilvl\", \"word/numbering.xml\");\n const level = Number(raw);\n if (!Number.isInteger(level) || level < 0 || level > 8) {\n throw new DocxImportError(\n \"invalid_package\",\n \"Numbering level must be an integer from 0 through 8\",\n \"word/numbering.xml\",\n );\n }\n return level;\n}\n\nfunction validateListLevels(levels: readonly ImportedListLevel[], label: string): void {\n if (levels.length > 9)\n throw new DocxImportError(\n \"invalid_package\",\n `${label} has more than nine levels`,\n \"word/numbering.xml\",\n );\n const seen = new Set<number>();\n for (const level of levels) {\n if (seen.has(level.level))\n throw new DocxImportError(\n \"invalid_package\",\n `${label} repeats a level`,\n \"word/numbering.xml\",\n );\n seen.add(level.level);\n }\n}\n\nfunction validateOverrideLevels(\n overrides: ReadonlyArray<{ level: number; start?: number; definition?: ImportedListLevel }>,\n): void {\n if (overrides.length > 9)\n throw new DocxImportError(\n \"invalid_package\",\n \"Numbering definition has more than nine overrides\",\n \"word/numbering.xml\",\n );\n const seen = new Set<number>();\n for (const override of overrides) {\n if (seen.has(override.level))\n throw new DocxImportError(\n \"invalid_package\",\n \"Numbering definition repeats an override\",\n \"word/numbering.xml\",\n );\n seen.add(override.level);\n if (override.definition && override.definition.level !== override.level) {\n throw new DocxImportError(\n \"invalid_package\",\n \"Numbering override level disagrees with its definition\",\n \"word/numbering.xml\",\n );\n }\n }\n}\n\nfunction parseParagraphProperties(element: XmlElement | undefined): ImportedParagraphStyle {\n assertAllowedPropertyChildren(\n element,\n new Set([\n \"pStyle\",\n \"jc\",\n \"spacing\",\n \"ind\",\n \"keepNext\",\n \"keepLines\",\n \"pageBreakBefore\",\n \"outlineLvl\",\n \"bidi\",\n \"numPr\",\n \"sectPr\",\n ]),\n \"paragraph properties\",\n );\n assertUniqueChildNames(element, \"paragraph properties\");\n const spacing = firstChild(element, \"spacing\");\n const indent = firstChild(element, \"ind\");\n const numProperties = firstChild(element, \"numPr\");\n assertAllowedPropertyChildren(\n numProperties,\n new Set([\"numId\", \"ilvl\"]),\n \"paragraph numbering properties\",\n );\n assertUniqueChildNames(numProperties, \"paragraph numbering properties\");\n for (const name of [\n \"pStyle\",\n \"jc\",\n \"keepNext\",\n \"keepLines\",\n \"pageBreakBefore\",\n \"outlineLvl\",\n \"bidi\",\n ] as const) {\n assertAllowedAttributes(firstChild(element, name), new Set([\"val\"]), `paragraph ${name}`);\n }\n assertAllowedAttributes(\n spacing,\n new Set([\"before\", \"after\", \"line\", \"lineRule\"]),\n \"paragraph spacing\",\n );\n assertAllowedAttributes(\n indent,\n new Set([\"left\", \"right\", \"firstLine\", \"hanging\"]),\n \"paragraph indentation\",\n );\n assertAllowedAttributes(numProperties, new Set(), \"paragraph numbering properties\");\n assertAllowedAttributes(\n firstChild(numProperties, \"numId\"),\n new Set([\"val\"]),\n \"paragraph numbering id\",\n );\n assertAllowedAttributes(\n firstChild(numProperties, \"ilvl\"),\n new Set([\"val\"]),\n \"paragraph numbering level\",\n );\n if (attribute(indent, \"firstLine\") !== undefined && attribute(indent, \"hanging\") !== undefined) {\n throw new DocxImportError(\n \"invalid_package\",\n \"Paragraph indentation cannot specify both firstLine and hanging\",\n \"paragraph indentation\",\n );\n }\n const lineRule = attribute(spacing, \"lineRule\");\n if (\n lineRule !== undefined &&\n lineRule !== \"auto\" &&\n lineRule !== \"exact\" &&\n lineRule !== \"atLeast\"\n ) {\n throw new DocxImportError(\n \"invalid_package\",\n \"Paragraph line rule is invalid\",\n \"paragraph spacing\",\n );\n }\n const numId = valueOf(firstChild(numProperties, \"numId\"));\n return stripUndefined({\n alignment: valueOf(firstChild(element, \"jc\")),\n spaceBeforePt: numberAttribute(spacing, \"before\", twipsToPt),\n spaceAfterPt: numberAttribute(spacing, \"after\", twipsToPt),\n line: numberAttribute(spacing, \"line\"),\n lineRule,\n indentLeftPt: numberAttribute(indent, \"left\", twipsToPt),\n indentRightPt: numberAttribute(indent, \"right\", twipsToPt),\n firstLinePt: numberAttribute(indent, \"firstLine\", twipsToPt),\n hangingPt: numberAttribute(indent, \"hanging\", twipsToPt),\n keepNext: optionalBoolean(firstChild(element, \"keepNext\")),\n keepLines: optionalBoolean(firstChild(element, \"keepLines\")),\n pageBreakBefore: optionalBoolean(firstChild(element, \"pageBreakBefore\")),\n outlineLevel: numberValue(firstChild(element, \"outlineLvl\")),\n bidirectional: optionalBoolean(firstChild(element, \"bidi\")),\n list:\n numId === undefined\n ? undefined\n : { numId, level: integerValue(firstChild(numProperties, \"ilvl\"), 0) },\n });\n}\n\nfunction parseRunProperties(element: XmlElement | undefined): ImportedRunStyle {\n assertAllowedPropertyChildren(\n element,\n new Set([\n \"rStyle\",\n \"rFonts\",\n \"sz\",\n \"szCs\",\n \"color\",\n \"b\",\n \"bCs\",\n \"i\",\n \"iCs\",\n \"u\",\n \"strike\",\n \"highlight\",\n \"vertAlign\",\n \"lang\",\n ]),\n \"run properties\",\n );\n assertUniqueChildNames(element, \"run properties\");\n const fonts = firstChild(element, \"rFonts\");\n const color = firstChild(element, \"color\");\n if (\n [\"asciiTheme\", \"hAnsiTheme\", \"eastAsiaTheme\", \"cstheme\"].some(\n (name) => attribute(fonts, name) !== undefined,\n )\n ) {\n throw new DocxImportError(\n \"unsupported_feature\",\n \"Theme font references are not represented by the document model\",\n \"run properties\",\n );\n }\n if (\n [\"themeColor\", \"themeTint\", \"themeShade\"].some((name) => attribute(color, name) !== undefined)\n ) {\n throw new DocxImportError(\n \"unsupported_feature\",\n \"Theme colors are not represented by the document model\",\n \"run properties\",\n );\n }\n assertAllowedAttributes(fonts, new Set([\"ascii\", \"hAnsi\", \"eastAsia\", \"cs\"]), \"run fonts\");\n assertAllowedAttributes(color, new Set([\"val\"]), \"run color\");\n const underlineElement = firstChild(element, \"u\");\n assertAllowedAttributes(underlineElement, new Set([\"val\"]), \"run underline\");\n for (const name of [\n \"rStyle\",\n \"sz\",\n \"szCs\",\n \"b\",\n \"bCs\",\n \"i\",\n \"iCs\",\n \"strike\",\n \"highlight\",\n \"vertAlign\",\n \"lang\",\n ] as const) {\n assertAllowedAttributes(firstChild(element, name), new Set([\"val\"]), `run ${name}`);\n }\n const underline = valueOf(underlineElement);\n if (underline !== undefined && underline !== \"single\" && underline !== \"none\") {\n throw new DocxImportError(\n \"unsupported_feature\",\n `Underline style ${underline} is not represented by the document model`,\n \"run properties\",\n );\n }\n const directFonts = [\"ascii\", \"hAnsi\", \"eastAsia\", \"cs\"]\n .map((name) => attribute(fonts, name))\n .filter((value): value is string => value !== undefined);\n if (new Set(directFonts).size > 1) {\n throw new DocxImportError(\n \"unsupported_feature\",\n \"Script-specific font families are not represented by the document model\",\n \"run properties\",\n );\n }\n const colorValue = valueOf(color);\n if (colorValue?.toLowerCase() === \"auto\") {\n throw new DocxImportError(\n \"unsupported_feature\",\n \"Automatic run colors are not represented by the document model\",\n \"run properties\",\n );\n }\n return stripUndefined({\n fontFamily: directFonts[0],\n fontSizePt: numberValue(firstChild(element, \"sz\"), (value) => value / 2),\n fontSizeComplexScriptPt: numberValue(firstChild(element, \"szCs\"), (value) => value / 2),\n color: colorValue,\n bold: optionalBoolean(firstChild(element, \"b\")),\n boldComplexScript: optionalBoolean(firstChild(element, \"bCs\")),\n italic: optionalBoolean(firstChild(element, \"i\")),\n italicComplexScript: optionalBoolean(firstChild(element, \"iCs\")),\n underline,\n strike: optionalBoolean(firstChild(element, \"strike\")),\n highlight: valueOf(firstChild(element, \"highlight\")),\n verticalAlign: valueOf(firstChild(element, \"vertAlign\")),\n language: attribute(firstChild(element, \"lang\"), \"val\"),\n });\n}\n\nfunction assertAllowedPropertyChildren(\n element: XmlElement | undefined,\n allowed: ReadonlySet<string>,\n label: string,\n): void {\n for (const child of elementChildren(element)) {\n if (!allowed.has(child.localName)) {\n throw new DocxImportError(\n \"unsupported_feature\",\n `Unsupported ${label}: ${child.name}`,\n label,\n );\n }\n }\n}\n\nfunction assertAllowedContentChildren(\n element: XmlElement | undefined,\n allowed: ReadonlySet<string>,\n label: string,\n): void {\n for (const child of elementChildren(element)) {\n if (!allowed.has(child.localName) && !NON_CONTENT_MARKERS.has(child.localName)) {\n throw new DocxImportError(\n \"unsupported_feature\",\n `Unsupported ${label} content: ${child.name}`,\n label,\n );\n }\n }\n}\n\nfunction assertAllowedAttributes(\n element: XmlElement | undefined,\n allowed: ReadonlySet<string>,\n label: string,\n): void {\n if (!element) return;\n for (const name of element.attributes.keys()) {\n if (name === \"xmlns\" || name.startsWith(\"xmlns:\")) continue;\n const permitted = allowed.has(name) || (name.startsWith(\"w:\") && allowed.has(name.slice(2)));\n if (!permitted) {\n throw new DocxImportError(\n \"unsupported_feature\",\n `Unsupported ${label} attribute: ${name}`,\n label,\n );\n }\n }\n}\n\nfunction parseSection(\n element: XmlElement,\n startBlockIndex: number,\n endBlockIndex: number,\n relationships: ReadonlyMap<string, Relationship>,\n): ImportedSection {\n assertAllowedAttributes(element, new Set([\"rsidR\", \"rsidRPr\", \"rsidSect\"]), \"section properties\");\n assertAllowedPropertyChildren(\n element,\n new Set([\n \"headerReference\",\n \"footerReference\",\n \"type\",\n \"pgSz\",\n \"pgMar\",\n \"pgNumType\",\n \"titlePg\",\n \"docGrid\",\n ]),\n \"section properties\",\n );\n for (const singleton of [\"type\", \"pgSz\", \"pgMar\", \"pgNumType\", \"titlePg\", \"docGrid\"] as const) {\n if (children(element, singleton).length > 1) {\n throw new DocxImportError(\n \"invalid_package\",\n `Section repeats ${singleton}`,\n \"word/document.xml\",\n );\n }\n }\n const pageSize = firstChild(element, \"pgSz\");\n const margins = firstChild(element, \"pgMar\");\n assertAllowedAttributes(pageSize, new Set([\"w\", \"h\", \"orient\", \"code\"]), \"section page size\");\n assertAllowedAttributes(\n margins,\n new Set([\"top\", \"right\", \"bottom\", \"left\", \"header\", \"footer\", \"gutter\"]),\n \"section page margins\",\n );\n assertAllowedContentChildren(pageSize, new Set(), \"section page size\");\n assertAllowedContentChildren(margins, new Set(), \"section page margins\");\n if (\n pageSize &&\n (attribute(pageSize, \"w\") === undefined || attribute(pageSize, \"h\") === undefined)\n ) {\n throw new DocxImportError(\n \"invalid_package\",\n \"Section page size is incomplete\",\n \"word/document.xml\",\n );\n }\n if (\n margins &&\n [\"top\", \"right\", \"bottom\", \"left\", \"header\", \"footer\", \"gutter\"].some(\n (name) => attribute(margins, name) === undefined,\n )\n ) {\n throw new DocxImportError(\n \"invalid_package\",\n \"Section page margins are incomplete\",\n \"word/document.xml\",\n );\n }\n const pageNumbering = firstChild(element, \"pgNumType\");\n assertAllowedAttributes(pageNumbering, new Set(), \"section page numbering\");\n assertAllowedContentChildren(pageNumbering, new Set(), \"section page numbering\");\n const documentGrid = firstChild(element, \"docGrid\");\n assertAllowedAttributes(\n documentGrid,\n new Set([\"type\", \"linePitch\", \"charSpace\"]),\n \"section document grid\",\n );\n assertAllowedContentChildren(documentGrid, new Set(), \"section document grid\");\n const gridType = attribute(documentGrid, \"type\");\n if (gridType !== undefined && gridType !== \"default\") {\n throw new DocxImportError(\n \"unsupported_feature\",\n `Document grid type ${gridType} is not represented`,\n \"word/document.xml\",\n );\n }\n numberAttribute(documentGrid, \"linePitch\");\n numberAttribute(documentGrid, \"charSpace\");\n const sectionTypeElement = firstChild(element, \"type\");\n const titlePageElement = firstChild(element, \"titlePg\");\n assertAllowedAttributes(sectionTypeElement, new Set([\"val\"]), \"section break type\");\n assertAllowedAttributes(titlePageElement, new Set([\"val\"]), \"section title-page setting\");\n assertAllowedContentChildren(sectionTypeElement, new Set(), \"section break type\");\n assertAllowedContentChildren(titlePageElement, new Set(), \"section title-page setting\");\n const orientation = attribute(pageSize, \"orient\");\n if (orientation !== undefined && orientation !== \"portrait\" && orientation !== \"landscape\") {\n throw new DocxImportError(\n \"invalid_package\",\n \"Section page orientation is invalid\",\n \"word/document.xml\",\n );\n }\n const sectionType = valueOf(sectionTypeElement);\n if (\n sectionType !== undefined &&\n !new Set([\"nextPage\", \"nextColumn\", \"continuous\", \"evenPage\", \"oddPage\"]).has(sectionType)\n ) {\n throw new DocxImportError(\n \"invalid_package\",\n \"Section break type is invalid\",\n \"word/document.xml\",\n );\n }\n const references = (kind: \"header\" | \"footer\"): ImportedSectionReference[] =>\n children(element, `${kind}Reference`).map((reference) => {\n assertAllowedAttributes(reference, new Set([\"r:id\", \"type\"]), `${kind} reference`);\n assertAllowedContentChildren(reference, new Set(), `${kind} reference`);\n const relationshipId = requiredPrefixedAttribute(reference, \"r\", \"id\", \"word/document.xml\");\n const relationship = relationships.get(relationshipId);\n if (!relationship || relationship.type !== `${WORD_RELATIONSHIP_BASE}${kind}`) {\n throw new DocxImportError(\n \"invalid_package\",\n `Section references a missing ${kind}`,\n \"word/document.xml\",\n );\n }\n const referenceKind = attribute(reference, \"type\") ?? \"default\";\n if (referenceKind !== \"default\" && referenceKind !== \"first\" && referenceKind !== \"even\") {\n throw new DocxImportError(\n \"invalid_package\",\n `Invalid ${kind} reference kind`,\n \"word/document.xml\",\n );\n }\n return {\n kind: referenceKind,\n relationshipId,\n partName: relationship.partName,\n };\n });\n const headers = references(\"header\");\n const footers = references(\"footer\");\n for (const storyReferences of [headers, footers]) {\n const kinds = new Set<string>();\n for (const reference of storyReferences) {\n if (kinds.has(reference.kind))\n throw new DocxImportError(\n \"invalid_package\",\n \"Section repeats a header/footer reference kind\",\n \"word/document.xml\",\n );\n kinds.add(reference.kind);\n }\n }\n return stripUndefined({\n startBlockIndex,\n endBlockIndex,\n type: sectionType,\n titlePage: booleanValue(titlePageElement, false),\n page: {\n widthPt: numberAttribute(pageSize, \"w\", twipsToPt) ?? 612,\n heightPt: numberAttribute(pageSize, \"h\", twipsToPt) ?? 792,\n ...(orientation !== undefined ? { orientation } : {}),\n marginTopPt: numberAttribute(margins, \"top\", twipsToPt) ?? 72,\n marginRightPt: numberAttribute(margins, \"right\", twipsToPt) ?? 72,\n marginBottomPt: numberAttribute(margins, \"bottom\", twipsToPt) ?? 72,\n marginLeftPt: numberAttribute(margins, \"left\", twipsToPt) ?? 72,\n headerPt: numberAttribute(margins, \"header\", twipsToPt) ?? 36,\n footerPt: numberAttribute(margins, \"footer\", twipsToPt) ?? 36,\n gutterPt: numberAttribute(margins, \"gutter\", twipsToPt) ?? 0,\n },\n headers,\n footers,\n });\n}\n\nfunction defaultSection(startBlockIndex: number, endBlockIndex: number): ImportedSection {\n return {\n startBlockIndex,\n endBlockIndex,\n titlePage: false,\n page: {\n widthPt: 612,\n heightPt: 792,\n marginTopPt: 72,\n marginRightPt: 72,\n marginBottomPt: 72,\n marginLeftPt: 72,\n headerPt: 36,\n footerPt: 36,\n gutterPt: 0,\n },\n headers: [],\n footers: [],\n };\n}\n\nfunction resolveSectionStoryInheritance(sections: ImportedSection[]): void {\n for (let index = 1; index < sections.length; index += 1) {\n const previous = sections[index - 1];\n const current = sections[index];\n if (!previous || !current) continue;\n for (const key of [\"headers\", \"footers\"] as const) {\n const present = new Set(current[key].map((reference) => reference.kind));\n for (const inherited of previous[key]) {\n if (!present.has(inherited.kind)) current[key].push({ ...inherited });\n }\n }\n }\n}\n\nfunction validateProjectedStories(\n sections: readonly ImportedSection[],\n headers: readonly ImportedHeaderFooter[],\n footers: readonly ImportedHeaderFooter[],\n maximumBlocks: number,\n maximumCharacters: number,\n): void {\n const costByPart = new Map<string, { blocks: number; characters: number }>();\n for (const story of [...headers, ...footers]) {\n costByPart.set(story.partName, measureBlockTree(story.blocks));\n }\n let projectedBlocks = 0;\n let projectedCharacters = 0;\n for (const section of sections) {\n for (const reference of [...section.headers, ...section.footers]) {\n const storyCost = costByPart.get(reference.partName);\n if (storyCost === undefined) {\n throw new DocxImportError(\n \"invalid_package\",\n \"Section references an unparsed header or footer\",\n reference.partName,\n );\n }\n projectedBlocks += storyCost.blocks;\n projectedCharacters += storyCost.characters;\n if (projectedBlocks > maximumBlocks)\n throw limitError(\"DOCX exceeds maxProjectedStoryBlocks\", reference.partName);\n if (projectedCharacters > maximumCharacters) {\n throw limitError(\"DOCX exceeds maxProjectedStoryCharacters\", reference.partName);\n }\n }\n }\n}\n\nfunction measureBlockTree(blocks: readonly ImportedBlock[]): {\n blocks: number;\n characters: number;\n} {\n let count = 0;\n let characters = 0;\n const stack = [...blocks];\n while (stack.length > 0) {\n const block = stack.pop();\n if (!block) continue;\n count += 1;\n if (block.kind === \"paragraph\") {\n for (const inline of block.inlines)\n if (inline.kind === \"run\") characters += inline.text.length;\n } else if (block.kind === \"table\") {\n for (const row of block.rows)\n for (const cell of row.cells) {\n for (const child of cell.blocks) stack.push(child);\n }\n }\n }\n return { blocks: count, characters };\n}\n\ntype ExtendedComment = { parentParagraphId?: string; resolved?: boolean };\n\nfunction parseCommentsExtended(root: XmlElement, maximum: number): Map<string, ExtendedComment> {\n requireLocalName(root, \"commentsEx\", \"word/commentsExtended.xml\");\n requirePrefixedNamespaceTree(\n root,\n \"w15\",\n COMMENTS_EXTENDED_NAMESPACE,\n \"word/commentsExtended.xml\",\n );\n const result = new Map<string, ExtendedComment>();\n for (const comment of elementChildren(root)) {\n if (comment.localName !== \"commentEx\")\n throw unsupportedElement(comment, \"word/commentsExtended.xml\");\n if (result.size >= maximum)\n throw limitError(\"DOCX exceeds maxComments\", \"word/commentsExtended.xml\");\n const paragraphId = requiredPrefixedAttribute(\n comment,\n \"w15\",\n \"paraId\",\n \"word/commentsExtended.xml\",\n );\n if (result.has(paragraphId))\n throw new DocxImportError(\n \"invalid_package\",\n \"Duplicate extended comment paragraph id\",\n \"word/commentsExtended.xml\",\n );\n const parentParagraphId = prefixedAttribute(comment, \"w15\", \"paraIdParent\");\n const done = prefixedAttribute(comment, \"w15\", \"done\");\n result.set(paragraphId, {\n ...(parentParagraphId !== undefined ? { parentParagraphId } : {}),\n ...(done !== undefined ? { resolved: !FALSE_VALUES.has(done.toLowerCase()) } : {}),\n });\n }\n return result;\n}\n\nfunction parseComments(\n root: XmlElement,\n context: ParseContext,\n extended: ReadonlyMap<string, ExtendedComment>,\n maximum: number,\n): ImportedComment[] {\n requireLocalName(root, \"comments\", \"word/comments.xml\");\n rejectUnsupportedContent(root, \"word/comments.xml\");\n requireWordNamespace(root, \"word/comments.xml\");\n const drafts: Array<{ paragraphId?: string; comment: ImportedComment }> = [];\n for (const comment of elementChildren(root)) {\n if (comment.localName !== \"comment\") throw unsupportedElement(comment, \"word/comments.xml\");\n if (drafts.length >= maximum) throw limitError(\"DOCX exceeds maxComments\", \"word/comments.xml\");\n const lastParagraph = lastDescendant(comment, \"p\");\n const paragraphId = prefixedAttribute(lastParagraph, \"w14\", \"paraId\");\n drafts.push({\n // commentsExtended keys a comment by the paraId of its final paragraph.\n ...(paragraphId !== undefined ? { paragraphId } : {}),\n comment: stripUndefined<ImportedComment>({\n id: requiredAttribute(comment, \"id\", \"word/comments.xml\"),\n author: attribute(comment, \"author\"),\n initials: attribute(comment, \"initials\"),\n createdAt: attribute(comment, \"date\"),\n blocks: parseBlockContainer(comment, context),\n }),\n });\n }\n const commentIdByParagraphId = new Map<string, string>();\n const commentIds = new Set<string>();\n for (const draft of drafts) {\n if (commentIds.has(draft.comment.id))\n throw new DocxImportError(\"invalid_package\", \"Duplicate comment id\", \"word/comments.xml\");\n commentIds.add(draft.comment.id);\n if (!draft.paragraphId) continue;\n if (commentIdByParagraphId.has(draft.paragraphId)) {\n throw new DocxImportError(\n \"invalid_package\",\n \"Duplicate comment paragraph id\",\n \"word/comments.xml\",\n );\n }\n commentIdByParagraphId.set(draft.paragraphId, draft.comment.id);\n }\n for (const draft of drafts) {\n if (!draft.paragraphId) continue;\n const metadata = extended.get(draft.paragraphId);\n if (!metadata) continue;\n if (metadata.resolved !== undefined) draft.comment.resolved = metadata.resolved;\n if (metadata.parentParagraphId !== undefined) {\n const parentId = commentIdByParagraphId.get(metadata.parentParagraphId);\n if (!parentId)\n throw new DocxImportError(\n \"invalid_package\",\n \"Comment reply references a missing parent\",\n \"word/commentsExtended.xml\",\n );\n draft.comment.parentId = parentId;\n }\n }\n for (const paragraphId of extended.keys()) {\n if (!commentIdByParagraphId.has(paragraphId)) {\n throw new DocxImportError(\n \"invalid_package\",\n \"Extended comment references a missing comment paragraph\",\n \"word/commentsExtended.xml\",\n );\n }\n }\n return drafts.map((draft) => draft.comment);\n}\n\nfunction validateCommentReferences(\n blocks: readonly ImportedBlock[],\n headers: readonly ImportedHeaderFooter[],\n footers: readonly ImportedHeaderFooter[],\n comments: readonly ImportedComment[],\n): void {\n const ids = new Set(comments.map((comment) => comment.id));\n const commentById = new Map(comments.map((comment) => [comment.id, comment]));\n const roots = new Set(\n comments.filter((comment) => comment.parentId === undefined).map((comment) => comment.id),\n );\n for (const comment of comments) {\n if (comment.parentId !== undefined && !ids.has(comment.parentId)) {\n throw new DocxImportError(\n \"invalid_package\",\n \"Comment reply references a missing parent\",\n \"word/commentsExtended.xml\",\n );\n }\n }\n const visitState = new Map<string, 1 | 2>();\n for (const comment of comments) {\n if (visitState.get(comment.id) === 2) continue;\n const path: string[] = [];\n let current: ImportedComment | undefined = comment;\n while (current && visitState.get(current.id) === undefined) {\n visitState.set(current.id, 1);\n path.push(current.id);\n current = current.parentId === undefined ? undefined : commentById.get(current.parentId);\n }\n if (current && visitState.get(current.id) === 1) {\n throw new DocxImportError(\n \"invalid_package\",\n \"Comment reply graph contains a cycle\",\n \"word/commentsExtended.xml\",\n );\n }\n for (const id of path) visitState.set(id, 2);\n }\n type Counts = { start: number; end: number; reference: number };\n const storyCountsByComment = new Map<string, Counts[]>();\n const countStory = (items: readonly ImportedBlock[]): void => {\n const counts = new Map<string, Counts>();\n const walk = (nested: readonly ImportedBlock[]): void => {\n for (const block of nested) {\n if (block.kind === \"paragraph\") {\n for (const anchor of block.commentAnchors) {\n if (!ids.has(anchor.commentId))\n throw new DocxImportError(\n \"invalid_package\",\n \"Document references a missing comment\",\n \"word/comments.xml\",\n );\n if (!roots.has(anchor.commentId))\n throw new DocxImportError(\n \"invalid_package\",\n \"Document anchors a comment reply instead of its root\",\n \"word/comments.xml\",\n );\n const count = counts.get(anchor.commentId) ?? { start: 0, end: 0, reference: 0 };\n count[anchor.kind] += 1;\n counts.set(anchor.commentId, count);\n }\n } else if (block.kind === \"table\") {\n for (const row of block.rows) for (const cell of row.cells) walk(cell.blocks);\n }\n }\n };\n walk(items);\n for (const [commentId, count] of counts) {\n const stories = storyCountsByComment.get(commentId);\n if (stories) stories.push(count);\n else storyCountsByComment.set(commentId, [count]);\n }\n };\n countStory(blocks);\n for (const item of [...headers, ...footers]) countStory(item.blocks);\n for (const comment of comments) {\n const anchoredStories = storyCountsByComment.get(comment.id) ?? [];\n if (comment.parentId === undefined) {\n if (anchoredStories.length !== 1) {\n throw new DocxImportError(\n \"invalid_package\",\n \"Root comment must be anchored in exactly one document story\",\n \"word/document.xml\",\n );\n }\n const count = anchoredStories[0] as Counts;\n // OOXML permits point comments with either or both range markers absent;\n // the commentReference remains the authoritative anchor.\n if (count.reference !== 1 || count.start > 1 || count.end > 1) {\n throw new DocxImportError(\n \"invalid_package\",\n \"Comment story has duplicate or missing reference anchors\",\n \"word/document.xml\",\n );\n }\n } else if (anchoredStories.length > 0) {\n throw new DocxImportError(\n \"invalid_package\",\n \"Comment replies must not have document anchors\",\n \"word/document.xml\",\n );\n }\n }\n}\n\nconst UNSUPPORTED_CONTENT = new Map<string, string>([\n [\"drawing\", \"drawings and images\"],\n [\"pict\", \"VML drawings and images\"],\n [\"object\", \"embedded objects\"],\n [\"oleObject\", \"OLE objects\"],\n [\"altChunk\", \"altChunk content\"],\n [\"hyperlink\", \"hyperlinks\"],\n [\"fldSimple\", \"fields\"],\n [\"fldChar\", \"fields\"],\n [\"instrText\", \"fields\"],\n [\"footnoteReference\", \"footnotes\"],\n [\"endnoteReference\", \"endnotes\"],\n [\"sdt\", \"content controls\"],\n [\"customXml\", \"custom XML content\"],\n [\"smartTag\", \"smart tags\"],\n [\"oMath\", \"equations\"],\n [\"oMathPara\", \"equations\"],\n [\"sym\", \"symbol-font characters\"],\n [\"ruby\", \"ruby annotations\"],\n [\"subDoc\", \"subdocuments\"],\n [\"txbxContent\", \"text boxes\"],\n [\"AlternateContent\", \"alternate content\"],\n [\"moveFrom\", \"tracked moves\"],\n [\"moveTo\", \"tracked moves\"],\n [\"pPrChange\", \"paragraph-property revisions\"],\n [\"rPrChange\", \"run-property revisions\"],\n [\"tblPrChange\", \"table-property revisions\"],\n [\"tblGridChange\", \"table-grid revisions\"],\n [\"trPrChange\", \"table-row-property revisions\"],\n [\"tcPrChange\", \"table-cell-property revisions\"],\n [\"sectPrChange\", \"section-property revisions\"],\n [\"numberingChange\", \"numbering-property revisions\"],\n [\"cellIns\", \"table-cell insertion revisions\"],\n [\"cellDel\", \"table-cell deletion revisions\"],\n [\"cellMerge\", \"table-cell merge revisions\"],\n [\"background\", \"document backgrounds\"],\n]);\n\nfunction rejectUnsupportedContent(root: XmlElement, partName: string): void {\n const stack = [root];\n while (stack.length > 0) {\n const element = stack.pop();\n if (!element) break;\n const feature = UNSUPPORTED_CONTENT.get(element.localName);\n if (feature)\n throw new DocxImportError(\n \"unsupported_feature\",\n `DOCX ${feature} are not yet supported`,\n partName,\n );\n for (const child of elementChildren(element)) stack.push(child);\n }\n}\n\nconst NON_CONTENT_MARKERS = new Set([\n \"bookmarkStart\",\n \"bookmarkEnd\",\n \"proofErr\",\n \"permStart\",\n \"permEnd\",\n \"commentReference\",\n \"lastRenderedPageBreak\",\n]);\n\nfunction unsupportedElement(element: XmlElement, partName: string): DocxImportError {\n return new DocxImportError(\n \"unsupported_feature\",\n `Unsupported content element: ${element.name}`,\n partName,\n );\n}\n\nfunction relationshipSourcePart(relationshipPart: string): string {\n if (relationshipPart === \"_rels/.rels\") return \"\";\n const match = /^(.*\\/)?_rels\\/([^/]+)\\.rels$/.exec(relationshipPart);\n if (!match)\n throw new DocxImportError(\n \"invalid_package\",\n \"Invalid relationships part name\",\n relationshipPart,\n );\n return `${match[1] ?? \"\"}${match[2] ?? \"\"}`;\n}\n\nfunction resolvePartTarget(sourcePart: string, target: string, relationshipsPart: string): string {\n if (\n /[\\u0000-\\u001f\\u007f]/.test(target) ||\n target.includes(\"\\\\\") ||\n target.startsWith(\"//\") ||\n /%(?:2e|2f|5c)/i.test(target)\n ) {\n throw new DocxImportError(\"invalid_package\", \"Unsafe relationship target\", relationshipsPart);\n }\n const packageAbsolute = target.startsWith(\"/\");\n const relativeTarget = packageAbsolute ? target.slice(1) : target;\n const base =\n !packageAbsolute && sourcePart.includes(\"/\")\n ? sourcePart.slice(0, sourcePart.lastIndexOf(\"/\") + 1)\n : \"\";\n const combined = `${base}${relativeTarget}`;\n if (combined.includes(\"//\"))\n throw new DocxImportError(\n \"invalid_package\",\n \"Relationship target contains an empty path segment\",\n relationshipsPart,\n );\n let segmentCount = 1;\n for (let index = 0; index < combined.length; index += 1) {\n if (combined.charCodeAt(index) === 47) {\n segmentCount += 1;\n if (segmentCount > 256)\n throw limitError(\n \"Relationship target exceeds its path-segment safety cap\",\n relationshipsPart,\n );\n }\n }\n const output: string[] = [];\n for (const segment of combined.split(\"/\")) {\n if (segment === \"\")\n throw new DocxImportError(\n \"invalid_package\",\n \"Relationship target contains an empty path segment\",\n relationshipsPart,\n );\n if (segment === \".\") continue;\n if (segment === \"..\") {\n if (output.length === 0)\n throw new DocxImportError(\n \"invalid_package\",\n \"Relationship target escapes the package root\",\n relationshipsPart,\n );\n output.pop();\n } else output.push(segment);\n }\n return output.join(\"/\");\n}\n\nfunction consumeBlock(budget: ImportBudget): void {\n budget.blocks += 1;\n if (budget.blocks > budget.limits.maxBlocks) throw limitError(\"DOCX exceeds maxBlocks\");\n}\n\nfunction consumeText(budget: ImportBudget, characters: number): void {\n budget.textCharacters += characters;\n if (budget.textCharacters > budget.limits.maxTextCharacters)\n throw limitError(\"DOCX exceeds maxTextCharacters\");\n}\n\nfunction elementChildren(element: XmlElement | undefined): XmlElement[] {\n return element?.children.filter((child): child is XmlElement => child.type === \"element\") ?? [];\n}\n\nfunction children(element: XmlElement | undefined, name: string): XmlElement[] {\n return elementChildren(element).filter((child) => child.localName === name);\n}\n\nfunction firstChild(element: XmlElement | undefined, name: string): XmlElement | undefined {\n return elementChildren(element).find((child) => child.localName === name);\n}\n\nfunction singletonChild(\n element: XmlElement | undefined,\n name: string,\n label: string,\n): XmlElement | undefined {\n let match: XmlElement | undefined;\n for (const child of elementChildren(element)) {\n if (child.localName !== name) continue;\n if (match) throw new DocxImportError(\"invalid_package\", `${label} repeats ${name}`);\n match = child;\n }\n return match;\n}\n\nfunction assertUniqueChildNames(element: XmlElement | undefined, label: string): void {\n const seen = new Set<string>();\n for (const child of elementChildren(element)) {\n if (seen.has(child.localName)) {\n throw new DocxImportError(\"invalid_package\", `${label} repeats ${child.localName}`);\n }\n seen.add(child.localName);\n }\n}\n\nfunction lastDescendant(element: XmlElement, name: string): XmlElement | undefined {\n let match: XmlElement | undefined;\n const stack = [element];\n while (stack.length > 0) {\n const current = stack.pop();\n if (!current) continue;\n if (current.localName === name) match = current;\n const nested = elementChildren(current);\n for (let index = nested.length - 1; index >= 0; index -= 1) {\n const child = nested[index];\n if (child) stack.push(child);\n }\n }\n return match;\n}\n\nfunction onlyElement(element: XmlElement, name: string, partName: string): XmlElement {\n const matches = children(element, name);\n if (matches.length !== 1)\n throw new DocxImportError(\"invalid_package\", `Expected exactly one ${name} element`, partName);\n return matches[0] as XmlElement;\n}\n\nfunction attribute(element: XmlElement | undefined, name: string): string | undefined {\n return prefixedAttribute(element, \"w\", name);\n}\n\nfunction requiredAttribute(element: XmlElement, name: string, partName: string): string {\n const value = attribute(element, name);\n if (value === undefined || value === \"\")\n throw new DocxImportError(\"invalid_package\", `Missing required ${name} attribute`, partName);\n return value;\n}\n\nfunction prefixedAttribute(\n element: XmlElement | undefined,\n prefix: string,\n name: string,\n): string | undefined {\n return element?.attributes.get(`${prefix}:${name}`);\n}\n\nfunction requiredPrefixedAttribute(\n element: XmlElement,\n prefix: string,\n name: string,\n partName: string,\n): string {\n const value = prefixedAttribute(element, prefix, name);\n if (value === undefined || value === \"\") {\n throw new DocxImportError(\n \"invalid_package\",\n `Missing required ${prefix}:${name} attribute`,\n partName,\n );\n }\n return value;\n}\n\nfunction exactAttribute(element: XmlElement | undefined, name: string): string | undefined {\n return element?.attributes.get(name);\n}\n\nfunction requiredExactAttribute(element: XmlElement, name: string, partName: string): string {\n const value = exactAttribute(element, name);\n if (value === undefined || value === \"\")\n throw new DocxImportError(\"invalid_package\", `Missing required ${name} attribute`, partName);\n return value;\n}\n\nfunction assertExactAttributes(\n element: XmlElement,\n allowed: ReadonlySet<string>,\n partName: string,\n): void {\n for (const name of element.attributes.keys()) {\n if (name === \"xmlns\" || name.startsWith(\"xmlns:\")) continue;\n if (!allowed.has(name))\n throw new DocxImportError(\"invalid_package\", `Unexpected attribute: ${name}`, partName);\n }\n}\n\nfunction requireLeafElement(element: XmlElement, partName: string): void {\n for (const child of element.children) {\n if (child.type === \"element\" || !isOnlyXmlWhitespace(child.value)) {\n throw new DocxImportError(\n \"invalid_package\",\n \"Package declaration element must be empty\",\n partName,\n );\n }\n }\n}\n\nfunction textContent(element: XmlElement): string {\n let output = \"\";\n const stack: XmlNode[] = [...element.children].reverse();\n while (stack.length > 0) {\n const node = stack.pop();\n if (!node) break;\n if (node.type === \"text\") output += node.value;\n else {\n for (let index = node.children.length - 1; index >= 0; index -= 1) {\n const child = node.children[index];\n if (child) stack.push(child);\n }\n }\n }\n return output;\n}\n\nfunction requireLocalName(element: XmlElement, expected: string, partName: string): void {\n if (element.localName !== expected)\n throw new DocxImportError(\"invalid_package\", `Expected ${expected} root element`, partName);\n}\n\nfunction requireDefaultNamespace(element: XmlElement, expected: string, partName: string): void {\n if (element.attributes.get(\"xmlns\") !== expected) {\n throw new DocxImportError(\n \"invalid_package\",\n \"Unexpected or missing XML default namespace\",\n partName,\n );\n }\n}\n\nfunction requireDefaultNamespaceTree(root: XmlElement, expected: string, partName: string): void {\n requireDefaultNamespace(root, expected, partName);\n const stack = [root];\n while (stack.length > 0) {\n const element = stack.pop();\n if (!element) break;\n if (element.name.includes(\":\"))\n throw new DocxImportError(\n \"invalid_package\",\n `Prefixed element is forbidden in this package part: ${element.name}`,\n partName,\n );\n const rebound = element.attributes.get(\"xmlns\");\n if (rebound !== undefined && rebound !== expected)\n throw new DocxImportError(\"invalid_package\", \"Default XML namespace is rebound\", partName);\n for (const child of elementChildren(element)) stack.push(child);\n }\n}\n\nfunction requirePrefixedNamespace(\n element: XmlElement,\n prefix: string,\n expected: string,\n partName: string,\n): void {\n if (element.attributes.get(`xmlns:${prefix}`) !== expected) {\n throw new DocxImportError(\n \"unsupported_feature\",\n `Unsupported ${prefix} XML namespace`,\n partName,\n );\n }\n}\n\nfunction requireWordNamespace(root: XmlElement, partName: string): void {\n requirePrefixedNamespaceTree(root, \"w\", WORDPROCESSINGML_NAMESPACE, partName);\n}\n\nfunction requirePrefixedNamespaceTree(\n root: XmlElement,\n prefix: string,\n expected: string,\n partName: string,\n): void {\n requirePrefixedNamespace(root, prefix, expected, partName);\n validateKnownNamespaceBindings(root, partName);\n const stack = [root];\n while (stack.length > 0) {\n const element = stack.pop();\n if (!element) break;\n if (!element.name.startsWith(`${prefix}:`)) {\n throw new DocxImportError(\n \"unsupported_feature\",\n `Unsupported namespaced Word content: ${element.name}`,\n partName,\n );\n }\n const rebound = element.attributes.get(`xmlns:${prefix}`);\n if (rebound !== undefined && rebound !== expected) {\n throw new DocxImportError(\"invalid_package\", `${prefix} XML namespace is rebound`, partName);\n }\n for (const child of elementChildren(element)) stack.push(child);\n }\n}\n\nconst KNOWN_XML_NAMESPACES = new Map<string, string>([\n [\"xml\", \"http://www.w3.org/XML/1998/namespace\"],\n [\"w\", WORDPROCESSINGML_NAMESPACE],\n [\"r\", \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"],\n [\"w14\", \"http://schemas.microsoft.com/office/word/2010/wordml\"],\n [\"w15\", COMMENTS_EXTENDED_NAMESPACE],\n]);\n\nfunction validateNamespaceWellFormedness(root: XmlElement, partName: string): void {\n const xmlNamespace = KNOWN_XML_NAMESPACES.get(\"xml\") as string;\n const bindings = new Map<string, string>([[\"xml\", xmlNamespace]]);\n const visit = (element: XmlElement): void => {\n const changes: Array<{ prefix: string; previous?: string }> = [];\n const defaultNamespace = element.attributes.get(\"xmlns\");\n if (defaultNamespace === xmlNamespace || defaultNamespace === \"http://www.w3.org/2000/xmlns/\") {\n throw new DocxImportError(\n \"invalid_xml\",\n \"Default namespace uses a reserved XML namespace\",\n partName,\n );\n }\n for (const [name, value] of element.attributes) {\n if (!name.startsWith(\"xmlns:\")) continue;\n const prefix = name.slice(6);\n if (prefix === \"xmlns\" || value.length === 0 || value === \"http://www.w3.org/2000/xmlns/\") {\n throw new DocxImportError(\"invalid_xml\", \"Invalid XML namespace declaration\", partName);\n }\n if ((prefix === \"xml\") !== (value === xmlNamespace)) {\n throw new DocxImportError(\"invalid_xml\", \"The xml namespace is reserved\", partName);\n }\n const previous = bindings.get(prefix);\n changes.push(stripUndefined({ prefix, previous }));\n bindings.set(prefix, value);\n }\n const elementSeparator = element.name.indexOf(\":\");\n if (elementSeparator >= 0 && !bindings.has(element.name.slice(0, elementSeparator))) {\n throw new DocxImportError(\n \"invalid_xml\",\n \"Element uses an undeclared namespace prefix\",\n partName,\n );\n }\n for (const name of element.attributes.keys()) {\n if (name === \"xmlns\" || name.startsWith(\"xmlns:\")) continue;\n const separator = name.indexOf(\":\");\n if (separator >= 0 && !bindings.has(name.slice(0, separator))) {\n throw new DocxImportError(\n \"invalid_xml\",\n \"Attribute uses an undeclared namespace prefix\",\n partName,\n );\n }\n }\n for (const child of elementChildren(element)) visit(child);\n for (let index = changes.length - 1; index >= 0; index -= 1) {\n const change = changes[index];\n if (!change) continue;\n if (change.previous === undefined) bindings.delete(change.prefix);\n else bindings.set(change.prefix, change.previous);\n }\n };\n visit(root);\n}\n\nfunction validateKnownNamespaceBindings(root: XmlElement, partName: string): void {\n const bindings = new Map<string, string>([[\"xml\", KNOWN_XML_NAMESPACES.get(\"xml\") as string]]);\n const visit = (element: XmlElement): void => {\n const changes: Array<{ prefix: string; previous?: string }> = [];\n for (const [name, value] of element.attributes) {\n if (!name.startsWith(\"xmlns:\")) continue;\n const declaredPrefix = name.slice(6);\n const previous = bindings.get(declaredPrefix);\n changes.push(stripUndefined({ prefix: declaredPrefix, previous }));\n const expected = KNOWN_XML_NAMESPACES.get(declaredPrefix);\n if (expected !== undefined && value !== expected) {\n throw new DocxImportError(\n \"invalid_package\",\n `Known namespace ${declaredPrefix} is rebound`,\n partName,\n );\n }\n bindings.set(declaredPrefix, value);\n }\n for (const name of element.attributes.keys()) {\n if (name === \"xmlns\" || name.startsWith(\"xmlns:\")) continue;\n const separator = name.indexOf(\":\");\n if (separator < 0) continue;\n const attributePrefix = name.slice(0, separator);\n const expected = KNOWN_XML_NAMESPACES.get(attributePrefix);\n if (!bindings.has(attributePrefix)) {\n throw new DocxImportError(\n \"invalid_package\",\n `Attribute uses an unbound ${attributePrefix} namespace`,\n partName,\n );\n }\n if (expected !== undefined && bindings.get(attributePrefix) !== expected) {\n throw new DocxImportError(\n \"invalid_package\",\n `Attribute uses an unbound ${attributePrefix} namespace`,\n partName,\n );\n }\n }\n for (const child of elementChildren(element)) visit(child);\n for (let index = changes.length - 1; index >= 0; index -= 1) {\n const change = changes[index];\n if (!change) continue;\n if (change.previous === undefined) bindings.delete(change.prefix);\n else bindings.set(change.prefix, change.previous);\n }\n };\n visit(root);\n}\n\nfunction valueOf(element: XmlElement | undefined): string | undefined {\n return attribute(element, \"val\");\n}\n\nfunction numberValue(\n element: XmlElement | undefined,\n transform: (value: number) => number = (value) => value,\n): number | undefined {\n const value = valueOf(element);\n if (value === undefined) return undefined;\n const number = Number(value);\n if (!Number.isFinite(number))\n throw new DocxImportError(\"invalid_package\", \"OOXML numeric value is invalid\");\n const transformed = transform(number);\n if (!Number.isFinite(transformed))\n throw new DocxImportError(\"invalid_package\", \"OOXML numeric value is out of range\");\n return transformed;\n}\n\nfunction integerValue(element: XmlElement | undefined, fallback: number): number {\n if (valueOf(element) === undefined) return fallback;\n const value = numberValue(element);\n if (value === undefined || !Number.isInteger(value)) {\n throw new DocxImportError(\"invalid_package\", \"OOXML integer value is invalid\");\n }\n return value;\n}\n\nfunction numberAttribute(\n element: XmlElement | undefined,\n name: string,\n transform: (value: number) => number = (value) => value,\n): number | undefined {\n const raw = attribute(element, name);\n if (raw === undefined) return undefined;\n const value = Number(raw);\n if (!Number.isFinite(value))\n throw new DocxImportError(\"invalid_package\", \"OOXML numeric attribute is invalid\");\n const transformed = transform(value);\n if (!Number.isFinite(transformed))\n throw new DocxImportError(\"invalid_package\", \"OOXML numeric attribute is out of range\");\n return transformed;\n}\n\nfunction booleanAttribute(element: XmlElement, name: string, fallback: boolean): boolean {\n const value = attribute(element, name);\n return value === undefined ? fallback : parseBooleanLexical(value);\n}\n\nfunction optionalBooleanAttribute(element: XmlElement, name: string): boolean | undefined {\n const value = attribute(element, name);\n return value === undefined ? undefined : parseBooleanLexical(value);\n}\n\nfunction optionalBoolean(element: XmlElement | undefined): boolean | undefined {\n if (!element) return undefined;\n return booleanValue(element, true);\n}\n\nfunction booleanValue(element: XmlElement | undefined, fallback: boolean): boolean {\n if (!element) return fallback;\n const value = valueOf(element);\n return value === undefined ? true : parseBooleanLexical(value);\n}\n\nconst FALSE_VALUES = new Set([\"0\", \"false\", \"off\", \"no\"]);\nconst TRUE_VALUES = new Set([\"1\", \"true\", \"on\", \"yes\"]);\n\nfunction parseBooleanLexical(value: string): boolean {\n const normalized = value.toLowerCase();\n if (FALSE_VALUES.has(normalized)) return false;\n if (TRUE_VALUES.has(normalized)) return true;\n throw new DocxImportError(\"invalid_package\", \"OOXML boolean value is invalid\");\n}\n\nfunction localName(name: string): string {\n return name.slice(name.lastIndexOf(\":\") + 1);\n}\n\nfunction twipsToPt(value: number): number {\n return value / 20;\n}\n\nfunction stripUndefined<T extends object>(value: object): T {\n const record = value as Record<string, unknown>;\n for (const key of Object.keys(record)) if (record[key] === undefined) delete record[key];\n return value as T;\n}\n\nfunction decodeUtf8(bytes: Uint8Array, description: string, partName?: string): string {\n try {\n return new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes);\n } catch {\n throw new DocxImportError(\n partName ? \"invalid_xml\" : \"invalid_zip\",\n `${description} is not valid UTF-8`,\n partName,\n );\n }\n}\n\nfunction limitError(message: string, partName?: string): DocxImportError {\n return new DocxImportError(\"limit_exceeded\", message, partName);\n}\n\nfunction compareStrings(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\nfunction compareOpaqueRelationships(\n left: DocumentOpaqueRelationship,\n right: DocumentOpaqueRelationship,\n): number {\n return (\n compareStrings(left.sourcePart, right.sourcePart) ||\n compareStrings(left.type, right.type) ||\n compareStrings(left.targetPart, right.targetPart)\n );\n}\n\nfunction compareOpaqueContentTypes(\n left: DocumentOpaqueContentType,\n right: DocumentOpaqueContentType,\n): number {\n return (\n compareStrings(left.partName, right.partName) ||\n compareStrings(left.contentType, right.contentType)\n );\n}\n","import { UnsupportedArtifactFeatureError } from \"./errors\";\nimport { FileBlob } from \"./file-blob\";\nimport { packDocxWithBoundedCompression } from \"./document-docx-packer\";\nimport {\n DOCX_MEDIA_TYPE,\n DocumentFidelityError,\n type DocumentDocxExportOptions,\n type DocumentDocxImportOptions,\n type DocumentFidelityIssue,\n type DocumentLossPreservationEnvelope,\n type DocumentOpaqueContent,\n} from \"./document-docx-api\";\nimport {\n DOCUMENT_LOSS_PRESERVATION,\n documentFidelityReport,\n documentLossPreservationEnvelope,\n} from \"./document-docx-state\";\nimport {\n DocxImportError,\n importDocx as importDocxDto,\n type ImportedBlock,\n type ImportedComment,\n type ImportedDocument,\n type ImportedHeaderFooter,\n type ImportedBorder,\n type ImportedBoxMeasures,\n type ImportedParagraph,\n type ImportedParagraphStyle,\n type ImportedRunStyle,\n type ImportedSection,\n type ImportedStyle,\n type ImportedTable,\n} from \"./document-docx-import\";\nimport {\n Document,\n DocumentCommentThread,\n DocumentPageBreak,\n DocumentParagraph,\n DocumentTable,\n DocumentTextRun,\n TrackedChange,\n type DocumentBlock,\n type DocumentPageGeometry,\n type DocumentParagraphStyle,\n type DocumentSection,\n type DocumentSectionStories,\n type DocumentStory,\n type DocumentStoryBlock,\n type DocumentTableStyle,\n type DocumentTextStyle,\n} from \"./document\";\n\nexport {\n DOCX_MEDIA_TYPE,\n DocumentFidelityError,\n type DocumentDocxExportOptions,\n type DocumentDocxImportOptions,\n type DocumentFidelityIssue,\n type DocumentLossPreservationEnvelope,\n} from \"./document-docx-api\";\ntype ParagraphProjection = { source: ImportedParagraph; target: DocumentParagraph };\ntype ParagraphProjectionMap = Map<string, ParagraphProjection[]>;\ntype ResolvedImportedStyle = { paragraph: ImportedParagraphStyle; run: ImportedRunStyle };\nconst importedStyleCache = new WeakMap<object, Map<string, ResolvedImportedStyle>>();\n\nexport async function exportDocx(\n document: Document,\n options: DocumentDocxExportOptions = {},\n): Promise<FileBlob> {\n validateExportOptions(options);\n document.toJSON();\n const envelope = DOCUMENT_LOSS_PRESERVATION.get(document);\n if (envelope && (await documentModelDigest(document)) === envelope.modelDigest) {\n return FileBlob.fromBytes(envelope.sourceBytes.slice(), {\n type: DOCX_MEDIA_TYPE,\n ...(options.fileName ? { name: options.fileName } : {}),\n });\n }\n const blockingIssues = documentFidelityReport(document).filter(\n (issue) => issue.severity === \"error\",\n );\n if (blockingIssues.length > 0 && options.unsupportedContent !== \"discard\") {\n throw new DocumentFidelityError(\n 'DOCX export would discard opaque OOXML; export again with unsupportedContent: \"discard\" only after explicit user acknowledgement',\n blockingIssues,\n );\n }\n const docx = await import(\"docx\");\n const context = buildDocxContext(document, docx);\n const evenAndOddHeaderAndFooters = document.evenAndOddHeaders;\n const sections = document.sections.items.map((section, index) => {\n const end = document.sections.items[index + 1]?.startBlockIndex ?? document.blocks.items.length;\n const blocks = document.blocks.items.slice(section.startBlockIndex, end);\n const landscape = section.page.widthPt > section.page.heightPt;\n return {\n properties: {\n page: {\n size: {\n width: ptToTwip(landscape ? section.page.heightPt : section.page.widthPt),\n height: ptToTwip(landscape ? section.page.widthPt : section.page.heightPt),\n orientation: landscape ? docx.PageOrientation.LANDSCAPE : docx.PageOrientation.PORTRAIT,\n },\n margin: {\n top: ptToTwip(section.page.marginTopPt),\n right: ptToTwip(section.page.marginRightPt),\n bottom: ptToTwip(section.page.marginBottomPt),\n left: ptToTwip(section.page.marginLeftPt),\n header: ptToTwip(section.page.headerPt ?? 36),\n footer: ptToTwip(section.page.footerPt ?? 36),\n gutter: ptToTwip(section.page.gutterPt ?? 0),\n },\n },\n titlePage: section.titlePage,\n },\n headers: buildDocxStories(section.headers, section.page, docx, context),\n footers: buildDocxStories(section.footers, section.page, docx, context),\n children: blocks.map((block) => toDocxBlock(block, section.page, docx, context)),\n };\n });\n const file = new docx.Document({\n sections,\n numbering: { config: numberingConfig(docx) },\n comments: { children: context.commentDefinitions },\n features: { trackRevisions: document.trackRevisions },\n evenAndOddHeaderAndFooters,\n creator: \"OpenGeni\",\n lastModifiedBy: \"OpenGeni\",\n revision: document.revision,\n });\n const bytes = await packDocxWithBoundedCompression(file, docx.Packer, [\n {\n path: \"docProps/core.xml\",\n data: deterministicCoreProperties(document.revision),\n },\n ]);\n return FileBlob.fromBytes(bytes, {\n type: DOCX_MEDIA_TYPE,\n ...(options.fileName ? { name: options.fileName } : {}),\n });\n}\n\nexport async function importDocx(\n input: FileBlob | Blob | ArrayBuffer,\n options: DocumentDocxImportOptions = {},\n): Promise<Document> {\n validateImportOptions(options);\n const sourceBytes = await ownedDocxBytes(input);\n const imported = await importDocxDto(ownedArrayBuffer(sourceBytes), options.limits);\n if (hasOpaqueContent(imported.opaqueContent) && options.unsupportedContent === \"error\") {\n throw new DocumentFidelityError(\n \"The DOCX contains bounded inert OOXML outside the editable document model\",\n [opaqueContentIssue(imported.opaqueContent, \"error\")],\n );\n }\n const document = documentFromImportedDocx(imported, await semanticNamespace(imported));\n if (hasOpaqueContent(imported.opaqueContent)) {\n DOCUMENT_LOSS_PRESERVATION.set(document, {\n sourceBytes,\n sourceDigest: await sha256Hex(sourceBytes),\n importedRevision: document.revision,\n opaqueContent: cloneOpaqueContent(imported.opaqueContent),\n modelDigest: await documentModelDigest(document),\n });\n }\n return document;\n}\n\nexport function fidelityReport(document: Document): readonly DocumentFidelityIssue[] {\n document.toJSON();\n return documentFidelityReport(document);\n}\n\nexport function lossPreservationEnvelope(\n document: Document,\n): DocumentLossPreservationEnvelope | null {\n document.toJSON();\n return documentLossPreservationEnvelope(document);\n}\n\nexport async function attachLossPreservationEnvelope(\n document: Document,\n envelope: DocumentLossPreservationEnvelope,\n options: Pick<DocumentDocxImportOptions, \"limits\"> = {},\n): Promise<void> {\n document.toJSON();\n validateAttachOptions(options);\n const normalized = normalizeLossPreservationEnvelope(envelope);\n if (normalized.sourceDigest !== (await sha256Hex(normalized.sourceBytes))) {\n throw new DocxImportError(\n \"invalid_package\",\n \"DOCX loss-preservation source digest does not match its bytes\",\n );\n }\n const imported = await importDocxDto(ownedArrayBuffer(normalized.sourceBytes), options.limits);\n if (!sameOpaqueContent(imported.opaqueContent, normalized.opaqueContent)) {\n throw new DocxImportError(\n \"invalid_package\",\n \"DOCX loss-preservation metadata does not match its source package\",\n );\n }\n const projected = documentFromImportedDocx(imported, await semanticNamespace(imported));\n const projectedDigest = await documentModelDigest(projected);\n const documentDigest = await documentModelDigest(document);\n if (projectedDigest !== normalized.modelDigest || documentDigest !== normalized.modelDigest) {\n throw new DocxImportError(\n \"invalid_package\",\n \"DOCX loss-preservation envelope belongs to a different document snapshot\",\n );\n }\n DOCUMENT_LOSS_PRESERVATION.set(document, {\n sourceBytes: normalized.sourceBytes,\n sourceDigest: normalized.sourceDigest,\n importedRevision: document.revision,\n opaqueContent: normalized.opaqueContent,\n modelDigest: normalized.modelDigest,\n });\n}\n\nfunction documentFromImportedDocx(imported: ImportedDocument, idNamespace: string): Document {\n if (imported.schemaVersion !== 1 || imported.format !== \"docx\") {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"unknown imported DOCX schema\",\n \"DOCX import\",\n );\n }\n const importedSections = [...imported.sections].sort(\n (left, right) => left.startBlockIndex - right.startBlockIndex,\n );\n validateImportedSections(imported, importedSections);\n const firstSection = importedSections[0];\n if (!firstSection || firstSection.startBlockIndex !== 0)\n throw new Error(\"Imported DOCX has no section starting at body block 0\");\n const document = Document.create({\n page: importedPage(firstSection),\n idNamespace,\n titlePage: firstSection.titlePage,\n evenAndOddHeaders: imported.evenAndOddHeaders,\n trackRevisions: imported.trackRevisions,\n });\n const paragraphMap: ParagraphProjectionMap = new Map();\n const styleMap = new Map(imported.styles.map((style) => [style.styleId, style]));\n const listKinds = importedListKinds(imported.lists);\n let sectionIndex = 1;\n imported.blocks.forEach((block, blockIndex) => {\n while (importedSections[sectionIndex]?.startBlockIndex === blockIndex) {\n document.sections.add({\n page: importedPage(importedSections[sectionIndex]!),\n titlePage: importedSections[sectionIndex]!.titlePage,\n });\n sectionIndex += 1;\n }\n appendImportedBodyBlock(document, block, styleMap, listKinds, paragraphMap);\n });\n while (sectionIndex < importedSections.length) {\n const section = importedSections[sectionIndex]!;\n if (section.startBlockIndex !== imported.blocks.length)\n throw new Error(\"Imported DOCX section boundary does not align with body blocks\");\n if (document.sections.items.at(-1)?.startBlockIndex === imported.blocks.length) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"multiple empty sections at the same boundary\",\n \"DOCX import\",\n );\n }\n document.sections.add({ page: importedPage(section), titlePage: section.titlePage });\n sectionIndex += 1;\n }\n const headers = new Map(imported.headers.map((story) => [story.partName, story]));\n const footers = new Map(imported.footers.map((story) => [story.partName, story]));\n importedSections.forEach((source, index) => {\n const target = document.sections.items[index];\n if (!target) throw new Error(\"Imported DOCX section count changed during conversion\");\n importSectionStories(\n document,\n source,\n target,\n headers,\n footers,\n styleMap,\n listKinds,\n paragraphMap,\n );\n });\n importComments(document, imported.comments, paragraphMap, styleMap);\n importTrackedChanges(document, imported, paragraphMap);\n validateImportedReviewProjection(document);\n document.toJSON();\n return document;\n}\n\nfunction appendImportedBodyBlock(\n document: Document,\n block: ImportedBlock,\n styles: ReadonlyMap<string, ImportedStyle>,\n listKinds: ReadonlyMap<string, ReadonlyMap<number, \"bullet\" | \"number\">>,\n paragraphs: ParagraphProjectionMap,\n): void {\n if (block.kind === \"pageBreak\") {\n document.blocks.addPageBreak();\n return;\n }\n if (block.kind === \"paragraph\") {\n if (isOnlyPageBreak(block, styles)) {\n document.blocks.addPageBreak();\n return;\n }\n const projected = importedParagraph(block, styles, listKinds);\n const paragraph = document.blocks.addParagraph(projected.runs, projected.style);\n appendMap(paragraphs, block.id, { source: block, target: paragraph });\n return;\n }\n const projected = importedTable(\n block,\n styles,\n listKinds,\n document.sections.items.at(-1)?.page ?? document.page,\n );\n document.blocks.addTable(projected.rows, projected.style);\n}\n\nfunction appendImportedStoryBlock(\n story: DocumentStory,\n block: ImportedBlock,\n document: Document,\n styles: ReadonlyMap<string, ImportedStyle>,\n listKinds: ReadonlyMap<string, ReadonlyMap<number, \"bullet\" | \"number\">>,\n paragraphs: ParagraphProjectionMap,\n page: DocumentPageGeometry,\n): void {\n if (\n block.kind === \"pageBreak\" ||\n (block.kind === \"paragraph\" && block.inlines.some((inline) => inline.kind === \"pageBreak\"))\n ) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"page breaks in headers or footers\",\n \"DOCX import\",\n );\n }\n if (block.kind === \"paragraph\") {\n const projected = importedParagraph(block, styles, listKinds);\n const paragraph = story.addParagraph(projected.runs, projected.style);\n appendMap(paragraphs, block.id, { source: block, target: paragraph });\n } else {\n const projected = importedTable(block, styles, listKinds, page);\n story.addTable(projected.rows, projected.style);\n }\n}\n\nfunction importedParagraph(\n source: ImportedParagraph,\n styles: ReadonlyMap<string, ImportedStyle>,\n listKinds: ReadonlyMap<string, ReadonlyMap<number, \"bullet\" | \"number\">>,\n): { runs: readonly DocumentTextRun[] | string; style: DocumentParagraphStyle } {\n if (source.inlines.some((inline) => inline.kind === \"pageBreak\")) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"inline page breaks mixed with paragraph text\",\n \"DOCX import\",\n );\n }\n const inherited = resolveImportedStyle(source.styleId, styles, \"paragraph\");\n const paragraphStyle = mapImportedParagraphStyle(\n { ...inherited.paragraph, ...source.style },\n source.styleId,\n listKinds,\n );\n const runs = source.inlines.map((inline) => {\n if (inline.kind !== \"run\") throw new Error(\"Unexpected non-run in imported paragraph\");\n const inheritedRun = resolveImportedStyle(inline.styleId, styles, \"character\").run;\n return new DocumentTextRun(\n inline.text,\n mapImportedRunStyle({ ...inherited.run, ...inheritedRun, ...inline.style }),\n );\n });\n return { runs: runs.length > 0 ? runs : \"\", style: paragraphStyle };\n}\n\nfunction importedTable(\n source: ImportedTable,\n styles: ReadonlyMap<string, ImportedStyle>,\n listKinds: ReadonlyMap<string, ReadonlyMap<number, \"bullet\" | \"number\">>,\n page: DocumentPageGeometry,\n): {\n rows: ReadonlyArray<ReadonlyArray<readonly DocumentTextRun[]>>;\n style: DocumentTableStyle;\n} {\n if (source.rows.length === 0 || source.rows.some((row) => row.cells.length === 0))\n throw new Error(\"Imported DOCX table is empty\");\n if (source.styleId) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n `table style ${source.styleId}`,\n \"DOCX import\",\n );\n }\n const columnCount = source.rows[0]!.cells.length;\n if (source.rows.some((row) => row.cells.length !== columnCount)) {\n throw new UnsupportedArtifactFeatureError(\"document\", \"ragged DOCX tables\", \"DOCX import\");\n }\n const headerRows = source.rows.findIndex((row) => !row.header);\n const normalizedHeaderRows = headerRows < 0 ? source.rows.length : headerRows;\n if (source.rows.slice(normalizedHeaderRows).some((row) => row.header)) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"non-contiguous repeating table headers\",\n \"DOCX import\",\n );\n }\n const cannotSplit = source.rows[0]!.cannotSplit;\n if (source.rows.some((row) => row.cannotSplit !== cannotSplit)) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"mixed table row-splitting policies\",\n \"DOCX import\",\n );\n }\n if (source.rows.some((row) => row.heightPt !== undefined || row.heightRule !== undefined)) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"explicit table row heights\",\n \"DOCX import\",\n );\n }\n let headerFill: string | undefined;\n let filledHeaderCells = 0;\n let unfilledHeaderCells = 0;\n const rows = source.rows.map((row, rowIndex) =>\n row.cells.map((cell, columnIndex) => {\n if (cell.columnSpan !== 1 || cell.verticalMerge !== undefined) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"merged DOCX table cells\",\n \"DOCX import\",\n );\n }\n if (cell.verticalAlignment !== \"center\") {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n `table cell vertical alignment ${cell.verticalAlignment ?? \"default\"}`,\n \"DOCX import\",\n );\n }\n if (cell.blocks.length !== 1 || cell.blocks[0]?.kind !== \"paragraph\") {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"multi-paragraph or nested DOCX table cells\",\n \"DOCX import\",\n );\n }\n const explicitFill =\n cell.fill && cell.fill.toLowerCase() !== \"auto\" ? normalizeHex(cell.fill) : undefined;\n if (explicitFill) {\n if (rowIndex >= normalizedHeaderRows) {\n throw new UnsupportedArtifactFeatureError(\"document\", \"body cell shading\", \"DOCX import\");\n }\n if (headerFill && headerFill !== explicitFill) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"mixed table-header fills\",\n \"DOCX import\",\n );\n }\n headerFill = explicitFill;\n filledHeaderCells += 1;\n } else if (rowIndex < normalizedHeaderRows) {\n unfilledHeaderCells += 1;\n }\n const paragraph = cell.blocks[0];\n if (\n paragraph.inlines.some((inline) => inline.kind === \"pageBreak\") ||\n paragraph.commentAnchors.length > 0\n ) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"page breaks or comments in table cells\",\n \"DOCX import\",\n );\n }\n const inherited = resolveImportedStyle(paragraph.styleId, styles, \"paragraph\");\n assertRepresentableTableCellParagraph(\n { ...inherited.paragraph, ...paragraph.style },\n paragraph.styleId,\n listKinds,\n );\n if (cell.width) {\n const expected = source.gridColumnWidthsPt[columnIndex];\n if (\n cell.width.unit !== \"pt\" ||\n expected === undefined ||\n Math.abs(cell.width.value - expected) > 0.05\n ) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"table cell widths inconsistent with the fixed column grid\",\n \"DOCX import\",\n );\n }\n }\n return paragraph.inlines.map((inline) => {\n if (inline.kind !== \"run\") throw new Error(\"Unexpected non-run in imported table cell\");\n if (inline.changeId)\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"tracked changes in table cells\",\n \"DOCX import\",\n );\n const runStyle = resolveImportedStyle(inline.styleId, styles, \"character\").run;\n return new DocumentTextRun(\n inline.text,\n mapImportedRunStyle({ ...inherited.run, ...runStyle, ...inline.style }),\n );\n });\n }),\n );\n if (filledHeaderCells > 0 && unfilledHeaderCells > 0) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"partially shaded table-header rows\",\n \"DOCX import\",\n );\n }\n const usable = page.widthPt - page.marginLeftPt - page.marginRightPt;\n if (\n source.gridColumnWidthsPt.length > 0 &&\n (source.gridColumnWidthsPt.length !== columnCount ||\n source.gridColumnWidthsPt.some((width) => !Number.isFinite(width) || width <= 0))\n ) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"invalid or incomplete fixed table column grid\",\n \"DOCX import\",\n );\n }\n const widths =\n source.gridColumnWidthsPt.length === columnCount ? source.gridColumnWidthsPt : undefined;\n const widthPt =\n source.width?.unit === \"pt\"\n ? source.width.value\n : (widths?.reduce((total, width) => total + width, 0) ?? usable);\n if (source.width && source.width.unit !== \"pt\" && source.width.unit !== \"auto\") {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"percentage-width DOCX tables\",\n \"DOCX import\",\n );\n }\n if (\n source.width?.unit === \"pt\" &&\n widths &&\n Math.abs(source.width.value - widths.reduce((total, width) => total + width, 0)) > 0.05\n ) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"table width inconsistent with its fixed column grid\",\n \"DOCX import\",\n );\n }\n if (source.alignment && source.alignment !== \"left\" && source.alignment !== \"start\") {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n `table alignment ${source.alignment}`,\n \"DOCX import\",\n );\n }\n if (source.layout !== \"fixed\") {\n throw new UnsupportedArtifactFeatureError(\"document\", \"autofit DOCX tables\", \"DOCX import\");\n }\n const cellPaddingPt = importedUniformCellPadding(source);\n const borderColor = importedUniformTableBorder(source.borders);\n if (\n !source.indent ||\n source.indent.unit !== \"pt\" ||\n Math.abs(source.indent.value - cellPaddingPt) > 0.01\n ) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"table indent not equal to its leading cell padding\",\n \"DOCX import\",\n );\n }\n return {\n rows,\n style: {\n widthPt,\n ...(widths ? { columnWidthsPt: [...widths] } : {}),\n headerRows: normalizedHeaderRows,\n cellPaddingPt,\n borderColor,\n ...(headerFill ? { headerFill } : {}),\n ...(!cannotSplit ? { allowRowSplit: true } : {}),\n },\n };\n}\n\nfunction importSectionStories(\n document: Document,\n source: ImportedSection,\n target: DocumentSection,\n headers: ReadonlyMap<string, ImportedHeaderFooter>,\n footers: ReadonlyMap<string, ImportedHeaderFooter>,\n styles: ReadonlyMap<string, ImportedStyle>,\n listKinds: ReadonlyMap<string, ReadonlyMap<number, \"bullet\" | \"number\">>,\n paragraphs: ParagraphProjectionMap,\n): void {\n const apply = (\n references: ImportedSection[\"headers\"],\n available: ReadonlyMap<string, ImportedHeaderFooter>,\n stories: DocumentSectionStories,\n ): void => {\n for (const reference of references) {\n const key =\n reference.kind === \"default\"\n ? \"default\"\n : reference.kind === \"first\"\n ? \"first\"\n : reference.kind === \"even\"\n ? \"even\"\n : undefined;\n if (!key)\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n `header/footer variant ${reference.kind}`,\n \"DOCX import\",\n );\n const importedStory = available.get(reference.partName);\n if (!importedStory)\n throw new Error(`Imported DOCX references missing story ${reference.partName}`);\n const story = stories[key];\n if (story.items.length > 0)\n throw new Error(`Imported DOCX repeats ${key} header/footer for one section`);\n if (isEmptyStoryPlaceholder(importedStory)) continue;\n for (const block of importedStory.blocks)\n appendImportedStoryBlock(\n story,\n block,\n document,\n styles,\n listKinds,\n paragraphs,\n target.page,\n );\n }\n };\n apply(source.headers, headers, target.headers);\n apply(source.footers, footers, target.footers);\n}\n\nfunction isEmptyStoryPlaceholder(story: ImportedHeaderFooter): boolean {\n const block = story.blocks[0];\n return (\n story.blocks.length === 1 &&\n block?.kind === \"paragraph\" &&\n block.styleId === undefined &&\n Object.keys(block.style).length === 0 &&\n block.commentAnchors.length === 0 &&\n block.inlines.every(\n (inline) =>\n inline.kind === \"run\" &&\n inline.text.length === 0 &&\n inline.styleId === undefined &&\n Object.keys(inline.style).length === 0,\n )\n );\n}\n\nfunction importComments(\n document: Document,\n comments: readonly ImportedComment[],\n paragraphs: ReadonlyMap<string, readonly ParagraphProjection[]>,\n styles: ReadonlyMap<string, ImportedStyle>,\n): void {\n type ExtendedComment = ImportedComment & { parentId?: string; resolved?: boolean };\n const byId = new Map(comments.map((comment) => [comment.id, comment as ExtendedComment]));\n const roots: ExtendedComment[] = [];\n const repliesByParent = new Map<string, ExtendedComment[]>();\n for (const raw of comments) {\n const comment = raw as ExtendedComment;\n if (comment.parentId === undefined) roots.push(comment);\n else appendMap(repliesByParent, comment.parentId, comment);\n }\n const anchorsByComment = new Map<\n string,\n Array<{\n source: ImportedParagraph;\n target: DocumentParagraph;\n start: number;\n end: number;\n }>\n >();\n // Build one review index. The previous root-by-paragraph scan was bounded,\n // but still quadratic for a large legitimate document with many comments.\n for (const projections of paragraphs.values()) {\n for (const { source, target } of projections) {\n const anchors = new Map<string, ImportedParagraph[\"commentAnchors\"]>();\n for (const anchor of source.commentAnchors) appendMap(anchors, anchor.commentId, anchor);\n for (const [commentId, values] of anchors) {\n const start =\n values.find((anchor) => anchor.kind === \"start\")?.textOffset ??\n values.find((anchor) => anchor.kind === \"reference\")?.textOffset;\n const end = values.find((anchor) => anchor.kind === \"end\")?.textOffset ?? start;\n if (start === undefined || end === undefined) {\n throw new Error(`Imported comment ${commentId} has an incomplete anchor`);\n }\n appendMap(anchorsByComment, commentId, { source, target, start, end });\n }\n }\n }\n for (const root of roots) {\n const matches = anchorsByComment.get(root.id) ?? [];\n const sourceIds = new Set(matches.map((match) => match.source.id));\n if (matches.length === 0 || sourceIds.size !== 1)\n throw new Error(`Imported comment ${root.id} must have exactly one source text anchor`);\n if (matches.length > 1) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"comments in shared or inherited header/footer stories\",\n \"DOCX import\",\n );\n }\n const rootText = importedCommentText(root, styles);\n assertRepresentableCommentInitials(root.author ?? \"Unknown\", root.initials);\n const replies = repliesByParent.get(root.id) ?? [];\n for (const match of matches) {\n const thread = document.comments.addThread(\n { block: match.target, start: match.start, end: match.end },\n rootText,\n {\n author: root.author ?? \"Unknown\",\n createdAt: normalizedImportedDate(root.createdAt),\n resolved: root.resolved ?? false,\n },\n );\n for (const reply of replies) {\n assertRepresentableCommentInitials(reply.author ?? \"Unknown\", reply.initials);\n thread.addReply(\n importedCommentText(reply, styles),\n reply.author ?? \"Unknown\",\n normalizedImportedDate(reply.createdAt),\n );\n }\n }\n byId.delete(root.id);\n for (const reply of replies) byId.delete(reply.id);\n }\n if (byId.size > 0)\n throw new Error(`Imported DOCX has orphaned comment replies: ${[...byId.keys()].join(\", \")}`);\n}\n\nfunction importTrackedChanges(\n document: Document,\n imported: ImportedDocument,\n paragraphs: ReadonlyMap<string, readonly ParagraphProjection[]>,\n): void {\n for (const source of imported.trackedChanges) {\n const projections = paragraphs.get(source.blockId);\n if (!projections || projections.length === 0)\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"tracked changes outside body/header/footer paragraphs\",\n \"DOCX import\",\n );\n if (projections.length > 1) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"tracked changes in shared or inherited header/footer stories\",\n \"DOCX import\",\n );\n }\n const extended = source as typeof source & { startTextOffset?: number; endTextOffset?: number };\n for (const paragraph of projections) {\n const start =\n extended.startTextOffset ??\n inlineIndexToTextOffset(paragraph.source, source.startInlineIndex);\n const end =\n extended.endTextOffset ?? inlineIndexToTextOffset(paragraph.source, source.endInlineIndex);\n document.changes.add(\n { block: paragraph.target, start, end },\n source.kind,\n source.author ?? \"Unknown\",\n normalizedImportedDate(source.createdAt),\n );\n }\n }\n}\n\nfunction validateImportedReviewProjection(document: Document): void {\n const commentsByBlock = new Map<string, DocumentCommentThread[]>();\n for (const comment of document.comments.items) {\n appendMap(commentsByBlock, comment.blockId, comment);\n }\n const changesByBlock = new Map<string, TrackedChange[]>();\n for (const change of document.changes.items) {\n appendMap(changesByBlock, change.blockId, change);\n }\n for (const block of document.allStoryBlocks()) {\n if (!(block instanceof DocumentParagraph)) continue;\n const comments = commentsByBlock.get(block.id) ?? [];\n const changes = changesByBlock.get(block.id) ?? [];\n validateNonCrossingComments(comments);\n validateNonOverlappingChanges(changes);\n validateReviewMarkupForDocx(block, comments, changes);\n }\n}\n\nfunction resolveImportedStyle(\n styleId: string | undefined,\n styles: ReadonlyMap<string, ImportedStyle>,\n expectedKind: \"paragraph\" | \"character\",\n seen = new Set<string>(),\n applyDefault = true,\n): ResolvedImportedStyle {\n const cacheKey = `${expectedKind}:${applyDefault ? \"default\" : \"direct\"}:${styleId ?? \"\"}`;\n const cache =\n importedStyleCache.get(styles as object) ?? new Map<string, ResolvedImportedStyle>();\n if (!importedStyleCache.has(styles as object)) importedStyleCache.set(styles as object, cache);\n if (seen.size === 0) {\n const cached = cache.get(cacheKey);\n if (cached) return cached;\n }\n if (!styleId) {\n if (!applyDefault) {\n const empty = { paragraph: {}, run: {} };\n if (seen.size === 0) cache.set(cacheKey, empty);\n return empty;\n }\n const defaults = [...styles.values()].filter(\n (style) => style.isDefault && style.kind === expectedKind,\n );\n if (defaults.length > 1) {\n throw new Error(`Imported DOCX defines multiple default ${expectedKind} styles`);\n }\n const defaultStyle = defaults[0];\n const resolved = defaultStyle\n ? resolveImportedStyle(defaultStyle.styleId, styles, expectedKind, seen, false)\n : { paragraph: {}, run: {} };\n if (seen.size === 0) cache.set(cacheKey, resolved);\n return resolved;\n }\n if (seen.has(styleId)) throw new Error(`Imported DOCX style cycle at ${styleId}`);\n const style = styles.get(styleId);\n if (!style) {\n if ([\"Normal\", \"DefaultParagraphFont\", \"ListParagraph\"].includes(styleId)) {\n return { paragraph: {}, run: {} };\n }\n throw new Error(`Imported DOCX references missing style ${styleId}`);\n }\n if (style.kind !== expectedKind) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n `${expectedKind} content using ${style.kind} style ${styleId}`,\n \"DOCX import\",\n );\n }\n const canonical =\n expectedKind === \"paragraph\"\n ? styleId === \"Normal\" ||\n styleId === \"ListParagraph\" ||\n /^(?:Heading\\s*)[1-6]$/iu.test(styleId)\n : styleId === \"DefaultParagraphFont\";\n if (!canonical) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n `custom named ${expectedKind} style ${styleId}`,\n \"DOCX import\",\n );\n }\n seen.add(styleId);\n const parent = resolveImportedStyle(style.basedOn, styles, expectedKind, seen, false);\n seen.delete(styleId);\n const resolved = {\n paragraph: { ...parent.paragraph, ...style.paragraph },\n run: { ...parent.run, ...style.run },\n };\n if (seen.size === 0) cache.set(cacheKey, resolved);\n return resolved;\n}\n\nfunction mapImportedParagraphStyle(\n style: ImportedParagraphStyle,\n styleId: string | undefined,\n listKinds: ReadonlyMap<string, ReadonlyMap<number, \"bullet\" | \"number\">>,\n): DocumentParagraphStyle {\n if (style.bidirectional)\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"bidirectional paragraphs\",\n \"DOCX import\",\n );\n if (\n (style.indentLeftPt ?? 0) !== 0 ||\n (style.indentRightPt ?? 0) !== 0 ||\n (style.firstLinePt ?? 0) !== 0 ||\n (style.hangingPt ?? 0) !== 0\n ) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"direct paragraph indentation\",\n \"DOCX import\",\n );\n }\n if (style.keepLines)\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"keep-lines paragraph pagination\",\n \"DOCX import\",\n );\n if (style.lineRule && style.lineRule !== \"auto\")\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n `paragraph line rule ${style.lineRule}`,\n \"DOCX import\",\n );\n const headingMatch = /(?:^|\\s)heading\\s*([1-6])$/iu.exec(styleId ?? \"\");\n const importedHeadingLevel = headingMatch\n ? (Number(headingMatch[1]) as 1 | 2 | 3 | 4 | 5 | 6)\n : undefined;\n if (\n style.outlineLevel !== undefined &&\n (style.outlineLevel < 0 ||\n style.outlineLevel > 5 ||\n importedHeadingLevel === undefined ||\n style.outlineLevel + 1 !== importedHeadingLevel)\n ) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n `outline level ${style.outlineLevel} without the matching supported heading style`,\n \"DOCX import\",\n );\n }\n const alignmentValue =\n style.alignment === \"both\"\n ? \"justify\"\n : style.alignment === \"center\"\n ? \"center\"\n : style.alignment === \"right\" || style.alignment === \"end\"\n ? \"right\"\n : style.alignment === \"left\" || style.alignment === \"start\"\n ? \"left\"\n : undefined;\n if (style.alignment && !alignmentValue)\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n `paragraph alignment ${style.alignment}`,\n \"DOCX import\",\n );\n const list = style.list;\n const listKind = list ? listKinds.get(list.numId)?.get(list.level) : undefined;\n if (list && !listKind)\n throw new Error(`Imported paragraph references missing numbering ${list.numId}/${list.level}`);\n return {\n ...(importedHeadingLevel ? { headingLevel: importedHeadingLevel } : {}),\n ...(alignmentValue ? { alignment: alignmentValue } : {}),\n ...(style.spaceBeforePt !== undefined ? { spaceBeforePt: style.spaceBeforePt } : {}),\n ...(style.spaceAfterPt !== undefined ? { spaceAfterPt: style.spaceAfterPt } : {}),\n ...(style.line !== undefined ? { lineHeight: style.line / 240 } : {}),\n ...(style.keepNext !== undefined ? { keepNext: style.keepNext } : {}),\n ...(style.pageBreakBefore !== undefined ? { pageBreakBefore: style.pageBreakBefore } : {}),\n ...(list && listKind\n ? { list: { kind: listKind, level: list.level, instanceId: list.numId } }\n : {}),\n };\n}\n\nfunction mapImportedRunStyle(style: ImportedRunStyle): DocumentTextStyle {\n if (style.highlight && style.highlight !== \"none\")\n throw new UnsupportedArtifactFeatureError(\"document\", \"text highlighting\", \"DOCX import\");\n if (style.verticalAlign && style.verticalAlign !== \"baseline\")\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n `text vertical alignment ${style.verticalAlign}`,\n \"DOCX import\",\n );\n if (\n style.fontSizeComplexScriptPt !== undefined &&\n style.fontSizeComplexScriptPt !== style.fontSizePt\n ) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"script-specific font sizing\",\n \"DOCX import\",\n );\n }\n if ((style.boldComplexScript ?? false) !== (style.bold ?? false)) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"script-specific bold formatting\",\n \"DOCX import\",\n );\n }\n if ((style.italicComplexScript ?? false) !== (style.italic ?? false)) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"script-specific italic formatting\",\n \"DOCX import\",\n );\n }\n if (style.language) {\n throw new UnsupportedArtifactFeatureError(\"document\", \"run language metadata\", \"DOCX import\");\n }\n return {\n ...(style.fontFamily ? { fontFamily: style.fontFamily } : {}),\n ...(style.fontSizePt !== undefined ? { fontSizePt: style.fontSizePt } : {}),\n ...(style.color && style.color !== \"auto\" ? { color: normalizeHex(style.color) } : {}),\n ...(style.bold !== undefined ? { bold: style.bold } : {}),\n ...(style.italic !== undefined ? { italic: style.italic } : {}),\n ...(style.underline !== undefined ? { underline: style.underline !== \"none\" } : {}),\n ...(style.strike !== undefined ? { strike: style.strike } : {}),\n };\n}\n\nfunction importedPage(section: ImportedSection): DocumentPageGeometry {\n return {\n widthPt: section.page.widthPt,\n heightPt: section.page.heightPt,\n marginTopPt: section.page.marginTopPt,\n marginRightPt: section.page.marginRightPt,\n marginBottomPt: section.page.marginBottomPt,\n marginLeftPt: section.page.marginLeftPt,\n headerPt: section.page.headerPt,\n footerPt: section.page.footerPt,\n gutterPt: section.page.gutterPt,\n };\n}\n\nfunction validateImportedSections(\n imported: ImportedDocument,\n sections: readonly ImportedSection[],\n): void {\n if (sections.length === 0) throw new Error(\"Imported DOCX has no sections\");\n const storyReferences = new Set<string>();\n let expectedStart = 0;\n for (const section of sections) {\n for (const reference of [...section.headers, ...section.footers]) {\n if (storyReferences.has(reference.partName)) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"linked or inherited header/footer stories\",\n \"DOCX import\",\n );\n }\n storyReferences.add(reference.partName);\n }\n if (\n section.startBlockIndex !== expectedStart ||\n !Number.isSafeInteger(section.endBlockIndex) ||\n section.endBlockIndex < section.startBlockIndex ||\n section.endBlockIndex > imported.blocks.length\n ) {\n throw new Error(\"Imported DOCX sections do not form a contiguous body partition\");\n }\n expectedStart = section.endBlockIndex;\n if (section.type !== undefined && section.type !== \"nextPage\") {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n `section break type ${section.type}`,\n \"DOCX import\",\n );\n }\n const orientation = section.page.orientation;\n if (orientation !== undefined && orientation !== \"portrait\" && orientation !== \"landscape\") {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n `page orientation ${orientation}`,\n \"DOCX import\",\n );\n }\n if (\n (orientation === \"landscape\" && section.page.widthPt < section.page.heightPt) ||\n (orientation === \"portrait\" && section.page.widthPt > section.page.heightPt)\n ) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"page dimensions inconsistent with page orientation\",\n \"DOCX import\",\n );\n }\n const hasFirstStory = [...section.headers, ...section.footers].some(\n (reference) => reference.kind === \"first\",\n );\n if (section.titlePage && !hasFirstStory) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"first-page header/footer mode without a representable first-page story\",\n \"DOCX import\",\n );\n }\n }\n if (expectedStart !== imported.blocks.length) {\n throw new Error(\"Imported DOCX sections do not cover the full body\");\n }\n const hasEvenStory = sections.some((section) =>\n [...section.headers, ...section.footers].some((reference) => reference.kind === \"even\"),\n );\n if (imported.evenAndOddHeaders && !hasEvenStory) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"even-page header/footer mode without a representable even-page story\",\n \"DOCX import\",\n );\n }\n}\n\nfunction importedListKinds(\n lists: readonly ImportedDocument[\"lists\"][number][],\n): Map<string, Map<number, \"bullet\" | \"number\">> {\n const result = new Map<string, Map<number, \"bullet\" | \"number\">>();\n for (const list of lists) {\n let instanceSupported = true;\n for (const override of list.overrides) {\n if (override.definition || (override.start !== undefined && override.start !== 1)) {\n instanceSupported = false;\n }\n }\n const levels = new Map<number, \"bullet\" | \"number\">();\n let definitionSupported = true;\n for (const level of list.levels) {\n if (\n level.start !== 1 ||\n level.restart !== undefined ||\n level.legal !== undefined ||\n (level.format !== \"bullet\" && level.format !== \"decimal\")\n ) {\n definitionSupported = false;\n continue;\n }\n const runtimeLevel = level as typeof level & { alignment?: string };\n const expectedText = level.format === \"decimal\" ? `%${level.level + 1}.` : undefined;\n const supportedBullet =\n level.format === \"bullet\" && level.text === [\"•\", \"◦\", \"▪\"][level.level % 3];\n const paragraphEntries = Object.entries(level.paragraph);\n const hasExpectedIndent =\n level.paragraph.indentLeftPt !== undefined &&\n Math.abs(level.paragraph.indentLeftPt - 36 * (level.level + 1)) <= 0.01 &&\n level.paragraph.hangingPt !== undefined &&\n Math.abs(level.paragraph.hangingPt - 18) <= 0.01;\n const onlyExpectedIndent = paragraphEntries.every(\n ([key]) => key === \"indentLeftPt\" || key === \"hangingPt\",\n );\n if (\n (level.format === \"decimal\" && level.text !== expectedText) ||\n (level.format === \"bullet\" && !supportedBullet) ||\n (level.suffix !== undefined && level.suffix !== \"tab\") ||\n level.paragraphStyleId !== undefined ||\n (runtimeLevel.alignment !== undefined && runtimeLevel.alignment !== \"left\") ||\n !hasExpectedIndent ||\n !onlyExpectedIndent ||\n Object.keys(level.run).length > 0\n ) {\n definitionSupported = false;\n continue;\n }\n levels.set(level.level, level.format === \"bullet\" ? \"bullet\" : \"number\");\n }\n result.set(list.numId, instanceSupported && definitionSupported ? levels : new Map());\n }\n return result;\n}\n\nfunction assertRepresentableTableCellParagraph(\n style: ImportedParagraphStyle,\n styleId: string | undefined,\n listKinds: ReadonlyMap<string, ReadonlyMap<number, \"bullet\" | \"number\">>,\n): void {\n const projected = mapImportedParagraphStyle(style, styleId, listKinds);\n const remaining = Object.entries(projected).filter(\n ([key, value]) =>\n !(\n (key === \"alignment\" && value === \"left\") ||\n (key === \"spaceBeforePt\" && value === 0) ||\n (key === \"spaceAfterPt\" && value === 0)\n ),\n );\n if (remaining.length > 0) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"paragraph formatting inside table cells\",\n \"DOCX import\",\n );\n }\n}\n\nfunction importedUniformCellPadding(source: ImportedTable): number {\n const hasExplicitMargins =\n source.cellMargins !== undefined ||\n source.rows.some((row) => row.cells.some((cell) => cell.margins !== undefined));\n if (!hasExplicitMargins) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"table cell padding inherited from an unrepresented style\",\n \"DOCX import\",\n );\n }\n const values: number[] = [];\n for (const row of source.rows) {\n for (const cell of row.cells) {\n for (const side of [\"top\", \"right\", \"bottom\", \"left\"] as const) {\n const measure = boxMeasure(cell.margins, side) ?? boxMeasure(source.cellMargins, side);\n if (!measure || measure.unit !== \"pt\" || !Number.isFinite(measure.value)) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"asymmetric or non-point table cell margins\",\n \"DOCX import\",\n );\n }\n values.push(measure.value);\n }\n }\n }\n const first = values[0];\n if (first === undefined || values.some((value) => Math.abs(value - first) > 0.01)) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"non-uniform table cell padding\",\n \"DOCX import\",\n );\n }\n return first;\n}\n\nfunction boxMeasure(\n box: ImportedBoxMeasures | undefined,\n side: \"top\" | \"right\" | \"bottom\" | \"left\",\n): { value: number; unit: \"pt\" | \"percent\" | \"auto\" } | undefined {\n if (!box) return undefined;\n if (side === \"left\") return box.left ?? box.start;\n if (side === \"right\") return box.right ?? box.end;\n return box[side];\n}\n\nfunction importedUniformTableBorder(borders: ImportedTable[\"borders\"]): string {\n if (!borders) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"table borders inherited from an unrepresented style\",\n \"DOCX import\",\n );\n }\n const edges: Array<ImportedBorder | undefined> = [\n borders.top,\n borders.right,\n borders.bottom,\n borders.left,\n borders.insideHorizontal,\n borders.insideVertical,\n ];\n if (edges.some((edge) => edge === undefined)) {\n throw new UnsupportedArtifactFeatureError(\"document\", \"partial table borders\", \"DOCX import\");\n }\n const colors = edges.map((edge) => {\n if (\n edge?.style !== \"single\" ||\n edge.sizePt === undefined ||\n Math.abs(edge.sizePt - 0.5) > 0.01 ||\n (edge.spacePt ?? 0) !== 0 ||\n edge.shadow === true ||\n edge.frame === true ||\n !edge.color ||\n edge.color.toLowerCase() === \"auto\"\n ) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"non-uniform or decorated table borders\",\n \"DOCX import\",\n );\n }\n return normalizeHex(edge.color);\n });\n const first = colors[0]!;\n if (colors.some((color) => color !== first)) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"mixed table border colors\",\n \"DOCX import\",\n );\n }\n return first;\n}\n\nfunction isOnlyPageBreak(\n paragraph: ImportedParagraph,\n styles: ReadonlyMap<string, ImportedStyle>,\n): boolean {\n const inherited = resolveImportedStyle(paragraph.styleId, styles, \"paragraph\");\n return (\n paragraph.inlines.length === 1 &&\n paragraph.inlines[0]?.kind === \"pageBreak\" &&\n paragraph.commentAnchors.length === 0 &&\n Object.keys({ ...inherited.paragraph, ...paragraph.style }).length === 0 &&\n Object.keys(inherited.run).length === 0\n );\n}\n\nfunction importedCommentText(\n comment: ImportedComment,\n styles: ReadonlyMap<string, ImportedStyle>,\n): string {\n const paragraph = comment.blocks[0];\n if (\n comment.blocks.length !== 1 ||\n paragraph?.kind !== \"paragraph\" ||\n paragraph.styleId !== undefined ||\n Object.keys(paragraph.style).length > 0 ||\n paragraph.inlines.some(\n (inline) =>\n inline.kind !== \"run\" ||\n inline.styleId !== undefined ||\n Object.keys(inline.style).length > 0,\n ) ||\n paragraph.commentAnchors.length > 0\n ) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"multi-paragraph or formatted content inside comments\",\n \"DOCX import\",\n );\n }\n // Resolve defaults solely to detect a formatted default that would otherwise\n // be silently flattened from this deliberately plain comment subset.\n const defaults = resolveImportedStyle(undefined, styles, \"paragraph\");\n if (Object.keys(defaults.paragraph).length > 0 || Object.keys(defaults.run).length > 0) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"formatted default style inside comments\",\n \"DOCX import\",\n );\n }\n return paragraph.inlines.map((inline) => (inline.kind === \"run\" ? inline.text : \"\")).join(\"\");\n}\n\nfunction inlineIndexToTextOffset(paragraph: ImportedParagraph, index: number): number {\n if (!Number.isInteger(index) || index < 0 || index > paragraph.inlines.length)\n throw new Error(\"Imported tracked-change inline index is invalid\");\n return paragraph.inlines\n .slice(0, index)\n .reduce((total, inline) => total + (inline.kind === \"run\" ? inline.text.length : 0), 0);\n}\n\nfunction normalizedImportedDate(value: string | undefined): string {\n if (!value) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"comment or tracked-change timestamp omitted\",\n \"DOCX import\",\n );\n }\n const date = new Date(value);\n if (!Number.isFinite(date.getTime()))\n throw new Error(`Imported DOCX contains an invalid timestamp: ${value}`);\n return date.toISOString();\n}\n\ntype DocxModule = typeof import(\"docx\");\ntype DocxBlock = import(\"docx\").Paragraph | import(\"docx\").Table;\ntype DocxParagraphChild = import(\"docx\").ParagraphChild;\ntype DocxContext = {\n readonly commentsByBlock: Map<\n string,\n Array<{ thread: DocumentCommentThread; numericId: number }>\n >;\n readonly changesByBlock: Map<string, Array<{ change: TrackedChange; numericId: number }>>;\n readonly commentDefinitions: import(\"docx\").ICommentOptions[];\n readonly listInstances: Map<string, number>;\n};\n\nfunction buildDocxContext(document: Document, docx: DocxModule): DocxContext {\n const commentsByBlock = new Map<\n string,\n Array<{ thread: DocumentCommentThread; numericId: number }>\n >();\n const commentDefinitions: import(\"docx\").ICommentOptions[] = [];\n let commentId = 0;\n for (const thread of document.comments.items) {\n const rootId = commentId++;\n appendMap(commentsByBlock, thread.blockId, { thread, numericId: rootId });\n thread.replies.forEach((reply, index) => {\n const id = index === 0 ? rootId : commentId++;\n commentDefinitions.push({\n id,\n ...(index > 0 ? { parentId: rootId } : {}),\n author: reply.author,\n initials: initials(reply.author),\n date: new Date(reply.createdAt),\n ...(index === 0 ? { resolved: thread.resolved } : {}),\n children: [\n new docx.Paragraph({\n children: [new docx.TextRun(docxTextRunOptions(reply.text, {}, docx))],\n }),\n ],\n });\n });\n }\n const changesByBlock = new Map<string, Array<{ change: TrackedChange; numericId: number }>>();\n document.changes.items.forEach((change, numericId) =>\n appendMap(changesByBlock, change.blockId, { change, numericId }),\n );\n return {\n commentsByBlock,\n changesByBlock,\n commentDefinitions,\n listInstances: buildListInstances(document),\n };\n}\n\nfunction buildDocxStories(\n stories: DocumentSectionStories,\n page: DocumentPageGeometry,\n docx: DocxModule,\n context: DocxContext,\n): {\n default?: import(\"docx\").Header | import(\"docx\").Footer;\n first?: import(\"docx\").Header | import(\"docx\").Footer;\n even?: import(\"docx\").Header | import(\"docx\").Footer;\n} {\n const make = (\n story: DocumentStory,\n emitEmpty: boolean,\n ): import(\"docx\").Header | import(\"docx\").Footer | undefined => {\n if (story.items.length === 0 && !emitEmpty) return undefined;\n const children =\n story.items.length > 0\n ? story.items.map((block) => toDocxBlock(block, page, docx, context))\n : [new docx.Paragraph({ children: [] })];\n return story.kind === \"header\" ? new docx.Header({ children }) : new docx.Footer({ children });\n };\n const result: {\n default?: import(\"docx\").Header | import(\"docx\").Footer;\n first?: import(\"docx\").Header | import(\"docx\").Footer;\n even?: import(\"docx\").Header | import(\"docx\").Footer;\n } = {};\n // Emit explicit empty variants as well as authored ones. Omitting a part\n // means \"inherit from the prior section\" in Word, which is not equivalent\n // to this model's intentionally empty editable story.\n const defaultStory = make(stories.default, true);\n const firstStory = make(stories.first, true);\n const evenStory = make(stories.even, true);\n if (defaultStory) result.default = defaultStory;\n if (firstStory) result.first = firstStory;\n if (evenStory) result.even = evenStory;\n return result;\n}\n\nfunction toDocxBlock(\n block: DocumentBlock | DocumentStoryBlock,\n page: DocumentPageGeometry,\n docx: DocxModule,\n context: DocxContext,\n): DocxBlock {\n if (block instanceof DocumentPageBreak) {\n return new docx.Paragraph({ children: [new docx.PageBreak()] });\n }\n if (block instanceof DocumentTable) return toDocxTable(block, page, docx);\n const heading = headingLevel(block.style.headingLevel, docx);\n const paragraphAlignment = alignment(block.style.alignment, docx);\n const spacing = {\n ...(block.style.spaceBeforePt !== undefined\n ? { before: ptToTwip(block.style.spaceBeforePt) }\n : {}),\n ...(block.style.spaceAfterPt !== undefined\n ? { after: ptToTwip(block.style.spaceAfterPt) }\n : {}),\n ...(block.style.lineHeight !== undefined\n ? { line: Math.round(block.style.lineHeight * 240) }\n : {}),\n };\n const list = block.style.list;\n return new docx.Paragraph({\n ...(heading ? { heading } : {}),\n ...(paragraphAlignment ? { alignment: paragraphAlignment } : {}),\n ...(Object.keys(spacing).length > 0 ? { spacing } : {}),\n ...(block.style.keepNext !== undefined ? { keepNext: block.style.keepNext } : {}),\n ...(block.style.pageBreakBefore !== undefined\n ? { pageBreakBefore: block.style.pageBreakBefore }\n : {}),\n ...(list\n ? {\n numbering: {\n reference: list.kind === \"bullet\" ? \"opengeni-bullet\" : \"opengeni-number\",\n level: list.level ?? 0,\n ...(context.listInstances.has(block.id)\n ? { instance: context.listInstances.get(block.id)! }\n : {}),\n },\n }\n : {}),\n children: toDocxParagraphChildren(block, docx, context),\n });\n}\n\nfunction toDocxTable(\n block: DocumentTable,\n page: DocumentPageGeometry,\n docx: DocxModule,\n): import(\"docx\").Table {\n const columnCount = block.rows[0]?.length ?? 0;\n const usableWidth = page.widthPt - page.marginLeftPt - page.marginRightPt;\n const totalWidth =\n block.style.widthPt ??\n block.style.columnWidthsPt?.reduce((total, width) => total + width, 0) ??\n usableWidth;\n const columnWidths =\n block.style.columnWidthsPt ??\n Array.from({ length: columnCount }, () => totalWidth / columnCount);\n const columnWidthsTwip = columnWidths.map(ptToTwip);\n // Derive tblW from the exact serialized grid. Rounding the model width and\n // each grid column independently can otherwise make our own DOCX fail the\n // strict fixed-grid consistency check on import.\n const tableWidthTwip = columnWidthsTwip.reduce((sum, width) => sum + width, 0);\n const padding = ptToTwip(block.style.cellPaddingPt ?? 6);\n const borderColor = normalizeHex(block.style.borderColor ?? \"#D1D5DB\").slice(1);\n const border = { style: docx.BorderStyle.SINGLE, size: 4, color: borderColor };\n return new docx.Table({\n width: { size: tableWidthTwip, type: docx.WidthType.DXA },\n columnWidths: columnWidthsTwip,\n indent: { size: padding, type: docx.WidthType.DXA },\n layout: docx.TableLayoutType.FIXED,\n margins: { top: padding, bottom: padding, left: padding, right: padding },\n borders: {\n top: border,\n bottom: border,\n left: border,\n right: border,\n insideHorizontal: border,\n insideVertical: border,\n },\n rows: block.rows.map(\n (row, rowIndex) =>\n new docx.TableRow({\n tableHeader: rowIndex < (block.style.headerRows ?? 0),\n cantSplit: !(block.style.allowRowSplit ?? false),\n children: row.map(\n (cell, columnIndex) =>\n new docx.TableCell({\n width: {\n size: columnWidthsTwip[columnIndex] ?? ptToTwip(72),\n type: docx.WidthType.DXA,\n },\n verticalAlign: docx.VerticalAlign.CENTER,\n margins: { top: padding, bottom: padding, left: padding, right: padding },\n ...(rowIndex < (block.style.headerRows ?? 0) && block.style.headerFill\n ? { shading: { fill: normalizeHex(block.style.headerFill).slice(1) } }\n : {}),\n children: [\n new docx.Paragraph({ children: cell.map((run) => toDocxTextRun(run, docx)) }),\n ],\n }),\n ),\n }),\n ),\n });\n}\n\nfunction toDocxParagraphChildren(\n block: DocumentParagraph,\n docx: DocxModule,\n context: DocxContext,\n): DocxParagraphChild[] {\n const comments = context.commentsByBlock.get(block.id) ?? [];\n const changes = context.changesByBlock.get(block.id) ?? [];\n const paragraphText = block.text;\n validateNonCrossingComments(comments.map(({ thread }) => thread));\n validateNonOverlappingChanges(changes.map(({ change }) => change));\n validateReviewMarkupForDocx(\n block,\n comments.map(({ thread }) => thread),\n changes.map(({ change }) => change),\n );\n const boundaries = new Set<number>([0, paragraphText.length]);\n const runSpans: Array<{ start: number; end: number; run: DocumentTextRun }> = [];\n const pointComments = new Map<number, typeof comments>();\n const openingComments = new Map<number, typeof comments>();\n const closingComments = new Map<number, typeof comments>();\n let offset = 0;\n for (const run of block.runs) {\n const start = offset;\n offset += run.text.length;\n runSpans.push({ start, end: offset, run });\n boundaries.add(start);\n boundaries.add(offset);\n }\n for (const { thread } of comments) {\n boundaries.add(thread.start);\n boundaries.add(thread.end);\n }\n for (const comment of comments) {\n if (comment.thread.start === comment.thread.end) {\n appendMap(pointComments, comment.thread.start, comment);\n } else {\n appendMap(openingComments, comment.thread.start, comment);\n appendMap(closingComments, comment.thread.end, comment);\n }\n }\n for (const values of openingComments.values()) {\n values.sort((left, right) => right.thread.end - left.thread.end);\n }\n for (const values of closingComments.values()) {\n values.sort((left, right) => right.thread.start - left.thread.start);\n }\n for (const { change } of changes) {\n boundaries.add(change.start);\n boundaries.add(change.end);\n }\n const points = [...boundaries].sort((a, b) => a - b);\n const sortedChanges = [...changes].sort(\n (left, right) => left.change.start - right.change.start || left.change.end - right.change.end,\n );\n const children: DocxParagraphChild[] = [];\n if (paragraphText.length === 0) {\n for (const { numericId } of pointComments.get(0) ?? []) {\n children.push(\n new docx.CommentRangeStart(numericId),\n new docx.CommentRangeEnd(numericId),\n commentReferenceRun(numericId, docx),\n );\n }\n children.push(...block.runs.map((run) => toDocxTextRun(run, docx)));\n return children;\n }\n let runIndex = 0;\n let changeIndex = 0;\n for (let index = 0; index < points.length; index++) {\n const point = points[index]!;\n for (const { numericId } of pointComments.get(point) ?? []) {\n children.push(\n new docx.CommentRangeStart(numericId),\n new docx.CommentRangeEnd(numericId),\n commentReferenceRun(numericId, docx),\n );\n }\n for (const { numericId } of openingComments.get(point) ?? []) {\n children.push(new docx.CommentRangeStart(numericId));\n }\n const next = points[index + 1];\n if (next !== undefined && next > point) {\n while (runSpans[runIndex] && runSpans[runIndex]!.end <= point) runIndex += 1;\n const span = runSpans[runIndex];\n if (!span) throw new Error(`Document paragraph ${block.id} has a discontinuous run map`);\n if (span.start > point || span.end < next)\n throw new Error(`Document paragraph ${block.id} has a discontinuous run map`);\n const text = span.run.text.slice(point - span.start, next - span.start);\n while (\n sortedChanges[changeIndex]?.change.end !== undefined &&\n sortedChanges[changeIndex]!.change.end <= point\n ) {\n changeIndex += 1;\n }\n const candidate = sortedChanges[changeIndex];\n const active =\n candidate && candidate.change.start <= point && candidate.change.end >= next\n ? candidate\n : undefined;\n if (!active || point === active.change.start) {\n children.push(\n active\n ? toDocxChangedTextRun(\n paragraphText.slice(active.change.start, active.change.end),\n span.run.style,\n active,\n docx,\n )\n : toDocxChangedTextRun(text, span.run.style, undefined, docx),\n );\n }\n }\n if (next !== undefined) {\n for (const { numericId } of closingComments.get(next) ?? []) {\n children.push(new docx.CommentRangeEnd(numericId));\n children.push(commentReferenceRun(numericId, docx));\n }\n }\n }\n return children;\n}\n\nfunction commentReferenceRun(numericId: number, docx: DocxModule): import(\"docx\").TextRun {\n return new docx.TextRun({ children: [new docx.CommentReference(numericId)] });\n}\n\nfunction toDocxChangedTextRun(\n text: string,\n style: DocumentTextStyle,\n active: { change: TrackedChange; numericId: number } | undefined,\n docx: DocxModule,\n): DocxParagraphChild {\n const options = docxTextRunOptions(text, style, docx);\n if (!active) return materializedTextRun(text, options, docx);\n const changeOptions = {\n ...options,\n id: active.numericId,\n author: active.change.author,\n date: active.change.createdAt,\n };\n return active.change.kind === \"insert\"\n ? new docx.InsertedTextRun(changeOptions)\n : new docx.DeletedTextRun(changeOptions);\n}\n\nfunction toDocxTextRun(run: DocumentTextRun, docx: DocxModule): import(\"docx\").TextRun {\n return materializedTextRun(run.text, docxTextRunOptions(run.text, run.style, docx), docx);\n}\n\nfunction materializedTextRun(\n text: string,\n options: import(\"docx\").IRunOptions,\n docx: DocxModule,\n): import(\"docx\").TextRun {\n if (text.length > 0) return new docx.TextRun(options);\n // `docx` elides an empty TextRun entirely, including its run properties.\n // An explicit empty w:t keeps insertion-point formatting without adding a\n // Unicode sentinel that would alter the document's text semantics.\n const { text: _text, children: _children, ...properties } = options;\n return new docx.Run({\n ...properties,\n children: [new docx.EmptyElement(\"w:t\")],\n }) as import(\"docx\").TextRun;\n}\n\nfunction docxTextRunOptions(\n text: string,\n style: DocumentTextStyle,\n docx: DocxModule,\n): import(\"docx\").IRunOptions {\n return {\n ...(text.includes(\"\\t\") || text.includes(\"\\n\")\n ? { children: docxTextChildren(text, docx) }\n : { text }),\n ...(style.fontFamily ? { font: style.fontFamily } : {}),\n ...(style.fontSizePt !== undefined ? { size: Math.round(style.fontSizePt * 2) } : {}),\n ...(style.color ? { color: normalizeHex(style.color).slice(1) } : {}),\n ...(style.bold !== undefined ? { bold: style.bold } : {}),\n ...(style.italic !== undefined ? { italics: style.italic } : {}),\n ...(style.underline !== undefined\n ? {\n underline: {\n type: style.underline ? docx.UnderlineType.SINGLE : docx.UnderlineType.NONE,\n },\n }\n : {}),\n ...(style.strike !== undefined ? { strike: style.strike } : {}),\n };\n}\n\nfunction docxTextChildren(\n text: string,\n docx: DocxModule,\n): Array<string | import(\"docx\").Tab | import(\"docx\").CarriageReturn> {\n const children: Array<string | import(\"docx\").Tab | import(\"docx\").CarriageReturn> = [];\n let start = 0;\n for (let index = 0; index < text.length; index += 1) {\n const character = text[index];\n if (character !== \"\\t\" && character !== \"\\n\") continue;\n if (index > start) children.push(text.slice(start, index));\n children.push(character === \"\\t\" ? new docx.Tab() : new docx.CarriageReturn());\n start = index + 1;\n }\n if (start < text.length) children.push(text.slice(start));\n return children;\n}\n\nfunction numberingConfig(docx: DocxModule): import(\"docx\").INumberingOptions[\"config\"] {\n const makeLevels = (kind: \"bullet\" | \"number\"): import(\"docx\").ILevelsOptions[] =>\n Array.from({ length: 9 }, (_, level) => ({\n level,\n format: kind === \"bullet\" ? docx.LevelFormat.BULLET : docx.LevelFormat.DECIMAL,\n text: kind === \"bullet\" ? [\"•\", \"◦\", \"▪\"][level % 3]! : `%${level + 1}.`,\n alignment: docx.AlignmentType.LEFT,\n style: { paragraph: { indent: { left: 720 * (level + 1), hanging: 360 } } },\n }));\n return [\n { reference: \"opengeni-bullet\", levels: makeLevels(\"bullet\") },\n { reference: \"opengeni-number\", levels: makeLevels(\"number\") },\n ];\n}\n\nfunction buildListInstances(document: Document): Map<string, number> {\n const instances = new Map<string, number>();\n const explicitInstances = new Map<string, number>();\n let instance = 0;\n const visit = (blocks: readonly (DocumentBlock | DocumentStoryBlock)[]): void => {\n let activeKind: \"bullet\" | \"number\" | undefined;\n for (const block of blocks) {\n if (!(block instanceof DocumentParagraph) || !block.style.list) {\n activeKind = undefined;\n continue;\n }\n const explicitId = block.style.list.instanceId;\n if (explicitId) {\n const key = `${block.style.list.kind}:${explicitId}`;\n let explicitInstance = explicitInstances.get(key);\n if (explicitInstance === undefined) {\n explicitInstance = ++instance;\n explicitInstances.set(key, explicitInstance);\n }\n instances.set(block.id, explicitInstance);\n activeKind = undefined;\n continue;\n }\n if (activeKind !== block.style.list.kind) instance += 1;\n activeKind = block.style.list.kind;\n instances.set(block.id, instance);\n }\n };\n visit(document.blocks.items);\n for (const section of document.sections.items)\n for (const story of section.allStories()) visit(story.items);\n return instances;\n}\n\nfunction headingLevel(\n level: DocumentParagraphStyle[\"headingLevel\"],\n docx: DocxModule,\n): (typeof import(\"docx\").HeadingLevel)[keyof typeof import(\"docx\").HeadingLevel] | undefined {\n if (!level) return undefined;\n return [\n docx.HeadingLevel.HEADING_1,\n docx.HeadingLevel.HEADING_2,\n docx.HeadingLevel.HEADING_3,\n docx.HeadingLevel.HEADING_4,\n docx.HeadingLevel.HEADING_5,\n docx.HeadingLevel.HEADING_6,\n ][level - 1];\n}\n\nfunction alignment(\n value: DocumentParagraphStyle[\"alignment\"],\n docx: DocxModule,\n): (typeof import(\"docx\").AlignmentType)[keyof typeof import(\"docx\").AlignmentType] | undefined {\n if (!value) return undefined;\n return {\n left: docx.AlignmentType.LEFT,\n center: docx.AlignmentType.CENTER,\n right: docx.AlignmentType.RIGHT,\n justify: docx.AlignmentType.JUSTIFIED,\n }[value];\n}\n\nfunction validateNonOverlappingChanges(changes: readonly TrackedChange[]): void {\n const sorted = [...changes].sort((a, b) => a.start - b.start || a.end - b.end);\n for (let index = 1; index < sorted.length; index++) {\n if (sorted[index]!.start < sorted[index - 1]!.end) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"overlapping tracked changes\",\n \"DOCX export\",\n );\n }\n }\n}\n\nfunction validateNonCrossingComments(comments: readonly DocumentCommentThread[]): void {\n const sorted = [...comments].sort(\n (left, right) => left.start - right.start || right.end - left.end,\n );\n const activeEnds: number[] = [];\n for (const comment of sorted) {\n while (activeEnds.length > 0 && comment.start >= activeEnds[activeEnds.length - 1]!) {\n activeEnds.pop();\n }\n const enclosingEnd = activeEnds[activeEnds.length - 1];\n if (enclosingEnd !== undefined && comment.end > enclosingEnd) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"crossing comment ranges\",\n \"DOCX export\",\n );\n }\n if (comment.end > comment.start) activeEnds.push(comment.end);\n }\n}\n\nfunction validateReviewMarkupForDocx(\n paragraph: DocumentParagraph,\n comments: readonly DocumentCommentThread[],\n changes: readonly TrackedChange[],\n): void {\n const runSlices = paragraphRunSlices(paragraph);\n const sortedChanges = [...changes].sort(\n (left, right) => left.start - right.start || left.end - right.end,\n );\n let runIndex = 0;\n for (const change of sortedChanges) {\n while (runSlices[runIndex] && runSlices[runIndex]!.end <= change.start) runIndex += 1;\n let scanIndex = runIndex;\n let firstStyle: DocumentTextStyle | undefined;\n while (runSlices[scanIndex] && runSlices[scanIndex]!.start < change.end) {\n const style = runSlices[scanIndex]!.run.style;\n firstStyle ??= style;\n if (!sameTextStyle(style, firstStyle)) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"one tracked change spanning multiple text styles\",\n \"DOCX export\",\n );\n }\n scanIndex += 1;\n }\n }\n const sortedComments = [...comments].sort(\n (left, right) => left.start - right.start || left.end - right.end,\n );\n let changeIndex = 0;\n for (const comment of sortedComments) {\n while (sortedChanges[changeIndex] && sortedChanges[changeIndex]!.end <= comment.start) {\n changeIndex += 1;\n }\n const change = sortedChanges[changeIndex];\n if (!change) continue;\n const pointInside =\n comment.start === comment.end && comment.start > change.start && comment.start < change.end;\n const rangesOverlap = comment.start < change.end && comment.end > change.start;\n const aligned = comment.start === change.start && comment.end === change.end;\n if (pointInside || (rangesOverlap && !aligned)) {\n throw new UnsupportedArtifactFeatureError(\n \"document\",\n \"interleaved comments and tracked changes\",\n \"DOCX export\",\n );\n }\n }\n}\n\nfunction paragraphRunSlices(\n paragraph: DocumentParagraph,\n): Array<{ start: number; end: number; run: DocumentTextRun }> {\n const result: Array<{ start: number; end: number; run: DocumentTextRun }> = [];\n let offset = 0;\n for (const run of paragraph.runs) {\n const start = offset;\n offset += run.text.length;\n result.push({ start, end: offset, run });\n }\n return result;\n}\n\nfunction sameTextStyle(left: DocumentTextStyle, right: DocumentTextStyle): boolean {\n return (\n left.fontFamily === right.fontFamily &&\n left.fontSizePt === right.fontSizePt &&\n left.color === right.color &&\n left.bold === right.bold &&\n left.italic === right.italic &&\n left.underline === right.underline &&\n left.strike === right.strike\n );\n}\n\nconst MAX_DOCX_SOURCE_BYTES = 32 * 1024 * 1024;\n\nfunction validateImportOptions(options: DocumentDocxImportOptions): void {\n assertPlainDataRecord(options, new Set([\"unsupportedContent\", \"limits\"]), \"DOCX import options\");\n if (\n options.unsupportedContent !== undefined &&\n options.unsupportedContent !== \"preserve\" &&\n options.unsupportedContent !== \"error\"\n )\n throw new TypeError(\"DOCX unsupportedContent import policy is invalid\");\n if (options.limits !== undefined) {\n assertPlainDataRecord(options.limits, undefined, \"DOCX import limits\");\n }\n}\n\nfunction validateExportOptions(options: DocumentDocxExportOptions): void {\n assertPlainDataRecord(\n options,\n new Set([\"fileName\", \"unsupportedContent\"]),\n \"DOCX export options\",\n );\n if (\n options.unsupportedContent !== undefined &&\n options.unsupportedContent !== \"error\" &&\n options.unsupportedContent !== \"discard\"\n )\n throw new TypeError(\"DOCX unsupportedContent export policy is invalid\");\n if (\n options.fileName !== undefined &&\n (typeof options.fileName !== \"string\" ||\n options.fileName.length === 0 ||\n options.fileName.length > 255)\n )\n throw new TypeError(\"DOCX export fileName must contain 1 through 255 characters\");\n}\n\nfunction validateAttachOptions(options: Pick<DocumentDocxImportOptions, \"limits\">): void {\n assertPlainDataRecord(options, new Set([\"limits\"]), \"DOCX envelope attach options\");\n if (options.limits !== undefined) {\n assertPlainDataRecord(options.limits, undefined, \"DOCX import limits\");\n }\n}\n\nfunction assertPlainDataRecord(\n value: unknown,\n allowedKeys: ReadonlySet<string> | undefined,\n label: string,\n): asserts value is Record<string, unknown> {\n if (\n value === null ||\n typeof value !== \"object\" ||\n Array.isArray(value) ||\n Object.getPrototypeOf(value) !== Object.prototype\n )\n throw new TypeError(`${label} must be a plain data object`);\n if (Object.getOwnPropertySymbols(value).length > 0) {\n throw new TypeError(`${label} must not contain symbol properties`);\n }\n for (const [key, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(value))) {\n if (!(\"value\" in descriptor) || !descriptor.enumerable) {\n throw new TypeError(`${label} must contain only enumerable data properties`);\n }\n if (allowedKeys && !allowedKeys.has(key))\n throw new TypeError(`${label} contains unknown property ${key}`);\n }\n}\n\nasync function ownedDocxBytes(input: FileBlob | Blob | ArrayBuffer): Promise<Uint8Array> {\n if (input instanceof ArrayBuffer) {\n if (input.byteLength > MAX_DOCX_SOURCE_BYTES) {\n throw new DocxImportError(\"limit_exceeded\", \"Compressed DOCX exceeds maxCompressedBytes\");\n }\n return new Uint8Array(input.slice(0));\n }\n if (typeof Blob !== \"undefined\" && input instanceof Blob) {\n const size = Object.getOwnPropertyDescriptor(Blob.prototype, \"size\")?.get?.call(input);\n if (typeof size !== \"number\" || size > MAX_DOCX_SOURCE_BYTES) {\n throw new DocxImportError(\"limit_exceeded\", \"Compressed DOCX exceeds maxCompressedBytes\");\n }\n return new Uint8Array(await Blob.prototype.arrayBuffer.call(input));\n }\n throw new DocxImportError(\"invalid_input\", \"DOCX input must be a Blob or ArrayBuffer\");\n}\n\nfunction ownedArrayBuffer(bytes: Uint8Array): ArrayBuffer {\n const copy = new Uint8Array(bytes.byteLength);\n copy.set(bytes);\n return copy.buffer;\n}\n\nfunction deterministicCoreProperties(revision: number): string {\n return (\n '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n '<cp:coreProperties xmlns:cp=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\">' +\n \"<dc:creator>OpenGeni</dc:creator><cp:lastModifiedBy>OpenGeni</cp:lastModifiedBy>\" +\n `<cp:revision>${revision}</cp:revision></cp:coreProperties>`\n );\n}\n\nfunction hasOpaqueContent(content: DocumentOpaqueContent): boolean {\n return (\n content.parts.length > 0 || content.relationships.length > 0 || content.contentTypes.length > 0\n );\n}\n\nfunction opaqueContentIssue(\n content: DocumentOpaqueContent,\n severity: DocumentFidelityIssue[\"severity\"],\n): DocumentFidelityIssue {\n return {\n code: severity === \"warning\" ? \"content-preserved-in-source\" : \"content-will-be-discarded\",\n severity,\n feature: \"opaque-ooxml\",\n message:\n severity === \"warning\"\n ? \"The DOCX contains bounded inert OOXML outside the editable model; unchanged export preserves the package byte-for-byte\"\n : \"The DOCX contains bounded inert OOXML outside the editable model and cannot be imported under the requested strict fidelity policy\",\n ...cloneOpaqueContent(content),\n };\n}\n\nfunction cloneOpaqueContent(content: DocumentOpaqueContent): DocumentOpaqueContent {\n return {\n parts: [...content.parts],\n relationships: content.relationships.map((relationship) => ({ ...relationship })),\n contentTypes: content.contentTypes.map((contentType) => ({ ...contentType })),\n };\n}\n\nfunction sameOpaqueContent(left: DocumentOpaqueContent, right: DocumentOpaqueContent): boolean {\n return JSON.stringify(left) === JSON.stringify(right);\n}\n\nfunction normalizeLossPreservationEnvelope(value: unknown): DocumentLossPreservationEnvelope {\n assertPlainDataRecord(\n value,\n new Set([\n \"version\",\n \"mediaType\",\n \"sourceBytes\",\n \"sourceDigest\",\n \"opaqueContent\",\n \"modelDigest\",\n ]),\n \"DOCX loss-preservation envelope\",\n );\n if (value.version !== 1 || value.mediaType !== DOCX_MEDIA_TYPE) {\n throw new TypeError(\"DOCX loss-preservation envelope version or media type is invalid\");\n }\n if (\n !(value.sourceBytes instanceof Uint8Array) ||\n Object.getPrototypeOf(value.sourceBytes) !== Uint8Array.prototype ||\n value.sourceBytes.byteLength > MAX_DOCX_SOURCE_BYTES\n )\n throw new TypeError(\"DOCX loss-preservation sourceBytes must be a bounded Uint8Array\");\n if (typeof value.sourceDigest !== \"string\" || !/^[0-9a-f]{64}$/.test(value.sourceDigest)) {\n throw new TypeError(\"DOCX loss-preservation sourceDigest must be canonical SHA-256\");\n }\n if (typeof value.modelDigest !== \"string\" || !/^[0-9a-f]{64}$/.test(value.modelDigest)) {\n throw new TypeError(\"DOCX loss-preservation modelDigest must be canonical SHA-256\");\n }\n const opaqueContent = normalizeOpaqueContent(value.opaqueContent);\n if (!hasOpaqueContent(opaqueContent)) {\n throw new TypeError(\"DOCX loss-preservation envelope contains no opaque content\");\n }\n return {\n version: 1,\n mediaType: DOCX_MEDIA_TYPE,\n sourceBytes: value.sourceBytes.slice(),\n sourceDigest: value.sourceDigest,\n opaqueContent,\n modelDigest: value.modelDigest,\n };\n}\n\nfunction normalizeOpaqueContent(value: unknown): DocumentOpaqueContent {\n assertPlainDataRecord(\n value,\n new Set([\"parts\", \"relationships\", \"contentTypes\"]),\n \"DOCX opaque-content metadata\",\n );\n const parts = denseDataArray(value.parts, 1_024, \"DOCX opaque part list\").map((part) => {\n if (typeof part !== \"string\" || part.length === 0 || part.length > 1_025) {\n throw new TypeError(\"DOCX opaque part name is invalid\");\n }\n return part;\n });\n const relationships = denseDataArray(\n value.relationships,\n 100_000,\n \"DOCX opaque relationship list\",\n ).map((relationship) => {\n assertPlainDataRecord(\n relationship,\n new Set([\"sourcePart\", \"type\", \"targetPart\"]),\n \"DOCX opaque relationship\",\n );\n const { sourcePart, type, targetPart } = relationship;\n if (\n typeof sourcePart !== \"string\" ||\n sourcePart.length > 1_025 ||\n typeof type !== \"string\" ||\n type.length === 0 ||\n type.length > 2_048 ||\n typeof targetPart !== \"string\" ||\n targetPart.length === 0 ||\n targetPart.length > 1_025\n )\n throw new TypeError(\"DOCX opaque relationship metadata is invalid\");\n return { sourcePart, type, targetPart };\n });\n const contentTypes = denseDataArray(\n value.contentTypes,\n 1_024,\n \"DOCX opaque content-type list\",\n ).map((contentType) => {\n assertPlainDataRecord(\n contentType,\n new Set([\"partName\", \"contentType\"]),\n \"DOCX opaque content type\",\n );\n if (\n typeof contentType.partName !== \"string\" ||\n contentType.partName.length === 0 ||\n contentType.partName.length > 1_025 ||\n typeof contentType.contentType !== \"string\" ||\n contentType.contentType.length === 0 ||\n contentType.contentType.length > 2_048\n )\n throw new TypeError(\"DOCX opaque content-type metadata is invalid\");\n return { partName: contentType.partName, contentType: contentType.contentType };\n });\n return { parts, relationships, contentTypes };\n}\n\nfunction denseDataArray(value: unknown, maximum: number, label: string): unknown[] {\n if (\n !Array.isArray(value) ||\n Object.getPrototypeOf(value) !== Array.prototype ||\n value.length > maximum\n ) {\n throw new TypeError(`${label} must be a bounded ordinary array`);\n }\n const descriptors = Object.getOwnPropertyDescriptors(value);\n for (let index = 0; index < value.length; index += 1) {\n const descriptor = descriptors[String(index)];\n if (!descriptor || !(\"value\" in descriptor) || !descriptor.enumerable) {\n throw new TypeError(`${label} must contain only dense data elements`);\n }\n }\n for (const key of Object.keys(descriptors)) {\n if (key !== \"length\" && !/^(?:0|[1-9][0-9]*)$/.test(key)) {\n throw new TypeError(`${label} contains an unknown property`);\n }\n }\n return value.slice();\n}\n\nasync function documentModelDigest(document: Document): Promise<string> {\n return sha256Hex(new TextEncoder().encode(JSON.stringify(document.toJSON())));\n}\n\nasync function sha256Hex(bytes: Uint8Array): Promise<string> {\n const ownedBytes = new Uint8Array(bytes.byteLength);\n ownedBytes.set(bytes);\n const digest = new Uint8Array(await globalThis.crypto.subtle.digest(\"SHA-256\", ownedBytes));\n return [...digest].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nasync function semanticNamespace(value: ImportedDocument): Promise<string> {\n const { opaqueContent: _opaqueContent, ...semanticValue } = value;\n const canonicalBytes = new TextEncoder().encode(JSON.stringify(semanticValue));\n const digest = new Uint8Array(await globalThis.crypto.subtle.digest(\"SHA-256\", canonicalBytes));\n return [...digest.subarray(0, 8)].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction appendMap<K, T>(map: Map<K, T[]>, key: K, value: T): void {\n const values = map.get(key);\n if (values) values.push(value);\n else map.set(key, [value]);\n}\n\nfunction initials(author: string): string {\n const value = author\n .trim()\n .split(/\\s+/u)\n .slice(0, 2)\n .map((part) => Array.from(part)[0]?.toUpperCase() ?? \"\")\n .join(\"\");\n return Array.from(value).slice(0, 8).join(\"\") || \"U\";\n}\n\nfunction assertRepresentableCommentInitials(author: string, value: string | undefined): void {\n if (value !== undefined && value !== initials(author)) {\n throw new UnsupportedArtifactFeatureError(\"document\", \"custom comment initials\", \"DOCX import\");\n }\n}\n\nfunction ptToTwip(value: number): number {\n return Math.round(value * 20);\n}\n\nfunction normalizeHex(value: string): string {\n if (!/^#?[0-9A-Fa-f]{6}$/.test(value)) throw new Error(`Invalid or unsafe color: ${value}`);\n return `#${value.replace(/^#/, \"\").toUpperCase()}`;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,IAAM,iBAAiB;AAqBhB,IAAM,+BAAN,cAA2C,MAAM;AAAA,EAC7C,OAAO;AAAA,EACP,OAAO;AAClB;AAEA,eAAsB,+BACpB,MACA,QACA,YAAwC,CAAC,GACpB;AACrB,MAAK,OAAO,WAAW,YAAY,OAAO,WAAW,cAAe,WAAW,MAAM;AACnF,UAAM,oBAAoB;AAAA,EAC5B;AACA,QAAM,WAAW,QAAQ,IAAI,QAAQ,UAAU;AAC/C,MAAI,CAAC,YAAY,OAAO,SAAS,YAAY,WAAY,OAAM,oBAAoB;AACnF,QAAM,UAAU,SAAS,QAAQ,MAAM,QAAW,SAAS;AAC3D,MACE,CAAC,WACD,OAAO,QAAQ,kBAAkB,cACjC,OAAO,QAAQ,YAAY;AAE3B,UAAM,oBAAoB;AAC5B,UAAQ,QAAQ,CAAC,OAAO,UAAU;AAGhC,UAAM,OAAO,IAAI,KAAK,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC9C,CAAC;AACD,QAAM,QAAQ,MAAM,QAAQ,cAAc;AAAA,IACxC,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,EACf,CAAC;AACD,MAAI,EAAE,iBAAiB,eAAe,MAAM,eAAe,EAAG,OAAM,oBAAoB;AACxF,SAAO;AACT;AAEA,SAAS,sBAAoD;AAC3D,SAAO,IAAI;AAAA,IACT;AAAA,EACF;AACF;;;ACfO,IAAM,kBAAN,cAA8B,MAAM;AAAA,EAEzC,YACW,MACT,SACS,UACT;AACA,UAAM,WAAW,GAAG,OAAO,KAAK,QAAQ,MAAM,OAAO;AAJ5C;AAEA;AAAA,EAGX;AAAA,EAPS,OAAO;AAQlB;AAqOA,IAAM,iBAAmC;AAAA,EACvC,oBAAoB,KAAK,OAAO;AAAA,EAChC,YAAY;AAAA,EACZ,yBAAyB,KAAK,OAAO;AAAA,EACrC,2BAA2B,KAAK,OAAO;AAAA,EACvC,2BAA2B,KAAK,OAAO;AAAA,EACvC,qBAAqB;AAAA,EACrB,aAAa,KAAK,OAAO;AAAA,EACzB,kBAAkB,KAAK,OAAO;AAAA,EAC9B,0BAA0B;AAAA,EAC1B,aAAa;AAAA,EACb,aAAa;AAAA,EACb,4BAA4B;AAAA,EAC5B,yBAAyB;AAAA,EACzB,uBAAuB;AAAA,EACvB,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB,aAAa;AAAA,EACb,yBAAyB;AAAA,EACzB,6BAA6B;AAAA,EAC7B,WAAW;AAAA,EACX,0BAA0B;AAAA,EAC1B,yBAAyB;AAAA,EACzB,aAAa;AAAA,EACb,yBAAyB;AAC3B;AAEA,IAAM,yBACJ;AACF,IAAM,4BACJ;AACF,IAAM,6BAA6B;AACnC,IAAM,0BAA0B;AAChC,IAAM,0BAA0B;AAChC,IAAM,8BAA8B;AA0CpC,eAAsB,WACpB,OACA,UAAqC,CAAC,GACX;AAC3B,QAAM,SAAS,cAAc,OAAO;AACpC,QAAM,QAAQ,MAAM,UAAU,OAAO,OAAO,kBAAkB;AAC9D,QAAM,UAAU,kBAAkB,OAAO,MAAM;AAC/C,QAAM,cAAc,kBAAkB,OAAO;AAC7C,QAAM,gBAAgB,IAAI;AAAA,IACxB,QAAQ,OAAO,CAAC,UAAU,CAAC,MAAM,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,MAAM,KAAK,CAAC;AAAA,EAChF;AACA,QAAM,YAAY,IAAI,IAAI,cAAc,KAAK,CAAC;AAC9C,uBAAqB,SAAS;AAE9B,QAAM,SAAuB;AAAA,IAC3B;AAAA,IACA,UAAU;AAAA,IACV,uBAAuB;AAAA,IACvB,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,aAAa;AAAA,EACf;AACA,QAAM,cAAc,oBAAI,IAAY;AACpC,QAAM,UAAU,OAAO,aAA0C;AAC/D,UAAM,QAAQ,cAAc,IAAI,QAAQ;AACxC,QAAI,CAAC;AACH,YAAM,IAAI,gBAAgB,mBAAmB,iCAAiC,QAAQ;AACxF,QAAI,YAAY,IAAI,QAAQ,GAAG;AAC7B,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,gBAAY,IAAI,QAAQ;AAIxB,UAAM,QAAQ,MAAM;AAAA,MAClB;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP;AAAA,IACF;AACA,WAAO,aAAa,OAAO,UAAU,MAAM;AAAA,EAC7C;AAKA,aAAW,YAAY,WAAW;AAChC,QAAI,oBAAoB,QAAQ,KAAM,YAAY,IAAI,QAAQ,KAAK,SAAS,SAAS,MAAM;AACzF,YAAM,QAAQ,QAAQ;AAAA,EAC1B;AAEA,QAAM,eAAe,MAAM,QAAQ,qBAAqB;AACxD,QAAM,oBAAoB,qBAAqB,cAAc,SAAS;AACtE,QAAM,qBAAkD,CAAC;AACzD,aAAW,YAAY,aAAa;AAClC,UAAM,cAAc,kBAAkB,IAAI,QAAQ;AAClD,QAAI,CAAC,eAAe,CAAC,wBAAwB,UAAU,WAAW,GAAG;AACnE,YAAM,IAAI;AAAA,QACR;AAAA,QACA,qDAAqD,eAAe,SAAS;AAAA,QAC7E;AAAA,MACF;AAAA,IACF;AACA,uBAAmB,KAAK,EAAE,UAAU,YAAY,CAAC;AAAA,EACnD;AACA,MAAI,UAAU,IAAI,oBAAoB;AACpC,0BAAsB,MAAM,QAAQ,oBAAoB,GAAG,YAAY,oBAAoB;AAC7F,MAAI,UAAU,IAAI,mBAAmB;AACnC,0BAAsB,MAAM,QAAQ,mBAAmB,GAAG,WAAW,mBAAmB;AAC1F,QAAM,WAAW,UAAU,IAAI,mBAAmB,IAC9C,iBAAiB,MAAM,QAAQ,mBAAmB,CAAC,IACnD,EAAE,mBAAmB,OAAO,gBAAgB,MAAM;AACtD,MAAI,qBAAqB;AACzB,QAAM,oBAAoB,OAAO,aAA8C;AAC7E,UAAM,SAAS;AAAA,MACb,MAAM,QAAQ,QAAQ;AAAA,MACtB;AAAA,MACA,OAAO;AAAA,IACT;AACA,QAAI,qBAAqB,OAAO,SAAS,OAAO,uBAAuB;AACrE,YAAM,WAAW,sCAAsC,QAAQ;AAAA,IACjE;AACA,0BAAsB,OAAO;AAC7B,WAAO;AAAA,EACT;AACA,QAAM,oBAAoB,MAAM,kBAAkB,aAAa;AAC/D,QAAM,kBAAkB,kBAAkB;AAAA,IACxC,CAAC,iBAAiB,aAAa,SAAS,GAAG,sBAAsB;AAAA,EACnE;AACA,QAAM,iBAAiB,gBAAgB,CAAC;AACxC,MACE,gBAAgB,WAAW,KAC3B,CAAC,kBACD,eAAe,aAAa,qBAC5B;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,wBAAwB,UAAU,IAAI,8BAA8B,IACtE,MAAM,kBAAkB,8BAA8B,IACtD,CAAC;AACL,QAAM,yBAAyC,CAAC;AAChD,aAAW,YAAY,WAAW;AAChC,QACE,CAAC,SAAS,SAAS,OAAO,KAC1B,aAAa,iBACb,aAAa;AAEb;AACF,eAAW,gBAAgB,MAAM,kBAAkB,QAAQ;AACzD,6BAAuB,KAAK,YAAY;AAAA,EAC5C;AACA,QAAM,mBAAmB;AAAA,IACvB,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACA,QAAM,sBAAsB,sBAAsB,kBAAkB,WAAW;AAC/E,aAAW,gBAAgB,kBAAkB;AAC3C,QAAI,CAAC,UAAU,IAAI,aAAa,QAAQ,GAAG;AACzC,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AACA,+BAA6B,WAAW,gBAAgB;AACxD,QAAM,mBAAmB,IAAI;AAAA,IAC3B,sBAAsB,IAAI,CAAC,iBAAiB,CAAC,aAAa,IAAI,YAAY,CAAC;AAAA,EAC7E;AAEA,QAAM,SAAS,UAAU,IAAI,iBAAiB,IAC1C,YAAY,MAAM,QAAQ,iBAAiB,GAAG,MAAM,IACpD,CAAC;AACL,QAAM,QAAQ,UAAU,IAAI,oBAAoB,IAC5C,eAAe,MAAM,QAAQ,oBAAoB,GAAG,MAAM,IAC1D,CAAC;AACL,QAAM,iBAA0C,CAAC;AACjD,QAAM,cAA4B,EAAE,QAAQ,gBAAgB,UAAU,OAAO;AAC7E,QAAM,OAAO,kBAAkB,MAAM,QAAQ,mBAAmB,GAAG,aAAa,gBAAgB;AAChG,iCAA+B,KAAK,QAAQ;AAE5C,QAAM,UAAkC,CAAC;AACzC,QAAM,UAAkC,CAAC;AACzC,QAAM,mBAAmB,oBAAI,IAAY;AACzC,aAAW,gBAAgB,uBAAuB;AAChD,UAAM,OACJ,aAAa,SAAS,GAAG,sBAAsB,WAC3C,WACA,aAAa,SAAS,GAAG,sBAAsB,WAC7C,WACA;AACR,QAAI,CAAC,KAAM;AACX,QAAI,iBAAiB,IAAI,aAAa,QAAQ,EAAG;AACjD,qBAAiB,IAAI,aAAa,QAAQ;AAC1C,UAAM,OAAO,MAAM,QAAQ,aAAa,QAAQ;AAChD,qBAAiB,MAAM,SAAS,WAAW,QAAQ,OAAO,aAAa,QAAQ;AAC/E,yBAAqB,MAAM,aAAa,QAAQ;AAChD,UAAM,UAAwB;AAAA,MAC5B;AAAA,MACA;AAAA,MACA,UAAU,GAAG,IAAI,IAAI,aAAa,QAAQ;AAAA,IAC5C;AACA,UAAM,SAAS,oBAAoB,MAAM,OAAO;AAChD,KAAC,SAAS,WAAW,UAAU,SAAS,KAAK,EAAE,MAAM,UAAU,aAAa,UAAU,OAAO,CAAC;AAAA,EAChG;AACA;AAAA,IACE,KAAK;AAAA,IACL;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAEA,QAAM,mBAAmB,UAAU,IAAI,2BAA2B,IAC9D,sBAAsB,MAAM,QAAQ,2BAA2B,GAAG,OAAO,WAAW,IACpF,oBAAI,IAA6B;AACrC,QAAM,WAAW,UAAU,IAAI,mBAAmB,IAC9C;AAAA,IACE,MAAM,QAAQ,mBAAmB;AAAA,IACjC,EAAE,QAAQ,gBAAgB,UAAU,UAAU;AAAA,IAC9C;AAAA,IACA,OAAO;AAAA,EACT,IACA,CAAC;AACL,MAAI,iBAAiB,OAAO,KAAK,SAAS,WAAW,GAAG;AACtD,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,4BAA0B,KAAK,QAAQ,SAAS,SAAS,QAAQ;AACjE,QAAM,mBAAmB,SAAS;AAAA,IAChC,CAAC,OAAO,YAAY,QAAQ,OAAO,QAAQ,aAAa,MAAS;AAAA,IACjE;AAAA,EACF;AACA,MACE,mBAAmB,KACnB,oBAAoB,OAAO,SAAS,SAAS,UAAU,OAAO,yBAC9D;AACA,UAAM,WAAW,wCAAwC,mBAAmB;AAAA,EAC9E;AAEA,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,mBAAmB,SAAS;AAAA,IAC5B,gBAAgB,SAAS;AAAA,IACzB,QAAQ,KAAK;AAAA,IACb,UAAU,KAAK;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,MACb,OAAO,CAAC,GAAG,WAAW,EAAE,KAAK,cAAc;AAAA,MAC3C,eAAe,oBACZ,IAAI,CAAC,EAAE,YAAY,MAAM,SAAS,OAAO,EAAE,YAAY,MAAM,YAAY,SAAS,EAAE,EACpF,KAAK,0BAA0B;AAAA,MAClC,cAAc,mBAAmB,KAAK,yBAAyB;AAAA,IACjE;AAAA,EACF;AACF;AAEA,SAAS,cAAc,SAAsD;AAC3E,MACE,YAAY,QACZ,OAAO,YAAY,YACnB,MAAM,QAAQ,OAAO,KACrB,OAAO,eAAe,OAAO,MAAM,OAAO,aAC1C,OAAO,sBAAsB,OAAO,EAAE,SAAS;AAE/C,UAAM,IAAI,gBAAgB,iBAAiB,gDAAgD;AAC7F,aAAW,CAAC,MAAM,UAAU,KAAK,OAAO,QAAQ,OAAO,0BAA0B,OAAO,CAAC,GAAG;AAC1F,QAAI,EAAE,WAAW,eAAe,CAAC,WAAW,YAAY;AACtD,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,QAAI,CAAC,OAAO,UAAU,eAAe,KAAK,gBAAgB,IAAI,GAAG;AAC/D,YAAM,IAAI,gBAAgB,iBAAiB,8BAA8B,IAAI,EAAE;AAAA,IACjF;AAAA,EACF;AACA,QAAM,SAAS,EAAE,GAAG,gBAAgB,GAAG,QAAQ;AAC/C,aAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AAClD,QACE,CAAC,OAAO,SAAS,KAAK,KACtB,SAAS,KACR,SAAS,yBAAyB,CAAC,OAAO,UAAU,KAAK,GAC1D;AACA,YAAM,IAAI,gBAAgB,iBAAiB,8BAA8B,IAAI,EAAE;AAAA,IACjF;AAAA,EACF;AAGA,aAAW,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQ,cAAc,GAEpD;AACD,QAAI,OAAO,IAAI,IAAI;AACjB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,GAAG,IAAI,yCAAyC,GAAG;AAAA,MACrD;AAAA,EACJ;AACA,SAAO;AACT;AAEA,eAAe,UAAU,OAA2B,UAAuC;AACzF,MAAI,iBAAiB,aAAa;AAChC,QAAI,MAAM,aAAa,SAAU,OAAM,WAAW,4CAA4C;AAC9F,WAAO,IAAI,WAAW,KAAK;AAAA,EAC7B;AACA,MAAI,OAAO,SAAS,eAAe,iBAAiB,MAAM;AACxD,QAAI,MAAM,OAAO,SAAU,OAAM,WAAW,4CAA4C;AACxF,WAAO,IAAI,WAAW,MAAM,MAAM,YAAY,CAAC;AAAA,EACjD;AACA,QAAM,IAAI,gBAAgB,iBAAiB,0CAA0C;AACvF;AAEA,SAAS,kBAAkB,OAAmB,QAAsC;AAClF,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,SAAS,OAAO;AAAA,MAChB,sBAAsB,OAAO;AAAA,MAC7B,oBAAoB,OAAO;AAAA,MAC3B,eAAe,OAAO;AAAA,MACtB,kBAAkB,OAAO;AAAA,IAC3B;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,eACP,MACA,SACA,UACO;AACP,QAAM,OACJ,SAAS,UACL,mBACA,SAAS,YACP,gBACA,SAAS,aACP,yBACA;AACV,QAAM,IAAI,gBAAgB,MAAM,SAAS,QAAQ;AACnD;AAEA,SAAS,kBAAkB,OAAyC;AAClE,QAAM,cAAc,oBAAI,IAAY;AACpC,aAAW,SAAS,OAAO;AACzB,QAAI,MAAM,UAAW;AACrB,UAAM,OAAO,MAAM;AACnB,UAAM,YACJ,SAAS,yBACT,SAAS,iBACT,uCAAuC,KAAK,IAAI,KAChD,SAAS,uBACT,SAAS,qBACT,SAAS,wBACT,SAAS,uBACT,SAAS,+BACT,SAAS,wBACT,SAAS,uBACT,SAAS,uBACT,SAAS,0BACT,SAAS,wBACT,+BAA+B,KAAK,IAAI,KACxC,oCAAoC,KAAK,IAAI,KAC7C,mGAAmG;AAAA,MACjG;AAAA,IACF;AACF,QAAI,WAAW;AACb,UAAI,oBAAoB,IAAI,EAAG,aAAY,IAAI,IAAI;AACnD;AAAA,IACF;AACA,QAAI,qBAAqB,IAAI,GAAG;AAC9B,kBAAY,IAAI,IAAI;AACpB;AAAA,IACF;AACA,UAAM,SACJ,mIAAmI;AAAA,MACjI;AAAA,IACF;AACF,UAAM,QAAQ,6EAA6E;AAAA,MACzF;AAAA,IACF;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA,SACI,mFACA,QACE,iEACA;AAAA,MACN;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,qBAAqB,UAA2B;AACvD,SACE,4BAA4B,KAAK,QAAQ,KACzC,iCAAiC,KAAK,QAAQ,KAC9C,yCAAyC,KAAK,QAAQ,KACtD,aAAa,gCACb,aAAa;AAEjB;AAEA,SAAS,qBAAqB,OAAkC;AAC9D,aAAW,YAAY,CAAC,uBAAuB,eAAe,mBAAmB,GAAG;AAClF,QAAI,CAAC,MAAM,IAAI,QAAQ;AACrB,YAAM,IAAI,gBAAgB,mBAAmB,iCAAiC,QAAQ;AAAA,EAC1F;AACF;AAEA,SAAS,oBAAoB,UAA2B;AACtD,SACE,uCAAuC,KAAK,QAAQ,KACpD,aAAa,0BACb,aAAa,wBACb,+BAA+B,KAAK,QAAQ;AAEhD;AAEA,SAAS,aAAa,OAAmB,UAAkB,QAAkC;AAC3F,MAAI,MAAM,aAAa,OAAO,OAAO;AACnC,UAAM,WAAW,gCAAgC,QAAQ;AAC3D,SAAO,YAAY,MAAM;AACzB,MAAI,OAAO,WAAW,OAAO,OAAO;AAClC,UAAM,WAAW,iCAAiC,QAAQ;AAC5D,QAAM,MAAM,WAAW,OAAO,OAAO,QAAQ;AAC7C,MAAI,6BAA6B,KAAK,GAAG,GAAG;AAC1C,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,SAAS;AAAA,IACb;AAAA,IACA;AAAA,IACA,OAAO,OAAO;AAAA,IACd,OAAO,OAAO,cAAc,OAAO;AAAA,IACnC,OAAO,OAAO,2BAA2B,OAAO;AAAA,IAChD,OAAO,OAAO;AAAA,IACd,SAAS,SAAS,OAAO,IAAI,OAAO,OAAO,0BAA0B;AAAA,EACvE;AACA,kCAAgC,OAAO,MAAM,QAAQ;AACrD,SAAO,YAAY,OAAO;AAC1B,MAAI,OAAO,WAAW,OAAO,OAAO;AAClC,UAAM,WAAW,4BAA4B,QAAQ;AACvD,SAAO,yBAAyB,OAAO;AACvC,MAAI,OAAO,wBAAwB,OAAO,OAAO,0BAA0B;AACzE,UAAM,WAAW,yCAAyC,QAAQ;AAAA,EACpE;AACA,SAAO,OAAO;AAChB;AAEA,SAAS,SACP,KACA,UACA,UACA,gBACA,6BACA,yBACA,wBACqE;AACrE,QAAM,QAAsB,CAAC;AAC7B,MAAI;AACJ,MAAI,SAAS;AACb,MAAI,YAAY;AAChB,MAAI,qBAAqB;AACzB,MAAI,oBAAoB;AACxB,MAAI,sBAAsB;AAC1B,QAAM,UAAU,CAAC,SAAwB;AACvC,iBAAa;AACb,QAAI,YAAY,eAAgB,OAAM,WAAW,4BAA4B,QAAQ;AACrF,0BAAsB,sBAAsB,IAAI;AAChD,QAAI,qBAAqB,6BAA6B;AACpD,YAAM,WAAW,yCAAyC,QAAQ;AAAA,IACpE;AACA,UAAM,SAAS,MAAM,GAAG,EAAE;AAC1B,QAAI,QAAQ;AACV,UAAI,WAAW,QAAQ,KAAK,SAAS,aAAa,2BAA2B,QAAW;AACtF,YAAI,uBAAuB,wBAAwB;AACjD,gBAAM,WAAW,sDAAsD,QAAQ;AAAA,QACjF;AACA,+BAAuB;AAAA,MACzB;AACA,aAAO,SAAS,KAAK,IAAI;AAAA,IAC3B,WAAW,KAAK,SAAS,UAAU,oBAAoB,KAAK,KAAK,EAAG;AAAA,aAC3D,KAAK,SAAS,aAAa,CAAC,KAAM,QAAO;AAAA;AAEhD,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,EACJ;AACA,SAAO,SAAS,IAAI,QAAQ;AAC1B,UAAM,UAAU,IAAI,QAAQ,KAAK,MAAM;AACvC,QAAI,UAAU,GAAG;AACf,YAAM,OAAO,IAAI,MAAM,MAAM;AAC7B,UAAI,KAAK,SAAS,EAAG,SAAQ,EAAE,MAAM,QAAQ,OAAO,kBAAkB,MAAM,QAAQ,EAAE,CAAC;AACvF,eAAS,IAAI;AACb;AAAA,IACF;AACA,QAAI,UAAU;AACZ,cAAQ,EAAE,MAAM,QAAQ,OAAO,kBAAkB,IAAI,MAAM,QAAQ,OAAO,GAAG,QAAQ,EAAE,CAAC;AAC1F,QAAI,IAAI,WAAW,QAAQ,OAAO,GAAG;AACnC,YAAMA,OAAM,IAAI,QAAQ,OAAO,UAAU,CAAC;AAC1C,YAAM,UAAUA,OAAM,IAAI,KAAK,IAAI,MAAM,UAAU,GAAGA,IAAG;AACzD,UAAIA,OAAM,KAAK,QAAQ,SAAS,IAAI,KAAK,QAAQ,SAAS,GAAG;AAC3D,cAAM,IAAI,gBAAgB,eAAe,yBAAyB,QAAQ;AAC5E,4BAAsB,SAAS,QAAQ;AACvC,eAASA,OAAM;AACf;AAAA,IACF;AACA,QAAI,IAAI,WAAW,MAAM,OAAO,GAAG;AACjC,YAAMA,OAAM,IAAI,QAAQ,MAAM,UAAU,CAAC;AACzC,UAAIA,OAAM;AACR,cAAM,IAAI,gBAAgB,eAAe,wCAAwC,QAAQ;AAC3F,YAAM,cAAc,IAAI,MAAM,UAAU,GAAGA,IAAG;AAC9C,YAAM,mBACJ,2LAA2L;AAAA,QACzL;AAAA,MACF;AACF,UAAI,CAAC,oBAAoB,YAAY,KAAK,QAAQ,MAAM,SAAS,KAAK,mBAAmB;AACvF,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,0BAAoB;AACpB,eAASA,OAAM;AACf;AAAA,IACF;AACA,QAAI,IAAI,WAAW,MAAM,OAAO;AAC9B,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACF,UAAM,MAAM,cAAc,KAAK,UAAU,GAAG,QAAQ;AACpD,UAAM,SAAS,IAAI,MAAM,UAAU,GAAG,GAAG;AACzC,QAAI,OAAO,WAAW,GAAG,GAAG;AAC1B,YAAM,UAAU,oCAAoC,KAAK,MAAM;AAC/D,YAAM,OAAO,UAAU,CAAC;AACxB,UAAI,CAAC,QAAQ,CAAC,UAAU,KAAK,IAAI;AAC/B,cAAM,IAAI,gBAAgB,eAAe,6BAA6B,QAAQ;AAChF,YAAM,UAAU,MAAM,IAAI;AAC1B,UAAI,CAAC,WAAW,QAAQ,SAAS;AAC/B,cAAM,IAAI,gBAAgB,eAAe,8BAA8B,QAAQ;AAAA,IACnF,OAAO;AACL,UAAI,WAAW,OAAO,CAAC,CAAC;AACtB,cAAM,IAAI,gBAAgB,eAAe,wCAAwC,QAAQ;AAC3F,YAAM,cAAc,mBAAmB,KAAK,MAAM;AAClD,YAAM,UAAU;AAAA,QACd,cAAc,OAAO,QAAQ,oBAAoB,EAAE,IAAI;AAAA,QACvD;AAAA,QACA;AAAA,MACF;AACA,cAAQ,OAAO;AACf,UAAI,CAAC,aAAa;AAChB,cAAM,KAAK,OAAO;AAClB,YAAI,MAAM,SAAS,SAAU,OAAM,WAAW,2BAA2B,QAAQ;AAAA,MACnF;AAAA,IACF;AACA,aAAS,MAAM;AAAA,EACjB;AACA,MAAI,MAAM,SAAS;AACjB,UAAM,IAAI,gBAAgB,eAAe,6CAA6C,QAAQ;AAChG,MAAI,CAAC,KAAM,OAAM,IAAI,gBAAgB,eAAe,+BAA+B,QAAQ;AAC3F,SAAO,EAAE,MAAM,WAAW,mBAAmB;AAC/C;AAEA,SAAS,sBAAsB,MAAuB;AACpD,MAAI,KAAK,SAAS,OAAQ,QAAO,KAAK,MAAM;AAC5C,MAAI,aAAa,KAAK,KAAK,SAAS,KAAK,UAAU;AACnD,aAAW,CAAC,MAAM,KAAK,KAAK,KAAK,WAAY,eAAc,KAAK,SAAS,MAAM;AAC/E,SAAO;AACT;AAEA,SAAS,cAAc,KAAa,OAAe,UAA0B;AAC3E,MAAI;AACJ,WAAS,QAAQ,OAAO,QAAQ,IAAI,QAAQ,SAAS,GAAG;AACtD,UAAM,YAAY,IAAI,KAAK;AAC3B,QAAI,OAAO;AACT,UAAI,cAAc,MAAO,SAAQ;AAAA,IACnC,WAAW,cAAc,OAAO,cAAc,IAAK,SAAQ;AAAA,aAClD,cAAc,IAAK,QAAO;AAAA,EACrC;AACA,QAAM,IAAI,gBAAgB,eAAe,wBAAwB,QAAQ;AAC3E;AAEA,SAAS,iBAAiB,QAAgB,UAAkB,eAAmC;AAC7F,MAAI,SAAS;AACb,QAAM,YAAY,MAAY;AAC5B,WAAO,SAAS,OAAO,UAAU,WAAW,OAAO,MAAM,CAAC,EAAG,WAAU;AAAA,EACzE;AACA,YAAU;AACV,QAAM,YAAY;AAClB,SAAO,SAAS,OAAO,UAAU,CAAC,WAAW,OAAO,MAAM,CAAC,EAAG,WAAU;AACxE,QAAM,OAAO,OAAO,MAAM,WAAW,MAAM;AAC3C,MAAI,CAAC,UAAU,KAAK,IAAI;AACtB,UAAM,IAAI,gBAAgB,eAAe,4BAA4B,QAAQ;AAC/E,QAAM,aAAa,oBAAI,IAAoB;AAC3C,QAAM,sBAAsB,oBAAI,IAAY;AAC5C,SAAO,SAAS,OAAO,QAAQ;AAC7B,QAAI,CAAC,WAAW,OAAO,MAAM,CAAC;AAC5B,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACF,cAAU;AACV,QAAI,UAAU,OAAO,OAAQ;AAC7B,UAAM,iBAAiB;AACvB,WAAO,SAAS,OAAO,UAAU,CAAC,WAAW,OAAO,MAAM,CAAC,KAAK,OAAO,MAAM,MAAM;AACjF,gBAAU;AACZ,UAAM,gBAAgB,OAAO,MAAM,gBAAgB,MAAM;AACzD,QAAI,CAAC,UAAU,KAAK,aAAa;AAC/B,YAAM,IAAI,gBAAgB,eAAe,8BAA8B,QAAQ;AACjF,cAAU;AACV,QAAI,OAAO,MAAM,MAAM;AACrB,YAAM,IAAI,gBAAgB,eAAe,+BAA+B,QAAQ;AAClF,cAAU;AACV,cAAU;AACV,UAAM,QAAQ,OAAO,MAAM;AAC3B,QAAI,UAAU,OAAO,UAAU;AAC7B,YAAM,IAAI,gBAAgB,eAAe,sCAAsC,QAAQ;AACzF,cAAU;AACV,UAAM,aAAa;AACnB,UAAM,WAAW,OAAO,QAAQ,OAAO,UAAU;AACjD,QAAI,WAAW;AACb,YAAM,IAAI,gBAAgB,eAAe,oCAAoC,QAAQ;AACvF,QAAI,WAAW,IAAI,aAAa;AAC9B,YAAM,IAAI,gBAAgB,eAAe,2BAA2B,QAAQ;AAC9E,QAAI,WAAW,QAAQ;AACrB,YAAM,WAAW,kDAAkD,QAAQ;AAC7E,UAAM,qBAAqB,UAAU,aAAa;AAClD,UAAM,uBAAuB,kBAAkB,WAAW,cAAc,WAAW,QAAQ;AAC3F,QAAI,CAAC,wBAAwB,oBAAoB,IAAI,kBAAkB,GAAG;AACxE,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,wBAAoB,IAAI,kBAAkB;AAC1C,UAAM,WAAW,OAAO,MAAM,YAAY,QAAQ;AAClD,QAAI,SAAS,SAAS,GAAG;AACvB,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACF,eAAW,IAAI,eAAe,kBAAkB,UAAU,QAAQ,CAAC;AACnE,aAAS,WAAW;AAAA,EACtB;AACA,SAAO,EAAE,MAAM,WAAW,MAAM,WAAW,UAAU,IAAI,GAAG,YAAY,UAAU,CAAC,EAAE;AACvF;AAKA,IAAM,YAAY;AAElB,SAAS,WAAW,OAAoC;AACtD,SAAO,UAAU,OAAO,UAAU,OAAQ,UAAU,QAAQ,UAAU;AACxE;AAEA,SAAS,oBAAoB,OAAwB;AACnD,WAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,EAAG,KAAI,CAAC,WAAW,MAAM,KAAK,CAAC,EAAG,QAAO;AAC5F,SAAO;AACT;AAEA,SAAS,kBAAkB,OAAe,UAA0B;AAClE,wBAAsB,OAAO,QAAQ;AACrC,MAAI,MAAM,SAAS,KAAK;AACtB,UAAM,IAAI,gBAAgB,eAAe,yCAAyC,QAAQ;AAC5F,MAAI,YAAY,MAAM,QAAQ,GAAG;AACjC,MAAI,YAAY,EAAG,QAAO;AAC1B,QAAM,SAAmB,CAAC;AAC1B,MAAI,SAAS;AACb,MAAI,iBAAiB;AACrB,SAAO,aAAa,GAAG;AACrB,sBAAkB;AAClB,QAAI,iBAAiB;AACnB,YAAM,WAAW,yDAAyD,QAAQ;AACpF,WAAO,KAAK,MAAM,MAAM,QAAQ,SAAS,CAAC;AAC1C,UAAM,YAAY,MAAM,QAAQ,KAAK,YAAY,CAAC;AAClD,UAAM,kBAAkB,MAAM,QAAQ,KAAK,YAAY,CAAC;AACxD,QAAI,YAAY,KAAM,mBAAmB,KAAK,kBAAkB,WAAY;AAC1E,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,UAAM,SAAS,MAAM,MAAM,YAAY,GAAG,SAAS;AACnD,QAAI,OAAO,WAAW,KAAK,OAAO,SAAS,IAAI;AAC7C,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,WAAO,KAAK,gBAAgB,QAAQ,QAAQ,CAAC;AAC7C,aAAS,YAAY;AACrB,gBAAY,MAAM,QAAQ,KAAK,MAAM;AAAA,EACvC;AACA,SAAO,KAAK,MAAM,MAAM,MAAM,CAAC;AAC/B,SAAO,OAAO,KAAK,EAAE;AACvB;AAEA,SAAS,gBAAgB,QAAgB,UAA0B;AACjE,MAAI,WAAW,MAAO,QAAO;AAC7B,MAAI,WAAW,KAAM,QAAO;AAC5B,MAAI,WAAW,KAAM,QAAO;AAC5B,MAAI,WAAW,OAAQ,QAAO;AAC9B,MAAI,WAAW,OAAQ,QAAO;AAC9B,QAAM,UAAU,cAAc,KAAK,MAAM;AACzC,QAAM,MAAM,mBAAmB,KAAK,MAAM;AAC1C,QAAM,YAAY,UAAU,OAAO,QAAQ,CAAC,CAAC,IAAI,MAAM,OAAO,SAAS,IAAI,CAAC,KAAK,IAAI,EAAE,IAAI;AAC3F,MAAI,CAAC,OAAO,UAAU,SAAS,KAAK,CAAC,oBAAoB,SAAS,GAAG;AACnE,UAAM,IAAI;AAAA,MACR;AAAA,MACA,uCAAuC,MAAM;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AACA,SAAO,OAAO,cAAc,SAAS;AACvC;AAEA,SAAS,sBAAsB,OAAe,UAAwB;AACpE,aAAW,aAAa,OAAO;AAC7B,UAAM,YAAY,UAAU,YAAY,CAAC,KAAK;AAC9C,QAAI,CAAC,oBAAoB,SAAS,GAAG;AACnC,YAAM,IAAI,gBAAgB,eAAe,sCAAsC,QAAQ;AAAA,IACzF;AAAA,EACF;AACF;AAEA,SAAS,oBAAoB,WAA4B;AACvD,SACE,cAAc,KACd,cAAc,MACd,cAAc,MACb,aAAa,MAAQ,aAAa,SAClC,aAAa,SAAU,aAAa,SACpC,aAAa,SAAW,aAAa;AAE1C;AAEA,SAAS,qBAAqB,MAAkB,OAAiD;AAC/F,mBAAiB,MAAM,SAAS,qBAAqB;AACrD,8BAA4B,MAAM,yBAAyB,qBAAqB;AAChF,QAAM,WAAW,oBAAI,IAAoB;AACzC,QAAM,YAAY,oBAAI,IAAoB;AAC1C,aAAW,SAAS,gBAAgB,IAAI,GAAG;AACzC,QAAK,MAAM,SAAS,aAAa,MAAM,SAAS,cAAe,MAAM,cAAc,MAAM,MAAM;AAC7F,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA;AAAA,MACE;AAAA,MACA,MAAM,SAAS,YACX,oBAAI,IAAI,CAAC,aAAa,aAAa,CAAC,IACpC,oBAAI,IAAI,CAAC,YAAY,aAAa,CAAC;AAAA,MACvC;AAAA,IACF;AACA,uBAAmB,OAAO,qBAAqB;AAC/C,UAAM,cAAc,eAAe,OAAO,aAAa,KAAK;AAC5D,QAAI,YAAY,WAAW;AACzB,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAIF,QACE,0GAA0G;AAAA,MACxG;AAAA,IACF,GACA;AACA,YAAM,IAAI;AAAA,QACR;AAAA,QACA,kCAAkC,WAAW;AAAA,QAC7C;AAAA,MACF;AAAA,IACF;AACA,QAAI,MAAM,cAAc,WAAW;AACjC,YAAM,YAAY;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MACF,EAAE,YAAY;AACd,UAAI,CAAC,cAAc,KAAK,SAAS,KAAK,SAAS,IAAI,SAAS,GAAG;AAC7D,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,eAAS,IAAI,WAAW,WAAW;AAAA,IACrC,OAAO;AACL,YAAM,WAAW,uBAAuB,OAAO,YAAY,qBAAqB;AAChF,UAAI,SAAS,SAAS;AACpB,cAAM,WAAW,4CAA4C,qBAAqB;AACpF,UAAI,CAAC,SAAS,WAAW,GAAG,KAAK,SAAS,SAAS,IAAI,KAAK,iBAAiB,KAAK,QAAQ,GAAG;AAC3F,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,YAAM,WAAW,SAAS,MAAM,CAAC;AACjC,UAAI,eAAe;AACnB,eAAS,QAAQ,GAAG,QAAQ,SAAS,QAAQ,SAAS,GAAG;AACvD,YAAI,SAAS,WAAW,KAAK,MAAM,MAAM,EAAE,eAAe,KAAK;AAC7D,gBAAM;AAAA,YACJ;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,YAAM,WAAW,SAAS,MAAM,GAAG;AACnC,UAAI,SAAS,KAAK,CAAC,YAAY,YAAY,MAAM,YAAY,OAAO,YAAY,IAAI,GAAG;AACrF,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,YAAM,MAAM,SAAS,YAAY;AACjC,UAAI,UAAU,IAAI,GAAG;AACnB,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QACF;AACF,UAAI,CAAC,MAAM,IAAI,QAAQ;AACrB,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QACF;AACF,gBAAU,IAAI,KAAK,WAAW;AAAA,IAChC;AAAA,EACF;AACA,QAAM,oBAAoB,oBAAI,IAAoB;AAClD,aAAW,YAAY,MAAM,KAAK,GAAG;AACnC,QAAI,aAAa,sBAAuB;AACxC,UAAM,iBAAiB,SAAS,YAAY,GAAG;AAC/C,UAAM,YAAY,iBAAiB,IAAI,KAAK,SAAS,MAAM,iBAAiB,CAAC,EAAE,YAAY;AAC3F,UAAM,cAAc,UAAU,IAAI,SAAS,YAAY,CAAC,KAAK,SAAS,IAAI,SAAS;AACnF,QAAI,CAAC,aAAa;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,sBAAkB,IAAI,UAAU,WAAW;AAAA,EAC7C;AACA,QAAM,eAAe,UAAU,IAAI,mBAAmB;AACtD,MACE,iBACA,oFACA;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,wBAAwB,UAAkB,aAA8B;AAC/E,MACE,0GAA0G;AAAA,IACxG;AAAA,EACF,GACA;AACA,WAAO;AAAA,EACT;AACA,MAAI,SAAS,SAAS,OAAO,GAAG;AAC9B,WAAO,gBAAgB;AAAA,EACzB;AACA,SACE,+BAA+B,KAAK,WAAW,KAC/C,sDAAsD,KAAK,WAAW;AAE1E;AAEA,SAAS,mBACP,MACA,mBACA,kBACgB;AAChB,mBAAiB,MAAM,iBAAiB,iBAAiB;AACzD,8BAA4B,MAAM,yBAAyB,iBAAiB;AAC5E,QAAM,aAAa,uBAAuB,iBAAiB;AAC3D,QAAM,gBAAgC,CAAC;AACvC,QAAM,MAAM,oBAAI,IAAY;AAC5B,aAAW,SAAS,gBAAgB,IAAI,GAAG;AACzC,QAAI,cAAc,UAAU;AAC1B,YAAM,WAAW,sDAAsD,iBAAiB;AAC1F,QAAI,MAAM,SAAS;AACjB,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACF,uBAAmB,OAAO,iBAAiB;AAC3C;AAAA,MACE;AAAA,MACA,oBAAI,IAAI,CAAC,MAAM,QAAQ,UAAU,YAAY,CAAC;AAAA,MAC9C;AAAA,IACF;AACA,UAAM,KAAK,uBAAuB,OAAO,MAAM,iBAAiB;AAChE,UAAM,OAAO,uBAAuB,OAAO,QAAQ,iBAAiB;AACpE,UAAM,SAAS,uBAAuB,OAAO,UAAU,iBAAiB;AACxE,QAAI,GAAG,SAAS,OAAO,KAAK,SAAS,QAAS,OAAO,SAAS,MAAO;AACnE,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,QAAI,IAAI,IAAI,EAAE;AACZ,YAAM,IAAI,gBAAgB,mBAAmB,6BAA6B,iBAAiB;AAC7F,QAAI,IAAI,EAAE;AACV,SAAK,eAAe,OAAO,YAAY,KAAK,gBAAgB,YAAY;AACtE,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,kBAAc,KAAK;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU,kBAAkB,YAAY,QAAQ,iBAAiB;AAAA,IACnE,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAEA,SAAS,sBACP,eACA,aACgB;AAChB,QAAM,UAAU,oBAAI,IAAI;AAAA,IACtB,GAAG,sBAAsB;AAAA,IACzB,GAAG,sBAAsB;AAAA,IACzB,GAAG,sBAAsB;AAAA,IACzB,GAAG,sBAAsB;AAAA,IACzB,GAAG,sBAAsB;AAAA,IACzB,GAAG,sBAAsB;AAAA,IACzB,GAAG,sBAAsB;AAAA,IACzB,GAAG,sBAAsB;AAAA,IACzB,GAAG,sBAAsB;AAAA,IACzB,GAAG,sBAAsB;AAAA,IACzB;AAAA,IACA,GAAG,sBAAsB;AAAA,IACzB,GAAG,sBAAsB;AAAA,IACzB,GAAG,yBAAyB;AAAA,IAC5B;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,sBAAsC,CAAC;AAC7C,aAAW,gBAAgB,eAAe;AACxC,QAAI,QAAQ,IAAI,aAAa,IAAI,GAAG;AAClC,gCAA0B,YAAY;AACtC,UAAI,YAAY,IAAI,aAAa,QAAQ,EAAG,qBAAoB,KAAK,YAAY;AACjF;AAAA,IACF;AACA,QAAI,CAAC,yBAAyB,YAAY,KAAK,CAAC,YAAY,IAAI,aAAa,QAAQ,GAAG;AACtF,YAAM,IAAI;AAAA,QACR;AAAA,QACA,kCAAkC,aAAa,IAAI;AAAA,QACnD,aAAa;AAAA,MACf;AAAA,IACF;AACA,wBAAoB,KAAK,YAAY;AAAA,EACvC;AACA,QAAM,iBAAiB,IAAI;AAAA,IACzB;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,EACG,IAAI,CAAC,WAAW,GAAG,sBAAsB,GAAG,MAAM,EAAE,EACpD,OAAO,CAAC,yEAAyE,CAAC;AAAA,EACvF;AACA,QAAM,iBAAiB,oBAAI,IAAY;AACvC,aAAW,gBAAgB,eAAe;AACxC,QAAI,aAAa,eAAe,uBAAuB,CAAC,eAAe,IAAI,aAAa,IAAI;AAC1F;AACF,QAAI,eAAe,IAAI,aAAa,IAAI,GAAG;AACzC,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA,aAAa;AAAA,MACf;AAAA,IACF;AACA,mBAAe,IAAI,aAAa,IAAI;AAAA,EACtC;AACA,SAAO;AACT;AAEA,SAAS,yBAAyB,cAAqC;AACrE,QAAM,EAAE,YAAY,MAAM,SAAS,IAAI;AACvC,MAAI,SAAS,GAAG,sBAAsB,aAAa;AACjD,WAAO,eAAe,uBAAuB,4BAA4B,KAAK,QAAQ;AAAA,EACxF;AACA,MAAI,SAAS,GAAG,sBAAsB,kBAAkB;AACtD,WACE,4BAA4B,KAAK,UAAU,KAC3C,iCAAiC,KAAK,QAAQ;AAAA,EAElD;AACA,MAAI,SAAS,GAAG,sBAAsB,oBAAoB;AACxD,WAAO,eAAe,uBAAuB,aAAa;AAAA,EAC5D;AACA,SAAO;AACT;AAEA,SAAS,0BAA0B,cAAkC;AACnE,QAAM,EAAE,YAAY,MAAM,SAAS,IAAI;AACvC,MAAI,eAAe,IAAI;AACrB,UAAM,YAAW,oBAAI,IAAoB;AAAA,MACvC,CAAC,GAAG,sBAAsB,kBAAkB,mBAAmB;AAAA,MAC/D,CAAC,GAAG,yBAAyB,mBAAmB,mBAAmB;AAAA,MACnE;AAAA,QACE;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAC,GAAE,IAAI,IAAI;AACX,QAAI,CAAC,YAAY,aAAa,UAAU;AACtC,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA;AAAA,EACF;AACA,MAAI,eAAe,qBAAqB;AAItC,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,eAAe,oBAAI,IAAoB;AAAA,IAC3C,CAAC,GAAG,sBAAsB,UAAU,iBAAiB;AAAA,IACrD,CAAC,GAAG,sBAAsB,YAAY,mBAAmB;AAAA,IACzD,CAAC,GAAG,sBAAsB,eAAe,sBAAsB;AAAA,IAC/D,CAAC,GAAG,sBAAsB,aAAa,oBAAoB;AAAA,IAC3D,CAAC,GAAG,sBAAsB,aAAa,oBAAoB;AAAA,IAC3D,CAAC,GAAG,sBAAsB,YAAY,mBAAmB;AAAA,IACzD,CAAC,GAAG,sBAAsB,aAAa,oBAAoB;AAAA,IAC3D,CAAC,GAAG,sBAAsB,YAAY,mBAAmB;AAAA,IACzD;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AACD,QAAM,QAAQ,aAAa,IAAI,IAAI;AACnC,QAAM,QACJ,UAAU,SACN,aAAa,QACb,SAAS,GAAG,sBAAsB,UAChC,+BAA+B,KAAK,QAAQ,IAC5C,SAAS,GAAG,sBAAsB,WAChC,yBAAyB,KAAK,QAAQ,IACtC,SAAS,GAAG,sBAAsB,YAAY,yBAAyB,KAAK,QAAQ;AAC9F,MAAI,CAAC;AACH,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACJ;AAEA,SAAS,6BACP,OACA,eACM;AACN,QAAM,UAAU,IAAI,IAAI,cAAc,IAAI,CAAC,iBAAiB,aAAa,QAAQ,CAAC;AAClF,aAAW,YAAY,MAAM,KAAK,GAAG;AACnC,QAAI,aAAa,yBAAyB,SAAS,SAAS,OAAO,EAAG;AACtE,QAAI,CAAC,QAAQ,IAAI,QAAQ;AACvB,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,EACJ;AACA,aAAW,YAAY,MAAM,KAAK,GAAG;AACnC,QAAI,CAAC,SAAS,SAAS,OAAO,KAAK,aAAa,cAAe;AAC/D,UAAM,aAAa,uBAAuB,QAAQ;AAClD,QAAI,CAAC,MAAM,IAAI,UAAU;AACvB,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,EACJ;AACF;AAEA,SAAS,sBACP,MACA,UACA,UACM;AACN,mBAAiB,MAAM,GAAG,QAAQ,KAAK,QAAQ;AAC/C,uBAAqB,MAAM,QAAQ;AACnC,aAAW,QAAQ,gBAAgB,IAAI,GAAG;AACxC,QAAI,KAAK,cAAc;AACrB,YAAM,IAAI,gBAAgB,mBAAmB,WAAW,QAAQ,YAAY,QAAQ;AACtF,UAAM,KAAK,OAAO,kBAAkB,MAAM,MAAM,QAAQ,CAAC;AACzD,UAAM,OAAO,UAAU,MAAM,MAAM;AAInC,QAAI,CAAC,OAAO,UAAU,EAAE,KAAM,SAAS,eAAe,SAAS,yBAA0B;AACvF,YAAM,IAAI;AAAA,QACR;AAAA,QACA,QAAQ,QAAQ;AAAA,QAChB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,iBAAiB,MAGxB;AACA,mBAAiB,MAAM,YAAY,mBAAmB;AACtD,uBAAqB,MAAM,mBAAmB;AAC9C;AAAA,IACE;AAAA,IACA,oBAAI,IAAI;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD;AAAA,EACF;AACA,aAAW,oBAAoB,CAAC,sBAAsB,iBAAiB,GAAY;AACjF,QAAI,WAAW,MAAM,gBAAgB,GAAG;AACtC,YAAM,IAAI;AAAA,QACR;AAAA,QACA,QAAQ,gBAAgB;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,QAAM,aAAa,eAAe,MAAM,0BAA0B,mBAAmB;AACrF,QAAM,aAAa,eAAe,MAAM,qBAAqB,mBAAmB;AAChF,QAAM,iBAAiB,eAAe,MAAM,kBAAkB,mBAAmB;AACjF,QAAM,SAAS,eAAe,MAAM,UAAU,mBAAmB;AACjE,0BAAwB,YAAY,oBAAI,IAAI,CAAC,KAAK,CAAC,GAAG,kCAAkC;AACxF,0BAAwB,YAAY,oBAAI,IAAI,CAAC,KAAK,CAAC,GAAG,8BAA8B;AACpF,0BAAwB,gBAAgB,oBAAI,IAAI,CAAC,KAAK,CAAC,GAAG,yBAAyB;AACnF,0BAAwB,QAAQ,oBAAI,IAAI,GAAG,wBAAwB;AACnE,+BAA6B,YAAY,oBAAI,IAAI,GAAG,kCAAkC;AACtF,+BAA6B,YAAY,oBAAI,IAAI,GAAG,8BAA8B;AAClF,+BAA6B,gBAAgB,oBAAI,IAAI,GAAG,yBAAyB;AACjF,QAAM,kBAAkB,aAAa,gBAAgB,KAAK;AAC1D,+BAA6B,QAAQ,oBAAI,IAAI,CAAC,eAAe,CAAC,GAAG,wBAAwB;AACzF,QAAM,aAAa,oBAAI,IAAY;AACnC,aAAW,WAAW,SAAS,QAAQ,eAAe,GAAG;AACvD,4BAAwB,SAAS,oBAAI,IAAI,CAAC,QAAQ,OAAO,KAAK,CAAC,GAAG,uBAAuB;AACzF,iCAA6B,SAAS,oBAAI,IAAI,GAAG,uBAAuB;AACxE,UAAM,OAAO,UAAU,SAAS,MAAM;AACtC,UAAM,MAAM,UAAU,SAAS,KAAK;AACpC,UAAM,QAAQ,UAAU,SAAS,KAAK;AACtC,UAAM,MAAM,GAAG,OAAO,EAAE,KAAS,QAAQ,EAAE;AAC3C,QAAI,WAAW,IAAI,GAAG;AACpB,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACF,eAAW,IAAI,GAAG;AAClB,QACE,SAAS,uBACT,QAAQ,8CACR,UAAU,MACV;AACA,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO,EAAE,mBAAmB,aAAa,YAAY,KAAK,GAAG,gBAAgB,gBAAgB;AAC/F;AAEA,SAAS,kBACP,MACA,SACA,eAC0D;AAC1D,mBAAiB,MAAM,YAAY,mBAAmB;AACtD,2BAAyB,MAAM,mBAAmB;AAClD,uBAAqB,MAAM,mBAAmB;AAC9C,QAAM,OAAO,YAAY,MAAM,QAAQ,mBAAmB;AAC1D,QAAM,SAA0B,CAAC;AACjC,QAAM,WAA8B,CAAC;AACrC,MAAI,eAAe;AACnB,QAAM,aAAa,CAAC,YAAmC;AACrD,QAAI,SAAS,UAAU,QAAQ,OAAO,OAAO,aAAa;AACxD,YAAM,WAAW,4BAA4B,mBAAmB;AAAA,IAClE;AACA,aAAS,KAAK,OAAO;AAAA,EACvB;AACA,aAAW,SAAS,gBAAgB,IAAI,GAAG;AACzC,QAAI,MAAM,cAAc,KAAK;AAC3B,YAAM,oBAAoB,WAAW,WAAW,OAAO,KAAK,GAAG,QAAQ;AACvE,UAAI,CAAC,qBAAqB,CAAC,+BAA+B,KAAK,GAAG;AAChE,eAAO,KAAK,eAAe,OAAO,OAAO,CAAC;AAAA,MAC5C;AACA,UAAI,mBAAmB;AACrB,mBAAW,aAAa,mBAAmB,cAAc,OAAO,QAAQ,aAAa,CAAC;AACtF,uBAAe,OAAO;AAAA,MACxB;AAAA,IACF,WAAW,MAAM,cAAc,MAAO,QAAO,KAAK,WAAW,OAAO,OAAO,CAAC;AAAA,aACnE,MAAM,cAAc,UAAU;AACrC,iBAAW,aAAa,OAAO,cAAc,OAAO,QAAQ,aAAa,CAAC;AAC1E,qBAAe,OAAO;AAAA,IACxB,WAAW,CAAC,oBAAoB,IAAI,MAAM,SAAS,GAAG;AACpD,YAAM,mBAAmB,OAAO,mBAAmB;AAAA,IACrD;AAAA,EACF;AACA,MAAI,SAAS,WAAW,KAAK,eAAe,OAAO,QAAQ;AACzD,eAAW,eAAe,cAAc,OAAO,MAAM,CAAC;AAAA,EACxD;AACA,SAAO,EAAE,QAAQ,SAAS;AAC5B;AAEA,SAAS,oBAAoB,MAAkB,SAAwC;AACrF,2BAAyB,MAAM,QAAQ,QAAQ;AAC/C,QAAM,SAA0B,CAAC;AACjC,aAAW,SAAS,gBAAgB,IAAI,GAAG;AACzC,QAAI,MAAM,cAAc,IAAK,QAAO,KAAK,eAAe,OAAO,OAAO,CAAC;AAAA,aAC9D,MAAM,cAAc,MAAO,QAAO,KAAK,WAAW,OAAO,OAAO,CAAC;AAAA,aACjE,CAAC,oBAAoB,IAAI,MAAM,SAAS;AAC/C,YAAM,mBAAmB,OAAO,QAAQ,QAAQ;AAAA,EACpD;AACA,SAAO;AACT;AAEA,SAAS,eAAe,SAAqB,SAA0C;AACrF,eAAa,QAAQ,MAAM;AAC3B,QAAM,KAAK,GAAG,QAAQ,QAAQ,KAAK,QAAQ,OAAO,aAAa;AAC/D,QAAM,aAAa,eAAe,SAAS,OAAO,WAAW;AAC7D,QAAM,UAAU,QAAQ,WAAW,YAAY,QAAQ,CAAC;AACxD,QAAM,YAA+B;AAAA,IACnC,MAAM;AAAA,IACN;AAAA,IACA,GAAI,YAAY,SAAY,EAAE,QAAQ,IAAI,CAAC;AAAA,IAC3C,OAAO,yBAAyB,UAAU;AAAA,IAC1C,SAAS,CAAC;AAAA,IACV,gBAAgB,CAAC;AAAA,EACnB;AACA,QAAM,qBAAqB,QAAQ,eAAe;AAClD,MAAI,aAAa;AACjB,QAAM,SAAS,CAAC,QAA+C;AAC7D,cAAU,QAAQ,KAAK,GAAG;AAC1B,QAAI,IAAI,SAAS,OAAO;AACtB,oBAAc,IAAI,KAAK;AACvB,kBAAY,QAAQ,QAAQ,IAAI,KAAK,MAAM;AAAA,IAC7C;AAAA,EACF;AACA,QAAM,gBAAgB,CAAC,QAAoB,WAAkC;AAC3E,eAAW,SAAS,gBAAgB,MAAM,GAAG;AAC3C,UAAI,MAAM,cAAc,MAAO;AAC/B,UAAI,MAAM,cAAc,KAAK;AAC3B,cAAM,kBAAkB;AACxB,cAAM,SAAS,SAAS,OAAO,QAAQ,CAAC,WAAW,cAAc;AAC/D,oBAAU,eAAe,KAAK;AAAA,YAC5B;AAAA,YACA,MAAM;AAAA,YACN,YAAY,kBAAkB;AAAA,UAChC,CAAC;AAAA,QACH,CAAC;AACD,mBAAW,UAAU,OAAQ,QAAO,MAAM;AAAA,MAC5C,WAAW,MAAM,cAAc,SAAS,MAAM,cAAc,OAAO;AACjE,YAAI;AACF,gBAAM,IAAI;AAAA,YACR;AAAA,YACA;AAAA,YACA,QAAQ;AAAA,UACV;AACF,cAAM,cAAc,UAAU,QAAQ;AACtC,cAAM,kBAAkB;AACxB,cAAM,SAAS,UAAU,OAAO,QAAQ;AACxC,cAAM,YAAY,UAAU,OAAO,MAAM;AACzC,cAAM,WAA2B;AAAA,UAC/B,IAAI,kBAAkB,OAAO,MAAM,QAAQ,QAAQ;AAAA,UACnD,MAAM,MAAM,cAAc,QAAQ,WAAW;AAAA,UAC7C,GAAI,WAAW,SAAY,EAAE,OAAO,IAAI,CAAC;AAAA,UACzC,GAAI,cAAc,SAAY,EAAE,UAAU,IAAI,CAAC;AAAA,QACjD;AACA,sBAAc,OAAO,QAAQ;AAC7B,gBAAQ,eAAe,KAAK;AAAA,UAC1B,IAAI,SAAS;AAAA,UACb,MAAM,SAAS;AAAA,UACf,GAAI,SAAS,WAAW,SAAY,EAAE,QAAQ,SAAS,OAAO,IAAI,CAAC;AAAA,UACnE,GAAI,SAAS,cAAc,SAAY,EAAE,WAAW,SAAS,UAAU,IAAI,CAAC;AAAA,UAC5E,SAAS;AAAA,UACT,kBAAkB;AAAA,UAClB,gBAAgB,UAAU,QAAQ;AAAA,UAClC,iBAAiB;AAAA,UACjB,eAAe;AAAA,QACjB,CAAC;AAAA,MACH,WAAW,MAAM,cAAc,uBAAuB,MAAM,cAAc,mBAAmB;AAC3F,kBAAU,eAAe,KAAK;AAAA,UAC5B,WAAW,kBAAkB,OAAO,MAAM,QAAQ,QAAQ;AAAA,UAC1D,MAAM,MAAM,cAAc,sBAAsB,UAAU;AAAA,UAC1D;AAAA,QACF,CAAC;AAAA,MACH,WAAW,MAAM,cAAc,oBAAoB;AACjD,kBAAU,eAAe,KAAK;AAAA,UAC5B,WAAW,kBAAkB,OAAO,MAAM,QAAQ,QAAQ;AAAA,UAC1D,MAAM;AAAA,UACN;AAAA,QACF,CAAC;AAAA,MACH,WAAW,CAAC,oBAAoB,IAAI,MAAM,SAAS;AACjD,cAAM,mBAAmB,OAAO,QAAQ,QAAQ;AAAA,IACpD;AAAA,EACF;AACA,gBAAc,OAAO;AACrB,2BAAyB,WAAW,QAAQ,gBAAgB,oBAAoB,QAAQ,QAAQ;AAChG,SAAO,eAAe,SAAS;AACjC;AAEA,SAAS,+BAA+B,SAA8B;AACpE,QAAM,oBAAoB,gBAAgB,OAAO;AACjD,MAAI,kBAAkB,WAAW,KAAK,kBAAkB,CAAC,GAAG,cAAc,MAAO,QAAO;AACxF,QAAM,mBAAmB,gBAAgB,kBAAkB,CAAC,CAAC;AAC7D,SAAO,iBAAiB,WAAW,KAAK,iBAAiB,CAAC,GAAG,cAAc;AAC7E;AAEA,SAAS,yBACP,WACA,gBACA,oBACA,UACM;AACN,QAAM,SAAmB,CAAC;AAC1B,aAAW,UAAU,UAAU,QAAS,KAAI,OAAO,SAAS,MAAO,QAAO,KAAK,OAAO,IAAI;AAC1F,QAAM,OAAO,OAAO,KAAK,EAAE;AAC3B,QAAM,WAAW,CAAC,QAAgB,UAAwB;AACxD,QAAI,CAAC,OAAO,UAAU,MAAM,KAAK,SAAS,KAAK,SAAS,KAAK,QAAQ;AACnE,YAAM,IAAI,gBAAgB,mBAAmB,GAAG,KAAK,6BAA6B,QAAQ;AAAA,IAC5F;AACA,UAAM,SAAS,SAAS,IAAI,KAAK,WAAW,SAAS,CAAC,IAAI;AAC1D,UAAM,QAAQ,SAAS,KAAK,SAAS,KAAK,WAAW,MAAM,IAAI;AAC/D,QAAI,UAAU,SAAU,UAAU,SAAU,SAAS,SAAU,SAAS,OAAQ;AAC9E,YAAM,IAAI;AAAA,QACR;AAAA,QACA,GAAG,KAAK;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,aAAW,UAAU,UAAU,eAAgB,UAAS,OAAO,YAAY,gBAAgB;AAC3F,WAAS,QAAQ,oBAAoB,QAAQ,eAAe,QAAQ,SAAS,GAAG;AAC9E,UAAM,SAAS,eAAe,KAAK;AACnC,QAAI,CAAC,UAAU,OAAO,YAAY,UAAU,GAAI;AAChD,aAAS,OAAO,iBAAiB,sBAAsB;AACvD,aAAS,OAAO,eAAe,oBAAoB;AAAA,EACrD;AACF;AASA,SAAS,SACP,SACA,QACA,oBACkB;AAClB,QAAM,aAAa,eAAe,SAAS,OAAO,KAAK;AACvD,QAAM,UAAU,QAAQ,WAAW,YAAY,QAAQ,CAAC;AACxD,QAAM,QAAQ,mBAAmB,UAAU;AAC3C,QAAM,SAAS,YAAY,UAAa,OAAO,KAAK,KAAK,EAAE,SAAS;AACpE,QAAM,UAA4B,CAAC;AACnC,MAAI,OAAO;AACX,MAAI,oBAAoB;AACxB,MAAI,sBAAsB;AAC1B,QAAM,QAAQ,MAAY;AACxB,QAAI,KAAK,WAAW,EAAG;AACvB,YAAQ;AAAA,MACN,eAAe;AAAA,QACb,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU,QAAQ;AAAA,MACpB,CAAC;AAAA,IACH;AACA,yBAAqB,KAAK;AAC1B,WAAO;AAAA,EACT;AACA,aAAW,SAAS,gBAAgB,OAAO,GAAG;AAC5C,QAAI,MAAM,cAAc,MAAO;AAC/B,QAAI,MAAM,cAAc,OAAO,MAAM,cAAc,UAAW,SAAQ,YAAY,KAAK;AAAA,aAC9E,MAAM,cAAc,MAAO,SAAQ;AAAA,aACnC,MAAM,cAAc,KAAM,SAAQ;AAAA,aAClC,MAAM,cAAc,gBAAiB,SAAQ;AAAA,aAC7C,MAAM,cAAc,aAAc,SAAQ;AAAA,aAC1C,MAAM,cAAc,MAAM;AACjC,8BAAwB,OAAO,oBAAI,IAAI,CAAC,MAAM,CAAC,GAAG,WAAW;AAC7D,mCAA6B,OAAO,oBAAI,IAAI,GAAG,WAAW;AAC1D,YAAM,OAAO,UAAU,OAAO,MAAM,KAAK;AACzC,UAAI,SAAS,QAAQ;AACnB,cAAM;AACN,gBAAQ,KAAK,EAAE,MAAM,YAAY,CAAC;AAAA,MACpC,WAAW,SAAS,eAAgB,SAAQ;AAAA,UACvC,OAAM,IAAI,gBAAgB,uBAAuB,2BAA2B,IAAI,EAAE;AAAA,IACzF,WAAW,MAAM,cAAc,oBAAoB;AACjD,4BAAsB;AACtB,YAAM,YAAY,kBAAkB,OAAO,MAAM,mBAAmB;AACpE,2BAAqB,WAAW,oBAAoB,KAAK,MAAM;AAAA,IACjE,WACE,MAAM,cAAc,2BACpB,CAAC,oBAAoB,IAAI,MAAM,SAAS,GACxC;AACA,YAAM,mBAAmB,OAAO,mBAAmB;AAAA,IACrD;AAAA,EACF;AACA,QAAM;AACN,MAAI,sBAAsB,KAAK,WAAW,uBAAuB,QAAQ,SAAS,IAAI;AACpF,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAIA,MAAI,sBAAsB,KAAK,QAAQ,WAAW,KAAK,CAAC,qBAAqB;AAC3E,YAAQ;AAAA,MACN,eAAe;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA,UAAU,QAAQ;AAAA,MACpB,CAAC;AAAA,IACH;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,WAAW,SAAqB,SAAsC;AAC7E,eAAa,QAAQ,MAAM;AAC3B,+BAA6B,SAAS,oBAAI,IAAI,CAAC,SAAS,WAAW,IAAI,CAAC,GAAG,OAAO;AAClF,QAAM,KAAK,GAAG,QAAQ,QAAQ,OAAO,QAAQ,OAAO,aAAa;AACjE,QAAM,aAAa,eAAe,SAAS,SAAS,OAAO;AAC3D;AAAA,IACE;AAAA,IACA,oBAAI,IAAI,CAAC,YAAY,QAAQ,UAAU,MAAM,aAAa,cAAc,YAAY,CAAC;AAAA,IACrF;AAAA,EACF;AACA,yBAAuB,YAAY,kBAAkB;AACrD,0BAAwB,WAAW,YAAY,UAAU,GAAG,oBAAI,IAAI,CAAC,KAAK,CAAC,GAAG,aAAa;AAC3F,0BAAwB,WAAW,YAAY,IAAI,GAAG,oBAAI,IAAI,CAAC,KAAK,CAAC,GAAG,iBAAiB;AACzF,QAAM,OAAO,eAAe,SAAS,WAAW,OAAO;AACvD,+BAA6B,MAAM,oBAAI,IAAI,CAAC,SAAS,CAAC,GAAG,YAAY;AACrE,0BAAwB,MAAM,oBAAI,IAAI,GAAG,YAAY;AACrD,aAAW,UAAU,SAAS,MAAM,SAAS,GAAG;AAC9C,4BAAwB,QAAQ,oBAAI,IAAI,CAAC,GAAG,CAAC,GAAG,mBAAmB;AACnE,iCAA6B,QAAQ,oBAAI,IAAI,GAAG,mBAAmB;AAAA,EACrE;AACA,QAAM,OAA2B,CAAC;AAClC,aAAW,cAAc,SAAS,SAAS,IAAI,GAAG;AAChD,iCAA6B,YAAY,oBAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG,WAAW;AAC7E,UAAM,gBAAgB,eAAe,YAAY,QAAQ,WAAW;AACpE;AAAA,MACE;AAAA,MACA,oBAAI,IAAI,CAAC,aAAa,aAAa,UAAU,CAAC;AAAA,MAC9C;AAAA,IACF;AACA,2BAAuB,eAAe,sBAAsB;AAC5D,4BAAwB,eAAe,oBAAI,IAAI,GAAG,sBAAsB;AACxE;AAAA,MACE,WAAW,eAAe,WAAW;AAAA,MACrC,oBAAI,IAAI,CAAC,KAAK,CAAC;AAAA,MACf;AAAA,IACF;AACA;AAAA,MACE,WAAW,eAAe,WAAW;AAAA,MACrC,oBAAI,IAAI,CAAC,KAAK,CAAC;AAAA,MACf;AAAA,IACF;AACA;AAAA,MACE,WAAW,eAAe,UAAU;AAAA,MACpC,oBAAI,IAAI,CAAC,OAAO,OAAO,CAAC;AAAA,MACxB;AAAA,IACF;AACA,UAAM,QAA6B,CAAC;AACpC,eAAW,eAAe,SAAS,YAAY,IAAI,GAAG;AACpD,mCAA6B,aAAa,oBAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,GAAG,YAAY;AACrF,YAAM,iBAAiB,eAAe,aAAa,QAAQ,YAAY;AACvE;AAAA,QACE;AAAA,QACA,oBAAI,IAAI,CAAC,OAAO,SAAS,YAAY,UAAU,UAAU,KAAK,CAAC;AAAA,QAC/D;AAAA,MACF;AACA,6BAAuB,gBAAgB,uBAAuB;AAC9D,8BAAwB,gBAAgB,oBAAI,IAAI,GAAG,uBAAuB;AAC1E,iBAAW,QAAQ,CAAC,YAAY,UAAU,QAAQ,GAAY;AAC5D;AAAA,UACE,WAAW,gBAAgB,IAAI;AAAA,UAC/B,oBAAI,IAAI,CAAC,KAAK,CAAC;AAAA,UACf,cAAc,IAAI;AAAA,QACpB;AAAA,MACF;AACA,YAAM,uBAAuB,WAAW,gBAAgB,QAAQ;AAChE,YAAM,qBAAqB,uBACtB,QAAQ,oBAAoB,KAAK,aAClC;AACJ,UACE,uBAAuB,UACvB,uBAAuB,aACvB,uBAAuB,YACvB;AACA,cAAM,IAAI;AAAA,UACR;AAAA,UACA,iCAAiC,kBAAkB;AAAA,UACnD,QAAQ;AAAA,QACV;AAAA,MACF;AACA,YAAM,aAAa,aAAa,WAAW,gBAAgB,UAAU,GAAG,CAAC;AACzE,UAAI,aAAa;AACf,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,UACA,QAAQ;AAAA,QACV;AACF,YAAM,SAA0B,CAAC;AACjC,iBAAW,SAAS,gBAAgB,WAAW,GAAG;AAChD,YAAI,MAAM,cAAc,OAAQ;AAChC,YAAI,MAAM,cAAc,IAAK,QAAO,KAAK,eAAe,OAAO,OAAO,CAAC;AAAA,iBAC9D,MAAM,cAAc,MAAO,QAAO,KAAK,WAAW,OAAO,OAAO,CAAC;AAAA,iBACjE,CAAC,oBAAoB,IAAI,MAAM,SAAS;AAC/C,gBAAM,mBAAmB,OAAO,QAAQ,QAAQ;AAAA,MACpD;AACA,YAAM,UAAU,WAAW,gBAAgB,KAAK;AAChD,sBAAgB,SAAS,QAAQ,QAAQ;AACzC,YAAM;AAAA,QACJ,eAAe;AAAA,UACb,OAAO,aAAa,WAAW,gBAAgB,KAAK,CAAC;AAAA,UACrD,SAAS,iBAAiB,WAAW,gBAAgB,OAAO,GAAG,oBAAoB;AAAA,UACnF;AAAA,UACA,eACE,uBAAuB,SACnB,SACA,uBAAuB,YACpB,YACA;AAAA,UACT,mBAAmB,QAAQ,WAAW,gBAAgB,QAAQ,CAAC;AAAA,UAC/D,MAAM,UAAU,SAAS,MAAM;AAAA,UAC/B;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AACA,UAAM,SAAS,WAAW,eAAe,UAAU;AACnD,UAAM,aAAa,UAAU,QAAQ,OAAO;AAC5C,QACE,eAAe,UACf,eAAe,UACf,eAAe,aACf,eAAe,SACf;AACA,YAAM,IAAI;AAAA,QACR;AAAA,QACA,kCAAkC,UAAU;AAAA,QAC5C,QAAQ;AAAA,MACV;AAAA,IACF;AACA,SAAK;AAAA,MACH,eAAe;AAAA,QACb,QAAQ,aAAa,WAAW,eAAe,WAAW,GAAG,KAAK;AAAA,QAClE,aAAa,aAAa,WAAW,eAAe,WAAW,GAAG,KAAK;AAAA,QACvE,UAAU,gBAAgB,QAAQ,OAAO,SAAS;AAAA,QAClD;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACA,SAAO,eAAe;AAAA,IACpB,MAAM;AAAA,IACN;AAAA,IACA,SAAS,QAAQ,WAAW,YAAY,UAAU,CAAC;AAAA,IACnD,OAAO,aAAa,WAAW,YAAY,MAAM,CAAC;AAAA,IAClD,QAAQ,aAAa,WAAW,YAAY,QAAQ,CAAC;AAAA,IACrD,WAAW,QAAQ,WAAW,YAAY,IAAI,CAAC;AAAA,IAC/C,QAAQ,iBAAiB,WAAW,YAAY,WAAW,CAAC;AAAA,IAC5D,aAAa,iBAAiB,WAAW,YAAY,YAAY,GAAG,oBAAoB;AAAA,IACxF,SAAS,kBAAkB,WAAW,YAAY,YAAY,GAAG,QAAQ,QAAQ;AAAA,IACjF,oBAAoB,SAAS,MAAM,SAAS,EAAE;AAAA,MAC5C,CAAC,WAAW,gBAAgB,QAAQ,KAAK,SAAS,KAAK;AAAA,IACzD;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAEA,SAAS,iBACP,SACA,OACiC;AACjC,MAAI,CAAC,QAAS,QAAO;AACrB,0BAAwB,SAAS,oBAAI,IAAI,GAAG,KAAK;AACjD,QAAM,UAAU,oBAAI,IAAI,CAAC,OAAO,SAAS,UAAU,QAAQ,SAAS,KAAK,CAAC;AAC1E,gCAA8B,SAAS,SAAS,KAAK;AACrD,yBAAuB,SAAS,KAAK;AACrC,MACG,WAAW,SAAS,MAAM,KAAK,WAAW,SAAS,OAAO,KAC1D,WAAW,SAAS,OAAO,KAAK,WAAW,SAAS,KAAK,GAC1D;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,KAAK;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,QAAM,SAAS,eAAoC;AAAA,IACjD,KAAK,aAAa,WAAW,SAAS,KAAK,CAAC;AAAA,IAC5C,OAAO,aAAa,WAAW,SAAS,OAAO,CAAC;AAAA,IAChD,QAAQ,aAAa,WAAW,SAAS,QAAQ,CAAC;AAAA,IAClD,MAAM,aAAa,WAAW,SAAS,MAAM,CAAC;AAAA,IAC9C,OAAO,aAAa,WAAW,SAAS,OAAO,CAAC;AAAA,IAChD,KAAK,aAAa,WAAW,SAAS,KAAK,CAAC;AAAA,EAC9C,CAAC;AACD,SAAO,OAAO,KAAK,MAAM,EAAE,SAAS,IAAI,SAAS;AACnD;AAEA,SAAS,kBACP,SACA,UACkC;AAClC,MAAI,CAAC,QAAS,QAAO;AACrB,0BAAwB,SAAS,oBAAI,IAAI,GAAG,eAAe;AAC3D;AAAA,IACE;AAAA,IACA,oBAAI,IAAI,CAAC,OAAO,SAAS,UAAU,QAAQ,WAAW,SAAS,CAAC;AAAA,IAChE;AAAA,EACF;AACA,yBAAuB,SAAS,eAAe;AAC/C,QAAM,QAAQ,CAAC,SAA6C;AAC1D,UAAM,SAAS,WAAW,SAAS,IAAI;AACvC,QAAI,CAAC,OAAQ,QAAO;AACpB;AAAA,MACE;AAAA,MACA,oBAAI,IAAI,CAAC,OAAO,SAAS,MAAM,SAAS,UAAU,OAAO,CAAC;AAAA,MAC1D;AAAA,IACF;AACA,UAAM,QAAQ,QAAQ,MAAM;AAC5B,QAAI,CAAC;AACH,YAAM,IAAI,gBAAgB,mBAAmB,8BAA8B,QAAQ;AACrF,WAAO,eAAe;AAAA,MACpB;AAAA,MACA,OAAO,UAAU,QAAQ,OAAO;AAAA,MAChC,QAAQ,gBAAgB,QAAQ,MAAM,CAAC,UAAU,QAAQ,CAAC;AAAA,MAC1D,SAAS,gBAAgB,QAAQ,OAAO;AAAA,MACxC,QAAQ,yBAAyB,QAAQ,QAAQ;AAAA,MACjD,OAAO,yBAAyB,QAAQ,OAAO;AAAA,IACjD,CAAC;AAAA,EACH;AACA,QAAM,SAAS,eAAqC;AAAA,IAClD,KAAK,MAAM,KAAK;AAAA,IAChB,OAAO,MAAM,OAAO;AAAA,IACpB,QAAQ,MAAM,QAAQ;AAAA,IACtB,MAAM,MAAM,MAAM;AAAA,IAClB,kBAAkB,MAAM,SAAS;AAAA,IACjC,gBAAgB,MAAM,SAAS;AAAA,EACjC,CAAC;AACD,SAAO,OAAO,KAAK,MAAM,EAAE,SAAS,IAAI,SAAS;AACnD;AAEA,SAAS,gBAAgB,SAAiC,UAAwB;AAChF,MAAI,CAAC,QAAS;AACd,0BAAwB,SAAS,oBAAI,IAAI,CAAC,OAAO,SAAS,MAAM,CAAC,GAAG,oBAAoB;AACxF,QAAM,UAAU,QAAQ,OAAO;AAC/B,QAAM,aAAa,UAAU,SAAS,OAAO;AAC7C,MAAI,YAAY,UAAa,YAAY,WAAW,YAAY,SAAS;AACvE,UAAM,IAAI;AAAA,MACR;AAAA,MACA,yBAAyB,OAAO;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AACA,MAAI,eAAe,UAAa,WAAW,YAAY,MAAM,QAAQ;AACnE,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,iBAAiB,SAAkE;AAC1F,MAAI,CAAC,QAAS,QAAO;AACrB,0BAAwB,SAAS,oBAAI,IAAI,CAAC,MAAM,CAAC,GAAG,cAAc;AAClE,QAAM,QAAQ,UAAU,SAAS,MAAM;AACvC,MAAI,UAAU,QAAS,QAAO;AAC9B,MAAI,UAAU,UAAW,QAAO;AAChC,QAAM,IAAI;AAAA,IACR;AAAA,IACA,8BAA8B,OAAO,KAAK,CAAC;AAAA,IAC3C;AAAA,EACF;AACF;AAEA,SAAS,aAAa,SAA8D;AAClF,MAAI,CAAC,QAAS,QAAO;AACrB,0BAAwB,SAAS,oBAAI,IAAI,CAAC,KAAK,MAAM,CAAC,GAAG,eAAe;AACxE,QAAM,QAAQ,UAAU,SAAS,GAAG;AACpC,MAAI,UAAU;AACZ,UAAM,IAAI,gBAAgB,mBAAmB,6BAA6B;AAC5E,QAAM,MAAM,OAAO,KAAK;AACxB,MAAI,CAAC,OAAO,SAAS,GAAG;AACtB,UAAM,IAAI,gBAAgB,mBAAmB,gCAAgC;AAC/E,QAAM,OAAO,UAAU,SAAS,MAAM,KAAK;AAC3C,MAAI,SAAS,MAAO,QAAO,EAAE,OAAO,UAAU,GAAG,GAAG,MAAM,KAAK;AAC/D,MAAI,SAAS,MAAO,QAAO,EAAE,OAAO,MAAM,IAAI,MAAM,UAAU;AAC9D,MAAI,SAAS,UAAU,SAAS,MAAO,QAAO,EAAE,OAAO,KAAK,MAAM,OAAO;AACzE,QAAM,IAAI,gBAAgB,uBAAuB,mCAAmC,IAAI,EAAE;AAC5F;AAEA,SAAS,YAAY,MAAkB,QAA2C;AAChF,mBAAiB,MAAM,UAAU,iBAAiB;AAClD,uBAAqB,MAAM,iBAAiB;AAC5C,2BAAyB,MAAM,iBAAiB;AAChD;AAAA,IACE;AAAA,IACA,oBAAI,IAAI,CAAC,eAAe,gBAAgB,OAAO,CAAC;AAAA,IAChD;AAAA,EACF;AACA,QAAM,WAAW,SAAS,MAAM,aAAa;AAC7C,MAAI,SAAS,SAAS;AACpB,UAAM,IAAI,gBAAgB,mBAAmB,8BAA8B,iBAAiB;AAC9F,MAAI,SAAS,CAAC,EAAG,4BAA2B,SAAS,CAAC,CAAC;AACvD,QAAM,SAA0B,CAAC;AACjC,QAAM,WAAW,oBAAI,IAAY;AACjC,aAAW,WAAW,SAAS,MAAM,OAAO,GAAG;AAC7C,QAAI,OAAO,UAAU,OAAO;AAC1B,YAAM,WAAW,0BAA0B,iBAAiB;AAC9D,UAAM,UAAU,kBAAkB,SAAS,WAAW,iBAAiB;AACvE,QAAI,SAAS,IAAI,OAAO;AACtB,YAAM,IAAI,gBAAgB,mBAAmB,sBAAsB,iBAAiB;AACtF,aAAS,IAAI,OAAO;AACpB,UAAM,OAAO,UAAU,SAAS,MAAM,KAAK;AAC3C,QAAI,SAAS,eAAe,SAAS,aAAa;AAChD,YAAM,IAAI;AAAA,QACR;AAAA,QACA,cAAc,IAAI;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AACA;AAAA,MACE;AAAA,MACA,oBAAI,IAAI,CAAC,WAAW,QAAQ,WAAW,aAAa,CAAC;AAAA,MACrD;AAAA,IACF;AACA;AAAA,MACE;AAAA,MACA,oBAAI,IAAI;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,MACD;AAAA,IACF;AACA,WAAO;AAAA,MACL,eAAe;AAAA,QACb;AAAA,QACA;AAAA,QACA,MAAM,QAAQ,WAAW,SAAS,MAAM,CAAC;AAAA,QACzC,SAAS,QAAQ,WAAW,SAAS,SAAS,CAAC;AAAA,QAC/C,MAAM,QAAQ,WAAW,SAAS,MAAM,CAAC;AAAA,QACzC,WAAW,iBAAiB,SAAS,WAAW,KAAK;AAAA,QACrD,WAAW,yBAAyB,eAAe,SAAS,OAAO,kBAAkB,CAAC;AAAA,QACtF,KAAK,mBAAmB,eAAe,SAAS,OAAO,kBAAkB,CAAC;AAAA,MAC5E,CAAC;AAAA,IACH;AAAA,EACF;AACA,QAAM,YAAY,IAAI,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,SAAS,KAAK,CAAC,CAAC;AACvE,aAAW,SAAS,QAAQ;AAC1B,UAAM,OAAO,oBAAI,IAAY;AAC7B,QAAI,UAAqC;AACzC,QAAI,QAAQ;AACZ,WAAO,SAAS,YAAY,QAAW;AACrC,UAAI,CAAC,KAAK,IAAI,QAAQ,OAAO,GAAG;AAC9B,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,eAAS;AACT,UAAI,QAAQ,OAAO,0BAA0B;AAC3C,cAAM,WAAW,yCAAyC,iBAAiB;AAAA,MAC7E;AACA,gBAAU,UAAU,IAAI,QAAQ,OAAO;AAAA,IACzC;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,2BAA2B,UAA4B;AAC9D,gCAA8B,UAAU,oBAAI,IAAI,CAAC,cAAc,YAAY,CAAC,GAAG,gBAAgB;AAC/F,aAAW,CAAC,aAAa,cAAc,KAAK,KAAK;AAAA,IAC/C,CAAC,cAAc,OAAO,wBAAwB;AAAA,IAC9C,CAAC,cAAc,OAAO,kBAAkB;AAAA,EAC1C,GAAY;AACV,UAAM,WAAW,SAAS,UAAU,WAAW;AAC/C,QAAI,SAAS,SAAS;AACpB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,kBAAkB,WAAW;AAAA,QAC7B;AAAA,MACF;AACF,UAAM,UAAU,SAAS,CAAC;AAC1B,kCAA8B,SAAS,oBAAI,IAAI,CAAC,YAAY,CAAC,GAAG,gBAAgB;AAChF,UAAM,aAAa,eAAe,SAAS,cAAc,gBAAgB;AACzE,QAAI,cAAc,OAAO,KAAK,MAAM,UAAU,CAAC,EAAE,SAAS,GAAG;AAC3D,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,eAAe,MAAkB,QAAoD;AAC5F,mBAAiB,MAAM,aAAa,oBAAoB;AACxD,uBAAqB,MAAM,oBAAoB;AAC/C,2BAAyB,MAAM,oBAAoB;AACnD;AAAA,IACE;AAAA,IACA,oBAAI,IAAI,CAAC,gBAAgB,eAAe,KAAK,CAAC;AAAA,IAC9C;AAAA,EACF;AACA,MAAI,SAAS,MAAM,cAAc,EAAE,SAAS,GAAG;AAC7C,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,WAAW,oBAAI,IAAiC;AACtD,aAAW,cAAc,SAAS,MAAM,aAAa,GAAG;AACtD,QAAI,SAAS,QAAQ,OAAO,yBAAyB;AACnD,YAAM,WAAW,wCAAwC,oBAAoB;AAAA,IAC/E;AACA,UAAM,KAAK,kBAAkB,YAAY,iBAAiB,oBAAoB;AAC9E;AAAA,MACE;AAAA,MACA,oBAAI,IAAI,CAAC,iBAAiB,gCAAgC,CAAC;AAAA,MAC3D;AAAA,IACF;AACA,UAAM,oBAAoB,kBAAkB,YAAY,OAAO,4BAA4B;AAC3F,QAAI,sBAAsB,UAAa,oBAAoB,iBAAiB,GAAG;AAC7E,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA;AAAA,MACE;AAAA,MACA,oBAAI,IAAI,CAAC,QAAQ,kBAAkB,QAAQ,QAAQ,KAAK,CAAC;AAAA,MACzD;AAAA,IACF;AACA,QAAI,SAAS,IAAI,EAAE;AACjB,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACF,UAAM,SAAS,SAAS,YAAY,KAAK,EAAE,IAAI,cAAc;AAC7D,uBAAmB,QAAQ,+BAA+B;AAC1D,aAAS,IAAI,IAAI,MAAM;AAAA,EACzB;AACA,QAAM,SAAS,oBAAI,IAAY;AAC/B,QAAM,OAAO,SAAS,MAAM,KAAK;AACjC,MAAI,KAAK,SAAS,OAAO,yBAAyB;AAChD,UAAM,WAAW,wCAAwC,oBAAoB;AAAA,EAC/E;AACA,SAAO,KAAK,IAAI,CAAC,cAAsC;AACrD,4BAAwB,WAAW,oBAAI,IAAI,CAAC,OAAO,CAAC,GAAG,sBAAsB;AAC7E;AAAA,MACE;AAAA,MACA,oBAAI,IAAI,CAAC,iBAAiB,aAAa,CAAC;AAAA,MACxC;AAAA,IACF;AACA,UAAM,QAAQ,kBAAkB,WAAW,SAAS,oBAAoB;AACxE,QAAI,OAAO,IAAI,KAAK;AAClB,YAAM,IAAI,gBAAgB,mBAAmB,0BAA0B,oBAAoB;AAC7F,WAAO,IAAI,KAAK;AAChB,UAAM,gBAAgB,QAAQ,WAAW,WAAW,eAAe,CAAC;AACpE,QAAI,CAAC,iBAAiB,CAAC,SAAS,IAAI,aAAa;AAC/C,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACF,UAAM,YAAY,SAAS,WAAW,aAAa,EAAE,IAAI,CAAC,aAAa;AACrE,8BAAwB,UAAU,oBAAI,IAAI,CAAC,MAAM,CAAC,GAAG,oBAAoB;AACzE;AAAA,QACE;AAAA,QACA,oBAAI,IAAI,CAAC,iBAAiB,KAAK,CAAC;AAAA,QAChC;AAAA,MACF;AACA,aAAO,eAIJ;AAAA,QACD,OAAO,gBAAgB,QAAQ;AAAA,QAC/B,OAAO,YAAY,WAAW,UAAU,eAAe,CAAC;AAAA,QACxD,YAAY,WAAW,UAAU,KAAK,IAClC,eAAe,WAAW,UAAU,KAAK,CAAe,IACxD;AAAA,MACN,CAAC;AAAA,IACH,CAAC;AACD,2BAAuB,SAAS;AAChC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,SAAS,SAAS,IAAI,aAAa,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,MAAM,EAAE;AAAA,MACzE;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,SAAS,eAAe,OAAsC;AAC5D,0BAAwB,OAAO,oBAAI,IAAI,CAAC,QAAQ,QAAQ,eAAe,CAAC,GAAG,iBAAiB;AAC5F;AAAA,IACE;AAAA,IACA,oBAAI,IAAI;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD;AAAA,EACF;AACA,yBAAuB,OAAO,iBAAiB;AAC/C,aAAW,QAAQ;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAY;AACV,4BAAwB,WAAW,OAAO,IAAI,GAAG,oBAAI,IAAI,CAAC,KAAK,CAAC,GAAG,mBAAmB,IAAI,EAAE;AAAA,EAC9F;AACA,QAAM,iBAAiB,WAAW,OAAO,YAAY;AACrD,QAAM,UAAU,iBAAiB,aAAa,gBAAgB,CAAC,IAAI;AACnE,MAAI,YAAY,WAAc,UAAU,KAAK,UAAU,IAAI;AACzD,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO,eAAe;AAAA,IACpB,OAAO,gBAAgB,KAAK;AAAA,IAC5B,OAAO,aAAa,WAAW,OAAO,OAAO,GAAG,CAAC;AAAA,IACjD;AAAA,IACA,OAAO,gBAAgB,WAAW,OAAO,OAAO,CAAC;AAAA,IACjD,WAAW,QAAQ,WAAW,OAAO,OAAO,CAAC;AAAA,IAC7C,QAAQ,QAAQ,WAAW,OAAO,QAAQ,CAAC;AAAA,IAC3C,MAAM,QAAQ,WAAW,OAAO,SAAS,CAAC;AAAA,IAC1C,QAAQ,QAAQ,WAAW,OAAO,MAAM,CAAC;AAAA,IACzC,kBAAkB,QAAQ,WAAW,OAAO,QAAQ,CAAC;AAAA,IACrD,WAAW,yBAAyB,eAAe,OAAO,OAAO,iBAAiB,CAAC;AAAA,IACnF,KAAK,mBAAmB,eAAe,OAAO,OAAO,iBAAiB,CAAC;AAAA,EACzE,CAAC;AACH;AAEA,SAAS,gBAAgB,SAA6B;AACpD,QAAM,MAAM,kBAAkB,SAAS,QAAQ,oBAAoB;AACnE,QAAM,QAAQ,OAAO,GAAG;AACxB,MAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,KAAK,QAAQ,GAAG;AACtD,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,mBAAmB,QAAsC,OAAqB;AACrF,MAAI,OAAO,SAAS;AAClB,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,KAAK;AAAA,MACR;AAAA,IACF;AACF,QAAM,OAAO,oBAAI,IAAY;AAC7B,aAAW,SAAS,QAAQ;AAC1B,QAAI,KAAK,IAAI,MAAM,KAAK;AACtB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,GAAG,KAAK;AAAA,QACR;AAAA,MACF;AACF,SAAK,IAAI,MAAM,KAAK;AAAA,EACtB;AACF;AAEA,SAAS,uBACP,WACM;AACN,MAAI,UAAU,SAAS;AACrB,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACF,QAAM,OAAO,oBAAI,IAAY;AAC7B,aAAW,YAAY,WAAW;AAChC,QAAI,KAAK,IAAI,SAAS,KAAK;AACzB,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACF,SAAK,IAAI,SAAS,KAAK;AACvB,QAAI,SAAS,cAAc,SAAS,WAAW,UAAU,SAAS,OAAO;AACvE,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,yBAAyB,SAAyD;AACzF;AAAA,IACE;AAAA,IACA,oBAAI,IAAI;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD;AAAA,EACF;AACA,yBAAuB,SAAS,sBAAsB;AACtD,QAAM,UAAU,WAAW,SAAS,SAAS;AAC7C,QAAM,SAAS,WAAW,SAAS,KAAK;AACxC,QAAM,gBAAgB,WAAW,SAAS,OAAO;AACjD;AAAA,IACE;AAAA,IACA,oBAAI,IAAI,CAAC,SAAS,MAAM,CAAC;AAAA,IACzB;AAAA,EACF;AACA,yBAAuB,eAAe,gCAAgC;AACtE,aAAW,QAAQ;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAY;AACV,4BAAwB,WAAW,SAAS,IAAI,GAAG,oBAAI,IAAI,CAAC,KAAK,CAAC,GAAG,aAAa,IAAI,EAAE;AAAA,EAC1F;AACA;AAAA,IACE;AAAA,IACA,oBAAI,IAAI,CAAC,UAAU,SAAS,QAAQ,UAAU,CAAC;AAAA,IAC/C;AAAA,EACF;AACA;AAAA,IACE;AAAA,IACA,oBAAI,IAAI,CAAC,QAAQ,SAAS,aAAa,SAAS,CAAC;AAAA,IACjD;AAAA,EACF;AACA,0BAAwB,eAAe,oBAAI,IAAI,GAAG,gCAAgC;AAClF;AAAA,IACE,WAAW,eAAe,OAAO;AAAA,IACjC,oBAAI,IAAI,CAAC,KAAK,CAAC;AAAA,IACf;AAAA,EACF;AACA;AAAA,IACE,WAAW,eAAe,MAAM;AAAA,IAChC,oBAAI,IAAI,CAAC,KAAK,CAAC;AAAA,IACf;AAAA,EACF;AACA,MAAI,UAAU,QAAQ,WAAW,MAAM,UAAa,UAAU,QAAQ,SAAS,MAAM,QAAW;AAC9F,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,WAAW,UAAU,SAAS,UAAU;AAC9C,MACE,aAAa,UACb,aAAa,UACb,aAAa,WACb,aAAa,WACb;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,QAAQ,QAAQ,WAAW,eAAe,OAAO,CAAC;AACxD,SAAO,eAAe;AAAA,IACpB,WAAW,QAAQ,WAAW,SAAS,IAAI,CAAC;AAAA,IAC5C,eAAe,gBAAgB,SAAS,UAAU,SAAS;AAAA,IAC3D,cAAc,gBAAgB,SAAS,SAAS,SAAS;AAAA,IACzD,MAAM,gBAAgB,SAAS,MAAM;AAAA,IACrC;AAAA,IACA,cAAc,gBAAgB,QAAQ,QAAQ,SAAS;AAAA,IACvD,eAAe,gBAAgB,QAAQ,SAAS,SAAS;AAAA,IACzD,aAAa,gBAAgB,QAAQ,aAAa,SAAS;AAAA,IAC3D,WAAW,gBAAgB,QAAQ,WAAW,SAAS;AAAA,IACvD,UAAU,gBAAgB,WAAW,SAAS,UAAU,CAAC;AAAA,IACzD,WAAW,gBAAgB,WAAW,SAAS,WAAW,CAAC;AAAA,IAC3D,iBAAiB,gBAAgB,WAAW,SAAS,iBAAiB,CAAC;AAAA,IACvE,cAAc,YAAY,WAAW,SAAS,YAAY,CAAC;AAAA,IAC3D,eAAe,gBAAgB,WAAW,SAAS,MAAM,CAAC;AAAA,IAC1D,MACE,UAAU,SACN,SACA,EAAE,OAAO,OAAO,aAAa,WAAW,eAAe,MAAM,GAAG,CAAC,EAAE;AAAA,EAC3E,CAAC;AACH;AAEA,SAAS,mBAAmB,SAAmD;AAC7E;AAAA,IACE;AAAA,IACA,oBAAI,IAAI;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD;AAAA,EACF;AACA,yBAAuB,SAAS,gBAAgB;AAChD,QAAM,QAAQ,WAAW,SAAS,QAAQ;AAC1C,QAAM,QAAQ,WAAW,SAAS,OAAO;AACzC,MACE,CAAC,cAAc,cAAc,iBAAiB,SAAS,EAAE;AAAA,IACvD,CAAC,SAAS,UAAU,OAAO,IAAI,MAAM;AAAA,EACvC,GACA;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MACE,CAAC,cAAc,aAAa,YAAY,EAAE,KAAK,CAAC,SAAS,UAAU,OAAO,IAAI,MAAM,MAAS,GAC7F;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,0BAAwB,OAAO,oBAAI,IAAI,CAAC,SAAS,SAAS,YAAY,IAAI,CAAC,GAAG,WAAW;AACzF,0BAAwB,OAAO,oBAAI,IAAI,CAAC,KAAK,CAAC,GAAG,WAAW;AAC5D,QAAM,mBAAmB,WAAW,SAAS,GAAG;AAChD,0BAAwB,kBAAkB,oBAAI,IAAI,CAAC,KAAK,CAAC,GAAG,eAAe;AAC3E,aAAW,QAAQ;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAY;AACV,4BAAwB,WAAW,SAAS,IAAI,GAAG,oBAAI,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,EAAE;AAAA,EACpF;AACA,QAAM,YAAY,QAAQ,gBAAgB;AAC1C,MAAI,cAAc,UAAa,cAAc,YAAY,cAAc,QAAQ;AAC7E,UAAM,IAAI;AAAA,MACR;AAAA,MACA,mBAAmB,SAAS;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AACA,QAAM,cAAc,CAAC,SAAS,SAAS,YAAY,IAAI,EACpD,IAAI,CAAC,SAAS,UAAU,OAAO,IAAI,CAAC,EACpC,OAAO,CAAC,UAA2B,UAAU,MAAS;AACzD,MAAI,IAAI,IAAI,WAAW,EAAE,OAAO,GAAG;AACjC,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,aAAa,QAAQ,KAAK;AAChC,MAAI,YAAY,YAAY,MAAM,QAAQ;AACxC,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO,eAAe;AAAA,IACpB,YAAY,YAAY,CAAC;AAAA,IACzB,YAAY,YAAY,WAAW,SAAS,IAAI,GAAG,CAAC,UAAU,QAAQ,CAAC;AAAA,IACvE,yBAAyB,YAAY,WAAW,SAAS,MAAM,GAAG,CAAC,UAAU,QAAQ,CAAC;AAAA,IACtF,OAAO;AAAA,IACP,MAAM,gBAAgB,WAAW,SAAS,GAAG,CAAC;AAAA,IAC9C,mBAAmB,gBAAgB,WAAW,SAAS,KAAK,CAAC;AAAA,IAC7D,QAAQ,gBAAgB,WAAW,SAAS,GAAG,CAAC;AAAA,IAChD,qBAAqB,gBAAgB,WAAW,SAAS,KAAK,CAAC;AAAA,IAC/D;AAAA,IACA,QAAQ,gBAAgB,WAAW,SAAS,QAAQ,CAAC;AAAA,IACrD,WAAW,QAAQ,WAAW,SAAS,WAAW,CAAC;AAAA,IACnD,eAAe,QAAQ,WAAW,SAAS,WAAW,CAAC;AAAA,IACvD,UAAU,UAAU,WAAW,SAAS,MAAM,GAAG,KAAK;AAAA,EACxD,CAAC;AACH;AAEA,SAAS,8BACP,SACA,SACA,OACM;AACN,aAAW,SAAS,gBAAgB,OAAO,GAAG;AAC5C,QAAI,CAAC,QAAQ,IAAI,MAAM,SAAS,GAAG;AACjC,YAAM,IAAI;AAAA,QACR;AAAA,QACA,eAAe,KAAK,KAAK,MAAM,IAAI;AAAA,QACnC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,6BACP,SACA,SACA,OACM;AACN,aAAW,SAAS,gBAAgB,OAAO,GAAG;AAC5C,QAAI,CAAC,QAAQ,IAAI,MAAM,SAAS,KAAK,CAAC,oBAAoB,IAAI,MAAM,SAAS,GAAG;AAC9E,YAAM,IAAI;AAAA,QACR;AAAA,QACA,eAAe,KAAK,aAAa,MAAM,IAAI;AAAA,QAC3C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,wBACP,SACA,SACA,OACM;AACN,MAAI,CAAC,QAAS;AACd,aAAW,QAAQ,QAAQ,WAAW,KAAK,GAAG;AAC5C,QAAI,SAAS,WAAW,KAAK,WAAW,QAAQ,EAAG;AACnD,UAAM,YAAY,QAAQ,IAAI,IAAI,KAAM,KAAK,WAAW,IAAI,KAAK,QAAQ,IAAI,KAAK,MAAM,CAAC,CAAC;AAC1F,QAAI,CAAC,WAAW;AACd,YAAM,IAAI;AAAA,QACR;AAAA,QACA,eAAe,KAAK,eAAe,IAAI;AAAA,QACvC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,aACP,SACA,iBACA,eACA,eACiB;AACjB,0BAAwB,SAAS,oBAAI,IAAI,CAAC,SAAS,WAAW,UAAU,CAAC,GAAG,oBAAoB;AAChG;AAAA,IACE;AAAA,IACA,oBAAI,IAAI;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD;AAAA,EACF;AACA,aAAW,aAAa,CAAC,QAAQ,QAAQ,SAAS,aAAa,WAAW,SAAS,GAAY;AAC7F,QAAI,SAAS,SAAS,SAAS,EAAE,SAAS,GAAG;AAC3C,YAAM,IAAI;AAAA,QACR;AAAA,QACA,mBAAmB,SAAS;AAAA,QAC5B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,QAAM,WAAW,WAAW,SAAS,MAAM;AAC3C,QAAM,UAAU,WAAW,SAAS,OAAO;AAC3C,0BAAwB,UAAU,oBAAI,IAAI,CAAC,KAAK,KAAK,UAAU,MAAM,CAAC,GAAG,mBAAmB;AAC5F;AAAA,IACE;AAAA,IACA,oBAAI,IAAI,CAAC,OAAO,SAAS,UAAU,QAAQ,UAAU,UAAU,QAAQ,CAAC;AAAA,IACxE;AAAA,EACF;AACA,+BAA6B,UAAU,oBAAI,IAAI,GAAG,mBAAmB;AACrE,+BAA6B,SAAS,oBAAI,IAAI,GAAG,sBAAsB;AACvE,MACE,aACC,UAAU,UAAU,GAAG,MAAM,UAAa,UAAU,UAAU,GAAG,MAAM,SACxE;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MACE,WACA,CAAC,OAAO,SAAS,UAAU,QAAQ,UAAU,UAAU,QAAQ,EAAE;AAAA,IAC/D,CAAC,SAAS,UAAU,SAAS,IAAI,MAAM;AAAA,EACzC,GACA;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,gBAAgB,WAAW,SAAS,WAAW;AACrD,0BAAwB,eAAe,oBAAI,IAAI,GAAG,wBAAwB;AAC1E,+BAA6B,eAAe,oBAAI,IAAI,GAAG,wBAAwB;AAC/E,QAAM,eAAe,WAAW,SAAS,SAAS;AAClD;AAAA,IACE;AAAA,IACA,oBAAI,IAAI,CAAC,QAAQ,aAAa,WAAW,CAAC;AAAA,IAC1C;AAAA,EACF;AACA,+BAA6B,cAAc,oBAAI,IAAI,GAAG,uBAAuB;AAC7E,QAAM,WAAW,UAAU,cAAc,MAAM;AAC/C,MAAI,aAAa,UAAa,aAAa,WAAW;AACpD,UAAM,IAAI;AAAA,MACR;AAAA,MACA,sBAAsB,QAAQ;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AACA,kBAAgB,cAAc,WAAW;AACzC,kBAAgB,cAAc,WAAW;AACzC,QAAM,qBAAqB,WAAW,SAAS,MAAM;AACrD,QAAM,mBAAmB,WAAW,SAAS,SAAS;AACtD,0BAAwB,oBAAoB,oBAAI,IAAI,CAAC,KAAK,CAAC,GAAG,oBAAoB;AAClF,0BAAwB,kBAAkB,oBAAI,IAAI,CAAC,KAAK,CAAC,GAAG,4BAA4B;AACxF,+BAA6B,oBAAoB,oBAAI,IAAI,GAAG,oBAAoB;AAChF,+BAA6B,kBAAkB,oBAAI,IAAI,GAAG,4BAA4B;AACtF,QAAM,cAAc,UAAU,UAAU,QAAQ;AAChD,MAAI,gBAAgB,UAAa,gBAAgB,cAAc,gBAAgB,aAAa;AAC1F,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,cAAc,QAAQ,kBAAkB;AAC9C,MACE,gBAAgB,UAChB,EAAC,oBAAI,IAAI,CAAC,YAAY,cAAc,cAAc,YAAY,SAAS,CAAC,GAAE,IAAI,WAAW,GACzF;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,aAAa,CAAC,SAClB,SAAS,SAAS,GAAG,IAAI,WAAW,EAAE,IAAI,CAAC,cAAc;AACvD,4BAAwB,WAAW,oBAAI,IAAI,CAAC,QAAQ,MAAM,CAAC,GAAG,GAAG,IAAI,YAAY;AACjF,iCAA6B,WAAW,oBAAI,IAAI,GAAG,GAAG,IAAI,YAAY;AACtE,UAAM,iBAAiB,0BAA0B,WAAW,KAAK,MAAM,mBAAmB;AAC1F,UAAM,eAAe,cAAc,IAAI,cAAc;AACrD,QAAI,CAAC,gBAAgB,aAAa,SAAS,GAAG,sBAAsB,GAAG,IAAI,IAAI;AAC7E,YAAM,IAAI;AAAA,QACR;AAAA,QACA,gCAAgC,IAAI;AAAA,QACpC;AAAA,MACF;AAAA,IACF;AACA,UAAM,gBAAgB,UAAU,WAAW,MAAM,KAAK;AACtD,QAAI,kBAAkB,aAAa,kBAAkB,WAAW,kBAAkB,QAAQ;AACxF,YAAM,IAAI;AAAA,QACR;AAAA,QACA,WAAW,IAAI;AAAA,QACf;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,UAAU,aAAa;AAAA,IACzB;AAAA,EACF,CAAC;AACH,QAAM,UAAU,WAAW,QAAQ;AACnC,QAAM,UAAU,WAAW,QAAQ;AACnC,aAAW,mBAAmB,CAAC,SAAS,OAAO,GAAG;AAChD,UAAM,QAAQ,oBAAI,IAAY;AAC9B,eAAW,aAAa,iBAAiB;AACvC,UAAI,MAAM,IAAI,UAAU,IAAI;AAC1B,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QACF;AACF,YAAM,IAAI,UAAU,IAAI;AAAA,IAC1B;AAAA,EACF;AACA,SAAO,eAAe;AAAA,IACpB;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN,WAAW,aAAa,kBAAkB,KAAK;AAAA,IAC/C,MAAM;AAAA,MACJ,SAAS,gBAAgB,UAAU,KAAK,SAAS,KAAK;AAAA,MACtD,UAAU,gBAAgB,UAAU,KAAK,SAAS,KAAK;AAAA,MACvD,GAAI,gBAAgB,SAAY,EAAE,YAAY,IAAI,CAAC;AAAA,MACnD,aAAa,gBAAgB,SAAS,OAAO,SAAS,KAAK;AAAA,MAC3D,eAAe,gBAAgB,SAAS,SAAS,SAAS,KAAK;AAAA,MAC/D,gBAAgB,gBAAgB,SAAS,UAAU,SAAS,KAAK;AAAA,MACjE,cAAc,gBAAgB,SAAS,QAAQ,SAAS,KAAK;AAAA,MAC7D,UAAU,gBAAgB,SAAS,UAAU,SAAS,KAAK;AAAA,MAC3D,UAAU,gBAAgB,SAAS,UAAU,SAAS,KAAK;AAAA,MAC3D,UAAU,gBAAgB,SAAS,UAAU,SAAS,KAAK;AAAA,IAC7D;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAEA,SAAS,eAAe,iBAAyB,eAAwC;AACvF,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,UAAU;AAAA,MACV,aAAa;AAAA,MACb,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,cAAc;AAAA,MACd,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,IACZ;AAAA,IACA,SAAS,CAAC;AAAA,IACV,SAAS,CAAC;AAAA,EACZ;AACF;AAEA,SAAS,+BAA+B,UAAmC;AACzE,WAAS,QAAQ,GAAG,QAAQ,SAAS,QAAQ,SAAS,GAAG;AACvD,UAAM,WAAW,SAAS,QAAQ,CAAC;AACnC,UAAM,UAAU,SAAS,KAAK;AAC9B,QAAI,CAAC,YAAY,CAAC,QAAS;AAC3B,eAAW,OAAO,CAAC,WAAW,SAAS,GAAY;AACjD,YAAM,UAAU,IAAI,IAAI,QAAQ,GAAG,EAAE,IAAI,CAAC,cAAc,UAAU,IAAI,CAAC;AACvE,iBAAW,aAAa,SAAS,GAAG,GAAG;AACrC,YAAI,CAAC,QAAQ,IAAI,UAAU,IAAI,EAAG,SAAQ,GAAG,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC;AAAA,MACtE;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,yBACP,UACA,SACA,SACA,eACA,mBACM;AACN,QAAM,aAAa,oBAAI,IAAoD;AAC3E,aAAW,SAAS,CAAC,GAAG,SAAS,GAAG,OAAO,GAAG;AAC5C,eAAW,IAAI,MAAM,UAAU,iBAAiB,MAAM,MAAM,CAAC;AAAA,EAC/D;AACA,MAAI,kBAAkB;AACtB,MAAI,sBAAsB;AAC1B,aAAW,WAAW,UAAU;AAC9B,eAAW,aAAa,CAAC,GAAG,QAAQ,SAAS,GAAG,QAAQ,OAAO,GAAG;AAChE,YAAM,YAAY,WAAW,IAAI,UAAU,QAAQ;AACnD,UAAI,cAAc,QAAW;AAC3B,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,UACA,UAAU;AAAA,QACZ;AAAA,MACF;AACA,yBAAmB,UAAU;AAC7B,6BAAuB,UAAU;AACjC,UAAI,kBAAkB;AACpB,cAAM,WAAW,wCAAwC,UAAU,QAAQ;AAC7E,UAAI,sBAAsB,mBAAmB;AAC3C,cAAM,WAAW,4CAA4C,UAAU,QAAQ;AAAA,MACjF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,iBAAiB,QAGxB;AACA,MAAI,QAAQ;AACZ,MAAI,aAAa;AACjB,QAAM,QAAQ,CAAC,GAAG,MAAM;AACxB,SAAO,MAAM,SAAS,GAAG;AACvB,UAAM,QAAQ,MAAM,IAAI;AACxB,QAAI,CAAC,MAAO;AACZ,aAAS;AACT,QAAI,MAAM,SAAS,aAAa;AAC9B,iBAAW,UAAU,MAAM;AACzB,YAAI,OAAO,SAAS,MAAO,eAAc,OAAO,KAAK;AAAA,IACzD,WAAW,MAAM,SAAS,SAAS;AACjC,iBAAW,OAAO,MAAM;AACtB,mBAAW,QAAQ,IAAI,OAAO;AAC5B,qBAAW,SAAS,KAAK,OAAQ,OAAM,KAAK,KAAK;AAAA,QACnD;AAAA,IACJ;AAAA,EACF;AACA,SAAO,EAAE,QAAQ,OAAO,WAAW;AACrC;AAIA,SAAS,sBAAsB,MAAkB,SAA+C;AAC9F,mBAAiB,MAAM,cAAc,2BAA2B;AAChE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,SAAS,oBAAI,IAA6B;AAChD,aAAW,WAAW,gBAAgB,IAAI,GAAG;AAC3C,QAAI,QAAQ,cAAc;AACxB,YAAM,mBAAmB,SAAS,2BAA2B;AAC/D,QAAI,OAAO,QAAQ;AACjB,YAAM,WAAW,4BAA4B,2BAA2B;AAC1E,UAAM,cAAc;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,QAAI,OAAO,IAAI,WAAW;AACxB,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACF,UAAM,oBAAoB,kBAAkB,SAAS,OAAO,cAAc;AAC1E,UAAM,OAAO,kBAAkB,SAAS,OAAO,MAAM;AACrD,WAAO,IAAI,aAAa;AAAA,MACtB,GAAI,sBAAsB,SAAY,EAAE,kBAAkB,IAAI,CAAC;AAAA,MAC/D,GAAI,SAAS,SAAY,EAAE,UAAU,CAAC,aAAa,IAAI,KAAK,YAAY,CAAC,EAAE,IAAI,CAAC;AAAA,IAClF,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAEA,SAAS,cACP,MACA,SACA,UACA,SACmB;AACnB,mBAAiB,MAAM,YAAY,mBAAmB;AACtD,2BAAyB,MAAM,mBAAmB;AAClD,uBAAqB,MAAM,mBAAmB;AAC9C,QAAM,SAAoE,CAAC;AAC3E,aAAW,WAAW,gBAAgB,IAAI,GAAG;AAC3C,QAAI,QAAQ,cAAc,UAAW,OAAM,mBAAmB,SAAS,mBAAmB;AAC1F,QAAI,OAAO,UAAU,QAAS,OAAM,WAAW,4BAA4B,mBAAmB;AAC9F,UAAM,gBAAgB,eAAe,SAAS,GAAG;AACjD,UAAM,cAAc,kBAAkB,eAAe,OAAO,QAAQ;AACpE,WAAO,KAAK;AAAA;AAAA,MAEV,GAAI,gBAAgB,SAAY,EAAE,YAAY,IAAI,CAAC;AAAA,MACnD,SAAS,eAAgC;AAAA,QACvC,IAAI,kBAAkB,SAAS,MAAM,mBAAmB;AAAA,QACxD,QAAQ,UAAU,SAAS,QAAQ;AAAA,QACnC,UAAU,UAAU,SAAS,UAAU;AAAA,QACvC,WAAW,UAAU,SAAS,MAAM;AAAA,QACpC,QAAQ,oBAAoB,SAAS,OAAO;AAAA,MAC9C,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACA,QAAM,yBAAyB,oBAAI,IAAoB;AACvD,QAAM,aAAa,oBAAI,IAAY;AACnC,aAAW,SAAS,QAAQ;AAC1B,QAAI,WAAW,IAAI,MAAM,QAAQ,EAAE;AACjC,YAAM,IAAI,gBAAgB,mBAAmB,wBAAwB,mBAAmB;AAC1F,eAAW,IAAI,MAAM,QAAQ,EAAE;AAC/B,QAAI,CAAC,MAAM,YAAa;AACxB,QAAI,uBAAuB,IAAI,MAAM,WAAW,GAAG;AACjD,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,2BAAuB,IAAI,MAAM,aAAa,MAAM,QAAQ,EAAE;AAAA,EAChE;AACA,aAAW,SAAS,QAAQ;AAC1B,QAAI,CAAC,MAAM,YAAa;AACxB,UAAM,WAAW,SAAS,IAAI,MAAM,WAAW;AAC/C,QAAI,CAAC,SAAU;AACf,QAAI,SAAS,aAAa,OAAW,OAAM,QAAQ,WAAW,SAAS;AACvE,QAAI,SAAS,sBAAsB,QAAW;AAC5C,YAAM,WAAW,uBAAuB,IAAI,SAAS,iBAAiB;AACtE,UAAI,CAAC;AACH,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QACF;AACF,YAAM,QAAQ,WAAW;AAAA,IAC3B;AAAA,EACF;AACA,aAAW,eAAe,SAAS,KAAK,GAAG;AACzC,QAAI,CAAC,uBAAuB,IAAI,WAAW,GAAG;AAC5C,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO,OAAO,IAAI,CAAC,UAAU,MAAM,OAAO;AAC5C;AAEA,SAAS,0BACP,QACA,SACA,SACA,UACM;AACN,QAAM,MAAM,IAAI,IAAI,SAAS,IAAI,CAAC,YAAY,QAAQ,EAAE,CAAC;AACzD,QAAM,cAAc,IAAI,IAAI,SAAS,IAAI,CAAC,YAAY,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC;AAC5E,QAAM,QAAQ,IAAI;AAAA,IAChB,SAAS,OAAO,CAAC,YAAY,QAAQ,aAAa,MAAS,EAAE,IAAI,CAAC,YAAY,QAAQ,EAAE;AAAA,EAC1F;AACA,aAAW,WAAW,UAAU;AAC9B,QAAI,QAAQ,aAAa,UAAa,CAAC,IAAI,IAAI,QAAQ,QAAQ,GAAG;AAChE,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,QAAM,aAAa,oBAAI,IAAmB;AAC1C,aAAW,WAAW,UAAU;AAC9B,QAAI,WAAW,IAAI,QAAQ,EAAE,MAAM,EAAG;AACtC,UAAM,OAAiB,CAAC;AACxB,QAAI,UAAuC;AAC3C,WAAO,WAAW,WAAW,IAAI,QAAQ,EAAE,MAAM,QAAW;AAC1D,iBAAW,IAAI,QAAQ,IAAI,CAAC;AAC5B,WAAK,KAAK,QAAQ,EAAE;AACpB,gBAAU,QAAQ,aAAa,SAAY,SAAY,YAAY,IAAI,QAAQ,QAAQ;AAAA,IACzF;AACA,QAAI,WAAW,WAAW,IAAI,QAAQ,EAAE,MAAM,GAAG;AAC/C,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,eAAW,MAAM,KAAM,YAAW,IAAI,IAAI,CAAC;AAAA,EAC7C;AAEA,QAAM,uBAAuB,oBAAI,IAAsB;AACvD,QAAM,aAAa,CAAC,UAA0C;AAC5D,UAAM,SAAS,oBAAI,IAAoB;AACvC,UAAM,OAAO,CAAC,WAA2C;AACvD,iBAAW,SAAS,QAAQ;AAC1B,YAAI,MAAM,SAAS,aAAa;AAC9B,qBAAW,UAAU,MAAM,gBAAgB;AACzC,gBAAI,CAAC,IAAI,IAAI,OAAO,SAAS;AAC3B,oBAAM,IAAI;AAAA,gBACR;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AACF,gBAAI,CAAC,MAAM,IAAI,OAAO,SAAS;AAC7B,oBAAM,IAAI;AAAA,gBACR;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AACF,kBAAM,QAAQ,OAAO,IAAI,OAAO,SAAS,KAAK,EAAE,OAAO,GAAG,KAAK,GAAG,WAAW,EAAE;AAC/E,kBAAM,OAAO,IAAI,KAAK;AACtB,mBAAO,IAAI,OAAO,WAAW,KAAK;AAAA,UACpC;AAAA,QACF,WAAW,MAAM,SAAS,SAAS;AACjC,qBAAW,OAAO,MAAM,KAAM,YAAW,QAAQ,IAAI,MAAO,MAAK,KAAK,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,IACF;AACA,SAAK,KAAK;AACV,eAAW,CAAC,WAAW,KAAK,KAAK,QAAQ;AACvC,YAAM,UAAU,qBAAqB,IAAI,SAAS;AAClD,UAAI,QAAS,SAAQ,KAAK,KAAK;AAAA,UAC1B,sBAAqB,IAAI,WAAW,CAAC,KAAK,CAAC;AAAA,IAClD;AAAA,EACF;AACA,aAAW,MAAM;AACjB,aAAW,QAAQ,CAAC,GAAG,SAAS,GAAG,OAAO,EAAG,YAAW,KAAK,MAAM;AACnE,aAAW,WAAW,UAAU;AAC9B,UAAM,kBAAkB,qBAAqB,IAAI,QAAQ,EAAE,KAAK,CAAC;AACjE,QAAI,QAAQ,aAAa,QAAW;AAClC,UAAI,gBAAgB,WAAW,GAAG;AAChC,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,YAAM,QAAQ,gBAAgB,CAAC;AAG/B,UAAI,MAAM,cAAc,KAAK,MAAM,QAAQ,KAAK,MAAM,MAAM,GAAG;AAC7D,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF,WAAW,gBAAgB,SAAS,GAAG;AACrC,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,sBAAsB,oBAAI,IAAoB;AAAA,EAClD,CAAC,WAAW,qBAAqB;AAAA,EACjC,CAAC,QAAQ,yBAAyB;AAAA,EAClC,CAAC,UAAU,kBAAkB;AAAA,EAC7B,CAAC,aAAa,aAAa;AAAA,EAC3B,CAAC,YAAY,kBAAkB;AAAA,EAC/B,CAAC,aAAa,YAAY;AAAA,EAC1B,CAAC,aAAa,QAAQ;AAAA,EACtB,CAAC,WAAW,QAAQ;AAAA,EACpB,CAAC,aAAa,QAAQ;AAAA,EACtB,CAAC,qBAAqB,WAAW;AAAA,EACjC,CAAC,oBAAoB,UAAU;AAAA,EAC/B,CAAC,OAAO,kBAAkB;AAAA,EAC1B,CAAC,aAAa,oBAAoB;AAAA,EAClC,CAAC,YAAY,YAAY;AAAA,EACzB,CAAC,SAAS,WAAW;AAAA,EACrB,CAAC,aAAa,WAAW;AAAA,EACzB,CAAC,OAAO,wBAAwB;AAAA,EAChC,CAAC,QAAQ,kBAAkB;AAAA,EAC3B,CAAC,UAAU,cAAc;AAAA,EACzB,CAAC,eAAe,YAAY;AAAA,EAC5B,CAAC,oBAAoB,mBAAmB;AAAA,EACxC,CAAC,YAAY,eAAe;AAAA,EAC5B,CAAC,UAAU,eAAe;AAAA,EAC1B,CAAC,aAAa,8BAA8B;AAAA,EAC5C,CAAC,aAAa,wBAAwB;AAAA,EACtC,CAAC,eAAe,0BAA0B;AAAA,EAC1C,CAAC,iBAAiB,sBAAsB;AAAA,EACxC,CAAC,cAAc,8BAA8B;AAAA,EAC7C,CAAC,cAAc,+BAA+B;AAAA,EAC9C,CAAC,gBAAgB,4BAA4B;AAAA,EAC7C,CAAC,mBAAmB,8BAA8B;AAAA,EAClD,CAAC,WAAW,gCAAgC;AAAA,EAC5C,CAAC,WAAW,+BAA+B;AAAA,EAC3C,CAAC,aAAa,4BAA4B;AAAA,EAC1C,CAAC,cAAc,sBAAsB;AACvC,CAAC;AAED,SAAS,yBAAyB,MAAkB,UAAwB;AAC1E,QAAM,QAAQ,CAAC,IAAI;AACnB,SAAO,MAAM,SAAS,GAAG;AACvB,UAAM,UAAU,MAAM,IAAI;AAC1B,QAAI,CAAC,QAAS;AACd,UAAM,UAAU,oBAAoB,IAAI,QAAQ,SAAS;AACzD,QAAI;AACF,YAAM,IAAI;AAAA,QACR;AAAA,QACA,QAAQ,OAAO;AAAA,QACf;AAAA,MACF;AACF,eAAW,SAAS,gBAAgB,OAAO,EAAG,OAAM,KAAK,KAAK;AAAA,EAChE;AACF;AAEA,IAAM,sBAAsB,oBAAI,IAAI;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,SAAS,mBAAmB,SAAqB,UAAmC;AAClF,SAAO,IAAI;AAAA,IACT;AAAA,IACA,gCAAgC,QAAQ,IAAI;AAAA,IAC5C;AAAA,EACF;AACF;AAEA,SAAS,uBAAuB,kBAAkC;AAChE,MAAI,qBAAqB,cAAe,QAAO;AAC/C,QAAM,QAAQ,gCAAgC,KAAK,gBAAgB;AACnE,MAAI,CAAC;AACH,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACF,SAAO,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE;AAC3C;AAEA,SAAS,kBAAkB,YAAoB,QAAgB,mBAAmC;AAChG,MACE,wBAAwB,KAAK,MAAM,KACnC,OAAO,SAAS,IAAI,KACpB,OAAO,WAAW,IAAI,KACtB,iBAAiB,KAAK,MAAM,GAC5B;AACA,UAAM,IAAI,gBAAgB,mBAAmB,8BAA8B,iBAAiB;AAAA,EAC9F;AACA,QAAM,kBAAkB,OAAO,WAAW,GAAG;AAC7C,QAAM,iBAAiB,kBAAkB,OAAO,MAAM,CAAC,IAAI;AAC3D,QAAM,OACJ,CAAC,mBAAmB,WAAW,SAAS,GAAG,IACvC,WAAW,MAAM,GAAG,WAAW,YAAY,GAAG,IAAI,CAAC,IACnD;AACN,QAAM,WAAW,GAAG,IAAI,GAAG,cAAc;AACzC,MAAI,SAAS,SAAS,IAAI;AACxB,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACF,MAAI,eAAe;AACnB,WAAS,QAAQ,GAAG,QAAQ,SAAS,QAAQ,SAAS,GAAG;AACvD,QAAI,SAAS,WAAW,KAAK,MAAM,IAAI;AACrC,sBAAgB;AAChB,UAAI,eAAe;AACjB,cAAM;AAAA,UACJ;AAAA,UACA;AAAA,QACF;AAAA,IACJ;AAAA,EACF;AACA,QAAM,SAAmB,CAAC;AAC1B,aAAW,WAAW,SAAS,MAAM,GAAG,GAAG;AACzC,QAAI,YAAY;AACd,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACF,QAAI,YAAY,IAAK;AACrB,QAAI,YAAY,MAAM;AACpB,UAAI,OAAO,WAAW;AACpB,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QACF;AACF,aAAO,IAAI;AAAA,IACb,MAAO,QAAO,KAAK,OAAO;AAAA,EAC5B;AACA,SAAO,OAAO,KAAK,GAAG;AACxB;AAEA,SAAS,aAAa,QAA4B;AAChD,SAAO,UAAU;AACjB,MAAI,OAAO,SAAS,OAAO,OAAO,UAAW,OAAM,WAAW,wBAAwB;AACxF;AAEA,SAAS,YAAY,QAAsB,YAA0B;AACnE,SAAO,kBAAkB;AACzB,MAAI,OAAO,iBAAiB,OAAO,OAAO;AACxC,UAAM,WAAW,gCAAgC;AACrD;AAEA,SAAS,gBAAgB,SAA+C;AACtE,SAAO,SAAS,SAAS,OAAO,CAAC,UAA+B,MAAM,SAAS,SAAS,KAAK,CAAC;AAChG;AAEA,SAAS,SAAS,SAAiC,MAA4B;AAC7E,SAAO,gBAAgB,OAAO,EAAE,OAAO,CAAC,UAAU,MAAM,cAAc,IAAI;AAC5E;AAEA,SAAS,WAAW,SAAiC,MAAsC;AACzF,SAAO,gBAAgB,OAAO,EAAE,KAAK,CAAC,UAAU,MAAM,cAAc,IAAI;AAC1E;AAEA,SAAS,eACP,SACA,MACA,OACwB;AACxB,MAAI;AACJ,aAAW,SAAS,gBAAgB,OAAO,GAAG;AAC5C,QAAI,MAAM,cAAc,KAAM;AAC9B,QAAI,MAAO,OAAM,IAAI,gBAAgB,mBAAmB,GAAG,KAAK,YAAY,IAAI,EAAE;AAClF,YAAQ;AAAA,EACV;AACA,SAAO;AACT;AAEA,SAAS,uBAAuB,SAAiC,OAAqB;AACpF,QAAM,OAAO,oBAAI,IAAY;AAC7B,aAAW,SAAS,gBAAgB,OAAO,GAAG;AAC5C,QAAI,KAAK,IAAI,MAAM,SAAS,GAAG;AAC7B,YAAM,IAAI,gBAAgB,mBAAmB,GAAG,KAAK,YAAY,MAAM,SAAS,EAAE;AAAA,IACpF;AACA,SAAK,IAAI,MAAM,SAAS;AAAA,EAC1B;AACF;AAEA,SAAS,eAAe,SAAqB,MAAsC;AACjF,MAAI;AACJ,QAAM,QAAQ,CAAC,OAAO;AACtB,SAAO,MAAM,SAAS,GAAG;AACvB,UAAM,UAAU,MAAM,IAAI;AAC1B,QAAI,CAAC,QAAS;AACd,QAAI,QAAQ,cAAc,KAAM,SAAQ;AACxC,UAAM,SAAS,gBAAgB,OAAO;AACtC,aAAS,QAAQ,OAAO,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG;AAC1D,YAAM,QAAQ,OAAO,KAAK;AAC1B,UAAI,MAAO,OAAM,KAAK,KAAK;AAAA,IAC7B;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,YAAY,SAAqB,MAAc,UAA8B;AACpF,QAAM,UAAU,SAAS,SAAS,IAAI;AACtC,MAAI,QAAQ,WAAW;AACrB,UAAM,IAAI,gBAAgB,mBAAmB,wBAAwB,IAAI,YAAY,QAAQ;AAC/F,SAAO,QAAQ,CAAC;AAClB;AAEA,SAAS,UAAU,SAAiC,MAAkC;AACpF,SAAO,kBAAkB,SAAS,KAAK,IAAI;AAC7C;AAEA,SAAS,kBAAkB,SAAqB,MAAc,UAA0B;AACtF,QAAM,QAAQ,UAAU,SAAS,IAAI;AACrC,MAAI,UAAU,UAAa,UAAU;AACnC,UAAM,IAAI,gBAAgB,mBAAmB,oBAAoB,IAAI,cAAc,QAAQ;AAC7F,SAAO;AACT;AAEA,SAAS,kBACP,SACA,QACA,MACoB;AACpB,SAAO,SAAS,WAAW,IAAI,GAAG,MAAM,IAAI,IAAI,EAAE;AACpD;AAEA,SAAS,0BACP,SACA,QACA,MACA,UACQ;AACR,QAAM,QAAQ,kBAAkB,SAAS,QAAQ,IAAI;AACrD,MAAI,UAAU,UAAa,UAAU,IAAI;AACvC,UAAM,IAAI;AAAA,MACR;AAAA,MACA,oBAAoB,MAAM,IAAI,IAAI;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,eAAe,SAAiC,MAAkC;AACzF,SAAO,SAAS,WAAW,IAAI,IAAI;AACrC;AAEA,SAAS,uBAAuB,SAAqB,MAAc,UAA0B;AAC3F,QAAM,QAAQ,eAAe,SAAS,IAAI;AAC1C,MAAI,UAAU,UAAa,UAAU;AACnC,UAAM,IAAI,gBAAgB,mBAAmB,oBAAoB,IAAI,cAAc,QAAQ;AAC7F,SAAO;AACT;AAEA,SAAS,sBACP,SACA,SACA,UACM;AACN,aAAW,QAAQ,QAAQ,WAAW,KAAK,GAAG;AAC5C,QAAI,SAAS,WAAW,KAAK,WAAW,QAAQ,EAAG;AACnD,QAAI,CAAC,QAAQ,IAAI,IAAI;AACnB,YAAM,IAAI,gBAAgB,mBAAmB,yBAAyB,IAAI,IAAI,QAAQ;AAAA,EAC1F;AACF;AAEA,SAAS,mBAAmB,SAAqB,UAAwB;AACvE,aAAW,SAAS,QAAQ,UAAU;AACpC,QAAI,MAAM,SAAS,aAAa,CAAC,oBAAoB,MAAM,KAAK,GAAG;AACjE,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,YAAY,SAA6B;AAChD,MAAI,SAAS;AACb,QAAM,QAAmB,CAAC,GAAG,QAAQ,QAAQ,EAAE,QAAQ;AACvD,SAAO,MAAM,SAAS,GAAG;AACvB,UAAM,OAAO,MAAM,IAAI;AACvB,QAAI,CAAC,KAAM;AACX,QAAI,KAAK,SAAS,OAAQ,WAAU,KAAK;AAAA,SACpC;AACH,eAAS,QAAQ,KAAK,SAAS,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG;AACjE,cAAM,QAAQ,KAAK,SAAS,KAAK;AACjC,YAAI,MAAO,OAAM,KAAK,KAAK;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,iBAAiB,SAAqB,UAAkB,UAAwB;AACvF,MAAI,QAAQ,cAAc;AACxB,UAAM,IAAI,gBAAgB,mBAAmB,YAAY,QAAQ,iBAAiB,QAAQ;AAC9F;AAEA,SAAS,wBAAwB,SAAqB,UAAkB,UAAwB;AAC9F,MAAI,QAAQ,WAAW,IAAI,OAAO,MAAM,UAAU;AAChD,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,4BAA4B,MAAkB,UAAkB,UAAwB;AAC/F,0BAAwB,MAAM,UAAU,QAAQ;AAChD,QAAM,QAAQ,CAAC,IAAI;AACnB,SAAO,MAAM,SAAS,GAAG;AACvB,UAAM,UAAU,MAAM,IAAI;AAC1B,QAAI,CAAC,QAAS;AACd,QAAI,QAAQ,KAAK,SAAS,GAAG;AAC3B,YAAM,IAAI;AAAA,QACR;AAAA,QACA,uDAAuD,QAAQ,IAAI;AAAA,QACnE;AAAA,MACF;AACF,UAAM,UAAU,QAAQ,WAAW,IAAI,OAAO;AAC9C,QAAI,YAAY,UAAa,YAAY;AACvC,YAAM,IAAI,gBAAgB,mBAAmB,oCAAoC,QAAQ;AAC3F,eAAW,SAAS,gBAAgB,OAAO,EAAG,OAAM,KAAK,KAAK;AAAA,EAChE;AACF;AAEA,SAAS,yBACP,SACA,QACA,UACA,UACM;AACN,MAAI,QAAQ,WAAW,IAAI,SAAS,MAAM,EAAE,MAAM,UAAU;AAC1D,UAAM,IAAI;AAAA,MACR;AAAA,MACA,eAAe,MAAM;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,qBAAqB,MAAkB,UAAwB;AACtE,+BAA6B,MAAM,KAAK,4BAA4B,QAAQ;AAC9E;AAEA,SAAS,6BACP,MACA,QACA,UACA,UACM;AACN,2BAAyB,MAAM,QAAQ,UAAU,QAAQ;AACzD,iCAA+B,MAAM,QAAQ;AAC7C,QAAM,QAAQ,CAAC,IAAI;AACnB,SAAO,MAAM,SAAS,GAAG;AACvB,UAAM,UAAU,MAAM,IAAI;AAC1B,QAAI,CAAC,QAAS;AACd,QAAI,CAAC,QAAQ,KAAK,WAAW,GAAG,MAAM,GAAG,GAAG;AAC1C,YAAM,IAAI;AAAA,QACR;AAAA,QACA,wCAAwC,QAAQ,IAAI;AAAA,QACpD;AAAA,MACF;AAAA,IACF;AACA,UAAM,UAAU,QAAQ,WAAW,IAAI,SAAS,MAAM,EAAE;AACxD,QAAI,YAAY,UAAa,YAAY,UAAU;AACjD,YAAM,IAAI,gBAAgB,mBAAmB,GAAG,MAAM,6BAA6B,QAAQ;AAAA,IAC7F;AACA,eAAW,SAAS,gBAAgB,OAAO,EAAG,OAAM,KAAK,KAAK;AAAA,EAChE;AACF;AAEA,IAAM,uBAAuB,oBAAI,IAAoB;AAAA,EACnD,CAAC,OAAO,sCAAsC;AAAA,EAC9C,CAAC,KAAK,0BAA0B;AAAA,EAChC,CAAC,KAAK,qEAAqE;AAAA,EAC3E,CAAC,OAAO,sDAAsD;AAAA,EAC9D,CAAC,OAAO,2BAA2B;AACrC,CAAC;AAED,SAAS,gCAAgC,MAAkB,UAAwB;AACjF,QAAM,eAAe,qBAAqB,IAAI,KAAK;AACnD,QAAM,WAAW,oBAAI,IAAoB,CAAC,CAAC,OAAO,YAAY,CAAC,CAAC;AAChE,QAAM,QAAQ,CAAC,YAA8B;AAC3C,UAAM,UAAwD,CAAC;AAC/D,UAAM,mBAAmB,QAAQ,WAAW,IAAI,OAAO;AACvD,QAAI,qBAAqB,gBAAgB,qBAAqB,iCAAiC;AAC7F,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,eAAW,CAAC,MAAM,KAAK,KAAK,QAAQ,YAAY;AAC9C,UAAI,CAAC,KAAK,WAAW,QAAQ,EAAG;AAChC,YAAM,SAAS,KAAK,MAAM,CAAC;AAC3B,UAAI,WAAW,WAAW,MAAM,WAAW,KAAK,UAAU,iCAAiC;AACzF,cAAM,IAAI,gBAAgB,eAAe,qCAAqC,QAAQ;AAAA,MACxF;AACA,UAAK,WAAW,WAAY,UAAU,eAAe;AACnD,cAAM,IAAI,gBAAgB,eAAe,iCAAiC,QAAQ;AAAA,MACpF;AACA,YAAM,WAAW,SAAS,IAAI,MAAM;AACpC,cAAQ,KAAK,eAAe,EAAE,QAAQ,SAAS,CAAC,CAAC;AACjD,eAAS,IAAI,QAAQ,KAAK;AAAA,IAC5B;AACA,UAAM,mBAAmB,QAAQ,KAAK,QAAQ,GAAG;AACjD,QAAI,oBAAoB,KAAK,CAAC,SAAS,IAAI,QAAQ,KAAK,MAAM,GAAG,gBAAgB,CAAC,GAAG;AACnF,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,eAAW,QAAQ,QAAQ,WAAW,KAAK,GAAG;AAC5C,UAAI,SAAS,WAAW,KAAK,WAAW,QAAQ,EAAG;AACnD,YAAM,YAAY,KAAK,QAAQ,GAAG;AAClC,UAAI,aAAa,KAAK,CAAC,SAAS,IAAI,KAAK,MAAM,GAAG,SAAS,CAAC,GAAG;AAC7D,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,eAAW,SAAS,gBAAgB,OAAO,EAAG,OAAM,KAAK;AACzD,aAAS,QAAQ,QAAQ,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG;AAC3D,YAAM,SAAS,QAAQ,KAAK;AAC5B,UAAI,CAAC,OAAQ;AACb,UAAI,OAAO,aAAa,OAAW,UAAS,OAAO,OAAO,MAAM;AAAA,UAC3D,UAAS,IAAI,OAAO,QAAQ,OAAO,QAAQ;AAAA,IAClD;AAAA,EACF;AACA,QAAM,IAAI;AACZ;AAEA,SAAS,+BAA+B,MAAkB,UAAwB;AAChF,QAAM,WAAW,oBAAI,IAAoB,CAAC,CAAC,OAAO,qBAAqB,IAAI,KAAK,CAAW,CAAC,CAAC;AAC7F,QAAM,QAAQ,CAAC,YAA8B;AAC3C,UAAM,UAAwD,CAAC;AAC/D,eAAW,CAAC,MAAM,KAAK,KAAK,QAAQ,YAAY;AAC9C,UAAI,CAAC,KAAK,WAAW,QAAQ,EAAG;AAChC,YAAM,iBAAiB,KAAK,MAAM,CAAC;AACnC,YAAM,WAAW,SAAS,IAAI,cAAc;AAC5C,cAAQ,KAAK,eAAe,EAAE,QAAQ,gBAAgB,SAAS,CAAC,CAAC;AACjE,YAAM,WAAW,qBAAqB,IAAI,cAAc;AACxD,UAAI,aAAa,UAAa,UAAU,UAAU;AAChD,cAAM,IAAI;AAAA,UACR;AAAA,UACA,mBAAmB,cAAc;AAAA,UACjC;AAAA,QACF;AAAA,MACF;AACA,eAAS,IAAI,gBAAgB,KAAK;AAAA,IACpC;AACA,eAAW,QAAQ,QAAQ,WAAW,KAAK,GAAG;AAC5C,UAAI,SAAS,WAAW,KAAK,WAAW,QAAQ,EAAG;AACnD,YAAM,YAAY,KAAK,QAAQ,GAAG;AAClC,UAAI,YAAY,EAAG;AACnB,YAAM,kBAAkB,KAAK,MAAM,GAAG,SAAS;AAC/C,YAAM,WAAW,qBAAqB,IAAI,eAAe;AACzD,UAAI,CAAC,SAAS,IAAI,eAAe,GAAG;AAClC,cAAM,IAAI;AAAA,UACR;AAAA,UACA,6BAA6B,eAAe;AAAA,UAC5C;AAAA,QACF;AAAA,MACF;AACA,UAAI,aAAa,UAAa,SAAS,IAAI,eAAe,MAAM,UAAU;AACxE,cAAM,IAAI;AAAA,UACR;AAAA,UACA,6BAA6B,eAAe;AAAA,UAC5C;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,eAAW,SAAS,gBAAgB,OAAO,EAAG,OAAM,KAAK;AACzD,aAAS,QAAQ,QAAQ,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG;AAC3D,YAAM,SAAS,QAAQ,KAAK;AAC5B,UAAI,CAAC,OAAQ;AACb,UAAI,OAAO,aAAa,OAAW,UAAS,OAAO,OAAO,MAAM;AAAA,UAC3D,UAAS,IAAI,OAAO,QAAQ,OAAO,QAAQ;AAAA,IAClD;AAAA,EACF;AACA,QAAM,IAAI;AACZ;AAEA,SAAS,QAAQ,SAAqD;AACpE,SAAO,UAAU,SAAS,KAAK;AACjC;AAEA,SAAS,YACP,SACA,YAAuC,CAAC,UAAU,OAC9B;AACpB,QAAM,QAAQ,QAAQ,OAAO;AAC7B,MAAI,UAAU,OAAW,QAAO;AAChC,QAAM,SAAS,OAAO,KAAK;AAC3B,MAAI,CAAC,OAAO,SAAS,MAAM;AACzB,UAAM,IAAI,gBAAgB,mBAAmB,gCAAgC;AAC/E,QAAM,cAAc,UAAU,MAAM;AACpC,MAAI,CAAC,OAAO,SAAS,WAAW;AAC9B,UAAM,IAAI,gBAAgB,mBAAmB,qCAAqC;AACpF,SAAO;AACT;AAEA,SAAS,aAAa,SAAiC,UAA0B;AAC/E,MAAI,QAAQ,OAAO,MAAM,OAAW,QAAO;AAC3C,QAAM,QAAQ,YAAY,OAAO;AACjC,MAAI,UAAU,UAAa,CAAC,OAAO,UAAU,KAAK,GAAG;AACnD,UAAM,IAAI,gBAAgB,mBAAmB,gCAAgC;AAAA,EAC/E;AACA,SAAO;AACT;AAEA,SAAS,gBACP,SACA,MACA,YAAuC,CAAC,UAAU,OAC9B;AACpB,QAAM,MAAM,UAAU,SAAS,IAAI;AACnC,MAAI,QAAQ,OAAW,QAAO;AAC9B,QAAM,QAAQ,OAAO,GAAG;AACxB,MAAI,CAAC,OAAO,SAAS,KAAK;AACxB,UAAM,IAAI,gBAAgB,mBAAmB,oCAAoC;AACnF,QAAM,cAAc,UAAU,KAAK;AACnC,MAAI,CAAC,OAAO,SAAS,WAAW;AAC9B,UAAM,IAAI,gBAAgB,mBAAmB,yCAAyC;AACxF,SAAO;AACT;AAEA,SAAS,iBAAiB,SAAqB,MAAc,UAA4B;AACvF,QAAM,QAAQ,UAAU,SAAS,IAAI;AACrC,SAAO,UAAU,SAAY,WAAW,oBAAoB,KAAK;AACnE;AAEA,SAAS,yBAAyB,SAAqB,MAAmC;AACxF,QAAM,QAAQ,UAAU,SAAS,IAAI;AACrC,SAAO,UAAU,SAAY,SAAY,oBAAoB,KAAK;AACpE;AAEA,SAAS,gBAAgB,SAAsD;AAC7E,MAAI,CAAC,QAAS,QAAO;AACrB,SAAO,aAAa,SAAS,IAAI;AACnC;AAEA,SAAS,aAAa,SAAiC,UAA4B;AACjF,MAAI,CAAC,QAAS,QAAO;AACrB,QAAM,QAAQ,QAAQ,OAAO;AAC7B,SAAO,UAAU,SAAY,OAAO,oBAAoB,KAAK;AAC/D;AAEA,IAAM,eAAe,oBAAI,IAAI,CAAC,KAAK,SAAS,OAAO,IAAI,CAAC;AACxD,IAAM,cAAc,oBAAI,IAAI,CAAC,KAAK,QAAQ,MAAM,KAAK,CAAC;AAEtD,SAAS,oBAAoB,OAAwB;AACnD,QAAM,aAAa,MAAM,YAAY;AACrC,MAAI,aAAa,IAAI,UAAU,EAAG,QAAO;AACzC,MAAI,YAAY,IAAI,UAAU,EAAG,QAAO;AACxC,QAAM,IAAI,gBAAgB,mBAAmB,gCAAgC;AAC/E;AAEA,SAAS,UAAU,MAAsB;AACvC,SAAO,KAAK,MAAM,KAAK,YAAY,GAAG,IAAI,CAAC;AAC7C;AAEA,SAAS,UAAU,OAAuB;AACxC,SAAO,QAAQ;AACjB;AAEA,SAAS,eAAiC,OAAkB;AAC1D,QAAM,SAAS;AACf,aAAW,OAAO,OAAO,KAAK,MAAM,EAAG,KAAI,OAAO,GAAG,MAAM,OAAW,QAAO,OAAO,GAAG;AACvF,SAAO;AACT;AAEA,SAAS,WAAW,OAAmB,aAAqB,UAA2B;AACrF,MAAI;AACF,WAAO,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,KAAK;AAAA,EAC/D,QAAQ;AACN,UAAM,IAAI;AAAA,MACR,WAAW,gBAAgB;AAAA,MAC3B,GAAG,WAAW;AAAA,MACd;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,WAAW,SAAiB,UAAoC;AACvE,SAAO,IAAI,gBAAgB,kBAAkB,SAAS,QAAQ;AAChE;AAEA,SAAS,eAAe,MAAc,OAAuB;AAC3D,SAAO,OAAO,QAAQ,KAAK,OAAO,QAAQ,IAAI;AAChD;AAEA,SAAS,2BACP,MACA,OACQ;AACR,SACE,eAAe,KAAK,YAAY,MAAM,UAAU,KAChD,eAAe,KAAK,MAAM,MAAM,IAAI,KACpC,eAAe,KAAK,YAAY,MAAM,UAAU;AAEpD;AAEA,SAAS,0BACP,MACA,OACQ;AACR,SACE,eAAe,KAAK,UAAU,MAAM,QAAQ,KAC5C,eAAe,KAAK,aAAa,MAAM,WAAW;AAEtD;;;ACtqHA,IAAM,qBAAqB,oBAAI,QAAoD;AAEnF,eAAsB,WACpB,UACA,UAAqC,CAAC,GACnB;AACnB,wBAAsB,OAAO;AAC7B,WAAS,OAAO;AAChB,QAAM,WAAW,2BAA2B,IAAI,QAAQ;AACxD,MAAI,YAAa,MAAM,oBAAoB,QAAQ,MAAO,SAAS,aAAa;AAC9E,WAAO,SAAS,UAAU,SAAS,YAAY,MAAM,GAAG;AAAA,MACtD,MAAM;AAAA,MACN,GAAI,QAAQ,WAAW,EAAE,MAAM,QAAQ,SAAS,IAAI,CAAC;AAAA,IACvD,CAAC;AAAA,EACH;AACA,QAAM,iBAAiB,uBAAuB,QAAQ,EAAE;AAAA,IACtD,CAAC,UAAU,MAAM,aAAa;AAAA,EAChC;AACA,MAAI,eAAe,SAAS,KAAK,QAAQ,uBAAuB,WAAW;AACzE,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,OAAO,MAAM,OAAO,MAAM;AAChC,QAAM,UAAU,iBAAiB,UAAU,IAAI;AAC/C,QAAM,6BAA6B,SAAS;AAC5C,QAAM,WAAW,SAAS,SAAS,MAAM,IAAI,CAAC,SAAS,UAAU;AAC/D,UAAM,MAAM,SAAS,SAAS,MAAM,QAAQ,CAAC,GAAG,mBAAmB,SAAS,OAAO,MAAM;AACzF,UAAM,SAAS,SAAS,OAAO,MAAM,MAAM,QAAQ,iBAAiB,GAAG;AACvE,UAAM,YAAY,QAAQ,KAAK,UAAU,QAAQ,KAAK;AACtD,WAAO;AAAA,MACL,YAAY;AAAA,QACV,MAAM;AAAA,UACJ,MAAM;AAAA,YACJ,OAAO,SAAS,YAAY,QAAQ,KAAK,WAAW,QAAQ,KAAK,OAAO;AAAA,YACxE,QAAQ,SAAS,YAAY,QAAQ,KAAK,UAAU,QAAQ,KAAK,QAAQ;AAAA,YACzE,aAAa,YAAY,KAAK,gBAAgB,YAAY,KAAK,gBAAgB;AAAA,UACjF;AAAA,UACA,QAAQ;AAAA,YACN,KAAK,SAAS,QAAQ,KAAK,WAAW;AAAA,YACtC,OAAO,SAAS,QAAQ,KAAK,aAAa;AAAA,YAC1C,QAAQ,SAAS,QAAQ,KAAK,cAAc;AAAA,YAC5C,MAAM,SAAS,QAAQ,KAAK,YAAY;AAAA,YACxC,QAAQ,SAAS,QAAQ,KAAK,YAAY,EAAE;AAAA,YAC5C,QAAQ,SAAS,QAAQ,KAAK,YAAY,EAAE;AAAA,YAC5C,QAAQ,SAAS,QAAQ,KAAK,YAAY,CAAC;AAAA,UAC7C;AAAA,QACF;AAAA,QACA,WAAW,QAAQ;AAAA,MACrB;AAAA,MACA,SAAS,iBAAiB,QAAQ,SAAS,QAAQ,MAAM,MAAM,OAAO;AAAA,MACtE,SAAS,iBAAiB,QAAQ,SAAS,QAAQ,MAAM,MAAM,OAAO;AAAA,MACtE,UAAU,OAAO,IAAI,CAAC,UAAU,YAAY,OAAO,QAAQ,MAAM,MAAM,OAAO,CAAC;AAAA,IACjF;AAAA,EACF,CAAC;AACD,QAAM,OAAO,IAAI,KAAK,SAAS;AAAA,IAC7B;AAAA,IACA,WAAW,EAAE,QAAQ,gBAAgB,IAAI,EAAE;AAAA,IAC3C,UAAU,EAAE,UAAU,QAAQ,mBAAmB;AAAA,IACjD,UAAU,EAAE,gBAAgB,SAAS,eAAe;AAAA,IACpD;AAAA,IACA,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,UAAU,SAAS;AAAA,EACrB,CAAC;AACD,QAAM,QAAQ,MAAM,+BAA+B,MAAM,KAAK,QAAQ;AAAA,IACpE;AAAA,MACE,MAAM;AAAA,MACN,MAAM,4BAA4B,SAAS,QAAQ;AAAA,IACrD;AAAA,EACF,CAAC;AACD,SAAO,SAAS,UAAU,OAAO;AAAA,IAC/B,MAAM;AAAA,IACN,GAAI,QAAQ,WAAW,EAAE,MAAM,QAAQ,SAAS,IAAI,CAAC;AAAA,EACvD,CAAC;AACH;AAEA,eAAsBC,YACpB,OACA,UAAqC,CAAC,GACnB;AACnB,wBAAsB,OAAO;AAC7B,QAAM,cAAc,MAAM,eAAe,KAAK;AAC9C,QAAM,WAAW,MAAM,WAAc,iBAAiB,WAAW,GAAG,QAAQ,MAAM;AAClF,MAAI,iBAAiB,SAAS,aAAa,KAAK,QAAQ,uBAAuB,SAAS;AACtF,UAAM,IAAI;AAAA,MACR;AAAA,MACA,CAAC,mBAAmB,SAAS,eAAe,OAAO,CAAC;AAAA,IACtD;AAAA,EACF;AACA,QAAM,WAAW,yBAAyB,UAAU,MAAM,kBAAkB,QAAQ,CAAC;AACrF,MAAI,iBAAiB,SAAS,aAAa,GAAG;AAC5C,+BAA2B,IAAI,UAAU;AAAA,MACvC;AAAA,MACA,cAAc,MAAM,UAAU,WAAW;AAAA,MACzC,kBAAkB,SAAS;AAAA,MAC3B,eAAe,mBAAmB,SAAS,aAAa;AAAA,MACxD,aAAa,MAAM,oBAAoB,QAAQ;AAAA,IACjD,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAEO,SAAS,eAAe,UAAsD;AACnF,WAAS,OAAO;AAChB,SAAO,uBAAuB,QAAQ;AACxC;AAEO,SAAS,yBACd,UACyC;AACzC,WAAS,OAAO;AAChB,SAAO,iCAAiC,QAAQ;AAClD;AAEA,eAAsB,+BACpB,UACA,UACA,UAAqD,CAAC,GACvC;AACf,WAAS,OAAO;AAChB,wBAAsB,OAAO;AAC7B,QAAM,aAAa,kCAAkC,QAAQ;AAC7D,MAAI,WAAW,iBAAkB,MAAM,UAAU,WAAW,WAAW,GAAI;AACzE,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,WAAW,MAAM,WAAc,iBAAiB,WAAW,WAAW,GAAG,QAAQ,MAAM;AAC7F,MAAI,CAAC,kBAAkB,SAAS,eAAe,WAAW,aAAa,GAAG;AACxE,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,YAAY,yBAAyB,UAAU,MAAM,kBAAkB,QAAQ,CAAC;AACtF,QAAM,kBAAkB,MAAM,oBAAoB,SAAS;AAC3D,QAAM,iBAAiB,MAAM,oBAAoB,QAAQ;AACzD,MAAI,oBAAoB,WAAW,eAAe,mBAAmB,WAAW,aAAa;AAC3F,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,6BAA2B,IAAI,UAAU;AAAA,IACvC,aAAa,WAAW;AAAA,IACxB,cAAc,WAAW;AAAA,IACzB,kBAAkB,SAAS;AAAA,IAC3B,eAAe,WAAW;AAAA,IAC1B,aAAa,WAAW;AAAA,EAC1B,CAAC;AACH;AAEA,SAAS,yBAAyB,UAA4B,aAA+B;AAC3F,MAAI,SAAS,kBAAkB,KAAK,SAAS,WAAW,QAAQ;AAC9D,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,mBAAmB,CAAC,GAAG,SAAS,QAAQ,EAAE;AAAA,IAC9C,CAAC,MAAM,UAAU,KAAK,kBAAkB,MAAM;AAAA,EAChD;AACA,2BAAyB,UAAU,gBAAgB;AACnD,QAAM,eAAe,iBAAiB,CAAC;AACvC,MAAI,CAAC,gBAAgB,aAAa,oBAAoB;AACpD,UAAM,IAAI,MAAM,uDAAuD;AACzE,QAAM,WAAW,SAAS,OAAO;AAAA,IAC/B,MAAM,aAAa,YAAY;AAAA,IAC/B;AAAA,IACA,WAAW,aAAa;AAAA,IACxB,mBAAmB,SAAS;AAAA,IAC5B,gBAAgB,SAAS;AAAA,EAC3B,CAAC;AACD,QAAM,eAAuC,oBAAI,IAAI;AACrD,QAAM,WAAW,IAAI,IAAI,SAAS,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,SAAS,KAAK,CAAC,CAAC;AAC/E,QAAM,YAAY,kBAAkB,SAAS,KAAK;AAClD,MAAI,eAAe;AACnB,WAAS,OAAO,QAAQ,CAAC,OAAO,eAAe;AAC7C,WAAO,iBAAiB,YAAY,GAAG,oBAAoB,YAAY;AACrE,eAAS,SAAS,IAAI;AAAA,QACpB,MAAM,aAAa,iBAAiB,YAAY,CAAE;AAAA,QAClD,WAAW,iBAAiB,YAAY,EAAG;AAAA,MAC7C,CAAC;AACD,sBAAgB;AAAA,IAClB;AACA,4BAAwB,UAAU,OAAO,UAAU,WAAW,YAAY;AAAA,EAC5E,CAAC;AACD,SAAO,eAAe,iBAAiB,QAAQ;AAC7C,UAAM,UAAU,iBAAiB,YAAY;AAC7C,QAAI,QAAQ,oBAAoB,SAAS,OAAO;AAC9C,YAAM,IAAI,MAAM,gEAAgE;AAClF,QAAI,SAAS,SAAS,MAAM,GAAG,EAAE,GAAG,oBAAoB,SAAS,OAAO,QAAQ;AAC9E,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,aAAS,SAAS,IAAI,EAAE,MAAM,aAAa,OAAO,GAAG,WAAW,QAAQ,UAAU,CAAC;AACnF,oBAAgB;AAAA,EAClB;AACA,QAAM,UAAU,IAAI,IAAI,SAAS,QAAQ,IAAI,CAAC,UAAU,CAAC,MAAM,UAAU,KAAK,CAAC,CAAC;AAChF,QAAM,UAAU,IAAI,IAAI,SAAS,QAAQ,IAAI,CAAC,UAAU,CAAC,MAAM,UAAU,KAAK,CAAC,CAAC;AAChF,mBAAiB,QAAQ,CAAC,QAAQ,UAAU;AAC1C,UAAM,SAAS,SAAS,SAAS,MAAM,KAAK;AAC5C,QAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,uDAAuD;AACpF;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AACD,iBAAe,UAAU,SAAS,UAAU,cAAc,QAAQ;AAClE,uBAAqB,UAAU,UAAU,YAAY;AACrD,mCAAiC,QAAQ;AACzC,WAAS,OAAO;AAChB,SAAO;AACT;AAEA,SAAS,wBACP,UACA,OACA,QACA,WACA,YACM;AACN,MAAI,MAAM,SAAS,aAAa;AAC9B,aAAS,OAAO,aAAa;AAC7B;AAAA,EACF;AACA,MAAI,MAAM,SAAS,aAAa;AAC9B,QAAI,gBAAgB,OAAO,MAAM,GAAG;AAClC,eAAS,OAAO,aAAa;AAC7B;AAAA,IACF;AACA,UAAMC,aAAY,kBAAkB,OAAO,QAAQ,SAAS;AAC5D,UAAM,YAAY,SAAS,OAAO,aAAaA,WAAU,MAAMA,WAAU,KAAK;AAC9E,cAAU,YAAY,MAAM,IAAI,EAAE,QAAQ,OAAO,QAAQ,UAAU,CAAC;AACpE;AAAA,EACF;AACA,QAAM,YAAY;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,SAAS,MAAM,GAAG,EAAE,GAAG,QAAQ,SAAS;AAAA,EACnD;AACA,WAAS,OAAO,SAAS,UAAU,MAAM,UAAU,KAAK;AAC1D;AAEA,SAAS,yBACP,OACA,OACA,UACA,QACA,WACA,YACA,MACM;AACN,MACE,MAAM,SAAS,eACd,MAAM,SAAS,eAAe,MAAM,QAAQ,KAAK,CAAC,WAAW,OAAO,SAAS,WAAW,GACzF;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MAAI,MAAM,SAAS,aAAa;AAC9B,UAAM,YAAY,kBAAkB,OAAO,QAAQ,SAAS;AAC5D,UAAM,YAAY,MAAM,aAAa,UAAU,MAAM,UAAU,KAAK;AACpE,cAAU,YAAY,MAAM,IAAI,EAAE,QAAQ,OAAO,QAAQ,UAAU,CAAC;AAAA,EACtE,OAAO;AACL,UAAM,YAAY,cAAc,OAAO,QAAQ,WAAW,IAAI;AAC9D,UAAM,SAAS,UAAU,MAAM,UAAU,KAAK;AAAA,EAChD;AACF;AAEA,SAAS,kBACP,QACA,QACA,WAC8E;AAC9E,MAAI,OAAO,QAAQ,KAAK,CAAC,WAAW,OAAO,SAAS,WAAW,GAAG;AAChE,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,YAAY,qBAAqB,OAAO,SAAS,QAAQ,WAAW;AAC1E,QAAM,iBAAiB;AAAA,IACrB,EAAE,GAAG,UAAU,WAAW,GAAG,OAAO,MAAM;AAAA,IAC1C,OAAO;AAAA,IACP;AAAA,EACF;AACA,QAAM,OAAO,OAAO,QAAQ,IAAI,CAAC,WAAW;AAC1C,QAAI,OAAO,SAAS,MAAO,OAAM,IAAI,MAAM,0CAA0C;AACrF,UAAM,eAAe,qBAAqB,OAAO,SAAS,QAAQ,WAAW,EAAE;AAC/E,WAAO,IAAI;AAAA,MACT,OAAO;AAAA,MACP,oBAAoB,EAAE,GAAG,UAAU,KAAK,GAAG,cAAc,GAAG,OAAO,MAAM,CAAC;AAAA,IAC5E;AAAA,EACF,CAAC;AACD,SAAO,EAAE,MAAM,KAAK,SAAS,IAAI,OAAO,IAAI,OAAO,eAAe;AACpE;AAEA,SAAS,cACP,QACA,QACA,WACA,MAIA;AACA,MAAI,OAAO,KAAK,WAAW,KAAK,OAAO,KAAK,KAAK,CAAC,QAAQ,IAAI,MAAM,WAAW,CAAC;AAC9E,UAAM,IAAI,MAAM,8BAA8B;AAChD,MAAI,OAAO,SAAS;AAClB,UAAM,IAAI;AAAA,MACR;AAAA,MACA,eAAe,OAAO,OAAO;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AACA,QAAM,cAAc,OAAO,KAAK,CAAC,EAAG,MAAM;AAC1C,MAAI,OAAO,KAAK,KAAK,CAAC,QAAQ,IAAI,MAAM,WAAW,WAAW,GAAG;AAC/D,UAAM,IAAI,gCAAgC,YAAY,sBAAsB,aAAa;AAAA,EAC3F;AACA,QAAM,aAAa,OAAO,KAAK,UAAU,CAAC,QAAQ,CAAC,IAAI,MAAM;AAC7D,QAAM,uBAAuB,aAAa,IAAI,OAAO,KAAK,SAAS;AACnE,MAAI,OAAO,KAAK,MAAM,oBAAoB,EAAE,KAAK,CAAC,QAAQ,IAAI,MAAM,GAAG;AACrE,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,cAAc,OAAO,KAAK,CAAC,EAAG;AACpC,MAAI,OAAO,KAAK,KAAK,CAAC,QAAQ,IAAI,gBAAgB,WAAW,GAAG;AAC9D,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MAAI,OAAO,KAAK,KAAK,CAAC,QAAQ,IAAI,aAAa,UAAa,IAAI,eAAe,MAAS,GAAG;AACzF,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MAAI;AACJ,MAAI,oBAAoB;AACxB,MAAI,sBAAsB;AAC1B,QAAM,OAAO,OAAO,KAAK;AAAA,IAAI,CAAC,KAAK,aACjC,IAAI,MAAM,IAAI,CAAC,MAAM,gBAAgB;AACnC,UAAI,KAAK,eAAe,KAAK,KAAK,kBAAkB,QAAW;AAC7D,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,UAAI,KAAK,sBAAsB,UAAU;AACvC,cAAM,IAAI;AAAA,UACR;AAAA,UACA,iCAAiC,KAAK,qBAAqB,SAAS;AAAA,UACpE;AAAA,QACF;AAAA,MACF;AACA,UAAI,KAAK,OAAO,WAAW,KAAK,KAAK,OAAO,CAAC,GAAG,SAAS,aAAa;AACpE,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,YAAM,eACJ,KAAK,QAAQ,KAAK,KAAK,YAAY,MAAM,SAAS,aAAa,KAAK,IAAI,IAAI;AAC9E,UAAI,cAAc;AAChB,YAAI,YAAY,sBAAsB;AACpC,gBAAM,IAAI,gCAAgC,YAAY,qBAAqB,aAAa;AAAA,QAC1F;AACA,YAAI,cAAc,eAAe,cAAc;AAC7C,gBAAM,IAAI;AAAA,YACR;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AACA,qBAAa;AACb,6BAAqB;AAAA,MACvB,WAAW,WAAW,sBAAsB;AAC1C,+BAAuB;AAAA,MACzB;AACA,YAAM,YAAY,KAAK,OAAO,CAAC;AAC/B,UACE,UAAU,QAAQ,KAAK,CAAC,WAAW,OAAO,SAAS,WAAW,KAC9D,UAAU,eAAe,SAAS,GAClC;AACA,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,YAAM,YAAY,qBAAqB,UAAU,SAAS,QAAQ,WAAW;AAC7E;AAAA,QACE,EAAE,GAAG,UAAU,WAAW,GAAG,UAAU,MAAM;AAAA,QAC7C,UAAU;AAAA,QACV;AAAA,MACF;AACA,UAAI,KAAK,OAAO;AACd,cAAM,WAAW,OAAO,mBAAmB,WAAW;AACtD,YACE,KAAK,MAAM,SAAS,QACpB,aAAa,UACb,KAAK,IAAI,KAAK,MAAM,QAAQ,QAAQ,IAAI,MACxC;AACA,gBAAM,IAAI;AAAA,YACR;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,aAAO,UAAU,QAAQ,IAAI,CAAC,WAAW;AACvC,YAAI,OAAO,SAAS,MAAO,OAAM,IAAI,MAAM,2CAA2C;AACtF,YAAI,OAAO;AACT,gBAAM,IAAI;AAAA,YACR;AAAA,YACA;AAAA,YACA;AAAA,UACF;AACF,cAAM,WAAW,qBAAqB,OAAO,SAAS,QAAQ,WAAW,EAAE;AAC3E,eAAO,IAAI;AAAA,UACT,OAAO;AAAA,UACP,oBAAoB,EAAE,GAAG,UAAU,KAAK,GAAG,UAAU,GAAG,OAAO,MAAM,CAAC;AAAA,QACxE;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACA,MAAI,oBAAoB,KAAK,sBAAsB,GAAG;AACpD,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,SAAS,KAAK,UAAU,KAAK,eAAe,KAAK;AACvD,MACE,OAAO,mBAAmB,SAAS,MAClC,OAAO,mBAAmB,WAAW,eACpC,OAAO,mBAAmB,KAAK,CAAC,UAAU,CAAC,OAAO,SAAS,KAAK,KAAK,SAAS,CAAC,IACjF;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,SACJ,OAAO,mBAAmB,WAAW,cAAc,OAAO,qBAAqB;AACjF,QAAM,UACJ,OAAO,OAAO,SAAS,OACnB,OAAO,MAAM,QACZ,QAAQ,OAAO,CAAC,OAAO,UAAU,QAAQ,OAAO,CAAC,KAAK;AAC7D,MAAI,OAAO,SAAS,OAAO,MAAM,SAAS,QAAQ,OAAO,MAAM,SAAS,QAAQ;AAC9E,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MACE,OAAO,OAAO,SAAS,QACvB,UACA,KAAK,IAAI,OAAO,MAAM,QAAQ,OAAO,OAAO,CAAC,OAAO,UAAU,QAAQ,OAAO,CAAC,CAAC,IAAI,MACnF;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MAAI,OAAO,aAAa,OAAO,cAAc,UAAU,OAAO,cAAc,SAAS;AACnF,UAAM,IAAI;AAAA,MACR;AAAA,MACA,mBAAmB,OAAO,SAAS;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AACA,MAAI,OAAO,WAAW,SAAS;AAC7B,UAAM,IAAI,gCAAgC,YAAY,uBAAuB,aAAa;AAAA,EAC5F;AACA,QAAM,gBAAgB,2BAA2B,MAAM;AACvD,QAAM,cAAc,2BAA2B,OAAO,OAAO;AAC7D,MACE,CAAC,OAAO,UACR,OAAO,OAAO,SAAS,QACvB,KAAK,IAAI,OAAO,OAAO,QAAQ,aAAa,IAAI,MAChD;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO;AAAA,IACL;AAAA,IACA,OAAO;AAAA,MACL;AAAA,MACA,GAAI,SAAS,EAAE,gBAAgB,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC;AAAA,MAChD,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,MACA,GAAI,aAAa,EAAE,WAAW,IAAI,CAAC;AAAA,MACnC,GAAI,CAAC,cAAc,EAAE,eAAe,KAAK,IAAI,CAAC;AAAA,IAChD;AAAA,EACF;AACF;AAEA,SAAS,qBACP,UACA,QACA,QACA,SACA,SACA,QACA,WACA,YACM;AACN,QAAM,QAAQ,CACZ,YACA,WACA,YACS;AACT,eAAW,aAAa,YAAY;AAClC,YAAM,MACJ,UAAU,SAAS,YACf,YACA,UAAU,SAAS,UACjB,UACA,UAAU,SAAS,SACjB,SACA;AACV,UAAI,CAAC;AACH,cAAM,IAAI;AAAA,UACR;AAAA,UACA,yBAAyB,UAAU,IAAI;AAAA,UACvC;AAAA,QACF;AACF,YAAM,gBAAgB,UAAU,IAAI,UAAU,QAAQ;AACtD,UAAI,CAAC;AACH,cAAM,IAAI,MAAM,0CAA0C,UAAU,QAAQ,EAAE;AAChF,YAAM,QAAQ,QAAQ,GAAG;AACzB,UAAI,MAAM,MAAM,SAAS;AACvB,cAAM,IAAI,MAAM,yBAAyB,GAAG,gCAAgC;AAC9E,UAAI,wBAAwB,aAAa,EAAG;AAC5C,iBAAW,SAAS,cAAc;AAChC;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,OAAO;AAAA,QACT;AAAA,IACJ;AAAA,EACF;AACA,QAAM,OAAO,SAAS,SAAS,OAAO,OAAO;AAC7C,QAAM,OAAO,SAAS,SAAS,OAAO,OAAO;AAC/C;AAEA,SAAS,wBAAwB,OAAsC;AACrE,QAAM,QAAQ,MAAM,OAAO,CAAC;AAC5B,SACE,MAAM,OAAO,WAAW,KACxB,OAAO,SAAS,eAChB,MAAM,YAAY,UAClB,OAAO,KAAK,MAAM,KAAK,EAAE,WAAW,KACpC,MAAM,eAAe,WAAW,KAChC,MAAM,QAAQ;AAAA,IACZ,CAAC,WACC,OAAO,SAAS,SAChB,OAAO,KAAK,WAAW,KACvB,OAAO,YAAY,UACnB,OAAO,KAAK,OAAO,KAAK,EAAE,WAAW;AAAA,EACzC;AAEJ;AAEA,SAAS,eACP,UACA,UACA,YACA,QACM;AAEN,QAAM,OAAO,IAAI,IAAI,SAAS,IAAI,CAAC,YAAY,CAAC,QAAQ,IAAI,OAA0B,CAAC,CAAC;AACxF,QAAM,QAA2B,CAAC;AAClC,QAAM,kBAAkB,oBAAI,IAA+B;AAC3D,aAAW,OAAO,UAAU;AAC1B,UAAM,UAAU;AAChB,QAAI,QAAQ,aAAa,OAAW,OAAM,KAAK,OAAO;AAAA,QACjD,WAAU,iBAAiB,QAAQ,UAAU,OAAO;AAAA,EAC3D;AACA,QAAM,mBAAmB,oBAAI,IAQ3B;AAGF,aAAW,eAAe,WAAW,OAAO,GAAG;AAC7C,eAAW,EAAE,QAAQ,OAAO,KAAK,aAAa;AAC5C,YAAM,UAAU,oBAAI,IAAiD;AACrE,iBAAW,UAAU,OAAO,eAAgB,WAAU,SAAS,OAAO,WAAW,MAAM;AACvF,iBAAW,CAAC,WAAW,MAAM,KAAK,SAAS;AACzC,cAAM,QACJ,OAAO,KAAK,CAAC,WAAW,OAAO,SAAS,OAAO,GAAG,cAClD,OAAO,KAAK,CAAC,WAAW,OAAO,SAAS,WAAW,GAAG;AACxD,cAAM,MAAM,OAAO,KAAK,CAAC,WAAW,OAAO,SAAS,KAAK,GAAG,cAAc;AAC1E,YAAI,UAAU,UAAa,QAAQ,QAAW;AAC5C,gBAAM,IAAI,MAAM,oBAAoB,SAAS,2BAA2B;AAAA,QAC1E;AACA,kBAAU,kBAAkB,WAAW,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;AAAA,MACvE;AAAA,IACF;AAAA,EACF;AACA,aAAW,QAAQ,OAAO;AACxB,UAAM,UAAU,iBAAiB,IAAI,KAAK,EAAE,KAAK,CAAC;AAClD,UAAM,YAAY,IAAI,IAAI,QAAQ,IAAI,CAAC,UAAU,MAAM,OAAO,EAAE,CAAC;AACjE,QAAI,QAAQ,WAAW,KAAK,UAAU,SAAS;AAC7C,YAAM,IAAI,MAAM,oBAAoB,KAAK,EAAE,2CAA2C;AACxF,QAAI,QAAQ,SAAS,GAAG;AACtB,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,UAAM,WAAW,oBAAoB,MAAM,MAAM;AACjD,uCAAmC,KAAK,UAAU,WAAW,KAAK,QAAQ;AAC1E,UAAM,UAAU,gBAAgB,IAAI,KAAK,EAAE,KAAK,CAAC;AACjD,eAAW,SAAS,SAAS;AAC3B,YAAM,SAAS,SAAS,SAAS;AAAA,QAC/B,EAAE,OAAO,MAAM,QAAQ,OAAO,MAAM,OAAO,KAAK,MAAM,IAAI;AAAA,QAC1D;AAAA,QACA;AAAA,UACE,QAAQ,KAAK,UAAU;AAAA,UACvB,WAAW,uBAAuB,KAAK,SAAS;AAAA,UAChD,UAAU,KAAK,YAAY;AAAA,QAC7B;AAAA,MACF;AACA,iBAAW,SAAS,SAAS;AAC3B,2CAAmC,MAAM,UAAU,WAAW,MAAM,QAAQ;AAC5E,eAAO;AAAA,UACL,oBAAoB,OAAO,MAAM;AAAA,UACjC,MAAM,UAAU;AAAA,UAChB,uBAAuB,MAAM,SAAS;AAAA,QACxC;AAAA,MACF;AAAA,IACF;AACA,SAAK,OAAO,KAAK,EAAE;AACnB,eAAW,SAAS,QAAS,MAAK,OAAO,MAAM,EAAE;AAAA,EACnD;AACA,MAAI,KAAK,OAAO;AACd,UAAM,IAAI,MAAM,+CAA+C,CAAC,GAAG,KAAK,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;AAChG;AAEA,SAAS,qBACP,UACA,UACA,YACM;AACN,aAAW,UAAU,SAAS,gBAAgB;AAC5C,UAAM,cAAc,WAAW,IAAI,OAAO,OAAO;AACjD,QAAI,CAAC,eAAe,YAAY,WAAW;AACzC,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACF,QAAI,YAAY,SAAS,GAAG;AAC1B,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,UAAM,WAAW;AACjB,eAAW,aAAa,aAAa;AACnC,YAAM,QACJ,SAAS,mBACT,wBAAwB,UAAU,QAAQ,OAAO,gBAAgB;AACnE,YAAM,MACJ,SAAS,iBAAiB,wBAAwB,UAAU,QAAQ,OAAO,cAAc;AAC3F,eAAS,QAAQ;AAAA,QACf,EAAE,OAAO,UAAU,QAAQ,OAAO,IAAI;AAAA,QACtC,OAAO;AAAA,QACP,OAAO,UAAU;AAAA,QACjB,uBAAuB,OAAO,SAAS;AAAA,MACzC;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,iCAAiC,UAA0B;AAClE,QAAM,kBAAkB,oBAAI,IAAqC;AACjE,aAAW,WAAW,SAAS,SAAS,OAAO;AAC7C,cAAU,iBAAiB,QAAQ,SAAS,OAAO;AAAA,EACrD;AACA,QAAM,iBAAiB,oBAAI,IAA6B;AACxD,aAAW,UAAU,SAAS,QAAQ,OAAO;AAC3C,cAAU,gBAAgB,OAAO,SAAS,MAAM;AAAA,EAClD;AACA,aAAW,SAAS,SAAS,eAAe,GAAG;AAC7C,QAAI,EAAE,iBAAiB,mBAAoB;AAC3C,UAAM,WAAW,gBAAgB,IAAI,MAAM,EAAE,KAAK,CAAC;AACnD,UAAM,UAAU,eAAe,IAAI,MAAM,EAAE,KAAK,CAAC;AACjD,gCAA4B,QAAQ;AACpC,kCAA8B,OAAO;AACrC,gCAA4B,OAAO,UAAU,OAAO;AAAA,EACtD;AACF;AAEA,SAAS,qBACP,SACA,QACA,cACA,OAAO,oBAAI,IAAY,GACvB,eAAe,MACQ;AACvB,QAAM,WAAW,GAAG,YAAY,IAAI,eAAe,YAAY,QAAQ,IAAI,WAAW,EAAE;AACxF,QAAM,QACJ,mBAAmB,IAAI,MAAgB,KAAK,oBAAI,IAAmC;AACrF,MAAI,CAAC,mBAAmB,IAAI,MAAgB,EAAG,oBAAmB,IAAI,QAAkB,KAAK;AAC7F,MAAI,KAAK,SAAS,GAAG;AACnB,UAAM,SAAS,MAAM,IAAI,QAAQ;AACjC,QAAI,OAAQ,QAAO;AAAA,EACrB;AACA,MAAI,CAAC,SAAS;AACZ,QAAI,CAAC,cAAc;AACjB,YAAM,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,EAAE;AACvC,UAAI,KAAK,SAAS,EAAG,OAAM,IAAI,UAAU,KAAK;AAC9C,aAAO;AAAA,IACT;AACA,UAAM,WAAW,CAAC,GAAG,OAAO,OAAO,CAAC,EAAE;AAAA,MACpC,CAACC,WAAUA,OAAM,aAAaA,OAAM,SAAS;AAAA,IAC/C;AACA,QAAI,SAAS,SAAS,GAAG;AACvB,YAAM,IAAI,MAAM,0CAA0C,YAAY,SAAS;AAAA,IACjF;AACA,UAAM,eAAe,SAAS,CAAC;AAC/B,UAAMC,YAAW,eACb,qBAAqB,aAAa,SAAS,QAAQ,cAAc,MAAM,KAAK,IAC5E,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,EAAE;AAC7B,QAAI,KAAK,SAAS,EAAG,OAAM,IAAI,UAAUA,SAAQ;AACjD,WAAOA;AAAA,EACT;AACA,MAAI,KAAK,IAAI,OAAO,EAAG,OAAM,IAAI,MAAM,gCAAgC,OAAO,EAAE;AAChF,QAAM,QAAQ,OAAO,IAAI,OAAO;AAChC,MAAI,CAAC,OAAO;AACV,QAAI,CAAC,UAAU,wBAAwB,eAAe,EAAE,SAAS,OAAO,GAAG;AACzE,aAAO,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,EAAE;AAAA,IAClC;AACA,UAAM,IAAI,MAAM,0CAA0C,OAAO,EAAE;AAAA,EACrE;AACA,MAAI,MAAM,SAAS,cAAc;AAC/B,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,YAAY,kBAAkB,MAAM,IAAI,UAAU,OAAO;AAAA,MAC5D;AAAA,IACF;AAAA,EACF;AACA,QAAM,YACJ,iBAAiB,cACb,YAAY,YACZ,YAAY,mBACZ,0BAA0B,KAAK,OAAO,IACtC,YAAY;AAClB,MAAI,CAAC,WAAW;AACd,UAAM,IAAI;AAAA,MACR;AAAA,MACA,gBAAgB,YAAY,UAAU,OAAO;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AACA,OAAK,IAAI,OAAO;AAChB,QAAM,SAAS,qBAAqB,MAAM,SAAS,QAAQ,cAAc,MAAM,KAAK;AACpF,OAAK,OAAO,OAAO;AACnB,QAAM,WAAW;AAAA,IACf,WAAW,EAAE,GAAG,OAAO,WAAW,GAAG,MAAM,UAAU;AAAA,IACrD,KAAK,EAAE,GAAG,OAAO,KAAK,GAAG,MAAM,IAAI;AAAA,EACrC;AACA,MAAI,KAAK,SAAS,EAAG,OAAM,IAAI,UAAU,QAAQ;AACjD,SAAO;AACT;AAEA,SAAS,0BACP,OACA,SACA,WACwB;AACxB,MAAI,MAAM;AACR,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACF,OACG,MAAM,gBAAgB,OAAO,MAC7B,MAAM,iBAAiB,OAAO,MAC9B,MAAM,eAAe,OAAO,MAC5B,MAAM,aAAa,OAAO,GAC3B;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MAAI,MAAM;AACR,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACF,MAAI,MAAM,YAAY,MAAM,aAAa;AACvC,UAAM,IAAI;AAAA,MACR;AAAA,MACA,uBAAuB,MAAM,QAAQ;AAAA,MACrC;AAAA,IACF;AACF,QAAM,eAAe,+BAA+B,KAAK,WAAW,EAAE;AACtE,QAAM,uBAAuB,eACxB,OAAO,aAAa,CAAC,CAAC,IACvB;AACJ,MACE,MAAM,iBAAiB,WACtB,MAAM,eAAe,KACpB,MAAM,eAAe,KACrB,yBAAyB,UACzB,MAAM,eAAe,MAAM,uBAC7B;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA,iBAAiB,MAAM,YAAY;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AACA,QAAM,iBACJ,MAAM,cAAc,SAChB,YACA,MAAM,cAAc,WAClB,WACA,MAAM,cAAc,WAAW,MAAM,cAAc,QACjD,UACA,MAAM,cAAc,UAAU,MAAM,cAAc,UAChD,SACA;AACZ,MAAI,MAAM,aAAa,CAAC;AACtB,UAAM,IAAI;AAAA,MACR;AAAA,MACA,uBAAuB,MAAM,SAAS;AAAA,MACtC;AAAA,IACF;AACF,QAAM,OAAO,MAAM;AACnB,QAAM,WAAW,OAAO,UAAU,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,IAAI;AACrE,MAAI,QAAQ,CAAC;AACX,UAAM,IAAI,MAAM,mDAAmD,KAAK,KAAK,IAAI,KAAK,KAAK,EAAE;AAC/F,SAAO;AAAA,IACL,GAAI,uBAAuB,EAAE,cAAc,qBAAqB,IAAI,CAAC;AAAA,IACrE,GAAI,iBAAiB,EAAE,WAAW,eAAe,IAAI,CAAC;AAAA,IACtD,GAAI,MAAM,kBAAkB,SAAY,EAAE,eAAe,MAAM,cAAc,IAAI,CAAC;AAAA,IAClF,GAAI,MAAM,iBAAiB,SAAY,EAAE,cAAc,MAAM,aAAa,IAAI,CAAC;AAAA,IAC/E,GAAI,MAAM,SAAS,SAAY,EAAE,YAAY,MAAM,OAAO,IAAI,IAAI,CAAC;AAAA,IACnE,GAAI,MAAM,aAAa,SAAY,EAAE,UAAU,MAAM,SAAS,IAAI,CAAC;AAAA,IACnE,GAAI,MAAM,oBAAoB,SAAY,EAAE,iBAAiB,MAAM,gBAAgB,IAAI,CAAC;AAAA,IACxF,GAAI,QAAQ,WACR,EAAE,MAAM,EAAE,MAAM,UAAU,OAAO,KAAK,OAAO,YAAY,KAAK,MAAM,EAAE,IACtE,CAAC;AAAA,EACP;AACF;AAEA,SAAS,oBAAoB,OAA4C;AACvE,MAAI,MAAM,aAAa,MAAM,cAAc;AACzC,UAAM,IAAI,gCAAgC,YAAY,qBAAqB,aAAa;AAC1F,MAAI,MAAM,iBAAiB,MAAM,kBAAkB;AACjD,UAAM,IAAI;AAAA,MACR;AAAA,MACA,2BAA2B,MAAM,aAAa;AAAA,MAC9C;AAAA,IACF;AACF,MACE,MAAM,4BAA4B,UAClC,MAAM,4BAA4B,MAAM,YACxC;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,OAAK,MAAM,qBAAqB,YAAY,MAAM,QAAQ,QAAQ;AAChE,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,OAAK,MAAM,uBAAuB,YAAY,MAAM,UAAU,QAAQ;AACpE,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MAAI,MAAM,UAAU;AAClB,UAAM,IAAI,gCAAgC,YAAY,yBAAyB,aAAa;AAAA,EAC9F;AACA,SAAO;AAAA,IACL,GAAI,MAAM,aAAa,EAAE,YAAY,MAAM,WAAW,IAAI,CAAC;AAAA,IAC3D,GAAI,MAAM,eAAe,SAAY,EAAE,YAAY,MAAM,WAAW,IAAI,CAAC;AAAA,IACzE,GAAI,MAAM,SAAS,MAAM,UAAU,SAAS,EAAE,OAAO,aAAa,MAAM,KAAK,EAAE,IAAI,CAAC;AAAA,IACpF,GAAI,MAAM,SAAS,SAAY,EAAE,MAAM,MAAM,KAAK,IAAI,CAAC;AAAA,IACvD,GAAI,MAAM,WAAW,SAAY,EAAE,QAAQ,MAAM,OAAO,IAAI,CAAC;AAAA,IAC7D,GAAI,MAAM,cAAc,SAAY,EAAE,WAAW,MAAM,cAAc,OAAO,IAAI,CAAC;AAAA,IACjF,GAAI,MAAM,WAAW,SAAY,EAAE,QAAQ,MAAM,OAAO,IAAI,CAAC;AAAA,EAC/D;AACF;AAEA,SAAS,aAAa,SAAgD;AACpE,SAAO;AAAA,IACL,SAAS,QAAQ,KAAK;AAAA,IACtB,UAAU,QAAQ,KAAK;AAAA,IACvB,aAAa,QAAQ,KAAK;AAAA,IAC1B,eAAe,QAAQ,KAAK;AAAA,IAC5B,gBAAgB,QAAQ,KAAK;AAAA,IAC7B,cAAc,QAAQ,KAAK;AAAA,IAC3B,UAAU,QAAQ,KAAK;AAAA,IACvB,UAAU,QAAQ,KAAK;AAAA,IACvB,UAAU,QAAQ,KAAK;AAAA,EACzB;AACF;AAEA,SAAS,yBACP,UACA,UACM;AACN,MAAI,SAAS,WAAW,EAAG,OAAM,IAAI,MAAM,+BAA+B;AAC1E,QAAM,kBAAkB,oBAAI,IAAY;AACxC,MAAI,gBAAgB;AACpB,aAAW,WAAW,UAAU;AAC9B,eAAW,aAAa,CAAC,GAAG,QAAQ,SAAS,GAAG,QAAQ,OAAO,GAAG;AAChE,UAAI,gBAAgB,IAAI,UAAU,QAAQ,GAAG;AAC3C,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,sBAAgB,IAAI,UAAU,QAAQ;AAAA,IACxC;AACA,QACE,QAAQ,oBAAoB,iBAC5B,CAAC,OAAO,cAAc,QAAQ,aAAa,KAC3C,QAAQ,gBAAgB,QAAQ,mBAChC,QAAQ,gBAAgB,SAAS,OAAO,QACxC;AACA,YAAM,IAAI,MAAM,gEAAgE;AAAA,IAClF;AACA,oBAAgB,QAAQ;AACxB,QAAI,QAAQ,SAAS,UAAa,QAAQ,SAAS,YAAY;AAC7D,YAAM,IAAI;AAAA,QACR;AAAA,QACA,sBAAsB,QAAQ,IAAI;AAAA,QAClC;AAAA,MACF;AAAA,IACF;AACA,UAAM,cAAc,QAAQ,KAAK;AACjC,QAAI,gBAAgB,UAAa,gBAAgB,cAAc,gBAAgB,aAAa;AAC1F,YAAM,IAAI;AAAA,QACR;AAAA,QACA,oBAAoB,WAAW;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AACA,QACG,gBAAgB,eAAe,QAAQ,KAAK,UAAU,QAAQ,KAAK,YACnE,gBAAgB,cAAc,QAAQ,KAAK,UAAU,QAAQ,KAAK,UACnE;AACA,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,UAAM,gBAAgB,CAAC,GAAG,QAAQ,SAAS,GAAG,QAAQ,OAAO,EAAE;AAAA,MAC7D,CAAC,cAAc,UAAU,SAAS;AAAA,IACpC;AACA,QAAI,QAAQ,aAAa,CAAC,eAAe;AACvC,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,MAAI,kBAAkB,SAAS,OAAO,QAAQ;AAC5C,UAAM,IAAI,MAAM,mDAAmD;AAAA,EACrE;AACA,QAAM,eAAe,SAAS;AAAA,IAAK,CAAC,YAClC,CAAC,GAAG,QAAQ,SAAS,GAAG,QAAQ,OAAO,EAAE,KAAK,CAAC,cAAc,UAAU,SAAS,MAAM;AAAA,EACxF;AACA,MAAI,SAAS,qBAAqB,CAAC,cAAc;AAC/C,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,kBACP,OAC+C;AAC/C,QAAM,SAAS,oBAAI,IAA8C;AACjE,aAAW,QAAQ,OAAO;AACxB,QAAI,oBAAoB;AACxB,eAAW,YAAY,KAAK,WAAW;AACrC,UAAI,SAAS,cAAe,SAAS,UAAU,UAAa,SAAS,UAAU,GAAI;AACjF,4BAAoB;AAAA,MACtB;AAAA,IACF;AACA,UAAM,SAAS,oBAAI,IAAiC;AACpD,QAAI,sBAAsB;AAC1B,eAAW,SAAS,KAAK,QAAQ;AAC/B,UACE,MAAM,UAAU,KAChB,MAAM,YAAY,UAClB,MAAM,UAAU,UACf,MAAM,WAAW,YAAY,MAAM,WAAW,WAC/C;AACA,8BAAsB;AACtB;AAAA,MACF;AACA,YAAM,eAAe;AACrB,YAAM,eAAe,MAAM,WAAW,YAAY,IAAI,MAAM,QAAQ,CAAC,MAAM;AAC3E,YAAM,kBACJ,MAAM,WAAW,YAAY,MAAM,SAAS,CAAC,UAAK,UAAK,QAAG,EAAE,MAAM,QAAQ,CAAC;AAC7E,YAAM,mBAAmB,OAAO,QAAQ,MAAM,SAAS;AACvD,YAAM,oBACJ,MAAM,UAAU,iBAAiB,UACjC,KAAK,IAAI,MAAM,UAAU,eAAe,MAAM,MAAM,QAAQ,EAAE,KAAK,QACnE,MAAM,UAAU,cAAc,UAC9B,KAAK,IAAI,MAAM,UAAU,YAAY,EAAE,KAAK;AAC9C,YAAM,qBAAqB,iBAAiB;AAAA,QAC1C,CAAC,CAAC,GAAG,MAAM,QAAQ,kBAAkB,QAAQ;AAAA,MAC/C;AACA,UACG,MAAM,WAAW,aAAa,MAAM,SAAS,gBAC7C,MAAM,WAAW,YAAY,CAAC,mBAC9B,MAAM,WAAW,UAAa,MAAM,WAAW,SAChD,MAAM,qBAAqB,UAC1B,aAAa,cAAc,UAAa,aAAa,cAAc,UACpE,CAAC,qBACD,CAAC,sBACD,OAAO,KAAK,MAAM,GAAG,EAAE,SAAS,GAChC;AACA,8BAAsB;AACtB;AAAA,MACF;AACA,aAAO,IAAI,MAAM,OAAO,MAAM,WAAW,WAAW,WAAW,QAAQ;AAAA,IACzE;AACA,WAAO,IAAI,KAAK,OAAO,qBAAqB,sBAAsB,SAAS,oBAAI,IAAI,CAAC;AAAA,EACtF;AACA,SAAO;AACT;AAEA,SAAS,sCACP,OACA,SACA,WACM;AACN,QAAM,YAAY,0BAA0B,OAAO,SAAS,SAAS;AACrE,QAAM,YAAY,OAAO,QAAQ,SAAS,EAAE;AAAA,IAC1C,CAAC,CAAC,KAAK,KAAK,MACV,EACG,QAAQ,eAAe,UAAU,UACjC,QAAQ,mBAAmB,UAAU,KACrC,QAAQ,kBAAkB,UAAU;AAAA,EAE3C;AACA,MAAI,UAAU,SAAS,GAAG;AACxB,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,2BAA2B,QAA+B;AACjE,QAAM,qBACJ,OAAO,gBAAgB,UACvB,OAAO,KAAK,KAAK,CAAC,QAAQ,IAAI,MAAM,KAAK,CAAC,SAAS,KAAK,YAAY,MAAS,CAAC;AAChF,MAAI,CAAC,oBAAoB;AACvB,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,SAAmB,CAAC;AAC1B,aAAW,OAAO,OAAO,MAAM;AAC7B,eAAW,QAAQ,IAAI,OAAO;AAC5B,iBAAW,QAAQ,CAAC,OAAO,SAAS,UAAU,MAAM,GAAY;AAC9D,cAAM,UAAU,WAAW,KAAK,SAAS,IAAI,KAAK,WAAW,OAAO,aAAa,IAAI;AACrF,YAAI,CAAC,WAAW,QAAQ,SAAS,QAAQ,CAAC,OAAO,SAAS,QAAQ,KAAK,GAAG;AACxE,gBAAM,IAAI;AAAA,YACR;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AACA,eAAO,KAAK,QAAQ,KAAK;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AACA,QAAM,QAAQ,OAAO,CAAC;AACtB,MAAI,UAAU,UAAa,OAAO,KAAK,CAAC,UAAU,KAAK,IAAI,QAAQ,KAAK,IAAI,IAAI,GAAG;AACjF,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,WACP,KACA,MACgE;AAChE,MAAI,CAAC,IAAK,QAAO;AACjB,MAAI,SAAS,OAAQ,QAAO,IAAI,QAAQ,IAAI;AAC5C,MAAI,SAAS,QAAS,QAAO,IAAI,SAAS,IAAI;AAC9C,SAAO,IAAI,IAAI;AACjB;AAEA,SAAS,2BAA2B,SAA2C;AAC7E,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,QAA2C;AAAA,IAC/C,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AACA,MAAI,MAAM,KAAK,CAAC,SAAS,SAAS,MAAS,GAAG;AAC5C,UAAM,IAAI,gCAAgC,YAAY,yBAAyB,aAAa;AAAA,EAC9F;AACA,QAAM,SAAS,MAAM,IAAI,CAAC,SAAS;AACjC,QACE,MAAM,UAAU,YAChB,KAAK,WAAW,UAChB,KAAK,IAAI,KAAK,SAAS,GAAG,IAAI,SAC7B,KAAK,WAAW,OAAO,KACxB,KAAK,WAAW,QAChB,KAAK,UAAU,QACf,CAAC,KAAK,SACN,KAAK,MAAM,YAAY,MAAM,QAC7B;AACA,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,WAAO,aAAa,KAAK,KAAK;AAAA,EAChC,CAAC;AACD,QAAM,QAAQ,OAAO,CAAC;AACtB,MAAI,OAAO,KAAK,CAAC,UAAU,UAAU,KAAK,GAAG;AAC3C,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,gBACP,WACA,QACS;AACT,QAAM,YAAY,qBAAqB,UAAU,SAAS,QAAQ,WAAW;AAC7E,SACE,UAAU,QAAQ,WAAW,KAC7B,UAAU,QAAQ,CAAC,GAAG,SAAS,eAC/B,UAAU,eAAe,WAAW,KACpC,OAAO,KAAK,EAAE,GAAG,UAAU,WAAW,GAAG,UAAU,MAAM,CAAC,EAAE,WAAW,KACvE,OAAO,KAAK,UAAU,GAAG,EAAE,WAAW;AAE1C;AAEA,SAAS,oBACP,SACA,QACQ;AACR,QAAM,YAAY,QAAQ,OAAO,CAAC;AAClC,MACE,QAAQ,OAAO,WAAW,KAC1B,WAAW,SAAS,eACpB,UAAU,YAAY,UACtB,OAAO,KAAK,UAAU,KAAK,EAAE,SAAS,KACtC,UAAU,QAAQ;AAAA,IAChB,CAAC,WACC,OAAO,SAAS,SAChB,OAAO,YAAY,UACnB,OAAO,KAAK,OAAO,KAAK,EAAE,SAAS;AAAA,EACvC,KACA,UAAU,eAAe,SAAS,GAClC;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAGA,QAAM,WAAW,qBAAqB,QAAW,QAAQ,WAAW;AACpE,MAAI,OAAO,KAAK,SAAS,SAAS,EAAE,SAAS,KAAK,OAAO,KAAK,SAAS,GAAG,EAAE,SAAS,GAAG;AACtF,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO,UAAU,QAAQ,IAAI,CAAC,WAAY,OAAO,SAAS,QAAQ,OAAO,OAAO,EAAG,EAAE,KAAK,EAAE;AAC9F;AAEA,SAAS,wBAAwB,WAA8B,OAAuB;AACpF,MAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,KAAK,QAAQ,UAAU,QAAQ;AACrE,UAAM,IAAI,MAAM,iDAAiD;AACnE,SAAO,UAAU,QACd,MAAM,GAAG,KAAK,EACd,OAAO,CAAC,OAAO,WAAW,SAAS,OAAO,SAAS,QAAQ,OAAO,KAAK,SAAS,IAAI,CAAC;AAC1F;AAEA,SAAS,uBAAuB,OAAmC;AACjE,MAAI,CAAC,OAAO;AACV,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,MAAI,CAAC,OAAO,SAAS,KAAK,QAAQ,CAAC;AACjC,UAAM,IAAI,MAAM,gDAAgD,KAAK,EAAE;AACzE,SAAO,KAAK,YAAY;AAC1B;AAeA,SAAS,iBAAiB,UAAoB,MAA+B;AAC3E,QAAM,kBAAkB,oBAAI,IAG1B;AACF,QAAM,qBAAuD,CAAC;AAC9D,MAAI,YAAY;AAChB,aAAW,UAAU,SAAS,SAAS,OAAO;AAC5C,UAAM,SAAS;AACf,cAAU,iBAAiB,OAAO,SAAS,EAAE,QAAQ,WAAW,OAAO,CAAC;AACxE,WAAO,QAAQ,QAAQ,CAAC,OAAO,UAAU;AACvC,YAAM,KAAK,UAAU,IAAI,SAAS;AAClC,yBAAmB,KAAK;AAAA,QACtB;AAAA,QACA,GAAI,QAAQ,IAAI,EAAE,UAAU,OAAO,IAAI,CAAC;AAAA,QACxC,QAAQ,MAAM;AAAA,QACd,UAAU,SAAS,MAAM,MAAM;AAAA,QAC/B,MAAM,IAAI,KAAK,MAAM,SAAS;AAAA,QAC9B,GAAI,UAAU,IAAI,EAAE,UAAU,OAAO,SAAS,IAAI,CAAC;AAAA,QACnD,UAAU;AAAA,UACR,IAAI,KAAK,UAAU;AAAA,YACjB,UAAU,CAAC,IAAI,KAAK,QAAQ,mBAAmB,MAAM,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,UACvE,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACA,QAAM,iBAAiB,oBAAI,IAAiE;AAC5F,WAAS,QAAQ,MAAM;AAAA,IAAQ,CAAC,QAAQ,cACtC,UAAU,gBAAgB,OAAO,SAAS,EAAE,QAAQ,UAAU,CAAC;AAAA,EACjE;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe,mBAAmB,QAAQ;AAAA,EAC5C;AACF;AAEA,SAAS,iBACP,SACA,MACA,MACA,SAKA;AACA,QAAM,OAAO,CACX,OACA,cAC8D;AAC9D,QAAI,MAAM,MAAM,WAAW,KAAK,CAAC,UAAW,QAAO;AACnD,UAAMC,YACJ,MAAM,MAAM,SAAS,IACjB,MAAM,MAAM,IAAI,CAAC,UAAU,YAAY,OAAO,MAAM,MAAM,OAAO,CAAC,IAClE,CAAC,IAAI,KAAK,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;AAC3C,WAAO,MAAM,SAAS,WAAW,IAAI,KAAK,OAAO,EAAE,UAAAA,UAAS,CAAC,IAAI,IAAI,KAAK,OAAO,EAAE,UAAAA,UAAS,CAAC;AAAA,EAC/F;AACA,QAAM,SAIF,CAAC;AAIL,QAAM,eAAe,KAAK,QAAQ,SAAS,IAAI;AAC/C,QAAM,aAAa,KAAK,QAAQ,OAAO,IAAI;AAC3C,QAAM,YAAY,KAAK,QAAQ,MAAM,IAAI;AACzC,MAAI,aAAc,QAAO,UAAU;AACnC,MAAI,WAAY,QAAO,QAAQ;AAC/B,MAAI,UAAW,QAAO,OAAO;AAC7B,SAAO;AACT;AAEA,SAAS,YACP,OACA,MACA,MACA,SACW;AACX,MAAI,iBAAiB,mBAAmB;AACtC,WAAO,IAAI,KAAK,UAAU,EAAE,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE,CAAC;AAAA,EAChE;AACA,MAAI,iBAAiB,cAAe,QAAO,YAAY,OAAO,MAAM,IAAI;AACxE,QAAM,UAAU,aAAa,MAAM,MAAM,cAAc,IAAI;AAC3D,QAAM,qBAAqB,UAAU,MAAM,MAAM,WAAW,IAAI;AAChE,QAAM,UAAU;AAAA,IACd,GAAI,MAAM,MAAM,kBAAkB,SAC9B,EAAE,QAAQ,SAAS,MAAM,MAAM,aAAa,EAAE,IAC9C,CAAC;AAAA,IACL,GAAI,MAAM,MAAM,iBAAiB,SAC7B,EAAE,OAAO,SAAS,MAAM,MAAM,YAAY,EAAE,IAC5C,CAAC;AAAA,IACL,GAAI,MAAM,MAAM,eAAe,SAC3B,EAAE,MAAM,KAAK,MAAM,MAAM,MAAM,aAAa,GAAG,EAAE,IACjD,CAAC;AAAA,EACP;AACA,QAAM,OAAO,MAAM,MAAM;AACzB,SAAO,IAAI,KAAK,UAAU;AAAA,IACxB,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,IAC7B,GAAI,qBAAqB,EAAE,WAAW,mBAAmB,IAAI,CAAC;AAAA,IAC9D,GAAI,OAAO,KAAK,OAAO,EAAE,SAAS,IAAI,EAAE,QAAQ,IAAI,CAAC;AAAA,IACrD,GAAI,MAAM,MAAM,aAAa,SAAY,EAAE,UAAU,MAAM,MAAM,SAAS,IAAI,CAAC;AAAA,IAC/E,GAAI,MAAM,MAAM,oBAAoB,SAChC,EAAE,iBAAiB,MAAM,MAAM,gBAAgB,IAC/C,CAAC;AAAA,IACL,GAAI,OACA;AAAA,MACE,WAAW;AAAA,QACT,WAAW,KAAK,SAAS,WAAW,oBAAoB;AAAA,QACxD,OAAO,KAAK,SAAS;AAAA,QACrB,GAAI,QAAQ,cAAc,IAAI,MAAM,EAAE,IAClC,EAAE,UAAU,QAAQ,cAAc,IAAI,MAAM,EAAE,EAAG,IACjD,CAAC;AAAA,MACP;AAAA,IACF,IACA,CAAC;AAAA,IACL,UAAU,wBAAwB,OAAO,MAAM,OAAO;AAAA,EACxD,CAAC;AACH;AAEA,SAAS,YACP,OACA,MACA,MACsB;AACtB,QAAM,cAAc,MAAM,KAAK,CAAC,GAAG,UAAU;AAC7C,QAAM,cAAc,KAAK,UAAU,KAAK,eAAe,KAAK;AAC5D,QAAM,aACJ,MAAM,MAAM,WACZ,MAAM,MAAM,gBAAgB,OAAO,CAAC,OAAO,UAAU,QAAQ,OAAO,CAAC,KACrE;AACF,QAAM,eACJ,MAAM,MAAM,kBACZ,MAAM,KAAK,EAAE,QAAQ,YAAY,GAAG,MAAM,aAAa,WAAW;AACpE,QAAM,mBAAmB,aAAa,IAAI,QAAQ;AAIlD,QAAM,iBAAiB,iBAAiB,OAAO,CAAC,KAAK,UAAU,MAAM,OAAO,CAAC;AAC7E,QAAM,UAAU,SAAS,MAAM,MAAM,iBAAiB,CAAC;AACvD,QAAM,cAAc,aAAa,MAAM,MAAM,eAAe,SAAS,EAAE,MAAM,CAAC;AAC9E,QAAM,SAAS,EAAE,OAAO,KAAK,YAAY,QAAQ,MAAM,GAAG,OAAO,YAAY;AAC7E,SAAO,IAAI,KAAK,MAAM;AAAA,IACpB,OAAO,EAAE,MAAM,gBAAgB,MAAM,KAAK,UAAU,IAAI;AAAA,IACxD,cAAc;AAAA,IACd,QAAQ,EAAE,MAAM,SAAS,MAAM,KAAK,UAAU,IAAI;AAAA,IAClD,QAAQ,KAAK,gBAAgB;AAAA,IAC7B,SAAS,EAAE,KAAK,SAAS,QAAQ,SAAS,MAAM,SAAS,OAAO,QAAQ;AAAA,IACxE,SAAS;AAAA,MACP,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,OAAO;AAAA,MACP,kBAAkB;AAAA,MAClB,gBAAgB;AAAA,IAClB;AAAA,IACA,MAAM,MAAM,KAAK;AAAA,MACf,CAAC,KAAK,aACJ,IAAI,KAAK,SAAS;AAAA,QAChB,aAAa,YAAY,MAAM,MAAM,cAAc;AAAA,QACnD,WAAW,EAAE,MAAM,MAAM,iBAAiB;AAAA,QAC1C,UAAU,IAAI;AAAA,UACZ,CAAC,MAAM,gBACL,IAAI,KAAK,UAAU;AAAA,YACjB,OAAO;AAAA,cACL,MAAM,iBAAiB,WAAW,KAAK,SAAS,EAAE;AAAA,cAClD,MAAM,KAAK,UAAU;AAAA,YACvB;AAAA,YACA,eAAe,KAAK,cAAc;AAAA,YAClC,SAAS,EAAE,KAAK,SAAS,QAAQ,SAAS,MAAM,SAAS,OAAO,QAAQ;AAAA,YACxE,GAAI,YAAY,MAAM,MAAM,cAAc,MAAM,MAAM,MAAM,aACxD,EAAE,SAAS,EAAE,MAAM,aAAa,MAAM,MAAM,UAAU,EAAE,MAAM,CAAC,EAAE,EAAE,IACnE,CAAC;AAAA,YACL,UAAU;AAAA,cACR,IAAI,KAAK,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC,QAAQ,cAAc,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,YAC9E;AAAA,UACF,CAAC;AAAA,QACL;AAAA,MACF,CAAC;AAAA,IACL;AAAA,EACF,CAAC;AACH;AAEA,SAAS,wBACP,OACA,MACA,SACsB;AACtB,QAAM,WAAW,QAAQ,gBAAgB,IAAI,MAAM,EAAE,KAAK,CAAC;AAC3D,QAAM,UAAU,QAAQ,eAAe,IAAI,MAAM,EAAE,KAAK,CAAC;AACzD,QAAM,gBAAgB,MAAM;AAC5B,8BAA4B,SAAS,IAAI,CAAC,EAAE,OAAO,MAAM,MAAM,CAAC;AAChE,gCAA8B,QAAQ,IAAI,CAAC,EAAE,OAAO,MAAM,MAAM,CAAC;AACjE;AAAA,IACE;AAAA,IACA,SAAS,IAAI,CAAC,EAAE,OAAO,MAAM,MAAM;AAAA,IACnC,QAAQ,IAAI,CAAC,EAAE,OAAO,MAAM,MAAM;AAAA,EACpC;AACA,QAAM,aAAa,oBAAI,IAAY,CAAC,GAAG,cAAc,MAAM,CAAC;AAC5D,QAAM,WAAwE,CAAC;AAC/E,QAAM,gBAAgB,oBAAI,IAA6B;AACvD,QAAM,kBAAkB,oBAAI,IAA6B;AACzD,QAAM,kBAAkB,oBAAI,IAA6B;AACzD,MAAI,SAAS;AACb,aAAW,OAAO,MAAM,MAAM;AAC5B,UAAM,QAAQ;AACd,cAAU,IAAI,KAAK;AACnB,aAAS,KAAK,EAAE,OAAO,KAAK,QAAQ,IAAI,CAAC;AACzC,eAAW,IAAI,KAAK;AACpB,eAAW,IAAI,MAAM;AAAA,EACvB;AACA,aAAW,EAAE,OAAO,KAAK,UAAU;AACjC,eAAW,IAAI,OAAO,KAAK;AAC3B,eAAW,IAAI,OAAO,GAAG;AAAA,EAC3B;AACA,aAAW,WAAW,UAAU;AAC9B,QAAI,QAAQ,OAAO,UAAU,QAAQ,OAAO,KAAK;AAC/C,gBAAU,eAAe,QAAQ,OAAO,OAAO,OAAO;AAAA,IACxD,OAAO;AACL,gBAAU,iBAAiB,QAAQ,OAAO,OAAO,OAAO;AACxD,gBAAU,iBAAiB,QAAQ,OAAO,KAAK,OAAO;AAAA,IACxD;AAAA,EACF;AACA,aAAW,UAAU,gBAAgB,OAAO,GAAG;AAC7C,WAAO,KAAK,CAAC,MAAM,UAAU,MAAM,OAAO,MAAM,KAAK,OAAO,GAAG;AAAA,EACjE;AACA,aAAW,UAAU,gBAAgB,OAAO,GAAG;AAC7C,WAAO,KAAK,CAAC,MAAM,UAAU,MAAM,OAAO,QAAQ,KAAK,OAAO,KAAK;AAAA,EACrE;AACA,aAAW,EAAE,OAAO,KAAK,SAAS;AAChC,eAAW,IAAI,OAAO,KAAK;AAC3B,eAAW,IAAI,OAAO,GAAG;AAAA,EAC3B;AACA,QAAM,SAAS,CAAC,GAAG,UAAU,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AACnD,QAAM,gBAAgB,CAAC,GAAG,OAAO,EAAE;AAAA,IACjC,CAAC,MAAM,UAAU,KAAK,OAAO,QAAQ,MAAM,OAAO,SAAS,KAAK,OAAO,MAAM,MAAM,OAAO;AAAA,EAC5F;AACA,QAAMA,YAAiC,CAAC;AACxC,MAAI,cAAc,WAAW,GAAG;AAC9B,eAAW,EAAE,UAAU,KAAK,cAAc,IAAI,CAAC,KAAK,CAAC,GAAG;AACtD,MAAAA,UAAS;AAAA,QACP,IAAI,KAAK,kBAAkB,SAAS;AAAA,QACpC,IAAI,KAAK,gBAAgB,SAAS;AAAA,QAClC,oBAAoB,WAAW,IAAI;AAAA,MACrC;AAAA,IACF;AACA,IAAAA,UAAS,KAAK,GAAG,MAAM,KAAK,IAAI,CAAC,QAAQ,cAAc,KAAK,IAAI,CAAC,CAAC;AAClE,WAAOA;AAAA,EACT;AACA,MAAI,WAAW;AACf,MAAI,cAAc;AAClB,WAAS,QAAQ,GAAG,QAAQ,OAAO,QAAQ,SAAS;AAClD,UAAM,QAAQ,OAAO,KAAK;AAC1B,eAAW,EAAE,UAAU,KAAK,cAAc,IAAI,KAAK,KAAK,CAAC,GAAG;AAC1D,MAAAA,UAAS;AAAA,QACP,IAAI,KAAK,kBAAkB,SAAS;AAAA,QACpC,IAAI,KAAK,gBAAgB,SAAS;AAAA,QAClC,oBAAoB,WAAW,IAAI;AAAA,MACrC;AAAA,IACF;AACA,eAAW,EAAE,UAAU,KAAK,gBAAgB,IAAI,KAAK,KAAK,CAAC,GAAG;AAC5D,MAAAA,UAAS,KAAK,IAAI,KAAK,kBAAkB,SAAS,CAAC;AAAA,IACrD;AACA,UAAM,OAAO,OAAO,QAAQ,CAAC;AAC7B,QAAI,SAAS,UAAa,OAAO,OAAO;AACtC,aAAO,SAAS,QAAQ,KAAK,SAAS,QAAQ,EAAG,OAAO,MAAO,aAAY;AAC3E,YAAM,OAAO,SAAS,QAAQ;AAC9B,UAAI,CAAC,KAAM,OAAM,IAAI,MAAM,sBAAsB,MAAM,EAAE,8BAA8B;AACvF,UAAI,KAAK,QAAQ,SAAS,KAAK,MAAM;AACnC,cAAM,IAAI,MAAM,sBAAsB,MAAM,EAAE,8BAA8B;AAC9E,YAAM,OAAO,KAAK,IAAI,KAAK,MAAM,QAAQ,KAAK,OAAO,OAAO,KAAK,KAAK;AACtE,aACE,cAAc,WAAW,GAAG,OAAO,QAAQ,UAC3C,cAAc,WAAW,EAAG,OAAO,OAAO,OAC1C;AACA,uBAAe;AAAA,MACjB;AACA,YAAM,YAAY,cAAc,WAAW;AAC3C,YAAM,SACJ,aAAa,UAAU,OAAO,SAAS,SAAS,UAAU,OAAO,OAAO,OACpE,YACA;AACN,UAAI,CAAC,UAAU,UAAU,OAAO,OAAO,OAAO;AAC5C,QAAAA,UAAS;AAAA,UACP,SACI;AAAA,YACE,cAAc,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,GAAG;AAAA,YAC1D,KAAK,IAAI;AAAA,YACT;AAAA,YACA;AAAA,UACF,IACA,qBAAqB,MAAM,KAAK,IAAI,OAAO,QAAW,IAAI;AAAA,QAChE;AAAA,MACF;AAAA,IACF;AACA,QAAI,SAAS,QAAW;AACtB,iBAAW,EAAE,UAAU,KAAK,gBAAgB,IAAI,IAAI,KAAK,CAAC,GAAG;AAC3D,QAAAA,UAAS,KAAK,IAAI,KAAK,gBAAgB,SAAS,CAAC;AACjD,QAAAA,UAAS,KAAK,oBAAoB,WAAW,IAAI,CAAC;AAAA,MACpD;AAAA,IACF;AAAA,EACF;AACA,SAAOA;AACT;AAEA,SAAS,oBAAoB,WAAmB,MAA0C;AACxF,SAAO,IAAI,KAAK,QAAQ,EAAE,UAAU,CAAC,IAAI,KAAK,iBAAiB,SAAS,CAAC,EAAE,CAAC;AAC9E;AAEA,SAAS,qBACP,MACA,OACA,QACA,MACoB;AACpB,QAAM,UAAU,mBAAmB,MAAM,OAAO,IAAI;AACpD,MAAI,CAAC,OAAQ,QAAO,oBAAoB,MAAM,SAAS,IAAI;AAC3D,QAAM,gBAAgB;AAAA,IACpB,GAAG;AAAA,IACH,IAAI,OAAO;AAAA,IACX,QAAQ,OAAO,OAAO;AAAA,IACtB,MAAM,OAAO,OAAO;AAAA,EACtB;AACA,SAAO,OAAO,OAAO,SAAS,WAC1B,IAAI,KAAK,gBAAgB,aAAa,IACtC,IAAI,KAAK,eAAe,aAAa;AAC3C;AAEA,SAAS,cAAc,KAAsB,MAA0C;AACrF,SAAO,oBAAoB,IAAI,MAAM,mBAAmB,IAAI,MAAM,IAAI,OAAO,IAAI,GAAG,IAAI;AAC1F;AAEA,SAAS,oBACP,MACA,SACA,MACwB;AACxB,MAAI,KAAK,SAAS,EAAG,QAAO,IAAI,KAAK,QAAQ,OAAO;AAIpD,QAAM,EAAE,MAAM,OAAO,UAAU,WAAW,GAAG,WAAW,IAAI;AAC5D,SAAO,IAAI,KAAK,IAAI;AAAA,IAClB,GAAG;AAAA,IACH,UAAU,CAAC,IAAI,KAAK,aAAa,KAAK,CAAC;AAAA,EACzC,CAAC;AACH;AAEA,SAAS,mBACP,MACA,OACA,MAC4B;AAC5B,SAAO;AAAA,IACL,GAAI,KAAK,SAAS,GAAI,KAAK,KAAK,SAAS,IAAI,IACzC,EAAE,UAAU,iBAAiB,MAAM,IAAI,EAAE,IACzC,EAAE,KAAK;AAAA,IACX,GAAI,MAAM,aAAa,EAAE,MAAM,MAAM,WAAW,IAAI,CAAC;AAAA,IACrD,GAAI,MAAM,eAAe,SAAY,EAAE,MAAM,KAAK,MAAM,MAAM,aAAa,CAAC,EAAE,IAAI,CAAC;AAAA,IACnF,GAAI,MAAM,QAAQ,EAAE,OAAO,aAAa,MAAM,KAAK,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;AAAA,IACnE,GAAI,MAAM,SAAS,SAAY,EAAE,MAAM,MAAM,KAAK,IAAI,CAAC;AAAA,IACvD,GAAI,MAAM,WAAW,SAAY,EAAE,SAAS,MAAM,OAAO,IAAI,CAAC;AAAA,IAC9D,GAAI,MAAM,cAAc,SACpB;AAAA,MACE,WAAW;AAAA,QACT,MAAM,MAAM,YAAY,KAAK,cAAc,SAAS,KAAK,cAAc;AAAA,MACzE;AAAA,IACF,IACA,CAAC;AAAA,IACL,GAAI,MAAM,WAAW,SAAY,EAAE,QAAQ,MAAM,OAAO,IAAI,CAAC;AAAA,EAC/D;AACF;AAEA,SAAS,iBACP,MACA,MACoE;AACpE,QAAMA,YAA+E,CAAC;AACtF,MAAI,QAAQ;AACZ,WAAS,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;AACnD,UAAM,YAAY,KAAK,KAAK;AAC5B,QAAI,cAAc,OAAQ,cAAc,KAAM;AAC9C,QAAI,QAAQ,MAAO,CAAAA,UAAS,KAAK,KAAK,MAAM,OAAO,KAAK,CAAC;AACzD,IAAAA,UAAS,KAAK,cAAc,MAAO,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,eAAe,CAAC;AAC7E,YAAQ,QAAQ;AAAA,EAClB;AACA,MAAI,QAAQ,KAAK,OAAQ,CAAAA,UAAS,KAAK,KAAK,MAAM,KAAK,CAAC;AACxD,SAAOA;AACT;AAEA,SAAS,gBAAgB,MAA8D;AACrF,QAAM,aAAa,CAAC,SAClB,MAAM,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,WAAW;AAAA,IACvC;AAAA,IACA,QAAQ,SAAS,WAAW,KAAK,YAAY,SAAS,KAAK,YAAY;AAAA,IACvE,MAAM,SAAS,WAAW,CAAC,UAAK,UAAK,QAAG,EAAE,QAAQ,CAAC,IAAK,IAAI,QAAQ,CAAC;AAAA,IACrE,WAAW,KAAK,cAAc;AAAA,IAC9B,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,QAAQ,IAAI,SAAS,IAAI,EAAE,EAAE;AAAA,EAC5E,EAAE;AACJ,SAAO;AAAA,IACL,EAAE,WAAW,mBAAmB,QAAQ,WAAW,QAAQ,EAAE;AAAA,IAC7D,EAAE,WAAW,mBAAmB,QAAQ,WAAW,QAAQ,EAAE;AAAA,EAC/D;AACF;AAEA,SAAS,mBAAmB,UAAyC;AACnE,QAAM,YAAY,oBAAI,IAAoB;AAC1C,QAAM,oBAAoB,oBAAI,IAAoB;AAClD,MAAI,WAAW;AACf,QAAM,QAAQ,CAAC,WAAkE;AAC/E,QAAI;AACJ,eAAW,SAAS,QAAQ;AAC1B,UAAI,EAAE,iBAAiB,sBAAsB,CAAC,MAAM,MAAM,MAAM;AAC9D,qBAAa;AACb;AAAA,MACF;AACA,YAAM,aAAa,MAAM,MAAM,KAAK;AACpC,UAAI,YAAY;AACd,cAAM,MAAM,GAAG,MAAM,MAAM,KAAK,IAAI,IAAI,UAAU;AAClD,YAAI,mBAAmB,kBAAkB,IAAI,GAAG;AAChD,YAAI,qBAAqB,QAAW;AAClC,6BAAmB,EAAE;AACrB,4BAAkB,IAAI,KAAK,gBAAgB;AAAA,QAC7C;AACA,kBAAU,IAAI,MAAM,IAAI,gBAAgB;AACxC,qBAAa;AACb;AAAA,MACF;AACA,UAAI,eAAe,MAAM,MAAM,KAAK,KAAM,aAAY;AACtD,mBAAa,MAAM,MAAM,KAAK;AAC9B,gBAAU,IAAI,MAAM,IAAI,QAAQ;AAAA,IAClC;AAAA,EACF;AACA,QAAM,SAAS,OAAO,KAAK;AAC3B,aAAW,WAAW,SAAS,SAAS;AACtC,eAAW,SAAS,QAAQ,WAAW,EAAG,OAAM,MAAM,KAAK;AAC7D,SAAO;AACT;AAEA,SAAS,aACP,OACA,MAC4F;AAC5F,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO;AAAA,IACL,KAAK,aAAa;AAAA,IAClB,KAAK,aAAa;AAAA,IAClB,KAAK,aAAa;AAAA,IAClB,KAAK,aAAa;AAAA,IAClB,KAAK,aAAa;AAAA,IAClB,KAAK,aAAa;AAAA,EACpB,EAAE,QAAQ,CAAC;AACb;AAEA,SAAS,UACP,OACA,MAC8F;AAC9F,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO;AAAA,IACL,MAAM,KAAK,cAAc;AAAA,IACzB,QAAQ,KAAK,cAAc;AAAA,IAC3B,OAAO,KAAK,cAAc;AAAA,IAC1B,SAAS,KAAK,cAAc;AAAA,EAC9B,EAAE,KAAK;AACT;AAEA,SAAS,8BAA8B,SAAyC;AAC9E,QAAM,SAAS,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG;AAC7E,WAAS,QAAQ,GAAG,QAAQ,OAAO,QAAQ,SAAS;AAClD,QAAI,OAAO,KAAK,EAAG,QAAQ,OAAO,QAAQ,CAAC,EAAG,KAAK;AACjD,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,4BAA4B,UAAkD;AACrF,QAAM,SAAS,CAAC,GAAG,QAAQ,EAAE;AAAA,IAC3B,CAAC,MAAM,UAAU,KAAK,QAAQ,MAAM,SAAS,MAAM,MAAM,KAAK;AAAA,EAChE;AACA,QAAM,aAAuB,CAAC;AAC9B,aAAW,WAAW,QAAQ;AAC5B,WAAO,WAAW,SAAS,KAAK,QAAQ,SAAS,WAAW,WAAW,SAAS,CAAC,GAAI;AACnF,iBAAW,IAAI;AAAA,IACjB;AACA,UAAM,eAAe,WAAW,WAAW,SAAS,CAAC;AACrD,QAAI,iBAAiB,UAAa,QAAQ,MAAM,cAAc;AAC5D,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,QAAI,QAAQ,MAAM,QAAQ,MAAO,YAAW,KAAK,QAAQ,GAAG;AAAA,EAC9D;AACF;AAEA,SAAS,4BACP,WACA,UACA,SACM;AACN,QAAM,YAAY,mBAAmB,SAAS;AAC9C,QAAM,gBAAgB,CAAC,GAAG,OAAO,EAAE;AAAA,IACjC,CAAC,MAAM,UAAU,KAAK,QAAQ,MAAM,SAAS,KAAK,MAAM,MAAM;AAAA,EAChE;AACA,MAAI,WAAW;AACf,aAAW,UAAU,eAAe;AAClC,WAAO,UAAU,QAAQ,KAAK,UAAU,QAAQ,EAAG,OAAO,OAAO,MAAO,aAAY;AACpF,QAAI,YAAY;AAChB,QAAI;AACJ,WAAO,UAAU,SAAS,KAAK,UAAU,SAAS,EAAG,QAAQ,OAAO,KAAK;AACvE,YAAM,QAAQ,UAAU,SAAS,EAAG,IAAI;AACxC,qBAAe;AACf,UAAI,CAAC,cAAc,OAAO,UAAU,GAAG;AACrC,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,mBAAa;AAAA,IACf;AAAA,EACF;AACA,QAAM,iBAAiB,CAAC,GAAG,QAAQ,EAAE;AAAA,IACnC,CAAC,MAAM,UAAU,KAAK,QAAQ,MAAM,SAAS,KAAK,MAAM,MAAM;AAAA,EAChE;AACA,MAAI,cAAc;AAClB,aAAW,WAAW,gBAAgB;AACpC,WAAO,cAAc,WAAW,KAAK,cAAc,WAAW,EAAG,OAAO,QAAQ,OAAO;AACrF,qBAAe;AAAA,IACjB;AACA,UAAM,SAAS,cAAc,WAAW;AACxC,QAAI,CAAC,OAAQ;AACb,UAAM,cACJ,QAAQ,UAAU,QAAQ,OAAO,QAAQ,QAAQ,OAAO,SAAS,QAAQ,QAAQ,OAAO;AAC1F,UAAM,gBAAgB,QAAQ,QAAQ,OAAO,OAAO,QAAQ,MAAM,OAAO;AACzE,UAAM,UAAU,QAAQ,UAAU,OAAO,SAAS,QAAQ,QAAQ,OAAO;AACzE,QAAI,eAAgB,iBAAiB,CAAC,SAAU;AAC9C,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,mBACP,WAC6D;AAC7D,QAAM,SAAsE,CAAC;AAC7E,MAAI,SAAS;AACb,aAAW,OAAO,UAAU,MAAM;AAChC,UAAM,QAAQ;AACd,cAAU,IAAI,KAAK;AACnB,WAAO,KAAK,EAAE,OAAO,KAAK,QAAQ,IAAI,CAAC;AAAA,EACzC;AACA,SAAO;AACT;AAEA,SAAS,cAAc,MAAyB,OAAmC;AACjF,SACE,KAAK,eAAe,MAAM,cAC1B,KAAK,eAAe,MAAM,cAC1B,KAAK,UAAU,MAAM,SACrB,KAAK,SAAS,MAAM,QACpB,KAAK,WAAW,MAAM,UACtB,KAAK,cAAc,MAAM,aACzB,KAAK,WAAW,MAAM;AAE1B;AAEA,IAAM,wBAAwB,KAAK,OAAO;AAE1C,SAAS,sBAAsB,SAA0C;AACvE,wBAAsB,SAAS,oBAAI,IAAI,CAAC,sBAAsB,QAAQ,CAAC,GAAG,qBAAqB;AAC/F,MACE,QAAQ,uBAAuB,UAC/B,QAAQ,uBAAuB,cAC/B,QAAQ,uBAAuB;AAE/B,UAAM,IAAI,UAAU,kDAAkD;AACxE,MAAI,QAAQ,WAAW,QAAW;AAChC,0BAAsB,QAAQ,QAAQ,QAAW,oBAAoB;AAAA,EACvE;AACF;AAEA,SAAS,sBAAsB,SAA0C;AACvE;AAAA,IACE;AAAA,IACA,oBAAI,IAAI,CAAC,YAAY,oBAAoB,CAAC;AAAA,IAC1C;AAAA,EACF;AACA,MACE,QAAQ,uBAAuB,UAC/B,QAAQ,uBAAuB,WAC/B,QAAQ,uBAAuB;AAE/B,UAAM,IAAI,UAAU,kDAAkD;AACxE,MACE,QAAQ,aAAa,WACpB,OAAO,QAAQ,aAAa,YAC3B,QAAQ,SAAS,WAAW,KAC5B,QAAQ,SAAS,SAAS;AAE5B,UAAM,IAAI,UAAU,4DAA4D;AACpF;AAEA,SAAS,sBAAsB,SAA0D;AACvF,wBAAsB,SAAS,oBAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,8BAA8B;AAClF,MAAI,QAAQ,WAAW,QAAW;AAChC,0BAAsB,QAAQ,QAAQ,QAAW,oBAAoB;AAAA,EACvE;AACF;AAEA,SAAS,sBACP,OACA,aACA,OAC0C;AAC1C,MACE,UAAU,QACV,OAAO,UAAU,YACjB,MAAM,QAAQ,KAAK,KACnB,OAAO,eAAe,KAAK,MAAM,OAAO;AAExC,UAAM,IAAI,UAAU,GAAG,KAAK,8BAA8B;AAC5D,MAAI,OAAO,sBAAsB,KAAK,EAAE,SAAS,GAAG;AAClD,UAAM,IAAI,UAAU,GAAG,KAAK,qCAAqC;AAAA,EACnE;AACA,aAAW,CAAC,KAAK,UAAU,KAAK,OAAO,QAAQ,OAAO,0BAA0B,KAAK,CAAC,GAAG;AACvF,QAAI,EAAE,WAAW,eAAe,CAAC,WAAW,YAAY;AACtD,YAAM,IAAI,UAAU,GAAG,KAAK,+CAA+C;AAAA,IAC7E;AACA,QAAI,eAAe,CAAC,YAAY,IAAI,GAAG;AACrC,YAAM,IAAI,UAAU,GAAG,KAAK,8BAA8B,GAAG,EAAE;AAAA,EACnE;AACF;AAEA,eAAe,eAAe,OAA2D;AACvF,MAAI,iBAAiB,aAAa;AAChC,QAAI,MAAM,aAAa,uBAAuB;AAC5C,YAAM,IAAI,gBAAgB,kBAAkB,4CAA4C;AAAA,IAC1F;AACA,WAAO,IAAI,WAAW,MAAM,MAAM,CAAC,CAAC;AAAA,EACtC;AACA,MAAI,OAAO,SAAS,eAAe,iBAAiB,MAAM;AACxD,UAAM,OAAO,OAAO,yBAAyB,KAAK,WAAW,MAAM,GAAG,KAAK,KAAK,KAAK;AACrF,QAAI,OAAO,SAAS,YAAY,OAAO,uBAAuB;AAC5D,YAAM,IAAI,gBAAgB,kBAAkB,4CAA4C;AAAA,IAC1F;AACA,WAAO,IAAI,WAAW,MAAM,KAAK,UAAU,YAAY,KAAK,KAAK,CAAC;AAAA,EACpE;AACA,QAAM,IAAI,gBAAgB,iBAAiB,0CAA0C;AACvF;AAEA,SAAS,iBAAiB,OAAgC;AACxD,QAAM,OAAO,IAAI,WAAW,MAAM,UAAU;AAC5C,OAAK,IAAI,KAAK;AACd,SAAO,KAAK;AACd;AAEA,SAAS,4BAA4B,UAA0B;AAC7D,SACE,ySAGgB,QAAQ;AAE5B;AAEA,SAAS,iBAAiB,SAAyC;AACjE,SACE,QAAQ,MAAM,SAAS,KAAK,QAAQ,cAAc,SAAS,KAAK,QAAQ,aAAa,SAAS;AAElG;AAEA,SAAS,mBACP,SACA,UACuB;AACvB,SAAO;AAAA,IACL,MAAM,aAAa,YAAY,gCAAgC;AAAA,IAC/D;AAAA,IACA,SAAS;AAAA,IACT,SACE,aAAa,YACT,2HACA;AAAA,IACN,GAAG,mBAAmB,OAAO;AAAA,EAC/B;AACF;AAEA,SAAS,mBAAmB,SAAuD;AACjF,SAAO;AAAA,IACL,OAAO,CAAC,GAAG,QAAQ,KAAK;AAAA,IACxB,eAAe,QAAQ,cAAc,IAAI,CAAC,kBAAkB,EAAE,GAAG,aAAa,EAAE;AAAA,IAChF,cAAc,QAAQ,aAAa,IAAI,CAAC,iBAAiB,EAAE,GAAG,YAAY,EAAE;AAAA,EAC9E;AACF;AAEA,SAAS,kBAAkB,MAA6B,OAAuC;AAC7F,SAAO,KAAK,UAAU,IAAI,MAAM,KAAK,UAAU,KAAK;AACtD;AAEA,SAAS,kCAAkC,OAAkD;AAC3F;AAAA,IACE;AAAA,IACA,oBAAI,IAAI;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD;AAAA,EACF;AACA,MAAI,MAAM,YAAY,KAAK,MAAM,cAAc,iBAAiB;AAC9D,UAAM,IAAI,UAAU,kEAAkE;AAAA,EACxF;AACA,MACE,EAAE,MAAM,uBAAuB,eAC/B,OAAO,eAAe,MAAM,WAAW,MAAM,WAAW,aACxD,MAAM,YAAY,aAAa;AAE/B,UAAM,IAAI,UAAU,iEAAiE;AACvF,MAAI,OAAO,MAAM,iBAAiB,YAAY,CAAC,iBAAiB,KAAK,MAAM,YAAY,GAAG;AACxF,UAAM,IAAI,UAAU,+DAA+D;AAAA,EACrF;AACA,MAAI,OAAO,MAAM,gBAAgB,YAAY,CAAC,iBAAiB,KAAK,MAAM,WAAW,GAAG;AACtF,UAAM,IAAI,UAAU,8DAA8D;AAAA,EACpF;AACA,QAAM,gBAAgB,uBAAuB,MAAM,aAAa;AAChE,MAAI,CAAC,iBAAiB,aAAa,GAAG;AACpC,UAAM,IAAI,UAAU,4DAA4D;AAAA,EAClF;AACA,SAAO;AAAA,IACL,SAAS;AAAA,IACT,WAAW;AAAA,IACX,aAAa,MAAM,YAAY,MAAM;AAAA,IACrC,cAAc,MAAM;AAAA,IACpB;AAAA,IACA,aAAa,MAAM;AAAA,EACrB;AACF;AAEA,SAAS,uBAAuB,OAAuC;AACrE;AAAA,IACE;AAAA,IACA,oBAAI,IAAI,CAAC,SAAS,iBAAiB,cAAc,CAAC;AAAA,IAClD;AAAA,EACF;AACA,QAAM,QAAQ,eAAe,MAAM,OAAO,MAAO,uBAAuB,EAAE,IAAI,CAAC,SAAS;AACtF,QAAI,OAAO,SAAS,YAAY,KAAK,WAAW,KAAK,KAAK,SAAS,MAAO;AACxE,YAAM,IAAI,UAAU,kCAAkC;AAAA,IACxD;AACA,WAAO;AAAA,EACT,CAAC;AACD,QAAM,gBAAgB;AAAA,IACpB,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF,EAAE,IAAI,CAAC,iBAAiB;AACtB;AAAA,MACE;AAAA,MACA,oBAAI,IAAI,CAAC,cAAc,QAAQ,YAAY,CAAC;AAAA,MAC5C;AAAA,IACF;AACA,UAAM,EAAE,YAAY,MAAM,WAAW,IAAI;AACzC,QACE,OAAO,eAAe,YACtB,WAAW,SAAS,QACpB,OAAO,SAAS,YAChB,KAAK,WAAW,KAChB,KAAK,SAAS,QACd,OAAO,eAAe,YACtB,WAAW,WAAW,KACtB,WAAW,SAAS;AAEpB,YAAM,IAAI,UAAU,8CAA8C;AACpE,WAAO,EAAE,YAAY,MAAM,WAAW;AAAA,EACxC,CAAC;AACD,QAAM,eAAe;AAAA,IACnB,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF,EAAE,IAAI,CAAC,gBAAgB;AACrB;AAAA,MACE;AAAA,MACA,oBAAI,IAAI,CAAC,YAAY,aAAa,CAAC;AAAA,MACnC;AAAA,IACF;AACA,QACE,OAAO,YAAY,aAAa,YAChC,YAAY,SAAS,WAAW,KAChC,YAAY,SAAS,SAAS,QAC9B,OAAO,YAAY,gBAAgB,YACnC,YAAY,YAAY,WAAW,KACnC,YAAY,YAAY,SAAS;AAEjC,YAAM,IAAI,UAAU,8CAA8C;AACpE,WAAO,EAAE,UAAU,YAAY,UAAU,aAAa,YAAY,YAAY;AAAA,EAChF,CAAC;AACD,SAAO,EAAE,OAAO,eAAe,aAAa;AAC9C;AAEA,SAAS,eAAe,OAAgB,SAAiB,OAA0B;AACjF,MACE,CAAC,MAAM,QAAQ,KAAK,KACpB,OAAO,eAAe,KAAK,MAAM,MAAM,aACvC,MAAM,SAAS,SACf;AACA,UAAM,IAAI,UAAU,GAAG,KAAK,mCAAmC;AAAA,EACjE;AACA,QAAM,cAAc,OAAO,0BAA0B,KAAK;AAC1D,WAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG;AACpD,UAAM,aAAa,YAAY,OAAO,KAAK,CAAC;AAC5C,QAAI,CAAC,cAAc,EAAE,WAAW,eAAe,CAAC,WAAW,YAAY;AACrE,YAAM,IAAI,UAAU,GAAG,KAAK,wCAAwC;AAAA,IACtE;AAAA,EACF;AACA,aAAW,OAAO,OAAO,KAAK,WAAW,GAAG;AAC1C,QAAI,QAAQ,YAAY,CAAC,sBAAsB,KAAK,GAAG,GAAG;AACxD,YAAM,IAAI,UAAU,GAAG,KAAK,+BAA+B;AAAA,IAC7D;AAAA,EACF;AACA,SAAO,MAAM,MAAM;AACrB;AAEA,eAAe,oBAAoB,UAAqC;AACtE,SAAO,UAAU,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,SAAS,OAAO,CAAC,CAAC,CAAC;AAC9E;AAEA,eAAe,UAAU,OAAoC;AAC3D,QAAM,aAAa,IAAI,WAAW,MAAM,UAAU;AAClD,aAAW,IAAI,KAAK;AACpB,QAAM,SAAS,IAAI,WAAW,MAAM,WAAW,OAAO,OAAO,OAAO,WAAW,UAAU,CAAC;AAC1F,SAAO,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAC9E;AAEA,eAAe,kBAAkB,OAA0C;AACzE,QAAM,EAAE,eAAe,gBAAgB,GAAG,cAAc,IAAI;AAC5D,QAAM,iBAAiB,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,aAAa,CAAC;AAC7E,QAAM,SAAS,IAAI,WAAW,MAAM,WAAW,OAAO,OAAO,OAAO,WAAW,cAAc,CAAC;AAC9F,SAAO,CAAC,GAAG,OAAO,SAAS,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAC7F;AAEA,SAAS,UAAgB,KAAkB,KAAQ,OAAgB;AACjE,QAAM,SAAS,IAAI,IAAI,GAAG;AAC1B,MAAI,OAAQ,QAAO,KAAK,KAAK;AAAA,MACxB,KAAI,IAAI,KAAK,CAAC,KAAK,CAAC;AAC3B;AAEA,SAAS,SAAS,QAAwB;AACxC,QAAM,QAAQ,OACX,KAAK,EACL,MAAM,MAAM,EACZ,MAAM,GAAG,CAAC,EACV,IAAI,CAAC,SAAS,MAAM,KAAK,IAAI,EAAE,CAAC,GAAG,YAAY,KAAK,EAAE,EACtD,KAAK,EAAE;AACV,SAAO,MAAM,KAAK,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK;AACnD;AAEA,SAAS,mCAAmC,QAAgB,OAAiC;AAC3F,MAAI,UAAU,UAAa,UAAU,SAAS,MAAM,GAAG;AACrD,UAAM,IAAI,gCAAgC,YAAY,2BAA2B,aAAa;AAAA,EAChG;AACF;AAEA,SAAS,SAAS,OAAuB;AACvC,SAAO,KAAK,MAAM,QAAQ,EAAE;AAC9B;AAEA,SAAS,aAAa,OAAuB;AAC3C,MAAI,CAAC,qBAAqB,KAAK,KAAK,EAAG,OAAM,IAAI,MAAM,4BAA4B,KAAK,EAAE;AAC1F,SAAO,IAAI,MAAM,QAAQ,MAAM,EAAE,EAAE,YAAY,CAAC;AAClD;","names":["end","importDocx","projected","style","resolved","children"]}