@md-lark-converter/core 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +177 -0
- package/dist/index.d.ts +177 -0
- package/dist/index.js +1565 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1517 -0
- package/dist/index.mjs.map +1 -0
- package/dist/node.d.mts +7 -0
- package/dist/node.d.ts +7 -0
- package/dist/node.js +101 -0
- package/dist/node.js.map +1 -0
- package/dist/node.mjs +64 -0
- package/dist/node.mjs.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/utils/idGenerator.ts","../src/converter/markdownToLark.ts","../src/parser/markdownParser.ts","../src/clipboard/browserClipboard.ts","../src/htmlGenerator.ts"],"sourcesContent":["import { MarkdownToLarkConverter } from \"./converter/markdownToLark.js\";\nexport { MarkdownToLarkConverter } from \"./converter/markdownToLark.js\";\n\nexport { generateBlockId, generateRecordId, generatePageId } from \"./utils/idGenerator.js\";\nexport { parseMarkdown } from \"./parser/markdownParser.js\";\nexport { writeToClipboard, readClipboard } from \"./clipboard/browserClipboard.js\";\nexport { generateHtml, generateBlockHtml } from \"./htmlGenerator.js\";\n\nexport interface ClipboardData {\n isCut: boolean;\n rootId: string;\n parentId: string;\n blockIds: number[];\n recordIds: string[];\n recordMap: Record<string, RecordData>;\n payloadMap: Record<string, unknown>;\n selection: unknown[];\n extra: {\n channel: string;\n pasteRandomId: string;\n mention_page_title: Record<string, string>;\n external_mention_url: Record<string, string>;\n isEqualBlockSelection: boolean;\n };\n isKeepQuoteContainer: boolean;\n pasteFlag: string;\n}\n\nexport interface RecordData {\n id: string;\n snapshot: BlockSnapshot;\n}\n\nexport type BlockType =\n | 'page'\n | 'text'\n | 'heading1'\n | 'heading2'\n | 'heading3'\n | 'heading4'\n | 'heading5'\n | 'heading6'\n | 'quote'\n | 'bullet'\n | 'ordered'\n | 'todo'\n | 'code'\n | 'divider'\n | 'isv'\n | 'equation'\n | 'image'\n | 'table'\n | 'table_cell';\n\nexport interface BlockSnapshot {\n type: BlockType;\n parent_id: string;\n comments: unknown[] | null;\n revisions: unknown[] | null;\n locked: boolean;\n hidden: boolean;\n author: string;\n children: string[];\n text?: TextData;\n align?: string;\n page_style?: Record<string, unknown>;\n title?: TextData;\n level?: number;\n folded?: boolean;\n done?: boolean;\n seq?: string;\n language?: string;\n code?: string;\n is_language_picked?: boolean;\n caption?: {\n text: {\n initialAttributedTexts: {\n text: Record<string, string>;\n attribs: Record<string, string>;\n };\n apool: {\n numToAttrib: Record<string, unknown>;\n nextNum: number;\n };\n };\n };\n wrap?: boolean;\n data?: {\n data: string;\n theme: string;\n view: string;\n };\n app_block_id?: string;\n block_type_id?: string;\n manifest?: {\n view_type: string;\n app_version: string;\n };\n comment_details?: Record<string, unknown>;\n interaction_data_token?: string;\n columns_id?: string[];\n rows_id?: string[];\n column_set?: Record<string, { column_width: number }>;\n cell_set?: Record<string, { block_id: string; merge_info: { row_span: number; col_span: number } }>;\n}\n\nexport interface TextData {\n apool: {\n nextNum: number;\n numToAttrib: Record<string, unknown>;\n attribToNum?: Record<string, number>;\n };\n initialAttributedTexts: {\n attribs: string | Record<string, string>;\n text: Record<string, string>;\n rows?: Record<string, unknown>;\n cols?: Record<string, unknown>;\n };\n}\n\nexport async function markdownToLark(markdown: string): Promise<ClipboardData> {\n const converter = new MarkdownToLarkConverter();\n return converter.convert(markdown);\n}\n\nexport function larkToMarkdown(data: ClipboardData): string {\n if (!data || !data.recordMap) {\n return '';\n }\n\n const result: string[] = [];\n let lastType: string = '';\n\n // Recursive function to process a node and its children\n function processRecord(recordId: string, depth: number = 0): void {\n const record = data.recordMap[recordId];\n if (!record || !record.snapshot) return;\n\n const snapshot = record.snapshot;\n\n // Skip page nodes (root)\n if (snapshot.type === 'page') {\n // Process children of page\n if (snapshot.children && snapshot.children.length > 0) {\n for (const childId of snapshot.children) {\n processRecord(childId);\n }\n }\n return;\n }\n\n const isList = ['bullet', 'ordered', 'todo'].includes(snapshot.type);\n\n // Add separator between different block types\n if (result.length > 0) {\n // Different types: add empty line\n if (lastType !== snapshot.type && lastType !== 'list' && !isList) {\n result.push('');\n } else if (lastType === 'text' && snapshot.type === 'text') {\n // Consecutive paragraphs: add empty line\n result.push('');\n } else if (lastType === 'list' && !isList) {\n // List to non-list: add empty line\n result.push('');\n } else if (!isList && lastType !== 'list' && !isList) {\n // Non-list consecutive items: add empty line\n result.push('');\n }\n }\n\n // Handle different block types\n switch (snapshot.type) {\n case 'heading1':\n case 'heading2':\n case 'heading3':\n case 'heading4':\n case 'heading5':\n case 'heading6': {\n const level = parseInt(snapshot.type.replace('heading', ''));\n const headingText = getTextContent(snapshot.text);\n result.push(`${'#'.repeat(level)} ${headingText}`);\n break;\n }\n\n case 'text': {\n const textContent = getTextContent(snapshot.text);\n if (textContent.trim()) {\n result.push(textContent);\n }\n break;\n }\n\n case 'quote': {\n const quoteText = getTextContent(snapshot.text);\n result.push(`> ${quoteText}`);\n break;\n }\n\n case 'bullet': {\n const bulletText = getTextContent(snapshot.text);\n const level = snapshot.level || 1;\n const indent = ' '.repeat(level - 1);\n result.push(`${indent}- ${bulletText}`);\n break;\n }\n\n case 'ordered': {\n const orderedText = getTextContent(snapshot.text);\n const level = snapshot.level || 1;\n const indent = ' '.repeat(level - 1);\n result.push(`${indent}1. ${orderedText}`);\n break;\n }\n\n case 'todo': {\n const todoText = getTextContent(snapshot.text);\n const isChecked = snapshot.done || false;\n const level = snapshot.level || 1;\n const indent = ' '.repeat(level - 1);\n result.push(`${indent}- [${isChecked ? 'x' : ' '}] ${todoText}`);\n break;\n }\n\n case 'code': {\n const language = snapshot.language || '';\n const code = snapshot.code || getTextContent(snapshot.text) || '';\n result.push(`\\`\\`\\`${language}`);\n result.push(code);\n result.push(`\\`\\`\\``);\n break;\n }\n\n case 'divider': {\n result.push('---');\n break;\n }\n\n case 'isv': {\n const mermaidCode = snapshot.data?.data || '';\n result.push(`\\`\\`\\`mermaid`);\n result.push(mermaidCode);\n result.push(`\\`\\`\\``);\n break;\n }\n\n case 'equation': {\n result.push(`$$${getTextContent(snapshot.text)}$$`);\n break;\n }\n\n case 'image': {\n result.push('[lark-to-markdown 暂无法支持图片转换]');\n break;\n }\n\n case 'table': {\n const tableMarkdown = convertTableToMarkdown(recordId, data.recordMap);\n result.push(tableMarkdown);\n break;\n }\n\n case 'table_cell': {\n return;\n }\n\n default:\n break;\n }\n\n lastType = isList ? 'list' : snapshot.type;\n\n // Process children recursively\n if (snapshot.children && snapshot.children.length > 0) {\n for (const childId of snapshot.children) {\n processRecord(childId);\n }\n }\n }\n\n // Start processing from root node\n if (data.rootId) {\n processRecord(data.rootId);\n }\n\n return result.join('\\n').trim();\n}\n\nfunction getTextContent(textData?: TextData): string {\n if (!textData || !textData.initialAttributedTexts) {\n return '';\n }\n const texts = textData.initialAttributedTexts.text;\n const attribs = textData.initialAttributedTexts.attribs;\n\n if (!texts) return '';\n\n // If there are no apool/attribs, just return raw text\n if (!attribs || (typeof attribs === 'string' && attribs === '') || !textData.apool || !textData.apool.numToAttrib) {\n const content = Object.values(texts).join('');\n\n // Detect URLs and convert to Markdown link format for backward compatibility\n const placeholders: string[] = [];\n let result = content.replace(\n /\\[([^\\]]+)\\]\\(([^)]+)\\)/g,\n (match, text, url) => {\n placeholders.push(match);\n return `__LINK_PLACEHOLDER_${placeholders.length - 1}__`;\n }\n );\n\n result = result.replace(\n /(https?:\\/\\/[^\\s<>\"{}|\\\\^`\\[\\]]+)/g,\n '[$1]($1)'\n );\n\n result = result.replace(\n /__LINK_PLACEHOLDER_(\\d+)__/g,\n (_, index) => placeholders[parseInt(index)]\n );\n\n return result;\n }\n\n // Parse attributed text to preserve links\n let attribsStr = '';\n if (typeof attribs === 'string') {\n attribsStr = attribs;\n } else if (attribs && typeof attribs === 'object') {\n const values = Object.values(attribs);\n if (values.length > 0 && typeof values[0] === 'string') {\n attribsStr = values[0];\n }\n }\n return parseAttributedText(texts, attribsStr, textData.apool.numToAttrib);\n}\n\nfunction convertTableToMarkdown(tableRecordId: string, recordMap: Record<string, RecordData>): string {\n const tableRecord = recordMap[tableRecordId];\n if (!tableRecord || !tableRecord.snapshot) {\n return '';\n }\n\n const snapshot = tableRecord.snapshot;\n const { columns_id, rows_id, cell_set } = snapshot as any;\n\n if (!columns_id || !rows_id || !cell_set) {\n return '';\n }\n\n const rows: string[][] = [];\n\n for (const rowId of rows_id) {\n const row: string[] = [];\n for (const colId of columns_id) {\n const cellKey = `${rowId}${colId}`;\n const cell = cell_set[cellKey];\n if (cell && cell.block_id) {\n const cellRecord = recordMap[cell.block_id];\n if (cellRecord && cellRecord.snapshot) {\n const cellSnapshot = cellRecord.snapshot;\n const childId = cellSnapshot.children && cellSnapshot.children.length > 0\n ? cellSnapshot.children[0]\n : null;\n if (childId) {\n const textRecord = recordMap[childId];\n if (textRecord && textRecord.snapshot) {\n const cellText = getTextContent(textRecord.snapshot.text);\n row.push(cellText);\n } else {\n row.push('');\n }\n } else {\n row.push('');\n }\n } else {\n row.push('');\n }\n } else {\n row.push('');\n }\n }\n rows.push(row);\n }\n\n if (rows.length === 0) {\n return '';\n }\n\n const colCount = columns_id.length;\n const alignments: string[] = [];\n\n for (const colId of columns_id) {\n const cellKey = `${rows_id[0]}${colId}`;\n const cell = cell_set[cellKey];\n if (cell && cell.block_id) {\n const cellRecord = recordMap[cell.block_id];\n if (cellRecord && cellRecord.snapshot) {\n const cellSnapshot = cellRecord.snapshot;\n const childId = cellSnapshot.children && cellSnapshot.children.length > 0\n ? cellSnapshot.children[0]\n : null;\n if (childId) {\n const textRecord = recordMap[childId];\n if (textRecord && textRecord.snapshot && textRecord.snapshot.align) {\n const align = textRecord.snapshot.align as string;\n alignments.push(align);\n } else {\n alignments.push('left');\n }\n } else {\n alignments.push('left');\n }\n } else {\n alignments.push('left');\n }\n } else {\n alignments.push('left');\n }\n }\n\n const separatorRow = alignments.map(align => {\n switch (align) {\n case 'center':\n return ':--:';\n case 'right':\n return '---:';\n case 'left':\n default:\n return ':---';\n }\n });\n\n const markdownRows: string[] = [];\n\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n const formattedRow = row.map(cell => {\n return cell.includes('|') ? `\"${cell.replace(/\"/g, '\"\"')}\"` : cell;\n }).join(' | ');\n markdownRows.push(`| ${formattedRow} |`);\n\n if (i === 0) {\n markdownRows.push(`| ${separatorRow.join(' | ')} |`);\n }\n }\n\n return markdownRows.join('\\n');\n}\n\nfunction parseAttributedText(\n texts: Record<string, string>,\n attribsStr: string,\n numToAttrib: Record<string, unknown>\n): string {\n let content = Object.values(texts).join('');\n const segments: Array<{\n text: string;\n attrs: Record<string, unknown>;\n }> = [];\n\n // Parse attribs string (e.g., \"*0+5*0*1+3*0*2+2\")\n let pos = 0;\n while (pos < attribsStr.length) {\n if (attribsStr[pos] === '*') {\n pos++;\n\n const attrNums: string[] = [];\n while (pos < attribsStr.length && /[0-9]/.test(attribsStr[pos])) {\n let numStr = '';\n while (pos < attribsStr.length && /[0-9]/.test(attribsStr[pos])) {\n numStr += attribsStr[pos];\n pos++;\n }\n attrNums.push(numStr);\n\n if (pos < attribsStr.length && attribsStr[pos] === '*') {\n pos++;\n } else {\n break;\n }\n }\n\n if (pos >= attribsStr.length || attribsStr[pos] !== '+') break;\n pos++;\n\n let lengthStr = '';\n while (pos < attribsStr.length) {\n const char = attribsStr[pos];\n if (/[0-9]/.test(char)) {\n lengthStr += char;\n pos++;\n } else {\n break;\n }\n }\n\n if (!lengthStr) {\n continue;\n }\n\n const length = parseInt(lengthStr, 10) || 0;\n const text = content.substring(0, length);\n content = content.substring(length);\n\n const attrs: Record<string, unknown> = {};\n for (const num of attrNums) {\n const attrValue = numToAttrib[num];\n if (attrValue && Array.isArray(attrValue) && attrValue.length >= 2) {\n attrs[String(attrValue[0])] = attrValue[1];\n }\n }\n\n if (text) {\n segments.push({ text, attrs });\n }\n } else {\n pos++;\n }\n }\n\n if (content) {\n segments.push({ text: content, attrs: {} });\n }\n\n let result = '';\n\n for (const segment of segments) {\n const { text, attrs } = segment;\n\n if (attrs.link) {\n const url = decodeURIComponent(String(attrs.link));\n result += `[${text}](${url})`;\n } else if (attrs.equation) {\n const equation = String(attrs.equation).trim();\n const isDisplay = equation.endsWith('_display');\n const cleanEquation = isDisplay ? equation.slice(0, -8) : equation;\n result += isDisplay ? `$$${cleanEquation}$$` : `$${cleanEquation}$`;\n } else {\n let formattedText = text;\n\n if (attrs.strikethrough === 'true') {\n formattedText = `~~${formattedText}~~`;\n }\n if (attrs.bold === 'true') {\n formattedText = `**${formattedText}**`;\n }\n if (attrs.italic === 'true') {\n formattedText = `*${formattedText}*`;\n }\n\n result += formattedText;\n }\n }\n\n return result;\n}\n\nexport const TEST_CASES = {\n heading: `# 一级标题\\n## 二级标题\\n### 三级标题\\n`,\n paragraph: `这是普通文本段落。\\n\\n这是第二段。`,\n list: `- 项目 1\\n- 项目 2\\n- 项目 3\\n`,\n ordered: `1. 第一项\\n2. 第二项\\n3. 第三项\\n`,\n todo: `- [ ] 未完成任务\\n- [x] 已完成任务\\n`,\n quote: `> 这是一段引用文本。\\n\\n> 多行引用。`,\n code: `\\`\\`\\`javascript\\nfunction hello() {\\n console.log('Hello');\\n}\\n\\`\\`\\``,\n divider: `---\\n`,\n link: `这是一个 [链接](https://feishu.cn)。\\n`,\n image: `\\n`,\n mermaid: `\\`\\`\\`mermaid\\ngraph TD\\n A[开始] --> B[结束]\\n\\`\\`\\``,\n nested: `- 一级项目\\n - 二级项目\\n - 三级项目\\n`,\n mixed: `# 标题\\n\\n这是段落,包含**粗体**和*斜体*。\\n\\n- 列表项\\n- 另一项\\n\\n\\`\\`\\`代码\\`\\`\\``,\n complex: `# 完整文档\\n\\n## 章节\\n\\n这是段落。\\n\\n- 列表项 1\\n- 列表项 2\\n\\n\\n> 引用块\\n\\n\\`\\`\\`javascript\\nconst a = 1;\\n\\`\\`\\`\\n\\n---\\n\\n## 下一个章节\\n\\n内容。`\n};\n","const ID_CHARS = 'abcdefghijklmnopqrstuvwxyz0123456789';\n\nexport function generateBlockId(): string {\n let id = '';\n for (let i = 0; i < 4; i++) {\n for (let j = 0; j < 4; j++) {\n id += ID_CHARS[Math.floor(Math.random() * ID_CHARS.length)];\n }\n if (i < 3) id += '_';\n }\n return `docx${id}`;\n}\n\nexport function generateRecordId(): string {\n let id = '';\n for (let i = 0; i < 4; i++) {\n for (let j = 0; j < 4; j++) {\n id += ID_CHARS[Math.floor(Math.random() * ID_CHARS.length)];\n }\n if (i < 3) id += '_';\n }\n return `doxcn${id}`;\n}\n\nexport function generatePageId(): string {\n let id = '';\n for (let i = 0; i < 4; i++) {\n for (let j = 0; j < 4; j++) {\n id += ID_CHARS[Math.floor(Math.random() * ID_CHARS.length)];\n }\n if (i < 3) id += '_';\n }\n return `Wqf${id}`;\n}\n","/// <reference types=\"mdast-util-math\" />\nimport { generateBlockId, generateRecordId, generatePageId } from '../utils/idGenerator.js';\nimport { unified } from 'unified';\nimport remarkParse from 'remark-parse';\nimport remarkMath from 'remark-math';\nimport remarkGfm from 'remark-gfm';\nimport { visit, SKIP } from 'unist-util-visit';\nimport type { Root, Heading, Paragraph, List, ListItem, Blockquote, Code, ThematicBreak, Strong, Emphasis, Link, InlineCode, Delete } from 'mdast';\nimport type { Math, InlineMath } from 'mdast-util-math';\nimport type { ClipboardData } from '../index.js';\n\ninterface TextSegment {\n text: string;\n linkUrl?: string;\n bold?: boolean;\n italic?: boolean;\n underline?: boolean;\n strikethrough?: boolean;\n equation?: string;\n}\n\nexport class MarkdownToLarkConverter {\n private rootId: string | null;\n private authorId: string;\n private recordMap: Record<string, any>;\n private blockIds: number[];\n private recordIds: string[];\n private payloadMap: Record<string, unknown>;\n private apoolNextNum: number;\n private apoolNumToAttrib: Record<string, any>;\n\n constructor() {\n this.rootId = null;\n this.authorId = '7092639913849389057';\n this.recordMap = {};\n this.blockIds = [];\n this.recordIds = [];\n this.payloadMap = {};\n this.apoolNextNum = 0;\n this.apoolNumToAttrib = {};\n }\n\n async convert(markdown: string): Promise<ClipboardData> {\n this.rootId = generatePageId();\n this.recordMap = {};\n this.blockIds = [];\n this.recordIds = [];\n this.payloadMap = {};\n this.apoolNextNum = 0;\n this.apoolNumToAttrib = {};\n\n const normalizedMarkdown = this.normalizeMathBlocks(markdown);\n\n const tree = await unified()\n .use(remarkParse)\n .use(remarkGfm)\n .use(remarkMath)\n .parse(normalizedMarkdown);\n\n this.createPageBlock(this.rootId);\n this.convertTree(tree);\n\n return this.buildClipboardData();\n }\n\n private normalizeMathBlocks(markdown: string): string {\n return markdown.replace(/\\$\\$([^\\n]+?)\\$\\$/g, (_, content) => {\n return `$$\\n${content.trim()}\\n$$`;\n });\n }\n\n private createPageBlock(pageId: string): void {\n this.recordMap[pageId] = {\n id: pageId,\n snapshot: {\n type: 'page',\n parent_id: '',\n comments: null,\n revisions: null,\n locked: false,\n hidden: false,\n author: this.authorId,\n children: [],\n text: this.createTextData(''),\n align: '',\n page_style: {},\n title: {\n apool: { nextNum: 0, numToAttrib: {} },\n initialAttributedTexts: {\n attribs: {},\n text: { '0': '无标题' }\n }\n }\n }\n };\n }\n\n private convertTree(tree: Root): void {\n const topLevelRecordIds: string[] = [];\n\n visit(tree, (node, index, parent) => {\n if (parent?.type === 'listItem') {\n return SKIP;\n }\n\n if (node.type === 'heading') {\n const recordId = generateRecordId();\n this.recordMap[recordId] = this.createHeadingBlock(recordId, node as Heading);\n this.recordIds.push(recordId);\n this.blockIds.push(this.blockIds.length + 1);\n topLevelRecordIds.push(recordId);\n } else if (node.type === 'paragraph') {\n const recordId = generateRecordId();\n this.recordMap[recordId] = this.createTextBlock(recordId, node as Paragraph);\n this.recordIds.push(recordId);\n this.blockIds.push(this.blockIds.length + 1);\n topLevelRecordIds.push(recordId);\n } else if (node.type === 'blockquote') {\n const recordId = generateRecordId();\n this.recordMap[recordId] = this.createQuoteBlock(recordId, node as Blockquote);\n this.recordIds.push(recordId);\n this.blockIds.push(this.blockIds.length + 1);\n topLevelRecordIds.push(recordId);\n return SKIP;\n } else if (node.type === 'code') {\n const recordId = generateRecordId();\n const codeNode = node as Code;\n if (codeNode.lang && codeNode.lang.toLowerCase() === 'mermaid') {\n this.recordMap[recordId] = this.createMermaidBlock(recordId, codeNode.value);\n } else {\n this.recordMap[recordId] = this.createCodeBlock(recordId, codeNode.value, codeNode.lang ?? undefined);\n }\n this.recordIds.push(recordId);\n this.blockIds.push(this.blockIds.length + 1);\n topLevelRecordIds.push(recordId);\n } else if (node.type === 'thematicBreak') {\n const recordId = generateRecordId();\n this.recordMap[recordId] = this.createDividerBlock(recordId);\n this.recordIds.push(recordId);\n this.blockIds.push(this.blockIds.length + 1);\n topLevelRecordIds.push(recordId);\n } else if (node.type === 'math') {\n const mathNode = node as any;\n const recordId = generateRecordId();\n const equation = mathNode.value ?? '';\n this.recordMap[recordId] = this.createEquationParagraphBlock(recordId, equation);\n this.recordIds.push(recordId);\n this.blockIds.push(this.blockIds.length + 1);\n topLevelRecordIds.push(recordId);\n } else if (node.type === 'table') {\n const tableRecordIds = this.convertTable(node);\n topLevelRecordIds.push(tableRecordIds.tableId);\n }\n });\n\n const processedLists = new Set<any>();\n visit(tree, 'list', (node, index, parent) => {\n if (processedLists.has(node)) {\n return SKIP;\n }\n processedLists.add(node);\n if (parent?.type === 'listItem') {\n return SKIP;\n }\n const listRecordIds = this.convertList(node as List);\n topLevelRecordIds.push(...listRecordIds);\n });\n\n if (this.rootId && this.recordMap[this.rootId]) {\n this.recordMap[this.rootId].snapshot.children = topLevelRecordIds;\n }\n }\n\n private convertList(listNode: List): string[] {\n const ordered = listNode.ordered || false;\n return this.convertListItems(listNode.children as ListItem[], ordered, null, 0, true);\n }\n\n private convertListItems(\n items: ListItem[],\n ordered: boolean,\n parentId: string | null = null,\n level: number = 0,\n isTopLevel: boolean = false\n ): string[] {\n const childRecordIds: string[] = [];\n const topLevelIds: string[] = [];\n let index = 1;\n\n for (const item of items) {\n const recordId = generateRecordId();\n const blockId = this.blockIds.length + 1;\n let blockType = ordered ? 'ordered' : 'bullet';\n\n const isTaskItem = item.checked !== undefined && item.checked !== null;\n if (isTaskItem) {\n blockType = 'todo';\n }\n\n const listContent = item.children;\n const segments = listContent.length > 0 && listContent[0].type === 'paragraph'\n ? this.parseInlineContent(listContent[0].children)\n : this.parseInlineContent(listContent);\n\n // Only add to recordIds for top-level items (matching Lark's structure)\n if (isTopLevel && level === 0) {\n this.recordIds.push(recordId);\n }\n\n const snapshot: any = {\n type: blockType,\n parent_id: parentId || this.rootId,\n comments: [],\n revisions: [],\n locked: false,\n hidden: false,\n author: this.authorId,\n children: [],\n text: ordered ? this.createListItemTextData(segments) : this.createTextData(segments),\n align: '',\n folded: false\n };\n\n if (isTaskItem) {\n snapshot.done = item.checked || false;\n }\n\n // Set level for all list items, not just ordered lists\n if (ordered) {\n snapshot.level = level + 1;\n snapshot.seq = index === 1 ? '1' : 'auto';\n index++;\n } else {\n // Set level for bullet lists too (1 for top-level, 2 for nested, etc.)\n snapshot.level = level + 1;\n }\n\n for (const child of item.children) {\n if (child.type === 'list') {\n const nestedChildIds = this.convertListItems(\n (child as List).children as ListItem[],\n (child as List).ordered || false,\n recordId,\n level + 1,\n false\n );\n snapshot.children.push(...nestedChildIds);\n }\n }\n\n this.recordMap[recordId] = {\n id: recordId,\n snapshot\n };\n\n this.blockIds.push(blockId);\n childRecordIds.push(recordId);\n\n if (isTopLevel && level === 0) {\n topLevelIds.push(recordId);\n }\n }\n\n return isTopLevel ? topLevelIds : childRecordIds;\n }\n\n private parseInlineContent(children: any[]): TextSegment[] {\n const segments: TextSegment[] = [];\n\n for (const child of children) {\n if (child.type === 'text') {\n segments.push({ text: child.value });\n } else if (child.type === 'strong') {\n const text = this.extractTextContent(child);\n segments.push({ text, bold: true });\n } else if (child.type === 'emphasis') {\n const text = this.extractTextContent(child);\n segments.push({ text, italic: true });\n } else if (child.type === 'delete') {\n const text = this.extractTextContent(child);\n segments.push({ text, strikethrough: true });\n } else if (child.type === 'inlineCode') {\n segments.push({ text: child.value });\n } else if (child.type === 'link') {\n const linkNode = child as Link;\n const text = this.extractTextContent(linkNode);\n segments.push({ text, linkUrl: linkNode.url });\n } else if (child.type === 'image') {\n segments.push({ text: ' [markdown-to-lark 暂无法支持图片转换] ' });\n } else if (child.type === 'inlineMath') {\n const mathNode = child as any;\n segments.push({ text: 'E', equation: mathNode.value ?? '' });\n } else if (child.type === 'break') {\n segments.push({ text: '\\n' });\n }\n }\n\n return segments;\n }\n\n private extractTextContent(node: any): string {\n let text = '';\n if (node.type === 'text') {\n text = node.value;\n } else if (node.children) {\n for (const child of node.children) {\n text += this.extractTextContent(child);\n }\n }\n return text;\n }\n\n private createHeadingBlock(recordId: string, node: Heading): any {\n const depth = node.depth;\n const segments = this.parseInlineContent(node.children);\n\n return {\n id: recordId,\n snapshot: {\n type: `heading${depth}`,\n parent_id: this.rootId,\n comments: [],\n revisions: [],\n locked: false,\n hidden: false,\n author: this.authorId,\n children: [],\n text: this.createTextData(segments),\n level: depth,\n folded: false\n }\n };\n }\n\n private createTextBlock(recordId: string, node: Paragraph): any {\n const segments = this.parseInlineContent(node.children);\n\n return {\n id: recordId,\n snapshot: {\n type: 'text',\n parent_id: this.rootId,\n comments: [],\n revisions: [],\n locked: false,\n hidden: false,\n author: this.authorId,\n children: [],\n text: this.createTextData(segments),\n align: '',\n folded: false\n }\n };\n }\n\n private createQuoteBlock(recordId: string, node: Blockquote): any {\n const flattenedContent = this.flattenNestedBlockquotes(node.children);\n const segments = this.parseInlineContent(flattenedContent);\n\n return {\n id: recordId,\n snapshot: {\n type: 'quote',\n parent_id: this.rootId,\n comments: [],\n revisions: [],\n locked: false,\n hidden: false,\n author: this.authorId,\n children: [],\n text: this.createTextData(segments),\n folded: false\n }\n };\n }\n\n private flattenNestedBlockquotes(children: any[]): any[] {\n const result: any[] = [];\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child.type === 'blockquote') {\n const nestedContent = this.flattenNestedBlockquotes(child.children);\n if (result.length > 0) {\n result.push({ type: 'text', value: '\\n\\n' });\n }\n result.push(...nestedContent);\n } else if (child.type === 'paragraph') {\n if (result.length > 0) {\n result.push({ type: 'text', value: '\\n\\n' });\n }\n result.push(...child.children);\n } else {\n result.push(child);\n }\n }\n\n return result;\n }\n\n private createEquationBlock(recordId: string, equation: string): any {\n const segments: TextSegment[] = [{ text: 'E', equation }];\n\n return {\n id: recordId,\n snapshot: {\n type: 'equation',\n parent_id: this.rootId,\n comments: [],\n revisions: [],\n locked: false,\n hidden: false,\n author: this.authorId,\n children: [],\n elements: [{\n equation: {\n latex: equation\n }\n }],\n text: this.createTextData(segments),\n folded: false\n }\n };\n }\n\n private createEquationParagraphBlock(recordId: string, equation: string): any {\n const segments: TextSegment[] = [{ text: 'E', equation: equation + '_display' }];\n\n return {\n id: recordId,\n snapshot: {\n type: 'text',\n parent_id: this.rootId,\n comments: [],\n revisions: [],\n locked: false,\n hidden: false,\n author: this.authorId,\n children: [],\n text: this.createTextData(segments),\n align: '',\n folded: false\n }\n };\n }\n\n private createCodeBlock(recordId: string, code: string, lang: string | undefined): any {\n return {\n id: recordId,\n snapshot: {\n type: 'code',\n parent_id: this.rootId,\n comments: [],\n revisions: [],\n locked: false,\n hidden: false,\n author: this.authorId,\n children: [],\n language: lang || 'plaintext',\n code,\n text: this.createTextData(code),\n is_language_picked: true,\n caption: {\n text: {\n initialAttributedTexts: {\n text: { '0': '\\n' },\n attribs: { '0': '|1+1' }\n },\n apool: { numToAttrib: {}, nextNum: 0 }\n }\n },\n wrap: false,\n folded: false\n }\n };\n }\n\n private createDividerBlock(recordId: string): any {\n return {\n id: recordId,\n snapshot: {\n type: 'divider',\n parent_id: this.rootId,\n comments: [],\n revisions: [],\n locked: false,\n hidden: false,\n author: this.authorId,\n folded: false\n }\n };\n }\n\n private createMermaidBlock(recordId: string, code: string): any {\n const blockId = generateBlockId();\n\n return {\n id: recordId,\n snapshot: {\n type: 'isv',\n parent_id: this.rootId,\n comments: null,\n revisions: null,\n locked: false,\n hidden: false,\n author: this.authorId,\n children: [],\n data: {\n data: code,\n theme: 'default',\n view: 'codeChart'\n },\n app_block_id: '',\n block_type_id: 'blk_631fefbbae02400430b8f9f4',\n manifest: {\n view_type: 'block_h5',\n app_version: '0.0.112'\n },\n comment_details: {},\n interaction_data_token: this.generateRandomId()\n }\n };\n }\n\n private createTextData(segments: TextSegment[] | string): any {\n if (typeof segments === 'string') {\n segments = [{ text: segments }];\n }\n\n if (!segments || segments.length === 0) {\n return {\n apool: { nextNum: 0, numToAttrib: {} },\n initialAttributedTexts: {\n attribs: \"\",\n text: { '0': \"\" },\n rows: {},\n cols: {}\n }\n };\n }\n\n const apoolNumToAttrib: Record<string, unknown> = {\n '0': ['author', this.authorId]\n };\n const attribToNum: Record<string, number> = {\n [`author,${this.authorId}`]: 0\n };\n\n let apoolNextNum = 1;\n const attribParts: string[] = [];\n const textParts: string[] = [];\n\n for (const segment of segments) {\n const text = segment.text || '';\n const length = text.length;\n\n if (length === 0) continue;\n\n textParts.push(text);\n\n const activeAttrs: string[] = ['0'];\n\n if (segment.linkUrl) {\n const linkAttrNum = apoolNextNum.toString();\n apoolNextNum++;\n const encodedUrl = encodeURIComponent(segment.linkUrl);\n apoolNumToAttrib[linkAttrNum] = ['link', encodedUrl];\n attribToNum[`link,${encodedUrl}`] = parseInt(linkAttrNum);\n activeAttrs.push(linkAttrNum);\n }\n\n if (segment.bold) {\n const boldAttrKey = 'bold,true';\n let boldAttrNum = attribToNum[boldAttrKey];\n if (boldAttrNum === undefined) {\n boldAttrNum = apoolNextNum;\n apoolNextNum++;\n apoolNumToAttrib[boldAttrNum.toString()] = ['bold', 'true'];\n attribToNum[boldAttrKey] = boldAttrNum;\n }\n activeAttrs.push(boldAttrNum.toString());\n }\n\n if (segment.italic) {\n const italicAttrKey = 'italic,true';\n let italicAttrNum = attribToNum[italicAttrKey];\n if (italicAttrNum === undefined) {\n italicAttrNum = apoolNextNum;\n apoolNextNum++;\n apoolNumToAttrib[italicAttrNum.toString()] = ['italic', 'true'];\n attribToNum[italicAttrKey] = italicAttrNum;\n }\n activeAttrs.push(italicAttrNum.toString());\n }\n\n if (segment.underline) {\n const underlineAttrKey = 'underline,true';\n let underlineAttrNum = attribToNum[underlineAttrKey];\n if (underlineAttrNum === undefined) {\n underlineAttrNum = apoolNextNum;\n apoolNextNum++;\n apoolNumToAttrib[underlineAttrNum.toString()] = ['underline', 'true'];\n attribToNum[underlineAttrKey] = underlineAttrNum;\n }\n activeAttrs.push(underlineAttrNum.toString());\n }\n\n if (segment.strikethrough) {\n const strikeAttrKey = 'strikethrough,true';\n let strikeAttrNum = attribToNum[strikeAttrKey];\n if (strikeAttrNum === undefined) {\n strikeAttrNum = apoolNextNum;\n apoolNextNum++;\n apoolNumToAttrib[strikeAttrNum.toString()] = ['strikethrough', 'true'];\n attribToNum[strikeAttrKey] = strikeAttrNum;\n }\n activeAttrs.push(strikeAttrNum.toString());\n }\n\n if (segment.equation) {\n const eqAttrNum = apoolNextNum.toString();\n apoolNextNum++;\n apoolNumToAttrib[eqAttrNum] = ['equation', segment.equation];\n attribToNum[`equation,${segment.equation}`] = parseInt(eqAttrNum);\n activeAttrs.push(eqAttrNum);\n }\n\n const attrsPart = activeAttrs.join('*');\n attribParts.push(`*${attrsPart}+${length}`);\n }\n\n const fullText = textParts.join('');\n const attribsStr = attribParts.join('');\n\n return {\n apool: {\n nextNum: apoolNextNum,\n numToAttrib: apoolNumToAttrib,\n attribToNum\n },\n initialAttributedTexts: {\n attribs: { '0': attribsStr },\n text: { '0': fullText },\n rows: {},\n cols: {}\n }\n };\n }\n\n private createListItemTextData(segments: TextSegment[]): any {\n if (!segments || segments.length === 0) {\n return {\n apool: { nextNum: 0, numToAttrib: {} },\n initialAttributedTexts: {\n attribs: \"\",\n text: { '0': '' },\n rows: {},\n cols: {}\n }\n };\n }\n\n const apoolNumToAttrib: Record<string, unknown> = {\n '0': ['author', this.authorId]\n };\n const attribToNum: Record<string, number> = {\n [`author,${this.authorId}`]: 0\n };\n\n let apoolNextNum = 1;\n const attribParts: string[] = [];\n const textParts: string[] = [];\n\n for (const segment of segments) {\n const text = segment.text || '';\n const length = text.length;\n\n if (length === 0) continue;\n\n textParts.push(text);\n\n const activeAttrs: string[] = ['0'];\n\n if (segment.linkUrl) {\n const linkAttrNum = apoolNextNum.toString();\n apoolNextNum++;\n const encodedUrl = encodeURIComponent(segment.linkUrl);\n apoolNumToAttrib[linkAttrNum] = ['link', encodedUrl];\n attribToNum[`link,${encodedUrl}`] = parseInt(linkAttrNum);\n activeAttrs.push(linkAttrNum);\n }\n\n if (segment.bold) {\n const boldAttrKey = 'bold,true';\n let boldAttrNum = attribToNum[boldAttrKey];\n if (boldAttrNum === undefined) {\n boldAttrNum = apoolNextNum;\n apoolNextNum++;\n apoolNumToAttrib[boldAttrNum.toString()] = ['bold', 'true'];\n attribToNum[boldAttrKey] = boldAttrNum;\n }\n activeAttrs.push(boldAttrNum.toString());\n }\n\n if (segment.italic) {\n const italicAttrKey = 'italic,true';\n let italicAttrNum = attribToNum[italicAttrKey];\n if (italicAttrNum === undefined) {\n italicAttrNum = apoolNextNum;\n apoolNextNum++;\n apoolNumToAttrib[italicAttrNum.toString()] = ['italic', 'true'];\n attribToNum[italicAttrKey] = italicAttrNum;\n }\n activeAttrs.push(italicAttrNum.toString());\n }\n\n if (segment.underline) {\n const underlineAttrKey = 'underline,true';\n let underlineAttrNum = attribToNum[underlineAttrKey];\n if (underlineAttrNum === undefined) {\n underlineAttrNum = apoolNextNum;\n apoolNextNum++;\n apoolNumToAttrib[underlineAttrNum.toString()] = ['underline', 'true'];\n attribToNum[underlineAttrKey] = underlineAttrNum;\n }\n activeAttrs.push(underlineAttrNum.toString());\n }\n\n if (segment.strikethrough) {\n const strikeAttrKey = 'strikethrough,true';\n let strikeAttrNum = attribToNum[strikeAttrKey];\n if (strikeAttrNum === undefined) {\n strikeAttrNum = apoolNextNum;\n apoolNextNum++;\n apoolNumToAttrib[strikeAttrNum.toString()] = ['strikethrough', 'true'];\n attribToNum[strikeAttrKey] = strikeAttrNum;\n }\n activeAttrs.push(strikeAttrNum.toString());\n }\n\n if (segment.equation) {\n const eqAttrNum = apoolNextNum.toString();\n apoolNextNum++;\n apoolNumToAttrib[eqAttrNum] = ['equation', segment.equation];\n attribToNum[`equation,${segment.equation}`] = parseInt(eqAttrNum);\n activeAttrs.push(eqAttrNum);\n }\n\n const attrsPart = activeAttrs.join('*');\n attribParts.push(`*${attrsPart}+${length}`);\n }\n\n const fullText = textParts.join('');\n const attribsStr = attribParts.join('');\n\n return {\n apool: {\n nextNum: apoolNextNum,\n numToAttrib: apoolNumToAttrib,\n attribToNum\n },\n initialAttributedTexts: {\n attribs: { '0': attribsStr },\n text: { '0': fullText },\n rows: {},\n cols: {}\n }\n };\n }\n\n private buildClipboardData(): ClipboardData {\n const data: ClipboardData = {\n isCut: false,\n rootId: this.rootId!,\n parentId: this.rootId!,\n blockIds: this.blockIds,\n recordIds: this.recordIds,\n recordMap: this.recordMap,\n payloadMap: {},\n selection: [],\n extra: {\n channel: 'saas',\n pasteRandomId: this.generateRandomId(),\n mention_page_title: {},\n external_mention_url: {},\n isEqualBlockSelection: true\n },\n isKeepQuoteContainer: false,\n pasteFlag: this.generateRandomId()\n };\n\n return data;\n }\n\n private generateRandomId(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\n const r = Math.random() * 16 | 0;\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n\n private convertTable(tableNode: any): { tableId: string } {\n const tableRecordId = generateRecordId();\n const children = tableNode.children as any[];\n\n if (!children || children.length === 0) {\n return { tableId: tableRecordId };\n }\n\n const alignments = (tableNode.align as string[]) || [];\n const rows = children as any[];\n\n const columnIds: string[] = [];\n const rowIds: string[] = [];\n const columnSet: Record<string, { column_width: number }> = {};\n const cellSet: Record<string, { block_id: string; merge_info: { row_span: number; col_span: number } }> = {};\n const tableCellIds: string[] = [];\n\n const numCols = alignments.length || rows[0]?.children?.length || 0;\n const numRows = rows.length;\n\n for (let i = 0; i < numCols; i++) {\n const colId = `col${this.generateRandomId().replace(/-/g, '')}`;\n columnIds.push(colId);\n columnSet[colId] = { column_width: 200 };\n }\n\n for (let i = 0; i < numRows; i++) {\n const rowId = `row${this.generateRandomId().replace(/-/g, '')}`;\n rowIds.push(rowId);\n }\n\n const processRow = (rowIndex: number, rowCells: any[]) => {\n const rowId = rowIds[rowIndex];\n for (let colIndex = 0; colIndex < rowCells.length && colIndex < numCols; colIndex++) {\n const colId = columnIds[colIndex];\n const cellNode = rowCells[colIndex];\n const cellRecordId = generateRecordId();\n\n const cellTextSegments = this.parseInlineContent(cellNode.children || []);\n const align = alignments[colIndex] || 'left';\n\n this.recordMap[cellRecordId] = {\n id: cellRecordId,\n snapshot: {\n type: 'table_cell',\n parent_id: tableRecordId,\n comments: [],\n revisions: [],\n locked: false,\n hidden: false,\n author: this.authorId,\n children: [],\n text: this.createTextData(cellTextSegments)\n }\n };\n\n const textRecordId = generateRecordId();\n this.recordMap[textRecordId] = {\n id: textRecordId,\n snapshot: {\n type: 'text',\n parent_id: cellRecordId,\n comments: [],\n revisions: [],\n locked: false,\n hidden: false,\n author: this.authorId,\n children: [],\n text: this.createTextData(cellTextSegments),\n folded: false,\n align\n }\n };\n\n this.recordMap[cellRecordId].snapshot.children.push(textRecordId);\n\n const cellKey = `${rowId}${colId}`;\n cellSet[cellKey] = {\n block_id: cellRecordId,\n merge_info: { row_span: 1, col_span: 1 }\n };\n\n tableCellIds.push(cellRecordId);\n }\n };\n\n for (let i = 0; i < rows.length; i++) {\n processRow(i, rows[i].children);\n }\n\n this.recordMap[tableRecordId] = {\n id: tableRecordId,\n snapshot: {\n type: 'table',\n parent_id: this.rootId,\n comments: [],\n revisions: [],\n locked: false,\n hidden: false,\n author: this.authorId,\n children: tableCellIds,\n columns_id: columnIds,\n rows_id: rowIds,\n column_set: columnSet,\n cell_set: cellSet\n }\n };\n\n this.recordIds.push(tableRecordId);\n this.blockIds.push(this.blockIds.length + 1);\n\n return { tableId: tableRecordId };\n }\n}\n","import { marked } from 'marked';\n\nexport interface MarkdownBlock {\n type: string;\n text?: string;\n language?: string;\n ordered?: boolean;\n items?: MarkdownListItem[];\n}\n\nexport interface MarkdownListItem {\n text: string;\n task: boolean;\n checked?: boolean;\n}\n\nconst MARKDOWN_TOKEN_MAP: Record<string, { type: string; levels?: number[] }> = {\n heading: { type: 'heading', levels: [1, 2, 3, 4, 5, 6] },\n paragraph: { type: 'text' },\n blockquote: { type: 'quote' },\n list: { type: 'list' },\n code: { type: 'code' },\n hr: { type: 'divider' },\n space: { type: 'text' }\n};\n\nexport function parseMarkdown(markdown: string): MarkdownBlock[] {\n const tokens = marked.lexer(markdown);\n return convertTokens(tokens);\n}\n\nfunction convertTokens(tokens: any[], parentType: string | null = null): MarkdownBlock[] {\n const blocks: MarkdownBlock[] = [];\n\n for (const token of tokens) {\n const block = convertToken(token, parentType);\n if (Array.isArray(block)) {\n blocks.push(...block);\n } else if (block) {\n blocks.push(block);\n }\n }\n\n return blocks;\n}\n\nfunction convertToken(token: any, parentType: string | null): MarkdownBlock | MarkdownBlock[] | null {\n const { type, raw, text, depth, items, code, lang } = token;\n\n switch (type) {\n case 'heading':\n return {\n type: `heading${depth}`,\n text: parseInlineText(text)\n };\n\n case 'paragraph':\n return {\n type: 'text',\n text: parseInlineText(text)\n };\n\n case 'blockquote':\n return {\n type: 'quote',\n text: parseInlineText(text)\n };\n\n case 'list':\n return {\n type: 'list',\n ordered: token.ordered,\n items: items.map((item: any) => ({\n text: parseInlineText(item.text),\n task: item.checked !== undefined,\n checked: item.checked\n }))\n };\n\n case 'code':\n return {\n type: 'code',\n language: lang || 'plaintext',\n text: code\n };\n\n case 'hr':\n return {\n type: 'divider'\n };\n\n case 'space':\n return null;\n\n default:\n return null;\n }\n}\n\nfunction parseInlineText(text: string): string {\n if (!text) return '';\n\n const inlineTokens = (marked as any).lexerInline(text);\n return convertInlineTokens(inlineTokens);\n}\n\nfunction convertInlineTokens(tokens: any[]): string {\n let result = '';\n for (const token of tokens) {\n switch (token.type) {\n case 'text':\n result += (token as any).raw;\n break;\n case 'strong':\n result += `**${(token as any).text}**`;\n break;\n case 'em':\n result += `*${(token as any).text}*`;\n break;\n case 'del':\n result += `~~${(token as any).text}~~`;\n break;\n case 'codespan':\n result += `\\`${(token as any).text}\\``;\n break;\n case 'link':\n result += `[$(token as any).text}](${(token as any).href})`;\n break;\n case 'image':\n result += `.href})`;\n break;\n default:\n result += (token as any).raw || '';\n }\n }\n return result;\n}\n","/// <reference lib=\"dom\" />\n\nexport interface ClipboardResult {\n [mimeType: string]: string;\n}\n\nexport async function writeToClipboard(html: string, jsonData: any): Promise<boolean> {\n try {\n const plainText = extractPlainTextFromData(jsonData);\n\n const clipboardItem = new ClipboardItem({\n 'text/html': new Blob([html], { type: 'text/html' }),\n 'text/plain': new Blob([plainText], { type: 'text/plain' })\n });\n\n await navigator.clipboard.write([clipboardItem]);\n return true;\n } catch (error) {\n console.error('Failed to write to clipboard:', error);\n throw new Error(`写入剪贴板失败: ${(error as Error).message}`);\n }\n}\n\nfunction extractPlainTextFromData(data: any): string {\n let text = '';\n for (const recordId of data.recordIds) {\n const record = data.recordMap[recordId];\n if (!record) continue;\n\n const snapshot = record.snapshot;\n const type = snapshot.type;\n\n if (type === 'isv') {\n text += '[Mermaid 图表]\\n';\n } else if (type === 'code') {\n text += `\\`\\`\\`${snapshot.language || 'text'}\\n${snapshot.code}\\n\\`\\`\\`\\n`;\n } else if (type === 'divider') {\n text += '---\\n';\n } else if (type.startsWith('heading')) {\n const level = parseInt(type.replace('heading', ''));\n text += `${'#'.repeat(level)} ${getTextContent(snapshot.text)}\\n\\n`;\n } else if (type === 'text' || type === 'quote') {\n text += `${getTextContent(snapshot.text)}\\n\\n`;\n } else if (type === 'bullet' || type === 'ordered' || type === 'todo') {\n const marker = type === 'bullet' ? '-' : (type === 'ordered' ? '1.' : (snapshot.checked ? '- [x]' : '- [ ]'));\n text += `${marker} ${getTextContent(snapshot.text)}\\n`;\n }\n }\n\n return text.trim();\n}\n\ninterface TextData {\n initialAttributedTexts?: {\n text: Record<string, string>;\n };\n}\n\nfunction getTextContent(textData: TextData): string {\n if (!textData || !textData.initialAttributedTexts) {\n return '';\n }\n const texts = textData.initialAttributedTexts.text;\n return Object.values(texts).join('');\n}\n\nexport async function readClipboard(): Promise<ClipboardResult> {\n try {\n const clipboardItems = await navigator.clipboard.read();\n const results: ClipboardResult = {};\n\n for (const item of clipboardItems) {\n for (const type of item.types) {\n const blob = await item.getType(type);\n if (type.startsWith('text/')) {\n const text = await blob.text();\n results[type] = text;\n }\n }\n }\n\n return results;\n } catch (error) {\n console.error('Failed to read clipboard:', error);\n throw new Error(`读取剪贴板失败: ${(error as Error).message}`);\n }\n}\n","import { ClipboardData } from './index.js';\n\nexport function generateHtml(data: ClipboardData): string {\n if (!data || !data.recordIds || !data.recordMap) {\n console.error('Invalid data structure:', data);\n return '';\n }\n\n const jsonStr = JSON.stringify(data);\n const encodedJson = jsonStr\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n\n let html = `<meta charset=\"utf-8\"><div data-page-id=\"${data.rootId}\" data-lark-html-role=\"root\" data-docx-has-block-data=\"true\">`;\n\n for (const recordId of data.recordIds) {\n const record = data.recordMap[recordId];\n if (!record) continue;\n\n const snapshot = record.snapshot;\n const blockHtml = generateBlockHtml(snapshot, recordId);\n html += blockHtml;\n }\n\n html += `</div><span data-lark-record-data=\"${encodedJson}\" data-lark-record-format=\"docx/record\" class=\"lark-record-clipboard\"></span>`;\n return html;\n}\n\nexport function generateBlockHtml(snapshot: any, recordId: string): string {\n const { type, text, code, language, level, data, checked, children } = snapshot;\n\n switch (type) {\n case 'page':\n return '';\n\n case 'isv':\n const mermaidCode = data && data.data ? data.data : '';\n return `<div class=\"ace-line old-record-id-${recordId}\">\n<span class=\"block-paste-placeholder\">${mermaidCode || '暂时无法在飞书文档外展示此内容'}</span>\n</div>`;\n\n case 'heading1':\n const text1 = getTextContent(text);\n return `<h1 class=\"heading-1 ace-line old-record-id-${recordId}\">${escapeHtml(text1)}</h1>`;\n\n case 'heading2':\n const text2 = getTextContent(text);\n return `<h2 class=\"heading-2 ace-line old-record-id-${recordId}\">${escapeHtml(text2)}</h2>`;\n\n case 'heading3':\n const text3 = getTextContent(text);\n return `<h3 class=\"heading-3 ace-line old-record-id-${recordId}\">${escapeHtml(text3)}</h3>`;\n\n case 'heading4':\n const text4 = getTextContent(text);\n return `<h4 class=\"heading-4 ace-line old-record-id-${recordId}\">${escapeHtml(text4)}</h4>`;\n\n case 'heading5':\n const text5 = getTextContent(text);\n return `<h5 class=\"heading-5 ace-line old-record-id-${recordId}\">${escapeHtml(text5)}</h5>`;\n\n case 'heading6':\n const text6 = getTextContent(text);\n return `<h6 class=\"heading-6 ace-line old-record-id-${recordId}\">${escapeHtml(text6)}</h6>`;\n\n case 'text':\n const textContent = getTextContent(text);\n return `<div class=\"ace-line old-record-id-${recordId}\">${escapeHtml(textContent)}</div>`;\n\n case 'quote':\n const quoteText = getTextContent(text);\n return `<blockquote class=\"ace-line old-record-id-${recordId}\">${escapeHtml(quoteText)}</blockquote>`;\n\n case 'code':\n const codeContent = code || getTextContent(text) || '';\n const escapedCode = escapeHtml(codeContent);\n return `<pre style=\"white-space:pre;\" class=\"ace-line old-record-id-${recordId}\"><code class=\"language-${language || 'plaintext'}\" data-lark-language=\"${language || 'plaintext'}\" data-wrap=\"false\"><div>${escapedCode}</div></code></pre>`;\n\n case 'divider':\n return `<div data-type=\"divider\" class=\"old-record-id-${recordId}\"><hr></div>`;\n\n case 'bullet':\n const bulletText = getTextContent(text);\n return `<ul class=\"list-bullet1\"><li class=\"ace-line old-record-id-${recordId}\" data-list=\"bullet\"><div>${escapeHtml(bulletText)}</div></li></ul>`;\n\n case 'ordered':\n const orderedText = getTextContent(text);\n return `<ol class=\"list-number1\"><li class=\"ace-line old-record-id-${recordId}\" data-list=\"number\"><div>${escapeHtml(orderedText)}</div></li></ol>`;\n\n case 'todo':\n const todoText = getTextContent(text);\n const isChecked = snapshot.done || false;\n const listClass = isChecked ? 'list-done1' : 'list-check';\n return `<ul class=\"${listClass}\"><li class=\"ace-line old-record-id-${recordId}\" data-list=\"${isChecked ? 'done' : 'check'}\"><div>${escapeHtml(todoText)}</div></li></ul>`;\n\n case 'image':\n return `<div class=\"ace-line old-record-id-${recordId}\">[markdown-to-lark 暂无法支持图片转换]</div>`;\n\n default:\n return '';\n }\n}\n\nfunction getTextContent(textData: any): string {\n if (!textData || !textData.initialAttributedTexts) {\n return '';\n }\n const texts = textData.initialAttributedTexts.text;\n if (!texts) return '';\n return Object.values(texts).join('');\n}\n\nfunction escapeHtml(text: string): string {\n if (typeof text !== 'string' || !text) return '';\n return text\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAM,WAAW;AAEV,SAAS,kBAA0B;AACxC,MAAI,KAAK;AACT,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAM,SAAS,KAAK,MAAM,KAAK,OAAO,IAAI,SAAS,MAAM,CAAC;AAAA,IAC5D;AACA,QAAI,IAAI,EAAG,OAAM;AAAA,EACnB;AACA,SAAO,OAAO,EAAE;AAClB;AAEO,SAAS,mBAA2B;AACzC,MAAI,KAAK;AACT,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAM,SAAS,KAAK,MAAM,KAAK,OAAO,IAAI,SAAS,MAAM,CAAC;AAAA,IAC5D;AACA,QAAI,IAAI,EAAG,OAAM;AAAA,EACnB;AACA,SAAO,QAAQ,EAAE;AACnB;AAEO,SAAS,iBAAyB;AACvC,MAAI,KAAK;AACT,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAM,SAAS,KAAK,MAAM,KAAK,OAAO,IAAI,SAAS,MAAM,CAAC;AAAA,IAC5D;AACA,QAAI,IAAI,EAAG,OAAM;AAAA,EACnB;AACA,SAAO,MAAM,EAAE;AACjB;;;AC/BA,qBAAwB;AACxB,0BAAwB;AACxB,yBAAuB;AACvB,wBAAsB;AACtB,8BAA4B;AAerB,IAAM,0BAAN,MAA8B;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,cAAc;AACZ,SAAK,SAAS;AACd,SAAK,WAAW;AAChB,SAAK,YAAY,CAAC;AAClB,SAAK,WAAW,CAAC;AACjB,SAAK,YAAY,CAAC;AAClB,SAAK,aAAa,CAAC;AACnB,SAAK,eAAe;AACpB,SAAK,mBAAmB,CAAC;AAAA,EAC3B;AAAA,EAEA,MAAM,QAAQ,UAA0C;AACtD,SAAK,SAAS,eAAe;AAC7B,SAAK,YAAY,CAAC;AAClB,SAAK,WAAW,CAAC;AACjB,SAAK,YAAY,CAAC;AAClB,SAAK,aAAa,CAAC;AACnB,SAAK,eAAe;AACpB,SAAK,mBAAmB,CAAC;AAEzB,UAAM,qBAAqB,KAAK,oBAAoB,QAAQ;AAE5D,UAAM,OAAO,UAAM,wBAAQ,EACxB,IAAI,oBAAAA,OAAW,EACf,IAAI,kBAAAC,OAAS,EACb,IAAI,mBAAAC,OAAU,EACd,MAAM,kBAAkB;AAE3B,SAAK,gBAAgB,KAAK,MAAM;AAChC,SAAK,YAAY,IAAI;AAErB,WAAO,KAAK,mBAAmB;AAAA,EACjC;AAAA,EAEQ,oBAAoB,UAA0B;AACpD,WAAO,SAAS,QAAQ,sBAAsB,CAAC,GAAG,YAAY;AAC5D,aAAO;AAAA,EAAO,QAAQ,KAAK,CAAC;AAAA;AAAA,IAC9B,CAAC;AAAA,EACH;AAAA,EAEQ,gBAAgB,QAAsB;AAC5C,SAAK,UAAU,MAAM,IAAI;AAAA,MACvB,IAAI;AAAA,MACJ,UAAU;AAAA,QACR,MAAM;AAAA,QACN,WAAW;AAAA,QACX,UAAU;AAAA,QACV,WAAW;AAAA,QACX,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ,KAAK;AAAA,QACb,UAAU,CAAC;AAAA,QACX,MAAM,KAAK,eAAe,EAAE;AAAA,QAC5B,OAAO;AAAA,QACP,YAAY,CAAC;AAAA,QACb,OAAO;AAAA,UACL,OAAO,EAAE,SAAS,GAAG,aAAa,CAAC,EAAE;AAAA,UACrC,wBAAwB;AAAA,YACtB,SAAS,CAAC;AAAA,YACV,MAAM,EAAE,KAAK,qBAAM;AAAA,UACrB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,YAAY,MAAkB;AACpC,UAAM,oBAA8B,CAAC;AAErC,uCAAM,MAAM,CAAC,MAAM,OAAO,WAAW;AACnC,UAAI,QAAQ,SAAS,YAAY;AAC/B,eAAO;AAAA,MACT;AAEA,UAAI,KAAK,SAAS,WAAW;AAC3B,cAAM,WAAW,iBAAiB;AAClC,aAAK,UAAU,QAAQ,IAAI,KAAK,mBAAmB,UAAU,IAAe;AAC5E,aAAK,UAAU,KAAK,QAAQ;AAC5B,aAAK,SAAS,KAAK,KAAK,SAAS,SAAS,CAAC;AAC3C,0BAAkB,KAAK,QAAQ;AAAA,MACjC,WAAW,KAAK,SAAS,aAAa;AACpC,cAAM,WAAW,iBAAiB;AAClC,aAAK,UAAU,QAAQ,IAAI,KAAK,gBAAgB,UAAU,IAAiB;AAC3E,aAAK,UAAU,KAAK,QAAQ;AAC5B,aAAK,SAAS,KAAK,KAAK,SAAS,SAAS,CAAC;AAC3C,0BAAkB,KAAK,QAAQ;AAAA,MACjC,WAAW,KAAK,SAAS,cAAc;AACrC,cAAM,WAAW,iBAAiB;AAClC,aAAK,UAAU,QAAQ,IAAI,KAAK,iBAAiB,UAAU,IAAkB;AAC7E,aAAK,UAAU,KAAK,QAAQ;AAC5B,aAAK,SAAS,KAAK,KAAK,SAAS,SAAS,CAAC;AAC3C,0BAAkB,KAAK,QAAQ;AAC/B,eAAO;AAAA,MACT,WAAW,KAAK,SAAS,QAAQ;AAC/B,cAAM,WAAW,iBAAiB;AAClC,cAAM,WAAW;AACjB,YAAI,SAAS,QAAQ,SAAS,KAAK,YAAY,MAAM,WAAW;AAC9D,eAAK,UAAU,QAAQ,IAAI,KAAK,mBAAmB,UAAU,SAAS,KAAK;AAAA,QAC7E,OAAO;AACL,eAAK,UAAU,QAAQ,IAAI,KAAK,gBAAgB,UAAU,SAAS,OAAO,SAAS,QAAQ,MAAS;AAAA,QACtG;AACA,aAAK,UAAU,KAAK,QAAQ;AAC5B,aAAK,SAAS,KAAK,KAAK,SAAS,SAAS,CAAC;AAC3C,0BAAkB,KAAK,QAAQ;AAAA,MACjC,WAAW,KAAK,SAAS,iBAAiB;AACxC,cAAM,WAAW,iBAAiB;AAClC,aAAK,UAAU,QAAQ,IAAI,KAAK,mBAAmB,QAAQ;AAC3D,aAAK,UAAU,KAAK,QAAQ;AAC5B,aAAK,SAAS,KAAK,KAAK,SAAS,SAAS,CAAC;AAC3C,0BAAkB,KAAK,QAAQ;AAAA,MACjC,WAAW,KAAK,SAAS,QAAQ;AAC/B,cAAM,WAAW;AACjB,cAAM,WAAW,iBAAiB;AAClC,cAAM,WAAW,SAAS,SAAS;AACnC,aAAK,UAAU,QAAQ,IAAI,KAAK,6BAA6B,UAAU,QAAQ;AAC/E,aAAK,UAAU,KAAK,QAAQ;AAC5B,aAAK,SAAS,KAAK,KAAK,SAAS,SAAS,CAAC;AAC3C,0BAAkB,KAAK,QAAQ;AAAA,MACjC,WAAW,KAAK,SAAS,SAAS;AAChC,cAAM,iBAAiB,KAAK,aAAa,IAAI;AAC7C,0BAAkB,KAAK,eAAe,OAAO;AAAA,MAC/C;AAAA,IACF,CAAC;AAED,UAAM,iBAAiB,oBAAI,IAAS;AACpC,uCAAM,MAAM,QAAQ,CAAC,MAAM,OAAO,WAAW;AAC3C,UAAI,eAAe,IAAI,IAAI,GAAG;AAC5B,eAAO;AAAA,MACT;AACA,qBAAe,IAAI,IAAI;AACvB,UAAI,QAAQ,SAAS,YAAY;AAC/B,eAAO;AAAA,MACT;AACA,YAAM,gBAAgB,KAAK,YAAY,IAAY;AACnD,wBAAkB,KAAK,GAAG,aAAa;AAAA,IACzC,CAAC;AAED,QAAI,KAAK,UAAU,KAAK,UAAU,KAAK,MAAM,GAAG;AAC9C,WAAK,UAAU,KAAK,MAAM,EAAE,SAAS,WAAW;AAAA,IAClD;AAAA,EACF;AAAA,EAEQ,YAAY,UAA0B;AAC5C,UAAM,UAAU,SAAS,WAAW;AACpC,WAAO,KAAK,iBAAiB,SAAS,UAAwB,SAAS,MAAM,GAAG,IAAI;AAAA,EACtF;AAAA,EAEQ,iBACN,OACA,SACA,WAA0B,MAC1B,QAAgB,GAChB,aAAsB,OACZ;AACV,UAAM,iBAA2B,CAAC;AAClC,UAAM,cAAwB,CAAC;AAC/B,QAAI,QAAQ;AAEZ,eAAW,QAAQ,OAAO;AACxB,YAAM,WAAW,iBAAiB;AAClC,YAAM,UAAU,KAAK,SAAS,SAAS;AACvC,UAAI,YAAY,UAAU,YAAY;AAEtC,YAAM,aAAa,KAAK,YAAY,UAAa,KAAK,YAAY;AAClE,UAAI,YAAY;AACd,oBAAY;AAAA,MACd;AAEA,YAAM,cAAc,KAAK;AACzB,YAAM,WAAW,YAAY,SAAS,KAAK,YAAY,CAAC,EAAE,SAAS,cAC/D,KAAK,mBAAmB,YAAY,CAAC,EAAE,QAAQ,IAC/C,KAAK,mBAAmB,WAAW;AAGvC,UAAI,cAAc,UAAU,GAAG;AAC7B,aAAK,UAAU,KAAK,QAAQ;AAAA,MAC9B;AAEA,YAAM,WAAgB;AAAA,QACpB,MAAM;AAAA,QACN,WAAW,YAAY,KAAK;AAAA,QAC5B,UAAU,CAAC;AAAA,QACX,WAAW,CAAC;AAAA,QACZ,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ,KAAK;AAAA,QACb,UAAU,CAAC;AAAA,QACX,MAAM,UAAU,KAAK,uBAAuB,QAAQ,IAAI,KAAK,eAAe,QAAQ;AAAA,QACpF,OAAO;AAAA,QACP,QAAQ;AAAA,MACV;AAEA,UAAI,YAAY;AACd,iBAAS,OAAO,KAAK,WAAW;AAAA,MAClC;AAGA,UAAI,SAAS;AACX,iBAAS,QAAQ,QAAQ;AACzB,iBAAS,MAAM,UAAU,IAAI,MAAM;AACnC;AAAA,MACF,OAAO;AAEL,iBAAS,QAAQ,QAAQ;AAAA,MAC3B;AAEA,iBAAW,SAAS,KAAK,UAAU;AACjC,YAAI,MAAM,SAAS,QAAQ;AACzB,gBAAM,iBAAiB,KAAK;AAAA,YACzB,MAAe;AAAA,YACf,MAAe,WAAW;AAAA,YAC3B;AAAA,YACA,QAAQ;AAAA,YACR;AAAA,UACF;AACA,mBAAS,SAAS,KAAK,GAAG,cAAc;AAAA,QAC1C;AAAA,MACF;AAEA,WAAK,UAAU,QAAQ,IAAI;AAAA,QACzB,IAAI;AAAA,QACJ;AAAA,MACF;AAEA,WAAK,SAAS,KAAK,OAAO;AAC1B,qBAAe,KAAK,QAAQ;AAE5B,UAAI,cAAc,UAAU,GAAG;AAC7B,oBAAY,KAAK,QAAQ;AAAA,MAC3B;AAAA,IACF;AAEA,WAAO,aAAa,cAAc;AAAA,EACpC;AAAA,EAEQ,mBAAmB,UAAgC;AACzD,UAAM,WAA0B,CAAC;AAEjC,eAAW,SAAS,UAAU;AAC5B,UAAI,MAAM,SAAS,QAAQ;AACzB,iBAAS,KAAK,EAAE,MAAM,MAAM,MAAM,CAAC;AAAA,MACrC,WAAW,MAAM,SAAS,UAAU;AAClC,cAAM,OAAO,KAAK,mBAAmB,KAAK;AAC1C,iBAAS,KAAK,EAAE,MAAM,MAAM,KAAK,CAAC;AAAA,MACpC,WAAW,MAAM,SAAS,YAAY;AACpC,cAAM,OAAO,KAAK,mBAAmB,KAAK;AAC1C,iBAAS,KAAK,EAAE,MAAM,QAAQ,KAAK,CAAC;AAAA,MACtC,WAAW,MAAM,SAAS,UAAU;AAClC,cAAM,OAAO,KAAK,mBAAmB,KAAK;AAC1C,iBAAS,KAAK,EAAE,MAAM,eAAe,KAAK,CAAC;AAAA,MAC7C,WAAW,MAAM,SAAS,cAAc;AACtC,iBAAS,KAAK,EAAE,MAAM,MAAM,MAAM,CAAC;AAAA,MACrC,WAAW,MAAM,SAAS,QAAQ;AAChC,cAAM,WAAW;AACjB,cAAM,OAAO,KAAK,mBAAmB,QAAQ;AAC7C,iBAAS,KAAK,EAAE,MAAM,SAAS,SAAS,IAAI,CAAC;AAAA,MAC/C,WAAW,MAAM,SAAS,SAAS;AACjC,iBAAS,KAAK,EAAE,MAAM,8EAAiC,CAAC;AAAA,MAC1D,WAAW,MAAM,SAAS,cAAc;AACtC,cAAM,WAAW;AACjB,iBAAS,KAAK,EAAE,MAAM,KAAK,UAAU,SAAS,SAAS,GAAG,CAAC;AAAA,MAC7D,WAAW,MAAM,SAAS,SAAS;AACjC,iBAAS,KAAK,EAAE,MAAM,KAAK,CAAC;AAAA,MAC9B;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,mBAAmB,MAAmB;AAC5C,QAAI,OAAO;AACX,QAAI,KAAK,SAAS,QAAQ;AACxB,aAAO,KAAK;AAAA,IACd,WAAW,KAAK,UAAU;AACxB,iBAAW,SAAS,KAAK,UAAU;AACjC,gBAAQ,KAAK,mBAAmB,KAAK;AAAA,MACvC;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,mBAAmB,UAAkB,MAAoB;AAC/D,UAAM,QAAQ,KAAK;AACnB,UAAM,WAAW,KAAK,mBAAmB,KAAK,QAAQ;AAEtD,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,UAAU;AAAA,QACR,MAAM,UAAU,KAAK;AAAA,QACrB,WAAW,KAAK;AAAA,QAChB,UAAU,CAAC;AAAA,QACX,WAAW,CAAC;AAAA,QACZ,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ,KAAK;AAAA,QACb,UAAU,CAAC;AAAA,QACX,MAAM,KAAK,eAAe,QAAQ;AAAA,QAClC,OAAO;AAAA,QACP,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,gBAAgB,UAAkB,MAAsB;AAC9D,UAAM,WAAW,KAAK,mBAAmB,KAAK,QAAQ;AAEtD,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,UAAU;AAAA,QACR,MAAM;AAAA,QACN,WAAW,KAAK;AAAA,QAChB,UAAU,CAAC;AAAA,QACX,WAAW,CAAC;AAAA,QACZ,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ,KAAK;AAAA,QACb,UAAU,CAAC;AAAA,QACX,MAAM,KAAK,eAAe,QAAQ;AAAA,QAClC,OAAO;AAAA,QACP,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,iBAAiB,UAAkB,MAAuB;AAChE,UAAM,mBAAmB,KAAK,yBAAyB,KAAK,QAAQ;AACpE,UAAM,WAAW,KAAK,mBAAmB,gBAAgB;AAEzD,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,UAAU;AAAA,QACR,MAAM;AAAA,QACN,WAAW,KAAK;AAAA,QAChB,UAAU,CAAC;AAAA,QACX,WAAW,CAAC;AAAA,QACZ,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ,KAAK;AAAA,QACb,UAAU,CAAC;AAAA,QACX,MAAM,KAAK,eAAe,QAAQ;AAAA,QAClC,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,yBAAyB,UAAwB;AACvD,UAAM,SAAgB,CAAC;AAEvB,aAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,YAAM,QAAQ,SAAS,CAAC;AACxB,UAAI,MAAM,SAAS,cAAc;AAC/B,cAAM,gBAAgB,KAAK,yBAAyB,MAAM,QAAQ;AAClE,YAAI,OAAO,SAAS,GAAG;AACrB,iBAAO,KAAK,EAAE,MAAM,QAAQ,OAAO,OAAO,CAAC;AAAA,QAC7C;AACA,eAAO,KAAK,GAAG,aAAa;AAAA,MAC9B,WAAW,MAAM,SAAS,aAAa;AACrC,YAAI,OAAO,SAAS,GAAG;AACrB,iBAAO,KAAK,EAAE,MAAM,QAAQ,OAAO,OAAO,CAAC;AAAA,QAC7C;AACA,eAAO,KAAK,GAAG,MAAM,QAAQ;AAAA,MAC/B,OAAO;AACL,eAAO,KAAK,KAAK;AAAA,MACnB;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,oBAAoB,UAAkB,UAAuB;AACnE,UAAM,WAA0B,CAAC,EAAE,MAAM,KAAK,SAAS,CAAC;AAExD,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,UAAU;AAAA,QACR,MAAM;AAAA,QACN,WAAW,KAAK;AAAA,QAChB,UAAU,CAAC;AAAA,QACX,WAAW,CAAC;AAAA,QACZ,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ,KAAK;AAAA,QACb,UAAU,CAAC;AAAA,QACX,UAAU,CAAC;AAAA,UACT,UAAU;AAAA,YACR,OAAO;AAAA,UACT;AAAA,QACF,CAAC;AAAA,QACD,MAAM,KAAK,eAAe,QAAQ;AAAA,QAClC,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,6BAA6B,UAAkB,UAAuB;AAC5E,UAAM,WAA0B,CAAC,EAAE,MAAM,KAAK,UAAU,WAAW,WAAW,CAAC;AAE/E,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,UAAU;AAAA,QACR,MAAM;AAAA,QACN,WAAW,KAAK;AAAA,QAChB,UAAU,CAAC;AAAA,QACX,WAAW,CAAC;AAAA,QACZ,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ,KAAK;AAAA,QACb,UAAU,CAAC;AAAA,QACX,MAAM,KAAK,eAAe,QAAQ;AAAA,QAClC,OAAO;AAAA,QACP,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,gBAAgB,UAAkB,MAAc,MAA+B;AACrF,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,UAAU;AAAA,QACR,MAAM;AAAA,QACN,WAAW,KAAK;AAAA,QAChB,UAAU,CAAC;AAAA,QACX,WAAW,CAAC;AAAA,QACZ,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ,KAAK;AAAA,QACb,UAAU,CAAC;AAAA,QACX,UAAU,QAAQ;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,eAAe,IAAI;AAAA,QAC9B,oBAAoB;AAAA,QACpB,SAAS;AAAA,UACP,MAAM;AAAA,YACJ,wBAAwB;AAAA,cACtB,MAAM,EAAE,KAAK,KAAK;AAAA,cAClB,SAAS,EAAE,KAAK,OAAO;AAAA,YACzB;AAAA,YACA,OAAO,EAAE,aAAa,CAAC,GAAG,SAAS,EAAE;AAAA,UACvC;AAAA,QACF;AAAA,QACA,MAAM;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,mBAAmB,UAAuB;AAChD,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,UAAU;AAAA,QACR,MAAM;AAAA,QACN,WAAW,KAAK;AAAA,QAChB,UAAU,CAAC;AAAA,QACX,WAAW,CAAC;AAAA,QACZ,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ,KAAK;AAAA,QACb,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,mBAAmB,UAAkB,MAAmB;AAC9D,UAAM,UAAU,gBAAgB;AAEhC,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,UAAU;AAAA,QACR,MAAM;AAAA,QACN,WAAW,KAAK;AAAA,QAChB,UAAU;AAAA,QACV,WAAW;AAAA,QACX,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ,KAAK;AAAA,QACb,UAAU,CAAC;AAAA,QACX,MAAM;AAAA,UACJ,MAAM;AAAA,UACN,OAAO;AAAA,UACP,MAAM;AAAA,QACR;AAAA,QACA,cAAc;AAAA,QACd,eAAe;AAAA,QACf,UAAU;AAAA,UACR,WAAW;AAAA,UACX,aAAa;AAAA,QACf;AAAA,QACA,iBAAiB,CAAC;AAAA,QAClB,wBAAwB,KAAK,iBAAiB;AAAA,MAChD;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,eAAe,UAAuC;AAC5D,QAAI,OAAO,aAAa,UAAU;AAChC,iBAAW,CAAC,EAAE,MAAM,SAAS,CAAC;AAAA,IAChC;AAEA,QAAI,CAAC,YAAY,SAAS,WAAW,GAAG;AACtC,aAAO;AAAA,QACL,OAAO,EAAE,SAAS,GAAG,aAAa,CAAC,EAAE;AAAA,QACrC,wBAAwB;AAAA,UACtB,SAAS;AAAA,UACT,MAAM,EAAE,KAAK,GAAG;AAAA,UAChB,MAAM,CAAC;AAAA,UACP,MAAM,CAAC;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAEA,UAAM,mBAA4C;AAAA,MAChD,KAAK,CAAC,UAAU,KAAK,QAAQ;AAAA,IAC/B;AACA,UAAM,cAAsC;AAAA,MAC1C,CAAC,UAAU,KAAK,QAAQ,EAAE,GAAG;AAAA,IAC/B;AAEA,QAAI,eAAe;AACnB,UAAM,cAAwB,CAAC;AAC/B,UAAM,YAAsB,CAAC;AAE7B,eAAW,WAAW,UAAU;AAC9B,YAAM,OAAO,QAAQ,QAAQ;AAC7B,YAAM,SAAS,KAAK;AAEpB,UAAI,WAAW,EAAG;AAElB,gBAAU,KAAK,IAAI;AAEnB,YAAM,cAAwB,CAAC,GAAG;AAElC,UAAI,QAAQ,SAAS;AACnB,cAAM,cAAc,aAAa,SAAS;AAC1C;AACA,cAAM,aAAa,mBAAmB,QAAQ,OAAO;AACrD,yBAAiB,WAAW,IAAI,CAAC,QAAQ,UAAU;AACnD,oBAAY,QAAQ,UAAU,EAAE,IAAI,SAAS,WAAW;AACxD,oBAAY,KAAK,WAAW;AAAA,MAC9B;AAEA,UAAI,QAAQ,MAAM;AAChB,cAAM,cAAc;AACpB,YAAI,cAAc,YAAY,WAAW;AACzC,YAAI,gBAAgB,QAAW;AAC7B,wBAAc;AACd;AACA,2BAAiB,YAAY,SAAS,CAAC,IAAI,CAAC,QAAQ,MAAM;AAC1D,sBAAY,WAAW,IAAI;AAAA,QAC7B;AACA,oBAAY,KAAK,YAAY,SAAS,CAAC;AAAA,MACzC;AAEA,UAAI,QAAQ,QAAQ;AAClB,cAAM,gBAAgB;AACtB,YAAI,gBAAgB,YAAY,aAAa;AAC7C,YAAI,kBAAkB,QAAW;AAC/B,0BAAgB;AAChB;AACA,2BAAiB,cAAc,SAAS,CAAC,IAAI,CAAC,UAAU,MAAM;AAC9D,sBAAY,aAAa,IAAI;AAAA,QAC/B;AACA,oBAAY,KAAK,cAAc,SAAS,CAAC;AAAA,MAC3C;AAEA,UAAI,QAAQ,WAAW;AACrB,cAAM,mBAAmB;AACzB,YAAI,mBAAmB,YAAY,gBAAgB;AACnD,YAAI,qBAAqB,QAAW;AAClC,6BAAmB;AACnB;AACA,2BAAiB,iBAAiB,SAAS,CAAC,IAAI,CAAC,aAAa,MAAM;AACpE,sBAAY,gBAAgB,IAAI;AAAA,QAClC;AACA,oBAAY,KAAK,iBAAiB,SAAS,CAAC;AAAA,MAC9C;AAEA,UAAI,QAAQ,eAAe;AACzB,cAAM,gBAAgB;AACtB,YAAI,gBAAgB,YAAY,aAAa;AAC7C,YAAI,kBAAkB,QAAW;AAC/B,0BAAgB;AAChB;AACA,2BAAiB,cAAc,SAAS,CAAC,IAAI,CAAC,iBAAiB,MAAM;AACrE,sBAAY,aAAa,IAAI;AAAA,QAC/B;AACA,oBAAY,KAAK,cAAc,SAAS,CAAC;AAAA,MAC3C;AAEA,UAAI,QAAQ,UAAU;AACpB,cAAM,YAAY,aAAa,SAAS;AACxC;AACA,yBAAiB,SAAS,IAAI,CAAC,YAAY,QAAQ,QAAQ;AAC3D,oBAAY,YAAY,QAAQ,QAAQ,EAAE,IAAI,SAAS,SAAS;AAChE,oBAAY,KAAK,SAAS;AAAA,MAC5B;AAEA,YAAM,YAAY,YAAY,KAAK,GAAG;AACtC,kBAAY,KAAK,IAAI,SAAS,IAAI,MAAM,EAAE;AAAA,IAC5C;AAEA,UAAM,WAAW,UAAU,KAAK,EAAE;AAClC,UAAM,aAAa,YAAY,KAAK,EAAE;AAEtC,WAAO;AAAA,MACL,OAAO;AAAA,QACL,SAAS;AAAA,QACT,aAAa;AAAA,QACb;AAAA,MACF;AAAA,MACA,wBAAwB;AAAA,QACtB,SAAS,EAAE,KAAK,WAAW;AAAA,QAC3B,MAAM,EAAE,KAAK,SAAS;AAAA,QACtB,MAAM,CAAC;AAAA,QACP,MAAM,CAAC;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,uBAAuB,UAA8B;AAC3D,QAAI,CAAC,YAAY,SAAS,WAAW,GAAG;AACtC,aAAO;AAAA,QACL,OAAO,EAAE,SAAS,GAAG,aAAa,CAAC,EAAE;AAAA,QACrC,wBAAwB;AAAA,UACtB,SAAS;AAAA,UACT,MAAM,EAAE,KAAK,GAAG;AAAA,UAChB,MAAM,CAAC;AAAA,UACP,MAAM,CAAC;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAEA,UAAM,mBAA4C;AAAA,MAChD,KAAK,CAAC,UAAU,KAAK,QAAQ;AAAA,IAC/B;AACA,UAAM,cAAsC;AAAA,MAC1C,CAAC,UAAU,KAAK,QAAQ,EAAE,GAAG;AAAA,IAC/B;AAEA,QAAI,eAAe;AACnB,UAAM,cAAwB,CAAC;AAC/B,UAAM,YAAsB,CAAC;AAE7B,eAAW,WAAW,UAAU;AAC9B,YAAM,OAAO,QAAQ,QAAQ;AAC7B,YAAM,SAAS,KAAK;AAEpB,UAAI,WAAW,EAAG;AAElB,gBAAU,KAAK,IAAI;AAEnB,YAAM,cAAwB,CAAC,GAAG;AAElC,UAAI,QAAQ,SAAS;AACnB,cAAM,cAAc,aAAa,SAAS;AAC1C;AACA,cAAM,aAAa,mBAAmB,QAAQ,OAAO;AACrD,yBAAiB,WAAW,IAAI,CAAC,QAAQ,UAAU;AACnD,oBAAY,QAAQ,UAAU,EAAE,IAAI,SAAS,WAAW;AACxD,oBAAY,KAAK,WAAW;AAAA,MAC9B;AAEA,UAAI,QAAQ,MAAM;AAChB,cAAM,cAAc;AACpB,YAAI,cAAc,YAAY,WAAW;AACzC,YAAI,gBAAgB,QAAW;AAC7B,wBAAc;AACd;AACA,2BAAiB,YAAY,SAAS,CAAC,IAAI,CAAC,QAAQ,MAAM;AAC1D,sBAAY,WAAW,IAAI;AAAA,QAC7B;AACA,oBAAY,KAAK,YAAY,SAAS,CAAC;AAAA,MACzC;AAEA,UAAI,QAAQ,QAAQ;AAClB,cAAM,gBAAgB;AACtB,YAAI,gBAAgB,YAAY,aAAa;AAC7C,YAAI,kBAAkB,QAAW;AAC/B,0BAAgB;AAChB;AACA,2BAAiB,cAAc,SAAS,CAAC,IAAI,CAAC,UAAU,MAAM;AAC9D,sBAAY,aAAa,IAAI;AAAA,QAC/B;AACA,oBAAY,KAAK,cAAc,SAAS,CAAC;AAAA,MAC3C;AAEA,UAAI,QAAQ,WAAW;AACrB,cAAM,mBAAmB;AACzB,YAAI,mBAAmB,YAAY,gBAAgB;AACnD,YAAI,qBAAqB,QAAW;AAClC,6BAAmB;AACnB;AACA,2BAAiB,iBAAiB,SAAS,CAAC,IAAI,CAAC,aAAa,MAAM;AACpE,sBAAY,gBAAgB,IAAI;AAAA,QAClC;AACA,oBAAY,KAAK,iBAAiB,SAAS,CAAC;AAAA,MAC9C;AAEA,UAAI,QAAQ,eAAe;AACzB,cAAM,gBAAgB;AACtB,YAAI,gBAAgB,YAAY,aAAa;AAC7C,YAAI,kBAAkB,QAAW;AAC/B,0BAAgB;AAChB;AACA,2BAAiB,cAAc,SAAS,CAAC,IAAI,CAAC,iBAAiB,MAAM;AACrE,sBAAY,aAAa,IAAI;AAAA,QAC/B;AACA,oBAAY,KAAK,cAAc,SAAS,CAAC;AAAA,MAC3C;AAEA,UAAI,QAAQ,UAAU;AACpB,cAAM,YAAY,aAAa,SAAS;AACxC;AACA,yBAAiB,SAAS,IAAI,CAAC,YAAY,QAAQ,QAAQ;AAC3D,oBAAY,YAAY,QAAQ,QAAQ,EAAE,IAAI,SAAS,SAAS;AAChE,oBAAY,KAAK,SAAS;AAAA,MAC5B;AAEA,YAAM,YAAY,YAAY,KAAK,GAAG;AACtC,kBAAY,KAAK,IAAI,SAAS,IAAI,MAAM,EAAE;AAAA,IAC5C;AAEA,UAAM,WAAW,UAAU,KAAK,EAAE;AAClC,UAAM,aAAa,YAAY,KAAK,EAAE;AAEtC,WAAO;AAAA,MACL,OAAO;AAAA,QACL,SAAS;AAAA,QACT,aAAa;AAAA,QACb;AAAA,MACF;AAAA,MACA,wBAAwB;AAAA,QACtB,SAAS,EAAE,KAAK,WAAW;AAAA,QAC3B,MAAM,EAAE,KAAK,SAAS;AAAA,QACtB,MAAM,CAAC;AAAA,QACP,MAAM,CAAC;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,qBAAoC;AAC1C,UAAM,OAAsB;AAAA,MAC1B,OAAO;AAAA,MACP,QAAQ,KAAK;AAAA,MACb,UAAU,KAAK;AAAA,MACf,UAAU,KAAK;AAAA,MACf,WAAW,KAAK;AAAA,MAChB,WAAW,KAAK;AAAA,MAChB,YAAY,CAAC;AAAA,MACb,WAAW,CAAC;AAAA,MACZ,OAAO;AAAA,QACL,SAAS;AAAA,QACT,eAAe,KAAK,iBAAiB;AAAA,QACrC,oBAAoB,CAAC;AAAA,QACrB,sBAAsB,CAAC;AAAA,QACvB,uBAAuB;AAAA,MACzB;AAAA,MACA,sBAAsB;AAAA,MACtB,WAAW,KAAK,iBAAiB;AAAA,IACnC;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,mBAA2B;AACjC,WAAO,uCAAuC,QAAQ,SAAS,OAAK;AAClE,YAAM,IAAI,KAAK,OAAO,IAAI,KAAK;AAC/B,YAAM,IAAI,MAAM,MAAM,IAAK,IAAI,IAAM;AACrC,aAAO,EAAE,SAAS,EAAE;AAAA,IACtB,CAAC;AAAA,EACH;AAAA,EAEQ,aAAa,WAAqC;AACxD,UAAM,gBAAgB,iBAAiB;AACvC,UAAM,WAAW,UAAU;AAE3B,QAAI,CAAC,YAAY,SAAS,WAAW,GAAG;AACtC,aAAO,EAAE,SAAS,cAAc;AAAA,IAClC;AAEA,UAAM,aAAc,UAAU,SAAsB,CAAC;AACrD,UAAM,OAAO;AAEb,UAAM,YAAsB,CAAC;AAC7B,UAAM,SAAmB,CAAC;AAC1B,UAAM,YAAsD,CAAC;AAC7D,UAAM,UAAoG,CAAC;AAC3G,UAAM,eAAyB,CAAC;AAEhC,UAAM,UAAU,WAAW,UAAU,KAAK,CAAC,GAAG,UAAU,UAAU;AAClE,UAAM,UAAU,KAAK;AAErB,aAAS,IAAI,GAAG,IAAI,SAAS,KAAK;AAChC,YAAM,QAAQ,MAAM,KAAK,iBAAiB,EAAE,QAAQ,MAAM,EAAE,CAAC;AAC7D,gBAAU,KAAK,KAAK;AACpB,gBAAU,KAAK,IAAI,EAAE,cAAc,IAAI;AAAA,IACzC;AAEA,aAAS,IAAI,GAAG,IAAI,SAAS,KAAK;AAChC,YAAM,QAAQ,MAAM,KAAK,iBAAiB,EAAE,QAAQ,MAAM,EAAE,CAAC;AAC7D,aAAO,KAAK,KAAK;AAAA,IACnB;AAEA,UAAM,aAAa,CAAC,UAAkB,aAAoB;AACxD,YAAM,QAAQ,OAAO,QAAQ;AAC7B,eAAS,WAAW,GAAG,WAAW,SAAS,UAAU,WAAW,SAAS,YAAY;AACnF,cAAM,QAAQ,UAAU,QAAQ;AAChC,cAAM,WAAW,SAAS,QAAQ;AAClC,cAAM,eAAe,iBAAiB;AAEtC,cAAM,mBAAmB,KAAK,mBAAmB,SAAS,YAAY,CAAC,CAAC;AACxE,cAAM,QAAQ,WAAW,QAAQ,KAAK;AAEtC,aAAK,UAAU,YAAY,IAAI;AAAA,UAC7B,IAAI;AAAA,UACJ,UAAU;AAAA,YACR,MAAM;AAAA,YACN,WAAW;AAAA,YACX,UAAU,CAAC;AAAA,YACX,WAAW,CAAC;AAAA,YACZ,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ,KAAK;AAAA,YACb,UAAU,CAAC;AAAA,YACX,MAAM,KAAK,eAAe,gBAAgB;AAAA,UAC5C;AAAA,QACF;AAEA,cAAM,eAAe,iBAAiB;AACtC,aAAK,UAAU,YAAY,IAAI;AAAA,UAC7B,IAAI;AAAA,UACJ,UAAU;AAAA,YACR,MAAM;AAAA,YACN,WAAW;AAAA,YACX,UAAU,CAAC;AAAA,YACX,WAAW,CAAC;AAAA,YACZ,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ,KAAK;AAAA,YACb,UAAU,CAAC;AAAA,YACX,MAAM,KAAK,eAAe,gBAAgB;AAAA,YAC1C,QAAQ;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,aAAK,UAAU,YAAY,EAAE,SAAS,SAAS,KAAK,YAAY;AAEhE,cAAM,UAAU,GAAG,KAAK,GAAG,KAAK;AAChC,gBAAQ,OAAO,IAAI;AAAA,UACjB,UAAU;AAAA,UACV,YAAY,EAAE,UAAU,GAAG,UAAU,EAAE;AAAA,QACzC;AAEA,qBAAa,KAAK,YAAY;AAAA,MAChC;AAAA,IACF;AAEA,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,iBAAW,GAAG,KAAK,CAAC,EAAE,QAAQ;AAAA,IAChC;AAEA,SAAK,UAAU,aAAa,IAAI;AAAA,MAC9B,IAAI;AAAA,MACJ,UAAU;AAAA,QACR,MAAM;AAAA,QACN,WAAW,KAAK;AAAA,QAChB,UAAU,CAAC;AAAA,QACX,WAAW,CAAC;AAAA,QACZ,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ,KAAK;AAAA,QACb,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,UAAU;AAAA,MACZ;AAAA,IACF;AAEA,SAAK,UAAU,KAAK,aAAa;AACjC,SAAK,SAAS,KAAK,KAAK,SAAS,SAAS,CAAC;AAE3C,WAAO,EAAE,SAAS,cAAc;AAAA,EAClC;AACF;;;ACn5BA,oBAAuB;AA0BhB,SAAS,cAAc,UAAmC;AAC/D,QAAM,SAAS,qBAAO,MAAM,QAAQ;AACpC,SAAO,cAAc,MAAM;AAC7B;AAEA,SAAS,cAAc,QAAe,aAA4B,MAAuB;AACvF,QAAM,SAA0B,CAAC;AAEjC,aAAW,SAAS,QAAQ;AAC1B,UAAM,QAAQ,aAAa,OAAO,UAAU;AAC5C,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,aAAO,KAAK,GAAG,KAAK;AAAA,IACtB,WAAW,OAAO;AAChB,aAAO,KAAK,KAAK;AAAA,IACnB;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,aAAa,OAAY,YAAmE;AACnG,QAAM,EAAE,MAAM,KAAK,MAAM,OAAO,OAAO,MAAM,KAAK,IAAI;AAEtD,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO;AAAA,QACL,MAAM,UAAU,KAAK;AAAA,QACrB,MAAM,gBAAgB,IAAI;AAAA,MAC5B;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,gBAAgB,IAAI;AAAA,MAC5B;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,gBAAgB,IAAI;AAAA,MAC5B;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS,MAAM;AAAA,QACf,OAAO,MAAM,IAAI,CAAC,UAAe;AAAA,UAC/B,MAAM,gBAAgB,KAAK,IAAI;AAAA,UAC/B,MAAM,KAAK,YAAY;AAAA,UACvB,SAAS,KAAK;AAAA,QAChB,EAAE;AAAA,MACJ;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU,QAAQ;AAAA,QAClB,MAAM;AAAA,MACR;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,MACR;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,IAET;AACE,aAAO;AAAA,EACX;AACF;AAEA,SAAS,gBAAgB,MAAsB;AAC7C,MAAI,CAAC,KAAM,QAAO;AAElB,QAAM,eAAgB,qBAAe,YAAY,IAAI;AACrD,SAAO,oBAAoB,YAAY;AACzC;AAEA,SAAS,oBAAoB,QAAuB;AAClD,MAAI,SAAS;AACb,aAAW,SAAS,QAAQ;AAC1B,YAAQ,MAAM,MAAM;AAAA,MAClB,KAAK;AACH,kBAAW,MAAc;AACzB;AAAA,MACF,KAAK;AACH,kBAAU,KAAM,MAAc,IAAI;AAClC;AAAA,MACF,KAAK;AACH,kBAAU,IAAK,MAAc,IAAI;AACjC;AAAA,MACF,KAAK;AACH,kBAAU,KAAM,MAAc,IAAI;AAClC;AAAA,MACF,KAAK;AACH,kBAAU,KAAM,MAAc,IAAI;AAClC;AAAA,MACF,KAAK;AACH,kBAAU,2BAA4B,MAAc,IAAI;AACxD;AAAA,MACF,KAAK;AACH,kBAAU,KAAM,MAAc,IAAI,KAAM,MAAc,IAAI;AAC1D;AAAA,MACF;AACE,kBAAW,MAAc,OAAO;AAAA,IACpC;AAAA,EACF;AACA,SAAO;AACT;;;AClIA,eAAsB,iBAAiB,MAAc,UAAiC;AACpF,MAAI;AACF,UAAM,YAAY,yBAAyB,QAAQ;AAEnD,UAAM,gBAAgB,IAAI,cAAc;AAAA,MACtC,aAAa,IAAI,KAAK,CAAC,IAAI,GAAG,EAAE,MAAM,YAAY,CAAC;AAAA,MACnD,cAAc,IAAI,KAAK,CAAC,SAAS,GAAG,EAAE,MAAM,aAAa,CAAC;AAAA,IAC5D,CAAC;AAED,UAAM,UAAU,UAAU,MAAM,CAAC,aAAa,CAAC;AAC/C,WAAO;AAAA,EACT,SAAS,OAAO;AACd,YAAQ,MAAM,iCAAiC,KAAK;AACpD,UAAM,IAAI,MAAM,+CAAa,MAAgB,OAAO,EAAE;AAAA,EACxD;AACF;AAEA,SAAS,yBAAyB,MAAmB;AACnD,MAAI,OAAO;AACX,aAAW,YAAY,KAAK,WAAW;AACrC,UAAM,SAAS,KAAK,UAAU,QAAQ;AACtC,QAAI,CAAC,OAAQ;AAEb,UAAM,WAAW,OAAO;AACxB,UAAM,OAAO,SAAS;AAEtB,QAAI,SAAS,OAAO;AAClB,cAAQ;AAAA,IACV,WAAW,SAAS,QAAQ;AAC1B,cAAQ,SAAS,SAAS,YAAY,MAAM;AAAA,EAAK,SAAS,IAAI;AAAA;AAAA;AAAA,IAChE,WAAW,SAAS,WAAW;AAC7B,cAAQ;AAAA,IACV,WAAW,KAAK,WAAW,SAAS,GAAG;AACrC,YAAM,QAAQ,SAAS,KAAK,QAAQ,WAAW,EAAE,CAAC;AAClD,cAAQ,GAAG,IAAI,OAAO,KAAK,CAAC,IAAI,eAAe,SAAS,IAAI,CAAC;AAAA;AAAA;AAAA,IAC/D,WAAW,SAAS,UAAU,SAAS,SAAS;AAC9C,cAAQ,GAAG,eAAe,SAAS,IAAI,CAAC;AAAA;AAAA;AAAA,IAC1C,WAAW,SAAS,YAAY,SAAS,aAAa,SAAS,QAAQ;AACrE,YAAM,SAAS,SAAS,WAAW,MAAO,SAAS,YAAY,OAAQ,SAAS,UAAU,UAAU;AACpG,cAAQ,GAAG,MAAM,IAAI,eAAe,SAAS,IAAI,CAAC;AAAA;AAAA,IACpD;AAAA,EACF;AAEA,SAAO,KAAK,KAAK;AACnB;AAQA,SAAS,eAAe,UAA4B;AAClD,MAAI,CAAC,YAAY,CAAC,SAAS,wBAAwB;AACjD,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,SAAS,uBAAuB;AAC9C,SAAO,OAAO,OAAO,KAAK,EAAE,KAAK,EAAE;AACrC;AAEA,eAAsB,gBAA0C;AAC9D,MAAI;AACF,UAAM,iBAAiB,MAAM,UAAU,UAAU,KAAK;AACtD,UAAM,UAA2B,CAAC;AAElC,eAAW,QAAQ,gBAAgB;AACjC,iBAAW,QAAQ,KAAK,OAAO;AAC7B,cAAM,OAAO,MAAM,KAAK,QAAQ,IAAI;AACpC,YAAI,KAAK,WAAW,OAAO,GAAG;AAC5B,gBAAM,OAAO,MAAM,KAAK,KAAK;AAC7B,kBAAQ,IAAI,IAAI;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,YAAQ,MAAM,6BAA6B,KAAK;AAChD,UAAM,IAAI,MAAM,+CAAa,MAAgB,OAAO,EAAE;AAAA,EACxD;AACF;;;ACpFO,SAAS,aAAa,MAA6B;AACxD,MAAI,CAAC,QAAQ,CAAC,KAAK,aAAa,CAAC,KAAK,WAAW;AAC/C,YAAQ,MAAM,2BAA2B,IAAI;AAC7C,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,KAAK,UAAU,IAAI;AACnC,QAAM,cAAc,QACjB,QAAQ,MAAM,OAAO,EACrB,QAAQ,MAAM,QAAQ,EACtB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,MAAM;AAEvB,MAAI,OAAO,4CAA4C,KAAK,MAAM;AAElE,aAAW,YAAY,KAAK,WAAW;AACrC,UAAM,SAAS,KAAK,UAAU,QAAQ;AACtC,QAAI,CAAC,OAAQ;AAEb,UAAM,WAAW,OAAO;AACxB,UAAM,YAAY,kBAAkB,UAAU,QAAQ;AACtD,YAAQ;AAAA,EACV;AAEA,UAAQ,sCAAsC,WAAW;AACzD,SAAO;AACT;AAEO,SAAS,kBAAkB,UAAe,UAA0B;AACzE,QAAM,EAAE,MAAM,MAAM,MAAM,UAAU,OAAO,MAAM,SAAS,SAAS,IAAI;AAEvE,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO;AAAA,IAET,KAAK;AACH,YAAM,cAAc,QAAQ,KAAK,OAAO,KAAK,OAAO;AACpD,aAAO,sCAAsC,QAAQ;AAAA,wCACnB,eAAe,4FAAiB;AAAA;AAAA,IAGpE,KAAK;AACH,YAAM,QAAQC,gBAAe,IAAI;AACjC,aAAO,+CAA+C,QAAQ,KAAK,WAAW,KAAK,CAAC;AAAA,IAEtF,KAAK;AACH,YAAM,QAAQA,gBAAe,IAAI;AACjC,aAAO,+CAA+C,QAAQ,KAAK,WAAW,KAAK,CAAC;AAAA,IAEtF,KAAK;AACH,YAAM,QAAQA,gBAAe,IAAI;AACjC,aAAO,+CAA+C,QAAQ,KAAK,WAAW,KAAK,CAAC;AAAA,IAEtF,KAAK;AACH,YAAM,QAAQA,gBAAe,IAAI;AACjC,aAAO,+CAA+C,QAAQ,KAAK,WAAW,KAAK,CAAC;AAAA,IAEtF,KAAK;AACH,YAAM,QAAQA,gBAAe,IAAI;AACjC,aAAO,+CAA+C,QAAQ,KAAK,WAAW,KAAK,CAAC;AAAA,IAEtF,KAAK;AACH,YAAM,QAAQA,gBAAe,IAAI;AACjC,aAAO,+CAA+C,QAAQ,KAAK,WAAW,KAAK,CAAC;AAAA,IAEtF,KAAK;AACH,YAAM,cAAcA,gBAAe,IAAI;AACvC,aAAO,sCAAsC,QAAQ,KAAK,WAAW,WAAW,CAAC;AAAA,IAEnF,KAAK;AACH,YAAM,YAAYA,gBAAe,IAAI;AACrC,aAAO,6CAA6C,QAAQ,KAAK,WAAW,SAAS,CAAC;AAAA,IAExF,KAAK;AACH,YAAM,cAAc,QAAQA,gBAAe,IAAI,KAAK;AACpD,YAAM,cAAc,WAAW,WAAW;AAC1C,aAAO,+DAA+D,QAAQ,2BAA2B,YAAY,WAAW,yBAAyB,YAAY,WAAW,4BAA4B,WAAW;AAAA,IAEzN,KAAK;AACH,aAAO,iDAAiD,QAAQ;AAAA,IAElE,KAAK;AACH,YAAM,aAAaA,gBAAe,IAAI;AACtC,aAAO,8DAA8D,QAAQ,6BAA6B,WAAW,UAAU,CAAC;AAAA,IAElI,KAAK;AACH,YAAM,cAAcA,gBAAe,IAAI;AACvC,aAAO,8DAA8D,QAAQ,6BAA6B,WAAW,WAAW,CAAC;AAAA,IAEnI,KAAK;AACH,YAAM,WAAWA,gBAAe,IAAI;AACpC,YAAM,YAAY,SAAS,QAAQ;AACnC,YAAM,YAAY,YAAY,eAAe;AAC7C,aAAO,cAAc,SAAS,uCAAuC,QAAQ,gBAAgB,YAAY,SAAS,OAAO,UAAU,WAAW,QAAQ,CAAC;AAAA,IAEzJ,KAAK;AACH,aAAO,sCAAsC,QAAQ;AAAA,IAEvD;AACE,aAAO;AAAA,EACX;AACF;AAEA,SAASA,gBAAe,UAAuB;AAC7C,MAAI,CAAC,YAAY,CAAC,SAAS,wBAAwB;AACjD,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,SAAS,uBAAuB;AAC9C,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,OAAO,OAAO,KAAK,EAAE,KAAK,EAAE;AACrC;AAEA,SAAS,WAAW,MAAsB;AACxC,MAAI,OAAO,SAAS,YAAY,CAAC,KAAM,QAAO;AAC9C,SAAO,KACJ,QAAQ,MAAM,OAAO,EACrB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,QAAQ,EACtB,QAAQ,MAAM,QAAQ;AAC3B;;;ALFA,eAAsB,eAAe,UAA0C;AAC7E,QAAM,YAAY,IAAI,wBAAwB;AAC9C,SAAO,UAAU,QAAQ,QAAQ;AACnC;AAEO,SAAS,eAAe,MAA6B;AAC1D,MAAI,CAAC,QAAQ,CAAC,KAAK,WAAW;AAC5B,WAAO;AAAA,EACT;AAEA,QAAM,SAAmB,CAAC;AAC1B,MAAI,WAAmB;AAGvB,WAAS,cAAc,UAAkB,QAAgB,GAAS;AAChE,UAAM,SAAS,KAAK,UAAU,QAAQ;AACtC,QAAI,CAAC,UAAU,CAAC,OAAO,SAAU;AAEjC,UAAM,WAAW,OAAO;AAGxB,QAAI,SAAS,SAAS,QAAQ;AAE5B,UAAI,SAAS,YAAY,SAAS,SAAS,SAAS,GAAG;AACrD,mBAAW,WAAW,SAAS,UAAU;AACvC,wBAAc,OAAO;AAAA,QACvB;AAAA,MACF;AACA;AAAA,IACF;AAEA,UAAM,SAAS,CAAC,UAAU,WAAW,MAAM,EAAE,SAAS,SAAS,IAAI;AAGnE,QAAI,OAAO,SAAS,GAAG;AAErB,UAAI,aAAa,SAAS,QAAQ,aAAa,UAAU,CAAC,QAAQ;AAChE,eAAO,KAAK,EAAE;AAAA,MAChB,WAAW,aAAa,UAAU,SAAS,SAAS,QAAQ;AAE1D,eAAO,KAAK,EAAE;AAAA,MAChB,WAAW,aAAa,UAAU,CAAC,QAAQ;AAEzC,eAAO,KAAK,EAAE;AAAA,MAChB,WAAW,CAAC,UAAU,aAAa,UAAU,CAAC,QAAQ;AAEpD,eAAO,KAAK,EAAE;AAAA,MAChB;AAAA,IACF;AAGA,YAAQ,SAAS,MAAM;AAAA,MACrB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK,YAAY;AACf,cAAM,QAAQ,SAAS,SAAS,KAAK,QAAQ,WAAW,EAAE,CAAC;AAC3D,cAAM,cAAcC,gBAAe,SAAS,IAAI;AAChD,eAAO,KAAK,GAAG,IAAI,OAAO,KAAK,CAAC,IAAI,WAAW,EAAE;AACjD;AAAA,MACF;AAAA,MAEA,KAAK,QAAQ;AACX,cAAM,cAAcA,gBAAe,SAAS,IAAI;AAChD,YAAI,YAAY,KAAK,GAAG;AACtB,iBAAO,KAAK,WAAW;AAAA,QACzB;AACA;AAAA,MACF;AAAA,MAEA,KAAK,SAAS;AACZ,cAAM,YAAYA,gBAAe,SAAS,IAAI;AAC9C,eAAO,KAAK,KAAK,SAAS,EAAE;AAC5B;AAAA,MACF;AAAA,MAEA,KAAK,UAAU;AACb,cAAM,aAAaA,gBAAe,SAAS,IAAI;AAC/C,cAAM,QAAQ,SAAS,SAAS;AAChC,cAAM,SAAS,KAAK,OAAO,QAAQ,CAAC;AACpC,eAAO,KAAK,GAAG,MAAM,KAAK,UAAU,EAAE;AACtC;AAAA,MACF;AAAA,MAEA,KAAK,WAAW;AACd,cAAM,cAAcA,gBAAe,SAAS,IAAI;AAChD,cAAM,QAAQ,SAAS,SAAS;AAChC,cAAM,SAAS,KAAK,OAAO,QAAQ,CAAC;AACpC,eAAO,KAAK,GAAG,MAAM,MAAM,WAAW,EAAE;AACxC;AAAA,MACF;AAAA,MAEA,KAAK,QAAQ;AACX,cAAM,WAAWA,gBAAe,SAAS,IAAI;AAC7C,cAAM,YAAY,SAAS,QAAQ;AACnC,cAAM,QAAQ,SAAS,SAAS;AAChC,cAAM,SAAS,KAAK,OAAO,QAAQ,CAAC;AACpC,eAAO,KAAK,GAAG,MAAM,MAAM,YAAY,MAAM,GAAG,KAAK,QAAQ,EAAE;AAC/D;AAAA,MACF;AAAA,MAEA,KAAK,QAAQ;AACX,cAAM,WAAW,SAAS,YAAY;AACtC,cAAM,OAAO,SAAS,QAAQA,gBAAe,SAAS,IAAI,KAAK;AAC/D,eAAO,KAAK,SAAS,QAAQ,EAAE;AAC/B,eAAO,KAAK,IAAI;AAChB,eAAO,KAAK,QAAQ;AACpB;AAAA,MACF;AAAA,MAEA,KAAK,WAAW;AACd,eAAO,KAAK,KAAK;AACjB;AAAA,MACF;AAAA,MAEA,KAAK,OAAO;AACV,cAAM,cAAc,SAAS,MAAM,QAAQ;AAC3C,eAAO,KAAK,eAAe;AAC3B,eAAO,KAAK,WAAW;AACvB,eAAO,KAAK,QAAQ;AACpB;AAAA,MACF;AAAA,MAEA,KAAK,YAAY;AACf,eAAO,KAAK,KAAKA,gBAAe,SAAS,IAAI,CAAC,IAAI;AAClD;AAAA,MACF;AAAA,MAEA,KAAK,SAAS;AACZ,eAAO,KAAK,2EAA8B;AAC1C;AAAA,MACF;AAAA,MAEA,KAAK,SAAS;AACZ,cAAM,gBAAgB,uBAAuB,UAAU,KAAK,SAAS;AACrE,eAAO,KAAK,aAAa;AACzB;AAAA,MACF;AAAA,MAEA,KAAK,cAAc;AACjB;AAAA,MACF;AAAA,MAEA;AACE;AAAA,IACJ;AAEA,eAAW,SAAS,SAAS,SAAS;AAGtC,QAAI,SAAS,YAAY,SAAS,SAAS,SAAS,GAAG;AACrD,iBAAW,WAAW,SAAS,UAAU;AACvC,sBAAc,OAAO;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AAGA,MAAI,KAAK,QAAQ;AACf,kBAAc,KAAK,MAAM;AAAA,EAC3B;AAEA,SAAO,OAAO,KAAK,IAAI,EAAE,KAAK;AAChC;AAEA,SAASA,gBAAe,UAA6B;AACnD,MAAI,CAAC,YAAY,CAAC,SAAS,wBAAwB;AACjD,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,SAAS,uBAAuB;AAC9C,QAAM,UAAU,SAAS,uBAAuB;AAEhD,MAAI,CAAC,MAAO,QAAO;AAGnB,MAAI,CAAC,WAAY,OAAO,YAAY,YAAY,YAAY,MAAO,CAAC,SAAS,SAAS,CAAC,SAAS,MAAM,aAAa;AACjH,UAAM,UAAU,OAAO,OAAO,KAAK,EAAE,KAAK,EAAE;AAG5C,UAAM,eAAyB,CAAC;AAChC,QAAI,SAAS,QAAQ;AAAA,MACnB;AAAA,MACA,CAAC,OAAO,MAAM,QAAQ;AACpB,qBAAa,KAAK,KAAK;AACvB,eAAO,sBAAsB,aAAa,SAAS,CAAC;AAAA,MACtD;AAAA,IACF;AAEA,aAAS,OAAO;AAAA,MACd;AAAA,MACA;AAAA,IACF;AAEA,aAAS,OAAO;AAAA,MACd;AAAA,MACA,CAAC,GAAG,UAAU,aAAa,SAAS,KAAK,CAAC;AAAA,IAC5C;AAEA,WAAO;AAAA,EACT;AAGA,MAAI,aAAa;AACjB,MAAI,OAAO,YAAY,UAAU;AAC/B,iBAAa;AAAA,EACf,WAAW,WAAW,OAAO,YAAY,UAAU;AACjD,UAAM,SAAS,OAAO,OAAO,OAAO;AACpC,QAAI,OAAO,SAAS,KAAK,OAAO,OAAO,CAAC,MAAM,UAAU;AACtD,mBAAa,OAAO,CAAC;AAAA,IACvB;AAAA,EACF;AACA,SAAO,oBAAoB,OAAO,YAAY,SAAS,MAAM,WAAW;AAC1E;AAEA,SAAS,uBAAuB,eAAuB,WAA+C;AACpG,QAAM,cAAc,UAAU,aAAa;AAC3C,MAAI,CAAC,eAAe,CAAC,YAAY,UAAU;AACzC,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,YAAY;AAC7B,QAAM,EAAE,YAAY,SAAS,SAAS,IAAI;AAE1C,MAAI,CAAC,cAAc,CAAC,WAAW,CAAC,UAAU;AACxC,WAAO;AAAA,EACT;AAEA,QAAM,OAAmB,CAAC;AAE1B,aAAW,SAAS,SAAS;AAC3B,UAAM,MAAgB,CAAC;AACvB,eAAW,SAAS,YAAY;AAC9B,YAAM,UAAU,GAAG,KAAK,GAAG,KAAK;AAChC,YAAM,OAAO,SAAS,OAAO;AAC7B,UAAI,QAAQ,KAAK,UAAU;AACzB,cAAM,aAAa,UAAU,KAAK,QAAQ;AAC1C,YAAI,cAAc,WAAW,UAAU;AACrC,gBAAM,eAAe,WAAW;AAChC,gBAAM,UAAU,aAAa,YAAY,aAAa,SAAS,SAAS,IACpE,aAAa,SAAS,CAAC,IACvB;AACJ,cAAI,SAAS;AACX,kBAAM,aAAa,UAAU,OAAO;AACpC,gBAAI,cAAc,WAAW,UAAU;AACrC,oBAAM,WAAWA,gBAAe,WAAW,SAAS,IAAI;AACxD,kBAAI,KAAK,QAAQ;AAAA,YACnB,OAAO;AACL,kBAAI,KAAK,EAAE;AAAA,YACb;AAAA,UACF,OAAO;AACL,gBAAI,KAAK,EAAE;AAAA,UACb;AAAA,QACF,OAAO;AACL,cAAI,KAAK,EAAE;AAAA,QACb;AAAA,MACF,OAAO;AACL,YAAI,KAAK,EAAE;AAAA,MACb;AAAA,IACF;AACA,SAAK,KAAK,GAAG;AAAA,EACf;AAEA,MAAI,KAAK,WAAW,GAAG;AACrB,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,WAAW;AAC5B,QAAM,aAAuB,CAAC;AAE9B,aAAW,SAAS,YAAY;AAC9B,UAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,GAAG,KAAK;AACrC,UAAM,OAAO,SAAS,OAAO;AAC7B,QAAI,QAAQ,KAAK,UAAU;AACzB,YAAM,aAAa,UAAU,KAAK,QAAQ;AAC1C,UAAI,cAAc,WAAW,UAAU;AACrC,cAAM,eAAe,WAAW;AAChC,cAAM,UAAU,aAAa,YAAY,aAAa,SAAS,SAAS,IACpE,aAAa,SAAS,CAAC,IACvB;AACJ,YAAI,SAAS;AACX,gBAAM,aAAa,UAAU,OAAO;AACpC,cAAI,cAAc,WAAW,YAAY,WAAW,SAAS,OAAO;AAClE,kBAAM,QAAQ,WAAW,SAAS;AAClC,uBAAW,KAAK,KAAK;AAAA,UACvB,OAAO;AACL,uBAAW,KAAK,MAAM;AAAA,UACxB;AAAA,QACF,OAAO;AACL,qBAAW,KAAK,MAAM;AAAA,QACxB;AAAA,MACF,OAAO;AACL,mBAAW,KAAK,MAAM;AAAA,MACxB;AAAA,IACF,OAAO;AACL,iBAAW,KAAK,MAAM;AAAA,IACxB;AAAA,EACF;AAEA,QAAM,eAAe,WAAW,IAAI,WAAS;AAC3C,YAAQ,OAAO;AAAA,MACb,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AAAA,MACL;AACE,eAAO;AAAA,IACX;AAAA,EACF,CAAC;AAED,QAAM,eAAyB,CAAC;AAEhC,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,MAAM,KAAK,CAAC;AAClB,UAAM,eAAe,IAAI,IAAI,UAAQ;AACnC,aAAO,KAAK,SAAS,GAAG,IAAI,IAAI,KAAK,QAAQ,MAAM,IAAI,CAAC,MAAM;AAAA,IAChE,CAAC,EAAE,KAAK,KAAK;AACb,iBAAa,KAAK,KAAK,YAAY,IAAI;AAEvC,QAAI,MAAM,GAAG;AACX,mBAAa,KAAK,KAAK,aAAa,KAAK,KAAK,CAAC,IAAI;AAAA,IACrD;AAAA,EACF;AAEA,SAAO,aAAa,KAAK,IAAI;AAC/B;AAEA,SAAS,oBACP,OACA,YACA,aACQ;AACR,MAAI,UAAU,OAAO,OAAO,KAAK,EAAE,KAAK,EAAE;AAC1C,QAAM,WAGD,CAAC;AAGN,MAAI,MAAM;AACV,SAAO,MAAM,WAAW,QAAQ;AAC9B,QAAI,WAAW,GAAG,MAAM,KAAK;AAC3B;AAEA,YAAM,WAAqB,CAAC;AAC5B,aAAO,MAAM,WAAW,UAAU,QAAQ,KAAK,WAAW,GAAG,CAAC,GAAG;AAC/D,YAAI,SAAS;AACb,eAAO,MAAM,WAAW,UAAU,QAAQ,KAAK,WAAW,GAAG,CAAC,GAAG;AAC/D,oBAAU,WAAW,GAAG;AACxB;AAAA,QACF;AACA,iBAAS,KAAK,MAAM;AAEpB,YAAI,MAAM,WAAW,UAAU,WAAW,GAAG,MAAM,KAAK;AACtD;AAAA,QACF,OAAO;AACL;AAAA,QACF;AAAA,MACF;AAEA,UAAI,OAAO,WAAW,UAAU,WAAW,GAAG,MAAM,IAAK;AACzD;AAEA,UAAI,YAAY;AAChB,aAAO,MAAM,WAAW,QAAQ;AAC9B,cAAM,OAAO,WAAW,GAAG;AAC3B,YAAI,QAAQ,KAAK,IAAI,GAAG;AACtB,uBAAa;AACb;AAAA,QACF,OAAO;AACL;AAAA,QACF;AAAA,MACF;AAEA,UAAI,CAAC,WAAW;AACd;AAAA,MACF;AAEA,YAAM,SAAS,SAAS,WAAW,EAAE,KAAK;AAC1C,YAAM,OAAO,QAAQ,UAAU,GAAG,MAAM;AACxC,gBAAU,QAAQ,UAAU,MAAM;AAElC,YAAM,QAAiC,CAAC;AACxC,iBAAW,OAAO,UAAU;AAC1B,cAAM,YAAY,YAAY,GAAG;AACjC,YAAI,aAAa,MAAM,QAAQ,SAAS,KAAK,UAAU,UAAU,GAAG;AAClE,gBAAM,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC;AAAA,QAC3C;AAAA,MACF;AAEA,UAAI,MAAM;AACR,iBAAS,KAAK,EAAE,MAAM,MAAM,CAAC;AAAA,MAC/B;AAAA,IACF,OAAO;AACL;AAAA,IACF;AAAA,EACF;AAEA,MAAI,SAAS;AACX,aAAS,KAAK,EAAE,MAAM,SAAS,OAAO,CAAC,EAAE,CAAC;AAAA,EAC5C;AAEA,MAAI,SAAS;AAEb,aAAW,WAAW,UAAU;AAC9B,UAAM,EAAE,MAAM,MAAM,IAAI;AAExB,QAAI,MAAM,MAAM;AACd,YAAM,MAAM,mBAAmB,OAAO,MAAM,IAAI,CAAC;AACjD,gBAAU,IAAI,IAAI,KAAK,GAAG;AAAA,IAC5B,WAAW,MAAM,UAAU;AACzB,YAAM,WAAW,OAAO,MAAM,QAAQ,EAAE,KAAK;AAC7C,YAAM,YAAY,SAAS,SAAS,UAAU;AAC9C,YAAM,gBAAgB,YAAY,SAAS,MAAM,GAAG,EAAE,IAAI;AAC1D,gBAAU,YAAY,KAAK,aAAa,OAAO,IAAI,aAAa;AAAA,IAClE,OAAO;AACL,UAAI,gBAAgB;AAEpB,UAAI,MAAM,kBAAkB,QAAQ;AAClC,wBAAgB,KAAK,aAAa;AAAA,MACpC;AACA,UAAI,MAAM,SAAS,QAAQ;AACzB,wBAAgB,KAAK,aAAa;AAAA,MACpC;AACA,UAAI,MAAM,WAAW,QAAQ;AAC3B,wBAAgB,IAAI,aAAa;AAAA,MACnC;AAEA,gBAAU;AAAA,IACZ;AAAA,EACF;AAEA,SAAO;AACT;AAEO,IAAM,aAAa;AAAA,EACxB,SAAS;AAAA;AAAA;AAAA;AAAA,EACT,WAAW;AAAA;AAAA;AAAA,EACX,MAAM;AAAA;AAAA;AAAA;AAAA,EACN,SAAS;AAAA;AAAA;AAAA;AAAA,EACT,MAAM;AAAA;AAAA;AAAA,EACN,OAAO;AAAA;AAAA;AAAA,EACP,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,EACN,SAAS;AAAA;AAAA,EACT,MAAM;AAAA;AAAA,EACN,OAAO;AAAA;AAAA,EACP,SAAS;AAAA;AAAA;AAAA;AAAA,EACT,QAAQ;AAAA;AAAA;AAAA;AAAA,EACR,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EACP,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACX;","names":["remarkParse","remarkGfm","remarkMath","getTextContent","getTextContent"]}
|