@schoolai/shipyard 3.4.0 → 3.5.0-rc.20260503.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/README.md +1 -2
- package/dist/capabilities-NYAJEDLN.js +154 -0
- package/dist/{chunk-VJQY42NE.js → chunk-36ZIIVQI.js} +58 -10
- package/dist/chunk-36ZIIVQI.js.map +1 -0
- package/dist/{chunk-MEJ6OUJY.js → chunk-3NMNYZN7.js} +3 -3
- package/dist/{chunk-CCW5QAUH.js → chunk-3TB4VNFG.js} +2 -2
- package/dist/{chunk-DR5BPAKZ.js → chunk-5LIPEC7P.js} +19 -3
- package/dist/chunk-5LIPEC7P.js.map +1 -0
- package/dist/chunk-GUXFYNLJ.js +23753 -0
- package/dist/chunk-GUXFYNLJ.js.map +1 -0
- package/dist/{chunk-LWP7FT4Q.js → chunk-XXTIKBCU.js} +18 -2
- package/dist/chunk-XXTIKBCU.js.map +1 -0
- package/dist/{chunk-DNIC3FOH.js → chunk-YUG27SAR.js} +1 -1
- package/dist/{chunk-BRW34JMG.js → chunk-ZSBE4P76.js} +42 -3
- package/dist/chunk-ZSBE4P76.js.map +1 -0
- package/dist/{git-repo-LG3LCOWF.js → git-repo-WGZ7Q3D5.js} +4 -4
- package/dist/index.js +6 -6
- package/dist/logger-7XW3I4XN.js +16 -0
- package/dist/{login-JTMNYTC5.js → login-XTDSLC6O.js} +5 -5
- package/dist/{logout-M7F7HXUU.js → logout-CUAAF5IK.js} +3 -3
- package/dist/{mcp-servers-T7OJWREP.js → mcp-servers-3SHS2PEJ.js} +3 -3
- package/dist/mcp-servers-3SHS2PEJ.js.map +1 -0
- package/dist/{roi-ZCVNBSTO.js → roi-LN7MMRH7.js} +96 -8
- package/dist/roi-LN7MMRH7.js.map +1 -0
- package/dist/{serve-QENWMCVP.js → serve-QKXME3DV.js} +15319 -35936
- package/dist/serve-QKXME3DV.js.map +1 -0
- package/dist/{skills-ULFXYA7N.js → skills-OMDIMU7D.js} +2 -2
- package/dist/skills-OMDIMU7D.js.map +1 -0
- package/dist/{start-6AQMLAOX.js → start-JDVIIDYK.js} +6 -6
- package/package.json +3 -8
- package/dist/chunk-BRW34JMG.js.map +0 -1
- package/dist/chunk-DR5BPAKZ.js.map +0 -1
- package/dist/chunk-LWP7FT4Q.js.map +0 -1
- package/dist/chunk-VJQY42NE.js.map +0 -1
- package/dist/roi-ZCVNBSTO.js.map +0 -1
- package/dist/serve-QENWMCVP.js.map +0 -1
- /package/dist/{git-repo-LG3LCOWF.js.map → capabilities-NYAJEDLN.js.map} +0 -0
- /package/dist/{chunk-MEJ6OUJY.js.map → chunk-3NMNYZN7.js.map} +0 -0
- /package/dist/{chunk-CCW5QAUH.js.map → chunk-3TB4VNFG.js.map} +0 -0
- /package/dist/{chunk-DNIC3FOH.js.map → chunk-YUG27SAR.js.map} +0 -0
- /package/dist/{login-JTMNYTC5.js.map → git-repo-WGZ7Q3D5.js.map} +0 -0
- /package/dist/{mcp-servers-T7OJWREP.js.map → logger-7XW3I4XN.js.map} +0 -0
- /package/dist/{skills-ULFXYA7N.js.map → login-XTDSLC6O.js.map} +0 -0
- /package/dist/{logout-M7F7HXUU.js.map → logout-CUAAF5IK.js.map} +0 -0
- /package/dist/{start-6AQMLAOX.js.map → start-JDVIIDYK.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/shared/capabilities/index.ts","../src/shared/observability/watchdog-context.ts","../src/shared/capabilities/agent-providers-cache.ts","../src/shared/capabilities/agents.ts","../src/shared/capabilities/env-methods.ts","../src/shared/capabilities/auth.ts","../src/shared/capabilities/env-mismatch.ts","../src/shared/capabilities/marketplace.ts","../src/shared/capabilities/effort-probe.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/change-options.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/derive-placeholder.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/diff-overlay.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/errors.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/ext.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/loro.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/path-builder.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/path-compiler.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/path-evaluator.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/path-subscription.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/typed-doc.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/plain-value-ref/symbols.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/utils/path-ops.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/plain-value-ref/value-reader.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/plain-value-ref/value-writer.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/plain-value-ref/factory.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/plain-value-ref/index.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/path-encoding.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/typed-refs/base.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/json-patch.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/metadata.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/utils/type-guards.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/overlay.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/typed-refs/utils.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/typed-refs/counter-ref-internals.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/typed-refs/counter-ref.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/conversion.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/typed-refs/plain-value-access.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/typed-refs/list-ref-base.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/typed-refs/list-ref-internals.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/typed-refs/list-ref.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/typed-refs/movable-list-ref-internals.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/typed-refs/movable-list-ref.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/typed-refs/proxy-handlers.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/typed-refs/map-based-ref-internals.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/typed-refs/record-ref-internals.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/typed-refs/record-ref.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/typed-refs/struct-ref-internals.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/typed-refs/struct-ref.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/typed-refs/text-ref-internals.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/typed-refs/text-ref.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/typed-refs/tree-node-ref-internals.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/typed-refs/tree-node-ref.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/typed-refs/tree-ref-internals.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/typed-refs/tree-ref.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/typed-refs/doc-ref-internals.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/typed-refs/doc-ref.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/validation.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/functional-helpers.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/placeholder-proxy.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/replay-diff.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/shape.ts","../../../node_modules/.pnpm/@loro-extended+change@6.0.0-beta.0_loro-crdt@1.12.0/node_modules/@loro-extended/change/src/value.ts","../../../packages/loro-schema/dist/index.js","../../../node_modules/.pnpm/orderedmap@2.1.1/node_modules/orderedmap/dist/index.js","../../../node_modules/.pnpm/prosemirror-model@1.25.4/node_modules/prosemirror-model/dist/index.js","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/common/utils.mjs","../../../node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/index.mjs","../../../node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/lib/decode.mjs","../../../node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/lib/encode.mjs","../../../node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/lib/format.mjs","../../../node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/lib/parse.mjs","../../../node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/index.mjs","../../../node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/properties/Any/regex.mjs","../../../node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/categories/Cc/regex.mjs","../../../node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/categories/Cf/regex.mjs","../../../node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/categories/P/regex.mjs","../../../node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/categories/S/regex.mjs","../../../node_modules/.pnpm/uc.micro@2.1.0/node_modules/uc.micro/categories/Z/regex.mjs","https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/generated/decode-data-html.ts","https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/generated/decode-data-xml.ts","https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/decode_codepoint.ts","https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/decode.ts","https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/generated/encode-html.ts","https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/escape.ts","https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/index.ts","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/helpers/index.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/helpers/parse_link_label.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/helpers/parse_link_destination.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/helpers/parse_link_title.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/renderer.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/ruler.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/token.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/state_core.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/normalize.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/block.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/inline.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/linkify.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/replacements.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/smartquotes.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_core/text_join.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/parser_core.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/state_block.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/table.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/code.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/fence.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/blockquote.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/hr.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/list.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/reference.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/common/html_blocks.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/common/html_re.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/html_block.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/heading.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/lheading.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_block/paragraph.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/parser_block.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/state_inline.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/text.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/linkify.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/newline.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/escape.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/backticks.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/strikethrough.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/emphasis.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/link.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/image.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/autolink.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/html_inline.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/entity.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/balance_pairs.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/rules_inline/fragments_join.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/parser_inline.mjs","../../../node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/lib/re.mjs","../../../node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/index.mjs","../../../node_modules/.pnpm/punycode.js@2.3.1/node_modules/punycode.js/punycode.es6.js","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/presets/default.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/presets/zero.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/presets/commonmark.mjs","../../../node_modules/.pnpm/markdown-it@14.1.1/node_modules/markdown-it/lib/index.mjs","../../../node_modules/.pnpm/prosemirror-markdown@1.13.4/node_modules/prosemirror-markdown/dist/index.js","../../../node_modules/.pnpm/diff@7.0.0/node_modules/diff/lib/index.mjs","../src/shared/capabilities/models.ts","../src/shared/capabilities/git-pr.ts","../src/shared/capabilities/git-ci.ts","../src/shared/capabilities/git-diff.ts"],"sourcesContent":["import { readFile } from 'node:fs/promises';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport type { AnthropicAuthMethod } from '@shipyard/loro-schema';\nimport {\n type AnthropicAuthStatus,\n type InstalledAgent,\n type MachineCapabilities,\n PermissionModeSchema,\n} from '@shipyard/session';\nimport { z } from 'zod';\nimport { withLabelAsync } from '../observability/watchdog-context.js';\nimport { detectAgentProviders } from './agents.js';\nimport { detectAnthropicAuth } from './auth.js';\nimport { classifyEnvMismatch } from './env-mismatch.js';\nimport { detectEnvironments } from './git-repo.js';\nimport { detectMarketplacePlugins } from './marketplace.js';\nimport { detectMCPServers } from './mcp-servers.js';\nimport { detectModels } from './models.js';\nimport { detectSkills } from './skills.js';\n\nexport { detectAgentProviders } from './agents.js';\nexport { detectAnthropicAuth } from './auth.js';\nexport {\n getConfiguredEnvironments,\n getLatestDeployments,\n getRequiredChecks,\n getWorkflowRuns,\n rerunChecks,\n} from './git-ci.js';\nexport {\n captureTreeSnapshot,\n fetchRemoteBranch,\n findRenames,\n getBranchDiff,\n getBranchFiles,\n getChangedFiles,\n getDefaultBranch,\n getFileAtRef,\n getGitRefExists,\n getMergeBase,\n getSnapshotDiff,\n getSnapshotFiles,\n getStackDiff,\n getStackFiles,\n getStagedDiff,\n getUnstagedDiff,\n} from './git-diff.js';\nexport {\n addAssignees,\n addLabels,\n addReviewers,\n appendShipyardBodyMarker,\n approvePR,\n buildShipyardBodyMarker,\n closePR,\n commentOnPR,\n convertToDraft,\n deduplicatePRs,\n ensureLabel,\n getAssignedReviews,\n getPRByBranch,\n getPRDiff,\n getPRFiles,\n getPRForCurrentBranch,\n getPRReviewComments,\n getUserPRs,\n mapGhPRToPRData,\n markPRReady,\n mergePR,\n removeAssignees,\n removeLabels,\n reopenPR,\n replyToReviewComment,\n requestChanges,\n resolveReviewThread,\n unresolveReviewThread,\n} from './git-pr.js';\nexport {\n detectEnvironments,\n findGitRepos,\n getGitTopLevel,\n getRepoMetadata,\n isAncestor,\n isGhAvailable,\n parseOwnerRepo,\n} from './git-repo.js';\nexport { detectMarketplacePlugins } from './marketplace.js';\nexport { detectMCPServers, redactArgs, redactEnv } from './mcp-servers.js';\nexport { detectModels } from './models.js';\nexport { invalidateRepoPaths } from './repo-paths-cache.js';\nexport { detectSkills } from './skills.js';\n\nconst AutoModeConfigSchema = z\n .object({\n cachedGrowthBookFeatures: z\n .object({ tengu_auto_mode_config: z.object({ enabled: z.string() }) })\n .passthrough(),\n })\n .passthrough();\n\nasync function detectAutoModeEnabled(): Promise<boolean> {\n try {\n const claudeConfig = await readFile(join(homedir(), '.claude.json'), 'utf-8');\n const result = AutoModeConfigSchema.safeParse(JSON.parse(claudeConfig));\n return (\n result.success &&\n result.data.cachedGrowthBookFeatures.tengu_auto_mode_config.enabled === 'enabled'\n );\n } catch {\n return false;\n }\n}\n\nconst UNKNOWN_AUTH: AnthropicAuthStatus = { status: 'unknown', method: 'none' };\n\n/**\n * Pick the slices `detectCapabilities` consults as `lastKnownCapabilities`\n * fallbacks. Centralized so the 5 call sites all pass the same shape and a\n * future detector addition only needs to land here, not in every caller.\n */\nexport function pickLastKnownCapabilities(\n caps: MachineCapabilities | undefined\n):\n | Pick<\n MachineCapabilities,\n 'models' | 'environments' | 'mcpServers' | 'skills' | 'marketplacePlugins'\n >\n | undefined {\n if (!caps) return undefined;\n return {\n models: caps.models,\n environments: caps.environments,\n mcpServers: caps.mcpServers,\n skills: caps.skills,\n marketplacePlugins: caps.marketplacePlugins,\n };\n}\n\nexport async function detectCapabilities(\n tokenStore: import('../mcp/token-store.js').MCPTokenStore | undefined,\n methodHint: AnthropicAuthStatus['method'] | undefined,\n lastKnownAuth: AnthropicAuthStatus | undefined,\n lastKnownAgents?: InstalledAgent[],\n /**\n * Defense in depth — preserve previously-detected slices when their\n * detector hits a transient subprocess/IO failure that would otherwise\n * collapse the slice to `[]`. Each slice is preserved independently.\n * The `lastKnownAgents` arg is kept as a separate param for backwards\n * compatibility with the existing call sites; this object covers the\n * other four detectors (`models`, `environments`, `mcpServers`,\n * `skills`, `marketplacePlugins`).\n */\n lastKnownCapabilities?: Pick<\n MachineCapabilities,\n 'models' | 'environments' | 'mcpServers' | 'skills' | 'marketplacePlugins'\n >\n): Promise<MachineCapabilities> {\n return withLabelAsync('detectCapabilities', async () => {\n const [models, environments, authResult, installedAgents] = await Promise.all([\n detectModels(lastKnownCapabilities?.models),\n detectEnvironments(lastKnownCapabilities?.environments),\n detectAnthropicAuth(methodHint),\n detectAgentProviders(lastKnownAgents),\n ]);\n\n const [mcpServers, skills, marketplacePlugins, autoModeEnabled] = await Promise.all([\n detectMCPServers(environments, tokenStore, undefined, lastKnownCapabilities?.mcpServers),\n detectSkills(environments, lastKnownCapabilities?.skills),\n detectMarketplacePlugins(lastKnownCapabilities?.marketplacePlugins),\n detectAutoModeEnabled(),\n ]);\n const permissionModes = autoModeEnabled\n ? [...PermissionModeSchema.options]\n : PermissionModeSchema.options.filter((m) => m !== 'auto');\n\n let anthropicAuth: AnthropicAuthStatus;\n switch (authResult.kind) {\n case 'detected':\n case 'not-detected':\n anthropicAuth = authResult.auth;\n break;\n case 'preserved':\n anthropicAuth = lastKnownAuth ?? UNKNOWN_AUTH;\n break;\n }\n\n const preferred: AnthropicAuthMethod | null =\n methodHint && methodHint !== 'none' ? methodHint : null;\n const mismatch = classifyEnvMismatch(preferred, process.env);\n if (mismatch.kind === 'mismatch') {\n anthropicAuth = {\n ...anthropicAuth,\n authMismatch: {\n selected: mismatch.selected,\n envMethod: mismatch.envMethod,\n envVar: mismatch.envVar,\n },\n };\n }\n\n return {\n models,\n environments,\n permissionModes,\n autoModeEnabled,\n homeDir: homedir(),\n anthropicAuth,\n mcpServers,\n skills,\n marketplacePlugins,\n installedAgents,\n /**\n * Reaching here means detection actually ran — flip the gate so the\n * browser banner predicate (\"No agent installed\") becomes authoritative.\n * The stub in serve-factory-helpers.ts:204 returns `false` instead.\n */\n detectionComplete: true,\n };\n });\n}\n\n/**\n * Helper: detect capabilities with an optional one-shot retry when the\n * anthropic auth status comes back as `unknown` (i.e. the CLI call was\n * preserved and no prior state was available). Used at initial bootstrap\n * to tolerate a transient CLI cold-start hiccup.\n */\nexport async function detectCapabilitiesWithInitialRetry(\n tokenStore: import('../mcp/token-store.js').MCPTokenStore | undefined,\n methodHint: AnthropicAuthStatus['method'] | undefined,\n lastKnownAuth: AnthropicAuthStatus | undefined,\n opts?: { retryOnUnknown: boolean },\n lastKnownAgents?: InstalledAgent[],\n lastKnownCapabilities?: Pick<\n MachineCapabilities,\n 'models' | 'environments' | 'mcpServers' | 'skills' | 'marketplacePlugins'\n >\n): Promise<MachineCapabilities> {\n const first = await detectCapabilities(\n tokenStore,\n methodHint,\n lastKnownAuth,\n lastKnownAgents,\n lastKnownCapabilities\n );\n if (!opts?.retryOnUnknown) return first;\n if (first.anthropicAuth?.status !== 'unknown') return first;\n\n await new Promise<void>((resolve) => {\n setTimeout(resolve, 1_000);\n });\n return detectCapabilities(\n tokenStore,\n methodHint,\n lastKnownAuth,\n lastKnownAgents,\n lastKnownCapabilities\n );\n}\n","export {\n withLabel,\n withLabelAsync,\n getCurrentWatchdogLabel,\n getPreviousWatchdogLabel,\n getPreviousWatchdogDurationMs,\n _resetWatchdogContextForTests,\n};\n\n/**\n * Lightweight watchdog/attribution context for daemon-side blocking work.\n *\n * Pairs with `EventLoopWatchdog`: when the watchdog detects a stall, it\n * surfaces `currentLabel` (what's running NOW, almost always the thing that\n * caused the stall) and `prevLabel` + `prevDurationMs` (what JUST finished —\n * the actual culprit if the stall is a microtask continuation of completed\n * sync work). Together those give \"stall happened during X, just after Y took\n * Z ms\" without per-call instrumentation in every code path.\n *\n * The context is intentionally module-scoped state, not AsyncLocalStorage:\n * the cost of ALS at the rate we'd label things (every spawn, every git walk)\n * isn't worth the per-async-flow scoping. The watchdog reads single global\n * vars; that's enough for \"what was on the stack when libuv stalled\".\n *\n * `withLabel<T>(name, fn)` and `withLabelAsync<T>(name, fn)` are the public\n * surface. They use try/finally so abnormal exits still restore the prior\n * label.\n */\n\nlet currentLabel: string | null = null;\nlet prevCompletedLabel: string | null = null;\nlet prevCompletedDurationMs = 0;\n\nfunction withLabel<T>(name: string, fn: () => T): T {\n const priorLabel = currentLabel;\n const start = Date.now();\n currentLabel = name;\n try {\n return fn();\n } finally {\n const duration = Date.now() - start;\n prevCompletedLabel = name;\n prevCompletedDurationMs = duration;\n currentLabel = priorLabel;\n }\n}\n\nasync function withLabelAsync<T>(name: string, fn: () => Promise<T>): Promise<T> {\n const priorLabel = currentLabel;\n const start = Date.now();\n currentLabel = name;\n try {\n return await fn();\n } finally {\n const duration = Date.now() - start;\n prevCompletedLabel = name;\n prevCompletedDurationMs = duration;\n currentLabel = priorLabel;\n }\n}\n\nfunction getCurrentWatchdogLabel(): string | null {\n return currentLabel;\n}\n\nfunction getPreviousWatchdogLabel(): string | null {\n return prevCompletedLabel;\n}\n\nfunction getPreviousWatchdogDurationMs(): number {\n return prevCompletedDurationMs;\n}\n\nfunction _resetWatchdogContextForTests(): void {\n currentLabel = null;\n prevCompletedLabel = null;\n prevCompletedDurationMs = 0;\n}\n","import { mkdir, readFile, rename, stat, unlink, writeFile } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { z } from 'zod';\nimport { getShipyardHome } from '../env.js';\nimport { isEnoent } from '../fs-utils.js';\nimport { logger } from '../logger.js';\n\nconst CacheEntrySchema = z.object({\n binaryPath: z.string(),\n version: z.string().optional(),\n binaryMtimeMs: z.number(),\n cachedAt: z.number(),\n});\n\nconst CacheFileSchema = z.object({\n entries: z.record(z.string(), CacheEntrySchema),\n});\n\nexport type AgentCacheEntry = z.infer<typeof CacheEntrySchema>;\ntype CacheFile = z.infer<typeof CacheFileSchema>;\n\nexport const AGENT_CACHE_TTL_MS = 24 * 60 * 60 * 1000;\n\nfunction cacheFilePath(): string {\n return join(getShipyardHome(), 'data', 'agent-providers-cache.json');\n}\n\nexport async function loadCache(): Promise<Map<string, AgentCacheEntry>> {\n const filePath = cacheFilePath();\n try {\n const raw = await readFile(filePath, 'utf8');\n const parsed: unknown = JSON.parse(raw);\n const result = CacheFileSchema.safeParse(parsed);\n if (!result.success) {\n logger.debug({ path: filePath }, 'agent-providers-cache: malformed, treating as empty');\n return new Map();\n }\n return new Map(Object.entries(result.data.entries));\n } catch (err) {\n if (isEnoent(err)) {\n return new Map();\n }\n logger.debug({ err }, 'agent-providers-cache: read failed, treating as empty');\n return new Map();\n }\n}\n\nexport async function getBinaryMtime(binaryPath: string): Promise<number | null> {\n try {\n const s = await stat(binaryPath);\n return s.mtimeMs;\n } catch {\n return null;\n }\n}\n\nexport function isCacheValid(entry: AgentCacheEntry, currentMtimeMs: number): boolean {\n if (entry.binaryMtimeMs !== currentMtimeMs) return false;\n if (Date.now() - entry.cachedAt >= AGENT_CACHE_TTL_MS) return false;\n return true;\n}\n\nexport async function saveCache(entries: Map<string, AgentCacheEntry>): Promise<void> {\n const filePath = cacheFilePath();\n const tmpPath = `${filePath}.tmp`;\n try {\n await mkdir(dirname(filePath), { recursive: true });\n /**\n * Merge-on-save mirrors environments-cache.ts: re-read disk before writing\n * so concurrent calls don't clobber each other's entries.\n */\n const current = await loadCache();\n for (const [path, entry] of entries) {\n current.set(path, entry);\n }\n const payload: CacheFile = { entries: Object.fromEntries(current) };\n await writeFile(tmpPath, JSON.stringify(payload), 'utf8');\n await rename(tmpPath, filePath);\n } catch (err) {\n logger.debug({ err, filePath }, 'agent-providers-cache: save failed');\n void unlink(tmpPath).catch(() => {});\n }\n}\n","import type { InstalledAgent } from '@shipyard/session';\nimport { logger } from '../logger.js';\nimport {\n type AgentCacheEntry,\n getBinaryMtime,\n isCacheValid,\n loadCache,\n saveCache,\n} from './agent-providers-cache.js';\nimport { run } from './shell.js';\n\nfunction buildAgent(version: string | undefined): InstalledAgent {\n return { id: 'claude-code', name: 'Claude Code', version };\n}\n\n/**\n * `which` / `where.exe` exit code 1 ⇒ binary genuinely not in PATH.\n * Anything else (timeout, kill signal, spawn ENOENT/EACCES/EAGAIN/EMFILE,\n * unexpected exit codes) ⇒ subprocess execution itself failed, the absence\n * of `claude` is not authoritative. The 30s capability-refresh timer\n * (apps/daemon/src/services/serve.ts) calls this on every tick; without the\n * distinction, a single transient subprocess failure overwrites a known-good\n * `installedAgents: [claude-code]` with `[]` and broadcasts \"No agent\n * installed\" to the UI. Confirmed live: ~1% of broadcasts in a heavily-loaded\n * daemon log were the wrong shape (55 / 5418).\n */\nfunction isAuthoritativeNotFound(err: unknown): boolean {\n if (!(err instanceof Error)) return false;\n if ('killed' in err && err.killed === true) return false;\n if ('signal' in err && typeof err.signal === 'string') return false;\n if (!('code' in err)) return false;\n const code = err.code;\n if (typeof code === 'string') return false;\n return code === 1;\n}\n\nexport async function detectAgentProviders(\n lastKnown?: InstalledAgent[]\n): Promise<InstalledAgent[]> {\n const whichCmd = process.platform === 'win32' ? 'where.exe' : 'which';\n let binaryPath: string;\n try {\n /**\n * `which` (and `where.exe`) can return multiple lines when the binary is\n * resolvable through more than one PATH entry (e.g. brew + manual install,\n * or nvm/asdf shim + system bin). Take the first match — that's what the\n * shell would actually exec.\n */\n binaryPath = (await run(whichCmd, ['claude'])).split(/\\r?\\n/)[0]?.trim() ?? '';\n } catch (err) {\n if (isAuthoritativeNotFound(err)) {\n logger.warn({ err }, 'Claude Code CLI not found');\n return [];\n }\n logger.warn(\n { err, lastKnownCount: lastKnown?.length ?? 0 },\n 'Claude Code CLI detection failed transiently — preserving lastKnown'\n );\n return lastKnown ?? [];\n }\n if (!binaryPath) return [];\n\n /**\n * Cache layer (`agent-providers-cache.ts`) catches its own I/O errors:\n * `getBinaryMtime` returns null on stat failure, `loadCache` returns an\n * empty Map on read failure, `saveCache` is fire-and-forget. The version\n * probe inside `detectAndPersist` swallows its own errors. So once `which`\n * succeeded, the rest of this pipeline is total — no second catch needed.\n */\n const currentMtimeMs = await getBinaryMtime(binaryPath);\n if (currentMtimeMs == null) {\n /** Binary visible to which but not to stat — odd, fall through to spawn. */\n return [await detectAndPersist(binaryPath, null)];\n }\n\n const cache = await loadCache();\n const cached = cache.get(binaryPath);\n if (cached && isCacheValid(cached, currentMtimeMs)) {\n logger.info({ binaryPath, version: cached.version }, 'agent_providers_cache_hit');\n return [buildAgent(cached.version)];\n }\n\n return [await detectAndPersist(binaryPath, currentMtimeMs)];\n}\n\nasync function detectAndPersist(\n binaryPath: string,\n binaryMtimeMs: number | null\n): Promise<InstalledAgent> {\n logger.info({ binaryPath }, 'Detecting Claude Code CLI');\n let version: string | undefined;\n try {\n const raw = await run('claude', ['--version']);\n const match = raw.match(/\\d+\\.\\d+\\.\\d+/);\n if (match) version = match[0];\n } catch {\n /** Best-effort — some builds don't support --version. */\n }\n const agent = buildAgent(version);\n logger.info({ agent }, 'Agent detection complete');\n\n if (binaryMtimeMs != null && version) {\n const entry: AgentCacheEntry = {\n binaryPath,\n version,\n binaryMtimeMs,\n cachedAt: Date.now(),\n };\n await saveCache(new Map([[binaryPath, entry]]));\n }\n\n return agent;\n}\n","import type { AnthropicAuthMethod } from '@shipyard/loro-schema';\n\n/**\n * Single source of truth for env-var → auth-method resolution.\n * Precedence must stay in sync between auth detection and env-mismatch\n * classification — use this helper in both places.\n */\nexport interface EnvMethodResolution {\n method: AnthropicAuthMethod;\n envVar: string;\n}\n\nexport function resolveEnvMethod(env: NodeJS.ProcessEnv): EnvMethodResolution | null {\n if (env.CLAUDE_CODE_USE_BEDROCK) return { method: 'bedrock', envVar: 'CLAUDE_CODE_USE_BEDROCK' };\n if (env.CLAUDE_CODE_USE_VERTEX) return { method: 'vertex', envVar: 'CLAUDE_CODE_USE_VERTEX' };\n if (env.CLAUDE_CODE_USE_FOUNDRY) return { method: 'foundry', envVar: 'CLAUDE_CODE_USE_FOUNDRY' };\n if (env.ANTHROPIC_AUTH_TOKEN) return { method: 'gateway', envVar: 'ANTHROPIC_AUTH_TOKEN' };\n if (env.ANTHROPIC_API_KEY) return { method: 'api-key', envVar: 'ANTHROPIC_API_KEY' };\n return null;\n}\n","import type { AnthropicAuthStatus } from '@shipyard/session';\nimport { logger } from '../logger.js';\nimport { resolveEnvMethod } from './env-methods.js';\nimport { AUTH_STATUS_TIMEOUT_MS, run } from './shell.js';\n\n/**\n * Tagged discriminated union for auth detection.\n *\n * - `detected` — confirmed authenticated state (env var or CLI loggedIn: true)\n * - `not-detected` — CLI reports loggedIn: false (explicit logout)\n * - `preserved` — CLI call failed; caller should keep prior state\n */\nexport type AuthDetectionResult =\n | { kind: 'detected'; auth: AnthropicAuthStatus }\n | { kind: 'preserved'; reason: 'spawn-error' | 'timeout' | 'parse-error' }\n | { kind: 'not-detected'; auth: { status: 'unauthenticated'; method: 'none' } };\n\n/**\n * @param methodHint — if the caller knows which login method was used\n * (e.g. from the login request), pass it here. The CLI status output\n * reports `authMethod: \"claude.ai\"` for both subscription and console\n * OAuth, so we need this hint to distinguish them.\n */\nexport async function detectAnthropicAuth(\n methodHint?: AnthropicAuthStatus['method']\n): Promise<AuthDetectionResult> {\n const envResult = detectFromEnvVars();\n if (envResult) return { kind: 'detected', auth: envResult };\n\n let stdout: string;\n try {\n stdout = await run('claude', ['auth', 'status', '--json'], undefined, AUTH_STATUS_TIMEOUT_MS);\n } catch (err) {\n const reason = classifyCliError(err);\n logger.warn(\n { err, reason },\n 'Failed to detect Anthropic auth via claude CLI — preserving last-known status'\n );\n return { kind: 'preserved', reason };\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(stdout);\n } catch (err) {\n logger.warn({ err }, 'claude auth status returned invalid JSON — preserving last-known status');\n return { kind: 'preserved', reason: 'parse-error' };\n }\n\n return interpretCliPayload(parsed, methodHint);\n}\n\ninterface CliSpawnError extends Error {\n code?: string;\n signal?: string;\n killed?: boolean;\n}\n\nfunction isCliSpawnError(err: unknown): err is CliSpawnError {\n return err instanceof Error;\n}\n\nfunction classifyCliError(err: unknown): 'timeout' | 'spawn-error' {\n if (!isCliSpawnError(err)) return 'spawn-error';\n if (err.code === 'ETIMEDOUT') return 'timeout';\n if (err.killed === true && err.signal === 'SIGTERM') return 'timeout';\n return 'spawn-error';\n}\n\nfunction interpretCliPayload(\n parsed: unknown,\n methodHint: AnthropicAuthStatus['method'] | undefined\n): AuthDetectionResult {\n if (typeof parsed !== 'object' || parsed === null) {\n return { kind: 'not-detected', auth: { status: 'unauthenticated', method: 'none' } };\n }\n\n const record = toRecord(parsed);\n if (!record.loggedIn) {\n return { kind: 'not-detected', auth: { status: 'unauthenticated', method: 'none' } };\n }\n\n const method = methodHint && methodHint !== 'none' ? methodHint : resolveCliAuthMethod(record);\n const auth: AnthropicAuthStatus = {\n status: 'authenticated',\n method,\n email: typeof record.email === 'string' ? record.email : undefined,\n orgName: typeof record.orgName === 'string' ? record.orgName : undefined,\n apiProvider: typeof record.apiProvider === 'string' ? record.apiProvider : undefined,\n subscriptionType:\n typeof record.subscriptionType === 'string'\n ? record.subscriptionType\n : record.subscriptionType === null\n ? null\n : undefined,\n };\n return { kind: 'detected', auth };\n}\n\nfunction detectFromEnvVars(): AnthropicAuthStatus | null {\n const resolved = resolveEnvMethod(process.env);\n return resolved ? { status: 'authenticated', method: resolved.method } : null;\n}\n\n/**\n * Map the CLI's `authMethod` / `apiProvider` fields to our canonical method enum.\n */\nfunction resolveCliAuthMethod(record: Record<string, unknown>): AnthropicAuthStatus['method'] {\n const authMethod = typeof record.authMethod === 'string' ? record.authMethod : '';\n const apiProvider = typeof record.apiProvider === 'string' ? record.apiProvider : '';\n\n if (authMethod === 'claude.ai') return 'claude-ai';\n if (authMethod.includes('console') || apiProvider === 'console') return 'console';\n if (authMethod.includes('sso') || apiProvider === 'sso') return 'sso';\n\n return 'claude-ai';\n}\n\nfunction toRecord(value: unknown): Record<string, unknown> {\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n return value as never;\n }\n return {};\n}\n","import type { AnthropicAuthMethod } from '@shipyard/loro-schema';\nimport { resolveEnvMethod } from './env-methods.js';\n\nexport type EnvMismatch =\n | { kind: 'aligned' }\n | {\n kind: 'mismatch';\n selected: AnthropicAuthMethod;\n envMethod: AnthropicAuthMethod;\n envVar: string;\n };\n\n/**\n * Pure function: classify whether the user's preferred auth method conflicts\n * with credentials present in the process environment.\n *\n * A mismatch fires whenever the env-resolved method differs from the user's\n * explicit preference — this catches both \"subscription user with stray API\n * key\" and \"API-key user with stray bedrock env\", because the CLI's env-var\n * precedence will silently route billing to whichever env var wins.\n */\nexport function classifyEnvMismatch(\n preferred: AnthropicAuthMethod | null,\n env: NodeJS.ProcessEnv\n): EnvMismatch {\n if (preferred === null || preferred === 'none') return { kind: 'aligned' };\n const resolved = resolveEnvMethod(env);\n if (!resolved) return { kind: 'aligned' };\n if (resolved.method === preferred) return { kind: 'aligned' };\n return {\n kind: 'mismatch',\n selected: preferred,\n envMethod: resolved.method,\n envVar: resolved.envVar,\n };\n}\n","import { readdir, readFile, stat } from 'node:fs/promises';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport type { MarketplacePluginInfo } from '@shipyard/session';\nimport { z } from 'zod';\n\nimport { logger } from '../logger.js';\n\nconst PluginJsonSchema = z.object({\n name: z.string(),\n description: z.string().optional(),\n version: z.string().optional(),\n author: z.union([z.object({ name: z.string() }), z.string()]).optional(),\n});\n\nconst InstalledPluginsSchema = z.object({\n version: z.number(),\n plugins: z.record(\n z.string(),\n z.array(\n z.object({\n scope: z.string(),\n installPath: z.string(),\n version: z.string(),\n installedAt: z.string(),\n lastUpdated: z.string(),\n })\n )\n ),\n});\n\nconst InstallCountsSchema = z.object({\n counts: z.array(\n z.object({\n plugin: z.string(),\n unique_installs: z.number(),\n })\n ),\n});\n\nconst KnownMarketplacesSchema = z.record(\n z.string(),\n z\n .object({\n installLocation: z.string(),\n })\n .passthrough()\n);\n\nasync function readJsonFile<T>(path: string, schema: z.ZodType<T>): Promise<T | null> {\n try {\n const raw = await readFile(path, 'utf-8');\n const result = schema.safeParse(JSON.parse(raw));\n return result.success ? result.data : null;\n } catch {\n return null;\n }\n}\n\nasync function listSubdirs(dir: string): Promise<string[]> {\n try {\n const entries = await readdir(dir);\n const results: string[] = [];\n for (const entry of entries) {\n if (entry.startsWith('.')) continue;\n const full = join(dir, entry);\n const s = await stat(full).catch(() => null);\n if (s?.isDirectory()) results.push(entry);\n }\n return results;\n } catch {\n return [];\n }\n}\n\nfunction resolveAuthor(author: z.infer<typeof PluginJsonSchema>['author']): string {\n if (!author) return 'Unknown';\n if (typeof author === 'string') return author;\n return author.name;\n}\n\n/**\n * Scan a single marketplace directory for plugins.\n * Reads both `plugins/` (first-party) and `external_plugins/` (third-party).\n */\nasync function scanMarketplace(\n marketplaceName: string,\n marketplacePath: string,\n installedSet: Set<string>,\n enabledMap: Record<string, boolean>,\n installCounts: Map<string, number>\n): Promise<MarketplacePluginInfo[]> {\n const results: MarketplacePluginInfo[] = [];\n\n for (const subdir of ['plugins', 'external_plugins']) {\n const isExternal = subdir === 'external_plugins';\n const dir = join(marketplacePath, subdir);\n const pluginNames = await listSubdirs(dir);\n\n for (const pluginName of pluginNames) {\n const pluginJsonPath = join(dir, pluginName, '.claude-plugin', 'plugin.json');\n const pluginJson = await readJsonFile(pluginJsonPath, PluginJsonSchema);\n if (!pluginJson) continue;\n\n const fullId = `${pluginName}@${marketplaceName}`;\n const installed = installedSet.has(fullId);\n const enabled = enabledMap[fullId] ?? false;\n\n results.push({\n name: pluginName,\n description: pluginJson.description ?? '',\n author: resolveAuthor(pluginJson.author),\n marketplace: marketplaceName,\n installCount: installCounts.get(fullId),\n installed,\n enabled: installed && enabled,\n version: pluginJson.version,\n isExternal,\n });\n }\n }\n\n return results;\n}\n\n/**\n * Detect all plugins available in Claude Code's marketplace directories.\n * Cross-references with installed state, enabled state, and install counts.\n *\n * `lastKnown` preserves the previously-detected list when this function\n * throws (rare — `readJsonFile` swallows errors and returns null — but\n * defense in depth against future regressions). Mirror of the\n * `lastKnownAgents` pattern in `agents.ts`.\n */\nexport async function detectMarketplacePlugins(\n lastKnown?: MarketplacePluginInfo[]\n): Promise<MarketplacePluginInfo[]> {\n try {\n return await detectMarketplacePluginsInner();\n } catch (err) {\n /**\n * Preserve \"always resolves\" contract — inner readers already swallow\n * per-file errors. Never rethrow because the Promise.all in\n * detectCapabilities would tear down the whole refresh for a single\n * slice's failure.\n */\n if (lastKnown && lastKnown.length > 0) {\n logger.warn(\n { err, lastKnownCount: lastKnown.length },\n 'detectMarketplacePlugins threw — preserving lastKnown'\n );\n return lastKnown;\n }\n logger.debug({ err }, 'detectMarketplacePlugins threw with no lastKnown — returning []');\n return [];\n }\n}\n\nasync function detectMarketplacePluginsInner(): Promise<MarketplacePluginInfo[]> {\n const pluginsDir = join(homedir(), '.claude', 'plugins');\n\n const [installedData, installCountsData, knownMarketplaces, enabledPlugins] = await Promise.all([\n readJsonFile(join(pluginsDir, 'installed_plugins.json'), InstalledPluginsSchema),\n readJsonFile(join(pluginsDir, 'install-counts-cache.json'), InstallCountsSchema),\n readJsonFile(join(pluginsDir, 'known_marketplaces.json'), KnownMarketplacesSchema),\n readJsonFile(\n join(homedir(), '.claude', 'settings.json'),\n z\n .object({\n enabledPlugins: z.record(z.string(), z.boolean()).optional(),\n })\n .passthrough()\n ),\n ]);\n\n const installedSet = new Set<string>(installedData ? Object.keys(installedData.plugins) : []);\n\n const enabledMap = enabledPlugins?.enabledPlugins ?? {};\n\n const installCounts = new Map<string, number>();\n if (installCountsData) {\n for (const entry of installCountsData.counts) {\n installCounts.set(entry.plugin, entry.unique_installs);\n }\n }\n\n const allPlugins: MarketplacePluginInfo[] = [];\n\n if (knownMarketplaces) {\n const scanPromises = Object.entries(knownMarketplaces).map(async ([name, meta]) => {\n if (!meta || typeof meta !== 'object') return [];\n const location = meta.installLocation;\n if (typeof location !== 'string') return [];\n return scanMarketplace(name, location, installedSet, enabledMap, installCounts);\n });\n\n const results = await Promise.all(scanPromises);\n for (const plugins of results) {\n allPlugins.push(...plugins);\n }\n }\n\n allPlugins.sort((a, b) => (b.installCount ?? 0) - (a.installCount ?? 0));\n\n logger.debug({ count: allPlugins.length }, 'Detected marketplace plugins');\n return allPlugins;\n}\n","import { existsSync, readFileSync } from 'node:fs';\nimport { createRequire } from 'node:module';\nimport { REASONING_EFFORTS, type ReasoningEffort } from '@shipyard/loro-schema';\nimport { logger } from '../logger.js';\n\n/**\n * Probe the SDK-bundled Claude Code CLI to determine which `--effort` values it\n * actually accepts. The installed SDK version may lag behind what Shipyard's\n * capability schema advertises (e.g. SDK 0.2.81 bundles a CLI that rejects\n * `xhigh`). Advertising efforts the CLI rejects produces hard-failing turns,\n * so we narrow the advertised set to the intersection.\n *\n * SDK 0.2.116+ distributes Claude Code as a per-platform native binary\n * (`@anthropic-ai/claude-agent-sdk-${platform}-${arch}`) instead of a bundled\n * `cli.js`. The probe resolves that binary by platform, scans its bytes for\n * the commander effort-option description, and parses the choices out. If the\n * user overrides the spawned binary via `CLAUDE_CODE_PATH`, the advertised\n * set may be stale — `resolveSupportedEffort` in anthropic-adapter.ts\n * provides a second-layer coercion at spawn time to catch that edge case.\n */\n\nconst CONSERVATIVE_FALLBACK: ReadonlySet<ReasoningEffort> = new Set([\n 'low',\n 'medium',\n 'high',\n 'max',\n]);\n\ntype ProbeResult = {\n supported: ReadonlySet<ReasoningEffort>;\n /** `parsed` when the bundled CLI was successfully scanned; `fallback` otherwise. */\n source: 'parsed' | 'fallback';\n};\n\nlet cached: ReadonlySet<ReasoningEffort> | null = null;\n\nexport function getSupportedEfforts(): ReadonlySet<ReasoningEffort> {\n if (cached) return cached;\n const { supported, source } = probeCli();\n cached = supported;\n if (source === 'parsed') {\n /**\n * Exclude meta-values that are never expected in the `--effort` flag set\n * (currently `'none'` — translated to `applyFlagSettings({alwaysThinkingEnabled:false})`\n * at runtime). Otherwise every boot would log a misleading \"CLI doesn't\n * support 'none'\" line, even though nothing is actually missing.\n */\n const dropped = REASONING_EFFORTS.filter((e) => e !== 'none' && !supported.has(e));\n if (dropped.length > 0) {\n logger.info(\n { supported: [...supported], dropped },\n 'bundled Claude Code CLI does not support all reasoning efforts; advertised set narrowed'\n );\n }\n }\n return supported;\n}\n\n/**\n * Pure parse step: extract the supported effort tokens from the CLI's argParser\n * description string. Returns `null` when the description can't be located so\n * the caller can distinguish \"probe succeeded, narrowed to X\" from \"probe\n * failed, fall back conservatively\".\n *\n * The inner char class is permissive (`[^)]+`); unknown tokens are filtered\n * out by `isReasoningEffort` so a new tier introduced in a future CLI is\n * gracefully ignored rather than breaking the outer match.\n */\nexport function parseEffortsFromCliText(cliSource: string): ReadonlySet<ReasoningEffort> | null {\n const match = cliSource.match(/Effort level for the current session \\(([^)]+)\\)/);\n if (!match?.[1]) return null;\n const allowed = new Set<ReasoningEffort>();\n for (const token of match[1].split(',')) {\n const t = token.trim();\n if (isReasoningEffort(t)) allowed.add(t);\n }\n return allowed.size > 0 ? allowed : null;\n}\n\nexport const _testing = {\n reset(): void {\n cached = null;\n },\n setCached(values: ReadonlySet<ReasoningEffort>): void {\n cached = values;\n },\n};\n\nconst EFFORT_SET: ReadonlySet<string> = new Set(REASONING_EFFORTS);\nfunction isReasoningEffort(value: string): value is ReasoningEffort {\n return EFFORT_SET.has(value);\n}\n\nfunction probeCli(): ProbeResult {\n try {\n const binaryPath = resolveBundledClaudeBinary();\n if (!binaryPath || !existsSync(binaryPath)) {\n logger.warn(\n { binaryPath },\n 'bundled Claude Code binary not found; using conservative effort set'\n );\n return { supported: CONSERVATIVE_FALLBACK, source: 'fallback' };\n }\n const slice = readEffortDescriptionFromBinary(binaryPath);\n if (slice === null) {\n logger.warn(\n { binaryPath },\n 'effort description not found in bundled binary; using conservative effort set'\n );\n return { supported: CONSERVATIVE_FALLBACK, source: 'fallback' };\n }\n const parsed = parseEffortsFromCliText(slice);\n if (!parsed) {\n logger.warn(\n { binaryPath },\n 'could not parse effort tokens from bundled binary; using conservative effort set'\n );\n return { supported: CONSERVATIVE_FALLBACK, source: 'fallback' };\n }\n return { supported: parsed, source: 'parsed' };\n } catch (err) {\n logger.warn({ err }, 'effort probe failed; using conservative effort set');\n return { supported: CONSERVATIVE_FALLBACK, source: 'fallback' };\n }\n}\n\nfunction resolveBundledClaudeBinary(): string | null {\n const req = createRequire(import.meta.url);\n const sdkMain = req.resolve('@anthropic-ai/claude-agent-sdk');\n const sdkReq = createRequire(sdkMain);\n const ext = process.platform === 'win32' ? '.exe' : '';\n const candidates =\n process.platform === 'linux'\n ? [\n `@anthropic-ai/claude-agent-sdk-linux-${process.arch}-musl`,\n `@anthropic-ai/claude-agent-sdk-linux-${process.arch}`,\n ]\n : [`@anthropic-ai/claude-agent-sdk-${process.platform}-${process.arch}`];\n for (const pkg of candidates) {\n try {\n return sdkReq.resolve(`${pkg}/claude${ext}`);\n } catch (err) {\n logger.debug({ pkg, err }, 'platform claude binary candidate not resolvable');\n }\n }\n return null;\n}\n\n/**\n * The native binary is ~200MB; this synchronous read blocks the event loop on\n * cold disk (sub-second on warm OS page cache). Acceptable because the result\n * is module-level cached — one daemon-boot cost per install. If startup\n * latency becomes a real concern, switch to chunked `fs.readSync` with early\n * exit on match.\n */\nfunction readEffortDescriptionFromBinary(binaryPath: string): string | null {\n const buf = readFileSync(binaryPath);\n const needle = Buffer.from('Effort level for the current session');\n const idx = buf.indexOf(needle);\n if (idx === -1) return null;\n const end = Math.min(idx + 200, buf.length);\n return buf.toString('utf-8', idx, end);\n}\n","/**\n * Options for the change() function.\n *\n * These options can be passed to change() when mutating TypedDoc, TypedRef, or Lens.\n */\nexport interface ChangeOptions {\n /**\n * Commit message to attach to the change.\n *\n * This message will be stored in the Loro commit and is available\n * in filters via `CommitInfo.message`.\n *\n * If an object is provided, it will be automatically JSON-serialized.\n *\n * @example\n * ```typescript\n * // String message\n * change(doc, draft => { ... }, { commitMessage: \"player-move\" })\n *\n * // Object message (auto-serialized to JSON)\n * change(doc, draft => { ... }, { commitMessage: { playerId: \"alice\" } })\n * ```\n */\n commitMessage?: string | object\n}\n\n/**\n * Serialize a commit message to a string.\n *\n * - String messages are returned as-is\n * - Object messages are JSON-serialized\n * - Handles serialization errors gracefully (returns undefined)\n *\n * @param message - The message to serialize (string, object, or undefined)\n * @returns The serialized message string, or undefined\n */\nexport function serializeCommitMessage(\n message: string | object | undefined,\n): string | undefined {\n if (message === undefined) return undefined\n if (typeof message === \"string\") return message\n try {\n return JSON.stringify(message)\n } catch {\n // Handle circular references, BigInt, etc.\n return undefined\n }\n}\n","import type { ContainerOrValueShape, DocShape, ValueShape } from \"./shape.js\"\nimport type { InferPlaceholderType } from \"./types.js\"\n\n/**\n * Derives the placeholder state from a schema by composing placeholder values.\n *\n * For leaf nodes (text, counter, values): uses _placeholder directly\n * For containers (map, list, record): recurses into nested shapes\n */\nexport function derivePlaceholder<T extends DocShape>(\n schema: T,\n): InferPlaceholderType<T> {\n const result: Record<string, unknown> = {}\n\n for (const [key, shape] of Object.entries(schema.shapes)) {\n result[key] = deriveShapePlaceholder(shape)\n }\n\n return result as InferPlaceholderType<T>\n}\n\n/**\n * Derives placeholder for a single shape.\n *\n * Leaf nodes: return _placeholder directly\n * Containers: recurse into nested shapes (ignore _placeholder on containers)\n */\nexport function deriveShapePlaceholder(shape: ContainerOrValueShape): unknown {\n switch (shape._type) {\n // Any container - no placeholder (undefined)\n case \"any\":\n return undefined\n\n // Leaf containers - use _placeholder directly\n case \"text\":\n return shape._placeholder\n case \"counter\":\n return shape._placeholder\n\n // Dynamic containers - always empty (no per-entry merging)\n case \"list\":\n case \"movableList\":\n case \"tree\":\n return []\n case \"record\":\n return {}\n\n // Structured container - recurse into nested shapes\n case \"struct\": {\n const result: Record<string, unknown> = {}\n for (const [key, nestedShape] of Object.entries(shape.shapes)) {\n result[key] = deriveShapePlaceholder(nestedShape)\n }\n return result\n }\n\n case \"value\":\n return deriveValueShapePlaceholder(shape)\n\n default:\n return undefined\n }\n}\n\nfunction deriveValueShapePlaceholder(shape: ValueShape): unknown {\n switch (shape.valueType) {\n // Any value - no placeholder (undefined)\n case \"any\":\n return undefined\n\n // Leaf values - use _placeholder directly\n case \"string\":\n return shape._placeholder\n case \"number\":\n return shape._placeholder\n case \"boolean\":\n return shape._placeholder\n case \"null\":\n return null\n case \"undefined\":\n return undefined\n case \"uint8array\":\n return shape._placeholder\n\n // Structured value - recurse into nested shapes (like struct)\n case \"struct\": {\n const result: Record<string, unknown> = {}\n for (const [key, nestedShape] of Object.entries(shape.shape)) {\n result[key] = deriveValueShapePlaceholder(nestedShape)\n }\n return result\n }\n\n // Dynamic values - always empty\n case \"array\":\n return []\n case \"record\":\n return {}\n\n // Unions - use _placeholder if explicitly set, otherwise derive from first variant\n case \"union\": {\n // Check if _placeholder was explicitly set (not the default empty object)\n // We need to check if it's a primitive value OR a non-empty object\n const placeholder = shape._placeholder\n if (placeholder !== undefined) {\n // If it's a primitive (null, string, number, boolean), use it\n if (placeholder === null || typeof placeholder !== \"object\") {\n return placeholder\n }\n // If it's an object with keys, use it\n if (Object.keys(placeholder as object).length > 0) {\n return placeholder\n }\n }\n // Otherwise derive from first variant\n return deriveValueShapePlaceholder(shape.shapes[0])\n }\n\n case \"discriminatedUnion\": {\n // Check if _placeholder was explicitly set (not the default empty object)\n const placeholder = shape._placeholder\n if (placeholder !== undefined) {\n // If it's a primitive (null, string, number, boolean), use it\n if (placeholder === null || typeof placeholder !== \"object\") {\n return placeholder\n }\n // If it's an object with keys, use it\n if (Object.keys(placeholder as object).length > 0) {\n return placeholder\n }\n }\n // Otherwise derive from first variant\n const firstKey = Object.keys(shape.variants)[0]\n return deriveValueShapePlaceholder(shape.variants[firstKey])\n }\n\n default:\n return undefined\n }\n}\n","import type { ContainerID, Diff, LoroDoc, LoroEventBatch } from \"loro-crdt\"\n\nexport type DiffOverlay = ReadonlyMap<ContainerID, Diff>\n\nexport function createDiffOverlay(\n doc: LoroDoc,\n batch: LoroEventBatch,\n): DiffOverlay {\n return new Map(doc.diff(batch.to, batch.from, false))\n}\n","/**\n * Custom error types for @loro-extended/change\n *\n * All errors extend LoroExtendedError for unified catch handling.\n *\n * @module errors\n */\n\n/**\n * Base error class for all loro-extended errors.\n * Provides a context object for structured error information.\n */\nexport class LoroExtendedError extends Error {\n constructor(\n message: string,\n public context?: Record<string, unknown>,\n ) {\n super(message)\n this.name = \"LoroExtendedError\"\n }\n}\n\n/**\n * Thrown when a PlainValueRef for a list item is accessed after the list has been mutated.\n * The stored index may no longer point to the same item.\n *\n * @example\n * ```typescript\n * const ref = list.get(0)\n * list.delete(0, 1)\n * ref.get() // Throws StaleRefError - index 0 now points to different item\n * ```\n */\nexport class StaleRefError extends LoroExtendedError {\n constructor(\n public listId: string,\n public originalIndex: number,\n ) {\n super(\n `Stale PlainValueRef: list \"${listId}\" was mutated after this ref was created at index ${originalIndex}. ` +\n `Capture values with .get() before mutating the list.`,\n { listId, originalIndex },\n )\n this.name = \"StaleRefError\"\n }\n}\n\n/**\n * Thrown when path navigation fails (e.g., in JSON Patch operations or path evaluation).\n *\n * @example\n * ```typescript\n * // Attempting to navigate to a non-existent path segment\n * applyPatch(doc, [{ op: \"add\", path: \"/nonexistent/field\", value: 1 }])\n * // Throws PathNavigationError\n * ```\n */\nexport class PathNavigationError extends LoroExtendedError {\n constructor(\n public path: (string | number)[],\n public failedSegment: string | number,\n message?: string,\n ) {\n super(message ?? `Cannot navigate to path segment: ${failedSegment}`, {\n path,\n failedSegment,\n })\n this.name = \"PathNavigationError\"\n }\n}\n\n/**\n * Thrown when a value doesn't match its expected schema type.\n * Used by validateValue() when validation is enabled.\n *\n * @example\n * ```typescript\n * const doc = createTypedDoc(schema, { validate: true })\n * doc.count.set(\"not a number\") // Throws SchemaViolationError\n * ```\n */\nexport class SchemaViolationError extends LoroExtendedError {\n constructor(\n public schemaPath: string,\n public expectedType: string,\n public actualValue: unknown,\n ) {\n super(\n `Schema violation at ${schemaPath}: expected ${expectedType}, got ${typeof actualValue}`,\n { schemaPath, expectedType, actualValue },\n )\n this.name = \"SchemaViolationError\"\n }\n}\n\n/**\n * Thrown when an operation is not supported on a particular container type.\n *\n * @example\n * ```typescript\n * // Attempting to delete from a struct (structs have fixed keys)\n * delete structRef.fixedKey // Throws ContainerTypeError\n * ```\n */\nexport class ContainerTypeError extends LoroExtendedError {\n constructor(\n public containerType: string,\n public operation: string,\n ) {\n super(`Cannot perform ${operation} on container type: ${containerType}`, {\n containerType,\n operation,\n })\n this.name = \"ContainerTypeError\"\n }\n}\n","/**\n * The `ext()` function - access loro-extended-specific features.\n *\n * Design Principle:\n * > `loro()` returns native Loro types directly (LoroDoc, LoroText, etc.)\n * > `ext()` provides loro-extended-specific features (fork, applyPatch, container ops, etc.)\n *\n * For mutations, use the `change()` functional helper:\n * ```typescript\n * import { change, ext, loro, subscribe } from \"@loro-extended/change\"\n *\n * // Mutations via change() functional helper\n * change(doc, draft => { draft.count.increment(10) })\n *\n * // Access native Loro types directly\n * const loroDoc = loro(doc) // LoroDoc\n * const loroText = loro(doc.title) // LoroText\n *\n * // Subscribe to changes\n * subscribe(doc, callback) // Document-level subscription\n * subscribe(ref, callback) // Container-level subscription\n *\n * // Access loro-extended features\n * ext(doc).forkAt(frontiers)\n * ext(ref).doc // Get LoroDoc from any ref\n * ```\n */\n\nimport type { Container, LoroDoc } from \"loro-crdt\"\nimport type { ChangeOptions } from \"./change-options.js\"\nimport type { JsonPatch } from \"./json-patch.js\"\nimport type {\n ContainerOrValueShape,\n ContainerShape,\n DocShape,\n RefMode,\n StructContainerShape,\n TreeRefInterface,\n} from \"./shape.js\"\nimport type { Frontiers, TypedDoc } from \"./typed-doc.js\"\nimport type { TypedRef } from \"./typed-refs/base.js\"\nimport type { CounterRef } from \"./typed-refs/counter-ref.js\"\nimport type { ListRef } from \"./typed-refs/list-ref.js\"\nimport type { MovableListRef } from \"./typed-refs/movable-list-ref.js\"\nimport type { RecordRef } from \"./typed-refs/record-ref.js\"\nimport type { StructRef } from \"./typed-refs/struct-ref.js\"\nimport type { TextRef } from \"./typed-refs/text-ref.js\"\nimport type { TreeNodeRef } from \"./typed-refs/tree-node-ref.js\"\nimport type { TreeRef } from \"./typed-refs/tree-ref.js\"\nimport type { Draft } from \"./types.js\"\n\n// ============================================================================\n// Symbol for ext() access\n// ============================================================================\n\n/**\n * Well-known Symbol for ext() access.\n * This is exported so advanced users can access it directly if needed.\n */\nexport const EXT_SYMBOL = Symbol.for(\"loro-extended:ext\")\n\n// ============================================================================\n// Interface definitions for ext() return types\n// ============================================================================\n\n/**\n * Base interface for all ext() return types on refs.\n * Provides access to the underlying LoroDoc.\n */\nexport interface ExtRefBase {\n /** The underlying LoroDoc */\n readonly doc: LoroDoc\n}\n\n/**\n * ext() return type for ListRef and MovableListRef.\n * Provides container operations that take Loro containers.\n */\nexport interface ExtListRef extends ExtRefBase {\n /**\n * Push a Loro container to the end of the list.\n * Use this when you need to add a pre-existing container.\n */\n pushContainer(container: Container): Container\n\n /**\n * Insert a Loro container at the specified index.\n * Use this when you need to insert a pre-existing container.\n */\n insertContainer(index: number, container: Container): Container\n}\n\n/**\n * ext() return type for StructRef and RecordRef.\n * Provides container operations that take Loro containers.\n */\nexport interface ExtMapRef extends ExtRefBase {\n /**\n * Set a Loro container at the specified key.\n * Use this when you need to set a pre-existing container.\n */\n setContainer(key: string, container: Container): Container\n}\n\n/**\n * ext() return type for TypedDoc.\n * Provides access to doc-level operations.\n */\nexport interface ExtDocRef<Shape extends DocShape> {\n /**\n * Creates a new TypedDoc as a fork of the current document.\n * The forked doc contains all history up to the current version.\n * The forked doc has a different PeerID from the original by default.\n *\n * @param options - Optional settings\n * @param options.preservePeerId - If true, copies the original doc's peer ID to the fork\n * @returns A new TypedDoc with the same schema at the current version\n */\n fork(options?: { preservePeerId?: boolean }): TypedDoc<Shape>\n\n /**\n * Creates a new TypedDoc at a specified version (frontiers).\n * The forked doc will only contain history before the specified frontiers.\n * The forked doc has a different PeerID from the original.\n *\n * @param frontiers - The version to fork at (obtained from `loro(doc).frontiers()`)\n * @returns A new TypedDoc with the same schema at the specified version\n */\n forkAt(frontiers: Frontiers): TypedDoc<Shape>\n\n /**\n * Creates a new TypedDoc at a specified version using a shallow snapshot.\n * Unlike `forkAt`, this creates a \"garbage-collected\" snapshot that only\n * contains the current state and history since the specified frontiers.\n *\n * @param frontiers - The version to fork at\n * @param options - Optional settings\n * @param options.preservePeerId - If true, copies the original doc's peer ID to the fork\n * @returns A new TypedDoc with the same schema at the specified version (shallow)\n */\n shallowForkAt(\n frontiers: Frontiers,\n options?: { preservePeerId?: boolean },\n ): TypedDoc<Shape>\n\n /**\n * Initialize the document by writing metadata.\n * This is called automatically unless `skipInitialize: true` was passed to createTypedDoc.\n * Call this manually if you skipped initialization and want to write metadata later.\n */\n initialize(): void\n\n /**\n * Apply JSON Patch operations to the document.\n * @param patch - Array of JSON Patch operations (RFC 6902)\n * @param pathPrefix - Optional path prefix for scoped operations\n */\n applyPatch(patch: JsonPatch, pathPrefix?: (string | number)[]): void\n\n /** Access the document schema shape */\n readonly docShape: Shape\n\n /** Get raw CRDT value without placeholder overlay */\n readonly rawValue: unknown\n\n /**\n * Whether this document uses mergeable (flattened) storage.\n * This is the effective value computed from metadata > schema > false.\n */\n readonly mergeable: boolean\n\n /**\n * Batch mutations into a single transaction.\n * All changes commit together at the end.\n *\n * Note: The `change(doc, fn, options?)` functional helper is the recommended API.\n * This method exists for internal use and method-chaining scenarios.\n *\n * @param fn - Function that performs mutations on the draft\n * @param options - Optional configuration including commit message\n * @returns The same TypedDoc for chaining\n */\n change(\n fn: (draft: Draft<Shape>) => void,\n options?: ChangeOptions,\n ): TypedDoc<Shape>\n}\n\n// ============================================================================\n// ext() function overloads\n// ============================================================================\n\n/**\n * Access loro-extended features for a ListRef.\n */\nexport function ext<NestedShape extends ContainerShape>(\n ref: ListRef<NestedShape>,\n): ExtListRef\n\n/**\n * Access loro-extended features for a MovableListRef.\n */\nexport function ext<NestedShape extends ContainerShape>(\n ref: MovableListRef<NestedShape>,\n): ExtListRef\n\n/**\n * Access loro-extended features for a StructRef.\n */\nexport function ext<\n NestedShapes extends Record<string, ContainerOrValueShape>,\n Mode extends RefMode = \"mutable\",\n>(ref: StructRef<NestedShapes, Mode>): ExtMapRef\n\n/**\n * Access loro-extended features for a RecordRef.\n */\nexport function ext<NestedShape extends ContainerShape>(\n ref: RecordRef<NestedShape>,\n): ExtMapRef\n\n/**\n * Access loro-extended features for a TextRef.\n */\nexport function ext(ref: TextRef): ExtRefBase\n\n/**\n * Access loro-extended features for a CounterRef.\n */\nexport function ext(ref: CounterRef): ExtRefBase\n\n/**\n * Access loro-extended features for a TreeRef.\n */\nexport function ext<DataShape extends StructContainerShape>(\n ref: TreeRef<DataShape> | TreeRefInterface<DataShape>,\n): ExtRefBase\n\n/**\n * Access loro-extended features for a TreeNodeRef.\n */\nexport function ext<DataShape extends StructContainerShape>(\n ref: TreeNodeRef<DataShape>,\n): ExtRefBase\n\n/**\n * Access loro-extended features for a TypedDoc.\n */\nexport function ext<Shape extends DocShape>(\n doc: TypedDoc<Shape>,\n): ExtDocRef<Shape>\n\n/**\n * Access loro-extended features for any TypedRef.\n */\nexport function ext<Shape extends ContainerShape>(\n ref: TypedRef<Shape>,\n): ExtRefBase\n\n/**\n * The `ext()` function - access loro-extended-specific features.\n *\n * Use this to access:\n * - fork(), forkAt(), shallowForkAt() for document forking\n * - initialize() for document initialization\n * - applyPatch() for JSON Patch operations\n * - docShape, rawValue, mergeable for document metadata\n * - pushContainer(), insertContainer(), setContainer() for container operations\n * - doc property to access LoroDoc from any ref\n *\n * For mutations, use the `change()` functional helper instead:\n * ```typescript\n * import { change } from \"@loro-extended/change\"\n * change(doc, draft => { draft.count.increment(10) })\n * ```\n *\n * @param refOrDoc - A TypedRef or TypedDoc\n * @returns An object with loro-extended features\n *\n * @example\n * ```typescript\n * import { change, ext, loro } from \"@loro-extended/change\"\n *\n * // Mutations via change() functional helper\n * change(doc, draft => { draft.count.increment(10) })\n *\n * // Document-level features\n * ext(doc).forkAt(frontiers)\n *\n * // Ref-level features\n * ext(ref).doc // Get LoroDoc from any ref\n * ext(list).pushContainer(loroMap)\n * ext(struct).setContainer('key', loroMap)\n * ```\n */\nexport function ext(\n refOrDoc:\n | TypedRef<any>\n | TypedDoc<any>\n | TreeRef<any>\n | TreeRefInterface<any>\n | TreeNodeRef<any>\n | StructRef<any>,\n): ExtRefBase | ExtDocRef<any> {\n // Access the ext namespace via the well-known symbol\n const extNamespace = (refOrDoc as any)[EXT_SYMBOL]\n if (!extNamespace) {\n throw new Error(\n \"Invalid argument: expected TypedRef, TreeRef, or TypedDoc with ext() support\",\n )\n }\n return extNamespace\n}\n","/**\n * The `loro()` function - access native Loro types directly.\n *\n * Design Principle:\n * > `loro()` returns native Loro types directly (LoroDoc, LoroText, etc.)\n * > `ext()` provides loro-extended-specific features (change, fork, subscribe with jsonpath, etc.)\n *\n * @example\n * ```typescript\n * import { loro, ext } from \"@loro-extended/change\"\n *\n * // Access native Loro types directly\n * const loroDoc = loro(doc) // LoroDoc\n * loroDoc.frontiers()\n * loroDoc.subscribe(callback)\n *\n * const loroText = loro(doc.title) // LoroText\n * loroText.length\n *\n * // Access loro-extended features via ext()\n * ext(doc).change(draft => { ... })\n * ext(doc).forkAt(frontiers)\n * ext(ref).doc // Get LoroDoc from any ref\n * ```\n */\n\nimport type {\n LoroCounter,\n LoroDoc,\n LoroList,\n LoroMap,\n LoroMovableList,\n LoroText,\n LoroTree,\n LoroTreeNode,\n} from \"loro-crdt\"\nimport type {\n ContainerOrValueShape,\n ContainerShape,\n DocShape,\n StructContainerShape,\n TreeRefInterface,\n} from \"./shape.js\"\nimport type { TypedDoc } from \"./typed-doc.js\"\nimport type { TypedRef } from \"./typed-refs/base.js\"\nimport type { CounterRef } from \"./typed-refs/counter-ref.js\"\nimport type { ListRef } from \"./typed-refs/list-ref.js\"\nimport type { MovableListRef } from \"./typed-refs/movable-list-ref.js\"\nimport type { RecordRef } from \"./typed-refs/record-ref.js\"\nimport type { StructRef } from \"./typed-refs/struct-ref.js\"\nimport type { TextRef } from \"./typed-refs/text-ref.js\"\nimport type { TreeNodeRef } from \"./typed-refs/tree-node-ref.js\"\nimport type { TreeRef } from \"./typed-refs/tree-ref.js\"\n\n// ============================================================================\n// Symbol for loro() access\n// ============================================================================\n\n/**\n * Well-known Symbol for loro() access.\n * This is exported so advanced users can access it directly if needed.\n */\nexport const LORO_SYMBOL = Symbol.for(\"loro-extended:loro\")\n\n// ============================================================================\n// loro() function overloads\n// ============================================================================\n\n/**\n * Access the native LoroList for a ListRef.\n */\nexport function loro<NestedShape extends ContainerOrValueShape>(\n ref: ListRef<NestedShape>,\n): LoroList\n\n/**\n * Access the native LoroMovableList for a MovableListRef.\n */\nexport function loro<NestedShape extends ContainerOrValueShape>(\n ref: MovableListRef<NestedShape>,\n): LoroMovableList\n\n/**\n * Access the native LoroMap for a StructRef.\n */\nexport function loro<\n NestedShapes extends Record<string, ContainerOrValueShape>,\n>(ref: StructRef<NestedShapes>): LoroMap\n\n/**\n * Access the native LoroMap for a RecordRef.\n */\nexport function loro<NestedShape extends ContainerOrValueShape>(\n ref: RecordRef<NestedShape>,\n): LoroMap\n\n/**\n * Access the native LoroText for a TextRef.\n */\nexport function loro(ref: TextRef): LoroText\n\n/**\n * Access the native LoroCounter for a CounterRef.\n */\nexport function loro(ref: CounterRef): LoroCounter\n\n/**\n * Access the native LoroTree for a TreeRef.\n */\nexport function loro<DataShape extends StructContainerShape>(\n ref: TreeRef<DataShape> | TreeRefInterface<DataShape>,\n): LoroTree\n\n/**\n * Access the native LoroTreeNode for a TreeNodeRef.\n */\nexport function loro<DataShape extends StructContainerShape>(\n ref: TreeNodeRef<DataShape>,\n): LoroTreeNode\n\n/**\n * Access the native LoroDoc for a TypedDoc.\n */\nexport function loro<Shape extends DocShape>(doc: TypedDoc<Shape>): LoroDoc\n\n/**\n * Access the native Loro container for any TypedRef.\n */\nexport function loro<Shape extends ContainerShape>(\n ref: TypedRef<Shape>,\n): unknown\n\n/**\n * The `loro()` function - access native Loro types directly.\n *\n * Use this to access:\n * - The underlying LoroDoc from a TypedDoc\n * - The underlying Loro container (LoroText, LoroList, etc.) from a TypedRef\n *\n * @param refOrDoc - A TypedRef or TypedDoc\n * @returns The native Loro type (LoroDoc, LoroText, LoroList, etc.)\n *\n * @example\n * ```typescript\n * import { loro } from \"@loro-extended/change\"\n *\n * // Access native LoroDoc\n * const loroDoc = loro(doc)\n * loroDoc.frontiers()\n * loroDoc.subscribe(callback)\n *\n * // Access native Loro containers\n * const loroText = loro(doc.title) // LoroText\n * const loroList = loro(doc.items) // LoroList\n * const loroMap = loro(doc.settings) // LoroMap\n * ```\n */\nexport function loro(\n refOrDoc:\n | TypedRef<any>\n | TypedDoc<any>\n | TreeRef<any>\n | TreeRefInterface<any>\n | TreeNodeRef<any>\n | StructRef<any>,\n): unknown {\n // Access the loro value via the well-known symbol\n const loroValue = (refOrDoc as any)[LORO_SYMBOL]\n if (loroValue === undefined) {\n throw new Error(\n \"Invalid argument: expected TypedRef, TreeRef, or TypedDoc with loro() support\",\n )\n }\n return loroValue\n}\n","// ============================================================================\n// Path Builder Factory\n// ============================================================================\n//\n// Runtime implementation of the path builder that creates PathSelector objects\n// with proper segments for JSONPath compilation.\n\nimport type { PathBuilder, PathSegment, PathSelector } from \"./path-selector.js\"\nimport type { ContainerOrValueShape, DocShape } from \"./shape.js\"\n\nfunction createPathSelector<T>(segments: PathSegment[]): PathSelector<T> {\n return {\n __resultType: undefined as unknown as T,\n __segments: segments,\n }\n}\n\nfunction createPathNode(\n shape: ContainerOrValueShape,\n segments: PathSegment[],\n): unknown {\n const selector = createPathSelector(segments)\n\n // Terminal shapes (text, counter, value)\n if (shape._type === \"text\" || shape._type === \"counter\") {\n return selector\n }\n if (shape._type === \"value\") {\n return selector\n }\n\n // List/MovableList\n if (shape._type === \"list\" || shape._type === \"movableList\") {\n return Object.assign(selector, {\n get $each() {\n return createPathNode(shape.shape, [...segments, { type: \"each\" }])\n },\n $at(index: number) {\n return createPathNode(shape.shape, [\n ...segments,\n { type: \"index\", index },\n ])\n },\n get $first() {\n return createPathNode(shape.shape, [\n ...segments,\n { type: \"index\", index: 0 },\n ])\n },\n get $last() {\n return createPathNode(shape.shape, [\n ...segments,\n { type: \"index\", index: -1 },\n ])\n },\n })\n }\n\n // Struct (fixed keys)\n if (shape._type === \"struct\") {\n const props: Record<string, unknown> = {}\n for (const key in shape.shapes) {\n Object.defineProperty(props, key, {\n get() {\n return createPathNode(shape.shapes[key], [\n ...segments,\n { type: \"property\", key },\n ])\n },\n enumerable: true,\n })\n }\n return Object.assign(selector, props)\n }\n\n // Record (dynamic keys)\n if (shape._type === \"record\") {\n return Object.assign(selector, {\n get $each() {\n return createPathNode(shape.shape, [...segments, { type: \"each\" }])\n },\n $key(key: string) {\n return createPathNode(shape.shape, [...segments, { type: \"key\", key }])\n },\n })\n }\n\n return selector\n}\n\n/**\n * Creates a path builder for a given document shape.\n *\n * The path builder provides a type-safe DSL for selecting paths within\n * a document. The resulting PathSelector can be compiled to a JSONPath\n * string for use with subscribeJsonpath.\n *\n * @example\n * ```typescript\n * const docShape = Shape.doc({\n * books: Shape.list(Shape.struct({\n * title: Shape.text(),\n * price: Shape.plain.number(),\n * })),\n * })\n *\n * const builder = createPathBuilder(docShape)\n * const selector = builder.books.$each.title\n * // selector.__segments = [\n * // { type: \"property\", key: \"books\" },\n * // { type: \"each\" },\n * // { type: \"property\", key: \"title\" }\n * // ]\n * ```\n */\nexport function createPathBuilder<D extends DocShape>(\n docShape: D,\n): PathBuilder<D> {\n const builder: Record<string, unknown> = {}\n\n for (const key in docShape.shapes) {\n Object.defineProperty(builder, key, {\n get() {\n return createPathNode(docShape.shapes[key], [{ type: \"property\", key }])\n },\n enumerable: true,\n })\n }\n\n return builder as PathBuilder<D>\n}\n","// ============================================================================\n// JSONPath Compiler\n// ============================================================================\n//\n// Compiles PathSelector segments to JSONPath strings for use with\n// subscribeJsonpath.\n\nimport type { PathSegment } from \"./path-selector.js\"\n\n/**\n * Compiles path segments to a JSONPath string.\n *\n * @example\n * ```typescript\n * const segments = [\n * { type: \"property\", key: \"books\" },\n * { type: \"each\" },\n * { type: \"property\", key: \"title\" }\n * ]\n * compileToJsonPath(segments) // => '$.books[*].title'\n * ```\n */\nexport function compileToJsonPath(segments: PathSegment[]): string {\n let path = \"$\"\n\n for (const segment of segments) {\n switch (segment.type) {\n case \"property\":\n // Use dot notation for simple identifiers, bracket notation for safety\n if (/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(segment.key)) {\n path += `.${segment.key}`\n } else {\n path += `[\"${escapeJsonPathKey(segment.key)}\"]`\n }\n break\n case \"each\":\n path += \"[*]\"\n break\n case \"index\":\n path += `[${segment.index}]`\n break\n case \"key\":\n path += `[\"${escapeJsonPathKey(segment.key)}\"]`\n break\n }\n }\n\n return path\n}\n\n/**\n * Escapes special characters in a JSONPath key.\n */\nfunction escapeJsonPathKey(key: string): string {\n return key.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"')\n}\n\n/**\n * Check if the path contains any wildcard segments.\n * Paths with wildcards need deep equality checking for change detection.\n */\nexport function hasWildcard(segments: PathSegment[]): boolean {\n return segments.some(s => s.type === \"each\")\n}\n","// ============================================================================\n// Path Evaluator\n// ============================================================================\n//\n// Evaluates a path selector against a TypedDoc to get the current value.\n// This is used for:\n// 1. Establishing the initial previousValue baseline\n// 2. Getting the current value when subscribeJsonpath fires\n// 3. Deep equality comparison to filter false positives\n\nimport type { PathSegment, PathSelector } from \"./path-selector.js\"\nimport type { DocShape } from \"./shape.js\"\nimport type { TypedDoc } from \"./typed-doc.js\"\n\n/**\n * Evaluate a path selector against a TypedDoc to get the current value.\n * Returns the value(s) at the path, properly typed.\n *\n * @example\n * ```typescript\n * const selector = builder.books.$each.title\n * const titles = evaluatePath(doc, selector)\n * // titles: string[]\n * ```\n */\nexport function evaluatePath<D extends DocShape, T>(\n doc: TypedDoc<D>,\n selector: PathSelector<T>,\n): T {\n const json = doc.toJSON()\n return evaluatePathOnValue(json, selector.__segments) as T\n}\n\n/**\n * Evaluate path segments against a plain JavaScript value.\n * This is the core recursive evaluation logic.\n */\nexport function evaluatePathOnValue(\n value: unknown,\n segments: PathSegment[],\n): unknown {\n if (segments.length === 0) {\n return value\n }\n\n const [segment, ...rest] = segments\n\n switch (segment.type) {\n case \"property\":\n case \"key\":\n if (value == null) return undefined\n if (typeof value !== \"object\") return undefined\n return evaluatePathOnValue(\n (value as Record<string, unknown>)[segment.key],\n rest,\n )\n\n case \"index\": {\n if (!Array.isArray(value)) return undefined\n // Handle negative indices: -1 = last, -2 = second-to-last, etc.\n const index =\n segment.index < 0 ? value.length + segment.index : segment.index\n if (index < 0 || index >= value.length) return undefined\n return evaluatePathOnValue(value[index], rest)\n }\n\n case \"each\":\n if (Array.isArray(value)) {\n return value.map(item => evaluatePathOnValue(item, rest))\n }\n if (typeof value === \"object\" && value !== null) {\n return Object.values(value).map(item => evaluatePathOnValue(item, rest))\n }\n return []\n }\n}\n","// ============================================================================\n// Path Subscription\n// ============================================================================\n//\n// Provides path-based subscriptions for TypedDocs. This module handles the\n// complexity of subscribing to specific paths within a document, using\n// either efficient JSONPath subscriptions or global subscriptions with\n// filtering depending on the storage mode.\n\nimport type { LoroDoc, Subscription } from \"loro-crdt\"\nimport { EXT_SYMBOL, ext } from \"./ext.js\"\nimport { loro } from \"./loro.js\"\nimport { createPathBuilder } from \"./path-builder.js\"\nimport { compileToJsonPath } from \"./path-compiler.js\"\nimport { evaluatePath } from \"./path-evaluator.js\"\nimport type { PathBuilder, PathSegment, PathSelector } from \"./path-selector.js\"\nimport type { ContainerOrValueShape, DocShape } from \"./shape.js\"\nimport type { TypedDoc } from \"./typed-doc.js\"\n\n/**\n * Determines if a path subscription requires global subscription with manual filtering.\n *\n * In mergeable (flattened) storage mode, struct and record containers are stored\n * at the root level, not hierarchically. This means JSONPath subscriptions can't\n * efficiently filter to just those paths. We must use global subscriptions and\n * manually evaluate the path on each change.\n *\n * @param segments - The path segments to analyze\n * @param docShape - The document shape to walk against\n * @param mergeable - Whether the document uses mergeable storage\n * @returns true if global subscription is required, false if subscribeJsonpath can be used\n */\nexport function requiresGlobalSubscription(\n segments: PathSegment[],\n docShape: DocShape,\n mergeable: boolean,\n): boolean {\n // Non-mergeable docs use hierarchical storage, so JSONPath always works\n if (!mergeable) {\n return false\n }\n\n // Walk the path segments against the schema to detect flattening boundaries\n let currentShape: ContainerOrValueShape | undefined\n\n for (const segment of segments) {\n if (segment.type === \"property\") {\n // First segment accesses a top-level shape\n if (currentShape === undefined) {\n currentShape = docShape.shapes[segment.key]\n } else if (currentShape._type === \"struct\") {\n // Entering a struct child in mergeable mode = flattening boundary\n return true\n } else if (currentShape._type === \"record\") {\n // Entering a record child in mergeable mode = flattening boundary\n return true\n } else {\n // Shouldn't happen for valid paths, but be safe\n return true\n }\n } else if (segment.type === \"each\" || segment.type === \"index\") {\n // Wildcards and indices on lists are fine - lists keep hierarchical structure\n if (\n currentShape?._type === \"list\" ||\n currentShape?._type === \"movableList\"\n ) {\n currentShape = currentShape.shape\n } else if (currentShape?._type === \"record\") {\n // Entering a record's values in mergeable mode = flattening boundary\n return true\n } else {\n // Invalid path structure\n return true\n }\n } else if (segment.type === \"key\") {\n // Specific key on a record in mergeable mode = flattening boundary\n if (currentShape?._type === \"record\") {\n return true\n }\n // Invalid path structure\n return true\n }\n }\n\n return false\n}\n\n/**\n * Subscribe to changes at a specific path within a TypedDoc.\n *\n * This function provides type-safe path-based subscriptions. The callback\n * receives the current value at the path whenever it changes.\n *\n * @param doc - The TypedDoc to subscribe to\n * @param selector - A function that selects the path using the path builder DSL\n * @param callback - Called with the new value when the path changes\n * @returns An unsubscribe function\n *\n * @example\n * ```typescript\n * // Subscribe to a specific config value\n * subscribeToPath(doc, p => p.config.theme, (theme) => {\n * console.log(\"Theme changed:\", theme)\n * })\n *\n * // Subscribe to all book titles (returns array)\n * subscribeToPath(doc, p => p.books.$each.title, (titles) => {\n * console.log(\"Titles:\", titles)\n * })\n * ```\n */\nexport function subscribeToPath<D extends DocShape, R>(\n doc: TypedDoc<D>,\n selector: (p: PathBuilder<D>) => PathSelector<R>,\n callback: (value: R) => void,\n): () => void {\n const extNs = (doc as any)[EXT_SYMBOL]\n if (!extNs || !(\"docShape\" in extNs)) {\n throw new Error(\"subscribeToPath requires a TypedDoc\")\n }\n\n const docShape = ext(doc).docShape as D\n const mergeable = ext(doc).mergeable\n const loroDoc = loro(doc) as LoroDoc\n\n // Create path builder and apply selector to get segments\n const pathBuilder = createPathBuilder(docShape)\n const pathSelector = selector(pathBuilder)\n const segments = pathSelector.__segments\n\n // Track previous value for deep equality comparison\n let previousValue: string | undefined\n\n // Helper to get current value and check if changed\n const getValueIfChanged = (): { value: R; changed: boolean } => {\n const value = evaluatePath(doc, pathSelector)\n const serialized = JSON.stringify(value)\n const changed = serialized !== previousValue\n if (changed) {\n previousValue = serialized\n }\n return { value, changed }\n }\n\n // Initialize previous value\n previousValue = JSON.stringify(evaluatePath(doc, pathSelector))\n\n // Determine subscription strategy\n const needsGlobalSubscription = requiresGlobalSubscription(\n segments,\n docShape,\n mergeable,\n )\n\n let subscription: Subscription\n\n if (needsGlobalSubscription) {\n // Use global subscription with manual filtering\n subscription = loroDoc.subscribe(() => {\n const { value, changed } = getValueIfChanged()\n if (changed) {\n callback(value)\n }\n })\n } else {\n // Use efficient JSONPath subscription\n const jsonPath = compileToJsonPath(segments)\n subscription = loroDoc.subscribeJsonpath(jsonPath, () => {\n const { value, changed } = getValueIfChanged()\n if (changed) {\n callback(value)\n }\n })\n }\n\n // Return unsubscribe function\n return () => {\n subscription()\n }\n}\n","import { LoroDoc, type PeerID, type Value } from \"loro-crdt\"\nimport { type ChangeOptions, serializeCommitMessage } from \"./change-options.js\"\nimport { derivePlaceholder } from \"./derive-placeholder.js\"\nimport type { DiffOverlay } from \"./diff-overlay.js\"\nimport { EXT_SYMBOL, type ExtDocRef } from \"./ext.js\"\nimport {\n type JsonPatch,\n JsonPatchApplicator,\n type JsonPatchOperation,\n normalizePath,\n} from \"./json-patch.js\"\nimport { LORO_SYMBOL } from \"./loro.js\"\nimport {\n hasMetadata,\n isLoroExtendedReservedKey,\n readMetadata,\n writeMetadata,\n} from \"./metadata.js\"\nimport { overlayPlaceholder } from \"./overlay.js\"\nimport { buildRootContainerName } from \"./path-encoding.js\"\nimport type {\n ContainerOrValueShape,\n ContainerShape,\n DocShape,\n RecordContainerShape,\n StructContainerShape,\n} from \"./shape.js\"\nimport { INTERNAL_SYMBOL } from \"./typed-refs/base.js\"\nimport { DocRef } from \"./typed-refs/doc-ref.js\"\nimport { serializeRefToJSON } from \"./typed-refs/utils.js\"\nimport type { Draft, Infer, InferPlaceholderType, Mutable } from \"./types.js\"\nimport { isValueShape } from \"./utils/type-guards.js\"\nimport { validatePlaceholder } from \"./validation.js\"\n\n/**\n * Reconstructs hierarchical structure from flattened root container storage.\n * Used when `mergeable: true` to convert the flat storage back to nested objects.\n *\n * @param flatValue - The raw flattened value from doc.toJSON()\n * @param shape - The document shape\n * @param pathPrefix - Current path prefix for looking up child containers\n * @returns Reconstructed hierarchical value\n */\nfunction reconstructFromFlattened(\n flatValue: Record<string, Value>,\n shape: ContainerShape,\n pathPrefix: string[],\n): Value {\n switch (shape._type) {\n case \"struct\": {\n const structShape = shape as StructContainerShape\n const result: Record<string, Value> = {}\n\n for (const [key, nestedShape] of Object.entries(structShape.shapes)) {\n if (isValueShape(nestedShape)) {\n // Value shapes are stored directly in the container\n const containerName = buildRootContainerName(pathPrefix)\n const container = flatValue[containerName] as Record<string, Value>\n if (container && key in container) {\n result[key] = container[key]\n }\n } else {\n // Container shapes are stored as separate root containers\n const childPath = [...pathPrefix, key]\n result[key] = reconstructFromFlattened(\n flatValue,\n nestedShape as ContainerShape,\n childPath,\n )\n }\n }\n\n return result\n }\n\n case \"record\": {\n const recordShape = shape as RecordContainerShape<ContainerOrValueShape>\n const containerName = buildRootContainerName(pathPrefix)\n const container = flatValue[containerName] as Record<string, Value>\n\n if (!container) {\n return {}\n }\n\n const result: Record<string, Value> = {}\n\n for (const key of Object.keys(container)) {\n const value = container[key]\n\n if (isValueShape(recordShape.shape)) {\n // Value shapes are stored directly\n result[key] = value\n } else if (value === null) {\n // null marker indicates a child container\n const childPath = [...pathPrefix, key]\n result[key] = reconstructFromFlattened(\n flatValue,\n recordShape.shape as ContainerShape,\n childPath,\n )\n } else {\n // Non-null value (shouldn't happen for container shapes, but handle gracefully)\n result[key] = value\n }\n }\n\n return result\n }\n\n case \"list\":\n case \"movableList\": {\n // Lists store their items directly in the root container\n // Return undefined if not materialized so overlay can apply placeholders\n const containerName = buildRootContainerName(pathPrefix)\n return flatValue[containerName]\n }\n\n case \"text\": {\n // Return undefined if not materialized so overlay can apply placeholders\n const containerName = buildRootContainerName(pathPrefix)\n return flatValue[containerName]\n }\n\n case \"counter\": {\n // Return undefined if not materialized so overlay can apply placeholders\n const containerName = buildRootContainerName(pathPrefix)\n return flatValue[containerName]\n }\n\n case \"tree\": {\n // Return undefined if not materialized so overlay can apply placeholders\n const containerName = buildRootContainerName(pathPrefix)\n return flatValue[containerName]\n }\n\n default:\n return {}\n }\n}\n\n/**\n * Reconstructs the full document hierarchy from flattened storage.\n * Excludes all `_loro_extended*` prefixed keys from the output.\n */\nfunction reconstructDocFromFlattened(\n flatValue: Record<string, Value>,\n docShape: DocShape,\n): Record<string, Value> {\n const result: Record<string, Value> = {}\n\n for (const [key, containerShape] of Object.entries(docShape.shapes)) {\n // Skip reserved keys (shouldn't be in schema, but be defensive)\n if (isLoroExtendedReservedKey(key)) {\n continue\n }\n result[key] = reconstructFromFlattened(flatValue, containerShape, [key])\n }\n\n return result\n}\n\n/**\n * Filters out reserved `_loro_extended*` keys from a raw CRDT value.\n */\nfunction filterReservedKeys(\n crdtValue: Record<string, Value>,\n): Record<string, Value> {\n const result: Record<string, Value> = {}\n for (const [key, value] of Object.entries(crdtValue)) {\n if (!isLoroExtendedReservedKey(key)) {\n result[key] = value\n }\n }\n return result\n}\n\n/**\n * Internal TypedDoc implementation (not directly exposed to users).\n * Users interact with the proxied version that provides direct schema access.\n */\nclass TypedDocInternal<Shape extends DocShape> {\n private shape: Shape\n private placeholder: InferPlaceholderType<Shape>\n private doc: LoroDoc\n private overlay?: DiffOverlay\n private _mergeable: boolean\n private _initialized: boolean\n private valueRef: DocRef<Shape> | null = null\n // Reference to the proxy for returning from change()\n proxy: TypedDoc<Shape> | null = null\n\n constructor(\n shape: Shape,\n doc: LoroDoc = new LoroDoc(),\n overlay?: DiffOverlay,\n schemaMergeable = false,\n skipInitialize = false,\n ) {\n this.shape = shape\n this.placeholder = derivePlaceholder(shape)\n this.doc = doc\n this.overlay = overlay\n\n // Determine effective mergeable setting with metadata integration\n // Priority: existing metadata > schema setting > false\n if (hasMetadata(doc)) {\n // Document has metadata - use it (metadata takes precedence over schema)\n const meta = readMetadata(doc)\n this._mergeable = meta.mergeable ?? false\n this._initialized = true\n } else {\n // No metadata - this is a new document or legacy document\n this._mergeable = schemaMergeable\n this._initialized = false\n\n // Auto-initialize unless skipInitialize is true\n if (!skipInitialize) {\n this.initialize()\n }\n }\n\n validatePlaceholder(this.placeholder, this.shape)\n }\n\n /**\n * Initialize the document by writing metadata.\n * This is called automatically unless `skipInitialize: true` was passed.\n * Call this manually if you skipped initialization and want to write metadata later.\n */\n initialize(): void {\n if (this._initialized) return\n writeMetadata(this.doc, { mergeable: this._mergeable })\n this._initialized = true\n }\n\n get initialized(): boolean {\n return this._initialized\n }\n\n get mergeable(): boolean {\n return this._mergeable\n }\n\n get value(): Mutable<Shape> {\n if (!this.valueRef) {\n this.valueRef = new DocRef({\n shape: this.shape,\n placeholder: this.placeholder,\n doc: this.doc,\n autoCommit: true,\n overlay: this.overlay,\n mergeable: this._mergeable,\n })\n }\n return this.valueRef as unknown as Mutable<Shape>\n }\n\n toJSON(): Infer<Shape> {\n if (this.overlay) {\n const refJson = serializeRefToJSON(\n this.value as unknown as Record<string, any>,\n Object.keys(this.shape.shapes),\n )\n\n return overlayPlaceholder(\n this.shape,\n refJson,\n this.placeholder as any,\n ) as Infer<Shape>\n }\n\n const crdtValue = this.doc.toJSON()\n\n // For mergeable docs, reconstruct hierarchy from flattened storage\n // For non-mergeable docs, just filter out reserved keys\n const hierarchicalValue = this._mergeable\n ? reconstructDocFromFlattened(crdtValue, this.shape)\n : filterReservedKeys(crdtValue)\n\n return overlayPlaceholder(\n this.shape,\n hierarchicalValue,\n this.placeholder as any,\n ) as Infer<Shape>\n }\n\n change(fn: (draft: Draft<Shape>) => void, options?: ChangeOptions): void {\n const draft = new DocRef({\n shape: this.shape,\n placeholder: this.placeholder,\n doc: this.doc,\n autoCommit: false,\n batchedMutation: true, // Enable value shape caching for find-and-mutate patterns\n overlay: this.overlay,\n mergeable: this._mergeable,\n })\n fn(draft as unknown as Draft<Shape>)\n draft[INTERNAL_SYMBOL].finalizeTransaction?.()\n\n // Set commit message if provided\n const serializedMessage = serializeCommitMessage(options?.commitMessage)\n if (serializedMessage) {\n this.doc.setNextCommitMessage(serializedMessage)\n }\n\n this.doc.commit()\n\n // Invalidate cached value ref since doc changed\n this.valueRef = null\n }\n\n applyPatch(patch: JsonPatch, pathPrefix?: (string | number)[]): void {\n this.change(draft => {\n const applicator = new JsonPatchApplicator(draft)\n\n const prefixedPatch = pathPrefix\n ? patch.map((op: JsonPatchOperation) => ({\n ...op,\n path: [...pathPrefix, ...normalizePath(op.path)],\n }))\n : patch\n\n applicator.applyPatch(prefixedPatch)\n })\n }\n\n get loroDoc(): LoroDoc {\n return this.doc\n }\n\n get docShape(): Shape {\n return this.shape\n }\n\n get rawValue(): unknown {\n // Filter out reserved keys from raw value\n return filterReservedKeys(this.doc.toJSON())\n }\n}\n\n/**\n * The proxied TypedDoc type that provides direct schema access.\n * Schema properties are accessed directly on the doc object.\n *\n * @example\n * ```typescript\n * const doc = createTypedDoc(schema);\n *\n * // Direct schema access\n * doc.count.increment(5);\n * doc.title.insert(0, \"Hello\");\n *\n * // Serialize to JSON (works on doc and all refs)\n * const snapshot = doc.toJSON();\n * const users = doc.users.toJSON();\n *\n * // Batched mutations via change()\n * doc.change(draft => {\n * draft.count.increment(10);\n * draft.title.update(\"World\");\n * });\n *\n * // Access native Loro types via loro()\n * import { loro } from \"@loro-extended/change\";\n * loro(doc); // returns LoroDoc directly\n * loro(doc).subscribe(callback);\n * ```\n */\n/**\n * Frontiers represent a specific version in the document's history.\n * Each frontier is an operation ID consisting of a peer ID and counter.\n */\nexport type Frontiers = { peer: PeerID; counter: number }[]\n\nexport type CreateTypedDocOptions = {\n doc?: LoroDoc\n overlay?: DiffOverlay\n /**\n * When true, all containers are stored at the document root with path-based names.\n * This ensures container IDs are deterministic and survive `applyDiff`, enabling\n * proper merging of concurrent container creation.\n *\n * Benefits:\n * - Concurrent container creation at the same schema path merges correctly\n * - Works correctly with `applyDiff` (e.g., Lens worldview → world propagation)\n * - Deterministic container IDs across peers\n *\n * Note: Lists of containers (`Shape.list(Shape.struct({...}))`) are unaffected\n * by this setting—they always use hierarchical storage with peer-dependent IDs.\n *\n * @default true\n */\n mergeable?: boolean\n /**\n * When true, skip automatic metadata initialization.\n * Use this when:\n * - Receiving a synced document (it already has metadata)\n * - You want to control when metadata is written (call `initialize()` later)\n * - Testing scenarios where you need an empty document\n *\n * @default false\n */\n skipInitialize?: boolean\n}\n\nexport type TypedDoc<Shape extends DocShape> = Mutable<Shape> & {\n /**\n * Returns the full plain JavaScript object representation of the document.\n * This is an O(N) operation that serializes the entire document.\n *\n * @example\n * ```typescript\n * const snapshot = doc.toJSON();\n * console.log(snapshot.count); // number\n * ```\n */\n toJSON(): Infer<Shape>\n\n /**\n * Internal symbol for change() detection.\n * Use `change(doc, fn, options?)` instead of accessing this directly.\n *\n * This property enables the `change()` function to work correctly even when\n * the TypedDoc type is \"flattened\" across module boundaries (e.g., in .d.ts files).\n * When TypeScript can't infer the Shape parameter from the TypedDoc<Shape> wrapper,\n * it falls back to the [EXT_SYMBOL] overload which extracts the draft type from\n * this change method signature.\n *\n * @internal\n */\n readonly [EXT_SYMBOL]: {\n change: (fn: (draft: Draft<Shape>) => void, options?: ChangeOptions) => void\n }\n}\n\n/**\n * Creates a new TypedDoc with the given schema.\n * Returns a proxied document where schema properties are accessed directly.\n *\n * @param shape - The document schema (with optional .placeholder() values)\n * @param options - Optional existing LoroDoc or diff overlay\n * @returns A proxied TypedDoc with direct schema access\n *\n * @example\n * ```typescript\n * const schema = Shape.doc({\n * title: Shape.text(),\n * count: Shape.counter(),\n * });\n *\n * const doc = createTypedDoc(schema);\n *\n * // Direct mutations (auto-commit)\n * doc.count.increment(5);\n * doc.title.insert(0, \"Hello\");\n *\n * // Batched mutations via change() functional helper\n * import { change } from \"@loro-extended/change\";\n * change(doc, draft => {\n * draft.count.increment(10);\n * draft.title.update(\"World\");\n * });\n *\n * // Get plain JSON\n * const snapshot = doc.toJSON();\n *\n * // Access native LoroDoc via loro()\n * import { loro } from \"@loro-extended/change\";\n * const loroDoc = loro(doc); // LoroDoc directly\n * loroDoc.frontiers();\n * loroDoc.subscribe(callback);\n * ```\n */\nexport function createTypedDoc<Shape extends DocShape>(\n shape: Shape,\n options: CreateTypedDocOptions = {},\n): TypedDoc<Shape> {\n // Determine effective mergeable setting: options > schema > true (default)\n // Note: Documents with existing metadata will use metadata.mergeable instead\n const effectiveMergeable = options.mergeable ?? shape.mergeable ?? true\n\n const internal = new TypedDocInternal(\n shape,\n options.doc || new LoroDoc(),\n options.overlay,\n effectiveMergeable,\n options.skipInitialize ?? false,\n )\n\n // Create the ext() namespace for this doc (loro-extended features)\n const extNamespace: ExtDocRef<Shape> = {\n fork(opts?: { preservePeerId?: boolean }): TypedDoc<Shape> {\n const forkedLoroDoc = internal.loroDoc.fork()\n if (opts?.preservePeerId) {\n forkedLoroDoc.setPeerId(internal.loroDoc.peerId)\n }\n return createTypedDoc(internal.docShape, {\n doc: forkedLoroDoc,\n mergeable: internal.mergeable,\n })\n },\n forkAt(frontiers: Frontiers): TypedDoc<Shape> {\n const forkedLoroDoc = internal.loroDoc.forkAt(frontiers)\n return createTypedDoc(internal.docShape, {\n doc: forkedLoroDoc,\n mergeable: internal.mergeable,\n })\n },\n shallowForkAt(\n frontiers: Frontiers,\n opts?: { preservePeerId?: boolean },\n ): TypedDoc<Shape> {\n // Export a shallow snapshot at the specified frontiers\n const shallowBytes = internal.loroDoc.export({\n mode: \"shallow-snapshot\",\n frontiers,\n })\n // Create a new LoroDoc from the shallow snapshot\n const shallowLoroDoc = LoroDoc.fromSnapshot(shallowBytes)\n // Optionally preserve the peer ID for consistent frontier progression\n if (opts?.preservePeerId) {\n shallowLoroDoc.setPeerId(internal.loroDoc.peerId)\n }\n return createTypedDoc(internal.docShape, {\n doc: shallowLoroDoc,\n mergeable: internal.mergeable,\n })\n },\n initialize(): void {\n internal.initialize()\n },\n applyPatch(patch: JsonPatch, pathPrefix?: (string | number)[]): void {\n internal.applyPatch(patch, pathPrefix)\n },\n get docShape(): Shape {\n return internal.docShape\n },\n get rawValue(): unknown {\n return internal.rawValue\n },\n get mergeable(): boolean {\n return internal.mergeable\n },\n change(\n fn: (draft: Draft<Shape>) => void,\n options?: ChangeOptions,\n ): TypedDoc<Shape> {\n internal.change(fn, options)\n return proxy\n },\n }\n\n // Create a proxy that delegates schema properties to the DocRef\n const proxy = new Proxy(internal.value as object, {\n get(target, prop, receiver) {\n // loro() access via well-known symbol - returns LoroDoc directly\n if (prop === LORO_SYMBOL) {\n return internal.loroDoc\n }\n\n // ext() access via well-known symbol - returns ExtDocRef\n if (prop === EXT_SYMBOL) {\n return extNamespace\n }\n\n // toJSON() should always read fresh from the CRDT\n if (prop === \"toJSON\") {\n return () => internal.toJSON()\n }\n\n // Delegate to the DocRef (which is the target)\n return Reflect.get(target, prop, receiver)\n },\n\n set(target, prop, value, receiver) {\n // Don't allow setting LORO_SYMBOL or EXT_SYMBOL\n if (prop === LORO_SYMBOL || prop === EXT_SYMBOL) {\n return false\n }\n\n // Delegate to the DocRef\n return Reflect.set(target, prop, value, receiver)\n },\n\n // Support 'in' operator\n has(target, prop) {\n if (prop === LORO_SYMBOL || prop === EXT_SYMBOL) return true\n return Reflect.has(target, prop)\n },\n\n // Support Object.keys() - filter out Symbol properties to allow proxies to be used\n // in place of plain objects. This prevents React's \"Object keys must be strings\" error.\n ownKeys(target) {\n return Reflect.ownKeys(target).filter(key => typeof key === \"string\")\n },\n\n getOwnPropertyDescriptor(target, prop) {\n if (prop === LORO_SYMBOL) {\n return {\n configurable: true,\n enumerable: false,\n value: internal.loroDoc,\n }\n }\n if (prop === EXT_SYMBOL) {\n return {\n configurable: true,\n enumerable: false,\n value: extNamespace,\n }\n }\n return Reflect.getOwnPropertyDescriptor(target, prop)\n },\n }) as TypedDoc<Shape>\n\n // Store reference to proxy for returning from change()\n internal.proxy = proxy\n\n return proxy\n}\n","/**\n * Symbols used by PlainValueRef for internal property access.\n * These symbols allow storing metadata on PlainValueRef objects\n * without conflicting with user data properties.\n *\n * @module plain-value-ref/symbols\n */\n\n/**\n * Symbol to identify PlainValueRef objects.\n * Used by isPlainValueRef() type guard.\n */\nexport const PLAIN_VALUE_REF_SYMBOL = Symbol.for(\n \"loro-extended:plain-value-ref\",\n)\n\n/**\n * Symbol to store the parent ref's internals.\n * This allows PlainValueRef to read/write through the parent container.\n */\nexport const PARENT_INTERNALS_SYMBOL = Symbol.for(\n \"loro-extended:parent-internals\",\n)\n\n/**\n * Symbol to store the path from the parent container to this value.\n * Path is relative to the parent's LoroMap, e.g., [\"nested\", \"value\"].\n */\nexport const PATH_SYMBOL = Symbol.for(\"loro-extended:path\")\n\n/**\n * Symbol to store the value shape for this PlainValueRef.\n * Used for nested struct value shapes to enable property access.\n */\nexport const SHAPE_SYMBOL = Symbol.for(\"loro-extended:shape\")\n","/**\n * Pure path operations for traversing and modifying nested objects.\n * These are functional core utilities with no side effects.\n *\n * @module path-ops\n */\n\n/**\n * Get a value at a nested path. Pure function.\n *\n * @param obj - The object to traverse\n * @param path - Array of string keys representing the path\n * @returns The value at the path, or undefined if not found\n *\n * @example\n * ```typescript\n * getAtPath({ a: { b: { c: 1 } } }, [\"a\", \"b\", \"c\"]) // => 1\n * getAtPath({ a: 1 }, [\"b\"]) // => undefined\n * ```\n */\nexport function getAtPath(obj: unknown, path: string[]): unknown {\n let current = obj\n for (const key of path) {\n if (current == null) return undefined\n current = (current as Record<string, unknown>)[key]\n }\n return current\n}\n\n/**\n * Set a value at a nested path, returning a new object. Pure function.\n * Creates intermediate objects as needed. Does not mutate the original.\n *\n * @param obj - The object to update (will not be mutated)\n * @param path - Array of string keys representing the path\n * @param value - The value to set at the path\n * @returns A new object with the value set at the path\n *\n * @example\n * ```typescript\n * setAtPath({ a: 1 }, [\"a\"], 2) // => { a: 2 }\n * setAtPath({}, [\"a\", \"b\", \"c\"], 1) // => { a: { b: { c: 1 } } }\n * ```\n */\nexport function setAtPath(\n obj: unknown,\n path: string[],\n value: unknown,\n): unknown {\n if (path.length === 0) return value\n\n const cloned = deepClone(obj) ?? {}\n let target = cloned as Record<string, unknown>\n\n for (let i = 0; i < path.length - 1; i++) {\n const key = path[i]\n if (target[key] == null || typeof target[key] !== \"object\") {\n target[key] = {}\n }\n target = target[key] as Record<string, unknown>\n }\n\n target[path[path.length - 1]] = value\n return cloned\n}\n\n/**\n * Apply a transform function at a nested path, returning a new object.\n * Uses structural sharing for efficiency. Pure function.\n *\n * @param obj - The object to transform (will not be mutated)\n * @param path - Array of string keys representing the path to the transform target\n * @param transform - Function to apply at the target path\n * @returns A new object with the transform applied at the path\n *\n * @example\n * ```typescript\n * // Update a value\n * transformAtPath({ a: { b: 1 } }, [\"a\", \"b\"], x => x + 1) // => { a: { b: 2 } }\n *\n * // Delete a key\n * transformAtPath({ a: { b: 1, c: 2 } }, [\"a\"], obj => {\n * const { b, ...rest } = obj\n * return rest\n * }) // => { a: { c: 2 } }\n *\n * // Transform at root\n * transformAtPath({ x: 1 }, [], obj => ({ ...obj, y: 2 })) // => { x: 1, y: 2 }\n * ```\n */\nexport function transformAtPath<T extends Record<string, unknown>>(\n obj: T,\n path: string[],\n transform: (target: Record<string, unknown>) => Record<string, unknown>,\n): T {\n if (path.length === 0) {\n return transform(obj) as T\n }\n\n const [head, ...tail] = path\n const child = (obj[head] as Record<string, unknown>) ?? {}\n return {\n ...obj,\n [head]: transformAtPath(child, tail, transform),\n } as T\n}\n\n/**\n * Deep clone an object. Pure function.\n * Uses JSON serialization for simplicity and correctness.\n *\n * @param obj - The object to clone\n * @returns A deep copy of the object\n *\n * @example\n * ```typescript\n * const original = { a: { b: [1, 2, 3] } }\n * const cloned = deepClone(original)\n * cloned.a.b.push(4)\n * original.a.b // => [1, 2, 3] (unchanged)\n * ```\n */\nexport function deepClone<T>(obj: T): T {\n if (obj === null || typeof obj !== \"object\") return obj\n return JSON.parse(JSON.stringify(obj))\n}\n","/**\n * Value reader functions for PlainValueRef.\n * These functions read values from the Loro container with overlay and placeholder fallback.\n *\n * @module plain-value-ref/value-reader\n */\n\nimport type { LoroList, LoroMap, LoroMovableList, MapDiff } from \"loro-crdt\"\nimport type { BaseRefInternals } from \"../typed-refs/base.js\"\nimport { getAtPath } from \"../utils/path-ops.js\"\n\n/**\n * Get a value from the diff overlay (if present).\n * Used for \"before\" views in getTransition().\n *\n * @param internals - The parent ref's internals\n * @param path - Path from the parent container to the value\n * @returns The value from the overlay, or undefined if not in overlay\n */\nexport function getOverlayValue(\n internals: BaseRefInternals<any>,\n path: string[],\n): unknown | undefined {\n const overlay = internals.getOverlay()\n if (!overlay) return undefined\n\n const container = internals.getContainer() as LoroMap\n const containerId = (container as any).id\n const diff = overlay.get(containerId)\n\n if (diff?.type !== \"map\") return undefined\n const mapDiff = diff as MapDiff\n\n // Check if the root key of the path was updated in the overlay\n if (!(path[0] in mapDiff.updated)) return undefined\n\n // Get the updated value and traverse the rest of the path\n return getAtPath(mapDiff.updated[path[0]], path.slice(1))\n}\n\n/**\n * Get a value from the Loro container.\n *\n * @param internals - The parent ref's internals\n * @param path - Path from the parent container to the value\n * @returns The value from the container, or undefined if not present\n */\nexport function getContainerValue(\n internals: BaseRefInternals<any>,\n path: string[],\n): unknown | undefined {\n const container = internals.getContainer() as LoroMap\n const rootValue = container.get(path[0])\n if (rootValue === undefined) return undefined\n return getAtPath(rootValue, path.slice(1))\n}\n\n/**\n * Get a value from the placeholder (default value).\n *\n * @param internals - The parent ref's internals\n * @param path - Path from the parent container to the value\n * @returns The value from the placeholder, or undefined if not present\n */\nexport function getPlaceholderValue(\n internals: BaseRefInternals<any>,\n path: string[],\n): unknown | undefined {\n const placeholder = internals.getPlaceholder() as\n | Record<string, unknown>\n | undefined\n if (!placeholder) return undefined\n return getAtPath(placeholder[path[0]], path.slice(1))\n}\n\n/**\n * Resolve a value using the fallback chain: overlay → container → placeholder.\n * This is the main entry point for reading values through PlainValueRef.\n *\n * @param internals - The parent ref's internals\n * @param path - Path from the parent container to the value\n * @returns The resolved value, or undefined if not found anywhere\n */\nexport function resolveValue<T>(\n internals: BaseRefInternals<any>,\n path: string[],\n): T | undefined {\n // Use explicit undefined checks instead of ?? to correctly handle null values.\n // The ?? operator treats null as nullish, which would skip a deliberately-stored\n // null in the container and fall through to the placeholder.\n const overlay = getOverlayValue(internals, path)\n if (overlay !== undefined) return overlay as T\n const container = getContainerValue(internals, path)\n if (container !== undefined) return container as T\n return getPlaceholderValue(internals, path) as T | undefined\n}\n\n// ============================================================================\n// List-specific value reading functions\n// ============================================================================\n\n/**\n * Get a value from the diff overlay for a list item.\n * Used for \"before\" views in getTransition().\n *\n * The internals parameter is expected to be a ListRefBaseInternals which has\n * a getOverlayList() method that caches the reconstructed \"before\" list.\n *\n * @param internals - The list ref's internals (must have getOverlayList method)\n * @param index - The list index\n * @returns The value from the overlay, or undefined if not in overlay\n */\nexport function getListOverlayValue(\n internals: BaseRefInternals<any>,\n index: number,\n): unknown | undefined {\n const overlay = internals.getOverlay()\n if (!overlay) return undefined\n\n // Check if internals has getOverlayList method (ListRefBaseInternals)\n // This method caches the reconstructed \"before\" list using applyListDelta\n if (\n \"getOverlayList\" in internals &&\n typeof (internals as any).getOverlayList === \"function\"\n ) {\n const overlayList = (internals as any).getOverlayList() as\n | unknown[]\n | undefined\n if (overlayList) {\n return overlayList[index]\n }\n }\n\n // Fallback: no overlay list available\n return undefined\n}\n\n/**\n * Get a value from a Loro list container.\n *\n * @param internals - The list ref's internals\n * @param index - The list index\n * @returns The value from the container, or undefined if not present\n */\nexport function getListContainerValue(\n internals: BaseRefInternals<any>,\n index: number,\n): unknown | undefined {\n const container = internals.getContainer() as LoroList | LoroMovableList\n return container.get(index)\n}\n\n/**\n * Resolve a list item value using the fallback chain: overlay → container.\n * Note: List items don't have placeholders in the same way as struct properties.\n *\n * @param internals - The list ref's internals\n * @param index - The list index\n * @returns The resolved value, or undefined if not found\n */\nexport function resolveListValue<T>(\n internals: BaseRefInternals<any>,\n index: number,\n): T | undefined {\n // Use explicit undefined checks instead of ?? to correctly handle null values.\n // The ?? operator treats null as nullish, which would skip a deliberately-stored\n // null in the overlay and fall through to the container value.\n const overlay = getListOverlayValue(internals, index)\n if (overlay !== undefined) return overlay as T\n return getListContainerValue(internals, index) as T | undefined\n}\n","/**\n * Value writer functions for PlainValueRef.\n * These functions write values to the Loro container through the parent ref.\n *\n * @module plain-value-ref/value-writer\n */\n\nimport type { LoroList, LoroMap, LoroMovableList } from \"loro-crdt\"\nimport type { BaseRefInternals } from \"../typed-refs/base.js\"\nimport { setAtPath } from \"../utils/path-ops.js\"\n\n/**\n * Write a value to the Loro container through the parent ref's internals.\n * This performs an eager read-modify-write for nested paths.\n *\n * For single-segment paths (e.g., [\"title\"]), it sets the value directly.\n * For multi-segment paths (e.g., [\"nested\", \"value\"]), it:\n * 1. Reads the current root value\n * 2. Creates a new object with the nested value updated\n * 3. Writes the entire root value back\n *\n * This eager write-back pattern ensures nested mutations are immediately\n * persisted to Loro without requiring deferred batch processing.\n *\n * @param internals - The parent ref's internals\n * @param path - Path from the parent container to the value\n * @param value - The value to write\n */\nexport function writeValue(\n internals: BaseRefInternals<any>,\n path: string[],\n value: unknown,\n): void {\n const container = internals.getContainer() as LoroMap\n\n if (path.length === 1) {\n // Simple case: direct property on the parent container\n container.set(path[0], value)\n } else {\n // Nested case: read-modify-write the root property\n const rootKey = path[0]\n const current = container.get(rootKey) ?? {}\n const updated = setAtPath(current, path.slice(1), value)\n container.set(rootKey, updated)\n }\n\n internals.commitIfAuto()\n}\n\n// ============================================================================\n// List-specific value writing functions\n// ============================================================================\n\n/**\n * Write a value to a Loro list container at a specific index.\n * This performs an immediate write operation on the list.\n *\n * For LoroMovableList, uses the `.set()` method directly.\n * For LoroList, uses delete+insert since LoroList doesn't have `.set()`.\n *\n * @param internals - The list ref's internals\n * @param index - The list index to write to\n * @param value - The value to write\n */\nexport function writeListValue(\n internals: BaseRefInternals<any>,\n index: number,\n value: unknown,\n): void {\n const container = internals.getContainer() as LoroList | LoroMovableList\n\n // Check if container has .set() method (LoroMovableList has it, LoroList doesn't)\n if (\n \"set\" in container &&\n typeof (container as LoroMovableList).set === \"function\"\n ) {\n // LoroMovableList: use .set() directly\n ;(container as LoroMovableList).set(index, value)\n } else {\n // LoroList: use delete+insert since it doesn't have .set()\n ;(container as LoroList).delete(index, 1)\n ;(container as LoroList).insert(index, value)\n }\n\n internals.commitIfAuto()\n}\n\n/**\n * Write a value to a nested path within a list item, using read-modify-write.\n *\n * This is needed when mutating a property inside a list item (e.g., `item.active.set(true)`\n * where `item` is at list index 0 and `active` is a nested path within the item).\n *\n * The operation:\n * 1. Reads the current item at the given index\n * 2. Updates the value at the nested path within the item\n * 3. Writes the entire modified item back to the list\n *\n * @param internals - The list ref's internals\n * @param index - The list index of the item\n * @param nestedPath - Path within the item to the value (e.g., [\"active\"] or [\"metadata\", \"published\"])\n * @param value - The value to write at the nested path\n */\nexport function writeListValueAtPath(\n internals: BaseRefInternals<any>,\n index: number,\n nestedPath: string[],\n value: unknown,\n): void {\n const container = internals.getContainer() as LoroList | LoroMovableList\n const current = container.get(index) ?? {}\n const updated = setAtPath(current, nestedPath, value)\n writeListValue(internals, index, updated)\n}\n","/**\n * Factory functions for creating PlainValueRef objects.\n * These functions assemble PlainValueRef with proper Proxy handling for nested structs and records.\n *\n * @module plain-value-ref/factory\n */\n\nimport type {\n AnyValueShape,\n RecordValueShape,\n StructValueShape,\n ValueShape,\n} from \"../shape.js\"\nimport type { BaseRefInternals } from \"../typed-refs/base.js\"\n\nimport {\n PARENT_INTERNALS_SYMBOL,\n PATH_SYMBOL,\n PLAIN_VALUE_REF_SYMBOL,\n SHAPE_SYMBOL,\n} from \"./symbols.js\"\nimport type { PlainValueRef } from \"./types.js\"\nimport { resolveListValue, resolveValue } from \"./value-reader.js\"\nimport {\n writeListValue,\n writeListValueAtPath,\n writeValue,\n} from \"./value-writer.js\"\n\n/**\n * Symbol to store the list index for list item PlainValueRefs.\n * This is used instead of PATH_SYMBOL for list items.\n */\nexport const LIST_INDEX_SYMBOL = Symbol.for(\"loro-extended:list-index\")\n\n/**\n * Synthetic shape used for nested generic object proxies (union/any).\n * These proxies don't have a real shape to recurse into, so we use this constant.\n */\nconst SYNTHETIC_ANY_SHAPE = {\n _type: \"value\",\n valueType: \"any\",\n} as AnyValueShape\n\n// ============================================================================\n// Proxy Boilerplate Helpers\n// ============================================================================\n\n/**\n * Result type for proxyGetPreamble.\n * - `handled: true` means the preamble handled the property access (return `value`)\n * - `handled: false` means the caller should handle the string property `prop`\n */\ntype PreambleResult =\n | { handled: true; value: unknown }\n | { handled: false; prop: string }\n\n/**\n * GET preamble shared by all proxy handlers.\n * Handles symbol properties and existing properties on the target.\n *\n * @param target - The proxy target\n * @param prop - The property being accessed\n * @param receiver - The proxy receiver\n * @returns PreambleResult indicating whether the access was handled\n */\nfunction proxyGetPreamble(\n target: object,\n prop: string | symbol,\n receiver: unknown,\n): PreambleResult {\n if (typeof prop === \"symbol\" || prop in target) {\n return { handled: true, value: Reflect.get(target, prop, receiver) }\n }\n if (typeof prop === \"string\") {\n return { handled: false, prop }\n }\n return { handled: true, value: undefined }\n}\n\n/**\n * Runtime primitive check for nested values.\n * Returns true if the value is a primitive (should be returned raw, not wrapped).\n * This enables boolean logic like `!draft.completed` and `if (item.active)`.\n *\n * @param value - The nested value to check\n * @returns true if the value is a primitive or null\n */\nfunction runtimePrimitiveCheck(value: unknown): boolean {\n return value === null || typeof value !== \"object\"\n}\n\n/**\n * Build the base PlainValueRef object with all required symbols and methods.\n * This is the shared foundation for all PlainValueRef instances.\n *\n * @param getValue - Function to retrieve the current value\n * @param internals - The parent ref's internals\n * @param path - Path from the parent container to this value\n * @param shape - The value shape for this value\n * @param listIndex - Optional list index for list item PlainValueRefs\n * @returns A base PlainValueRef object (not yet proxied)\n */\nfunction buildBasePlainValueRef<T>(\n getValue: () => T,\n internals: BaseRefInternals<any>,\n path: string[],\n shape: ValueShape,\n listIndex?: number,\n listNestedPath?: string[],\n): PlainValueRef<T> {\n // Cast needed because nested properties (for object types) are provided\n // by the Proxy at runtime, not by this base object literal.\n const base = {\n [PLAIN_VALUE_REF_SYMBOL]: true as const,\n [PARENT_INTERNALS_SYMBOL]: internals,\n [PATH_SYMBOL]: path,\n [SHAPE_SYMBOL]: shape,\n valueOf: getValue,\n toString: () => String(getValue()),\n toJSON: getValue,\n [Symbol.toPrimitive](hint: string): T | string | number {\n const v = getValue()\n if (hint === \"string\") return String(v)\n if (hint === \"number\") return Number(v)\n return v\n },\n get: getValue,\n set(value: T): void {\n if (listIndex !== undefined) {\n if (listNestedPath && listNestedPath.length > 0) {\n // Nested list item property: read-modify-write\n writeListValueAtPath(internals, listIndex, listNestedPath, value)\n } else {\n // Top-level list item: replace the whole value\n writeListValue(internals, listIndex, value)\n }\n } else {\n // Struct/record property: write through the path\n writeValue(internals, path, value)\n }\n },\n } as PlainValueRef<T>\n\n // Store the numeric index for list-specific operations\n if (listIndex !== undefined) {\n ;(base as any)[LIST_INDEX_SYMBOL] = listIndex\n }\n\n return base\n}\n\n/**\n * Create a PlainValueRef for a value at a given path within a parent container.\n *\n * For struct value shapes, the returned object is wrapped in a Proxy to enable\n * nested property access (e.g., `ref.nested.deep.inner`).\n *\n * @param internals - The parent ref's internals (provides access to container, overlay, placeholder)\n * @param path - Path from the parent container to this value\n * @param shape - The value shape for this value\n * @returns A PlainValueRef that reads/writes through the parent container\n */\nexport function createPlainValueRef<T>(\n internals: BaseRefInternals<any>,\n path: string[],\n shape: ValueShape,\n): PlainValueRef<T> {\n const getValue = (): T => resolveValue<T>(internals, path) as T\n const base = buildBasePlainValueRef(getValue, internals, path, shape)\n\n // For nested struct value shapes, wrap in Proxy to enable property access\n if (shape.valueType === \"struct\" && \"shape\" in shape) {\n return createStructProxy(base, internals, path, shape as StructValueShape)\n }\n\n // For record value shapes, wrap in Proxy to enable dynamic property access\n if (shape.valueType === \"record\" && \"shape\" in shape) {\n return createRecordProxy(base, internals, path, shape as RecordValueShape)\n }\n\n // For union and any shapes containing objects, wrap in a generic object proxy\n // that enables nested property access via read-modify-write\n if (shape.valueType === \"union\" || shape.valueType === \"any\") {\n const currentValue = getValue()\n if (currentValue !== null && typeof currentValue === \"object\") {\n return createGenericObjectProxy(base, internals, path)\n }\n }\n\n return base\n}\n\n/**\n * Create a Proxy wrapper for struct value shapes that enables nested property access.\n *\n * The Proxy intercepts:\n * - GET: Returns PlainValueRef for nested properties defined in the shape\n *\n * Note: SET is not supported. Use .set() on the nested PlainValueRef instead.\n *\n * @param base - The base PlainValueRef object\n * @param internals - The parent ref's internals\n * @param path - Current path to this struct\n * @param shape - The struct value shape with nested property definitions\n * @returns A Proxy-wrapped PlainValueRef\n */\nfunction createStructProxy<T>(\n base: PlainValueRef<T>,\n internals: BaseRefInternals<any>,\n path: string[],\n shape: StructValueShape,\n): PlainValueRef<T> {\n return new Proxy(base, {\n get(target, prop, receiver) {\n const preamble = proxyGetPreamble(target, prop, receiver)\n if (preamble.handled) return preamble.value\n\n if (preamble.prop in shape.shape) {\n return createPlainValueRef(\n internals,\n [...path, preamble.prop],\n shape.shape[preamble.prop],\n )\n }\n return undefined\n },\n }) as PlainValueRef<T>\n}\n\n/**\n * Create a Proxy wrapper for union/any value shapes containing objects.\n * Unlike struct proxies (which have a defined shape), this proxy allows\n * dynamic property access based on the actual runtime value structure.\n *\n * Note: SET is not supported. Use .set() on the PlainValueRef instead.\n *\n * @param base - The base PlainValueRef object\n * @param internals - The parent ref's internals\n * @param path - Current path to this value\n * @returns A Proxy-wrapped PlainValueRef\n */\nfunction createGenericObjectProxy<T>(\n base: PlainValueRef<T>,\n internals: BaseRefInternals<any>,\n path: string[],\n): PlainValueRef<T> {\n return new Proxy(base, {\n get(target, prop, receiver) {\n const preamble = proxyGetPreamble(target, prop, receiver)\n if (preamble.handled) return preamble.value\n\n const currentValue = target.valueOf() as Record<string, unknown>\n if (\n currentValue &&\n typeof currentValue === \"object\" &&\n preamble.prop in currentValue\n ) {\n // Special case: array .length returns raw number for ergonomics\n // This is a known property of arrays and shouldn't require .get()\n if (Array.isArray(currentValue) && preamble.prop === \"length\") {\n return currentValue.length\n }\n\n const propValue = currentValue[preamble.prop]\n if (propValue === undefined) return undefined\n return createNestedGenericObjectProxy(\n internals,\n path,\n [preamble.prop],\n propValue,\n )\n }\n return undefined\n },\n }) as PlainValueRef<T>\n}\n\n/**\n * Create a nested proxy for deep property access within union/any shapes.\n */\nfunction createNestedGenericObjectProxy<T>(\n internals: BaseRefInternals<any>,\n rootPath: string[],\n nestedPath: string[],\n currentValue: unknown,\n): PlainValueRef<T> {\n const getValue = (): T => {\n const rootValue = resolveValue<Record<string, unknown>>(internals, rootPath)\n if (rootValue === null || typeof rootValue !== \"object\") {\n return undefined as T\n }\n // Navigate to the nested value\n let current: unknown = rootValue\n for (const key of nestedPath) {\n if (current === null || typeof current !== \"object\") {\n return undefined as T\n }\n current = (current as Record<string, unknown>)[key]\n }\n return current as T\n }\n\n const base = buildBasePlainValueRef(\n getValue,\n internals,\n [...rootPath, ...nestedPath],\n SYNTHETIC_ANY_SHAPE,\n )\n\n // If the current value is an object, wrap in proxy for further nesting\n if (!runtimePrimitiveCheck(currentValue)) {\n return new Proxy(base, {\n get(target, prop, receiver) {\n const preamble = proxyGetPreamble(target, prop, receiver)\n if (preamble.handled) return preamble.value\n\n const val = target.valueOf() as Record<string, unknown>\n if (val && typeof val === \"object\" && preamble.prop in val) {\n // Special case: array .length returns raw number for ergonomics\n // This is a known property of arrays and shouldn't require .get()\n if (Array.isArray(val) && preamble.prop === \"length\") {\n return val.length\n }\n\n const propValue = val[preamble.prop]\n if (propValue === undefined) return undefined\n return createNestedGenericObjectProxy(\n internals,\n rootPath,\n [...nestedPath, preamble.prop],\n propValue,\n )\n }\n return undefined\n },\n }) as PlainValueRef<T>\n }\n\n return base\n}\n\n/**\n * Create a Proxy wrapper for record value shapes that enables dynamic property access.\n *\n * Unlike struct value shapes with fixed keys, record value shapes have dynamic keys.\n * The Proxy intercepts:\n * - GET: Returns the value at that key from the current record value\n *\n * Note: SET is not supported. Use .set() on the PlainValueRef instead.\n *\n * @param base - The base PlainValueRef object\n * @param internals - The parent ref's internals\n * @param path - Current path to this record\n * @param shape - The record value shape\n * @returns A Proxy-wrapped PlainValueRef\n */\nfunction createRecordProxy<T>(\n base: PlainValueRef<T>,\n internals: BaseRefInternals<any>,\n path: string[],\n shape: RecordValueShape,\n): PlainValueRef<T> {\n return new Proxy(base, {\n get(target, prop, receiver) {\n const preamble = proxyGetPreamble(target, prop, receiver)\n if (preamble.handled) return preamble.value\n\n // Always create a PlainValueRef for any key access when shape.shape is defined.\n // This enables .set() on both existing and new keys via read-modify-write.\n if (shape.shape) {\n return createPlainValueRef(\n internals,\n [...path, preamble.prop],\n shape.shape,\n )\n }\n\n // Fallback for untyped records: return the raw value\n const currentValue = target.valueOf() as Record<string, unknown>\n if (currentValue && typeof currentValue === \"object\") {\n return currentValue[preamble.prop]\n }\n return undefined\n },\n }) as PlainValueRef<T>\n}\n\n// ============================================================================\n// List Item PlainValueRef Factory\n// ============================================================================\n\n/**\n * Create a PlainValueRef for a list item at a given index.\n *\n * Unlike struct/record PlainValueRefs which use string paths, list item refs\n * use a numeric index and read/write directly from the list container.\n *\n * @param internals - The list ref's internals\n * @param index - The list index\n * @param shape - The value shape for the list items\n * @returns A PlainValueRef that reads/writes through the list container\n */\nexport function createListItemPlainValueRef<T>(\n internals: BaseRefInternals<any>,\n index: number,\n shape: ValueShape,\n): PlainValueRef<T> {\n const getValue = (): T => resolveListValue<T>(internals, index) as T\n const base = buildBasePlainValueRef(\n getValue,\n internals,\n [String(index)], // Store index as path for compatibility\n shape,\n index, // Pass list index\n )\n\n // For nested struct value shapes, wrap in Proxy to enable property access\n if (shape.valueType === \"struct\" && \"shape\" in shape) {\n return createListItemStructProxy(\n base,\n internals,\n index,\n shape as StructValueShape,\n )\n }\n\n // For record value shapes, wrap in Proxy to enable dynamic property access\n if (shape.valueType === \"record\" && \"shape\" in shape) {\n return createListItemRecordProxy(\n base,\n internals,\n index,\n shape as RecordValueShape,\n )\n }\n\n return base\n}\n\n/**\n * Create a Proxy wrapper for struct value shapes in list items.\n * Enables nested property access on list items with struct value shapes.\n *\n * @param base - The base PlainValueRef object\n * @param internals - The list ref's internals\n * @param index - The list index\n * @param shape - The struct value shape\n * @returns A Proxy-wrapped PlainValueRef\n */\nfunction createListItemStructProxy<T>(\n base: PlainValueRef<T>,\n internals: BaseRefInternals<any>,\n index: number,\n shape: StructValueShape,\n): PlainValueRef<T> {\n return new Proxy(base, {\n get(target, prop, receiver) {\n const preamble = proxyGetPreamble(target, prop, receiver)\n if (preamble.handled) return preamble.value\n\n if (preamble.prop in shape.shape) {\n const nestedShape = shape.shape[preamble.prop]\n\n // Always return PlainValueRef for nested properties (consistent with createStructProxy).\n // This ensures .set() is available on all nested properties, including primitives.\n return createListItemNestedPlainValueRef(\n internals,\n index,\n [preamble.prop],\n nestedShape,\n )\n }\n return undefined\n },\n }) as PlainValueRef<T>\n}\n\n/**\n * Create a Proxy wrapper for record value shapes in list items.\n * Enables dynamic property access on list items with record value shapes.\n *\n * @param base - The base PlainValueRef object\n * @param internals - The list ref's internals\n * @param index - The list index\n * @param shape - The record value shape\n * @returns A Proxy-wrapped PlainValueRef\n */\nfunction createListItemRecordProxy<T>(\n base: PlainValueRef<T>,\n internals: BaseRefInternals<any>,\n index: number,\n shape: RecordValueShape,\n): PlainValueRef<T> {\n return new Proxy(base, {\n get(target, prop, receiver) {\n const preamble = proxyGetPreamble(target, prop, receiver)\n if (preamble.handled) return preamble.value\n\n const currentValue = target.valueOf() as Record<string, unknown>\n if (currentValue && typeof currentValue === \"object\") {\n const propValue = currentValue[preamble.prop]\n if (propValue === undefined) return undefined\n // Always return PlainValueRef for record values so .set() is available\n if (shape.shape) {\n return createListItemNestedPlainValueRef(\n internals,\n index,\n [preamble.prop],\n shape.shape,\n )\n }\n if (runtimePrimitiveCheck(propValue)) return propValue\n return propValue\n }\n return undefined\n },\n }) as PlainValueRef<T>\n}\n\n/**\n * Create a nested PlainValueRef for a property within a list item.\n * This enables deep nested mutation tracking like `list[0].metadata.author = \"Alice\"`.\n *\n * @param internals - The list ref's internals\n * @param index - The list index\n * @param nestedPath - Path from the list item root to this nested value\n * @param shape - The value shape for this nested value\n * @returns A PlainValueRef that reads/writes through the list item\n */\nfunction createListItemNestedPlainValueRef<T>(\n internals: BaseRefInternals<any>,\n index: number,\n nestedPath: string[],\n shape: ValueShape,\n): PlainValueRef<T> {\n const getValue = (): T => {\n const itemValue = resolveListValue<Record<string, unknown>>(\n internals,\n index,\n )\n if (itemValue === null || typeof itemValue !== \"object\") {\n return undefined as T\n }\n // Navigate to the nested value\n let current: unknown = itemValue\n for (const key of nestedPath) {\n if (current === null || typeof current !== \"object\") {\n return undefined as T\n }\n current = (current as Record<string, unknown>)[key]\n }\n return current as T\n }\n\n const base = buildBasePlainValueRef(\n getValue,\n internals,\n [String(index), ...nestedPath],\n shape,\n index, // Pass list index\n nestedPath, // Pass nested path for read-modify-write in .set()\n )\n\n // For nested struct value shapes, wrap in Proxy to enable deeper property access\n if (shape.valueType === \"struct\" && \"shape\" in shape) {\n return createListItemNestedStructProxy(\n base,\n internals,\n index,\n nestedPath,\n shape as StructValueShape,\n )\n }\n\n // For nested record value shapes, wrap in Proxy to enable dynamic property access\n if (shape.valueType === \"record\" && \"shape\" in shape) {\n return createListItemNestedRecordProxy(\n base,\n internals,\n index,\n nestedPath,\n shape as RecordValueShape,\n )\n }\n\n return base\n}\n\n/**\n * Create a Proxy for nested struct within a list item.\n */\nfunction createListItemNestedStructProxy<T>(\n base: PlainValueRef<T>,\n internals: BaseRefInternals<any>,\n index: number,\n nestedPath: string[],\n shape: StructValueShape,\n): PlainValueRef<T> {\n return new Proxy(base, {\n get(target, prop, receiver) {\n const preamble = proxyGetPreamble(target, prop, receiver)\n if (preamble.handled) return preamble.value\n\n if (preamble.prop in shape.shape) {\n // Always return PlainValueRef for nested properties (consistent with createStructProxy).\n return createListItemNestedPlainValueRef(\n internals,\n index,\n [...nestedPath, preamble.prop],\n shape.shape[preamble.prop],\n )\n }\n return undefined\n },\n }) as PlainValueRef<T>\n}\n\n/**\n * Create a Proxy for nested record within a list item.\n */\nfunction createListItemNestedRecordProxy<T>(\n base: PlainValueRef<T>,\n internals: BaseRefInternals<any>,\n index: number,\n nestedPath: string[],\n shape: RecordValueShape,\n): PlainValueRef<T> {\n return new Proxy(base, {\n get(target, prop, receiver) {\n const preamble = proxyGetPreamble(target, prop, receiver)\n if (preamble.handled) return preamble.value\n\n const currentValue = target.valueOf() as Record<string, unknown>\n if (currentValue && typeof currentValue === \"object\") {\n const propValue = currentValue[preamble.prop]\n if (propValue === undefined) return undefined\n // Always return PlainValueRef for record values so .set() is available\n if (shape.shape) {\n return createListItemNestedPlainValueRef(\n internals,\n index,\n [...nestedPath, preamble.prop],\n shape.shape,\n )\n }\n if (runtimePrimitiveCheck(propValue)) return propValue\n return propValue\n }\n return undefined\n },\n }) as PlainValueRef<T>\n}\n","/**\n * PlainValueRef module - Reactive subscriptions for plain values.\n *\n * This module provides PlainValueRef, a unified read-write accessor for\n * plain values (strings, numbers, booleans, etc.) stored in CRDT containers.\n *\n * @module plain-value-ref\n */\n\n// Re-export factory\nexport { createListItemPlainValueRef, createPlainValueRef } from \"./factory.js\"\n\n// Re-export symbols (for internal use by other modules)\nexport {\n PARENT_INTERNALS_SYMBOL,\n PATH_SYMBOL,\n PLAIN_VALUE_REF_SYMBOL,\n SHAPE_SYMBOL,\n} from \"./symbols.js\"\n// Re-export types\nexport type { PlainValueRef } from \"./types.js\"\n\n// Re-export value reader functions (for testing and advanced use)\nexport {\n getContainerValue,\n getListContainerValue,\n getListOverlayValue,\n getOverlayValue,\n getPlaceholderValue,\n resolveListValue,\n resolveValue,\n} from \"./value-reader.js\"\n\n// Re-export value writer functions (for testing and advanced use)\nexport { writeListValue, writeValue } from \"./value-writer.js\"\n\nimport type { BaseRefInternals } from \"../typed-refs/base.js\"\n// Import symbols for type guard\nimport {\n PARENT_INTERNALS_SYMBOL,\n PATH_SYMBOL,\n PLAIN_VALUE_REF_SYMBOL,\n} from \"./symbols.js\"\nimport type { PlainValueRef } from \"./types.js\"\n\n/**\n * Type guard to check if a value is a PlainValueRef.\n *\n * @param value - The value to check\n * @returns True if the value is a PlainValueRef\n *\n * @example\n * ```typescript\n * const title = doc.meta.title // PlainValueRef<string>\n * if (isPlainValueRef(title)) {\n * console.log(title.valueOf())\n * }\n * ```\n */\nexport function isPlainValueRef<T = unknown>(\n value: unknown,\n): value is PlainValueRef<T> {\n return (\n value !== null &&\n typeof value === \"object\" &&\n PLAIN_VALUE_REF_SYMBOL in value &&\n (value as any)[PLAIN_VALUE_REF_SYMBOL] === true\n )\n}\n\n/**\n * Get the parent internals from a PlainValueRef.\n * This is an internal helper for subscribe() and other functions that need\n * to access the underlying container.\n *\n * @internal\n * @param ref - The PlainValueRef\n * @returns The parent ref's internals\n */\nexport function getPlainValueRefParentInternals(\n ref: PlainValueRef<unknown>,\n): BaseRefInternals<any> {\n return ref[PARENT_INTERNALS_SYMBOL]\n}\n\n/**\n * Get the path from a PlainValueRef.\n * This is an internal helper for subscribe() and other functions that need\n * to know the path to the value.\n *\n * @internal\n * @param ref - The PlainValueRef\n * @returns The path from the parent container to this value\n */\nexport function getPlainValueRefPath(ref: PlainValueRef<unknown>): string[] {\n return ref[PATH_SYMBOL]\n}\n","/**\n * Path encoding utilities for flattened root container storage.\n *\n * When `mergeable: true` is set on a TypedDoc, all containers are stored at the\n * document root with path-based names. This ensures container IDs are deterministic\n * and survive `applyDiff`, enabling proper merging of concurrent container creation.\n *\n * Path encoding scheme:\n * - Separator: `-` (hyphen) - consistent with Loro's `cid:root-{name}` convention\n * - Escape character: `\\` (backslash)\n * - Literal hyphen in key: `\\-`\n * - Literal backslash in key: `\\\\`\n *\n * Examples:\n * | Schema Path | Encoded Root Name | Container ID |\n * |-------------|-------------------|--------------|\n * | `data.items` | `data-items` | `cid:root-data-items:List` |\n * | `data[\"my-key\"].value` | `data-my\\-key-value` | `cid:root-data-my\\-key-value:Map` |\n * | `players.alice.score` | `players-alice-score` | `cid:root-players-alice-score:Map` |\n */\n\n/**\n * Escape a path segment for use in root container names.\n * Escapes backslashes first, then hyphens.\n *\n * @param segment - A single path segment (key name)\n * @returns The escaped segment safe for use in hyphen-separated paths\n *\n * @example\n * escapePathSegment(\"data\") // \"data\"\n * escapePathSegment(\"my-key\") // \"my\\\\-key\"\n * escapePathSegment(\"path\\\\to\") // \"path\\\\\\\\to\"\n * escapePathSegment(\"a\\\\-b\") // \"a\\\\\\\\\\\\-b\"\n */\nexport function escapePathSegment(segment: string): string {\n // Order matters: escape backslashes first, then hyphens\n return segment.replace(/\\\\/g, \"\\\\\\\\\").replace(/-/g, \"\\\\-\")\n}\n\n/**\n * Build a root container name from path segments.\n * Each segment is escaped and joined with hyphens.\n *\n * @param segments - Array of path segments (key names)\n * @returns The encoded root container name\n *\n * @example\n * buildRootContainerName([\"data\", \"nested\", \"items\"]) // \"data-nested-items\"\n * buildRootContainerName([\"data\", \"my-key\", \"value\"]) // \"data-my\\\\-key-value\"\n * buildRootContainerName([\"config\", \"api-url\"]) // \"config-api\\\\-url\"\n */\nexport function buildRootContainerName(segments: string[]): string {\n return segments.map(escapePathSegment).join(\"-\")\n}\n\n/**\n * Parse a root container name back to path segments.\n * Handles escape sequences for literal hyphens and backslashes.\n *\n * @param name - The encoded root container name\n * @returns Array of path segments (key names)\n *\n * @example\n * parseRootContainerName(\"data-nested-items\") // [\"data\", \"nested\", \"items\"]\n * parseRootContainerName(\"data-my\\\\-key-value\") // [\"data\", \"my-key\", \"value\"]\n * parseRootContainerName(\"config-api\\\\-url\") // [\"config\", \"api-url\"]\n */\nexport function parseRootContainerName(name: string): string[] {\n const result: string[] = []\n let current = \"\"\n let i = 0\n\n while (i < name.length) {\n if (name[i] === \"\\\\\") {\n // Escape sequence\n if (name[i + 1] === \"-\") {\n // Escaped hyphen: literal hyphen in key\n current += \"-\"\n i += 2\n } else if (name[i + 1] === \"\\\\\") {\n // Escaped backslash: literal backslash in key\n current += \"\\\\\"\n i += 2\n } else {\n // Invalid escape sequence, treat as literal backslash\n current += \"\\\\\"\n i += 1\n }\n } else if (name[i] === \"-\") {\n // Path separator\n result.push(current)\n current = \"\"\n i += 1\n } else {\n // Regular character\n current += name[i]\n i += 1\n }\n }\n\n // Don't forget the last segment\n result.push(current)\n\n return result\n}\n","import type { LoroDoc } from \"loro-crdt\"\nimport { EXT_SYMBOL, type ExtRefBase } from \"../ext.js\"\nimport { LORO_SYMBOL } from \"../loro.js\"\nimport { buildRootContainerName } from \"../path-encoding.js\"\nimport type { ContainerShape, DocShape, ShapeToContainer } from \"../shape.js\"\nimport type { Infer } from \"../types.js\"\n\n/**\n * Symbol for internal methods that should not be enumerable or accessible to users.\n * Used to hide implementation details like getTypedRefParams(), finalizeTransaction(), etc.\n *\n * This achieves Success Criteria #7 from loro-api-refactor.md:\n * \"Internal methods hidden - Via Symbol, not enumerable\"\n */\nexport const INTERNAL_SYMBOL = Symbol.for(\"loro-extended:internal\")\n\n// ============================================================================\n// Minimal Interface for ref internals contract\n// ============================================================================\n\n/**\n * Minimal interface for ref internals.\n * Used by TreeNodeRef which doesn't extend TypedRef.\n */\nexport interface RefInternalsBase {\n /** Force materialization of the container and its nested containers */\n materialize(): void\n /** Optional cleanup after change() completes (e.g., clear caches) */\n finalizeTransaction?(): void\n}\n\n// ============================================================================\n// TypedRefParams and TypedRef Base Class\n// ============================================================================\n\nexport type { DiffOverlay } from \"../diff-overlay.js\"\n\n// Re-export so typed-refs/index.ts and other internal consumers can import from here\nimport type { DiffOverlay } from \"../diff-overlay.js\"\n\nexport type TypedRefParams<Shape extends DocShape | ContainerShape> = {\n shape: Shape\n placeholder?: Infer<Shape>\n getContainer: () => ShapeToContainer<Shape>\n autoCommit?: boolean // Auto-commit after mutations\n batchedMutation?: boolean // True when inside change() block - enables value shape caching for find-and-mutate patterns\n getDoc: () => LoroDoc // Needed for auto-commit\n overlay?: DiffOverlay // Optional reverse diff overlay for \"before\" reads\n /**\n * Path prefix for flattened root container storage (mergeable containers).\n * When set, child containers are stored at the document root with path-based names.\n * Example: pathPrefix = [\"data\", \"nested\"] means child \"items\" becomes root container \"data-nested-items\"\n */\n pathPrefix?: string[]\n /**\n * Whether this ref is part of a mergeable document.\n * When true, containers use flattened root storage for deterministic IDs.\n */\n mergeable?: boolean\n}\n\n// ============================================================================\n// BaseRefInternals - Abstract base class for all internal implementations\n// ============================================================================\n\n/**\n * Abstract base class for all ref internal implementations.\n * Contains shared logic that was previously in TypedRef.createBaseInternals().\n *\n * Subclasses implement specific behavior for each ref type.\n */\nexport abstract class BaseRefInternals<Shape extends DocShape | ContainerShape>\n implements RefInternalsBase\n{\n protected cachedContainer: ShapeToContainer<Shape> | undefined\n protected extNamespace: ExtRefBase | undefined\n private _suppressAutoCommit = false\n\n constructor(protected readonly params: TypedRefParams<Shape>) {}\n\n /** Get the underlying Loro container (cached) */\n getContainer(): ShapeToContainer<Shape> {\n if (!this.cachedContainer) {\n this.cachedContainer = this.params.getContainer()\n }\n return this.cachedContainer\n }\n\n /** Commit changes if autoCommit is enabled and not suppressed */\n commitIfAuto(): void {\n if (this.params.autoCommit && !this._suppressAutoCommit) {\n this.params.getDoc().commit()\n }\n }\n\n /**\n * Temporarily suppress auto-commit during batch operations.\n * Used by assignPlainValueToTypedRef() to batch multiple property assignments.\n */\n setSuppressAutoCommit(suppress: boolean): void {\n this._suppressAutoCommit = suppress\n }\n\n /** Check if auto-commit is currently suppressed */\n isSuppressAutoCommit(): boolean {\n return this._suppressAutoCommit\n }\n\n /**\n * Execute a function with auto-commit suppressed, then commit once at the end.\n * This batches multiple mutations into a single commit to avoid intermediate\n * subscription notifications with partial data.\n *\n * Reentrant-safe: if auto-commit is already suppressed (e.g., nested call),\n * the inner call runs without double-restoring.\n */\n withBatchedCommit(fn: () => void): void {\n const wasSuppressed = this._suppressAutoCommit\n if (!wasSuppressed) {\n this._suppressAutoCommit = true\n }\n try {\n fn()\n } finally {\n if (!wasSuppressed) {\n this._suppressAutoCommit = false\n }\n }\n this.commitIfAuto()\n }\n\n /** Get the shape for this ref */\n getShape(): Shape {\n return this.params.shape\n }\n\n /** Get the placeholder value */\n getPlaceholder(): Infer<Shape> | undefined {\n return this.params.placeholder\n }\n\n /** Check if autoCommit is enabled */\n getAutoCommit(): boolean {\n return !!this.params.autoCommit\n }\n\n /** Check if in batched mutation mode */\n getBatchedMutation(): boolean {\n return !!this.params.batchedMutation\n }\n\n /** Get the LoroDoc */\n getDoc(): LoroDoc {\n return this.params.getDoc()\n }\n\n /** Get the diff overlay map (if provided) */\n getOverlay(): DiffOverlay | undefined {\n return this.params.overlay\n }\n\n /** Get the path prefix for flattened root container storage */\n getPathPrefix(): string[] | undefined {\n return this.params.pathPrefix\n }\n\n /** Check if this ref is part of a mergeable document */\n isMergeable(): boolean {\n return !!this.params.mergeable\n }\n\n /**\n * Compute the root container name for a child key.\n * Used when mergeable is true to create flattened root containers.\n *\n * @param key - The child key to append to the path\n * @returns The encoded root container name\n */\n computeChildRootContainerName(key: string): string {\n const prefix = this.params.pathPrefix || []\n return buildRootContainerName([...prefix, key])\n }\n\n /**\n * Get the TypedRefParams needed to recreate this ref.\n * Used by change() to create draft refs with modified params.\n *\n * Returns a new params object with the same shape, placeholder, getContainer, and getDoc,\n * but allows overriding autoCommit and batchedMutation for draft creation.\n */\n getTypedRefParams(): TypedRefParams<Shape> {\n return {\n shape: this.params.shape,\n placeholder: this.params.placeholder,\n getContainer: this.params.getContainer,\n autoCommit: this.params.autoCommit,\n batchedMutation: this.params.batchedMutation,\n getDoc: this.params.getDoc,\n overlay: this.params.overlay,\n pathPrefix: this.params.pathPrefix,\n mergeable: this.params.mergeable,\n }\n }\n\n /** Get the ext namespace (cached) */\n getExtNamespace(): ExtRefBase {\n if (!this.extNamespace) {\n this.extNamespace = this.createExtNamespace()\n }\n return this.extNamespace\n }\n\n /** Optional cleanup after change() completes - subclasses override if needed */\n finalizeTransaction?(): void\n\n /** Force materialization of the container and its nested containers */\n materialize(): void {\n this.getContainer()\n }\n\n /** Create the ext() namespace object - subclasses override for specific types */\n protected createExtNamespace(): ExtRefBase {\n const self = this\n return {\n get doc(): LoroDoc {\n return self.params.getDoc()\n },\n }\n }\n}\n\n/**\n * Base class for all typed refs.\n *\n * All internal methods are accessed via [INTERNAL_SYMBOL] to prevent\n * namespace collisions with user data properties.\n *\n * Uses the Facade + Implementation pattern:\n * - TypedRef is the thin public facade\n * - BaseRefInternals subclasses contain all implementation logic\n */\nexport abstract class TypedRef<Shape extends DocShape | ContainerShape> {\n /**\n * Internal implementation accessed via Symbol.\n * Subclasses must set this to their specific internals class instance.\n */\n abstract [INTERNAL_SYMBOL]: BaseRefInternals<Shape>\n\n /**\n * Serializes the ref to a plain JSON-compatible value.\n * Returns the plain type inferred from the shape.\n */\n abstract toJSON(): Infer<Shape>\n\n /**\n * Access the native Loro container via the well-known symbol.\n * This is used by the loro() function to access the container directly.\n */\n get [LORO_SYMBOL](): ShapeToContainer<Shape> {\n return this[INTERNAL_SYMBOL].getContainer()\n }\n\n /**\n * Access the ext() namespace via the well-known symbol.\n * This is used by the ext() function to access loro-extended features.\n */\n get [EXT_SYMBOL](): ExtRefBase {\n return this[INTERNAL_SYMBOL].getExtNamespace()\n }\n}\n","/** biome-ignore-all lint/suspicious/noExplicitAny: JSON Patch values can be any type */\n\nimport { PathNavigationError } from \"./errors.js\"\nimport { isPlainValueRef } from \"./plain-value-ref/index.js\"\nimport type { DocShape } from \"./shape.js\"\nimport { INTERNAL_SYMBOL } from \"./typed-refs/base.js\"\nimport type { Draft } from \"./types.js\"\n\n/**\n * Unwrap a value that may be a PlainValueRef to get the raw value.\n * This is critical for move/copy operations where we need to capture\n * the value BEFORE mutating the source location.\n */\nfunction unwrapValue(value: any): any {\n if (isPlainValueRef(value)) {\n return value.get()\n }\n return value\n}\n\n// =============================================================================\n// JSON PATCH TYPES - Discriminated Union for Type Safety\n// =============================================================================\n\nexport type JsonPatchAddOperation = {\n op: \"add\"\n path: string | (string | number)[]\n value: any\n}\n\nexport type JsonPatchRemoveOperation = {\n op: \"remove\"\n path: string | (string | number)[]\n}\n\nexport type JsonPatchReplaceOperation = {\n op: \"replace\"\n path: string | (string | number)[]\n value: any\n}\n\nexport type JsonPatchMoveOperation = {\n op: \"move\"\n path: string | (string | number)[]\n from: string | (string | number)[]\n}\n\nexport type JsonPatchCopyOperation = {\n op: \"copy\"\n path: string | (string | number)[]\n from: string | (string | number)[]\n}\n\nexport type JsonPatchTestOperation = {\n op: \"test\"\n path: string | (string | number)[]\n value: any\n}\n\nexport type JsonPatchOperation =\n | JsonPatchAddOperation\n | JsonPatchRemoveOperation\n | JsonPatchReplaceOperation\n | JsonPatchMoveOperation\n | JsonPatchCopyOperation\n | JsonPatchTestOperation\n\nexport type JsonPatch = JsonPatchOperation[]\n\n// =============================================================================\n// PATH NAVIGATION UTILITIES\n// =============================================================================\n\n/**\n * Normalize JSON Pointer string to path array\n * Handles RFC 6901 escaping: ~1 -> /, ~0 -> ~\n */\nexport function normalizePath(\n path: string | (string | number)[],\n): (string | number)[] {\n if (Array.isArray(path)) {\n return path\n }\n\n // Handle JSON Pointer format (RFC 6901)\n if (path.startsWith(\"/\")) {\n return path\n .slice(1) // Remove leading slash\n .split(\"/\")\n .map(segment => {\n // Handle JSON Pointer escaping\n const unescaped = segment.replace(/~1/g, \"/\").replace(/~0/g, \"~\")\n // Try to parse as number for array indices\n const asNumber = Number(unescaped)\n return Number.isInteger(asNumber) && asNumber >= 0\n ? asNumber\n : unescaped\n })\n }\n\n // Handle simple dot notation or single segment\n return path.split(\".\").map(segment => {\n const asNumber = Number(segment)\n return Number.isInteger(asNumber) && asNumber >= 0 ? asNumber : segment\n })\n}\n\n/**\n * Navigate to a target path using natural DraftNode property access\n * This follows the existing patterns from the test suite\n */\nfunction navigateToPath<T extends DocShape>(\n draft: Draft<T>,\n path: (string | number)[],\n): { parent: any; key: string | number } {\n if (path.length === 0) {\n throw new PathNavigationError([], \"\", \"Cannot navigate to empty path\")\n }\n\n let current = draft as any\n\n // Navigate to parent of target\n for (let i = 0; i < path.length - 1; i++) {\n const segment = path[i]\n\n if (typeof segment === \"string\") {\n // Use natural property access - this leverages existing DraftNode lazy creation\n current = current[segment]\n if (current === undefined) {\n throw new PathNavigationError(path, segment)\n }\n } else if (typeof segment === \"number\") {\n // List/array access using get() method (following existing patterns)\n if (current.get && typeof current.get === \"function\") {\n current = current.get(segment)\n if (current === undefined) {\n throw new PathNavigationError(\n path,\n segment,\n `List index ${segment} does not exist`,\n )\n }\n } else {\n throw new PathNavigationError(\n path,\n segment,\n `Cannot use numeric index ${segment} on non-list`,\n )\n }\n } else {\n throw new PathNavigationError(\n path,\n segment,\n `Invalid path segment type: ${typeof segment}`,\n )\n }\n }\n\n const targetKey = path[path.length - 1]\n return { parent: current, key: targetKey }\n}\n\n/**\n * Get value at path using natural DraftNode access patterns\n */\nfunction getValueAtPath<T extends DocShape>(\n draft: Draft<T>,\n path: (string | number)[],\n): any {\n if (path.length === 0) {\n return draft\n }\n\n const { parent, key } = navigateToPath(draft, path)\n\n if (typeof key === \"string\") {\n // Use natural property access or get() method\n if (parent.get && typeof parent.get === \"function\") {\n return parent.get(key)\n }\n return parent[key]\n } else if (typeof key === \"number\") {\n // List access using get() method\n if (parent.get && typeof parent.get === \"function\") {\n return parent.get(key)\n }\n throw new Error(`Cannot use numeric index ${key} on non-list`)\n }\n\n throw new Error(`Invalid key type: ${typeof key}`)\n}\n\n// =============================================================================\n// OPERATION HANDLERS - Following existing DraftNode patterns\n// =============================================================================\n\n/**\n * Handle 'add' operation using existing DraftNode methods\n */\nfunction handleAdd<T extends DocShape>(\n draft: Draft<T>,\n operation: JsonPatchAddOperation,\n): void {\n const path = normalizePath(operation.path)\n const { parent, key } = navigateToPath(draft, path)\n\n if (typeof key === \"string\") {\n // Map-like operations - use natural assignment or set() method\n // Check if parent is a PlainValueRef (has PLAIN_VALUE_REF_SYMBOL or specific shape)\n // PlainValueRef.set() takes ONE argument, RecordRef.set() takes TWO arguments\n if (isPlainValueRef(parent)) {\n // Parent is a PlainValueRef (e.g., a struct value in a list) - access nested property\n const ref = (parent as any)[key]\n if (ref && typeof ref.set === \"function\") {\n ref.set(operation.value)\n } else {\n throw new Error(`Cannot add property \"${key}\" on PlainValueRef parent`)\n }\n } else if (parent.set && typeof parent.set === \"function\") {\n // RecordRef: parent.set(key, value)\n parent.set(key, operation.value)\n } else {\n // StructRef: navigate to property PlainValueRef, then .set()\n const ref = parent[key]\n if (ref && typeof ref.set === \"function\") {\n ref.set(operation.value)\n } else {\n throw new Error(`Cannot add property \"${key}\" on parent`)\n }\n }\n } else if (typeof key === \"number\") {\n // List operations - use insert() method (follows existing patterns)\n if (parent.insert && typeof parent.insert === \"function\") {\n parent.insert(key, operation.value)\n } else {\n throw new Error(`Cannot insert at numeric index ${key} on non-list`)\n }\n } else {\n throw new Error(`Invalid key type: ${typeof key}`)\n }\n}\n\n/**\n * Handle 'remove' operation using existing DraftNode methods\n */\nfunction handleRemove<T extends DocShape>(\n draft: Draft<T>,\n operation: JsonPatchRemoveOperation,\n): void {\n const path = normalizePath(operation.path)\n const { parent, key } = navigateToPath(draft, path)\n\n if (typeof key === \"string\") {\n // Map-like operations - use delete() method (follows existing patterns)\n // This works for both RecordRef.delete(key) and StructRef internals\n if (parent.delete && typeof parent.delete === \"function\") {\n parent.delete(key)\n } else {\n // StructRef proxy doesn't expose delete directly, but we can access\n // the underlying LoroMap via the internals\n const internals = (parent as any)[INTERNAL_SYMBOL]\n if (internals && typeof internals.deleteProperty === \"function\") {\n internals.deleteProperty(key)\n } else {\n throw new Error(`Cannot remove property \"${key}\" on parent`)\n }\n }\n } else if (typeof key === \"number\") {\n // List operations - use delete() method with count (follows existing patterns)\n if (parent.delete && typeof parent.delete === \"function\") {\n parent.delete(key, 1)\n } else {\n throw new Error(`Cannot remove at numeric index ${key} on non-list`)\n }\n } else {\n throw new Error(`Invalid key type: ${typeof key}`)\n }\n}\n\n/**\n * Handle 'replace' operation using existing DraftNode methods\n */\nfunction handleReplace<T extends DocShape>(\n draft: Draft<T>,\n operation: JsonPatchReplaceOperation,\n): void {\n const path = normalizePath(operation.path)\n const { parent, key } = navigateToPath(draft, path)\n\n if (typeof key === \"string\") {\n // Map-like operations - use set() method or natural assignment\n // Check if parent is a PlainValueRef (has PLAIN_VALUE_REF_SYMBOL or specific shape)\n // PlainValueRef.set() takes ONE argument, RecordRef.set() takes TWO arguments\n if (isPlainValueRef(parent)) {\n // Parent is a PlainValueRef (e.g., a struct value in a list) - access nested property\n const ref = (parent as any)[key]\n if (ref && typeof ref.set === \"function\") {\n ref.set(operation.value)\n } else {\n throw new Error(\n `Cannot replace property \"${key}\" on PlainValueRef parent`,\n )\n }\n } else if (parent.set && typeof parent.set === \"function\") {\n // RecordRef: parent.set(key, value)\n parent.set(key, operation.value)\n } else {\n // StructRef: navigate to property PlainValueRef, then .set()\n const ref = parent[key]\n if (ref && typeof ref.set === \"function\") {\n ref.set(operation.value)\n } else {\n throw new Error(`Cannot replace property \"${key}\" on parent`)\n }\n }\n } else if (typeof key === \"number\") {\n // List operations - delete then insert (follows existing patterns)\n if (\n parent.delete &&\n parent.insert &&\n typeof parent.delete === \"function\" &&\n typeof parent.insert === \"function\"\n ) {\n parent.delete(key, 1)\n parent.insert(key, operation.value)\n } else {\n throw new Error(`Cannot replace at numeric index ${key} on non-list`)\n }\n } else {\n throw new Error(`Invalid key type: ${typeof key}`)\n }\n}\n\n/**\n * Handle 'move' operation using existing DraftNode methods\n */\nfunction handleMove<T extends DocShape>(\n draft: Draft<T>,\n operation: JsonPatchMoveOperation,\n): void {\n const fromPath = normalizePath(operation.from)\n const toPath = normalizePath(operation.path)\n\n // For list moves within the same parent, we need special handling\n if (\n fromPath.length === toPath.length &&\n fromPath.slice(0, -1).every((segment, i) => segment === toPath[i])\n ) {\n // Same parent container - use list move operation if available\n const fromIndex = fromPath[fromPath.length - 1]\n const toIndex = toPath[toPath.length - 1]\n\n if (typeof fromIndex === \"number\" && typeof toIndex === \"number\") {\n const { parent } = navigateToPath(draft, fromPath.slice(0, -1))\n\n // Check if the parent has a move method (like LoroMovableList)\n if (parent.move && typeof parent.move === \"function\") {\n parent.move(fromIndex, toIndex)\n return\n }\n\n // Otherwise, get value, remove, then add at target index\n // CRITICAL: Unwrap PlainValueRef BEFORE removal to capture the raw value.\n // PlainValueRef is a LIVE reference - after removal, indices shift and\n // the ref would read from the wrong position.\n const value = unwrapValue(getValueAtPath(draft, fromPath))\n handleRemove(draft, { op: \"remove\", path: operation.from })\n\n // For JSON Patch move semantics, the target index refers to the position\n // in the final array, not the intermediate array after removal.\n // No index adjustment needed - use the original target index.\n handleAdd(draft, { op: \"add\", path: operation.path, value })\n return\n }\n }\n\n // Different parents or non-numeric indices - standard move\n // CRITICAL: Unwrap PlainValueRef BEFORE removal to capture the raw value.\n const value = unwrapValue(getValueAtPath(draft, fromPath))\n handleRemove(draft, { op: \"remove\", path: operation.from })\n handleAdd(draft, { op: \"add\", path: operation.path, value })\n}\n\n/**\n * Handle 'copy' operation using existing DraftNode methods\n */\nfunction handleCopy<T extends DocShape>(\n draft: Draft<T>,\n operation: JsonPatchCopyOperation,\n): void {\n const fromPath = normalizePath(operation.from)\n\n // Get the value to copy\n // Unwrap PlainValueRef to get the raw value for copying\n const value = unwrapValue(getValueAtPath(draft, fromPath))\n\n // Add to destination (no removal)\n handleAdd(draft, { op: \"add\", path: operation.path, value })\n}\n\n/**\n * Handle 'test' operation using existing DraftNode value access\n */\nfunction handleTest<T extends DocShape>(\n draft: Draft<T>,\n operation: JsonPatchTestOperation,\n): boolean {\n const path = normalizePath(operation.path)\n const actualValue = getValueAtPath(draft, path)\n\n // Deep equality check for test operation\n return JSON.stringify(actualValue) === JSON.stringify(operation.value)\n}\n\n// =============================================================================\n// MAIN APPLICATOR - Simple orchestration following existing patterns\n// =============================================================================\n\n/**\n * Main JSON Patch applicator - follows existing change() patterns\n */\nexport class JsonPatchApplicator<T extends DocShape> {\n constructor(private rootDraft: Draft<T>) {}\n\n /**\n * Apply a single JSON Patch operation\n */\n applyOperation(operation: JsonPatchOperation): void {\n switch (operation.op) {\n case \"add\":\n handleAdd(this.rootDraft, operation)\n break\n case \"remove\":\n handleRemove(this.rootDraft, operation)\n break\n case \"replace\":\n handleReplace(this.rootDraft, operation)\n break\n case \"move\":\n handleMove(this.rootDraft, operation)\n break\n case \"copy\":\n handleCopy(this.rootDraft, operation)\n break\n case \"test\":\n if (!handleTest(this.rootDraft, operation)) {\n throw new Error(`JSON Patch test failed at path: ${operation.path}`)\n }\n break\n default:\n // TypeScript will catch this at compile time with proper discriminated union\n throw new Error(\n `Unsupported JSON Patch operation: ${(operation as any).op}`,\n )\n }\n }\n\n /**\n * Apply multiple JSON Patch operations in sequence\n */\n applyPatch(patch: JsonPatch): void {\n for (const operation of patch) {\n this.applyOperation(operation)\n }\n }\n}\n","/**\n * Document metadata utilities for loro-extended.\n *\n * This module provides utilities for reading and writing document metadata\n * stored in a reserved `_loro_extended_meta_` root container.\n *\n * @module metadata\n */\n\nimport type { LoroDoc, LoroMap } from \"loro-crdt\"\n\n/**\n * Reserved prefix for all loro-extended internal root containers.\n * Any root container key starting with this prefix is reserved for internal use\n * and will be excluded from `toJSON()` output.\n */\nexport const LORO_EXTENDED_PREFIX = \"_loro_extended\"\n\n/**\n * The name of the metadata container.\n * Uses leading underscore (internal), `loro_extended` namespace, and trailing underscore for disambiguation.\n */\nexport const META_CONTAINER_NAME = \"_loro_extended_meta_\"\n\n/**\n * Document metadata stored in the `_loro_extended_meta_` container.\n */\nexport interface LoroExtendedMeta {\n /**\n * Whether the document uses mergeable (flattened) storage.\n * When true, containers are stored at the document root with path-based names.\n */\n mergeable?: boolean\n\n /**\n * Schema version for migration support (reserved for future use).\n */\n schemaVersion?: string\n}\n\n/**\n * Checks if a root container key is reserved for loro-extended internal use.\n *\n * @param key - The root container key to check\n * @returns true if the key starts with `_loro_extended`\n */\nexport function isLoroExtendedReservedKey(key: string): boolean {\n return key.startsWith(LORO_EXTENDED_PREFIX)\n}\n\n/**\n * Checks if the document has metadata stored.\n *\n * @param doc - The LoroDoc to check\n * @returns true if the metadata container exists and has content\n */\nexport function hasMetadata(doc: LoroDoc): boolean {\n const map = doc.getMap(META_CONTAINER_NAME)\n if (!map) return false\n const keys = map.keys()\n return keys.length > 0\n}\n\n/**\n * Reads metadata from the document.\n *\n * @param doc - The LoroDoc to read metadata from\n * @returns The metadata object, or an empty object if no metadata exists\n */\nexport function readMetadata(doc: LoroDoc): LoroExtendedMeta {\n const map = doc.getMap(META_CONTAINER_NAME)\n if (!map) return {}\n\n const result: LoroExtendedMeta = {}\n\n const mergeable = map.get(\"mergeable\")\n if (typeof mergeable === \"boolean\") {\n result.mergeable = mergeable\n }\n\n const schemaVersion = map.get(\"schemaVersion\")\n if (typeof schemaVersion === \"string\") {\n result.schemaVersion = schemaVersion\n }\n\n return result\n}\n\n/**\n * Writes metadata to the document.\n * This should only be called once when the document is first created.\n *\n * @param doc - The LoroDoc to write metadata to\n * @param meta - The metadata to write\n */\nexport function writeMetadata(doc: LoroDoc, meta: LoroExtendedMeta): void {\n const map = doc.getMap(META_CONTAINER_NAME) as LoroMap\n\n if (meta.mergeable !== undefined) {\n map.set(\"mergeable\", meta.mergeable)\n }\n\n if (meta.schemaVersion !== undefined) {\n map.set(\"schemaVersion\", meta.schemaVersion)\n }\n\n doc.commit()\n}\n","import type {\n Container,\n LoroCounter,\n LoroList,\n LoroMap,\n LoroMovableList,\n LoroText,\n LoroTree,\n LoroTreeNode,\n Value,\n} from \"loro-crdt\"\nimport type {\n ContainerOrValueShape,\n ContainerShape,\n CounterContainerShape,\n ListContainerShape,\n MovableListContainerShape,\n RecordContainerShape,\n StructContainerShape,\n TextContainerShape,\n TreeContainerShape,\n ValueShape,\n} from \"../shape.js\"\n\nexport { isContainer, isContainerId } from \"loro-crdt\"\n\n/**\n * Type guard to check if a container is a LoroCounter\n */\nexport function isLoroCounter(container: Container): container is LoroCounter {\n return container.kind() === \"Counter\"\n}\n\n/**\n * Type guard to check if a container is a LoroList\n */\nexport function isLoroList(container: Container): container is LoroList {\n return container.kind() === \"List\"\n}\n\n/**\n * Type guard to check if a container is a LoroMap\n */\nexport function isLoroMap(container: Container): container is LoroMap {\n return container.kind() === \"Map\"\n}\n\n/**\n * Type guard to check if a container is a LoroMovableList\n */\nexport function isLoroMovableList(\n container: Container,\n): container is LoroMovableList {\n return container.kind() === \"MovableList\"\n}\n\n/**\n * Type guard to check if a container is a LoroText\n */\nexport function isLoroText(container: Container): container is LoroText {\n return container.kind() === \"Text\"\n}\n\n/**\n * Type guard to check if a container is a LoroTree\n */\nexport function isLoroTree(container: Container): container is LoroTree {\n return container.kind() === \"Tree\"\n}\n\n/**\n * Type guard to check if an object is a LoroTreeNode\n * Note: LoroTreeNode is not a Container, so we check for its specific properties\n */\nexport function isLoroTreeNode(obj: any): obj is LoroTreeNode {\n return (\n obj &&\n typeof obj === \"object\" &&\n typeof obj.id === \"string\" &&\n typeof obj.data === \"object\" &&\n typeof obj.parent === \"function\" &&\n typeof obj.children === \"function\" &&\n typeof obj.createNode === \"function\"\n )\n}\n\n/**\n * Type guard to ensure cached container matches expected type using kind() method\n */\nexport function assertContainerType<T extends Container>(\n cached: Container,\n expected: T,\n context: string = \"container operation\",\n): asserts cached is T {\n if (cached.kind() !== expected.kind()) {\n throw new Error(\n `Type safety violation in ${context}: ` +\n `cached container kind '${cached.kind()}' does not match ` +\n `expected kind '${expected.kind()}'`,\n )\n }\n\n // Additional safety check: ensure IDs match\n if (cached.id !== expected.id) {\n throw new Error(\n `Container ID mismatch in ${context}: ` +\n `cached ID '${cached.id}' does not match expected ID '${expected.id}'`,\n )\n }\n}\n\n/**\n * Type guard to check if a schema is for TextDraftNode\n */\nexport function isTextShape(\n schema: ContainerOrValueShape,\n): schema is TextContainerShape {\n return schema && typeof schema === \"object\" && schema._type === \"text\"\n}\n\n/**\n * Type guard to check if a schema is for CounterDraftNode\n */\nexport function isCounterShape(\n schema: ContainerOrValueShape,\n): schema is CounterContainerShape {\n return schema && typeof schema === \"object\" && schema._type === \"counter\"\n}\n\n/**\n * Type guard to check if a schema is for ListDraftNode\n */\nexport function isListShape(\n schema: ContainerOrValueShape,\n): schema is ListContainerShape {\n return schema && typeof schema === \"object\" && schema._type === \"list\"\n}\n\n/**\n * Type guard to check if a schema is for MovableListDraftNode\n */\nexport function isMovableListShape(\n schema: ContainerOrValueShape,\n): schema is MovableListContainerShape {\n return schema && typeof schema === \"object\" && schema._type === \"movableList\"\n}\n\n/**\n * Type guard to check if a schema is for StructDraftNode\n */\nexport function isStructShape(\n schema: ContainerOrValueShape,\n): schema is StructContainerShape {\n return schema && typeof schema === \"object\" && schema._type === \"struct\"\n}\n\n/**\n * Type guard to check if a schema is for RecordDraftNode\n */\nexport function isRecordShape(\n schema: ContainerOrValueShape,\n): schema is RecordContainerShape {\n return schema && typeof schema === \"object\" && schema._type === \"record\"\n}\n\n/**\n * Type guard to check if a schema is for TreeDraftNode\n */\nexport function isTreeShape(\n schema: ContainerOrValueShape,\n): schema is TreeContainerShape {\n return schema && typeof schema === \"object\" && schema._type === \"tree\"\n}\n\nexport function isContainerShape(\n schema: ContainerOrValueShape,\n): schema is ContainerShape {\n return schema._type && schema._type !== \"value\"\n}\n\n/**\n * Type guard to check if a schema is any of the Value shapes\n */\nexport function isValueShape(\n schema: ContainerOrValueShape,\n): schema is ValueShape {\n return (\n schema._type === \"value\" &&\n [\n \"string\",\n \"number\",\n \"boolean\",\n \"null\",\n \"undefined\",\n \"uint8array\",\n \"struct\",\n \"record\",\n \"array\",\n \"union\",\n \"discriminatedUnion\",\n \"any\",\n ].includes(schema.valueType)\n )\n}\n\nexport function isObjectValue(value: Value): value is { [key: string]: Value } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n !(value instanceof Uint8Array)\n )\n}\n","import type { TreeID, Value } from \"loro-crdt\"\nimport { deriveShapePlaceholder } from \"./derive-placeholder.js\"\nimport type {\n ContainerShape,\n DiscriminatedUnionValueShape,\n DocShape,\n StructContainerShape,\n TreeContainerShape,\n TreeNodeJSON,\n ValueShape,\n} from \"./shape.js\"\nimport { isObjectValue } from \"./utils/type-guards.js\"\n\n/**\n * Overlays CRDT state with placeholder defaults\n */\nexport function overlayPlaceholder<Shape extends DocShape>(\n shape: Shape,\n crdtValue: { [key: string]: Value },\n placeholderValue: { [key: string]: Value },\n): { [key: string]: Value } {\n if (typeof crdtValue !== \"object\") {\n throw new Error(\"crdt object is required\")\n }\n\n if (typeof placeholderValue !== \"object\") {\n throw new Error(\"placeholder object is required\")\n }\n\n const result = { ...placeholderValue }\n\n for (const [key, propShape] of Object.entries(shape.shapes)) {\n const propCrdtValue = crdtValue[key]\n\n const propPlaceholderValue =\n placeholderValue[key as keyof typeof placeholderValue]\n\n result[key as keyof typeof result] = mergeValue(\n propShape,\n propCrdtValue,\n propPlaceholderValue,\n )\n }\n\n return result\n}\n\n/**\n * Merges individual CRDT values with placeholder defaults\n */\nexport function mergeValue<Shape extends ContainerShape | ValueShape>(\n shape: Shape,\n crdtValue: Value,\n placeholderValue: Value,\n): Value {\n // For \"any\" shapes, just return the CRDT value as-is (no placeholder merging)\n if (shape._type === \"any\") {\n return crdtValue\n }\n\n // For \"any\" value shapes, just return the CRDT value as-is\n if (shape._type === \"value\" && (shape as any).valueType === \"any\") {\n return crdtValue\n }\n\n if (crdtValue === undefined && placeholderValue === undefined) {\n throw new Error(\"either crdt or placeholder value must be defined\")\n }\n\n switch (shape._type) {\n case \"text\":\n return crdtValue !== undefined ? crdtValue : (placeholderValue ?? \"\")\n case \"counter\":\n return crdtValue !== undefined ? crdtValue : (placeholderValue ?? 0)\n case \"list\":\n case \"movableList\": {\n if (crdtValue === undefined) {\n return placeholderValue ?? []\n }\n\n const crdtArray = crdtValue as Value[]\n const itemShape = shape.shape\n const itemPlaceholder = deriveShapePlaceholder(itemShape)\n\n return crdtArray.map(item =>\n mergeValue(itemShape, item, itemPlaceholder as Value),\n )\n }\n case \"struct\": {\n if (!isObjectValue(crdtValue) && crdtValue !== undefined) {\n throw new Error(\"struct crdt must be object\")\n }\n\n const crdtStructValue = crdtValue ?? {}\n\n if (!isObjectValue(placeholderValue) && placeholderValue !== undefined) {\n throw new Error(\"struct placeholder must be object\")\n }\n\n const placeholderStructValue = placeholderValue ?? {}\n\n const result = { ...placeholderStructValue }\n for (const [key, nestedShape] of Object.entries(shape.shapes)) {\n const nestedCrdtValue = crdtStructValue[key]\n const nestedPlaceholderValue = placeholderStructValue[key]\n\n result[key as keyof typeof result] = mergeValue(\n nestedShape,\n nestedCrdtValue,\n nestedPlaceholderValue,\n )\n }\n\n return result\n }\n case \"tree\": {\n if (crdtValue === undefined) {\n return placeholderValue ?? []\n }\n // Transform Loro's native tree format to our typed format\n const treeShape = shape as TreeContainerShape\n return transformTreeNodes(crdtValue as any[], treeShape.shape) as any\n }\n case \"record\": {\n if (!isObjectValue(crdtValue) && crdtValue !== undefined) {\n throw new Error(\"record crdt must be object\")\n }\n\n const crdtRecordValue = (crdtValue as Record<string, Value>) ?? {}\n const result: Record<string, Value> = {}\n\n // For records, we iterate over the keys present in the CRDT value\n // and apply the nested shape's placeholder logic to each value\n for (const key of Object.keys(crdtRecordValue)) {\n const nestedCrdtValue = crdtRecordValue[key]\n // For records, the placeholder is always {}, so we need to derive\n // the placeholder for the nested shape on the fly\n const nestedPlaceholderValue = deriveShapePlaceholder(shape.shape)\n\n result[key] = mergeValue(\n shape.shape,\n nestedCrdtValue,\n nestedPlaceholderValue as Value,\n )\n }\n\n return result\n }\n default:\n if (shape._type === \"value\" && shape.valueType === \"struct\") {\n const crdtObj = (crdtValue as any) ?? {}\n const placeholderObj = (placeholderValue as any) ?? {}\n const result = { ...placeholderObj }\n\n if (typeof crdtObj !== \"object\" || crdtObj === null) {\n return crdtValue !== undefined ? crdtValue : placeholderValue\n }\n\n for (const [key, propShape] of Object.entries(shape.shape)) {\n const propCrdt = crdtObj[key]\n const propPlaceholder = placeholderObj[key]\n result[key] = mergeValue(propShape, propCrdt, propPlaceholder)\n }\n return result\n }\n\n // Handle discriminated unions\n if (shape._type === \"value\" && shape.valueType === \"discriminatedUnion\") {\n return mergeDiscriminatedUnion(\n shape as DiscriminatedUnionValueShape,\n crdtValue,\n placeholderValue,\n )\n }\n\n return crdtValue !== undefined ? crdtValue : placeholderValue\n }\n}\n\n/**\n * Merges a discriminated union value by determining the variant from the discriminant key.\n * Uses the placeholderValue's discriminant to determine the default variant when the discriminant is missing.\n */\nfunction mergeDiscriminatedUnion(\n shape: DiscriminatedUnionValueShape,\n crdtValue: Value,\n placeholderValue: Value,\n): Value {\n const crdtObj = (crdtValue as Record<string, Value>) ?? {}\n const placeholderObj = (placeholderValue as Record<string, Value>) ?? {}\n\n // Get the discriminant value from CRDT, falling back to placeholder\n const discriminantValue =\n crdtObj[shape.discriminantKey] ?? placeholderObj[shape.discriminantKey]\n\n if (typeof discriminantValue !== \"string\") {\n // If no valid discriminant, return the placeholder\n return placeholderValue\n }\n\n // Find the variant shape for this discriminant value\n const variantShape = shape.variants[discriminantValue]\n\n if (!variantShape) {\n // Unknown variant - return CRDT value or placeholder\n return crdtValue !== undefined ? crdtValue : placeholderValue\n }\n\n // Merge using the variant's object shape\n // If the placeholder's discriminant doesn't match the current discriminant,\n // we shouldn't use the placeholder for merging as it belongs to a different variant.\n const placeholderDiscriminant = placeholderObj[shape.discriminantKey]\n const effectivePlaceholderValue =\n placeholderDiscriminant === discriminantValue ? placeholderValue : undefined\n\n return mergeValue(variantShape, crdtValue, effectivePlaceholderValue as Value)\n}\n\n/**\n * Loro's native tree node format from toJSON()\n */\ninterface LoroTreeNodeJSON {\n id: string\n parent: string | null\n index: number\n fractional_index: string\n meta: Record<string, Value>\n children: LoroTreeNodeJSON[]\n}\n\n/**\n * Transforms Loro's native tree format to our typed TreeNodeJSON format.\n * - Renames `meta` to `data`\n * - Renames `fractional_index` to `fractionalIndex`\n * - Applies placeholder merging to node data\n */\nfunction transformTreeNodes<DataShape extends StructContainerShape>(\n nodes: LoroTreeNodeJSON[],\n dataShape: DataShape,\n): TreeNodeJSON<DataShape>[] {\n const dataPlaceholder = deriveShapePlaceholder(dataShape) as Value\n\n return nodes.map(node => transformTreeNode(node, dataShape, dataPlaceholder))\n}\n\n/**\n * Transforms a single tree node and its children recursively.\n */\nfunction transformTreeNode<DataShape extends StructContainerShape>(\n node: LoroTreeNodeJSON,\n dataShape: DataShape,\n dataPlaceholder: Value,\n): TreeNodeJSON<DataShape> {\n // Merge the node's meta (data) with the placeholder\n const mergedData = mergeValue(dataShape, node.meta, dataPlaceholder)\n\n return {\n id: node.id as TreeID,\n parent: node.parent as TreeID | null,\n index: node.index,\n fractionalIndex: node.fractional_index,\n data: mergedData as DataShape[\"_plain\"],\n children: node.children.map(child =>\n transformTreeNode(child, dataShape, dataPlaceholder),\n ),\n }\n}\n","import type { LoroDoc } from \"loro-crdt\"\nimport {\n LoroCounter,\n LoroList,\n LoroMap,\n LoroMovableList,\n LoroText,\n LoroTree,\n} from \"loro-crdt\"\nimport type {\n ContainerShape,\n CounterContainerShape,\n ListContainerShape,\n MovableListContainerShape,\n RecordContainerShape,\n StructContainerShape,\n TextContainerShape,\n TreeContainerShape,\n} from \"../shape.js\"\n\nimport {\n type BaseRefInternals,\n INTERNAL_SYMBOL,\n type TypedRef,\n type TypedRefParams,\n} from \"./base.js\"\nimport { CounterRef } from \"./counter-ref.js\"\nimport { ListRef } from \"./list-ref.js\"\nimport { MovableListRef } from \"./movable-list-ref.js\"\nimport {\n listProxyHandler,\n movableListProxyHandler,\n recordProxyHandler,\n} from \"./proxy-handlers.js\"\nimport { RecordRef } from \"./record-ref.js\"\nimport { createStructRef } from \"./struct-ref.js\"\nimport { TextRef } from \"./text-ref.js\"\nimport { TreeRef } from \"./tree-ref.js\"\n\n/**\n * Mapping from container shape types to their Loro constructor classes.\n * Used when creating new containers via getOrCreateContainer().\n *\n * Note: \"any\" is not included because AnyContainerShape is an escape hatch\n * that doesn't create typed refs - it returns raw Loro containers.\n */\nexport const containerConstructor = {\n counter: LoroCounter,\n list: LoroList,\n movableList: LoroMovableList,\n record: LoroMap, // Records use LoroMap as their underlying container\n struct: LoroMap, // Structs use LoroMap as their underlying container\n text: LoroText,\n tree: LoroTree,\n} as const\n\n/**\n * Mapping from container shape types to their LoroDoc getter method names.\n * Used when resolving root containers (both hierarchical and flattened/mergeable storage).\n *\n * Note: \"any\" is not included because AnyContainerShape is an escape hatch\n * that doesn't create typed refs - it returns raw Loro containers.\n */\nexport const containerGetter = {\n counter: \"getCounter\",\n list: \"getList\",\n movableList: \"getMovableList\",\n record: \"getMap\",\n struct: \"getMap\", // Structs use LoroMap as their underlying container\n text: \"getText\",\n tree: \"getTree\",\n} as const satisfies Record<string, keyof LoroDoc>\n\n/**\n * Type guard to check if a container shape type has a constructor.\n * Returns false for \"any\" which is an escape hatch.\n */\nexport function hasContainerConstructor(\n type: string,\n): type is keyof typeof containerConstructor {\n return type in containerConstructor\n}\n\n/**\n * Builds TypedRefParams for a child container of a map-backed ref (struct or record).\n *\n * This is the shared logic for StructRefInternals.getChildTypedRefParams and\n * RecordRefInternals.getChildTypedRefParams. The only varying input is `placeholder`,\n * which callers compute differently:\n * - Structs: `(this.getPlaceholder() as any)?.[key]`\n * - Records: `(this.getPlaceholder() as any)?.[key] ?? deriveShapePlaceholder(shape)`\n *\n * Handles both mergeable (flattened root storage with null markers) and\n * non-mergeable (nested getOrCreateContainer) paths.\n */\nexport function buildChildTypedRefParams(\n internals: BaseRefInternals<any>,\n key: string,\n shape: ContainerShape,\n placeholder: TypedRefParams<ContainerShape>[\"placeholder\"],\n): TypedRefParams<ContainerShape> {\n // AnyContainerShape is an escape hatch - it doesn't have a constructor\n if (!hasContainerConstructor(shape._type)) {\n throw new Error(\n `Cannot create typed ref for shape type \"${shape._type}\". ` +\n `Use Shape.any() only at the document root level.`,\n )\n }\n\n // For mergeable documents, use flattened root containers\n if (internals.isMergeable()) {\n const doc = internals.getDoc()\n const rootName = internals.computeChildRootContainerName(key)\n const pathPrefix = internals.getPathPrefix() || []\n const newPathPrefix = [...pathPrefix, key]\n\n // Set null marker in parent map to indicate child container reference\n const container = internals.getContainer() as LoroMap\n if (container.get(key) !== null) {\n container.set(key, null)\n }\n\n const getterName =\n containerGetter[shape._type as keyof typeof containerGetter]\n const getter = (doc as any)[getterName].bind(doc)\n\n return {\n shape,\n placeholder,\n getContainer: () => getter(rootName),\n autoCommit: internals.getAutoCommit(),\n batchedMutation: internals.getBatchedMutation(),\n getDoc: () => doc,\n overlay: internals.getOverlay(),\n pathPrefix: newPathPrefix,\n mergeable: true,\n }\n }\n\n // Non-mergeable: use standard nested container storage\n const LoroContainer = containerConstructor[shape._type]\n const container = internals.getContainer() as LoroMap\n\n return {\n shape,\n placeholder,\n getContainer: () =>\n container.getOrCreateContainer(key, new (LoroContainer as any)()),\n autoCommit: internals.getAutoCommit(),\n batchedMutation: internals.getBatchedMutation(),\n getDoc: () => internals.getDoc(),\n overlay: internals.getOverlay(),\n }\n}\n\n/**\n * Unwraps a TypedRef to its primitive value for readonly access.\n * Counter refs return their numeric value, Text refs return their string.\n * Other container types are returned as-is.\n */\nexport function unwrapReadonlyPrimitive(\n ref: TypedRef<any>,\n shape: ContainerShape,\n): any {\n if (shape._type === \"counter\") {\n return (ref as any).get()\n }\n if (shape._type === \"text\") {\n return (ref as any).toString()\n }\n return ref\n}\n\n/**\n * Serializes a TypedRef to JSON by iterating over its keys.\n * For nested TypedRefs with toJSON(), calls their toJSON method.\n * For plain values, includes them directly.\n */\nexport function serializeRefToJSON(\n ref: Record<string, any>,\n keys: Iterable<string>,\n): Record<string, any> {\n const result: Record<string, any> = {}\n for (const key of keys) {\n const value = ref[key]\n if (value && typeof value === \"object\" && \"toJSON\" in value) {\n result[key] = value.toJSON()\n } else {\n result[key] = value\n }\n }\n return result\n}\n\n// Generic catch-all overload\nexport function createContainerTypedRef<T extends ContainerShape>(\n params: TypedRefParams<T>,\n): TypedRef<T>\n\n// Implementation\nexport function createContainerTypedRef(\n params: TypedRefParams<ContainerShape>,\n): TypedRef<ContainerShape> | TreeRef<StructContainerShape> {\n switch (params.shape._type) {\n case \"counter\":\n return new CounterRef(params as TypedRefParams<CounterContainerShape>)\n case \"list\":\n return new Proxy(\n new ListRef(params as TypedRefParams<ListContainerShape>),\n listProxyHandler,\n )\n case \"struct\":\n return createStructRef(\n params as TypedRefParams<StructContainerShape>,\n ) as unknown as TypedRef<ContainerShape>\n case \"movableList\":\n return new Proxy(\n new MovableListRef(params as TypedRefParams<MovableListContainerShape>),\n movableListProxyHandler,\n )\n case \"record\":\n return new Proxy(\n new RecordRef(params as TypedRefParams<RecordContainerShape>),\n recordProxyHandler,\n )\n case \"text\":\n return new TextRef(params as TypedRefParams<TextContainerShape>)\n case \"tree\": {\n const treeShape = params.shape as TreeContainerShape\n return new TreeRef({\n shape: treeShape,\n placeholder: params.placeholder as never[],\n getContainer: params.getContainer as () => LoroTree,\n autoCommit: params.autoCommit,\n batchedMutation: params.batchedMutation,\n getDoc: params.getDoc,\n overlay: params.overlay,\n })\n }\n default:\n throw new Error(\n `Unknown container type: ${(params.shape as ContainerShape)._type}`,\n )\n }\n}\n\n/**\n * Assigns a plain JavaScript value to a TypedRef.\n *\n * For struct/record types, this batches all property assignments and only\n * commits once at the end to avoid multiple subscription notifications.\n *\n * @param ref - The TypedRef to assign to\n * @param value - The plain value to assign\n * @returns true if assignment was successful, false otherwise\n */\nexport function assignPlainValueToTypedRef(\n ref: TypedRef<any>,\n value: any,\n): boolean {\n // Access internals via INTERNAL_SYMBOL\n const internals = ref[INTERNAL_SYMBOL]\n\n // Force materialization of the container\n if (internals) {\n internals.materialize()\n }\n\n const shape = internals?.getShape?.() ?? (ref as any).shape\n const shapeType = shape?._type\n\n if (shapeType === \"struct\") {\n const structShapes = shape.shapes as Record<string, { _type: string }>\n\n internals.withBatchedCommit(() => {\n for (const k in value) {\n const propRef = (ref as any)[k]\n const propShape = structShapes?.[k]\n\n // Handle CounterRef specially - it has increment/decrement, not set\n if (propShape?._type === \"counter\") {\n if (typeof value[k] === \"number\") {\n const currentValue = propRef.get()\n const diff = value[k] - currentValue\n if (diff > 0) {\n propRef.increment(diff)\n } else if (diff < 0) {\n propRef.decrement(-diff)\n }\n }\n } else if (\n propShape?._type === \"struct\" ||\n propShape?._type === \"record\"\n ) {\n // Nested container refs - recursively assign\n if (propRef && INTERNAL_SYMBOL in propRef) {\n assignPlainValueToTypedRef(propRef, value[k])\n }\n } else if (\n propShape?._type === \"list\" ||\n propShape?._type === \"movableList\"\n ) {\n // ListRef - recursively assign to update the list contents\n if (propRef && INTERNAL_SYMBOL in propRef) {\n assignPlainValueToTypedRef(propRef, value[k])\n }\n } else if (propShape?._type === \"text\") {\n // TextRef uses .update() method\n if (propRef && typeof propRef.update === \"function\") {\n propRef.update(value[k])\n }\n } else if (propRef && typeof propRef.set === \"function\") {\n // Use .set() on PlainValueRef or other refs with set method\n propRef.set(value[k])\n }\n }\n })\n\n return true\n }\n\n if (shapeType === \"record\") {\n internals.withBatchedCommit(() => {\n for (const k in value) {\n // Use RecordRef.set(key, value) method\n ;(ref as any).set(k, value[k])\n }\n })\n\n return true\n }\n\n if (shapeType === \"list\" || shapeType === \"movableList\") {\n if (Array.isArray(value)) {\n const listRef = ref as any\n\n internals.withBatchedCommit(() => {\n if (listRef.length > 0) {\n listRef.delete(0, listRef.length)\n }\n for (const item of value) {\n listRef.push(item)\n }\n })\n\n return true\n }\n }\n\n if (shapeType === \"text\") {\n if (typeof value === \"string\") {\n ;(ref as any).update(value)\n return true\n }\n return false\n }\n\n if (shapeType === \"counter\") {\n if (typeof value === \"number\") {\n const currentValue = (ref as any).get()\n const diff = value - currentValue\n if (diff > 0) {\n ;(ref as any).increment(diff)\n } else if (diff < 0) {\n ;(ref as any).decrement(-diff)\n }\n return true\n }\n return false\n }\n\n return false\n}\n","import type { CounterDiff, LoroCounter, LoroDoc } from \"loro-crdt\"\nimport type { ExtRefBase } from \"../ext.js\"\nimport type { CounterContainerShape } from \"../shape.js\"\nimport { BaseRefInternals } from \"./base.js\"\n\n/**\n * Internal implementation for CounterRef.\n * Contains all logic, state, and implementation details.\n */\nexport class CounterRefInternals extends BaseRefInternals<CounterContainerShape> {\n private materialized = false\n\n /** Increment the counter value */\n increment(value: number = 1): void {\n this.materialized = true\n ;(this.getContainer() as LoroCounter).increment(value)\n this.commitIfAuto()\n }\n\n /** Decrement the counter value */\n decrement(value: number = 1): void {\n this.materialized = true\n ;(this.getContainer() as LoroCounter).decrement(value)\n this.commitIfAuto()\n }\n\n /** Get the current counter value */\n getValue(): number {\n const container = this.getContainer() as LoroCounter\n const containerValue = container.value\n const overlay = this.getOverlay()\n if (overlay) {\n const diff = overlay.get((container as any).id)\n if (diff && diff.type === \"counter\") {\n const counterDiff = diff as CounterDiff\n return containerValue + counterDiff.increment\n }\n }\n if (containerValue !== 0 || this.materialized) {\n return containerValue\n }\n // Return placeholder if available and container is at default state\n const placeholder = this.getPlaceholder()\n if (placeholder !== undefined) {\n return placeholder as number\n }\n return containerValue\n }\n\n /** Create the ext namespace for counter */\n protected override createExtNamespace(): ExtRefBase {\n const self = this\n return {\n get doc(): LoroDoc {\n return self.getDoc()\n },\n }\n }\n}\n","import type { CounterContainerShape } from \"../shape.js\"\nimport { INTERNAL_SYMBOL, TypedRef, type TypedRefParams } from \"./base.js\"\nimport { CounterRefInternals } from \"./counter-ref-internals.js\"\n\n/**\n * Counter typed ref - thin facade that delegates to CounterRefInternals.\n */\nexport class CounterRef extends TypedRef<CounterContainerShape> {\n [INTERNAL_SYMBOL]: CounterRefInternals\n\n constructor(params: TypedRefParams<CounterContainerShape>) {\n super()\n this[INTERNAL_SYMBOL] = new CounterRefInternals(params)\n }\n\n /** Increment the counter by the given value (default 1) */\n increment(value?: number): void {\n this[INTERNAL_SYMBOL].increment(value)\n }\n\n /** Decrement the counter by the given value (default 1) */\n decrement(value?: number): void {\n this[INTERNAL_SYMBOL].decrement(value)\n }\n\n /** Get the current counter value */\n get(): number {\n return this[INTERNAL_SYMBOL].getValue()\n }\n\n valueOf(): number {\n return this.get()\n }\n\n toJSON(): number {\n return this.get()\n }\n\n [Symbol.toPrimitive](hint: string): number | string {\n if (hint === \"string\") {\n return String(this.get())\n }\n return this.get()\n }\n}\n","import {\n type Container,\n LoroCounter,\n LoroList,\n LoroMap,\n LoroMovableList,\n LoroText,\n type Value,\n} from \"loro-crdt\"\nimport type {\n ArrayValueShape,\n ContainerOrValueShape,\n ListContainerShape,\n MovableListContainerShape,\n RecordContainerShape,\n RecordValueShape,\n StructContainerShape,\n StructValueShape,\n} from \"./shape.js\"\nimport {\n isContainer,\n isContainerShape,\n isObjectValue,\n isValueShape,\n} from \"./utils/type-guards.js\"\n\n/**\n * Converts string input to LoroText container\n */\nfunction convertTextInput(value: string): LoroText {\n const text = new LoroText()\n\n text.insert(0, value)\n\n return text\n}\n\n/**\n * Converts number input to LoroCounter container\n */\nfunction convertCounterInput(value: number): LoroCounter {\n const counter = new LoroCounter()\n counter.increment(value)\n return counter\n}\n\n/**\n * Converts array input to LoroList container\n */\nfunction convertListInput(\n value: Value[],\n shape: ListContainerShape | ArrayValueShape,\n // parentPath: string[],\n): LoroList | Value[] {\n if (!isContainerShape(shape)) {\n return value\n }\n\n const list = new LoroList()\n\n for (const item of value) {\n const convertedItem = convertInputToRef(item, shape.shape)\n if (isContainer(convertedItem)) {\n list.pushContainer(convertedItem)\n } else {\n list.push(convertedItem)\n }\n }\n\n return list\n}\n\n/**\n * Converts array input to LoroMovableList container\n */\nfunction convertMovableListInput(\n value: Value[],\n shape: MovableListContainerShape | ArrayValueShape,\n // parentPath: string[],\n): LoroMovableList | Value[] {\n if (!isContainerShape(shape)) {\n return value\n }\n\n const list = new LoroMovableList()\n\n for (const item of value) {\n const convertedItem = convertInputToRef(item, shape.shape)\n if (isContainer(convertedItem)) {\n list.pushContainer(convertedItem)\n } else {\n list.push(convertedItem)\n }\n }\n\n return list\n}\n\n/**\n * Converts object input to LoroMap container (Struct)\n */\nfunction convertStructInput(\n value: { [key: string]: Value },\n shape: StructContainerShape | StructValueShape,\n): LoroMap | { [key: string]: Value } {\n if (!isContainerShape(shape)) {\n return value\n }\n\n const map = new LoroMap()\n\n // Iterate over schema keys to ensure all nested containers are materialized\n for (const k of Object.keys(shape.shapes)) {\n const nestedSchema = shape.shapes[k]\n const v = value[k]\n\n if (v !== undefined) {\n const convertedValue = convertInputToRef(v, nestedSchema)\n if (isContainer(convertedValue)) {\n map.setContainer(k, convertedValue)\n } else {\n map.set(k, convertedValue)\n }\n } else if (isContainerShape(nestedSchema)) {\n // If value is missing but it's a container shape, create an empty container\n // This ensures deterministic container IDs across peers\n let emptyValue: any\n if (nestedSchema._type === \"struct\" || nestedSchema._type === \"record\") {\n emptyValue = {}\n } else if (\n nestedSchema._type === \"list\" ||\n nestedSchema._type === \"movableList\"\n ) {\n emptyValue = []\n } else if (nestedSchema._type === \"text\") {\n emptyValue = \"\"\n } else if (nestedSchema._type === \"counter\") {\n emptyValue = 0\n }\n\n if (emptyValue !== undefined) {\n const convertedValue = convertInputToRef(emptyValue, nestedSchema)\n if (isContainer(convertedValue)) {\n map.setContainer(k, convertedValue)\n }\n }\n }\n }\n\n // Also handle keys present in value but not in schema (if any, though for structs this shouldn't happen ideally)\n // But for backward compatibility or loose typing, we might want to preserve them?\n // The original code did:\n // if (nestedSchema) { ... } else { map.set(k, value) }\n // So it allowed extra keys.\n for (const [k, v] of Object.entries(value)) {\n if (!shape.shapes[k]) {\n console.warn(\n `convertStructInput: key \"${k}\" is not in the struct schema and will be ignored by typed access`,\n )\n map.set(k, v)\n }\n }\n\n return map\n}\n\n/**\n * Converts object input to LoroMap container (Record)\n */\nfunction convertRecordInput(\n value: { [key: string]: Value },\n shape: RecordContainerShape | RecordValueShape,\n): LoroMap | { [key: string]: Value } {\n if (!isContainerShape(shape)) {\n return value\n }\n\n const map = new LoroMap()\n for (const [k, v] of Object.entries(value)) {\n const convertedValue = convertInputToRef(v, shape.shape)\n if (isContainer(convertedValue)) {\n map.setContainer(k, convertedValue)\n } else {\n map.set(k, convertedValue)\n }\n }\n\n return map\n}\n\n/**\n * Main conversion function that transforms input values to appropriate CRDT containers\n * based on schema definitions\n */\nexport function convertInputToRef<Shape extends ContainerOrValueShape>(\n value: Value,\n shape: Shape,\n): Container | Value {\n switch (shape._type) {\n case \"text\": {\n if (typeof value !== \"string\") {\n throw new Error(\"string expected\")\n }\n\n return convertTextInput(value)\n }\n case \"counter\": {\n if (typeof value !== \"number\") {\n throw new Error(\"number expected\")\n }\n\n return convertCounterInput(value)\n }\n case \"list\": {\n if (!Array.isArray(value)) {\n throw new Error(\"array expected\")\n }\n\n return convertListInput(value, shape)\n }\n case \"movableList\": {\n if (!Array.isArray(value)) {\n throw new Error(\"array expected\")\n }\n\n return convertMovableListInput(value, shape)\n }\n case \"struct\": {\n if (!isObjectValue(value)) {\n throw new Error(\"object expected\")\n }\n\n return convertStructInput(value, shape)\n }\n case \"record\": {\n if (!isObjectValue(value)) {\n throw new Error(\"object expected\")\n }\n\n return convertRecordInput(value, shape)\n }\n case \"value\": {\n if (!isValueShape(shape)) {\n throw new Error(\"value expected\")\n }\n\n return value\n }\n\n case \"tree\":\n throw new Error(\"tree type unimplemented\")\n\n default:\n throw new Error(`unexpected type: ${(shape as Shape)._type}`)\n }\n}\n","/**\n * Shared helper functions for PlainValueRef access in typed refs.\n * These utilities are used by StructRefInternals, RecordRefInternals, and ListRefBaseInternals.\n *\n * @module typed-refs/plain-value-access\n */\n\nimport { createListItemPlainValueRef } from \"../plain-value-ref/factory.js\"\nimport {\n createPlainValueRef,\n isPlainValueRef,\n type PlainValueRef,\n} from \"../plain-value-ref/index.js\"\nimport type { ValueShape } from \"../shape.js\"\nimport type { BaseRefInternals } from \"./base.js\"\n\n/**\n * Create a PlainValueRef for a property on a parent container.\n *\n * @param internals - The parent ref's internals\n * @param key - The property key\n * @param shape - The value shape for the property\n * @returns A PlainValueRef that reads/writes through the parent container\n */\nexport function createPlainValueRefForProperty<T>(\n internals: BaseRefInternals<any>,\n key: string,\n shape: ValueShape,\n): PlainValueRef<T> {\n return createPlainValueRef<T>(internals, [key], shape)\n}\n\n/**\n * Create a PlainValueRef for an item in a list container.\n *\n * @param internals - The list ref's internals\n * @param index - The list index\n * @param shape - The value shape for the item\n * @returns A PlainValueRef that reads/writes through the list container\n */\nexport function createPlainValueRefForListItem<T>(\n internals: BaseRefInternals<any>,\n index: number,\n shape: ValueShape,\n): PlainValueRef<T> {\n return createListItemPlainValueRef<T>(internals, index, shape)\n}\n\n/**\n * Unwrap a value that may be a PlainValueRef.\n * If the value is a PlainValueRef, returns its current value via valueOf().\n * Otherwise, returns the value as-is.\n *\n * This is used in assignment handlers to support both:\n * - Direct assignment: `doc.meta.title = \"new value\"`\n * - PlainValueRef assignment: `doc.meta.title = otherDoc.meta.title`\n *\n * @param value - The value to potentially unwrap\n * @returns The unwrapped value\n */\nexport function unwrapPlainValueRef<T>(value: T | PlainValueRef<T>): T {\n if (isPlainValueRef(value)) {\n return value.valueOf() as T\n }\n return value\n}\n\n/**\n * Resolve a value for batched mutation.\n *\n * Always returns PlainValueRef for consistent method-based read/write\n * both inside and outside `change()` blocks:\n * - Read: `draft.meta.title.get()`\n * - Write: `draft.meta.title.set(\"new value\")`\n *\n * @param internals - The parent ref's internals (provides access to container, placeholder)\n * @param key - The property key to read\n * @param shape - The value shape for this property\n * @returns PlainValueRef for method-based access\n */\nexport function resolveValueForBatchedMutation<T>(\n internals: BaseRefInternals<any>,\n key: string,\n shape: ValueShape,\n): PlainValueRef<T> {\n return createPlainValueRefForProperty<T>(internals, key, shape)\n}\n\n/**\n * Resolve a list item value for batched mutation.\n *\n * Always returns PlainValueRef for consistent method-based read/write.\n *\n * @param internals - The list ref's internals\n * @param index - The list index\n * @param shape - The value shape for list items\n * @param _rawValue - Unused (kept for call-site compatibility)\n * @returns PlainValueRef for method-based access\n */\nexport function resolveListValueForBatchedMutation<T>(\n internals: BaseRefInternals<any>,\n index: number,\n shape: ValueShape,\n _rawValue: unknown,\n): PlainValueRef<T> {\n return createPlainValueRefForListItem<T>(internals, index, shape)\n}\n","import type {\n Container,\n Delta,\n ListDiff,\n LoroDoc,\n LoroList,\n LoroMovableList,\n} from \"loro-crdt\"\nimport { convertInputToRef } from \"../conversion.js\"\nimport { deriveShapePlaceholder } from \"../derive-placeholder.js\"\nimport type { ExtListRef } from \"../ext.js\"\nimport { mergeValue } from \"../overlay.js\"\nimport type {\n ContainerOrValueShape,\n ContainerShape,\n RefMode,\n SelectByMode,\n ValueShape,\n} from \"../shape.js\"\nimport {\n isContainer,\n isContainerShape,\n isValueShape,\n} from \"../utils/type-guards.js\"\nimport {\n BaseRefInternals,\n INTERNAL_SYMBOL,\n TypedRef,\n type TypedRefParams,\n} from \"./base.js\"\nimport {\n createPlainValueRefForListItem,\n resolveListValueForBatchedMutation,\n} from \"./plain-value-access.js\"\nimport { assignPlainValueToTypedRef, createContainerTypedRef } from \"./utils.js\"\n\n// ============================================================================\n// ListRefBaseInternals - Internal implementation class\n// ============================================================================\n\n/**\n * Internal implementation for ListRefBase.\n * Contains all logic, state, and implementation details for list operations.\n */\nexport class ListRefBaseInternals<\n NestedShape extends ContainerOrValueShape,\n Item = NestedShape[\"_plain\"],\n MutableItem = NestedShape[\"_mutable\"],\n> extends BaseRefInternals<any> {\n // Cache for container shape refs only. Value shapes write immediately via PlainValueRef.\n private itemCache = new Map<number, TypedRef<ContainerShape>>()\n private overlayListCache?: Item[]\n\n getOverlayList(): Item[] | undefined {\n const overlay = this.getOverlay()\n if (!overlay) {\n return undefined\n }\n\n const shape = this.getShape()\n if (!isValueShape(shape.shape)) {\n return undefined\n }\n\n if (!this.overlayListCache) {\n const container = this.getContainer() as LoroList | LoroMovableList\n const diff = overlay.get(container.id)\n if (!diff || diff.type !== \"list\") {\n return undefined\n }\n\n const afterValues: Item[] = []\n for (let i = 0; i < container.length; i++) {\n afterValues.push(container.get(i) as Item)\n }\n\n this.overlayListCache = applyListDelta(\n afterValues,\n (diff as ListDiff).diff as Delta<Item[]>[],\n )\n }\n\n return this.overlayListCache\n }\n\n /** Get typed ref params for creating child refs at an index */\n getChildTypedRefParams(\n index: number,\n shape: ContainerShape,\n ): TypedRefParams<ContainerShape> {\n return {\n shape,\n placeholder: undefined, // List items don't have placeholder\n getContainer: () => {\n const container = this.getContainer() as LoroList | LoroMovableList\n const containerItem = container.get(index)\n if (!containerItem || !isContainer(containerItem)) {\n throw new Error(`No container found at index ${index}`)\n }\n return containerItem\n },\n autoCommit: this.getAutoCommit(),\n batchedMutation: this.getBatchedMutation(),\n getDoc: () => this.getDoc(),\n overlay: this.getOverlay(),\n }\n }\n\n /** Get item for predicate functions (returns plain value) */\n getPredicateItem(index: number): Item | undefined {\n const shape = this.getShape()\n const container = this.getContainer() as LoroList | LoroMovableList\n const overlayList = this.getOverlayList()\n\n // For value shapes with overlay (diff view), use the overlay list\n if (overlayList && isValueShape(shape.shape)) {\n return overlayList[index]\n }\n\n // For value shapes, read fresh from container.\n // PlainValueRef writes immediately, so predicates will see in-flight mutations.\n // No need to check itemCache — that's only for container shape refs now.\n const containerItem = container.get(index)\n if (containerItem === undefined) {\n return undefined as Item\n }\n\n if (isValueShape(shape.shape)) {\n // For value shapes, return the plain value directly\n return containerItem as Item\n } else {\n // For container shapes, we need to return the plain object representation\n // This allows predicates to access nested properties like article.metadata.author\n if (isContainer(containerItem)) {\n // Convert container to plain object for predicate logic\n // Handle different container types that may not have toJSON method\n if (\n typeof containerItem === \"object\" &&\n containerItem !== null &&\n \"toJSON\" in containerItem\n ) {\n return (containerItem as any).toJSON() as Item\n } else if (\n typeof containerItem === \"object\" &&\n containerItem !== null &&\n \"getShallowValue\" in containerItem\n ) {\n // For containers like LoroCounter that don't have toJSON but have getShallowValue\n return (containerItem as any).getShallowValue() as Item\n } else {\n // Fallback for other container types\n return containerItem as Item\n }\n }\n return containerItem as Item\n }\n }\n\n /** Get mutable item for return values (returns ref, PlainValueRef, or raw value) */\n getMutableItem(index: number): MutableItem | undefined {\n const shape = this.getShape()\n const container = this.getContainer() as LoroList | LoroMovableList\n const overlayList = this.getOverlayList()\n\n // Get the raw container item\n const containerItem = overlayList\n ? (overlayList[index] as Item | undefined)\n : (container.get(index) as Item | undefined)\n if (containerItem === undefined) {\n return undefined as MutableItem\n }\n\n if (isValueShape(shape.shape)) {\n if (this.getBatchedMutation()) {\n // Inside change() — use runtime typeof check to decide:\n // - Primitive values (string, number, boolean, null): return raw value\n // for ergonomic boolean logic\n // - Object/array values: return PlainValueRef for nested mutation tracking\n // with immediate write-back (no deferred absorption needed)\n return resolveListValueForBatchedMutation<MutableItem>(\n this,\n index,\n shape.shape as ValueShape,\n containerItem,\n ) as MutableItem\n }\n // Outside change() — return PlainValueRef for reactive subscriptions\n return createPlainValueRefForListItem<MutableItem>(\n this,\n index,\n shape.shape as ValueShape,\n ) as MutableItem\n }\n\n // Container shapes: only cache in batchedMutation mode (inside change())\n // Outside of change(), always create fresh refs to avoid stale cache issues\n // after move operations (where indices shift but cached refs have hardcoded indices)\n if (!this.getBatchedMutation()) {\n return createContainerTypedRef(\n this.getChildTypedRefParams(index, shape.shape as ContainerShape),\n ) as MutableItem\n }\n\n // In batched mode, cache container refs for consistent behavior within a single change() call\n // Invariant: itemCache only holds container shape refs, never value shape refs.\n // This assertion guards the type annotation Map<number, TypedRef<ContainerShape>>.\n if (isValueShape(shape.shape)) {\n throw new Error(\n \"Invariant violation: value shapes should not reach itemCache code path\",\n )\n }\n\n let cachedItem = this.itemCache.get(index)\n if (!cachedItem) {\n cachedItem = createContainerTypedRef(\n this.getChildTypedRefParams(index, shape.shape as ContainerShape),\n )\n this.itemCache.set(index, cachedItem)\n }\n\n return cachedItem as MutableItem\n }\n\n /** Insert with automatic conversion */\n insertWithConversion(index: number, item: unknown): void {\n const shape = this.getShape()\n const container = this.getContainer() as LoroList | LoroMovableList\n const convertedItem = convertInputToRef(item as any, shape.shape)\n if (isContainer(convertedItem)) {\n container.insertContainer(index, convertedItem)\n } else {\n container.insert(index, convertedItem)\n }\n }\n\n /** Push with automatic conversion */\n pushWithConversion(item: unknown): void {\n const shape = this.getShape()\n const container = this.getContainer() as LoroList | LoroMovableList\n const convertedItem = convertInputToRef(item as any, shape.shape)\n if (isContainer(convertedItem)) {\n container.pushContainer(convertedItem)\n } else {\n container.push(convertedItem)\n }\n }\n\n /** Update cache indices after a delete operation */\n updateCacheForDelete(deleteIndex: number, deleteLen: number): void {\n const newCache = new Map<number, TypedRef<ContainerShape>>()\n\n for (const [cachedIndex, cachedItem] of this.itemCache.entries()) {\n if (cachedIndex < deleteIndex) {\n // Items before the deletion point keep their indices\n newCache.set(cachedIndex, cachedItem)\n } else if (cachedIndex >= deleteIndex + deleteLen) {\n // Items after the deletion range shift down by deleteLen\n newCache.set(cachedIndex - deleteLen, cachedItem)\n }\n // Items within the deletion range are removed from cache\n }\n\n this.itemCache = newCache\n }\n\n /** Update cache indices after an insert operation */\n updateCacheForInsert(insertIndex: number): void {\n const newCache = new Map<number, TypedRef<ContainerShape>>()\n\n for (const [cachedIndex, cachedItem] of this.itemCache.entries()) {\n if (cachedIndex < insertIndex) {\n // Items before the insertion point keep their indices\n newCache.set(cachedIndex, cachedItem)\n } else {\n // Items at or after the insertion point shift up by 1\n newCache.set(cachedIndex + 1, cachedItem)\n }\n }\n\n this.itemCache = newCache\n }\n\n /** Clear the item cache after change() to prevent stale refs */\n override finalizeTransaction(): void {\n // Recursively finalize nested container refs\n for (const cachedItem of this.itemCache.values()) {\n if (cachedItem && INTERNAL_SYMBOL in cachedItem) {\n cachedItem[INTERNAL_SYMBOL].finalizeTransaction?.()\n }\n }\n\n // Clear the cache to prevent stale refs after index-shifting operations\n this.itemCache.clear()\n }\n\n /** Create the ext namespace for list */\n protected override createExtNamespace(): ExtListRef {\n const self = this\n return {\n get doc(): LoroDoc {\n return self.getDoc()\n },\n pushContainer(container: Container): Container {\n const result = (\n self.getContainer() as LoroList | LoroMovableList\n ).pushContainer(container)\n self.commitIfAuto()\n return result\n },\n insertContainer(index: number, container: Container): Container {\n const result = (\n self.getContainer() as LoroList | LoroMovableList\n ).insertContainer(index, container)\n self.commitIfAuto()\n return result\n },\n }\n }\n}\n\n// ============================================================================\n// ListRefBase - Public facade class\n// ============================================================================\n\n/**\n * Shared logic for list operations - thin facade that delegates to ListRefBaseInternals.\n */\nexport abstract class ListRefBase<\n NestedShape extends ContainerOrValueShape,\n Mode extends RefMode = \"mutable\",\n Item = NestedShape[\"_plain\"],\n MutableItem = SelectByMode<NestedShape, Mode>,\n> extends TypedRef<any> {\n [INTERNAL_SYMBOL]: ListRefBaseInternals<NestedShape>\n\n constructor(params: TypedRefParams<any>) {\n super()\n this[INTERNAL_SYMBOL] = this.createInternals(params)\n }\n\n /** Subclasses override to create their specific internals */\n protected abstract createInternals(\n params: TypedRefParams<any>,\n ): ListRefBaseInternals<NestedShape>\n\n // Array-like methods for better developer experience\n // DUAL INTERFACE: Predicates get Item (plain data), return values are MutableItem (mutable)\n\n find(\n predicate: (item: Item, index: number) => boolean,\n ): MutableItem | undefined {\n for (let i = 0; i < this.length; i++) {\n const predicateItem = this[INTERNAL_SYMBOL].getPredicateItem(i)\n if (predicate(predicateItem as Item, i)) {\n return this[INTERNAL_SYMBOL].getMutableItem(i) as MutableItem // Return mutable item\n }\n }\n return undefined\n }\n\n findIndex(predicate: (item: Item, index: number) => boolean): number {\n for (let i = 0; i < this.length; i++) {\n const predicateItem = this[INTERNAL_SYMBOL].getPredicateItem(i)\n if (predicate(predicateItem as Item, i)) {\n return i\n }\n }\n return -1\n }\n\n map<ReturnType>(\n callback: (item: Item, index: number) => ReturnType,\n ): ReturnType[] {\n const result: ReturnType[] = []\n for (let i = 0; i < this.length; i++) {\n const predicateItem = this[INTERNAL_SYMBOL].getPredicateItem(i)\n result.push(callback(predicateItem as Item, i))\n }\n return result\n }\n\n filter(predicate: (item: Item, index: number) => boolean): MutableItem[] {\n const result: MutableItem[] = []\n for (let i = 0; i < this.length; i++) {\n const predicateItem = this[INTERNAL_SYMBOL].getPredicateItem(i)\n if (predicate(predicateItem as Item, i)) {\n result.push(this[INTERNAL_SYMBOL].getMutableItem(i) as MutableItem) // Return mutable items\n }\n }\n return result\n }\n\n forEach(callback: (item: Item, index: number) => void): void {\n for (let i = 0; i < this.length; i++) {\n const predicateItem = this[INTERNAL_SYMBOL].getPredicateItem(i)\n callback(predicateItem as Item, i)\n }\n }\n\n some(predicate: (item: Item, index: number) => boolean): boolean {\n for (let i = 0; i < this.length; i++) {\n const predicateItem = this[INTERNAL_SYMBOL].getPredicateItem(i)\n if (predicate(predicateItem as Item, i)) {\n return true\n }\n }\n return false\n }\n\n every(predicate: (item: Item, index: number) => boolean): boolean {\n for (let i = 0; i < this.length; i++) {\n const predicateItem = this[INTERNAL_SYMBOL].getPredicateItem(i)\n if (!predicate(predicateItem as Item, i)) {\n return false\n }\n }\n return true\n }\n\n slice(start?: number, end?: number): MutableItem[] {\n const len = this.length\n\n // Normalize start index (following JavaScript Array.prototype.slice semantics)\n const startIndex =\n start === undefined\n ? 0\n : start < 0\n ? Math.max(len + start, 0)\n : Math.min(start, len)\n\n // Normalize end index\n const endIndex =\n end === undefined\n ? len\n : end < 0\n ? Math.max(len + end, 0)\n : Math.min(end, len)\n\n const result: MutableItem[] = []\n for (let i = startIndex; i < endIndex; i++) {\n result.push(this[INTERNAL_SYMBOL].getMutableItem(i) as MutableItem)\n }\n return result\n }\n\n insert(index: number, item: Item): void {\n // Update cache indices before performing the insert operation\n this[INTERNAL_SYMBOL].updateCacheForInsert(index)\n this[INTERNAL_SYMBOL].insertWithConversion(index, item)\n this[INTERNAL_SYMBOL].commitIfAuto()\n }\n\n delete(index: number, len: number): void {\n // Update cache indices before performing the delete operation\n this[INTERNAL_SYMBOL].updateCacheForDelete(index, len)\n const container = this[INTERNAL_SYMBOL].getContainer() as\n | LoroList\n | LoroMovableList\n container.delete(index, len)\n this[INTERNAL_SYMBOL].commitIfAuto()\n }\n\n push(item: Item): void {\n this[INTERNAL_SYMBOL].pushWithConversion(item)\n this[INTERNAL_SYMBOL].commitIfAuto()\n }\n\n /**\n * Set an item at a specific index, replacing the existing item.\n * This is the canonical method for replacing list items.\n *\n * @param index - The index to set\n * @param item - The new item value\n */\n set(index: number, item: Item): void {\n const internals = this[INTERNAL_SYMBOL]\n const shape = internals.getShape()\n const container = internals.getContainer() as LoroList | LoroMovableList\n\n // For container shapes (struct, record, etc.), UPDATE the existing container\n // instead of trying to replace it. This preserves container identity and\n // uses assignPlainValueToTypedRef to properly update nested properties.\n if (isContainerShape(shape.shape)) {\n const existingRef = internals.getMutableItem(index)\n if (existingRef && assignPlainValueToTypedRef(existingRef as any, item)) {\n internals.commitIfAuto()\n return\n }\n // If assignPlainValueToTypedRef returns false, fall through to replacement\n }\n\n // For value shapes or if container update failed, replace the item\n // Check if container has native .set() method (LoroMovableList has it, LoroList doesn't)\n if (\n \"set\" in container &&\n typeof (container as LoroMovableList).set === \"function\"\n ) {\n // LoroMovableList: use .set() directly\n // Convert the item first to handle nested structures\n const convertedItem = convertInputToRef(item as any, shape.shape)\n ;(container as LoroMovableList).set(\n index,\n convertedItem as Exclude<Item, Container>,\n )\n } else {\n // LoroList: use delete+insert since it doesn't have .set()\n ;(container as LoroList).delete(index, 1)\n internals.insertWithConversion(index, item)\n }\n internals.commitIfAuto()\n }\n\n pushContainer(container: Container): Container {\n const loroContainer = this[INTERNAL_SYMBOL].getContainer() as\n | LoroList\n | LoroMovableList\n const result = loroContainer.pushContainer(container)\n this[INTERNAL_SYMBOL].commitIfAuto()\n return result\n }\n\n insertContainer(index: number, container: Container): Container {\n const loroContainer = this[INTERNAL_SYMBOL].getContainer() as\n | LoroList\n | LoroMovableList\n const result = loroContainer.insertContainer(index, container)\n this[INTERNAL_SYMBOL].commitIfAuto()\n return result\n }\n\n get(index: number): MutableItem | undefined {\n return this[INTERNAL_SYMBOL].getMutableItem(index) as\n | MutableItem\n | undefined\n }\n\n toArray(): Item[] {\n const overlayList = this[INTERNAL_SYMBOL].getOverlayList()\n if (overlayList) {\n return [...overlayList] as Item[]\n }\n const result: Item[] = []\n for (let i = 0; i < this.length; i++) {\n result.push(this[INTERNAL_SYMBOL].getPredicateItem(i) as Item)\n }\n return result\n }\n\n toJSON(): Item[] {\n const shape = this[INTERNAL_SYMBOL].getShape()\n const overlayList = this[INTERNAL_SYMBOL].getOverlayList()\n const container = this[INTERNAL_SYMBOL].getContainer() as\n | LoroList\n | LoroMovableList\n const nativeJson = overlayList ?? (container.toJSON() as any[])\n\n // If the nested shape is a container shape (map, record, etc.) or an object value shape,\n // we need to overlay placeholders for each item\n if (\n isContainerShape(shape.shape) ||\n (isValueShape(shape.shape) && shape.shape.valueType === \"struct\")\n ) {\n const itemPlaceholder = deriveShapePlaceholder(shape.shape)\n return nativeJson.map(item =>\n mergeValue(shape.shape, item, itemPlaceholder as any),\n ) as Item[]\n }\n\n // For primitive value shapes, no overlay needed\n return nativeJson ?? []\n }\n\n [Symbol.iterator](): IterableIterator<MutableItem> {\n let index = 0\n return {\n next: (): IteratorResult<MutableItem> => {\n if (index < this.length) {\n return {\n value: this[INTERNAL_SYMBOL].getMutableItem(index++) as MutableItem,\n done: false,\n }\n }\n return { value: undefined, done: true }\n },\n [Symbol.iterator]() {\n return this\n },\n }\n }\n\n get length(): number {\n const overlayList = this[INTERNAL_SYMBOL].getOverlayList()\n if (overlayList) {\n return overlayList.length\n }\n const container = this[INTERNAL_SYMBOL].getContainer() as\n | LoroList\n | LoroMovableList\n return container.length\n }\n}\n\nfunction applyListDelta<T>(input: T[], delta: Delta<T[]>[]): T[] {\n const result: T[] = []\n let index = 0\n\n for (const op of delta) {\n if (op.retain !== undefined) {\n result.push(...input.slice(index, index + op.retain))\n index += op.retain\n } else if (op.delete !== undefined) {\n index += op.delete\n } else if (op.insert !== undefined) {\n result.push(...op.insert)\n }\n }\n\n if (index < input.length) {\n result.push(...input.slice(index))\n }\n\n return result\n}\n","import type { ContainerOrValueShape } from \"../shape.js\"\nimport { ListRefBaseInternals } from \"./list-ref-base.js\"\n\n/**\n * Internal implementation for ListRef.\n * Extends ListRefBaseInternals with LoroList-specific behavior.\n */\nexport class ListRefInternals<\n NestedShape extends ContainerOrValueShape,\n Item = NestedShape[\"_plain\"],\n MutableItem = NestedShape[\"_mutable\"],\n> extends ListRefBaseInternals<NestedShape, Item, MutableItem> {}\n","import type { ContainerOrValueShape, RefMode } from \"../shape.js\"\nimport type { TypedRefParams } from \"./base.js\"\nimport { ListRefBase } from \"./list-ref-base.js\"\nimport { ListRefInternals } from \"./list-ref-internals.js\"\n\n/**\n * List typed ref - thin facade that delegates to ListRefInternals.\n *\n * Access elements via .get(index) method and modify via .set(index, value).\n * Bracket notation is not supported for consistency with method-based API.\n */\nexport class ListRef<\n NestedShape extends ContainerOrValueShape,\n Mode extends RefMode = \"mutable\",\n> extends ListRefBase<NestedShape, Mode> {\n protected override createInternals(\n params: TypedRefParams<any>,\n ): ListRefInternals<NestedShape> {\n return new ListRefInternals(params)\n }\n}\n","import type { LoroMovableList } from \"loro-crdt\"\nimport type { ContainerOrValueShape } from \"../shape.js\"\nimport { ListRefBaseInternals } from \"./list-ref-base.js\"\n\n// ============================================================================\n// MovableListRefInternals - Internal implementation class\n// ============================================================================\n\n/**\n * Internal implementation for MovableListRef.\n * Extends ListRefBaseInternals with LoroMovableList-specific methods.\n */\nexport class MovableListRefInternals<\n NestedShape extends ContainerOrValueShape,\n Item = NestedShape[\"_plain\"],\n MutableItem = NestedShape[\"_mutable\"],\n> extends ListRefBaseInternals<NestedShape, Item, MutableItem> {\n /** Move an item from one index to another */\n move(from: number, to: number): void {\n const container = this.getContainer() as LoroMovableList\n container.move(from, to)\n this.commitIfAuto()\n }\n\n /** Set an item at a specific index */\n set(index: number, item: unknown): void {\n const container = this.getContainer() as LoroMovableList\n container.set(index, item)\n this.commitIfAuto()\n }\n}\n","import type { ContainerOrValueShape, RefMode } from \"../shape.js\"\nimport { INTERNAL_SYMBOL, type TypedRefParams } from \"./base.js\"\nimport { ListRefBase } from \"./list-ref-base.js\"\nimport { MovableListRefInternals } from \"./movable-list-ref-internals.js\"\n\n/**\n * Movable list typed ref - thin facade that delegates to MovableListRefInternals.\n *\n * Access elements via .get(index) method and modify via .set(index, value).\n * Bracket notation is not supported for consistency with method-based API.\n */\nexport class MovableListRef<\n NestedShape extends ContainerOrValueShape,\n Mode extends RefMode = \"mutable\",\n> extends ListRefBase<NestedShape, Mode> {\n declare [INTERNAL_SYMBOL]: MovableListRefInternals<NestedShape>\n\n protected override createInternals(\n params: TypedRefParams<any>,\n ): MovableListRefInternals<NestedShape> {\n return new MovableListRefInternals(params)\n }\n\n move(from: number, to: number): void {\n this[INTERNAL_SYMBOL].move(from, to)\n }\n}\n","import { INTERNAL_SYMBOL } from \"./base.js\"\nimport type { ListRef } from \"./list-ref.js\"\nimport type { MovableListRef } from \"./movable-list-ref.js\"\nimport type { RecordRef } from \"./record-ref.js\"\nimport type { RecordRefInternals } from \"./record-ref-internals.js\"\n\nexport const recordProxyHandler: ProxyHandler<RecordRef<any>> = {\n get: (target, prop) => {\n if (typeof prop === \"string\" && !(prop in target)) {\n // Use getRef for reading - returns undefined for non-existent keys\n return (target[INTERNAL_SYMBOL] as RecordRefInternals<any>).getRef(prop)\n }\n return Reflect.get(target, prop)\n },\n\n // Note: SET trap removed for consistency with method-based API.\n // Use record.set(key, value) instead of record.key = value\n\n // Note: deleteProperty trap removed for consistency.\n // Use record.delete(key) instead of delete record.key\n\n // Support `in` operator for checking key existence\n has: (target, prop) => {\n if (typeof prop === \"string\") {\n // Check if it's a method/property on the class first\n if (prop in target) {\n return true\n }\n // Otherwise check the underlying container\n return target.has(prop)\n }\n return Reflect.has(target, prop)\n },\n\n ownKeys: target => {\n return target.keys()\n },\n\n getOwnPropertyDescriptor: (target, prop) => {\n if (typeof prop === \"string\" && target.has(prop)) {\n return {\n configurable: true,\n enumerable: true,\n value: target.get(prop),\n }\n }\n return Reflect.getOwnPropertyDescriptor(target, prop)\n },\n}\n\nexport const listProxyHandler: ProxyHandler<ListRef<any>> = {\n get: (target, prop) => {\n if (typeof prop === \"string\") {\n const index = Number(prop)\n if (!Number.isNaN(index)) {\n return target.get(index)\n }\n }\n return Reflect.get(target, prop)\n },\n\n // Note: SET trap removed for consistency with method-based API.\n // Use list.set(index, value) instead of list[index] = value\n}\n\nexport const movableListProxyHandler: ProxyHandler<MovableListRef<any>> = {\n get: (target, prop) => {\n if (typeof prop === \"string\") {\n const index = Number(prop)\n if (!Number.isNaN(index)) {\n return target.get(index)\n }\n }\n return Reflect.get(target, prop)\n },\n\n // Note: SET trap removed for consistency with method-based API.\n // Use list.set(index, value) instead of list[index] = value\n}\n","import type { Container, LoroDoc, LoroMap } from \"loro-crdt\"\nimport type { ExtMapRef } from \"../ext.js\"\nimport type { PlainValueRef } from \"../plain-value-ref/index.js\"\nimport type {\n ContainerOrValueShape,\n ContainerShape,\n ValueShape,\n} from \"../shape.js\"\nimport { isValueShape } from \"../utils/type-guards.js\"\nimport {\n BaseRefInternals,\n INTERNAL_SYMBOL,\n type TypedRef,\n type TypedRefParams,\n} from \"./base.js\"\nimport {\n createPlainValueRefForProperty,\n resolveValueForBatchedMutation,\n unwrapPlainValueRef,\n} from \"./plain-value-access.js\"\nimport {\n assignPlainValueToTypedRef,\n buildChildTypedRefParams,\n createContainerTypedRef,\n} from \"./utils.js\"\n\n/**\n * Abstract base class for map-backed ref internals (structs and records).\n *\n * This class extracts the shared logic between StructRefInternals and RecordRefInternals:\n * - Container ref caching\n * - getChildTypedRefParams delegation to buildChildTypedRefParams\n * - finalizeTransaction for nested ref cleanup\n * - createExtNamespace for ext() support\n *\n * Subclasses implement:\n * - getNestedShape(key): How to look up the shape for a given key\n * - getChildPlaceholder(key): How to derive the placeholder for a child ref\n *\n * Note: Uses `any` for Shape parameter to avoid complex type gymnastics.\n * The subclasses (StructRefInternals, RecordRefInternals) provide proper typing.\n */\nexport abstract class MapBasedRefInternals extends BaseRefInternals<any> {\n /**\n * Cache for container shape refs only.\n * Value shapes return PlainValueRef on each access (no caching needed).\n */\n protected refCache = new Map<string, TypedRef<ContainerShape>>()\n\n /**\n * Get the nested shape for a given key.\n *\n * For structs: returns `structShape.shapes[key]` (static, per-key shapes)\n * For records: returns `recordShape.shape` (same shape for all keys)\n */\n abstract getNestedShape(key: string): ContainerOrValueShape | undefined\n\n /**\n * Get the placeholder value for a child ref at a given key.\n *\n * For structs: returns `placeholder?.[key]` (direct lookup)\n * For records: returns `placeholder?.[key] ?? deriveShapePlaceholder(shape)` (with fallback)\n */\n abstract getChildPlaceholder(key: string): unknown\n\n /**\n * Get typed ref params for creating child refs at a key.\n * Delegates to the shared buildChildTypedRefParams helper in utils.ts.\n */\n getChildTypedRefParams(\n key: string,\n shape: ContainerShape,\n ): TypedRefParams<ContainerShape> {\n const placeholder = this.getChildPlaceholder(key)\n return buildChildTypedRefParams(this, key, shape, placeholder)\n }\n\n /**\n * Get or create a ref for a key.\n *\n * For value shapes:\n * - Inside change(): returns PlainValueRef for mutation tracking\n * - Outside change(): returns PlainValueRef for reactive subscriptions\n *\n * For container shapes:\n * - Returns cached TypedRef (creates on first access)\n */\n getOrCreateRef(key: string, shape?: ContainerOrValueShape): unknown {\n const actualShape = shape || this.getNestedShape(key)\n\n if (!actualShape) {\n return undefined\n }\n\n if (isValueShape(actualShape)) {\n if (this.getBatchedMutation()) {\n // Inside change() — return PlainValueRef for method-based mutation\n return resolveValueForBatchedMutation(\n this,\n key,\n actualShape as ValueShape,\n )\n }\n // Outside change() — return PlainValueRef for reactive subscriptions\n return createPlainValueRefForProperty(\n this,\n key,\n actualShape as ValueShape,\n )\n }\n\n // Container shapes: safe to cache (handles)\n let ref = this.refCache.get(key)\n if (!ref) {\n ref = createContainerTypedRef(\n this.getChildTypedRefParams(key, actualShape as ContainerShape),\n )\n this.refCache.set(key, ref)\n }\n\n return ref as TypedRef<ContainerShape> | PlainValueRef<unknown>\n }\n\n /**\n * Set a value at a key.\n *\n * For value shapes: writes directly to the LoroMap\n * For container shapes: uses assignPlainValueToTypedRef for recursive assignment\n */\n setValueAtKey(\n key: string,\n value: unknown,\n shape: ContainerOrValueShape,\n ): void {\n const container = this.getContainer() as LoroMap\n\n if (isValueShape(shape)) {\n // Unwrap PlainValueRef if the value is one (supports ref = otherRef assignment)\n const unwrapped = unwrapPlainValueRef(value)\n container.set(key, unwrapped)\n this.commitIfAuto()\n } else {\n // For container shapes, try to assign the plain value\n // assignPlainValueToTypedRef handles batching and commits internally\n const ref = this.getOrCreateRef(key, shape)\n if (assignPlainValueToTypedRef(ref as TypedRef<ContainerShape>, value)) {\n // Don't call commitIfAuto here - assignPlainValueToTypedRef handles it\n return\n }\n throw new Error(\n \"Cannot set container directly, modify the typed ref instead\",\n )\n }\n }\n\n /**\n * Delete a key from the map and remove it from the cache.\n */\n deleteKey(key: string): void {\n const container = this.getContainer() as LoroMap\n container.delete(key)\n this.refCache.delete(key)\n this.commitIfAuto()\n }\n\n /**\n * Recursively finalize nested container refs.\n * Called at the end of a change() block to clean up caches and prevent stale refs.\n */\n override finalizeTransaction(): void {\n for (const ref of this.refCache.values()) {\n if (ref && INTERNAL_SYMBOL in ref) {\n ref[INTERNAL_SYMBOL].finalizeTransaction?.()\n }\n }\n }\n\n /**\n * Create the ext namespace for map-backed refs.\n * Provides access to doc and setContainer for advanced use cases.\n */\n protected override createExtNamespace(): ExtMapRef {\n const self = this\n return {\n get doc(): LoroDoc {\n return self.getDoc()\n },\n setContainer(key: string, container: Container): Container {\n const result = (self.getContainer() as LoroMap).setContainer(\n key,\n container,\n )\n self.commitIfAuto()\n return result\n },\n }\n }\n}\n","import type { LoroMap } from \"loro-crdt\"\nimport { deriveShapePlaceholder } from \"../derive-placeholder.js\"\nimport type { ContainerOrValueShape, RecordContainerShape } from \"../shape.js\"\nimport { MapBasedRefInternals } from \"./map-based-ref-internals.js\"\n\n/**\n * Internal implementation for RecordRef.\n * Extends MapBasedRefInternals with record-specific behavior.\n *\n * Key differences from StructRefInternals:\n * - getNestedShape: returns recordShape.shape (same shape for all keys)\n * - getChildPlaceholder: uses derive fallback when placeholder[key] is undefined\n * - getRef: checks existence before creating (supports optional chaining)\n * - Provides replace(), merge(), clear() batch operations\n */\nexport class RecordRefInternals<\n NestedShape extends ContainerOrValueShape,\n> extends MapBasedRefInternals {\n /**\n * Get the record shape cast to the correct type.\n */\n private get recordShape(): RecordContainerShape<NestedShape> {\n return this.getShape() as RecordContainerShape<NestedShape>\n }\n\n /**\n * Get the nested shape for a given key.\n * For records, all keys share the same shape (recordShape.shape).\n */\n override getNestedShape(_key: string): ContainerOrValueShape | undefined {\n return this.recordShape.shape\n }\n\n /**\n * Get the placeholder value for a child ref at a given key.\n * For records, falls back to deriveShapePlaceholder when the key is not in the placeholder.\n * This is critical because record placeholders are always {} but nested containers\n * need valid placeholders to fall back to for missing values.\n */\n override getChildPlaceholder(key: string): unknown {\n // First try to get placeholder from the Record's placeholder (if it has an entry for this key)\n let placeholder = (\n this.getPlaceholder() as Record<string, unknown> | undefined\n )?.[key]\n\n // If no placeholder exists for this key, derive one from the schema's shape\n if (placeholder === undefined && this.recordShape.shape) {\n placeholder = deriveShapePlaceholder(this.recordShape.shape)\n }\n\n return placeholder\n }\n\n /**\n * Get a ref for a key without creating (returns undefined for non-existent keys).\n * This allows optional chaining (?.) to work for non-existent record entries.\n */\n getRef(key: string): unknown {\n const container = this.getContainer() as LoroMap\n\n // Check if the key exists before creating refs.\n // For container shapes: allows optional chaining (?.) to work for non-existent keys.\n // Mergeable containers use null as a marker (so null is valid).\n // For value shapes: prevents returning a PlainValueRef for a key that doesn't exist,\n // so that `record.get(\"missing\")` returns undefined rather than a PlainValueRef.\n const existing = container.get(key)\n if (existing === undefined) {\n return undefined\n }\n\n return this.getOrCreateRef(key)\n }\n\n /**\n * Set a value at a key.\n * Delegates to the shared setValueAtKey method with the record's shape.\n */\n set(key: string, value: unknown): void {\n const shape = this.recordShape.shape\n\n if (!shape) {\n throw new Error(\"Record shape is undefined\")\n }\n\n this.setValueAtKey(key, value, shape)\n }\n\n /**\n * Delete a key from the record.\n * Delegates to the shared deleteKey method.\n */\n delete(key: string): void {\n this.deleteKey(key)\n }\n\n /**\n * Replace entire contents with new values.\n * Keys not in `values` are removed.\n */\n replace(values: Record<string, unknown>): void {\n const container = this.getContainer() as LoroMap\n const currentKeys = new Set(container.keys())\n const newKeys = new Set(Object.keys(values))\n\n this.withBatchedCommit(() => {\n // Delete keys that are not in the new values\n for (const key of currentKeys) {\n if (!newKeys.has(key)) {\n this.deleteKey(key)\n }\n }\n\n // Set new/updated values\n for (const key of newKeys) {\n this.set(key, values[key])\n }\n })\n }\n\n /**\n * Merge values into record.\n * Existing keys not in `values` are kept.\n */\n merge(values: Record<string, unknown>): void {\n this.withBatchedCommit(() => {\n for (const key of Object.keys(values)) {\n this.set(key, values[key])\n }\n })\n }\n\n /**\n * Remove all entries from the record.\n */\n clear(): void {\n const container = this.getContainer() as LoroMap\n const keys = container.keys()\n\n if (keys.length === 0) {\n return // No-op on empty record\n }\n\n this.withBatchedCommit(() => {\n for (const key of keys) {\n this.deleteKey(key)\n }\n })\n }\n\n /**\n * Force materialization of the container.\n * For records, we only materialize the record itself, not its dynamic entries.\n * Unlike structs, records don't have a fixed set of keys to materialize.\n */\n override materialize(): void {\n // Ensure this container exists\n this.getContainer()\n\n // Records don't pre-materialize entries - they are created on demand via set()\n // This is different from structs which have a fixed schema of nested containers\n }\n}\n","import type { Container, LoroMap } from \"loro-crdt\"\nimport type { ContainerOrValueShape, RefMode, SelectByMode } from \"../shape.js\"\nimport type { Infer } from \"../types.js\"\nimport { INTERNAL_SYMBOL, TypedRef, type TypedRefParams } from \"./base.js\"\nimport { RecordRefInternals } from \"./record-ref-internals.js\"\nimport { serializeRefToJSON } from \"./utils.js\"\n\n/**\n * Record typed ref - thin facade that delegates to RecordRefInternals.\n *\n * Note: This class does NOT have an index signature to avoid conflicts with methods.\n * Use `IndexedRecordRef<NestedShape>` for the user-facing type that supports bracket access.\n * The Proxy wrapper handles runtime bracket access via `recordProxyHandler`.\n */\nexport class RecordRef<\n NestedShape extends ContainerOrValueShape,\n Mode extends RefMode = \"mutable\",\n> extends TypedRef<any> {\n [INTERNAL_SYMBOL]: RecordRefInternals<NestedShape>\n\n constructor(params: TypedRefParams<any>) {\n super()\n this[INTERNAL_SYMBOL] = new RecordRefInternals(params)\n }\n\n /** Set a value at a key */\n set(key: string, value: Infer<NestedShape>): void {\n this[INTERNAL_SYMBOL].set(key, value)\n }\n\n /** Delete a key */\n delete(key: string): void {\n this[INTERNAL_SYMBOL].delete(key)\n }\n\n get(key: string): SelectByMode<NestedShape, Mode> | undefined {\n // In batched mutation mode (inside change()), use getOrCreateRef to create containers\n // This allows patterns like: draft.scores.get(\"alice\")!.increment(10)\n if (this[INTERNAL_SYMBOL].getBatchedMutation()) {\n return this[INTERNAL_SYMBOL].getOrCreateRef(key) as\n | SelectByMode<NestedShape, Mode>\n | undefined\n }\n // In readonly mode, use getRef which returns undefined for non-existent keys\n return this[INTERNAL_SYMBOL].getRef(key) as\n | SelectByMode<NestedShape, Mode>\n | undefined\n }\n\n setContainer<C extends Container>(key: string, container: C): C {\n const loroContainer = this[INTERNAL_SYMBOL].getContainer() as LoroMap\n const result = loroContainer.setContainer(key, container)\n this[INTERNAL_SYMBOL].commitIfAuto()\n return result\n }\n\n has(key: string): boolean {\n const container = this[INTERNAL_SYMBOL].getContainer() as LoroMap\n return container.get(key) !== undefined\n }\n\n keys(): string[] {\n const container = this[INTERNAL_SYMBOL].getContainer() as LoroMap\n return container.keys()\n }\n\n /**\n * Returns an array of all values in the record.\n * For container-valued records, returns properly typed refs.\n */\n values(): SelectByMode<NestedShape, Mode>[] {\n // We know keys() only returns keys that exist, so get() will not return undefined\n return this.keys().map(\n key => this.get(key) as SelectByMode<NestedShape, Mode>,\n )\n }\n\n /**\n * Returns an array of [key, value] pairs.\n * For container-valued records, values are properly typed refs.\n */\n entries(): [string, SelectByMode<NestedShape, Mode>][] {\n // We know keys() only returns keys that exist, so get() will not return undefined\n return this.keys().map(key => [\n key,\n this.get(key) as SelectByMode<NestedShape, Mode>,\n ])\n }\n\n get size(): number {\n const container = this[INTERNAL_SYMBOL].getContainer() as LoroMap\n return container.size\n }\n\n /**\n * Replace entire contents with new values.\n * Keys not in `values` are removed.\n *\n * @example\n * ```typescript\n * doc.change(draft => {\n * draft.players.replace({\n * alice: { score: 100 },\n * bob: { score: 50 }\n * })\n * })\n * ```\n */\n replace(values: Record<string, Infer<NestedShape>>): void {\n this[INTERNAL_SYMBOL].replace(values)\n }\n\n /**\n * Merge values into record.\n * Existing keys not in `values` are kept.\n *\n * @example\n * ```typescript\n * doc.change(draft => {\n * // Adds charlie, updates alice, keeps bob unchanged\n * draft.players.merge({\n * alice: { score: 150 },\n * charlie: { score: 25 }\n * })\n * })\n * ```\n */\n merge(values: Record<string, Infer<NestedShape>>): void {\n this[INTERNAL_SYMBOL].merge(values)\n }\n\n /**\n * Remove all entries from the record.\n *\n * @example\n * ```typescript\n * doc.change(draft => {\n * draft.players.clear()\n * })\n * ```\n */\n clear(): void {\n this[INTERNAL_SYMBOL].clear()\n }\n\n toJSON(): Record<string, Infer<NestedShape>> {\n return serializeRefToJSON(this, this.keys()) as Record<\n string,\n Infer<NestedShape>\n >\n }\n}\n\n/**\n * User-facing type for RecordRef that includes bracket access support.\n *\n * This type adds an index signature to RecordRef, allowing patterns like:\n * - Reading: `doc.players['alice']?.score`\n * - Writing: `draft.players['alice'] = { score: 100 }`\n *\n * The index signature is defined as a mapped type intersection to avoid\n * conflicting with the class methods (set, get, delete, etc.).\n *\n * At runtime, the Proxy wrapper (`recordProxyHandler`) handles bracket access\n * by delegating to the appropriate RecordRef methods.\n *\n * The `Mode` parameter controls element types:\n * - `\"mutable\"` (default): Elements return `PlainValueRef<T>` for reactive access outside `change()`\n * - `\"draft\"`: Elements return plain `T` for ergonomic mutation inside `change()` callbacks\n */\nexport type IndexedRecordRef<\n NestedShape extends ContainerOrValueShape,\n Mode extends RefMode = \"mutable\",\n> = RecordRef<NestedShape, Mode> & {\n /**\n * Access record entries by key using bracket notation.\n *\n * Reading returns the element type based on Mode.\n * Writing accepts the plain value type (e.g., { score: number }).\n */\n [key: string]:\n | SelectByMode<NestedShape, Mode>\n | Infer<NestedShape>\n | undefined\n}\n","import type {\n ContainerOrValueShape,\n ContainerShape,\n StructContainerShape,\n} from \"../shape.js\"\nimport { isValueShape } from \"../utils/type-guards.js\"\nimport { INTERNAL_SYMBOL, type TypedRef } from \"./base.js\"\nimport { MapBasedRefInternals } from \"./map-based-ref-internals.js\"\n\n/**\n * Internal implementation for StructRef.\n * Extends MapBasedRefInternals with struct-specific behavior.\n *\n * Key differences from RecordRefInternals:\n * - getNestedShape: looks up shape from structShape.shapes[key] (static, per-key)\n * - getChildPlaceholder: direct lookup from parent placeholder (no derive fallback)\n * - materialize: recursively materializes all nested containers defined in schema\n */\nexport class StructRefInternals<\n NestedShapes extends Record<string, ContainerOrValueShape>,\n> extends MapBasedRefInternals {\n /**\n * Get the struct shape cast to the correct type.\n */\n private get structShape(): StructContainerShape<NestedShapes> {\n return this.getShape() as StructContainerShape<NestedShapes>\n }\n\n /**\n * Get the nested shape for a given key.\n * For structs, each key has its own shape defined in structShape.shapes.\n */\n override getNestedShape(key: string): ContainerOrValueShape | undefined {\n return this.structShape.shapes[key]\n }\n\n /**\n * Get the placeholder value for a child ref at a given key.\n * For structs, this is a direct lookup from the parent placeholder.\n */\n override getChildPlaceholder(key: string): unknown {\n return (this.getPlaceholder() as Record<string, unknown> | undefined)?.[key]\n }\n\n /**\n * Set a property value.\n * Delegates to the shared setValueAtKey method with the property's shape.\n */\n setPropertyValue(key: string, value: unknown): void {\n const shape = this.structShape.shapes[key]\n\n if (!shape) {\n throw new Error(`Unknown property: ${key}`)\n }\n\n this.setValueAtKey(key, value, shape)\n }\n\n /**\n * Delete a property.\n * Delegates to the shared deleteKey method.\n */\n deleteProperty(key: string): void {\n this.deleteKey(key)\n }\n\n /**\n * Force materialization of the container and its nested containers.\n * This ensures deterministic container IDs across peers by creating\n * all nested containers defined in the schema eagerly.\n */\n override materialize(): void {\n // Ensure this container exists\n this.getContainer()\n\n // Recursively materialize nested containers\n for (const key in this.structShape.shapes) {\n const shape = this.structShape.shapes[key]\n if (!isValueShape(shape)) {\n // Get the ref (which creates it if needed)\n const ref = this.getOrCreateRef(key, shape) as TypedRef<ContainerShape>\n // Force materialization\n ref[INTERNAL_SYMBOL].materialize()\n }\n }\n }\n}\n","import type { Container, LoroMap, Value } from \"loro-crdt\"\nimport { EXT_SYMBOL } from \"../ext.js\"\nimport { LORO_SYMBOL } from \"../loro.js\"\nimport type {\n ContainerOrValueShape,\n RefMode,\n SelectByMode,\n StructContainerShape,\n} from \"../shape.js\"\nimport type { Infer } from \"../types.js\"\nimport {\n INTERNAL_SYMBOL,\n type RefInternalsBase,\n TypedRef,\n type TypedRefParams,\n} from \"./base.js\"\nimport { StructRefInternals } from \"./struct-ref-internals.js\"\nimport { serializeRefToJSON } from \"./utils.js\"\n\n/**\n * Internal implementation class for struct containers.\n * The actual StructRef is a Proxy wrapping this class.\n */\nclass StructRefImpl<\n NestedShapes extends Record<string, ContainerOrValueShape>,\n> extends TypedRef<any> {\n [INTERNAL_SYMBOL]: StructRefInternals<NestedShapes>\n\n constructor(params: TypedRefParams<any>) {\n super()\n this[INTERNAL_SYMBOL] = new StructRefInternals(params)\n }\n\n get structShape(): StructContainerShape<NestedShapes> {\n return this[\n INTERNAL_SYMBOL\n ].getShape() as StructContainerShape<NestedShapes>\n }\n\n toJSON(): Infer<StructContainerShape<NestedShapes>> {\n return serializeRefToJSON(\n this as any,\n Object.keys(this.structShape.shapes),\n ) as Infer<StructContainerShape<NestedShapes>>\n }\n\n // Deprecated methods - kept for backward compatibility\n // @deprecated Use property access: `obj.key.get()`\n get(key: string): any {\n const container = this[INTERNAL_SYMBOL].getContainer() as LoroMap\n return container.get(key)\n }\n\n // @deprecated Use `.set()` on the property's PlainValueRef: `obj.key.set(value)`\n set(key: string, value: Value): void {\n const container = this[INTERNAL_SYMBOL].getContainer() as LoroMap\n container.set(key, value)\n this[INTERNAL_SYMBOL].commitIfAuto()\n }\n\n // @deprecated Use loro(struct).setContainer() instead\n setContainer<C extends Container>(key: string, container: C): C {\n const loroContainer = this[INTERNAL_SYMBOL].getContainer() as LoroMap\n const result = loroContainer.setContainer(key, container)\n this[INTERNAL_SYMBOL].commitIfAuto()\n return result\n }\n\n // @deprecated Struct properties cannot be deleted. Use `.set()` to set to null/undefined if the schema allows.\n delete(key: string): void {\n const container = this[INTERNAL_SYMBOL].getContainer() as LoroMap\n container.delete(key)\n this[INTERNAL_SYMBOL].commitIfAuto()\n }\n\n // @deprecated Use property access to check: `obj.key.get() !== undefined`\n has(key: string): boolean {\n const container = this[INTERNAL_SYMBOL].getContainer() as LoroMap\n return container.get(key) !== undefined\n }\n\n // @deprecated `Object.keys(obj)` works correctly\n keys(): string[] {\n const container = this[INTERNAL_SYMBOL].getContainer() as LoroMap\n return container.keys()\n }\n\n // @deprecated `Object.values(obj)` returns PlainValueRefs; use `.get()` to unwrap\n values(): any[] {\n const container = this[INTERNAL_SYMBOL].getContainer() as LoroMap\n return container.values()\n }\n\n // @deprecated Use `Object.keys(obj).length` instead\n get size(): number {\n const container = this[INTERNAL_SYMBOL].getContainer() as LoroMap\n return container.size\n }\n}\n\n/**\n * Creates a StructRef wrapped in a Proxy for JavaScript-native object behavior.\n * Supports:\n * - Property access: obj.key (returns PlainValueRef or nested Ref)\n * - Object.keys(obj)\n * - 'key' in obj\n * - toJSON()\n * - loro(obj) for CRDT access\n *\n * Note: Property assignment is NOT supported. Use .set() on the PlainValueRef instead:\n * doc.meta.title.set(\"New Title\") // Correct\n * doc.meta.title = \"New Title\" // NOT supported\n */\nexport function createStructRef<\n NestedShapes extends Record<string, ContainerOrValueShape>,\n>(\n params: TypedRefParams<StructContainerShape<NestedShapes>>,\n): StructRef<NestedShapes> {\n const impl = new StructRefImpl<NestedShapes>(params)\n\n const proxy = new Proxy(impl, {\n get(target, prop, receiver) {\n // Handle Symbol access (loro(), ext(), internal, etc.)\n if (prop === LORO_SYMBOL) {\n return target[INTERNAL_SYMBOL].getContainer()\n }\n\n // Handle EXT_SYMBOL for ext() access - delegate to TypedRef base class\n if (prop === EXT_SYMBOL) {\n return target[INTERNAL_SYMBOL].getExtNamespace()\n }\n\n // Handle INTERNAL_SYMBOL for internal methods\n if (prop === INTERNAL_SYMBOL) {\n return target[INTERNAL_SYMBOL]\n }\n\n // Handle toJSON - use serializeRefToJSON with the proxy (receiver) so property access goes through the proxy\n if (prop === \"toJSON\") {\n return () =>\n serializeRefToJSON(receiver, Object.keys(target.structShape.shapes))\n }\n\n // Handle shape access (internal - needed for assignPlainValueToTypedRef)\n if (prop === \"shape\") {\n return target.structShape\n }\n\n // Schema property access\n if (typeof prop === \"string\" && prop in target.structShape.shapes) {\n const shape = target.structShape.shapes[prop]\n return target[INTERNAL_SYMBOL].getOrCreateRef(prop, shape)\n }\n\n return undefined\n },\n\n has(target, prop) {\n if (\n prop === LORO_SYMBOL ||\n prop === EXT_SYMBOL ||\n prop === INTERNAL_SYMBOL ||\n prop === \"toJSON\" ||\n prop === \"shape\"\n ) {\n return true\n }\n if (typeof prop === \"string\") {\n return prop in target.structShape.shapes\n }\n return false\n },\n\n ownKeys(target) {\n // Return only schema keys, not internal methods\n return Object.keys(target.structShape.shapes)\n },\n\n getOwnPropertyDescriptor(target, prop) {\n if (typeof prop === \"string\" && prop in target.structShape.shapes) {\n const shape = target.structShape.shapes[prop]\n return {\n configurable: true,\n enumerable: true,\n value: target[INTERNAL_SYMBOL].getOrCreateRef(prop, shape),\n }\n }\n return undefined\n },\n }) as unknown as StructRef<NestedShapes>\n\n return proxy\n}\n\n/**\n * Typed ref for struct containers (objects with fixed keys).\n * Uses LoroMap as the underlying container.\n *\n * The `Mode` parameter controls property types:\n * - `\"mutable\"` (default): Properties return `PlainValueRef<T>` for reactive access outside `change()`\n * - `\"draft\"`: Properties return plain `T` for ergonomic mutation inside `change()` callbacks\n *\n * Supports JavaScript-native object behavior:\n * - Property access: obj.key\n * - Property assignment: obj.key = value\n * - Object.keys(obj)\n * - 'key' in obj\n * - delete obj.key\n *\n * @example\n * ```typescript\n * const schema = Shape.doc({\n * settings: Shape.struct({\n * darkMode: Shape.plain.boolean().placeholder(false),\n * fontSize: Shape.plain.number().placeholder(14),\n * }),\n * });\n *\n * const doc = createTypedDoc(schema);\n *\n * // Property access\n * doc.settings.darkMode = true;\n * console.log(doc.settings.darkMode); // true\n *\n * // Object.keys()\n * console.log(Object.keys(doc.settings)); // ['darkMode', 'fontSize']\n *\n * // 'key' in obj\n * console.log('darkMode' in doc.settings); // true\n *\n * // delete obj.key\n * delete doc.settings.darkMode;\n *\n * // CRDT access via loro()\n * import { loro } from \"@loro-extended/change\";\n * loro(doc.settings).setContainer('nested', loroMap);\n * loro(doc.settings).subscribe(callback);\n * ```\n */\nexport type StructRef<\n NestedShapes extends Record<string, ContainerOrValueShape>,\n Mode extends RefMode = \"mutable\",\n> = {\n [K in keyof NestedShapes]: SelectByMode<NestedShapes[K], Mode>\n} & {\n /**\n * Serializes the struct to a plain JSON-compatible object.\n */\n toJSON(): Infer<StructContainerShape<NestedShapes>>\n\n /**\n * Internal methods accessed via INTERNAL_SYMBOL.\n * @internal\n */\n [INTERNAL_SYMBOL]: RefInternalsBase\n\n /**\n * Access CRDT internals via the well-known symbol.\n * Used by the loro() function - returns LoroMap directly.\n */\n [LORO_SYMBOL]: LoroMap\n}\n\n// Re-export for backward compatibility\n// The old class-based StructRef is now replaced by the proxy-based version\nexport { StructRefImpl as StructRefClass }\n","import type { Delta, LoroDoc, LoroText, TextDiff } from \"loro-crdt\"\nimport type { ExtRefBase } from \"../ext.js\"\nimport type { TextContainerShape } from \"../shape.js\"\nimport { BaseRefInternals } from \"./base.js\"\n\n/**\n * Internal implementation for TextRef.\n * Contains all logic, state, and implementation details.\n */\nexport class TextRefInternals extends BaseRefInternals<TextContainerShape> {\n private materialized = false\n\n /** Insert text at the given index */\n insert(index: number, content: string): void {\n this.materialized = true\n ;(this.getContainer() as LoroText).insert(index, content)\n this.commitIfAuto()\n }\n\n /** Delete text at the given index */\n delete(index: number, len: number): void {\n this.materialized = true\n ;(this.getContainer() as LoroText).delete(index, len)\n this.commitIfAuto()\n }\n\n /** Update the entire text content */\n update(text: string): void {\n this.materialized = true\n ;(this.getContainer() as LoroText).update(text)\n this.commitIfAuto()\n }\n\n /** Mark a range of text with a key-value pair */\n mark(range: { start: number; end: number }, key: string, value: any): void {\n this.materialized = true\n ;(this.getContainer() as LoroText).mark(range, key, value)\n this.commitIfAuto()\n }\n\n /** Remove a mark from a range of text */\n unmark(range: { start: number; end: number }, key: string): void {\n this.materialized = true\n ;(this.getContainer() as LoroText).unmark(range, key)\n this.commitIfAuto()\n }\n\n /** Apply a delta to the text */\n applyDelta(delta: any[]): void {\n this.materialized = true\n ;(this.getContainer() as LoroText).applyDelta(delta)\n this.commitIfAuto()\n }\n\n /** Get the text as a string */\n getStringValue(): string {\n const container = this.getContainer() as LoroText\n const overlay = this.getOverlay()\n if (overlay) {\n const diff = overlay.get(container.id)\n if (diff && diff.type === \"text\") {\n const containerValue = container.toString()\n return applyTextDelta(containerValue, (diff as TextDiff).diff)\n }\n }\n const containerValue = container.toString()\n if (containerValue !== \"\" || this.materialized) {\n return containerValue\n }\n // Return placeholder if available and container is at default state\n const placeholder = this.getPlaceholder()\n if (placeholder !== undefined) {\n return placeholder as string\n }\n return containerValue\n }\n\n /** Get the text as a delta */\n toDelta(): any[] {\n const container = this.getContainer() as LoroText\n const overlay = this.getOverlay()\n if (overlay) {\n const diff = overlay.get(container.id)\n if (diff && diff.type === \"text\") {\n const base = container.toDelta() as Delta<string>[]\n return applyDeltaToDelta(base, (diff as TextDiff).diff)\n }\n }\n return container.toDelta()\n }\n\n /** Get the length of the text */\n getLength(): number {\n const container = this.getContainer() as LoroText\n const overlay = this.getOverlay()\n if (overlay) {\n const diff = overlay.get(container.id)\n if (diff && diff.type === \"text\") {\n return applyTextDelta(container.toString(), (diff as TextDiff).diff)\n .length\n }\n }\n return container.length\n }\n\n /** Create the ext namespace for text */\n protected override createExtNamespace(): ExtRefBase {\n const self = this\n return {\n get doc(): LoroDoc {\n return self.getDoc()\n },\n }\n }\n}\n\nfunction applyTextDelta(text: string, delta: Delta<string>[]): string {\n let result = \"\"\n let index = 0\n\n for (const op of delta) {\n if (op.retain !== undefined) {\n result += text.slice(index, index + op.retain)\n index += op.retain\n } else if (op.delete !== undefined) {\n index += op.delete\n } else if (op.insert !== undefined) {\n result += op.insert\n }\n }\n\n if (index < text.length) {\n result += text.slice(index)\n }\n\n return result\n}\n\nfunction applyDeltaToDelta(\n base: Delta<string>[],\n diff: Delta<string>[],\n): Delta<string>[] {\n const baseText = base\n .map(op => (op.insert !== undefined ? op.insert : \"\"))\n .join(\"\")\n const nextText = applyTextDelta(baseText, diff)\n return nextText ? [{ insert: nextText }] : []\n}\n","import type { TextContainerShape } from \"../shape.js\"\nimport { INTERNAL_SYMBOL, TypedRef, type TypedRefParams } from \"./base.js\"\nimport { TextRefInternals } from \"./text-ref-internals.js\"\n\n/**\n * Text typed ref - thin facade that delegates to TextRefInternals.\n */\nexport class TextRef extends TypedRef<TextContainerShape> {\n [INTERNAL_SYMBOL]: TextRefInternals\n\n constructor(params: TypedRefParams<TextContainerShape>) {\n super()\n this[INTERNAL_SYMBOL] = new TextRefInternals(params)\n }\n\n /** Insert text at the given index */\n insert(index: number, content: string): void {\n this[INTERNAL_SYMBOL].insert(index, content)\n }\n\n /** Delete text at the given index */\n delete(index: number, len: number): void {\n this[INTERNAL_SYMBOL].delete(index, len)\n }\n\n /** Update the entire text content */\n update(text: string): void {\n this[INTERNAL_SYMBOL].update(text)\n }\n\n /** Mark a range of text with a key-value pair */\n mark(range: { start: number; end: number }, key: string, value: any): void {\n this[INTERNAL_SYMBOL].mark(range, key, value)\n }\n\n /** Remove a mark from a range of text */\n unmark(range: { start: number; end: number }, key: string): void {\n this[INTERNAL_SYMBOL].unmark(range, key)\n }\n\n /** Apply a delta to the text */\n applyDelta(delta: any[]): void {\n this[INTERNAL_SYMBOL].applyDelta(delta)\n }\n\n /** Get the text as a string */\n toString(): string {\n return this[INTERNAL_SYMBOL].getStringValue()\n }\n\n valueOf(): string {\n return this.toString()\n }\n\n toJSON(): string {\n return this.toString()\n }\n\n [Symbol.toPrimitive](_hint: string): string {\n return this.toString()\n }\n\n /** Get the text as a delta */\n toDelta(): any[] {\n return this[INTERNAL_SYMBOL].toDelta()\n }\n\n /** Get the length of the text */\n get length(): number {\n return this[INTERNAL_SYMBOL].getLength()\n }\n}\n","import type { LoroDoc, LoroTreeNode } from \"loro-crdt\"\nimport { deriveShapePlaceholder } from \"../derive-placeholder.js\"\nimport type { ExtRefBase } from \"../ext.js\"\nimport type { StructContainerShape } from \"../shape.js\"\nimport type { Infer } from \"../types.js\"\nimport {\n INTERNAL_SYMBOL,\n type RefInternalsBase,\n type TypedRefParams,\n} from \"./base.js\"\nimport { createStructRef, type StructRef } from \"./struct-ref.js\"\nimport type { TreeNodeRef, TreeNodeRefParams } from \"./tree-node-ref.js\"\n\n// Forward declaration to avoid circular import\n// TreeRef will be passed in via constructor params\nexport interface TreeRefLike<DataShape extends StructContainerShape> {\n getOrCreateNodeRef(node: LoroTreeNode): TreeNodeRef<DataShape>\n}\n\n/**\n * Internal implementation for TreeNodeRef.\n * Contains all logic, state, and implementation details.\n */\nexport class TreeNodeRefInternals<DataShape extends StructContainerShape>\n implements RefInternalsBase\n{\n private dataRef: StructRef<DataShape[\"shapes\"]> | undefined\n private extNamespace: ExtRefBase | undefined\n\n constructor(private readonly params: TreeNodeRefParams<DataShape>) {}\n\n /** Get the underlying LoroTreeNode */\n getNode(): LoroTreeNode {\n return this.params.node\n }\n\n /** Get the data shape for this node */\n getDataShape(): DataShape {\n return this.params.dataShape\n }\n\n /** Get the parent TreeRef */\n getTreeRef(): TreeRefLike<DataShape> {\n return this.params.treeRef\n }\n\n /** Check if autoCommit is enabled */\n getAutoCommit(): boolean {\n return this.params.autoCommit ?? false\n }\n\n /** Check if in batched mutation mode */\n getBatchedMutation(): boolean {\n return this.params.batchedMutation ?? false\n }\n\n /** Get the LoroDoc */\n getDoc(): LoroDoc {\n return this.params.getDoc()\n }\n\n /** Commit changes if autoCommit is enabled */\n commitIfAuto(): void {\n if (this.params.autoCommit) {\n this.params.getDoc().commit()\n }\n }\n\n /** Get or create the data StructRef */\n getOrCreateDataRef(): StructRef<DataShape[\"shapes\"]> {\n if (!this.dataRef) {\n const node = this.getNode()\n const dataShape = this.getDataShape()\n\n // Get the node's data container (LoroMap)\n const dataContainer = (node as any).data\n\n if (!dataContainer) {\n throw new Error(`Node ${node.id} has no data container`)\n }\n\n // Create placeholder from the data shape\n const placeholder = deriveShapePlaceholder(dataShape) as Infer<DataShape>\n\n const refParams: TypedRefParams<\n StructContainerShape<DataShape[\"shapes\"]>\n > = {\n shape: {\n _type: \"struct\" as const,\n shapes: dataShape.shapes,\n _plain: {} as any,\n _mutable: {} as any,\n _draft: {} as any,\n _placeholder: {} as any,\n },\n placeholder: placeholder as any,\n getContainer: () => dataContainer,\n autoCommit: this.getAutoCommit(),\n batchedMutation: this.getBatchedMutation(),\n getDoc: this.params.getDoc,\n }\n\n this.dataRef = createStructRef(refParams)\n }\n return this.dataRef\n }\n\n /** Recursively finalize nested data ref */\n finalizeTransaction(): void {\n if (this.dataRef) {\n this.dataRef[INTERNAL_SYMBOL].finalizeTransaction?.()\n }\n }\n\n /** Force materialization of the container and its nested containers */\n materialize(): void {\n // Ensure data ref is created and materialized\n const dataRef = this.getOrCreateDataRef()\n dataRef[INTERNAL_SYMBOL].materialize()\n }\n\n /** Get the container (LoroTreeNode) */\n getContainer(): LoroTreeNode {\n return this.params.node\n }\n\n /** Get the ext namespace (cached) */\n getExtNamespace(): ExtRefBase {\n if (!this.extNamespace) {\n this.extNamespace = this.createExtNamespace()\n }\n return this.extNamespace\n }\n\n /** Create the ext namespace for tree node */\n protected createExtNamespace(): ExtRefBase {\n const self = this\n return {\n get doc(): LoroDoc {\n return self.getDoc()\n },\n }\n }\n}\n","import type { LoroDoc, LoroTreeNode, TreeID } from \"loro-crdt\"\nimport { EXT_SYMBOL, type ExtRefBase } from \"../ext.js\"\nimport { LORO_SYMBOL } from \"../loro.js\"\nimport type { StructContainerShape } from \"../shape.js\"\nimport type { Infer } from \"../types.js\"\nimport { INTERNAL_SYMBOL } from \"./base.js\"\nimport type { StructRef } from \"./struct-ref.js\"\nimport {\n TreeNodeRefInternals,\n type TreeRefLike,\n} from \"./tree-node-ref-internals.js\"\nimport { assignPlainValueToTypedRef } from \"./utils.js\"\n\nexport interface TreeNodeRefParams<DataShape extends StructContainerShape> {\n node: LoroTreeNode\n dataShape: DataShape\n treeRef: TreeRefLike<DataShape>\n autoCommit?: boolean\n batchedMutation?: boolean\n getDoc: () => LoroDoc\n}\n\n/**\n * Typed ref for a single tree node - thin facade that delegates to TreeNodeRefInternals.\n * Provides type-safe access to node metadata via the `.data` property.\n *\n * **Note:** TreeNodeRef is not a subclass of TypedRef, but it implements\n * `[INTERNAL_SYMBOL]: RefInternalsBase` for consistency with other refs.\n * This allows internal code to call `finalizeTransaction()` uniformly\n * across all ref types during the `change()` commit phase.\n *\n * @example\n * ```typescript\n * const node = tree.createNode({ name: \"idle\", facts: {} })\n * node.data.name = \"active\" // Typed access\n * const child = node.createNode({ name: \"running\", facts: {} })\n * ```\n */\nexport class TreeNodeRef<DataShape extends StructContainerShape> {\n [INTERNAL_SYMBOL]: TreeNodeRefInternals<DataShape>\n\n constructor(params: TreeNodeRefParams<DataShape>) {\n this[INTERNAL_SYMBOL] = new TreeNodeRefInternals(params)\n }\n\n /**\n * Access the native LoroTreeNode via the well-known symbol.\n */\n get [LORO_SYMBOL](): LoroTreeNode {\n return this[INTERNAL_SYMBOL].getContainer()\n }\n\n /**\n * Access the ext() namespace via the well-known symbol.\n */\n get [EXT_SYMBOL](): ExtRefBase {\n return this[INTERNAL_SYMBOL].getExtNamespace()\n }\n\n /**\n * The unique TreeID of this node.\n */\n get id(): TreeID {\n return this[INTERNAL_SYMBOL].getNode().id\n }\n\n /**\n * Typed access to the node's metadata.\n * This is a StructRef wrapping the node's LoroMap data container.\n */\n get data(): StructRef<DataShape[\"shapes\"]> & {\n [K in keyof DataShape[\"shapes\"]]: DataShape[\"shapes\"][K][\"_mutable\"]\n } {\n return this[INTERNAL_SYMBOL].getOrCreateDataRef() as StructRef<\n DataShape[\"shapes\"]\n > & {\n [K in keyof DataShape[\"shapes\"]]: DataShape[\"shapes\"][K][\"_mutable\"]\n }\n }\n\n /**\n * Create a child node under this node.\n *\n * @param initialData - Optional partial data to initialize the child with\n * @param index - Optional position among siblings\n * @returns The created child TreeNodeRef\n */\n createNode(\n initialData?: Partial<Infer<DataShape>>,\n index?: number,\n ): TreeNodeRef<DataShape> {\n const node = this[INTERNAL_SYMBOL].getNode()\n const treeRef = this[INTERNAL_SYMBOL].getTreeRef()\n\n // Create child node - Loro's createNode on a tree node creates a child\n const loroNode = (node as any).createNode(index)\n const nodeRef = treeRef.getOrCreateNodeRef(loroNode)\n\n // Initialize data if provided\n if (initialData) {\n for (const [key, value] of Object.entries(initialData)) {\n const propRef = (nodeRef.data as any)[key]\n // Use assignPlainValueToTypedRef for container refs (RecordRef, StructRef, etc.)\n // This properly handles the different container types and their APIs\n if (propRef && INTERNAL_SYMBOL in propRef) {\n assignPlainValueToTypedRef(propRef, value)\n } else if (propRef && typeof propRef.set === \"function\") {\n // PlainValueRef for value shapes\n propRef.set(value)\n }\n }\n }\n\n this[INTERNAL_SYMBOL].commitIfAuto()\n return nodeRef\n }\n\n /**\n * Get the parent node, if any.\n */\n parent(): TreeNodeRef<DataShape> | undefined {\n const node = this[INTERNAL_SYMBOL].getNode()\n const treeRef = this[INTERNAL_SYMBOL].getTreeRef()\n\n const parentNode = (node as any).parent?.()\n if (!parentNode) return undefined\n return treeRef.getOrCreateNodeRef(parentNode)\n }\n\n /**\n * Get all child nodes in order.\n */\n children(): TreeNodeRef<DataShape>[] {\n const node = this[INTERNAL_SYMBOL].getNode()\n const treeRef = this[INTERNAL_SYMBOL].getTreeRef()\n\n const childNodes = (node as any).children?.() || []\n return childNodes.map((n: LoroTreeNode) => treeRef.getOrCreateNodeRef(n))\n }\n\n /**\n * Move this node to a new parent.\n *\n * @param newParent - The new parent node (undefined for root)\n * @param index - Optional position among siblings\n */\n move(newParent?: TreeNodeRef<DataShape>, index?: number): void {\n const node = this[INTERNAL_SYMBOL].getNode()\n\n // node.move takes a LoroTreeNode or undefined, not an ID\n const parentNode = newParent\n ? newParent[INTERNAL_SYMBOL].getNode()\n : undefined\n ;(node as any).move?.(parentNode, index)\n this[INTERNAL_SYMBOL].commitIfAuto()\n }\n\n /**\n * Move this node to be after the given sibling.\n */\n moveAfter(sibling: TreeNodeRef<DataShape>): void {\n const node = this[INTERNAL_SYMBOL].getNode()\n const siblingNode = sibling[INTERNAL_SYMBOL].getNode()\n\n node.moveAfter(siblingNode)\n this[INTERNAL_SYMBOL].commitIfAuto()\n }\n\n /**\n * Move this node to be before the given sibling.\n */\n moveBefore(sibling: TreeNodeRef<DataShape>): void {\n const node = this[INTERNAL_SYMBOL].getNode()\n const siblingNode = sibling[INTERNAL_SYMBOL].getNode()\n\n node.moveBefore(siblingNode)\n this[INTERNAL_SYMBOL].commitIfAuto()\n }\n\n /**\n * Get the index of this node among its siblings.\n */\n index(): number | undefined {\n const node = this[INTERNAL_SYMBOL].getNode()\n return node.index()\n }\n\n /**\n * Get the fractional index string for ordering.\n */\n fractionalIndex(): string | undefined {\n const node = this[INTERNAL_SYMBOL].getNode()\n return node.fractionalIndex()\n }\n\n /**\n * Check if this node has been deleted.\n */\n isDeleted(): boolean {\n const node = this[INTERNAL_SYMBOL].getNode()\n return node.isDeleted()\n }\n\n /**\n * Serialize this node and its descendants to JSON.\n */\n toJSON(): {\n id: TreeID\n parent: TreeID | null\n index: number\n fractionalIndex: string\n data: Infer<DataShape>\n children: any[]\n } {\n const children = this.children()\n return {\n id: this.id,\n parent: this.parent()?.id ?? null,\n index: this.index() ?? 0,\n fractionalIndex: this.fractionalIndex() ?? \"\",\n data: this.data.toJSON() as Infer<DataShape>,\n children: children.map(child => child.toJSON()),\n }\n }\n}\n","import type { LoroDoc, LoroTree, LoroTreeNode, TreeID } from \"loro-crdt\"\nimport type { ExtRefBase } from \"../ext.js\"\nimport type { StructContainerShape, TreeContainerShape } from \"../shape.js\"\nimport { BaseRefInternals, INTERNAL_SYMBOL } from \"./base.js\"\nimport { TreeNodeRef } from \"./tree-node-ref.js\"\nimport type { TreeRef } from \"./tree-ref.js\"\n\n/**\n * Internal implementation for TreeRef.\n * Contains all logic, state, and implementation details.\n */\nexport class TreeRefInternals<\n DataShape extends StructContainerShape,\n> extends BaseRefInternals<TreeContainerShape<DataShape>> {\n private nodeCache = new Map<TreeID, TreeNodeRef<DataShape>>()\n private treeRef: TreeRef<DataShape> | null = null\n\n /** Set the parent TreeRef (needed for creating node refs) */\n setTreeRef(treeRef: TreeRef<DataShape>): void {\n this.treeRef = treeRef\n }\n\n /** Get the data shape for tree nodes */\n getDataShape(): DataShape {\n const shape = this.getShape() as TreeContainerShape<DataShape>\n return shape.shape\n }\n\n /** Get or create a node ref for a LoroTreeNode */\n getOrCreateNodeRef(node: LoroTreeNode): TreeNodeRef<DataShape> {\n const id = node.id\n\n if (!this.treeRef) {\n throw new Error(\"treeRef required\")\n }\n\n let nodeRef = this.nodeCache.get(id)\n if (!nodeRef) {\n nodeRef = new TreeNodeRef({\n node,\n dataShape: this.getDataShape(),\n treeRef: this.treeRef,\n autoCommit: this.getAutoCommit(),\n batchedMutation: this.getBatchedMutation(),\n getDoc: () => this.getDoc(),\n })\n this.nodeCache.set(id, nodeRef)\n }\n\n return nodeRef\n }\n\n /** Get a node by its ID */\n getNodeByID(id: TreeID): TreeNodeRef<DataShape> | undefined {\n // Check cache first\n const cached = this.nodeCache.get(id)\n if (cached) return cached\n\n const container = this.getContainer() as LoroTree\n\n // Check if node exists in tree\n if (!container.has(id)) return undefined\n\n // Find the node in the tree's nodes\n const nodes = container.nodes()\n const node = nodes.find(n => n.id === id)\n if (!node) return undefined\n\n return this.getOrCreateNodeRef(node)\n }\n\n /** Delete a node from the tree */\n delete(target: TreeID | TreeNodeRef<DataShape>): void {\n const id = typeof target === \"string\" ? target : target.id\n const container = this.getContainer() as LoroTree\n container.delete(id)\n // Remove from cache\n this.nodeCache.delete(id)\n this.commitIfAuto()\n }\n\n /** Recursively finalize nested node refs */\n override finalizeTransaction(): void {\n for (const nodeRef of this.nodeCache.values()) {\n nodeRef[INTERNAL_SYMBOL].finalizeTransaction?.()\n }\n }\n\n /** Create the ext namespace for tree */\n protected override createExtNamespace(): ExtRefBase {\n const self = this\n return {\n get doc(): LoroDoc {\n return self.getDoc()\n },\n }\n }\n}\n","import type { LoroTree, LoroTreeNode, TreeID } from \"loro-crdt\"\nimport type {\n StructContainerShape,\n TreeContainerShape,\n TreeNodeJSON,\n} from \"../shape.js\"\nimport type { Infer } from \"../types.js\"\nimport { INTERNAL_SYMBOL, TypedRef, type TypedRefParams } from \"./base.js\"\nimport type { TreeNodeRef } from \"./tree-node-ref.js\"\nimport { TreeRefInternals } from \"./tree-ref-internals.js\"\nimport { assignPlainValueToTypedRef } from \"./utils.js\"\n\n/**\n * Typed ref for tree (forest) containers - thin facade that delegates to TreeRefInternals.\n * Wraps LoroTree with type-safe access to node metadata.\n *\n * @example\n * ```typescript\n * const StateNodeDataShape = Shape.struct({\n * name: Shape.text(),\n * facts: Shape.record(Shape.plain.any()),\n * })\n *\n * doc.change(draft => {\n * const root = draft.states.createNode({ name: \"idle\", facts: {} })\n * const child = root.createNode({ name: \"running\", facts: {} })\n * child.data.name = \"active\"\n * })\n * ```\n */\nexport class TreeRef<DataShape extends StructContainerShape> extends TypedRef<\n TreeContainerShape<DataShape>\n> {\n [INTERNAL_SYMBOL]: TreeRefInternals<DataShape>\n\n constructor(params: TypedRefParams<TreeContainerShape<DataShape>>) {\n super()\n this[INTERNAL_SYMBOL] = new TreeRefInternals(params)\n this[INTERNAL_SYMBOL].setTreeRef(this)\n }\n\n /**\n * Get the data shape for tree nodes.\n */\n private get dataShape(): DataShape {\n return this[INTERNAL_SYMBOL].getDataShape()\n }\n\n /**\n * Get or create a node ref for a LoroTreeNode.\n */\n getOrCreateNodeRef(node: LoroTreeNode): TreeNodeRef<DataShape> {\n return this[INTERNAL_SYMBOL].getOrCreateNodeRef(node)\n }\n\n /**\n * Get a node by its ID.\n */\n getNodeByID(id: TreeID): TreeNodeRef<DataShape> | undefined {\n return this[INTERNAL_SYMBOL].getNodeByID(id)\n }\n\n /**\n * Delete a node from the tree.\n */\n delete(target: TreeID | TreeNodeRef<DataShape>): void {\n this[INTERNAL_SYMBOL].delete(target)\n }\n\n /**\n * Serialize the tree to a nested JSON structure.\n * Each node includes its data and children recursively.\n */\n toJSON(): Infer<TreeContainerShape<DataShape>> {\n // Use Loro's native toJSON which returns nested structure\n const container = this[INTERNAL_SYMBOL].getContainer() as LoroTree\n const nativeJson = container.toJSON() as any[]\n return this.transformNativeJson(nativeJson) as Infer<\n TreeContainerShape<DataShape>\n >\n }\n\n /**\n * Create a new root node with optional initial data.\n *\n * @param initialData - Optional partial data to initialize the node with\n * @returns The created TreeNodeRef\n */\n createNode(initialData?: Partial<Infer<DataShape>>): TreeNodeRef<DataShape> {\n const container = this[INTERNAL_SYMBOL].getContainer() as LoroTree\n const loroNode = container.createNode()\n const nodeRef = this.getOrCreateNodeRef(loroNode)\n\n // Initialize data if provided\n if (initialData) {\n for (const [key, value] of Object.entries(initialData)) {\n const propRef = (nodeRef.data as any)[key]\n // Use assignPlainValueToTypedRef for container refs (RecordRef, StructRef, etc.)\n // This properly handles the different container types and their APIs\n if (propRef && INTERNAL_SYMBOL in propRef) {\n assignPlainValueToTypedRef(propRef, value)\n } else if (propRef && typeof propRef.set === \"function\") {\n // PlainValueRef for value shapes\n propRef.set(value)\n }\n }\n }\n\n this[INTERNAL_SYMBOL].commitIfAuto()\n return nodeRef\n }\n\n /**\n * Get all root nodes (nodes without parents).\n * Returns nodes in their fractional index order.\n */\n roots(): TreeNodeRef<DataShape>[] {\n const container = this[INTERNAL_SYMBOL].getContainer() as LoroTree\n return container.roots().map(node => this.getOrCreateNodeRef(node))\n }\n\n /**\n * Get all nodes in the tree (unordered).\n * By default, excludes deleted nodes (tombstones).\n *\n * @param options.includeDeleted - If true, includes deleted nodes. Default: false.\n * @returns Array of TreeNodeRef for matching nodes\n */\n nodes(options?: { includeDeleted?: boolean }): TreeNodeRef<DataShape>[] {\n const container = this[INTERNAL_SYMBOL].getContainer() as LoroTree\n const allNodes = container.nodes()\n const filtered = options?.includeDeleted\n ? allNodes\n : allNodes.filter(node => !node.isDeleted())\n return filtered.map(node => this.getOrCreateNodeRef(node))\n }\n\n /**\n * Check if a node with the given ID exists in the tree.\n */\n has(id: TreeID): boolean {\n const container = this[INTERNAL_SYMBOL].getContainer() as LoroTree\n return container.has(id)\n }\n\n /**\n * Enable fractional index generation for ordering.\n *\n * @param jitter - Optional jitter value to avoid conflicts (0 = no jitter)\n */\n enableFractionalIndex(jitter = 0): void {\n const container = this[INTERNAL_SYMBOL].getContainer() as LoroTree\n container.enableFractionalIndex(jitter)\n }\n\n /**\n * Transform Loro's native JSON format to our typed format.\n */\n private transformNativeJson(nodes: any[]): TreeNodeJSON<DataShape>[] {\n return nodes.map(node => ({\n id: node.id as TreeID,\n parent: node.parent as TreeID | null,\n index: node.index as number,\n fractionalIndex: node.fractional_index as string,\n data: node.meta as Infer<DataShape>,\n children: this.transformNativeJson(node.children || []),\n }))\n }\n\n /**\n * Get a flat array representation of all nodes.\n * Flattens the nested tree structure into a single array.\n */\n toArray(): Array<{\n id: TreeID\n parent: TreeID | null\n index: number\n fractionalIndex: string\n data: Infer<DataShape>\n }> {\n const result: Array<{\n id: TreeID\n parent: TreeID | null\n index: number\n fractionalIndex: string\n data: Infer<DataShape>\n }> = []\n\n // Flatten the nested structure\n const flattenNodes = (nodes: any[]) => {\n for (const node of nodes) {\n result.push({\n id: node.id as TreeID,\n parent: node.parent as TreeID | null,\n index: node.index as number,\n fractionalIndex: node.fractional_index as string,\n data: node.meta as Infer<DataShape>,\n })\n if (node.children && node.children.length > 0) {\n flattenNodes(node.children)\n }\n }\n }\n\n const container = this[INTERNAL_SYMBOL].getContainer() as LoroTree\n const nativeJson = container.toJSON() as any[]\n flattenNodes(nativeJson)\n return result\n }\n}\n","import type { LoroDoc } from \"loro-crdt\"\nimport type { ContainerShape, DocShape } from \"../shape.js\"\nimport type { InferPlaceholderType } from \"../types.js\"\nimport {\n BaseRefInternals,\n INTERNAL_SYMBOL,\n type TypedRef,\n type TypedRefParams,\n} from \"./base.js\"\nimport { containerGetter, createContainerTypedRef } from \"./utils.js\"\n\n/**\n * Internal implementation for DocRef.\n * Contains all logic, state, and implementation details.\n */\nexport class DocRefInternals<\n Shape extends DocShape,\n> extends BaseRefInternals<Shape> {\n private propertyCache = new Map<string, TypedRef<ContainerShape>>()\n private doc: LoroDoc\n private requiredPlaceholder: InferPlaceholderType<Shape>\n private _mergeable: boolean\n\n constructor(\n params: Omit<\n TypedRefParams<Shape>,\n \"getContainer\" | \"getDoc\" | \"placeholder\"\n > & {\n doc: LoroDoc\n placeholder: InferPlaceholderType<Shape>\n autoCommit?: boolean\n batchedMutation?: boolean\n mergeable?: boolean\n },\n ) {\n super({\n ...params,\n getContainer: () => {\n throw new Error(\"can't get container on DocRef\")\n },\n getDoc: () => params.doc,\n mergeable: params.mergeable,\n } as TypedRefParams<Shape>)\n\n this.doc = params.doc\n this.requiredPlaceholder = params.placeholder\n this._mergeable = !!params.mergeable\n }\n\n /** Get typed ref params for creating child refs at a key */\n getChildTypedRefParams(\n key: string,\n shape: ContainerShape,\n ): TypedRefParams<ContainerShape> {\n // Handle \"any\" shape type - it's an escape hatch that doesn't have a specific getter\n if (shape._type === \"any\") {\n throw new Error(\n `Cannot get typed ref params for \"any\" shape type. ` +\n `The \"any\" shape is an escape hatch for untyped containers and should be accessed directly via loroDoc.`,\n )\n }\n\n const getterName =\n containerGetter[shape._type as keyof typeof containerGetter]\n const getter = this.doc[getterName].bind(this.doc)\n\n // For mergeable documents, use root containers with path-based names\n // This ensures deterministic container IDs that survive applyDiff\n if (this._mergeable) {\n return {\n shape,\n placeholder: this.requiredPlaceholder[key],\n getContainer: () => getter(key), // Root container with key as name\n autoCommit: this.getAutoCommit(),\n batchedMutation: this.getBatchedMutation(),\n getDoc: () => this.doc,\n overlay: this.getOverlay(),\n pathPrefix: [key], // Start the path prefix for nested containers\n mergeable: true,\n }\n }\n\n // Non-mergeable: use standard hierarchical storage\n return {\n shape,\n placeholder: this.requiredPlaceholder[key],\n getContainer: () => getter(key),\n autoCommit: this.getAutoCommit(),\n batchedMutation: this.getBatchedMutation(),\n getDoc: () => this.doc,\n overlay: this.getOverlay(),\n }\n }\n\n /** Get or create a typed ref for a key */\n getOrCreateTypedRef(\n key: string,\n shape: ContainerShape,\n ): TypedRef<ContainerShape> | number | string {\n let ref = this.propertyCache.get(key)\n\n if (!ref) {\n ref = createContainerTypedRef(this.getChildTypedRefParams(key, shape))\n this.propertyCache.set(key, ref)\n }\n\n return ref\n }\n\n /** Recursively finalize nested container refs */\n override finalizeTransaction(): void {\n for (const ref of this.propertyCache.values()) {\n ref[INTERNAL_SYMBOL].finalizeTransaction?.()\n }\n }\n}\n","import type { LoroDoc } from \"loro-crdt\"\nimport type { DocShape } from \"../shape.js\"\nimport type { Infer, InferPlaceholderType } from \"../types.js\"\nimport { INTERNAL_SYMBOL, TypedRef, type TypedRefParams } from \"./base.js\"\nimport { DocRefInternals } from \"./doc-ref-internals.js\"\nimport { serializeRefToJSON } from \"./utils.js\"\n\n/**\n * Doc Ref class - thin facade that delegates to DocRefInternals.\n * The actual object passed to the change `mutation` function.\n */\nexport class DocRef<Shape extends DocShape> extends TypedRef<Shape> {\n [INTERNAL_SYMBOL]: DocRefInternals<Shape>\n\n constructor(\n params: Omit<\n TypedRefParams<Shape>,\n \"getContainer\" | \"getDoc\" | \"placeholder\"\n > & {\n doc: LoroDoc\n placeholder: InferPlaceholderType<Shape>\n autoCommit?: boolean\n batchedMutation?: boolean\n mergeable?: boolean\n },\n ) {\n super()\n this[INTERNAL_SYMBOL] = new DocRefInternals(params)\n this.createLazyProperties()\n }\n\n private createLazyProperties(): void {\n const shape = this[INTERNAL_SYMBOL].getShape() as DocShape\n for (const key in shape.shapes) {\n const containerShape = shape.shapes[key]\n Object.defineProperty(this, key, {\n get: () =>\n this[INTERNAL_SYMBOL].getOrCreateTypedRef(key, containerShape),\n enumerable: true,\n })\n }\n }\n\n toJSON(): Infer<Shape> {\n const shape = this[INTERNAL_SYMBOL].getShape() as DocShape\n return serializeRefToJSON(\n this as any,\n Object.keys(shape.shapes),\n ) as Infer<Shape>\n }\n}\n","import { SchemaViolationError } from \"./errors.js\"\nimport type {\n ArrayValueShape,\n ContainerOrValueShape,\n DiscriminatedUnionValueShape,\n DocShape,\n ListContainerShape,\n MovableListContainerShape,\n RecordContainerShape,\n RecordValueShape,\n StringValueShape,\n StructContainerShape,\n StructValueShape,\n UnionValueShape,\n ValueShape,\n} from \"./shape.js\"\nimport type { Infer } from \"./types.js\"\n\n/**\n * Validates a value against a ContainerShape or ValueShape schema\n */\nexport function validateValue(\n value: unknown,\n schema: ContainerOrValueShape,\n path: string = \"\",\n): unknown {\n const currentPath = path || \"root\"\n\n if (!schema || typeof schema !== \"object\" || !(\"_type\" in schema)) {\n throw new SchemaViolationError(currentPath, \"valid schema\", schema)\n }\n\n // Handle AnyContainerShape - no validation, accept anything\n if (schema._type === \"any\") {\n return value\n }\n\n // Handle ContainerShape types\n if (schema._type === \"text\") {\n if (typeof value !== \"string\") {\n throw new SchemaViolationError(currentPath, \"string\", value)\n }\n return value\n }\n\n if (schema._type === \"counter\") {\n if (typeof value !== \"number\") {\n throw new SchemaViolationError(currentPath, \"number\", value)\n }\n return value\n }\n\n if (schema._type === \"list\" || schema._type === \"movableList\") {\n if (!Array.isArray(value)) {\n throw new SchemaViolationError(currentPath, \"array\", value)\n }\n const listSchema = schema as ListContainerShape | MovableListContainerShape\n return value.map((item, index) =>\n validateValue(item, listSchema.shape, `${currentPath}[${index}]`),\n )\n }\n\n if (schema._type === \"struct\") {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new SchemaViolationError(currentPath, \"object\", value)\n }\n const structSchema = schema as StructContainerShape\n const result: Record<string, unknown> = {}\n\n // Validate each property in the struct shape\n for (const [key, nestedSchema] of Object.entries(structSchema.shapes)) {\n const nestedPath = `${currentPath}.${key}`\n const nestedValue = (value as Record<string, unknown>)[key]\n result[key] = validateValue(nestedValue, nestedSchema, nestedPath)\n }\n return result\n }\n\n if (schema._type === \"record\") {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new SchemaViolationError(currentPath, \"object\", value)\n }\n const recordSchema = schema as RecordContainerShape\n const result: Record<string, unknown> = {}\n\n // Validate each property in the record\n for (const [key, nestedValue] of Object.entries(value)) {\n const nestedPath = `${currentPath}.${key}`\n result[key] = validateValue(nestedValue, recordSchema.shape, nestedPath)\n }\n return result\n }\n\n if (schema._type === \"tree\") {\n if (!Array.isArray(value)) {\n throw new SchemaViolationError(currentPath, \"array (tree)\", value)\n }\n // Trees can contain any structure, so we just validate it's an array\n return value\n }\n\n // Handle ValueShape types\n if (schema._type === \"value\") {\n const valueSchema = schema as ValueShape\n\n switch (valueSchema.valueType) {\n // AnyValueShape - no validation, accept anything\n case \"any\":\n return value\n\n case \"string\": {\n if (typeof value !== \"string\") {\n throw new SchemaViolationError(currentPath, \"string\", value)\n }\n const stringSchema = valueSchema as StringValueShape\n if (stringSchema.options && !stringSchema.options.includes(value)) {\n throw new SchemaViolationError(\n currentPath,\n `one of [${stringSchema.options.join(\", \")}]`,\n value,\n )\n }\n return value\n }\n\n case \"number\":\n if (typeof value !== \"number\") {\n throw new SchemaViolationError(currentPath, \"number\", value)\n }\n return value\n\n case \"boolean\":\n if (typeof value !== \"boolean\") {\n throw new SchemaViolationError(currentPath, \"boolean\", value)\n }\n return value\n\n case \"null\":\n if (value !== null) {\n throw new SchemaViolationError(currentPath, \"null\", value)\n }\n return value\n\n case \"undefined\":\n if (value !== undefined) {\n throw new SchemaViolationError(currentPath, \"undefined\", value)\n }\n return value\n\n case \"uint8array\":\n if (!(value instanceof Uint8Array)) {\n throw new SchemaViolationError(currentPath, \"Uint8Array\", value)\n }\n return value\n\n case \"struct\": {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new SchemaViolationError(currentPath, \"object\", value)\n }\n const structSchema = valueSchema as StructValueShape\n const result: Record<string, unknown> = {}\n\n // Validate each property in the struct shape\n for (const [key, nestedSchema] of Object.entries(structSchema.shape)) {\n const nestedPath = `${currentPath}.${key}`\n const nestedValue = (value as Record<string, unknown>)[key]\n result[key] = validateValue(nestedValue, nestedSchema, nestedPath)\n }\n return result\n }\n\n case \"record\": {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new SchemaViolationError(currentPath, \"object\", value)\n }\n const recordSchema = valueSchema as RecordValueShape\n const result: Record<string, unknown> = {}\n\n // Validate each property in the record\n for (const [key, nestedValue] of Object.entries(value)) {\n const nestedPath = `${currentPath}.${key}`\n result[key] = validateValue(\n nestedValue,\n recordSchema.shape,\n nestedPath,\n )\n }\n return result\n }\n\n case \"array\": {\n if (!Array.isArray(value)) {\n throw new SchemaViolationError(currentPath, \"array\", value)\n }\n const arraySchema = valueSchema as ArrayValueShape\n return value.map((item, index) =>\n validateValue(item, arraySchema.shape, `${currentPath}[${index}]`),\n )\n }\n\n case \"union\": {\n const unionSchema = valueSchema as UnionValueShape\n\n // Try to validate against each shape in the union\n for (const shape of unionSchema.shapes) {\n try {\n return validateValue(value, shape, currentPath)\n } catch {\n // Continue to next shape in union\n }\n }\n\n throw new SchemaViolationError(currentPath, \"one of union types\", value)\n }\n\n case \"discriminatedUnion\": {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new SchemaViolationError(currentPath, \"object\", value)\n }\n\n const unionSchema = valueSchema as DiscriminatedUnionValueShape\n const discriminantKey = unionSchema.discriminantKey\n const discriminantValue = (value as Record<string, unknown>)[\n discriminantKey\n ]\n\n if (typeof discriminantValue !== \"string\") {\n throw new SchemaViolationError(\n `${currentPath}.${discriminantKey}`,\n \"string (discriminant)\",\n discriminantValue,\n )\n }\n\n const variantSchema = unionSchema.variants[discriminantValue]\n\n if (!variantSchema) {\n throw new SchemaViolationError(\n `${currentPath}.${discriminantKey}`,\n `one of [${Object.keys(unionSchema.variants).join(\", \")}]`,\n discriminantValue,\n )\n }\n\n return validateValue(value, variantSchema, currentPath)\n }\n\n default:\n throw new SchemaViolationError(\n currentPath,\n \"known value type\",\n (valueSchema as any).valueType,\n )\n }\n }\n\n throw new SchemaViolationError(currentPath, \"known schema type\", schema)\n}\n\n/**\n * Validates placeholder against schema structure without using Zod\n * Combines the functionality of createPlaceholderValidator and createValueValidator\n */\nexport function validatePlaceholder<T extends DocShape>(\n placeholder: unknown,\n schema: T,\n): Infer<T> {\n if (\n !placeholder ||\n typeof placeholder !== \"object\" ||\n Array.isArray(placeholder)\n ) {\n throw new Error(\"Placeholder must be an object\")\n }\n\n const result: Record<string, unknown> = {}\n\n // Validate each property in the document schema\n for (const [key, schemaValue] of Object.entries(schema.shapes)) {\n const value = (placeholder as Record<string, unknown>)[key]\n result[key] = validateValue(value, schemaValue, key)\n }\n\n return result as Infer<T>\n}\n","import type { LoroEventBatch, Subscription } from \"loro-crdt\"\nimport { type ChangeOptions, serializeCommitMessage } from \"./change-options.js\"\nimport { createDiffOverlay } from \"./diff-overlay.js\"\nimport { EXT_SYMBOL, ext } from \"./ext.js\"\nimport { LORO_SYMBOL, loro } from \"./loro.js\"\nimport type { PathBuilder, PathSelector } from \"./path-selector.js\"\nimport { subscribeToPath } from \"./path-subscription.js\"\nimport type {\n ContainerOrValueShape,\n ContainerShape,\n DocShape,\n RefMode,\n StructContainerShape,\n TreeRefInterface,\n} from \"./shape.js\"\nimport { createTypedDoc, type TypedDoc } from \"./typed-doc.js\"\nimport { INTERNAL_SYMBOL, type TypedRef } from \"./typed-refs/base.js\"\nimport type { ListRef } from \"./typed-refs/list-ref.js\"\nimport type { MovableListRef } from \"./typed-refs/movable-list-ref.js\"\nimport type { IndexedRecordRef } from \"./typed-refs/record-ref.js\"\nimport type { StructRef } from \"./typed-refs/struct-ref.js\"\nimport type { TreeRef } from \"./typed-refs/tree-ref.js\"\nimport { createContainerTypedRef } from \"./typed-refs/utils.js\"\n\n// Helper type to extract the draft type from an object with [EXT_SYMBOL].change()\ntype ExtractDraft<T> = T extends {\n [EXT_SYMBOL]: {\n change: (fn: (draft: infer D) => void, options?: ChangeOptions) => void\n }\n}\n ? D\n : never\n\n/**\n * The primary method of mutating typed documents and refs.\n * Batches multiple mutations into a single transaction.\n * All changes commit together at the end.\n *\n * Use this for:\n * - Find-and-mutate operations (required due to JS limitations)\n * - Performance (fewer commits)\n * - Atomic undo (all changes = one undo step)\n *\n * Returns the doc/ref for chaining.\n *\n * @param target - The TypedDoc, TypedRef, or any object with [EXT_SYMBOL].change() to mutate\n * @param fn - Function that performs mutations on the draft\n * @param options - Optional configuration including commit message\n * @returns The same target for chaining\n *\n * @example\n * ```typescript\n * import { change } from \"@loro-extended/change\"\n *\n * // Document-level change (chainable)\n * change(doc, draft => {\n * draft.count.increment(10)\n * draft.title.update(\"Hello\")\n * })\n * .count.increment(5) // Optional: continue mutating\n * .toJSON() // Optional: get snapshot\n *\n * // With commit message for identity-based filtering\n * change(doc, draft => {\n * draft.count.increment(10)\n * }, { commitMessage: { userId: \"alice\" } })\n *\n * // Ref-level change - enables encapsulation\n * function addItems(list: ListRef<...>) {\n * change(list, draft => {\n * draft.push({ name: \"item1\" })\n * draft.push({ name: \"item2\" })\n * })\n * }\n *\n * // TreeRef example - pass around refs without exposing the doc\n * function addStates(states: TreeRef<StateShape>) {\n * change(states, draft => {\n * draft.createNode({ name: \"idle\" })\n * draft.createNode({ name: \"running\" })\n * })\n * }\n *\n * // Lens example - works with any object that has [EXT_SYMBOL].change()\n * change(lens, draft => {\n * draft.counter.increment(5)\n * }, { commitMessage: { playerId: \"alice\" } })\n * ```\n */\n// NOTE: There is intentionally NO overload for TypedDoc<Shape> here.\n// TypedDoc (and types that extend it like Doc<D, E>) are handled by the\n// generic [EXT_SYMBOL] overload below, which extracts the draft type from\n// the [EXT_SYMBOL].change signature. This works correctly for:\n// - TypedDoc<D> directly\n// - Doc<D, E> = TypedDoc<D> & { __ephemeralType?: E }\n// - Any other intersection type extending TypedDoc\n\n// Overload for TreeRef (special case - not a TypedRef<ContainerShape>)\nexport function change<DataShape extends StructContainerShape>(\n ref: TreeRef<DataShape>,\n fn: (draft: TreeRef<DataShape>) => void,\n options?: ChangeOptions,\n): TreeRef<DataShape>\n\n// Overload for TreeRefInterface (the mutable type from TreeContainerShape)\nexport function change<DataShape extends StructContainerShape>(\n ref: TreeRefInterface<DataShape>,\n fn: (draft: TreeRefInterface<DataShape>) => void,\n options?: ChangeOptions,\n): TreeRefInterface<DataShape>\n\n// Overload for StructRef (special case - uses Proxy, not a class extending TypedRef)\n// This must come before the generic TypedRef overload to match StructRef properly\n// Note: The draft uses \"draft\" mode for ergonomic plain value access inside change()\nexport function change<\n NestedShapes extends Record<string, ContainerOrValueShape>,\n Mode extends RefMode = \"mutable\",\n>(\n ref: StructRef<NestedShapes, Mode>,\n fn: (draft: StructRef<NestedShapes, \"draft\">) => void,\n options?: ChangeOptions,\n): StructRef<NestedShapes, Mode>\n\n// Overload for ListRef - draft uses \"draft\" mode for ergonomic element access\nexport function change<\n NestedShape extends ContainerOrValueShape,\n Mode extends RefMode = \"mutable\",\n>(\n ref: ListRef<NestedShape, Mode>,\n fn: (draft: ListRef<NestedShape, \"draft\">) => void,\n options?: ChangeOptions,\n): ListRef<NestedShape, Mode>\n\n// Overload for MovableListRef - draft uses \"draft\" mode for ergonomic element access\nexport function change<\n NestedShape extends ContainerOrValueShape,\n Mode extends RefMode = \"mutable\",\n>(\n ref: MovableListRef<NestedShape, Mode>,\n fn: (draft: MovableListRef<NestedShape, \"draft\">) => void,\n options?: ChangeOptions,\n): MovableListRef<NestedShape, Mode>\n\n// Overload for IndexedRecordRef - draft uses \"draft\" mode for ergonomic element access\nexport function change<\n NestedShape extends ContainerOrValueShape,\n Mode extends RefMode = \"mutable\",\n>(\n ref: IndexedRecordRef<NestedShape, Mode>,\n fn: (draft: IndexedRecordRef<NestedShape, \"draft\">) => void,\n options?: ChangeOptions,\n): IndexedRecordRef<NestedShape, Mode>\n\n// Overload for TypedRef (all container refs) - preserves concrete ref type\nexport function change<T extends TypedRef<ContainerShape>>(\n ref: T,\n fn: (draft: T) => void,\n options?: ChangeOptions,\n): T\n\n// Generic overload for any object with [EXT_SYMBOL].change() (e.g., Lens)\n// This enables change(lens, fn, options) without importing Lens type\n// The draft type is extracted from the [EXT_SYMBOL].change signature\nexport function change<\n T extends {\n [EXT_SYMBOL]: {\n change: (fn: (draft: any) => void, options?: ChangeOptions) => void\n }\n },\n>(target: T, fn: (draft: ExtractDraft<T>) => void, options?: ChangeOptions): T\n\n// Implementation\nexport function change(\n target:\n | TypedDoc<any>\n | TypedRef<any>\n | TreeRef<any>\n | TreeRefInterface<any>\n | StructRef<any>\n | { [EXT_SYMBOL]: { change: unknown } },\n fn: (draft: any) => void,\n options?: ChangeOptions,\n):\n | TypedDoc<any>\n | TypedRef<any>\n | TreeRef<any>\n | TreeRefInterface<any>\n | StructRef<any> {\n // Check if it's a TypedDoc or Lens by checking for EXT_SYMBOL with change method\n // This handles both TypedDoc and any object that implements [EXT_SYMBOL].change()\n const extNs = (target as any)[EXT_SYMBOL]\n if (extNs && \"change\" in extNs) {\n // It's a TypedDoc or Lens - use ext().change() with options\n return extNs.change(fn, options)\n }\n\n // It's a TypedRef or TreeRef - use ref-level change logic\n return changeRef(target as TypedRef<any> | TreeRef<any>, fn, options)\n}\n\n/**\n * Internal implementation for ref-level change.\n * Creates a draft ref with batchedMutation=true, executes the function,\n * absorbs changes, and commits.\n */\nfunction changeRef<T extends TypedRef<any> | TreeRef<any>>(\n ref: T,\n fn: (draft: T) => void,\n options?: ChangeOptions,\n): T {\n // Get internals via INTERNAL_SYMBOL\n const internals = (ref as any)[INTERNAL_SYMBOL]\n if (!internals) {\n throw new Error(\n \"change() requires a TypedRef with internal methods. \" +\n \"Make sure you're passing a valid typed ref.\",\n )\n }\n\n // Get the params needed to create a draft\n const params = internals.getTypedRefParams()\n\n // Create draft params with batchedMutation enabled and autoCommit disabled\n const draftParams = {\n ...params,\n autoCommit: false,\n batchedMutation: true,\n }\n\n // Create the draft ref using the same factory that created the original\n const draft = createContainerTypedRef(draftParams) as T\n\n // Execute the user's function with the draft\n fn(draft)\n\n // Finalize the transaction (e.g., clear caches to prevent stale refs)\n const draftInternals = (draft as any)[INTERNAL_SYMBOL]\n draftInternals.finalizeTransaction?.()\n\n // Set commit message if provided\n const loroDoc = internals.getDoc()\n const serializedMessage = serializeCommitMessage(options?.commitMessage)\n if (serializedMessage) {\n loroDoc.setNextCommitMessage(serializedMessage)\n }\n\n // Commit the changes\n // Note: Loro's commit() is idempotent, so nested calls are safe\n loroDoc.commit()\n\n // Return the original ref for chaining\n return ref\n}\n\n// ============================================================================\n// subscribe() function\n// ============================================================================\n\n/**\n * Subscribe to changes on a TypedDoc or TypedRef.\n *\n * @overload subscribe(doc, callback) - Subscribe to all document changes\n * @overload subscribe(doc, selector, callback) - Subscribe to path-selected changes with type inference\n * @overload subscribe(ref, callback) - Subscribe to a specific container's changes\n *\n * @example\n * ```typescript\n * import { subscribe, change } from \"@loro-extended/change\"\n *\n * // Whole document subscription\n * const unsubscribe = subscribe(doc, (event) => {\n * console.log(\"Document changed:\", event)\n * })\n *\n * // Path-selector subscription (type-safe!)\n * subscribe(doc, p => p.config.theme, (theme) => {\n * console.log(\"Theme changed:\", theme) // theme is typed as string\n * })\n *\n * // Wildcard path returns array\n * subscribe(doc, p => p.books.$each.title, (titles) => {\n * console.log(\"Book titles:\", titles) // titles is typed as string[]\n * })\n *\n * // Ref subscription - subscribes to specific container only\n * subscribe(doc.config, (event) => {\n * console.log(\"Config changed\")\n * })\n *\n * // Unsubscribe when done\n * unsubscribe()\n * ```\n */\n\n// Overload 1: Whole document subscription (2 args, first is TypedDoc)\nexport function subscribe<D extends DocShape>(\n doc: TypedDoc<D>,\n callback: (event: LoroEventBatch) => void,\n): () => void\n\n// Overload 2: Path-selector subscription (3 args)\nexport function subscribe<D extends DocShape, R>(\n doc: TypedDoc<D>,\n selector: (p: PathBuilder<D>) => PathSelector<R>,\n callback: (value: R) => void,\n): () => void\n\n// Overload 3a: StructRef subscription\nexport function subscribe<\n NestedShapes extends Record<string, ContainerOrValueShape>,\n>(\n ref: StructRef<NestedShapes>,\n callback: (event: LoroEventBatch) => void,\n): () => void\n\n// Overload 3b: TreeRef subscription\nexport function subscribe<DataShape extends StructContainerShape>(\n ref: TreeRef<DataShape>,\n callback: (event: LoroEventBatch) => void,\n): () => void\n\n// Overload 3c: TreeRefInterface subscription\nexport function subscribe<DataShape extends StructContainerShape>(\n ref: TreeRefInterface<DataShape>,\n callback: (event: LoroEventBatch) => void,\n): () => void\n\n// Overload 3d: Generic TypedRef subscription (2 args, first is TypedRef)\nexport function subscribe<Shape extends ContainerShape>(\n ref: TypedRef<Shape>,\n callback: (event: LoroEventBatch) => void,\n): () => void\n\n// Implementation\nexport function subscribe(\n target:\n | TypedDoc<any>\n | TypedRef<any>\n | StructRef<any>\n | TreeRef<any>\n | TreeRefInterface<any>,\n selectorOrCallback:\n | ((p: PathBuilder<any>) => PathSelector<any>)\n | ((event: LoroEventBatch) => void)\n | (() => void),\n callback?: ((value: any) => void) | ((event: LoroEventBatch) => void),\n): () => void {\n // Detect which overload based on argument count and type\n const hasThreeArgs = callback !== undefined\n\n if (hasThreeArgs) {\n // Overload 2: Path-selector subscription (doc, selector, callback)\n const doc = target as TypedDoc<any>\n const selector = selectorOrCallback as (\n p: PathBuilder<any>,\n ) => PathSelector<any>\n const cb = callback as (value: any) => void\n return subscribeToPath(doc, selector, cb)\n }\n\n // Two arguments - need to distinguish between doc and ref\n const extNs = (target as any)[EXT_SYMBOL]\n const isDoc = extNs && \"docShape\" in extNs\n const isRef = LORO_SYMBOL in target && !isDoc\n\n if (isDoc) {\n // Overload 1: Whole document subscription\n // Access the LoroDoc directly via symbol to avoid type issues with TypedDoc<any>\n const loroDoc = (target as any)[LORO_SYMBOL]\n const cb = selectorOrCallback as (event: LoroEventBatch) => void\n const subscription: Subscription = loroDoc.subscribe(cb)\n return () => subscription()\n }\n\n if (isRef) {\n // Overload 3: Ref subscription\n // Access the Loro container directly via symbol to avoid type issues\n const loroContainer = (target as any)[LORO_SYMBOL]\n const cb = selectorOrCallback as (event: LoroEventBatch) => void\n // Loro containers have a subscribe method\n const subscription: Subscription = loroContainer.subscribe(cb)\n return () => subscription()\n }\n\n throw new Error(\n \"subscribe() requires a TypedDoc or TypedRef. \" +\n \"Make sure you're passing a valid typed document or container reference.\",\n )\n}\n\nexport type Transition<Shape extends DocShape> = {\n before: TypedDoc<Shape>\n after: TypedDoc<Shape>\n}\n\n/**\n * Build a `{ before, after }` transition from a TypedDoc and a Loro event batch.\n * Uses a reverse diff overlay to compute the \"before\" view without checkout.\n * Throws on checkout events to avoid time-travel transitions.\n */\nexport function getTransition<Shape extends DocShape>(\n doc: TypedDoc<Shape>,\n event: LoroEventBatch,\n): Transition<Shape> {\n if (event.by === \"checkout\") {\n throw new Error(\"getTransition does not support checkout events\")\n }\n\n const loroDoc = loro(doc)\n const shape = ext(doc).docShape as Shape\n const overlay = createDiffOverlay(loroDoc, event)\n\n return {\n before: createTypedDoc(shape, { doc: loroDoc, overlay }),\n after: createTypedDoc(shape, { doc: loroDoc }),\n }\n}\n","/**\n * Creates a proxy around a placeholder value (plain object/array) that mimics\n * the behavior of TypedRef, specifically adding a .toJSON() method.\n *\n * This ensures consistent UX where users can call .toJSON() on document state\n * regardless of whether it's loading (placeholder) or loaded (live ref).\n */\nexport function createPlaceholderProxy<T extends object>(target: T): T {\n // Cache for wrapped properties to ensure referential stability\n const cache = new Map<string | symbol, any>()\n\n return new Proxy(target, {\n get(target, prop, receiver) {\n // Intercept .toJSON()\n if (prop === \"toJSON\") {\n return () => target\n }\n\n // Check cache first\n if (cache.has(prop)) {\n return cache.get(prop)\n }\n\n // Get value from target\n const value = Reflect.get(target, prop, receiver)\n\n // Recursively wrap objects/arrays\n if (value && typeof value === \"object\") {\n const wrapped = createPlaceholderProxy(value)\n cache.set(prop, wrapped)\n return wrapped\n }\n\n return value\n },\n })\n}\n","import type {\n Container,\n ContainerID,\n CounterDiff,\n Diff,\n ListDiff,\n LoroCounter,\n LoroDoc,\n LoroList,\n LoroMap,\n LoroMovableList,\n LoroText,\n LoroTree,\n MapDiff,\n TextDiff,\n TreeDiff,\n TreeDiffItem,\n Value,\n} from \"loro-crdt\"\n\n/**\n * Replay a diff as local operations on a document.\n *\n * Unlike doc.import() which creates import events, this creates LOCAL events\n * that are captured by subscribeLocalUpdates() and UndoManager.\n *\n * @param doc - The target document to apply changes to\n * @param diff - The diff from doc.diff(from, to, false)\n */\nexport function replayDiff(doc: LoroDoc, diff: [ContainerID, Diff][]): void {\n // Map from source container IDs to target containers\n // This is needed because when we create new containers, they get different IDs\n const containerMap = new Map<ContainerID, Container>()\n\n for (const [containerId, containerDiff] of diff) {\n // First, try to get the container from our map (for newly created containers)\n let container = containerMap.get(containerId)\n\n // If not in map, try to get it from the doc (for existing containers)\n if (!container) {\n container = doc.getContainerById(containerId)\n }\n\n if (!container) {\n // Container doesn't exist yet - this can happen for newly created containers\n // that haven't been mapped yet. Skip for now, it will be created when\n // processing the parent container's diff.\n continue\n }\n\n switch (containerDiff.type) {\n case \"text\":\n replayTextDiff(container as LoroText, containerDiff)\n break\n case \"list\":\n replayListDiff(\n container as LoroList | LoroMovableList,\n containerDiff,\n containerMap,\n )\n break\n case \"map\":\n replayMapDiff(container as LoroMap, containerDiff, containerMap)\n break\n case \"tree\":\n replayTreeDiff(container as LoroTree, containerDiff)\n break\n case \"counter\":\n replayCounterDiff(container as LoroCounter, containerDiff)\n break\n }\n }\n}\n\n/**\n * Replay text diff operations\n */\nfunction replayTextDiff(text: LoroText, diff: TextDiff): void {\n // LoroText has applyDelta which handles the delta format directly\n text.applyDelta(diff.diff)\n}\n\n/**\n * Replay list diff operations\n */\nfunction replayListDiff(\n list: LoroList | LoroMovableList,\n diff: ListDiff,\n containerMap: Map<ContainerID, Container>,\n): void {\n let index = 0\n\n for (const delta of diff.diff) {\n if (delta.retain !== undefined) {\n // Retain: skip over existing elements\n index += delta.retain\n } else if (delta.delete !== undefined) {\n // Delete: remove elements at current position\n list.delete(index, delta.delete)\n // Don't advance index - next operation is at same position\n } else if (delta.insert !== undefined) {\n // Insert: add elements at current position\n const values = delta.insert\n for (let i = 0; i < values.length; i++) {\n const value = values[i]\n if (isContainer(value)) {\n // For containers, we need to insert a new container of the same type\n // The container's contents will be handled by its own diff entry\n const newContainer = createContainerOfSameType(value)\n const insertedContainer = (list as LoroList).insertContainer(\n index + i,\n newContainer,\n )\n // Map the source container ID to the newly created container\n containerMap.set(value.id, insertedContainer)\n } else {\n ;(list as LoroList).insert(\n index + i,\n value as Exclude<Value, Container>,\n )\n }\n }\n index += values.length\n }\n }\n}\n\n/**\n * Replay map diff operations\n */\nfunction replayMapDiff(\n map: LoroMap,\n diff: MapDiff,\n containerMap: Map<ContainerID, Container>,\n): void {\n for (const [key, value] of Object.entries(diff.updated)) {\n if (value === undefined) {\n // Delete the key\n map.delete(key)\n } else if (isContainer(value)) {\n // Set a container - create a new one of the same type\n const newContainer = createContainerOfSameType(value)\n const insertedContainer = map.setContainer(key, newContainer)\n // Map the source container ID to the newly created container\n containerMap.set(value.id, insertedContainer)\n } else {\n // Set a primitive value\n map.set(key, value as Exclude<Value, Container>)\n }\n }\n}\n\n/**\n * Replay tree diff operations\n */\nfunction replayTreeDiff(tree: LoroTree, diff: TreeDiff): void {\n for (const item of diff.diff) {\n replayTreeDiffItem(tree, item)\n }\n}\n\n/**\n * Replay a single tree diff item\n */\nfunction replayTreeDiffItem(tree: LoroTree, item: TreeDiffItem): void {\n switch (item.action) {\n case \"create\":\n // Create a new node under the specified parent\n // Note: The node ID is determined by the CRDT, we can't specify it\n // This means we're creating a NEW node, not recreating the exact same one\n tree.createNode(item.parent, item.index)\n break\n case \"delete\":\n // Delete the node\n tree.delete(item.target)\n break\n case \"move\":\n // Move the node to a new parent/position\n tree.move(item.target, item.parent, item.index)\n break\n }\n}\n\n/**\n * Replay counter diff operations\n */\nfunction replayCounterDiff(counter: LoroCounter, diff: CounterDiff): void {\n if (diff.increment > 0) {\n counter.increment(diff.increment)\n } else if (diff.increment < 0) {\n counter.decrement(-diff.increment)\n }\n // If increment is 0, no operation needed\n}\n\n/**\n * Check if a value is a Container\n */\nfunction isContainer(value: Value | Container): value is Container {\n return (\n value !== null &&\n typeof value === \"object\" &&\n \"kind\" in value &&\n typeof (value as Container).kind === \"function\"\n )\n}\n\n/**\n * Create a new detached container of the same type as the given container\n */\nfunction createContainerOfSameType(container: Container): Container {\n const kind = container.kind()\n switch (kind) {\n case \"List\":\n return new (container.constructor as new () => LoroList)()\n case \"Map\":\n return new (container.constructor as new () => LoroMap)()\n case \"Text\":\n return new (container.constructor as new () => LoroText)()\n case \"Tree\":\n return new (container.constructor as new () => LoroTree)()\n case \"Counter\":\n return new (container.constructor as new () => LoroCounter)()\n case \"MovableList\":\n return new (container.constructor as new () => LoroMovableList)()\n default:\n throw new Error(`Unknown container kind: ${kind}`)\n }\n}\n","// biome-ignore-all lint/suspicious/noExplicitAny: required\n\nimport type {\n LoroCounter,\n LoroList,\n LoroMap,\n LoroMovableList,\n LoroText,\n LoroTree,\n TreeID,\n Value,\n} from \"loro-crdt\"\n\nimport { LORO_SYMBOL } from \"./loro.js\"\nimport type {\n DeepPlainValueRef,\n PlainValueRef,\n} from \"./plain-value-ref/types.js\"\nimport type { CounterRef } from \"./typed-refs/counter-ref.js\"\nimport type { ListRef } from \"./typed-refs/list-ref.js\"\nimport type { MovableListRef } from \"./typed-refs/movable-list-ref.js\"\nimport type { IndexedRecordRef } from \"./typed-refs/record-ref.js\"\nimport type { StructRef } from \"./typed-refs/struct-ref.js\"\nimport type { TextRef } from \"./typed-refs/text-ref.js\"\nimport type { TreeNodeRef } from \"./typed-refs/tree-node-ref.js\"\n\n/**\n * Mode for accessing typed refs - determines whether property types use\n * the reactive wrapper (mutable) or plain types (draft).\n *\n * - `\"mutable\"`: Used for direct access outside `change()`. Value shapes return `PlainValueRef<T>`.\n * - `\"draft\"`: Used inside `change()` callbacks. Value shapes return plain `T` for ergonomic mutation.\n */\nexport type RefMode = \"mutable\" | \"draft\"\n\n/**\n * Helper to select type based on RefMode.\n * Extracts `_mutable` or `_draft` from a shape based on the mode.\n * Used by container refs to switch between mutable and draft property types.\n *\n * The result is passed through `Deepen` to expand `PlainValueRef<T>` into\n * `DeepPlainValueRef<T>` when T is a plain object, enabling nested property\n * access like `ref.metadata.author.get()`.\n */\nexport type SelectByMode<\n S extends Shape<any, any, any, any>,\n Mode extends RefMode,\n> = Deepen<Mode extends \"mutable\" ? S[\"_mutable\"] : S[\"_draft\"]>\n\n/**\n * Expands PlainValueRef<T> into DeepPlainValueRef<T> so that object-typed\n * PlainValueRefs expose nested properties.\n *\n * This is applied at the access point (SelectByMode) rather than in the\n * shape definitions to avoid circular type references in the shape system.\n */\ntype Deepen<T> = T extends PlainValueRef<infer U> ? DeepPlainValueRef<U> : T\n\nexport interface Shape<Plain, Mutable, Draft = Mutable, Placeholder = Plain> {\n readonly _type: string\n readonly _plain: Plain\n readonly _mutable: Mutable\n readonly _draft: Draft\n readonly _placeholder: Placeholder\n}\n\n// Type for shapes that support placeholder customization\nexport type WithPlaceholder<S extends Shape<any, any, any, any>> = S & {\n placeholder(value: S[\"_placeholder\"]): S\n}\n\n/**\n * Type for value shapes that support the .nullable() method.\n * Returns a union of null and the original shape with null as the default placeholder.\n */\nexport type WithNullable<S extends ValueShape> = {\n nullable(): WithPlaceholder<UnionValueShape<[NullValueShape, S]>>\n}\n\n/**\n * Options for configuring a document schema.\n */\nexport interface DocShapeOptions {\n /**\n * When true, all containers are stored at the document root with path-based names.\n * This ensures container IDs are deterministic and survive `applyDiff`, enabling\n * proper merging of concurrent container creation.\n *\n * Benefits:\n * - Concurrent container creation at the same schema path merges correctly\n * - Works correctly with `applyDiff` (e.g., Lens worldview → world propagation)\n * - Deterministic container IDs across peers\n *\n * Note: Lists of containers (`Shape.list(Shape.struct({...}))`) are unaffected\n * by this setting—they always use hierarchical storage with peer-dependent IDs.\n *\n * @default true\n */\n mergeable?: boolean\n}\n\nexport interface DocShape<\n NestedShapes extends Record<string, ContainerShape> = Record<\n string,\n ContainerShape\n >,\n> extends Shape<\n { [K in keyof NestedShapes]: NestedShapes[K][\"_plain\"] },\n { [K in keyof NestedShapes]: NestedShapes[K][\"_mutable\"] },\n { [K in keyof NestedShapes]: NestedShapes[K][\"_draft\"] },\n { [K in keyof NestedShapes]: NestedShapes[K][\"_placeholder\"] }\n > {\n readonly _type: \"doc\"\n // A doc's root containers each separately has its own shape, hence 'shapes'\n readonly shapes: NestedShapes\n /**\n * Whether this document uses mergeable (flattened) storage.\n * When true, containers are stored at the document root with path-based names.\n */\n readonly mergeable?: boolean\n}\n\nexport interface TextContainerShape\n extends Shape<string, TextRef, TextRef, string> {\n readonly _type: \"text\"\n}\nexport interface CounterContainerShape\n extends Shape<number, CounterRef, CounterRef, number> {\n readonly _type: \"counter\"\n}\n/**\n * JSON representation of a tree node with typed data.\n * Used for serialization (toJSON) of tree structures.\n */\nexport type TreeNodeJSON<DataShape extends StructContainerShape> = {\n id: TreeID\n parent: TreeID | null\n index: number\n fractionalIndex: string\n data: DataShape[\"_plain\"]\n children: TreeNodeJSON<DataShape>[]\n}\n\n/**\n * Interface describing the TreeRef API for use in shape definitions.\n * This avoids circular type references that would occur with the TreeRef class.\n * @internal\n */\nexport interface TreeRefInterface<DataShape extends StructContainerShape> {\n /** Get or create a node ref for a LoroTreeNode */\n getOrCreateNodeRef(node: unknown): TreeNodeRef<DataShape>\n /** Get a node by its ID */\n getNodeByID(id: TreeID): TreeNodeRef<DataShape> | undefined\n /** Delete a node from the tree */\n delete(target: TreeID | TreeNodeRef<DataShape>): void\n /** Serialize the tree to a nested JSON structure */\n toJSON(): TreeNodeJSON<DataShape>[]\n /** Create a new root node with optional initial data */\n createNode(initialData?: Partial<DataShape[\"_plain\"]>): TreeNodeRef<DataShape>\n /** Get all root nodes (nodes without parents) */\n roots(): TreeNodeRef<DataShape>[]\n /** Get all nodes in the tree (unordered). By default excludes deleted nodes. */\n nodes(options?: { includeDeleted?: boolean }): TreeNodeRef<DataShape>[]\n /** Check if a node with the given ID exists in the tree */\n has(id: TreeID): boolean\n /** Enable fractional index generation for ordering */\n enableFractionalIndex(jitter?: number): void\n /** Get a flat array representation of all nodes */\n toArray(): Array<{\n id: TreeID\n parent: TreeID | null\n index: number\n fractionalIndex: string\n data: DataShape[\"_plain\"]\n }>\n\n /**\n * Access CRDT internals via the well-known symbol.\n * Returns LoroTree directly.\n */\n readonly [LORO_SYMBOL]: LoroTree\n}\n\n/**\n * Container shape for tree (forest) structures.\n * Each node in the tree has typed metadata stored in a LoroMap.\n *\n * @example\n * ```typescript\n * const StateNodeDataShape = Shape.struct({\n * name: Shape.text(),\n * facts: Shape.record(Shape.plain.any()),\n * })\n *\n * const Schema = Shape.doc({\n * states: Shape.tree(StateNodeDataShape),\n * })\n * ```\n */\nexport interface TreeContainerShape<\n DataShape extends StructContainerShape = StructContainerShape,\n> extends Shape<\n TreeNodeJSON<DataShape>[],\n TreeRefInterface<DataShape>,\n TreeRefInterface<DataShape>,\n never[]\n > {\n readonly _type: \"tree\"\n /**\n * The shape of each node's data (metadata).\n * This is a StructContainerShape that defines the typed properties on node.data.\n */\n readonly shape: DataShape\n}\n\n// Container schemas using interfaces for recursive references\n// NOTE: List and Record use never[] and Record<string, never> for Placeholder\n// to enforce that only empty values ([] and {}) are valid in placeholder state.\n// This prevents users from expecting per-entry merging behavior.\nexport interface ListContainerShape<\n NestedShape extends ContainerOrValueShape = ContainerOrValueShape,\n> extends Shape<\n NestedShape[\"_plain\"][],\n ListRef<NestedShape, \"mutable\">,\n ListRef<NestedShape, \"draft\">,\n never[]\n > {\n readonly _type: \"list\"\n // A list contains many elements, all of the same 'shape'\n readonly shape: NestedShape\n}\n\nexport interface MovableListContainerShape<\n NestedShape extends ContainerOrValueShape = ContainerOrValueShape,\n> extends Shape<\n NestedShape[\"_plain\"][],\n MovableListRef<NestedShape, \"mutable\">,\n MovableListRef<NestedShape, \"draft\">,\n never[]\n > {\n readonly _type: \"movableList\"\n // A list contains many elements, all of the same 'shape'\n readonly shape: NestedShape\n}\n\n/**\n * Container shape for objects with fixed keys (structs).\n * This is the preferred way to define fixed-key objects.\n * Uses LoroMap as the underlying container.\n */\nexport interface StructContainerShape<\n NestedShapes extends Record<string, ContainerOrValueShape> = Record<\n string,\n ContainerOrValueShape\n >,\n> extends Shape<\n { [K in keyof NestedShapes]: NestedShapes[K][\"_plain\"] },\n StructRef<NestedShapes, \"mutable\">,\n StructRef<NestedShapes, \"draft\">,\n { [K in keyof NestedShapes]: NestedShapes[K][\"_placeholder\"] }\n > {\n readonly _type: \"struct\"\n // Each struct property has its own shape, hence 'shapes'\n readonly shapes: NestedShapes\n}\n\nexport interface RecordContainerShape<\n NestedShape extends ContainerOrValueShape = ContainerOrValueShape,\n> extends Shape<\n Record<string, NestedShape[\"_plain\"]>,\n IndexedRecordRef<NestedShape, \"mutable\">,\n IndexedRecordRef<NestedShape, \"draft\">,\n Record<string, never>\n > {\n readonly _type: \"record\"\n readonly shape: NestedShape\n}\n\n/**\n * Container escape hatch - represents \"any LoroContainer\".\n * Use this when integrating with external libraries that manage their own document structure.\n *\n * @example\n * ```typescript\n * // loro-prosemirror manages its own structure\n * const ProseMirrorDocShape = Shape.doc({\n * doc: Shape.any(), // opt out of typing for this container\n * })\n * ```\n */\nexport interface AnyContainerShape\n extends Shape<unknown, unknown, unknown, undefined> {\n readonly _type: \"any\"\n}\n\n/**\n * Union of all container shape types.\n *\n * Each container shape has a `_mutable` type parameter that maps to the\n * corresponding TypedRef class (e.g., TextContainerShape → TextRef).\n * This enables deriving ref types from shapes:\n *\n * ```typescript\n * // Get the ref type for any container shape\n * type RefType = ContainerShape[\"_mutable\"]\n *\n * // Exclude AnyContainerShape to get only typed refs\n * type AnyTypedRef = Exclude<ContainerShape, AnyContainerShape>[\"_mutable\"]\n * ```\n *\n * This creates intentional parallel hierarchies:\n * - ContainerShape → defines what data looks like (schema)\n * - TypedRef (via _mutable) → defines how you interact with data\n * - loro() overloads → CRDT escape hatch (IDE DX)\n * - change() overloads → mutation boundaries (IDE DX)\n */\nexport type ContainerShape =\n | AnyContainerShape\n | CounterContainerShape\n | ListContainerShape\n | MovableListContainerShape\n | RecordContainerShape\n | StructContainerShape\n | TextContainerShape\n | TreeContainerShape\n\nexport type ContainerType = ContainerShape[\"_type\"]\n\n// LoroValue shape types - a shape for each of Loro's Value types\n// NOTE: Both _mutable and _draft return PlainValueRef<T>.\n// Use .get() to read and .set() to write uniformly inside and outside change().\nexport interface StringValueShape<T extends string = string>\n extends Shape<T, PlainValueRef<T>, PlainValueRef<T>, T> {\n readonly _type: \"value\"\n readonly valueType: \"string\"\n readonly options?: T[]\n}\nexport interface NumberValueShape\n extends Shape<number, PlainValueRef<number>, PlainValueRef<number>, number> {\n readonly _type: \"value\"\n readonly valueType: \"number\"\n}\nexport interface BooleanValueShape\n extends Shape<\n boolean,\n PlainValueRef<boolean>,\n PlainValueRef<boolean>,\n boolean\n > {\n readonly _type: \"value\"\n readonly valueType: \"boolean\"\n}\nexport interface NullValueShape\n extends Shape<null, PlainValueRef<null>, PlainValueRef<null>, null> {\n readonly _type: \"value\"\n readonly valueType: \"null\"\n}\nexport interface UndefinedValueShape\n extends Shape<\n undefined,\n PlainValueRef<undefined>,\n PlainValueRef<undefined>,\n undefined\n > {\n readonly _type: \"value\"\n readonly valueType: \"undefined\"\n}\nexport interface Uint8ArrayValueShape\n extends Shape<\n Uint8Array,\n PlainValueRef<Uint8Array>,\n PlainValueRef<Uint8Array>,\n Uint8Array\n > {\n readonly _type: \"value\"\n readonly valueType: \"uint8array\"\n}\n\n/**\n * Value shape for objects with fixed keys (structs).\n * This is the preferred way to define fixed-key plain value objects.\n * Identical structure to ObjectValueShape but with valueType: \"struct\".\n *\n * - `_mutable`: Returns PlainValueRef with nested property access via Proxy\n * - `_draft`: Same as _mutable (PlainValueRef) for unified method-based API\n */\nexport interface StructValueShape<\n T extends Record<string, ValueShape> = Record<string, ValueShape>,\n> extends Shape<\n { [K in keyof T]: T[K][\"_plain\"] },\n PlainValueRef<{ [K in keyof T]: T[K][\"_plain\"] }>,\n PlainValueRef<{ [K in keyof T]: T[K][\"_plain\"] }>,\n { [K in keyof T]: T[K][\"_placeholder\"] }\n > {\n readonly _type: \"value\"\n readonly valueType: \"struct\"\n readonly shape: T\n}\n\n// NOTE: RecordValueShape and ArrayValueShape use Record<string, never> and never[]\n// for Placeholder to enforce that only empty values ({} and []) are valid.\nexport interface RecordValueShape<T extends ValueShape = ValueShape>\n extends Shape<\n Record<string, T[\"_plain\"]>,\n PlainValueRef<Record<string, T[\"_plain\"]>>,\n PlainValueRef<Record<string, T[\"_plain\"]>>,\n Record<string, never>\n > {\n readonly _type: \"value\"\n readonly valueType: \"record\"\n readonly shape: T\n}\n\nexport interface ArrayValueShape<T extends ValueShape = ValueShape>\n extends Shape<\n T[\"_plain\"][],\n PlainValueRef<T[\"_plain\"][]>,\n PlainValueRef<T[\"_plain\"][]>,\n never[]\n > {\n readonly _type: \"value\"\n readonly valueType: \"array\"\n readonly shape: T\n}\n\nexport interface UnionValueShape<T extends ValueShape[] = ValueShape[]>\n extends Shape<\n T[number][\"_plain\"],\n PlainValueRef<T[number][\"_plain\"]>,\n PlainValueRef<T[number][\"_plain\"]>,\n T[number][\"_placeholder\"]\n > {\n readonly _type: \"value\"\n readonly valueType: \"union\"\n readonly shapes: T\n}\n\n/**\n * A discriminated union shape that uses a discriminant key to determine which variant to use.\n * This enables type-safe handling of tagged unions like:\n *\n * ```typescript\n * type GamePresence =\n * | { type: \"client\"; name: string; input: { force: number; angle: number } }\n * | { type: \"server\"; cars: Record<string, CarState>; tick: number }\n * ```\n *\n * @typeParam K - The discriminant key (e.g., \"type\")\n * @typeParam T - A record mapping discriminant values to their object shapes\n */\nexport interface DiscriminatedUnionValueShape<\n K extends string = string,\n T extends Record<string, StructValueShape> = Record<string, StructValueShape>,\n Plain = T[keyof T][\"_plain\"],\n Mutable = PlainValueRef<Plain>,\n Draft = Mutable,\n Placeholder = T[keyof T][\"_placeholder\"],\n> extends Shape<Plain, Mutable, Draft, Placeholder> {\n readonly _type: \"value\"\n readonly valueType: \"discriminatedUnion\"\n readonly discriminantKey: K\n readonly variants: T\n}\n\n/**\n * Value escape hatch - represents \"any Loro Value\".\n * Use this when you need to accept any valid Loro value type.\n *\n * @example\n * ```typescript\n * const FlexiblePresenceShape = Shape.plain.struct({\n * metadata: Shape.plain.any(), // accept any value type\n * })\n * ```\n */\nexport interface AnyValueShape\n extends Shape<Value, PlainValueRef<Value>, PlainValueRef<Value>, undefined> {\n readonly _type: \"value\"\n readonly valueType: \"any\"\n}\n\n// Union of all ValueShapes - these can only contain other ValueShapes, not ContainerShapes\nexport type ValueShape =\n | AnyValueShape\n | ArrayValueShape\n | BooleanValueShape\n | DiscriminatedUnionValueShape\n | NullValueShape\n | NumberValueShape\n | RecordValueShape\n | StringValueShape\n | StructValueShape\n | Uint8ArrayValueShape\n | UndefinedValueShape\n | UnionValueShape\n\nexport type ContainerOrValueShape = ContainerShape | ValueShape\n\n/**\n * Creates a nullable version of a value shape.\n * @internal\n */\nfunction makeNullable<S extends ValueShape>(\n shape: S,\n): WithPlaceholder<UnionValueShape<[NullValueShape, S]>> {\n const nullShape: NullValueShape = {\n _type: \"value\" as const,\n valueType: \"null\" as const,\n _plain: null,\n _mutable: null as any,\n _draft: null as any,\n _placeholder: null,\n }\n\n const base: UnionValueShape<[NullValueShape, S]> = {\n _type: \"value\" as const,\n valueType: \"union\" as const,\n shapes: [nullShape, shape] as [NullValueShape, S],\n _plain: null as any,\n _mutable: null as any,\n _draft: null as any,\n _placeholder: null as any, // Default placeholder is null\n }\n\n return Object.assign(base, {\n placeholder(\n value: S[\"_placeholder\"] | null,\n ): UnionValueShape<[NullValueShape, S]> {\n return { ...base, _placeholder: value } as UnionValueShape<\n [NullValueShape, S]\n >\n },\n })\n}\n\n/**\n * The LoroShape factory object\n *\n * If a container has a `shape` type variable, it refers to the shape it contains--\n * so for example, a `LoroShape.list(LoroShape.text())` would return a value of type\n * `ListContainerShape<TextContainerShape>`.\n */\nexport const Shape = {\n /**\n * Creates a document schema with the given root container shapes.\n *\n * @param shapes - The root container shapes for the document\n * @param options - Optional configuration including `mergeable` for flattened storage\n * @returns A DocShape that can be used with createTypedDoc\n *\n * @example\n * ```typescript\n * // Basic document\n * const schema = Shape.doc({\n * title: Shape.text(),\n * count: Shape.counter(),\n * })\n *\n * // Mergeable document for concurrent container creation\n * const mergeableSchema = Shape.doc({\n * players: Shape.record(Shape.struct({ score: Shape.plain.number() })),\n * }, { mergeable: true })\n * ```\n */\n doc: <T extends Record<string, ContainerShape>>(\n shapes: T,\n options?: DocShapeOptions,\n ): DocShape<T> => ({\n _type: \"doc\" as const,\n shapes,\n _plain: {} as any,\n _mutable: {} as any,\n _draft: {} as any,\n _placeholder: {} as any,\n mergeable: options?.mergeable,\n }),\n\n /**\n * Creates an \"any\" container shape - an escape hatch for untyped containers.\n * Use this when integrating with external libraries that manage their own document structure.\n *\n * @example\n * ```typescript\n * // loro-prosemirror manages its own structure\n * const ProseMirrorDocShape = Shape.doc({\n * doc: Shape.any(), // opt out of typing for this container\n * })\n *\n * const doc = repo.get(docId, ProseMirrorDocShape, CursorPresenceShape)\n * // doc.doc is typed as `unknown` - you're on your own\n * ```\n */\n any: (): AnyContainerShape => ({\n _type: \"any\" as const,\n _plain: undefined as unknown,\n _mutable: undefined as unknown,\n _draft: undefined as unknown,\n _placeholder: undefined,\n }),\n\n // CRDTs are represented by Loro Containers--they converge on state using Loro's\n // various CRDT algorithms\n counter: (): WithPlaceholder<CounterContainerShape> => {\n const base: CounterContainerShape = {\n _type: \"counter\" as const,\n _plain: 0,\n _mutable: {} as CounterRef,\n _draft: {} as CounterRef,\n _placeholder: 0,\n }\n return Object.assign(base, {\n placeholder(value: number): CounterContainerShape {\n return { ...base, _placeholder: value }\n },\n })\n },\n\n list: <T extends ContainerOrValueShape>(shape: T): ListContainerShape<T> => ({\n _type: \"list\" as const,\n shape,\n _plain: [] as any,\n _mutable: {} as any,\n _draft: {} as any,\n _placeholder: [] as never[],\n }),\n\n /**\n * Creates a struct container shape for objects with fixed keys.\n * This is the preferred way to define fixed-key objects.\n *\n * @example\n * ```typescript\n * const UserSchema = Shape.doc({\n * user: Shape.struct({\n * name: Shape.text(),\n * age: Shape.counter(),\n * }),\n * })\n * ```\n */\n struct: <T extends Record<string, ContainerOrValueShape>>(\n shape: T,\n ): StructContainerShape<T> => ({\n _type: \"struct\" as const,\n shapes: shape,\n _plain: {} as any,\n _mutable: {} as any,\n _draft: {} as any,\n _placeholder: {} as any,\n }),\n\n record: <T extends ContainerOrValueShape>(\n shape: T,\n ): RecordContainerShape<T> => ({\n _type: \"record\" as const,\n shape,\n _plain: {} as any,\n _mutable: {} as any,\n _draft: {} as any,\n _placeholder: {} as Record<string, never>,\n }),\n\n movableList: <T extends ContainerOrValueShape>(\n shape: T,\n ): MovableListContainerShape<T> => ({\n _type: \"movableList\" as const,\n shape,\n _plain: [] as any,\n _mutable: {} as any,\n _draft: {} as any,\n _placeholder: [] as never[],\n }),\n\n text: (): WithPlaceholder<TextContainerShape> => {\n const base: TextContainerShape = {\n _type: \"text\" as const,\n _plain: \"\",\n _mutable: {} as TextRef,\n _draft: {} as TextRef,\n _placeholder: \"\",\n }\n return Object.assign(base, {\n placeholder(value: string): TextContainerShape {\n return { ...base, _placeholder: value }\n },\n })\n },\n\n /**\n * Creates a tree container shape for hierarchical data structures.\n * Each node in the tree has typed metadata defined by the data shape.\n *\n * @example\n * ```typescript\n * const StateNodeDataShape = Shape.struct({\n * name: Shape.text(),\n * facts: Shape.record(Shape.plain.any()),\n * })\n *\n * const Schema = Shape.doc({\n * states: Shape.tree(StateNodeDataShape),\n * })\n *\n * doc.change(draft => {\n * const root = draft.states.createNode({ name: \"idle\", facts: {} })\n * const child = root.createNode({ name: \"running\", facts: {} })\n * child.data.name = \"active\"\n * })\n * ```\n */\n tree: <T extends StructContainerShape>(shape: T): TreeContainerShape<T> => ({\n _type: \"tree\" as const,\n shape,\n _plain: [] as any,\n _mutable: {} as any,\n _draft: {} as any,\n _placeholder: [] as never[],\n }),\n\n // Values are represented as plain JS objects, with the limitation that they MUST be\n // representable as a Loro \"Value\"--basically JSON. The behavior of a Value is basically\n // \"Last Write Wins\", meaning there is no subtle convergent behavior here, just taking\n // the most recent value based on the current available information.\n plain: {\n string: <T extends string = string>(\n ...options: T[]\n ): WithPlaceholder<StringValueShape<T>> &\n WithNullable<StringValueShape<T>> => {\n const base: StringValueShape<T> = {\n _type: \"value\" as const,\n valueType: \"string\" as const,\n _plain: (options[0] ?? \"\") as T,\n _mutable: {} as any,\n _draft: {} as any,\n _placeholder: (options[0] ?? \"\") as T,\n options: options.length > 0 ? options : undefined,\n }\n return Object.assign(base, {\n placeholder(value: T): StringValueShape<T> {\n return { ...base, _placeholder: value }\n },\n nullable(): WithPlaceholder<\n UnionValueShape<[NullValueShape, StringValueShape<T>]>\n > {\n return makeNullable(base)\n },\n })\n },\n\n number: (): WithPlaceholder<NumberValueShape> &\n WithNullable<NumberValueShape> => {\n const base: NumberValueShape = {\n _type: \"value\" as const,\n valueType: \"number\" as const,\n _plain: 0,\n _mutable: {} as any,\n _draft: {} as any,\n _placeholder: 0,\n }\n return Object.assign(base, {\n placeholder(value: number): NumberValueShape {\n return { ...base, _placeholder: value }\n },\n nullable(): WithPlaceholder<\n UnionValueShape<[NullValueShape, NumberValueShape]>\n > {\n return makeNullable(base)\n },\n })\n },\n\n boolean: (): WithPlaceholder<BooleanValueShape> &\n WithNullable<BooleanValueShape> => {\n const base: BooleanValueShape = {\n _type: \"value\" as const,\n valueType: \"boolean\" as const,\n _plain: false,\n _mutable: {} as any,\n _draft: {} as any,\n _placeholder: false,\n }\n return Object.assign(base, {\n placeholder(value: boolean): BooleanValueShape {\n return { ...base, _placeholder: value }\n },\n nullable(): WithPlaceholder<\n UnionValueShape<[NullValueShape, BooleanValueShape]>\n > {\n return makeNullable(base)\n },\n })\n },\n\n null: (): NullValueShape => ({\n _type: \"value\" as const,\n valueType: \"null\" as const,\n _plain: null,\n _mutable: {} as any,\n _draft: null as any,\n _placeholder: null,\n }),\n\n undefined: (): UndefinedValueShape => ({\n _type: \"value\" as const,\n valueType: \"undefined\" as const,\n _plain: undefined,\n _mutable: {} as any,\n _draft: undefined as any,\n _placeholder: undefined,\n }),\n\n uint8Array: (): Uint8ArrayValueShape &\n WithNullable<Uint8ArrayValueShape> => {\n const base: Uint8ArrayValueShape = {\n _type: \"value\" as const,\n valueType: \"uint8array\" as const,\n _plain: new Uint8Array(),\n _mutable: {} as any,\n _draft: {} as any,\n _placeholder: new Uint8Array(),\n }\n return Object.assign(base, {\n nullable(): WithPlaceholder<\n UnionValueShape<[NullValueShape, Uint8ArrayValueShape]>\n > {\n return makeNullable(base)\n },\n })\n },\n\n /**\n * Alias for `uint8Array()` - creates a shape for binary data.\n * Use this for better discoverability when working with binary data like cursor positions.\n *\n * @example\n * ```typescript\n * const CursorPresenceShape = Shape.plain.struct({\n * anchor: Shape.plain.bytes().nullable(),\n * focus: Shape.plain.bytes().nullable(),\n * })\n * ```\n */\n bytes: (): Uint8ArrayValueShape & WithNullable<Uint8ArrayValueShape> => {\n const base: Uint8ArrayValueShape = {\n _type: \"value\" as const,\n valueType: \"uint8array\" as const,\n _plain: new Uint8Array(),\n _mutable: {} as any,\n _draft: {} as any,\n _placeholder: new Uint8Array(),\n }\n return Object.assign(base, {\n nullable(): WithPlaceholder<\n UnionValueShape<[NullValueShape, Uint8ArrayValueShape]>\n > {\n return makeNullable(base)\n },\n })\n },\n\n /**\n * Creates an \"any\" value shape - an escape hatch for untyped values.\n * Use this when you need to accept any valid Loro value type.\n *\n * @example\n * ```typescript\n * const FlexiblePresenceShape = Shape.plain.struct({\n * metadata: Shape.plain.any(), // accept any value type\n * })\n * ```\n */\n any: (): AnyValueShape => ({\n _type: \"value\" as const,\n valueType: \"any\" as const,\n _plain: undefined as unknown as Value,\n _mutable: {} as any,\n _draft: {} as any,\n _placeholder: undefined,\n }),\n\n /**\n * Creates a struct value shape for plain objects with fixed keys.\n * This is the preferred way to define fixed-key plain value objects.\n *\n * @example\n * ```typescript\n * const PointSchema = Shape.plain.struct({\n * x: Shape.plain.number(),\n * y: Shape.plain.number(),\n * })\n * ```\n */\n struct: <T extends Record<string, ValueShape>>(\n shape: T,\n ): StructValueShape<T> & WithNullable<StructValueShape<T>> => {\n const base: StructValueShape<T> = {\n _type: \"value\" as const,\n valueType: \"struct\" as const,\n shape,\n _plain: {} as any,\n _mutable: {} as any,\n _draft: {} as any,\n _placeholder: {} as any,\n }\n return Object.assign(base, {\n nullable(): WithPlaceholder<\n UnionValueShape<[NullValueShape, StructValueShape<T>]>\n > {\n return makeNullable(base)\n },\n })\n },\n\n record: <T extends ValueShape>(\n shape: T,\n ): RecordValueShape<T> & WithNullable<RecordValueShape<T>> => {\n const base: RecordValueShape<T> = {\n _type: \"value\" as const,\n valueType: \"record\" as const,\n shape,\n _plain: {} as any,\n _mutable: {} as any,\n _draft: {} as any,\n _placeholder: {} as Record<string, never>,\n }\n return Object.assign(base, {\n nullable(): WithPlaceholder<\n UnionValueShape<[NullValueShape, RecordValueShape<T>]>\n > {\n return makeNullable(base)\n },\n })\n },\n\n array: <T extends ValueShape>(\n shape: T,\n ): ArrayValueShape<T> & WithNullable<ArrayValueShape<T>> => {\n const base: ArrayValueShape<T> = {\n _type: \"value\" as const,\n valueType: \"array\" as const,\n shape,\n _plain: [] as any,\n _mutable: [] as any,\n _draft: [] as any,\n _placeholder: [] as never[],\n }\n return Object.assign(base, {\n nullable(): WithPlaceholder<\n UnionValueShape<[NullValueShape, ArrayValueShape<T>]>\n > {\n return makeNullable(base)\n },\n })\n },\n\n // Special value type that helps make things like `string | null` representable\n // TODO(duane): should this be a more general type for containers too?\n union: <T extends ValueShape[]>(\n shapes: T,\n ): WithPlaceholder<UnionValueShape<T>> => {\n const base: UnionValueShape<T> = {\n _type: \"value\" as const,\n valueType: \"union\" as const,\n shapes,\n _plain: {} as any,\n _mutable: {} as any,\n _draft: {} as any,\n _placeholder: {} as any,\n }\n return Object.assign(base, {\n placeholder(value: T[number][\"_placeholder\"]): UnionValueShape<T> {\n return { ...base, _placeholder: value }\n },\n })\n },\n\n /**\n * Creates a discriminated union shape for type-safe tagged unions.\n *\n * @example\n * ```typescript\n * const ClientPresenceShape = Shape.plain.struct({\n * type: Shape.plain.string(\"client\"),\n * name: Shape.plain.string(),\n * input: Shape.plain.struct({ force: Shape.plain.number(), angle: Shape.plain.number() }),\n * })\n *\n * const ServerPresenceShape = Shape.plain.struct({\n * type: Shape.plain.string(\"server\"),\n * cars: Shape.plain.record(Shape.plain.struct({ x: Shape.plain.number(), y: Shape.plain.number() })),\n * tick: Shape.plain.number(),\n * })\n *\n * const GamePresenceSchema = Shape.plain.discriminatedUnion(\"type\", {\n * client: ClientPresenceShape,\n * server: ServerPresenceShape,\n * })\n * ```\n *\n * @param discriminantKey - The key used to discriminate between variants (e.g., \"type\")\n * @param variants - A record mapping discriminant values to their object shapes\n */\n discriminatedUnion: <\n K extends string,\n T extends Record<string, StructValueShape>,\n >(\n discriminantKey: K,\n variants: T,\n ): WithPlaceholder<DiscriminatedUnionValueShape<K, T>> => {\n const base: DiscriminatedUnionValueShape<K, T> = {\n _type: \"value\" as const,\n valueType: \"discriminatedUnion\" as const,\n discriminantKey,\n variants,\n _plain: {} as any,\n _mutable: {} as any,\n _draft: {} as any,\n _placeholder: {} as any,\n }\n return Object.assign(base, {\n placeholder(\n value: T[keyof T][\"_placeholder\"],\n ): DiscriminatedUnionValueShape<K, T> {\n return { ...base, _placeholder: value }\n },\n })\n },\n },\n}\n\n// Add this type mapping near the top of your file, after the imports\nexport type ShapeToContainer<T extends DocShape | ContainerShape> =\n T extends TextContainerShape\n ? LoroText\n : T extends CounterContainerShape\n ? LoroCounter\n : T extends ListContainerShape\n ? LoroList\n : T extends MovableListContainerShape\n ? LoroMovableList\n : T extends StructContainerShape | RecordContainerShape\n ? LoroMap\n : T extends TreeContainerShape\n ? LoroTree\n : never // not a container\n","/**\n * The value() function for extracting plain values from reactive wrappers.\n *\n * `value()` is polymorphic — it accepts any input:\n * - PlainValueRef<T> → unwraps via valueOf()\n * - TypedRef (StructRef, ListRef, etc.) → extracts via toJSON()\n * - TypedDoc → extracts via toJSON()\n * - null / undefined → passes through unchanged\n * - Any other value → passes through unchanged (already plain)\n *\n * @module value\n */\n\nimport { isPlainValueRef, type PlainValueRef } from \"./plain-value-ref/index.js\"\nimport type { ContainerShape, DocShape } from \"./shape.js\"\nimport type { TypedDoc } from \"./typed-doc.js\"\nimport type { TypedRef } from \"./typed-refs/base.js\"\nimport type { Infer } from \"./types.js\"\n\n// Well-known symbols for identifying loro-extended objects\nconst LORO_SYMBOL = Symbol.for(\"loro-extended:loro\")\nconst EXT_SYMBOL = Symbol.for(\"loro-extended:ext\")\n\n// ============================================================================\n// Specific overloads (checked first — provide precise return types)\n// ============================================================================\n\n/**\n * Unwrap a PlainValueRef to get its current plain value.\n *\n * @param ref - A PlainValueRef wrapping a plain value\n * @returns The current plain value\n *\n * @example\n * ```typescript\n * const title = doc.meta.title // PlainValueRef<string>\n * const titleValue = value(title) // string\n * ```\n */\nexport function value<T>(ref: PlainValueRef<T>): T\n\n/**\n * Unwrap a TypedRef to get its current plain value (via toJSON).\n *\n * @param ref - A TypedRef (StructRef, ListRef, etc.)\n * @returns The current plain value from toJSON()\n *\n * @example\n * ```typescript\n * const config = doc.config // StructRef<...>\n * const configValue = value(config) // { ... }\n * ```\n */\nexport function value<S extends ContainerShape>(ref: TypedRef<S>): Infer<S>\n\n/**\n * Unwrap a TypedDoc to get its current plain value (via toJSON).\n *\n * @param doc - A TypedDoc\n * @returns The current plain value from toJSON()\n *\n * @example\n * ```typescript\n * const docValue = value(doc) // { meta: { ... }, ... }\n * ```\n */\nexport function value<D extends DocShape>(doc: TypedDoc<D>): Infer<D>\n\n// ============================================================================\n// Nullish overloads (less specific — must come AFTER non-nullish)\n// ============================================================================\n\n/** Handle undefined input — returns undefined. */\nexport function value(ref: undefined): undefined\n\n/** Handle null input — returns null. */\nexport function value(ref: null): null\n\n/**\n * Unwrap a PlainValueRef that may be undefined.\n * Enables patterns like `value(record.get(\"key\")?.prop)`.\n */\nexport function value<T>(ref: PlainValueRef<T> | undefined): T | undefined\n\n/**\n * Unwrap a PlainValueRef that may be null.\n */\nexport function value<T>(ref: PlainValueRef<T> | null): T | null\n\n/**\n * Unwrap a TypedRef that may be undefined.\n */\nexport function value<S extends ContainerShape>(\n ref: TypedRef<S> | undefined,\n): Infer<S> | undefined\n\n/**\n * Unwrap a TypedRef that may be null.\n */\nexport function value<S extends ContainerShape>(\n ref: TypedRef<S> | null,\n): Infer<S> | null\n\n/**\n * Unwrap a TypedDoc that may be undefined.\n */\nexport function value<D extends DocShape>(\n doc: TypedDoc<D> | undefined,\n): Infer<D> | undefined\n\n/**\n * Unwrap a TypedDoc that may be null.\n */\nexport function value<D extends DocShape>(\n doc: TypedDoc<D> | null,\n): Infer<D> | null\n\n// ============================================================================\n// Catch-all overload (checked LAST — handles raw values and complex unions)\n//\n// This is what makes value() polymorphic. It matches any type that the specific\n// overloads above miss, including:\n// - StructRef<S, M> | undefined (concrete ref subclass unions)\n// - number | PlainValueRef<number> (inside/outside change() unions)\n// - string, number, boolean (already-plain values)\n//\n// The return type is T (identity), which is less precise than Infer<S> for refs\n// that fall through, but the runtime behavior is correct (toJSON gets called).\n// ============================================================================\n\n/**\n * Pass through any value that is not a reactive wrapper.\n * If the value happens to be a PlainValueRef, TypedRef, or TypedDoc at runtime,\n * it will still be correctly unwrapped.\n *\n * @param v - Any value\n * @returns The value unchanged, or unwrapped if it's a reactive wrapper\n */\nexport function value<T>(v: T): T\n\n// ============================================================================\n// Implementation\n// ============================================================================\n\nexport function value(target: unknown): unknown {\n // Nullish: pass through\n if (target === undefined) return undefined\n if (target === null) return null\n\n // PlainValueRef: call valueOf()\n if (isPlainValueRef(target)) {\n return target.valueOf()\n }\n\n // TypedRef and TypedDoc: call toJSON()\n // Use loro symbol checks to avoid accidentally calling toJSON() on\n // arbitrary objects like Date, custom classes, etc.\n if (target && typeof target === \"object\") {\n if (\n (LORO_SYMBOL in (target as object) || EXT_SYMBOL in (target as object)) &&\n \"toJSON\" in target\n ) {\n return (target as { toJSON(): unknown }).toJSON()\n }\n }\n\n // Everything else: pass through (already plain)\n return target\n}\n","// src/annotation-target.ts\nfunction isAnnotationTarget(v) {\n if (typeof v !== \"object\" || v === null)\n return false;\n return \"elementSelector\" in v && typeof v.elementSelector === \"string\" && \"elementText\" in v && typeof v.elementText === \"string\" && \"boundingRect\" in v && typeof v.boundingRect === \"string\" && \"tagName\" in v && typeof v.tagName === \"string\";\n}\n// src/built-in-templates.ts\nvar BUILT_IN_TEMPLATE_ID_PREFIX = \"builtin:\";\nfunction isBuiltInTemplateId(id) {\n return BUILT_IN_TEMPLATE_IDS.some((bid) => bid === id);\n}\nfunction item(templateId, index, content, description, deps, capabilities) {\n return {\n id: `${templateId}:${index}`,\n content,\n description,\n deps: deps.map((d) => `${templateId}:${d}`),\n ...capabilities\n };\n}\nvar FEATURE_WORK_ID = \"builtin:feature-work\";\nvar QUICK_TASK_ID = \"builtin:quick-task\";\nvar TRIVIAL_FIX_ID = \"builtin:trivial-fix\";\nvar PARALLEL_REFACTOR_ID = \"builtin:parallel-refactor\";\nvar REBASE_REPAIR_ID = \"builtin:rebase-repair\";\nvar RESEARCH_AUDIT_ID = \"builtin:research-audit\";\nvar DESIGN_ID = \"builtin:design\";\nvar DATA_SCIENCE_ID = \"builtin:data-science\";\nvar PR_REVIEW_ID = \"builtin:pr-review\";\nvar BUILT_IN_TEMPLATE_IDS = [\n FEATURE_WORK_ID,\n QUICK_TASK_ID,\n TRIVIAL_FIX_ID,\n PARALLEL_REFACTOR_ID,\n REBASE_REPAIR_ID,\n RESEARCH_AUDIT_ID,\n DESIGN_ID,\n DATA_SCIENCE_ID,\n PR_REVIEW_ID\n];\nvar FEATURE_WORK = {\n id: FEATURE_WORK_ID,\n name: \"Feature Work\",\n description: \"Flagship workflow for shipping a new feature end-to-end: research, plan, sequence, implement, QA, ship, and shepherd through merge.\",\n items: [\n item(FEATURE_WORK_ID, 1, \"Research the task\", \"Map the surface area before writing code. Identify critical files, existing patterns, edge cases, and gotchas. For larger tasks, spawn parallel Shipyard threads to explore independent sub-areas. Pin key findings on Shipyard's canvas so they stay visible during implementation.\", [], { model: \"claude-opus-4-7\", reasoningEffort: \"xhigh\" }),\n item(FEATURE_WORK_ID, 2, \"Plan the approach\", \"Iterate on an approach on Shipyard's canvas with diagrams, state machines, or data flow so architectural decisions persist through the work. For risky or test-heavy work, write a test spec up front to drive red-green-refactor.\", [1], { model: \"claude-opus-4-7\", reasoningEffort: \"high\" }),\n item(FEATURE_WORK_ID, 3, \"Sequence implementation\", \"Break the plan into parallelizable subtasks with explicit dependencies wired between them using TaskUpdate's addBlockedBy / addBlocks. Identify what can be done by parallel Shipyard threads versus what must happen sequentially.\", [2], { model: \"claude-opus-4-7\", reasoningEffort: \"high\" }),\n item(FEATURE_WORK_ID, 4, \"Implementation — REPLACE this placeholder\", \"This is a placeholder, not the work itself. Before touching code, call TaskCreate to insert 2–N concrete subtasks that describe what you'll actually build (file-by-file if useful). Each new task should be blocked by 'Sequence implementation' and should block 'QA'. Then mark this placeholder completed. Shipping without doing this means the work never appeared in the plan.\", [3]),\n item(FEATURE_WORK_ID, 5, \"QA\", \"Multi-pass review and fix until convergence. Parallel reviewers catch different issue classes: type holes, missed edge cases, race conditions, pattern drift. Use Shipyard's add_comment on diff hunks where reviewer judgment is useful. Keep running passes until no new issues surface.\", [4], { model: \"claude-sonnet-4-6\", reasoningEffort: \"medium\" }),\n item(FEATURE_WORK_ID, 6, \"Ship\", `Commit the work with a meaningful message, open a PR whose description explains the \"why,\" push, and verify CI passes. Check pre-commit hooks and formatters run clean. Open the result in Shipyard's PR panel.`, [5], { model: \"claude-sonnet-4-6\", reasoningEffort: \"none\" }),\n item(FEATURE_WORK_ID, 7, \"Tend PR\", \"Monitor CI checks and reviewer feedback in Shipyard's PR panel; fix failures and respond to each comment even if no code change is needed. Shepherd through merge.\", [6], { model: \"claude-sonnet-4-6\", reasoningEffort: \"none\" })\n ],\n createdAt: 0,\n updatedAt: 0,\n builtIn: true\n};\nvar QUICK_TASK = {\n id: QUICK_TASK_ID,\n name: \"Quick Task\",\n description: \"Lighter version of Feature Work for small features or bug fixes. Skips the separate plan step — sequence directly from research into implementation.\",\n items: [\n item(QUICK_TASK_ID, 1, \"Research the task\", \"Lightweight investigation: read the relevant files, understand the surrounding code, check for similar prior changes. Do not go deep unless the scope warrants it.\", [], { model: \"claude-opus-4-7\", reasoningEffort: \"xhigh\" }),\n item(QUICK_TASK_ID, 2, \"Sequence implementation\", \"Break into concrete subtasks with dependencies via TaskCreate and TaskUpdate's addBlockedBy. Even for small work, explicit steps help catch missed pieces.\", [1], { model: \"claude-opus-4-7\", reasoningEffort: \"high\" }),\n item(QUICK_TASK_ID, 3, \"Implementation — REPLACE this placeholder\", \"This is a placeholder, not the work itself. Call TaskCreate to insert the real subtasks describing what you'll actually build. Each new task should be blocked by 'Sequence implementation' and block 'QA'. Mark this placeholder completed once replaced.\", [2]),\n item(QUICK_TASK_ID, 4, \"QA\", \"Quick review pass: type safety, pattern consistency, obvious issues. Use add_comment on hunks where feedback is needed. Skip multi-pass convergence if the change is trivial.\", [3], { model: \"claude-sonnet-4-6\", reasoningEffort: \"medium\" }),\n item(QUICK_TASK_ID, 5, \"Ship\", \"Commit, open PR, push, verify CI. Open the result in Shipyard's PR panel.\", [4], { model: \"claude-sonnet-4-6\", reasoningEffort: \"none\" }),\n item(QUICK_TASK_ID, 6, \"Tend PR\", \"Monitor and shepherd to merge via Shipyard's PR panel. Respond to reviewer comments promptly.\", [5], { model: \"claude-sonnet-4-6\", reasoningEffort: \"none\" })\n ],\n createdAt: 0,\n updatedAt: 0,\n builtIn: true\n};\nvar TRIVIAL_FIX = {\n id: TRIVIAL_FIX_ID,\n name: \"Trivial Fix\",\n description: \"Tiny bugs or one-line fixes where research and sequencing add no value. Straight to implementation, QA, and ship.\",\n items: [\n item(TRIVIAL_FIX_ID, 1, \"Implement the fix\", \"Small one-line bug, typo, or obvious fix. Scope should be small enough that reading the diff explains everything.\", []),\n item(TRIVIAL_FIX_ID, 2, \"QA\", \"Sanity check. Verify it compiles, the affected area still works, no regressions.\", [1], { model: \"claude-sonnet-4-6\", reasoningEffort: \"medium\" }),\n item(TRIVIAL_FIX_ID, 3, \"Ship\", \"Commit, open PR, push.\", [2], {\n model: \"claude-sonnet-4-6\",\n reasoningEffort: \"none\"\n }),\n item(TRIVIAL_FIX_ID, 4, \"Tend PR\", \"Monitor to merge.\", [3], {\n model: \"claude-sonnet-4-6\",\n reasoningEffort: \"none\"\n })\n ],\n createdAt: 0,\n updatedAt: 0,\n builtIn: true\n};\nvar PARALLEL_REFACTOR = {\n id: PARALLEL_REFACTOR_ID,\n name: \"Parallel Refactor\",\n description: \"Refactor work that can fan out into independent parallel groups. Map the scope, spawn threads, integrate, and ship as one coherent PR (or stacked PRs).\",\n items: [\n item(PARALLEL_REFACTOR_ID, 1, \"Map the scope\", \"Understand which files, patterns, and call sites the refactor touches. Sketch group boundaries on Shipyard's canvas so parallel workers see the same source of truth. Each group should be self-contained — no cross-group file modifications.\", [], { model: \"claude-opus-4-7\", reasoningEffort: \"xhigh\" }),\n item(PARALLEL_REFACTOR_ID, 2, \"Parallel implementation — REPLACE with 2–4 parallel groups\", \"Call TaskCreate 2–4 times to insert independent parallel groups. Each group runs on its own thread via the Agent tool. Groups blocked by 'Map the scope', all block 'Integration pass'. Delete this placeholder after inserting the real work.\", [1]),\n item(PARALLEL_REFACTOR_ID, 3, \"Integration pass\", \"Resolve cross-group issues: type errors at interfaces, import ordering, pattern consistency. Rerun type checks across the whole codebase. Track any surfaced issues on Shipyard's canvas.\", [2], { model: \"claude-sonnet-4-6\", reasoningEffort: \"medium\" }),\n item(PARALLEL_REFACTOR_ID, 4, \"QA\", \"Multi-pass review with add_comment annotations. Refactors have high regression risk; extra scrutiny on callers of changed signatures.\", [3], { model: \"claude-sonnet-4-6\", reasoningEffort: \"medium\" }),\n item(PARALLEL_REFACTOR_ID, 5, \"Ship\", \"Commit per group or per theme. Stack if the refactor is large enough to warrant separate reviewable units. Open in Shipyard's PR panel.\", [4], { model: \"claude-sonnet-4-6\", reasoningEffort: \"none\" }),\n item(PARALLEL_REFACTOR_ID, 6, \"Tend PR\", \"Monitor and shepherd to merge via Shipyard's PR panel.\", [5], { model: \"claude-sonnet-4-6\", reasoningEffort: \"none\" })\n ],\n createdAt: 0,\n updatedAt: 0,\n builtIn: true\n};\nvar REBASE_REPAIR = {\n id: REBASE_REPAIR_ID,\n name: \"Rebase / Stack Repair\",\n description: \"Recover from a broken stack or rebase a child branch onto the latest parent. Creates a safety backup, runs the restack, resolves conflicts, and verifies before resubmitting.\",\n items: [\n item(REBASE_REPAIR_ID, 1, \"Create backup branch\", \"`git branch backup/<branch-name>` so recovery is possible if the restack goes sideways.\", []),\n item(REBASE_REPAIR_ID, 2, \"Reset to parent\", 'Reset the child branch to the latest parent commit. This is the \"rewind before replay\" step.', [1]),\n item(REBASE_REPAIR_ID, 3, \"Run restack\", \"Apply the stack tool (e.g. `gt restack`) to replay commits onto the new parent. Watch for conflicts flagged by the tool.\", [2]),\n item(REBASE_REPAIR_ID, 4, \"Resolve conflicts\", 'Work through merge conflicts carefully. For \"deleted by us\" conflicts, usually accept theirs (the incoming version).', [3]),\n item(REBASE_REPAIR_ID, 5, \"Verify\", \"Ensure typecheck and tests pass before pushing. A broken restack wastes reviewer time.\", [4]),\n item(REBASE_REPAIR_ID, 6, \"Submit\", \"Push the updated stack and monitor health in Shipyard's PR panel.\", [5])\n ],\n createdAt: 0,\n updatedAt: 0,\n builtIn: true\n};\nvar RESEARCH_AUDIT = {\n id: RESEARCH_AUDIT_ID,\n name: \"Research & Audit\",\n description: \"Investigation-only workflow. Wide parallel sweep, then deep dive on the top findings, then synthesize on the canvas. Absorbs log triage and debugging investigation — the shape is the same: wide, then deep, then decide.\",\n items: [\n item(RESEARCH_AUDIT_ID, 1, \"Wide sweep\", \"Investigate the problem surface broadly. Spawn parallel Shipyard threads across independent sub-areas so exploration happens in parallel. Each thread returns focused findings; synthesize across them.\", [], { model: \"claude-opus-4-7\", reasoningEffort: \"xhigh\" }),\n item(RESEARCH_AUDIT_ID, 2, \"Deep dive\", `Focus on the top 2-3 findings from the sweep. Go beyond \"where is this\" to \"why does this matter\" — quantify impact, trace dependencies, assess risk. Keep working notes on Shipyard's canvas.`, [1], { model: \"claude-opus-4-7\", reasoningEffort: \"xhigh\" }),\n item(RESEARCH_AUDIT_ID, 3, \"Synthesize\", \"Produce a brief on Shipyard's canvas via visualize: a flowchart, table, or diagram plus decisions required. Pin it so stakeholders can reference it async. Capture decisions via add_comment.\", [2], { model: \"claude-opus-4-7\", reasoningEffort: \"high\" })\n ],\n createdAt: 0,\n updatedAt: 0,\n builtIn: true\n};\nvar DESIGN = {\n id: DESIGN_ID,\n name: \"Design\",\n description: \"Decision-making workflow for design work. Research, produce mockup variants on the canvas, get feedback, pick a direction. No implementation — chain into Feature Work or Quick Task when ready to build.\",\n items: [\n item(DESIGN_ID, 1, \"Research UX\", \"Understand current design patterns, user flows, and constraints. Look at what is already in the codebase and what users have fed back.\", [], { model: \"claude-opus-4-7\", reasoningEffort: \"xhigh\" }),\n item(DESIGN_ID, 2, \"Mockups\", \"Produce 2-3 variants on Shipyard's canvas via visualize so alternatives are visible side-by-side. Annotate tradeoffs on each variant with add_comment. Consider multi-perspective review if the decision is high-stakes.\", [1], { model: \"claude-opus-4-7\", reasoningEffort: \"high\" }),\n item(DESIGN_ID, 3, \"Decide direction\", `Synthesize feedback and pick the approach. Document the \"why\" on Shipyard's canvas so the decision survives into implementation. Chain into a build template as a separate task if you are shipping.`, [2], { model: \"claude-opus-4-7\", reasoningEffort: \"high\" })\n ],\n createdAt: 0,\n updatedAt: 0,\n builtIn: true\n};\nvar DATA_SCIENCE = {\n id: DATA_SCIENCE_ID,\n name: \"Data Science\",\n description: \"Canvas-first analytical workflow. Explore the data, form and test a hypothesis, produce a report on the canvas with charts and conclusions.\",\n items: [\n item(DATA_SCIENCE_ID, 1, \"Explore\", \"Load the data and render charts on Shipyard's canvas via visualize: distributions, outliers, correlations, time series. Clarify the question before modeling — often the exploration reframes what you are really asking.\", [], { model: \"claude-opus-4-7\", reasoningEffort: \"xhigh\" }),\n item(DATA_SCIENCE_ID, 2, \"Analyze\", \"Form a hypothesis and run the analysis or model. Pin the hypothesis on the canvas so it is explicit. Report effect size, not just significance. Include uncertainty.\", [1], { model: \"claude-opus-4-7\", reasoningEffort: \"xhigh\" }),\n item(DATA_SCIENCE_ID, 3, \"Report\", \"Synthesize findings into a canvas report via visualize with charts and prose. Lead with the conclusion, then evidence, then caveats. Capture stakeholder questions via add_comment.\", [2], { model: \"claude-opus-4-7\", reasoningEffort: \"high\" })\n ],\n createdAt: 0,\n updatedAt: 0,\n builtIn: true\n};\nvar PR_REVIEW = {\n id: PR_REVIEW_ID,\n name: \"PR Review\",\n description: \"Review an external PR using Shipyard's PR panel and parallel review agents. Leave inline comments on specific hunks and post a summary verdict.\",\n items: [\n item(PR_REVIEW_ID, 1, \"Fetch PR\", \"Open the PR in Shipyard's PR panel for structured review. Read the description to understand intent before diving into the diff.\", []),\n item(PR_REVIEW_ID, 2, \"Run review agents\", \"Spawn parallel Shipyard threads focused on different concerns: type safety, pattern consistency, API contracts, code quality. Each thread returns findings you can triage.\", [1], { model: \"claude-sonnet-4-6\", reasoningEffort: \"medium\" }),\n item(PR_REVIEW_ID, 3, \"Inline comments\", `Use Shipyard's add_comment (mode: \"diff\") to leave specific feedback on hunks. Explain the \"why\" — a reviewer who just marks lines without reasoning forces the author to guess.`, [2], { model: \"claude-sonnet-4-6\", reasoningEffort: \"medium\" }),\n item(PR_REVIEW_ID, 4, \"Post verdict\", \"Summary review with one of three decisions: approve (ready to ship), request changes (blocking issues), or comment (non-blocking notes).\", [3], { model: \"claude-sonnet-4-6\", reasoningEffort: \"medium\" })\n ],\n createdAt: 0,\n updatedAt: 0,\n builtIn: true\n};\nvar BUILT_IN_TEMPLATES = [\n FEATURE_WORK,\n QUICK_TASK,\n TRIVIAL_FIX,\n PARALLEL_REFACTOR,\n REBASE_REPAIR,\n RESEARCH_AUDIT,\n DESIGN,\n DATA_SCIENCE,\n PR_REVIEW\n];\n// src/builtin-themes.ts\nvar SHIPYARD_DARK_VSCODE_THEME = {\n name: \"Shipyard Dark\",\n type: \"dark\",\n source: \"builtin\",\n contentHash: \"builtin-shipyard-dark\",\n colors: {\n \"editor.background\": \"#0f1219\",\n \"editor.foreground\": \"#eff0f3\",\n \"sideBar.background\": \"#1a1f2b\",\n \"editorWidget.background\": \"#1f2533\",\n descriptionForeground: \"#858ea0\",\n \"button.secondaryBackground\": \"#272d3b\",\n \"input.background\": \"#272d3b\",\n \"input.border\": \"#232939\",\n focusBorder: \"#c17a3a\",\n \"button.background\": \"#c17a3a\",\n \"textLink.foreground\": \"#6cc5c5\",\n \"terminal.ansiGreen\": \"#4aba6a\",\n \"gitDecoration.addedResourceForeground\": \"#4aba6a\",\n \"editorWarning.foreground\": \"#c9a64a\",\n errorForeground: \"#c26651\",\n \"editorError.foreground\": \"#c26651\",\n contrastBorder: \"#232939\",\n \"widget.border\": \"#232939\",\n \"sideBarSectionHeader.border\": \"#232939\",\n \"panel.border\": \"#232939\",\n \"scrollbarSlider.background\": \"#4e5568\",\n \"editorLineNumber.foreground\": \"#4e5568\",\n \"editorLineNumber.activeForeground\": \"#858ea0\",\n \"editorGutter.background\": \"#0f1219\",\n \"editor.lineHighlightBackground\": \"#1a1f2b\",\n \"editor.lineHighlightBorder\": \"#00000000\",\n \"editor.selectionBackground\": \"#c17a3a33\",\n \"editor.inactiveSelectionBackground\": \"#c17a3a1a\",\n \"editor.selectionHighlightBackground\": \"#c17a3a15\",\n \"editor.findMatchBackground\": \"#c17a3a44\",\n \"editor.findMatchHighlightBackground\": \"#c17a3a22\",\n \"editor.wordHighlightBackground\": \"#c17a3a1a\",\n \"editor.wordHighlightStrongBackground\": \"#c17a3a26\",\n \"editorCursor.foreground\": \"#c17a3a\",\n \"editorWidget.border\": \"#232939\",\n \"scrollbar.shadow\": \"#00000000\",\n \"scrollbarSlider.hoverBackground\": \"#4e556888\",\n \"scrollbarSlider.activeBackground\": \"#4e5568aa\",\n \"diffEditor.insertedTextBackground\": \"#22543d88\",\n \"diffEditor.removedTextBackground\": \"#55222280\",\n \"diffEditor.insertedLineBackground\": \"#19332a80\",\n \"diffEditor.removedLineBackground\": \"#331a1a80\",\n \"diffEditor.insertedTextBorder\": \"#00000000\",\n \"diffEditor.removedTextBorder\": \"#00000000\",\n \"diffEditor.diagonalFill\": \"#232939\",\n \"editorGutter.modifiedBackground\": \"#c9a64a\",\n \"editorGutter.addedBackground\": \"#4aba6a\",\n \"editorGutter.deletedBackground\": \"#c26651\",\n \"editorBracketMatch.background\": \"#c17a3a1a\",\n \"editorBracketMatch.border\": \"#c17a3a55\",\n \"editorIndentGuide.background\": \"#232939\",\n \"editorIndentGuide.activeBackground\": \"#4e5568\",\n \"editorOverviewRuler.border\": \"#00000000\",\n \"peekView.border\": \"#232939\",\n \"peekViewEditor.background\": \"#1a1f2b\",\n \"peekViewResult.background\": \"#0f1219\",\n \"peekViewTitle.background\": \"#1a1f2b\",\n \"minimap.background\": \"#0f1219\",\n \"editor.foldBackground\": \"#1a1f2b66\",\n \"editorGutter.foldingControlForeground\": \"#858ea0\",\n \"menu.separatorBackground\": \"#232939\",\n \"toolbar.hoverBackground\": \"#272d3b88\"\n },\n tokenColors: [\n { scope: \"\", settings: { foreground: \"#eff0f3\", background: \"#0f1219\" } },\n { scope: \"comment\", settings: { foreground: \"#6b7889\", fontStyle: \"italic\" } },\n { scope: \"keyword\", settings: { foreground: \"#b88be6\" } },\n { scope: \"keyword.control\", settings: { foreground: \"#b88be6\" } },\n { scope: \"storage.type\", settings: { foreground: \"#b88be6\" } },\n { scope: \"string\", settings: { foreground: \"#6cc5c5\" } },\n { scope: \"string.key.json\", settings: { foreground: \"#6cc5c5\" } },\n { scope: \"string.value.json\", settings: { foreground: \"#6cc5c5\" } },\n { scope: \"number\", settings: { foreground: \"#c17a3a\" } },\n { scope: \"constant\", settings: { foreground: \"#c17a3a\" } },\n { scope: \"type\", settings: { foreground: \"#6cc5c5\" } },\n { scope: \"type.identifier\", settings: { foreground: \"#6cc5c5\" } },\n { scope: \"class\", settings: { foreground: \"#c9a64a\" } },\n { scope: \"function\", settings: { foreground: \"#c9a64a\" } },\n { scope: \"variable\", settings: { foreground: \"#d4c078\" } },\n { scope: \"variable.predefined\", settings: { foreground: \"#d4c078\" } },\n { scope: \"attribute.name\", settings: { foreground: \"#6cc5c5\" } },\n { scope: \"attribute.value\", settings: { foreground: \"#6cc5c5\" } },\n { scope: \"tag\", settings: { foreground: \"#b88be6\" } },\n { scope: \"metatag\", settings: { foreground: \"#c26651\" } },\n { scope: \"annotation\", settings: { foreground: \"#6cc5c5\" } },\n { scope: \"regexp\", settings: { foreground: \"#d4c078\" } },\n { scope: \"delimiter\", settings: { foreground: \"#858ea0\" } },\n { scope: \"delimiter.bracket\", settings: { foreground: \"#858ea0\" } },\n { scope: \"operator\", settings: { foreground: \"#858ea0\" } }\n ]\n};\nvar SHIPYARD_LIGHT_VSCODE_THEME = {\n name: \"Shipyard Light\",\n type: \"light\",\n source: \"builtin\",\n contentHash: \"builtin-shipyard-light\",\n colors: {\n \"editor.background\": \"#f4f4f6\",\n \"editor.foreground\": \"#111827\",\n \"sideBar.background\": \"#ffffff\",\n \"editorWidget.background\": \"#ffffff\",\n descriptionForeground: \"#6b7280\",\n \"button.secondaryBackground\": \"#e5e6ea\",\n \"input.background\": \"#e5e6ea\",\n \"input.border\": \"#d7d9e0\",\n focusBorder: \"#a35e2a\",\n \"button.background\": \"#a35e2a\",\n \"textLink.foreground\": \"#2a8282\",\n \"terminal.ansiGreen\": \"#2a7a3e\",\n \"gitDecoration.addedResourceForeground\": \"#2a7a3e\",\n \"editorWarning.foreground\": \"#8a6d1c\",\n errorForeground: \"#a34530\",\n \"editorError.foreground\": \"#a34530\",\n contrastBorder: \"#d7d9e0\",\n \"widget.border\": \"#d7d9e0\",\n \"sideBarSectionHeader.border\": \"#d7d9e0\",\n \"panel.border\": \"#d7d9e0\",\n \"scrollbarSlider.background\": \"#bec1c9\",\n \"editorLineNumber.foreground\": \"#bec1c9\",\n \"editorLineNumber.activeForeground\": \"#6b7280\",\n \"editorGutter.background\": \"#f4f4f6\",\n \"editor.lineHighlightBackground\": \"#e5e6ea\",\n \"editor.lineHighlightBorder\": \"#00000000\",\n \"editor.selectionBackground\": \"#a35e2a28\",\n \"editor.inactiveSelectionBackground\": \"#a35e2a14\",\n \"editor.selectionHighlightBackground\": \"#a35e2a10\",\n \"editor.findMatchBackground\": \"#a35e2a33\",\n \"editor.findMatchHighlightBackground\": \"#a35e2a1a\",\n \"editor.wordHighlightBackground\": \"#a35e2a14\",\n \"editor.wordHighlightStrongBackground\": \"#a35e2a22\",\n \"editorCursor.foreground\": \"#a35e2a\",\n \"editorWidget.border\": \"#d7d9e0\",\n \"scrollbar.shadow\": \"#00000000\",\n \"scrollbarSlider.hoverBackground\": \"#bec1c966\",\n \"scrollbarSlider.activeBackground\": \"#bec1c999\",\n \"diffEditor.insertedTextBackground\": \"#bbf7d099\",\n \"diffEditor.removedTextBackground\": \"#fecaca99\",\n \"diffEditor.insertedLineBackground\": \"#dcfce766\",\n \"diffEditor.removedLineBackground\": \"#fee2e266\",\n \"diffEditor.insertedTextBorder\": \"#00000000\",\n \"diffEditor.removedTextBorder\": \"#00000000\",\n \"diffEditor.diagonalFill\": \"#d7d9e0\",\n \"editorGutter.modifiedBackground\": \"#8a6d1c\",\n \"editorGutter.addedBackground\": \"#2a7a3e\",\n \"editorGutter.deletedBackground\": \"#a34530\",\n \"editorBracketMatch.background\": \"#a35e2a14\",\n \"editorBracketMatch.border\": \"#a35e2a44\",\n \"editorIndentGuide.background\": \"#d7d9e0\",\n \"editorIndentGuide.activeBackground\": \"#bec1c9\",\n \"editorOverviewRuler.border\": \"#00000000\",\n \"peekView.border\": \"#d7d9e0\",\n \"peekViewEditor.background\": \"#ffffff\",\n \"peekViewResult.background\": \"#f4f4f6\",\n \"peekViewTitle.background\": \"#ffffff\",\n \"minimap.background\": \"#f4f4f6\",\n \"editor.foldBackground\": \"#e5e6ea66\",\n \"editorGutter.foldingControlForeground\": \"#6b7280\",\n \"menu.separatorBackground\": \"#d7d9e0\",\n \"toolbar.hoverBackground\": \"#e5e6ea88\"\n },\n tokenColors: [\n { scope: \"\", settings: { foreground: \"#111827\", background: \"#f4f4f6\" } },\n { scope: \"comment\", settings: { foreground: \"#7a8194\", fontStyle: \"italic\" } },\n { scope: \"keyword\", settings: { foreground: \"#7b42b0\" } },\n { scope: \"keyword.control\", settings: { foreground: \"#7b42b0\" } },\n { scope: \"storage.type\", settings: { foreground: \"#7b42b0\" } },\n { scope: \"string\", settings: { foreground: \"#2a8282\" } },\n { scope: \"string.key.json\", settings: { foreground: \"#2a8282\" } },\n { scope: \"string.value.json\", settings: { foreground: \"#2a8282\" } },\n { scope: \"number\", settings: { foreground: \"#a35e2a\" } },\n { scope: \"constant\", settings: { foreground: \"#a35e2a\" } },\n { scope: \"type\", settings: { foreground: \"#2a8282\" } },\n { scope: \"type.identifier\", settings: { foreground: \"#2a8282\" } },\n { scope: \"class\", settings: { foreground: \"#8a6d1c\" } },\n { scope: \"function\", settings: { foreground: \"#8a6d1c\" } },\n { scope: \"variable\", settings: { foreground: \"#6b5c2b\" } },\n { scope: \"variable.predefined\", settings: { foreground: \"#6b5c2b\" } },\n { scope: \"attribute.name\", settings: { foreground: \"#2a8282\" } },\n { scope: \"attribute.value\", settings: { foreground: \"#2a8282\" } },\n { scope: \"tag\", settings: { foreground: \"#7b42b0\" } },\n { scope: \"metatag\", settings: { foreground: \"#a34530\" } },\n { scope: \"annotation\", settings: { foreground: \"#2a8282\" } },\n { scope: \"regexp\", settings: { foreground: \"#6b5c2b\" } },\n { scope: \"delimiter\", settings: { foreground: \"#6b7280\" } },\n { scope: \"delimiter.bracket\", settings: { foreground: \"#6b7280\" } },\n { scope: \"operator\", settings: { foreground: \"#6b7280\" } }\n ]\n};\n// src/canvas/canvas-repository.ts\nimport { change, loro, subscribe } from \"@loro-extended/change\";\n\n// src/canvas/canvas-shapes.ts\nimport { Shape } from \"@loro-extended/change\";\nvar CANVAS_ELEMENT_TYPES = [\n \"tiptap\",\n \"html\",\n \"stroke-group\",\n \"mermaid\",\n \"svg\",\n \"image\",\n \"preview\",\n \"frame\",\n \"sticky\",\n \"code\",\n \"geo\",\n \"connector\",\n \"er-table\"\n];\nvar CanvasElementDataShape = Shape.struct({\n type: Shape.plain.string(...CANVAS_ELEMENT_TYPES),\n x: Shape.plain.number(),\n y: Shape.plain.number(),\n width: Shape.plain.number(),\n height: Shape.plain.number(),\n zIndex: Shape.plain.number(),\n data: Shape.plain.any(),\n parentId: Shape.plain.string().nullable(),\n rotation: Shape.plain.number().nullable()\n});\nvar CanvasDocumentSchema = Shape.doc({\n elements: Shape.tree(CanvasElementDataShape)\n}, { mergeable: true });\nvar CanvasPresenceShape = Shape.plain.struct({\n displayName: Shape.plain.string(),\n color: Shape.plain.string(),\n x: Shape.plain.number(),\n y: Shape.plain.number(),\n tool: Shape.plain.string(),\n timestamp: Shape.plain.number()\n});\nvar CanvasActiveDragShape = Shape.plain.struct({\n elementId: Shape.plain.string(),\n x: Shape.plain.number(),\n y: Shape.plain.number(),\n timestamp: Shape.plain.number()\n});\nvar CANVAS_EPHEMERAL_DECLARATIONS = {\n presence: CanvasPresenceShape,\n activeDrag: CanvasActiveDragShape\n};\nfunction buildCanvasDocId(taskId, epoch) {\n if (!taskId)\n throw new Error(\"taskId must be non-empty\");\n if (taskId.includes(\":\"))\n throw new Error(`taskId must not contain colons: \"${taskId}\"`);\n if (!Number.isInteger(epoch) || epoch < 1) {\n throw new Error(`epoch must be a positive integer: ${epoch}`);\n }\n return `canvas:${taskId}:${epoch}`;\n}\n\n// src/canvas/canvas-repository.ts\nfunction applyElementPatch(d, patch) {\n if (patch.x !== undefined)\n d.x.set(patch.x);\n if (patch.y !== undefined)\n d.y.set(patch.y);\n if (patch.width !== undefined)\n d.width.set(patch.width);\n if (patch.height !== undefined)\n d.height.set(patch.height);\n if (patch.zIndex !== undefined)\n d.zIndex.set(patch.zIndex);\n if (patch.data !== undefined)\n d.data.set(patch.data);\n if (\"parentId\" in patch)\n d.parentId.set(patch.parentId ?? null);\n if (\"rotation\" in patch)\n d.rotation.set(patch.rotation ?? null);\n}\n\nclass CanvasRepository {\n #repo;\n #epoch;\n #storageAdapter;\n #canvasDocs = new Map;\n constructor(repo, epoch, storageAdapter) {\n this.#repo = repo;\n this.#epoch = epoch;\n this.#storageAdapter = storageAdapter ?? null;\n }\n getOrCreateCanvasDoc(taskId) {\n let doc = this.#canvasDocs.get(taskId);\n if (!doc) {\n const docId = buildCanvasDocId(taskId, this.#epoch);\n doc = this.#repo.get(docId, CanvasDocumentSchema, CANVAS_EPHEMERAL_DECLARATIONS);\n this.#canvasDocs.set(taskId, doc);\n loro(doc).getTree(\"elements\").enableFractionalIndex(2);\n }\n return doc;\n }\n async hasLocalDoc(taskId) {\n if (!this.#storageAdapter)\n return true;\n const docId = buildCanvasDocId(taskId, this.#epoch);\n return this.#storageAdapter.hasDoc(docId);\n }\n createElement(taskId, elementData) {\n const doc = this.getOrCreateCanvasDoc(taskId);\n let nodeId;\n change(doc, (draft) => {\n const node = draft.elements.createNode({\n type: elementData.type,\n x: elementData.x,\n y: elementData.y,\n width: elementData.width,\n height: elementData.height,\n zIndex: elementData.zIndex,\n data: elementData.data\n });\n nodeId = node.id;\n });\n if (!nodeId) {\n throw new Error(\"Failed to create canvas element\");\n }\n return nodeId;\n }\n updateElement(taskId, nodeId, patch) {\n const doc = this.getOrCreateCanvasDoc(taskId);\n change(doc, (draft) => {\n const node = draft.elements.getNodeByID(nodeId);\n if (!node)\n throw new Error(`Node not found: ${nodeId}`);\n applyElementPatch(node.data, patch);\n });\n }\n deleteElement(taskId, nodeId) {\n const doc = this.getOrCreateCanvasDoc(taskId);\n change(doc, (draft) => {\n draft.elements.delete(nodeId);\n });\n }\n getElements(taskId) {\n const doc = this.getOrCreateCanvasDoc(taskId);\n const nodes = doc.toJSON().elements;\n return nodes.map((node) => {\n const id = node.id;\n const data = node.data;\n return { id, data };\n });\n }\n getChildrenOf(taskId, frameId) {\n return this.getElements(taskId).filter((el) => el.data.parentId === frameId);\n }\n subscribe(taskId, callback) {\n const doc = this.getOrCreateCanvasDoc(taskId);\n return subscribe(doc, callback);\n }\n invalidate(taskId) {\n this.#canvasDocs.delete(taskId);\n }\n dispose() {\n this.#canvasDocs.clear();\n }\n}\n// src/canvas/elements/code-util-schema.ts\nimport { z } from \"zod\";\nvar CODE_LANGUAGES = [\n \"typescript\",\n \"javascript\",\n \"json\",\n \"prisma\",\n \"sql\",\n \"bash\",\n \"yaml\",\n \"markdown\",\n \"plain\"\n];\nvar CodeElementDataSchema = z.object({\n content: z.unknown().default(null),\n language: z.enum(CODE_LANGUAGES).default(\"typescript\")\n}).passthrough().nullish();\nvar codeElementUtilSchema = {\n type: \"code\",\n defaultData: () => ({ content: null, language: \"typescript\" }),\n validate: CodeElementDataSchema,\n canResize: true,\n canRotate: false,\n toolbarSlot: \"secondary\",\n label: \"Code\",\n isIframeContent: false,\n commentInteraction: \"wrapper-overlay\",\n captureStrategy: \"dom\",\n publishBindKind: \"none\",\n canPublish: false\n};\n\n// src/canvas/elements/connector-util-schema.ts\nimport { z as z2 } from \"zod\";\nvar CONNECTOR_CAPS = [\n \"none\",\n \"arrow\",\n \"triangle\",\n \"triangle-filled\",\n \"circle\",\n \"circle-filled\",\n \"crow-only\",\n \"one-only\",\n \"crow-many\",\n \"one-many\",\n \"crow-zero-or-one\",\n \"crow-zero-or-many\",\n \"one-zero-or-many\"\n];\nvar CONNECTOR_LINE_TYPES = [\n \"straight\",\n \"elbowed\",\n \"curved\"\n];\nvar CONNECTOR_STROKE_STYLES = [\n \"solid\",\n \"dashed\",\n \"dotted\"\n];\nvar CONNECTOR_MAGNETS = [\n \"AUTO\",\n \"TOP\",\n \"RIGHT\",\n \"BOTTOM\",\n \"LEFT\",\n \"CENTER\"\n];\nvar ConnectorEndpointSchema = z2.discriminatedUnion(\"kind\", [\n z2.object({\n kind: z2.literal(\"free\"),\n x: z2.number(),\n y: z2.number()\n }),\n z2.object({\n kind: z2.literal(\"node-with-magnet\"),\n nodeId: z2.string(),\n magnet: z2.enum(CONNECTOR_MAGNETS)\n }),\n z2.object({\n kind: z2.literal(\"node-without-magnet\"),\n nodeId: z2.string(),\n offsetX: z2.number(),\n offsetY: z2.number()\n }),\n z2.object({\n kind: z2.literal(\"node-with-anchor\"),\n nodeId: z2.string(),\n anchor: z2.string()\n })\n]);\nvar ConnectorCaptionSchema = z2.object({\n id: z2.string(),\n text: z2.string(),\n position: z2.number().min(0).max(1)\n});\nvar ConnectorElementDataSchema = z2.object({\n start: ConnectorEndpointSchema,\n end: ConnectorEndpointSchema,\n lineType: z2.enum(CONNECTOR_LINE_TYPES).default(\"straight\"),\n startCap: z2.enum(CONNECTOR_CAPS).default(\"none\"),\n endCap: z2.enum(CONNECTOR_CAPS).default(\"arrow\"),\n captions: z2.array(ConnectorCaptionSchema).default([]),\n strokeWidth: z2.number().min(0).default(2),\n strokeColor: z2.string().default(\"#1f2937\"),\n strokeStyle: z2.enum(CONNECTOR_STROKE_STYLES).default(\"solid\")\n}).passthrough().nullish();\nvar connectorElementUtilSchema = {\n type: \"connector\",\n defaultData: () => ({\n start: { kind: \"free\", x: 0, y: 0 },\n end: { kind: \"free\", x: 100, y: 0 },\n lineType: \"straight\",\n startCap: \"none\",\n endCap: \"arrow\",\n captions: [],\n strokeWidth: 2,\n strokeColor: \"#1f2937\",\n strokeStyle: \"solid\"\n }),\n validate: ConnectorElementDataSchema,\n canResize: false,\n canRotate: false,\n toolbarSlot: \"secondary\",\n label: \"Connector\",\n isIframeContent: false,\n commentInteraction: \"wrapper-overlay\",\n captureStrategy: \"dom\",\n publishBindKind: \"none\",\n canPublish: false\n};\n\n// src/canvas/elements/er-table-util-schema.ts\nimport { z as z3 } from \"zod\";\nvar ErTableElementDataSchema = z3.object({\n rows: z3.number().int().min(1).default(3),\n columns: z3.number().int().min(1).default(3),\n cells: z3.record(z3.string(), z3.string()).default({}),\n headers: z3.array(z3.string()).default([]),\n connectionAnchors: z3.boolean().default(false),\n borderColor: z3.string().default(\"#d1d5db\"),\n headerBgColor: z3.string().default(\"#f3f4f6\"),\n bodyBgColor: z3.string().default(\"#ffffff\")\n}).passthrough().nullish();\nvar erTableElementUtilSchema = {\n type: \"er-table\",\n defaultData: () => ({\n rows: 3,\n columns: 3,\n cells: {},\n headers: [],\n connectionAnchors: false,\n borderColor: \"#d1d5db\",\n headerBgColor: \"#f3f4f6\",\n bodyBgColor: \"#ffffff\"\n }),\n validate: ErTableElementDataSchema,\n canResize: true,\n canRotate: false,\n toolbarSlot: \"primary\",\n label: \"Table\",\n isIframeContent: false,\n commentInteraction: \"wrapper-overlay\",\n captureStrategy: \"dom\",\n publishBindKind: \"none\",\n canPublish: false\n};\n\n// src/canvas/elements/frame-util-schema.ts\nimport { z as z4 } from \"zod\";\nvar FrameElementDataSchema = z4.object({\n label: z4.string().optional(),\n clipsContent: z4.boolean().default(true)\n}).passthrough().nullish();\nvar frameElementUtilSchema = {\n type: \"frame\",\n defaultData: () => ({ label: \"\", clipsContent: true }),\n validate: FrameElementDataSchema,\n canResize: true,\n canRotate: false,\n toolbarSlot: \"primary\",\n label: \"Frame\",\n isIframeContent: false,\n commentInteraction: \"wrapper-overlay\",\n captureStrategy: \"dom\",\n publishBindKind: \"none\",\n canPublish: false\n};\n\n// src/canvas/elements/geo-util-schema.ts\nimport { z as z5 } from \"zod\";\nvar GEO_SHAPE_TYPES = [\n \"rectangle\",\n \"ellipse\",\n \"diamond\",\n \"triangle-up\",\n \"triangle-down\",\n \"hexagon\",\n \"star\",\n \"parallelogram\",\n \"trapezoid\",\n \"arrow\",\n \"callout\",\n \"cloud\"\n];\nvar GeoElementDataSchema = z5.object({\n shapeType: z5.enum(GEO_SHAPE_TYPES).default(\"rectangle\"),\n cornerRadius: z5.number().min(0).default(0),\n fill: z5.string().default(\"#ffffff\"),\n stroke: z5.string().default(\"#1f2937\"),\n strokeWidth: z5.number().min(0).default(2),\n text: z5.string().default(\"\")\n}).passthrough().nullish();\nvar geoElementUtilSchema = {\n type: \"geo\",\n defaultData: () => ({\n shapeType: \"rectangle\",\n cornerRadius: 0,\n fill: \"#ffffff\",\n stroke: \"#1f2937\",\n strokeWidth: 2,\n text: \"\"\n }),\n validate: GeoElementDataSchema,\n canResize: true,\n canRotate: true,\n toolbarSlot: \"primary\",\n label: \"Shape\",\n isIframeContent: false,\n commentInteraction: \"wrapper-overlay\",\n captureStrategy: \"dom\",\n publishBindKind: \"none\",\n canPublish: false\n};\n\n// src/canvas/elements/html-util-schema.ts\nimport { z as z6 } from \"zod\";\nvar HtmlElementDataSchema = z6.object({\n content: z6.string().optional(),\n slug: z6.string().optional()\n}).passthrough().nullish();\nvar htmlElementUtilSchema = {\n type: \"html\",\n defaultData: () => ({ content: \"\" }),\n validate: HtmlElementDataSchema,\n canResize: true,\n canRotate: false,\n toolbarSlot: \"overflow\",\n label: \"HTML\",\n isIframeContent: true,\n commentInteraction: \"iframe-postmessage\",\n captureStrategy: \"iframe-or-dom\",\n publishBindKind: \"slug\",\n canPublish: true\n};\n\n// src/canvas/elements/image-util-schema.ts\nimport { z as z7 } from \"zod\";\nvar ImageElementDataSchema = z7.object({\n src: z7.string().optional(),\n slug: z7.string().optional()\n}).passthrough().nullish();\nvar imageElementUtilSchema = {\n type: \"image\",\n defaultData: () => ({}),\n validate: ImageElementDataSchema,\n canResize: true,\n canRotate: false,\n preserveAspectRatio: true,\n toolbarSlot: \"overflow\",\n label: \"Image\",\n isIframeContent: false,\n commentInteraction: \"wrapper-overlay\",\n captureStrategy: \"image-blob\",\n publishBindKind: \"slug\",\n canPublish: true\n};\n\n// src/canvas/elements/mermaid-util-schema.ts\nimport { z as z8 } from \"zod\";\nvar MermaidElementDataSchema = z8.object({\n code: z8.string().optional(),\n source: z8.string().optional(),\n slug: z8.string().optional()\n}).passthrough().nullish();\nvar mermaidElementUtilSchema = {\n type: \"mermaid\",\n defaultData: () => ({ code: `graph TD;\n A[Start] --> B[Edit me]` }),\n validate: MermaidElementDataSchema,\n canResize: true,\n canRotate: false,\n toolbarSlot: \"secondary\",\n label: \"Diagram\",\n isIframeContent: false,\n commentInteraction: \"inline-handler\",\n captureStrategy: \"iframe-or-dom\",\n publishBindKind: \"slug\",\n canPublish: true\n};\n\n// src/canvas/elements/preview-util-schema.ts\nimport { z as z9 } from \"zod\";\nvar PreviewElementDataSchema = z9.object({\n ownerUserId: z9.string().optional()\n}).passthrough().nullish();\nvar previewElementUtilSchema = {\n type: \"preview\",\n defaultData: () => ({ ownerUserId: \"\" }),\n validate: PreviewElementDataSchema,\n canResize: true,\n canRotate: false,\n toolbarSlot: \"overflow\",\n label: \"Preview\",\n isIframeContent: true,\n commentInteraction: \"iframe-postmessage\",\n captureStrategy: \"iframe-or-dom\",\n publishBindKind: \"preview\",\n canPublish: true\n};\n\n// src/canvas/elements/sticky-util-schema.ts\nimport { z as z10 } from \"zod\";\nvar STICKY_COLORS = [\n \"yellow\",\n \"pink\",\n \"orange\",\n \"green\",\n \"blue\",\n \"purple\",\n \"red\",\n \"mint\",\n \"gray\",\n \"white\"\n];\nvar StickyElementDataSchema = z10.object({\n color: z10.enum(STICKY_COLORS).default(\"yellow\"),\n content: z10.unknown().default(null),\n autoGrow: z10.boolean().default(true)\n}).passthrough().nullish();\nvar stickyElementUtilSchema = {\n type: \"sticky\",\n defaultData: () => ({ color: \"yellow\", content: null, autoGrow: true }),\n validate: StickyElementDataSchema,\n canResize: true,\n canRotate: false,\n toolbarSlot: \"primary\",\n label: \"Sticky\",\n isIframeContent: false,\n commentInteraction: \"wrapper-overlay\",\n captureStrategy: \"dom\",\n publishBindKind: \"none\",\n canPublish: false\n};\n\n// src/canvas/elements/stroke-group-util-schema.ts\nimport { z as z11 } from \"zod\";\nvar StrokeGroupElementDataSchema = z11.object({\n encoded: z11.string().optional(),\n version: z11.number().optional()\n}).passthrough().nullish();\nvar strokeGroupElementUtilSchema = {\n type: \"stroke-group\",\n defaultData: () => ({ encoded: \"\", version: 1 }),\n validate: StrokeGroupElementDataSchema,\n canResize: true,\n canRotate: false,\n preserveAspectRatio: true,\n toolbarSlot: \"none\",\n label: \"Drawing\",\n isIframeContent: false,\n commentInteraction: \"wrapper-overlay\",\n captureStrategy: \"stroke-svg\",\n publishBindKind: \"none\",\n canPublish: false\n};\n\n// src/canvas/elements/svg-util-schema.ts\nimport { z as z12 } from \"zod\";\nvar SvgElementDataSchema = z12.object({\n content: z12.string().optional(),\n slug: z12.string().optional()\n}).passthrough().nullish();\nvar svgElementUtilSchema = {\n type: \"svg\",\n defaultData: () => ({ content: \"\" }),\n validate: SvgElementDataSchema,\n canResize: true,\n canRotate: false,\n toolbarSlot: \"overflow\",\n label: \"SVG\",\n isIframeContent: true,\n commentInteraction: \"iframe-postmessage\",\n captureStrategy: \"iframe-or-dom\",\n publishBindKind: \"slug\",\n canPublish: true\n};\n\n// src/canvas/elements/tiptap-util-schema.ts\nimport { z as z13 } from \"zod\";\nvar TiptapElementDataSchema = z13.object({\n richTextDocId: z13.string().optional(),\n content: z13.string().optional()\n}).passthrough().nullish();\nvar tiptapElementUtilSchema = {\n type: \"tiptap\",\n defaultData: () => ({}),\n validate: TiptapElementDataSchema,\n canResize: true,\n canRotate: false,\n toolbarSlot: \"primary\",\n label: \"Rich text\",\n isIframeContent: false,\n commentInteraction: \"none\",\n captureStrategy: \"dom\",\n publishBindKind: \"none\",\n canPublish: false\n};\n\n// src/canvas/element-utils-schema-registry.ts\nvar elementUtilSchemas = {\n html: htmlElementUtilSchema,\n svg: svgElementUtilSchema,\n image: imageElementUtilSchema,\n mermaid: mermaidElementUtilSchema,\n preview: previewElementUtilSchema,\n \"stroke-group\": strokeGroupElementUtilSchema,\n tiptap: tiptapElementUtilSchema,\n frame: frameElementUtilSchema,\n sticky: stickyElementUtilSchema,\n code: codeElementUtilSchema,\n geo: geoElementUtilSchema,\n connector: connectorElementUtilSchema,\n \"er-table\": erTableElementUtilSchema\n};\nfunction getElementUtilSchema(type) {\n return elementUtilSchemas[type];\n}\nfunction validateElementData(type, data) {\n const result = elementUtilSchemas[type].validate.safeParse(data);\n if (result.success)\n return { success: true, data: result.data };\n return { success: false, error: result.error.message };\n}\n// src/canvas/stroke-encoding.ts\nvar PRECISION = 10;\nfunction toInt(value) {\n return Math.round(value * PRECISION);\n}\nfunction fromInt(value) {\n return value / PRECISION;\n}\nfunction toStrokePoint(values) {\n return [values[0] ?? 0, values[1] ?? 0, values[2] ?? 0];\n}\nfunction encodeStrokes(strokes) {\n return {\n strokes: strokes.map((stroke) => {\n if (stroke.points.length === 0) {\n return { deltas: [], color: stroke.color, width: stroke.width };\n }\n const firstPoint = stroke.points[0];\n if (!firstPoint) {\n return { deltas: [], color: stroke.color, width: stroke.width };\n }\n const deltas = [];\n const firstInts = firstPoint.map(toInt);\n deltas.push(firstInts);\n for (let i = 1;i < stroke.points.length; i++) {\n const current = stroke.points[i];\n const previous = stroke.points[i - 1];\n if (!current || !previous)\n continue;\n const delta = [];\n const maxLen = Math.max(current.length, previous.length);\n for (let j = 0;j < maxLen; j++) {\n const cur = toInt(current[j] ?? 0);\n const prev = toInt(previous[j] ?? 0);\n delta.push(cur - prev);\n }\n deltas.push(delta);\n }\n return { deltas, color: stroke.color, width: stroke.width };\n })\n };\n}\nfunction decodeStrokes(encoded) {\n return encoded.strokes.map((encodedStroke) => {\n if (encodedStroke.deltas.length === 0) {\n return { points: [], color: encodedStroke.color, width: encodedStroke.width };\n }\n const firstDelta = encodedStroke.deltas[0];\n if (!firstDelta) {\n return { points: [], color: encodedStroke.color, width: encodedStroke.width };\n }\n const points = [];\n const accum = [...firstDelta];\n points.push(toStrokePoint(accum.map(fromInt)));\n for (let i = 1;i < encodedStroke.deltas.length; i++) {\n const delta = encodedStroke.deltas[i];\n if (!delta)\n continue;\n const maxLen = Math.max(delta.length, accum.length);\n for (let j = 0;j < maxLen; j++) {\n accum[j] = (accum[j] ?? 0) + (delta[j] ?? 0);\n }\n points.push(toStrokePoint(accum.map(fromInt)));\n }\n return { points, color: encodedStroke.color, width: encodedStroke.width };\n });\n}\n// src/comment-schemas.ts\nimport { z as z14 } from \"zod\";\n\n// src/schema-utils.ts\nfunction countLines(content) {\n if (!content)\n return 0;\n const n = content.split(`\n`).length;\n return content.endsWith(`\n`) ? n - 1 : n;\n}\nfunction prop(obj, key) {\n return Object.hasOwn(obj, key) ? obj[key] : undefined;\n}\n\n// src/comment-schemas.ts\nvar BaseCommentZodSchema = z14.object({\n commentId: z14.string(),\n body: z14.string(),\n authorName: z14.string(),\n authorKind: z14.string(),\n createdAt: z14.number(),\n resolvedAt: z14.number().nullable(),\n parentCommentId: z14.string().nullable(),\n screenshot: z14.string().nullable()\n});\nvar ANNOTATION_TYPES = [\n \"plan-text\",\n \"diff-hunk\",\n \"preview-element\",\n \"canvas-element\",\n \"canvas-sub-element\"\n];\nvar ANNOTATION_ALIAS_TO_TYPE = {\n diff: \"diff-hunk\",\n plan: \"plan-text\",\n preview: \"preview-element\",\n canvas: \"canvas-element\",\n \"canvas-sub\": \"canvas-sub-element\"\n};\nvar ANNOTATION_ALIASES = Object.keys(ANNOTATION_ALIAS_TO_TYPE);\nfunction resolveAnnotationAlias(alias) {\n return ANNOTATION_ALIAS_TO_TYPE[alias];\n}\nvar ANNOTATION_TYPE_TO_ALIAS = {\n \"diff-hunk\": \"diff\",\n \"plan-text\": \"plan\",\n \"preview-element\": \"preview\",\n \"canvas-element\": \"canvas\",\n \"canvas-sub-element\": \"canvas-sub\"\n};\nvar PlanTextAnnotationSchema = BaseCommentZodSchema.extend({\n annotationType: z14.literal(\"plan-text\"),\n anchorText: z14.string(),\n anchorContext: z14.string().nullable()\n});\nvar ExternalCommentSchema = z14.object({\n commentId: z14.string(),\n threadId: z14.string().nullable(),\n reviewId: z14.string().nullable(),\n commitId: z14.string(),\n repo: z14.string(),\n prNumber: z14.number(),\n url: z14.string(),\n isOutdated: z14.boolean().default(false),\n coversLines: z14.tuple([z14.number(), z14.number()]).nullable().default(null)\n});\nvar DiffHunkAnnotationSchema = BaseCommentZodSchema.extend({\n annotationType: z14.literal(\"diff-hunk\"),\n filePath: z14.string(),\n lineNumber: z14.number(),\n lineContent: z14.string(),\n lineContentHash: z14.string(),\n side: z14.enum([\"original\", \"modified\"]),\n diffScope: z14.enum([\"working-tree\", \"branch\", \"last-turn\", \"pr\"]).default(\"working-tree\"),\n baseRef: z14.string().nullable().default(null),\n baseLabel: z14.string().nullable().default(null),\n provider: z14.enum([\"shipyard\", \"github\"]).default(\"shipyard\"),\n external: ExternalCommentSchema.nullable().default(null),\n syncStatus: z14.enum([\"local\", \"pulled\", \"reply-pending\", \"replied\"]).default(\"local\")\n});\nvar PreviewElementAnnotationSchema = BaseCommentZodSchema.extend({\n annotationType: z14.literal(\"preview-element\"),\n url: z14.string(),\n elementSelector: z14.string(),\n elementText: z14.string(),\n boundingRect: z14.string(),\n elementHtml: z14.string().nullable(),\n tagName: z14.string().nullable(),\n componentName: z14.string().nullable(),\n sourceFile: z14.string().nullable(),\n sourceLine: z14.number().nullable(),\n framework: z14.string().nullable(),\n pageBackground: z14.string().nullable(),\n componentTree: z14.string().nullable(),\n cssClasses: z14.string().nullable(),\n computedStyles: z14.string().nullable()\n});\nvar CanvasElementAnnotationSchema = BaseCommentZodSchema.extend({\n annotationType: z14.literal(\"canvas-element\"),\n canvasElementId: z14.string(),\n elementType: z14.string(),\n canvasX: z14.number(),\n canvasY: z14.number(),\n canvasWidth: z14.number(),\n canvasHeight: z14.number(),\n pinOffsetX: z14.number().nullable().default(null),\n pinOffsetY: z14.number().nullable().default(null)\n});\nvar CanvasSubElementAnnotationSchema = BaseCommentZodSchema.extend({\n annotationType: z14.literal(\"canvas-sub-element\"),\n canvasElementId: z14.string(),\n elementType: z14.string(),\n canvasX: z14.number(),\n canvasY: z14.number(),\n canvasWidth: z14.number(),\n canvasHeight: z14.number(),\n elementSelector: z14.string(),\n elementText: z14.string(),\n boundingRect: z14.string(),\n tagName: z14.string().nullable(),\n elementHtml: z14.string().nullable(),\n cssClasses: z14.string().nullable(),\n computedStyles: z14.string().nullable(),\n pageBackground: z14.string().nullable(),\n pinOffsetX: z14.number().nullable().default(null),\n pinOffsetY: z14.number().nullable().default(null)\n});\nvar AnnotationZodSchema = z14.discriminatedUnion(\"annotationType\", [\n PlanTextAnnotationSchema,\n DiffHunkAnnotationSchema,\n PreviewElementAnnotationSchema,\n CanvasElementAnnotationSchema,\n CanvasSubElementAnnotationSchema\n]);\nvar PlanCommentZodSchema = PlanTextAnnotationSchema;\nvar DiffCommentZodSchema = DiffHunkAnnotationSchema;\nvar PreviewAnnotationZodSchema = PreviewElementAnnotationSchema;\nvar PlanVersionZodSchema = z14.object({\n markdown: z14.string(),\n timestamp: z14.number(),\n source: z14.string(),\n toolUseId: z14.string()\n});\nvar ANNOTATION_STORE_VERSION = 1;\nvar AnnotationStoreSchema = z14.object({\n schemaVersion: z14.number(),\n records: z14.record(z14.string(), AnnotationZodSchema),\n deliveredIds: z14.array(z14.string()),\n planVersions: z14.array(PlanVersionZodSchema)\n});\nfunction migrateAnnotationStore(raw) {\n if (typeof raw !== \"object\" || raw === null) {\n return {\n schemaVersion: ANNOTATION_STORE_VERSION,\n records: {},\n deliveredIds: [],\n planVersions: []\n };\n }\n const recordsResult = z14.record(z14.string(), AnnotationZodSchema).safeParse(prop(raw, \"records\") ?? {});\n const idsResult = z14.array(z14.string()).safeParse(prop(raw, \"deliveredIds\") ?? []);\n const versionsResult = z14.array(PlanVersionZodSchema).safeParse(prop(raw, \"planVersions\") ?? []);\n return {\n schemaVersion: ANNOTATION_STORE_VERSION,\n records: recordsResult.success ? recordsResult.data : {},\n deliveredIds: idsResult.success ? idsResult.data : [],\n planVersions: versionsResult.success ? versionsResult.data : []\n };\n}\nvar DIFF_COMMENT_STORE_VERSION = 1;\nvar DiffCommentStoreSchema = z14.object({\n schemaVersion: z14.number(),\n records: z14.record(z14.string(), DiffCommentZodSchema),\n deliveredCommentIds: z14.array(z14.string())\n});\nfunction migrateDiffCommentStore(raw) {\n if (typeof raw !== \"object\" || raw === null) {\n return { schemaVersion: DIFF_COMMENT_STORE_VERSION, records: {}, deliveredCommentIds: [] };\n }\n const recordsResult = z14.record(z14.string(), DiffCommentZodSchema).safeParse(prop(raw, \"records\") ?? {});\n const idsResult = z14.array(z14.string()).safeParse(prop(raw, \"deliveredCommentIds\") ?? []);\n return {\n schemaVersion: DIFF_COMMENT_STORE_VERSION,\n records: recordsResult.success ? recordsResult.data : {},\n deliveredCommentIds: idsResult.success ? idsResult.data : []\n };\n}\nvar PREVIEW_ANNOTATION_STORE_VERSION = 1;\nvar PreviewAnnotationStoreSchema = z14.object({\n schemaVersion: z14.number(),\n records: z14.record(z14.string(), PreviewAnnotationZodSchema),\n deliveredAnnotationIds: z14.array(z14.string())\n});\nfunction migratePreviewAnnotationStore(raw) {\n if (typeof raw !== \"object\" || raw === null) {\n return {\n schemaVersion: PREVIEW_ANNOTATION_STORE_VERSION,\n records: {},\n deliveredAnnotationIds: []\n };\n }\n const recordsResult = z14.record(z14.string(), PreviewAnnotationZodSchema).safeParse(prop(raw, \"records\") ?? {});\n const idsResult = z14.array(z14.string()).safeParse(prop(raw, \"deliveredAnnotationIds\") ?? []);\n return {\n schemaVersion: PREVIEW_ANNOTATION_STORE_VERSION,\n records: recordsResult.success ? recordsResult.data : {},\n deliveredAnnotationIds: idsResult.success ? idsResult.data : []\n };\n}\nvar PLAN_COMMENT_STORE_VERSION = 1;\nvar PlanCommentStoreSchema = z14.object({\n schemaVersion: z14.number(),\n records: z14.record(z14.string(), PlanCommentZodSchema),\n deliveredCommentIds: z14.array(z14.string()),\n versions: z14.array(PlanVersionZodSchema)\n});\nfunction migratePlanCommentStore(raw) {\n if (typeof raw !== \"object\" || raw === null) {\n return {\n schemaVersion: PLAN_COMMENT_STORE_VERSION,\n records: {},\n deliveredCommentIds: [],\n versions: []\n };\n }\n const recordsResult = z14.record(z14.string(), PlanCommentZodSchema).safeParse(prop(raw, \"records\") ?? {});\n const idsResult = z14.array(z14.string()).safeParse(prop(raw, \"deliveredCommentIds\") ?? []);\n const versionsResult = z14.array(PlanVersionZodSchema).safeParse(prop(raw, \"versions\") ?? []);\n return {\n schemaVersion: PLAN_COMMENT_STORE_VERSION,\n records: recordsResult.success ? recordsResult.data : {},\n deliveredCommentIds: idsResult.success ? idsResult.data : [],\n versions: versionsResult.success ? versionsResult.data : []\n };\n}\n// src/crdt-compactor.ts\nimport { LoroDoc } from \"loro-crdt\";\nvar DEFAULT_INTERVAL_MS = 60000;\nvar DEFAULT_CHUNK_THRESHOLD = 10;\nfunction buildCompactionPlan(allChunks, threshold) {\n const byDoc = new Map;\n for (const chunk of allChunks) {\n const docId = chunk.key[0];\n if (!docId)\n continue;\n const list = byDoc.get(docId);\n if (list) {\n list.push(chunk);\n } else {\n byDoc.set(docId, [chunk]);\n }\n }\n const plans = [];\n for (const [docId, chunks] of byDoc) {\n if (chunks.length > threshold) {\n plans.push({ docId, chunks });\n }\n }\n return plans;\n}\nfunction reconstructDoc(chunks) {\n const doc = new LoroDoc;\n const updates = chunks.map((c) => c.data);\n try {\n doc.importBatch(updates);\n } catch {\n return null;\n }\n return doc;\n}\n\nclass CrdtCompactor {\n #storage;\n #intervalMs;\n #chunkThreshold;\n #timer = null;\n #disposed = false;\n #running = false;\n constructor(options) {\n this.#storage = options.storage;\n this.#intervalMs = options.intervalMs ?? DEFAULT_INTERVAL_MS;\n this.#chunkThreshold = options.chunkThreshold ?? DEFAULT_CHUNK_THRESHOLD;\n }\n start() {\n if (this.#disposed || this.#timer)\n return;\n this.#timer = setInterval(() => {\n this.compactNow().catch(() => {});\n }, this.#intervalMs);\n }\n stop() {\n if (this.#timer) {\n clearInterval(this.#timer);\n this.#timer = null;\n }\n }\n dispose() {\n this.stop();\n this.#disposed = true;\n }\n async compactNow() {\n if (this.#disposed || this.#running)\n return;\n this.#running = true;\n try {\n const allChunks = await this.#storage.loadRange([]);\n const plans = buildCompactionPlan(allChunks, this.#chunkThreshold);\n for (const plan of plans) {\n await this.#compactDoc(plan);\n }\n } finally {\n this.#running = false;\n }\n }\n async#compactDoc(plan) {\n const { docId, chunks } = plan;\n const doc = reconstructDoc(chunks);\n if (!doc)\n return;\n const snapshot = doc.export({ mode: \"snapshot\" });\n const snapshotKey = [docId, \"snapshot\", String(Date.now())];\n await this.#storage.save(snapshotKey, snapshot);\n for (const chunk of chunks) {\n await this.#storage.remove(chunk.key);\n }\n }\n}\n// src/epoch.ts\nvar PLAN_EPOCH = 3;\nvar CANVAS_EPOCH = 2;\nvar OBSOLETE_PREFIXES = new Set([\"typing\", \"task-view\"]);\nvar DOCUMENT_PREFIXES = [\"plan\", \"canvas\"];\nvar PREFIX_SET = new Set(DOCUMENT_PREFIXES);\nfunction isDocumentPrefix(value) {\n return PREFIX_SET.has(value);\n}\nfunction parseDocumentId(id) {\n const parts = id.split(\":\");\n if (parts.length !== 3)\n return null;\n const [prefix, key, epochStr] = parts;\n if (!prefix || !key || !epochStr)\n return null;\n if (!isDocumentPrefix(prefix))\n return null;\n const epoch = Number.parseInt(epochStr, 10);\n if (!Number.isFinite(epoch) || epoch < 1)\n return null;\n if (epochStr !== String(epoch))\n return null;\n return { prefix, key, epoch };\n}\nfunction isEpochValid(clientEpoch, minimumEpoch) {\n return clientEpoch >= minimumEpoch;\n}\n// src/harness-tools.ts\nvar HARNESS_SERVER_NAME = \"shipyard-harness\";\nvar VISUALIZE_SERVER_NAME = HARNESS_SERVER_NAME;\nvar COMMENT_SERVER_NAME = HARNESS_SERVER_NAME;\nvar VISUALIZE_READ_ME_TOOL = \"read_me\";\nvar VISUALIZE_TOOL = \"visualize\";\nvar PRESENT_TOOL = \"present\";\nvar VISUALIZE_READ_ME_QUALIFIED = `mcp__${HARNESS_SERVER_NAME}__${VISUALIZE_READ_ME_TOOL}`;\nvar VISUALIZE_TOOL_QUALIFIED = `mcp__${HARNESS_SERVER_NAME}__${VISUALIZE_TOOL}`;\nvar PRESENT_TOOL_QUALIFIED = `mcp__${HARNESS_SERVER_NAME}__${PRESENT_TOOL}`;\nvar COMMENT_ADD_TOOL = \"add_comment\";\nvar COMMENT_LIST_TOOL = \"list_comments\";\nvar COMMENT_READ_THREAD_TOOL = \"read_comment_thread\";\nvar COMMENT_ADD_QUALIFIED = `mcp__${HARNESS_SERVER_NAME}__${COMMENT_ADD_TOOL}`;\nvar COMMENT_LIST_QUALIFIED = `mcp__${HARNESS_SERVER_NAME}__${COMMENT_LIST_TOOL}`;\nvar COMMENT_READ_THREAD_QUALIFIED = `mcp__${HARNESS_SERVER_NAME}__${COMMENT_READ_THREAD_TOOL}`;\nvar PLUGIN_READ_ME_TOOL = \"plugin_read_me\";\nvar BUILD_PLUGIN_TOOL = \"build_plugin\";\nvar PLUGIN_READ_ME_QUALIFIED = `mcp__${HARNESS_SERVER_NAME}__${PLUGIN_READ_ME_TOOL}`;\nvar BUILD_PLUGIN_TOOL_QUALIFIED = `mcp__${HARNESS_SERVER_NAME}__${BUILD_PLUGIN_TOOL}`;\nvar SET_PREVIEW_TARGET_TOOL = \"set_preview_target\";\nvar SET_PREVIEW_TARGET_QUALIFIED = `mcp__${HARNESS_SERVER_NAME}__${SET_PREVIEW_TARGET_TOOL}`;\nvar SUGGEST_PROMOTE_TOOL = \"suggest_promote_to_task\";\nvar SUGGEST_PROMOTE_QUALIFIED = `mcp__${HARNESS_SERVER_NAME}__${SUGGEST_PROMOTE_TOOL}`;\nvar SET_TASK_CAPABILITIES_TOOL = \"shipyard_set_task_capabilities\";\nvar SET_TASK_CAPABILITIES_QUALIFIED = `mcp__${HARNESS_SERVER_NAME}__${SET_TASK_CAPABILITIES_TOOL}`;\nvar PUBLISH_TOOL = \"publish\";\nvar UNPUBLISH_TOOL = \"unpublish\";\nvar PUBLISH_TOOL_QUALIFIED = `mcp__${HARNESS_SERVER_NAME}__${PUBLISH_TOOL}`;\nvar UNPUBLISH_TOOL_QUALIFIED = `mcp__${HARNESS_SERVER_NAME}__${UNPUBLISH_TOOL}`;\nvar POST_TO_THREAD_TOOL = \"post_to_thread\";\nvar POST_TO_THREAD_QUALIFIED = `mcp__${HARNESS_SERVER_NAME}__${POST_TO_THREAD_TOOL}`;\nvar RENDERED_TOOL_NAMES = [\n \"Edit\",\n \"Read\",\n \"Write\",\n \"Bash\",\n \"Grep\",\n \"Glob\",\n \"WebSearch\",\n \"WebFetch\",\n \"TaskCreate\",\n \"TaskUpdate\",\n \"TaskList\",\n VISUALIZE_READ_ME_QUALIFIED,\n VISUALIZE_TOOL_QUALIFIED,\n PRESENT_TOOL_QUALIFIED,\n COMMENT_ADD_QUALIFIED,\n COMMENT_LIST_QUALIFIED,\n PLUGIN_READ_ME_QUALIFIED,\n BUILD_PLUGIN_TOOL_QUALIFIED,\n SET_PREVIEW_TARGET_QUALIFIED,\n PUBLISH_TOOL_QUALIFIED,\n UNPUBLISH_TOOL_QUALIFIED\n];\nvar renderedToolSet = new Set(RENDERED_TOOL_NAMES);\nfunction isRenderedTool(name) {\n return renderedToolSet.has(name);\n}\n// src/participant-ids.ts\nvar AGENT_SYSTEM_CLAUDE_CODE = \"claude-code\";\nvar PENDING_AGENT_PARTICIPANT_ID = `agent:${AGENT_SYSTEM_CLAUDE_CODE}:pending`;\nfunction buildPendingAgentParticipantId(agentSystem = AGENT_SYSTEM_CLAUDE_CODE) {\n return `agent:${agentSystem}:pending`;\n}\nfunction buildHumanParticipantId(userId) {\n return `human:${userId}`;\n}\nfunction buildAgentParticipantId(sessionId, agentSystem = AGENT_SYSTEM_CLAUDE_CODE) {\n return `agent:${agentSystem}:${sessionId}`;\n}\n// src/plan/plan-helpers.ts\nfunction extractPlanMarkdown(toolInput) {\n return typeof toolInput.plan === \"string\" ? toolInput.plan : \"\";\n}\nfunction extractPlanFilePath(toolResult) {\n try {\n const parsed = JSON.parse(toolResult);\n if (!isRecord(parsed))\n return null;\n return typeof parsed.filePath === \"string\" && parsed.filePath.length > 0 ? parsed.filePath : null;\n } catch {\n return null;\n }\n}\nfunction isRecord(value) {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n// src/plan/plan-markdown-serializer.ts\nimport { MarkdownSerializer } from \"prosemirror-markdown\";\nfunction backticksFor(node, side) {\n const ticks = /`+/g;\n let len = 0;\n if (node.isText && node.text) {\n for (const match of node.text.matchAll(ticks)) {\n len = Math.max(len, match[0].length);\n }\n }\n let result = len > 0 && side > 0 ? \" `\" : \"`\";\n for (let i = 0;i < len; i++)\n result += \"`\";\n if (len > 0 && side < 0)\n result += \" \";\n return result;\n}\nfunction serializeNodeToText(node) {\n let text = \"\";\n node.forEach((child) => {\n if (child.isText) {\n text += child.text ?? \"\";\n } else if (child.type.name === \"hardBreak\") {\n text += \" \";\n } else {\n text += serializeNodeToText(child);\n }\n });\n return text;\n}\nfunction cellText(cell) {\n const parts = [];\n cell.forEach((block) => {\n parts.push(serializeNodeToText(block));\n });\n return parts.join(\" \");\n}\nvar planEditorSerializer = new MarkdownSerializer({\n blockquote(state, node) {\n state.wrapBlock(\"> \", null, node, () => state.renderContent(node));\n },\n codeBlock(state, node) {\n const info = String(node.attrs.language ?? \"\");\n state.write(`\\`\\`\\`${info}\n`);\n state.text(node.textContent, false);\n state.ensureNewLine();\n state.write(\"```\");\n state.closeBlock(node);\n },\n heading(state, node) {\n state.write(`${state.repeat(\"#\", Number(node.attrs.level))} `);\n state.renderInline(node);\n state.closeBlock(node);\n },\n horizontalRule(state, node) {\n state.write(\"---\");\n state.closeBlock(node);\n },\n bulletList(state, node) {\n state.renderList(node, \" \", () => \"- \");\n },\n orderedList(state, node) {\n const start = Number(node.attrs.start) || 1;\n const maxW = String(start + node.childCount - 1).length;\n const space = state.repeat(\" \", maxW + 2);\n state.renderList(node, space, (i) => {\n const nStr = String(start + i);\n return `${state.repeat(\" \", maxW - nStr.length)}${nStr}. `;\n });\n },\n listItem(state, node) {\n state.renderContent(node);\n },\n paragraph(state, node) {\n state.renderInline(node);\n state.closeBlock(node);\n },\n hardBreak(state, node, parent, index) {\n for (let i = index + 1;i < parent.childCount; i++) {\n if (parent.child(i).type !== node.type) {\n state.write(\"\\\\\\n\");\n return;\n }\n }\n },\n text(state, node) {\n state.text(node.text ?? \"\");\n },\n image(state, node) {\n const alt = state.esc(String(node.attrs.alt ?? \"\"));\n const src = String(node.attrs.src ?? \"\");\n const title = node.attrs.title ? ` \"${state.esc(String(node.attrs.title))}\"` : \"\";\n state.write(``);\n },\n table(state, node) {\n const rows = [];\n node.forEach((row) => {\n rows.push(row);\n });\n if (rows.length === 0)\n return;\n const firstRow = rows[0];\n let isHeaderRow = false;\n if (firstRow) {\n firstRow.forEach((cell) => {\n if (cell.type.name === \"tableHeader\")\n isHeaderRow = true;\n });\n }\n const colCount = firstRow ? firstRow.childCount : 0;\n const colWidths = new Array(colCount).fill(3);\n for (const row of rows) {\n let col = 0;\n row.forEach((cell) => {\n const text = cellText(cell);\n if (col < colWidths.length) {\n const current = colWidths[col];\n if (current !== undefined) {\n colWidths[col] = Math.max(current, text.length);\n }\n }\n col++;\n });\n }\n function renderRow(row) {\n const cells = [];\n let col = 0;\n row.forEach((cell) => {\n const text = cellText(cell);\n const width = col < colWidths.length ? colWidths[col] ?? 3 : 3;\n cells.push(` ${text.padEnd(width)} `);\n col++;\n });\n return `|${cells.join(\"|\")}|`;\n }\n function renderSeparator() {\n const dashes = colWidths.map((w) => `-${\"-\".repeat(w)}-`);\n return `|${dashes.join(\"|\")}|`;\n }\n if (firstRow) {\n state.write(renderRow(firstRow));\n state.ensureNewLine();\n state.write(renderSeparator());\n state.ensureNewLine();\n }\n const dataRows = isHeaderRow ? rows.slice(1) : rows;\n for (const row of dataRows) {\n state.write(renderRow(row));\n state.ensureNewLine();\n }\n state.closeBlock(node);\n },\n tableRow(_state, _node) {},\n tableHeader(_state, _node) {},\n tableCell(_state, _node) {},\n taskList(state, node) {\n state.renderList(node, \" \", () => {\n return \"\";\n });\n },\n taskItem(state, node) {\n const checked = node.attrs.checked === true;\n state.write(`${checked ? \"- [x] \" : \"- [ ] \"}`);\n if (node.childCount > 0 && node.firstChild?.type.name === \"paragraph\") {\n state.renderInline(node.firstChild);\n for (let i = 1;i < node.childCount; i++) {\n state.render(node.child(i), node, i);\n }\n } else {\n state.renderContent(node);\n }\n state.ensureNewLine();\n }\n}, {\n italic: { open: \"*\", close: \"*\", mixable: true, expelEnclosingWhitespace: true },\n bold: { open: \"**\", close: \"**\", mixable: true, expelEnclosingWhitespace: true },\n strike: { open: \"~~\", close: \"~~\", mixable: true, expelEnclosingWhitespace: true },\n code: {\n open(_state, _mark, parent, index) {\n return backticksFor(parent.child(index), -1);\n },\n close(_state, _mark, parent, index) {\n return backticksFor(parent.child(index - 1), 1);\n },\n escape: false\n },\n link: {\n open: \"[\",\n close(_state, mark) {\n const href = String(mark.attrs.href ?? \"\");\n const title = mark.attrs.title ? ` \"${String(mark.attrs.title)}\"` : \"\";\n return `](${href}${title})`;\n }\n },\n comment: { open: \"\", close: \"\" }\n}, { hardBreakNodeName: \"hardBreak\", strict: false });\nfunction serializePlanToMarkdown(doc) {\n return planEditorSerializer.serialize(doc, { tightLists: true });\n}\n// src/plan/plan-repository.ts\nimport { change as change2, subscribe as subscribe2 } from \"@loro-extended/change\";\n\n// src/plan/plan-shapes.ts\nimport { Shape as Shape2 } from \"@loro-extended/change\";\nvar PlanDocumentSchema = Shape2.doc({\n doc: Shape2.any(),\n metadata: Shape2.struct({\n filePath: Shape2.plain.string(),\n taskId: Shape2.plain.string()\n })\n}, { mergeable: true });\nfunction buildPlanDocId(taskId, epoch) {\n if (!taskId)\n throw new Error(\"taskId must be non-empty\");\n if (taskId.includes(\":\"))\n throw new Error(`taskId must not contain colons: \"${taskId}\"`);\n if (!Number.isInteger(epoch) || epoch < 1) {\n throw new Error(`epoch must be a positive integer: ${epoch}`);\n }\n return `plan:${taskId}:${epoch}`;\n}\n\n// src/plan/plan-repository.ts\nclass PlanRepository {\n #repo;\n #epoch;\n #planDocs = new Map;\n #contentBridge;\n constructor(repo, epoch, contentBridge) {\n this.#repo = repo;\n this.#epoch = epoch;\n this.#contentBridge = contentBridge;\n }\n getOrCreatePlanDoc(taskId) {\n let doc = this.#planDocs.get(taskId);\n if (!doc) {\n const docId = buildPlanDocId(taskId, this.#epoch);\n doc = this.#repo.get(docId, PlanDocumentSchema);\n this.#planDocs.set(taskId, doc);\n }\n return doc;\n }\n updateContent(taskId, markdown) {\n const doc = this.getOrCreatePlanDoc(taskId);\n this.#contentBridge.writeMarkdown(doc, markdown);\n }\n setMetadata(taskId, filePath) {\n const doc = this.getOrCreatePlanDoc(taskId);\n change2(doc, (draft) => {\n draft.metadata.filePath.set(filePath);\n draft.metadata.taskId.set(taskId);\n });\n }\n getContent(taskId) {\n const doc = this.getOrCreatePlanDoc(taskId);\n return this.#contentBridge.readMarkdown(doc);\n }\n subscribe(taskId, callback) {\n const doc = this.getOrCreatePlanDoc(taskId);\n return subscribe2(doc, callback);\n }\n invalidate(taskId) {\n this.#planDocs.delete(taskId);\n }\n dispose() {\n this.#planDocs.clear();\n }\n}\n// src/pr-schema.ts\nimport { z as z15 } from \"zod\";\nvar PR_STATES = [\"open\", \"closed\", \"merged\", \"draft\"];\nvar PR_REVIEW_STATES = [\n \"pending\",\n \"approved\",\n \"changes_requested\",\n \"commented\",\n \"dismissed\"\n];\nvar CI_CHECK_STATUSES = [\n \"success\",\n \"failure\",\n \"pending\",\n \"neutral\",\n \"skipped\",\n \"cancelled\"\n];\nvar CICheckSchema = z15.object({\n name: z15.string(),\n status: z15.enum(CI_CHECK_STATUSES),\n conclusion: z15.string().nullable(),\n url: z15.string().nullable(),\n startedAt: z15.number().nullable(),\n completedAt: z15.number().nullable()\n});\nvar PRReviewerSchema = z15.object({\n login: z15.string(),\n state: z15.enum(PR_REVIEW_STATES),\n avatarUrl: z15.string().nullable(),\n submittedAt: z15.number().nullable()\n});\nvar PRCommentSchema = z15.object({\n id: z15.string(),\n author: z15.string(),\n body: z15.string(),\n createdAt: z15.number(),\n updatedAt: z15.number().nullable(),\n path: z15.string().nullable(),\n line: z15.number().nullable(),\n side: z15.string().nullable(),\n isReviewComment: z15.boolean(),\n commitId: z15.string().nullable().default(null),\n diffHunk: z15.string().nullable().default(null),\n inReplyToId: z15.string().nullable().default(null),\n pullRequestReviewId: z15.string().nullable().default(null),\n threadId: z15.string().nullable().default(null),\n htmlUrl: z15.string().nullable().default(null),\n isResolved: z15.boolean().default(false),\n isOutdated: z15.boolean().default(false),\n startLine: z15.number().nullable().default(null),\n startSide: z15.string().nullable().default(null),\n authorIsBot: z15.boolean().default(false)\n});\nvar DEPLOYMENT_STATES = [\n \"active\",\n \"in_progress\",\n \"queued\",\n \"failure\",\n \"error\",\n \"inactive\",\n \"pending\"\n];\nvar EnvironmentDeploymentSchema = z15.object({\n environment: z15.string(),\n state: z15.enum(DEPLOYMENT_STATES),\n environmentUrl: z15.string().nullable(),\n logUrl: z15.string().nullable(),\n deployedAt: z15.number().nullable(),\n sha: z15.string(),\n includesCommit: z15.boolean()\n});\nvar PRDataSchema = z15.object({\n number: z15.number(),\n title: z15.string(),\n state: z15.enum(PR_STATES),\n author: z15.string(),\n url: z15.string(),\n baseRef: z15.string(),\n headRef: z15.string(),\n body: z15.string(),\n isDraft: z15.boolean(),\n additions: z15.number(),\n deletions: z15.number(),\n changedFiles: z15.number(),\n createdAt: z15.number(),\n updatedAt: z15.number(),\n mergedAt: z15.number().nullable(),\n mergeCommitSha: z15.string().nullable(),\n mergeStateStatus: z15.string().nullable(),\n autoMergeEnabled: z15.boolean(),\n headRefSha: z15.string().nullable(),\n headCommitInBase: z15.boolean().default(false),\n labels: z15.array(z15.object({ name: z15.string(), color: z15.string().default(\"\") })).default([]),\n assignees: z15.array(z15.object({ login: z15.string(), avatarUrl: z15.string().nullable() })).default([]),\n reviewDecision: z15.string().nullable().default(null),\n mergeable: z15.string().nullable().default(null),\n checks: z15.array(CICheckSchema),\n reviewers: z15.array(PRReviewerSchema),\n comments: z15.array(PRCommentSchema)\n});\nvar PRActionSchema = z15.discriminatedUnion(\"action\", [\n z15.object({ action: z15.literal(\"approve\"), prNumber: z15.number(), body: z15.string().optional() }),\n z15.object({ action: z15.literal(\"request_changes\"), prNumber: z15.number(), body: z15.string() }),\n z15.object({ action: z15.literal(\"comment\"), prNumber: z15.number(), body: z15.string() }),\n z15.object({\n action: z15.literal(\"reply_to_comment\"),\n prNumber: z15.number(),\n commentId: z15.string(),\n body: z15.string()\n }),\n z15.object({ action: z15.literal(\"resolve_thread\"), prNumber: z15.number(), commentId: z15.string() }),\n z15.object({ action: z15.literal(\"unresolve_thread\"), prNumber: z15.number(), commentId: z15.string() }),\n z15.object({\n action: z15.literal(\"merge\"),\n prNumber: z15.number(),\n strategy: z15.enum([\"squash\", \"merge\", \"rebase\"])\n }),\n z15.object({ action: z15.literal(\"close\"), prNumber: z15.number() }),\n z15.object({ action: z15.literal(\"reopen\"), prNumber: z15.number() }),\n z15.object({ action: z15.literal(\"ready\"), prNumber: z15.number() }),\n z15.object({ action: z15.literal(\"convert_to_draft\"), prNumber: z15.number() }),\n z15.object({ action: z15.literal(\"rerun_checks\"), prNumber: z15.number() }),\n z15.object({\n action: z15.literal(\"add_reviewers\"),\n prNumber: z15.number(),\n reviewers: z15.array(z15.string())\n }),\n z15.object({\n action: z15.literal(\"add_labels\"),\n prNumber: z15.number(),\n labels: z15.array(z15.string())\n }),\n z15.object({\n action: z15.literal(\"remove_labels\"),\n prNumber: z15.number(),\n labels: z15.array(z15.string())\n }),\n z15.object({\n action: z15.literal(\"add_assignees\"),\n prNumber: z15.number(),\n assignees: z15.array(z15.string())\n }),\n z15.object({\n action: z15.literal(\"remove_assignees\"),\n prNumber: z15.number(),\n assignees: z15.array(z15.string())\n })\n]);\nvar WORKFLOW_RUN_STATUSES = [\n \"completed\",\n \"in_progress\",\n \"queued\",\n \"requested\",\n \"waiting\",\n \"pending\"\n];\nvar WORKFLOW_RUN_CONCLUSIONS = [\n \"success\",\n \"failure\",\n \"cancelled\",\n \"skipped\",\n \"timed_out\",\n \"action_required\",\n \"neutral\"\n];\nvar WorkflowRunSchema = z15.object({\n name: z15.string(),\n status: z15.enum(WORKFLOW_RUN_STATUSES),\n conclusion: z15.enum(WORKFLOW_RUN_CONCLUSIONS).nullable(),\n url: z15.string(),\n sha: z15.string(),\n createdAt: z15.number(),\n includesCommit: z15.boolean()\n});\nvar StackNodeRoleSchema = z15.enum([\"ancestor\", \"current\", \"descendant\"]);\nvar StackLinkSchema = z15.discriminatedUnion(\"kind\", [\n z15.object({ kind: z15.literal(\"direct\"), parentNumber: z15.number() }),\n z15.object({ kind: z15.literal(\"merged\"), parentBranch: z15.string() }),\n z15.object({ kind: z15.literal(\"trunk\"), defaultBranch: z15.string() }),\n z15.object({\n kind: z15.literal(\"broken\"),\n missingBranch: z15.string(),\n reason: z15.enum([\"closed\", \"not_found\", \"depth_limit\"])\n })\n]);\nvar StackNodeSchema = z15.object({\n pr: PRDataSchema,\n role: StackNodeRoleSchema,\n depth: z15.number()\n});\nvar StackGraphSchema = z15.object({\n ancestors: z15.array(StackNodeSchema),\n current: StackNodeSchema,\n descendants: z15.array(StackNodeSchema),\n links: z15.record(z15.string(), StackLinkSchema),\n defaultBranch: z15.string(),\n truncated: z15.boolean().default(false)\n});\nvar PRStatePayloadSchema = z15.object({\n taskId: z15.string(),\n prAvailable: z15.boolean(),\n currentBranchPR: PRDataSchema.nullable(),\n assignedReviews: z15.array(PRDataSchema),\n userPRs: z15.array(PRDataSchema),\n deployments: z15.array(EnvironmentDeploymentSchema).default([]),\n workflowRuns: z15.array(WorkflowRunSchema).default([]),\n requiredChecks: z15.array(z15.string()).default([]),\n stack: StackGraphSchema.optional(),\n updatedAt: z15.number()\n});\n// src/presence/presence-map.ts\nfunction applyPresenceUpdate(pool, peerId, identity, state) {\n const existing = pool[peerId];\n const mergedState = {\n ...existing?.state,\n ...state\n };\n if (state.typing === undefined && \"typing\" in state) {\n delete mergedState.typing;\n }\n if (state.viewing === undefined && \"viewing\" in state) {\n delete mergedState.viewing;\n }\n return {\n ...pool,\n [peerId]: {\n userId: identity.userId,\n username: identity.username,\n avatarUrl: identity.avatarUrl,\n state: mergedState\n }\n };\n}\nfunction removePresence(pool, peerId) {\n const { [peerId]: _, ...rest } = pool;\n return rest;\n}\nfunction getTypingPeers(pool, taskId, context, excludeUserId) {\n const result = [];\n for (const slot of Object.values(pool)) {\n if (excludeUserId && slot.userId === excludeUserId)\n continue;\n if (slot.state.typing && slot.state.typing.taskId === taskId && slot.state.typing.context === context) {\n result.push({ userId: slot.userId, username: slot.username });\n }\n }\n return result;\n}\nfunction getTaskViewers(pool, taskId) {\n const result = [];\n for (const slot of Object.values(pool)) {\n if (slot.state.viewing && slot.state.viewing.taskId === taskId) {\n result.push({\n userId: slot.userId,\n username: slot.username,\n avatarUrl: slot.avatarUrl\n });\n }\n }\n return result;\n}\nfunction getSurfaceViewers(pool, taskId, surface) {\n const result = [];\n for (const slot of Object.values(pool)) {\n const viewing = slot.state.viewing;\n if (viewing && viewing.taskId === taskId && viewing.surface === surface) {\n result.push({\n userId: slot.userId,\n username: slot.username,\n avatarUrl: slot.avatarUrl\n });\n }\n }\n return result;\n}\nfunction getSurfacePrefixViewers(pool, taskId, prefix) {\n const prefixWithDelimiter = `${prefix}:`;\n const result = [];\n for (const slot of Object.values(pool)) {\n const viewing = slot.state.viewing;\n if (!viewing || viewing.taskId !== taskId || !viewing.surface)\n continue;\n if (viewing.surface === prefix || viewing.surface.startsWith(prefixWithDelimiter)) {\n result.push({\n userId: slot.userId,\n username: slot.username,\n avatarUrl: slot.avatarUrl\n });\n }\n }\n return result;\n}\n// src/presence/presence-types.ts\nimport { z as z16 } from \"zod/v4\";\nvar surface = {\n task: () => \"task\",\n sidePanel: (panelId) => `side-panel:${panelId}`,\n sidePanelDetail: (panelId, detail) => `side-panel:${panelId}:${detail}`,\n thread: (channelId) => `thread:${channelId}`\n};\nvar PresenceStatusSchema = z16.enum([\"active\", \"idle\", \"background\", \"offline\"]);\nvar PeerPresenceStateSchema = z16.object({\n typing: z16.object({\n taskId: z16.string(),\n context: z16.string(),\n surface: z16.string().optional()\n }).optional(),\n viewing: z16.object({\n taskId: z16.string(),\n surface: z16.string().optional()\n }).optional(),\n status: PresenceStatusSchema.optional()\n});\nvar PeerPresenceSlotSchema = z16.object({\n userId: z16.string(),\n username: z16.string(),\n avatarUrl: z16.string().nullable(),\n state: PeerPresenceStateSchema,\n role: z16.enum([\"owner\", \"collaborator-full\", \"collaborator-review\", \"viewer\"]).optional(),\n deviceId: z16.string().optional(),\n lastSeen: z16.number().optional()\n});\n// src/project-schemas.ts\nimport { z as z17 } from \"zod\";\nvar ProjectSchema = z17.object({\n id: z17.string(),\n name: z17.string(),\n order: z17.number(),\n createdAt: z17.number(),\n shareUrl: z17.string().nullable().default(null)\n});\nvar PROJECTS_STORE_VERSION = 1;\nvar ProjectsStoreSchema = z17.object({\n schemaVersion: z17.number(),\n projects: z17.array(ProjectSchema).default([])\n});\nfunction migrateProjectsStore(raw) {\n if (typeof raw !== \"object\" || raw === null) {\n return { schemaVersion: PROJECTS_STORE_VERSION, projects: [] };\n }\n const schemaVersion = prop(raw, \"schemaVersion\");\n const version = typeof schemaVersion === \"number\" ? schemaVersion : 0;\n if (version >= PROJECTS_STORE_VERSION) {\n return ProjectsStoreSchema.parse(raw);\n }\n const rawProjects = prop(raw, \"projects\") ?? raw;\n const parsed = z17.array(ProjectSchema).safeParse(rawProjects);\n const projects = parsed.success ? parsed.data : [];\n return {\n schemaVersion: PROJECTS_STORE_VERSION,\n projects\n };\n}\n// src/protocols/asset-transfer-protocol.ts\nimport { z as z18 } from \"zod\";\nvar ASSET_CHUNK_SIZE = 16384;\nvar ASSET_TRANSFER_LABEL = \"asset-transfer\";\nvar IMAGE_MIME_TYPES = [\"image/png\", \"image/jpeg\", \"image/gif\", \"image/webp\"];\nvar IMAGE_MIME_SET = new Set(IMAGE_MIME_TYPES);\nfunction isImageMimeType(mimeType) {\n return IMAGE_MIME_SET.has(mimeType);\n}\nvar AssetUploadHeadSchema = z18.object({\n type: z18.literal(\"upload-head\"),\n requestId: z18.string(),\n fileName: z18.string(),\n mimeType: z18.string(),\n totalBytes: z18.number().int().nonnegative()\n});\nvar AssetUploadAckSchema = z18.object({\n type: z18.literal(\"upload-ack\"),\n requestId: z18.string(),\n assetId: z18.string(),\n uri: z18.string()\n});\nvar AssetUploadErrorSchema = z18.object({\n type: z18.literal(\"upload-error\"),\n requestId: z18.string(),\n error: z18.string()\n});\nvar AssetDownloadRequestSchema = z18.object({\n type: z18.literal(\"download-request\"),\n requestId: z18.string(),\n assetId: z18.string()\n});\nvar AssetDownloadHeadSchema = z18.object({\n type: z18.literal(\"download-head\"),\n requestId: z18.string(),\n mimeType: z18.string(),\n totalBytes: z18.number().int().nonnegative()\n});\nvar AssetDownloadDoneSchema = z18.object({\n type: z18.literal(\"download-done\"),\n requestId: z18.string()\n});\nvar AssetDownloadErrorSchema = z18.object({\n type: z18.literal(\"download-error\"),\n requestId: z18.string(),\n error: z18.string()\n});\nvar AssetTransferMessageSchema = z18.discriminatedUnion(\"type\", [\n AssetUploadHeadSchema,\n AssetUploadAckSchema,\n AssetUploadErrorSchema,\n AssetDownloadRequestSchema,\n AssetDownloadHeadSchema,\n AssetDownloadDoneSchema,\n AssetDownloadErrorSchema\n]);\nvar AssetChunkPayloadSchema = z18.object({\n kind: z18.enum([\"upload-chunk\", \"download-chunk\"]),\n requestId: z18.string(),\n chunkIndex: z18.number().int().nonnegative(),\n data: z18.string()\n});\nvar ASSET_URI_PREFIX = \"shipyard://asset/\";\nfunction buildAssetUri(assetId) {\n return `${ASSET_URI_PREFIX}${assetId}`;\n}\nfunction parseAssetUri(uri) {\n if (!uri.startsWith(ASSET_URI_PREFIX))\n return null;\n const id = uri.slice(ASSET_URI_PREFIX.length);\n return id.length > 0 ? id : null;\n}\nfunction isAssetUri(uri) {\n return uri.startsWith(ASSET_URI_PREFIX);\n}\n// src/protocols/browser-preview-protocol.ts\nimport { z as z19 } from \"zod\";\nvar BROWSER_PREVIEW_PREFIX = \"http-preview:\";\nvar BROWSER_PREVIEW_URL_LABEL = \"http-preview:url\";\nvar BROWSER_PREVIEW_SUBDOMAIN_PREFIX = \"http-preview-sub:\";\nfunction buildBrowserPreviewLabel(port) {\n return `${BROWSER_PREVIEW_PREFIX}${port}`;\n}\nfunction parseBrowserPreviewLabel(label) {\n if (!label.startsWith(BROWSER_PREVIEW_PREFIX))\n return null;\n const port = Number(label.slice(BROWSER_PREVIEW_PREFIX.length));\n return Number.isFinite(port) && port > 0 ? port : null;\n}\nfunction buildBrowserPreviewSubdomainLabel(port) {\n return `${BROWSER_PREVIEW_SUBDOMAIN_PREFIX}${port}`;\n}\nfunction parseBrowserPreviewSubdomainLabel(label) {\n if (!label.startsWith(BROWSER_PREVIEW_SUBDOMAIN_PREFIX))\n return null;\n const port = Number(label.slice(BROWSER_PREVIEW_SUBDOMAIN_PREFIX.length));\n return Number.isFinite(port) && port > 0 ? port : null;\n}\nvar KNOWN_FRAMEWORKS = [\n \"Astro\",\n \"Angular\",\n \"Django\",\n \"Flask\",\n \"Gatsby\",\n \"Hugo\",\n \"Next.js\",\n \"Nuxt\",\n \"Rails\",\n \"Remix\",\n \"SvelteKit\",\n \"Vite\"\n];\nvar DetectedPortSchema = z19.object({\n port: z19.number(),\n pid: z19.number(),\n command: z19.string(),\n framework: z19.string().optional(),\n cwd: z19.string(),\n projectRoot: z19.string().optional(),\n packageName: z19.string().optional()\n});\nvar ALLOWED_HTTP_METHODS = [\n \"GET\",\n \"HEAD\",\n \"POST\",\n \"PUT\",\n \"DELETE\",\n \"PATCH\",\n \"OPTIONS\"\n];\nvar HttpMethodSchema = z19.enum(ALLOWED_HTTP_METHODS);\nvar BrowserPreviewRequestSchema = z19.object({\n type: z19.literal(\"request\"),\n id: z19.string(),\n method: HttpMethodSchema,\n path: z19.string(),\n headers: z19.record(z19.string(), z19.string()),\n body: z19.string().optional()\n});\nvar BrowserPreviewResponseHeadSchema = z19.object({\n type: z19.literal(\"response-head\"),\n id: z19.string(),\n status: z19.number(),\n headers: z19.record(z19.string(), z19.string()),\n bodyLength: z19.number()\n});\nvar BrowserPreviewResponseChunkSchema = z19.object({\n type: z19.literal(\"response-chunk\"),\n id: z19.string(),\n index: z19.number(),\n last: z19.boolean()\n});\nvar BrowserPreviewErrorSchema = z19.object({\n type: z19.literal(\"error\"),\n id: z19.string(),\n error: z19.string()\n});\nvar BrowserToBrowserPreviewMessageSchema = z19.discriminatedUnion(\"type\", [\n BrowserPreviewRequestSchema\n]);\nvar DaemonToBrowserPreviewMessageSchema = z19.discriminatedUnion(\"type\", [\n BrowserPreviewResponseHeadSchema,\n BrowserPreviewResponseChunkSchema,\n BrowserPreviewErrorSchema\n]);\nvar BrowserPreviewUrlRequestSchema = z19.object({\n type: z19.literal(\"request\"),\n id: z19.string(),\n method: HttpMethodSchema,\n url: z19.string(),\n headers: z19.record(z19.string(), z19.string()),\n body: z19.string().optional()\n});\n// src/protocols/channel-protocol.ts\nimport { z as z32 } from \"zod\";\n\n// src/resource-protocol.ts\nimport { z as z20 } from \"zod\";\nvar AnnotationsSchema = z20.object({\n audience: z20.array(z20.string()).optional(),\n priority: z20.number().optional(),\n lastModified: z20.string().optional()\n});\nvar ResourceLinkBlockSchema = z20.object({\n type: z20.literal(\"resource_link\"),\n uri: z20.string(),\n name: z20.string(),\n title: z20.string().optional(),\n description: z20.string().optional(),\n mimeType: z20.string().optional(),\n size: z20.number().optional(),\n annotations: AnnotationsSchema.optional(),\n _meta: z20.record(z20.string(), z20.unknown()).optional()\n});\nvar TextResourceContentsSchema = z20.object({\n uri: z20.string(),\n mimeType: z20.string().optional(),\n text: z20.string(),\n _meta: z20.record(z20.string(), z20.unknown()).optional()\n});\nvar BlobResourceContentsSchema = z20.object({\n uri: z20.string(),\n mimeType: z20.string().optional(),\n blob: z20.string(),\n _meta: z20.record(z20.string(), z20.unknown()).optional()\n});\nvar ResourceContentsSchema = z20.union([\n TextResourceContentsSchema,\n BlobResourceContentsSchema\n]);\nvar EmbeddedResourceBlockSchema = z20.object({\n type: z20.literal(\"resource\"),\n resource: ResourceContentsSchema,\n annotations: AnnotationsSchema.optional(),\n _meta: z20.record(z20.string(), z20.unknown()).optional()\n});\nvar ResourceSubscribeSchema = z20.object({\n type: z20.literal(\"resource_subscribe\"),\n uri: z20.string()\n});\nvar ResourceUnsubscribeSchema = z20.object({\n type: z20.literal(\"resource_unsubscribe\"),\n uri: z20.string()\n});\nvar ResourceReadRequestSchema = z20.object({\n type: z20.literal(\"resource_read_request\"),\n requestId: z20.string(),\n uri: z20.string()\n});\nvar resourceChangeTypes = [\"root\", \"patch\", \"deleted\"];\nvar ResourceChangedSchema = z20.object({\n type: z20.literal(\"resource_changed\"),\n uri: z20.string(),\n changeType: z20.enum(resourceChangeTypes),\n patch: z20.string().optional()\n});\nvar ResourceChangedStrictSchema = ResourceChangedSchema.refine((d) => d.changeType !== \"patch\" || d.patch !== undefined, { message: 'patch is required when changeType is \"patch\"' });\nvar ResourceReadResponseSchema = z20.object({\n type: z20.literal(\"resource_read_response\"),\n requestId: z20.string(),\n resource: ResourceContentsSchema.optional(),\n error: z20.string().optional()\n});\nvar ResourceReadResponseStrictSchema = ResourceReadResponseSchema.refine((d) => d.resource !== undefined !== (d.error !== undefined), { message: \"exactly one of resource or error must be provided\" });\n\n// src/schedule-schemas.ts\nimport { z as z22 } from \"zod\";\n\n// src/shared-enums.ts\nimport { z as z21 } from \"zod\";\nvar ReasoningEffortSchema = z21.enum([\"none\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"]);\nvar PermissionModeSchema = z21.enum([\"default\", \"accept-edits\", \"plan\", \"bypass\", \"auto\"]);\nvar ModelProviderSchema = z21.enum([\"claude-code\", \"codex\"]);\nvar McpServerTypeSchema = z21.enum([\"stdio\", \"http\", \"sse\"]);\nvar AnthropicAuthMethodSchema = z21.enum([\n \"claude-ai\",\n \"console\",\n \"api-key\",\n \"sso\",\n \"gateway\",\n \"bedrock\",\n \"vertex\",\n \"foundry\",\n \"none\"\n]);\nvar REASONING_EFFORTS = ReasoningEffortSchema.options;\nvar PERMISSION_MODES = PermissionModeSchema.options;\nvar ANTHROPIC_AUTH_METHODS = AnthropicAuthMethodSchema.options;\nvar REASONING_EFFORT_SET = new Set(REASONING_EFFORTS);\nfunction isReasoningEffort(value) {\n return REASONING_EFFORT_SET.has(value);\n}\nvar PERMISSION_MODE_SET = new Set(PERMISSION_MODES);\nfunction isPermissionMode(value) {\n return PERMISSION_MODE_SET.has(value);\n}\n\n// src/schedule-schemas.ts\nvar scheduleRunStatuses = [\"completed\", \"failed\", \"canceled\"];\nvar ScheduleRecordSchema = z22.object({\n id: z22.string(),\n name: z22.string(),\n prompt: z22.string(),\n cron: z22.string(),\n enabled: z22.boolean(),\n environment: z22.object({\n path: z22.string(),\n branch: z22.string()\n }),\n model: z22.string(),\n reasoningEffort: ReasoningEffortSchema,\n permissionMode: PermissionModeSchema,\n fastMode: z22.boolean(),\n disabledMcpServers: z22.array(z22.string()),\n createdAt: z22.number(),\n updatedAt: z22.number(),\n lastRunAt: z22.number().nullable(),\n lastRunTaskId: z22.string().nullable(),\n lastRunStatus: z22.enum(scheduleRunStatuses).nullable()\n});\nvar SCHEDULE_STORE_VERSION = 2;\nvar ScheduleStoreSchema = z22.object({\n schemaVersion: z22.number(),\n schedules: z22.record(z22.string(), ScheduleRecordSchema)\n});\nfunction migrateScheduleStore(raw) {\n if (typeof raw !== \"object\" || raw === null) {\n return { schemaVersion: SCHEDULE_STORE_VERSION, schedules: {} };\n }\n const schemaVersion = prop(raw, \"schemaVersion\");\n const version = typeof schemaVersion === \"number\" ? schemaVersion : 0;\n if (version < SCHEDULE_STORE_VERSION) {\n return { schemaVersion: SCHEDULE_STORE_VERSION, schedules: {} };\n }\n return ScheduleStoreSchema.parse(raw);\n}\n\n// src/schema.ts\nimport { z as z23 } from \"zod\";\nvar participantKinds = [\"human\", \"agent\"];\nvar ParticipantKindSchema = z23.enum(participantKinds);\nvar ParticipantSchema = z23.object({\n id: z23.string(),\n kind: ParticipantKindSchema,\n name: z23.string(),\n principalId: z23.string().optional()\n});\nvar TextBlockSchema = z23.object({\n type: z23.literal(\"text\"),\n text: z23.string()\n});\nvar ToolUseBlockSchema = z23.object({\n type: z23.literal(\"tool_use\"),\n toolUseId: z23.string(),\n toolName: z23.string(),\n input: z23.record(z23.string(), z23.unknown()),\n parentToolUseId: z23.string().nullable().optional()\n});\nvar ToolResultBlockSchema = z23.object({\n type: z23.literal(\"tool_result\"),\n toolUseId: z23.string(),\n content: z23.string(),\n isError: z23.boolean(),\n parentToolUseId: z23.string().nullable().optional()\n});\nvar ThinkingBlockSchema = z23.object({\n type: z23.literal(\"thinking\"),\n text: z23.string()\n});\nvar diffCommentSides = [\"original\", \"modified\"];\nvar DiffReviewCommentSchema = z23.object({\n commentId: z23.string(),\n filePath: z23.string(),\n lineNumber: z23.number(),\n lineContent: z23.string(),\n side: z23.enum(diffCommentSides),\n body: z23.string(),\n authorName: z23.string()\n});\nvar DiffReviewFeedbackBlockSchema = z23.object({\n type: z23.literal(\"diff_review_feedback\"),\n comments: z23.array(DiffReviewCommentSchema)\n});\nvar PreviewAnnotationCommentSchema = z23.object({\n commentId: z23.string(),\n url: z23.string(),\n elementSelector: z23.string(),\n elementText: z23.string(),\n body: z23.string(),\n authorName: z23.string(),\n componentName: z23.string().nullable().optional(),\n sourceFile: z23.string().nullable().optional(),\n sourceLine: z23.number().nullable().optional(),\n componentTree: z23.array(z23.string()).nullable().optional(),\n framework: z23.string().nullable().optional(),\n computedStyles: z23.record(z23.string(), z23.string()).nullable().optional(),\n cssClasses: z23.array(z23.string()).nullable().optional(),\n elementHtml: z23.string().nullable().optional(),\n pageBackground: z23.string().nullable().optional()\n});\nvar PreviewAnnotationFeedbackBlockSchema = z23.object({\n type: z23.literal(\"preview_annotation_feedback\"),\n comments: z23.array(PreviewAnnotationCommentSchema)\n});\nvar AnnotationFeedbackBlockSchema = z23.object({\n type: z23.literal(\"annotation_feedback\"),\n annotations: z23.array(AnnotationZodSchema)\n});\nvar taskFeedbackChangeTypes = [\n \"status_changed\",\n \"task_added\",\n \"task_removed\",\n \"dep_added\",\n \"dep_removed\"\n];\nvar TaskFeedbackChangeSchema = z23.object({\n changeType: z23.enum(taskFeedbackChangeTypes),\n taskId: z23.string(),\n subject: z23.string(),\n newStatus: z23.enum([\"pending\", \"in_progress\", \"completed\", \"cancelled\"]).optional(),\n depTaskId: z23.string().optional(),\n depSubject: z23.string().optional()\n});\nvar TaskFeedbackBlockSchema = z23.object({\n type: z23.literal(\"task_feedback\"),\n changes: z23.array(TaskFeedbackChangeSchema),\n authorName: z23.string(),\n timestamp: z23.number()\n});\nvar ReviewCommentBlockSchema = z23.object({\n type: z23.literal(\"review_comment\"),\n artifact: z23.string(),\n author: z23.string(),\n anchor: z23.string(),\n body: z23.string(),\n commentId: z23.string()\n});\nvar ReviewDecisionBlockSchema = z23.object({\n type: z23.literal(\"review_decision\"),\n decision: z23.enum([\"approve\", \"deny\", \"request_changes\"]),\n feedback: z23.string().optional(),\n reviewer: z23.string()\n});\nvar CompactionWorkspaceSummarySchema = z23.object({\n structuredTaskCount: z23.number().optional(),\n canvasElementCount: z23.number().optional(),\n threadCount: z23.number().optional(),\n annotationCount: z23.number().optional(),\n unresolvedAnnotationCount: z23.number().optional(),\n attachmentCount: z23.number().optional(),\n publishedArtifactCount: z23.number().optional(),\n planIncluded: z23.boolean().optional()\n});\nvar CompactionStatsSchema = z23.object({\n userMessageCount: z23.number(),\n recentTurnCount: z23.number().optional(),\n recentMessageCount: z23.number().optional(),\n charsSerialized: z23.number(),\n postCompactEstimateTokens: z23.number().optional()\n});\nvar CompactionBoundaryBlockSchema = z23.object({\n type: z23.literal(\"compaction_boundary\"),\n threadId: z23.string(),\n channelId: z23.string(),\n messageCount: z23.number(),\n resumeInstructions: z23.string(),\n preTokens: z23.number().optional(),\n stats: CompactionStatsSchema.optional(),\n archiveVersion: z23.union([z23.literal(1), z23.literal(2)]).optional(),\n workspaceSummary: CompactionWorkspaceSummarySchema.optional()\n});\nvar ContentBlockSchema = z23.discriminatedUnion(\"type\", [\n TextBlockSchema,\n ToolUseBlockSchema,\n ToolResultBlockSchema,\n ThinkingBlockSchema,\n DiffReviewFeedbackBlockSchema,\n PreviewAnnotationFeedbackBlockSchema,\n AnnotationFeedbackBlockSchema,\n TaskFeedbackBlockSchema,\n ReviewCommentBlockSchema,\n ReviewDecisionBlockSchema,\n ResourceLinkBlockSchema,\n EmbeddedResourceBlockSchema,\n CompactionBoundaryBlockSchema\n]);\nvar MessageSchema = z23.object({\n messageId: z23.string(),\n seqNo: z23.number().int().nonnegative(),\n channelId: z23.string(),\n participantId: z23.string(),\n senderKind: ParticipantKindSchema,\n content: z23.array(ContentBlockSchema),\n timestamp: z23.number(),\n model: z23.string().nullable().optional(),\n reasoningEffort: ReasoningEffortSchema.nullable().optional(),\n permissionMode: PermissionModeSchema.nullable().optional(),\n isSynthetic: z23.boolean().optional(),\n anchorToolUseId: z23.string().optional(),\n correlationId: z23.string().optional(),\n batchCorrelationIds: z23.array(z23.string()).optional(),\n sdkUuid: z23.string().optional(),\n crossThreadOrigin: z23.object({\n fromThreadId: z23.string(),\n fromThreadTitle: z23.string(),\n fromThreadKind: z23.enum([\"main\", \"parallel\", \"fork\"])\n }).optional()\n});\nvar ChannelSchema = z23.object({\n id: z23.string(),\n createdAt: z23.number(),\n participants: z23.array(ParticipantSchema)\n});\n\n// src/task-schemas.ts\nimport { z as z24 } from \"zod\";\nvar taskStatuses = [\"open\", \"in_progress\", \"input_required\", \"completed\", \"canceled\"];\nvar structuredTaskStatuses = [\"pending\", \"in_progress\", \"completed\", \"cancelled\"];\nvar StructuredTaskSchema = z24.object({\n id: z24.string(),\n subject: z24.string(),\n description: z24.string().optional(),\n status: z24.enum(structuredTaskStatuses),\n activeForm: z24.string().optional(),\n owner: z24.string().optional(),\n blocks: z24.array(z24.string()),\n blockedBy: z24.array(z24.string()),\n createdAt: z24.number(),\n updatedAt: z24.number(),\n model: z24.string().nullable().optional(),\n reasoningEffort: ReasoningEffortSchema.nullable().optional()\n});\nvar DepEdgeSchema = z24.object({ from: z24.string(), to: z24.string() });\nvar StructuredTaskCapabilitiesSchema = z24.object({\n model: z24.string().nullable().optional(),\n reasoningEffort: ReasoningEffortSchema.nullable().optional()\n});\nvar TaskOverlaySchema = z24.object({\n userTasks: z24.array(StructuredTaskSchema).default([]),\n statusOverrides: z24.record(z24.string(), z24.enum(structuredTaskStatuses)).default({}),\n depEdges: z24.array(DepEdgeSchema).default([]),\n removedDepEdges: z24.array(DepEdgeSchema).default([]),\n removedIds: z24.array(z24.string()).default([]),\n capabilitiesOverrides: z24.record(z24.string(), StructuredTaskCapabilitiesSchema).default({})\n});\nvar DEFAULT_TASK_OVERLAY = {\n userTasks: [],\n statusOverrides: {},\n depEdges: [],\n removedDepEdges: [],\n removedIds: [],\n capabilitiesOverrides: {}\n};\nvar taskModes = [\"task\", \"conversation\"];\nvar taskTypes = [\n \"feature\",\n \"bug-fix\",\n \"refactor\",\n \"test\",\n \"docs\",\n \"chore\",\n \"research\",\n \"other\"\n];\nvar ComposerSettingsSchema = z24.object({\n model: z24.string().nullable().optional(),\n reasoningEffort: ReasoningEffortSchema.nullable().optional(),\n permissionMode: PermissionModeSchema.nullable().optional(),\n fastMode: z24.boolean().nullable().optional()\n});\nvar CONVERSATION_DISALLOWED_TOOLS = [\n \"Write\",\n \"Edit\",\n \"NotebookEdit\",\n \"Task\",\n \"mcp__shipyard-harness__add_comment\",\n \"mcp__shipyard-harness__list_comments\",\n \"mcp__shipyard-harness__plugin_read_me\",\n \"mcp__shipyard-harness__build_plugin\",\n \"mcp__shipyard-harness__set_preview_target\"\n];\nvar TokenCategoryItemSchema = z24.object({\n name: z24.string(),\n tokens: z24.number(),\n source: z24.string().optional()\n});\nvar PersistedTurnStatsSchema = z24.object({\n type: z24.literal(\"turn_stats\"),\n taskId: z24.string(),\n totalCostUsd: z24.number(),\n durationMs: z24.number(),\n durationApiMs: z24.number(),\n numTurns: z24.number(),\n inputTokens: z24.number(),\n outputTokens: z24.number(),\n cacheReadInputTokens: z24.number(),\n cacheCreationInputTokens: z24.number(),\n contextWindow: z24.number(),\n maxOutputTokens: z24.number(),\n model: z24.string().optional(),\n systemPromptTokens: z24.number().optional(),\n systemToolTokens: z24.number().optional(),\n systemToolCount: z24.number().optional(),\n customAgentTokens: z24.number().optional(),\n memoryFileTokens: z24.number().optional(),\n skillTokens: z24.number().optional(),\n messageTokens: z24.number().optional(),\n shipyardSystemPromptTokens: z24.number().optional(),\n agentBuiltinToolTokens: z24.number().optional(),\n agentBuiltinToolCount: z24.number().optional(),\n shipyardPluginToolTokens: z24.number().optional(),\n shipyardPluginToolCount: z24.number().optional(),\n memoryFileItems: z24.array(z24.object({ name: z24.string(), tokens: z24.number() })).optional(),\n skillItems: z24.array(z24.object({ name: z24.string(), tokens: z24.number() })).optional(),\n agentItems: z24.array(z24.object({ name: z24.string(), tokens: z24.number() })).optional(),\n mcpToolItems: z24.array(TokenCategoryItemSchema).optional(),\n toolInventory: z24.array(z24.object({ server: z24.string(), toolCount: z24.number() })).optional(),\n breakdownStatus: z24.enum([\"pending\", \"resolved\"]).optional()\n});\nvar PersistedTokenCountSchema = z24.object({\n systemPromptTokens: z24.number(),\n systemToolTokens: z24.number(),\n systemToolCount: z24.number(),\n shipyardSystemPromptTokens: z24.number(),\n agentBuiltinToolTokens: z24.number(),\n agentBuiltinToolCount: z24.number(),\n shipyardPluginToolTokens: z24.number(),\n shipyardPluginToolCount: z24.number(),\n customAgentTokens: z24.number(),\n memoryFileTokens: z24.number(),\n skillTokens: z24.number(),\n totalStaticTokens: z24.number(),\n items: z24.object({\n memoryFiles: z24.array(TokenCategoryItemSchema),\n skills: z24.array(TokenCategoryItemSchema),\n agents: z24.array(TokenCategoryItemSchema),\n mcpTools: z24.array(TokenCategoryItemSchema)\n })\n});\nvar AllowedPromptSchema = z24.object({\n tool: z24.string(),\n prompt: z24.string()\n});\nvar PlanDetectionSchema = z24.object({\n toolUseId: z24.string(),\n filePath: z24.string(),\n planDocId: z24.string(),\n allowedPrompts: z24.array(AllowedPromptSchema).optional(),\n originalMarkdown: z24.string().optional(),\n approved: z24.boolean().optional()\n});\nvar NotificationKindSchema = z24.enum([\n \"permission\",\n \"plan_review\",\n \"ask_question\",\n \"input_required\",\n \"task_done_with_todos\",\n \"mention\",\n \"reply\",\n \"task_error\",\n \"subagent_done\",\n \"schedule_fired\"\n]);\nvar NotificationTierSchema = z24.enum([\"L0\", \"L1\", \"L2\", \"L3\", \"L4\"]);\nvar AckStateSchema = z24.object({\n seenAt: z24.number().nullable().default(null),\n dismissedAt: z24.number().nullable().default(null),\n actedAt: z24.number().nullable().default(null)\n});\nvar PermissionPayloadSchema = z24.object({\n kind: z24.literal(\"permission\"),\n permissionId: z24.string(),\n toolName: z24.string(),\n toolInput: z24.record(z24.string(), z24.unknown()).optional()\n});\nvar AskQuestionPayloadSchema = z24.object({\n kind: z24.literal(\"ask_question\"),\n permissionId: z24.string(),\n question: z24.string()\n});\nvar PlanReviewPayloadSchema = z24.object({\n kind: z24.literal(\"plan_review\"),\n planId: z24.string(),\n stepCount: z24.number().optional(),\n fileCount: z24.number().optional()\n});\nvar InputRequiredPayloadSchema = z24.object({\n kind: z24.literal(\"input_required\")\n});\nvar TaskDoneWithTodosPayloadSchema = z24.object({\n kind: z24.literal(\"task_done_with_todos\"),\n todoCompleted: z24.number(),\n todoTotal: z24.number()\n});\nvar MentionPayloadSchema = z24.object({\n kind: z24.literal(\"mention\"),\n commentId: z24.string(),\n rootCommentId: z24.string(),\n surface: z24.enum([\"plan\", \"diff\", \"canvas\", \"preview\"]),\n excerpt: z24.string().optional()\n});\nvar ReplyPayloadSchema = z24.object({\n kind: z24.literal(\"reply\"),\n commentId: z24.string(),\n rootCommentId: z24.string(),\n surface: z24.enum([\"plan\", \"diff\", \"canvas\", \"preview\"]),\n excerpt: z24.string().optional()\n});\nvar TaskErrorPayloadSchema = z24.object({\n kind: z24.literal(\"task_error\"),\n errorKind: z24.string(),\n message: z24.string().optional()\n});\nvar SubagentDonePayloadSchema = z24.object({\n kind: z24.literal(\"subagent_done\"),\n subagentId: z24.string(),\n outcome: z24.enum([\"completed\", \"failed\", \"stopped\"]).optional()\n});\nvar ScheduleFiredPayloadSchema = z24.object({\n kind: z24.literal(\"schedule_fired\"),\n scheduleId: z24.string(),\n scheduleName: z24.string().optional()\n});\nvar NotificationPayloadSchema = z24.discriminatedUnion(\"kind\", [\n PermissionPayloadSchema,\n AskQuestionPayloadSchema,\n PlanReviewPayloadSchema,\n InputRequiredPayloadSchema,\n TaskDoneWithTodosPayloadSchema,\n MentionPayloadSchema,\n ReplyPayloadSchema,\n TaskErrorPayloadSchema,\n SubagentDonePayloadSchema,\n ScheduleFiredPayloadSchema\n]);\nvar NotificationSchema = z24.object({\n id: z24.string(),\n taskId: z24.string(),\n kind: NotificationKindSchema,\n tier: NotificationTierSchema,\n createdAt: z24.number(),\n targetUserIds: z24.array(z24.string()).default([]),\n ackByUser: z24.record(z24.string(), AckStateSchema).default({}),\n payload: NotificationPayloadSchema,\n resolvedAt: z24.number().nullable().default(null),\n resolvedBy: z24.string().nullable().default(null)\n});\nvar TaskRecordSchema = z24.object({\n taskId: z24.string(),\n channelId: z24.string(),\n title: z24.string(),\n status: z24.enum(taskStatuses),\n mode: z24.enum(taskModes).default(\"task\"),\n createdAt: z24.number(),\n updatedAt: z24.number(),\n taskStartedAt: z24.number().nullable(),\n todoCompleted: z24.number(),\n todoTotal: z24.number(),\n currentActivity: z24.string().nullable(),\n cwd: z24.string(),\n acknowledgedAt: z24.number().nullable().optional(),\n attentionAt: z24.number().nullable().optional(),\n archivedAt: z24.number().nullable().default(null),\n notifications: z24.record(z24.string(), NotificationSchema).optional(),\n projectId: z24.string().nullable().default(null),\n scheduleId: z24.string().optional(),\n scheduleName: z24.string().optional(),\n structuredTasks: z24.record(z24.string(), StructuredTaskSchema).optional(),\n taskOverlay: TaskOverlaySchema.optional(),\n taskOverlays: z24.record(z24.string(), TaskOverlaySchema).optional(),\n composerSettings: ComposerSettingsSchema.optional(),\n totalCostUsd: z24.number().default(0),\n totalOutputTokens: z24.number().default(0),\n lastTurnStats: PersistedTurnStatsSchema.optional(),\n lastTokenCount: PersistedTokenCountSchema.optional(),\n taskType: z24.enum(taskTypes).optional(),\n prUrl: z24.string().url().optional(),\n abandonedAt: z24.number().nullable().optional(),\n lastPlanDetection: PlanDetectionSchema.optional(),\n lastActivityAt: z24.number().default(0),\n inProgressCount: z24.number().int().nonnegative().default(0).optional(),\n unreadNotificationCount: z24.number().int().nonnegative().default(0).optional(),\n appliedTemplateId: z24.string().optional(),\n roiStartedEmitted: z24.boolean().default(false),\n totalTurnCount: z24.number().int().nonnegative().default(0),\n mergedAt: z24.number().int().positive().nullable().default(null),\n attributedCommitShas: z24.array(z24.string()).max(50).optional(),\n lastCommitScanSha: z24.string().nullable().default(null),\n originalCwd: z24.string().nullable().default(null),\n startupPhase: z24.enum([\"none\", \"starting_from_linear\"]).default(\"none\"),\n awaitingSetup: z24.boolean().default(false),\n startedFromLinear: z24.object({\n issueId: z24.string(),\n issueTitle: z24.string(),\n issueUrl: z24.string(),\n requestId: z24.string()\n }).nullable().default(null)\n});\nvar TASK_STORE_VERSION = 18;\nvar TaskStoreSchema = z24.object({\n schemaVersion: z24.number(),\n tasks: z24.record(z24.string(), TaskRecordSchema)\n});\nfunction migrateTaskStore(raw) {\n if (typeof raw !== \"object\" || raw === null) {\n return { schemaVersion: TASK_STORE_VERSION, tasks: {} };\n }\n const schemaVersion = prop(raw, \"schemaVersion\");\n const version = typeof schemaVersion === \"number\" ? schemaVersion : 0;\n if (version < 5) {\n return { schemaVersion: TASK_STORE_VERSION, tasks: {} };\n }\n if (version < 10) {\n backfillLastActivityAt(prop(raw, \"tasks\"));\n }\n if (version < 11) {\n backfillRoiStartedEmitted(prop(raw, \"tasks\"));\n }\n if (version < 16) {\n stripAutoReasoningEffort(prop(raw, \"tasks\"));\n }\n return TaskStoreSchema.parse({ ...raw, schemaVersion: TASK_STORE_VERSION });\n}\nfunction backfillLastActivityAt(tasksRaw) {\n if (typeof tasksRaw !== \"object\" || tasksRaw === null)\n return;\n for (const record of Object.values(tasksRaw)) {\n if (typeof record !== \"object\" || record === null)\n continue;\n const existing = prop(record, \"lastActivityAt\");\n if (typeof existing === \"number\" && existing !== 0)\n continue;\n const updated = prop(record, \"updatedAt\");\n const created = prop(record, \"createdAt\");\n const fallback = (typeof updated === \"number\" ? updated : 0) || (typeof created === \"number\" ? created : 0) || 0;\n Object.assign(record, { lastActivityAt: fallback });\n }\n}\nfunction stripAutoReasoningEffort(tasksRaw) {\n if (typeof tasksRaw !== \"object\" || tasksRaw === null)\n return;\n for (const record of Object.values(tasksRaw)) {\n if (typeof record !== \"object\" || record === null)\n continue;\n const composerSettings = prop(record, \"composerSettings\");\n if (typeof composerSettings !== \"object\" || composerSettings === null)\n continue;\n if (prop(composerSettings, \"reasoningEffort\") === \"auto\") {\n Object.assign(composerSettings, { reasoningEffort: undefined });\n }\n }\n}\nfunction backfillRoiStartedEmitted(tasksRaw) {\n if (typeof tasksRaw !== \"object\" || tasksRaw === null)\n return;\n const alreadyRanStatuses = new Set([\"in_progress\", \"input_required\", \"completed\", \"canceled\"]);\n for (const record of Object.values(tasksRaw)) {\n if (typeof record !== \"object\" || record === null)\n continue;\n const existing = prop(record, \"roiStartedEmitted\");\n if (existing === true)\n continue;\n const taskStartedAt = prop(record, \"taskStartedAt\");\n const status = prop(record, \"status\");\n if (taskStartedAt != null || typeof status === \"string\" && alreadyRanStatuses.has(status)) {\n Object.assign(record, { roiStartedEmitted: true });\n }\n }\n}\nvar TASK_INDEX_HEAVY_FIELDS = [\n \"lastTurnStats\",\n \"lastTokenCount\",\n \"lastPlanDetection\",\n \"notifications\",\n \"structuredTasks\",\n \"taskOverlay\",\n \"taskOverlays\",\n \"attributedCommitShas\",\n \"composerSettings\"\n];\nfunction toTaskIndexEntry(record) {\n const slim = { ...record };\n slim.inProgressCount = countInProgressStructuredTasks(record.structuredTasks);\n slim.unreadNotificationCount = countUnresolvedNotifications(record.notifications);\n for (const key of TASK_INDEX_HEAVY_FIELDS) {\n delete slim[key];\n }\n return slim;\n}\nfunction countInProgressStructuredTasks(structured) {\n if (!structured)\n return 0;\n let count = 0;\n for (const item2 of Object.values(structured)) {\n if (item2?.status === \"in_progress\")\n count++;\n }\n return count;\n}\nfunction countUnresolvedNotifications(notifications) {\n if (!notifications)\n return 0;\n let count = 0;\n for (const n of Object.values(notifications)) {\n if (n.resolvedAt == null)\n count++;\n }\n return count;\n}\nfunction toTaskDetailFields(record) {\n const detail = { taskId: record.taskId };\n if (record.lastTurnStats !== undefined)\n detail.lastTurnStats = record.lastTurnStats;\n if (record.lastTokenCount !== undefined)\n detail.lastTokenCount = record.lastTokenCount;\n if (record.lastPlanDetection !== undefined)\n detail.lastPlanDetection = record.lastPlanDetection;\n if (record.notifications !== undefined)\n detail.notifications = record.notifications;\n if (record.structuredTasks !== undefined)\n detail.structuredTasks = record.structuredTasks;\n if (record.taskOverlay !== undefined)\n detail.taskOverlay = record.taskOverlay;\n if (record.taskOverlays !== undefined)\n detail.taskOverlays = record.taskOverlays;\n if (record.attributedCommitShas !== undefined)\n detail.attributedCommitShas = record.attributedCommitShas;\n if (record.composerSettings !== undefined)\n detail.composerSettings = record.composerSettings;\n return detail;\n}\n\n// src/template-schemas.ts\nimport { z as z25 } from \"zod\";\nvar TaskCapabilitiesSchema = z25.object({\n model: z25.string().nullable().optional(),\n reasoningEffort: ReasoningEffortSchema.nullable().optional()\n});\nvar TemplateItemSchema = z25.object({\n id: z25.string(),\n content: z25.string(),\n description: z25.string().optional(),\n deps: z25.array(z25.string()),\n model: z25.string().nullable().optional(),\n reasoningEffort: ReasoningEffortSchema.nullable().optional()\n});\nvar TaskTemplateRecordSchema = z25.object({\n id: z25.string(),\n name: z25.string(),\n description: z25.string(),\n items: z25.array(TemplateItemSchema),\n createdAt: z25.number(),\n updatedAt: z25.number(),\n builtIn: z25.boolean().default(false)\n});\nvar TEMPLATE_STORE_VERSION = 3;\nvar TemplateStoreSchema = z25.object({\n schemaVersion: z25.number(),\n templates: z25.record(z25.string(), TaskTemplateRecordSchema)\n});\nfunction migrateTemplateStore(raw) {\n if (typeof raw !== \"object\" || raw === null) {\n return { schemaVersion: TEMPLATE_STORE_VERSION, templates: {} };\n }\n const schemaVersion = prop(raw, \"schemaVersion\");\n const version = typeof schemaVersion === \"number\" ? schemaVersion : 0;\n if (version < 1) {\n return { schemaVersion: TEMPLATE_STORE_VERSION, templates: {} };\n }\n const parsed = TemplateStoreSchema.parse(raw);\n return { ...parsed, schemaVersion: TEMPLATE_STORE_VERSION };\n}\n\n// src/theme-schemas.ts\nimport { z as z26 } from \"zod\";\nvar ThemeTypeSchema = z26.enum([\"dark\", \"light\", \"hc\"]);\nvar THEME_SOURCES = [\"upload\", \"vscode\", \"builtin\"];\nvar ThemeSourceSchema = z26.enum(THEME_SOURCES);\nvar TokenColorSchema = z26.object({\n scope: z26.union([z26.string(), z26.array(z26.string())]).optional(),\n name: z26.string().optional(),\n settings: z26.object({\n foreground: z26.string().optional(),\n background: z26.string().optional(),\n fontStyle: z26.string().optional()\n })\n});\nvar VSCodeThemeSchema = z26.object({\n name: z26.string(),\n type: ThemeTypeSchema,\n colors: z26.record(z26.string(), z26.string()).default({}),\n tokenColors: z26.array(TokenColorSchema).default([]),\n semanticTokenColors: z26.record(z26.string(), z26.unknown()).optional(),\n semanticHighlighting: z26.boolean().optional(),\n source: ThemeSourceSchema,\n contentHash: z26.string()\n}).passthrough();\nvar VibeSchema = z26.object({\n id: z26.string(),\n name: z26.string(),\n darkThemeId: z26.string(),\n lightThemeId: z26.string(),\n isDefault: z26.boolean(),\n createdAt: z26.number()\n});\nvar ModeSchema = z26.enum([\"pair\", \"always-dark\", \"always-light\"]);\nvar ThemeConfigSchema = z26.object({\n vibes: z26.array(VibeSchema),\n activeVibeId: z26.string(),\n mode: ModeSchema\n});\n\n// src/thread-schemas.ts\nimport { z as z27 } from \"zod\";\nvar THREAD_CHANNEL_SEPARATOR = \"::thread::\";\nvar ThreadKindSchema = z27.enum([\"main\", \"parallel\", \"fork\"]);\nvar ThreadMetadataSchema = z27.object({\n threadId: z27.string(),\n taskId: z27.string(),\n channelId: z27.string(),\n title: z27.string(),\n createdAt: z27.number(),\n createdBy: z27.string(),\n forkMessageSeqNo: z27.number().nullable(),\n kind: ThreadKindSchema.default(\"fork\"),\n status: z27.enum([\"idle\", \"running\", \"input_required\", \"completed\"]).optional(),\n replyCount: z27.number().optional(),\n subagentTaskId: z27.string().optional(),\n readOnly: z27.boolean().optional(),\n agentType: z27.string().optional(),\n toolUseId: z27.string().optional(),\n isCompaction: z27.boolean().optional()\n});\nvar CrossThreadOriginSchema = z27.object({\n fromThreadId: z27.string(),\n fromThreadTitle: z27.string(),\n fromThreadKind: ThreadKindSchema\n});\nfunction buildThreadChannelId(taskId, threadId) {\n return `${taskId}${THREAD_CHANNEL_SEPARATOR}${threadId}`;\n}\nfunction parseThreadChannelId(channelId) {\n const idx = channelId.indexOf(THREAD_CHANNEL_SEPARATOR);\n if (idx < 1)\n return null;\n return {\n taskId: channelId.slice(0, idx),\n threadId: channelId.slice(idx + THREAD_CHANNEL_SEPARATOR.length)\n };\n}\nvar THREAD_LABEL_INFIX = \":thread:\";\nfunction buildThreadMessagesLabel(taskId, threadId) {\n return `task-messages:${taskId}${THREAD_LABEL_INFIX}${threadId}`;\n}\nfunction parseThreadMessagesLabel(label) {\n if (!label.startsWith(\"task-messages:\"))\n return null;\n const rest = label.slice(\"task-messages:\".length);\n const idx = rest.indexOf(THREAD_LABEL_INFIX);\n if (idx < 1)\n return null;\n return {\n taskId: rest.slice(0, idx),\n threadId: rest.slice(idx + THREAD_LABEL_INFIX.length)\n };\n}\n\n// src/user-settings-schemas.ts\nimport { z as z28 } from \"zod\";\nvar CREDENTIAL_METHODS = [\"oauth\", \"api-key\"];\nvar TASK_COLORS = [\n \"red\",\n \"orange\",\n \"yellow\",\n \"green\",\n \"cyan\",\n \"blue\",\n \"purple\",\n \"pink\",\n \"default\"\n];\nvar TaskColorSchema = z28.enum(TASK_COLORS);\nvar WorktreeScriptSchema = z28.object({\n script: z28.string()\n});\nvar LinearSortFieldSchema = z28.enum([\n \"priority\",\n \"updated\",\n \"created\",\n \"status\",\n \"assignee\",\n \"estimate\",\n \"title\"\n]);\nvar LinearSortDirectionSchema = z28.enum([\"asc\", \"desc\"]);\nvar LinearGroupBySchema = z28.enum([\n \"none\",\n \"status\",\n \"priority\",\n \"assignee\",\n \"team\",\n \"label\",\n \"parent\",\n \"project\"\n]);\nvar LinearViewPreferencesSchema = z28.object({\n filters: z28.object({\n status: z28.array(z28.string()),\n priority: z28.array(z28.number()),\n labels: z28.array(z28.string()),\n assignee: z28.array(z28.string()),\n team: z28.array(z28.string()),\n project: z28.array(z28.string()),\n hasEstimate: z28.boolean().nullable(),\n createdAfter: z28.string().nullable(),\n createdBefore: z28.string().nullable()\n }),\n sortBy: LinearSortFieldSchema,\n sortDirection: LinearSortDirectionSchema,\n displayProperties: z28.object({\n identifier: z28.boolean(),\n status: z28.boolean(),\n assignee: z28.boolean(),\n priority: z28.boolean(),\n estimate: z28.boolean(),\n labels: z28.boolean(),\n created: z28.boolean(),\n subIssues: z28.boolean(),\n team: z28.boolean(),\n updated: z28.boolean()\n }),\n groupBy: LinearGroupBySchema,\n subGroupBy: LinearGroupBySchema,\n showSubIssues: z28.boolean(),\n showEmptyGroups: z28.boolean()\n});\nvar UserSettingsRecordSchema = z28.object({\n composerModel: z28.string().nullable(),\n composerReasoning: ReasoningEffortSchema.nullable(),\n composerPermission: PermissionModeSchema.nullable(),\n keepMachineAwake: z28.boolean(),\n autoSuggestTitles: z28.boolean().nullable(),\n autoSwitchWorktreeEnvironment: z28.boolean(),\n worktreeScripts: z28.record(z28.string(), WorktreeScriptSchema),\n preferredAnthropicAuth: AnthropicAuthMethodSchema.nullable(),\n dismissedBuiltInTemplateIds: z28.array(z28.string()).default([]),\n builtInTemplateOrder: z28.array(z28.string()).default([]),\n taskColors: z28.record(z28.string(), TaskColorSchema).default({}),\n favoriteTasks: z28.array(z28.string()).default([]),\n collapsedProjects: z28.array(z28.string()).default([]),\n linearViewPreferences: LinearViewPreferencesSchema.nullable().default(null),\n linearScope: z28.enum([\"my-issues\", \"team-issues\"]).nullable().default(null),\n linearSelectedTeamId: z28.string().nullable().default(null)\n});\nvar USER_SETTINGS_STORE_VERSION = 5;\nvar UserSettingsStoreSchema = z28.object({\n schemaVersion: z28.number(),\n settings: UserSettingsRecordSchema\n});\nvar CredentialRecordSchema = z28.object({\n encryptedToken: z28.string(),\n iv: z28.string(),\n method: z28.enum(CREDENTIAL_METHODS),\n email: z28.string().nullable(),\n storedBy: z28.string(),\n storedAt: z28.number()\n});\nvar CREDENTIAL_STORE_VERSION = 1;\nvar CredentialsVaultStoreSchema = z28.object({\n schemaVersion: z28.number(),\n credentials: z28.record(z28.string(), CredentialRecordSchema)\n});\nvar DEFAULT_USER_SETTINGS = {\n composerModel: null,\n composerReasoning: null,\n composerPermission: null,\n keepMachineAwake: false,\n autoSuggestTitles: null,\n autoSwitchWorktreeEnvironment: false,\n worktreeScripts: {},\n preferredAnthropicAuth: null,\n dismissedBuiltInTemplateIds: [],\n builtInTemplateOrder: [],\n taskColors: {},\n favoriteTasks: [],\n collapsedProjects: [],\n linearViewPreferences: null,\n linearScope: null,\n linearSelectedTeamId: null\n};\nfunction migrateUserSettingsStore(raw) {\n if (typeof raw !== \"object\" || raw === null) {\n return { schemaVersion: USER_SETTINGS_STORE_VERSION, settings: { ...DEFAULT_USER_SETTINGS } };\n }\n const schemaVersion = prop(raw, \"schemaVersion\");\n const version = typeof schemaVersion === \"number\" ? schemaVersion : 0;\n if (version < 5) {\n stripAutoComposerReasoning(raw);\n }\n if (version >= USER_SETTINGS_STORE_VERSION) {\n return UserSettingsStoreSchema.parse(raw);\n }\n const rawSettings = prop(raw, \"settings\") ?? raw;\n const parsed = UserSettingsRecordSchema.safeParse(rawSettings);\n const settings = parsed.success ? parsed.data : { ...DEFAULT_USER_SETTINGS };\n if (version < 3 && settings.composerModel?.endsWith(\"[1m]\")) {\n settings.composerModel = settings.composerModel.slice(0, -4);\n }\n return {\n schemaVersion: USER_SETTINGS_STORE_VERSION,\n settings\n };\n}\nfunction stripAutoComposerReasoning(raw) {\n if (typeof raw !== \"object\" || raw === null)\n return;\n const settings = prop(raw, \"settings\");\n if (typeof settings !== \"object\" || settings === null)\n return;\n if (prop(settings, \"composerReasoning\") === \"auto\") {\n Object.assign(settings, { composerReasoning: null });\n }\n}\nfunction migrateCredentialsVaultStore(raw) {\n if (typeof raw !== \"object\" || raw === null) {\n return { schemaVersion: CREDENTIAL_STORE_VERSION, credentials: {} };\n }\n const schemaVersion = prop(raw, \"schemaVersion\");\n const version = typeof schemaVersion === \"number\" ? schemaVersion : 0;\n if (version >= CREDENTIAL_STORE_VERSION) {\n return CredentialsVaultStoreSchema.parse(raw);\n }\n const rawCredentials = prop(raw, \"credentials\");\n const credentials = typeof rawCredentials === \"object\" && rawCredentials !== null ? z28.record(z28.string(), CredentialRecordSchema).parse(rawCredentials) : {};\n return {\n schemaVersion: CREDENTIAL_STORE_VERSION,\n credentials\n };\n}\n\n// src/visualization-types.ts\nimport { z as z29 } from \"zod\";\nvar VIZ_TYPES = [\"html\", \"mermaid\"];\nvar VizTypeSchema = z29.enum(VIZ_TYPES);\nvar ManagedVisualizationSchema = z29.object({\n slug: z29.string(),\n title: z29.string(),\n filePath: z29.string(),\n type: VizTypeSchema,\n taskId: z29.string(),\n contentHash: z29.string(),\n canvasElementId: z29.string().optional()\n});\nvar PersistedVisualizationRegistrySchema = z29.object({\n visualizations: z29.array(ManagedVisualizationSchema)\n});\nfunction titleToSlug(title) {\n return title.toLowerCase().trim().replace(/[^a-z0-9]+/g, \"-\").replace(/^-+|-+$/g, \"\").slice(0, 64) || \"untitled\";\n}\nfunction vizFileExtension(type) {\n switch (type) {\n case \"html\":\n return \".html\";\n case \"mermaid\":\n return \".mmd\";\n default: {\n const exhaustive = type;\n throw new Error(`Unhandled viz type: ${exhaustive}`);\n }\n }\n}\n\n// src/worktree-state.ts\nimport { z as z30 } from \"zod\";\nvar WorktreeCreationPlanSchema = z30.object({\n sourceRepoPath: z30.string(),\n branchName: z30.string(),\n baseRef: z30.string(),\n setupScript: z30.string().nullable(),\n worktreeParent: z30.string(),\n worktreePath: z30.string()\n});\nvar WorktreeInputSchema = z30.object({\n sourceRepoPath: z30.string(),\n branchName: z30.string(),\n baseRef: z30.string(),\n setupScript: z30.string().nullable()\n});\nvar WORKTREE_PHASES = [\n \"idle\",\n \"validating\",\n \"creating\",\n \"copying\",\n \"setup\",\n \"ready\",\n \"failed\"\n];\nvar PhaseAtFailureSchema = z30.enum([\"validating\", \"creating\", \"copying\", \"setup\", \"ready\"]);\nvar WorktreeStateSchema = z30.discriminatedUnion(\"phase\", [\n z30.object({ phase: z30.literal(\"idle\") }),\n z30.object({\n phase: z30.literal(\"validating\"),\n requestId: z30.string(),\n input: WorktreeInputSchema\n }),\n z30.object({\n phase: z30.literal(\"creating\"),\n requestId: z30.string(),\n plan: WorktreeCreationPlanSchema\n }),\n z30.object({\n phase: z30.literal(\"copying\"),\n requestId: z30.string(),\n plan: WorktreeCreationPlanSchema,\n worktreePath: z30.string()\n }),\n z30.object({\n phase: z30.literal(\"setup\"),\n requestId: z30.string(),\n plan: WorktreeCreationPlanSchema,\n worktreePath: z30.string(),\n warnings: z30.array(z30.string())\n }),\n z30.object({\n phase: z30.literal(\"ready\"),\n requestId: z30.string(),\n plan: WorktreeCreationPlanSchema,\n worktreePath: z30.string(),\n warnings: z30.array(z30.string()),\n setupExitCode: z30.number().nullable()\n }),\n z30.object({\n phase: z30.literal(\"failed\"),\n requestId: z30.string().optional(),\n error: z30.string(),\n phaseAtFailure: PhaseAtFailureSchema\n })\n]);\n\n// src/protocols/browser-metrics-protocol.ts\nimport { z as z31 } from \"zod\";\nvar BrowserMetricsSampleSchema = z31.object({\n type: z31.literal(\"browser_metrics_sample\"),\n ts: z31.number(),\n intervalMs: z31.number().int().positive(),\n metrics: z31.object({\n longTasks: z31.object({\n count: z31.number().int().nonnegative(),\n totalMs: z31.number().nonnegative(),\n maxMs: z31.number().nonnegative()\n }).nullable(),\n eventLoopDriftMs: z31.object({\n p50: z31.number().nonnegative(),\n p99: z31.number().nonnegative(),\n sampleCount: z31.number().int().nonnegative()\n }).nullable(),\n heap: z31.object({\n usedBytes: z31.number().nonnegative(),\n totalBytes: z31.number().nonnegative(),\n limitBytes: z31.number().nonnegative()\n }).nullable(),\n rtcStats: z31.array(z31.object({\n label: z31.string(),\n rttMs: z31.number().nullable(),\n jitterMs: z31.number().nullable(),\n packetsLost: z31.number().nullable(),\n bytesSent: z31.number().nonnegative(),\n bytesReceived: z31.number().nonnegative(),\n bufferedAmount: z31.number().nonnegative()\n })).nullable(),\n idbWrites: z31.object({\n p50Ms: z31.number().nonnegative(),\n p99Ms: z31.number().nonnegative(),\n count: z31.number().int().nonnegative(),\n errors: z31.number().int().nonnegative()\n }).nullable(),\n network: z31.object({\n effectiveType: z31.string(),\n rttMs: z31.number().nonnegative(),\n downlinkMbps: z31.number().nonnegative(),\n saveData: z31.boolean()\n }).nullable(),\n visibility: z31.enum([\"visible\", \"hidden\", \"background\"]),\n tabAgeMs: z31.number().nonnegative(),\n coreWebVitals: z31.object({\n lcpMs: z31.number().nullable(),\n cls: z31.number().nullable(),\n inpMs: z31.number().nullable()\n }).nullable(),\n domInteractive: z31.number().nullable(),\n renderTotals: z31.record(z31.string(), z31.object({\n totalMs: z31.number().nonnegative(),\n count: z31.number().int().nonnegative(),\n maxMs: z31.number().nonnegative()\n })).nullable().optional(),\n idbWritesByStore: z31.record(z31.string(), z31.object({\n p50Ms: z31.number().nonnegative(),\n p99Ms: z31.number().nonnegative(),\n count: z31.number().int().nonnegative(),\n errors: z31.number().int().nonnegative()\n })).nullable().optional()\n }),\n windowEpoch: z31.number().int().nullable().optional()\n});\n\n// src/protocols/channel-protocol.ts\nvar VSCodeThemeEntrySchema = z32.object({\n extensionId: z32.string(),\n name: z32.string(),\n themeType: ThemeTypeSchema,\n path: z32.string(),\n sizeBytes: z32.number()\n});\nvar ToolRiskLevelSchema = z32.enum([\"low\", \"medium\", \"high\"]);\nvar PermissionDecisionSchema = z32.enum([\"approved\", \"denied\"]);\nvar SubagentUsageSchema = z32.object({\n totalTokens: z32.number(),\n toolUses: z32.number(),\n durationMs: z32.number()\n});\nvar BackgroundAgentStatusSchema = z32.enum([\n \"started\",\n \"running\",\n \"completed\",\n \"failed\",\n \"stopped\"\n]);\nvar ThreadStatusSchema = z32.enum([\"idle\", \"running\", \"input_required\", \"completed\"]);\nvar EnhancePromptStatusSchema = z32.enum([\"streaming\", \"done\", \"error\"]);\nvar PlanDecisionSchema = z32.enum([\"approve\", \"deny\", \"request_changes\"]);\nvar PlanPermissionModeSchema = z32.enum([\"default\", \"accept-edits\", \"bypass\", \"auto\"]);\nvar CollabRoleSchema = z32.enum([\n \"owner\",\n \"collaborator-full\",\n \"collaborator-review\",\n \"viewer\"\n]);\nvar DaemonSettingsSchema = z32.object({\n model: z32.string().optional(),\n reasoningEffort: ReasoningEffortSchema.optional(),\n permissionMode: PermissionModeSchema.optional(),\n fastMode: z32.boolean().optional(),\n disabledMcpServers: z32.array(z32.string()).optional()\n});\nvar TaskErrorKindSchema = z32.enum([\"spawn_failed\", \"sdk_error\", \"subprocess_died\"]);\nvar TaskErrorSubKindSchema = z32.enum([\"request_aborted\"]);\nvar RewindModeSchema = z32.enum([\"conversation\", \"conversation_and_code\", \"code_only\"]);\nvar CheckpointFileStatusSchema = z32.enum([\"added\", \"modified\", \"deleted\"]);\nvar CheckpointFileEntrySchema = z32.object({\n path: z32.string(),\n status: CheckpointFileStatusSchema,\n insertions: z32.number(),\n deletions: z32.number()\n});\nvar BrowserToDaemonMessageSchema = z32.discriminatedUnion(\"type\", [\n z32.object({\n type: z32.literal(\"send_message\"),\n correlationId: z32.string(),\n content: z32.array(ContentBlockSchema),\n model: z32.string().optional(),\n reasoningEffort: ReasoningEffortSchema.optional(),\n permissionMode: PermissionModeSchema.optional(),\n cwd: z32.string().optional(),\n fastMode: z32.boolean().optional()\n }),\n z32.object({ type: z32.literal(\"stop\") }),\n z32.object({\n type: z32.literal(\"subscribe\"),\n sinceSeqNo: z32.number(),\n maxMessages: z32.number().int().positive().optional(),\n inFlightCorrelationIds: z32.array(z32.string()).optional()\n }),\n z32.object({ type: z32.literal(\"cancel_queued\") }),\n z32.object({\n type: z32.literal(\"rewind_request\"),\n targetSeqNo: z32.number(),\n mode: RewindModeSchema\n }),\n z32.object({\n type: z32.literal(\"rewind_preview_request\"),\n targetSeqNo: z32.number()\n }),\n z32.object({\n type: z32.literal(\"fetch_older\"),\n beforeSeqNo: z32.number().int().nonnegative(),\n limit: z32.number().int().positive()\n })\n]);\nvar StreamDeltaEventSchema = z32.enum([\n \"content_block_start\",\n \"content_block_delta\",\n \"content_block_stop\"\n]);\nvar StreamDeltaMessageSchema = z32.object({\n type: z32.literal(\"stream_delta\"),\n event: StreamDeltaEventSchema,\n index: z32.number().int().nonnegative(),\n blockType: z32.string().optional(),\n toolName: z32.string().optional(),\n toolUseId: z32.string().optional(),\n textDelta: z32.string().optional(),\n inputJsonDelta: z32.string().optional()\n});\nvar DaemonToBrowserMessageSchema = z32.discriminatedUnion(\"type\", [\n z32.object({ type: z32.literal(\"message\"), message: MessageSchema }),\n z32.object({ type: z32.literal(\"catch_up\"), messages: z32.array(MessageSchema) }),\n z32.object({\n type: z32.literal(\"catch_up_chunk\"),\n messages: z32.array(MessageSchema),\n cursor: z32.number().int().nonnegative().nullable()\n }),\n z32.object({ type: z32.literal(\"error\"), error: z32.string() }),\n z32.object({ type: z32.literal(\"cancel_queued_ack\"), canceledCount: z32.number() }),\n z32.object({\n type: z32.literal(\"rewind_ack\"),\n targetSeqNo: z32.number(),\n mode: RewindModeSchema,\n success: z32.boolean(),\n error: z32.string().optional(),\n filesChanged: z32.number().optional(),\n insertions: z32.number().optional(),\n deletions: z32.number().optional(),\n planAffected: z32.boolean().optional(),\n threadsRemoved: z32.number().optional()\n }),\n z32.object({\n type: z32.literal(\"rewind_preview\"),\n targetSeqNo: z32.number(),\n turnNo: z32.number(),\n files: z32.array(CheckpointFileEntrySchema),\n messagesRemoved: z32.number()\n }),\n StreamDeltaMessageSchema,\n z32.object({\n type: z32.literal(\"older_messages\"),\n messages: z32.array(MessageSchema),\n hasMore: z32.boolean()\n }),\n z32.object({\n type: z32.literal(\"send_message_ack\"),\n correlationId: z32.string(),\n stage: z32.enum([\"accepted\", \"persisted\", \"forwarded\", \"confirmed\", \"rejected\"]),\n error: z32.string().optional()\n }),\n z32.object({\n type: z32.literal(\"correlation_status_snapshot\"),\n entries: z32.array(z32.object({\n correlationId: z32.string(),\n status: z32.enum([\"unknown\", \"persisted\", \"forwarded\", \"confirmed\", \"rejected\"])\n }))\n })\n]);\nvar PermissionRequestPayloadSchema = z32.object({\n taskId: z32.string(),\n toolUseId: z32.string(),\n toolName: z32.string(),\n toolInput: z32.string(),\n riskLevel: ToolRiskLevelSchema,\n reason: z32.string().optional(),\n description: z32.string().optional(),\n agentId: z32.string(),\n ownerDisplayName: z32.string().optional(),\n threadId: z32.string().optional(),\n targetParticipantId: z32.string().optional()\n});\nvar CapabilitiesPayloadSchema = z32.object({\n models: z32.array(z32.object({\n id: z32.string(),\n name: z32.string(),\n description: z32.string().optional(),\n provider: z32.string(),\n reasoning: z32.object({\n efforts: z32.array(ReasoningEffortSchema),\n defaultEffort: ReasoningEffortSchema\n }).optional(),\n supportsFastMode: z32.boolean().optional()\n })),\n environments: z32.array(z32.object({\n path: z32.string(),\n name: z32.string(),\n branch: z32.string(),\n remote: z32.string().optional()\n })),\n permissionModes: z32.array(PermissionModeSchema),\n homeDir: z32.string(),\n anthropicAuth: z32.object({\n status: z32.enum([\"authenticated\", \"unauthenticated\", \"unknown\"]),\n method: AnthropicAuthMethodSchema.optional(),\n email: z32.string().optional(),\n orgName: z32.string().optional(),\n subscriptionType: z32.string().nullable().optional(),\n apiProvider: z32.string().optional(),\n authMismatch: z32.object({\n selected: AnthropicAuthMethodSchema,\n envMethod: AnthropicAuthMethodSchema,\n envVar: z32.string()\n }).optional()\n }).nullish(),\n mcpServers: z32.array(z32.object({\n name: z32.string(),\n type: McpServerTypeSchema,\n enabled: z32.boolean(),\n source: z32.string(),\n authStatus: z32.string(),\n command: z32.string().optional(),\n args: z32.array(z32.string()).optional(),\n url: z32.string().optional()\n })),\n skills: z32.array(z32.object({\n name: z32.string(),\n description: z32.string()\n })),\n marketplacePlugins: z32.array(z32.object({\n name: z32.string(),\n description: z32.string(),\n author: z32.string(),\n marketplace: z32.string(),\n installCount: z32.number().optional(),\n installed: z32.boolean(),\n enabled: z32.boolean(),\n version: z32.string().optional(),\n isExternal: z32.boolean()\n })),\n installedAgents: z32.array(z32.discriminatedUnion(\"id\", [\n z32.object({\n id: z32.literal(\"claude-code\"),\n name: z32.literal(\"Claude Code\"),\n version: z32.string().optional()\n })\n ])),\n detectionComplete: z32.boolean().default(false),\n browserMetricsIntervalMs: z32.number().int().nonnegative().nullable().optional()\n});\nvar AgentInstallStatusSchema = z32.enum([\"installing\", \"installed\", \"failed\"]);\nvar AnthropicLoginStatusSchema = z32.enum([\"starting\", \"waiting\", \"done\", \"error\"]);\nvar PublishPhaseSchema = z32.enum([\n \"detecting_framework\",\n \"building\",\n \"uploading\",\n \"completed\",\n \"failed\"\n]);\nvar RequestPublishShape = z32.object({\n type: z32.literal(\"request_publish\"),\n correlationId: z32.string(),\n taskId: z32.string().optional(),\n target: z32.discriminatedUnion(\"kind\", [\n z32.object({ kind: z32.literal(\"slug\"), slug: z32.string() }),\n z32.object({\n kind: z32.literal(\"previewPort\"),\n previewPort: z32.number().int().positive().max(65535),\n canvasElementId: z32.string().optional()\n })\n ]),\n ttl: z32.enum([\"24h\", \"7d\", \"30d\"]),\n title: z32.string().max(200).optional()\n});\nvar PublishProgressShape = z32.object({\n type: z32.literal(\"publish_progress\"),\n correlationId: z32.string(),\n phase: PublishPhaseSchema,\n detail: z32.string().optional()\n});\nvar PublishResultShape = z32.discriminatedUnion(\"ok\", [\n z32.object({\n type: z32.literal(\"publish_result\"),\n correlationId: z32.string(),\n ok: z32.literal(true),\n id: z32.string().min(1),\n url: z32.string().url(),\n expiresAt: z32.number().int()\n }),\n z32.object({\n type: z32.literal(\"publish_result\"),\n correlationId: z32.string(),\n ok: z32.literal(false),\n error: z32.string()\n })\n]);\nvar PublishedArtifactRecordShape = z32.object({\n bindKind: z32.enum([\"slug\", \"preview\"]),\n bindKey: z32.string().min(1),\n publishId: z32.string().min(1),\n url: z32.string().url(),\n kind: z32.enum([\"html\", \"mermaid\", \"svg\", \"image\", \"static-site\", \"dom-snapshot\"]),\n title: z32.string().nullable().optional(),\n publishedAt: z32.number().int(),\n lastUploadedAt: z32.number().int(),\n expiresAt: z32.number().int(),\n ttl: z32.enum([\"24h\", \"7d\", \"30d\"]),\n lastSize: z32.number().int().nonnegative(),\n projectRoot: z32.string().optional(),\n packageName: z32.string().optional(),\n canvasElementId: z32.string().optional()\n});\nvar PublishedArtifactsStateShape = z32.object({\n type: z32.literal(\"published_artifacts_state\"),\n taskId: z32.string(),\n entries: z32.array(PublishedArtifactRecordShape)\n});\nvar PreviewElementStateShape = z32.object({\n elementId: z32.string().min(1),\n ownerUserId: z32.string(),\n port: z32.number().int().positive().optional(),\n url: z32.string().optional(),\n proxyPort: z32.number().int().positive().optional(),\n initialPath: z32.string().optional(),\n projectRoot: z32.string().optional(),\n installCmd: z32.string().optional(),\n buildCmd: z32.string().optional(),\n outDir: z32.string().optional()\n});\nvar PreviewElementsStateShape = z32.object({\n type: z32.literal(\"preview_elements_state\"),\n taskId: z32.string(),\n entries: z32.array(PreviewElementStateShape)\n});\nvar BrowserToDaemonControlMessageSchema = z32.discriminatedUnion(\"type\", [\n z32.object({\n type: z32.literal(\"permission_response\"),\n taskId: z32.string(),\n toolUseId: z32.string(),\n decision: PermissionDecisionSchema,\n updatedInput: z32.record(z32.string(), z32.unknown()).optional(),\n message: z32.string().optional(),\n threadId: z32.string().optional()\n }),\n z32.object({\n type: z32.literal(\"update_settings\"),\n settings: DaemonSettingsSchema,\n correlationId: z32.string().optional()\n }),\n z32.object({\n type: z32.literal(\"update_task_settings\"),\n taskId: z32.string(),\n settings: DaemonSettingsSchema\n }),\n z32.object({\n type: z32.literal(\"request_capabilities\"),\n force: z32.boolean().optional()\n }),\n z32.object({\n type: z32.literal(\"enhance_prompt\"),\n requestId: z32.string(),\n prompt: z32.string()\n }),\n z32.object({ type: z32.literal(\"mcp_server_reauth\"), serverName: z32.string() }),\n z32.object({\n type: z32.literal(\"mcp_submit_oauth_callback\"),\n serverName: z32.string(),\n callbackUrl: z32.string()\n }),\n z32.object({\n type: z32.literal(\"request_mcp_toggle\"),\n serverName: z32.string(),\n enabled: z32.boolean(),\n correlationId: z32.string().optional()\n }),\n z32.object({\n type: z32.literal(\"anthropic_login_request\"),\n method: AnthropicAuthMethodSchema.exclude([\"none\"]).optional()\n }),\n z32.object({ type: z32.literal(\"anthropic_logout_request\") }),\n z32.object({ type: z32.literal(\"request_pr_data\"), taskId: z32.string(), cwd: z32.string().optional() }),\n z32.object({ type: z32.literal(\"pause_pr_polling\"), taskId: z32.string() }),\n z32.object({ type: z32.literal(\"pr_action\"), taskId: z32.string(), action: PRActionSchema }),\n z32.object({\n type: z32.literal(\"plan_continue\"),\n taskId: z32.string(),\n toolUseId: z32.string(),\n decision: PlanDecisionSchema,\n feedback: z32.string().optional(),\n permissionMode: PlanPermissionModeSchema.optional(),\n comments: z32.array(z32.object({\n commentId: z32.string(),\n anchorText: z32.string(),\n body: z32.string(),\n authorName: z32.string()\n })).optional()\n }),\n z32.object({\n type: z32.literal(\"plugin_data_request\"),\n requestId: z32.string(),\n pluginId: z32.string(),\n method: z32.string(),\n params: z32.record(z32.string(), z32.unknown()).optional(),\n taskId: z32.string().optional()\n }),\n z32.object({ type: z32.literal(\"plugin_auth_request\"), pluginId: z32.string() }),\n z32.object({\n type: z32.literal(\"plugin_cc_install\"),\n pluginName: z32.string(),\n marketplace: z32.string()\n }),\n z32.object({\n type: z32.literal(\"plugin_cc_uninstall\"),\n pluginName: z32.string(),\n marketplace: z32.string()\n }),\n z32.object({\n type: z32.literal(\"join_collab_room\"),\n taskId: z32.string(),\n roomId: z32.string(),\n token: z32.string(),\n expiresAt: z32.number()\n }),\n z32.object({\n type: z32.literal(\"leave_collab_room\"),\n roomId: z32.string()\n }),\n ResourceSubscribeSchema,\n ResourceUnsubscribeSchema,\n ResourceReadRequestSchema,\n z32.object({\n type: z32.literal(\"create_worktree\"),\n requestId: z32.string(),\n sourceRepoPath: z32.string(),\n branchName: z32.string(),\n baseRef: z32.string().optional(),\n setupScript: z32.string().nullable().optional()\n }),\n z32.object({\n type: z32.literal(\"list_worktrees\"),\n repoPath: z32.string()\n }),\n z32.object({\n type: z32.literal(\"remove_worktree\"),\n worktreePath: z32.string()\n }),\n z32.object({\n type: z32.literal(\"list_directories\"),\n basePath: z32.string()\n }),\n z32.object({\n type: z32.literal(\"create_task\"),\n taskId: z32.string(),\n channelId: z32.string(),\n title: z32.string(),\n cwd: z32.string(),\n mode: z32.enum(taskModes).default(\"task\"),\n templateId: z32.string().optional()\n }),\n z32.object({\n type: z32.literal(\"promote_task\"),\n taskId: z32.string()\n }),\n z32.object({\n type: z32.literal(\"update_task_title\"),\n taskId: z32.string(),\n title: z32.string()\n }),\n z32.object({\n type: z32.literal(\"request_task_index\"),\n activeOnly: z32.boolean().optional(),\n limit: z32.number().int().positive().optional(),\n sinceLastActivityAt: z32.number().optional(),\n sinceLastId: z32.string().optional()\n }).refine((v) => v.sinceLastActivityAt == null === (v.sinceLastId == null), {\n message: \"sinceLastActivityAt and sinceLastId must both be present or both absent — omitting one re-enables tie-drop bug at page boundaries\",\n path: [\"sinceLastId\"]\n }),\n z32.object({\n type: z32.literal(\"update_user_setting\"),\n key: z32.string(),\n value: z32.unknown()\n }),\n z32.object({ type: z32.literal(\"request_user_settings\") }),\n z32.object({\n type: z32.literal(\"request_preview_target\"),\n port: z32.number().int().positive().optional(),\n url: z32.string().url().optional()\n }),\n z32.object({\n type: z32.literal(\"request_pin_to_canvas\"),\n taskId: z32.string(),\n port: z32.number().int().positive(),\n initialPath: z32.string().optional()\n }),\n z32.object({\n type: z32.literal(\"add_annotation\"),\n taskId: z32.string(),\n annotation: AnnotationZodSchema\n }),\n z32.object({ type: z32.literal(\"resolve_annotation\"), taskId: z32.string(), commentId: z32.string() }),\n z32.object({ type: z32.literal(\"delete_annotation\"), taskId: z32.string(), commentId: z32.string() }),\n z32.object({\n type: z32.literal(\"mark_annotation_delivered\"),\n taskId: z32.string(),\n ids: z32.array(z32.string())\n }),\n z32.object({ type: z32.literal(\"request_annotation_snapshot\"), taskId: z32.string() }),\n z32.object({ type: z32.literal(\"request_task_state\"), taskId: z32.string() }),\n z32.object({ type: z32.literal(\"request_task_detail\"), taskId: z32.string() }),\n z32.object({ type: z32.literal(\"request_task_index_version\") }),\n z32.object({\n type: z32.literal(\"create_thread\"),\n taskId: z32.string(),\n threadId: z32.string(),\n channelId: z32.string(),\n title: z32.string(),\n forkMessageSeqNo: z32.number().nullable(),\n kind: z32.enum([\"parallel\", \"fork\"]).default(\"fork\"),\n spawnMode: z32.enum([\"fresh\", \"compact_handoff\"]).optional()\n }),\n z32.object({ type: z32.literal(\"list_threads\"), taskId: z32.string() }),\n z32.object({ type: z32.literal(\"install_agent\"), agentId: z32.literal(\"claude-code\") }),\n z32.object({ type: z32.literal(\"refresh_agent_providers\") }),\n z32.object({\n type: z32.literal(\"compact_session\"),\n taskId: z32.string(),\n instructions: z32.string().optional()\n }),\n z32.object({ type: z32.literal(\"clear_session\"), taskId: z32.string() }),\n z32.object({ type: z32.literal(\"environment_changed\"), cwd: z32.string() }),\n z32.object({ type: z32.literal(\"acknowledge_task\"), taskId: z32.string() }),\n z32.object({\n type: z32.literal(\"set_task_color\"),\n taskId: z32.string(),\n color: TaskColorSchema\n }),\n z32.object({ type: z32.literal(\"toggle_favorite_task\"), taskId: z32.string() }),\n z32.object({\n type: z32.literal(\"set_task_project\"),\n taskId: z32.string(),\n projectId: z32.string().nullable()\n }),\n z32.object({ type: z32.literal(\"archive_task\"), taskId: z32.string() }),\n z32.object({ type: z32.literal(\"unarchive_task\"), taskId: z32.string() }),\n z32.object({ type: z32.literal(\"create_project\"), name: z32.string() }),\n z32.object({\n type: z32.literal(\"rename_project\"),\n projectId: z32.string(),\n name: z32.string()\n }),\n z32.object({ type: z32.literal(\"delete_project\"), projectId: z32.string() }),\n z32.object({ type: z32.literal(\"reorder_projects\"), order: z32.array(z32.string()) }),\n z32.object({ type: z32.literal(\"create_schedule\"), schedule: ScheduleRecordSchema }),\n z32.object({\n type: z32.literal(\"update_schedule\"),\n scheduleId: z32.string(),\n updates: ScheduleRecordSchema.partial()\n }),\n z32.object({ type: z32.literal(\"delete_schedule\"), scheduleId: z32.string() }),\n z32.object({ type: z32.literal(\"list_schedules\") }),\n z32.object({ type: z32.literal(\"run_schedule_now\"), scheduleId: z32.string() }),\n z32.object({ type: z32.literal(\"create_template\"), template: TaskTemplateRecordSchema }),\n z32.object({\n type: z32.literal(\"update_template\"),\n templateId: z32.string(),\n updates: TaskTemplateRecordSchema.pick({\n name: true,\n description: true,\n items: true\n }).partial()\n }),\n z32.object({ type: z32.literal(\"delete_template\"), templateId: z32.string() }),\n z32.object({ type: z32.literal(\"list_templates\") }),\n z32.object({ type: z32.literal(\"dismiss_built_in_template\"), templateId: z32.string() }),\n z32.object({ type: z32.literal(\"restore_built_in_template\"), templateId: z32.string() }),\n z32.object({ type: z32.literal(\"reorder_built_in_templates\"), orderedIds: z32.array(z32.string()) }),\n z32.object({\n type: z32.literal(\"notify_template_applied\"),\n taskId: z32.string(),\n templateId: z32.string()\n }),\n z32.object({\n type: z32.literal(\"apply_template_request\"),\n taskId: z32.string(),\n templateId: z32.string()\n }),\n z32.object({\n type: z32.literal(\"set_task_capabilities\"),\n taskId: z32.string(),\n itemId: z32.string(),\n capabilities: TaskCapabilitiesSchema\n }),\n z32.object({ type: z32.literal(\"stop_task\"), taskId: z32.string() }),\n z32.object({\n type: z32.literal(\"stop_background_agent\"),\n taskId: z32.string(),\n backgroundTaskId: z32.string()\n }),\n z32.object({\n type: z32.literal(\"todo_item_added\"),\n taskId: z32.string(),\n item: z32.object({\n id: z32.string(),\n content: z32.string(),\n status: z32.enum([\"pending\", \"in_progress\", \"completed\"]),\n dependsOn: z32.string().optional(),\n description: z32.string().optional()\n })\n }),\n z32.object({\n type: z32.literal(\"todo_item_removed\"),\n taskId: z32.string(),\n itemId: z32.string(),\n content: z32.string()\n }),\n z32.object({\n type: z32.literal(\"todo_item_updated\"),\n taskId: z32.string(),\n itemId: z32.string(),\n content: z32.string(),\n changes: z32.object({\n content: z32.string().optional(),\n status: z32.enum([\"pending\", \"in_progress\", \"completed\"]).optional()\n })\n }),\n z32.object({\n type: z32.literal(\"todo_dep_changed\"),\n taskId: z32.string(),\n itemId: z32.string(),\n itemContent: z32.string(),\n depId: z32.string(),\n depContent: z32.string(),\n action: z32.enum([\"connected\", \"disconnected\"])\n }),\n z32.object({\n type: z32.literal(\"request_recent_logs\"),\n windowMinutes: z32.number().int().positive().max(120).default(30)\n }),\n z32.object({\n type: z32.literal(\"presence_update\"),\n state: PeerPresenceStateSchema\n }),\n z32.object({ type: z32.literal(\"list_themes\"), requestId: z32.string() }),\n z32.object({ type: z32.literal(\"read_theme\"), id: z32.string(), requestId: z32.string() }),\n z32.object({\n type: z32.literal(\"save_theme\"),\n json: z32.string(),\n source: ThemeSourceSchema,\n requestId: z32.string()\n }),\n z32.object({ type: z32.literal(\"delete_theme\"), id: z32.string(), requestId: z32.string() }),\n z32.object({ type: z32.literal(\"get_theme_config\"), requestId: z32.string() }),\n z32.object({\n type: z32.literal(\"set_theme_config\"),\n config: ThemeConfigSchema,\n requestId: z32.string()\n }),\n z32.object({\n type: z32.literal(\"list_vscode_themes\"),\n requestId: z32.string(),\n basePaths: z32.array(z32.string()).optional()\n }),\n z32.object({\n type: z32.literal(\"import_vscode_themes\"),\n requestId: z32.string(),\n entries: z32.array(z32.object({\n path: z32.string(),\n name: z32.string(),\n themeType: ThemeTypeSchema\n }))\n }),\n RequestPublishShape,\n z32.object({\n type: z32.literal(\"set_task_cwd\"),\n taskId: z32.string(),\n cwd: z32.string(),\n cwdSubpath: z32.string().nullable()\n }),\n z32.object({\n type: z32.literal(\"start_from_linear\"),\n requestId: z32.string(),\n issueId: z32.string(),\n issueTitle: z32.string(),\n issueDescription: z32.string(),\n issueUrl: z32.string(),\n branchName: z32.string(),\n sourceRepoPath: z32.string(),\n baseRef: z32.string(),\n setupScript: z32.string().nullable(),\n enableLinearMcp: z32.boolean(),\n subIssues: z32.array(z32.object({\n id: z32.string(),\n title: z32.string(),\n identifier: z32.string()\n })).optional(),\n labels: z32.array(z32.string()).optional()\n }),\n z32.object({\n type: z32.literal(\"notification_ack\"),\n taskId: z32.string(),\n notificationId: z32.string(),\n kind: z32.enum([\"seen\", \"dismissed\"])\n }),\n z32.object({\n type: z32.literal(\"flush_resource_batch\"),\n uri: z32.string()\n }),\n BrowserMetricsSampleSchema\n]);\nvar RateLimitWindowSchema = z32.object({\n utilization: z32.number(),\n resetsAt: z32.number().optional(),\n updatedAt: z32.number()\n});\nvar RateLimitInfoSchema = z32.object({\n status: z32.enum([\"allowed\", \"allowed_warning\", \"rejected\"]),\n resetsAt: z32.number().optional(),\n rateLimitType: z32.enum([\"five_hour\", \"seven_day\", \"seven_day_opus\", \"seven_day_sonnet\", \"overage\"]).optional(),\n utilization: z32.number().optional(),\n overageStatus: z32.enum([\"allowed\", \"allowed_warning\", \"rejected\"]).optional(),\n overageResetsAt: z32.number().optional(),\n overageDisabledReason: z32.enum([\n \"overage_not_provisioned\",\n \"org_level_disabled\",\n \"org_level_disabled_until\",\n \"out_of_credits\",\n \"seat_tier_level_disabled\",\n \"member_level_disabled\",\n \"seat_tier_zero_credit_limit\",\n \"group_zero_credit_limit\",\n \"member_zero_credit_limit\",\n \"org_service_level_disabled\",\n \"org_service_zero_credit_limit\",\n \"no_limits_configured\",\n \"fetch_error\",\n \"unknown\"\n ]).optional(),\n isUsingOverage: z32.boolean().optional(),\n surpassedThreshold: z32.number().optional(),\n byWindow: z32.object({\n five_hour: RateLimitWindowSchema.optional(),\n seven_day: RateLimitWindowSchema.optional(),\n seven_day_opus: RateLimitWindowSchema.optional(),\n seven_day_sonnet: RateLimitWindowSchema.optional()\n }).optional(),\n overageStartedAt: z32.number().optional(),\n overageSessionCostUsd: z32.number().optional()\n});\nvar DaemonToBrowserControlMessageSchema = z32.discriminatedUnion(\"type\", [\n z32.object({ type: z32.literal(\"permission_request\") }).merge(PermissionRequestPayloadSchema),\n z32.object({\n type: z32.literal(\"permission_resolved\"),\n taskId: z32.string(),\n toolUseId: z32.string(),\n decision: PermissionDecisionSchema,\n threadId: z32.string().optional()\n }),\n z32.object({ type: z32.literal(\"capabilities\"), capabilities: CapabilitiesPayloadSchema }),\n z32.object({\n type: z32.literal(\"rate_limit_info\"),\n accountKey: z32.string(),\n info: RateLimitInfoSchema,\n updatedAt: z32.number()\n }),\n z32.object({\n type: z32.literal(\"settings_ack\"),\n settings: DaemonSettingsSchema,\n taskId: z32.string().optional(),\n correlationId: z32.string().optional()\n }),\n z32.object({\n type: z32.literal(\"enhance_prompt_chunk\"),\n requestId: z32.string(),\n text: z32.string(),\n status: EnhancePromptStatusSchema\n }),\n z32.object({\n type: z32.literal(\"background_agent_update\"),\n taskId: z32.string(),\n parentTaskId: z32.string().optional(),\n toolUseId: z32.string(),\n status: BackgroundAgentStatusSchema,\n description: z32.string(),\n summary: z32.string().optional(),\n agentType: z32.string().optional(),\n prompt: z32.string().optional(),\n channelId: z32.string().optional(),\n threadId: z32.string().optional(),\n createdBy: z32.string().optional(),\n usage: SubagentUsageSchema.optional(),\n lastToolName: z32.string().optional()\n }),\n z32.object({\n type: z32.literal(\"error\"),\n error: z32.string(),\n serverName: z32.string().optional()\n }),\n z32.object({\n type: z32.literal(\"mcp_server_auth_url\"),\n serverName: z32.string(),\n authorizeUrl: z32.string(),\n requestId: z32.string()\n }),\n z32.object({\n type: z32.literal(\"mcp_server_status\"),\n servers: z32.array(z32.object({\n name: z32.string(),\n status: z32.enum([\"connected\", \"failed\", \"needs-auth\", \"connecting\", \"disabled\"]),\n error: z32.string().optional(),\n toolCount: z32.number().optional(),\n serverInfo: z32.object({ name: z32.string(), version: z32.string() }).optional()\n }))\n }),\n z32.object({\n type: z32.literal(\"anthropic_login_status\"),\n requestId: z32.string(),\n status: AnthropicLoginStatusSchema,\n loginUrl: z32.string().nullable(),\n error: z32.string().nullable()\n }),\n z32.object({\n type: z32.literal(\"anthropic_logout_status\"),\n success: z32.boolean(),\n error: z32.string().nullable()\n }),\n z32.object({ type: z32.literal(\"pr_state\"), data: PRStatePayloadSchema }),\n z32.object({\n type: z32.literal(\"pr_action_result\"),\n taskId: z32.string(),\n action: z32.string(),\n success: z32.boolean(),\n error: z32.string().optional()\n }),\n z32.object({\n type: z32.literal(\"plan_detected\"),\n taskId: z32.string(),\n toolUseId: z32.string(),\n filePath: z32.string(),\n planDocId: z32.string(),\n markdown: z32.string(),\n allowedPrompts: z32.array(z32.object({\n tool: z32.string(),\n prompt: z32.string()\n })).optional(),\n isRevision: z32.boolean().optional(),\n approved: z32.boolean().optional()\n }),\n z32.object({\n type: z32.literal(\"plan_continuation_timeout\"),\n taskId: z32.string(),\n toolUseId: z32.string()\n }),\n z32.object({\n type: z32.literal(\"detected_ports\"),\n ports: z32.array(DetectedPortSchema),\n proxyPort: z32.number().optional()\n }),\n z32.object({\n type: z32.literal(\"set_preview_target\"),\n port: z32.number().optional(),\n url: z32.string().optional(),\n proxyPort: z32.number().optional()\n }),\n z32.object({\n type: z32.literal(\"open_canvas\"),\n taskId: z32.string().optional()\n }),\n z32.object({\n type: z32.literal(\"plugin_data_response\"),\n requestId: z32.string(),\n data: z32.unknown().optional(),\n error: z32.string().optional()\n }),\n z32.object({\n type: z32.literal(\"plugin_auth_status\"),\n pluginId: z32.string(),\n status: z32.enum([\"starting\", \"done\", \"error\"]),\n error: z32.string().optional()\n }),\n z32.object({\n type: z32.literal(\"collab_room_state\"),\n taskId: z32.string(),\n generation: z32.number().int().nonnegative(),\n room: z32.union([\n z32.null(),\n z32.object({\n roomId: z32.string(),\n ownerId: z32.string(),\n role: CollabRoleSchema,\n participants: z32.array(z32.object({\n userId: z32.string(),\n username: z32.string(),\n avatarUrl: z32.string().nullable().optional(),\n role: CollabRoleSchema,\n connectionId: z32.string(),\n isHub: z32.boolean()\n })),\n expiresAt: z32.number()\n })\n ])\n }),\n ResourceChangedSchema,\n ResourceReadResponseSchema,\n z32.object({\n type: z32.literal(\"worktree_phase_changed\"),\n state: WorktreeStateSchema\n }),\n z32.object({\n type: z32.literal(\"task_starting_from_linear\"),\n requestId: z32.string(),\n taskId: z32.string(),\n issueId: z32.string(),\n issueTitle: z32.string(),\n issueUrl: z32.string(),\n branchName: z32.string(),\n worktreePath: z32.string(),\n seedMessage: z32.string()\n }),\n z32.object({\n type: z32.literal(\"worktree_list\"),\n repoPath: z32.string(),\n worktrees: z32.array(z32.object({\n path: z32.string(),\n branch: z32.string(),\n isMainWorktree: z32.boolean()\n }))\n }),\n z32.object({\n type: z32.literal(\"worktree_removed\"),\n worktreePath: z32.string()\n }),\n z32.object({\n type: z32.literal(\"directory_list\"),\n basePath: z32.string(),\n directories: z32.array(z32.string())\n }),\n z32.object({\n type: z32.literal(\"task_index_snapshot\"),\n tasks: z32.record(z32.string(), TaskRecordSchema),\n version: z32.number(),\n partial: z32.boolean().optional(),\n nextCursor: z32.number().optional(),\n nextCursorId: z32.string().optional(),\n totalCount: z32.number().int().nonnegative().optional()\n }),\n z32.object({\n type: z32.literal(\"task_state_update\"),\n taskId: z32.string(),\n task: TaskRecordSchema,\n version: z32.number()\n }),\n z32.object({\n type: z32.literal(\"task_detail_snapshot\"),\n taskId: z32.string(),\n detail: z32.object({\n taskId: z32.string(),\n lastTurnStats: PersistedTurnStatsSchema.optional(),\n lastTokenCount: PersistedTokenCountSchema.optional(),\n lastPlanDetection: PlanDetectionSchema.optional(),\n notifications: z32.record(z32.string(), NotificationSchema).optional(),\n structuredTasks: z32.record(z32.string(), StructuredTaskSchema).optional(),\n taskOverlay: TaskOverlaySchema.optional(),\n taskOverlays: z32.record(z32.string(), TaskOverlaySchema).optional(),\n attributedCommitShas: z32.array(z32.string()).optional(),\n composerSettings: ComposerSettingsSchema.optional()\n })\n }),\n z32.object({\n type: z32.literal(\"task_removed\"),\n taskId: z32.string(),\n version: z32.number()\n }),\n z32.object({\n type: z32.literal(\"task_index_version\"),\n version: z32.number(),\n totalCount: z32.number().int().nonnegative()\n }),\n z32.object({\n type: z32.literal(\"promote_nudge\"),\n taskId: z32.string(),\n reason: z32.string()\n }),\n z32.object({\n type: z32.literal(\"user_settings_snapshot\"),\n settings: UserSettingsRecordSchema\n }),\n z32.object({\n type: z32.literal(\"user_settings_updated\"),\n settings: UserSettingsRecordSchema\n }),\n z32.object({\n type: z32.literal(\"projects_snapshot\"),\n projects: z32.array(ProjectSchema)\n }),\n z32.object({ type: z32.literal(\"project_updated\"), project: ProjectSchema }),\n z32.object({ type: z32.literal(\"project_deleted\"), projectId: z32.string() }),\n z32.object({\n type: z32.literal(\"annotation_snapshot\"),\n taskId: z32.string(),\n annotations: z32.record(z32.string(), AnnotationZodSchema),\n deliveredIds: z32.array(z32.string()),\n planVersions: z32.array(PlanVersionZodSchema)\n }),\n z32.object({\n type: z32.literal(\"annotation_added\"),\n taskId: z32.string(),\n annotation: AnnotationZodSchema\n }),\n z32.object({\n type: z32.literal(\"annotation_updated\"),\n taskId: z32.string(),\n commentId: z32.string(),\n annotation: AnnotationZodSchema\n }),\n z32.object({\n type: z32.literal(\"annotation_resolved\"),\n taskId: z32.string(),\n commentId: z32.string(),\n resolvedAt: z32.number()\n }),\n z32.object({ type: z32.literal(\"annotation_deleted\"), taskId: z32.string(), commentId: z32.string() }),\n z32.object({\n type: z32.literal(\"annotation_delivered\"),\n taskId: z32.string(),\n ids: z32.array(z32.string())\n }),\n z32.object({\n type: z32.literal(\"annotation_version_added\"),\n taskId: z32.string(),\n version: PlanVersionZodSchema\n }),\n z32.object({\n type: z32.literal(\"plugin_panels_updated\"),\n plugins: z32.array(z32.object({\n id: z32.string(),\n title: z32.string(),\n icon: z32.string(),\n template: z32.string(),\n refreshIntervalSeconds: z32.number().optional()\n }))\n }),\n z32.object({\n type: z32.literal(\"plugin_notification\"),\n pluginId: z32.string(),\n title: z32.string(),\n body: z32.string().optional(),\n level: z32.enum([\"info\", \"warning\", \"error\"]).default(\"info\")\n }),\n z32.object({\n type: z32.literal(\"plugin_badge_update\"),\n pluginId: z32.string(),\n badge: z32.number().nullable()\n }),\n z32.object({\n type: z32.literal(\"plugin_push\"),\n pluginId: z32.string(),\n taskId: z32.string().optional(),\n data: z32.unknown()\n }),\n z32.object({\n type: z32.literal(\"thread_created\"),\n taskId: z32.string(),\n thread: ThreadMetadataSchema\n }),\n z32.object({\n type: z32.literal(\"thread_list\"),\n taskId: z32.string(),\n threads: z32.array(ThreadMetadataSchema)\n }),\n z32.object({\n type: z32.literal(\"thread_state_update\"),\n taskId: z32.string(),\n threadId: z32.string(),\n status: ThreadStatusSchema,\n replyCount: z32.number().optional()\n }),\n z32.object({\n type: z32.literal(\"plugin_cc_install_status\"),\n pluginName: z32.string(),\n marketplace: z32.string(),\n status: z32.enum([\"installing\", \"installed\", \"error\"]),\n error: z32.string().optional()\n }),\n z32.object({\n type: z32.literal(\"plugin_cc_uninstall_status\"),\n pluginName: z32.string(),\n marketplace: z32.string(),\n status: z32.enum([\"uninstalling\", \"uninstalled\", \"error\"]),\n error: z32.string().optional()\n }),\n z32.object({\n type: z32.literal(\"agent_install_status\"),\n agentId: z32.literal(\"claude-code\"),\n status: AgentInstallStatusSchema,\n error: z32.string().optional()\n }),\n PersistedTurnStatsSchema,\n z32.object({\n type: z32.literal(\"compaction_status\"),\n taskId: z32.string(),\n status: z32.enum([\"started\", \"completed\", \"error\"]),\n preTokens: z32.number().optional(),\n summary: z32.string().optional(),\n error: z32.string().optional(),\n stats: CompactionStatsSchema.optional()\n }),\n z32.object({ type: z32.literal(\"session_cleared\"), taskId: z32.string() }),\n z32.object({ type: z32.literal(\"schedule_list\"), schedules: z32.array(ScheduleRecordSchema) }),\n z32.object({ type: z32.literal(\"schedule_updated\"), schedule: ScheduleRecordSchema }),\n z32.object({ type: z32.literal(\"schedule_deleted\"), scheduleId: z32.string() }),\n z32.object({\n type: z32.literal(\"schedule_fired\"),\n scheduleId: z32.string(),\n taskId: z32.string(),\n firedAt: z32.number()\n }),\n z32.object({ type: z32.literal(\"template_list\"), templates: z32.array(TaskTemplateRecordSchema) }),\n z32.object({ type: z32.literal(\"template_updated\"), template: TaskTemplateRecordSchema }),\n z32.object({ type: z32.literal(\"template_deleted\"), templateId: z32.string() }),\n z32.object({\n type: z32.literal(\"task_created_ack\"),\n taskId: z32.string(),\n templateId: z32.string().nullable(),\n appliedTemplate: z32.object({\n templateId: z32.string(),\n todos: z32.array(z32.object({ id: z32.string(), content: z32.string(), deps: z32.array(z32.string()) }))\n }).nullable()\n }),\n z32.object({\n type: z32.literal(\"review_comment\"),\n taskId: z32.string(),\n artifact: z32.string(),\n author: z32.string(),\n anchor: z32.string(),\n body: z32.string(),\n commentId: z32.string()\n }),\n z32.object({\n type: z32.literal(\"plan_review\"),\n taskId: z32.string(),\n decision: PlanDecisionSchema,\n feedback: z32.string().optional(),\n reviewer: z32.string()\n }),\n z32.object({\n type: z32.literal(\"task_error\"),\n taskId: z32.string(),\n error: z32.string(),\n errorKind: TaskErrorKindSchema,\n subKind: TaskErrorSubKindSchema.optional()\n }),\n z32.object({\n type: z32.literal(\"recent_logs\"),\n lines: z32.array(z32.string()),\n truncated: z32.boolean()\n }),\n z32.object({\n type: z32.literal(\"presence_state\"),\n peers: z32.record(z32.string(), PeerPresenceSlotSchema)\n }),\n z32.object({\n type: z32.literal(\"presence_delta\"),\n peerId: z32.string(),\n userId: z32.string(),\n deviceId: z32.string(),\n username: z32.string().optional(),\n avatarUrl: z32.string().nullable().optional(),\n role: CollabRoleSchema.optional(),\n status: z32.enum([\"active\", \"idle\", \"background\", \"offline\"]).optional(),\n location: z32.object({ taskId: z32.string(), surface: z32.string() }).nullable().optional(),\n typing: z32.object({ taskId: z32.string(), surface: z32.string() }).nullable().optional(),\n removed: z32.boolean().optional(),\n lastSeen: z32.number()\n }),\n z32.object({\n type: z32.literal(\"viz_content\"),\n taskId: z32.string(),\n slug: z32.string(),\n vizType: VizTypeSchema,\n title: z32.string(),\n content: z32.string()\n }),\n z32.object({\n type: z32.literal(\"viz_content_batch\"),\n taskId: z32.string(),\n items: z32.array(z32.object({\n slug: z32.string(),\n vizType: VizTypeSchema,\n title: z32.string(),\n content: z32.string()\n }))\n }),\n z32.object({\n type: z32.literal(\"theme_list\"),\n requestId: z32.string(),\n themes: z32.array(z32.object({\n id: z32.string(),\n name: z32.string(),\n themeType: ThemeTypeSchema,\n source: z32.string(),\n sizeBytes: z32.number()\n })),\n error: z32.string().optional()\n }),\n z32.object({\n type: z32.literal(\"theme_content\"),\n requestId: z32.string(),\n id: z32.string(),\n json: z32.string(),\n error: z32.string().optional()\n }),\n z32.object({\n type: z32.literal(\"theme_saved\"),\n requestId: z32.string(),\n id: z32.string(),\n error: z32.string().optional()\n }),\n z32.object({\n type: z32.literal(\"theme_deleted\"),\n requestId: z32.string(),\n id: z32.string(),\n error: z32.string().optional()\n }),\n z32.object({\n type: z32.literal(\"theme_config\"),\n requestId: z32.string(),\n config: ThemeConfigSchema,\n error: z32.string().optional()\n }),\n z32.object({\n type: z32.literal(\"theme_config_changed\"),\n config: ThemeConfigSchema\n }),\n z32.object({\n type: z32.literal(\"vscode_themes_found\"),\n requestId: z32.string(),\n themes: z32.array(VSCodeThemeEntrySchema),\n error: z32.string().optional()\n }),\n z32.object({\n type: z32.literal(\"vscode_themes_imported\"),\n requestId: z32.string(),\n ids: z32.array(z32.string()),\n failures: z32.array(z32.object({\n path: z32.string(),\n name: z32.string(),\n error: z32.string()\n })),\n error: z32.string().optional()\n }),\n PublishProgressShape,\n PublishResultShape,\n PublishedArtifactsStateShape,\n PreviewElementsStateShape,\n z32.object({\n type: z32.literal(\"notification_snapshot\"),\n taskId: z32.string(),\n notifications: z32.record(z32.string(), NotificationSchema)\n }),\n z32.object({\n type: z32.literal(\"notification_added\"),\n taskId: z32.string(),\n notification: NotificationSchema\n }),\n z32.object({\n type: z32.literal(\"notification_updated\"),\n taskId: z32.string(),\n notification: NotificationSchema\n }),\n z32.object({\n type: z32.literal(\"notification_resolved\"),\n taskId: z32.string(),\n notificationId: z32.string(),\n resolvedAt: z32.number(),\n resolvedBy: z32.string().nullable().optional()\n }),\n z32.object({\n type: z32.literal(\"resource_batch_state\"),\n uri: z32.string(),\n flushAt: z32.number().nullable(),\n pendingCount: z32.number().int().nonnegative()\n })\n]);\nvar TASK_CHANNEL_PREFIX = \"chan_\";\nvar TASK_MESSAGES_PREFIX = \"task-messages:\";\nvar DAEMON_CONTROL_LABEL = \"daemon-control\";\nvar LORO_SYNC_LABEL = \"loro-sync\";\nvar LSP_PREFIX = \"lsp:\";\nfunction buildTaskChannelId(taskId) {\n return `${TASK_CHANNEL_PREFIX}${taskId}`;\n}\nfunction parseTaskChannelId(channelId) {\n if (!channelId.startsWith(TASK_CHANNEL_PREFIX))\n return null;\n return channelId.slice(TASK_CHANNEL_PREFIX.length);\n}\nfunction buildTaskMessagesLabel(taskId) {\n return `${TASK_MESSAGES_PREFIX}${taskId}`;\n}\nfunction parseTaskMessagesLabel(label) {\n if (!label.startsWith(TASK_MESSAGES_PREFIX))\n return null;\n return label.slice(TASK_MESSAGES_PREFIX.length);\n}\nfunction buildLSPLabel(id) {\n return `${LSP_PREFIX}${id}`;\n}\nfunction parseLSPLabel(label) {\n if (!label.startsWith(LSP_PREFIX))\n return null;\n return label.slice(LSP_PREFIX.length);\n}\nfunction isBrowserToDaemonMessage(value) {\n return BrowserToDaemonMessageSchema.safeParse(value).success;\n}\nfunction isDaemonToBrowserMessage(value) {\n return DaemonToBrowserMessageSchema.safeParse(value).success;\n}\n// src/protocols/file-io-protocol.ts\nimport { z as z33 } from \"zod\";\nvar FILE_IO_PREFIX = \"file-io:\";\nfunction buildFileIOLabel(id) {\n return `${FILE_IO_PREFIX}${id}`;\n}\nfunction parseFileIOLabel(label) {\n if (!label.startsWith(FILE_IO_PREFIX))\n return null;\n return label.slice(FILE_IO_PREFIX.length);\n}\nvar FileEntrySchema = z33.object({\n name: z33.string(),\n type: z33.enum([\"file\", \"directory\"])\n});\nvar FileStatSchema = z33.object({\n type: z33.enum([\"file\", \"directory\"]),\n size: z33.number(),\n mtime: z33.number(),\n ctime: z33.number()\n});\nvar GitFileStatusSchema = z33.enum([\n \"modified\",\n \"added\",\n \"deleted\",\n \"renamed\",\n \"copied\",\n \"untracked\"\n]);\nvar GitStatusEntrySchema = z33.object({\n path: z33.string(),\n status: GitFileStatusSchema,\n staged: z33.boolean()\n});\nvar HunkRangeSchema = z33.object({\n originalStart: z33.number(),\n originalEnd: z33.number(),\n modifiedStart: z33.number(),\n modifiedEnd: z33.number()\n});\nvar BrowserToFileIOMessageSchema = z33.discriminatedUnion(\"type\", [\n z33.object({\n type: z33.literal(\"read_file\"),\n requestId: z33.string(),\n path: z33.string(),\n external: z33.boolean().optional()\n }),\n z33.object({\n type: z33.literal(\"write_file\"),\n requestId: z33.string(),\n path: z33.string(),\n content: z33.string()\n }),\n z33.object({ type: z33.literal(\"readdir\"), requestId: z33.string(), path: z33.string() }),\n z33.object({\n type: z33.literal(\"stat\"),\n requestId: z33.string(),\n path: z33.string(),\n external: z33.boolean().optional()\n }),\n z33.object({ type: z33.literal(\"git_status\"), requestId: z33.string() }),\n z33.object({\n type: z33.literal(\"git_diff_file\"),\n requestId: z33.string(),\n path: z33.string(),\n cached: z33.boolean().optional()\n }),\n z33.object({\n type: z33.literal(\"git_stage_lines\"),\n requestId: z33.string(),\n path: z33.string(),\n hunk: HunkRangeSchema,\n modifiedContent: z33.string()\n }),\n z33.object({\n type: z33.literal(\"git_unstage_lines\"),\n requestId: z33.string(),\n path: z33.string(),\n hunk: HunkRangeSchema,\n originalContent: z33.string()\n }),\n z33.object({\n type: z33.literal(\"git_stage_file\"),\n requestId: z33.string(),\n path: z33.string()\n }),\n z33.object({\n type: z33.literal(\"git_unstage_file\"),\n requestId: z33.string(),\n path: z33.string()\n }),\n z33.object({ type: z33.literal(\"set_cwd\"), requestId: z33.string(), path: z33.string() }),\n z33.object({\n type: z33.literal(\"git_diff_turn\"),\n requestId: z33.string(),\n taskId: z33.string(),\n turnIndex: z33.number()\n }),\n z33.object({\n type: z33.literal(\"git_diff_turn_file\"),\n requestId: z33.string(),\n taskId: z33.string(),\n turnIndex: z33.number(),\n path: z33.string()\n }),\n z33.object({\n type: z33.literal(\"git_revert_turn\"),\n requestId: z33.string(),\n taskId: z33.string(),\n turnIndex: z33.number(),\n mode: z33.enum([\"revert\", \"unrevert\"]).default(\"revert\"),\n filePath: z33.string().optional()\n }),\n z33.object({\n type: z33.literal(\"git_discard_file\"),\n requestId: z33.string(),\n path: z33.string()\n }),\n z33.object({\n type: z33.literal(\"git_ls_files\"),\n requestId: z33.string()\n }),\n z33.object({\n type: z33.literal(\"git_grep\"),\n requestId: z33.string(),\n pattern: z33.string(),\n caseSensitive: z33.boolean().optional(),\n regex: z33.boolean().optional(),\n maxResults: z33.number().optional()\n }),\n z33.object({\n type: z33.literal(\"git_branch_diff_files\"),\n requestId: z33.string(),\n baseRef: z33.string().optional()\n }),\n z33.object({\n type: z33.literal(\"git_branch_diff_file\"),\n requestId: z33.string(),\n path: z33.string(),\n mergeBase: z33.string()\n }),\n z33.object({\n type: z33.literal(\"git_snapshot_diff_files\"),\n requestId: z33.string(),\n fromRef: z33.string(),\n toRef: z33.string(),\n autoFetch: z33.boolean().default(true),\n parentIsMerged: z33.boolean().default(false)\n }),\n z33.object({\n type: z33.literal(\"git_snapshot_diff_file\"),\n requestId: z33.string(),\n path: z33.string(),\n fromRef: z33.string(),\n toRef: z33.string()\n })\n]);\nvar FileChangeSchema = z33.object({\n path: z33.string(),\n changeType: z33.enum([\"create\", \"update\", \"delete\"])\n});\nvar DaemonToFileIOMessageSchema = z33.discriminatedUnion(\"type\", [\n z33.object({ type: z33.literal(\"file_content\"), requestId: z33.string(), content: z33.string() }),\n z33.object({ type: z33.literal(\"write_success\"), requestId: z33.string() }),\n z33.object({\n type: z33.literal(\"dir_entries\"),\n requestId: z33.string(),\n entries: z33.array(FileEntrySchema)\n }),\n z33.object({ type: z33.literal(\"file_stat\"), requestId: z33.string(), stat: FileStatSchema }),\n z33.object({\n type: z33.literal(\"file_changes\"),\n requestId: z33.string(),\n changes: z33.array(FileChangeSchema)\n }),\n z33.object({\n type: z33.literal(\"git_status_result\"),\n requestId: z33.string(),\n files: z33.array(GitStatusEntrySchema)\n }),\n z33.object({\n type: z33.literal(\"git_diff_file_result\"),\n requestId: z33.string(),\n originalContent: z33.string(),\n modifiedContent: z33.string()\n }),\n z33.object({ type: z33.literal(\"git_stage_result\"), requestId: z33.string() }),\n z33.object({ type: z33.literal(\"git_unstage_result\"), requestId: z33.string() }),\n z33.object({\n type: z33.literal(\"set_cwd_ack\"),\n requestId: z33.string(),\n canonical: z33.string().optional()\n }),\n z33.object({\n type: z33.literal(\"git_diff_turn_result\"),\n requestId: z33.string(),\n files: z33.array(CheckpointFileEntrySchema),\n turnIndex: z33.number(),\n error: z33.string().optional(),\n isLive: z33.boolean().optional()\n }),\n z33.object({\n type: z33.literal(\"git_diff_turn_file_result\"),\n requestId: z33.string(),\n originalContent: z33.string(),\n modifiedContent: z33.string()\n }),\n z33.object({\n type: z33.literal(\"git_revert_turn_result\"),\n requestId: z33.string(),\n success: z33.boolean(),\n filesReverted: z33.number(),\n error: z33.string().optional()\n }),\n z33.object({ type: z33.literal(\"git_discard_file_result\"), requestId: z33.string() }),\n z33.object({\n type: z33.literal(\"git_ls_files_result\"),\n requestId: z33.string(),\n files: z33.array(z33.string())\n }),\n z33.object({\n type: z33.literal(\"git_grep_result\"),\n requestId: z33.string(),\n matches: z33.array(z33.object({\n path: z33.string(),\n line: z33.number(),\n column: z33.number(),\n preview: z33.string()\n })),\n truncated: z33.boolean()\n }),\n z33.object({\n type: z33.literal(\"git_branch_diff_files_result\"),\n requestId: z33.string(),\n files: z33.array(CheckpointFileEntrySchema),\n mergeBase: z33.string(),\n baseRef: z33.string()\n }),\n z33.object({\n type: z33.literal(\"git_branch_diff_file_result\"),\n requestId: z33.string(),\n originalContent: z33.string(),\n modifiedContent: z33.string()\n }),\n z33.object({\n type: z33.literal(\"git_snapshot_diff_files_result\"),\n requestId: z33.string(),\n result: z33.discriminatedUnion(\"kind\", [\n z33.object({\n kind: z33.literal(\"ok\"),\n files: z33.array(CheckpointFileEntrySchema),\n fromRef: z33.string(),\n toRef: z33.string()\n }),\n z33.object({\n kind: z33.literal(\"ok_fallback\"),\n files: z33.array(CheckpointFileEntrySchema),\n fromRef: z33.string(),\n toRef: z33.string(),\n fallbackTo: z33.literal(\"trunk\"),\n reason: z33.enum([\"parent_merged\", \"parent_ref_missing\"])\n }),\n z33.object({\n kind: z33.literal(\"error\"),\n reason: z33.enum([\"fetch_failed\", \"ref_not_found\", \"diff_failed\"]),\n message: z33.string()\n })\n ])\n }),\n z33.object({\n type: z33.literal(\"git_snapshot_diff_file_result\"),\n requestId: z33.string(),\n result: z33.discriminatedUnion(\"kind\", [\n z33.object({\n kind: z33.literal(\"ok\"),\n originalContent: z33.string(),\n modifiedContent: z33.string()\n }),\n z33.object({\n kind: z33.literal(\"error\"),\n reason: z33.enum([\"fetch_failed\", \"ref_not_found\", \"diff_failed\"]),\n message: z33.string()\n })\n ])\n }),\n z33.object({\n type: z33.literal(\"error\"),\n requestId: z33.string(),\n error: z33.string(),\n message: z33.string().optional()\n }),\n z33.object({\n type: z33.literal(\"checkpoint_ready\"),\n taskId: z33.string(),\n turnIndex: z33.number()\n })\n]);\n// src/protocols/file-reference-protocol.ts\nvar FILE_URI_PREFIX = \"shipyard://file/\";\nfunction buildFileUri(taskId, relativePath) {\n if (taskId.includes(\"/\"))\n throw new Error(`taskId must not contain '/': ${taskId}`);\n return `${FILE_URI_PREFIX}${taskId}/${relativePath}`;\n}\nfunction parseFileUri(uri) {\n if (!uri.startsWith(FILE_URI_PREFIX))\n return null;\n const rest = uri.slice(FILE_URI_PREFIX.length);\n const slashIndex = rest.indexOf(\"/\");\n if (slashIndex < 1)\n return null;\n const taskId = rest.slice(0, slashIndex);\n const relativePath = rest.slice(slashIndex + 1);\n if (!relativePath)\n return null;\n return { taskId, relativePath };\n}\nfunction isFileUri(uri) {\n return uri.startsWith(FILE_URI_PREFIX);\n}\n// src/protocols/terminal-protocol.ts\nimport { z as z34 } from \"zod\";\nvar TERMINAL_IO_PREFIX = \"terminal-io:\";\nvar TERMINAL_CONTROL_PREFIX = \"\\x00\\x01\\x00\";\nfunction buildTerminalLabel(taskId, terminalId) {\n return `${TERMINAL_IO_PREFIX}${taskId}:${terminalId}`;\n}\nfunction parseTerminalLabel(label) {\n if (!label.startsWith(TERMINAL_IO_PREFIX))\n return null;\n const rest = label.slice(TERMINAL_IO_PREFIX.length);\n const colonIndex = rest.indexOf(\":\");\n if (colonIndex <= 0 || colonIndex === rest.length - 1)\n return null;\n return { taskId: rest.slice(0, colonIndex), terminalId: rest.slice(colonIndex + 1) };\n}\nvar TerminalCwdMessageSchema = z34.object({\n type: z34.literal(\"cwd\"),\n path: z34.string()\n});\nvar TerminalResizeMessageSchema = z34.object({\n type: z34.literal(\"resize\"),\n cols: z34.number().int().positive(),\n rows: z34.number().int().positive()\n});\nvar TerminalExitedMessageSchema = z34.object({\n type: z34.literal(\"exited\"),\n exitCode: z34.number().int()\n});\nvar TerminalErrorMessageSchema = z34.object({\n type: z34.literal(\"error\"),\n message: z34.string()\n});\nvar TerminalControlMessageSchema = z34.discriminatedUnion(\"type\", [\n TerminalCwdMessageSchema,\n TerminalResizeMessageSchema,\n TerminalExitedMessageSchema,\n TerminalErrorMessageSchema\n]);\n// src/protocols/thread-reference-protocol.ts\nvar THREAD_URI_PREFIX = \"shipyard://thread/\";\nfunction buildThreadUri(taskId, threadId) {\n if (taskId.includes(\"/\"))\n throw new Error(`taskId must not contain '/': ${taskId}`);\n if (threadId.includes(\"/\"))\n throw new Error(`threadId must not contain '/': ${threadId}`);\n return `${THREAD_URI_PREFIX}${taskId}/${threadId}`;\n}\nfunction parseThreadUri(uri) {\n if (!uri.startsWith(THREAD_URI_PREFIX))\n return null;\n const rest = uri.slice(THREAD_URI_PREFIX.length);\n const match = /^([^/]+)\\/([^/]+)$/.exec(rest);\n if (!match?.[1] || !match[2])\n return null;\n return { taskId: match[1], threadId: match[2] };\n}\nfunction isThreadUri(uri) {\n return uri.startsWith(THREAD_URI_PREFIX);\n}\n// src/publish.ts\nimport { z as z35 } from \"zod\";\nimport {\n MAX_BUILD_FILE_COUNT,\n MAX_BUILD_PER_FILE_BYTES,\n MAX_BUILD_TOTAL_BYTES,\n MAX_SINGLE_FILE_BYTES,\n PUBLISH_QUOTA_TOTAL_BYTES,\n PUBLISH_RATE_LIMIT_PER_HOUR,\n PUBLISH_TTL_CHOICES,\n PUBLISHED_PREVIEW_KINDS,\n ttlToMilliseconds\n} from \"@shipyard/session\";\nimport { PUBLISH_TTL_CHOICES as PUBLISH_TTL_CHOICES2, PUBLISHED_PREVIEW_KINDS as PUBLISHED_PREVIEW_KINDS2 } from \"@shipyard/session\";\nvar PublishedPreviewKindSchema = z35.enum(PUBLISHED_PREVIEW_KINDS2);\nvar PublishTtlSchema = z35.enum(PUBLISH_TTL_CHOICES2).default(\"24h\");\nvar PublishTargetSchema = z35.discriminatedUnion(\"kind\", [\n z35.object({ kind: z35.literal(\"slug\"), slug: z35.string().min(1) }),\n z35.object({ kind: z35.literal(\"canvasElementId\"), canvasElementId: z35.string().min(1) }),\n z35.object({\n kind: z35.literal(\"previewPort\"),\n previewPort: z35.number().int().positive().max(65535),\n canvasElementId: z35.string().optional()\n })\n]);\nvar PublishInputSchema = z35.object({\n target: PublishTargetSchema,\n ttl: PublishTtlSchema,\n title: z35.string().max(200).optional()\n});\nvar PublishOutputSchema = z35.object({\n id: z35.string(),\n url: z35.string().url(),\n expiresAt: z35.number().int()\n});\nvar UnpublishInputSchema = z35.object({\n publishId: z35.string().min(1)\n});\nvar UnpublishOutputSchema = z35.object({\n ok: z35.boolean()\n});\n// src/resource-diff.ts\nimport { applyPatch, createPatch } from \"diff\";\nfunction isResourceResolutionMeta(meta) {\n if (typeof meta !== \"object\" || meta === null)\n return false;\n return \"resourceUri\" in meta && typeof meta.resourceUri === \"string\" && meta.resourceUri.length > 0 && \"resourceName\" in meta && typeof meta.resourceName === \"string\" && \"isRoot\" in meta && typeof meta.isRoot === \"boolean\" && \"isPatch\" in meta && typeof meta.isPatch === \"boolean\" && \"resolvedAt\" in meta && typeof meta.resolvedAt === \"string\";\n}\nfunction createResourceDiff(name, oldContent, newContent) {\n return createPatch(name, oldContent, newContent, \"previous\", \"current\");\n}\nfunction applyResourceDiff(content, patch) {\n const result = applyPatch(content, patch);\n return result === false ? null : result;\n}\nfunction isDiffEmpty(patch) {\n const lines = patch.split(`\n`);\n for (const line of lines) {\n if (line.startsWith(\"Index:\") || line.startsWith(\"===\") || line.startsWith(\"---\") || line.startsWith(\"+++\") || line.startsWith(\"@@\") || line.startsWith(\"\\\\ No newline\") || line === \"\") {\n continue;\n }\n if (line.startsWith(\"+\") || line.startsWith(\"-\")) {\n return false;\n }\n }\n return true;\n}\nfunction reconstructMaterializedView(resolutions) {\n if (resolutions.length === 0)\n return null;\n const rootResolution = [...resolutions].reverse().find((r) => r.isRoot);\n if (!rootResolution)\n return null;\n if (rootResolution.isTruncated)\n return null;\n let content = rootResolution.content;\n const rootIndex = resolutions.indexOf(rootResolution);\n for (let i = rootIndex + 1;i < resolutions.length; i++) {\n const resolution = resolutions[i];\n if (resolution?.isTruncated)\n return null;\n if (resolution?.patch) {\n const result = applyResourceDiff(content, resolution.patch);\n if (result === null)\n return null;\n content = result;\n }\n }\n return content;\n}\nfunction toMetaRecord(meta) {\n return { ...meta };\n}\n// src/safe-attach-data-channel.ts\nfunction safeAttachDataChannel(attach, options) {\n try {\n attach();\n return { ok: true };\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n if (msg.includes(\"can't add channel\") && msg.includes(\"stopped\")) {\n options?.log?.({ event: \"loro_add_channel_stopped\", error: msg });\n options?.onStopped?.();\n return { ok: false, reason: \"stopped\", error: err };\n }\n return { ok: false, reason: \"other\", error: err };\n }\n}\n// src/structured-task-helpers.ts\nfunction parseTaskCreate(block) {\n const input = block.input;\n if (!input || typeof input.subject !== \"string\")\n return null;\n const event = {\n type: \"task_created\",\n toolUseId: block.toolUseId ?? \"\",\n subject: input.subject\n };\n if (typeof input.description === \"string\")\n event.description = input.description;\n if (typeof input.activeForm === \"string\")\n event.activeForm = input.activeForm;\n return event;\n}\nfunction filterStrings(arr) {\n return arr.filter((v) => typeof v === \"string\");\n}\nfunction parseTaskUpdate(block) {\n const input = block.input;\n if (!input || typeof input.taskId !== \"string\")\n return null;\n const changes = {};\n if (typeof input.subject === \"string\")\n changes.subject = input.subject;\n if (typeof input.description === \"string\")\n changes.description = input.description;\n if (typeof input.activeForm === \"string\")\n changes.activeForm = input.activeForm;\n if (typeof input.status === \"string\")\n changes.status = input.status;\n if (Array.isArray(input.addBlocks))\n changes.addBlocks = filterStrings(input.addBlocks);\n if (Array.isArray(input.addBlockedBy))\n changes.addBlockedBy = filterStrings(input.addBlockedBy);\n return { type: \"task_updated\", taskId: input.taskId, changes };\n}\nfunction extractStructuredTaskEvents(blocks) {\n const events = [];\n for (const block of blocks) {\n if (block.type !== \"tool_use\")\n continue;\n let event = null;\n if (block.toolName === \"TaskCreate\") {\n event = parseTaskCreate(block);\n } else if (block.toolName === \"TaskUpdate\") {\n event = parseTaskUpdate(block);\n }\n if (event)\n events.push(event);\n }\n return events;\n}\nfunction resolveTaskIdFromResult(resultText) {\n const match = resultText.match(/Task\\s+#(\\S+)\\s+created\\s+successfully/i);\n return match?.[1] ?? null;\n}\nvar STATUS_MAP = {\n pending: \"pending\",\n in_progress: \"in_progress\",\n completed: \"completed\",\n cancelled: \"completed\"\n};\nfunction ccFileToStructuredTask(file) {\n const createdAt = file.createdAt ?? 0;\n return {\n id: file.id,\n subject: file.subject,\n description: file.description || undefined,\n status: file.status === \"completed\" ? \"completed\" : file.status === \"in_progress\" ? \"in_progress\" : \"pending\",\n activeForm: file.activeForm,\n owner: file.owner,\n blocks: file.blocks,\n blockedBy: file.blockedBy,\n createdAt,\n updatedAt: file.updatedAt ?? createdAt\n };\n}\nvar CC_STATUS_MAP = {\n pending: \"pending\",\n in_progress: \"in_progress\",\n completed: \"completed\",\n cancelled: \"completed\"\n};\nfunction structuredTaskToCCFile(task) {\n return {\n id: task.id,\n subject: task.subject,\n description: task.description ?? \"\",\n activeForm: task.activeForm,\n owner: task.owner,\n status: CC_STATUS_MAP[task.status],\n blocks: task.blocks,\n blockedBy: task.blockedBy,\n createdAt: task.createdAt,\n updatedAt: task.updatedAt\n };\n}\nfunction structuredTaskToTodoItem(task) {\n const isUser = task.owner === \"user\";\n return {\n id: task.id,\n content: task.subject,\n description: task.description ?? \"\",\n status: STATUS_MAP[task.status] ?? \"pending\",\n activeForm: task.activeForm ?? task.subject,\n deps: task.blockedBy,\n userAdded: isUser,\n startedAt: null,\n completedAt: null,\n principalId: task.owner ?? \"agent\",\n principalName: \"\",\n actorType: isUser ? \"human\" : \"agent\",\n actorId: task.owner ?? \"agent\"\n };\n}\n// src/todo-helpers.ts\nvar TODO_ITEM_STATUSES = [\"pending\", \"in_progress\", \"completed\"];\nfunction generateTodoId(content) {\n let hash = 5381;\n for (let i = 0;i < content.length; i++) {\n hash = (hash << 5) + hash + content.charCodeAt(i) | 0;\n }\n return `todo_${(hash >>> 0).toString(36)}`;\n}\nfunction isRecord2(value) {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\nfunction isValidRawTodo(item2) {\n if (!isRecord2(item2))\n return false;\n return typeof item2.content === \"string\" && typeof item2.status === \"string\" && VALID_STATUSES.has(item2.status) && typeof item2.activeForm === \"string\";\n}\nvar VALID_STATUSES = new Set(TODO_ITEM_STATUSES);\nfunction extractTodoItems(toolInput) {\n if (isRecord2(toolInput))\n return extractTodoItemsFromRecord(toolInput);\n try {\n const parsed = JSON.parse(toolInput);\n if (!isRecord2(parsed))\n return [];\n return extractTodoItemsFromRecord(parsed);\n } catch {\n return [];\n }\n}\nfunction extractTodoItemsFromRecord(input) {\n const todos = input.todos;\n if (!Array.isArray(todos))\n return [];\n const seen = new Map;\n return todos.filter(isValidRawTodo).map((item2) => {\n const baseId = generateTodoId(item2.content);\n const count = seen.get(baseId) ?? 0;\n seen.set(baseId, count + 1);\n return { ...item2, id: count === 0 ? baseId : `${baseId}_${count}` };\n });\n}\nfunction extractTodoProgress(input) {\n const items = extractTodoItemsFromRecord(input);\n if (items.length === 0)\n return null;\n let completed = 0;\n let currentActivity = null;\n for (const item2 of items) {\n if (item2.status === \"completed\")\n completed++;\n if (item2.status === \"in_progress\" && !currentActivity) {\n currentActivity = item2.activeForm;\n }\n }\n return { todoCompleted: completed, todoTotal: items.length, currentActivity };\n}\nfunction extractTodoProgressFromContent(blocks) {\n for (let i = blocks.length - 1;i >= 0; i--) {\n const block = blocks[i];\n if (block && block.type === \"tool_use\" && block.toolName === \"TodoWrite\" && block.input) {\n return extractTodoProgress(block.input);\n }\n }\n return null;\n}\n// src/transport/at-least-once/idempotency-cache.ts\nvar DEFAULT_MAX_SIZE = 1e4;\nvar DEFAULT_TTL_MS = 5 * 60 * 1000;\nfunction createIdempotencyCache(opts = {}) {\n const maxSize = opts.maxSize ?? DEFAULT_MAX_SIZE;\n const ttlMs = opts.ttlMs ?? DEFAULT_TTL_MS;\n const seen = new Map;\n function evictExpired(now) {\n for (const [id, ts] of seen) {\n if (now - ts <= ttlMs)\n break;\n seen.delete(id);\n }\n }\n function evictLru() {\n while (seen.size > maxSize) {\n const oldest = seen.keys().next();\n if (oldest.done)\n break;\n seen.delete(oldest.value);\n }\n }\n return {\n hasSeenAndMark(msgId, now) {\n evictExpired(now);\n const existing = seen.get(msgId);\n if (existing !== undefined && now - existing <= ttlMs) {\n seen.delete(msgId);\n seen.set(msgId, existing);\n return true;\n }\n seen.set(msgId, now);\n evictLru();\n return false;\n },\n size() {\n return seen.size;\n }\n };\n}\n\n// src/transport/at-least-once/awareness-tracker.ts\nvar AWARENESS_STREAM_ID = \"awareness\";\nfunction eventKey(event) {\n return [\n event.docId,\n event.peerId,\n event.matchStatus,\n event.ourVersion,\n event.theirCachedVersion ?? \"_\"\n ].join(\"|\");\n}\nfunction createAwarenessTracker(opts = {}) {\n const cache = opts.idempotencyCache ?? createIdempotencyCache({ ttlMs: opts.dedupTtlMs ?? 5 * 60 * 1000 });\n let uniqueDriftEvents = 0;\n let totalDriftSamples = 0;\n let suppressedDuplicates = 0;\n return {\n observeDrift(event, now) {\n totalDriftSamples += 1;\n const seen = cache.hasSeenAndMark(eventKey(event), now);\n if (seen) {\n suppressedDuplicates += 1;\n return false;\n }\n uniqueDriftEvents += 1;\n return true;\n },\n summary() {\n return {\n streamId: AWARENESS_STREAM_ID,\n uniqueDriftEvents,\n totalDriftSamples,\n suppressedDuplicates\n };\n }\n };\n}\n// src/transport/at-least-once/control-channel-stream-id.ts\nfunction controlChannelStreamId(sourceId) {\n return `control-${sourceId}`;\n}\nfunction controlChannelOutboxChannel(side, sourceId) {\n return side === \"daemon\" ? `daemon-control-${sourceId}` : `control-${sourceId}`;\n}\nvar PERSONAL_PEER_SOURCE_ID = \"personal\";\nfunction collabPeerSourceId(roomId, browserMachineId) {\n return `collab:${roomId}:${browserMachineId}`;\n}\n// src/transport/at-least-once/outbox.ts\nclass InMemoryOutbox {\n #entries = [];\n #highWater = null;\n async add(entry) {\n this.#entries.push(entry);\n this.#entries.sort((a, b) => a.seqNo - b.seqNo);\n if (this.#highWater === null || entry.seqNo > this.#highWater) {\n this.#highWater = entry.seqNo;\n }\n }\n async markAcked(upToSeqNo) {\n this.#entries = this.#entries.filter((e) => e.seqNo > upToSeqNo);\n }\n async removeBySeqNo(seqNo) {\n this.#entries = this.#entries.filter((e) => e.seqNo !== seqNo);\n }\n async* replayFrom(seqNo) {\n const snapshot = this.#entries.filter((e) => e.seqNo >= seqNo);\n for (const e of snapshot)\n yield e;\n }\n async size() {\n return this.#entries.length;\n }\n async highWaterMark() {\n return this.#highWater;\n }\n}\n// src/transport/at-least-once/protocol.ts\nvar DEFAULT_ACK_INTERVAL_MS = 1000;\nfunction decideAck(state, nowMs, intervalMs = DEFAULT_ACK_INTERVAL_MS) {\n if (!state.pendingAck)\n return { kind: \"idle\" };\n if (state.lastDispatchedSeqNo < 0)\n return { kind: \"idle\" };\n if (!state.connected)\n return { kind: \"idle\" };\n const elapsed = nowMs - state.lastAckSentAtMs;\n if (elapsed < intervalMs)\n return { kind: \"idle\" };\n return {\n kind: \"send_ack\",\n streamId: state.streamId,\n lastSeqNo: state.lastDispatchedSeqNo\n };\n}\nfunction decideResend(state) {\n if (!state.connected)\n return { kind: \"idle\" };\n if (state.unackedFromSeqNo >= state.nextSeqNo)\n return { kind: \"idle\" };\n return { kind: \"resend\", fromSeqNo: state.unackedFromSeqNo };\n}\nvar RESEND_BACKOFF_MS = [\n 1000,\n 2000,\n 5000,\n 15000,\n 30000,\n 60000,\n 120000,\n 300000\n];\nvar MAX_DELIVER = 8;\nvar DEFAULT_RESEND_TICK_MS = 250;\nfunction nextAttemptAtMs(attempt, nowMs, backoffMs = RESEND_BACKOFF_MS) {\n if (backoffMs.length === 0)\n return nowMs;\n const idx = Math.min(Math.max(attempt - 1, 0), backoffMs.length - 1);\n const slot = backoffMs.at(idx) ?? 0;\n return nowMs + slot;\n}\nfunction nextSendState(state, event) {\n switch (event.kind) {\n case \"send\":\n return planSend(state, event.payload, event.msgId, event.ts);\n case \"ack_received\":\n return planAckReceived(state, event.lastSeqNo);\n case \"reconnect\":\n return planReconnect(state);\n case \"connection_state_change\":\n return planSendConnectionChange(state, event.connected);\n case \"replay_request\":\n return planReplayRequest(state, event.fromSeqNo);\n default: {\n const _exhaustive = event;\n throw new Error(`Unhandled SendEvent: ${JSON.stringify(_exhaustive)}`);\n }\n }\n}\nfunction planSend(state, payload, msgId, ts) {\n const entry = { seqNo: state.nextSeqNo, msgId, payload, ts };\n const next = { ...state, nextSeqNo: state.nextSeqNo + 1 };\n const effects = [{ kind: \"persist_outbox\", entries: [entry] }];\n if (state.connected) {\n effects.push({ kind: \"wire\", entry });\n }\n return { state: next, effects };\n}\nfunction planAckReceived(state, lastSeqNo) {\n if (lastSeqNo < state.unackedFromSeqNo) {\n return { state, effects: [] };\n }\n const ceiling = state.nextSeqNo - 1;\n const ackedThrough = Math.min(lastSeqNo, ceiling);\n const next = { ...state, unackedFromSeqNo: ackedThrough + 1 };\n return {\n state: next,\n effects: [{ kind: \"truncate_outbox\", upToSeqNo: ackedThrough }]\n };\n}\nfunction planReconnect(state) {\n if (state.unackedFromSeqNo >= state.nextSeqNo) {\n if (state.connected)\n return { state, effects: [] };\n return { state: { ...state, connected: true }, effects: [] };\n }\n const next = { ...state, connected: true };\n return {\n state: next,\n effects: [{ kind: \"replay_outbox\", fromSeqNo: state.unackedFromSeqNo }]\n };\n}\nfunction planSendConnectionChange(state, connected) {\n if (state.connected === connected)\n return { state, effects: [] };\n if (!connected) {\n return { state: { ...state, connected: false }, effects: [] };\n }\n return planReconnect({ ...state, connected: false });\n}\nfunction planReplayRequest(state, fromSeqNo) {\n const ceiling = state.nextSeqNo - 1;\n const ackedThrough = Math.max(state.unackedFromSeqNo - 1, Math.min(fromSeqNo - 1, ceiling));\n const next = { ...state, unackedFromSeqNo: ackedThrough + 1 };\n const effects = [];\n if (ackedThrough >= state.unackedFromSeqNo) {\n effects.push({ kind: \"truncate_outbox\", upToSeqNo: ackedThrough });\n }\n if (state.connected && next.unackedFromSeqNo < state.nextSeqNo) {\n effects.push({ kind: \"replay_outbox\", fromSeqNo: next.unackedFromSeqNo });\n }\n return { state: next, effects };\n}\nfunction nextReceiveState(state, event) {\n switch (event.kind) {\n case \"wire_received\":\n return planWireReceived(state, event.envelope);\n case \"connection_state_change\":\n return planReceiveConnectionChange(state, event.connected);\n default: {\n const _exhaustive = event;\n throw new Error(`Unhandled ReceiveEvent: ${JSON.stringify(_exhaustive)}`);\n }\n }\n}\nvar CURSOR_RESET_GAP = 10;\nfunction planWireReceived(state, envelope) {\n if (envelope.seqNo <= state.lastDispatchedSeqNo) {\n if (envelope.seqNo === 0 && state.lastDispatchedSeqNo - envelope.seqNo >= CURSOR_RESET_GAP) {\n const next2 = {\n ...state,\n lastDispatchedSeqNo: envelope.seqNo,\n pendingAck: true\n };\n return {\n state: next2,\n effects: [\n {\n kind: \"cursor_reset_detected\",\n streamId: state.streamId,\n previousSeqNo: state.lastDispatchedSeqNo\n },\n {\n kind: \"dispatch\",\n msg: envelope.payload,\n seqNo: envelope.seqNo,\n msgId: envelope.msgId\n }\n ]\n };\n }\n return { state, effects: [] };\n }\n const next = {\n ...state,\n lastDispatchedSeqNo: envelope.seqNo,\n pendingAck: true\n };\n return {\n state: next,\n effects: [\n {\n kind: \"dispatch\",\n msg: envelope.payload,\n seqNo: envelope.seqNo,\n msgId: envelope.msgId\n }\n ]\n };\n}\nfunction planReceiveConnectionChange(state, connected) {\n if (state.connected === connected)\n return { state, effects: [] };\n const next = { ...state, connected };\n if (!connected)\n return { state: next, effects: [] };\n return {\n state: next,\n effects: [\n {\n kind: \"send_high_water_mark\",\n streamId: state.streamId,\n lastSeqNo: state.lastDispatchedSeqNo\n }\n ]\n };\n}\nfunction markAckSent(state, nowMs) {\n if (!state.pendingAck)\n return state;\n return { ...state, pendingAck: false, lastAckSentAtMs: nowMs };\n}\nfunction initialSendState(streamId) {\n return { streamId, nextSeqNo: 0, unackedFromSeqNo: 0, connected: false };\n}\nfunction initialReceiveState(streamId) {\n return {\n streamId,\n lastDispatchedSeqNo: -1,\n pendingAck: false,\n lastAckSentAtMs: 0,\n connected: false\n };\n}\n// src/transport/at-least-once/schemas.ts\nimport { z as z36 } from \"zod\";\nvar AtLeastOnceEnvelopeSchema = z36.object({\n kind: z36.literal(\"alo_envelope\"),\n streamId: z36.string(),\n seqNo: z36.number().int().nonnegative(),\n msgId: z36.string(),\n payload: z36.unknown()\n});\nvar AtLeastOnceAckSchema = z36.object({\n kind: z36.literal(\"alo_ack\"),\n streamId: z36.string(),\n lastSeqNo: z36.number().int().nonnegative()\n});\nvar AtLeastOnceHighWaterMarkSchema = z36.object({\n kind: z36.literal(\"alo_high_water_mark\"),\n streamId: z36.string(),\n lastSeqNo: z36.number().int().min(-1)\n});\nvar AtLeastOnceMessageSchema = z36.discriminatedUnion(\"kind\", [\n AtLeastOnceEnvelopeSchema,\n AtLeastOnceAckSchema,\n AtLeastOnceHighWaterMarkSchema\n]);\n// src/transport/at-least-once/shell.ts\nclass AtLeastOnceShell {\n #deps;\n #sendState;\n #receiveState;\n #initialized = false;\n #disposed = false;\n #retryState = new Map;\n #dedupKeyToSeqNo = new Map;\n #sendChain = Promise.resolve();\n #tickHandle = null;\n #tickIntervalMs;\n #backoffMs;\n #maxDeliver;\n #setInterval;\n #clearInterval;\n constructor(deps) {\n this.#deps = deps;\n this.#sendState = initialSendState(deps.streamId);\n this.#receiveState = initialReceiveState(deps.streamId);\n this.#tickIntervalMs = deps.tickIntervalMs ?? DEFAULT_RESEND_TICK_MS;\n this.#backoffMs = deps.backoffMs ?? RESEND_BACKOFF_MS;\n this.#maxDeliver = deps.maxDeliver ?? MAX_DELIVER;\n this.#setInterval = deps.setInterval ?? ((fn, ms) => setInterval(fn, ms));\n this.#clearInterval = deps.clearInterval ?? ((handle) => clearInterval(handle));\n deps.log?.({ event: \"alo_shell_created\", streamId: deps.streamId });\n }\n dispose() {\n if (this.#disposed)\n return;\n const retryStateSize = this.#retryState.size;\n const dedupKeysSize = this.#dedupKeyToSeqNo.size;\n this.#disposed = true;\n this.#stopTickTimer();\n this.#retryState.clear();\n this.#dedupKeyToSeqNo.clear();\n if (this.#deps.receiveCursor?.close) {\n this.#deps.receiveCursor.close().catch((err) => {\n this.#deps.log?.({\n event: \"alo_receive_cursor_close_failed\",\n streamId: this.#deps.streamId,\n error: err instanceof Error ? err.message : String(err)\n });\n });\n }\n this.#deps.log?.({\n event: \"alo_shell_disposed\",\n streamId: this.#deps.streamId,\n retryStateSize,\n dedupKeysSize,\n connected: this.#sendState.connected\n });\n }\n get isDisposed() {\n return this.#disposed;\n }\n async initialize() {\n if (this.#disposed)\n return;\n if (this.#initialized)\n return;\n const hwm = await this.#deps.outbox.highWaterMark();\n if (hwm !== null) {\n this.#sendState = { ...this.#sendState, nextSeqNo: hwm + 1 };\n }\n if (this.#deps.receiveCursor) {\n const cursor = await this.#deps.receiveCursor.load();\n if (cursor !== null && cursor > this.#receiveState.lastDispatchedSeqNo) {\n this.#receiveState = { ...this.#receiveState, lastDispatchedSeqNo: cursor };\n }\n }\n if (this.#disposed)\n return;\n this.#initialized = true;\n }\n get isInitialized() {\n return this.#initialized;\n }\n async setConnected(connected) {\n if (this.#disposed)\n return;\n const sendStep = nextSendState(this.#sendState, {\n kind: \"connection_state_change\",\n connected\n });\n this.#sendState = sendStep.state;\n await this.#applySendEffects(sendStep.effects);\n const recvStep = nextReceiveState(this.#receiveState, {\n kind: \"connection_state_change\",\n connected\n });\n this.#receiveState = recvStep.state;\n this.#applyReceiveEffects(recvStep.effects);\n if (connected)\n this.#startTickTimer();\n else\n this.#stopTickTimer();\n }\n async send(payload, opts) {\n if (this.#disposed)\n return;\n if (!this.#initialized) {\n throw new Error(\"AtLeastOnceShell.send called before initialize()\");\n }\n const next = this.#sendChain.then(() => this.#sendInner(payload, opts));\n this.#sendChain = next.catch(() => {});\n return next;\n }\n async#sendInner(payload, opts) {\n if (this.#disposed)\n return;\n if (opts?.dedupKey != null) {\n const oldSeqNo = this.#dedupKeyToSeqNo.get(opts.dedupKey);\n if (oldSeqNo !== undefined) {\n this.#retryState.delete(oldSeqNo);\n try {\n await this.#deps.outbox.removeBySeqNo(oldSeqNo);\n } catch {}\n }\n }\n const msgId = opts?.msgId ?? generateMsgId();\n const ts = this.#now();\n const step = nextSendState(this.#sendState, {\n kind: \"send\",\n payload,\n msgId,\n ts\n });\n this.#sendState = step.state;\n if (opts?.dedupKey != null) {\n const newSeqNo = step.state.nextSeqNo - 1;\n this.#dedupKeyToSeqNo.set(opts.dedupKey, newSeqNo);\n }\n await this.#applySendEffects(step.effects);\n }\n async receive(raw) {\n if (this.#disposed)\n return { kind: \"passthrough\", raw };\n let parsedJson;\n try {\n parsedJson = JSON.parse(raw);\n } catch {\n return { kind: \"passthrough\", raw };\n }\n return this.receiveParsed(parsedJson, raw);\n }\n async receiveParsed(parsed, raw) {\n if (this.#disposed)\n return { kind: \"passthrough\", raw: raw ?? JSON.stringify(parsed) };\n const result = AtLeastOnceMessageSchema.safeParse(parsed);\n if (!result.success) {\n return { kind: \"passthrough\", raw: raw ?? JSON.stringify(parsed) };\n }\n const msg = result.data;\n if (msg.streamId !== this.#deps.streamId) {\n return { kind: \"passthrough\", raw: raw ?? JSON.stringify(parsed) };\n }\n switch (msg.kind) {\n case \"alo_envelope\":\n await this.#handleEnvelope(msg);\n return { kind: \"consumed\" };\n case \"alo_ack\":\n await this.#handleAck(msg);\n return { kind: \"consumed\" };\n case \"alo_high_water_mark\":\n await this.#handleHighWaterMark(msg);\n return { kind: \"consumed\" };\n default: {\n const _exhaustive = msg;\n return { kind: \"passthrough\", raw: raw ?? JSON.stringify(parsed) };\n }\n }\n }\n get sendState() {\n return this.#sendState;\n }\n get receiveState() {\n return this.#receiveState;\n }\n async#handleEnvelope(env) {\n const { seqNo, msgId, payload } = env;\n const seen = this.#deps.idempotencyCache.hasSeenAndMark(msgId, this.#now());\n const priorCursor = this.#receiveState.lastDispatchedSeqNo;\n const step = nextReceiveState(this.#receiveState, {\n kind: \"wire_received\",\n envelope: { seqNo, msgId, payload }\n });\n this.#receiveState = step.state;\n if (!seen) {\n this.#applyReceiveEffects(step.effects);\n }\n if (this.#deps.receiveCursor && this.#receiveState.lastDispatchedSeqNo > priorCursor) {\n const advanced = this.#receiveState.lastDispatchedSeqNo;\n this.#deps.receiveCursor.save(advanced).catch((err) => {\n this.#deps.log?.({\n event: \"alo_receive_cursor_save_failed\",\n streamId: this.#deps.streamId,\n error: err instanceof Error ? err.message : String(err)\n });\n });\n }\n this.#sendDelayedAck();\n }\n async#handleAck(ack) {\n const step = nextSendState(this.#sendState, {\n kind: \"ack_received\",\n lastSeqNo: ack.lastSeqNo\n });\n this.#sendState = step.state;\n await this.#applySendEffects(step.effects);\n }\n async#handleHighWaterMark(hwm) {\n const step = nextSendState(this.#sendState, {\n kind: \"replay_request\",\n fromSeqNo: hwm.lastSeqNo + 1\n });\n this.#sendState = step.state;\n await this.#applySendEffects(step.effects);\n }\n async#applySendEffects(effects) {\n for (const effect of effects) {\n switch (effect.kind) {\n case \"persist_outbox\":\n for (const entry of effect.entries) {\n await this.#deps.outbox.add(entry);\n }\n break;\n case \"wire\":\n this.#wireEnvelope(effect.entry);\n this.#trackInitialSend(effect.entry);\n break;\n case \"truncate_outbox\": {\n await this.#deps.outbox.markAcked(effect.upToSeqNo);\n const droppedFromRetry = this.#dropRetryStateUpTo(effect.upToSeqNo);\n this.#deps.log?.({\n event: \"alo_ack_received\",\n streamId: this.#deps.streamId,\n upToSeqNo: effect.upToSeqNo,\n droppedFromRetry\n });\n break;\n }\n case \"replay_outbox\": {\n for await (const entry of this.#deps.outbox.replayFrom(effect.fromSeqNo)) {\n this.#wireEnvelope(entry);\n this.#trackReplaySend(entry);\n }\n break;\n }\n default: {\n const _exhaustive = effect;\n }\n }\n }\n }\n #trackInitialSend(entry) {\n const now = this.#now();\n this.#retryState.set(entry.seqNo, {\n entry,\n attempt: 1,\n nextAttemptAtMs: nextAttemptAtMs(1, now, this.#backoffMs)\n });\n }\n #trackReplaySend(entry) {\n const now = this.#now();\n const existing = this.#retryState.get(entry.seqNo);\n const attempt = existing ? existing.attempt + 1 : 1;\n this.#retryState.set(entry.seqNo, {\n entry,\n attempt,\n nextAttemptAtMs: nextAttemptAtMs(attempt, now, this.#backoffMs)\n });\n }\n #dropRetryStateUpTo(upToSeqNo) {\n const before = this.#retryState.size;\n for (const seqNo of this.#retryState.keys()) {\n if (seqNo <= upToSeqNo)\n this.#retryState.delete(seqNo);\n }\n for (const [key, seqNo] of this.#dedupKeyToSeqNo) {\n if (seqNo <= upToSeqNo)\n this.#dedupKeyToSeqNo.delete(key);\n }\n return before - this.#retryState.size;\n }\n #applyReceiveEffects(effects) {\n for (const effect of effects) {\n switch (effect.kind) {\n case \"dispatch\":\n this.#deps.dispatch(effect.msg);\n break;\n case \"send_ack\":\n this.#wireAck(effect);\n break;\n case \"send_high_water_mark\":\n this.#wireHighWaterMark(effect);\n break;\n case \"cursor_reset_detected\":\n this.#deps.log?.({\n event: \"alo_cursor_reset_detected\",\n streamId: effect.streamId,\n previousSeqNo: effect.previousSeqNo\n });\n if (this.#deps.receiveCursor) {\n this.#deps.receiveCursor.reset().catch((err) => {\n this.#deps.log?.({\n event: \"alo_receive_cursor_reset_failed\",\n streamId: effect.streamId,\n error: err instanceof Error ? err.message : String(err)\n });\n });\n }\n break;\n default: {\n const _exhaustive = effect;\n }\n }\n }\n }\n #sendDelayedAck() {\n if (!this.#receiveState.pendingAck)\n return;\n if (this.#receiveState.lastDispatchedSeqNo < 0)\n return;\n const ack = {\n kind: \"alo_ack\",\n streamId: this.#receiveState.streamId,\n lastSeqNo: this.#receiveState.lastDispatchedSeqNo\n };\n this.#deps.rawSend(JSON.stringify(ack));\n this.#receiveState = markAckSent(this.#receiveState, this.#now());\n }\n #wireEnvelope(entry) {\n const env = {\n kind: \"alo_envelope\",\n streamId: this.#deps.streamId,\n seqNo: entry.seqNo,\n msgId: entry.msgId,\n payload: entry.payload\n };\n this.#deps.rawSend(JSON.stringify(env));\n }\n #wireAck(eff) {\n const ack = {\n kind: \"alo_ack\",\n streamId: eff.streamId,\n lastSeqNo: eff.lastSeqNo\n };\n this.#deps.rawSend(JSON.stringify(ack));\n this.#receiveState = markAckSent(this.#receiveState, this.#now());\n }\n #wireHighWaterMark(eff) {\n const hwm = {\n kind: \"alo_high_water_mark\",\n streamId: eff.streamId,\n lastSeqNo: eff.lastSeqNo\n };\n this.#deps.rawSend(JSON.stringify(hwm));\n }\n #now() {\n return this.#deps.now ? this.#deps.now() : Date.now();\n }\n #startTickTimer() {\n if (this.#tickHandle !== null)\n return;\n if (this.#disposed)\n return;\n this.#tickHandle = this.#setInterval(() => {\n this.#tick();\n }, this.#tickIntervalMs);\n }\n #stopTickTimer() {\n if (this.#tickHandle === null)\n return;\n this.#clearInterval(this.#tickHandle);\n this.#tickHandle = null;\n }\n async#tick() {\n if (this.#disposed)\n return;\n if (!this.#sendState.connected)\n return;\n const now = this.#now();\n const { due, deadLettered } = this.#partitionRetryEntries(now);\n for (const re of deadLettered) {\n await this.#processDeadLetter(re);\n }\n for (const re of due) {\n this.#processResend(re, now);\n }\n }\n #partitionRetryEntries(now) {\n const due = [];\n const deadLettered = [];\n for (const re of this.#retryState.values()) {\n if (now < re.nextAttemptAtMs)\n continue;\n if (re.attempt >= this.#maxDeliver)\n deadLettered.push(re);\n else\n due.push(re);\n }\n return { due, deadLettered };\n }\n async#processDeadLetter(re) {\n this.#retryState.delete(re.entry.seqNo);\n this.#deps.log?.({\n event: \"alo_dead_letter\",\n streamId: this.#deps.streamId,\n seqNo: re.entry.seqNo,\n msgId: re.entry.msgId,\n attempts: re.attempt\n });\n if (this.#deps.onDeadLetter) {\n try {\n this.#deps.onDeadLetter(re.entry, re.attempt);\n } catch (err) {\n this.#deps.log?.({\n event: \"alo_dead_letter_callback_failed\",\n streamId: this.#deps.streamId,\n seqNo: re.entry.seqNo,\n error: err instanceof Error ? err.message : String(err)\n });\n }\n }\n try {\n await this.#deps.outbox.markAcked(re.entry.seqNo);\n } catch (err) {\n this.#deps.log?.({\n event: \"alo_dead_letter_outbox_truncate_failed\",\n streamId: this.#deps.streamId,\n seqNo: re.entry.seqNo,\n error: err instanceof Error ? err.message : String(err)\n });\n }\n }\n #processResend(re, now) {\n re.attempt += 1;\n re.nextAttemptAtMs = nextAttemptAtMs(re.attempt, now, this.#backoffMs);\n this.#wireEnvelope(re.entry);\n this.#deps.log?.({\n event: \"alo_resend\",\n streamId: this.#deps.streamId,\n seqNo: re.entry.seqNo,\n msgId: re.entry.msgId,\n attempt: re.attempt\n });\n }\n get retryStateForTest() {\n return Array.from(this.#retryState.values()).map((re) => ({\n seqNo: re.entry.seqNo,\n attempt: re.attempt,\n nextAttemptAtMs: re.nextAttemptAtMs\n }));\n }\n}\nfunction generateMsgId() {\n const c = typeof globalThis !== \"undefined\" && \"crypto\" in globalThis ? globalThis.crypto : undefined;\n if (c?.randomUUID)\n return c.randomUUID();\n return `m_${Math.random().toString(36).slice(2)}_${Date.now().toString(36)}`;\n}\n// src/transport/chunk-reassembler.ts\nclass ChunkReassembler {\n #buffers = new Map;\n #log;\n constructor(log) {\n this.#log = log;\n }\n reassemble(chunk) {\n let buffer = this.#buffers.get(chunk.id);\n if (!buffer) {\n buffer = { parts: new Array(chunk.total).fill(\"\"), received: 0, total: chunk.total };\n this.#buffers.set(chunk.id, buffer);\n }\n if (!buffer.parts[chunk.index])\n buffer.received++;\n buffer.parts[chunk.index] = chunk.data;\n if (buffer.received < buffer.total)\n return null;\n const assembled = buffer.parts.join(\"\");\n this.#buffers.delete(chunk.id);\n this.#log(`[ControlChannelManager] Reassembled chunked message: ${chunk.id} (${assembled.length} bytes)`);\n return assembled;\n }\n parseOrReassemble(data) {\n let parsed;\n try {\n parsed = JSON.parse(data);\n } catch {\n this.#log(`[ControlChannelManager] Invalid JSON from daemon`);\n return null;\n }\n if (typeof parsed === \"object\" && parsed !== null && \"__chunk\" in parsed && \"id\" in parsed && \"index\" in parsed && \"total\" in parsed && \"data\" in parsed) {\n const chunk = {\n id: String(parsed.id),\n index: Number(parsed.index),\n total: Number(parsed.total),\n data: String(parsed.data)\n };\n const reassembled = this.reassemble(chunk);\n if (!reassembled)\n return null;\n try {\n return JSON.parse(reassembled);\n } catch {\n this.#log(`[ControlChannelManager] Invalid JSON after chunk reassembly`);\n return null;\n }\n }\n return parsed;\n }\n clear() {\n this.#buffers.clear();\n }\n}\n// src/transport/chunked-send.ts\nvar DEFAULT_THRESHOLD = 15000;\nvar DEFAULT_CHUNK_SIZE = 1e4;\nvar chunkCounter = 0;\nfunction chunkSerializedMessage(data, opts) {\n const threshold = opts?.threshold ?? DEFAULT_THRESHOLD;\n const chunkSize = opts?.chunkSize ?? DEFAULT_CHUNK_SIZE;\n if (data.length <= threshold)\n return [data];\n const id = `chunk-${Date.now()}-${chunkCounter++}`;\n const total = Math.ceil(data.length / chunkSize);\n const chunks = [];\n for (let i = 0;i < total; i++) {\n chunks.push(JSON.stringify({\n __chunk: true,\n id,\n index: i,\n total,\n data: data.slice(i * chunkSize, (i + 1) * chunkSize)\n }));\n }\n return chunks;\n}\n// src/transport/guarded-channel.ts\nvar DEFAULT_MAX_QUEUED_BYTES = 500000;\nvar DEFAULT_HIGH_WATER_BYTES = 1048576;\nfunction initialChannelState(readyState = \"pre-open\") {\n return {\n readyState,\n queuedBytes: 0,\n queuedMessages: [],\n bufferedAmount: 0,\n droppedTotal: 0\n };\n}\nfunction resolveConfig(opts) {\n return {\n maxQueuedBytes: opts.maxQueuedBytes ?? DEFAULT_MAX_QUEUED_BYTES,\n highWaterBytes: opts.highWaterBytes ?? DEFAULT_HIGH_WATER_BYTES\n };\n}\nfunction byteLen(s) {\n return s.length;\n}\nfunction chunksTotalBytes(chunks) {\n let total = 0;\n for (const c of chunks)\n total += byteLen(c);\n return total;\n}\nfunction recordDrop(state, bytes) {\n return { ...state, droppedTotal: state.droppedTotal + bytes };\n}\nfunction planSend2(state, input, config) {\n switch (input.kind) {\n case \"open\":\n return planOpen(state, config);\n case \"close\":\n return planClose(state, input.reason);\n case \"bufferedAmountUpdate\":\n return planBufferedUpdate(state, input.bufferedAmount, config);\n case \"send\":\n return planSendMessage(state, input.data, input.chunks, input.policy, config);\n default: {\n const _exhaustive = input;\n throw new Error(`Unhandled SendInput: ${JSON.stringify(_exhaustive)}`);\n }\n }\n}\nfunction planOpen(state, config) {\n if (state.readyState === \"open\") {\n return { newState: state, effects: [], result: \"sent\" };\n }\n if (state.readyState === \"closed\" || state.readyState === \"errored\") {\n return { newState: state, effects: [], result: \"dropped\" };\n }\n const effects = [{ kind: \"emitReady\" }];\n const remaining = [];\n let remainingBytes = 0;\n let runningBuffered = state.bufferedAmount;\n let stopped = false;\n for (const msg of state.queuedMessages) {\n const msgBytes = byteLen(msg);\n if (!stopped && runningBuffered + msgBytes <= config.highWaterBytes) {\n effects.push({ kind: \"rawSend\", data: msg });\n runningBuffered += msgBytes;\n continue;\n }\n stopped = true;\n remaining.push(msg);\n remainingBytes += msgBytes;\n }\n return {\n newState: {\n ...state,\n readyState: \"open\",\n queuedMessages: remaining,\n queuedBytes: remainingBytes\n },\n effects,\n result: \"sent\"\n };\n}\nfunction planClose(state, reason) {\n if (state.readyState === \"closed\") {\n return { newState: state, effects: [], result: \"dropped\" };\n }\n const next = reason === \"error\" ? \"errored\" : \"closed\";\n const dropped = state.queuedBytes;\n const droppedMessageCount = state.queuedMessages.length;\n const droppedEffects = dropped > 0 ? [{ kind: \"emitDrop\", reason: \"closed\", bytes: dropped, messageCount: droppedMessageCount }] : [];\n const newState = {\n ...state,\n readyState: next,\n queuedMessages: [],\n queuedBytes: 0,\n droppedTotal: state.droppedTotal + dropped\n };\n return {\n newState,\n effects: [\n ...droppedEffects,\n { kind: \"emitClose\", reason, queuedMessageCount: droppedMessageCount }\n ],\n result: \"dropped\"\n };\n}\nfunction planBufferedUpdate(state, bufferedAmount, config) {\n if (state.readyState === \"closed\" || state.readyState === \"errored\") {\n return { newState: state, effects: [], result: \"sent\" };\n }\n const updated = { ...state, bufferedAmount };\n if (state.readyState !== \"open\" || state.queuedMessages.length === 0) {\n return { newState: updated, effects: [], result: \"sent\" };\n }\n if (bufferedAmount > config.highWaterBytes) {\n return { newState: updated, effects: [], result: \"sent\" };\n }\n const effects = [{ kind: \"emitDrain\" }];\n for (const msg of state.queuedMessages) {\n effects.push({ kind: \"rawSend\", data: msg });\n }\n return {\n newState: { ...updated, queuedMessages: [], queuedBytes: 0 },\n effects,\n result: \"sent\"\n };\n}\nfunction planSendMessage(state, _data, chunks, policy, config) {\n const bytes = chunksTotalBytes(chunks);\n if (state.readyState === \"closed\" || state.readyState === \"errored\") {\n return {\n newState: recordDrop(state, bytes),\n effects: [{ kind: \"emitDrop\", reason: \"closed\", bytes, messageCount: 1 }],\n result: \"dropped\"\n };\n }\n if (bytes > config.maxQueuedBytes) {\n return {\n newState: recordDrop(state, bytes),\n effects: [{ kind: \"emitDrop\", reason: \"oversize\", bytes, messageCount: 1 }],\n result: \"dropped\"\n };\n }\n if (state.readyState === \"pre-open\") {\n return planPreOpenSend(state, chunks, bytes, policy, config);\n }\n return planOpenSend(state, chunks, bytes, policy, config);\n}\nfunction planPreOpenSend(state, chunks, bytes, policy, config) {\n if (policy === \"drop\") {\n return {\n newState: recordDrop(state, bytes),\n effects: [{ kind: \"emitDrop\", reason: \"not-open\", bytes, messageCount: 1 }],\n result: \"dropped\"\n };\n }\n if (state.queuedBytes + bytes > config.maxQueuedBytes) {\n return {\n newState: recordDrop(state, bytes),\n effects: [{ kind: \"emitDrop\", reason: \"queue-full\", bytes, messageCount: 1 }],\n result: \"dropped\"\n };\n }\n return {\n newState: {\n ...state,\n queuedMessages: [...state.queuedMessages, ...chunks],\n queuedBytes: state.queuedBytes + bytes\n },\n effects: [],\n result: \"queued\"\n };\n}\nfunction planOpenSend(state, chunks, bytes, policy, config) {\n if (policy === \"queue\") {\n return planQueuePolicySend(state, chunks, bytes, config);\n }\n if (policy === \"drop\") {\n return planDropPolicySend(state, chunks, bytes, config);\n }\n return planAwaitDrainSend(state, chunks, bytes, config);\n}\nfunction planQueuePolicySend(state, chunks, bytes, config) {\n if (state.queuedMessages.length > 0) {\n if (state.queuedBytes + bytes > config.maxQueuedBytes) {\n return {\n newState: recordDrop(state, bytes),\n effects: [{ kind: \"emitDrop\", reason: \"queue-full\", bytes, messageCount: 1 }],\n result: \"dropped\"\n };\n }\n return {\n newState: {\n ...state,\n queuedMessages: [...state.queuedMessages, ...chunks],\n queuedBytes: state.queuedBytes + bytes\n },\n effects: [],\n result: \"queued\"\n };\n }\n const effects = [];\n for (const c of chunks)\n effects.push({ kind: \"rawSend\", data: c });\n return { newState: state, effects, result: \"sent\" };\n}\nfunction planDropPolicySend(state, chunks, bytes, config) {\n if (state.bufferedAmount > config.highWaterBytes) {\n return {\n newState: recordDrop(state, bytes),\n effects: [{ kind: \"emitDrop\", reason: \"backpressure\", bytes, messageCount: 1 }],\n result: \"dropped\"\n };\n }\n const effects = [];\n for (const c of chunks)\n effects.push({ kind: \"rawSend\", data: c });\n return { newState: state, effects, result: \"sent\" };\n}\nfunction planAwaitDrainSend(state, chunks, bytes, config) {\n const shouldQueue = state.bufferedAmount > config.highWaterBytes || state.queuedMessages.length > 0;\n if (shouldQueue) {\n if (state.queuedBytes + bytes > config.maxQueuedBytes) {\n return {\n newState: recordDrop(state, bytes),\n effects: [{ kind: \"emitDrop\", reason: \"queue-full\", bytes, messageCount: 1 }],\n result: \"dropped\"\n };\n }\n return {\n newState: {\n ...state,\n queuedMessages: [...state.queuedMessages, ...chunks],\n queuedBytes: state.queuedBytes + bytes\n },\n effects: [],\n result: \"drain-pending\"\n };\n }\n const effects = [];\n for (const c of chunks)\n effects.push({ kind: \"rawSend\", data: c });\n return { newState: state, effects, result: \"sent\" };\n}\n\nclass GuardedChannel {\n #dc;\n #opts;\n #config;\n #rateLimitLogMs;\n #state;\n #disposed = false;\n #lastLogAt = 0;\n #readyListeners = new Set;\n #closeListeners = new Set;\n #dropListeners = new Set;\n #drainListeners = new Set;\n #dropsSinceLastLog = 0;\n #openHandler;\n #closeHandler;\n #errorHandler;\n #drainHandler;\n #listenersBound = false;\n constructor(dc, opts) {\n this.#dc = dc;\n this.#opts = opts;\n this.#config = resolveConfig(opts);\n this.#rateLimitLogMs = opts.rateLimitLogMs ?? 1000;\n const initial = dc.readyState === \"open\" ? \"open\" : dc.readyState === \"closed\" ? \"closed\" : \"pre-open\";\n this.#state = initialChannelState(initial);\n this.#openHandler = () => this.#dispatch({ kind: \"open\" });\n this.#closeHandler = () => this.#dispatch({ kind: \"close\", reason: \"close\" });\n this.#errorHandler = () => this.#dispatch({ kind: \"close\", reason: \"error\" });\n this.#drainHandler = () => {\n this.#dispatch({\n kind: \"bufferedAmountUpdate\",\n bufferedAmount: this.#dc.bufferedAmount ?? 0\n });\n };\n this.#bindListeners();\n if (initial === \"closed\") {\n queueMicrotask(() => {\n if (this.#disposed)\n return;\n for (const fn of this.#closeListeners) {\n fn({ reason: \"close\", queuedMessageCount: 0 });\n }\n });\n }\n }\n get ready() {\n return this.#state.readyState === \"open\";\n }\n get state() {\n return this.#state;\n }\n send(data) {\n if (this.#disposed)\n return \"dropped\";\n const liveBuffered = this.#dc.bufferedAmount;\n if (typeof liveBuffered === \"number\" && liveBuffered !== this.#state.bufferedAmount) {\n this.#dispatch({ kind: \"bufferedAmountUpdate\", bufferedAmount: liveBuffered });\n }\n const chunks = this.#opts.chunk ? chunkSerializedMessage(data) : [data];\n const result = this.#dispatch({\n kind: \"send\",\n data,\n chunks,\n policy: this.#opts.policy\n });\n return result;\n }\n onReady(fn) {\n this.#readyListeners.add(fn);\n return () => {\n this.#readyListeners.delete(fn);\n };\n }\n onClose(fn) {\n this.#closeListeners.add(fn);\n return () => {\n this.#closeListeners.delete(fn);\n };\n }\n onDrop(fn) {\n this.#dropListeners.add(fn);\n return () => {\n this.#dropListeners.delete(fn);\n };\n }\n onDrain(fn) {\n this.#drainListeners.add(fn);\n return () => {\n this.#drainListeners.delete(fn);\n };\n }\n dispose() {\n if (this.#disposed)\n return;\n this.#disposed = true;\n this.#unbindListeners();\n if (this.#state.readyState !== \"closed\" && this.#state.readyState !== \"errored\") {\n this.#dispatch({ kind: \"close\", reason: \"dispose\" });\n }\n this.#readyListeners.clear();\n this.#closeListeners.clear();\n this.#dropListeners.clear();\n this.#drainListeners.clear();\n }\n #dispatch(input) {\n const { newState, effects, result } = planSend2(this.#state, input, this.#config);\n this.#state = newState;\n for (const effect of effects) {\n this.#runEffect(effect);\n }\n return result;\n }\n #runEffect(effect) {\n switch (effect.kind) {\n case \"rawSend\":\n this.#rawSend(effect.data);\n return;\n case \"emitReady\":\n for (const fn of this.#readyListeners) {\n queueMicrotask(() => fn());\n }\n return;\n case \"emitDrop\":\n this.#emitDrop(effect.reason, effect.bytes, effect.messageCount);\n return;\n case \"emitDrain\":\n for (const fn of this.#drainListeners) {\n queueMicrotask(() => fn());\n }\n return;\n case \"emitClose\": {\n const info = {\n reason: effect.reason,\n queuedMessageCount: effect.queuedMessageCount\n };\n for (const fn of this.#closeListeners) {\n queueMicrotask(() => fn(info));\n }\n return;\n }\n default: {\n const _exhaustive = effect;\n throw new Error(`Unhandled effect: ${JSON.stringify(_exhaustive)}`);\n }\n }\n }\n #rawSend(data) {\n try {\n this.#dc.send(data);\n } catch {\n this.#state = recordDrop(this.#state, byteLen(data));\n this.#emitDrop(\"closed\", byteLen(data), 1);\n }\n }\n #emitDrop(reason, bytes, messageCount) {\n const info = {\n label: this.#opts.label,\n reason,\n bytes,\n droppedTotal: this.#state.droppedTotal,\n droppedMessageCount: messageCount,\n readyState: this.#state.readyState,\n bufferedAmount: this.#dc.bufferedAmount ?? this.#state.bufferedAmount\n };\n for (const fn of this.#dropListeners) {\n queueMicrotask(() => fn(info));\n }\n this.#logDropRateLimited(info);\n }\n #logDropRateLimited(info) {\n this.#dropsSinceLastLog += 1;\n if (!this.#opts.logAdapter)\n return;\n const now = Date.now();\n if (now - this.#lastLogAt < this.#rateLimitLogMs)\n return;\n this.#lastLogAt = now;\n const dropsInWindow = this.#dropsSinceLastLog;\n this.#dropsSinceLastLog = 0;\n this.#opts.logAdapter({\n event: \"channel_send_dropped\",\n label: info.label,\n reason: info.reason,\n bytes: info.bytes,\n droppedTotal: info.droppedTotal,\n droppedMessageCount: info.droppedMessageCount,\n readyState: info.readyState,\n bufferedAmount: info.bufferedAmount,\n dropsInWindow\n });\n }\n #bindListeners() {\n if (this.#listenersBound)\n return;\n this.#listenersBound = true;\n const dc = this.#dc;\n if (typeof dc.addEventListener === \"function\") {\n dc.addEventListener(\"open\", this.#openHandler);\n dc.addEventListener(\"close\", this.#closeHandler);\n dc.addEventListener(\"error\", this.#errorHandler);\n dc.addEventListener(\"bufferedamountlow\", this.#drainHandler);\n }\n }\n #unbindListeners() {\n if (!this.#listenersBound)\n return;\n this.#listenersBound = false;\n const dc = this.#dc;\n if (typeof dc.removeEventListener === \"function\") {\n dc.removeEventListener(\"open\", this.#openHandler);\n dc.removeEventListener(\"close\", this.#closeHandler);\n dc.removeEventListener(\"error\", this.#errorHandler);\n dc.removeEventListener(\"bufferedamountlow\", this.#drainHandler);\n }\n }\n}\n// src/transport/local-direct-frame-protocol.ts\nvar LOCAL_DIRECT_SUBPROTOCOL_PREFIX = \"shipyard-direct.\";\nvar FRAME_HELLO = 0;\nvar FRAME_HELLO_ACK = 1;\nvar FRAME_OPEN = 2;\nvar FRAME_OPEN_ACK = 3;\nvar FRAME_CLOSE = 4;\nvar FRAME_DATA_TEXT = 5;\nvar FRAME_DATA_BINARY = 6;\nvar FRAME_PING = 7;\nvar FRAME_PONG = 8;\nvar FRAME_DRAIN = 9;\nvar FRAME_HEADER_BYTES = 4;\nvar MAX_LABEL_LEN = 16777215;\nvar textEncoder = new TextEncoder;\nvar textDecoder = new TextDecoder(\"utf-8\", { fatal: true });\nfunction encodeHello(payload) {\n return encodeJsonOnly(FRAME_HELLO, payload);\n}\nfunction encodeHelloAck(payload) {\n return encodeJsonOnly(FRAME_HELLO_ACK, payload);\n}\nfunction encodeOpen(label, opts) {\n return encodeLabelWithPayload(FRAME_OPEN, label, textEncoder.encode(JSON.stringify(opts)));\n}\nfunction encodeOpenAck(label) {\n return encodeLabelOnly(FRAME_OPEN_ACK, label);\n}\nfunction encodeClose(label) {\n return encodeLabelOnly(FRAME_CLOSE, label);\n}\nfunction encodeDataText(label, data) {\n return encodeLabelWithPayload(FRAME_DATA_TEXT, label, textEncoder.encode(data));\n}\nfunction encodeDataBinary(label, data) {\n return encodeLabelWithPayload(FRAME_DATA_BINARY, label, data);\n}\nfunction encodePing() {\n return encodeEmpty(FRAME_PING);\n}\nfunction encodePong() {\n return encodeEmpty(FRAME_PONG);\n}\nfunction encodeDrain(label, bytesDrained) {\n const payload = new Uint8Array(4);\n const view = new DataView(payload.buffer);\n view.setUint32(0, bytesDrained, true);\n return encodeLabelWithPayload(FRAME_DRAIN, label, payload);\n}\nfunction parseHeader(bytes) {\n if (bytes.byteLength < FRAME_HEADER_BYTES)\n return \"truncated_header\";\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n const frameType = view.getUint8(0);\n const labelLen = view.getUint8(1) | view.getUint8(2) << 8 | view.getUint8(3) << 16;\n const labelEnd = FRAME_HEADER_BYTES + labelLen;\n if (labelEnd > bytes.byteLength)\n return \"label_length_exceeds_frame\";\n const label = labelLen > 0 ? decodeUtf8(bytes.subarray(FRAME_HEADER_BYTES, labelEnd)) : \"\";\n if (label === DECODE_UTF8_FAILED)\n return \"invalid_utf8\";\n return { frameType, label, payload: bytes.subarray(labelEnd) };\n}\nfunction decodeHello(payload) {\n const parsed = parseJsonPayload(payload, isHelloPayload);\n if (parsed === JSON_FAILED)\n return { ok: false, error: \"invalid_json\" };\n if (parsed === SHAPE_FAILED)\n return { ok: false, error: \"hello_payload_invalid\" };\n return { ok: true, frame: { type: FRAME_HELLO, payload: parsed } };\n}\nfunction decodeHelloAck(payload) {\n const parsed = parseJsonPayload(payload, isHelloAckPayload);\n if (parsed === JSON_FAILED)\n return { ok: false, error: \"invalid_json\" };\n if (parsed === SHAPE_FAILED)\n return { ok: false, error: \"hello_ack_payload_invalid\" };\n return { ok: true, frame: { type: FRAME_HELLO_ACK, payload: parsed } };\n}\nfunction decodeOpen(label, payload) {\n const optsStr = payload.byteLength > 0 ? decodeUtf8(payload) : \"{}\";\n if (optsStr === DECODE_UTF8_FAILED)\n return { ok: false, error: \"invalid_utf8\" };\n try {\n const raw = payload.byteLength > 0 ? JSON.parse(optsStr) : {};\n const opts = { ordered: typeof raw?.ordered === \"boolean\" ? raw.ordered : true };\n return { ok: true, frame: { type: FRAME_OPEN, label, opts } };\n } catch {\n return { ok: false, error: \"invalid_json\" };\n }\n}\nfunction decodeDataText(label, payload) {\n const data = payload.byteLength > 0 ? decodeUtf8(payload) : \"\";\n if (data === DECODE_UTF8_FAILED)\n return { ok: false, error: \"invalid_utf8\" };\n return { ok: true, frame: { type: FRAME_DATA_TEXT, label, data } };\n}\nfunction decodeDrain(label, payload) {\n if (payload.byteLength !== 4)\n return { ok: false, error: \"drain_payload_wrong_size\" };\n const view = new DataView(payload.buffer, payload.byteOffset, payload.byteLength);\n return { ok: true, frame: { type: FRAME_DRAIN, label, bytesDrained: view.getUint32(0, true) } };\n}\nfunction decodeFrame(bytes) {\n const header = parseHeader(bytes);\n if (typeof header === \"string\")\n return { ok: false, error: header };\n const { frameType, label, payload } = header;\n switch (frameType) {\n case FRAME_HELLO:\n return decodeHello(payload);\n case FRAME_HELLO_ACK:\n return decodeHelloAck(payload);\n case FRAME_OPEN:\n return decodeOpen(label, payload);\n case FRAME_OPEN_ACK:\n return { ok: true, frame: { type: FRAME_OPEN_ACK, label } };\n case FRAME_CLOSE:\n return { ok: true, frame: { type: FRAME_CLOSE, label } };\n case FRAME_DATA_TEXT:\n return decodeDataText(label, payload);\n case FRAME_DATA_BINARY:\n return { ok: true, frame: { type: FRAME_DATA_BINARY, label, data: new Uint8Array(payload) } };\n case FRAME_PING:\n return { ok: true, frame: { type: FRAME_PING } };\n case FRAME_PONG:\n return { ok: true, frame: { type: FRAME_PONG } };\n case FRAME_DRAIN:\n return decodeDrain(label, payload);\n default:\n return { ok: false, error: \"invalid_frame_type\" };\n }\n}\nfunction encodeEmpty(frameType) {\n const out = new Uint8Array(FRAME_HEADER_BYTES);\n out[0] = frameType;\n return out;\n}\nfunction encodeLabelOnly(frameType, label) {\n const labelBytes = textEncoder.encode(label);\n assertLabelLen(labelBytes.byteLength);\n const out = new Uint8Array(FRAME_HEADER_BYTES + labelBytes.byteLength);\n writeHeader(out, frameType, labelBytes.byteLength);\n out.set(labelBytes, FRAME_HEADER_BYTES);\n return out;\n}\nfunction encodeLabelWithPayload(frameType, label, payload) {\n const labelBytes = textEncoder.encode(label);\n assertLabelLen(labelBytes.byteLength);\n const out = new Uint8Array(FRAME_HEADER_BYTES + labelBytes.byteLength + payload.byteLength);\n writeHeader(out, frameType, labelBytes.byteLength);\n out.set(labelBytes, FRAME_HEADER_BYTES);\n out.set(payload, FRAME_HEADER_BYTES + labelBytes.byteLength);\n return out;\n}\nfunction encodeJsonOnly(frameType, payload) {\n const payloadBytes = textEncoder.encode(JSON.stringify(payload));\n const out = new Uint8Array(FRAME_HEADER_BYTES + payloadBytes.byteLength);\n writeHeader(out, frameType, 0);\n out.set(payloadBytes, FRAME_HEADER_BYTES);\n return out;\n}\nfunction writeHeader(out, frameType, labelLen) {\n out[0] = frameType;\n out[1] = labelLen & 255;\n out[2] = labelLen >> 8 & 255;\n out[3] = labelLen >> 16 & 255;\n}\nfunction assertLabelLen(len) {\n if (len > MAX_LABEL_LEN) {\n throw new RangeError(`label length ${len} exceeds max ${MAX_LABEL_LEN}`);\n }\n}\nvar DECODE_UTF8_FAILED = Symbol(\"utf8-failed\");\nfunction decodeUtf8(bytes) {\n try {\n return textDecoder.decode(bytes);\n } catch {\n return DECODE_UTF8_FAILED;\n }\n}\nvar JSON_FAILED = Symbol(\"json-failed\");\nvar SHAPE_FAILED = Symbol(\"shape-failed\");\nfunction parseJsonPayload(payload, check) {\n const text = decodeUtf8(payload);\n if (text === DECODE_UTF8_FAILED)\n return JSON_FAILED;\n let parsed;\n try {\n parsed = JSON.parse(text);\n } catch {\n return JSON_FAILED;\n }\n if (!check(parsed))\n return SHAPE_FAILED;\n return parsed;\n}\nfunction isHelloPayload(value) {\n if (typeof value !== \"object\" || value === null)\n return false;\n const v = value;\n return typeof v.protocolVersion === \"number\" && typeof v.token === \"string\" && typeof v.browserMachineId === \"string\";\n}\nfunction isHelloAckPayload(value) {\n if (typeof value !== \"object\" || value === null)\n return false;\n const v = value;\n if (typeof v.protocolVersion !== \"number\")\n return false;\n if (typeof v.accepted !== \"boolean\")\n return false;\n if (v.reason !== undefined && typeof v.reason !== \"string\")\n return false;\n return true;\n}\nexport {\n vizFileExtension,\n validateElementData,\n ttlToMilliseconds,\n toTaskIndexEntry,\n toTaskDetailFields,\n toMetaRecord,\n titleToSlug,\n tiptapElementUtilSchema,\n taskStatuses,\n taskModes,\n svgElementUtilSchema,\n surface,\n structuredTaskToTodoItem,\n structuredTaskToCCFile,\n structuredTaskStatuses,\n strokeGroupElementUtilSchema,\n stickyElementUtilSchema,\n serializePlanToMarkdown,\n scheduleRunStatuses,\n safeAttachDataChannel,\n resolveTaskIdFromResult,\n resolveConfig as resolveGuardedChannelConfig,\n resolveAnnotationAlias,\n removePresence,\n reconstructMaterializedView,\n previewElementUtilSchema,\n planSend2 as planSend,\n planEditorSerializer,\n parseThreadUri,\n parseThreadMessagesLabel,\n parseThreadChannelId,\n parseTerminalLabel,\n parseTaskMessagesLabel,\n parseTaskChannelId,\n parseLSPLabel,\n parseFileUri,\n parseFileIOLabel,\n parseDocumentId,\n parseBrowserPreviewSubdomainLabel,\n parseBrowserPreviewLabel,\n parseAssetUri,\n nextSendState as nextAtLeastOnceSendState,\n nextReceiveState as nextAtLeastOnceReceiveState,\n migrateUserSettingsStore,\n migrateTemplateStore,\n migrateTaskStore,\n migrateScheduleStore,\n migrateProjectsStore,\n migratePreviewAnnotationStore,\n migratePlanCommentStore,\n migrateDiffCommentStore,\n migrateCredentialsVaultStore,\n migrateAnnotationStore,\n mermaidElementUtilSchema,\n markAckSent as markAtLeastOnceAckSent,\n isThreadUri,\n isResourceResolutionMeta,\n isRenderedTool,\n isReasoningEffort,\n isPermissionMode,\n isImageMimeType,\n isFileUri,\n isEpochValid,\n isDiffEmpty,\n isDaemonToBrowserMessage,\n isBuiltInTemplateId,\n isBrowserToDaemonMessage,\n isAssetUri,\n isAnnotationTarget,\n initialChannelState,\n initialSendState as initialAtLeastOnceSendState,\n initialReceiveState as initialAtLeastOnceReceiveState,\n imageElementUtilSchema,\n htmlElementUtilSchema,\n getTypingPeers,\n getTaskViewers,\n getSurfaceViewers,\n getSurfacePrefixViewers,\n getElementUtilSchema,\n geoElementUtilSchema,\n generateTodoId,\n frameElementUtilSchema,\n extractTodoProgressFromContent,\n extractTodoProgress,\n extractTodoItemsFromRecord,\n extractTodoItems,\n extractStructuredTaskEvents,\n extractPlanMarkdown,\n extractPlanFilePath,\n erTableElementUtilSchema,\n encodeStrokes,\n encodePong,\n encodePing,\n encodeOpenAck,\n encodeOpen,\n encodeHelloAck,\n encodeHello,\n encodeDrain,\n encodeDataText,\n encodeDataBinary,\n encodeClose,\n elementUtilSchemas,\n decodeStrokes,\n decodeFrame,\n decideResend as decideAtLeastOnceResend,\n decideAck as decideAtLeastOnceAck,\n createResourceDiff,\n createIdempotencyCache,\n createAwarenessTracker,\n countLines,\n controlChannelStreamId,\n controlChannelOutboxChannel,\n connectorElementUtilSchema,\n collabPeerSourceId,\n codeElementUtilSchema,\n chunkSerializedMessage,\n ccFileToStructuredTask,\n buildThreadUri,\n buildThreadMessagesLabel,\n buildThreadChannelId,\n buildTerminalLabel,\n buildTaskMessagesLabel,\n buildTaskChannelId,\n buildPlanDocId,\n buildPendingAgentParticipantId,\n buildLSPLabel,\n buildHumanParticipantId,\n buildFileUri,\n buildFileIOLabel,\n buildCanvasDocId,\n buildBrowserPreviewSubdomainLabel,\n buildBrowserPreviewLabel,\n buildAssetUri,\n buildAgentParticipantId,\n applyResourceDiff,\n applyPresenceUpdate,\n WorktreeStateSchema,\n WorktreeScriptSchema,\n WorktreeCreationPlanSchema,\n WorkflowRunSchema,\n WORKTREE_PHASES,\n WORKFLOW_RUN_STATUSES,\n WORKFLOW_RUN_CONCLUSIONS,\n VizTypeSchema,\n VibeSchema,\n VSCodeThemeSchema,\n VSCodeThemeEntrySchema,\n VIZ_TYPES,\n VISUALIZE_TOOL_QUALIFIED,\n VISUALIZE_TOOL,\n VISUALIZE_SERVER_NAME,\n VISUALIZE_READ_ME_TOOL,\n VISUALIZE_READ_ME_QUALIFIED,\n UserSettingsStoreSchema,\n UserSettingsRecordSchema,\n UnpublishOutputSchema,\n UnpublishInputSchema,\n USER_SETTINGS_STORE_VERSION,\n UNPUBLISH_TOOL_QUALIFIED,\n UNPUBLISH_TOOL,\n ToolUseBlockSchema,\n ToolRiskLevelSchema,\n ToolResultBlockSchema,\n TokenColorSchema,\n TokenCategoryItemSchema,\n TiptapElementDataSchema,\n ThreadStatusSchema,\n ThreadMetadataSchema,\n ThreadKindSchema,\n ThinkingBlockSchema,\n ThemeTypeSchema,\n ThemeSourceSchema,\n ThemeConfigSchema,\n TextResourceContentsSchema,\n TextBlockSchema,\n TerminalControlMessageSchema,\n TemplateStoreSchema,\n TemplateItemSchema,\n TaskTemplateRecordSchema,\n TaskStoreSchema,\n TaskRecordSchema,\n TaskOverlaySchema,\n TaskFeedbackChangeSchema,\n TaskFeedbackBlockSchema,\n TaskErrorSubKindSchema,\n TaskErrorKindSchema,\n TaskColorSchema,\n TaskCapabilitiesSchema,\n THREAD_LABEL_INFIX,\n THEME_SOURCES,\n TERMINAL_IO_PREFIX,\n TERMINAL_CONTROL_PREFIX,\n TEMPLATE_STORE_VERSION,\n TASK_STORE_VERSION,\n TASK_MESSAGES_PREFIX,\n TASK_INDEX_HEAVY_FIELDS,\n TASK_COLORS,\n SvgElementDataSchema,\n SubagentUsageSchema,\n StructuredTaskSchema,\n StructuredTaskCapabilitiesSchema,\n StrokeGroupElementDataSchema,\n StreamDeltaMessageSchema,\n StreamDeltaEventSchema,\n StickyElementDataSchema,\n StackNodeSchema,\n StackNodeRoleSchema,\n StackLinkSchema,\n StackGraphSchema,\n ScheduleStoreSchema,\n ScheduleRecordSchema,\n SUGGEST_PROMOTE_TOOL,\n SUGGEST_PROMOTE_QUALIFIED,\n SHIPYARD_LIGHT_VSCODE_THEME,\n SHIPYARD_DARK_VSCODE_THEME,\n SET_TASK_CAPABILITIES_TOOL,\n SET_TASK_CAPABILITIES_QUALIFIED,\n SET_PREVIEW_TARGET_TOOL,\n SET_PREVIEW_TARGET_QUALIFIED,\n SCHEDULE_STORE_VERSION,\n RewindModeSchema,\n ReviewDecisionBlockSchema,\n ReviewCommentBlockSchema,\n ResourceUnsubscribeSchema,\n ResourceSubscribeSchema,\n ResourceReadResponseStrictSchema,\n ResourceReadResponseSchema,\n ResourceReadRequestSchema,\n ResourceLinkBlockSchema,\n ResourceContentsSchema,\n ResourceChangedStrictSchema,\n ResourceChangedSchema,\n RequestPublishShape,\n ReasoningEffortSchema,\n RateLimitWindowSchema,\n RateLimitInfoSchema,\n RENDERED_TOOL_NAMES,\n REASONING_EFFORTS,\n PublishedPreviewKindSchema,\n PublishedArtifactsStateShape,\n PublishedArtifactRecordShape,\n PublishTtlSchema,\n PublishTargetSchema,\n PublishResultShape,\n PublishProgressShape,\n PublishPhaseSchema,\n PublishOutputSchema,\n PublishInputSchema,\n ProjectsStoreSchema,\n ProjectSchema,\n PreviewElementsStateShape,\n PreviewElementStateShape,\n PreviewElementDataSchema,\n PreviewAnnotationZodSchema,\n PreviewAnnotationStoreSchema,\n PreviewAnnotationFeedbackBlockSchema,\n PreviewAnnotationCommentSchema,\n PresenceStatusSchema,\n PlanVersionZodSchema,\n PlanRepository,\n PlanPermissionModeSchema,\n PlanDocumentSchema,\n PlanDetectionSchema,\n PlanDecisionSchema,\n PlanCommentZodSchema,\n PlanCommentStoreSchema,\n PersistedVisualizationRegistrySchema,\n PersistedTurnStatsSchema,\n PersistedTokenCountSchema,\n PermissionRequestPayloadSchema,\n PermissionModeSchema,\n PermissionDecisionSchema,\n PeerPresenceStateSchema,\n PeerPresenceSlotSchema,\n ParticipantSchema,\n ParticipantKindSchema,\n PUBLISH_TTL_CHOICES,\n PUBLISH_TOOL_QUALIFIED,\n PUBLISH_TOOL,\n PUBLISH_RATE_LIMIT_PER_HOUR,\n PUBLISH_QUOTA_TOTAL_BYTES,\n PUBLISHED_PREVIEW_KINDS,\n PR_STATES,\n PR_REVIEW_STATES,\n PRStatePayloadSchema,\n PRReviewerSchema,\n PROJECTS_STORE_VERSION,\n PREVIEW_ANNOTATION_STORE_VERSION,\n PRESENT_TOOL_QUALIFIED,\n PRESENT_TOOL,\n PRDataSchema,\n PRCommentSchema,\n PRActionSchema,\n POST_TO_THREAD_TOOL,\n POST_TO_THREAD_QUALIFIED,\n PLUGIN_READ_ME_TOOL,\n PLUGIN_READ_ME_QUALIFIED,\n PLAN_EPOCH,\n PLAN_COMMENT_STORE_VERSION,\n PERSONAL_PEER_SOURCE_ID,\n PERMISSION_MODES,\n PENDING_AGENT_PARTICIPANT_ID,\n OBSOLETE_PREFIXES,\n NotificationTierSchema,\n NotificationSchema,\n NotificationPayloadSchema,\n NotificationKindSchema,\n ModelProviderSchema,\n ModeSchema,\n MessageSchema,\n MermaidElementDataSchema,\n McpServerTypeSchema,\n ManagedVisualizationSchema,\n MAX_SINGLE_FILE_BYTES,\n MAX_BUILD_TOTAL_BYTES,\n MAX_BUILD_PER_FILE_BYTES,\n MAX_BUILD_FILE_COUNT,\n LinearViewPreferencesSchema,\n LSP_PREFIX,\n LORO_SYNC_LABEL,\n LOCAL_DIRECT_SUBPROTOCOL_PREFIX,\n KNOWN_FRAMEWORKS,\n InMemoryOutbox,\n ImageElementDataSchema,\n IMAGE_MIME_SET,\n HtmlElementDataSchema,\n HARNESS_SERVER_NAME,\n GuardedChannel,\n GeoElementDataSchema,\n FrameElementDataSchema,\n FRAME_PONG,\n FRAME_PING,\n FRAME_OPEN_ACK,\n FRAME_OPEN,\n FRAME_HELLO_ACK,\n FRAME_HELLO,\n FRAME_DRAIN,\n FRAME_DATA_TEXT,\n FRAME_DATA_BINARY,\n FRAME_CLOSE,\n FILE_IO_PREFIX,\n ErTableElementDataSchema,\n EnvironmentDeploymentSchema,\n EnhancePromptStatusSchema,\n EmbeddedResourceBlockSchema,\n DiffReviewFeedbackBlockSchema,\n DiffReviewCommentSchema,\n DiffCommentZodSchema,\n DiffCommentStoreSchema,\n DetectedPortSchema,\n DaemonToFileIOMessageSchema,\n DaemonToBrowserPreviewMessageSchema,\n DaemonToBrowserMessageSchema,\n DaemonToBrowserControlMessageSchema,\n DaemonSettingsSchema,\n DOCUMENT_PREFIXES,\n DIFF_COMMENT_STORE_VERSION,\n DEPLOYMENT_STATES,\n DEFAULT_USER_SETTINGS,\n DEFAULT_TASK_OVERLAY,\n DAEMON_CONTROL_LABEL,\n CrossThreadOriginSchema,\n CredentialsVaultStoreSchema,\n CredentialRecordSchema,\n CrdtCompactor,\n ContentBlockSchema,\n ConnectorElementDataSchema,\n ComposerSettingsSchema,\n CompactionStatsSchema,\n CompactionBoundaryBlockSchema,\n CollabRoleSchema,\n CodeElementDataSchema,\n ChunkReassembler,\n CheckpointFileStatusSchema,\n CheckpointFileEntrySchema,\n ChannelSchema,\n CapabilitiesPayloadSchema,\n CanvasSubElementAnnotationSchema,\n CanvasRepository,\n CanvasPresenceShape,\n CanvasElementDataShape,\n CanvasElementAnnotationSchema,\n CanvasDocumentSchema,\n CanvasActiveDragShape,\n CREDENTIAL_STORE_VERSION,\n CONVERSATION_DISALLOWED_TOOLS,\n CONNECTOR_STROKE_STYLES,\n CONNECTOR_MAGNETS,\n CONNECTOR_LINE_TYPES,\n CONNECTOR_CAPS,\n COMMENT_SERVER_NAME,\n COMMENT_READ_THREAD_TOOL,\n COMMENT_READ_THREAD_QUALIFIED,\n COMMENT_LIST_TOOL,\n COMMENT_LIST_QUALIFIED,\n COMMENT_ADD_TOOL,\n COMMENT_ADD_QUALIFIED,\n CI_CHECK_STATUSES,\n CICheckSchema,\n CANVAS_EPOCH,\n CANVAS_EPHEMERAL_DECLARATIONS,\n CANVAS_ELEMENT_TYPES,\n BrowserToFileIOMessageSchema,\n BrowserToDaemonMessageSchema,\n BrowserToDaemonControlMessageSchema,\n BrowserToBrowserPreviewMessageSchema,\n BrowserPreviewUrlRequestSchema,\n BrowserPreviewResponseHeadSchema,\n BrowserPreviewResponseChunkSchema,\n BrowserPreviewRequestSchema,\n BrowserPreviewErrorSchema,\n BrowserMetricsSampleSchema,\n BlobResourceContentsSchema,\n BaseCommentZodSchema,\n BackgroundAgentStatusSchema,\n BUILT_IN_TEMPLATE_ID_PREFIX,\n BUILT_IN_TEMPLATE_IDS,\n BUILT_IN_TEMPLATES,\n BUILD_PLUGIN_TOOL_QUALIFIED,\n BUILD_PLUGIN_TOOL,\n BROWSER_PREVIEW_URL_LABEL,\n BROWSER_PREVIEW_SUBDOMAIN_PREFIX,\n BROWSER_PREVIEW_PREFIX,\n AtLeastOnceShell,\n AtLeastOnceMessageSchema,\n AtLeastOnceHighWaterMarkSchema,\n AtLeastOnceEnvelopeSchema,\n AtLeastOnceAckSchema,\n AssetUploadHeadSchema,\n AssetUploadErrorSchema,\n AssetUploadAckSchema,\n AssetTransferMessageSchema,\n AssetDownloadRequestSchema,\n AssetDownloadHeadSchema,\n AssetDownloadErrorSchema,\n AssetDownloadDoneSchema,\n AssetChunkPayloadSchema,\n AnthropicLoginStatusSchema,\n AnthropicAuthMethodSchema,\n AnnotationsSchema,\n AnnotationZodSchema,\n AnnotationStoreSchema,\n AnnotationFeedbackBlockSchema,\n AckStateSchema,\n AWARENESS_STREAM_ID,\n DEFAULT_ACK_INTERVAL_MS as AT_LEAST_ONCE_DEFAULT_ACK_INTERVAL_MS,\n ASSET_TRANSFER_LABEL,\n ASSET_CHUNK_SIZE,\n ANTHROPIC_AUTH_METHODS,\n ANNOTATION_TYPE_TO_ALIAS,\n ANNOTATION_TYPES,\n ANNOTATION_STORE_VERSION,\n ANNOTATION_ALIAS_TO_TYPE,\n ANNOTATION_ALIASES,\n AGENT_SYSTEM_CLAUDE_CODE\n};\n","// ::- Persistent data structure representing an ordered mapping from\n// strings to values, with some convenient update methods.\nfunction OrderedMap(content) {\n this.content = content;\n}\n\nOrderedMap.prototype = {\n constructor: OrderedMap,\n\n find: function(key) {\n for (var i = 0; i < this.content.length; i += 2)\n if (this.content[i] === key) return i\n return -1\n },\n\n // :: (string) → ?any\n // Retrieve the value stored under `key`, or return undefined when\n // no such key exists.\n get: function(key) {\n var found = this.find(key);\n return found == -1 ? undefined : this.content[found + 1]\n },\n\n // :: (string, any, ?string) → OrderedMap\n // Create a new map by replacing the value of `key` with a new\n // value, or adding a binding to the end of the map. If `newKey` is\n // given, the key of the binding will be replaced with that key.\n update: function(key, value, newKey) {\n var self = newKey && newKey != key ? this.remove(newKey) : this;\n var found = self.find(key), content = self.content.slice();\n if (found == -1) {\n content.push(newKey || key, value);\n } else {\n content[found + 1] = value;\n if (newKey) content[found] = newKey;\n }\n return new OrderedMap(content)\n },\n\n // :: (string) → OrderedMap\n // Return a map with the given key removed, if it existed.\n remove: function(key) {\n var found = this.find(key);\n if (found == -1) return this\n var content = this.content.slice();\n content.splice(found, 2);\n return new OrderedMap(content)\n },\n\n // :: (string, any) → OrderedMap\n // Add a new key to the start of the map.\n addToStart: function(key, value) {\n return new OrderedMap([key, value].concat(this.remove(key).content))\n },\n\n // :: (string, any) → OrderedMap\n // Add a new key to the end of the map.\n addToEnd: function(key, value) {\n var content = this.remove(key).content.slice();\n content.push(key, value);\n return new OrderedMap(content)\n },\n\n // :: (string, string, any) → OrderedMap\n // Add a key after the given key. If `place` is not found, the new\n // key is added to the end.\n addBefore: function(place, key, value) {\n var without = this.remove(key), content = without.content.slice();\n var found = without.find(place);\n content.splice(found == -1 ? content.length : found, 0, key, value);\n return new OrderedMap(content)\n },\n\n // :: ((key: string, value: any))\n // Call the given function for each key/value pair in the map, in\n // order.\n forEach: function(f) {\n for (var i = 0; i < this.content.length; i += 2)\n f(this.content[i], this.content[i + 1]);\n },\n\n // :: (union<Object, OrderedMap>) → OrderedMap\n // Create a new map by prepending the keys in this map that don't\n // appear in `map` before the keys in `map`.\n prepend: function(map) {\n map = OrderedMap.from(map);\n if (!map.size) return this\n return new OrderedMap(map.content.concat(this.subtract(map).content))\n },\n\n // :: (union<Object, OrderedMap>) → OrderedMap\n // Create a new map by appending the keys in this map that don't\n // appear in `map` after the keys in `map`.\n append: function(map) {\n map = OrderedMap.from(map);\n if (!map.size) return this\n return new OrderedMap(this.subtract(map).content.concat(map.content))\n },\n\n // :: (union<Object, OrderedMap>) → OrderedMap\n // Create a map containing all the keys in this map that don't\n // appear in `map`.\n subtract: function(map) {\n var result = this;\n map = OrderedMap.from(map);\n for (var i = 0; i < map.content.length; i += 2)\n result = result.remove(map.content[i]);\n return result\n },\n\n // :: () → Object\n // Turn ordered map into a plain object.\n toObject: function() {\n var result = {};\n this.forEach(function(key, value) { result[key] = value; });\n return result\n },\n\n // :: number\n // The amount of keys in this map.\n get size() {\n return this.content.length >> 1\n }\n};\n\n// :: (?union<Object, OrderedMap>) → OrderedMap\n// Return a map with the given content. If null, create an empty\n// map. If given an ordered map, return that map itself. If given an\n// object, create a map from the object's properties.\nOrderedMap.from = function(value) {\n if (value instanceof OrderedMap) return value\n var content = [];\n if (value) for (var prop in value) content.push(prop, value[prop]);\n return new OrderedMap(content)\n};\n\nexport default OrderedMap;\n","import OrderedMap from 'orderedmap';\n\nfunction findDiffStart(a, b, pos) {\n for (let i = 0;; i++) {\n if (i == a.childCount || i == b.childCount)\n return a.childCount == b.childCount ? null : pos;\n let childA = a.child(i), childB = b.child(i);\n if (childA == childB) {\n pos += childA.nodeSize;\n continue;\n }\n if (!childA.sameMarkup(childB))\n return pos;\n if (childA.isText && childA.text != childB.text) {\n for (let j = 0; childA.text[j] == childB.text[j]; j++)\n pos++;\n return pos;\n }\n if (childA.content.size || childB.content.size) {\n let inner = findDiffStart(childA.content, childB.content, pos + 1);\n if (inner != null)\n return inner;\n }\n pos += childA.nodeSize;\n }\n}\nfunction findDiffEnd(a, b, posA, posB) {\n for (let iA = a.childCount, iB = b.childCount;;) {\n if (iA == 0 || iB == 0)\n return iA == iB ? null : { a: posA, b: posB };\n let childA = a.child(--iA), childB = b.child(--iB), size = childA.nodeSize;\n if (childA == childB) {\n posA -= size;\n posB -= size;\n continue;\n }\n if (!childA.sameMarkup(childB))\n return { a: posA, b: posB };\n if (childA.isText && childA.text != childB.text) {\n let same = 0, minSize = Math.min(childA.text.length, childB.text.length);\n while (same < minSize && childA.text[childA.text.length - same - 1] == childB.text[childB.text.length - same - 1]) {\n same++;\n posA--;\n posB--;\n }\n return { a: posA, b: posB };\n }\n if (childA.content.size || childB.content.size) {\n let inner = findDiffEnd(childA.content, childB.content, posA - 1, posB - 1);\n if (inner)\n return inner;\n }\n posA -= size;\n posB -= size;\n }\n}\n\n/**\nA fragment represents a node's collection of child nodes.\n\nLike nodes, fragments are persistent data structures, and you\nshould not mutate them or their content. Rather, you create new\ninstances whenever needed. The API tries to make this easy.\n*/\nclass Fragment {\n /**\n @internal\n */\n constructor(\n /**\n The child nodes in this fragment.\n */\n content, size) {\n this.content = content;\n this.size = size || 0;\n if (size == null)\n for (let i = 0; i < content.length; i++)\n this.size += content[i].nodeSize;\n }\n /**\n Invoke a callback for all descendant nodes between the given two\n positions (relative to start of this fragment). Doesn't descend\n into a node when the callback returns `false`.\n */\n nodesBetween(from, to, f, nodeStart = 0, parent) {\n for (let i = 0, pos = 0; pos < to; i++) {\n let child = this.content[i], end = pos + child.nodeSize;\n if (end > from && f(child, nodeStart + pos, parent || null, i) !== false && child.content.size) {\n let start = pos + 1;\n child.nodesBetween(Math.max(0, from - start), Math.min(child.content.size, to - start), f, nodeStart + start);\n }\n pos = end;\n }\n }\n /**\n Call the given callback for every descendant node. `pos` will be\n relative to the start of the fragment. The callback may return\n `false` to prevent traversal of a given node's children.\n */\n descendants(f) {\n this.nodesBetween(0, this.size, f);\n }\n /**\n Extract the text between `from` and `to`. See the same method on\n [`Node`](https://prosemirror.net/docs/ref/#model.Node.textBetween).\n */\n textBetween(from, to, blockSeparator, leafText) {\n let text = \"\", first = true;\n this.nodesBetween(from, to, (node, pos) => {\n let nodeText = node.isText ? node.text.slice(Math.max(from, pos) - pos, to - pos)\n : !node.isLeaf ? \"\"\n : leafText ? (typeof leafText === \"function\" ? leafText(node) : leafText)\n : node.type.spec.leafText ? node.type.spec.leafText(node)\n : \"\";\n if (node.isBlock && (node.isLeaf && nodeText || node.isTextblock) && blockSeparator) {\n if (first)\n first = false;\n else\n text += blockSeparator;\n }\n text += nodeText;\n }, 0);\n return text;\n }\n /**\n Create a new fragment containing the combined content of this\n fragment and the other.\n */\n append(other) {\n if (!other.size)\n return this;\n if (!this.size)\n return other;\n let last = this.lastChild, first = other.firstChild, content = this.content.slice(), i = 0;\n if (last.isText && last.sameMarkup(first)) {\n content[content.length - 1] = last.withText(last.text + first.text);\n i = 1;\n }\n for (; i < other.content.length; i++)\n content.push(other.content[i]);\n return new Fragment(content, this.size + other.size);\n }\n /**\n Cut out the sub-fragment between the two given positions.\n */\n cut(from, to = this.size) {\n if (from == 0 && to == this.size)\n return this;\n let result = [], size = 0;\n if (to > from)\n for (let i = 0, pos = 0; pos < to; i++) {\n let child = this.content[i], end = pos + child.nodeSize;\n if (end > from) {\n if (pos < from || end > to) {\n if (child.isText)\n child = child.cut(Math.max(0, from - pos), Math.min(child.text.length, to - pos));\n else\n child = child.cut(Math.max(0, from - pos - 1), Math.min(child.content.size, to - pos - 1));\n }\n result.push(child);\n size += child.nodeSize;\n }\n pos = end;\n }\n return new Fragment(result, size);\n }\n /**\n @internal\n */\n cutByIndex(from, to) {\n if (from == to)\n return Fragment.empty;\n if (from == 0 && to == this.content.length)\n return this;\n return new Fragment(this.content.slice(from, to));\n }\n /**\n Create a new fragment in which the node at the given index is\n replaced by the given node.\n */\n replaceChild(index, node) {\n let current = this.content[index];\n if (current == node)\n return this;\n let copy = this.content.slice();\n let size = this.size + node.nodeSize - current.nodeSize;\n copy[index] = node;\n return new Fragment(copy, size);\n }\n /**\n Create a new fragment by prepending the given node to this\n fragment.\n */\n addToStart(node) {\n return new Fragment([node].concat(this.content), this.size + node.nodeSize);\n }\n /**\n Create a new fragment by appending the given node to this\n fragment.\n */\n addToEnd(node) {\n return new Fragment(this.content.concat(node), this.size + node.nodeSize);\n }\n /**\n Compare this fragment to another one.\n */\n eq(other) {\n if (this.content.length != other.content.length)\n return false;\n for (let i = 0; i < this.content.length; i++)\n if (!this.content[i].eq(other.content[i]))\n return false;\n return true;\n }\n /**\n The first child of the fragment, or `null` if it is empty.\n */\n get firstChild() { return this.content.length ? this.content[0] : null; }\n /**\n The last child of the fragment, or `null` if it is empty.\n */\n get lastChild() { return this.content.length ? this.content[this.content.length - 1] : null; }\n /**\n The number of child nodes in this fragment.\n */\n get childCount() { return this.content.length; }\n /**\n Get the child node at the given index. Raise an error when the\n index is out of range.\n */\n child(index) {\n let found = this.content[index];\n if (!found)\n throw new RangeError(\"Index \" + index + \" out of range for \" + this);\n return found;\n }\n /**\n Get the child node at the given index, if it exists.\n */\n maybeChild(index) {\n return this.content[index] || null;\n }\n /**\n Call `f` for every child node, passing the node, its offset\n into this parent node, and its index.\n */\n forEach(f) {\n for (let i = 0, p = 0; i < this.content.length; i++) {\n let child = this.content[i];\n f(child, p, i);\n p += child.nodeSize;\n }\n }\n /**\n Find the first position at which this fragment and another\n fragment differ, or `null` if they are the same.\n */\n findDiffStart(other, pos = 0) {\n return findDiffStart(this, other, pos);\n }\n /**\n Find the first position, searching from the end, at which this\n fragment and the given fragment differ, or `null` if they are\n the same. Since this position will not be the same in both\n nodes, an object with two separate positions is returned.\n */\n findDiffEnd(other, pos = this.size, otherPos = other.size) {\n return findDiffEnd(this, other, pos, otherPos);\n }\n /**\n Find the index and inner offset corresponding to a given relative\n position in this fragment. The result object will be reused\n (overwritten) the next time the function is called. @internal\n */\n findIndex(pos) {\n if (pos == 0)\n return retIndex(0, pos);\n if (pos == this.size)\n return retIndex(this.content.length, pos);\n if (pos > this.size || pos < 0)\n throw new RangeError(`Position ${pos} outside of fragment (${this})`);\n for (let i = 0, curPos = 0;; i++) {\n let cur = this.child(i), end = curPos + cur.nodeSize;\n if (end >= pos) {\n if (end == pos)\n return retIndex(i + 1, end);\n return retIndex(i, curPos);\n }\n curPos = end;\n }\n }\n /**\n Return a debugging string that describes this fragment.\n */\n toString() { return \"<\" + this.toStringInner() + \">\"; }\n /**\n @internal\n */\n toStringInner() { return this.content.join(\", \"); }\n /**\n Create a JSON-serializeable representation of this fragment.\n */\n toJSON() {\n return this.content.length ? this.content.map(n => n.toJSON()) : null;\n }\n /**\n Deserialize a fragment from its JSON representation.\n */\n static fromJSON(schema, value) {\n if (!value)\n return Fragment.empty;\n if (!Array.isArray(value))\n throw new RangeError(\"Invalid input for Fragment.fromJSON\");\n return new Fragment(value.map(schema.nodeFromJSON));\n }\n /**\n Build a fragment from an array of nodes. Ensures that adjacent\n text nodes with the same marks are joined together.\n */\n static fromArray(array) {\n if (!array.length)\n return Fragment.empty;\n let joined, size = 0;\n for (let i = 0; i < array.length; i++) {\n let node = array[i];\n size += node.nodeSize;\n if (i && node.isText && array[i - 1].sameMarkup(node)) {\n if (!joined)\n joined = array.slice(0, i);\n joined[joined.length - 1] = node\n .withText(joined[joined.length - 1].text + node.text);\n }\n else if (joined) {\n joined.push(node);\n }\n }\n return new Fragment(joined || array, size);\n }\n /**\n Create a fragment from something that can be interpreted as a\n set of nodes. For `null`, it returns the empty fragment. For a\n fragment, the fragment itself. For a node or array of nodes, a\n fragment containing those nodes.\n */\n static from(nodes) {\n if (!nodes)\n return Fragment.empty;\n if (nodes instanceof Fragment)\n return nodes;\n if (Array.isArray(nodes))\n return this.fromArray(nodes);\n if (nodes.attrs)\n return new Fragment([nodes], nodes.nodeSize);\n throw new RangeError(\"Can not convert \" + nodes + \" to a Fragment\" +\n (nodes.nodesBetween ? \" (looks like multiple versions of prosemirror-model were loaded)\" : \"\"));\n }\n}\n/**\nAn empty fragment. Intended to be reused whenever a node doesn't\ncontain anything (rather than allocating a new empty fragment for\neach leaf node).\n*/\nFragment.empty = new Fragment([], 0);\nconst found = { index: 0, offset: 0 };\nfunction retIndex(index, offset) {\n found.index = index;\n found.offset = offset;\n return found;\n}\n\nfunction compareDeep(a, b) {\n if (a === b)\n return true;\n if (!(a && typeof a == \"object\") ||\n !(b && typeof b == \"object\"))\n return false;\n let array = Array.isArray(a);\n if (Array.isArray(b) != array)\n return false;\n if (array) {\n if (a.length != b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (!compareDeep(a[i], b[i]))\n return false;\n }\n else {\n for (let p in a)\n if (!(p in b) || !compareDeep(a[p], b[p]))\n return false;\n for (let p in b)\n if (!(p in a))\n return false;\n }\n return true;\n}\n\n/**\nA mark is a piece of information that can be attached to a node,\nsuch as it being emphasized, in code font, or a link. It has a\ntype and optionally a set of attributes that provide further\ninformation (such as the target of the link). Marks are created\nthrough a `Schema`, which controls which types exist and which\nattributes they have.\n*/\nclass Mark {\n /**\n @internal\n */\n constructor(\n /**\n The type of this mark.\n */\n type, \n /**\n The attributes associated with this mark.\n */\n attrs) {\n this.type = type;\n this.attrs = attrs;\n }\n /**\n Given a set of marks, create a new set which contains this one as\n well, in the right position. If this mark is already in the set,\n the set itself is returned. If any marks that are set to be\n [exclusive](https://prosemirror.net/docs/ref/#model.MarkSpec.excludes) with this mark are present,\n those are replaced by this one.\n */\n addToSet(set) {\n let copy, placed = false;\n for (let i = 0; i < set.length; i++) {\n let other = set[i];\n if (this.eq(other))\n return set;\n if (this.type.excludes(other.type)) {\n if (!copy)\n copy = set.slice(0, i);\n }\n else if (other.type.excludes(this.type)) {\n return set;\n }\n else {\n if (!placed && other.type.rank > this.type.rank) {\n if (!copy)\n copy = set.slice(0, i);\n copy.push(this);\n placed = true;\n }\n if (copy)\n copy.push(other);\n }\n }\n if (!copy)\n copy = set.slice();\n if (!placed)\n copy.push(this);\n return copy;\n }\n /**\n Remove this mark from the given set, returning a new set. If this\n mark is not in the set, the set itself is returned.\n */\n removeFromSet(set) {\n for (let i = 0; i < set.length; i++)\n if (this.eq(set[i]))\n return set.slice(0, i).concat(set.slice(i + 1));\n return set;\n }\n /**\n Test whether this mark is in the given set of marks.\n */\n isInSet(set) {\n for (let i = 0; i < set.length; i++)\n if (this.eq(set[i]))\n return true;\n return false;\n }\n /**\n Test whether this mark has the same type and attributes as\n another mark.\n */\n eq(other) {\n return this == other ||\n (this.type == other.type && compareDeep(this.attrs, other.attrs));\n }\n /**\n Convert this mark to a JSON-serializeable representation.\n */\n toJSON() {\n let obj = { type: this.type.name };\n for (let _ in this.attrs) {\n obj.attrs = this.attrs;\n break;\n }\n return obj;\n }\n /**\n Deserialize a mark from JSON.\n */\n static fromJSON(schema, json) {\n if (!json)\n throw new RangeError(\"Invalid input for Mark.fromJSON\");\n let type = schema.marks[json.type];\n if (!type)\n throw new RangeError(`There is no mark type ${json.type} in this schema`);\n let mark = type.create(json.attrs);\n type.checkAttrs(mark.attrs);\n return mark;\n }\n /**\n Test whether two sets of marks are identical.\n */\n static sameSet(a, b) {\n if (a == b)\n return true;\n if (a.length != b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (!a[i].eq(b[i]))\n return false;\n return true;\n }\n /**\n Create a properly sorted mark set from null, a single mark, or an\n unsorted array of marks.\n */\n static setFrom(marks) {\n if (!marks || Array.isArray(marks) && marks.length == 0)\n return Mark.none;\n if (marks instanceof Mark)\n return [marks];\n let copy = marks.slice();\n copy.sort((a, b) => a.type.rank - b.type.rank);\n return copy;\n }\n}\n/**\nThe empty set of marks.\n*/\nMark.none = [];\n\n/**\nError type raised by [`Node.replace`](https://prosemirror.net/docs/ref/#model.Node.replace) when\ngiven an invalid replacement.\n*/\nclass ReplaceError extends Error {\n}\n/*\nReplaceError = function(this: any, message: string) {\n let err = Error.call(this, message)\n ;(err as any).__proto__ = ReplaceError.prototype\n return err\n} as any\n\nReplaceError.prototype = Object.create(Error.prototype)\nReplaceError.prototype.constructor = ReplaceError\nReplaceError.prototype.name = \"ReplaceError\"\n*/\n/**\nA slice represents a piece cut out of a larger document. It\nstores not only a fragment, but also the depth up to which nodes on\nboth side are ‘open’ (cut through).\n*/\nclass Slice {\n /**\n Create a slice. When specifying a non-zero open depth, you must\n make sure that there are nodes of at least that depth at the\n appropriate side of the fragment—i.e. if the fragment is an\n empty paragraph node, `openStart` and `openEnd` can't be greater\n than 1.\n \n It is not necessary for the content of open nodes to conform to\n the schema's content constraints, though it should be a valid\n start/end/middle for such a node, depending on which sides are\n open.\n */\n constructor(\n /**\n The slice's content.\n */\n content, \n /**\n The open depth at the start of the fragment.\n */\n openStart, \n /**\n The open depth at the end.\n */\n openEnd) {\n this.content = content;\n this.openStart = openStart;\n this.openEnd = openEnd;\n }\n /**\n The size this slice would add when inserted into a document.\n */\n get size() {\n return this.content.size - this.openStart - this.openEnd;\n }\n /**\n @internal\n */\n insertAt(pos, fragment) {\n let content = insertInto(this.content, pos + this.openStart, fragment);\n return content && new Slice(content, this.openStart, this.openEnd);\n }\n /**\n @internal\n */\n removeBetween(from, to) {\n return new Slice(removeRange(this.content, from + this.openStart, to + this.openStart), this.openStart, this.openEnd);\n }\n /**\n Tests whether this slice is equal to another slice.\n */\n eq(other) {\n return this.content.eq(other.content) && this.openStart == other.openStart && this.openEnd == other.openEnd;\n }\n /**\n @internal\n */\n toString() {\n return this.content + \"(\" + this.openStart + \",\" + this.openEnd + \")\";\n }\n /**\n Convert a slice to a JSON-serializable representation.\n */\n toJSON() {\n if (!this.content.size)\n return null;\n let json = { content: this.content.toJSON() };\n if (this.openStart > 0)\n json.openStart = this.openStart;\n if (this.openEnd > 0)\n json.openEnd = this.openEnd;\n return json;\n }\n /**\n Deserialize a slice from its JSON representation.\n */\n static fromJSON(schema, json) {\n if (!json)\n return Slice.empty;\n let openStart = json.openStart || 0, openEnd = json.openEnd || 0;\n if (typeof openStart != \"number\" || typeof openEnd != \"number\")\n throw new RangeError(\"Invalid input for Slice.fromJSON\");\n return new Slice(Fragment.fromJSON(schema, json.content), openStart, openEnd);\n }\n /**\n Create a slice from a fragment by taking the maximum possible\n open value on both side of the fragment.\n */\n static maxOpen(fragment, openIsolating = true) {\n let openStart = 0, openEnd = 0;\n for (let n = fragment.firstChild; n && !n.isLeaf && (openIsolating || !n.type.spec.isolating); n = n.firstChild)\n openStart++;\n for (let n = fragment.lastChild; n && !n.isLeaf && (openIsolating || !n.type.spec.isolating); n = n.lastChild)\n openEnd++;\n return new Slice(fragment, openStart, openEnd);\n }\n}\n/**\nThe empty slice.\n*/\nSlice.empty = new Slice(Fragment.empty, 0, 0);\nfunction removeRange(content, from, to) {\n let { index, offset } = content.findIndex(from), child = content.maybeChild(index);\n let { index: indexTo, offset: offsetTo } = content.findIndex(to);\n if (offset == from || child.isText) {\n if (offsetTo != to && !content.child(indexTo).isText)\n throw new RangeError(\"Removing non-flat range\");\n return content.cut(0, from).append(content.cut(to));\n }\n if (index != indexTo)\n throw new RangeError(\"Removing non-flat range\");\n return content.replaceChild(index, child.copy(removeRange(child.content, from - offset - 1, to - offset - 1)));\n}\nfunction insertInto(content, dist, insert, parent) {\n let { index, offset } = content.findIndex(dist), child = content.maybeChild(index);\n if (offset == dist || child.isText) {\n if (parent && !parent.canReplace(index, index, insert))\n return null;\n return content.cut(0, dist).append(insert).append(content.cut(dist));\n }\n let inner = insertInto(child.content, dist - offset - 1, insert, child);\n return inner && content.replaceChild(index, child.copy(inner));\n}\nfunction replace($from, $to, slice) {\n if (slice.openStart > $from.depth)\n throw new ReplaceError(\"Inserted content deeper than insertion position\");\n if ($from.depth - slice.openStart != $to.depth - slice.openEnd)\n throw new ReplaceError(\"Inconsistent open depths\");\n return replaceOuter($from, $to, slice, 0);\n}\nfunction replaceOuter($from, $to, slice, depth) {\n let index = $from.index(depth), node = $from.node(depth);\n if (index == $to.index(depth) && depth < $from.depth - slice.openStart) {\n let inner = replaceOuter($from, $to, slice, depth + 1);\n return node.copy(node.content.replaceChild(index, inner));\n }\n else if (!slice.content.size) {\n return close(node, replaceTwoWay($from, $to, depth));\n }\n else if (!slice.openStart && !slice.openEnd && $from.depth == depth && $to.depth == depth) { // Simple, flat case\n let parent = $from.parent, content = parent.content;\n return close(parent, content.cut(0, $from.parentOffset).append(slice.content).append(content.cut($to.parentOffset)));\n }\n else {\n let { start, end } = prepareSliceForReplace(slice, $from);\n return close(node, replaceThreeWay($from, start, end, $to, depth));\n }\n}\nfunction checkJoin(main, sub) {\n if (!sub.type.compatibleContent(main.type))\n throw new ReplaceError(\"Cannot join \" + sub.type.name + \" onto \" + main.type.name);\n}\nfunction joinable($before, $after, depth) {\n let node = $before.node(depth);\n checkJoin(node, $after.node(depth));\n return node;\n}\nfunction addNode(child, target) {\n let last = target.length - 1;\n if (last >= 0 && child.isText && child.sameMarkup(target[last]))\n target[last] = child.withText(target[last].text + child.text);\n else\n target.push(child);\n}\nfunction addRange($start, $end, depth, target) {\n let node = ($end || $start).node(depth);\n let startIndex = 0, endIndex = $end ? $end.index(depth) : node.childCount;\n if ($start) {\n startIndex = $start.index(depth);\n if ($start.depth > depth) {\n startIndex++;\n }\n else if ($start.textOffset) {\n addNode($start.nodeAfter, target);\n startIndex++;\n }\n }\n for (let i = startIndex; i < endIndex; i++)\n addNode(node.child(i), target);\n if ($end && $end.depth == depth && $end.textOffset)\n addNode($end.nodeBefore, target);\n}\nfunction close(node, content) {\n node.type.checkContent(content);\n return node.copy(content);\n}\nfunction replaceThreeWay($from, $start, $end, $to, depth) {\n let openStart = $from.depth > depth && joinable($from, $start, depth + 1);\n let openEnd = $to.depth > depth && joinable($end, $to, depth + 1);\n let content = [];\n addRange(null, $from, depth, content);\n if (openStart && openEnd && $start.index(depth) == $end.index(depth)) {\n checkJoin(openStart, openEnd);\n addNode(close(openStart, replaceThreeWay($from, $start, $end, $to, depth + 1)), content);\n }\n else {\n if (openStart)\n addNode(close(openStart, replaceTwoWay($from, $start, depth + 1)), content);\n addRange($start, $end, depth, content);\n if (openEnd)\n addNode(close(openEnd, replaceTwoWay($end, $to, depth + 1)), content);\n }\n addRange($to, null, depth, content);\n return new Fragment(content);\n}\nfunction replaceTwoWay($from, $to, depth) {\n let content = [];\n addRange(null, $from, depth, content);\n if ($from.depth > depth) {\n let type = joinable($from, $to, depth + 1);\n addNode(close(type, replaceTwoWay($from, $to, depth + 1)), content);\n }\n addRange($to, null, depth, content);\n return new Fragment(content);\n}\nfunction prepareSliceForReplace(slice, $along) {\n let extra = $along.depth - slice.openStart, parent = $along.node(extra);\n let node = parent.copy(slice.content);\n for (let i = extra - 1; i >= 0; i--)\n node = $along.node(i).copy(Fragment.from(node));\n return { start: node.resolveNoCache(slice.openStart + extra),\n end: node.resolveNoCache(node.content.size - slice.openEnd - extra) };\n}\n\n/**\nYou can [_resolve_](https://prosemirror.net/docs/ref/#model.Node.resolve) a position to get more\ninformation about it. Objects of this class represent such a\nresolved position, providing various pieces of context\ninformation, and some helper methods.\n\nThroughout this interface, methods that take an optional `depth`\nparameter will interpret undefined as `this.depth` and negative\nnumbers as `this.depth + value`.\n*/\nclass ResolvedPos {\n /**\n @internal\n */\n constructor(\n /**\n The position that was resolved.\n */\n pos, \n /**\n @internal\n */\n path, \n /**\n The offset this position has into its parent node.\n */\n parentOffset) {\n this.pos = pos;\n this.path = path;\n this.parentOffset = parentOffset;\n this.depth = path.length / 3 - 1;\n }\n /**\n @internal\n */\n resolveDepth(val) {\n if (val == null)\n return this.depth;\n if (val < 0)\n return this.depth + val;\n return val;\n }\n /**\n The parent node that the position points into. Note that even if\n a position points into a text node, that node is not considered\n the parent—text nodes are ‘flat’ in this model, and have no content.\n */\n get parent() { return this.node(this.depth); }\n /**\n The root node in which the position was resolved.\n */\n get doc() { return this.node(0); }\n /**\n The ancestor node at the given level. `p.node(p.depth)` is the\n same as `p.parent`.\n */\n node(depth) { return this.path[this.resolveDepth(depth) * 3]; }\n /**\n The index into the ancestor at the given level. If this points\n at the 3rd node in the 2nd paragraph on the top level, for\n example, `p.index(0)` is 1 and `p.index(1)` is 2.\n */\n index(depth) { return this.path[this.resolveDepth(depth) * 3 + 1]; }\n /**\n The index pointing after this position into the ancestor at the\n given level.\n */\n indexAfter(depth) {\n depth = this.resolveDepth(depth);\n return this.index(depth) + (depth == this.depth && !this.textOffset ? 0 : 1);\n }\n /**\n The (absolute) position at the start of the node at the given\n level.\n */\n start(depth) {\n depth = this.resolveDepth(depth);\n return depth == 0 ? 0 : this.path[depth * 3 - 1] + 1;\n }\n /**\n The (absolute) position at the end of the node at the given\n level.\n */\n end(depth) {\n depth = this.resolveDepth(depth);\n return this.start(depth) + this.node(depth).content.size;\n }\n /**\n The (absolute) position directly before the wrapping node at the\n given level, or, when `depth` is `this.depth + 1`, the original\n position.\n */\n before(depth) {\n depth = this.resolveDepth(depth);\n if (!depth)\n throw new RangeError(\"There is no position before the top-level node\");\n return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1];\n }\n /**\n The (absolute) position directly after the wrapping node at the\n given level, or the original position when `depth` is `this.depth + 1`.\n */\n after(depth) {\n depth = this.resolveDepth(depth);\n if (!depth)\n throw new RangeError(\"There is no position after the top-level node\");\n return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1] + this.path[depth * 3].nodeSize;\n }\n /**\n When this position points into a text node, this returns the\n distance between the position and the start of the text node.\n Will be zero for positions that point between nodes.\n */\n get textOffset() { return this.pos - this.path[this.path.length - 1]; }\n /**\n Get the node directly after the position, if any. If the position\n points into a text node, only the part of that node after the\n position is returned.\n */\n get nodeAfter() {\n let parent = this.parent, index = this.index(this.depth);\n if (index == parent.childCount)\n return null;\n let dOff = this.pos - this.path[this.path.length - 1], child = parent.child(index);\n return dOff ? parent.child(index).cut(dOff) : child;\n }\n /**\n Get the node directly before the position, if any. If the\n position points into a text node, only the part of that node\n before the position is returned.\n */\n get nodeBefore() {\n let index = this.index(this.depth);\n let dOff = this.pos - this.path[this.path.length - 1];\n if (dOff)\n return this.parent.child(index).cut(0, dOff);\n return index == 0 ? null : this.parent.child(index - 1);\n }\n /**\n Get the position at the given index in the parent node at the\n given depth (which defaults to `this.depth`).\n */\n posAtIndex(index, depth) {\n depth = this.resolveDepth(depth);\n let node = this.path[depth * 3], pos = depth == 0 ? 0 : this.path[depth * 3 - 1] + 1;\n for (let i = 0; i < index; i++)\n pos += node.child(i).nodeSize;\n return pos;\n }\n /**\n Get the marks at this position, factoring in the surrounding\n marks' [`inclusive`](https://prosemirror.net/docs/ref/#model.MarkSpec.inclusive) property. If the\n position is at the start of a non-empty node, the marks of the\n node after it (if any) are returned.\n */\n marks() {\n let parent = this.parent, index = this.index();\n // In an empty parent, return the empty array\n if (parent.content.size == 0)\n return Mark.none;\n // When inside a text node, just return the text node's marks\n if (this.textOffset)\n return parent.child(index).marks;\n let main = parent.maybeChild(index - 1), other = parent.maybeChild(index);\n // If the `after` flag is true of there is no node before, make\n // the node after this position the main reference.\n if (!main) {\n let tmp = main;\n main = other;\n other = tmp;\n }\n // Use all marks in the main node, except those that have\n // `inclusive` set to false and are not present in the other node.\n let marks = main.marks;\n for (var i = 0; i < marks.length; i++)\n if (marks[i].type.spec.inclusive === false && (!other || !marks[i].isInSet(other.marks)))\n marks = marks[i--].removeFromSet(marks);\n return marks;\n }\n /**\n Get the marks after the current position, if any, except those\n that are non-inclusive and not present at position `$end`. This\n is mostly useful for getting the set of marks to preserve after a\n deletion. Will return `null` if this position is at the end of\n its parent node or its parent node isn't a textblock (in which\n case no marks should be preserved).\n */\n marksAcross($end) {\n let after = this.parent.maybeChild(this.index());\n if (!after || !after.isInline)\n return null;\n let marks = after.marks, next = $end.parent.maybeChild($end.index());\n for (var i = 0; i < marks.length; i++)\n if (marks[i].type.spec.inclusive === false && (!next || !marks[i].isInSet(next.marks)))\n marks = marks[i--].removeFromSet(marks);\n return marks;\n }\n /**\n The depth up to which this position and the given (non-resolved)\n position share the same parent nodes.\n */\n sharedDepth(pos) {\n for (let depth = this.depth; depth > 0; depth--)\n if (this.start(depth) <= pos && this.end(depth) >= pos)\n return depth;\n return 0;\n }\n /**\n Returns a range based on the place where this position and the\n given position diverge around block content. If both point into\n the same textblock, for example, a range around that textblock\n will be returned. If they point into different blocks, the range\n around those blocks in their shared ancestor is returned. You can\n pass in an optional predicate that will be called with a parent\n node to see if a range into that parent is acceptable.\n */\n blockRange(other = this, pred) {\n if (other.pos < this.pos)\n return other.blockRange(this);\n for (let d = this.depth - (this.parent.inlineContent || this.pos == other.pos ? 1 : 0); d >= 0; d--)\n if (other.pos <= this.end(d) && (!pred || pred(this.node(d))))\n return new NodeRange(this, other, d);\n return null;\n }\n /**\n Query whether the given position shares the same parent node.\n */\n sameParent(other) {\n return this.pos - this.parentOffset == other.pos - other.parentOffset;\n }\n /**\n Return the greater of this and the given position.\n */\n max(other) {\n return other.pos > this.pos ? other : this;\n }\n /**\n Return the smaller of this and the given position.\n */\n min(other) {\n return other.pos < this.pos ? other : this;\n }\n /**\n @internal\n */\n toString() {\n let str = \"\";\n for (let i = 1; i <= this.depth; i++)\n str += (str ? \"/\" : \"\") + this.node(i).type.name + \"_\" + this.index(i - 1);\n return str + \":\" + this.parentOffset;\n }\n /**\n @internal\n */\n static resolve(doc, pos) {\n if (!(pos >= 0 && pos <= doc.content.size))\n throw new RangeError(\"Position \" + pos + \" out of range\");\n let path = [];\n let start = 0, parentOffset = pos;\n for (let node = doc;;) {\n let { index, offset } = node.content.findIndex(parentOffset);\n let rem = parentOffset - offset;\n path.push(node, index, start + offset);\n if (!rem)\n break;\n node = node.child(index);\n if (node.isText)\n break;\n parentOffset = rem - 1;\n start += offset + 1;\n }\n return new ResolvedPos(pos, path, parentOffset);\n }\n /**\n @internal\n */\n static resolveCached(doc, pos) {\n let cache = resolveCache.get(doc);\n if (cache) {\n for (let i = 0; i < cache.elts.length; i++) {\n let elt = cache.elts[i];\n if (elt.pos == pos)\n return elt;\n }\n }\n else {\n resolveCache.set(doc, cache = new ResolveCache);\n }\n let result = cache.elts[cache.i] = ResolvedPos.resolve(doc, pos);\n cache.i = (cache.i + 1) % resolveCacheSize;\n return result;\n }\n}\nclass ResolveCache {\n constructor() {\n this.elts = [];\n this.i = 0;\n }\n}\nconst resolveCacheSize = 12, resolveCache = new WeakMap();\n/**\nRepresents a flat range of content, i.e. one that starts and\nends in the same node.\n*/\nclass NodeRange {\n /**\n Construct a node range. `$from` and `$to` should point into the\n same node until at least the given `depth`, since a node range\n denotes an adjacent set of nodes in a single parent node.\n */\n constructor(\n /**\n A resolved position along the start of the content. May have a\n `depth` greater than this object's `depth` property, since\n these are the positions that were used to compute the range,\n not re-resolved positions directly at its boundaries.\n */\n $from, \n /**\n A position along the end of the content. See\n caveat for [`$from`](https://prosemirror.net/docs/ref/#model.NodeRange.$from).\n */\n $to, \n /**\n The depth of the node that this range points into.\n */\n depth) {\n this.$from = $from;\n this.$to = $to;\n this.depth = depth;\n }\n /**\n The position at the start of the range.\n */\n get start() { return this.$from.before(this.depth + 1); }\n /**\n The position at the end of the range.\n */\n get end() { return this.$to.after(this.depth + 1); }\n /**\n The parent node that the range points into.\n */\n get parent() { return this.$from.node(this.depth); }\n /**\n The start index of the range in the parent node.\n */\n get startIndex() { return this.$from.index(this.depth); }\n /**\n The end index of the range in the parent node.\n */\n get endIndex() { return this.$to.indexAfter(this.depth); }\n}\n\nconst emptyAttrs = Object.create(null);\n/**\nThis class represents a node in the tree that makes up a\nProseMirror document. So a document is an instance of `Node`, with\nchildren that are also instances of `Node`.\n\nNodes are persistent data structures. Instead of changing them, you\ncreate new ones with the content you want. Old ones keep pointing\nat the old document shape. This is made cheaper by sharing\nstructure between the old and new data as much as possible, which a\ntree shape like this (without back pointers) makes easy.\n\n**Do not** directly mutate the properties of a `Node` object. See\n[the guide](https://prosemirror.net/docs/guide/#doc) for more information.\n*/\nclass Node {\n /**\n @internal\n */\n constructor(\n /**\n The type of node that this is.\n */\n type, \n /**\n An object mapping attribute names to values. The kind of\n attributes allowed and required are\n [determined](https://prosemirror.net/docs/ref/#model.NodeSpec.attrs) by the node type.\n */\n attrs, \n // A fragment holding the node's children.\n content, \n /**\n The marks (things like whether it is emphasized or part of a\n link) applied to this node.\n */\n marks = Mark.none) {\n this.type = type;\n this.attrs = attrs;\n this.marks = marks;\n this.content = content || Fragment.empty;\n }\n /**\n The array of this node's child nodes.\n */\n get children() { return this.content.content; }\n /**\n The size of this node, as defined by the integer-based [indexing\n scheme](https://prosemirror.net/docs/guide/#doc.indexing). For text nodes, this is the\n amount of characters. For other leaf nodes, it is one. For\n non-leaf nodes, it is the size of the content plus two (the\n start and end token).\n */\n get nodeSize() { return this.isLeaf ? 1 : 2 + this.content.size; }\n /**\n The number of children that the node has.\n */\n get childCount() { return this.content.childCount; }\n /**\n Get the child node at the given index. Raises an error when the\n index is out of range.\n */\n child(index) { return this.content.child(index); }\n /**\n Get the child node at the given index, if it exists.\n */\n maybeChild(index) { return this.content.maybeChild(index); }\n /**\n Call `f` for every child node, passing the node, its offset\n into this parent node, and its index.\n */\n forEach(f) { this.content.forEach(f); }\n /**\n Invoke a callback for all descendant nodes recursively between\n the given two positions that are relative to start of this\n node's content. The callback is invoked with the node, its\n position relative to the original node (method receiver),\n its parent node, and its child index. When the callback returns\n false for a given node, that node's children will not be\n recursed over. The last parameter can be used to specify a\n starting position to count from.\n */\n nodesBetween(from, to, f, startPos = 0) {\n this.content.nodesBetween(from, to, f, startPos, this);\n }\n /**\n Call the given callback for every descendant node. Doesn't\n descend into a node when the callback returns `false`.\n */\n descendants(f) {\n this.nodesBetween(0, this.content.size, f);\n }\n /**\n Concatenates all the text nodes found in this fragment and its\n children.\n */\n get textContent() {\n return (this.isLeaf && this.type.spec.leafText)\n ? this.type.spec.leafText(this)\n : this.textBetween(0, this.content.size, \"\");\n }\n /**\n Get all text between positions `from` and `to`. When\n `blockSeparator` is given, it will be inserted to separate text\n from different block nodes. If `leafText` is given, it'll be\n inserted for every non-text leaf node encountered, otherwise\n [`leafText`](https://prosemirror.net/docs/ref/#model.NodeSpec.leafText) will be used.\n */\n textBetween(from, to, blockSeparator, leafText) {\n return this.content.textBetween(from, to, blockSeparator, leafText);\n }\n /**\n Returns this node's first child, or `null` if there are no\n children.\n */\n get firstChild() { return this.content.firstChild; }\n /**\n Returns this node's last child, or `null` if there are no\n children.\n */\n get lastChild() { return this.content.lastChild; }\n /**\n Test whether two nodes represent the same piece of document.\n */\n eq(other) {\n return this == other || (this.sameMarkup(other) && this.content.eq(other.content));\n }\n /**\n Compare the markup (type, attributes, and marks) of this node to\n those of another. Returns `true` if both have the same markup.\n */\n sameMarkup(other) {\n return this.hasMarkup(other.type, other.attrs, other.marks);\n }\n /**\n Check whether this node's markup correspond to the given type,\n attributes, and marks.\n */\n hasMarkup(type, attrs, marks) {\n return this.type == type &&\n compareDeep(this.attrs, attrs || type.defaultAttrs || emptyAttrs) &&\n Mark.sameSet(this.marks, marks || Mark.none);\n }\n /**\n Create a new node with the same markup as this node, containing\n the given content (or empty, if no content is given).\n */\n copy(content = null) {\n if (content == this.content)\n return this;\n return new Node(this.type, this.attrs, content, this.marks);\n }\n /**\n Create a copy of this node, with the given set of marks instead\n of the node's own marks.\n */\n mark(marks) {\n return marks == this.marks ? this : new Node(this.type, this.attrs, this.content, marks);\n }\n /**\n Create a copy of this node with only the content between the\n given positions. If `to` is not given, it defaults to the end of\n the node.\n */\n cut(from, to = this.content.size) {\n if (from == 0 && to == this.content.size)\n return this;\n return this.copy(this.content.cut(from, to));\n }\n /**\n Cut out the part of the document between the given positions, and\n return it as a `Slice` object.\n */\n slice(from, to = this.content.size, includeParents = false) {\n if (from == to)\n return Slice.empty;\n let $from = this.resolve(from), $to = this.resolve(to);\n let depth = includeParents ? 0 : $from.sharedDepth(to);\n let start = $from.start(depth), node = $from.node(depth);\n let content = node.content.cut($from.pos - start, $to.pos - start);\n return new Slice(content, $from.depth - depth, $to.depth - depth);\n }\n /**\n Replace the part of the document between the given positions with\n the given slice. The slice must 'fit', meaning its open sides\n must be able to connect to the surrounding content, and its\n content nodes must be valid children for the node they are placed\n into. If any of this is violated, an error of type\n [`ReplaceError`](https://prosemirror.net/docs/ref/#model.ReplaceError) is thrown.\n */\n replace(from, to, slice) {\n return replace(this.resolve(from), this.resolve(to), slice);\n }\n /**\n Find the node directly after the given position.\n */\n nodeAt(pos) {\n for (let node = this;;) {\n let { index, offset } = node.content.findIndex(pos);\n node = node.maybeChild(index);\n if (!node)\n return null;\n if (offset == pos || node.isText)\n return node;\n pos -= offset + 1;\n }\n }\n /**\n Find the (direct) child node after the given offset, if any,\n and return it along with its index and offset relative to this\n node.\n */\n childAfter(pos) {\n let { index, offset } = this.content.findIndex(pos);\n return { node: this.content.maybeChild(index), index, offset };\n }\n /**\n Find the (direct) child node before the given offset, if any,\n and return it along with its index and offset relative to this\n node.\n */\n childBefore(pos) {\n if (pos == 0)\n return { node: null, index: 0, offset: 0 };\n let { index, offset } = this.content.findIndex(pos);\n if (offset < pos)\n return { node: this.content.child(index), index, offset };\n let node = this.content.child(index - 1);\n return { node, index: index - 1, offset: offset - node.nodeSize };\n }\n /**\n Resolve the given position in the document, returning an\n [object](https://prosemirror.net/docs/ref/#model.ResolvedPos) with information about its context.\n */\n resolve(pos) { return ResolvedPos.resolveCached(this, pos); }\n /**\n @internal\n */\n resolveNoCache(pos) { return ResolvedPos.resolve(this, pos); }\n /**\n Test whether a given mark or mark type occurs in this document\n between the two given positions.\n */\n rangeHasMark(from, to, type) {\n let found = false;\n if (to > from)\n this.nodesBetween(from, to, node => {\n if (type.isInSet(node.marks))\n found = true;\n return !found;\n });\n return found;\n }\n /**\n True when this is a block (non-inline node)\n */\n get isBlock() { return this.type.isBlock; }\n /**\n True when this is a textblock node, a block node with inline\n content.\n */\n get isTextblock() { return this.type.isTextblock; }\n /**\n True when this node allows inline content.\n */\n get inlineContent() { return this.type.inlineContent; }\n /**\n True when this is an inline node (a text node or a node that can\n appear among text).\n */\n get isInline() { return this.type.isInline; }\n /**\n True when this is a text node.\n */\n get isText() { return this.type.isText; }\n /**\n True when this is a leaf node.\n */\n get isLeaf() { return this.type.isLeaf; }\n /**\n True when this is an atom, i.e. when it does not have directly\n editable content. This is usually the same as `isLeaf`, but can\n be configured with the [`atom` property](https://prosemirror.net/docs/ref/#model.NodeSpec.atom)\n on a node's spec (typically used when the node is displayed as\n an uneditable [node view](https://prosemirror.net/docs/ref/#view.NodeView)).\n */\n get isAtom() { return this.type.isAtom; }\n /**\n Return a string representation of this node for debugging\n purposes.\n */\n toString() {\n if (this.type.spec.toDebugString)\n return this.type.spec.toDebugString(this);\n let name = this.type.name;\n if (this.content.size)\n name += \"(\" + this.content.toStringInner() + \")\";\n return wrapMarks(this.marks, name);\n }\n /**\n Get the content match in this node at the given index.\n */\n contentMatchAt(index) {\n let match = this.type.contentMatch.matchFragment(this.content, 0, index);\n if (!match)\n throw new Error(\"Called contentMatchAt on a node with invalid content\");\n return match;\n }\n /**\n Test whether replacing the range between `from` and `to` (by\n child index) with the given replacement fragment (which defaults\n to the empty fragment) would leave the node's content valid. You\n can optionally pass `start` and `end` indices into the\n replacement fragment.\n */\n canReplace(from, to, replacement = Fragment.empty, start = 0, end = replacement.childCount) {\n let one = this.contentMatchAt(from).matchFragment(replacement, start, end);\n let two = one && one.matchFragment(this.content, to);\n if (!two || !two.validEnd)\n return false;\n for (let i = start; i < end; i++)\n if (!this.type.allowsMarks(replacement.child(i).marks))\n return false;\n return true;\n }\n /**\n Test whether replacing the range `from` to `to` (by index) with\n a node of the given type would leave the node's content valid.\n */\n canReplaceWith(from, to, type, marks) {\n if (marks && !this.type.allowsMarks(marks))\n return false;\n let start = this.contentMatchAt(from).matchType(type);\n let end = start && start.matchFragment(this.content, to);\n return end ? end.validEnd : false;\n }\n /**\n Test whether the given node's content could be appended to this\n node. If that node is empty, this will only return true if there\n is at least one node type that can appear in both nodes (to avoid\n merging completely incompatible nodes).\n */\n canAppend(other) {\n if (other.content.size)\n return this.canReplace(this.childCount, this.childCount, other.content);\n else\n return this.type.compatibleContent(other.type);\n }\n /**\n Check whether this node and its descendants conform to the\n schema, and raise an exception when they do not.\n */\n check() {\n this.type.checkContent(this.content);\n this.type.checkAttrs(this.attrs);\n let copy = Mark.none;\n for (let i = 0; i < this.marks.length; i++) {\n let mark = this.marks[i];\n mark.type.checkAttrs(mark.attrs);\n copy = mark.addToSet(copy);\n }\n if (!Mark.sameSet(copy, this.marks))\n throw new RangeError(`Invalid collection of marks for node ${this.type.name}: ${this.marks.map(m => m.type.name)}`);\n this.content.forEach(node => node.check());\n }\n /**\n Return a JSON-serializeable representation of this node.\n */\n toJSON() {\n let obj = { type: this.type.name };\n for (let _ in this.attrs) {\n obj.attrs = this.attrs;\n break;\n }\n if (this.content.size)\n obj.content = this.content.toJSON();\n if (this.marks.length)\n obj.marks = this.marks.map(n => n.toJSON());\n return obj;\n }\n /**\n Deserialize a node from its JSON representation.\n */\n static fromJSON(schema, json) {\n if (!json)\n throw new RangeError(\"Invalid input for Node.fromJSON\");\n let marks = undefined;\n if (json.marks) {\n if (!Array.isArray(json.marks))\n throw new RangeError(\"Invalid mark data for Node.fromJSON\");\n marks = json.marks.map(schema.markFromJSON);\n }\n if (json.type == \"text\") {\n if (typeof json.text != \"string\")\n throw new RangeError(\"Invalid text node in JSON\");\n return schema.text(json.text, marks);\n }\n let content = Fragment.fromJSON(schema, json.content);\n let node = schema.nodeType(json.type).create(json.attrs, content, marks);\n node.type.checkAttrs(node.attrs);\n return node;\n }\n}\nNode.prototype.text = undefined;\nclass TextNode extends Node {\n /**\n @internal\n */\n constructor(type, attrs, content, marks) {\n super(type, attrs, null, marks);\n if (!content)\n throw new RangeError(\"Empty text nodes are not allowed\");\n this.text = content;\n }\n toString() {\n if (this.type.spec.toDebugString)\n return this.type.spec.toDebugString(this);\n return wrapMarks(this.marks, JSON.stringify(this.text));\n }\n get textContent() { return this.text; }\n textBetween(from, to) { return this.text.slice(from, to); }\n get nodeSize() { return this.text.length; }\n mark(marks) {\n return marks == this.marks ? this : new TextNode(this.type, this.attrs, this.text, marks);\n }\n withText(text) {\n if (text == this.text)\n return this;\n return new TextNode(this.type, this.attrs, text, this.marks);\n }\n cut(from = 0, to = this.text.length) {\n if (from == 0 && to == this.text.length)\n return this;\n return this.withText(this.text.slice(from, to));\n }\n eq(other) {\n return this.sameMarkup(other) && this.text == other.text;\n }\n toJSON() {\n let base = super.toJSON();\n base.text = this.text;\n return base;\n }\n}\nfunction wrapMarks(marks, str) {\n for (let i = marks.length - 1; i >= 0; i--)\n str = marks[i].type.name + \"(\" + str + \")\";\n return str;\n}\n\n/**\nInstances of this class represent a match state of a node type's\n[content expression](https://prosemirror.net/docs/ref/#model.NodeSpec.content), and can be used to\nfind out whether further content matches here, and whether a given\nposition is a valid end of the node.\n*/\nclass ContentMatch {\n /**\n @internal\n */\n constructor(\n /**\n True when this match state represents a valid end of the node.\n */\n validEnd) {\n this.validEnd = validEnd;\n /**\n @internal\n */\n this.next = [];\n /**\n @internal\n */\n this.wrapCache = [];\n }\n /**\n @internal\n */\n static parse(string, nodeTypes) {\n let stream = new TokenStream(string, nodeTypes);\n if (stream.next == null)\n return ContentMatch.empty;\n let expr = parseExpr(stream);\n if (stream.next)\n stream.err(\"Unexpected trailing text\");\n let match = dfa(nfa(expr));\n checkForDeadEnds(match, stream);\n return match;\n }\n /**\n Match a node type, returning a match after that node if\n successful.\n */\n matchType(type) {\n for (let i = 0; i < this.next.length; i++)\n if (this.next[i].type == type)\n return this.next[i].next;\n return null;\n }\n /**\n Try to match a fragment. Returns the resulting match when\n successful.\n */\n matchFragment(frag, start = 0, end = frag.childCount) {\n let cur = this;\n for (let i = start; cur && i < end; i++)\n cur = cur.matchType(frag.child(i).type);\n return cur;\n }\n /**\n @internal\n */\n get inlineContent() {\n return this.next.length != 0 && this.next[0].type.isInline;\n }\n /**\n Get the first matching node type at this match position that can\n be generated.\n */\n get defaultType() {\n for (let i = 0; i < this.next.length; i++) {\n let { type } = this.next[i];\n if (!(type.isText || type.hasRequiredAttrs()))\n return type;\n }\n return null;\n }\n /**\n @internal\n */\n compatible(other) {\n for (let i = 0; i < this.next.length; i++)\n for (let j = 0; j < other.next.length; j++)\n if (this.next[i].type == other.next[j].type)\n return true;\n return false;\n }\n /**\n Try to match the given fragment, and if that fails, see if it can\n be made to match by inserting nodes in front of it. When\n successful, return a fragment of inserted nodes (which may be\n empty if nothing had to be inserted). When `toEnd` is true, only\n return a fragment if the resulting match goes to the end of the\n content expression.\n */\n fillBefore(after, toEnd = false, startIndex = 0) {\n let seen = [this];\n function search(match, types) {\n let finished = match.matchFragment(after, startIndex);\n if (finished && (!toEnd || finished.validEnd))\n return Fragment.from(types.map(tp => tp.createAndFill()));\n for (let i = 0; i < match.next.length; i++) {\n let { type, next } = match.next[i];\n if (!(type.isText || type.hasRequiredAttrs()) && seen.indexOf(next) == -1) {\n seen.push(next);\n let found = search(next, types.concat(type));\n if (found)\n return found;\n }\n }\n return null;\n }\n return search(this, []);\n }\n /**\n Find a set of wrapping node types that would allow a node of the\n given type to appear at this position. The result may be empty\n (when it fits directly) and will be null when no such wrapping\n exists.\n */\n findWrapping(target) {\n for (let i = 0; i < this.wrapCache.length; i += 2)\n if (this.wrapCache[i] == target)\n return this.wrapCache[i + 1];\n let computed = this.computeWrapping(target);\n this.wrapCache.push(target, computed);\n return computed;\n }\n /**\n @internal\n */\n computeWrapping(target) {\n let seen = Object.create(null), active = [{ match: this, type: null, via: null }];\n while (active.length) {\n let current = active.shift(), match = current.match;\n if (match.matchType(target)) {\n let result = [];\n for (let obj = current; obj.type; obj = obj.via)\n result.push(obj.type);\n return result.reverse();\n }\n for (let i = 0; i < match.next.length; i++) {\n let { type, next } = match.next[i];\n if (!type.isLeaf && !type.hasRequiredAttrs() && !(type.name in seen) && (!current.type || next.validEnd)) {\n active.push({ match: type.contentMatch, type, via: current });\n seen[type.name] = true;\n }\n }\n }\n return null;\n }\n /**\n The number of outgoing edges this node has in the finite\n automaton that describes the content expression.\n */\n get edgeCount() {\n return this.next.length;\n }\n /**\n Get the _n_th outgoing edge from this node in the finite\n automaton that describes the content expression.\n */\n edge(n) {\n if (n >= this.next.length)\n throw new RangeError(`There's no ${n}th edge in this content match`);\n return this.next[n];\n }\n /**\n @internal\n */\n toString() {\n let seen = [];\n function scan(m) {\n seen.push(m);\n for (let i = 0; i < m.next.length; i++)\n if (seen.indexOf(m.next[i].next) == -1)\n scan(m.next[i].next);\n }\n scan(this);\n return seen.map((m, i) => {\n let out = i + (m.validEnd ? \"*\" : \" \") + \" \";\n for (let i = 0; i < m.next.length; i++)\n out += (i ? \", \" : \"\") + m.next[i].type.name + \"->\" + seen.indexOf(m.next[i].next);\n return out;\n }).join(\"\\n\");\n }\n}\n/**\n@internal\n*/\nContentMatch.empty = new ContentMatch(true);\nclass TokenStream {\n constructor(string, nodeTypes) {\n this.string = string;\n this.nodeTypes = nodeTypes;\n this.inline = null;\n this.pos = 0;\n this.tokens = string.split(/\\s*(?=\\b|\\W|$)/);\n if (this.tokens[this.tokens.length - 1] == \"\")\n this.tokens.pop();\n if (this.tokens[0] == \"\")\n this.tokens.shift();\n }\n get next() { return this.tokens[this.pos]; }\n eat(tok) { return this.next == tok && (this.pos++ || true); }\n err(str) { throw new SyntaxError(str + \" (in content expression '\" + this.string + \"')\"); }\n}\nfunction parseExpr(stream) {\n let exprs = [];\n do {\n exprs.push(parseExprSeq(stream));\n } while (stream.eat(\"|\"));\n return exprs.length == 1 ? exprs[0] : { type: \"choice\", exprs };\n}\nfunction parseExprSeq(stream) {\n let exprs = [];\n do {\n exprs.push(parseExprSubscript(stream));\n } while (stream.next && stream.next != \")\" && stream.next != \"|\");\n return exprs.length == 1 ? exprs[0] : { type: \"seq\", exprs };\n}\nfunction parseExprSubscript(stream) {\n let expr = parseExprAtom(stream);\n for (;;) {\n if (stream.eat(\"+\"))\n expr = { type: \"plus\", expr };\n else if (stream.eat(\"*\"))\n expr = { type: \"star\", expr };\n else if (stream.eat(\"?\"))\n expr = { type: \"opt\", expr };\n else if (stream.eat(\"{\"))\n expr = parseExprRange(stream, expr);\n else\n break;\n }\n return expr;\n}\nfunction parseNum(stream) {\n if (/\\D/.test(stream.next))\n stream.err(\"Expected number, got '\" + stream.next + \"'\");\n let result = Number(stream.next);\n stream.pos++;\n return result;\n}\nfunction parseExprRange(stream, expr) {\n let min = parseNum(stream), max = min;\n if (stream.eat(\",\")) {\n if (stream.next != \"}\")\n max = parseNum(stream);\n else\n max = -1;\n }\n if (!stream.eat(\"}\"))\n stream.err(\"Unclosed braced range\");\n return { type: \"range\", min, max, expr };\n}\nfunction resolveName(stream, name) {\n let types = stream.nodeTypes, type = types[name];\n if (type)\n return [type];\n let result = [];\n for (let typeName in types) {\n let type = types[typeName];\n if (type.isInGroup(name))\n result.push(type);\n }\n if (result.length == 0)\n stream.err(\"No node type or group '\" + name + \"' found\");\n return result;\n}\nfunction parseExprAtom(stream) {\n if (stream.eat(\"(\")) {\n let expr = parseExpr(stream);\n if (!stream.eat(\")\"))\n stream.err(\"Missing closing paren\");\n return expr;\n }\n else if (!/\\W/.test(stream.next)) {\n let exprs = resolveName(stream, stream.next).map(type => {\n if (stream.inline == null)\n stream.inline = type.isInline;\n else if (stream.inline != type.isInline)\n stream.err(\"Mixing inline and block content\");\n return { type: \"name\", value: type };\n });\n stream.pos++;\n return exprs.length == 1 ? exprs[0] : { type: \"choice\", exprs };\n }\n else {\n stream.err(\"Unexpected token '\" + stream.next + \"'\");\n }\n}\n// Construct an NFA from an expression as returned by the parser. The\n// NFA is represented as an array of states, which are themselves\n// arrays of edges, which are `{term, to}` objects. The first state is\n// the entry state and the last node is the success state.\n//\n// Note that unlike typical NFAs, the edge ordering in this one is\n// significant, in that it is used to contruct filler content when\n// necessary.\nfunction nfa(expr) {\n let nfa = [[]];\n connect(compile(expr, 0), node());\n return nfa;\n function node() { return nfa.push([]) - 1; }\n function edge(from, to, term) {\n let edge = { term, to };\n nfa[from].push(edge);\n return edge;\n }\n function connect(edges, to) {\n edges.forEach(edge => edge.to = to);\n }\n function compile(expr, from) {\n if (expr.type == \"choice\") {\n return expr.exprs.reduce((out, expr) => out.concat(compile(expr, from)), []);\n }\n else if (expr.type == \"seq\") {\n for (let i = 0;; i++) {\n let next = compile(expr.exprs[i], from);\n if (i == expr.exprs.length - 1)\n return next;\n connect(next, from = node());\n }\n }\n else if (expr.type == \"star\") {\n let loop = node();\n edge(from, loop);\n connect(compile(expr.expr, loop), loop);\n return [edge(loop)];\n }\n else if (expr.type == \"plus\") {\n let loop = node();\n connect(compile(expr.expr, from), loop);\n connect(compile(expr.expr, loop), loop);\n return [edge(loop)];\n }\n else if (expr.type == \"opt\") {\n return [edge(from)].concat(compile(expr.expr, from));\n }\n else if (expr.type == \"range\") {\n let cur = from;\n for (let i = 0; i < expr.min; i++) {\n let next = node();\n connect(compile(expr.expr, cur), next);\n cur = next;\n }\n if (expr.max == -1) {\n connect(compile(expr.expr, cur), cur);\n }\n else {\n for (let i = expr.min; i < expr.max; i++) {\n let next = node();\n edge(cur, next);\n connect(compile(expr.expr, cur), next);\n cur = next;\n }\n }\n return [edge(cur)];\n }\n else if (expr.type == \"name\") {\n return [edge(from, undefined, expr.value)];\n }\n else {\n throw new Error(\"Unknown expr type\");\n }\n }\n}\nfunction cmp(a, b) { return b - a; }\n// Get the set of nodes reachable by null edges from `node`. Omit\n// nodes with only a single null-out-edge, since they may lead to\n// needless duplicated nodes.\nfunction nullFrom(nfa, node) {\n let result = [];\n scan(node);\n return result.sort(cmp);\n function scan(node) {\n let edges = nfa[node];\n if (edges.length == 1 && !edges[0].term)\n return scan(edges[0].to);\n result.push(node);\n for (let i = 0; i < edges.length; i++) {\n let { term, to } = edges[i];\n if (!term && result.indexOf(to) == -1)\n scan(to);\n }\n }\n}\n// Compiles an NFA as produced by `nfa` into a DFA, modeled as a set\n// of state objects (`ContentMatch` instances) with transitions\n// between them.\nfunction dfa(nfa) {\n let labeled = Object.create(null);\n return explore(nullFrom(nfa, 0));\n function explore(states) {\n let out = [];\n states.forEach(node => {\n nfa[node].forEach(({ term, to }) => {\n if (!term)\n return;\n let set;\n for (let i = 0; i < out.length; i++)\n if (out[i][0] == term)\n set = out[i][1];\n nullFrom(nfa, to).forEach(node => {\n if (!set)\n out.push([term, set = []]);\n if (set.indexOf(node) == -1)\n set.push(node);\n });\n });\n });\n let state = labeled[states.join(\",\")] = new ContentMatch(states.indexOf(nfa.length - 1) > -1);\n for (let i = 0; i < out.length; i++) {\n let states = out[i][1].sort(cmp);\n state.next.push({ type: out[i][0], next: labeled[states.join(\",\")] || explore(states) });\n }\n return state;\n }\n}\nfunction checkForDeadEnds(match, stream) {\n for (let i = 0, work = [match]; i < work.length; i++) {\n let state = work[i], dead = !state.validEnd, nodes = [];\n for (let j = 0; j < state.next.length; j++) {\n let { type, next } = state.next[j];\n nodes.push(type.name);\n if (dead && !(type.isText || type.hasRequiredAttrs()))\n dead = false;\n if (work.indexOf(next) == -1)\n work.push(next);\n }\n if (dead)\n stream.err(\"Only non-generatable nodes (\" + nodes.join(\", \") + \") in a required position (see https://prosemirror.net/docs/guide/#generatable)\");\n }\n}\n\n// For node types where all attrs have a default value (or which don't\n// have any attributes), build up a single reusable default attribute\n// object, and use it for all nodes that don't specify specific\n// attributes.\nfunction defaultAttrs(attrs) {\n let defaults = Object.create(null);\n for (let attrName in attrs) {\n let attr = attrs[attrName];\n if (!attr.hasDefault)\n return null;\n defaults[attrName] = attr.default;\n }\n return defaults;\n}\nfunction computeAttrs(attrs, value) {\n let built = Object.create(null);\n for (let name in attrs) {\n let given = value && value[name];\n if (given === undefined) {\n let attr = attrs[name];\n if (attr.hasDefault)\n given = attr.default;\n else\n throw new RangeError(\"No value supplied for attribute \" + name);\n }\n built[name] = given;\n }\n return built;\n}\nfunction checkAttrs(attrs, values, type, name) {\n for (let name in values)\n if (!(name in attrs))\n throw new RangeError(`Unsupported attribute ${name} for ${type} of type ${name}`);\n for (let name in attrs) {\n let attr = attrs[name];\n if (attr.validate)\n attr.validate(values[name]);\n }\n}\nfunction initAttrs(typeName, attrs) {\n let result = Object.create(null);\n if (attrs)\n for (let name in attrs)\n result[name] = new Attribute(typeName, name, attrs[name]);\n return result;\n}\n/**\nNode types are objects allocated once per `Schema` and used to\n[tag](https://prosemirror.net/docs/ref/#model.Node.type) `Node` instances. They contain information\nabout the node type, such as its name and what kind of node it\nrepresents.\n*/\nclass NodeType {\n /**\n @internal\n */\n constructor(\n /**\n The name the node type has in this schema.\n */\n name, \n /**\n A link back to the `Schema` the node type belongs to.\n */\n schema, \n /**\n The spec that this type is based on\n */\n spec) {\n this.name = name;\n this.schema = schema;\n this.spec = spec;\n /**\n The set of marks allowed in this node. `null` means all marks\n are allowed.\n */\n this.markSet = null;\n this.groups = spec.group ? spec.group.split(\" \") : [];\n this.attrs = initAttrs(name, spec.attrs);\n this.defaultAttrs = defaultAttrs(this.attrs);\n this.contentMatch = null;\n this.inlineContent = null;\n this.isBlock = !(spec.inline || name == \"text\");\n this.isText = name == \"text\";\n }\n /**\n True if this is an inline type.\n */\n get isInline() { return !this.isBlock; }\n /**\n True if this is a textblock type, a block that contains inline\n content.\n */\n get isTextblock() { return this.isBlock && this.inlineContent; }\n /**\n True for node types that allow no content.\n */\n get isLeaf() { return this.contentMatch == ContentMatch.empty; }\n /**\n True when this node is an atom, i.e. when it does not have\n directly editable content.\n */\n get isAtom() { return this.isLeaf || !!this.spec.atom; }\n /**\n Return true when this node type is part of the given\n [group](https://prosemirror.net/docs/ref/#model.NodeSpec.group).\n */\n isInGroup(group) {\n return this.groups.indexOf(group) > -1;\n }\n /**\n The node type's [whitespace](https://prosemirror.net/docs/ref/#model.NodeSpec.whitespace) option.\n */\n get whitespace() {\n return this.spec.whitespace || (this.spec.code ? \"pre\" : \"normal\");\n }\n /**\n Tells you whether this node type has any required attributes.\n */\n hasRequiredAttrs() {\n for (let n in this.attrs)\n if (this.attrs[n].isRequired)\n return true;\n return false;\n }\n /**\n Indicates whether this node allows some of the same content as\n the given node type.\n */\n compatibleContent(other) {\n return this == other || this.contentMatch.compatible(other.contentMatch);\n }\n /**\n @internal\n */\n computeAttrs(attrs) {\n if (!attrs && this.defaultAttrs)\n return this.defaultAttrs;\n else\n return computeAttrs(this.attrs, attrs);\n }\n /**\n Create a `Node` of this type. The given attributes are\n checked and defaulted (you can pass `null` to use the type's\n defaults entirely, if no required attributes exist). `content`\n may be a `Fragment`, a node, an array of nodes, or\n `null`. Similarly `marks` may be `null` to default to the empty\n set of marks.\n */\n create(attrs = null, content, marks) {\n if (this.isText)\n throw new Error(\"NodeType.create can't construct text nodes\");\n return new Node(this, this.computeAttrs(attrs), Fragment.from(content), Mark.setFrom(marks));\n }\n /**\n Like [`create`](https://prosemirror.net/docs/ref/#model.NodeType.create), but check the given content\n against the node type's content restrictions, and throw an error\n if it doesn't match.\n */\n createChecked(attrs = null, content, marks) {\n content = Fragment.from(content);\n this.checkContent(content);\n return new Node(this, this.computeAttrs(attrs), content, Mark.setFrom(marks));\n }\n /**\n Like [`create`](https://prosemirror.net/docs/ref/#model.NodeType.create), but see if it is\n necessary to add nodes to the start or end of the given fragment\n to make it fit the node. If no fitting wrapping can be found,\n return null. Note that, due to the fact that required nodes can\n always be created, this will always succeed if you pass null or\n `Fragment.empty` as content.\n */\n createAndFill(attrs = null, content, marks) {\n attrs = this.computeAttrs(attrs);\n content = Fragment.from(content);\n if (content.size) {\n let before = this.contentMatch.fillBefore(content);\n if (!before)\n return null;\n content = before.append(content);\n }\n let matched = this.contentMatch.matchFragment(content);\n let after = matched && matched.fillBefore(Fragment.empty, true);\n if (!after)\n return null;\n return new Node(this, attrs, content.append(after), Mark.setFrom(marks));\n }\n /**\n Returns true if the given fragment is valid content for this node\n type.\n */\n validContent(content) {\n let result = this.contentMatch.matchFragment(content);\n if (!result || !result.validEnd)\n return false;\n for (let i = 0; i < content.childCount; i++)\n if (!this.allowsMarks(content.child(i).marks))\n return false;\n return true;\n }\n /**\n Throws a RangeError if the given fragment is not valid content for this\n node type.\n @internal\n */\n checkContent(content) {\n if (!this.validContent(content))\n throw new RangeError(`Invalid content for node ${this.name}: ${content.toString().slice(0, 50)}`);\n }\n /**\n @internal\n */\n checkAttrs(attrs) {\n checkAttrs(this.attrs, attrs, \"node\", this.name);\n }\n /**\n Check whether the given mark type is allowed in this node.\n */\n allowsMarkType(markType) {\n return this.markSet == null || this.markSet.indexOf(markType) > -1;\n }\n /**\n Test whether the given set of marks are allowed in this node.\n */\n allowsMarks(marks) {\n if (this.markSet == null)\n return true;\n for (let i = 0; i < marks.length; i++)\n if (!this.allowsMarkType(marks[i].type))\n return false;\n return true;\n }\n /**\n Removes the marks that are not allowed in this node from the given set.\n */\n allowedMarks(marks) {\n if (this.markSet == null)\n return marks;\n let copy;\n for (let i = 0; i < marks.length; i++) {\n if (!this.allowsMarkType(marks[i].type)) {\n if (!copy)\n copy = marks.slice(0, i);\n }\n else if (copy) {\n copy.push(marks[i]);\n }\n }\n return !copy ? marks : copy.length ? copy : Mark.none;\n }\n /**\n @internal\n */\n static compile(nodes, schema) {\n let result = Object.create(null);\n nodes.forEach((name, spec) => result[name] = new NodeType(name, schema, spec));\n let topType = schema.spec.topNode || \"doc\";\n if (!result[topType])\n throw new RangeError(\"Schema is missing its top node type ('\" + topType + \"')\");\n if (!result.text)\n throw new RangeError(\"Every schema needs a 'text' type\");\n for (let _ in result.text.attrs)\n throw new RangeError(\"The text node type should not have attributes\");\n return result;\n }\n}\nfunction validateType(typeName, attrName, type) {\n let types = type.split(\"|\");\n return (value) => {\n let name = value === null ? \"null\" : typeof value;\n if (types.indexOf(name) < 0)\n throw new RangeError(`Expected value of type ${types} for attribute ${attrName} on type ${typeName}, got ${name}`);\n };\n}\n// Attribute descriptors\nclass Attribute {\n constructor(typeName, attrName, options) {\n this.hasDefault = Object.prototype.hasOwnProperty.call(options, \"default\");\n this.default = options.default;\n this.validate = typeof options.validate == \"string\" ? validateType(typeName, attrName, options.validate) : options.validate;\n }\n get isRequired() {\n return !this.hasDefault;\n }\n}\n// Marks\n/**\nLike nodes, marks (which are associated with nodes to signify\nthings like emphasis or being part of a link) are\n[tagged](https://prosemirror.net/docs/ref/#model.Mark.type) with type objects, which are\ninstantiated once per `Schema`.\n*/\nclass MarkType {\n /**\n @internal\n */\n constructor(\n /**\n The name of the mark type.\n */\n name, \n /**\n @internal\n */\n rank, \n /**\n The schema that this mark type instance is part of.\n */\n schema, \n /**\n The spec on which the type is based.\n */\n spec) {\n this.name = name;\n this.rank = rank;\n this.schema = schema;\n this.spec = spec;\n this.attrs = initAttrs(name, spec.attrs);\n this.excluded = null;\n let defaults = defaultAttrs(this.attrs);\n this.instance = defaults ? new Mark(this, defaults) : null;\n }\n /**\n Create a mark of this type. `attrs` may be `null` or an object\n containing only some of the mark's attributes. The others, if\n they have defaults, will be added.\n */\n create(attrs = null) {\n if (!attrs && this.instance)\n return this.instance;\n return new Mark(this, computeAttrs(this.attrs, attrs));\n }\n /**\n @internal\n */\n static compile(marks, schema) {\n let result = Object.create(null), rank = 0;\n marks.forEach((name, spec) => result[name] = new MarkType(name, rank++, schema, spec));\n return result;\n }\n /**\n When there is a mark of this type in the given set, a new set\n without it is returned. Otherwise, the input set is returned.\n */\n removeFromSet(set) {\n for (var i = 0; i < set.length; i++)\n if (set[i].type == this) {\n set = set.slice(0, i).concat(set.slice(i + 1));\n i--;\n }\n return set;\n }\n /**\n Tests whether there is a mark of this type in the given set.\n */\n isInSet(set) {\n for (let i = 0; i < set.length; i++)\n if (set[i].type == this)\n return set[i];\n }\n /**\n @internal\n */\n checkAttrs(attrs) {\n checkAttrs(this.attrs, attrs, \"mark\", this.name);\n }\n /**\n Queries whether a given mark type is\n [excluded](https://prosemirror.net/docs/ref/#model.MarkSpec.excludes) by this one.\n */\n excludes(other) {\n return this.excluded.indexOf(other) > -1;\n }\n}\n/**\nA document schema. Holds [node](https://prosemirror.net/docs/ref/#model.NodeType) and [mark\ntype](https://prosemirror.net/docs/ref/#model.MarkType) objects for the nodes and marks that may\noccur in conforming documents, and provides functionality for\ncreating and deserializing such documents.\n\nWhen given, the type parameters provide the names of the nodes and\nmarks in this schema.\n*/\nclass Schema {\n /**\n Construct a schema from a schema [specification](https://prosemirror.net/docs/ref/#model.SchemaSpec).\n */\n constructor(spec) {\n /**\n The [linebreak\n replacement](https://prosemirror.net/docs/ref/#model.NodeSpec.linebreakReplacement) node defined\n in this schema, if any.\n */\n this.linebreakReplacement = null;\n /**\n An object for storing whatever values modules may want to\n compute and cache per schema. (If you want to store something\n in it, try to use property names unlikely to clash.)\n */\n this.cached = Object.create(null);\n let instanceSpec = this.spec = {};\n for (let prop in spec)\n instanceSpec[prop] = spec[prop];\n instanceSpec.nodes = OrderedMap.from(spec.nodes),\n instanceSpec.marks = OrderedMap.from(spec.marks || {}),\n this.nodes = NodeType.compile(this.spec.nodes, this);\n this.marks = MarkType.compile(this.spec.marks, this);\n let contentExprCache = Object.create(null);\n for (let prop in this.nodes) {\n if (prop in this.marks)\n throw new RangeError(prop + \" can not be both a node and a mark\");\n let type = this.nodes[prop], contentExpr = type.spec.content || \"\", markExpr = type.spec.marks;\n type.contentMatch = contentExprCache[contentExpr] ||\n (contentExprCache[contentExpr] = ContentMatch.parse(contentExpr, this.nodes));\n type.inlineContent = type.contentMatch.inlineContent;\n if (type.spec.linebreakReplacement) {\n if (this.linebreakReplacement)\n throw new RangeError(\"Multiple linebreak nodes defined\");\n if (!type.isInline || !type.isLeaf)\n throw new RangeError(\"Linebreak replacement nodes must be inline leaf nodes\");\n this.linebreakReplacement = type;\n }\n type.markSet = markExpr == \"_\" ? null :\n markExpr ? gatherMarks(this, markExpr.split(\" \")) :\n markExpr == \"\" || !type.inlineContent ? [] : null;\n }\n for (let prop in this.marks) {\n let type = this.marks[prop], excl = type.spec.excludes;\n type.excluded = excl == null ? [type] : excl == \"\" ? [] : gatherMarks(this, excl.split(\" \"));\n }\n this.nodeFromJSON = json => Node.fromJSON(this, json);\n this.markFromJSON = json => Mark.fromJSON(this, json);\n this.topNodeType = this.nodes[this.spec.topNode || \"doc\"];\n this.cached.wrappings = Object.create(null);\n }\n /**\n Create a node in this schema. The `type` may be a string or a\n `NodeType` instance. Attributes will be extended with defaults,\n `content` may be a `Fragment`, `null`, a `Node`, or an array of\n nodes.\n */\n node(type, attrs = null, content, marks) {\n if (typeof type == \"string\")\n type = this.nodeType(type);\n else if (!(type instanceof NodeType))\n throw new RangeError(\"Invalid node type: \" + type);\n else if (type.schema != this)\n throw new RangeError(\"Node type from different schema used (\" + type.name + \")\");\n return type.createChecked(attrs, content, marks);\n }\n /**\n Create a text node in the schema. Empty text nodes are not\n allowed.\n */\n text(text, marks) {\n let type = this.nodes.text;\n return new TextNode(type, type.defaultAttrs, text, Mark.setFrom(marks));\n }\n /**\n Create a mark with the given type and attributes.\n */\n mark(type, attrs) {\n if (typeof type == \"string\")\n type = this.marks[type];\n return type.create(attrs);\n }\n /**\n @internal\n */\n nodeType(name) {\n let found = this.nodes[name];\n if (!found)\n throw new RangeError(\"Unknown node type: \" + name);\n return found;\n }\n}\nfunction gatherMarks(schema, marks) {\n let found = [];\n for (let i = 0; i < marks.length; i++) {\n let name = marks[i], mark = schema.marks[name], ok = mark;\n if (mark) {\n found.push(mark);\n }\n else {\n for (let prop in schema.marks) {\n let mark = schema.marks[prop];\n if (name == \"_\" || (mark.spec.group && mark.spec.group.split(\" \").indexOf(name) > -1))\n found.push(ok = mark);\n }\n }\n if (!ok)\n throw new SyntaxError(\"Unknown mark type: '\" + marks[i] + \"'\");\n }\n return found;\n}\n\nfunction isTagRule(rule) { return rule.tag != null; }\nfunction isStyleRule(rule) { return rule.style != null; }\n/**\nA DOM parser represents a strategy for parsing DOM content into a\nProseMirror document conforming to a given schema. Its behavior is\ndefined by an array of [rules](https://prosemirror.net/docs/ref/#model.ParseRule).\n*/\nclass DOMParser {\n /**\n Create a parser that targets the given schema, using the given\n parsing rules.\n */\n constructor(\n /**\n The schema into which the parser parses.\n */\n schema, \n /**\n The set of [parse rules](https://prosemirror.net/docs/ref/#model.ParseRule) that the parser\n uses, in order of precedence.\n */\n rules) {\n this.schema = schema;\n this.rules = rules;\n /**\n @internal\n */\n this.tags = [];\n /**\n @internal\n */\n this.styles = [];\n let matchedStyles = this.matchedStyles = [];\n rules.forEach(rule => {\n if (isTagRule(rule)) {\n this.tags.push(rule);\n }\n else if (isStyleRule(rule)) {\n let prop = /[^=]*/.exec(rule.style)[0];\n if (matchedStyles.indexOf(prop) < 0)\n matchedStyles.push(prop);\n this.styles.push(rule);\n }\n });\n // Only normalize list elements when lists in the schema can't directly contain themselves\n this.normalizeLists = !this.tags.some(r => {\n if (!/^(ul|ol)\\b/.test(r.tag) || !r.node)\n return false;\n let node = schema.nodes[r.node];\n return node.contentMatch.matchType(node);\n });\n }\n /**\n Parse a document from the content of a DOM node.\n */\n parse(dom, options = {}) {\n let context = new ParseContext(this, options, false);\n context.addAll(dom, Mark.none, options.from, options.to);\n return context.finish();\n }\n /**\n Parses the content of the given DOM node, like\n [`parse`](https://prosemirror.net/docs/ref/#model.DOMParser.parse), and takes the same set of\n options. But unlike that method, which produces a whole node,\n this one returns a slice that is open at the sides, meaning that\n the schema constraints aren't applied to the start of nodes to\n the left of the input and the end of nodes at the end.\n */\n parseSlice(dom, options = {}) {\n let context = new ParseContext(this, options, true);\n context.addAll(dom, Mark.none, options.from, options.to);\n return Slice.maxOpen(context.finish());\n }\n /**\n @internal\n */\n matchTag(dom, context, after) {\n for (let i = after ? this.tags.indexOf(after) + 1 : 0; i < this.tags.length; i++) {\n let rule = this.tags[i];\n if (matches(dom, rule.tag) &&\n (rule.namespace === undefined || dom.namespaceURI == rule.namespace) &&\n (!rule.context || context.matchesContext(rule.context))) {\n if (rule.getAttrs) {\n let result = rule.getAttrs(dom);\n if (result === false)\n continue;\n rule.attrs = result || undefined;\n }\n return rule;\n }\n }\n }\n /**\n @internal\n */\n matchStyle(prop, value, context, after) {\n for (let i = after ? this.styles.indexOf(after) + 1 : 0; i < this.styles.length; i++) {\n let rule = this.styles[i], style = rule.style;\n if (style.indexOf(prop) != 0 ||\n rule.context && !context.matchesContext(rule.context) ||\n // Test that the style string either precisely matches the prop,\n // or has an '=' sign after the prop, followed by the given\n // value.\n style.length > prop.length &&\n (style.charCodeAt(prop.length) != 61 || style.slice(prop.length + 1) != value))\n continue;\n if (rule.getAttrs) {\n let result = rule.getAttrs(value);\n if (result === false)\n continue;\n rule.attrs = result || undefined;\n }\n return rule;\n }\n }\n /**\n @internal\n */\n static schemaRules(schema) {\n let result = [];\n function insert(rule) {\n let priority = rule.priority == null ? 50 : rule.priority, i = 0;\n for (; i < result.length; i++) {\n let next = result[i], nextPriority = next.priority == null ? 50 : next.priority;\n if (nextPriority < priority)\n break;\n }\n result.splice(i, 0, rule);\n }\n for (let name in schema.marks) {\n let rules = schema.marks[name].spec.parseDOM;\n if (rules)\n rules.forEach(rule => {\n insert(rule = copy(rule));\n if (!(rule.mark || rule.ignore || rule.clearMark))\n rule.mark = name;\n });\n }\n for (let name in schema.nodes) {\n let rules = schema.nodes[name].spec.parseDOM;\n if (rules)\n rules.forEach(rule => {\n insert(rule = copy(rule));\n if (!(rule.node || rule.ignore || rule.mark))\n rule.node = name;\n });\n }\n return result;\n }\n /**\n Construct a DOM parser using the parsing rules listed in a\n schema's [node specs](https://prosemirror.net/docs/ref/#model.NodeSpec.parseDOM), reordered by\n [priority](https://prosemirror.net/docs/ref/#model.GenericParseRule.priority).\n */\n static fromSchema(schema) {\n return schema.cached.domParser ||\n (schema.cached.domParser = new DOMParser(schema, DOMParser.schemaRules(schema)));\n }\n}\nconst blockTags = {\n address: true, article: true, aside: true, blockquote: true, canvas: true,\n dd: true, div: true, dl: true, fieldset: true, figcaption: true, figure: true,\n footer: true, form: true, h1: true, h2: true, h3: true, h4: true, h5: true,\n h6: true, header: true, hgroup: true, hr: true, li: true, noscript: true, ol: true,\n output: true, p: true, pre: true, section: true, table: true, tfoot: true, ul: true\n};\nconst ignoreTags = {\n head: true, noscript: true, object: true, script: true, style: true, title: true\n};\nconst listTags = { ol: true, ul: true };\n// Using a bitfield for node context options\nconst OPT_PRESERVE_WS = 1, OPT_PRESERVE_WS_FULL = 2, OPT_OPEN_LEFT = 4;\nfunction wsOptionsFor(type, preserveWhitespace, base) {\n if (preserveWhitespace != null)\n return (preserveWhitespace ? OPT_PRESERVE_WS : 0) |\n (preserveWhitespace === \"full\" ? OPT_PRESERVE_WS_FULL : 0);\n return type && type.whitespace == \"pre\" ? OPT_PRESERVE_WS | OPT_PRESERVE_WS_FULL : base & ~OPT_OPEN_LEFT;\n}\nclass NodeContext {\n constructor(type, attrs, marks, solid, match, options) {\n this.type = type;\n this.attrs = attrs;\n this.marks = marks;\n this.solid = solid;\n this.options = options;\n this.content = [];\n // Marks applied to the node's children\n this.activeMarks = Mark.none;\n this.match = match || (options & OPT_OPEN_LEFT ? null : type.contentMatch);\n }\n findWrapping(node) {\n if (!this.match) {\n if (!this.type)\n return [];\n let fill = this.type.contentMatch.fillBefore(Fragment.from(node));\n if (fill) {\n this.match = this.type.contentMatch.matchFragment(fill);\n }\n else {\n let start = this.type.contentMatch, wrap;\n if (wrap = start.findWrapping(node.type)) {\n this.match = start;\n return wrap;\n }\n else {\n return null;\n }\n }\n }\n return this.match.findWrapping(node.type);\n }\n finish(openEnd) {\n if (!(this.options & OPT_PRESERVE_WS)) { // Strip trailing whitespace\n let last = this.content[this.content.length - 1], m;\n if (last && last.isText && (m = /[ \\t\\r\\n\\u000c]+$/.exec(last.text))) {\n let text = last;\n if (last.text.length == m[0].length)\n this.content.pop();\n else\n this.content[this.content.length - 1] = text.withText(text.text.slice(0, text.text.length - m[0].length));\n }\n }\n let content = Fragment.from(this.content);\n if (!openEnd && this.match)\n content = content.append(this.match.fillBefore(Fragment.empty, true));\n return this.type ? this.type.create(this.attrs, content, this.marks) : content;\n }\n inlineContext(node) {\n if (this.type)\n return this.type.inlineContent;\n if (this.content.length)\n return this.content[0].isInline;\n return node.parentNode && !blockTags.hasOwnProperty(node.parentNode.nodeName.toLowerCase());\n }\n}\nclass ParseContext {\n constructor(\n // The parser we are using.\n parser, \n // The options passed to this parse.\n options, isOpen) {\n this.parser = parser;\n this.options = options;\n this.isOpen = isOpen;\n this.open = 0;\n this.localPreserveWS = false;\n let topNode = options.topNode, topContext;\n let topOptions = wsOptionsFor(null, options.preserveWhitespace, 0) | (isOpen ? OPT_OPEN_LEFT : 0);\n if (topNode)\n topContext = new NodeContext(topNode.type, topNode.attrs, Mark.none, true, options.topMatch || topNode.type.contentMatch, topOptions);\n else if (isOpen)\n topContext = new NodeContext(null, null, Mark.none, true, null, topOptions);\n else\n topContext = new NodeContext(parser.schema.topNodeType, null, Mark.none, true, null, topOptions);\n this.nodes = [topContext];\n this.find = options.findPositions;\n this.needsBlock = false;\n }\n get top() {\n return this.nodes[this.open];\n }\n // Add a DOM node to the content. Text is inserted as text node,\n // otherwise, the node is passed to `addElement` or, if it has a\n // `style` attribute, `addElementWithStyles`.\n addDOM(dom, marks) {\n if (dom.nodeType == 3)\n this.addTextNode(dom, marks);\n else if (dom.nodeType == 1)\n this.addElement(dom, marks);\n }\n addTextNode(dom, marks) {\n let value = dom.nodeValue;\n let top = this.top, preserveWS = (top.options & OPT_PRESERVE_WS_FULL) ? \"full\"\n : this.localPreserveWS || (top.options & OPT_PRESERVE_WS) > 0;\n let { schema } = this.parser;\n if (preserveWS === \"full\" ||\n top.inlineContext(dom) ||\n /[^ \\t\\r\\n\\u000c]/.test(value)) {\n if (!preserveWS) {\n value = value.replace(/[ \\t\\r\\n\\u000c]+/g, \" \");\n // If this starts with whitespace, and there is no node before it, or\n // a hard break, or a text node that ends with whitespace, strip the\n // leading space.\n if (/^[ \\t\\r\\n\\u000c]/.test(value) && this.open == this.nodes.length - 1) {\n let nodeBefore = top.content[top.content.length - 1];\n let domNodeBefore = dom.previousSibling;\n if (!nodeBefore ||\n (domNodeBefore && domNodeBefore.nodeName == 'BR') ||\n (nodeBefore.isText && /[ \\t\\r\\n\\u000c]$/.test(nodeBefore.text)))\n value = value.slice(1);\n }\n }\n else if (preserveWS === \"full\") {\n value = value.replace(/\\r\\n?/g, \"\\n\");\n }\n else if (schema.linebreakReplacement && /[\\r\\n]/.test(value) && this.top.findWrapping(schema.linebreakReplacement.create())) {\n let lines = value.split(/\\r?\\n|\\r/);\n for (let i = 0; i < lines.length; i++) {\n if (i)\n this.insertNode(schema.linebreakReplacement.create(), marks, true);\n if (lines[i])\n this.insertNode(schema.text(lines[i]), marks, !/\\S/.test(lines[i]));\n }\n value = \"\";\n }\n else {\n value = value.replace(/\\r?\\n|\\r/g, \" \");\n }\n if (value)\n this.insertNode(schema.text(value), marks, !/\\S/.test(value));\n this.findInText(dom);\n }\n else {\n this.findInside(dom);\n }\n }\n // Try to find a handler for the given tag and use that to parse. If\n // none is found, the element's content nodes are added directly.\n addElement(dom, marks, matchAfter) {\n let outerWS = this.localPreserveWS, top = this.top;\n if (dom.tagName == \"PRE\" || /pre/.test(dom.style && dom.style.whiteSpace))\n this.localPreserveWS = true;\n let name = dom.nodeName.toLowerCase(), ruleID;\n if (listTags.hasOwnProperty(name) && this.parser.normalizeLists)\n normalizeList(dom);\n let rule = (this.options.ruleFromNode && this.options.ruleFromNode(dom)) ||\n (ruleID = this.parser.matchTag(dom, this, matchAfter));\n out: if (rule ? rule.ignore : ignoreTags.hasOwnProperty(name)) {\n this.findInside(dom);\n this.ignoreFallback(dom, marks);\n }\n else if (!rule || rule.skip || rule.closeParent) {\n if (rule && rule.closeParent)\n this.open = Math.max(0, this.open - 1);\n else if (rule && rule.skip.nodeType)\n dom = rule.skip;\n let sync, oldNeedsBlock = this.needsBlock;\n if (blockTags.hasOwnProperty(name)) {\n if (top.content.length && top.content[0].isInline && this.open) {\n this.open--;\n top = this.top;\n }\n sync = true;\n if (!top.type)\n this.needsBlock = true;\n }\n else if (!dom.firstChild) {\n this.leafFallback(dom, marks);\n break out;\n }\n let innerMarks = rule && rule.skip ? marks : this.readStyles(dom, marks);\n if (innerMarks)\n this.addAll(dom, innerMarks);\n if (sync)\n this.sync(top);\n this.needsBlock = oldNeedsBlock;\n }\n else {\n let innerMarks = this.readStyles(dom, marks);\n if (innerMarks)\n this.addElementByRule(dom, rule, innerMarks, rule.consuming === false ? ruleID : undefined);\n }\n this.localPreserveWS = outerWS;\n }\n // Called for leaf DOM nodes that would otherwise be ignored\n leafFallback(dom, marks) {\n if (dom.nodeName == \"BR\" && this.top.type && this.top.type.inlineContent)\n this.addTextNode(dom.ownerDocument.createTextNode(\"\\n\"), marks);\n }\n // Called for ignored nodes\n ignoreFallback(dom, marks) {\n // Ignored BR nodes should at least create an inline context\n if (dom.nodeName == \"BR\" && (!this.top.type || !this.top.type.inlineContent))\n this.findPlace(this.parser.schema.text(\"-\"), marks, true);\n }\n // Run any style parser associated with the node's styles. Either\n // return an updated array of marks, or null to indicate some of the\n // styles had a rule with `ignore` set.\n readStyles(dom, marks) {\n let styles = dom.style;\n // Because many properties will only show up in 'normalized' form\n // in `style.item` (i.e. text-decoration becomes\n // text-decoration-line, text-decoration-color, etc), we directly\n // query the styles mentioned in our rules instead of iterating\n // over the items.\n if (styles && styles.length)\n for (let i = 0; i < this.parser.matchedStyles.length; i++) {\n let name = this.parser.matchedStyles[i], value = styles.getPropertyValue(name);\n if (value)\n for (let after = undefined;;) {\n let rule = this.parser.matchStyle(name, value, this, after);\n if (!rule)\n break;\n if (rule.ignore)\n return null;\n if (rule.clearMark)\n marks = marks.filter(m => !rule.clearMark(m));\n else\n marks = marks.concat(this.parser.schema.marks[rule.mark].create(rule.attrs));\n if (rule.consuming === false)\n after = rule;\n else\n break;\n }\n }\n return marks;\n }\n // Look up a handler for the given node. If none are found, return\n // false. Otherwise, apply it, use its return value to drive the way\n // the node's content is wrapped, and return true.\n addElementByRule(dom, rule, marks, continueAfter) {\n let sync, nodeType;\n if (rule.node) {\n nodeType = this.parser.schema.nodes[rule.node];\n if (!nodeType.isLeaf) {\n let inner = this.enter(nodeType, rule.attrs || null, marks, rule.preserveWhitespace);\n if (inner) {\n sync = true;\n marks = inner;\n }\n }\n else if (!this.insertNode(nodeType.create(rule.attrs), marks, dom.nodeName == \"BR\")) {\n this.leafFallback(dom, marks);\n }\n }\n else {\n let markType = this.parser.schema.marks[rule.mark];\n marks = marks.concat(markType.create(rule.attrs));\n }\n let startIn = this.top;\n if (nodeType && nodeType.isLeaf) {\n this.findInside(dom);\n }\n else if (continueAfter) {\n this.addElement(dom, marks, continueAfter);\n }\n else if (rule.getContent) {\n this.findInside(dom);\n rule.getContent(dom, this.parser.schema).forEach(node => this.insertNode(node, marks, false));\n }\n else {\n let contentDOM = dom;\n if (typeof rule.contentElement == \"string\")\n contentDOM = dom.querySelector(rule.contentElement);\n else if (typeof rule.contentElement == \"function\")\n contentDOM = rule.contentElement(dom);\n else if (rule.contentElement)\n contentDOM = rule.contentElement;\n this.findAround(dom, contentDOM, true);\n this.addAll(contentDOM, marks);\n this.findAround(dom, contentDOM, false);\n }\n if (sync && this.sync(startIn))\n this.open--;\n }\n // Add all child nodes between `startIndex` and `endIndex` (or the\n // whole node, if not given). If `sync` is passed, use it to\n // synchronize after every block element.\n addAll(parent, marks, startIndex, endIndex) {\n let index = startIndex || 0;\n for (let dom = startIndex ? parent.childNodes[startIndex] : parent.firstChild, end = endIndex == null ? null : parent.childNodes[endIndex]; dom != end; dom = dom.nextSibling, ++index) {\n this.findAtPoint(parent, index);\n this.addDOM(dom, marks);\n }\n this.findAtPoint(parent, index);\n }\n // Try to find a way to fit the given node type into the current\n // context. May add intermediate wrappers and/or leave non-solid\n // nodes that we're in.\n findPlace(node, marks, cautious) {\n let route, sync;\n for (let depth = this.open, penalty = 0; depth >= 0; depth--) {\n let cx = this.nodes[depth];\n let found = cx.findWrapping(node);\n if (found && (!route || route.length > found.length + penalty)) {\n route = found;\n sync = cx;\n if (!found.length)\n break;\n }\n if (cx.solid) {\n if (cautious)\n break;\n penalty += 2;\n }\n }\n if (!route)\n return null;\n this.sync(sync);\n for (let i = 0; i < route.length; i++)\n marks = this.enterInner(route[i], null, marks, false);\n return marks;\n }\n // Try to insert the given node, adjusting the context when needed.\n insertNode(node, marks, cautious) {\n if (node.isInline && this.needsBlock && !this.top.type) {\n let block = this.textblockFromContext();\n if (block)\n marks = this.enterInner(block, null, marks);\n }\n let innerMarks = this.findPlace(node, marks, cautious);\n if (innerMarks) {\n this.closeExtra();\n let top = this.top;\n if (top.match)\n top.match = top.match.matchType(node.type);\n let nodeMarks = Mark.none;\n for (let m of innerMarks.concat(node.marks))\n if (top.type ? top.type.allowsMarkType(m.type) : markMayApply(m.type, node.type))\n nodeMarks = m.addToSet(nodeMarks);\n top.content.push(node.mark(nodeMarks));\n return true;\n }\n return false;\n }\n // Try to start a node of the given type, adjusting the context when\n // necessary.\n enter(type, attrs, marks, preserveWS) {\n let innerMarks = this.findPlace(type.create(attrs), marks, false);\n if (innerMarks)\n innerMarks = this.enterInner(type, attrs, marks, true, preserveWS);\n return innerMarks;\n }\n // Open a node of the given type\n enterInner(type, attrs, marks, solid = false, preserveWS) {\n this.closeExtra();\n let top = this.top;\n top.match = top.match && top.match.matchType(type);\n let options = wsOptionsFor(type, preserveWS, top.options);\n if ((top.options & OPT_OPEN_LEFT) && top.content.length == 0)\n options |= OPT_OPEN_LEFT;\n let applyMarks = Mark.none;\n marks = marks.filter(m => {\n if (top.type ? top.type.allowsMarkType(m.type) : markMayApply(m.type, type)) {\n applyMarks = m.addToSet(applyMarks);\n return false;\n }\n return true;\n });\n this.nodes.push(new NodeContext(type, attrs, applyMarks, solid, null, options));\n this.open++;\n return marks;\n }\n // Make sure all nodes above this.open are finished and added to\n // their parents\n closeExtra(openEnd = false) {\n let i = this.nodes.length - 1;\n if (i > this.open) {\n for (; i > this.open; i--)\n this.nodes[i - 1].content.push(this.nodes[i].finish(openEnd));\n this.nodes.length = this.open + 1;\n }\n }\n finish() {\n this.open = 0;\n this.closeExtra(this.isOpen);\n return this.nodes[0].finish(!!(this.isOpen || this.options.topOpen));\n }\n sync(to) {\n for (let i = this.open; i >= 0; i--) {\n if (this.nodes[i] == to) {\n this.open = i;\n return true;\n }\n else if (this.localPreserveWS) {\n this.nodes[i].options |= OPT_PRESERVE_WS;\n }\n }\n return false;\n }\n get currentPos() {\n this.closeExtra();\n let pos = 0;\n for (let i = this.open; i >= 0; i--) {\n let content = this.nodes[i].content;\n for (let j = content.length - 1; j >= 0; j--)\n pos += content[j].nodeSize;\n if (i)\n pos++;\n }\n return pos;\n }\n findAtPoint(parent, offset) {\n if (this.find)\n for (let i = 0; i < this.find.length; i++) {\n if (this.find[i].node == parent && this.find[i].offset == offset)\n this.find[i].pos = this.currentPos;\n }\n }\n findInside(parent) {\n if (this.find)\n for (let i = 0; i < this.find.length; i++) {\n if (this.find[i].pos == null && parent.nodeType == 1 && parent.contains(this.find[i].node))\n this.find[i].pos = this.currentPos;\n }\n }\n findAround(parent, content, before) {\n if (parent != content && this.find)\n for (let i = 0; i < this.find.length; i++) {\n if (this.find[i].pos == null && parent.nodeType == 1 && parent.contains(this.find[i].node)) {\n let pos = content.compareDocumentPosition(this.find[i].node);\n if (pos & (before ? 2 : 4))\n this.find[i].pos = this.currentPos;\n }\n }\n }\n findInText(textNode) {\n if (this.find)\n for (let i = 0; i < this.find.length; i++) {\n if (this.find[i].node == textNode)\n this.find[i].pos = this.currentPos - (textNode.nodeValue.length - this.find[i].offset);\n }\n }\n // Determines whether the given context string matches this context.\n matchesContext(context) {\n if (context.indexOf(\"|\") > -1)\n return context.split(/\\s*\\|\\s*/).some(this.matchesContext, this);\n let parts = context.split(\"/\");\n let option = this.options.context;\n let useRoot = !this.isOpen && (!option || option.parent.type == this.nodes[0].type);\n let minDepth = -(option ? option.depth + 1 : 0) + (useRoot ? 0 : 1);\n let match = (i, depth) => {\n for (; i >= 0; i--) {\n let part = parts[i];\n if (part == \"\") {\n if (i == parts.length - 1 || i == 0)\n continue;\n for (; depth >= minDepth; depth--)\n if (match(i - 1, depth))\n return true;\n return false;\n }\n else {\n let next = depth > 0 || (depth == 0 && useRoot) ? this.nodes[depth].type\n : option && depth >= minDepth ? option.node(depth - minDepth).type\n : null;\n if (!next || (next.name != part && !next.isInGroup(part)))\n return false;\n depth--;\n }\n }\n return true;\n };\n return match(parts.length - 1, this.open);\n }\n textblockFromContext() {\n let $context = this.options.context;\n if ($context)\n for (let d = $context.depth; d >= 0; d--) {\n let deflt = $context.node(d).contentMatchAt($context.indexAfter(d)).defaultType;\n if (deflt && deflt.isTextblock && deflt.defaultAttrs)\n return deflt;\n }\n for (let name in this.parser.schema.nodes) {\n let type = this.parser.schema.nodes[name];\n if (type.isTextblock && type.defaultAttrs)\n return type;\n }\n }\n}\n// Kludge to work around directly nested list nodes produced by some\n// tools and allowed by browsers to mean that the nested list is\n// actually part of the list item above it.\nfunction normalizeList(dom) {\n for (let child = dom.firstChild, prevItem = null; child; child = child.nextSibling) {\n let name = child.nodeType == 1 ? child.nodeName.toLowerCase() : null;\n if (name && listTags.hasOwnProperty(name) && prevItem) {\n prevItem.appendChild(child);\n child = prevItem;\n }\n else if (name == \"li\") {\n prevItem = child;\n }\n else if (name) {\n prevItem = null;\n }\n }\n}\n// Apply a CSS selector.\nfunction matches(dom, selector) {\n return (dom.matches || dom.msMatchesSelector || dom.webkitMatchesSelector || dom.mozMatchesSelector).call(dom, selector);\n}\nfunction copy(obj) {\n let copy = {};\n for (let prop in obj)\n copy[prop] = obj[prop];\n return copy;\n}\n// Used when finding a mark at the top level of a fragment parse.\n// Checks whether it would be reasonable to apply a given mark type to\n// a given node, by looking at the way the mark occurs in the schema.\nfunction markMayApply(markType, nodeType) {\n let nodes = nodeType.schema.nodes;\n for (let name in nodes) {\n let parent = nodes[name];\n if (!parent.allowsMarkType(markType))\n continue;\n let seen = [], scan = (match) => {\n seen.push(match);\n for (let i = 0; i < match.edgeCount; i++) {\n let { type, next } = match.edge(i);\n if (type == nodeType)\n return true;\n if (seen.indexOf(next) < 0 && scan(next))\n return true;\n }\n };\n if (scan(parent.contentMatch))\n return true;\n }\n}\n\n/**\nA DOM serializer knows how to convert ProseMirror nodes and\nmarks of various types to DOM nodes.\n*/\nclass DOMSerializer {\n /**\n Create a serializer. `nodes` should map node names to functions\n that take a node and return a description of the corresponding\n DOM. `marks` does the same for mark names, but also gets an\n argument that tells it whether the mark's content is block or\n inline content (for typical use, it'll always be inline). A mark\n serializer may be `null` to indicate that marks of that type\n should not be serialized.\n */\n constructor(\n /**\n The node serialization functions.\n */\n nodes, \n /**\n The mark serialization functions.\n */\n marks) {\n this.nodes = nodes;\n this.marks = marks;\n }\n /**\n Serialize the content of this fragment to a DOM fragment. When\n not in the browser, the `document` option, containing a DOM\n document, should be passed so that the serializer can create\n nodes.\n */\n serializeFragment(fragment, options = {}, target) {\n if (!target)\n target = doc(options).createDocumentFragment();\n let top = target, active = [];\n fragment.forEach(node => {\n if (active.length || node.marks.length) {\n let keep = 0, rendered = 0;\n while (keep < active.length && rendered < node.marks.length) {\n let next = node.marks[rendered];\n if (!this.marks[next.type.name]) {\n rendered++;\n continue;\n }\n if (!next.eq(active[keep][0]) || next.type.spec.spanning === false)\n break;\n keep++;\n rendered++;\n }\n while (keep < active.length)\n top = active.pop()[1];\n while (rendered < node.marks.length) {\n let add = node.marks[rendered++];\n let markDOM = this.serializeMark(add, node.isInline, options);\n if (markDOM) {\n active.push([add, top]);\n top.appendChild(markDOM.dom);\n top = markDOM.contentDOM || markDOM.dom;\n }\n }\n }\n top.appendChild(this.serializeNodeInner(node, options));\n });\n return target;\n }\n /**\n @internal\n */\n serializeNodeInner(node, options) {\n let { dom, contentDOM } = renderSpec(doc(options), this.nodes[node.type.name](node), null, node.attrs);\n if (contentDOM) {\n if (node.isLeaf)\n throw new RangeError(\"Content hole not allowed in a leaf node spec\");\n this.serializeFragment(node.content, options, contentDOM);\n }\n return dom;\n }\n /**\n Serialize this node to a DOM node. This can be useful when you\n need to serialize a part of a document, as opposed to the whole\n document. To serialize a whole document, use\n [`serializeFragment`](https://prosemirror.net/docs/ref/#model.DOMSerializer.serializeFragment) on\n its [content](https://prosemirror.net/docs/ref/#model.Node.content).\n */\n serializeNode(node, options = {}) {\n let dom = this.serializeNodeInner(node, options);\n for (let i = node.marks.length - 1; i >= 0; i--) {\n let wrap = this.serializeMark(node.marks[i], node.isInline, options);\n if (wrap) {\n (wrap.contentDOM || wrap.dom).appendChild(dom);\n dom = wrap.dom;\n }\n }\n return dom;\n }\n /**\n @internal\n */\n serializeMark(mark, inline, options = {}) {\n let toDOM = this.marks[mark.type.name];\n return toDOM && renderSpec(doc(options), toDOM(mark, inline), null, mark.attrs);\n }\n static renderSpec(doc, structure, xmlNS = null, blockArraysIn) {\n return renderSpec(doc, structure, xmlNS, blockArraysIn);\n }\n /**\n Build a serializer using the [`toDOM`](https://prosemirror.net/docs/ref/#model.NodeSpec.toDOM)\n properties in a schema's node and mark specs.\n */\n static fromSchema(schema) {\n return schema.cached.domSerializer ||\n (schema.cached.domSerializer = new DOMSerializer(this.nodesFromSchema(schema), this.marksFromSchema(schema)));\n }\n /**\n Gather the serializers in a schema's node specs into an object.\n This can be useful as a base to build a custom serializer from.\n */\n static nodesFromSchema(schema) {\n let result = gatherToDOM(schema.nodes);\n if (!result.text)\n result.text = node => node.text;\n return result;\n }\n /**\n Gather the serializers in a schema's mark specs into an object.\n */\n static marksFromSchema(schema) {\n return gatherToDOM(schema.marks);\n }\n}\nfunction gatherToDOM(obj) {\n let result = {};\n for (let name in obj) {\n let toDOM = obj[name].spec.toDOM;\n if (toDOM)\n result[name] = toDOM;\n }\n return result;\n}\nfunction doc(options) {\n return options.document || window.document;\n}\nconst suspiciousAttributeCache = new WeakMap();\nfunction suspiciousAttributes(attrs) {\n let value = suspiciousAttributeCache.get(attrs);\n if (value === undefined)\n suspiciousAttributeCache.set(attrs, value = suspiciousAttributesInner(attrs));\n return value;\n}\nfunction suspiciousAttributesInner(attrs) {\n let result = null;\n function scan(value) {\n if (value && typeof value == \"object\") {\n if (Array.isArray(value)) {\n if (typeof value[0] == \"string\") {\n if (!result)\n result = [];\n result.push(value);\n }\n else {\n for (let i = 0; i < value.length; i++)\n scan(value[i]);\n }\n }\n else {\n for (let prop in value)\n scan(value[prop]);\n }\n }\n }\n scan(attrs);\n return result;\n}\nfunction renderSpec(doc, structure, xmlNS, blockArraysIn) {\n if (typeof structure == \"string\")\n return { dom: doc.createTextNode(structure) };\n if (structure.nodeType != null)\n return { dom: structure };\n if (structure.dom && structure.dom.nodeType != null)\n return structure;\n let tagName = structure[0], suspicious;\n if (typeof tagName != \"string\")\n throw new RangeError(\"Invalid array passed to renderSpec\");\n if (blockArraysIn && (suspicious = suspiciousAttributes(blockArraysIn)) &&\n suspicious.indexOf(structure) > -1)\n throw new RangeError(\"Using an array from an attribute object as a DOM spec. This may be an attempted cross site scripting attack.\");\n let space = tagName.indexOf(\" \");\n if (space > 0) {\n xmlNS = tagName.slice(0, space);\n tagName = tagName.slice(space + 1);\n }\n let contentDOM;\n let dom = (xmlNS ? doc.createElementNS(xmlNS, tagName) : doc.createElement(tagName));\n let attrs = structure[1], start = 1;\n if (attrs && typeof attrs == \"object\" && attrs.nodeType == null && !Array.isArray(attrs)) {\n start = 2;\n for (let name in attrs)\n if (attrs[name] != null) {\n let space = name.indexOf(\" \");\n if (space > 0)\n dom.setAttributeNS(name.slice(0, space), name.slice(space + 1), attrs[name]);\n else if (name == \"style\" && dom.style)\n dom.style.cssText = attrs[name];\n else\n dom.setAttribute(name, attrs[name]);\n }\n }\n for (let i = start; i < structure.length; i++) {\n let child = structure[i];\n if (child === 0) {\n if (i < structure.length - 1 || i > start)\n throw new RangeError(\"Content hole must be the only child of its parent node\");\n return { dom, contentDOM: dom };\n }\n else {\n let { dom: inner, contentDOM: innerContent } = renderSpec(doc, child, xmlNS, blockArraysIn);\n dom.appendChild(inner);\n if (innerContent) {\n if (contentDOM)\n throw new RangeError(\"Multiple content holes\");\n contentDOM = innerContent;\n }\n }\n }\n return { dom, contentDOM };\n}\n\nexport { ContentMatch, DOMParser, DOMSerializer, Fragment, Mark, MarkType, Node, NodeRange, NodeType, ReplaceError, ResolvedPos, Schema, Slice };\n","// Utilities\n//\n\nimport * as mdurl from 'mdurl'\nimport * as ucmicro from 'uc.micro'\nimport { decodeHTML } from 'entities'\n\nfunction _class (obj) { return Object.prototype.toString.call(obj) }\n\nfunction isString (obj) { return _class(obj) === '[object String]' }\n\nconst _hasOwnProperty = Object.prototype.hasOwnProperty\n\nfunction has (object, key) {\n return _hasOwnProperty.call(object, key)\n}\n\n// Merge objects\n//\nfunction assign (obj /* from1, from2, from3, ... */) {\n const sources = Array.prototype.slice.call(arguments, 1)\n\n sources.forEach(function (source) {\n if (!source) { return }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be object')\n }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key]\n })\n })\n\n return obj\n}\n\n// Remove element from array and put another array at those position.\n// Useful for some operations with tokens\nfunction arrayReplaceAt (src, pos, newElements) {\n return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1))\n}\n\nfunction isValidEntityCode (c) {\n /* eslint no-bitwise:0 */\n // broken sequence\n if (c >= 0xD800 && c <= 0xDFFF) { return false }\n // never used\n if (c >= 0xFDD0 && c <= 0xFDEF) { return false }\n if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { return false }\n // control codes\n if (c >= 0x00 && c <= 0x08) { return false }\n if (c === 0x0B) { return false }\n if (c >= 0x0E && c <= 0x1F) { return false }\n if (c >= 0x7F && c <= 0x9F) { return false }\n // out of range\n if (c > 0x10FFFF) { return false }\n return true\n}\n\nfunction fromCodePoint (c) {\n /* eslint no-bitwise:0 */\n if (c > 0xffff) {\n c -= 0x10000\n const surrogate1 = 0xd800 + (c >> 10)\n const surrogate2 = 0xdc00 + (c & 0x3ff)\n\n return String.fromCharCode(surrogate1, surrogate2)\n }\n return String.fromCharCode(c)\n}\n\nconst UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_`{|}~])/g\nconst ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi\nconst UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi')\n\nconst DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i\n\nfunction replaceEntityPattern (match, name) {\n if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n const code = name[1].toLowerCase() === 'x'\n ? parseInt(name.slice(2), 16)\n : parseInt(name.slice(1), 10)\n\n if (isValidEntityCode(code)) {\n return fromCodePoint(code)\n }\n\n return match\n }\n\n const decoded = decodeHTML(match)\n if (decoded !== match) {\n return decoded\n }\n\n return match\n}\n\n/* function replaceEntities(str) {\n if (str.indexOf('&') < 0) { return str; }\n\n return str.replace(ENTITY_RE, replaceEntityPattern);\n} */\n\nfunction unescapeMd (str) {\n if (str.indexOf('\\\\') < 0) { return str }\n return str.replace(UNESCAPE_MD_RE, '$1')\n}\n\nfunction unescapeAll (str) {\n if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) { return str }\n\n return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {\n if (escaped) { return escaped }\n return replaceEntityPattern(match, entity)\n })\n}\n\nconst HTML_ESCAPE_TEST_RE = /[&<>\"]/\nconst HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g\nconst HTML_REPLACEMENTS = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"'\n}\n\nfunction replaceUnsafeChar (ch) {\n return HTML_REPLACEMENTS[ch]\n}\n\nfunction escapeHtml (str) {\n if (HTML_ESCAPE_TEST_RE.test(str)) {\n return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar)\n }\n return str\n}\n\nconst REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g\n\nfunction escapeRE (str) {\n return str.replace(REGEXP_ESCAPE_RE, '\\\\$&')\n}\n\nfunction isSpace (code) {\n switch (code) {\n case 0x09:\n case 0x20:\n return true\n }\n return false\n}\n\n// Zs (unicode class) || [\\t\\f\\v\\r\\n]\nfunction isWhiteSpace (code) {\n if (code >= 0x2000 && code <= 0x200A) { return true }\n switch (code) {\n case 0x09: // \\t\n case 0x0A: // \\n\n case 0x0B: // \\v\n case 0x0C: // \\f\n case 0x0D: // \\r\n case 0x20:\n case 0xA0:\n case 0x1680:\n case 0x202F:\n case 0x205F:\n case 0x3000:\n return true\n }\n return false\n}\n\n/* eslint-disable max-len */\n\n// Currently without astral characters support.\nfunction isPunctChar (ch) {\n return ucmicro.P.test(ch) || ucmicro.S.test(ch)\n}\n\n// Markdown ASCII punctuation characters.\n//\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\n//\n// Don't confuse with unicode punctuation !!! It lacks some chars in ascii range.\n//\nfunction isMdAsciiPunct (ch) {\n switch (ch) {\n case 0x21/* ! */:\n case 0x22/* \" */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x27/* ' */:\n case 0x28/* ( */:\n case 0x29/* ) */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2C/* , */:\n case 0x2D/* - */:\n case 0x2E/* . */:\n case 0x2F/* / */:\n case 0x3A/* : */:\n case 0x3B/* ; */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x3F/* ? */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7C/* | */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true\n default:\n return false\n }\n}\n\n// Hepler to unify [reference labels].\n//\nfunction normalizeReference (str) {\n // Trim and collapse whitespace\n //\n str = str.trim().replace(/\\s+/g, ' ')\n\n // In node v10 'ẞ'.toLowerCase() === 'Ṿ', which is presumed to be a bug\n // fixed in v12 (couldn't find any details).\n //\n // So treat this one as a special case\n // (remove this when node v10 is no longer supported).\n //\n if ('ẞ'.toLowerCase() === 'Ṿ') {\n str = str.replace(/ẞ/g, 'ß')\n }\n\n // .toLowerCase().toUpperCase() should get rid of all differences\n // between letter variants.\n //\n // Simple .toLowerCase() doesn't normalize 125 code points correctly,\n // and .toUpperCase doesn't normalize 6 of them (list of exceptions:\n // İ, ϴ, ẞ, Ω, K, Å - those are already uppercased, but have differently\n // uppercased versions).\n //\n // Here's an example showing how it happens. Lets take greek letter omega:\n // uppercase U+0398 (Θ), U+03f4 (ϴ) and lowercase U+03b8 (θ), U+03d1 (ϑ)\n //\n // Unicode entries:\n // 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;\n // 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398\n // 03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;\n //\n // Case-insensitive comparison should treat all of them as equivalent.\n //\n // But .toLowerCase() doesn't change ϑ (it's already lowercase),\n // and .toUpperCase() doesn't change ϴ (already uppercase).\n //\n // Applying first lower then upper case normalizes any character:\n // '\\u0398\\u03f4\\u03b8\\u03d1'.toLowerCase().toUpperCase() === '\\u0398\\u0398\\u0398\\u0398'\n //\n // Note: this is equivalent to unicode case folding; unicode normalization\n // is a different step that is not required here.\n //\n // Final result should be uppercased, because it's later stored in an object\n // (this avoid a conflict with Object.prototype members,\n // most notably, `__proto__`)\n //\n return str.toLowerCase().toUpperCase()\n}\n\n// Re-export libraries commonly used in both markdown-it and its plugins,\n// so plugins won't have to depend on them explicitly, which reduces their\n// bundled size (e.g. a browser build).\n//\nconst lib = { mdurl, ucmicro }\n\nexport {\n lib,\n assign,\n isString,\n has,\n unescapeMd,\n unescapeAll,\n isValidEntityCode,\n fromCodePoint,\n escapeHtml,\n arrayReplaceAt,\n isSpace,\n isWhiteSpace,\n isMdAsciiPunct,\n isPunctChar,\n escapeRE,\n normalizeReference\n}\n","import decode from './lib/decode.mjs'\nimport encode from './lib/encode.mjs'\nimport format from './lib/format.mjs'\nimport parse from './lib/parse.mjs'\n\nexport {\n decode,\n encode,\n format,\n parse\n}\n","/* eslint-disable no-bitwise */\n\nconst decodeCache = {}\n\nfunction getDecodeCache (exclude) {\n let cache = decodeCache[exclude]\n if (cache) { return cache }\n\n cache = decodeCache[exclude] = []\n\n for (let i = 0; i < 128; i++) {\n const ch = String.fromCharCode(i)\n cache.push(ch)\n }\n\n for (let i = 0; i < exclude.length; i++) {\n const ch = exclude.charCodeAt(i)\n cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2)\n }\n\n return cache\n}\n\n// Decode percent-encoded string.\n//\nfunction decode (string, exclude) {\n if (typeof exclude !== 'string') {\n exclude = decode.defaultChars\n }\n\n const cache = getDecodeCache(exclude)\n\n return string.replace(/(%[a-f0-9]{2})+/gi, function (seq) {\n let result = ''\n\n for (let i = 0, l = seq.length; i < l; i += 3) {\n const b1 = parseInt(seq.slice(i + 1, i + 3), 16)\n\n if (b1 < 0x80) {\n result += cache[b1]\n continue\n }\n\n if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) {\n // 110xxxxx 10xxxxxx\n const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n\n if ((b2 & 0xC0) === 0x80) {\n const chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F)\n\n if (chr < 0x80) {\n result += '\\ufffd\\ufffd'\n } else {\n result += String.fromCharCode(chr)\n }\n\n i += 3\n continue\n }\n }\n\n if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n const b3 = parseInt(seq.slice(i + 7, i + 9), 16)\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n const chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F)\n\n if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) {\n result += '\\ufffd\\ufffd\\ufffd'\n } else {\n result += String.fromCharCode(chr)\n }\n\n i += 6\n continue\n }\n }\n\n if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) {\n // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx\n const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n const b3 = parseInt(seq.slice(i + 7, i + 9), 16)\n const b4 = parseInt(seq.slice(i + 10, i + 12), 16)\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n let chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F)\n\n if (chr < 0x10000 || chr > 0x10FFFF) {\n result += '\\ufffd\\ufffd\\ufffd\\ufffd'\n } else {\n chr -= 0x10000\n result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF))\n }\n\n i += 9\n continue\n }\n }\n\n result += '\\ufffd'\n }\n\n return result\n })\n}\n\ndecode.defaultChars = ';/?:@&=+$,#'\ndecode.componentChars = ''\n\nexport default decode\n","const encodeCache = {}\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache (exclude) {\n let cache = encodeCache[exclude]\n if (cache) { return cache }\n\n cache = encodeCache[exclude] = []\n\n for (let i = 0; i < 128; i++) {\n const ch = String.fromCharCode(i)\n\n if (/^[0-9a-z]$/i.test(ch)) {\n // always allow unencoded alphanumeric characters\n cache.push(ch)\n } else {\n cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2))\n }\n }\n\n for (let i = 0; i < exclude.length; i++) {\n cache[exclude.charCodeAt(i)] = exclude[i]\n }\n\n return cache\n}\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n// - string - string to encode\n// - exclude - list of characters to ignore (in addition to a-zA-Z0-9)\n// - keepEscaped - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode (string, exclude, keepEscaped) {\n if (typeof exclude !== 'string') {\n // encode(string, keepEscaped)\n keepEscaped = exclude\n exclude = encode.defaultChars\n }\n\n if (typeof keepEscaped === 'undefined') {\n keepEscaped = true\n }\n\n const cache = getEncodeCache(exclude)\n let result = ''\n\n for (let i = 0, l = string.length; i < l; i++) {\n const code = string.charCodeAt(i)\n\n if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n result += string.slice(i, i + 3)\n i += 2\n continue\n }\n }\n\n if (code < 128) {\n result += cache[code]\n continue\n }\n\n if (code >= 0xD800 && code <= 0xDFFF) {\n if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n const nextCode = string.charCodeAt(i + 1)\n if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n result += encodeURIComponent(string[i] + string[i + 1])\n i++\n continue\n }\n }\n result += '%EF%BF%BD'\n continue\n }\n\n result += encodeURIComponent(string[i])\n }\n\n return result\n}\n\nencode.defaultChars = \";/?:@&=+$,-_.!~*'()#\"\nencode.componentChars = \"-_.!~*'()\"\n\nexport default encode\n","export default function format (url) {\n let result = ''\n\n result += url.protocol || ''\n result += url.slashes ? '//' : ''\n result += url.auth ? url.auth + '@' : ''\n\n if (url.hostname && url.hostname.indexOf(':') !== -1) {\n // ipv6 address\n result += '[' + url.hostname + ']'\n } else {\n result += url.hostname || ''\n }\n\n result += url.port ? ':' + url.port : ''\n result += url.pathname || ''\n result += url.search || ''\n result += url.hash || ''\n\n return result\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n//\n// Changes from joyent/node:\n//\n// 1. No leading slash in paths,\n// e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/`\n//\n// 2. Backslashes are not replaced with slashes,\n// so `http:\\\\example.org\\` is treated like a relative path\n//\n// 3. Trailing colon is treated like a part of the path,\n// i.e. in `http://example.org:foo` pathname is `:foo`\n//\n// 4. Nothing is URL-encoded in the resulting object,\n// (in joyent/node some chars in auth and paths are encoded)\n//\n// 5. `url.parse()` does not have `parseQueryString` argument\n//\n// 6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n// which can be constructed using other parts of the url.\n//\n\nfunction Url () {\n this.protocol = null\n this.slashes = null\n this.auth = null\n this.port = null\n this.hostname = null\n this.hash = null\n this.search = null\n this.pathname = null\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nconst protocolPattern = /^([a-z0-9.+-]+:)/i\nconst portPattern = /:[0-9]*$/\n\n// Special case for a simple path URL\n/* eslint-disable-next-line no-useless-escape */\nconst simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/\n\n// RFC 2396: characters reserved for delimiting URLs.\n// We actually just auto-escape these.\nconst delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t']\n\n// RFC 2396: characters not allowed for various reasons.\nconst unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims)\n\n// Allowed by RFCs, but cause of XSS attacks. Always escape these.\nconst autoEscape = ['\\''].concat(unwise)\n// Characters that are never ever allowed in a hostname.\n// Note that any invalid chars are also handled, but these\n// are the ones that are *expected* to be seen, so we fast-path\n// them.\nconst nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape)\nconst hostEndingChars = ['/', '?', '#']\nconst hostnameMaxLen = 255\nconst hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/\nconst hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/\n// protocols that can allow \"unsafe\" and \"unwise\" chars.\n// protocols that never have a hostname.\nconst hostlessProtocol = {\n javascript: true,\n 'javascript:': true\n}\n// protocols that always contain a // bit.\nconst slashedProtocol = {\n http: true,\n https: true,\n ftp: true,\n gopher: true,\n file: true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n}\n\nfunction urlParse (url, slashesDenoteHost) {\n if (url && url instanceof Url) return url\n\n const u = new Url()\n u.parse(url, slashesDenoteHost)\n return u\n}\n\nUrl.prototype.parse = function (url, slashesDenoteHost) {\n let lowerProto, hec, slashes\n let rest = url\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim()\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n const simplePath = simplePathPattern.exec(rest)\n if (simplePath) {\n this.pathname = simplePath[1]\n if (simplePath[2]) {\n this.search = simplePath[2]\n }\n return this\n }\n }\n\n let proto = protocolPattern.exec(rest)\n if (proto) {\n proto = proto[0]\n lowerProto = proto.toLowerCase()\n this.protocol = proto\n rest = rest.substr(proto.length)\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n /* eslint-disable-next-line no-useless-escape */\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n slashes = rest.substr(0, 2) === '//'\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2)\n this.slashes = true\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n let hostEnd = -1\n for (let i = 0; i < hostEndingChars.length; i++) {\n hec = rest.indexOf(hostEndingChars[i])\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec\n }\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n let auth, atSign\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@')\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd)\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign)\n rest = rest.slice(atSign + 1)\n this.auth = auth\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1\n for (let i = 0; i < nonHostChars.length; i++) {\n hec = rest.indexOf(nonHostChars[i])\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec\n }\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1) {\n hostEnd = rest.length\n }\n\n if (rest[hostEnd - 1] === ':') { hostEnd-- }\n const host = rest.slice(0, hostEnd)\n rest = rest.slice(hostEnd)\n\n // pull out port.\n this.parseHost(host)\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || ''\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n const ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']'\n\n // validate a little.\n if (!ipv6Hostname) {\n const hostparts = this.hostname.split(/\\./)\n for (let i = 0, l = hostparts.length; i < l; i++) {\n const part = hostparts[i]\n if (!part) { continue }\n if (!part.match(hostnamePartPattern)) {\n let newpart = ''\n for (let j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x'\n } else {\n newpart += part[j]\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n const validParts = hostparts.slice(0, i)\n const notHost = hostparts.slice(i + 1)\n const bit = part.match(hostnamePartStart)\n if (bit) {\n validParts.push(bit[1])\n notHost.unshift(bit[2])\n }\n if (notHost.length) {\n rest = notHost.join('.') + rest\n }\n this.hostname = validParts.join('.')\n break\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = ''\n }\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2)\n }\n }\n\n // chop off from the tail first.\n const hash = rest.indexOf('#')\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash)\n rest = rest.slice(0, hash)\n }\n const qm = rest.indexOf('?')\n if (qm !== -1) {\n this.search = rest.substr(qm)\n rest = rest.slice(0, qm)\n }\n if (rest) { this.pathname = rest }\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = ''\n }\n\n return this\n}\n\nUrl.prototype.parseHost = function (host) {\n let port = portPattern.exec(host)\n if (port) {\n port = port[0]\n if (port !== ':') {\n this.port = port.substr(1)\n }\n host = host.substr(0, host.length - port.length)\n }\n if (host) { this.hostname = host }\n}\n\nexport default urlParse\n","import Any from './properties/Any/regex.mjs';\nimport Cc from './categories/Cc/regex.mjs';\nimport Cf from './categories/Cf/regex.mjs';\nimport P from './categories/P/regex.mjs';\nimport S from './categories/S/regex.mjs';\nimport Z from './categories/Z/regex.mjs';\n\nexport { Any, Cc, Cf, P, S, Z };\n","export default /[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/","export default /[\\0-\\x1F\\x7F-\\x9F]/","export default /[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u0890\\u0891\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD80D[\\uDC30-\\uDC3F]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/","export default /[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061D-\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1B7D\\u1B7E\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4F\\u2E52-\\u2E5D\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDEAD\\uDF55-\\uDF59\\uDF86-\\uDF89]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5A\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDEB9\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDD44-\\uDD46\\uDDE2\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2\\uDF00-\\uDF09]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8\\uDF43-\\uDF4F\\uDFFF]|\\uD809[\\uDC70-\\uDC74]|\\uD80B[\\uDFF1\\uDFF2]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A\\uDFE2]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/","export default /[\\$\\+<->\\^`\\|~\\xA2-\\xA6\\xA8\\xA9\\xAC\\xAE-\\xB1\\xB4\\xB8\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0384\\u0385\\u03F6\\u0482\\u058D-\\u058F\\u0606-\\u0608\\u060B\\u060E\\u060F\\u06DE\\u06E9\\u06FD\\u06FE\\u07F6\\u07FE\\u07FF\\u0888\\u09F2\\u09F3\\u09FA\\u09FB\\u0AF1\\u0B70\\u0BF3-\\u0BFA\\u0C7F\\u0D4F\\u0D79\\u0E3F\\u0F01-\\u0F03\\u0F13\\u0F15-\\u0F17\\u0F1A-\\u0F1F\\u0F34\\u0F36\\u0F38\\u0FBE-\\u0FC5\\u0FC7-\\u0FCC\\u0FCE\\u0FCF\\u0FD5-\\u0FD8\\u109E\\u109F\\u1390-\\u1399\\u166D\\u17DB\\u1940\\u19DE-\\u19FF\\u1B61-\\u1B6A\\u1B74-\\u1B7C\\u1FBD\\u1FBF-\\u1FC1\\u1FCD-\\u1FCF\\u1FDD-\\u1FDF\\u1FED-\\u1FEF\\u1FFD\\u1FFE\\u2044\\u2052\\u207A-\\u207C\\u208A-\\u208C\\u20A0-\\u20C0\\u2100\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F\\u218A\\u218B\\u2190-\\u2307\\u230C-\\u2328\\u232B-\\u2426\\u2440-\\u244A\\u249C-\\u24E9\\u2500-\\u2767\\u2794-\\u27C4\\u27C7-\\u27E5\\u27F0-\\u2982\\u2999-\\u29D7\\u29DC-\\u29FB\\u29FE-\\u2B73\\u2B76-\\u2B95\\u2B97-\\u2BFF\\u2CE5-\\u2CEA\\u2E50\\u2E51\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFF\\u3004\\u3012\\u3013\\u3020\\u3036\\u3037\\u303E\\u303F\\u309B\\u309C\\u3190\\u3191\\u3196-\\u319F\\u31C0-\\u31E3\\u31EF\\u3200-\\u321E\\u322A-\\u3247\\u3250\\u3260-\\u327F\\u328A-\\u32B0\\u32C0-\\u33FF\\u4DC0-\\u4DFF\\uA490-\\uA4C6\\uA700-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA828-\\uA82B\\uA836-\\uA839\\uAA77-\\uAA79\\uAB5B\\uAB6A\\uAB6B\\uFB29\\uFBB2-\\uFBC2\\uFD40-\\uFD4F\\uFDCF\\uFDFC-\\uFDFF\\uFE62\\uFE64-\\uFE66\\uFE69\\uFF04\\uFF0B\\uFF1C-\\uFF1E\\uFF3E\\uFF40\\uFF5C\\uFF5E\\uFFE0-\\uFFE6\\uFFE8-\\uFFEE\\uFFFC\\uFFFD]|\\uD800[\\uDD37-\\uDD3F\\uDD79-\\uDD89\\uDD8C-\\uDD8E\\uDD90-\\uDD9C\\uDDA0\\uDDD0-\\uDDFC]|\\uD802[\\uDC77\\uDC78\\uDEC8]|\\uD805\\uDF3F|\\uD807[\\uDFD5-\\uDFF1]|\\uD81A[\\uDF3C-\\uDF3F\\uDF45]|\\uD82F\\uDC9C|\\uD833[\\uDF50-\\uDFC3]|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD64\\uDD6A-\\uDD6C\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDEA\\uDE00-\\uDE41\\uDE45\\uDF00-\\uDF56]|\\uD835[\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85\\uDE86]|\\uD838[\\uDD4F\\uDEFF]|\\uD83B[\\uDCAC\\uDCB0\\uDD2E\\uDEF0\\uDEF1]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD0D-\\uDDAD\\uDDE6-\\uDE02\\uDE10-\\uDE3B\\uDE40-\\uDE48\\uDE50\\uDE51\\uDE60-\\uDE65\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDED7\\uDEDC-\\uDEEC\\uDEF0-\\uDEFC\\uDF00-\\uDF76\\uDF7B-\\uDFD9\\uDFE0-\\uDFEB\\uDFF0]|\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDCB0\\uDCB1\\uDD00-\\uDE53\\uDE60-\\uDE6D\\uDE70-\\uDE7C\\uDE80-\\uDE88\\uDE90-\\uDEBD\\uDEBF-\\uDEC5\\uDECE-\\uDEDB\\uDEE0-\\uDEE8\\uDEF0-\\uDEF8\\uDF00-\\uDF92\\uDF94-\\uDFCA]/","export default /[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/",null,null,null,null,null,null,null,"// Just a shortcut for bulk export\n\nimport parseLinkLabel from './parse_link_label.mjs'\nimport parseLinkDestination from './parse_link_destination.mjs'\nimport parseLinkTitle from './parse_link_title.mjs'\n\nexport {\n parseLinkLabel,\n parseLinkDestination,\n parseLinkTitle\n}\n","// Parse link label\n//\n// this function assumes that first character (\"[\") already matches;\n// returns the end of the label\n//\n\nexport default function parseLinkLabel (state, start, disableNested) {\n let level, found, marker, prevPos\n\n const max = state.posMax\n const oldPos = state.pos\n\n state.pos = start + 1\n level = 1\n\n while (state.pos < max) {\n marker = state.src.charCodeAt(state.pos)\n if (marker === 0x5D /* ] */) {\n level--\n if (level === 0) {\n found = true\n break\n }\n }\n\n prevPos = state.pos\n state.md.inline.skipToken(state)\n if (marker === 0x5B /* [ */) {\n if (prevPos === state.pos - 1) {\n // increase level if we find text `[`, which is not a part of any token\n level++\n } else if (disableNested) {\n state.pos = oldPos\n return -1\n }\n }\n }\n\n let labelEnd = -1\n\n if (found) {\n labelEnd = state.pos\n }\n\n // restore old state\n state.pos = oldPos\n\n return labelEnd\n}\n","// Parse link destination\n//\n\nimport { unescapeAll } from '../common/utils.mjs'\n\nexport default function parseLinkDestination (str, start, max) {\n let code\n let pos = start\n\n const result = {\n ok: false,\n pos: 0,\n str: ''\n }\n\n if (str.charCodeAt(pos) === 0x3C /* < */) {\n pos++\n while (pos < max) {\n code = str.charCodeAt(pos)\n if (code === 0x0A /* \\n */) { return result }\n if (code === 0x3C /* < */) { return result }\n if (code === 0x3E /* > */) {\n result.pos = pos + 1\n result.str = unescapeAll(str.slice(start + 1, pos))\n result.ok = true\n return result\n }\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos += 2\n continue\n }\n\n pos++\n }\n\n // no closing '>'\n return result\n }\n\n // this should be ... } else { ... branch\n\n let level = 0\n while (pos < max) {\n code = str.charCodeAt(pos)\n\n if (code === 0x20) { break }\n\n // ascii control characters\n if (code < 0x20 || code === 0x7F) { break }\n\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n if (str.charCodeAt(pos + 1) === 0x20) { break }\n pos += 2\n continue\n }\n\n if (code === 0x28 /* ( */) {\n level++\n if (level > 32) { return result }\n }\n\n if (code === 0x29 /* ) */) {\n if (level === 0) { break }\n level--\n }\n\n pos++\n }\n\n if (start === pos) { return result }\n if (level !== 0) { return result }\n\n result.str = unescapeAll(str.slice(start, pos))\n result.pos = pos\n result.ok = true\n return result\n}\n","// Parse link title\n//\n\nimport { unescapeAll } from '../common/utils.mjs'\n\n// Parse link title within `str` in [start, max] range,\n// or continue previous parsing if `prev_state` is defined (equal to result of last execution).\n//\nexport default function parseLinkTitle (str, start, max, prev_state) {\n let code\n let pos = start\n\n const state = {\n // if `true`, this is a valid link title\n ok: false,\n // if `true`, this link can be continued on the next line\n can_continue: false,\n // if `ok`, it's the position of the first character after the closing marker\n pos: 0,\n // if `ok`, it's the unescaped title\n str: '',\n // expected closing marker character code\n marker: 0\n }\n\n if (prev_state) {\n // this is a continuation of a previous parseLinkTitle call on the next line,\n // used in reference links only\n state.str = prev_state.str\n state.marker = prev_state.marker\n } else {\n if (pos >= max) { return state }\n\n let marker = str.charCodeAt(pos)\n if (marker !== 0x22 /* \" */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return state }\n\n start++\n pos++\n\n // if opening marker is \"(\", switch it to closing marker \")\"\n if (marker === 0x28) { marker = 0x29 }\n\n state.marker = marker\n }\n\n while (pos < max) {\n code = str.charCodeAt(pos)\n if (code === state.marker) {\n state.pos = pos + 1\n state.str += unescapeAll(str.slice(start, pos))\n state.ok = true\n return state\n } else if (code === 0x28 /* ( */ && state.marker === 0x29 /* ) */) {\n return state\n } else if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos++\n }\n\n pos++\n }\n\n // no closing marker found, but this link title may continue on the next line (for references)\n state.can_continue = true\n state.str += unescapeAll(str.slice(start, pos))\n return state\n}\n","/**\n * class Renderer\n *\n * Generates HTML from parsed token stream. Each instance has independent\n * copy of rules. Those can be rewritten with ease. Also, you can add new\n * rules if you create plugin and adds new token types.\n **/\n\nimport { assign, unescapeAll, escapeHtml } from './common/utils.mjs'\n\nconst default_rules = {}\n\ndefault_rules.code_inline = function (tokens, idx, options, env, slf) {\n const token = tokens[idx]\n\n return '<code' + slf.renderAttrs(token) + '>' +\n escapeHtml(token.content) +\n '</code>'\n}\n\ndefault_rules.code_block = function (tokens, idx, options, env, slf) {\n const token = tokens[idx]\n\n return '<pre' + slf.renderAttrs(token) + '><code>' +\n escapeHtml(tokens[idx].content) +\n '</code></pre>\\n'\n}\n\ndefault_rules.fence = function (tokens, idx, options, env, slf) {\n const token = tokens[idx]\n const info = token.info ? unescapeAll(token.info).trim() : ''\n let langName = ''\n let langAttrs = ''\n\n if (info) {\n const arr = info.split(/(\\s+)/g)\n langName = arr[0]\n langAttrs = arr.slice(2).join('')\n }\n\n let highlighted\n if (options.highlight) {\n highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content)\n } else {\n highlighted = escapeHtml(token.content)\n }\n\n if (highlighted.indexOf('<pre') === 0) {\n return highlighted + '\\n'\n }\n\n // If language exists, inject class gently, without modifying original token.\n // May be, one day we will add .deepClone() for token and simplify this part, but\n // now we prefer to keep things local.\n if (info) {\n const i = token.attrIndex('class')\n const tmpAttrs = token.attrs ? token.attrs.slice() : []\n\n if (i < 0) {\n tmpAttrs.push(['class', options.langPrefix + langName])\n } else {\n tmpAttrs[i] = tmpAttrs[i].slice()\n tmpAttrs[i][1] += ' ' + options.langPrefix + langName\n }\n\n // Fake token just to render attributes\n const tmpToken = {\n attrs: tmpAttrs\n }\n\n return `<pre><code${slf.renderAttrs(tmpToken)}>${highlighted}</code></pre>\\n`\n }\n\n return `<pre><code${slf.renderAttrs(token)}>${highlighted}</code></pre>\\n`\n}\n\ndefault_rules.image = function (tokens, idx, options, env, slf) {\n const token = tokens[idx]\n\n // \"alt\" attr MUST be set, even if empty. Because it's mandatory and\n // should be placed on proper position for tests.\n //\n // Replace content with actual value\n\n token.attrs[token.attrIndex('alt')][1] =\n slf.renderInlineAsText(token.children, options, env)\n\n return slf.renderToken(tokens, idx, options)\n}\n\ndefault_rules.hardbreak = function (tokens, idx, options /*, env */) {\n return options.xhtmlOut ? '<br />\\n' : '<br>\\n'\n}\ndefault_rules.softbreak = function (tokens, idx, options /*, env */) {\n return options.breaks ? (options.xhtmlOut ? '<br />\\n' : '<br>\\n') : '\\n'\n}\n\ndefault_rules.text = function (tokens, idx /*, options, env */) {\n return escapeHtml(tokens[idx].content)\n}\n\ndefault_rules.html_block = function (tokens, idx /*, options, env */) {\n return tokens[idx].content\n}\ndefault_rules.html_inline = function (tokens, idx /*, options, env */) {\n return tokens[idx].content\n}\n\n/**\n * new Renderer()\n *\n * Creates new [[Renderer]] instance and fill [[Renderer#rules]] with defaults.\n **/\nfunction Renderer () {\n /**\n * Renderer#rules -> Object\n *\n * Contains render rules for tokens. Can be updated and extended.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.renderer.rules.strong_open = function () { return '<b>'; };\n * md.renderer.rules.strong_close = function () { return '</b>'; };\n *\n * var result = md.renderInline(...);\n * ```\n *\n * Each rule is called as independent static function with fixed signature:\n *\n * ```javascript\n * function my_token_render(tokens, idx, options, env, renderer) {\n * // ...\n * return renderedHTML;\n * }\n * ```\n *\n * See [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.mjs)\n * for more details and examples.\n **/\n this.rules = assign({}, default_rules)\n}\n\n/**\n * Renderer.renderAttrs(token) -> String\n *\n * Render token attributes to string.\n **/\nRenderer.prototype.renderAttrs = function renderAttrs (token) {\n let i, l, result\n\n if (!token.attrs) { return '' }\n\n result = ''\n\n for (i = 0, l = token.attrs.length; i < l; i++) {\n result += ' ' + escapeHtml(token.attrs[i][0]) + '=\"' + escapeHtml(token.attrs[i][1]) + '\"'\n }\n\n return result\n}\n\n/**\n * Renderer.renderToken(tokens, idx, options) -> String\n * - tokens (Array): list of tokens\n * - idx (Numbed): token index to render\n * - options (Object): params of parser instance\n *\n * Default token renderer. Can be overriden by custom function\n * in [[Renderer#rules]].\n **/\nRenderer.prototype.renderToken = function renderToken (tokens, idx, options) {\n const token = tokens[idx]\n let result = ''\n\n // Tight list paragraphs\n if (token.hidden) {\n return ''\n }\n\n // Insert a newline between hidden paragraph and subsequent opening\n // block-level tag.\n //\n // For example, here we should insert a newline before blockquote:\n // - a\n // >\n //\n if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) {\n result += '\\n'\n }\n\n // Add token name, e.g. `<img`\n result += (token.nesting === -1 ? '</' : '<') + token.tag\n\n // Encode attributes, e.g. `<img src=\"foo\"`\n result += this.renderAttrs(token)\n\n // Add a slash for self-closing tags, e.g. `<img src=\"foo\" /`\n if (token.nesting === 0 && options.xhtmlOut) {\n result += ' /'\n }\n\n // Check if we need to add a newline after this tag\n let needLf = false\n if (token.block) {\n needLf = true\n\n if (token.nesting === 1) {\n if (idx + 1 < tokens.length) {\n const nextToken = tokens[idx + 1]\n\n if (nextToken.type === 'inline' || nextToken.hidden) {\n // Block-level tag containing an inline tag.\n //\n needLf = false\n } else if (nextToken.nesting === -1 && nextToken.tag === token.tag) {\n // Opening tag + closing tag of the same type. E.g. `<li></li>`.\n //\n needLf = false\n }\n }\n }\n }\n\n result += needLf ? '>\\n' : '>'\n\n return result\n}\n\n/**\n * Renderer.renderInline(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * The same as [[Renderer.render]], but for single token of `inline` type.\n **/\nRenderer.prototype.renderInline = function (tokens, options, env) {\n let result = ''\n const rules = this.rules\n\n for (let i = 0, len = tokens.length; i < len; i++) {\n const type = tokens[i].type\n\n if (typeof rules[type] !== 'undefined') {\n result += rules[type](tokens, i, options, env, this)\n } else {\n result += this.renderToken(tokens, i, options)\n }\n }\n\n return result\n}\n\n/** internal\n * Renderer.renderInlineAsText(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Special kludge for image `alt` attributes to conform CommonMark spec.\n * Don't try to use it! Spec requires to show `alt` content with stripped markup,\n * instead of simple escaping.\n **/\nRenderer.prototype.renderInlineAsText = function (tokens, options, env) {\n let result = ''\n\n for (let i = 0, len = tokens.length; i < len; i++) {\n switch (tokens[i].type) {\n case 'text':\n result += tokens[i].content\n break\n case 'image':\n result += this.renderInlineAsText(tokens[i].children, options, env)\n break\n case 'html_inline':\n case 'html_block':\n result += tokens[i].content\n break\n case 'softbreak':\n case 'hardbreak':\n result += '\\n'\n break\n default:\n // all other tokens are skipped\n }\n }\n\n return result\n}\n\n/**\n * Renderer.render(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Takes token stream and generates HTML. Probably, you will never need to call\n * this method directly.\n **/\nRenderer.prototype.render = function (tokens, options, env) {\n let result = ''\n const rules = this.rules\n\n for (let i = 0, len = tokens.length; i < len; i++) {\n const type = tokens[i].type\n\n if (type === 'inline') {\n result += this.renderInline(tokens[i].children, options, env)\n } else if (typeof rules[type] !== 'undefined') {\n result += rules[type](tokens, i, options, env, this)\n } else {\n result += this.renderToken(tokens, i, options, env)\n }\n }\n\n return result\n}\n\nexport default Renderer\n","/**\n * class Ruler\n *\n * Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and\n * [[MarkdownIt#inline]] to manage sequences of functions (rules):\n *\n * - keep rules in defined order\n * - assign the name to each rule\n * - enable/disable rules\n * - add/replace rules\n * - allow assign rules to additional named chains (in the same)\n * - cacheing lists of active rules\n *\n * You will not need use this class directly until write plugins. For simple\n * rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and\n * [[MarkdownIt.use]].\n **/\n\n/**\n * new Ruler()\n **/\nfunction Ruler () {\n // List of added rules. Each element is:\n //\n // {\n // name: XXX,\n // enabled: Boolean,\n // fn: Function(),\n // alt: [ name2, name3 ]\n // }\n //\n this.__rules__ = []\n\n // Cached rule chains.\n //\n // First level - chain name, '' for default.\n // Second level - diginal anchor for fast filtering by charcodes.\n //\n this.__cache__ = null\n}\n\n// Helper methods, should not be used directly\n\n// Find rule index by name\n//\nRuler.prototype.__find__ = function (name) {\n for (let i = 0; i < this.__rules__.length; i++) {\n if (this.__rules__[i].name === name) {\n return i\n }\n }\n return -1\n}\n\n// Build rules lookup cache\n//\nRuler.prototype.__compile__ = function () {\n const self = this\n const chains = ['']\n\n // collect unique names\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return }\n\n rule.alt.forEach(function (altName) {\n if (chains.indexOf(altName) < 0) {\n chains.push(altName)\n }\n })\n })\n\n self.__cache__ = {}\n\n chains.forEach(function (chain) {\n self.__cache__[chain] = []\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return }\n\n if (chain && rule.alt.indexOf(chain) < 0) { return }\n\n self.__cache__[chain].push(rule.fn)\n })\n })\n}\n\n/**\n * Ruler.at(name, fn [, options])\n * - name (String): rule name to replace.\n * - fn (Function): new rule function.\n * - options (Object): new rule options (not mandatory).\n *\n * Replace rule by name with new function & options. Throws error if name not\n * found.\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * Replace existing typographer replacement rule with new one:\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.at('replacements', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.at = function (name, fn, options) {\n const index = this.__find__(name)\n const opt = options || {}\n\n if (index === -1) { throw new Error('Parser rule not found: ' + name) }\n\n this.__rules__[index].fn = fn\n this.__rules__[index].alt = opt.alt || []\n this.__cache__ = null\n}\n\n/**\n * Ruler.before(beforeName, ruleName, fn [, options])\n * - beforeName (String): new rule will be added before this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain before one with given name. See also\n * [[Ruler.after]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.before = function (beforeName, ruleName, fn, options) {\n const index = this.__find__(beforeName)\n const opt = options || {}\n\n if (index === -1) { throw new Error('Parser rule not found: ' + beforeName) }\n\n this.__rules__.splice(index, 0, {\n name: ruleName,\n enabled: true,\n fn,\n alt: opt.alt || []\n })\n\n this.__cache__ = null\n}\n\n/**\n * Ruler.after(afterName, ruleName, fn [, options])\n * - afterName (String): new rule will be added after this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain after one with given name. See also\n * [[Ruler.before]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.inline.ruler.after('text', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.after = function (afterName, ruleName, fn, options) {\n const index = this.__find__(afterName)\n const opt = options || {}\n\n if (index === -1) { throw new Error('Parser rule not found: ' + afterName) }\n\n this.__rules__.splice(index + 1, 0, {\n name: ruleName,\n enabled: true,\n fn,\n alt: opt.alt || []\n })\n\n this.__cache__ = null\n}\n\n/**\n * Ruler.push(ruleName, fn [, options])\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Push new rule to the end of chain. See also\n * [[Ruler.before]], [[Ruler.after]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.push('my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.push = function (ruleName, fn, options) {\n const opt = options || {}\n\n this.__rules__.push({\n name: ruleName,\n enabled: true,\n fn,\n alt: opt.alt || []\n })\n\n this.__cache__ = null\n}\n\n/**\n * Ruler.enable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to enable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.disable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.enable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [list] }\n\n const result = []\n\n // Search by name and enable\n list.forEach(function (name) {\n const idx = this.__find__(name)\n\n if (idx < 0) {\n if (ignoreInvalid) { return }\n throw new Error('Rules manager: invalid rule name ' + name)\n }\n this.__rules__[idx].enabled = true\n result.push(name)\n }, this)\n\n this.__cache__ = null\n return result\n}\n\n/**\n * Ruler.enableOnly(list [, ignoreInvalid])\n * - list (String|Array): list of rule names to enable (whitelist).\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names, and disable everything else. If any rule name\n * not found - throw Error. Errors can be disabled by second param.\n *\n * See also [[Ruler.disable]], [[Ruler.enable]].\n **/\nRuler.prototype.enableOnly = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [list] }\n\n this.__rules__.forEach(function (rule) { rule.enabled = false })\n\n this.enable(list, ignoreInvalid)\n}\n\n/**\n * Ruler.disable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Disable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.enable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.disable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [list] }\n\n const result = []\n\n // Search by name and disable\n list.forEach(function (name) {\n const idx = this.__find__(name)\n\n if (idx < 0) {\n if (ignoreInvalid) { return }\n throw new Error('Rules manager: invalid rule name ' + name)\n }\n this.__rules__[idx].enabled = false\n result.push(name)\n }, this)\n\n this.__cache__ = null\n return result\n}\n\n/**\n * Ruler.getRules(chainName) -> Array\n *\n * Return array of active functions (rules) for given chain name. It analyzes\n * rules configuration, compiles caches if not exists and returns result.\n *\n * Default chain name is `''` (empty string). It can't be skipped. That's\n * done intentionally, to keep signature monomorphic for high speed.\n **/\nRuler.prototype.getRules = function (chainName) {\n if (this.__cache__ === null) {\n this.__compile__()\n }\n\n // Chain can be empty, if rules disabled. But we still have to return Array.\n return this.__cache__[chainName] || []\n}\n\nexport default Ruler\n","// Token class\n\n/**\n * class Token\n **/\n\n/**\n * new Token(type, tag, nesting)\n *\n * Create new token and fill passed properties.\n **/\nfunction Token (type, tag, nesting) {\n /**\n * Token#type -> String\n *\n * Type of the token (string, e.g. \"paragraph_open\")\n **/\n this.type = type\n\n /**\n * Token#tag -> String\n *\n * html tag name, e.g. \"p\"\n **/\n this.tag = tag\n\n /**\n * Token#attrs -> Array\n *\n * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]`\n **/\n this.attrs = null\n\n /**\n * Token#map -> Array\n *\n * Source map info. Format: `[ line_begin, line_end ]`\n **/\n this.map = null\n\n /**\n * Token#nesting -> Number\n *\n * Level change (number in {-1, 0, 1} set), where:\n *\n * - `1` means the tag is opening\n * - `0` means the tag is self-closing\n * - `-1` means the tag is closing\n **/\n this.nesting = nesting\n\n /**\n * Token#level -> Number\n *\n * nesting level, the same as `state.level`\n **/\n this.level = 0\n\n /**\n * Token#children -> Array\n *\n * An array of child nodes (inline and img tokens)\n **/\n this.children = null\n\n /**\n * Token#content -> String\n *\n * In a case of self-closing tag (code, html, fence, etc.),\n * it has contents of this tag.\n **/\n this.content = ''\n\n /**\n * Token#markup -> String\n *\n * '*' or '_' for emphasis, fence string for fence, etc.\n **/\n this.markup = ''\n\n /**\n * Token#info -> String\n *\n * Additional information:\n *\n * - Info string for \"fence\" tokens\n * - The value \"auto\" for autolink \"link_open\" and \"link_close\" tokens\n * - The string value of the item marker for ordered-list \"list_item_open\" tokens\n **/\n this.info = ''\n\n /**\n * Token#meta -> Object\n *\n * A place for plugins to store an arbitrary data\n **/\n this.meta = null\n\n /**\n * Token#block -> Boolean\n *\n * True for block-level tokens, false for inline tokens.\n * Used in renderer to calculate line breaks\n **/\n this.block = false\n\n /**\n * Token#hidden -> Boolean\n *\n * If it's true, ignore this element when rendering. Used for tight lists\n * to hide paragraphs.\n **/\n this.hidden = false\n}\n\n/**\n * Token.attrIndex(name) -> Number\n *\n * Search attribute index by name.\n **/\nToken.prototype.attrIndex = function attrIndex (name) {\n if (!this.attrs) { return -1 }\n\n const attrs = this.attrs\n\n for (let i = 0, len = attrs.length; i < len; i++) {\n if (attrs[i][0] === name) { return i }\n }\n return -1\n}\n\n/**\n * Token.attrPush(attrData)\n *\n * Add `[ name, value ]` attribute to list. Init attrs if necessary\n **/\nToken.prototype.attrPush = function attrPush (attrData) {\n if (this.attrs) {\n this.attrs.push(attrData)\n } else {\n this.attrs = [attrData]\n }\n}\n\n/**\n * Token.attrSet(name, value)\n *\n * Set `name` attribute to `value`. Override old value if exists.\n **/\nToken.prototype.attrSet = function attrSet (name, value) {\n const idx = this.attrIndex(name)\n const attrData = [name, value]\n\n if (idx < 0) {\n this.attrPush(attrData)\n } else {\n this.attrs[idx] = attrData\n }\n}\n\n/**\n * Token.attrGet(name)\n *\n * Get the value of attribute `name`, or null if it does not exist.\n **/\nToken.prototype.attrGet = function attrGet (name) {\n const idx = this.attrIndex(name)\n let value = null\n if (idx >= 0) {\n value = this.attrs[idx][1]\n }\n return value\n}\n\n/**\n * Token.attrJoin(name, value)\n *\n * Join value to existing attribute via space. Or create new attribute if not\n * exists. Useful to operate with token classes.\n **/\nToken.prototype.attrJoin = function attrJoin (name, value) {\n const idx = this.attrIndex(name)\n\n if (idx < 0) {\n this.attrPush([name, value])\n } else {\n this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value\n }\n}\n\nexport default Token\n","// Core state object\n//\n\nimport Token from '../token.mjs'\n\nfunction StateCore (src, md, env) {\n this.src = src\n this.env = env\n this.tokens = []\n this.inlineMode = false\n this.md = md // link to parser instance\n}\n\n// re-export Token class to use in core rules\nStateCore.prototype.Token = Token\n\nexport default StateCore\n","// Normalize input string\n\n// https://spec.commonmark.org/0.29/#line-ending\nconst NEWLINES_RE = /\\r\\n?|\\n/g\nconst NULL_RE = /\\0/g\n\nexport default function normalize (state) {\n let str\n\n // Normalize newlines\n str = state.src.replace(NEWLINES_RE, '\\n')\n\n // Replace NULL characters\n str = str.replace(NULL_RE, '\\uFFFD')\n\n state.src = str\n}\n","export default function block (state) {\n let token\n\n if (state.inlineMode) {\n token = new state.Token('inline', '', 0)\n token.content = state.src\n token.map = [0, 1]\n token.children = []\n state.tokens.push(token)\n } else {\n state.md.block.parse(state.src, state.md, state.env, state.tokens)\n }\n}\n","export default function inline (state) {\n const tokens = state.tokens\n\n // Parse inlines\n for (let i = 0, l = tokens.length; i < l; i++) {\n const tok = tokens[i]\n if (tok.type === 'inline') {\n state.md.inline.parse(tok.content, state.md, state.env, tok.children)\n }\n }\n}\n","// Replace link-like texts with link nodes.\n//\n// Currently restricted by `md.validateLink()` to http/https/ftp\n//\n\nimport { arrayReplaceAt } from '../common/utils.mjs'\n\nfunction isLinkOpen (str) {\n return /^<a[>\\s]/i.test(str)\n}\nfunction isLinkClose (str) {\n return /^<\\/a\\s*>/i.test(str)\n}\n\nexport default function linkify (state) {\n const blockTokens = state.tokens\n\n if (!state.md.options.linkify) { return }\n\n for (let j = 0, l = blockTokens.length; j < l; j++) {\n if (blockTokens[j].type !== 'inline' ||\n !state.md.linkify.pretest(blockTokens[j].content)) {\n continue\n }\n\n let tokens = blockTokens[j].children\n\n let htmlLinkLevel = 0\n\n // We scan from the end, to keep position when new tags added.\n // Use reversed logic in links start/end match\n for (let i = tokens.length - 1; i >= 0; i--) {\n const currentToken = tokens[i]\n\n // Skip content of markdown links\n if (currentToken.type === 'link_close') {\n i--\n while (tokens[i].level !== currentToken.level && tokens[i].type !== 'link_open') {\n i--\n }\n continue\n }\n\n // Skip content of html tag links\n if (currentToken.type === 'html_inline') {\n if (isLinkOpen(currentToken.content) && htmlLinkLevel > 0) {\n htmlLinkLevel--\n }\n if (isLinkClose(currentToken.content)) {\n htmlLinkLevel++\n }\n }\n if (htmlLinkLevel > 0) { continue }\n\n if (currentToken.type === 'text' && state.md.linkify.test(currentToken.content)) {\n const text = currentToken.content\n let links = state.md.linkify.match(text)\n\n // Now split string to nodes\n const nodes = []\n let level = currentToken.level\n let lastPos = 0\n\n // forbid escape sequence at the start of the string,\n // this avoids http\\://example.com/ from being linkified as\n // http:<a href=\"//example.com/\">//example.com/</a>\n if (links.length > 0 &&\n links[0].index === 0 &&\n i > 0 &&\n tokens[i - 1].type === 'text_special') {\n links = links.slice(1)\n }\n\n for (let ln = 0; ln < links.length; ln++) {\n const url = links[ln].url\n const fullUrl = state.md.normalizeLink(url)\n if (!state.md.validateLink(fullUrl)) { continue }\n\n let urlText = links[ln].text\n\n // Linkifier might send raw hostnames like \"example.com\", where url\n // starts with domain name. So we prepend http:// in those cases,\n // and remove it afterwards.\n //\n if (!links[ln].schema) {\n urlText = state.md.normalizeLinkText('http://' + urlText).replace(/^http:\\/\\//, '')\n } else if (links[ln].schema === 'mailto:' && !/^mailto:/i.test(urlText)) {\n urlText = state.md.normalizeLinkText('mailto:' + urlText).replace(/^mailto:/, '')\n } else {\n urlText = state.md.normalizeLinkText(urlText)\n }\n\n const pos = links[ln].index\n\n if (pos > lastPos) {\n const token = new state.Token('text', '', 0)\n token.content = text.slice(lastPos, pos)\n token.level = level\n nodes.push(token)\n }\n\n const token_o = new state.Token('link_open', 'a', 1)\n token_o.attrs = [['href', fullUrl]]\n token_o.level = level++\n token_o.markup = 'linkify'\n token_o.info = 'auto'\n nodes.push(token_o)\n\n const token_t = new state.Token('text', '', 0)\n token_t.content = urlText\n token_t.level = level\n nodes.push(token_t)\n\n const token_c = new state.Token('link_close', 'a', -1)\n token_c.level = --level\n token_c.markup = 'linkify'\n token_c.info = 'auto'\n nodes.push(token_c)\n\n lastPos = links[ln].lastIndex\n }\n if (lastPos < text.length) {\n const token = new state.Token('text', '', 0)\n token.content = text.slice(lastPos)\n token.level = level\n nodes.push(token)\n }\n\n // replace current node\n blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes)\n }\n }\n }\n}\n","// Simple typographic replacements\n//\n// (c) (C) → ©\n// (tm) (TM) → ™\n// (r) (R) → ®\n// +- → ±\n// ... → … (also ?.... → ?.., !.... → !..)\n// ???????? → ???, !!!!! → !!!, `,,` → `,`\n// -- → –, --- → —\n//\n\n// TODO:\n// - fractionals 1/2, 1/4, 3/4 -> ½, ¼, ¾\n// - multiplications 2 x 4 -> 2 × 4\n\nconst RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/\n\n// Workaround for phantomjs - need regex without /g flag,\n// or root check will fail every second time\nconst SCOPED_ABBR_TEST_RE = /\\((c|tm|r)\\)/i\n\nconst SCOPED_ABBR_RE = /\\((c|tm|r)\\)/ig\nconst SCOPED_ABBR = {\n c: '©',\n r: '®',\n tm: '™'\n}\n\nfunction replaceFn (match, name) {\n return SCOPED_ABBR[name.toLowerCase()]\n}\n\nfunction replace_scoped (inlineTokens) {\n let inside_autolink = 0\n\n for (let i = inlineTokens.length - 1; i >= 0; i--) {\n const token = inlineTokens[i]\n\n if (token.type === 'text' && !inside_autolink) {\n token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn)\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++\n }\n }\n}\n\nfunction replace_rare (inlineTokens) {\n let inside_autolink = 0\n\n for (let i = inlineTokens.length - 1; i >= 0; i--) {\n const token = inlineTokens[i]\n\n if (token.type === 'text' && !inside_autolink) {\n if (RARE_RE.test(token.content)) {\n token.content = token.content\n .replace(/\\+-/g, '±')\n // .., ..., ....... -> …\n // but ?..... & !..... -> ?.. & !..\n .replace(/\\.{2,}/g, '…').replace(/([?!])…/g, '$1..')\n .replace(/([?!]){4,}/g, '$1$1$1').replace(/,{2,}/g, ',')\n // em-dash\n .replace(/(^|[^-])---(?=[^-]|$)/mg, '$1\\u2014')\n // en-dash\n .replace(/(^|\\s)--(?=\\s|$)/mg, '$1\\u2013')\n .replace(/(^|[^-\\s])--(?=[^-\\s]|$)/mg, '$1\\u2013')\n }\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++\n }\n }\n}\n\nexport default function replace (state) {\n let blkIdx\n\n if (!state.md.options.typographer) { return }\n\n for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n if (state.tokens[blkIdx].type !== 'inline') { continue }\n\n if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) {\n replace_scoped(state.tokens[blkIdx].children)\n }\n\n if (RARE_RE.test(state.tokens[blkIdx].content)) {\n replace_rare(state.tokens[blkIdx].children)\n }\n }\n}\n","// Convert straight quotation marks to typographic ones\n//\n\nimport { isWhiteSpace, isPunctChar, isMdAsciiPunct } from '../common/utils.mjs'\n\nconst QUOTE_TEST_RE = /['\"]/\nconst QUOTE_RE = /['\"]/g\nconst APOSTROPHE = '\\u2019' /* ’ */\n\nfunction replaceAt (str, index, ch) {\n return str.slice(0, index) + ch + str.slice(index + 1)\n}\n\nfunction process_inlines (tokens, state) {\n let j\n\n const stack = []\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i]\n\n const thisLevel = tokens[i].level\n\n for (j = stack.length - 1; j >= 0; j--) {\n if (stack[j].level <= thisLevel) { break }\n }\n stack.length = j + 1\n\n if (token.type !== 'text') { continue }\n\n let text = token.content\n let pos = 0\n let max = text.length\n\n /* eslint no-labels:0,block-scoped-var:0 */\n OUTER:\n while (pos < max) {\n QUOTE_RE.lastIndex = pos\n const t = QUOTE_RE.exec(text)\n if (!t) { break }\n\n let canOpen = true\n let canClose = true\n pos = t.index + 1\n const isSingle = (t[0] === \"'\")\n\n // Find previous character,\n // default to space if it's the beginning of the line\n //\n let lastChar = 0x20\n\n if (t.index - 1 >= 0) {\n lastChar = text.charCodeAt(t.index - 1)\n } else {\n for (j = i - 1; j >= 0; j--) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break // lastChar defaults to 0x20\n if (!tokens[j].content) continue // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1)\n break\n }\n }\n\n // Find next character,\n // default to space if it's the end of the line\n //\n let nextChar = 0x20\n\n if (pos < max) {\n nextChar = text.charCodeAt(pos)\n } else {\n for (j = i + 1; j < tokens.length; j++) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break // nextChar defaults to 0x20\n if (!tokens[j].content) continue // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n nextChar = tokens[j].content.charCodeAt(0)\n break\n }\n }\n\n const isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar))\n const isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar))\n\n const isLastWhiteSpace = isWhiteSpace(lastChar)\n const isNextWhiteSpace = isWhiteSpace(nextChar)\n\n if (isNextWhiteSpace) {\n canOpen = false\n } else if (isNextPunctChar) {\n if (!(isLastWhiteSpace || isLastPunctChar)) {\n canOpen = false\n }\n }\n\n if (isLastWhiteSpace) {\n canClose = false\n } else if (isLastPunctChar) {\n if (!(isNextWhiteSpace || isNextPunctChar)) {\n canClose = false\n }\n }\n\n if (nextChar === 0x22 /* \" */ && t[0] === '\"') {\n if (lastChar >= 0x30 /* 0 */ && lastChar <= 0x39 /* 9 */) {\n // special case: 1\"\" - count first quote as an inch\n canClose = canOpen = false\n }\n }\n\n if (canOpen && canClose) {\n // Replace quotes in the middle of punctuation sequence, but not\n // in the middle of the words, i.e.:\n //\n // 1. foo \" bar \" baz - not replaced\n // 2. foo-\"-bar-\"-baz - replaced\n // 3. foo\"bar\"baz - not replaced\n //\n canOpen = isLastPunctChar\n canClose = isNextPunctChar\n }\n\n if (!canOpen && !canClose) {\n // middle of word\n if (isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE)\n }\n continue\n }\n\n if (canClose) {\n // this could be a closing quote, rewind the stack to get a match\n for (j = stack.length - 1; j >= 0; j--) {\n let item = stack[j]\n if (stack[j].level < thisLevel) { break }\n if (item.single === isSingle && stack[j].level === thisLevel) {\n item = stack[j]\n\n let openQuote\n let closeQuote\n if (isSingle) {\n openQuote = state.md.options.quotes[2]\n closeQuote = state.md.options.quotes[3]\n } else {\n openQuote = state.md.options.quotes[0]\n closeQuote = state.md.options.quotes[1]\n }\n\n // replace token.content *before* tokens[item.token].content,\n // because, if they are pointing at the same token, replaceAt\n // could mess up indices when quote length != 1\n token.content = replaceAt(token.content, t.index, closeQuote)\n tokens[item.token].content = replaceAt(\n tokens[item.token].content, item.pos, openQuote)\n\n pos += closeQuote.length - 1\n if (item.token === i) { pos += openQuote.length - 1 }\n\n text = token.content\n max = text.length\n\n stack.length = j\n continue OUTER\n }\n }\n }\n\n if (canOpen) {\n stack.push({\n token: i,\n pos: t.index,\n single: isSingle,\n level: thisLevel\n })\n } else if (canClose && isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE)\n }\n }\n }\n}\n\nexport default function smartquotes (state) {\n /* eslint max-depth:0 */\n if (!state.md.options.typographer) { return }\n\n for (let blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n if (state.tokens[blkIdx].type !== 'inline' ||\n !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) {\n continue\n }\n\n process_inlines(state.tokens[blkIdx].children, state)\n }\n}\n","// Join raw text tokens with the rest of the text\n//\n// This is set as a separate rule to provide an opportunity for plugins\n// to run text replacements after text join, but before escape join.\n//\n// For example, `\\:)` shouldn't be replaced with an emoji.\n//\n\nexport default function text_join (state) {\n let curr, last\n const blockTokens = state.tokens\n const l = blockTokens.length\n\n for (let j = 0; j < l; j++) {\n if (blockTokens[j].type !== 'inline') continue\n\n const tokens = blockTokens[j].children\n const max = tokens.length\n\n for (curr = 0; curr < max; curr++) {\n if (tokens[curr].type === 'text_special') {\n tokens[curr].type = 'text'\n }\n }\n\n for (curr = last = 0; curr < max; curr++) {\n if (tokens[curr].type === 'text' &&\n curr + 1 < max &&\n tokens[curr + 1].type === 'text') {\n // collapse two adjacent text nodes\n tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content\n } else {\n if (curr !== last) { tokens[last] = tokens[curr] }\n\n last++\n }\n }\n\n if (curr !== last) {\n tokens.length = last\n }\n }\n}\n","/** internal\n * class Core\n *\n * Top-level rules executor. Glues block/inline parsers and does intermediate\n * transformations.\n **/\n\nimport Ruler from './ruler.mjs'\nimport StateCore from './rules_core/state_core.mjs'\n\nimport r_normalize from './rules_core/normalize.mjs'\nimport r_block from './rules_core/block.mjs'\nimport r_inline from './rules_core/inline.mjs'\nimport r_linkify from './rules_core/linkify.mjs'\nimport r_replacements from './rules_core/replacements.mjs'\nimport r_smartquotes from './rules_core/smartquotes.mjs'\nimport r_text_join from './rules_core/text_join.mjs'\n\nconst _rules = [\n ['normalize', r_normalize],\n ['block', r_block],\n ['inline', r_inline],\n ['linkify', r_linkify],\n ['replacements', r_replacements],\n ['smartquotes', r_smartquotes],\n // `text_join` finds `text_special` tokens (for escape sequences)\n // and joins them with the rest of the text\n ['text_join', r_text_join]\n]\n\n/**\n * new Core()\n **/\nfunction Core () {\n /**\n * Core#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of core rules.\n **/\n this.ruler = new Ruler()\n\n for (let i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1])\n }\n}\n\n/**\n * Core.process(state)\n *\n * Executes core chain rules.\n **/\nCore.prototype.process = function (state) {\n const rules = this.ruler.getRules('')\n\n for (let i = 0, l = rules.length; i < l; i++) {\n rules[i](state)\n }\n}\n\nCore.prototype.State = StateCore\n\nexport default Core\n","// Parser state class\n\nimport Token from '../token.mjs'\nimport { isSpace } from '../common/utils.mjs'\n\nfunction StateBlock (src, md, env, tokens) {\n this.src = src\n\n // link to parser instance\n this.md = md\n\n this.env = env\n\n //\n // Internal state vartiables\n //\n\n this.tokens = tokens\n\n this.bMarks = [] // line begin offsets for fast jumps\n this.eMarks = [] // line end offsets for fast jumps\n this.tShift = [] // offsets of the first non-space characters (tabs not expanded)\n this.sCount = [] // indents for each line (tabs expanded)\n\n // An amount of virtual spaces (tabs expanded) between beginning\n // of each line (bMarks) and real beginning of that line.\n //\n // It exists only as a hack because blockquotes override bMarks\n // losing information in the process.\n //\n // It's used only when expanding tabs, you can think about it as\n // an initial tab length, e.g. bsCount=21 applied to string `\\t123`\n // means first tab should be expanded to 4-21%4 === 3 spaces.\n //\n this.bsCount = []\n\n // block parser variables\n\n // required block content indent (for example, if we are\n // inside a list, it would be positioned after list marker)\n this.blkIndent = 0\n this.line = 0 // line index in src\n this.lineMax = 0 // lines count\n this.tight = false // loose/tight mode for lists\n this.ddIndent = -1 // indent of the current dd block (-1 if there isn't any)\n this.listIndent = -1 // indent of the current list block (-1 if there isn't any)\n\n // can be 'blockquote', 'list', 'root', 'paragraph' or 'reference'\n // used in lists to determine if they interrupt a paragraph\n this.parentType = 'root'\n\n this.level = 0\n\n // Create caches\n // Generate markers.\n const s = this.src\n\n for (let start = 0, pos = 0, indent = 0, offset = 0, len = s.length, indent_found = false; pos < len; pos++) {\n const ch = s.charCodeAt(pos)\n\n if (!indent_found) {\n if (isSpace(ch)) {\n indent++\n\n if (ch === 0x09) {\n offset += 4 - offset % 4\n } else {\n offset++\n }\n continue\n } else {\n indent_found = true\n }\n }\n\n if (ch === 0x0A || pos === len - 1) {\n if (ch !== 0x0A) { pos++ }\n this.bMarks.push(start)\n this.eMarks.push(pos)\n this.tShift.push(indent)\n this.sCount.push(offset)\n this.bsCount.push(0)\n\n indent_found = false\n indent = 0\n offset = 0\n start = pos + 1\n }\n }\n\n // Push fake entry to simplify cache bounds checks\n this.bMarks.push(s.length)\n this.eMarks.push(s.length)\n this.tShift.push(0)\n this.sCount.push(0)\n this.bsCount.push(0)\n\n this.lineMax = this.bMarks.length - 1 // don't count last fake line\n}\n\n// Push new token to \"stream\".\n//\nStateBlock.prototype.push = function (type, tag, nesting) {\n const token = new Token(type, tag, nesting)\n token.block = true\n\n if (nesting < 0) this.level-- // closing tag\n token.level = this.level\n if (nesting > 0) this.level++ // opening tag\n\n this.tokens.push(token)\n return token\n}\n\nStateBlock.prototype.isEmpty = function isEmpty (line) {\n return this.bMarks[line] + this.tShift[line] >= this.eMarks[line]\n}\n\nStateBlock.prototype.skipEmptyLines = function skipEmptyLines (from) {\n for (let max = this.lineMax; from < max; from++) {\n if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {\n break\n }\n }\n return from\n}\n\n// Skip spaces from given position.\nStateBlock.prototype.skipSpaces = function skipSpaces (pos) {\n for (let max = this.src.length; pos < max; pos++) {\n const ch = this.src.charCodeAt(pos)\n if (!isSpace(ch)) { break }\n }\n return pos\n}\n\n// Skip spaces from given position in reverse.\nStateBlock.prototype.skipSpacesBack = function skipSpacesBack (pos, min) {\n if (pos <= min) { return pos }\n\n while (pos > min) {\n if (!isSpace(this.src.charCodeAt(--pos))) { return pos + 1 }\n }\n return pos\n}\n\n// Skip char codes from given position\nStateBlock.prototype.skipChars = function skipChars (pos, code) {\n for (let max = this.src.length; pos < max; pos++) {\n if (this.src.charCodeAt(pos) !== code) { break }\n }\n return pos\n}\n\n// Skip char codes reverse from given position - 1\nStateBlock.prototype.skipCharsBack = function skipCharsBack (pos, code, min) {\n if (pos <= min) { return pos }\n\n while (pos > min) {\n if (code !== this.src.charCodeAt(--pos)) { return pos + 1 }\n }\n return pos\n}\n\n// cut lines range from source.\nStateBlock.prototype.getLines = function getLines (begin, end, indent, keepLastLF) {\n if (begin >= end) {\n return ''\n }\n\n const queue = new Array(end - begin)\n\n for (let i = 0, line = begin; line < end; line++, i++) {\n let lineIndent = 0\n const lineStart = this.bMarks[line]\n let first = lineStart\n let last\n\n if (line + 1 < end || keepLastLF) {\n // No need for bounds check because we have fake entry on tail.\n last = this.eMarks[line] + 1\n } else {\n last = this.eMarks[line]\n }\n\n while (first < last && lineIndent < indent) {\n const ch = this.src.charCodeAt(first)\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4\n } else {\n lineIndent++\n }\n } else if (first - lineStart < this.tShift[line]) {\n // patched tShift masked characters to look like spaces (blockquotes, list markers)\n lineIndent++\n } else {\n break\n }\n\n first++\n }\n\n if (lineIndent > indent) {\n // partially expanding tabs in code blocks, e.g '\\t\\tfoobar'\n // with indent=2 becomes ' \\tfoobar'\n queue[i] = new Array(lineIndent - indent + 1).join(' ') + this.src.slice(first, last)\n } else {\n queue[i] = this.src.slice(first, last)\n }\n }\n\n return queue.join('')\n}\n\n// re-export Token class to use in block rules\nStateBlock.prototype.Token = Token\n\nexport default StateBlock\n","// GFM table, https://github.github.com/gfm/#tables-extension-\n\nimport { isSpace } from '../common/utils.mjs'\n\n// Limit the amount of empty autocompleted cells in a table,\n// see https://github.com/markdown-it/markdown-it/issues/1000,\n//\n// Both pulldown-cmark and commonmark-hs limit the number of cells this way to ~200k.\n// We set it to 65k, which can expand user input by a factor of x370\n// (256x256 square is 1.8kB expanded into 650kB).\nconst MAX_AUTOCOMPLETED_CELLS = 0x10000\n\nfunction getLine (state, line) {\n const pos = state.bMarks[line] + state.tShift[line]\n const max = state.eMarks[line]\n\n return state.src.slice(pos, max)\n}\n\nfunction escapedSplit (str) {\n const result = []\n const max = str.length\n\n let pos = 0\n let ch = str.charCodeAt(pos)\n let isEscaped = false\n let lastPos = 0\n let current = ''\n\n while (pos < max) {\n if (ch === 0x7c/* | */) {\n if (!isEscaped) {\n // pipe separating cells, '|'\n result.push(current + str.substring(lastPos, pos))\n current = ''\n lastPos = pos + 1\n } else {\n // escaped pipe, '\\|'\n current += str.substring(lastPos, pos - 1)\n lastPos = pos\n }\n }\n\n isEscaped = (ch === 0x5c/* \\ */)\n pos++\n\n ch = str.charCodeAt(pos)\n }\n\n result.push(current + str.substring(lastPos))\n\n return result\n}\n\nexport default function table (state, startLine, endLine, silent) {\n // should have at least two lines\n if (startLine + 2 > endLine) { return false }\n\n let nextLine = startLine + 1\n\n if (state.sCount[nextLine] < state.blkIndent) { return false }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[nextLine] - state.blkIndent >= 4) { return false }\n\n // first character of the second line should be '|', '-', ':',\n // and no other characters are allowed but spaces;\n // basically, this is the equivalent of /^[-:|][-:|\\s]*$/ regexp\n\n let pos = state.bMarks[nextLine] + state.tShift[nextLine]\n if (pos >= state.eMarks[nextLine]) { return false }\n\n const firstCh = state.src.charCodeAt(pos++)\n if (firstCh !== 0x7C/* | */ && firstCh !== 0x2D/* - */ && firstCh !== 0x3A/* : */) { return false }\n\n if (pos >= state.eMarks[nextLine]) { return false }\n\n const secondCh = state.src.charCodeAt(pos++)\n if (secondCh !== 0x7C/* | */ && secondCh !== 0x2D/* - */ && secondCh !== 0x3A/* : */ && !isSpace(secondCh)) {\n return false\n }\n\n // if first character is '-', then second character must not be a space\n // (due to parsing ambiguity with list)\n if (firstCh === 0x2D/* - */ && isSpace(secondCh)) { return false }\n\n while (pos < state.eMarks[nextLine]) {\n const ch = state.src.charCodeAt(pos)\n\n if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */ && !isSpace(ch)) { return false }\n\n pos++\n }\n\n let lineText = getLine(state, startLine + 1)\n let columns = lineText.split('|')\n const aligns = []\n for (let i = 0; i < columns.length; i++) {\n const t = columns[i].trim()\n if (!t) {\n // allow empty columns before and after table, but not in between columns;\n // e.g. allow ` |---| `, disallow ` ---||--- `\n if (i === 0 || i === columns.length - 1) {\n continue\n } else {\n return false\n }\n }\n\n if (!/^:?-+:?$/.test(t)) { return false }\n if (t.charCodeAt(t.length - 1) === 0x3A/* : */) {\n aligns.push(t.charCodeAt(0) === 0x3A/* : */ ? 'center' : 'right')\n } else if (t.charCodeAt(0) === 0x3A/* : */) {\n aligns.push('left')\n } else {\n aligns.push('')\n }\n }\n\n lineText = getLine(state, startLine).trim()\n if (lineText.indexOf('|') === -1) { return false }\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n columns = escapedSplit(lineText)\n if (columns.length && columns[0] === '') columns.shift()\n if (columns.length && columns[columns.length - 1] === '') columns.pop()\n\n // header row will define an amount of columns in the entire table,\n // and align row should be exactly the same (the rest of the rows can differ)\n const columnCount = columns.length\n if (columnCount === 0 || columnCount !== aligns.length) { return false }\n\n if (silent) { return true }\n\n const oldParentType = state.parentType\n state.parentType = 'table'\n\n // use 'blockquote' lists for termination because it's\n // the most similar to tables\n const terminatorRules = state.md.block.ruler.getRules('blockquote')\n\n const token_to = state.push('table_open', 'table', 1)\n const tableLines = [startLine, 0]\n token_to.map = tableLines\n\n const token_tho = state.push('thead_open', 'thead', 1)\n token_tho.map = [startLine, startLine + 1]\n\n const token_htro = state.push('tr_open', 'tr', 1)\n token_htro.map = [startLine, startLine + 1]\n\n for (let i = 0; i < columns.length; i++) {\n const token_ho = state.push('th_open', 'th', 1)\n if (aligns[i]) {\n token_ho.attrs = [['style', 'text-align:' + aligns[i]]]\n }\n\n const token_il = state.push('inline', '', 0)\n token_il.content = columns[i].trim()\n token_il.children = []\n\n state.push('th_close', 'th', -1)\n }\n\n state.push('tr_close', 'tr', -1)\n state.push('thead_close', 'thead', -1)\n\n let tbodyLines\n let autocompletedCells = 0\n\n for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break }\n\n let terminate = false\n for (let i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true\n break\n }\n }\n\n if (terminate) { break }\n lineText = getLine(state, nextLine).trim()\n if (!lineText) { break }\n if (state.sCount[nextLine] - state.blkIndent >= 4) { break }\n columns = escapedSplit(lineText)\n if (columns.length && columns[0] === '') columns.shift()\n if (columns.length && columns[columns.length - 1] === '') columns.pop()\n\n // note: autocomplete count can be negative if user specifies more columns than header,\n // but that does not affect intended use (which is limiting expansion)\n autocompletedCells += columnCount - columns.length\n if (autocompletedCells > MAX_AUTOCOMPLETED_CELLS) { break }\n\n if (nextLine === startLine + 2) {\n const token_tbo = state.push('tbody_open', 'tbody', 1)\n token_tbo.map = tbodyLines = [startLine + 2, 0]\n }\n\n const token_tro = state.push('tr_open', 'tr', 1)\n token_tro.map = [nextLine, nextLine + 1]\n\n for (let i = 0; i < columnCount; i++) {\n const token_tdo = state.push('td_open', 'td', 1)\n if (aligns[i]) {\n token_tdo.attrs = [['style', 'text-align:' + aligns[i]]]\n }\n\n const token_il = state.push('inline', '', 0)\n token_il.content = columns[i] ? columns[i].trim() : ''\n token_il.children = []\n\n state.push('td_close', 'td', -1)\n }\n state.push('tr_close', 'tr', -1)\n }\n\n if (tbodyLines) {\n state.push('tbody_close', 'tbody', -1)\n tbodyLines[1] = nextLine\n }\n\n state.push('table_close', 'table', -1)\n tableLines[1] = nextLine\n\n state.parentType = oldParentType\n state.line = nextLine\n return true\n}\n","// Code block (4 spaces padded)\n\nexport default function code (state, startLine, endLine/*, silent */) {\n if (state.sCount[startLine] - state.blkIndent < 4) { return false }\n\n let nextLine = startLine + 1\n let last = nextLine\n\n while (nextLine < endLine) {\n if (state.isEmpty(nextLine)) {\n nextLine++\n continue\n }\n\n if (state.sCount[nextLine] - state.blkIndent >= 4) {\n nextLine++\n last = nextLine\n continue\n }\n break\n }\n\n state.line = last\n\n const token = state.push('code_block', 'code', 0)\n token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + '\\n'\n token.map = [startLine, state.line]\n\n return true\n}\n","// fences (``` lang, ~~~ lang)\n\nexport default function fence (state, startLine, endLine, silent) {\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n let max = state.eMarks[startLine]\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n if (pos + 3 > max) { return false }\n\n const marker = state.src.charCodeAt(pos)\n\n if (marker !== 0x7E/* ~ */ && marker !== 0x60 /* ` */) {\n return false\n }\n\n // scan marker length\n let mem = pos\n pos = state.skipChars(pos, marker)\n\n let len = pos - mem\n\n if (len < 3) { return false }\n\n const markup = state.src.slice(mem, pos)\n const params = state.src.slice(pos, max)\n\n if (marker === 0x60 /* ` */) {\n if (params.indexOf(String.fromCharCode(marker)) >= 0) {\n return false\n }\n }\n\n // Since start is found, we can report success here in validation mode\n if (silent) { return true }\n\n // search end of block\n let nextLine = startLine\n let haveEndMarker = false\n\n for (;;) {\n nextLine++\n if (nextLine >= endLine) {\n // unclosed block should be autoclosed by end of document.\n // also block seems to be autoclosed by end of parent\n break\n }\n\n pos = mem = state.bMarks[nextLine] + state.tShift[nextLine]\n max = state.eMarks[nextLine]\n\n if (pos < max && state.sCount[nextLine] < state.blkIndent) {\n // non-empty line with negative indent should stop the list:\n // - ```\n // test\n break\n }\n\n if (state.src.charCodeAt(pos) !== marker) { continue }\n\n if (state.sCount[nextLine] - state.blkIndent >= 4) {\n // closing fence should be indented less than 4 spaces\n continue\n }\n\n pos = state.skipChars(pos, marker)\n\n // closing code fence must be at least as long as the opening one\n if (pos - mem < len) { continue }\n\n // make sure tail has spaces only\n pos = state.skipSpaces(pos)\n\n if (pos < max) { continue }\n\n haveEndMarker = true\n // found!\n break\n }\n\n // If a fence has heading spaces, they should be removed from its inner block\n len = state.sCount[startLine]\n\n state.line = nextLine + (haveEndMarker ? 1 : 0)\n\n const token = state.push('fence', 'code', 0)\n token.info = params\n token.content = state.getLines(startLine + 1, nextLine, len, true)\n token.markup = markup\n token.map = [startLine, state.line]\n\n return true\n}\n","// Block quotes\n\nimport { isSpace } from '../common/utils.mjs'\n\nexport default function blockquote (state, startLine, endLine, silent) {\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n let max = state.eMarks[startLine]\n\n const oldLineMax = state.lineMax\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n // check the block quote marker\n if (state.src.charCodeAt(pos) !== 0x3E/* > */) { return false }\n\n // we know that it's going to be a valid blockquote,\n // so no point trying to find the end of it in silent mode\n if (silent) { return true }\n\n const oldBMarks = []\n const oldBSCount = []\n const oldSCount = []\n const oldTShift = []\n\n const terminatorRules = state.md.block.ruler.getRules('blockquote')\n\n const oldParentType = state.parentType\n state.parentType = 'blockquote'\n let lastLineEmpty = false\n let nextLine\n\n // Search the end of the block\n //\n // Block ends with either:\n // 1. an empty line outside:\n // ```\n // > test\n //\n // ```\n // 2. an empty line inside:\n // ```\n // >\n // test\n // ```\n // 3. another tag:\n // ```\n // > test\n // - - -\n // ```\n for (nextLine = startLine; nextLine < endLine; nextLine++) {\n // check if it's outdented, i.e. it's inside list item and indented\n // less than said list item:\n //\n // ```\n // 1. anything\n // > current blockquote\n // 2. checking this line\n // ```\n const isOutdented = state.sCount[nextLine] < state.blkIndent\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine]\n max = state.eMarks[nextLine]\n\n if (pos >= max) {\n // Case 1: line is not inside the blockquote, and this line is empty.\n break\n }\n\n if (state.src.charCodeAt(pos++) === 0x3E/* > */ && !isOutdented) {\n // This line is inside the blockquote.\n\n // set offset past spaces and \">\"\n let initial = state.sCount[nextLine] + 1\n let spaceAfterMarker\n let adjustTab\n\n // skip one optional space after '>'\n if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n // ' > test '\n // ^ -- position start of line here:\n pos++\n initial++\n adjustTab = false\n spaceAfterMarker = true\n } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n spaceAfterMarker = true\n\n if ((state.bsCount[nextLine] + initial) % 4 === 3) {\n // ' >\\t test '\n // ^ -- position start of line here (tab has width===1)\n pos++\n initial++\n adjustTab = false\n } else {\n // ' >\\t test '\n // ^ -- position start of line here + shift bsCount slightly\n // to make extra space appear\n adjustTab = true\n }\n } else {\n spaceAfterMarker = false\n }\n\n let offset = initial\n oldBMarks.push(state.bMarks[nextLine])\n state.bMarks[nextLine] = pos\n\n while (pos < max) {\n const ch = state.src.charCodeAt(pos)\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4\n } else {\n offset++\n }\n } else {\n break\n }\n\n pos++\n }\n\n lastLineEmpty = pos >= max\n\n oldBSCount.push(state.bsCount[nextLine])\n state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0)\n\n oldSCount.push(state.sCount[nextLine])\n state.sCount[nextLine] = offset - initial\n\n oldTShift.push(state.tShift[nextLine])\n state.tShift[nextLine] = pos - state.bMarks[nextLine]\n continue\n }\n\n // Case 2: line is not inside the blockquote, and the last line was empty.\n if (lastLineEmpty) { break }\n\n // Case 3: another tag found.\n let terminate = false\n for (let i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true\n break\n }\n }\n\n if (terminate) {\n // Quirk to enforce \"hard termination mode\" for paragraphs;\n // normally if you call `tokenize(state, startLine, nextLine)`,\n // paragraphs will look below nextLine for paragraph continuation,\n // but if blockquote is terminated by another tag, they shouldn't\n state.lineMax = nextLine\n\n if (state.blkIndent !== 0) {\n // state.blkIndent was non-zero, we now set it to zero,\n // so we need to re-calculate all offsets to appear as\n // if indent wasn't changed\n oldBMarks.push(state.bMarks[nextLine])\n oldBSCount.push(state.bsCount[nextLine])\n oldTShift.push(state.tShift[nextLine])\n oldSCount.push(state.sCount[nextLine])\n state.sCount[nextLine] -= state.blkIndent\n }\n\n break\n }\n\n oldBMarks.push(state.bMarks[nextLine])\n oldBSCount.push(state.bsCount[nextLine])\n oldTShift.push(state.tShift[nextLine])\n oldSCount.push(state.sCount[nextLine])\n\n // A negative indentation means that this is a paragraph continuation\n //\n state.sCount[nextLine] = -1\n }\n\n const oldIndent = state.blkIndent\n state.blkIndent = 0\n\n const token_o = state.push('blockquote_open', 'blockquote', 1)\n token_o.markup = '>'\n const lines = [startLine, 0]\n token_o.map = lines\n\n state.md.block.tokenize(state, startLine, nextLine)\n\n const token_c = state.push('blockquote_close', 'blockquote', -1)\n token_c.markup = '>'\n\n state.lineMax = oldLineMax\n state.parentType = oldParentType\n lines[1] = state.line\n\n // Restore original tShift; this might not be necessary since the parser\n // has already been here, but just to make sure we can do that.\n for (let i = 0; i < oldTShift.length; i++) {\n state.bMarks[i + startLine] = oldBMarks[i]\n state.tShift[i + startLine] = oldTShift[i]\n state.sCount[i + startLine] = oldSCount[i]\n state.bsCount[i + startLine] = oldBSCount[i]\n }\n state.blkIndent = oldIndent\n\n return true\n}\n","// Horizontal rule\n\nimport { isSpace } from '../common/utils.mjs'\n\nexport default function hr (state, startLine, endLine, silent) {\n const max = state.eMarks[startLine]\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n const marker = state.src.charCodeAt(pos++)\n\n // Check hr marker\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x5F/* _ */) {\n return false\n }\n\n // markers can be mixed with spaces, but there should be at least 3 of them\n\n let cnt = 1\n while (pos < max) {\n const ch = state.src.charCodeAt(pos++)\n if (ch !== marker && !isSpace(ch)) { return false }\n if (ch === marker) { cnt++ }\n }\n\n if (cnt < 3) { return false }\n\n if (silent) { return true }\n\n state.line = startLine + 1\n\n const token = state.push('hr', 'hr', 0)\n token.map = [startLine, state.line]\n token.markup = Array(cnt + 1).join(String.fromCharCode(marker))\n\n return true\n}\n","// Lists\n\nimport { isSpace } from '../common/utils.mjs'\n\n// Search `[-+*][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipBulletListMarker (state, startLine) {\n const max = state.eMarks[startLine]\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n\n const marker = state.src.charCodeAt(pos++)\n // Check bullet\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x2B/* + */) {\n return -1\n }\n\n if (pos < max) {\n const ch = state.src.charCodeAt(pos)\n\n if (!isSpace(ch)) {\n // \" -test \" - is not a list item\n return -1\n }\n }\n\n return pos\n}\n\n// Search `\\d+[.)][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipOrderedListMarker (state, startLine) {\n const start = state.bMarks[startLine] + state.tShift[startLine]\n const max = state.eMarks[startLine]\n let pos = start\n\n // List marker should have at least 2 chars (digit + dot)\n if (pos + 1 >= max) { return -1 }\n\n let ch = state.src.charCodeAt(pos++)\n\n if (ch < 0x30/* 0 */ || ch > 0x39/* 9 */) { return -1 }\n\n for (;;) {\n // EOL -> fail\n if (pos >= max) { return -1 }\n\n ch = state.src.charCodeAt(pos++)\n\n if (ch >= 0x30/* 0 */ && ch <= 0x39/* 9 */) {\n // List marker should have no more than 9 digits\n // (prevents integer overflow in browsers)\n if (pos - start >= 10) { return -1 }\n\n continue\n }\n\n // found valid marker\n if (ch === 0x29/* ) */ || ch === 0x2e/* . */) {\n break\n }\n\n return -1\n }\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos)\n\n if (!isSpace(ch)) {\n // \" 1.test \" - is not a list item\n return -1\n }\n }\n return pos\n}\n\nfunction markTightParagraphs (state, idx) {\n const level = state.level + 2\n\n for (let i = idx + 2, l = state.tokens.length - 2; i < l; i++) {\n if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {\n state.tokens[i + 2].hidden = true\n state.tokens[i].hidden = true\n i += 2\n }\n }\n}\n\nexport default function list (state, startLine, endLine, silent) {\n let max, pos, start, token\n let nextLine = startLine\n let tight = true\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[nextLine] - state.blkIndent >= 4) { return false }\n\n // Special case:\n // - item 1\n // - item 2\n // - item 3\n // - item 4\n // - this one is a paragraph continuation\n if (state.listIndent >= 0 &&\n state.sCount[nextLine] - state.listIndent >= 4 &&\n state.sCount[nextLine] < state.blkIndent) {\n return false\n }\n\n let isTerminatingParagraph = false\n\n // limit conditions when list can interrupt\n // a paragraph (validation mode only)\n if (silent && state.parentType === 'paragraph') {\n // Next list item should still terminate previous list item;\n //\n // This code can fail if plugins use blkIndent as well as lists,\n // but I hope the spec gets fixed long before that happens.\n //\n if (state.sCount[nextLine] >= state.blkIndent) {\n isTerminatingParagraph = true\n }\n }\n\n // Detect list type and position after marker\n let isOrdered\n let markerValue\n let posAfterMarker\n if ((posAfterMarker = skipOrderedListMarker(state, nextLine)) >= 0) {\n isOrdered = true\n start = state.bMarks[nextLine] + state.tShift[nextLine]\n markerValue = Number(state.src.slice(start, posAfterMarker - 1))\n\n // If we're starting a new ordered list right after\n // a paragraph, it should start with 1.\n if (isTerminatingParagraph && markerValue !== 1) return false\n } else if ((posAfterMarker = skipBulletListMarker(state, nextLine)) >= 0) {\n isOrdered = false\n } else {\n return false\n }\n\n // If we're starting a new unordered list right after\n // a paragraph, first line should not be empty.\n if (isTerminatingParagraph) {\n if (state.skipSpaces(posAfterMarker) >= state.eMarks[nextLine]) return false\n }\n\n // For validation mode we can terminate immediately\n if (silent) { return true }\n\n // We should terminate list on style change. Remember first one to compare.\n const markerCharCode = state.src.charCodeAt(posAfterMarker - 1)\n\n // Start list\n const listTokIdx = state.tokens.length\n\n if (isOrdered) {\n token = state.push('ordered_list_open', 'ol', 1)\n if (markerValue !== 1) {\n token.attrs = [['start', markerValue]]\n }\n } else {\n token = state.push('bullet_list_open', 'ul', 1)\n }\n\n const listLines = [nextLine, 0]\n token.map = listLines\n token.markup = String.fromCharCode(markerCharCode)\n\n //\n // Iterate list items\n //\n\n let prevEmptyEnd = false\n const terminatorRules = state.md.block.ruler.getRules('list')\n\n const oldParentType = state.parentType\n state.parentType = 'list'\n\n while (nextLine < endLine) {\n pos = posAfterMarker\n max = state.eMarks[nextLine]\n\n const initial = state.sCount[nextLine] + posAfterMarker - (state.bMarks[nextLine] + state.tShift[nextLine])\n let offset = initial\n\n while (pos < max) {\n const ch = state.src.charCodeAt(pos)\n\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine]) % 4\n } else if (ch === 0x20) {\n offset++\n } else {\n break\n }\n\n pos++\n }\n\n const contentStart = pos\n let indentAfterMarker\n\n if (contentStart >= max) {\n // trimming space in \"- \\n 3\" case, indent is 1 here\n indentAfterMarker = 1\n } else {\n indentAfterMarker = offset - initial\n }\n\n // If we have more than 4 spaces, the indent is 1\n // (the rest is just indented code block)\n if (indentAfterMarker > 4) { indentAfterMarker = 1 }\n\n // \" - test\"\n // ^^^^^ - calculating total length of this thing\n const indent = initial + indentAfterMarker\n\n // Run subparser & write tokens\n token = state.push('list_item_open', 'li', 1)\n token.markup = String.fromCharCode(markerCharCode)\n const itemLines = [nextLine, 0]\n token.map = itemLines\n if (isOrdered) {\n token.info = state.src.slice(start, posAfterMarker - 1)\n }\n\n // change current state, then restore it after parser subcall\n const oldTight = state.tight\n const oldTShift = state.tShift[nextLine]\n const oldSCount = state.sCount[nextLine]\n\n // - example list\n // ^ listIndent position will be here\n // ^ blkIndent position will be here\n //\n const oldListIndent = state.listIndent\n state.listIndent = state.blkIndent\n state.blkIndent = indent\n\n state.tight = true\n state.tShift[nextLine] = contentStart - state.bMarks[nextLine]\n state.sCount[nextLine] = offset\n\n if (contentStart >= max && state.isEmpty(nextLine + 1)) {\n // workaround for this case\n // (list item is empty, list terminates before \"foo\"):\n // ~~~~~~~~\n // -\n //\n // foo\n // ~~~~~~~~\n state.line = Math.min(state.line + 2, endLine)\n } else {\n state.md.block.tokenize(state, nextLine, endLine, true)\n }\n\n // If any of list item is tight, mark list as tight\n if (!state.tight || prevEmptyEnd) {\n tight = false\n }\n // Item become loose if finish with empty line,\n // but we should filter last element, because it means list finish\n prevEmptyEnd = (state.line - nextLine) > 1 && state.isEmpty(state.line - 1)\n\n state.blkIndent = state.listIndent\n state.listIndent = oldListIndent\n state.tShift[nextLine] = oldTShift\n state.sCount[nextLine] = oldSCount\n state.tight = oldTight\n\n token = state.push('list_item_close', 'li', -1)\n token.markup = String.fromCharCode(markerCharCode)\n\n nextLine = state.line\n itemLines[1] = nextLine\n\n if (nextLine >= endLine) { break }\n\n //\n // Try to check if list is terminated or continued.\n //\n if (state.sCount[nextLine] < state.blkIndent) { break }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[nextLine] - state.blkIndent >= 4) { break }\n\n // fail if terminating block found\n let terminate = false\n for (let i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true\n break\n }\n }\n if (terminate) { break }\n\n // fail if list has another type\n if (isOrdered) {\n posAfterMarker = skipOrderedListMarker(state, nextLine)\n if (posAfterMarker < 0) { break }\n start = state.bMarks[nextLine] + state.tShift[nextLine]\n } else {\n posAfterMarker = skipBulletListMarker(state, nextLine)\n if (posAfterMarker < 0) { break }\n }\n\n if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) { break }\n }\n\n // Finalize list\n if (isOrdered) {\n token = state.push('ordered_list_close', 'ol', -1)\n } else {\n token = state.push('bullet_list_close', 'ul', -1)\n }\n token.markup = String.fromCharCode(markerCharCode)\n\n listLines[1] = nextLine\n state.line = nextLine\n\n state.parentType = oldParentType\n\n // mark paragraphs tight if needed\n if (tight) {\n markTightParagraphs(state, listTokIdx)\n }\n\n return true\n}\n","import { isSpace, normalizeReference } from '../common/utils.mjs'\n\nexport default function reference (state, startLine, _endLine, silent) {\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n let max = state.eMarks[startLine]\n let nextLine = startLine + 1\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n if (state.src.charCodeAt(pos) !== 0x5B/* [ */) { return false }\n\n function getNextLine (nextLine) {\n const endLine = state.lineMax\n\n if (nextLine >= endLine || state.isEmpty(nextLine)) {\n // empty line or end of input\n return null\n }\n\n let isContinuation = false\n\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (state.sCount[nextLine] - state.blkIndent > 3) { isContinuation = true }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { isContinuation = true }\n\n if (!isContinuation) {\n const terminatorRules = state.md.block.ruler.getRules('reference')\n const oldParentType = state.parentType\n state.parentType = 'reference'\n\n // Some tags can terminate paragraph without empty line.\n let terminate = false\n for (let i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true\n break\n }\n }\n\n state.parentType = oldParentType\n if (terminate) {\n // terminated by another block\n return null\n }\n }\n\n const pos = state.bMarks[nextLine] + state.tShift[nextLine]\n const max = state.eMarks[nextLine]\n\n // max + 1 explicitly includes the newline\n return state.src.slice(pos, max + 1)\n }\n\n let str = state.src.slice(pos, max + 1)\n\n max = str.length\n let labelEnd = -1\n\n for (pos = 1; pos < max; pos++) {\n const ch = str.charCodeAt(pos)\n if (ch === 0x5B /* [ */) {\n return false\n } else if (ch === 0x5D /* ] */) {\n labelEnd = pos\n break\n } else if (ch === 0x0A /* \\n */) {\n const lineContent = getNextLine(nextLine)\n if (lineContent !== null) {\n str += lineContent\n max = str.length\n nextLine++\n }\n } else if (ch === 0x5C /* \\ */) {\n pos++\n if (pos < max && str.charCodeAt(pos) === 0x0A) {\n const lineContent = getNextLine(nextLine)\n if (lineContent !== null) {\n str += lineContent\n max = str.length\n nextLine++\n }\n }\n }\n }\n\n if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A/* : */) { return false }\n\n // [label]: destination 'title'\n // ^^^ skip optional whitespace here\n for (pos = labelEnd + 2; pos < max; pos++) {\n const ch = str.charCodeAt(pos)\n if (ch === 0x0A) {\n const lineContent = getNextLine(nextLine)\n if (lineContent !== null) {\n str += lineContent\n max = str.length\n nextLine++\n }\n } else if (isSpace(ch)) {\n /* eslint no-empty:0 */\n } else {\n break\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^^^^^ parse this\n const destRes = state.md.helpers.parseLinkDestination(str, pos, max)\n if (!destRes.ok) { return false }\n\n const href = state.md.normalizeLink(destRes.str)\n if (!state.md.validateLink(href)) { return false }\n\n pos = destRes.pos\n\n // save cursor state, we could require to rollback later\n const destEndPos = pos\n const destEndLineNo = nextLine\n\n // [label]: destination 'title'\n // ^^^ skipping those spaces\n const start = pos\n for (; pos < max; pos++) {\n const ch = str.charCodeAt(pos)\n if (ch === 0x0A) {\n const lineContent = getNextLine(nextLine)\n if (lineContent !== null) {\n str += lineContent\n max = str.length\n nextLine++\n }\n } else if (isSpace(ch)) {\n /* eslint no-empty:0 */\n } else {\n break\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^ parse this\n let titleRes = state.md.helpers.parseLinkTitle(str, pos, max)\n while (titleRes.can_continue) {\n const lineContent = getNextLine(nextLine)\n if (lineContent === null) break\n str += lineContent\n pos = max\n max = str.length\n nextLine++\n titleRes = state.md.helpers.parseLinkTitle(str, pos, max, titleRes)\n }\n let title\n\n if (pos < max && start !== pos && titleRes.ok) {\n title = titleRes.str\n pos = titleRes.pos\n } else {\n title = ''\n pos = destEndPos\n nextLine = destEndLineNo\n }\n\n // skip trailing spaces until the rest of the line\n while (pos < max) {\n const ch = str.charCodeAt(pos)\n if (!isSpace(ch)) { break }\n pos++\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n if (title) {\n // garbage at the end of the line after title,\n // but it could still be a valid reference if we roll back\n title = ''\n pos = destEndPos\n nextLine = destEndLineNo\n while (pos < max) {\n const ch = str.charCodeAt(pos)\n if (!isSpace(ch)) { break }\n pos++\n }\n }\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n // garbage at the end of the line\n return false\n }\n\n const label = normalizeReference(str.slice(1, labelEnd))\n if (!label) {\n // CommonMark 0.20 disallows empty labels\n return false\n }\n\n // Reference can not terminate anything. This check is for safety only.\n /* istanbul ignore if */\n if (silent) { return true }\n\n if (typeof state.env.references === 'undefined') {\n state.env.references = {}\n }\n if (typeof state.env.references[label] === 'undefined') {\n state.env.references[label] = { title, href }\n }\n\n state.line = nextLine\n return true\n}\n","// List of valid html blocks names, according to commonmark spec\n// https://spec.commonmark.org/0.30/#html-blocks\n\nexport default [\n 'address',\n 'article',\n 'aside',\n 'base',\n 'basefont',\n 'blockquote',\n 'body',\n 'caption',\n 'center',\n 'col',\n 'colgroup',\n 'dd',\n 'details',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'frame',\n 'frameset',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hr',\n 'html',\n 'iframe',\n 'legend',\n 'li',\n 'link',\n 'main',\n 'menu',\n 'menuitem',\n 'nav',\n 'noframes',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'param',\n 'search',\n 'section',\n 'summary',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'track',\n 'ul'\n]\n","// Regexps to match html elements\n\nconst attr_name = '[a-zA-Z_:][a-zA-Z0-9:._-]*'\n\nconst unquoted = '[^\"\\'=<>`\\\\x00-\\\\x20]+'\nconst single_quoted = \"'[^']*'\"\nconst double_quoted = '\"[^\"]*\"'\n\nconst attr_value = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')'\n\nconst attribute = '(?:\\\\s+' + attr_name + '(?:\\\\s*=\\\\s*' + attr_value + ')?)'\n\nconst open_tag = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>'\n\nconst close_tag = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>'\nconst comment = '<!---?>|<!--(?:[^-]|-[^-]|--[^>])*-->'\nconst processing = '<[?][\\\\s\\\\S]*?[?]>'\nconst declaration = '<![A-Za-z][^>]*>'\nconst cdata = '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>'\n\nconst HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment +\n '|' + processing + '|' + declaration + '|' + cdata + ')')\nconst HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')')\n\nexport { HTML_TAG_RE, HTML_OPEN_CLOSE_TAG_RE }\n","// HTML block\n\nimport block_names from '../common/html_blocks.mjs'\nimport { HTML_OPEN_CLOSE_TAG_RE } from '../common/html_re.mjs'\n\n// An array of opening and corresponding closing sequences for html tags,\n// last argument defines whether it can terminate a paragraph or not\n//\nconst HTML_SEQUENCES = [\n [/^<(script|pre|style|textarea)(?=(\\s|>|$))/i, /<\\/(script|pre|style|textarea)>/i, true],\n [/^<!--/, /-->/, true],\n [/^<\\?/, /\\?>/, true],\n [/^<![A-Z]/, />/, true],\n [/^<!\\[CDATA\\[/, /\\]\\]>/, true],\n [new RegExp('^</?(' + block_names.join('|') + ')(?=(\\\\s|/?>|$))', 'i'), /^$/, true],\n [new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + '\\\\s*$'), /^$/, false]\n]\n\nexport default function html_block (state, startLine, endLine, silent) {\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n let max = state.eMarks[startLine]\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n if (!state.md.options.html) { return false }\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false }\n\n let lineText = state.src.slice(pos, max)\n\n let i = 0\n for (; i < HTML_SEQUENCES.length; i++) {\n if (HTML_SEQUENCES[i][0].test(lineText)) { break }\n }\n if (i === HTML_SEQUENCES.length) { return false }\n\n if (silent) {\n // true if this sequence can be a terminator, false otherwise\n return HTML_SEQUENCES[i][2]\n }\n\n let nextLine = startLine + 1\n\n // If we are here - we detected HTML block.\n // Let's roll down till block end.\n if (!HTML_SEQUENCES[i][1].test(lineText)) {\n for (; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break }\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine]\n max = state.eMarks[nextLine]\n lineText = state.src.slice(pos, max)\n\n if (HTML_SEQUENCES[i][1].test(lineText)) {\n if (lineText.length !== 0) { nextLine++ }\n break\n }\n }\n }\n\n state.line = nextLine\n\n const token = state.push('html_block', '', 0)\n token.map = [startLine, nextLine]\n token.content = state.getLines(startLine, nextLine, state.blkIndent, true)\n\n return true\n}\n","// heading (#, ##, ...)\n\nimport { isSpace } from '../common/utils.mjs'\n\nexport default function heading (state, startLine, endLine, silent) {\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n let max = state.eMarks[startLine]\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n let ch = state.src.charCodeAt(pos)\n\n if (ch !== 0x23/* # */ || pos >= max) { return false }\n\n // count heading level\n let level = 1\n ch = state.src.charCodeAt(++pos)\n while (ch === 0x23/* # */ && pos < max && level <= 6) {\n level++\n ch = state.src.charCodeAt(++pos)\n }\n\n if (level > 6 || (pos < max && !isSpace(ch))) { return false }\n\n if (silent) { return true }\n\n // Let's cut tails like ' ### ' from the end of string\n\n max = state.skipSpacesBack(max, pos)\n const tmp = state.skipCharsBack(max, 0x23, pos) // #\n if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) {\n max = tmp\n }\n\n state.line = startLine + 1\n\n const token_o = state.push('heading_open', 'h' + String(level), 1)\n token_o.markup = '########'.slice(0, level)\n token_o.map = [startLine, state.line]\n\n const token_i = state.push('inline', '', 0)\n token_i.content = state.src.slice(pos, max).trim()\n token_i.map = [startLine, state.line]\n token_i.children = []\n\n const token_c = state.push('heading_close', 'h' + String(level), -1)\n token_c.markup = '########'.slice(0, level)\n\n return true\n}\n","// lheading (---, ===)\n\nexport default function lheading (state, startLine, endLine/*, silent */) {\n const terminatorRules = state.md.block.ruler.getRules('paragraph')\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n const oldParentType = state.parentType\n state.parentType = 'paragraph' // use paragraph to match terminatorRules\n\n // jump line-by-line until empty one or EOF\n let level = 0\n let marker\n let nextLine = startLine + 1\n\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (state.sCount[nextLine] - state.blkIndent > 3) { continue }\n\n //\n // Check for underline in setext header\n //\n if (state.sCount[nextLine] >= state.blkIndent) {\n let pos = state.bMarks[nextLine] + state.tShift[nextLine]\n const max = state.eMarks[nextLine]\n\n if (pos < max) {\n marker = state.src.charCodeAt(pos)\n\n if (marker === 0x2D/* - */ || marker === 0x3D/* = */) {\n pos = state.skipChars(pos, marker)\n pos = state.skipSpaces(pos)\n\n if (pos >= max) {\n level = (marker === 0x3D/* = */ ? 1 : 2)\n break\n }\n }\n }\n }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue }\n\n // Some tags can terminate paragraph without empty line.\n let terminate = false\n for (let i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true\n break\n }\n }\n if (terminate) { break }\n }\n\n if (!level) {\n // Didn't find valid underline\n return false\n }\n\n const content = state.getLines(startLine, nextLine, state.blkIndent, false).trim()\n\n state.line = nextLine + 1\n\n const token_o = state.push('heading_open', 'h' + String(level), 1)\n token_o.markup = String.fromCharCode(marker)\n token_o.map = [startLine, state.line]\n\n const token_i = state.push('inline', '', 0)\n token_i.content = content\n token_i.map = [startLine, state.line - 1]\n token_i.children = []\n\n const token_c = state.push('heading_close', 'h' + String(level), -1)\n token_c.markup = String.fromCharCode(marker)\n\n state.parentType = oldParentType\n\n return true\n}\n","// Paragraph\n\nexport default function paragraph (state, startLine, endLine) {\n const terminatorRules = state.md.block.ruler.getRules('paragraph')\n const oldParentType = state.parentType\n let nextLine = startLine + 1\n state.parentType = 'paragraph'\n\n // jump line-by-line until empty one or EOF\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (state.sCount[nextLine] - state.blkIndent > 3) { continue }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue }\n\n // Some tags can terminate paragraph without empty line.\n let terminate = false\n for (let i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true\n break\n }\n }\n if (terminate) { break }\n }\n\n const content = state.getLines(startLine, nextLine, state.blkIndent, false).trim()\n\n state.line = nextLine\n\n const token_o = state.push('paragraph_open', 'p', 1)\n token_o.map = [startLine, state.line]\n\n const token_i = state.push('inline', '', 0)\n token_i.content = content\n token_i.map = [startLine, state.line]\n token_i.children = []\n\n state.push('paragraph_close', 'p', -1)\n\n state.parentType = oldParentType\n\n return true\n}\n","/** internal\n * class ParserBlock\n *\n * Block-level tokenizer.\n **/\n\nimport Ruler from './ruler.mjs'\nimport StateBlock from './rules_block/state_block.mjs'\n\nimport r_table from './rules_block/table.mjs'\nimport r_code from './rules_block/code.mjs'\nimport r_fence from './rules_block/fence.mjs'\nimport r_blockquote from './rules_block/blockquote.mjs'\nimport r_hr from './rules_block/hr.mjs'\nimport r_list from './rules_block/list.mjs'\nimport r_reference from './rules_block/reference.mjs'\nimport r_html_block from './rules_block/html_block.mjs'\nimport r_heading from './rules_block/heading.mjs'\nimport r_lheading from './rules_block/lheading.mjs'\nimport r_paragraph from './rules_block/paragraph.mjs'\n\nconst _rules = [\n // First 2 params - rule name & source. Secondary array - list of rules,\n // which can be terminated by this one.\n ['table', r_table, ['paragraph', 'reference']],\n ['code', r_code],\n ['fence', r_fence, ['paragraph', 'reference', 'blockquote', 'list']],\n ['blockquote', r_blockquote, ['paragraph', 'reference', 'blockquote', 'list']],\n ['hr', r_hr, ['paragraph', 'reference', 'blockquote', 'list']],\n ['list', r_list, ['paragraph', 'reference', 'blockquote']],\n ['reference', r_reference],\n ['html_block', r_html_block, ['paragraph', 'reference', 'blockquote']],\n ['heading', r_heading, ['paragraph', 'reference', 'blockquote']],\n ['lheading', r_lheading],\n ['paragraph', r_paragraph]\n]\n\n/**\n * new ParserBlock()\n **/\nfunction ParserBlock () {\n /**\n * ParserBlock#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of block rules.\n **/\n this.ruler = new Ruler()\n\n for (let i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1], { alt: (_rules[i][2] || []).slice() })\n }\n}\n\n// Generate tokens for input range\n//\nParserBlock.prototype.tokenize = function (state, startLine, endLine) {\n const rules = this.ruler.getRules('')\n const len = rules.length\n const maxNesting = state.md.options.maxNesting\n let line = startLine\n let hasEmptyLines = false\n\n while (line < endLine) {\n state.line = line = state.skipEmptyLines(line)\n if (line >= endLine) { break }\n\n // Termination condition for nested calls.\n // Nested calls currently used for blockquotes & lists\n if (state.sCount[line] < state.blkIndent) { break }\n\n // If nesting level exceeded - skip tail to the end. That's not ordinary\n // situation and we should not care about content.\n if (state.level >= maxNesting) {\n state.line = endLine\n break\n }\n\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.line`\n // - update `state.tokens`\n // - return true\n const prevLine = state.line\n let ok = false\n\n for (let i = 0; i < len; i++) {\n ok = rules[i](state, line, endLine, false)\n if (ok) {\n if (prevLine >= state.line) {\n throw new Error(\"block rule didn't increment state.line\")\n }\n break\n }\n }\n\n // this can only happen if user disables paragraph rule\n if (!ok) throw new Error('none of the block rules matched')\n\n // set state.tight if we had an empty line before current tag\n // i.e. latest empty line should not count\n state.tight = !hasEmptyLines\n\n // paragraph might \"eat\" one newline after it in nested lists\n if (state.isEmpty(state.line - 1)) {\n hasEmptyLines = true\n }\n\n line = state.line\n\n if (line < endLine && state.isEmpty(line)) {\n hasEmptyLines = true\n line++\n state.line = line\n }\n }\n}\n\n/**\n * ParserBlock.parse(str, md, env, outTokens)\n *\n * Process input string and push block tokens into `outTokens`\n **/\nParserBlock.prototype.parse = function (src, md, env, outTokens) {\n if (!src) { return }\n\n const state = new this.State(src, md, env, outTokens)\n\n this.tokenize(state, state.line, state.lineMax)\n}\n\nParserBlock.prototype.State = StateBlock\n\nexport default ParserBlock\n","// Inline parser state\n\nimport Token from '../token.mjs'\nimport { isWhiteSpace, isPunctChar, isMdAsciiPunct } from '../common/utils.mjs'\n\nfunction StateInline (src, md, env, outTokens) {\n this.src = src\n this.env = env\n this.md = md\n this.tokens = outTokens\n this.tokens_meta = Array(outTokens.length)\n\n this.pos = 0\n this.posMax = this.src.length\n this.level = 0\n this.pending = ''\n this.pendingLevel = 0\n\n // Stores { start: end } pairs. Useful for backtrack\n // optimization of pairs parse (emphasis, strikes).\n this.cache = {}\n\n // List of emphasis-like delimiters for current tag\n this.delimiters = []\n\n // Stack of delimiter lists for upper level tags\n this._prev_delimiters = []\n\n // backtick length => last seen position\n this.backticks = {}\n this.backticksScanned = false\n\n // Counter used to disable inline linkify-it execution\n // inside <a> and markdown links\n this.linkLevel = 0\n}\n\n// Flush pending text\n//\nStateInline.prototype.pushPending = function () {\n const token = new Token('text', '', 0)\n token.content = this.pending\n token.level = this.pendingLevel\n this.tokens.push(token)\n this.pending = ''\n return token\n}\n\n// Push new token to \"stream\".\n// If pending text exists - flush it as text token\n//\nStateInline.prototype.push = function (type, tag, nesting) {\n if (this.pending) {\n this.pushPending()\n }\n\n const token = new Token(type, tag, nesting)\n let token_meta = null\n\n if (nesting < 0) {\n // closing tag\n this.level--\n this.delimiters = this._prev_delimiters.pop()\n }\n\n token.level = this.level\n\n if (nesting > 0) {\n // opening tag\n this.level++\n this._prev_delimiters.push(this.delimiters)\n this.delimiters = []\n token_meta = { delimiters: this.delimiters }\n }\n\n this.pendingLevel = this.level\n this.tokens.push(token)\n this.tokens_meta.push(token_meta)\n return token\n}\n\n// Scan a sequence of emphasis-like markers, and determine whether\n// it can start an emphasis sequence or end an emphasis sequence.\n//\n// - start - position to scan from (it should point at a valid marker);\n// - canSplitWord - determine if these markers can be found inside a word\n//\nStateInline.prototype.scanDelims = function (start, canSplitWord) {\n const max = this.posMax\n const marker = this.src.charCodeAt(start)\n\n // treat beginning of the line as a whitespace\n const lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20\n\n let pos = start\n while (pos < max && this.src.charCodeAt(pos) === marker) { pos++ }\n\n const count = pos - start\n\n // treat end of the line as a whitespace\n const nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20\n\n const isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar))\n const isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar))\n\n const isLastWhiteSpace = isWhiteSpace(lastChar)\n const isNextWhiteSpace = isWhiteSpace(nextChar)\n\n const left_flanking =\n !isNextWhiteSpace && (!isNextPunctChar || isLastWhiteSpace || isLastPunctChar)\n const right_flanking =\n !isLastWhiteSpace && (!isLastPunctChar || isNextWhiteSpace || isNextPunctChar)\n\n const can_open = left_flanking && (canSplitWord || !right_flanking || isLastPunctChar)\n const can_close = right_flanking && (canSplitWord || !left_flanking || isNextPunctChar)\n\n return { can_open, can_close, length: count }\n}\n\n// re-export Token class to use in block rules\nStateInline.prototype.Token = Token\n\nexport default StateInline\n","// Skip text characters for text token, place those to pending buffer\n// and increment current pos\n\n// Rule to skip pure text\n// '{}$%@~+=:' reserved for extentions\n\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n\n// !!!! Don't confuse with \"Markdown ASCII Punctuation\" chars\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\nfunction isTerminatorChar (ch) {\n switch (ch) {\n case 0x0A/* \\n */:\n case 0x21/* ! */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2D/* - */:\n case 0x3A/* : */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true\n default:\n return false\n }\n}\n\nexport default function text (state, silent) {\n let pos = state.pos\n\n while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {\n pos++\n }\n\n if (pos === state.pos) { return false }\n\n if (!silent) { state.pending += state.src.slice(state.pos, pos) }\n\n state.pos = pos\n\n return true\n}\n\n// Alternative implementation, for memory.\n//\n// It costs 10% of performance, but allows extend terminators list, if place it\n// to `ParserInline` property. Probably, will switch to it sometime, such\n// flexibility required.\n\n/*\nvar TERMINATOR_RE = /[\\n!#$%&*+\\-:<=>@[\\\\\\]^_`{}~]/;\n\nmodule.exports = function text(state, silent) {\n var pos = state.pos,\n idx = state.src.slice(pos).search(TERMINATOR_RE);\n\n // first char is terminator -> empty text\n if (idx === 0) { return false; }\n\n // no terminator -> text till end of string\n if (idx < 0) {\n if (!silent) { state.pending += state.src.slice(pos); }\n state.pos = state.src.length;\n return true;\n }\n\n if (!silent) { state.pending += state.src.slice(pos, pos + idx); }\n\n state.pos += idx;\n\n return true;\n}; */\n","// Process links like https://example.org/\n\n// RFC3986: scheme = ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\nconst SCHEME_RE = /(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$/i\n\nexport default function linkify (state, silent) {\n if (!state.md.options.linkify) return false\n if (state.linkLevel > 0) return false\n\n const pos = state.pos\n const max = state.posMax\n\n if (pos + 3 > max) return false\n if (state.src.charCodeAt(pos) !== 0x3A/* : */) return false\n if (state.src.charCodeAt(pos + 1) !== 0x2F/* / */) return false\n if (state.src.charCodeAt(pos + 2) !== 0x2F/* / */) return false\n\n const match = state.pending.match(SCHEME_RE)\n if (!match) return false\n\n const proto = match[1]\n\n const link = state.md.linkify.matchAtStart(state.src.slice(pos - proto.length))\n if (!link) return false\n\n let url = link.url\n\n // invalid link, but still detected by linkify somehow;\n // need to check to prevent infinite loop below\n if (url.length <= proto.length) return false\n\n // disallow '*' at the end of the link (conflicts with emphasis)\n // do manual backsearch to avoid perf issues with regex /\\*+$/ on \"****...****a\".\n let urlEnd = url.length\n while (urlEnd > 0 && url.charCodeAt(urlEnd - 1) === 0x2A/* * */) {\n urlEnd--\n }\n if (urlEnd !== url.length) {\n url = url.slice(0, urlEnd)\n }\n\n const fullUrl = state.md.normalizeLink(url)\n if (!state.md.validateLink(fullUrl)) return false\n\n if (!silent) {\n state.pending = state.pending.slice(0, -proto.length)\n\n const token_o = state.push('link_open', 'a', 1)\n token_o.attrs = [['href', fullUrl]]\n token_o.markup = 'linkify'\n token_o.info = 'auto'\n\n const token_t = state.push('text', '', 0)\n token_t.content = state.md.normalizeLinkText(url)\n\n const token_c = state.push('link_close', 'a', -1)\n token_c.markup = 'linkify'\n token_c.info = 'auto'\n }\n\n state.pos += url.length - proto.length\n return true\n}\n","// Proceess '\\n'\n\nimport { isSpace } from '../common/utils.mjs'\n\nexport default function newline (state, silent) {\n let pos = state.pos\n\n if (state.src.charCodeAt(pos) !== 0x0A/* \\n */) { return false }\n\n const pmax = state.pending.length - 1\n const max = state.posMax\n\n // ' \\n' -> hardbreak\n // Lookup in pending chars is bad practice! Don't copy to other rules!\n // Pending string is stored in concat mode, indexed lookups will cause\n // convertion to flat mode.\n if (!silent) {\n if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) {\n if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) {\n // Find whitespaces tail of pending chars.\n let ws = pmax - 1\n while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 0x20) ws--\n\n state.pending = state.pending.slice(0, ws)\n state.push('hardbreak', 'br', 0)\n } else {\n state.pending = state.pending.slice(0, -1)\n state.push('softbreak', 'br', 0)\n }\n } else {\n state.push('softbreak', 'br', 0)\n }\n }\n\n pos++\n\n // skip heading spaces for next line\n while (pos < max && isSpace(state.src.charCodeAt(pos))) { pos++ }\n\n state.pos = pos\n return true\n}\n","// Process escaped chars and hardbreaks\n\nimport { isSpace } from '../common/utils.mjs'\n\nconst ESCAPED = []\n\nfor (let i = 0; i < 256; i++) { ESCAPED.push(0) }\n\n'\\\\!\"#$%&\\'()*+,./:;<=>?@[]^_`{|}~-'\n .split('').forEach(function (ch) { ESCAPED[ch.charCodeAt(0)] = 1 })\n\nexport default function escape (state, silent) {\n let pos = state.pos\n const max = state.posMax\n\n if (state.src.charCodeAt(pos) !== 0x5C/* \\ */) return false\n pos++\n\n // '\\' at the end of the inline block\n if (pos >= max) return false\n\n let ch1 = state.src.charCodeAt(pos)\n\n if (ch1 === 0x0A) {\n if (!silent) {\n state.push('hardbreak', 'br', 0)\n }\n\n pos++\n // skip leading whitespaces from next line\n while (pos < max) {\n ch1 = state.src.charCodeAt(pos)\n if (!isSpace(ch1)) break\n pos++\n }\n\n state.pos = pos\n return true\n }\n\n let escapedStr = state.src[pos]\n\n if (ch1 >= 0xD800 && ch1 <= 0xDBFF && pos + 1 < max) {\n const ch2 = state.src.charCodeAt(pos + 1)\n\n if (ch2 >= 0xDC00 && ch2 <= 0xDFFF) {\n escapedStr += state.src[pos + 1]\n pos++\n }\n }\n\n const origStr = '\\\\' + escapedStr\n\n if (!silent) {\n const token = state.push('text_special', '', 0)\n\n if (ch1 < 256 && ESCAPED[ch1] !== 0) {\n token.content = escapedStr\n } else {\n token.content = origStr\n }\n\n token.markup = origStr\n token.info = 'escape'\n }\n\n state.pos = pos + 1\n return true\n}\n","// Parse backticks\n\nexport default function backtick (state, silent) {\n let pos = state.pos\n const ch = state.src.charCodeAt(pos)\n\n if (ch !== 0x60/* ` */) { return false }\n\n const start = pos\n pos++\n const max = state.posMax\n\n // scan marker length\n while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++ }\n\n const marker = state.src.slice(start, pos)\n const openerLength = marker.length\n\n if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) {\n if (!silent) state.pending += marker\n state.pos += openerLength\n return true\n }\n\n let matchEnd = pos\n let matchStart\n\n // Nothing found in the cache, scan until the end of the line (or until marker is found)\n while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {\n matchEnd = matchStart + 1\n\n // scan marker length\n while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60/* ` */) { matchEnd++ }\n\n const closerLength = matchEnd - matchStart\n\n if (closerLength === openerLength) {\n // Found matching closer length.\n if (!silent) {\n const token = state.push('code_inline', 'code', 0)\n token.markup = marker\n token.content = state.src.slice(pos, matchStart)\n .replace(/\\n/g, ' ')\n .replace(/^ (.+) $/, '$1')\n }\n state.pos = matchEnd\n return true\n }\n\n // Some different length found, put it in cache as upper limit of where closer can be found\n state.backticks[closerLength] = matchStart\n }\n\n // Scanned through the end, didn't find anything\n state.backticksScanned = true\n\n if (!silent) state.pending += marker\n state.pos += openerLength\n return true\n}\n","// ~~strike through~~\n//\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nfunction strikethrough_tokenize (state, silent) {\n const start = state.pos\n const marker = state.src.charCodeAt(start)\n\n if (silent) { return false }\n\n if (marker !== 0x7E/* ~ */) { return false }\n\n const scanned = state.scanDelims(state.pos, true)\n let len = scanned.length\n const ch = String.fromCharCode(marker)\n\n if (len < 2) { return false }\n\n let token\n\n if (len % 2) {\n token = state.push('text', '', 0)\n token.content = ch\n len--\n }\n\n for (let i = 0; i < len; i += 2) {\n token = state.push('text', '', 0)\n token.content = ch + ch\n\n state.delimiters.push({\n marker,\n length: 0, // disable \"rule of 3\" length checks meant for emphasis\n token: state.tokens.length - 1,\n end: -1,\n open: scanned.can_open,\n close: scanned.can_close\n })\n }\n\n state.pos += scanned.length\n\n return true\n}\n\nfunction postProcess (state, delimiters) {\n let token\n const loneMarkers = []\n const max = delimiters.length\n\n for (let i = 0; i < max; i++) {\n const startDelim = delimiters[i]\n\n if (startDelim.marker !== 0x7E/* ~ */) {\n continue\n }\n\n if (startDelim.end === -1) {\n continue\n }\n\n const endDelim = delimiters[startDelim.end]\n\n token = state.tokens[startDelim.token]\n token.type = 's_open'\n token.tag = 's'\n token.nesting = 1\n token.markup = '~~'\n token.content = ''\n\n token = state.tokens[endDelim.token]\n token.type = 's_close'\n token.tag = 's'\n token.nesting = -1\n token.markup = '~~'\n token.content = ''\n\n if (state.tokens[endDelim.token - 1].type === 'text' &&\n state.tokens[endDelim.token - 1].content === '~') {\n loneMarkers.push(endDelim.token - 1)\n }\n }\n\n // If a marker sequence has an odd number of characters, it's splitted\n // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the\n // start of the sequence.\n //\n // So, we have to move all those markers after subsequent s_close tags.\n //\n while (loneMarkers.length) {\n const i = loneMarkers.pop()\n let j = i + 1\n\n while (j < state.tokens.length && state.tokens[j].type === 's_close') {\n j++\n }\n\n j--\n\n if (i !== j) {\n token = state.tokens[j]\n state.tokens[j] = state.tokens[i]\n state.tokens[i] = token\n }\n }\n}\n\n// Walk through delimiter list and replace text tokens with tags\n//\nfunction strikethrough_postProcess (state) {\n const tokens_meta = state.tokens_meta\n const max = state.tokens_meta.length\n\n postProcess(state, state.delimiters)\n\n for (let curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters)\n }\n }\n}\n\nexport default {\n tokenize: strikethrough_tokenize,\n postProcess: strikethrough_postProcess\n}\n","// Process *this* and _that_\n//\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nfunction emphasis_tokenize (state, silent) {\n const start = state.pos\n const marker = state.src.charCodeAt(start)\n\n if (silent) { return false }\n\n if (marker !== 0x5F /* _ */ && marker !== 0x2A /* * */) { return false }\n\n const scanned = state.scanDelims(state.pos, marker === 0x2A)\n\n for (let i = 0; i < scanned.length; i++) {\n const token = state.push('text', '', 0)\n token.content = String.fromCharCode(marker)\n\n state.delimiters.push({\n // Char code of the starting marker (number).\n //\n marker,\n\n // Total length of these series of delimiters.\n //\n length: scanned.length,\n\n // A position of the token this delimiter corresponds to.\n //\n token: state.tokens.length - 1,\n\n // If this delimiter is matched as a valid opener, `end` will be\n // equal to its position, otherwise it's `-1`.\n //\n end: -1,\n\n // Boolean flags that determine if this delimiter could open or close\n // an emphasis.\n //\n open: scanned.can_open,\n close: scanned.can_close\n })\n }\n\n state.pos += scanned.length\n\n return true\n}\n\nfunction postProcess (state, delimiters) {\n const max = delimiters.length\n\n for (let i = max - 1; i >= 0; i--) {\n const startDelim = delimiters[i]\n\n if (startDelim.marker !== 0x5F/* _ */ && startDelim.marker !== 0x2A/* * */) {\n continue\n }\n\n // Process only opening markers\n if (startDelim.end === -1) {\n continue\n }\n\n const endDelim = delimiters[startDelim.end]\n\n // If the previous delimiter has the same marker and is adjacent to this one,\n // merge those into one strong delimiter.\n //\n // `<em><em>whatever</em></em>` -> `<strong>whatever</strong>`\n //\n const isStrong = i > 0 &&\n delimiters[i - 1].end === startDelim.end + 1 &&\n // check that first two markers match and adjacent\n delimiters[i - 1].marker === startDelim.marker &&\n delimiters[i - 1].token === startDelim.token - 1 &&\n // check that last two markers are adjacent (we can safely assume they match)\n delimiters[startDelim.end + 1].token === endDelim.token + 1\n\n const ch = String.fromCharCode(startDelim.marker)\n\n const token_o = state.tokens[startDelim.token]\n token_o.type = isStrong ? 'strong_open' : 'em_open'\n token_o.tag = isStrong ? 'strong' : 'em'\n token_o.nesting = 1\n token_o.markup = isStrong ? ch + ch : ch\n token_o.content = ''\n\n const token_c = state.tokens[endDelim.token]\n token_c.type = isStrong ? 'strong_close' : 'em_close'\n token_c.tag = isStrong ? 'strong' : 'em'\n token_c.nesting = -1\n token_c.markup = isStrong ? ch + ch : ch\n token_c.content = ''\n\n if (isStrong) {\n state.tokens[delimiters[i - 1].token].content = ''\n state.tokens[delimiters[startDelim.end + 1].token].content = ''\n i--\n }\n }\n}\n\n// Walk through delimiter list and replace text tokens with tags\n//\nfunction emphasis_post_process (state) {\n const tokens_meta = state.tokens_meta\n const max = state.tokens_meta.length\n\n postProcess(state, state.delimiters)\n\n for (let curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters)\n }\n }\n}\n\nexport default {\n tokenize: emphasis_tokenize,\n postProcess: emphasis_post_process\n}\n","// Process [link](<to> \"stuff\")\n\nimport { normalizeReference, isSpace } from '../common/utils.mjs'\n\nexport default function link (state, silent) {\n let code, label, res, ref\n let href = ''\n let title = ''\n let start = state.pos\n let parseReference = true\n\n if (state.src.charCodeAt(state.pos) !== 0x5B/* [ */) { return false }\n\n const oldPos = state.pos\n const max = state.posMax\n const labelStart = state.pos + 1\n const labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true)\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false }\n\n let pos = labelEnd + 1\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // might have found a valid shortcut link, disable reference parsing\n parseReference = false\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n pos++\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos)\n if (!isSpace(code) && code !== 0x0A) { break }\n }\n if (pos >= max) { return false }\n\n // [link]( <href> \"title\" )\n // ^^^^^^ parsing link destination\n start = pos\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax)\n if (res.ok) {\n href = state.md.normalizeLink(res.str)\n if (state.md.validateLink(href)) {\n pos = res.pos\n } else {\n href = ''\n }\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n start = pos\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos)\n if (!isSpace(code) && code !== 0x0A) { break }\n }\n\n // [link]( <href> \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax)\n if (pos < max && start !== pos && res.ok) {\n title = res.str\n pos = res.pos\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos)\n if (!isSpace(code) && code !== 0x0A) { break }\n }\n }\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n // parsing a valid shortcut link failed, fallback to reference\n parseReference = true\n }\n pos++\n }\n\n if (parseReference) {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1\n pos = state.md.helpers.parseLinkLabel(state, pos)\n if (pos >= 0) {\n label = state.src.slice(start, pos++)\n } else {\n pos = labelEnd + 1\n }\n } else {\n pos = labelEnd + 1\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd) }\n\n ref = state.env.references[normalizeReference(label)]\n if (!ref) {\n state.pos = oldPos\n return false\n }\n href = ref.href\n title = ref.title\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n state.pos = labelStart\n state.posMax = labelEnd\n\n const token_o = state.push('link_open', 'a', 1)\n const attrs = [['href', href]]\n token_o.attrs = attrs\n if (title) {\n attrs.push(['title', title])\n }\n\n state.linkLevel++\n state.md.inline.tokenize(state)\n state.linkLevel--\n\n state.push('link_close', 'a', -1)\n }\n\n state.pos = pos\n state.posMax = max\n return true\n}\n","// Process \n\nimport { normalizeReference, isSpace } from '../common/utils.mjs'\n\nexport default function image (state, silent) {\n let code, content, label, pos, ref, res, title, start\n let href = ''\n const oldPos = state.pos\n const max = state.posMax\n\n if (state.src.charCodeAt(state.pos) !== 0x21/* ! */) { return false }\n if (state.src.charCodeAt(state.pos + 1) !== 0x5B/* [ */) { return false }\n\n const labelStart = state.pos + 2\n const labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false)\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false }\n\n pos = labelEnd + 1\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n pos++\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos)\n if (!isSpace(code) && code !== 0x0A) { break }\n }\n if (pos >= max) { return false }\n\n // [link]( <href> \"title\" )\n // ^^^^^^ parsing link destination\n start = pos\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax)\n if (res.ok) {\n href = state.md.normalizeLink(res.str)\n if (state.md.validateLink(href)) {\n pos = res.pos\n } else {\n href = ''\n }\n }\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n start = pos\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos)\n if (!isSpace(code) && code !== 0x0A) { break }\n }\n\n // [link]( <href> \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax)\n if (pos < max && start !== pos && res.ok) {\n title = res.str\n pos = res.pos\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos)\n if (!isSpace(code) && code !== 0x0A) { break }\n }\n } else {\n title = ''\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n state.pos = oldPos\n return false\n }\n pos++\n } else {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1\n pos = state.md.helpers.parseLinkLabel(state, pos)\n if (pos >= 0) {\n label = state.src.slice(start, pos++)\n } else {\n pos = labelEnd + 1\n }\n } else {\n pos = labelEnd + 1\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd) }\n\n ref = state.env.references[normalizeReference(label)]\n if (!ref) {\n state.pos = oldPos\n return false\n }\n href = ref.href\n title = ref.title\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n content = state.src.slice(labelStart, labelEnd)\n\n const tokens = []\n state.md.inline.parse(\n content,\n state.md,\n state.env,\n tokens\n )\n\n const token = state.push('image', 'img', 0)\n const attrs = [['src', href], ['alt', '']]\n token.attrs = attrs\n token.children = tokens\n token.content = content\n\n if (title) {\n attrs.push(['title', title])\n }\n }\n\n state.pos = pos\n state.posMax = max\n return true\n}\n","// Process autolinks '<protocol:...>'\n\n/* eslint max-len:0 */\nconst EMAIL_RE = /^([a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/\n/* eslint-disable-next-line no-control-regex */\nconst AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.-]{1,31}):([^<>\\x00-\\x20]*)$/\n\nexport default function autolink (state, silent) {\n let pos = state.pos\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false }\n\n const start = state.pos\n const max = state.posMax\n\n for (;;) {\n if (++pos >= max) return false\n\n const ch = state.src.charCodeAt(pos)\n\n if (ch === 0x3C /* < */) return false\n if (ch === 0x3E /* > */) break\n }\n\n const url = state.src.slice(start + 1, pos)\n\n if (AUTOLINK_RE.test(url)) {\n const fullUrl = state.md.normalizeLink(url)\n if (!state.md.validateLink(fullUrl)) { return false }\n\n if (!silent) {\n const token_o = state.push('link_open', 'a', 1)\n token_o.attrs = [['href', fullUrl]]\n token_o.markup = 'autolink'\n token_o.info = 'auto'\n\n const token_t = state.push('text', '', 0)\n token_t.content = state.md.normalizeLinkText(url)\n\n const token_c = state.push('link_close', 'a', -1)\n token_c.markup = 'autolink'\n token_c.info = 'auto'\n }\n\n state.pos += url.length + 2\n return true\n }\n\n if (EMAIL_RE.test(url)) {\n const fullUrl = state.md.normalizeLink('mailto:' + url)\n if (!state.md.validateLink(fullUrl)) { return false }\n\n if (!silent) {\n const token_o = state.push('link_open', 'a', 1)\n token_o.attrs = [['href', fullUrl]]\n token_o.markup = 'autolink'\n token_o.info = 'auto'\n\n const token_t = state.push('text', '', 0)\n token_t.content = state.md.normalizeLinkText(url)\n\n const token_c = state.push('link_close', 'a', -1)\n token_c.markup = 'autolink'\n token_c.info = 'auto'\n }\n\n state.pos += url.length + 2\n return true\n }\n\n return false\n}\n","// Process html tags\n\nimport { HTML_TAG_RE } from '../common/html_re.mjs'\n\nfunction isLinkOpen (str) {\n return /^<a[>\\s]/i.test(str)\n}\nfunction isLinkClose (str) {\n return /^<\\/a\\s*>/i.test(str)\n}\n\nfunction isLetter (ch) {\n /* eslint no-bitwise:0 */\n const lc = ch | 0x20 // to lower case\n return (lc >= 0x61/* a */) && (lc <= 0x7a/* z */)\n}\n\nexport default function html_inline (state, silent) {\n if (!state.md.options.html) { return false }\n\n // Check start\n const max = state.posMax\n const pos = state.pos\n if (state.src.charCodeAt(pos) !== 0x3C/* < */ ||\n pos + 2 >= max) {\n return false\n }\n\n // Quick fail on second char\n const ch = state.src.charCodeAt(pos + 1)\n if (ch !== 0x21/* ! */ &&\n ch !== 0x3F/* ? */ &&\n ch !== 0x2F/* / */ &&\n !isLetter(ch)) {\n return false\n }\n\n const match = state.src.slice(pos).match(HTML_TAG_RE)\n if (!match) { return false }\n\n if (!silent) {\n const token = state.push('html_inline', '', 0)\n token.content = match[0]\n\n if (isLinkOpen(token.content)) state.linkLevel++\n if (isLinkClose(token.content)) state.linkLevel--\n }\n state.pos += match[0].length\n return true\n}\n","// Process html entity - {, ¯, ", ...\n\nimport { decodeHTML } from 'entities'\nimport { isValidEntityCode, fromCodePoint } from '../common/utils.mjs'\n\nconst DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i\nconst NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i\n\nexport default function entity (state, silent) {\n const pos = state.pos\n const max = state.posMax\n\n if (state.src.charCodeAt(pos) !== 0x26/* & */) return false\n\n if (pos + 1 >= max) return false\n\n const ch = state.src.charCodeAt(pos + 1)\n\n if (ch === 0x23 /* # */) {\n const match = state.src.slice(pos).match(DIGITAL_RE)\n if (match) {\n if (!silent) {\n const code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10)\n\n const token = state.push('text_special', '', 0)\n token.content = isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD)\n token.markup = match[0]\n token.info = 'entity'\n }\n state.pos += match[0].length\n return true\n }\n } else {\n const match = state.src.slice(pos).match(NAMED_RE)\n if (match) {\n const decoded = decodeHTML(match[0])\n if (decoded !== match[0]) {\n if (!silent) {\n const token = state.push('text_special', '', 0)\n token.content = decoded\n token.markup = match[0]\n token.info = 'entity'\n }\n state.pos += match[0].length\n return true\n }\n }\n }\n\n return false\n}\n","// For each opening emphasis-like marker find a matching closing one\n//\n\nfunction processDelimiters (delimiters) {\n const openersBottom = {}\n const max = delimiters.length\n\n if (!max) return\n\n // headerIdx is the first delimiter of the current (where closer is) delimiter run\n let headerIdx = 0\n let lastTokenIdx = -2 // needs any value lower than -1\n const jumps = []\n\n for (let closerIdx = 0; closerIdx < max; closerIdx++) {\n const closer = delimiters[closerIdx]\n\n jumps.push(0)\n\n // markers belong to same delimiter run if:\n // - they have adjacent tokens\n // - AND markers are the same\n //\n if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) {\n headerIdx = closerIdx\n }\n\n lastTokenIdx = closer.token\n\n // Length is only used for emphasis-specific \"rule of 3\",\n // if it's not defined (in strikethrough or 3rd party plugins),\n // we can default it to 0 to disable those checks.\n //\n closer.length = closer.length || 0\n\n if (!closer.close) continue\n\n // Previously calculated lower bounds (previous fails)\n // for each marker, each delimiter length modulo 3,\n // and for whether this closer can be an opener;\n // https://github.com/commonmark/cmark/commit/34250e12ccebdc6372b8b49c44fab57c72443460\n /* eslint-disable-next-line no-prototype-builtins */\n if (!openersBottom.hasOwnProperty(closer.marker)) {\n openersBottom[closer.marker] = [-1, -1, -1, -1, -1, -1]\n }\n\n const minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length % 3)]\n\n let openerIdx = headerIdx - jumps[headerIdx] - 1\n\n let newMinOpenerIdx = openerIdx\n\n for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {\n const opener = delimiters[openerIdx]\n\n if (opener.marker !== closer.marker) continue\n\n if (opener.open && opener.end < 0) {\n let isOddMatch = false\n\n // from spec:\n //\n // If one of the delimiters can both open and close emphasis, then the\n // sum of the lengths of the delimiter runs containing the opening and\n // closing delimiters must not be a multiple of 3 unless both lengths\n // are multiples of 3.\n //\n if (opener.close || closer.open) {\n if ((opener.length + closer.length) % 3 === 0) {\n if (opener.length % 3 !== 0 || closer.length % 3 !== 0) {\n isOddMatch = true\n }\n }\n }\n\n if (!isOddMatch) {\n // If previous delimiter cannot be an opener, we can safely skip\n // the entire sequence in future checks. This is required to make\n // sure algorithm has linear complexity (see *_*_*_*_*_... case).\n //\n const lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open\n ? jumps[openerIdx - 1] + 1\n : 0\n\n jumps[closerIdx] = closerIdx - openerIdx + lastJump\n jumps[openerIdx] = lastJump\n\n closer.open = false\n opener.end = closerIdx\n opener.close = false\n newMinOpenerIdx = -1\n // treat next token as start of run,\n // it optimizes skips in **<...>**a**<...>** pathological case\n lastTokenIdx = -2\n break\n }\n }\n }\n\n if (newMinOpenerIdx !== -1) {\n // If match for this delimiter run failed, we want to set lower bound for\n // future lookups. This is required to make sure algorithm has linear\n // complexity.\n //\n // See details here:\n // https://github.com/commonmark/cmark/issues/178#issuecomment-270417442\n //\n openersBottom[closer.marker][(closer.open ? 3 : 0) + ((closer.length || 0) % 3)] = newMinOpenerIdx\n }\n }\n}\n\nexport default function link_pairs (state) {\n const tokens_meta = state.tokens_meta\n const max = state.tokens_meta.length\n\n processDelimiters(state.delimiters)\n\n for (let curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n processDelimiters(tokens_meta[curr].delimiters)\n }\n }\n}\n","// Clean up tokens after emphasis and strikethrough postprocessing:\n// merge adjacent text nodes into one and re-calculate all token levels\n//\n// This is necessary because initially emphasis delimiter markers (*, _, ~)\n// are treated as their own separate text tokens. Then emphasis rule either\n// leaves them as text (needed to merge with adjacent text) or turns them\n// into opening/closing tags (which messes up levels inside).\n//\n\nexport default function fragments_join (state) {\n let curr, last\n let level = 0\n const tokens = state.tokens\n const max = state.tokens.length\n\n for (curr = last = 0; curr < max; curr++) {\n // re-calculate levels after emphasis/strikethrough turns some text nodes\n // into opening/closing tags\n if (tokens[curr].nesting < 0) level-- // closing tag\n tokens[curr].level = level\n if (tokens[curr].nesting > 0) level++ // opening tag\n\n if (tokens[curr].type === 'text' &&\n curr + 1 < max &&\n tokens[curr + 1].type === 'text') {\n // collapse two adjacent text nodes\n tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content\n } else {\n if (curr !== last) { tokens[last] = tokens[curr] }\n\n last++\n }\n }\n\n if (curr !== last) {\n tokens.length = last\n }\n}\n","/** internal\n * class ParserInline\n *\n * Tokenizes paragraph content.\n **/\n\nimport Ruler from './ruler.mjs'\nimport StateInline from './rules_inline/state_inline.mjs'\n\nimport r_text from './rules_inline/text.mjs'\nimport r_linkify from './rules_inline/linkify.mjs'\nimport r_newline from './rules_inline/newline.mjs'\nimport r_escape from './rules_inline/escape.mjs'\nimport r_backticks from './rules_inline/backticks.mjs'\nimport r_strikethrough from './rules_inline/strikethrough.mjs'\nimport r_emphasis from './rules_inline/emphasis.mjs'\nimport r_link from './rules_inline/link.mjs'\nimport r_image from './rules_inline/image.mjs'\nimport r_autolink from './rules_inline/autolink.mjs'\nimport r_html_inline from './rules_inline/html_inline.mjs'\nimport r_entity from './rules_inline/entity.mjs'\n\nimport r_balance_pairs from './rules_inline/balance_pairs.mjs'\nimport r_fragments_join from './rules_inline/fragments_join.mjs'\n\n// Parser rules\n\nconst _rules = [\n ['text', r_text],\n ['linkify', r_linkify],\n ['newline', r_newline],\n ['escape', r_escape],\n ['backticks', r_backticks],\n ['strikethrough', r_strikethrough.tokenize],\n ['emphasis', r_emphasis.tokenize],\n ['link', r_link],\n ['image', r_image],\n ['autolink', r_autolink],\n ['html_inline', r_html_inline],\n ['entity', r_entity]\n]\n\n// `rule2` ruleset was created specifically for emphasis/strikethrough\n// post-processing and may be changed in the future.\n//\n// Don't use this for anything except pairs (plugins working with `balance_pairs`).\n//\nconst _rules2 = [\n ['balance_pairs', r_balance_pairs],\n ['strikethrough', r_strikethrough.postProcess],\n ['emphasis', r_emphasis.postProcess],\n // rules for pairs separate '**' into its own text tokens, which may be left unused,\n // rule below merges unused segments back with the rest of the text\n ['fragments_join', r_fragments_join]\n]\n\n/**\n * new ParserInline()\n **/\nfunction ParserInline () {\n /**\n * ParserInline#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of inline rules.\n **/\n this.ruler = new Ruler()\n\n for (let i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1])\n }\n\n /**\n * ParserInline#ruler2 -> Ruler\n *\n * [[Ruler]] instance. Second ruler used for post-processing\n * (e.g. in emphasis-like rules).\n **/\n this.ruler2 = new Ruler()\n\n for (let i = 0; i < _rules2.length; i++) {\n this.ruler2.push(_rules2[i][0], _rules2[i][1])\n }\n}\n\n// Skip single token by running all rules in validation mode;\n// returns `true` if any rule reported success\n//\nParserInline.prototype.skipToken = function (state) {\n const pos = state.pos\n const rules = this.ruler.getRules('')\n const len = rules.length\n const maxNesting = state.md.options.maxNesting\n const cache = state.cache\n\n if (typeof cache[pos] !== 'undefined') {\n state.pos = cache[pos]\n return\n }\n\n let ok = false\n\n if (state.level < maxNesting) {\n for (let i = 0; i < len; i++) {\n // Increment state.level and decrement it later to limit recursion.\n // It's harmless to do here, because no tokens are created. But ideally,\n // we'd need a separate private state variable for this purpose.\n //\n state.level++\n ok = rules[i](state, true)\n state.level--\n\n if (ok) {\n if (pos >= state.pos) { throw new Error(\"inline rule didn't increment state.pos\") }\n break\n }\n }\n } else {\n // Too much nesting, just skip until the end of the paragraph.\n //\n // NOTE: this will cause links to behave incorrectly in the following case,\n // when an amount of `[` is exactly equal to `maxNesting + 1`:\n //\n // [[[[[[[[[[[[[[[[[[[[[foo]()\n //\n // TODO: remove this workaround when CM standard will allow nested links\n // (we can replace it by preventing links from being parsed in\n // validation mode)\n //\n state.pos = state.posMax\n }\n\n if (!ok) { state.pos++ }\n cache[pos] = state.pos\n}\n\n// Generate tokens for input range\n//\nParserInline.prototype.tokenize = function (state) {\n const rules = this.ruler.getRules('')\n const len = rules.length\n const end = state.posMax\n const maxNesting = state.md.options.maxNesting\n\n while (state.pos < end) {\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.pos`\n // - update `state.tokens`\n // - return true\n const prevPos = state.pos\n let ok = false\n\n if (state.level < maxNesting) {\n for (let i = 0; i < len; i++) {\n ok = rules[i](state, false)\n if (ok) {\n if (prevPos >= state.pos) { throw new Error(\"inline rule didn't increment state.pos\") }\n break\n }\n }\n }\n\n if (ok) {\n if (state.pos >= end) { break }\n continue\n }\n\n state.pending += state.src[state.pos++]\n }\n\n if (state.pending) {\n state.pushPending()\n }\n}\n\n/**\n * ParserInline.parse(str, md, env, outTokens)\n *\n * Process input string and push inline tokens into `outTokens`\n **/\nParserInline.prototype.parse = function (str, md, env, outTokens) {\n const state = new this.State(str, md, env, outTokens)\n\n this.tokenize(state)\n\n const rules = this.ruler2.getRules('')\n const len = rules.length\n\n for (let i = 0; i < len; i++) {\n rules[i](state)\n }\n}\n\nParserInline.prototype.State = StateInline\n\nexport default ParserInline\n","import { Any, Cc, Z, P } from 'uc.micro'\n\nexport default function (opts) {\n const re = {}\n opts = opts || {}\n\n re.src_Any = Any.source\n re.src_Cc = Cc.source\n re.src_Z = Z.source\n re.src_P = P.source\n\n // \\p{\\Z\\P\\Cc\\CF} (white spaces + control + format + punctuation)\n re.src_ZPCc = [re.src_Z, re.src_P, re.src_Cc].join('|')\n\n // \\p{\\Z\\Cc} (white spaces + control)\n re.src_ZCc = [re.src_Z, re.src_Cc].join('|')\n\n // Experimental. List of chars, completely prohibited in links\n // because can separate it from other part of text\n const text_separators = '[><\\uff5c]'\n\n // All possible word characters (everything without punctuation, spaces & controls)\n // Defined via punctuation & spaces to save space\n // Should be something like \\p{\\L\\N\\S\\M} (\\w but without `_`)\n re.src_pseudo_letter = '(?:(?!' + text_separators + '|' + re.src_ZPCc + ')' + re.src_Any + ')'\n // The same as abothe but without [0-9]\n // var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')';\n\n re.src_ip4 =\n\n '(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'\n\n // Prohibit any of \"@/[]()\" in user/pass to avoid wrong domain fetch.\n re.src_auth = '(?:(?:(?!' + re.src_ZCc + '|[@/\\\\[\\\\]()]).)+@)?'\n\n re.src_port =\n\n '(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?'\n\n re.src_host_terminator =\n\n '(?=$|' + text_separators + '|' + re.src_ZPCc + ')' +\n '(?!' + (opts['---'] ? '-(?!--)|' : '-|') + '_|:\\\\d|\\\\.-|\\\\.(?!$|' + re.src_ZPCc + '))'\n\n re.src_path =\n\n '(?:' +\n '[/?#]' +\n '(?:' +\n '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\\\]{}.,\"\\'?!\\\\-;]).|' +\n '\\\\[(?:(?!' + re.src_ZCc + '|\\\\]).)*\\\\]|' +\n '\\\\((?:(?!' + re.src_ZCc + '|[)]).)*\\\\)|' +\n '\\\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\\\}|' +\n '\\\\\"(?:(?!' + re.src_ZCc + '|[\"]).)+\\\\\"|' +\n \"\\\\'(?:(?!\" + re.src_ZCc + \"|[']).)+\\\\'|\" +\n\n // allow `I'm_king` if no pair found\n \"\\\\'(?=\" + re.src_pseudo_letter + '|[-])|' +\n\n // google has many dots in \"google search\" links (#66, #81).\n // github has ... in commit range links,\n // Restrict to\n // - english\n // - percent-encoded\n // - parts of file path\n // - params separator\n // until more examples found.\n '\\\\.{2,}[a-zA-Z0-9%/&]|' +\n\n '\\\\.(?!' + re.src_ZCc + '|[.]|$)|' +\n (opts['---']\n ? '\\\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate\n : '\\\\-+|'\n ) +\n // allow `,,,` in paths\n ',(?!' + re.src_ZCc + '|$)|' +\n\n // allow `;` if not followed by space-like char\n ';(?!' + re.src_ZCc + '|$)|' +\n\n // allow `!!!` in paths, but not at the end\n '\\\\!+(?!' + re.src_ZCc + '|[!]|$)|' +\n\n '\\\\?(?!' + re.src_ZCc + '|[?]|$)' +\n ')+' +\n '|\\\\/' +\n ')?'\n\n // Allow anything in markdown spec, forbid quote (\") at the first position\n // because emails enclosed in quotes are far more common\n re.src_email_name =\n\n '[\\\\-;:&=\\\\+\\\\$,\\\\.a-zA-Z0-9_][\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]*'\n\n re.src_xn =\n\n 'xn--[a-z0-9\\\\-]{1,59}'\n\n // More to read about domain names\n // http://serverfault.com/questions/638260/\n\n re.src_domain_root =\n\n // Allow letters & digits (http://test1)\n '(?:' +\n re.src_xn +\n '|' +\n re.src_pseudo_letter + '{1,63}' +\n ')'\n\n re.src_domain =\n\n '(?:' +\n re.src_xn +\n '|' +\n '(?:' + re.src_pseudo_letter + ')' +\n '|' +\n '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' +\n ')'\n\n re.src_host =\n\n '(?:' +\n // Don't need IP check, because digits are already allowed in normal domain names\n // src_ip4 +\n // '|' +\n '(?:(?:(?:' + re.src_domain + ')\\\\.)*' + re.src_domain/* _root */ + ')' +\n ')'\n\n re.tpl_host_fuzzy =\n\n '(?:' +\n re.src_ip4 +\n '|' +\n '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))' +\n ')'\n\n re.tpl_host_no_ip_fuzzy =\n\n '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))'\n\n re.src_host_strict =\n\n re.src_host + re.src_host_terminator\n\n re.tpl_host_fuzzy_strict =\n\n re.tpl_host_fuzzy + re.src_host_terminator\n\n re.src_host_port_strict =\n\n re.src_host + re.src_port + re.src_host_terminator\n\n re.tpl_host_port_fuzzy_strict =\n\n re.tpl_host_fuzzy + re.src_port + re.src_host_terminator\n\n re.tpl_host_port_no_ip_fuzzy_strict =\n\n re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator\n\n //\n // Main rules\n //\n\n // Rude test fuzzy links by host, for quick deny\n re.tpl_host_fuzzy_test =\n\n 'localhost|www\\\\.|\\\\.\\\\d{1,3}\\\\.|(?:\\\\.(?:%TLDS%)(?:' + re.src_ZPCc + '|>|$))'\n\n re.tpl_email_fuzzy =\n\n '(^|' + text_separators + '|\"|\\\\(|' + re.src_ZCc + ')' +\n '(' + re.src_email_name + '@' + re.tpl_host_fuzzy_strict + ')'\n\n re.tpl_link_fuzzy =\n // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_fuzzy_strict + re.src_path + ')'\n\n re.tpl_link_no_ip_fuzzy =\n // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ')'\n\n return re\n}\n","import reFactory from './lib/re.mjs'\n\n//\n// Helpers\n//\n\n// Merge objects\n//\nfunction assign (obj /* from1, from2, from3, ... */) {\n const sources = Array.prototype.slice.call(arguments, 1)\n\n sources.forEach(function (source) {\n if (!source) { return }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key]\n })\n })\n\n return obj\n}\n\nfunction _class (obj) { return Object.prototype.toString.call(obj) }\nfunction isString (obj) { return _class(obj) === '[object String]' }\nfunction isObject (obj) { return _class(obj) === '[object Object]' }\nfunction isRegExp (obj) { return _class(obj) === '[object RegExp]' }\nfunction isFunction (obj) { return _class(obj) === '[object Function]' }\n\nfunction escapeRE (str) { return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&') }\n\n//\n\nconst defaultOptions = {\n fuzzyLink: true,\n fuzzyEmail: true,\n fuzzyIP: false\n}\n\nfunction isOptionsObj (obj) {\n return Object.keys(obj || {}).reduce(function (acc, k) {\n /* eslint-disable-next-line no-prototype-builtins */\n return acc || defaultOptions.hasOwnProperty(k)\n }, false)\n}\n\nconst defaultSchemas = {\n 'http:': {\n validate: function (text, pos, self) {\n const tail = text.slice(pos)\n\n if (!self.re.http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.http = new RegExp(\n '^\\\\/\\\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i'\n )\n }\n if (self.re.http.test(tail)) {\n return tail.match(self.re.http)[0].length\n }\n return 0\n }\n },\n 'https:': 'http:',\n 'ftp:': 'http:',\n '//': {\n validate: function (text, pos, self) {\n const tail = text.slice(pos)\n\n if (!self.re.no_http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.no_http = new RegExp(\n '^' +\n self.re.src_auth +\n // Don't allow single-level domains, because of false positives like '//test'\n // with code comments\n '(?:localhost|(?:(?:' + self.re.src_domain + ')\\\\.)+' + self.re.src_domain_root + ')' +\n self.re.src_port +\n self.re.src_host_terminator +\n self.re.src_path,\n\n 'i'\n )\n }\n\n if (self.re.no_http.test(tail)) {\n // should not be `://` & `///`, that protects from errors in protocol name\n if (pos >= 3 && text[pos - 3] === ':') { return 0 }\n if (pos >= 3 && text[pos - 3] === '/') { return 0 }\n return tail.match(self.re.no_http)[0].length\n }\n return 0\n }\n },\n 'mailto:': {\n validate: function (text, pos, self) {\n const tail = text.slice(pos)\n\n if (!self.re.mailto) {\n self.re.mailto = new RegExp(\n '^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i'\n )\n }\n if (self.re.mailto.test(tail)) {\n return tail.match(self.re.mailto)[0].length\n }\n return 0\n }\n }\n}\n\n// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\n/* eslint-disable-next-line max-len */\nconst tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]'\n\n// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead\nconst tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'.split('|')\n\nfunction resetScanCache (self) {\n self.__index__ = -1\n self.__text_cache__ = ''\n}\n\nfunction createValidator (re) {\n return function (text, pos) {\n const tail = text.slice(pos)\n\n if (re.test(tail)) {\n return tail.match(re)[0].length\n }\n return 0\n }\n}\n\nfunction createNormalizer () {\n return function (match, self) {\n self.normalize(match)\n }\n}\n\n// Schemas compiler. Build regexps.\n//\nfunction compile (self) {\n // Load & clone RE patterns.\n const re = self.re = reFactory(self.__opts__)\n\n // Define dynamic patterns\n const tlds = self.__tlds__.slice()\n\n self.onCompile()\n\n if (!self.__tlds_replaced__) {\n tlds.push(tlds_2ch_src_re)\n }\n tlds.push(re.src_xn)\n\n re.src_tlds = tlds.join('|')\n\n function untpl (tpl) { return tpl.replace('%TLDS%', re.src_tlds) }\n\n re.email_fuzzy = RegExp(untpl(re.tpl_email_fuzzy), 'i')\n re.link_fuzzy = RegExp(untpl(re.tpl_link_fuzzy), 'i')\n re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i')\n re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), 'i')\n\n //\n // Compile each schema\n //\n\n const aliases = []\n\n self.__compiled__ = {} // Reset compiled data\n\n function schemaError (name, val) {\n throw new Error('(LinkifyIt) Invalid schema \"' + name + '\": ' + val)\n }\n\n Object.keys(self.__schemas__).forEach(function (name) {\n const val = self.__schemas__[name]\n\n // skip disabled methods\n if (val === null) { return }\n\n const compiled = { validate: null, link: null }\n\n self.__compiled__[name] = compiled\n\n if (isObject(val)) {\n if (isRegExp(val.validate)) {\n compiled.validate = createValidator(val.validate)\n } else if (isFunction(val.validate)) {\n compiled.validate = val.validate\n } else {\n schemaError(name, val)\n }\n\n if (isFunction(val.normalize)) {\n compiled.normalize = val.normalize\n } else if (!val.normalize) {\n compiled.normalize = createNormalizer()\n } else {\n schemaError(name, val)\n }\n\n return\n }\n\n if (isString(val)) {\n aliases.push(name)\n return\n }\n\n schemaError(name, val)\n })\n\n //\n // Compile postponed aliases\n //\n\n aliases.forEach(function (alias) {\n if (!self.__compiled__[self.__schemas__[alias]]) {\n // Silently fail on missed schemas to avoid errons on disable.\n // schemaError(alias, self.__schemas__[alias]);\n return\n }\n\n self.__compiled__[alias].validate =\n self.__compiled__[self.__schemas__[alias]].validate\n self.__compiled__[alias].normalize =\n self.__compiled__[self.__schemas__[alias]].normalize\n })\n\n //\n // Fake record for guessed links\n //\n self.__compiled__[''] = { validate: null, normalize: createNormalizer() }\n\n //\n // Build schema condition\n //\n const slist = Object.keys(self.__compiled__)\n .filter(function (name) {\n // Filter disabled & fake schemas\n return name.length > 0 && self.__compiled__[name]\n })\n .map(escapeRE)\n .join('|')\n // (?!_) cause 1.5x slowdown\n self.re.schema_test = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'i')\n self.re.schema_search = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'ig')\n self.re.schema_at_start = RegExp('^' + self.re.schema_search.source, 'i')\n\n self.re.pretest = RegExp(\n '(' + self.re.schema_test.source + ')|(' + self.re.host_fuzzy_test.source + ')|@',\n 'i'\n )\n\n //\n // Cleanup\n //\n\n resetScanCache(self)\n}\n\n/**\n * class Match\n *\n * Match result. Single element of array, returned by [[LinkifyIt#match]]\n **/\nfunction Match (self, shift) {\n const start = self.__index__\n const end = self.__last_index__\n const text = self.__text_cache__.slice(start, end)\n\n /**\n * Match#schema -> String\n *\n * Prefix (protocol) for matched string.\n **/\n this.schema = self.__schema__.toLowerCase()\n /**\n * Match#index -> Number\n *\n * First position of matched string.\n **/\n this.index = start + shift\n /**\n * Match#lastIndex -> Number\n *\n * Next position after matched string.\n **/\n this.lastIndex = end + shift\n /**\n * Match#raw -> String\n *\n * Matched string.\n **/\n this.raw = text\n /**\n * Match#text -> String\n *\n * Notmalized text of matched string.\n **/\n this.text = text\n /**\n * Match#url -> String\n *\n * Normalized url of matched string.\n **/\n this.url = text\n}\n\nfunction createMatch (self, shift) {\n const match = new Match(self, shift)\n\n self.__compiled__[match.schema].normalize(match, self)\n\n return match\n}\n\n/**\n * class LinkifyIt\n **/\n\n/**\n * new LinkifyIt(schemas, options)\n * - schemas (Object): Optional. Additional schemas to validate (prefix/validator)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Creates new linkifier instance with optional additional schemas.\n * Can be called without `new` keyword for convenience.\n *\n * By default understands:\n *\n * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n * - \"fuzzy\" links and emails (example.com, foo@bar.com).\n *\n * `schemas` is an object, where each key/value describes protocol/rule:\n *\n * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:`\n * for example). `linkify-it` makes shure that prefix is not preceeded with\n * alphanumeric char and symbols. Only whitespaces and punctuation allowed.\n * - __value__ - rule to check tail after link prefix\n * - _String_ - just alias to existing rule\n * - _Object_\n * - _validate_ - validator function (should return matched length on success),\n * or `RegExp`.\n * - _normalize_ - optional function to normalize text & url of matched result\n * (for example, for @twitter mentions).\n *\n * `options`:\n *\n * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`.\n * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts\n * like version numbers. Default `false`.\n * - __fuzzyEmail__ - recognize emails without `mailto:` prefix.\n *\n **/\nfunction LinkifyIt (schemas, options) {\n if (!(this instanceof LinkifyIt)) {\n return new LinkifyIt(schemas, options)\n }\n\n if (!options) {\n if (isOptionsObj(schemas)) {\n options = schemas\n schemas = {}\n }\n }\n\n this.__opts__ = assign({}, defaultOptions, options)\n\n // Cache last tested result. Used to skip repeating steps on next `match` call.\n this.__index__ = -1\n this.__last_index__ = -1 // Next scan position\n this.__schema__ = ''\n this.__text_cache__ = ''\n\n this.__schemas__ = assign({}, defaultSchemas, schemas)\n this.__compiled__ = {}\n\n this.__tlds__ = tlds_default\n this.__tlds_replaced__ = false\n\n this.re = {}\n\n compile(this)\n}\n\n/** chainable\n * LinkifyIt#add(schema, definition)\n * - schema (String): rule name (fixed pattern prefix)\n * - definition (String|RegExp|Object): schema definition\n *\n * Add new rule definition. See constructor description for details.\n **/\nLinkifyIt.prototype.add = function add (schema, definition) {\n this.__schemas__[schema] = definition\n compile(this)\n return this\n}\n\n/** chainable\n * LinkifyIt#set(options)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Set recognition options for links without schema.\n **/\nLinkifyIt.prototype.set = function set (options) {\n this.__opts__ = assign(this.__opts__, options)\n return this\n}\n\n/**\n * LinkifyIt#test(text) -> Boolean\n *\n * Searches linkifiable pattern and returns `true` on success or `false` on fail.\n **/\nLinkifyIt.prototype.test = function test (text) {\n // Reset scan cache\n this.__text_cache__ = text\n this.__index__ = -1\n\n if (!text.length) { return false }\n\n let m, ml, me, len, shift, next, re, tld_pos, at_pos\n\n // try to scan for link with schema - that's the most simple rule\n if (this.re.schema_test.test(text)) {\n re = this.re.schema_search\n re.lastIndex = 0\n while ((m = re.exec(text)) !== null) {\n len = this.testSchemaAt(text, m[2], re.lastIndex)\n if (len) {\n this.__schema__ = m[2]\n this.__index__ = m.index + m[1].length\n this.__last_index__ = m.index + m[0].length + len\n break\n }\n }\n }\n\n if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n // guess schemaless links\n tld_pos = text.search(this.re.host_fuzzy_test)\n if (tld_pos >= 0) {\n // if tld is located after found link - no need to check fuzzy pattern\n if (this.__index__ < 0 || tld_pos < this.__index__) {\n if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {\n shift = ml.index + ml[1].length\n\n if (this.__index__ < 0 || shift < this.__index__) {\n this.__schema__ = ''\n this.__index__ = shift\n this.__last_index__ = ml.index + ml[0].length\n }\n }\n }\n }\n }\n\n if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n // guess schemaless emails\n at_pos = text.indexOf('@')\n if (at_pos >= 0) {\n // We can't skip this check, because this cases are possible:\n // 192.168.1.1@gmail.com, my.in@example.com\n if ((me = text.match(this.re.email_fuzzy)) !== null) {\n shift = me.index + me[1].length\n next = me.index + me[0].length\n\n if (this.__index__ < 0 || shift < this.__index__ ||\n (shift === this.__index__ && next > this.__last_index__)) {\n this.__schema__ = 'mailto:'\n this.__index__ = shift\n this.__last_index__ = next\n }\n }\n }\n }\n\n return this.__index__ >= 0\n}\n\n/**\n * LinkifyIt#pretest(text) -> Boolean\n *\n * Very quick check, that can give false positives. Returns true if link MAY BE\n * can exists. Can be used for speed optimization, when you need to check that\n * link NOT exists.\n **/\nLinkifyIt.prototype.pretest = function pretest (text) {\n return this.re.pretest.test(text)\n}\n\n/**\n * LinkifyIt#testSchemaAt(text, name, position) -> Number\n * - text (String): text to scan\n * - name (String): rule (schema) name\n * - position (Number): text offset to check from\n *\n * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly\n * at given position. Returns length of found pattern (0 on fail).\n **/\nLinkifyIt.prototype.testSchemaAt = function testSchemaAt (text, schema, pos) {\n // If not supported schema check requested - terminate\n if (!this.__compiled__[schema.toLowerCase()]) {\n return 0\n }\n return this.__compiled__[schema.toLowerCase()].validate(text, pos, this)\n}\n\n/**\n * LinkifyIt#match(text) -> Array|null\n *\n * Returns array of found link descriptions or `null` on fail. We strongly\n * recommend to use [[LinkifyIt#test]] first, for best speed.\n *\n * ##### Result match description\n *\n * - __schema__ - link schema, can be empty for fuzzy links, or `//` for\n * protocol-neutral links.\n * - __index__ - offset of matched text\n * - __lastIndex__ - index of next char after mathch end\n * - __raw__ - matched text\n * - __text__ - normalized text\n * - __url__ - link, generated from matched text\n **/\nLinkifyIt.prototype.match = function match (text) {\n const result = []\n let shift = 0\n\n // Try to take previous element from cache, if .test() called before\n if (this.__index__ >= 0 && this.__text_cache__ === text) {\n result.push(createMatch(this, shift))\n shift = this.__last_index__\n }\n\n // Cut head if cache was used\n let tail = shift ? text.slice(shift) : text\n\n // Scan string until end reached\n while (this.test(tail)) {\n result.push(createMatch(this, shift))\n\n tail = tail.slice(this.__last_index__)\n shift += this.__last_index__\n }\n\n if (result.length) {\n return result\n }\n\n return null\n}\n\n/**\n * LinkifyIt#matchAtStart(text) -> Match|null\n *\n * Returns fully-formed (not fuzzy) link if it starts at the beginning\n * of the string, and null otherwise.\n **/\nLinkifyIt.prototype.matchAtStart = function matchAtStart (text) {\n // Reset scan cache\n this.__text_cache__ = text\n this.__index__ = -1\n\n if (!text.length) return null\n\n const m = this.re.schema_at_start.exec(text)\n if (!m) return null\n\n const len = this.testSchemaAt(text, m[2], m[0].length)\n if (!len) return null\n\n this.__schema__ = m[2]\n this.__index__ = m.index + m[1].length\n this.__last_index__ = m.index + m[0].length + len\n\n return createMatch(this, 0)\n}\n\n/** chainable\n * LinkifyIt#tlds(list [, keepOld]) -> this\n * - list (Array): list of tlds\n * - keepOld (Boolean): merge with current list if `true` (`false` by default)\n *\n * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix)\n * to avoid false positives. By default this algorythm used:\n *\n * - hostname with any 2-letter root zones are ok.\n * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф\n * are ok.\n * - encoded (`xn--...`) root zones are ok.\n *\n * If list is replaced, then exact match for 2-chars root zones will be checked.\n **/\nLinkifyIt.prototype.tlds = function tlds (list, keepOld) {\n list = Array.isArray(list) ? list : [list]\n\n if (!keepOld) {\n this.__tlds__ = list.slice()\n this.__tlds_replaced__ = true\n compile(this)\n return this\n }\n\n this.__tlds__ = this.__tlds__.concat(list)\n .sort()\n .filter(function (el, idx, arr) {\n return el !== arr[idx - 1]\n })\n .reverse()\n\n compile(this)\n return this\n}\n\n/**\n * LinkifyIt#normalize(match)\n *\n * Default normalizer (if schema does not define it's own).\n **/\nLinkifyIt.prototype.normalize = function normalize (match) {\n // Do minimal possible changes by default. Need to collect feedback prior\n // to move forward https://github.com/markdown-it/linkify-it/issues/1\n\n if (!match.schema) { match.url = 'http://' + match.url }\n\n if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {\n match.url = 'mailto:' + match.url\n }\n}\n\n/**\n * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\nLinkifyIt.prototype.onCompile = function onCompile () {\n}\n\nexport default LinkifyIt\n","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7F]/; // Note: U+007F DEL is excluded too.\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, callback) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = callback(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {String} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(domain, callback) {\n\tconst parts = domain.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tdomain = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tdomain = domain.replace(regexSeparators, '\\x2E');\n\tconst labels = domain.split('.');\n\tconst encoded = map(labels, callback).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = codePoints => String.fromCodePoint(...codePoints);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint >= 0x30 && codePoint < 0x3A) {\n\t\treturn 26 + (codePoint - 0x30);\n\t}\n\tif (codePoint >= 0x41 && codePoint < 0x5B) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint >= 0x61 && codePoint < 0x7B) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tconst oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\t\t\tif (digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tconst inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tconst basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue === n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.3.1',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport { ucs2decode, ucs2encode, decode, encode, toASCII, toUnicode };\nexport default punycode;\n","// markdown-it default options\n\nexport default {\n options: {\n // Enable HTML tags in source\n html: false,\n\n // Use '/' to close single tags (<br />)\n xhtmlOut: false,\n\n // Convert '\\n' in paragraphs into <br>\n breaks: false,\n\n // CSS language prefix for fenced blocks\n langPrefix: 'language-',\n\n // autoconvert URL-like texts to links\n linkify: false,\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n // Internal protection, recursion limit\n maxNesting: 100\n },\n\n components: {\n core: {},\n block: {},\n inline: {}\n }\n}\n","// \"Zero\" preset, with nothing enabled. Useful for manual configuring of simple\n// modes. For example, to parse bold/italic only.\n\nexport default {\n options: {\n // Enable HTML tags in source\n html: false,\n\n // Use '/' to close single tags (<br />)\n xhtmlOut: false,\n\n // Convert '\\n' in paragraphs into <br>\n breaks: false,\n\n // CSS language prefix for fenced blocks\n langPrefix: 'language-',\n\n // autoconvert URL-like texts to links\n linkify: false,\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n // Internal protection, recursion limit\n maxNesting: 20\n },\n\n components: {\n\n core: {\n rules: [\n 'normalize',\n 'block',\n 'inline',\n 'text_join'\n ]\n },\n\n block: {\n rules: [\n 'paragraph'\n ]\n },\n\n inline: {\n rules: [\n 'text'\n ],\n rules2: [\n 'balance_pairs',\n 'fragments_join'\n ]\n }\n }\n}\n","// Commonmark default options\n\nexport default {\n options: {\n // Enable HTML tags in source\n html: true,\n\n // Use '/' to close single tags (<br />)\n xhtmlOut: true,\n\n // Convert '\\n' in paragraphs into <br>\n breaks: false,\n\n // CSS language prefix for fenced blocks\n langPrefix: 'language-',\n\n // autoconvert URL-like texts to links\n linkify: false,\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n // Internal protection, recursion limit\n maxNesting: 20\n },\n\n components: {\n\n core: {\n rules: [\n 'normalize',\n 'block',\n 'inline',\n 'text_join'\n ]\n },\n\n block: {\n rules: [\n 'blockquote',\n 'code',\n 'fence',\n 'heading',\n 'hr',\n 'html_block',\n 'lheading',\n 'list',\n 'reference',\n 'paragraph'\n ]\n },\n\n inline: {\n rules: [\n 'autolink',\n 'backticks',\n 'emphasis',\n 'entity',\n 'escape',\n 'html_inline',\n 'image',\n 'link',\n 'newline',\n 'text'\n ],\n rules2: [\n 'balance_pairs',\n 'emphasis',\n 'fragments_join'\n ]\n }\n }\n}\n","// Main parser class\n\nimport * as utils from './common/utils.mjs'\nimport * as helpers from './helpers/index.mjs'\nimport Renderer from './renderer.mjs'\nimport ParserCore from './parser_core.mjs'\nimport ParserBlock from './parser_block.mjs'\nimport ParserInline from './parser_inline.mjs'\nimport LinkifyIt from 'linkify-it'\nimport * as mdurl from 'mdurl'\nimport punycode from 'punycode.js'\n\nimport cfg_default from './presets/default.mjs'\nimport cfg_zero from './presets/zero.mjs'\nimport cfg_commonmark from './presets/commonmark.mjs'\n\nconst config = {\n default: cfg_default,\n zero: cfg_zero,\n commonmark: cfg_commonmark\n}\n\n//\n// This validator can prohibit more than really needed to prevent XSS. It's a\n// tradeoff to keep code simple and to be secure by default.\n//\n// If you need different setup - override validator method as you wish. Or\n// replace it with dummy function and use external sanitizer.\n//\n\nconst BAD_PROTO_RE = /^(vbscript|javascript|file|data):/\nconst GOOD_DATA_RE = /^data:image\\/(gif|png|jpeg|webp);/\n\nfunction validateLink (url) {\n // url should be normalized at this point, and existing entities are decoded\n const str = url.trim().toLowerCase()\n\n return BAD_PROTO_RE.test(str) ? GOOD_DATA_RE.test(str) : true\n}\n\nconst RECODE_HOSTNAME_FOR = ['http:', 'https:', 'mailto:']\n\nfunction normalizeLink (url) {\n const parsed = mdurl.parse(url, true)\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toASCII(parsed.hostname)\n } catch (er) { /**/ }\n }\n }\n\n return mdurl.encode(mdurl.format(parsed))\n}\n\nfunction normalizeLinkText (url) {\n const parsed = mdurl.parse(url, true)\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toUnicode(parsed.hostname)\n } catch (er) { /**/ }\n }\n }\n\n // add '%' to exclude list because of https://github.com/markdown-it/markdown-it/issues/720\n return mdurl.decode(mdurl.format(parsed), mdurl.decode.defaultChars + '%')\n}\n\n/**\n * class MarkdownIt\n *\n * Main parser/renderer class.\n *\n * ##### Usage\n *\n * ```javascript\n * // node.js, \"classic\" way:\n * var MarkdownIt = require('markdown-it'),\n * md = new MarkdownIt();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // node.js, the same, but with sugar:\n * var md = require('markdown-it')();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // browser without AMD, added to \"window\" on script load\n * // Note, there are no dash.\n * var md = window.markdownit();\n * var result = md.render('# markdown-it rulezz!');\n * ```\n *\n * Single line rendering, without paragraph wrap:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * var result = md.renderInline('__markdown-it__ rulezz!');\n * ```\n **/\n\n/**\n * new MarkdownIt([presetName, options])\n * - presetName (String): optional, `commonmark` / `zero`\n * - options (Object)\n *\n * Creates parser instanse with given config. Can be called without `new`.\n *\n * ##### presetName\n *\n * MarkdownIt provides named presets as a convenience to quickly\n * enable/disable active syntax rules and options for common use cases.\n *\n * - [\"commonmark\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/commonmark.mjs) -\n * configures parser to strict [CommonMark](http://commonmark.org/) mode.\n * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.mjs) -\n * similar to GFM, used when no preset name given. Enables all available rules,\n * but still without html, typographer & autolinker.\n * - [\"zero\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/zero.mjs) -\n * all rules disabled. Useful to quickly setup your config via `.enable()`.\n * For example, when you need only `bold` and `italic` markup and nothing else.\n *\n * ##### options:\n *\n * - __html__ - `false`. Set `true` to enable HTML tags in source. Be careful!\n * That's not safe! You may need external sanitizer to protect output from XSS.\n * It's better to extend features via plugins, instead of enabling HTML.\n * - __xhtmlOut__ - `false`. Set `true` to add '/' when closing single tags\n * (`<br />`). This is needed only for full CommonMark compatibility. In real\n * world you will need HTML output.\n * - __breaks__ - `false`. Set `true` to convert `\\n` in paragraphs into `<br>`.\n * - __langPrefix__ - `language-`. CSS language class prefix for fenced blocks.\n * Can be useful for external highlighters.\n * - __linkify__ - `false`. Set `true` to autoconvert URL-like text to links.\n * - __typographer__ - `false`. Set `true` to enable [some language-neutral\n * replacement](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.mjs) +\n * quotes beautification (smartquotes).\n * - __quotes__ - `“”‘’`, String or Array. Double + single quotes replacement\n * pairs, when typographer enabled and smartquotes on. For example, you can\n * use `'«»„“'` for Russian, `'„“‚‘'` for German, and\n * `['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›']` for French (including nbsp).\n * - __highlight__ - `null`. Highlighter function for fenced code blocks.\n * Highlighter `function (str, lang)` should return escaped HTML. It can also\n * return empty string if the source was not changed and should be escaped\n * externaly. If result starts with <pre... internal wrapper is skipped.\n *\n * ##### Example\n *\n * ```javascript\n * // commonmark mode\n * var md = require('markdown-it')('commonmark');\n *\n * // default mode\n * var md = require('markdown-it')();\n *\n * // enable everything\n * var md = require('markdown-it')({\n * html: true,\n * linkify: true,\n * typographer: true\n * });\n * ```\n *\n * ##### Syntax highlighting\n *\n * ```js\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return hljs.highlight(str, { language: lang, ignoreIllegals: true }).value;\n * } catch (__) {}\n * }\n *\n * return ''; // use external default escaping\n * }\n * });\n * ```\n *\n * Or with full wrapper override (if you need assign class to `<pre>` or `<code>`):\n *\n * ```javascript\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * // Actual default values\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return '<pre><code class=\"hljs\">' +\n * hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +\n * '</code></pre>';\n * } catch (__) {}\n * }\n *\n * return '<pre><code class=\"hljs\">' + md.utils.escapeHtml(str) + '</code></pre>';\n * }\n * });\n * ```\n *\n **/\nfunction MarkdownIt (presetName, options) {\n if (!(this instanceof MarkdownIt)) {\n return new MarkdownIt(presetName, options)\n }\n\n if (!options) {\n if (!utils.isString(presetName)) {\n options = presetName || {}\n presetName = 'default'\n }\n }\n\n /**\n * MarkdownIt#inline -> ParserInline\n *\n * Instance of [[ParserInline]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.inline = new ParserInline()\n\n /**\n * MarkdownIt#block -> ParserBlock\n *\n * Instance of [[ParserBlock]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.block = new ParserBlock()\n\n /**\n * MarkdownIt#core -> Core\n *\n * Instance of [[Core]] chain executor. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.core = new ParserCore()\n\n /**\n * MarkdownIt#renderer -> Renderer\n *\n * Instance of [[Renderer]]. Use it to modify output look. Or to add rendering\n * rules for new token types, generated by plugins.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * function myToken(tokens, idx, options, env, self) {\n * //...\n * return result;\n * };\n *\n * md.renderer.rules['my_token'] = myToken\n * ```\n *\n * See [[Renderer]] docs and [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.mjs).\n **/\n this.renderer = new Renderer()\n\n /**\n * MarkdownIt#linkify -> LinkifyIt\n *\n * [linkify-it](https://github.com/markdown-it/linkify-it) instance.\n * Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/linkify.mjs)\n * rule.\n **/\n this.linkify = new LinkifyIt()\n\n /**\n * MarkdownIt#validateLink(url) -> Boolean\n *\n * Link validation function. CommonMark allows too much in links. By default\n * we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas\n * except some embedded image types.\n *\n * You can change this behaviour:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * // enable everything\n * md.validateLink = function () { return true; }\n * ```\n **/\n this.validateLink = validateLink\n\n /**\n * MarkdownIt#normalizeLink(url) -> String\n *\n * Function used to encode link url to a machine-readable format,\n * which includes url-encoding, punycode, etc.\n **/\n this.normalizeLink = normalizeLink\n\n /**\n * MarkdownIt#normalizeLinkText(url) -> String\n *\n * Function used to decode link url to a human-readable format`\n **/\n this.normalizeLinkText = normalizeLinkText\n\n // Expose utils & helpers for easy acces from plugins\n\n /**\n * MarkdownIt#utils -> utils\n *\n * Assorted utility functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/common/utils.mjs).\n **/\n this.utils = utils\n\n /**\n * MarkdownIt#helpers -> helpers\n *\n * Link components parser functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/helpers).\n **/\n this.helpers = utils.assign({}, helpers)\n\n this.options = {}\n this.configure(presetName)\n\n if (options) { this.set(options) }\n}\n\n/** chainable\n * MarkdownIt.set(options)\n *\n * Set parser options (in the same format as in constructor). Probably, you\n * will never need it, but you can change options after constructor call.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .set({ html: true, breaks: true })\n * .set({ typographer, true });\n * ```\n *\n * __Note:__ To achieve the best possible performance, don't modify a\n * `markdown-it` instance options on the fly. If you need multiple configurations\n * it's best to create multiple instances and initialize each with separate\n * config.\n **/\nMarkdownIt.prototype.set = function (options) {\n utils.assign(this.options, options)\n return this\n}\n\n/** chainable, internal\n * MarkdownIt.configure(presets)\n *\n * Batch load of all options and compenent settings. This is internal method,\n * and you probably will not need it. But if you will - see available presets\n * and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/lib/presets)\n *\n * We strongly recommend to use presets instead of direct config loads. That\n * will give better compatibility with next versions.\n **/\nMarkdownIt.prototype.configure = function (presets) {\n const self = this\n\n if (utils.isString(presets)) {\n const presetName = presets\n presets = config[presetName]\n if (!presets) { throw new Error('Wrong `markdown-it` preset \"' + presetName + '\", check name') }\n }\n\n if (!presets) { throw new Error('Wrong `markdown-it` preset, can\\'t be empty') }\n\n if (presets.options) { self.set(presets.options) }\n\n if (presets.components) {\n Object.keys(presets.components).forEach(function (name) {\n if (presets.components[name].rules) {\n self[name].ruler.enableOnly(presets.components[name].rules)\n }\n if (presets.components[name].rules2) {\n self[name].ruler2.enableOnly(presets.components[name].rules2)\n }\n })\n }\n return this\n}\n\n/** chainable\n * MarkdownIt.enable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to enable\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable list or rules. It will automatically find appropriate components,\n * containing rules with given names. If rule not found, and `ignoreInvalid`\n * not set - throws exception.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .enable(['sub', 'sup'])\n * .disable('smartquotes');\n * ```\n **/\nMarkdownIt.prototype.enable = function (list, ignoreInvalid) {\n let result = []\n\n if (!Array.isArray(list)) { list = [list] }\n\n ['core', 'block', 'inline'].forEach(function (chain) {\n result = result.concat(this[chain].ruler.enable(list, true))\n }, this)\n\n result = result.concat(this.inline.ruler2.enable(list, true))\n\n const missed = list.filter(function (name) { return result.indexOf(name) < 0 })\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to enable unknown rule(s): ' + missed)\n }\n\n return this\n}\n\n/** chainable\n * MarkdownIt.disable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * The same as [[MarkdownIt.enable]], but turn specified rules off.\n **/\nMarkdownIt.prototype.disable = function (list, ignoreInvalid) {\n let result = []\n\n if (!Array.isArray(list)) { list = [list] }\n\n ['core', 'block', 'inline'].forEach(function (chain) {\n result = result.concat(this[chain].ruler.disable(list, true))\n }, this)\n\n result = result.concat(this.inline.ruler2.disable(list, true))\n\n const missed = list.filter(function (name) { return result.indexOf(name) < 0 })\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to disable unknown rule(s): ' + missed)\n }\n return this\n}\n\n/** chainable\n * MarkdownIt.use(plugin, params)\n *\n * Load specified plugin with given params into current parser instance.\n * It's just a sugar to call `plugin(md, params)` with curring.\n *\n * ##### Example\n *\n * ```javascript\n * var iterator = require('markdown-it-for-inline');\n * var md = require('markdown-it')()\n * .use(iterator, 'foo_replace', 'text', function (tokens, idx) {\n * tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar');\n * });\n * ```\n **/\nMarkdownIt.prototype.use = function (plugin /*, params, ... */) {\n const args = [this].concat(Array.prototype.slice.call(arguments, 1))\n plugin.apply(plugin, args)\n return this\n}\n\n/** internal\n * MarkdownIt.parse(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Parse input string and return list of block tokens (special token type\n * \"inline\" will contain list of inline tokens). You should not call this\n * method directly, until you write custom renderer (for example, to produce\n * AST).\n *\n * `env` is used to pass data between \"distributed\" rules and return additional\n * metadata like reference info, needed for the renderer. It also can be used to\n * inject data in specific cases. Usually, you will be ok to pass `{}`,\n * and then pass updated object to renderer.\n **/\nMarkdownIt.prototype.parse = function (src, env) {\n if (typeof src !== 'string') {\n throw new Error('Input data should be a String')\n }\n\n const state = new this.core.State(src, this, env)\n\n this.core.process(state)\n\n return state.tokens\n}\n\n/**\n * MarkdownIt.render(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Render markdown string into html. It does all magic for you :).\n *\n * `env` can be used to inject additional metadata (`{}` by default).\n * But you will not need it with high probability. See also comment\n * in [[MarkdownIt.parse]].\n **/\nMarkdownIt.prototype.render = function (src, env) {\n env = env || {}\n\n return this.renderer.render(this.parse(src, env), this.options, env)\n}\n\n/** internal\n * MarkdownIt.parseInline(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * The same as [[MarkdownIt.parse]] but skip all block rules. It returns the\n * block tokens list with the single `inline` element, containing parsed inline\n * tokens in `children` property. Also updates `env` object.\n **/\nMarkdownIt.prototype.parseInline = function (src, env) {\n const state = new this.core.State(src, this, env)\n\n state.inlineMode = true\n this.core.process(state)\n\n return state.tokens\n}\n\n/**\n * MarkdownIt.renderInline(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Similar to [[MarkdownIt.render]] but for single paragraph content. Result\n * will NOT be wrapped into `<p>` tags.\n **/\nMarkdownIt.prototype.renderInline = function (src, env) {\n env = env || {}\n\n return this.renderer.render(this.parseInline(src, env), this.options, env)\n}\n\nexport default MarkdownIt\n","import { Schema, Mark } from 'prosemirror-model';\nimport MarkdownIt from 'markdown-it';\n\n/**\nDocument schema for the data model used by CommonMark.\n*/\nconst schema = new Schema({\n nodes: {\n doc: {\n content: \"block+\"\n },\n paragraph: {\n content: \"inline*\",\n group: \"block\",\n parseDOM: [{ tag: \"p\" }],\n toDOM() { return [\"p\", 0]; }\n },\n blockquote: {\n content: \"block+\",\n group: \"block\",\n parseDOM: [{ tag: \"blockquote\" }],\n toDOM() { return [\"blockquote\", 0]; }\n },\n horizontal_rule: {\n group: \"block\",\n parseDOM: [{ tag: \"hr\" }],\n toDOM() { return [\"div\", [\"hr\"]]; }\n },\n heading: {\n attrs: { level: { default: 1 } },\n content: \"(text | image)*\",\n group: \"block\",\n defining: true,\n parseDOM: [{ tag: \"h1\", attrs: { level: 1 } },\n { tag: \"h2\", attrs: { level: 2 } },\n { tag: \"h3\", attrs: { level: 3 } },\n { tag: \"h4\", attrs: { level: 4 } },\n { tag: \"h5\", attrs: { level: 5 } },\n { tag: \"h6\", attrs: { level: 6 } }],\n toDOM(node) { return [\"h\" + node.attrs.level, 0]; }\n },\n code_block: {\n content: \"text*\",\n group: \"block\",\n code: true,\n defining: true,\n marks: \"\",\n attrs: { params: { default: \"\" } },\n parseDOM: [{ tag: \"pre\", preserveWhitespace: \"full\", getAttrs: node => ({ params: node.getAttribute(\"data-params\") || \"\" }) }],\n toDOM(node) { return [\"pre\", node.attrs.params ? { \"data-params\": node.attrs.params } : {}, [\"code\", 0]]; }\n },\n ordered_list: {\n content: \"list_item+\",\n group: \"block\",\n attrs: { order: { default: 1 }, tight: { default: false } },\n parseDOM: [{ tag: \"ol\", getAttrs(dom) {\n return { order: dom.hasAttribute(\"start\") ? +dom.getAttribute(\"start\") : 1,\n tight: dom.hasAttribute(\"data-tight\") };\n } }],\n toDOM(node) {\n return [\"ol\", { start: node.attrs.order == 1 ? null : node.attrs.order,\n \"data-tight\": node.attrs.tight ? \"true\" : null }, 0];\n }\n },\n bullet_list: {\n content: \"list_item+\",\n group: \"block\",\n attrs: { tight: { default: false } },\n parseDOM: [{ tag: \"ul\", getAttrs: dom => ({ tight: dom.hasAttribute(\"data-tight\") }) }],\n toDOM(node) { return [\"ul\", { \"data-tight\": node.attrs.tight ? \"true\" : null }, 0]; }\n },\n list_item: {\n content: \"block+\",\n defining: true,\n parseDOM: [{ tag: \"li\" }],\n toDOM() { return [\"li\", 0]; }\n },\n text: {\n group: \"inline\"\n },\n image: {\n inline: true,\n attrs: {\n src: {},\n alt: { default: null },\n title: { default: null }\n },\n group: \"inline\",\n draggable: true,\n parseDOM: [{ tag: \"img[src]\", getAttrs(dom) {\n return {\n src: dom.getAttribute(\"src\"),\n title: dom.getAttribute(\"title\"),\n alt: dom.getAttribute(\"alt\")\n };\n } }],\n toDOM(node) { return [\"img\", node.attrs]; }\n },\n hard_break: {\n inline: true,\n group: \"inline\",\n selectable: false,\n parseDOM: [{ tag: \"br\" }],\n toDOM() { return [\"br\"]; }\n }\n },\n marks: {\n em: {\n parseDOM: [\n { tag: \"i\" }, { tag: \"em\" },\n { style: \"font-style=italic\" },\n { style: \"font-style=normal\", clearMark: m => m.type.name == \"em\" }\n ],\n toDOM() { return [\"em\"]; }\n },\n strong: {\n parseDOM: [\n { tag: \"strong\" },\n { tag: \"b\", getAttrs: node => node.style.fontWeight != \"normal\" && null },\n { style: \"font-weight=400\", clearMark: m => m.type.name == \"strong\" },\n { style: \"font-weight\", getAttrs: value => /^(bold(er)?|[5-9]\\d{2,})$/.test(value) && null }\n ],\n toDOM() { return [\"strong\"]; }\n },\n link: {\n attrs: {\n href: {},\n title: { default: null }\n },\n inclusive: false,\n parseDOM: [{ tag: \"a[href]\", getAttrs(dom) {\n return { href: dom.getAttribute(\"href\"), title: dom.getAttribute(\"title\") };\n } }],\n toDOM(node) { return [\"a\", node.attrs]; }\n },\n code: {\n code: true,\n parseDOM: [{ tag: \"code\" }],\n toDOM() { return [\"code\"]; }\n }\n }\n});\n\n// @ts-ignore\nfunction maybeMerge(a, b) {\n if (a.isText && b.isText && Mark.sameSet(a.marks, b.marks))\n return a.withText(a.text + b.text);\n}\n// Object used to track the context of a running parse.\nclass MarkdownParseState {\n constructor(schema, tokenHandlers) {\n this.schema = schema;\n this.tokenHandlers = tokenHandlers;\n this.stack = [{ type: schema.topNodeType, attrs: null, content: [], marks: Mark.none }];\n }\n top() {\n return this.stack[this.stack.length - 1];\n }\n push(elt) {\n if (this.stack.length)\n this.top().content.push(elt);\n }\n // Adds the given text to the current position in the document,\n // using the current marks as styling.\n addText(text) {\n if (!text)\n return;\n let top = this.top(), nodes = top.content, last = nodes[nodes.length - 1];\n let node = this.schema.text(text, top.marks), merged;\n if (last && (merged = maybeMerge(last, node)))\n nodes[nodes.length - 1] = merged;\n else\n nodes.push(node);\n }\n // Adds the given mark to the set of active marks.\n openMark(mark) {\n let top = this.top();\n top.marks = mark.addToSet(top.marks);\n }\n // Removes the given mark from the set of active marks.\n closeMark(mark) {\n let top = this.top();\n top.marks = mark.removeFromSet(top.marks);\n }\n parseTokens(toks) {\n for (let i = 0; i < toks.length; i++) {\n let tok = toks[i];\n let handler = this.tokenHandlers[tok.type];\n if (!handler)\n throw new Error(\"Token type `\" + tok.type + \"` not supported by Markdown parser\");\n handler(this, tok, toks, i);\n }\n }\n // Add a node at the current position.\n addNode(type, attrs, content) {\n let top = this.top();\n let node = type.createAndFill(attrs, content, top ? top.marks : []);\n if (!node)\n return null;\n this.push(node);\n return node;\n }\n // Wrap subsequent content in a node of the given type.\n openNode(type, attrs) {\n this.stack.push({ type: type, attrs: attrs, content: [], marks: Mark.none });\n }\n // Close and return the node that is currently on top of the stack.\n closeNode() {\n let info = this.stack.pop();\n return this.addNode(info.type, info.attrs, info.content);\n }\n}\nfunction attrs(spec, token, tokens, i) {\n if (spec.getAttrs)\n return spec.getAttrs(token, tokens, i);\n // For backwards compatibility when `attrs` is a Function\n else if (spec.attrs instanceof Function)\n return spec.attrs(token);\n else\n return spec.attrs;\n}\n// Code content is represented as a single token with a `content`\n// property in Markdown-it.\nfunction noCloseToken(spec, type) {\n return spec.noCloseToken || type == \"code_inline\" || type == \"code_block\" || type == \"fence\";\n}\nfunction withoutTrailingNewline(str) {\n return str[str.length - 1] == \"\\n\" ? str.slice(0, str.length - 1) : str;\n}\nfunction noOp() { }\nfunction tokenHandlers(schema, tokens) {\n let handlers = Object.create(null);\n for (let type in tokens) {\n let spec = tokens[type];\n if (spec.block) {\n let nodeType = schema.nodeType(spec.block);\n if (noCloseToken(spec, type)) {\n handlers[type] = (state, tok, tokens, i) => {\n state.openNode(nodeType, attrs(spec, tok, tokens, i));\n state.addText(withoutTrailingNewline(tok.content));\n state.closeNode();\n };\n }\n else {\n handlers[type + \"_open\"] = (state, tok, tokens, i) => state.openNode(nodeType, attrs(spec, tok, tokens, i));\n handlers[type + \"_close\"] = state => state.closeNode();\n }\n }\n else if (spec.node) {\n let nodeType = schema.nodeType(spec.node);\n handlers[type] = (state, tok, tokens, i) => state.addNode(nodeType, attrs(spec, tok, tokens, i));\n }\n else if (spec.mark) {\n let markType = schema.marks[spec.mark];\n if (noCloseToken(spec, type)) {\n handlers[type] = (state, tok, tokens, i) => {\n state.openMark(markType.create(attrs(spec, tok, tokens, i)));\n state.addText(withoutTrailingNewline(tok.content));\n state.closeMark(markType);\n };\n }\n else {\n handlers[type + \"_open\"] = (state, tok, tokens, i) => state.openMark(markType.create(attrs(spec, tok, tokens, i)));\n handlers[type + \"_close\"] = state => state.closeMark(markType);\n }\n }\n else if (spec.ignore) {\n if (noCloseToken(spec, type)) {\n handlers[type] = noOp;\n }\n else {\n handlers[type + \"_open\"] = noOp;\n handlers[type + \"_close\"] = noOp;\n }\n }\n else {\n throw new RangeError(\"Unrecognized parsing spec \" + JSON.stringify(spec));\n }\n }\n handlers.text = (state, tok) => state.addText(tok.content);\n handlers.inline = (state, tok) => state.parseTokens(tok.children);\n handlers.softbreak = handlers.softbreak || (state => state.addText(\" \"));\n return handlers;\n}\n/**\nA configuration of a Markdown parser. Such a parser uses\n[markdown-it](https://github.com/markdown-it/markdown-it) to\ntokenize a file, and then runs the custom rules it is given over\nthe tokens to create a ProseMirror document tree.\n*/\nclass MarkdownParser {\n /**\n Create a parser with the given configuration. You can configure\n the markdown-it parser to parse the dialect you want, and provide\n a description of the ProseMirror entities those tokens map to in\n the `tokens` object, which maps token names to descriptions of\n what to do with them. Such a description is an object, and may\n have the following properties:\n */\n constructor(\n /**\n The parser's document schema.\n */\n schema, \n /**\n This parser's markdown-it tokenizer.\n */\n tokenizer, \n /**\n The value of the `tokens` object used to construct this\n parser. Can be useful to copy and modify to base other parsers\n on.\n */\n tokens) {\n this.schema = schema;\n this.tokenizer = tokenizer;\n this.tokens = tokens;\n this.tokenHandlers = tokenHandlers(schema, tokens);\n }\n /**\n Parse a string as [CommonMark](http://commonmark.org/) markup,\n and create a ProseMirror document as prescribed by this parser's\n rules.\n \n The second argument, when given, is passed through to the\n [Markdown\n parser](https://markdown-it.github.io/markdown-it/#MarkdownIt.parse).\n */\n parse(text, markdownEnv = {}) {\n let state = new MarkdownParseState(this.schema, this.tokenHandlers), doc;\n state.parseTokens(this.tokenizer.parse(text, markdownEnv));\n do {\n doc = state.closeNode();\n } while (state.stack.length);\n return doc || this.schema.topNodeType.createAndFill();\n }\n}\nfunction listIsTight(tokens, i) {\n while (++i < tokens.length)\n if (tokens[i].type != \"list_item_open\")\n return tokens[i].hidden;\n return false;\n}\n/**\nA parser parsing unextended [CommonMark](http://commonmark.org/),\nwithout inline HTML, and producing a document in the basic schema.\n*/\nconst defaultMarkdownParser = new MarkdownParser(schema, MarkdownIt(\"commonmark\", { html: false }), {\n blockquote: { block: \"blockquote\" },\n paragraph: { block: \"paragraph\" },\n list_item: { block: \"list_item\" },\n bullet_list: { block: \"bullet_list\", getAttrs: (_, tokens, i) => ({ tight: listIsTight(tokens, i) }) },\n ordered_list: { block: \"ordered_list\", getAttrs: (tok, tokens, i) => ({\n order: +tok.attrGet(\"start\") || 1,\n tight: listIsTight(tokens, i)\n }) },\n heading: { block: \"heading\", getAttrs: tok => ({ level: +tok.tag.slice(1) }) },\n code_block: { block: \"code_block\", noCloseToken: true },\n fence: { block: \"code_block\", getAttrs: tok => ({ params: tok.info || \"\" }), noCloseToken: true },\n hr: { node: \"horizontal_rule\" },\n image: { node: \"image\", getAttrs: tok => ({\n src: tok.attrGet(\"src\"),\n title: tok.attrGet(\"title\") || null,\n alt: tok.children[0] && tok.children[0].content || null\n }) },\n hardbreak: { node: \"hard_break\" },\n em: { mark: \"em\" },\n strong: { mark: \"strong\" },\n link: { mark: \"link\", getAttrs: tok => ({\n href: tok.attrGet(\"href\"),\n title: tok.attrGet(\"title\") || null\n }) },\n code_inline: { mark: \"code\", noCloseToken: true }\n});\n\nconst blankMark = { open: \"\", close: \"\", mixable: true };\n/**\nA specification for serializing a ProseMirror document as\nMarkdown/CommonMark text.\n*/\nclass MarkdownSerializer {\n /**\n Construct a serializer with the given configuration. The `nodes`\n object should map node names in a given schema to function that\n take a serializer state and such a node, and serialize the node.\n */\n constructor(\n /**\n The node serializer functions for this serializer.\n */\n nodes, \n /**\n The mark serializer info.\n */\n marks, options = {}) {\n this.nodes = nodes;\n this.marks = marks;\n this.options = options;\n }\n /**\n Serialize the content of the given node to\n [CommonMark](http://commonmark.org/).\n */\n serialize(content, options = {}) {\n options = Object.assign({}, this.options, options);\n let state = new MarkdownSerializerState(this.nodes, this.marks, options);\n state.renderContent(content);\n return state.out;\n }\n}\n/**\nA serializer for the [basic schema](https://prosemirror.net/docs/ref/#schema).\n*/\nconst defaultMarkdownSerializer = new MarkdownSerializer({\n blockquote(state, node) {\n state.wrapBlock(\"> \", null, node, () => state.renderContent(node));\n },\n code_block(state, node) {\n // Make sure the front matter fences are longer than any dash sequence within it\n const backticks = node.textContent.match(/`{3,}/gm);\n const fence = backticks ? (backticks.sort().slice(-1)[0] + \"`\") : \"```\";\n state.write(fence + (node.attrs.params || \"\") + \"\\n\");\n state.text(node.textContent, false);\n // Add a newline to the current content before adding closing marker\n state.write(\"\\n\");\n state.write(fence);\n state.closeBlock(node);\n },\n heading(state, node) {\n state.write(state.repeat(\"#\", node.attrs.level) + \" \");\n state.renderInline(node, false);\n state.closeBlock(node);\n },\n horizontal_rule(state, node) {\n state.write(node.attrs.markup || \"---\");\n state.closeBlock(node);\n },\n bullet_list(state, node) {\n state.renderList(node, \" \", () => (node.attrs.bullet || \"*\") + \" \");\n },\n ordered_list(state, node) {\n let start = node.attrs.order || 1;\n let maxW = String(start + node.childCount - 1).length;\n let space = state.repeat(\" \", maxW + 2);\n state.renderList(node, space, i => {\n let nStr = String(start + i);\n return state.repeat(\" \", maxW - nStr.length) + nStr + \". \";\n });\n },\n list_item(state, node) {\n state.renderContent(node);\n },\n paragraph(state, node) {\n state.renderInline(node);\n state.closeBlock(node);\n },\n image(state, node) {\n state.write(\"]/g, \"\\\\$&\") +\n (node.attrs.title ? ' \"' + node.attrs.title.replace(/\"/g, '\\\\\"') + '\"' : \"\") + \")\");\n },\n hard_break(state, node, parent, index) {\n for (let i = index + 1; i < parent.childCount; i++)\n if (parent.child(i).type != node.type) {\n state.write(\"\\\\\\n\");\n return;\n }\n },\n text(state, node) {\n state.text(node.text, !state.inAutolink);\n }\n}, {\n em: { open: \"*\", close: \"*\", mixable: true, expelEnclosingWhitespace: true },\n strong: { open: \"**\", close: \"**\", mixable: true, expelEnclosingWhitespace: true },\n link: {\n open(state, mark, parent, index) {\n state.inAutolink = isPlainURL(mark, parent, index);\n return state.inAutolink ? \"<\" : \"[\";\n },\n close(state, mark, parent, index) {\n let { inAutolink } = state;\n state.inAutolink = undefined;\n return inAutolink ? \">\"\n : \"](\" + mark.attrs.href.replace(/[\\(\\)\"]/g, \"\\\\$&\") + (mark.attrs.title ? ` \"${mark.attrs.title.replace(/\"/g, '\\\\\"')}\"` : \"\") + \")\";\n },\n mixable: true\n },\n code: { open(_state, _mark, parent, index) { return backticksFor(parent.child(index), -1); },\n close(_state, _mark, parent, index) { return backticksFor(parent.child(index - 1), 1); },\n escape: false }\n});\nfunction backticksFor(node, side) {\n let ticks = /`+/g, m, len = 0;\n if (node.isText)\n while (m = ticks.exec(node.text))\n len = Math.max(len, m[0].length);\n let result = len > 0 && side > 0 ? \" `\" : \"`\";\n for (let i = 0; i < len; i++)\n result += \"`\";\n if (len > 0 && side < 0)\n result += \" \";\n return result;\n}\nfunction isPlainURL(link, parent, index) {\n if (link.attrs.title || !/^\\w+:/.test(link.attrs.href))\n return false;\n let content = parent.child(index);\n if (!content.isText || content.text != link.attrs.href || content.marks[content.marks.length - 1] != link)\n return false;\n return index == parent.childCount - 1 || !link.isInSet(parent.child(index + 1).marks);\n}\n/**\nThis is an object used to track state and expose\nmethods related to markdown serialization. Instances are passed to\nnode and mark serialization methods (see `toMarkdown`).\n*/\nclass MarkdownSerializerState {\n /**\n @internal\n */\n constructor(\n /**\n @internal\n */\n nodes, \n /**\n @internal\n */\n marks, \n /**\n The options passed to the serializer.\n */\n options) {\n this.nodes = nodes;\n this.marks = marks;\n this.options = options;\n /**\n @internal\n */\n this.delim = \"\";\n /**\n @internal\n */\n this.out = \"\";\n /**\n @internal\n */\n this.closed = null;\n /**\n @internal\n */\n this.inAutolink = undefined;\n /**\n @internal\n */\n this.atBlockStart = false;\n /**\n @internal\n */\n this.inTightList = false;\n if (typeof this.options.tightLists == \"undefined\")\n this.options.tightLists = false;\n if (typeof this.options.hardBreakNodeName == \"undefined\")\n this.options.hardBreakNodeName = \"hard_break\";\n }\n /**\n @internal\n */\n flushClose(size = 2) {\n if (this.closed) {\n if (!this.atBlank())\n this.out += \"\\n\";\n if (size > 1) {\n let delimMin = this.delim;\n let trim = /\\s+$/.exec(delimMin);\n if (trim)\n delimMin = delimMin.slice(0, delimMin.length - trim[0].length);\n for (let i = 1; i < size; i++)\n this.out += delimMin + \"\\n\";\n }\n this.closed = null;\n }\n }\n /**\n @internal\n */\n getMark(name) {\n let info = this.marks[name];\n if (!info) {\n if (this.options.strict !== false)\n throw new Error(`Mark type \\`${name}\\` not supported by Markdown renderer`);\n info = blankMark;\n }\n return info;\n }\n /**\n Render a block, prefixing each line with `delim`, and the first\n line in `firstDelim`. `node` should be the node that is closed at\n the end of the block, and `f` is a function that renders the\n content of the block.\n */\n wrapBlock(delim, firstDelim, node, f) {\n let old = this.delim;\n this.write(firstDelim != null ? firstDelim : delim);\n this.delim += delim;\n f();\n this.delim = old;\n this.closeBlock(node);\n }\n /**\n @internal\n */\n atBlank() {\n return /(^|\\n)$/.test(this.out);\n }\n /**\n Ensure the current content ends with a newline.\n */\n ensureNewLine() {\n if (!this.atBlank())\n this.out += \"\\n\";\n }\n /**\n Prepare the state for writing output (closing closed paragraphs,\n adding delimiters, and so on), and then optionally add content\n (unescaped) to the output.\n */\n write(content) {\n this.flushClose();\n if (this.delim && this.atBlank())\n this.out += this.delim;\n if (content)\n this.out += content;\n }\n /**\n Close the block for the given node.\n */\n closeBlock(node) {\n this.closed = node;\n }\n /**\n Add the given text to the document. When escape is not `false`,\n it will be escaped.\n */\n text(text, escape = true) {\n let lines = text.split(\"\\n\");\n for (let i = 0; i < lines.length; i++) {\n this.write();\n // Escape exclamation marks in front of links\n if (!escape && lines[i][0] == \"[\" && /(^|[^\\\\])\\!$/.test(this.out))\n this.out = this.out.slice(0, this.out.length - 1) + \"\\\\!\";\n this.out += escape ? this.esc(lines[i], this.atBlockStart) : lines[i];\n if (i != lines.length - 1)\n this.out += \"\\n\";\n }\n }\n /**\n Render the given node as a block.\n */\n render(node, parent, index) {\n if (this.nodes[node.type.name]) {\n this.nodes[node.type.name](this, node, parent, index);\n }\n else {\n if (this.options.strict !== false) {\n throw new Error(\"Token type `\" + node.type.name + \"` not supported by Markdown renderer\");\n }\n else if (!node.type.isLeaf) {\n if (node.type.inlineContent)\n this.renderInline(node);\n else\n this.renderContent(node);\n if (node.isBlock)\n this.closeBlock(node);\n }\n }\n }\n /**\n Render the contents of `parent` as block nodes.\n */\n renderContent(parent) {\n parent.forEach((node, _, i) => this.render(node, parent, i));\n }\n /**\n Render the contents of `parent` as inline content.\n */\n renderInline(parent, fromBlockStart = true) {\n this.atBlockStart = fromBlockStart;\n let active = [], trailing = \"\";\n let progress = (node, offset, index) => {\n let marks = node ? node.marks : [];\n // Remove marks from `hard_break` that are the last node inside\n // that mark to prevent parser edge cases with new lines just\n // before closing marks.\n if (node && node.type.name === this.options.hardBreakNodeName)\n marks = marks.filter(m => {\n if (index + 1 == parent.childCount)\n return false;\n let next = parent.child(index + 1);\n return m.isInSet(next.marks) && (!next.isText || /\\S/.test(next.text));\n });\n let leading = trailing;\n trailing = \"\";\n // If whitespace has to be expelled from the node, adjust\n // leading and trailing accordingly.\n if (node && node.isText && marks.some(mark => {\n let info = this.getMark(mark.type.name);\n return info && info.expelEnclosingWhitespace && !mark.isInSet(active);\n })) {\n let [_, lead, rest] = /^(\\s*)(.*)$/m.exec(node.text);\n if (lead) {\n leading += lead;\n node = rest ? node.withText(rest) : null;\n if (!node)\n marks = active;\n }\n }\n if (node && node.isText && marks.some(mark => {\n let info = this.getMark(mark.type.name);\n return info && info.expelEnclosingWhitespace && !this.isMarkAhead(parent, index + 1, mark);\n })) {\n let [_, rest, trail] = /^(.*?)(\\s*)$/m.exec(node.text);\n if (trail) {\n trailing = trail;\n node = rest ? node.withText(rest) : null;\n if (!node)\n marks = active;\n }\n }\n let inner = marks.length ? marks[marks.length - 1] : null;\n let noEsc = inner && this.getMark(inner.type.name).escape === false;\n let len = marks.length - (noEsc ? 1 : 0);\n // Try to reorder 'mixable' marks, such as em and strong, which\n // in Markdown may be opened and closed in different order, so\n // that order of the marks for the token matches the order in\n // active.\n outer: for (let i = 0; i < len; i++) {\n let mark = marks[i];\n if (!this.getMark(mark.type.name).mixable)\n break;\n for (let j = 0; j < active.length; j++) {\n let other = active[j];\n if (!this.getMark(other.type.name).mixable)\n break;\n if (mark.eq(other)) {\n if (i > j)\n marks = marks.slice(0, j).concat(mark).concat(marks.slice(j, i)).concat(marks.slice(i + 1, len));\n else if (j > i)\n marks = marks.slice(0, i).concat(marks.slice(i + 1, j)).concat(mark).concat(marks.slice(j, len));\n continue outer;\n }\n }\n }\n // Find the prefix of the mark set that didn't change\n let keep = 0;\n while (keep < Math.min(active.length, len) && marks[keep].eq(active[keep]))\n ++keep;\n // Close the marks that need to be closed\n while (keep < active.length)\n this.text(this.markString(active.pop(), false, parent, index), false);\n // Output any previously expelled trailing whitespace outside the marks\n if (leading)\n this.text(leading);\n // Open the marks that need to be opened\n if (node) {\n while (active.length < len) {\n let add = marks[active.length];\n active.push(add);\n this.text(this.markString(add, true, parent, index), false);\n this.atBlockStart = false;\n }\n // Render the node. Special case code marks, since their content\n // may not be escaped.\n if (noEsc && node.isText)\n this.text(this.markString(inner, true, parent, index) + node.text +\n this.markString(inner, false, parent, index + 1), false);\n else\n this.render(node, parent, index);\n this.atBlockStart = false;\n }\n // After the first non-empty text node is rendered, the end of output\n // is no longer at block start.\n //\n // FIXME: If a non-text node writes something to the output for this\n // block, the end of output is also no longer at block start. But how\n // can we detect that?\n if ((node === null || node === void 0 ? void 0 : node.isText) && node.nodeSize > 0) {\n this.atBlockStart = false;\n }\n };\n parent.forEach(progress);\n progress(null, 0, parent.childCount);\n this.atBlockStart = false;\n }\n /**\n Render a node's content as a list. `delim` should be the extra\n indentation added to all lines except the first in an item,\n `firstDelim` is a function going from an item index to a\n delimiter for the first line of the item.\n */\n renderList(node, delim, firstDelim) {\n if (this.closed && this.closed.type == node.type)\n this.flushClose(3);\n else if (this.inTightList)\n this.flushClose(1);\n let isTight = typeof node.attrs.tight != \"undefined\" ? node.attrs.tight : this.options.tightLists;\n let prevTight = this.inTightList;\n this.inTightList = isTight;\n node.forEach((child, _, i) => {\n if (i && isTight)\n this.flushClose(1);\n this.wrapBlock(delim, firstDelim(i), node, () => this.render(child, node, i));\n });\n this.inTightList = prevTight;\n }\n /**\n Escape the given string so that it can safely appear in Markdown\n content. If `startOfLine` is true, also escape characters that\n have special meaning only at the start of the line.\n */\n esc(str, startOfLine = false) {\n str = str.replace(/[`*\\\\~\\[\\]_]/g, (m, i) => m == \"_\" && i > 0 && i + 1 < str.length && str[i - 1].match(/\\w/) && str[i + 1].match(/\\w/) ? m : \"\\\\\" + m);\n if (startOfLine)\n str = str.replace(/^(\\+[ ]|[\\-*>])/, \"\\\\$&\").replace(/^(\\s*)(#{1,6})(\\s|$)/, '$1\\\\$2$3').replace(/^(\\s*\\d+)\\.\\s/, \"$1\\\\. \");\n if (this.options.escapeExtraCharacters)\n str = str.replace(this.options.escapeExtraCharacters, \"\\\\$&\");\n return str;\n }\n /**\n @internal\n */\n quote(str) {\n let wrap = str.indexOf('\"') == -1 ? '\"\"' : str.indexOf(\"'\") == -1 ? \"''\" : \"()\";\n return wrap[0] + str + wrap[1];\n }\n /**\n Repeat the given string `n` times.\n */\n repeat(str, n) {\n let out = \"\";\n for (let i = 0; i < n; i++)\n out += str;\n return out;\n }\n /**\n Get the markdown string for a given opening or closing mark.\n */\n markString(mark, open, parent, index) {\n let info = this.getMark(mark.type.name);\n let value = open ? info.open : info.close;\n return typeof value == \"string\" ? value : value(this, mark, parent, index);\n }\n /**\n Get leading and trailing whitespace from a string. Values of\n leading or trailing property of the return object will be undefined\n if there is no match.\n */\n getEnclosingWhitespace(text) {\n return {\n leading: (text.match(/^(\\s+)/) || [undefined])[0],\n trailing: (text.match(/(\\s+)$/) || [undefined])[0]\n };\n }\n /**\n @internal\n */\n isMarkAhead(parent, index, mark) {\n for (;; index++) {\n if (index >= parent.childCount)\n return false;\n let next = parent.child(index);\n if (next.type.name != this.options.hardBreakNodeName)\n return mark.isInSet(next.marks);\n index++;\n }\n }\n}\n\nexport { MarkdownParser, MarkdownSerializer, MarkdownSerializerState, defaultMarkdownParser, defaultMarkdownSerializer, schema };\n","function Diff() {}\nDiff.prototype = {\n diff: function diff(oldString, newString) {\n var _options$timeout;\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var callback = options.callback;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n var self = this;\n function done(value) {\n value = self.postProcess(value, options);\n if (callback) {\n setTimeout(function () {\n callback(value);\n }, 0);\n return true;\n } else {\n return value;\n }\n }\n\n // Allow subclasses to massage the input prior to running\n oldString = this.castInput(oldString, options);\n newString = this.castInput(newString, options);\n oldString = this.removeEmpty(this.tokenize(oldString, options));\n newString = this.removeEmpty(this.tokenize(newString, options));\n var newLen = newString.length,\n oldLen = oldString.length;\n var editLength = 1;\n var maxEditLength = newLen + oldLen;\n if (options.maxEditLength != null) {\n maxEditLength = Math.min(maxEditLength, options.maxEditLength);\n }\n var maxExecutionTime = (_options$timeout = options.timeout) !== null && _options$timeout !== void 0 ? _options$timeout : Infinity;\n var abortAfterTimestamp = Date.now() + maxExecutionTime;\n var bestPath = [{\n oldPos: -1,\n lastComponent: undefined\n }];\n\n // Seed editLength = 0, i.e. the content starts with the same values\n var newPos = this.extractCommon(bestPath[0], newString, oldString, 0, options);\n if (bestPath[0].oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n // Identity per the equality and tokenizer\n return done(buildValues(self, bestPath[0].lastComponent, newString, oldString, self.useLongestToken));\n }\n\n // Once we hit the right edge of the edit graph on some diagonal k, we can\n // definitely reach the end of the edit graph in no more than k edits, so\n // there's no point in considering any moves to diagonal k+1 any more (from\n // which we're guaranteed to need at least k+1 more edits).\n // Similarly, once we've reached the bottom of the edit graph, there's no\n // point considering moves to lower diagonals.\n // We record this fact by setting minDiagonalToConsider and\n // maxDiagonalToConsider to some finite value once we've hit the edge of\n // the edit graph.\n // This optimization is not faithful to the original algorithm presented in\n // Myers's paper, which instead pointlessly extends D-paths off the end of\n // the edit graph - see page 7 of Myers's paper which notes this point\n // explicitly and illustrates it with a diagram. This has major performance\n // implications for some common scenarios. For instance, to compute a diff\n // where the new text simply appends d characters on the end of the\n // original text of length n, the true Myers algorithm will take O(n+d^2)\n // time while this optimization needs only O(n+d) time.\n var minDiagonalToConsider = -Infinity,\n maxDiagonalToConsider = Infinity;\n\n // Main worker method. checks all permutations of a given edit length for acceptance.\n function execEditLength() {\n for (var diagonalPath = Math.max(minDiagonalToConsider, -editLength); diagonalPath <= Math.min(maxDiagonalToConsider, editLength); diagonalPath += 2) {\n var basePath = void 0;\n var removePath = bestPath[diagonalPath - 1],\n addPath = bestPath[diagonalPath + 1];\n if (removePath) {\n // No one else is going to attempt to use this value, clear it\n bestPath[diagonalPath - 1] = undefined;\n }\n var canAdd = false;\n if (addPath) {\n // what newPos will be after we do an insertion:\n var addPathNewPos = addPath.oldPos - diagonalPath;\n canAdd = addPath && 0 <= addPathNewPos && addPathNewPos < newLen;\n }\n var canRemove = removePath && removePath.oldPos + 1 < oldLen;\n if (!canAdd && !canRemove) {\n // If this path is a terminal then prune\n bestPath[diagonalPath] = undefined;\n continue;\n }\n\n // Select the diagonal that we want to branch from. We select the prior\n // path whose position in the old string is the farthest from the origin\n // and does not pass the bounds of the diff graph\n if (!canRemove || canAdd && removePath.oldPos < addPath.oldPos) {\n basePath = self.addToPath(addPath, true, false, 0, options);\n } else {\n basePath = self.addToPath(removePath, false, true, 1, options);\n }\n newPos = self.extractCommon(basePath, newString, oldString, diagonalPath, options);\n if (basePath.oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n // If we have hit the end of both strings, then we are done\n return done(buildValues(self, basePath.lastComponent, newString, oldString, self.useLongestToken));\n } else {\n bestPath[diagonalPath] = basePath;\n if (basePath.oldPos + 1 >= oldLen) {\n maxDiagonalToConsider = Math.min(maxDiagonalToConsider, diagonalPath - 1);\n }\n if (newPos + 1 >= newLen) {\n minDiagonalToConsider = Math.max(minDiagonalToConsider, diagonalPath + 1);\n }\n }\n }\n editLength++;\n }\n\n // Performs the length of edit iteration. Is a bit fugly as this has to support the\n // sync and async mode which is never fun. Loops over execEditLength until a value\n // is produced, or until the edit length exceeds options.maxEditLength (if given),\n // in which case it will return undefined.\n if (callback) {\n (function exec() {\n setTimeout(function () {\n if (editLength > maxEditLength || Date.now() > abortAfterTimestamp) {\n return callback();\n }\n if (!execEditLength()) {\n exec();\n }\n }, 0);\n })();\n } else {\n while (editLength <= maxEditLength && Date.now() <= abortAfterTimestamp) {\n var ret = execEditLength();\n if (ret) {\n return ret;\n }\n }\n }\n },\n addToPath: function addToPath(path, added, removed, oldPosInc, options) {\n var last = path.lastComponent;\n if (last && !options.oneChangePerToken && last.added === added && last.removed === removed) {\n return {\n oldPos: path.oldPos + oldPosInc,\n lastComponent: {\n count: last.count + 1,\n added: added,\n removed: removed,\n previousComponent: last.previousComponent\n }\n };\n } else {\n return {\n oldPos: path.oldPos + oldPosInc,\n lastComponent: {\n count: 1,\n added: added,\n removed: removed,\n previousComponent: last\n }\n };\n }\n },\n extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath, options) {\n var newLen = newString.length,\n oldLen = oldString.length,\n oldPos = basePath.oldPos,\n newPos = oldPos - diagonalPath,\n commonCount = 0;\n while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(oldString[oldPos + 1], newString[newPos + 1], options)) {\n newPos++;\n oldPos++;\n commonCount++;\n if (options.oneChangePerToken) {\n basePath.lastComponent = {\n count: 1,\n previousComponent: basePath.lastComponent,\n added: false,\n removed: false\n };\n }\n }\n if (commonCount && !options.oneChangePerToken) {\n basePath.lastComponent = {\n count: commonCount,\n previousComponent: basePath.lastComponent,\n added: false,\n removed: false\n };\n }\n basePath.oldPos = oldPos;\n return newPos;\n },\n equals: function equals(left, right, options) {\n if (options.comparator) {\n return options.comparator(left, right);\n } else {\n return left === right || options.ignoreCase && left.toLowerCase() === right.toLowerCase();\n }\n },\n removeEmpty: function removeEmpty(array) {\n var ret = [];\n for (var i = 0; i < array.length; i++) {\n if (array[i]) {\n ret.push(array[i]);\n }\n }\n return ret;\n },\n castInput: function castInput(value) {\n return value;\n },\n tokenize: function tokenize(value) {\n return Array.from(value);\n },\n join: function join(chars) {\n return chars.join('');\n },\n postProcess: function postProcess(changeObjects) {\n return changeObjects;\n }\n};\nfunction buildValues(diff, lastComponent, newString, oldString, useLongestToken) {\n // First we convert our linked list of components in reverse order to an\n // array in the right order:\n var components = [];\n var nextComponent;\n while (lastComponent) {\n components.push(lastComponent);\n nextComponent = lastComponent.previousComponent;\n delete lastComponent.previousComponent;\n lastComponent = nextComponent;\n }\n components.reverse();\n var componentPos = 0,\n componentLen = components.length,\n newPos = 0,\n oldPos = 0;\n for (; componentPos < componentLen; componentPos++) {\n var component = components[componentPos];\n if (!component.removed) {\n if (!component.added && useLongestToken) {\n var value = newString.slice(newPos, newPos + component.count);\n value = value.map(function (value, i) {\n var oldValue = oldString[oldPos + i];\n return oldValue.length > value.length ? oldValue : value;\n });\n component.value = diff.join(value);\n } else {\n component.value = diff.join(newString.slice(newPos, newPos + component.count));\n }\n newPos += component.count;\n\n // Common case\n if (!component.added) {\n oldPos += component.count;\n }\n } else {\n component.value = diff.join(oldString.slice(oldPos, oldPos + component.count));\n oldPos += component.count;\n }\n }\n return components;\n}\n\nvar characterDiff = new Diff();\nfunction diffChars(oldStr, newStr, options) {\n return characterDiff.diff(oldStr, newStr, options);\n}\n\nfunction longestCommonPrefix(str1, str2) {\n var i;\n for (i = 0; i < str1.length && i < str2.length; i++) {\n if (str1[i] != str2[i]) {\n return str1.slice(0, i);\n }\n }\n return str1.slice(0, i);\n}\nfunction longestCommonSuffix(str1, str2) {\n var i;\n\n // Unlike longestCommonPrefix, we need a special case to handle all scenarios\n // where we return the empty string since str1.slice(-0) will return the\n // entire string.\n if (!str1 || !str2 || str1[str1.length - 1] != str2[str2.length - 1]) {\n return '';\n }\n for (i = 0; i < str1.length && i < str2.length; i++) {\n if (str1[str1.length - (i + 1)] != str2[str2.length - (i + 1)]) {\n return str1.slice(-i);\n }\n }\n return str1.slice(-i);\n}\nfunction replacePrefix(string, oldPrefix, newPrefix) {\n if (string.slice(0, oldPrefix.length) != oldPrefix) {\n throw Error(\"string \".concat(JSON.stringify(string), \" doesn't start with prefix \").concat(JSON.stringify(oldPrefix), \"; this is a bug\"));\n }\n return newPrefix + string.slice(oldPrefix.length);\n}\nfunction replaceSuffix(string, oldSuffix, newSuffix) {\n if (!oldSuffix) {\n return string + newSuffix;\n }\n if (string.slice(-oldSuffix.length) != oldSuffix) {\n throw Error(\"string \".concat(JSON.stringify(string), \" doesn't end with suffix \").concat(JSON.stringify(oldSuffix), \"; this is a bug\"));\n }\n return string.slice(0, -oldSuffix.length) + newSuffix;\n}\nfunction removePrefix(string, oldPrefix) {\n return replacePrefix(string, oldPrefix, '');\n}\nfunction removeSuffix(string, oldSuffix) {\n return replaceSuffix(string, oldSuffix, '');\n}\nfunction maximumOverlap(string1, string2) {\n return string2.slice(0, overlapCount(string1, string2));\n}\n\n// Nicked from https://stackoverflow.com/a/60422853/1709587\nfunction overlapCount(a, b) {\n // Deal with cases where the strings differ in length\n var startA = 0;\n if (a.length > b.length) {\n startA = a.length - b.length;\n }\n var endB = b.length;\n if (a.length < b.length) {\n endB = a.length;\n }\n // Create a back-reference for each index\n // that should be followed in case of a mismatch.\n // We only need B to make these references:\n var map = Array(endB);\n var k = 0; // Index that lags behind j\n map[0] = 0;\n for (var j = 1; j < endB; j++) {\n if (b[j] == b[k]) {\n map[j] = map[k]; // skip over the same character (optional optimisation)\n } else {\n map[j] = k;\n }\n while (k > 0 && b[j] != b[k]) {\n k = map[k];\n }\n if (b[j] == b[k]) {\n k++;\n }\n }\n // Phase 2: use these references while iterating over A\n k = 0;\n for (var i = startA; i < a.length; i++) {\n while (k > 0 && a[i] != b[k]) {\n k = map[k];\n }\n if (a[i] == b[k]) {\n k++;\n }\n }\n return k;\n}\n\n/**\n * Returns true if the string consistently uses Windows line endings.\n */\nfunction hasOnlyWinLineEndings(string) {\n return string.includes('\\r\\n') && !string.startsWith('\\n') && !string.match(/[^\\r]\\n/);\n}\n\n/**\n * Returns true if the string consistently uses Unix line endings.\n */\nfunction hasOnlyUnixLineEndings(string) {\n return !string.includes('\\r\\n') && string.includes('\\n');\n}\n\n// Based on https://en.wikipedia.org/wiki/Latin_script_in_Unicode\n//\n// Ranges and exceptions:\n// Latin-1 Supplement, 0080–00FF\n// - U+00D7 × Multiplication sign\n// - U+00F7 ÷ Division sign\n// Latin Extended-A, 0100–017F\n// Latin Extended-B, 0180–024F\n// IPA Extensions, 0250–02AF\n// Spacing Modifier Letters, 02B0–02FF\n// - U+02C7 ˇ ˇ Caron\n// - U+02D8 ˘ ˘ Breve\n// - U+02D9 ˙ ˙ Dot Above\n// - U+02DA ˚ ˚ Ring Above\n// - U+02DB ˛ ˛ Ogonek\n// - U+02DC ˜ ˜ Small Tilde\n// - U+02DD ˝ ˝ Double Acute Accent\n// Latin Extended Additional, 1E00–1EFF\nvar extendedWordChars = \"a-zA-Z0-9_\\\\u{C0}-\\\\u{FF}\\\\u{D8}-\\\\u{F6}\\\\u{F8}-\\\\u{2C6}\\\\u{2C8}-\\\\u{2D7}\\\\u{2DE}-\\\\u{2FF}\\\\u{1E00}-\\\\u{1EFF}\";\n\n// Each token is one of the following:\n// - A punctuation mark plus the surrounding whitespace\n// - A word plus the surrounding whitespace\n// - Pure whitespace (but only in the special case where this the entire text\n// is just whitespace)\n//\n// We have to include surrounding whitespace in the tokens because the two\n// alternative approaches produce horribly broken results:\n// * If we just discard the whitespace, we can't fully reproduce the original\n// text from the sequence of tokens and any attempt to render the diff will\n// get the whitespace wrong.\n// * If we have separate tokens for whitespace, then in a typical text every\n// second token will be a single space character. But this often results in\n// the optimal diff between two texts being a perverse one that preserves\n// the spaces between words but deletes and reinserts actual common words.\n// See https://github.com/kpdecker/jsdiff/issues/160#issuecomment-1866099640\n// for an example.\n//\n// Keeping the surrounding whitespace of course has implications for .equals\n// and .join, not just .tokenize.\n\n// This regex does NOT fully implement the tokenization rules described above.\n// Instead, it gives runs of whitespace their own \"token\". The tokenize method\n// then handles stitching whitespace tokens onto adjacent word or punctuation\n// tokens.\nvar tokenizeIncludingWhitespace = new RegExp(\"[\".concat(extendedWordChars, \"]+|\\\\s+|[^\").concat(extendedWordChars, \"]\"), 'ug');\nvar wordDiff = new Diff();\nwordDiff.equals = function (left, right, options) {\n if (options.ignoreCase) {\n left = left.toLowerCase();\n right = right.toLowerCase();\n }\n return left.trim() === right.trim();\n};\nwordDiff.tokenize = function (value) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var parts;\n if (options.intlSegmenter) {\n if (options.intlSegmenter.resolvedOptions().granularity != 'word') {\n throw new Error('The segmenter passed must have a granularity of \"word\"');\n }\n parts = Array.from(options.intlSegmenter.segment(value), function (segment) {\n return segment.segment;\n });\n } else {\n parts = value.match(tokenizeIncludingWhitespace) || [];\n }\n var tokens = [];\n var prevPart = null;\n parts.forEach(function (part) {\n if (/\\s/.test(part)) {\n if (prevPart == null) {\n tokens.push(part);\n } else {\n tokens.push(tokens.pop() + part);\n }\n } else if (/\\s/.test(prevPart)) {\n if (tokens[tokens.length - 1] == prevPart) {\n tokens.push(tokens.pop() + part);\n } else {\n tokens.push(prevPart + part);\n }\n } else {\n tokens.push(part);\n }\n prevPart = part;\n });\n return tokens;\n};\nwordDiff.join = function (tokens) {\n // Tokens being joined here will always have appeared consecutively in the\n // same text, so we can simply strip off the leading whitespace from all the\n // tokens except the first (and except any whitespace-only tokens - but such\n // a token will always be the first and only token anyway) and then join them\n // and the whitespace around words and punctuation will end up correct.\n return tokens.map(function (token, i) {\n if (i == 0) {\n return token;\n } else {\n return token.replace(/^\\s+/, '');\n }\n }).join('');\n};\nwordDiff.postProcess = function (changes, options) {\n if (!changes || options.oneChangePerToken) {\n return changes;\n }\n var lastKeep = null;\n // Change objects representing any insertion or deletion since the last\n // \"keep\" change object. There can be at most one of each.\n var insertion = null;\n var deletion = null;\n changes.forEach(function (change) {\n if (change.added) {\n insertion = change;\n } else if (change.removed) {\n deletion = change;\n } else {\n if (insertion || deletion) {\n // May be false at start of text\n dedupeWhitespaceInChangeObjects(lastKeep, deletion, insertion, change);\n }\n lastKeep = change;\n insertion = null;\n deletion = null;\n }\n });\n if (insertion || deletion) {\n dedupeWhitespaceInChangeObjects(lastKeep, deletion, insertion, null);\n }\n return changes;\n};\nfunction diffWords(oldStr, newStr, options) {\n // This option has never been documented and never will be (it's clearer to\n // just call `diffWordsWithSpace` directly if you need that behavior), but\n // has existed in jsdiff for a long time, so we retain support for it here\n // for the sake of backwards compatibility.\n if ((options === null || options === void 0 ? void 0 : options.ignoreWhitespace) != null && !options.ignoreWhitespace) {\n return diffWordsWithSpace(oldStr, newStr, options);\n }\n return wordDiff.diff(oldStr, newStr, options);\n}\nfunction dedupeWhitespaceInChangeObjects(startKeep, deletion, insertion, endKeep) {\n // Before returning, we tidy up the leading and trailing whitespace of the\n // change objects to eliminate cases where trailing whitespace in one object\n // is repeated as leading whitespace in the next.\n // Below are examples of the outcomes we want here to explain the code.\n // I=insert, K=keep, D=delete\n // 1. diffing 'foo bar baz' vs 'foo baz'\n // Prior to cleanup, we have K:'foo ' D:' bar ' K:' baz'\n // After cleanup, we want: K:'foo ' D:'bar ' K:'baz'\n //\n // 2. Diffing 'foo bar baz' vs 'foo qux baz'\n // Prior to cleanup, we have K:'foo ' D:' bar ' I:' qux ' K:' baz'\n // After cleanup, we want K:'foo ' D:'bar' I:'qux' K:' baz'\n //\n // 3. Diffing 'foo\\nbar baz' vs 'foo baz'\n // Prior to cleanup, we have K:'foo ' D:'\\nbar ' K:' baz'\n // After cleanup, we want K'foo' D:'\\nbar' K:' baz'\n //\n // 4. Diffing 'foo baz' vs 'foo\\nbar baz'\n // Prior to cleanup, we have K:'foo\\n' I:'\\nbar ' K:' baz'\n // After cleanup, we ideally want K'foo' I:'\\nbar' K:' baz'\n // but don't actually manage this currently (the pre-cleanup change\n // objects don't contain enough information to make it possible).\n //\n // 5. Diffing 'foo bar baz' vs 'foo baz'\n // Prior to cleanup, we have K:'foo ' D:' bar ' K:' baz'\n // After cleanup, we want K:'foo ' D:' bar ' K:'baz'\n //\n // Our handling is unavoidably imperfect in the case where there's a single\n // indel between keeps and the whitespace has changed. For instance, consider\n // diffing 'foo\\tbar\\nbaz' vs 'foo baz'. Unless we create an extra change\n // object to represent the insertion of the space character (which isn't even\n // a token), we have no way to avoid losing information about the texts'\n // original whitespace in the result we return. Still, we do our best to\n // output something that will look sensible if we e.g. print it with\n // insertions in green and deletions in red.\n\n // Between two \"keep\" change objects (or before the first or after the last\n // change object), we can have either:\n // * A \"delete\" followed by an \"insert\"\n // * Just an \"insert\"\n // * Just a \"delete\"\n // We handle the three cases separately.\n if (deletion && insertion) {\n var oldWsPrefix = deletion.value.match(/^\\s*/)[0];\n var oldWsSuffix = deletion.value.match(/\\s*$/)[0];\n var newWsPrefix = insertion.value.match(/^\\s*/)[0];\n var newWsSuffix = insertion.value.match(/\\s*$/)[0];\n if (startKeep) {\n var commonWsPrefix = longestCommonPrefix(oldWsPrefix, newWsPrefix);\n startKeep.value = replaceSuffix(startKeep.value, newWsPrefix, commonWsPrefix);\n deletion.value = removePrefix(deletion.value, commonWsPrefix);\n insertion.value = removePrefix(insertion.value, commonWsPrefix);\n }\n if (endKeep) {\n var commonWsSuffix = longestCommonSuffix(oldWsSuffix, newWsSuffix);\n endKeep.value = replacePrefix(endKeep.value, newWsSuffix, commonWsSuffix);\n deletion.value = removeSuffix(deletion.value, commonWsSuffix);\n insertion.value = removeSuffix(insertion.value, commonWsSuffix);\n }\n } else if (insertion) {\n // The whitespaces all reflect what was in the new text rather than\n // the old, so we essentially have no information about whitespace\n // insertion or deletion. We just want to dedupe the whitespace.\n // We do that by having each change object keep its trailing\n // whitespace and deleting duplicate leading whitespace where\n // present.\n if (startKeep) {\n insertion.value = insertion.value.replace(/^\\s*/, '');\n }\n if (endKeep) {\n endKeep.value = endKeep.value.replace(/^\\s*/, '');\n }\n // otherwise we've got a deletion and no insertion\n } else if (startKeep && endKeep) {\n var newWsFull = endKeep.value.match(/^\\s*/)[0],\n delWsStart = deletion.value.match(/^\\s*/)[0],\n delWsEnd = deletion.value.match(/\\s*$/)[0];\n\n // Any whitespace that comes straight after startKeep in both the old and\n // new texts, assign to startKeep and remove from the deletion.\n var newWsStart = longestCommonPrefix(newWsFull, delWsStart);\n deletion.value = removePrefix(deletion.value, newWsStart);\n\n // Any whitespace that comes straight before endKeep in both the old and\n // new texts, and hasn't already been assigned to startKeep, assign to\n // endKeep and remove from the deletion.\n var newWsEnd = longestCommonSuffix(removePrefix(newWsFull, newWsStart), delWsEnd);\n deletion.value = removeSuffix(deletion.value, newWsEnd);\n endKeep.value = replacePrefix(endKeep.value, newWsFull, newWsEnd);\n\n // If there's any whitespace from the new text that HASN'T already been\n // assigned, assign it to the start:\n startKeep.value = replaceSuffix(startKeep.value, newWsFull, newWsFull.slice(0, newWsFull.length - newWsEnd.length));\n } else if (endKeep) {\n // We are at the start of the text. Preserve all the whitespace on\n // endKeep, and just remove whitespace from the end of deletion to the\n // extent that it overlaps with the start of endKeep.\n var endKeepWsPrefix = endKeep.value.match(/^\\s*/)[0];\n var deletionWsSuffix = deletion.value.match(/\\s*$/)[0];\n var overlap = maximumOverlap(deletionWsSuffix, endKeepWsPrefix);\n deletion.value = removeSuffix(deletion.value, overlap);\n } else if (startKeep) {\n // We are at the END of the text. Preserve all the whitespace on\n // startKeep, and just remove whitespace from the start of deletion to\n // the extent that it overlaps with the end of startKeep.\n var startKeepWsSuffix = startKeep.value.match(/\\s*$/)[0];\n var deletionWsPrefix = deletion.value.match(/^\\s*/)[0];\n var _overlap = maximumOverlap(startKeepWsSuffix, deletionWsPrefix);\n deletion.value = removePrefix(deletion.value, _overlap);\n }\n}\nvar wordWithSpaceDiff = new Diff();\nwordWithSpaceDiff.tokenize = function (value) {\n // Slightly different to the tokenizeIncludingWhitespace regex used above in\n // that this one treats each individual newline as a distinct tokens, rather\n // than merging them into other surrounding whitespace. This was requested\n // in https://github.com/kpdecker/jsdiff/issues/180 &\n // https://github.com/kpdecker/jsdiff/issues/211\n var regex = new RegExp(\"(\\\\r?\\\\n)|[\".concat(extendedWordChars, \"]+|[^\\\\S\\\\n\\\\r]+|[^\").concat(extendedWordChars, \"]\"), 'ug');\n return value.match(regex) || [];\n};\nfunction diffWordsWithSpace(oldStr, newStr, options) {\n return wordWithSpaceDiff.diff(oldStr, newStr, options);\n}\n\nfunction generateOptions(options, defaults) {\n if (typeof options === 'function') {\n defaults.callback = options;\n } else if (options) {\n for (var name in options) {\n /* istanbul ignore else */\n if (options.hasOwnProperty(name)) {\n defaults[name] = options[name];\n }\n }\n }\n return defaults;\n}\n\nvar lineDiff = new Diff();\nlineDiff.tokenize = function (value, options) {\n if (options.stripTrailingCr) {\n // remove one \\r before \\n to match GNU diff's --strip-trailing-cr behavior\n value = value.replace(/\\r\\n/g, '\\n');\n }\n var retLines = [],\n linesAndNewlines = value.split(/(\\n|\\r\\n)/);\n\n // Ignore the final empty token that occurs if the string ends with a new line\n if (!linesAndNewlines[linesAndNewlines.length - 1]) {\n linesAndNewlines.pop();\n }\n\n // Merge the content and line separators into single tokens\n for (var i = 0; i < linesAndNewlines.length; i++) {\n var line = linesAndNewlines[i];\n if (i % 2 && !options.newlineIsToken) {\n retLines[retLines.length - 1] += line;\n } else {\n retLines.push(line);\n }\n }\n return retLines;\n};\nlineDiff.equals = function (left, right, options) {\n // If we're ignoring whitespace, we need to normalise lines by stripping\n // whitespace before checking equality. (This has an annoying interaction\n // with newlineIsToken that requires special handling: if newlines get their\n // own token, then we DON'T want to trim the *newline* tokens down to empty\n // strings, since this would cause us to treat whitespace-only line content\n // as equal to a separator between lines, which would be weird and\n // inconsistent with the documented behavior of the options.)\n if (options.ignoreWhitespace) {\n if (!options.newlineIsToken || !left.includes('\\n')) {\n left = left.trim();\n }\n if (!options.newlineIsToken || !right.includes('\\n')) {\n right = right.trim();\n }\n } else if (options.ignoreNewlineAtEof && !options.newlineIsToken) {\n if (left.endsWith('\\n')) {\n left = left.slice(0, -1);\n }\n if (right.endsWith('\\n')) {\n right = right.slice(0, -1);\n }\n }\n return Diff.prototype.equals.call(this, left, right, options);\n};\nfunction diffLines(oldStr, newStr, callback) {\n return lineDiff.diff(oldStr, newStr, callback);\n}\n\n// Kept for backwards compatibility. This is a rather arbitrary wrapper method\n// that just calls `diffLines` with `ignoreWhitespace: true`. It's confusing to\n// have two ways to do exactly the same thing in the API, so we no longer\n// document this one (library users should explicitly use `diffLines` with\n// `ignoreWhitespace: true` instead) but we keep it around to maintain\n// compatibility with code that used old versions.\nfunction diffTrimmedLines(oldStr, newStr, callback) {\n var options = generateOptions(callback, {\n ignoreWhitespace: true\n });\n return lineDiff.diff(oldStr, newStr, options);\n}\n\nvar sentenceDiff = new Diff();\nsentenceDiff.tokenize = function (value) {\n return value.split(/(\\S.+?[.!?])(?=\\s+|$)/);\n};\nfunction diffSentences(oldStr, newStr, callback) {\n return sentenceDiff.diff(oldStr, newStr, callback);\n}\n\nvar cssDiff = new Diff();\ncssDiff.tokenize = function (value) {\n return value.split(/([{}:;,]|\\s+)/);\n};\nfunction diffCss(oldStr, newStr, callback) {\n return cssDiff.diff(oldStr, newStr, callback);\n}\n\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nfunction _toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n var i = _toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nfunction _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar jsonDiff = new Diff();\n// Discriminate between two lines of pretty-printed, serialized JSON where one of them has a\n// dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output:\njsonDiff.useLongestToken = true;\njsonDiff.tokenize = lineDiff.tokenize;\njsonDiff.castInput = function (value, options) {\n var undefinedReplacement = options.undefinedReplacement,\n _options$stringifyRep = options.stringifyReplacer,\n stringifyReplacer = _options$stringifyRep === void 0 ? function (k, v) {\n return typeof v === 'undefined' ? undefinedReplacement : v;\n } : _options$stringifyRep;\n return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, ' ');\n};\njsonDiff.equals = function (left, right, options) {\n return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\\r\\n])/g, '$1'), right.replace(/,([\\r\\n])/g, '$1'), options);\n};\nfunction diffJson(oldObj, newObj, options) {\n return jsonDiff.diff(oldObj, newObj, options);\n}\n\n// This function handles the presence of circular references by bailing out when encountering an\n// object that is already on the \"stack\" of items being processed. Accepts an optional replacer\nfunction canonicalize(obj, stack, replacementStack, replacer, key) {\n stack = stack || [];\n replacementStack = replacementStack || [];\n if (replacer) {\n obj = replacer(key, obj);\n }\n var i;\n for (i = 0; i < stack.length; i += 1) {\n if (stack[i] === obj) {\n return replacementStack[i];\n }\n }\n var canonicalizedObj;\n if ('[object Array]' === Object.prototype.toString.call(obj)) {\n stack.push(obj);\n canonicalizedObj = new Array(obj.length);\n replacementStack.push(canonicalizedObj);\n for (i = 0; i < obj.length; i += 1) {\n canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key);\n }\n stack.pop();\n replacementStack.pop();\n return canonicalizedObj;\n }\n if (obj && obj.toJSON) {\n obj = obj.toJSON();\n }\n if (_typeof(obj) === 'object' && obj !== null) {\n stack.push(obj);\n canonicalizedObj = {};\n replacementStack.push(canonicalizedObj);\n var sortedKeys = [],\n _key;\n for (_key in obj) {\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(obj, _key)) {\n sortedKeys.push(_key);\n }\n }\n sortedKeys.sort();\n for (i = 0; i < sortedKeys.length; i += 1) {\n _key = sortedKeys[i];\n canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key);\n }\n stack.pop();\n replacementStack.pop();\n } else {\n canonicalizedObj = obj;\n }\n return canonicalizedObj;\n}\n\nvar arrayDiff = new Diff();\narrayDiff.tokenize = function (value) {\n return value.slice();\n};\narrayDiff.join = arrayDiff.removeEmpty = function (value) {\n return value;\n};\nfunction diffArrays(oldArr, newArr, callback) {\n return arrayDiff.diff(oldArr, newArr, callback);\n}\n\nfunction unixToWin(patch) {\n if (Array.isArray(patch)) {\n return patch.map(unixToWin);\n }\n return _objectSpread2(_objectSpread2({}, patch), {}, {\n hunks: patch.hunks.map(function (hunk) {\n return _objectSpread2(_objectSpread2({}, hunk), {}, {\n lines: hunk.lines.map(function (line, i) {\n var _hunk$lines;\n return line.startsWith('\\\\') || line.endsWith('\\r') || (_hunk$lines = hunk.lines[i + 1]) !== null && _hunk$lines !== void 0 && _hunk$lines.startsWith('\\\\') ? line : line + '\\r';\n })\n });\n })\n });\n}\nfunction winToUnix(patch) {\n if (Array.isArray(patch)) {\n return patch.map(winToUnix);\n }\n return _objectSpread2(_objectSpread2({}, patch), {}, {\n hunks: patch.hunks.map(function (hunk) {\n return _objectSpread2(_objectSpread2({}, hunk), {}, {\n lines: hunk.lines.map(function (line) {\n return line.endsWith('\\r') ? line.substring(0, line.length - 1) : line;\n })\n });\n })\n });\n}\n\n/**\n * Returns true if the patch consistently uses Unix line endings (or only involves one line and has\n * no line endings).\n */\nfunction isUnix(patch) {\n if (!Array.isArray(patch)) {\n patch = [patch];\n }\n return !patch.some(function (index) {\n return index.hunks.some(function (hunk) {\n return hunk.lines.some(function (line) {\n return !line.startsWith('\\\\') && line.endsWith('\\r');\n });\n });\n });\n}\n\n/**\n * Returns true if the patch uses Windows line endings and only Windows line endings.\n */\nfunction isWin(patch) {\n if (!Array.isArray(patch)) {\n patch = [patch];\n }\n return patch.some(function (index) {\n return index.hunks.some(function (hunk) {\n return hunk.lines.some(function (line) {\n return line.endsWith('\\r');\n });\n });\n }) && patch.every(function (index) {\n return index.hunks.every(function (hunk) {\n return hunk.lines.every(function (line, i) {\n var _hunk$lines2;\n return line.startsWith('\\\\') || line.endsWith('\\r') || ((_hunk$lines2 = hunk.lines[i + 1]) === null || _hunk$lines2 === void 0 ? void 0 : _hunk$lines2.startsWith('\\\\'));\n });\n });\n });\n}\n\nfunction parsePatch(uniDiff) {\n var diffstr = uniDiff.split(/\\n/),\n list = [],\n i = 0;\n function parseIndex() {\n var index = {};\n list.push(index);\n\n // Parse diff metadata\n while (i < diffstr.length) {\n var line = diffstr[i];\n\n // File header found, end parsing diff metadata\n if (/^(\\-\\-\\-|\\+\\+\\+|@@)\\s/.test(line)) {\n break;\n }\n\n // Diff index\n var header = /^(?:Index:|diff(?: -r \\w+)+)\\s+(.+?)\\s*$/.exec(line);\n if (header) {\n index.index = header[1];\n }\n i++;\n }\n\n // Parse file headers if they are defined. Unified diff requires them, but\n // there's no technical issues to have an isolated hunk without file header\n parseFileHeader(index);\n parseFileHeader(index);\n\n // Parse hunks\n index.hunks = [];\n while (i < diffstr.length) {\n var _line = diffstr[i];\n if (/^(Index:\\s|diff\\s|\\-\\-\\-\\s|\\+\\+\\+\\s|===================================================================)/.test(_line)) {\n break;\n } else if (/^@@/.test(_line)) {\n index.hunks.push(parseHunk());\n } else if (_line) {\n throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line));\n } else {\n i++;\n }\n }\n }\n\n // Parses the --- and +++ headers, if none are found, no lines\n // are consumed.\n function parseFileHeader(index) {\n var fileHeader = /^(---|\\+\\+\\+)\\s+(.*)\\r?$/.exec(diffstr[i]);\n if (fileHeader) {\n var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new';\n var data = fileHeader[2].split('\\t', 2);\n var fileName = data[0].replace(/\\\\\\\\/g, '\\\\');\n if (/^\".*\"$/.test(fileName)) {\n fileName = fileName.substr(1, fileName.length - 2);\n }\n index[keyPrefix + 'FileName'] = fileName;\n index[keyPrefix + 'Header'] = (data[1] || '').trim();\n i++;\n }\n }\n\n // Parses a hunk\n // This assumes that we are at the start of a hunk.\n function parseHunk() {\n var chunkHeaderIndex = i,\n chunkHeaderLine = diffstr[i++],\n chunkHeader = chunkHeaderLine.split(/@@ -(\\d+)(?:,(\\d+))? \\+(\\d+)(?:,(\\d+))? @@/);\n var hunk = {\n oldStart: +chunkHeader[1],\n oldLines: typeof chunkHeader[2] === 'undefined' ? 1 : +chunkHeader[2],\n newStart: +chunkHeader[3],\n newLines: typeof chunkHeader[4] === 'undefined' ? 1 : +chunkHeader[4],\n lines: []\n };\n\n // Unified Diff Format quirk: If the chunk size is 0,\n // the first number is one lower than one would expect.\n // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n if (hunk.oldLines === 0) {\n hunk.oldStart += 1;\n }\n if (hunk.newLines === 0) {\n hunk.newStart += 1;\n }\n var addCount = 0,\n removeCount = 0;\n for (; i < diffstr.length && (removeCount < hunk.oldLines || addCount < hunk.newLines || (_diffstr$i = diffstr[i]) !== null && _diffstr$i !== void 0 && _diffstr$i.startsWith('\\\\')); i++) {\n var _diffstr$i;\n var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0];\n if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\\\') {\n hunk.lines.push(diffstr[i]);\n if (operation === '+') {\n addCount++;\n } else if (operation === '-') {\n removeCount++;\n } else if (operation === ' ') {\n addCount++;\n removeCount++;\n }\n } else {\n throw new Error(\"Hunk at line \".concat(chunkHeaderIndex + 1, \" contained invalid line \").concat(diffstr[i]));\n }\n }\n\n // Handle the empty block count case\n if (!addCount && hunk.newLines === 1) {\n hunk.newLines = 0;\n }\n if (!removeCount && hunk.oldLines === 1) {\n hunk.oldLines = 0;\n }\n\n // Perform sanity checking\n if (addCount !== hunk.newLines) {\n throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n }\n if (removeCount !== hunk.oldLines) {\n throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n }\n return hunk;\n }\n while (i < diffstr.length) {\n parseIndex();\n }\n return list;\n}\n\n// Iterator that traverses in the range of [min, max], stepping\n// by distance from a given start position. I.e. for [0, 4], with\n// start of 2, this will iterate 2, 3, 1, 4, 0.\nfunction distanceIterator (start, minLine, maxLine) {\n var wantForward = true,\n backwardExhausted = false,\n forwardExhausted = false,\n localOffset = 1;\n return function iterator() {\n if (wantForward && !forwardExhausted) {\n if (backwardExhausted) {\n localOffset++;\n } else {\n wantForward = false;\n }\n\n // Check if trying to fit beyond text length, and if not, check it fits\n // after offset location (or desired location on first iteration)\n if (start + localOffset <= maxLine) {\n return start + localOffset;\n }\n forwardExhausted = true;\n }\n if (!backwardExhausted) {\n if (!forwardExhausted) {\n wantForward = true;\n }\n\n // Check if trying to fit before text beginning, and if not, check it fits\n // before offset location\n if (minLine <= start - localOffset) {\n return start - localOffset++;\n }\n backwardExhausted = true;\n return iterator();\n }\n\n // We tried to fit hunk before text beginning and beyond text length, then\n // hunk can't fit on the text. Return undefined\n };\n}\n\nfunction applyPatch(source, uniDiff) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n if (typeof uniDiff === 'string') {\n uniDiff = parsePatch(uniDiff);\n }\n if (Array.isArray(uniDiff)) {\n if (uniDiff.length > 1) {\n throw new Error('applyPatch only works with a single input.');\n }\n uniDiff = uniDiff[0];\n }\n if (options.autoConvertLineEndings || options.autoConvertLineEndings == null) {\n if (hasOnlyWinLineEndings(source) && isUnix(uniDiff)) {\n uniDiff = unixToWin(uniDiff);\n } else if (hasOnlyUnixLineEndings(source) && isWin(uniDiff)) {\n uniDiff = winToUnix(uniDiff);\n }\n }\n\n // Apply the diff to the input\n var lines = source.split('\\n'),\n hunks = uniDiff.hunks,\n compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) {\n return line === patchContent;\n },\n fuzzFactor = options.fuzzFactor || 0,\n minLine = 0;\n if (fuzzFactor < 0 || !Number.isInteger(fuzzFactor)) {\n throw new Error('fuzzFactor must be a non-negative integer');\n }\n\n // Special case for empty patch.\n if (!hunks.length) {\n return source;\n }\n\n // Before anything else, handle EOFNL insertion/removal. If the patch tells us to make a change\n // to the EOFNL that is redundant/impossible - i.e. to remove a newline that's not there, or add a\n // newline that already exists - then we either return false and fail to apply the patch (if\n // fuzzFactor is 0) or simply ignore the problem and do nothing (if fuzzFactor is >0).\n // If we do need to remove/add a newline at EOF, this will always be in the final hunk:\n var prevLine = '',\n removeEOFNL = false,\n addEOFNL = false;\n for (var i = 0; i < hunks[hunks.length - 1].lines.length; i++) {\n var line = hunks[hunks.length - 1].lines[i];\n if (line[0] == '\\\\') {\n if (prevLine[0] == '+') {\n removeEOFNL = true;\n } else if (prevLine[0] == '-') {\n addEOFNL = true;\n }\n }\n prevLine = line;\n }\n if (removeEOFNL) {\n if (addEOFNL) {\n // This means the final line gets changed but doesn't have a trailing newline in either the\n // original or patched version. In that case, we do nothing if fuzzFactor > 0, and if\n // fuzzFactor is 0, we simply validate that the source file has no trailing newline.\n if (!fuzzFactor && lines[lines.length - 1] == '') {\n return false;\n }\n } else if (lines[lines.length - 1] == '') {\n lines.pop();\n } else if (!fuzzFactor) {\n return false;\n }\n } else if (addEOFNL) {\n if (lines[lines.length - 1] != '') {\n lines.push('');\n } else if (!fuzzFactor) {\n return false;\n }\n }\n\n /**\n * Checks if the hunk can be made to fit at the provided location with at most `maxErrors`\n * insertions, substitutions, or deletions, while ensuring also that:\n * - lines deleted in the hunk match exactly, and\n * - wherever an insertion operation or block of insertion operations appears in the hunk, the\n * immediately preceding and following lines of context match exactly\n *\n * `toPos` should be set such that lines[toPos] is meant to match hunkLines[0].\n *\n * If the hunk can be applied, returns an object with properties `oldLineLastI` and\n * `replacementLines`. Otherwise, returns null.\n */\n function applyHunk(hunkLines, toPos, maxErrors) {\n var hunkLinesI = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var lastContextLineMatched = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n var patchedLines = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [];\n var patchedLinesLength = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;\n var nConsecutiveOldContextLines = 0;\n var nextContextLineMustMatch = false;\n for (; hunkLinesI < hunkLines.length; hunkLinesI++) {\n var hunkLine = hunkLines[hunkLinesI],\n operation = hunkLine.length > 0 ? hunkLine[0] : ' ',\n content = hunkLine.length > 0 ? hunkLine.substr(1) : hunkLine;\n if (operation === '-') {\n if (compareLine(toPos + 1, lines[toPos], operation, content)) {\n toPos++;\n nConsecutiveOldContextLines = 0;\n } else {\n if (!maxErrors || lines[toPos] == null) {\n return null;\n }\n patchedLines[patchedLinesLength] = lines[toPos];\n return applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI, false, patchedLines, patchedLinesLength + 1);\n }\n }\n if (operation === '+') {\n if (!lastContextLineMatched) {\n return null;\n }\n patchedLines[patchedLinesLength] = content;\n patchedLinesLength++;\n nConsecutiveOldContextLines = 0;\n nextContextLineMustMatch = true;\n }\n if (operation === ' ') {\n nConsecutiveOldContextLines++;\n patchedLines[patchedLinesLength] = lines[toPos];\n if (compareLine(toPos + 1, lines[toPos], operation, content)) {\n patchedLinesLength++;\n lastContextLineMatched = true;\n nextContextLineMustMatch = false;\n toPos++;\n } else {\n if (nextContextLineMustMatch || !maxErrors) {\n return null;\n }\n\n // Consider 3 possibilities in sequence:\n // 1. lines contains a *substitution* not included in the patch context, or\n // 2. lines contains an *insertion* not included in the patch context, or\n // 3. lines contains a *deletion* not included in the patch context\n // The first two options are of course only possible if the line from lines is non-null -\n // i.e. only option 3 is possible if we've overrun the end of the old file.\n return lines[toPos] && (applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI + 1, false, patchedLines, patchedLinesLength + 1) || applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI, false, patchedLines, patchedLinesLength + 1)) || applyHunk(hunkLines, toPos, maxErrors - 1, hunkLinesI + 1, false, patchedLines, patchedLinesLength);\n }\n }\n }\n\n // Before returning, trim any unmodified context lines off the end of patchedLines and reduce\n // toPos (and thus oldLineLastI) accordingly. This allows later hunks to be applied to a region\n // that starts in this hunk's trailing context.\n patchedLinesLength -= nConsecutiveOldContextLines;\n toPos -= nConsecutiveOldContextLines;\n patchedLines.length = patchedLinesLength;\n return {\n patchedLines: patchedLines,\n oldLineLastI: toPos - 1\n };\n }\n var resultLines = [];\n\n // Search best fit offsets for each hunk based on the previous ones\n var prevHunkOffset = 0;\n for (var _i = 0; _i < hunks.length; _i++) {\n var hunk = hunks[_i];\n var hunkResult = void 0;\n var maxLine = lines.length - hunk.oldLines + fuzzFactor;\n var toPos = void 0;\n for (var maxErrors = 0; maxErrors <= fuzzFactor; maxErrors++) {\n toPos = hunk.oldStart + prevHunkOffset - 1;\n var iterator = distanceIterator(toPos, minLine, maxLine);\n for (; toPos !== undefined; toPos = iterator()) {\n hunkResult = applyHunk(hunk.lines, toPos, maxErrors);\n if (hunkResult) {\n break;\n }\n }\n if (hunkResult) {\n break;\n }\n }\n if (!hunkResult) {\n return false;\n }\n\n // Copy everything from the end of where we applied the last hunk to the start of this hunk\n for (var _i2 = minLine; _i2 < toPos; _i2++) {\n resultLines.push(lines[_i2]);\n }\n\n // Add the lines produced by applying the hunk:\n for (var _i3 = 0; _i3 < hunkResult.patchedLines.length; _i3++) {\n var _line = hunkResult.patchedLines[_i3];\n resultLines.push(_line);\n }\n\n // Set lower text limit to end of the current hunk, so next ones don't try\n // to fit over already patched text\n minLine = hunkResult.oldLineLastI + 1;\n\n // Note the offset between where the patch said the hunk should've applied and where we\n // applied it, so we can adjust future hunks accordingly:\n prevHunkOffset = toPos + 1 - hunk.oldStart;\n }\n\n // Copy over the rest of the lines from the old text\n for (var _i4 = minLine; _i4 < lines.length; _i4++) {\n resultLines.push(lines[_i4]);\n }\n return resultLines.join('\\n');\n}\n\n// Wrapper that supports multiple file patches via callbacks.\nfunction applyPatches(uniDiff, options) {\n if (typeof uniDiff === 'string') {\n uniDiff = parsePatch(uniDiff);\n }\n var currentIndex = 0;\n function processIndex() {\n var index = uniDiff[currentIndex++];\n if (!index) {\n return options.complete();\n }\n options.loadFile(index, function (err, data) {\n if (err) {\n return options.complete(err);\n }\n var updatedContent = applyPatch(data, index, options);\n options.patched(index, updatedContent, function (err) {\n if (err) {\n return options.complete(err);\n }\n processIndex();\n });\n });\n }\n processIndex();\n}\n\nfunction structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n if (!options) {\n options = {};\n }\n if (typeof options === 'function') {\n options = {\n callback: options\n };\n }\n if (typeof options.context === 'undefined') {\n options.context = 4;\n }\n if (options.newlineIsToken) {\n throw new Error('newlineIsToken may not be used with patch-generation functions, only with diffing functions');\n }\n if (!options.callback) {\n return diffLinesResultToPatch(diffLines(oldStr, newStr, options));\n } else {\n var _options = options,\n _callback = _options.callback;\n diffLines(oldStr, newStr, _objectSpread2(_objectSpread2({}, options), {}, {\n callback: function callback(diff) {\n var patch = diffLinesResultToPatch(diff);\n _callback(patch);\n }\n }));\n }\n function diffLinesResultToPatch(diff) {\n // STEP 1: Build up the patch with no \"\\" lines and with the arrays\n // of lines containing trailing newline characters. We'll tidy up later...\n\n if (!diff) {\n return;\n }\n diff.push({\n value: '',\n lines: []\n }); // Append an empty value to make cleanup easier\n\n function contextLines(lines) {\n return lines.map(function (entry) {\n return ' ' + entry;\n });\n }\n var hunks = [];\n var oldRangeStart = 0,\n newRangeStart = 0,\n curRange = [],\n oldLine = 1,\n newLine = 1;\n var _loop = function _loop() {\n var current = diff[i],\n lines = current.lines || splitLines(current.value);\n current.lines = lines;\n if (current.added || current.removed) {\n var _curRange;\n // If we have previous context, start with that\n if (!oldRangeStart) {\n var prev = diff[i - 1];\n oldRangeStart = oldLine;\n newRangeStart = newLine;\n if (prev) {\n curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : [];\n oldRangeStart -= curRange.length;\n newRangeStart -= curRange.length;\n }\n }\n\n // Output our changes\n (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function (entry) {\n return (current.added ? '+' : '-') + entry;\n })));\n\n // Track the updated file position\n if (current.added) {\n newLine += lines.length;\n } else {\n oldLine += lines.length;\n }\n } else {\n // Identical context lines. Track line changes\n if (oldRangeStart) {\n // Close out any changes that have been output (or join overlapping)\n if (lines.length <= options.context * 2 && i < diff.length - 2) {\n var _curRange2;\n // Overlapping\n (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines)));\n } else {\n var _curRange3;\n // end the range and output\n var contextSize = Math.min(lines.length, options.context);\n (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize))));\n var _hunk = {\n oldStart: oldRangeStart,\n oldLines: oldLine - oldRangeStart + contextSize,\n newStart: newRangeStart,\n newLines: newLine - newRangeStart + contextSize,\n lines: curRange\n };\n hunks.push(_hunk);\n oldRangeStart = 0;\n newRangeStart = 0;\n curRange = [];\n }\n }\n oldLine += lines.length;\n newLine += lines.length;\n }\n };\n for (var i = 0; i < diff.length; i++) {\n _loop();\n }\n\n // Step 2: eliminate the trailing `\\n` from each line of each hunk, and, where needed, add\n // \"\\".\n for (var _i = 0, _hunks = hunks; _i < _hunks.length; _i++) {\n var hunk = _hunks[_i];\n for (var _i2 = 0; _i2 < hunk.lines.length; _i2++) {\n if (hunk.lines[_i2].endsWith('\\n')) {\n hunk.lines[_i2] = hunk.lines[_i2].slice(0, -1);\n } else {\n hunk.lines.splice(_i2 + 1, 0, '\\\');\n _i2++; // Skip the line we just added, then continue iterating\n }\n }\n }\n return {\n oldFileName: oldFileName,\n newFileName: newFileName,\n oldHeader: oldHeader,\n newHeader: newHeader,\n hunks: hunks\n };\n }\n}\nfunction formatPatch(diff) {\n if (Array.isArray(diff)) {\n return diff.map(formatPatch).join('\\n');\n }\n var ret = [];\n if (diff.oldFileName == diff.newFileName) {\n ret.push('Index: ' + diff.oldFileName);\n }\n ret.push('===================================================================');\n ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\\t' + diff.oldHeader));\n ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\\t' + diff.newHeader));\n for (var i = 0; i < diff.hunks.length; i++) {\n var hunk = diff.hunks[i];\n // Unified Diff Format quirk: If the chunk size is 0,\n // the first number is one lower than one would expect.\n // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n if (hunk.oldLines === 0) {\n hunk.oldStart -= 1;\n }\n if (hunk.newLines === 0) {\n hunk.newStart -= 1;\n }\n ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@');\n ret.push.apply(ret, hunk.lines);\n }\n return ret.join('\\n') + '\\n';\n}\nfunction createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n var _options2;\n if (typeof options === 'function') {\n options = {\n callback: options\n };\n }\n if (!((_options2 = options) !== null && _options2 !== void 0 && _options2.callback)) {\n var patchObj = structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options);\n if (!patchObj) {\n return;\n }\n return formatPatch(patchObj);\n } else {\n var _options3 = options,\n _callback2 = _options3.callback;\n structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, _objectSpread2(_objectSpread2({}, options), {}, {\n callback: function callback(patchObj) {\n if (!patchObj) {\n _callback2();\n } else {\n _callback2(formatPatch(patchObj));\n }\n }\n }));\n }\n}\nfunction createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) {\n return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options);\n}\n\n/**\n * Split `text` into an array of lines, including the trailing newline character (where present)\n */\nfunction splitLines(text) {\n var hasTrailingNl = text.endsWith('\\n');\n var result = text.split('\\n').map(function (line) {\n return line + '\\n';\n });\n if (hasTrailingNl) {\n result.pop();\n } else {\n result.push(result.pop().slice(0, -1));\n }\n return result;\n}\n\nfunction arrayEqual(a, b) {\n if (a.length !== b.length) {\n return false;\n }\n return arrayStartsWith(a, b);\n}\nfunction arrayStartsWith(array, start) {\n if (start.length > array.length) {\n return false;\n }\n for (var i = 0; i < start.length; i++) {\n if (start[i] !== array[i]) {\n return false;\n }\n }\n return true;\n}\n\nfunction calcLineCount(hunk) {\n var _calcOldNewLineCount = calcOldNewLineCount(hunk.lines),\n oldLines = _calcOldNewLineCount.oldLines,\n newLines = _calcOldNewLineCount.newLines;\n if (oldLines !== undefined) {\n hunk.oldLines = oldLines;\n } else {\n delete hunk.oldLines;\n }\n if (newLines !== undefined) {\n hunk.newLines = newLines;\n } else {\n delete hunk.newLines;\n }\n}\nfunction merge(mine, theirs, base) {\n mine = loadPatch(mine, base);\n theirs = loadPatch(theirs, base);\n var ret = {};\n\n // For index we just let it pass through as it doesn't have any necessary meaning.\n // Leaving sanity checks on this to the API consumer that may know more about the\n // meaning in their own context.\n if (mine.index || theirs.index) {\n ret.index = mine.index || theirs.index;\n }\n if (mine.newFileName || theirs.newFileName) {\n if (!fileNameChanged(mine)) {\n // No header or no change in ours, use theirs (and ours if theirs does not exist)\n ret.oldFileName = theirs.oldFileName || mine.oldFileName;\n ret.newFileName = theirs.newFileName || mine.newFileName;\n ret.oldHeader = theirs.oldHeader || mine.oldHeader;\n ret.newHeader = theirs.newHeader || mine.newHeader;\n } else if (!fileNameChanged(theirs)) {\n // No header or no change in theirs, use ours\n ret.oldFileName = mine.oldFileName;\n ret.newFileName = mine.newFileName;\n ret.oldHeader = mine.oldHeader;\n ret.newHeader = mine.newHeader;\n } else {\n // Both changed... figure it out\n ret.oldFileName = selectField(ret, mine.oldFileName, theirs.oldFileName);\n ret.newFileName = selectField(ret, mine.newFileName, theirs.newFileName);\n ret.oldHeader = selectField(ret, mine.oldHeader, theirs.oldHeader);\n ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader);\n }\n }\n ret.hunks = [];\n var mineIndex = 0,\n theirsIndex = 0,\n mineOffset = 0,\n theirsOffset = 0;\n while (mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length) {\n var mineCurrent = mine.hunks[mineIndex] || {\n oldStart: Infinity\n },\n theirsCurrent = theirs.hunks[theirsIndex] || {\n oldStart: Infinity\n };\n if (hunkBefore(mineCurrent, theirsCurrent)) {\n // This patch does not overlap with any of the others, yay.\n ret.hunks.push(cloneHunk(mineCurrent, mineOffset));\n mineIndex++;\n theirsOffset += mineCurrent.newLines - mineCurrent.oldLines;\n } else if (hunkBefore(theirsCurrent, mineCurrent)) {\n // This patch does not overlap with any of the others, yay.\n ret.hunks.push(cloneHunk(theirsCurrent, theirsOffset));\n theirsIndex++;\n mineOffset += theirsCurrent.newLines - theirsCurrent.oldLines;\n } else {\n // Overlap, merge as best we can\n var mergedHunk = {\n oldStart: Math.min(mineCurrent.oldStart, theirsCurrent.oldStart),\n oldLines: 0,\n newStart: Math.min(mineCurrent.newStart + mineOffset, theirsCurrent.oldStart + theirsOffset),\n newLines: 0,\n lines: []\n };\n mergeLines(mergedHunk, mineCurrent.oldStart, mineCurrent.lines, theirsCurrent.oldStart, theirsCurrent.lines);\n theirsIndex++;\n mineIndex++;\n ret.hunks.push(mergedHunk);\n }\n }\n return ret;\n}\nfunction loadPatch(param, base) {\n if (typeof param === 'string') {\n if (/^@@/m.test(param) || /^Index:/m.test(param)) {\n return parsePatch(param)[0];\n }\n if (!base) {\n throw new Error('Must provide a base reference or pass in a patch');\n }\n return structuredPatch(undefined, undefined, base, param);\n }\n return param;\n}\nfunction fileNameChanged(patch) {\n return patch.newFileName && patch.newFileName !== patch.oldFileName;\n}\nfunction selectField(index, mine, theirs) {\n if (mine === theirs) {\n return mine;\n } else {\n index.conflict = true;\n return {\n mine: mine,\n theirs: theirs\n };\n }\n}\nfunction hunkBefore(test, check) {\n return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart;\n}\nfunction cloneHunk(hunk, offset) {\n return {\n oldStart: hunk.oldStart,\n oldLines: hunk.oldLines,\n newStart: hunk.newStart + offset,\n newLines: hunk.newLines,\n lines: hunk.lines\n };\n}\nfunction mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) {\n // This will generally result in a conflicted hunk, but there are cases where the context\n // is the only overlap where we can successfully merge the content here.\n var mine = {\n offset: mineOffset,\n lines: mineLines,\n index: 0\n },\n their = {\n offset: theirOffset,\n lines: theirLines,\n index: 0\n };\n\n // Handle any leading content\n insertLeading(hunk, mine, their);\n insertLeading(hunk, their, mine);\n\n // Now in the overlap content. Scan through and select the best changes from each.\n while (mine.index < mine.lines.length && their.index < their.lines.length) {\n var mineCurrent = mine.lines[mine.index],\n theirCurrent = their.lines[their.index];\n if ((mineCurrent[0] === '-' || mineCurrent[0] === '+') && (theirCurrent[0] === '-' || theirCurrent[0] === '+')) {\n // Both modified ...\n mutualChange(hunk, mine, their);\n } else if (mineCurrent[0] === '+' && theirCurrent[0] === ' ') {\n var _hunk$lines;\n // Mine inserted\n (_hunk$lines = hunk.lines).push.apply(_hunk$lines, _toConsumableArray(collectChange(mine)));\n } else if (theirCurrent[0] === '+' && mineCurrent[0] === ' ') {\n var _hunk$lines2;\n // Theirs inserted\n (_hunk$lines2 = hunk.lines).push.apply(_hunk$lines2, _toConsumableArray(collectChange(their)));\n } else if (mineCurrent[0] === '-' && theirCurrent[0] === ' ') {\n // Mine removed or edited\n removal(hunk, mine, their);\n } else if (theirCurrent[0] === '-' && mineCurrent[0] === ' ') {\n // Their removed or edited\n removal(hunk, their, mine, true);\n } else if (mineCurrent === theirCurrent) {\n // Context identity\n hunk.lines.push(mineCurrent);\n mine.index++;\n their.index++;\n } else {\n // Context mismatch\n conflict(hunk, collectChange(mine), collectChange(their));\n }\n }\n\n // Now push anything that may be remaining\n insertTrailing(hunk, mine);\n insertTrailing(hunk, their);\n calcLineCount(hunk);\n}\nfunction mutualChange(hunk, mine, their) {\n var myChanges = collectChange(mine),\n theirChanges = collectChange(their);\n if (allRemoves(myChanges) && allRemoves(theirChanges)) {\n // Special case for remove changes that are supersets of one another\n if (arrayStartsWith(myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) {\n var _hunk$lines3;\n (_hunk$lines3 = hunk.lines).push.apply(_hunk$lines3, _toConsumableArray(myChanges));\n return;\n } else if (arrayStartsWith(theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) {\n var _hunk$lines4;\n (_hunk$lines4 = hunk.lines).push.apply(_hunk$lines4, _toConsumableArray(theirChanges));\n return;\n }\n } else if (arrayEqual(myChanges, theirChanges)) {\n var _hunk$lines5;\n (_hunk$lines5 = hunk.lines).push.apply(_hunk$lines5, _toConsumableArray(myChanges));\n return;\n }\n conflict(hunk, myChanges, theirChanges);\n}\nfunction removal(hunk, mine, their, swap) {\n var myChanges = collectChange(mine),\n theirChanges = collectContext(their, myChanges);\n if (theirChanges.merged) {\n var _hunk$lines6;\n (_hunk$lines6 = hunk.lines).push.apply(_hunk$lines6, _toConsumableArray(theirChanges.merged));\n } else {\n conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges);\n }\n}\nfunction conflict(hunk, mine, their) {\n hunk.conflict = true;\n hunk.lines.push({\n conflict: true,\n mine: mine,\n theirs: their\n });\n}\nfunction insertLeading(hunk, insert, their) {\n while (insert.offset < their.offset && insert.index < insert.lines.length) {\n var line = insert.lines[insert.index++];\n hunk.lines.push(line);\n insert.offset++;\n }\n}\nfunction insertTrailing(hunk, insert) {\n while (insert.index < insert.lines.length) {\n var line = insert.lines[insert.index++];\n hunk.lines.push(line);\n }\n}\nfunction collectChange(state) {\n var ret = [],\n operation = state.lines[state.index][0];\n while (state.index < state.lines.length) {\n var line = state.lines[state.index];\n\n // Group additions that are immediately after subtractions and treat them as one \"atomic\" modify change.\n if (operation === '-' && line[0] === '+') {\n operation = '+';\n }\n if (operation === line[0]) {\n ret.push(line);\n state.index++;\n } else {\n break;\n }\n }\n return ret;\n}\nfunction collectContext(state, matchChanges) {\n var changes = [],\n merged = [],\n matchIndex = 0,\n contextChanges = false,\n conflicted = false;\n while (matchIndex < matchChanges.length && state.index < state.lines.length) {\n var change = state.lines[state.index],\n match = matchChanges[matchIndex];\n\n // Once we've hit our add, then we are done\n if (match[0] === '+') {\n break;\n }\n contextChanges = contextChanges || change[0] !== ' ';\n merged.push(match);\n matchIndex++;\n\n // Consume any additions in the other block as a conflict to attempt\n // to pull in the remaining context after this\n if (change[0] === '+') {\n conflicted = true;\n while (change[0] === '+') {\n changes.push(change);\n change = state.lines[++state.index];\n }\n }\n if (match.substr(1) === change.substr(1)) {\n changes.push(change);\n state.index++;\n } else {\n conflicted = true;\n }\n }\n if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) {\n conflicted = true;\n }\n if (conflicted) {\n return changes;\n }\n while (matchIndex < matchChanges.length) {\n merged.push(matchChanges[matchIndex++]);\n }\n return {\n merged: merged,\n changes: changes\n };\n}\nfunction allRemoves(changes) {\n return changes.reduce(function (prev, change) {\n return prev && change[0] === '-';\n }, true);\n}\nfunction skipRemoveSuperset(state, removeChanges, delta) {\n for (var i = 0; i < delta; i++) {\n var changeContent = removeChanges[removeChanges.length - delta + i].substr(1);\n if (state.lines[state.index + i] !== ' ' + changeContent) {\n return false;\n }\n }\n state.index += delta;\n return true;\n}\nfunction calcOldNewLineCount(lines) {\n var oldLines = 0;\n var newLines = 0;\n lines.forEach(function (line) {\n if (typeof line !== 'string') {\n var myCount = calcOldNewLineCount(line.mine);\n var theirCount = calcOldNewLineCount(line.theirs);\n if (oldLines !== undefined) {\n if (myCount.oldLines === theirCount.oldLines) {\n oldLines += myCount.oldLines;\n } else {\n oldLines = undefined;\n }\n }\n if (newLines !== undefined) {\n if (myCount.newLines === theirCount.newLines) {\n newLines += myCount.newLines;\n } else {\n newLines = undefined;\n }\n }\n } else {\n if (newLines !== undefined && (line[0] === '+' || line[0] === ' ')) {\n newLines++;\n }\n if (oldLines !== undefined && (line[0] === '-' || line[0] === ' ')) {\n oldLines++;\n }\n }\n });\n return {\n oldLines: oldLines,\n newLines: newLines\n };\n}\n\nfunction reversePatch(structuredPatch) {\n if (Array.isArray(structuredPatch)) {\n return structuredPatch.map(reversePatch).reverse();\n }\n return _objectSpread2(_objectSpread2({}, structuredPatch), {}, {\n oldFileName: structuredPatch.newFileName,\n oldHeader: structuredPatch.newHeader,\n newFileName: structuredPatch.oldFileName,\n newHeader: structuredPatch.oldHeader,\n hunks: structuredPatch.hunks.map(function (hunk) {\n return {\n oldLines: hunk.newLines,\n oldStart: hunk.newStart,\n newLines: hunk.oldLines,\n newStart: hunk.oldStart,\n lines: hunk.lines.map(function (l) {\n if (l.startsWith('-')) {\n return \"+\".concat(l.slice(1));\n }\n if (l.startsWith('+')) {\n return \"-\".concat(l.slice(1));\n }\n return l;\n })\n };\n })\n });\n}\n\n// See: http://code.google.com/p/google-diff-match-patch/wiki/API\nfunction convertChangesToDMP(changes) {\n var ret = [],\n change,\n operation;\n for (var i = 0; i < changes.length; i++) {\n change = changes[i];\n if (change.added) {\n operation = 1;\n } else if (change.removed) {\n operation = -1;\n } else {\n operation = 0;\n }\n ret.push([operation, change.value]);\n }\n return ret;\n}\n\nfunction convertChangesToXML(changes) {\n var ret = [];\n for (var i = 0; i < changes.length; i++) {\n var change = changes[i];\n if (change.added) {\n ret.push('<ins>');\n } else if (change.removed) {\n ret.push('<del>');\n }\n ret.push(escapeHTML(change.value));\n if (change.added) {\n ret.push('</ins>');\n } else if (change.removed) {\n ret.push('</del>');\n }\n }\n return ret.join('');\n}\nfunction escapeHTML(s) {\n var n = s;\n n = n.replace(/&/g, '&');\n n = n.replace(/</g, '<');\n n = n.replace(/>/g, '>');\n n = n.replace(/\"/g, '"');\n return n;\n}\n\nexport { Diff, applyPatch, applyPatches, canonicalize, convertChangesToDMP, convertChangesToXML, createPatch, createTwoFilesPatch, diffArrays, diffChars, diffCss, diffJson, diffLines, diffSentences, diffTrimmedLines, diffWords, diffWordsWithSpace, formatPatch, merge, parsePatch, reversePatch, structuredPatch };\n","import type { ReasoningEffort } from '@shipyard/loro-schema';\nimport type { ModelInfo } from '@shipyard/session';\nimport { logger } from '../logger.js';\nimport { getSupportedEfforts } from './effort-probe.js';\nimport { run } from './shell.js';\n\n/**\n * `lastKnown` preserves a previously-detected model list when the underlying\n * `which claude` call fails for a non-authoritative reason (subprocess timeout,\n * ENOENT/EAGAIN/EMFILE, kill signal). Without this, a transient subprocess\n * failure in the 30s capability-refresh tick collapses the model list to `[]`,\n * which `applyFreshCapabilities` writes wholesale, and the browser briefly\n * renders \"No models\" until the next successful tick. Mirror of the\n * `lastKnownAgents` pattern in `agents.ts`.\n */\nexport async function detectModels(lastKnown?: ModelInfo[]): Promise<ModelInfo[]> {\n const models: ModelInfo[] = [];\n\n try {\n await run('which', ['claude']);\n const supported = getSupportedEfforts();\n /**\n * `'none'` is our meta-value meaning \"thinking off\" — translated at the\n * chokepoint to `applyFlagSettings({ alwaysThinkingEnabled: false })`.\n * The bundled CLI does not list it in `--effort` (none is not a flag\n * value), so the probe excludes it; we advertise it unconditionally.\n */\n const filter = (efforts: ReasoningEffort[]): ReasoningEffort[] =>\n efforts.filter((e) => e === 'none' || supported.has(e));\n /**\n * `'none'` is never picked as a silent fallback default — users opt in\n * explicitly. When the desired concrete default isn't advertised, pick\n * the last non-`'none'` effort instead.\n */\n const pickDefault = (desired: ReasoningEffort, efforts: ReasoningEffort[]): ReasoningEffort => {\n if (efforts.includes(desired)) return desired;\n const concrete = efforts.filter((e) => e !== 'none');\n return concrete[concrete.length - 1] ?? 'low';\n };\n\n const opusEfforts = filter(['none', 'low', 'medium', 'high', 'xhigh', 'max']);\n const sonnetEfforts = filter(['none', 'low', 'medium', 'high', 'max']);\n\n models.push(\n {\n id: 'claude-opus-4-7',\n name: 'Claude Opus 4.7',\n provider: 'claude-code',\n description: 'Most capable, 1M context, adaptive reasoning',\n reasoning: { efforts: opusEfforts, defaultEffort: pickDefault('high', opusEfforts) },\n supportsFastMode: true,\n },\n {\n id: 'claude-sonnet-4-6',\n name: 'Claude Sonnet 4.6',\n provider: 'claude-code',\n description: 'Fast and balanced',\n reasoning: { efforts: sonnetEfforts, defaultEffort: pickDefault('medium', sonnetEfforts) },\n },\n {\n id: 'claude-haiku-4-5-20251001',\n name: 'Claude Haiku 4.5',\n provider: 'claude-code',\n description: 'Fastest responses',\n }\n );\n } catch (err) {\n /**\n * `which` returns exit code 1 when `claude` is genuinely not in PATH;\n * any other failure (timeout, kill, ENOENT/EAGAIN/EMFILE) means the\n * subprocess execution itself failed and the absence of `claude` is\n * not authoritative — preserve the lastKnown model list rather than\n * collapsing to []. See `agents.ts` `isAuthoritativeNotFound` for the\n * shape we'd ideally narrow on; for `detectModels` the model list is\n * static (advertised unconditionally once `claude` is found) so the\n * cheaper guard here is \"any error → preserve lastKnown if we have it\".\n */\n if (lastKnown && lastKnown.length > 0) {\n logger.warn(\n { err, lastKnownCount: lastKnown.length },\n 'detectModels failed transiently — preserving lastKnown'\n );\n return lastKnown;\n }\n logger.debug({ err }, 'Claude Code CLI not found or detection failed');\n }\n\n return models;\n}\n","import type { CICheck, PRComment, PRData, PRReviewer, PRState } from '@shipyard/loro-schema';\nimport { z } from 'zod';\nimport { BUFFER_OVERFLOW_MSG, isMaxBufferError, runWithTimeout, truncateDiff } from './shell.js';\n\nconst GH_PR_JSON_FIELDS =\n 'number,title,state,author,url,baseRefName,headRefName,headRefOid,body,isDraft,additions,deletions,changedFiles,createdAt,updatedAt,mergedAt,mergeCommit,mergeStateStatus,autoMergeRequest,statusCheckRollup,reviews,reviewRequests,comments,labels,assignees,reviewDecision,mergeable';\n\nconst GH_STATE_MAP: Record<string, PRState> = {\n OPEN: 'open',\n CLOSED: 'closed',\n MERGED: 'merged',\n};\n\nconst GhPRResponseSchema = z\n .object({\n number: z.number().optional(),\n title: z.string().optional(),\n state: z.string().optional(),\n author: z.object({ login: z.string() }).passthrough().optional(),\n url: z.string().optional(),\n baseRefName: z.string().optional(),\n headRefName: z.string().optional(),\n body: z.string().optional(),\n isDraft: z.boolean().optional(),\n additions: z.number().optional(),\n deletions: z.number().optional(),\n changedFiles: z.number().optional(),\n createdAt: z.string().optional(),\n updatedAt: z.string().optional(),\n statusCheckRollup: z.array(z.record(z.string(), z.unknown())).optional(),\n reviews: z\n .union([\n z.array(z.record(z.string(), z.unknown())),\n z.object({ nodes: z.array(z.record(z.string(), z.unknown())) }).passthrough(),\n ])\n .optional(),\n comments: z\n .union([\n z.array(z.record(z.string(), z.unknown())),\n z.object({ nodes: z.array(z.record(z.string(), z.unknown())) }).passthrough(),\n ])\n .optional(),\n })\n .passthrough();\n\nconst GhPRListResponseSchema = z.array(GhPRResponseSchema);\n\nexport function parseTimestamp(value: unknown): number | null {\n if (typeof value === 'string') {\n if (value.startsWith('0001-')) return null;\n const parsed = new Date(value).getTime();\n if (!Number.isNaN(parsed)) return parsed;\n }\n if (typeof value === 'number') return value;\n return null;\n}\n\n// eslint-disable-next-line no-restricted-syntax -- gh CLI output needs runtime field access\nfunction field(obj: unknown, key: string): unknown {\n if (typeof obj === 'object' && obj !== null && key in obj) {\n return (obj as never)[key];\n }\n return undefined;\n}\n\n/** Narrow unknown to Record<string, unknown>, defaulting to empty object */\nfunction toRecord(value: unknown): Record<string, unknown> {\n if (typeof value === 'object' && value !== null) return value as never;\n return {};\n}\n\nfunction extractOid(value: unknown): string | null {\n if (typeof value === 'object' && value !== null && 'oid' in value) {\n const rec = toRecord(value);\n return typeof rec.oid === 'string' ? rec.oid : null;\n }\n return null;\n}\n\nfunction extractLogin(obj: unknown): string {\n const login = field(obj, 'login');\n return typeof login === 'string' ? login : '';\n}\n\nfunction extractStringField(obj: unknown, f: string): string | null {\n const val = field(obj, f);\n return typeof val === 'string' ? val : null;\n}\n\nfunction extractArrayOrNodes(value: unknown): unknown[] {\n if (Array.isArray(value)) return value;\n const nodes = field(value, 'nodes');\n if (Array.isArray(nodes)) return nodes;\n return [];\n}\n\nfunction mapCheckStatus(check: Record<string, unknown>): CICheck['status'] {\n const state = typeof check.state === 'string' ? check.state.toLowerCase() : '';\n const conclusion = typeof check.conclusion === 'string' ? check.conclusion.toLowerCase() : '';\n\n if (conclusion === 'success') return 'success';\n if (conclusion === 'failure' || conclusion === 'timed_out' || conclusion === 'action_required')\n return 'failure';\n if (conclusion === 'neutral') return 'neutral';\n if (conclusion === 'skipped') return 'skipped';\n if (conclusion === 'cancelled') return 'cancelled';\n\n if (state === 'success') return 'success';\n if (state === 'failure' || state === 'error') return 'failure';\n if (state === 'pending' || state === 'queued' || state === 'in_progress') return 'pending';\n\n return 'pending';\n}\n\nfunction mapReviewState(value: unknown): PRReviewer['state'] {\n if (typeof value !== 'string') return 'pending';\n const upper = value.toUpperCase();\n if (upper === 'APPROVED') return 'approved';\n if (upper === 'CHANGES_REQUESTED') return 'changes_requested';\n if (upper === 'COMMENTED') return 'commented';\n if (upper === 'DISMISSED') return 'dismissed';\n return 'pending';\n}\n\n// eslint-disable-next-line no-restricted-syntax -- gh CLI output items are untyped\nfunction mapGhCheck(c: Record<string, unknown>): CICheck {\n const name = typeof c.name === 'string' ? c.name : typeof c.context === 'string' ? c.context : '';\n const url =\n typeof c.targetUrl === 'string'\n ? c.targetUrl\n : typeof c.detailsUrl === 'string'\n ? c.detailsUrl\n : null;\n return {\n name,\n status: mapCheckStatus(c),\n conclusion: typeof c.conclusion === 'string' ? c.conclusion.toLowerCase() : null,\n url,\n startedAt: parseTimestamp(c.startedAt),\n completedAt: parseTimestamp(c.completedAt),\n };\n}\n\n// eslint-disable-next-line no-restricted-syntax -- gh CLI output items are untyped\nfunction mapGhReviewer(r: Record<string, unknown>): PRReviewer {\n return {\n login: extractLogin(r.author),\n state: mapReviewState(r.state),\n avatarUrl: extractStringField(r.author, 'avatarUrl'),\n submittedAt: parseTimestamp(r.submittedAt),\n };\n}\n\n/**\n * Legacy mapper for embedded `gh pr view --json comments` output. The\n * embedded payload drops anchoring fields (commit_id, in_reply_to_id,\n * etc.) so the new fields default to null/false. Use `getPRReviewComments`\n * for fully-anchored review-comment ingest; this mapper exists only for\n * the existing `mapGhPRToPRData` path which builds the PR-panel summary.\n */\n// eslint-disable-next-line no-restricted-syntax -- gh CLI output items are untyped\nfunction mapGhComment(c: Record<string, unknown>): PRComment {\n const author = extractLogin(c.author);\n return {\n id: typeof c.id === 'string' ? c.id : String(c.id ?? ''),\n author,\n body: typeof c.body === 'string' ? c.body : '',\n createdAt: parseTimestamp(c.createdAt) ?? 0,\n updatedAt: typeof c.updatedAt === 'string' ? parseTimestamp(c.updatedAt) : null,\n path: typeof c.path === 'string' ? c.path : null,\n line: typeof c.line === 'number' ? c.line : null,\n side: typeof c.side === 'string' ? c.side : null,\n isReviewComment: c.pullRequestReview !== undefined && c.pullRequestReview !== null,\n commitId: null,\n diffHunk: null,\n inReplyToId: null,\n pullRequestReviewId: null,\n threadId: null,\n htmlUrl: null,\n isResolved: false,\n isOutdated: false,\n startLine: null,\n startSide: null,\n authorIsBot: detectAuthorIsBot(author),\n };\n}\n\nfunction checkPriority(status: CICheck['status']): number {\n if (status === 'pending') return 2;\n if (status === 'cancelled') return 0;\n return 1;\n}\n\nfunction deduplicateChecks(allChecks: CICheck[]): CICheck[] {\n const byName = new Map<string, CICheck>();\n for (const check of allChecks) {\n const existing = byName.get(check.name);\n if (!existing) {\n byName.set(check.name, check);\n continue;\n }\n const ep = checkPriority(existing.status);\n const np = checkPriority(check.status);\n if (np > ep || (np === ep && (check.startedAt ?? 0) > (existing.startedAt ?? 0))) {\n byName.set(check.name, check);\n }\n }\n return Array.from(byName.values());\n}\n\nfunction extractScalarFields(raw: Record<string, unknown>) {\n return {\n number: typeof raw.number === 'number' ? raw.number : 0,\n title: typeof raw.title === 'string' ? raw.title : '',\n author: extractLogin(raw.author),\n url: typeof raw.url === 'string' ? raw.url : '',\n baseRef: typeof raw.baseRefName === 'string' ? raw.baseRefName : '',\n headRef: typeof raw.headRefName === 'string' ? raw.headRefName : '',\n body: typeof raw.body === 'string' ? raw.body : '',\n additions: typeof raw.additions === 'number' ? raw.additions : 0,\n deletions: typeof raw.deletions === 'number' ? raw.deletions : 0,\n changedFiles: typeof raw.changedFiles === 'number' ? raw.changedFiles : 0,\n createdAt: parseTimestamp(raw.createdAt) ?? 0,\n updatedAt: parseTimestamp(raw.updatedAt) ?? 0,\n mergedAt: parseTimestamp(raw.mergedAt),\n mergeCommitSha: extractOid(raw.mergeCommit),\n mergeStateStatus: extractStringField(raw, 'mergeStateStatus'),\n autoMergeEnabled: raw.autoMergeRequest != null,\n headRefSha: typeof raw.headRefOid === 'string' ? raw.headRefOid : null,\n headCommitInBase: false,\n };\n}\n\n// eslint-disable-next-line no-restricted-syntax -- gh CLI output is untyped JSON\nexport function mapGhPRToPRData(raw: Record<string, unknown>): PRData {\n const isDraft = raw.isDraft === true;\n const ghState = typeof raw.state === 'string' ? raw.state.toUpperCase() : '';\n const state: PRState = isDraft ? 'draft' : (GH_STATE_MAP[ghState] ?? 'open');\n\n const rawChecks = Array.isArray(raw.statusCheckRollup) ? raw.statusCheckRollup : [];\n const checks = deduplicateChecks(rawChecks.map(mapGhCheck));\n const reviewers: PRReviewer[] = extractArrayOrNodes(raw.reviews).map((r) =>\n mapGhReviewer(toRecord(r))\n );\n const comments: PRComment[] = extractArrayOrNodes(raw.comments).map((c) =>\n mapGhComment(toRecord(c))\n );\n\n const labels = extractArrayOrNodes(raw.labels).map((l) => {\n const rec = toRecord(l);\n return {\n name: typeof rec.name === 'string' ? rec.name : '',\n color: typeof rec.color === 'string' && rec.color !== '' ? `#${rec.color}` : '',\n };\n });\n const assignees = extractArrayOrNodes(raw.assignees).map((a) => {\n const rec = toRecord(a);\n return {\n login: extractLogin(rec),\n avatarUrl: extractStringField(rec, 'avatarUrl'),\n };\n });\n const reviewDecision = typeof raw.reviewDecision === 'string' ? raw.reviewDecision : null;\n const mergeable = typeof raw.mergeable === 'string' ? raw.mergeable : null;\n\n return {\n ...extractScalarFields(raw),\n state,\n isDraft,\n checks,\n reviewers,\n comments,\n labels,\n assignees,\n reviewDecision,\n mergeable,\n };\n}\n\nexport async function getPRForCurrentBranch(cwd: string): Promise<PRData | null> {\n try {\n const stdout = await runWithTimeout(\n 'gh',\n ['pr', 'view', '--json', GH_PR_JSON_FIELDS],\n cwd,\n 15_000\n );\n const parseResult = GhPRResponseSchema.safeParse(JSON.parse(stdout));\n if (!parseResult.success) {\n return null;\n }\n return mapGhPRToPRData(parseResult.data);\n } catch {\n return null;\n }\n}\n\nexport async function getPRDiff(cwd: string, prNumber: number): Promise<string> {\n try {\n const result = await runWithTimeout(\n 'gh',\n ['pr', 'diff', String(prNumber), '--color=never'],\n cwd,\n 15_000\n );\n return truncateDiff(result);\n } catch (err: unknown) {\n if (isMaxBufferError(err)) return BUFFER_OVERFLOW_MSG;\n return '';\n }\n}\n\nexport async function getPRFiles(\n cwd: string,\n prNumber: number\n): Promise<Array<{ path: string; status: string }>> {\n try {\n const stdout = await runWithTimeout(\n 'gh',\n ['pr', 'view', String(prNumber), '--json', 'files'],\n cwd,\n 15_000\n );\n // eslint-disable-next-line no-restricted-syntax -- gh CLI output is untyped JSON\n const parsed = JSON.parse(stdout) as {\n files?: Array<{ path?: string; additions?: number; deletions?: number }>;\n };\n if (!Array.isArray(parsed.files)) return [];\n return parsed.files.map((f) => ({\n path: typeof f.path === 'string' ? f.path : '',\n status: f.additions !== undefined || f.deletions !== undefined ? 'M' : 'U',\n }));\n } catch {\n return [];\n }\n}\n\nexport async function getAssignedReviews(cwd: string): Promise<PRData[]> {\n try {\n const stdout = await runWithTimeout(\n 'gh',\n [\n 'pr',\n 'list',\n '--search',\n 'is:open review-requested:@me',\n '--json',\n GH_PR_JSON_FIELDS,\n '--limit',\n '10',\n ],\n cwd,\n 15_000\n );\n const parseResult = GhPRListResponseSchema.safeParse(JSON.parse(stdout));\n if (!parseResult.success) return [];\n return parseResult.data.map(mapGhPRToPRData);\n } catch {\n return [];\n }\n}\n\nfunction prRankScore(pr: PRData): number {\n if (pr.state === 'open' || pr.state === 'draft') return 3;\n if (pr.state === 'merged') return 2;\n if (pr.state === 'closed') return 1;\n return 0;\n}\n\nexport async function getPRByBranch(cwd: string, branch: string): Promise<PRData | null> {\n try {\n const stdout = await runWithTimeout(\n 'gh',\n [\n 'pr',\n 'list',\n '--head',\n branch,\n '--state',\n 'all',\n '--limit',\n '5',\n '--json',\n GH_PR_JSON_FIELDS,\n ],\n cwd,\n 15_000\n );\n const parseResult = GhPRListResponseSchema.safeParse(JSON.parse(stdout));\n if (!parseResult.success) return null;\n const prs = parseResult.data.map(mapGhPRToPRData);\n if (prs.length === 0) return null;\n prs.sort((a, b) => {\n const rankDiff = prRankScore(b) - prRankScore(a);\n if (rankDiff !== 0) return rankDiff;\n return b.updatedAt - a.updatedAt;\n });\n return prs[0] ?? null;\n } catch {\n return null;\n }\n}\n\nexport async function getUserPRs(cwd: string): Promise<PRData[]> {\n try {\n const stdout = await runWithTimeout(\n 'gh',\n [\n 'pr',\n 'list',\n '--author',\n '@me',\n '--state',\n 'open',\n '--json',\n GH_PR_JSON_FIELDS,\n '--limit',\n '10',\n ],\n cwd,\n 15_000\n );\n const parseResult = GhPRListResponseSchema.safeParse(JSON.parse(stdout));\n if (!parseResult.success) return [];\n return parseResult.data.map(mapGhPRToPRData);\n } catch {\n return [];\n }\n}\n\nexport function deduplicatePRs(\n currentPR: PromiseSettledResult<PRData | null>,\n assignedReviews: PromiseSettledResult<PRData[]>,\n userPRs: PromiseSettledResult<PRData[]>\n): { allPRs: PRData[]; currentBranchPR: PRData | null } {\n const allPRs: PRData[] = [];\n const seen = new Set<number>();\n const currentBranchPR = currentPR.status === 'fulfilled' ? currentPR.value : null;\n if (currentBranchPR) {\n allPRs.push(currentBranchPR);\n seen.add(currentBranchPR.number);\n }\n for (const pr of assignedReviews.status === 'fulfilled' ? assignedReviews.value : []) {\n if (!seen.has(pr.number)) {\n allPRs.push(pr);\n seen.add(pr.number);\n }\n }\n for (const pr of userPRs.status === 'fulfilled' ? userPRs.value : []) {\n if (!seen.has(pr.number)) {\n allPRs.push(pr);\n seen.add(pr.number);\n }\n }\n return { allPRs, currentBranchPR };\n}\n\nexport async function approvePR(cwd: string, prNumber: number, body?: string): Promise<void> {\n const args = ['pr', 'review', String(prNumber), '--approve'];\n if (body) args.push('-b', body);\n await runWithTimeout('gh', args, cwd, 15_000);\n}\n\nexport async function mergePR(\n cwd: string,\n prNumber: number,\n strategy: 'squash' | 'merge' | 'rebase'\n): Promise<void> {\n const strategyFlag = `--${strategy}`;\n await runWithTimeout(\n 'gh',\n ['pr', 'merge', String(prNumber), strategyFlag, '--auto'],\n cwd,\n 30_000\n );\n}\n\nexport async function closePR(cwd: string, prNumber: number): Promise<void> {\n await runWithTimeout('gh', ['pr', 'close', String(prNumber)], cwd, 15_000);\n}\n\nexport async function reopenPR(cwd: string, prNumber: number): Promise<void> {\n await runWithTimeout('gh', ['pr', 'reopen', String(prNumber)], cwd, 15_000);\n}\n\nexport async function commentOnPR(cwd: string, prNumber: number, body: string): Promise<void> {\n await runWithTimeout('gh', ['pr', 'comment', String(prNumber), '-b', body], cwd, 15_000);\n}\n\nexport async function requestChanges(cwd: string, prNumber: number, body: string): Promise<void> {\n await runWithTimeout(\n 'gh',\n ['pr', 'review', String(prNumber), '--request-changes', '-b', body],\n cwd,\n 15_000\n );\n}\n\nexport async function addReviewers(\n cwd: string,\n prNumber: number,\n reviewers: string[]\n): Promise<void> {\n await runWithTimeout(\n 'gh',\n ['pr', 'edit', String(prNumber), '--add-reviewer', reviewers.join(',')],\n cwd,\n 15_000\n );\n}\n\n/**\n * Returns the set of labels that currently exist on the repo at cwd. Used to\n * filter label-add calls so we do not fail when a label is missing on the\n * target repo. Returns an empty set on any gh error (caller skips cleanly).\n */\nexport async function listRepoLabels(cwd: string): Promise<Set<string>> {\n try {\n const stdout = await runWithTimeout(\n 'gh',\n ['label', 'list', '--limit', '200', '--json', 'name'],\n cwd,\n 15_000\n );\n const parsed = z.array(z.object({ name: z.string() })).safeParse(JSON.parse(stdout));\n if (!parsed.success) return new Set();\n return new Set(parsed.data.map((l) => l.name));\n } catch {\n return new Set();\n }\n}\n\nexport async function addLabels(cwd: string, prNumber: number, labels: string[]): Promise<void> {\n if (labels.length === 0) return;\n const existing = await listRepoLabels(cwd);\n const toAdd = existing.size === 0 ? [] : labels.filter((l) => existing.has(l));\n if (toAdd.length === 0) return;\n await runWithTimeout(\n 'gh',\n ['pr', 'edit', String(prNumber), '--add-label', toAdd.join(',')],\n cwd,\n 15_000\n );\n}\n\n/**\n * Per-cwd label-ensure cache. Prevents re-invoking `gh label list` / `gh label\n * create` on every PR-attribution event within the daemon's lifetime.\n *\n * `failedLabels` stores a timestamp so a transient `gh` failure (network,\n * rate limit) does not permanently block the label for the daemon's lifetime.\n * After FAILED_LABEL_TTL_MS the entry is treated as absent and ensureLabel\n * retries the create.\n */\nconst FAILED_LABEL_TTL_MS = 10 * 60_000;\nconst ensuredLabels = new Set<string>();\nconst failedLabels = new Map<string, number>();\n\n/**\n * Guarantee that a label exists on the repo at `cwd`. Returns true if the\n * label exists (either already present or freshly created) and false if the\n * label could not be created. Caches both outcomes for the lifetime of the\n * daemon so PR attribution does not hammer `gh` on every event.\n */\nexport async function ensureLabel(\n cwd: string,\n name: string,\n color = '1f2937',\n description = 'Created by Shipyard'\n): Promise<boolean> {\n const cacheKey = `${cwd}:${name}`;\n if (ensuredLabels.has(cacheKey)) return true;\n const failedAt = failedLabels.get(cacheKey);\n if (failedAt !== undefined) {\n if (Date.now() - failedAt <= FAILED_LABEL_TTL_MS) return false;\n failedLabels.delete(cacheKey);\n }\n\n const existing = await listRepoLabels(cwd);\n if (existing.has(name)) {\n ensuredLabels.add(cacheKey);\n return true;\n }\n\n try {\n await runWithTimeout(\n 'gh',\n ['label', 'create', name, '--color', color, '--description', description],\n cwd,\n 15_000\n );\n ensuredLabels.add(cacheKey);\n return true;\n } catch {\n failedLabels.set(cacheKey, Date.now());\n return false;\n }\n}\n\nexport async function removeLabels(cwd: string, prNumber: number, labels: string[]): Promise<void> {\n await runWithTimeout(\n 'gh',\n ['pr', 'edit', String(prNumber), '--remove-label', labels.join(',')],\n cwd,\n 15_000\n );\n}\n\nexport async function addAssignees(\n cwd: string,\n prNumber: number,\n assignees: string[]\n): Promise<void> {\n await runWithTimeout(\n 'gh',\n ['pr', 'edit', String(prNumber), '--add-assignee', assignees.join(',')],\n cwd,\n 15_000\n );\n}\n\nexport async function removeAssignees(\n cwd: string,\n prNumber: number,\n assignees: string[]\n): Promise<void> {\n await runWithTimeout(\n 'gh',\n ['pr', 'edit', String(prNumber), '--remove-assignee', assignees.join(',')],\n cwd,\n 15_000\n );\n}\n\nexport async function markPRReady(cwd: string, prNumber: number): Promise<void> {\n await runWithTimeout('gh', ['pr', 'ready', String(prNumber)], cwd, 15_000);\n}\n\nexport async function convertToDraft(cwd: string, prNumber: number): Promise<void> {\n await runWithTimeout('gh', ['pr', 'ready', String(prNumber), '--undo'], cwd, 15_000);\n}\n\nexport function buildShipyardBodyMarker(taskId: string): string {\n return `<!-- shipyard: task=${taskId} -->`;\n}\n\n/**\n * Append a Shipyard marker comment to the PR body if not already present. Idempotent —\n * if the marker already exists (by substring match on `shipyard: task=`), does nothing.\n */\nexport async function appendShipyardBodyMarker(\n cwd: string,\n prNumber: number,\n taskId: string\n): Promise<void> {\n const bodyJson = await runWithTimeout(\n 'gh',\n ['pr', 'view', String(prNumber), '--json', 'body'],\n cwd,\n 15_000\n );\n let currentBody = '';\n try {\n // eslint-disable-next-line no-restricted-syntax -- gh CLI output is untyped JSON\n const parsed = JSON.parse(bodyJson) as { body?: string };\n currentBody = typeof parsed.body === 'string' ? parsed.body : '';\n } catch {\n currentBody = '';\n }\n if (currentBody.includes('shipyard: task=')) return;\n const marker = buildShipyardBodyMarker(taskId);\n const separator = currentBody.endsWith('\\n') || currentBody.length === 0 ? '' : '\\n\\n';\n const nextBody = `${currentBody}${separator}${marker}\\n`;\n await runWithTimeout('gh', ['pr', 'edit', String(prNumber), '--body', nextBody], cwd, 15_000);\n}\n\n/**\n * Resolve the owner/repo for the current cwd via `gh repo view`. Used by\n * the review-comment helpers below since GitHub's REST endpoints require\n * an explicit owner/repo path even when run inside a clone.\n */\nasync function resolveOwnerRepo(cwd: string): Promise<{ owner: string; repo: string } | null> {\n try {\n const stdout = await runWithTimeout(\n 'gh',\n ['repo', 'view', '--json', 'owner,name'],\n cwd,\n 15_000\n );\n const parsed = z\n .object({ owner: z.object({ login: z.string() }), name: z.string() })\n .safeParse(JSON.parse(stdout));\n if (!parsed.success) return null;\n return { owner: parsed.data.owner.login, repo: parsed.data.name };\n } catch {\n return null;\n }\n}\n\n/**\n * Detect bot-suffixed login (e.g. `github-actions[bot]`).\n */\nfunction detectAuthorIsBot(login: string): boolean {\n return login.endsWith('[bot]');\n}\n\nconst RestReviewCommentSchema = z\n .object({\n id: z.union([z.number(), z.string()]),\n user: z.object({ login: z.string() }).passthrough().nullable().optional(),\n body: z.string().optional(),\n created_at: z.string().optional(),\n updated_at: z.string().optional().nullable(),\n path: z.string().optional().nullable(),\n line: z.number().nullable().optional(),\n original_line: z.number().nullable().optional(),\n side: z.string().nullable().optional(),\n start_line: z.number().nullable().optional(),\n start_side: z.string().nullable().optional(),\n commit_id: z.string().nullable().optional(),\n original_commit_id: z.string().nullable().optional(),\n in_reply_to_id: z.union([z.number(), z.string()]).nullable().optional(),\n pull_request_review_id: z.union([z.number(), z.string()]).nullable().optional(),\n diff_hunk: z.string().nullable().optional(),\n html_url: z.string().nullable().optional(),\n })\n .passthrough();\n\ntype RestReviewComment = z.infer<typeof RestReviewCommentSchema>;\n\nconst GraphqlThreadsResponseSchema = z\n .object({\n data: z\n .object({\n repository: z\n .object({\n pullRequest: z\n .object({\n reviewThreads: z.object({\n nodes: z.array(\n z.object({\n id: z.string(),\n isResolved: z.boolean().optional().default(false),\n isOutdated: z.boolean().optional().default(false),\n comments: z.object({\n nodes: z.array(\n z.object({ databaseId: z.union([z.number(), z.string()]).nullable() })\n ),\n }),\n })\n ),\n }),\n })\n .nullable(),\n })\n .nullable(),\n })\n .nullable(),\n })\n .passthrough();\n\ninterface ThreadInfo {\n threadId: string;\n isResolved: boolean;\n isOutdated: boolean;\n}\n\n/**\n * Build the databaseId -> ThreadInfo map from a `pullRequestReviewThreads`\n * GraphQL response. Each comment's databaseId points to the same thread.\n */\nfunction buildThreadMap(\n parsed: z.infer<typeof GraphqlThreadsResponseSchema>\n): Map<string, ThreadInfo> {\n const map = new Map<string, ThreadInfo>();\n const threads = parsed.data?.repository?.pullRequest?.reviewThreads.nodes ?? [];\n for (const thread of threads) {\n const info: ThreadInfo = {\n threadId: thread.id,\n isResolved: thread.isResolved,\n isOutdated: thread.isOutdated,\n };\n for (const c of thread.comments.nodes) {\n if (c.databaseId === null || c.databaseId === undefined) continue;\n map.set(String(c.databaseId), info);\n }\n }\n return map;\n}\n\nasync function fetchReviewThreadMap(\n cwd: string,\n owner: string,\n repo: string,\n prNumber: number\n): Promise<Map<string, ThreadInfo>> {\n const query = `query($owner: String!, $repo: String!, $pr: Int!) {\n repository(owner: $owner, name: $repo) {\n pullRequest(number: $pr) {\n reviewThreads(first: 100) {\n nodes {\n id\n isResolved\n isOutdated\n comments(first: 100) {\n nodes { databaseId }\n }\n }\n }\n }\n }\n }`;\n try {\n const stdout = await runWithTimeout(\n 'gh',\n [\n 'api',\n 'graphql',\n '-f',\n `query=${query}`,\n '-F',\n `owner=${owner}`,\n '-F',\n `repo=${repo}`,\n '-F',\n `pr=${prNumber}`,\n ],\n cwd,\n 15_000\n );\n const parsed = GraphqlThreadsResponseSchema.safeParse(JSON.parse(stdout));\n if (!parsed.success) return new Map();\n return buildThreadMap(parsed.data);\n } catch {\n return new Map();\n }\n}\n\n/** Coerce GitHub's number|string id into a stable string, or null. */\nfunction coerceIdString(value: number | string | null | undefined): string | null {\n if (value === null || value === undefined) return null;\n return String(value);\n}\n\n/** Build the anchor-related slice (commit, line, side) of the PRComment. */\nfunction extractAnchorFields(raw: RestReviewComment): {\n path: string | null;\n line: number | null;\n side: string | null;\n commitId: string | null;\n startLine: number | null;\n startSide: string | null;\n} {\n return {\n path: raw.path ?? null,\n line: raw.line ?? raw.original_line ?? null,\n side: raw.side ?? null,\n commitId: raw.commit_id ?? raw.original_commit_id ?? null,\n startLine: raw.start_line ?? null,\n startSide: raw.start_side ?? null,\n };\n}\n\nfunction mapReviewCommentToPRComment(\n raw: RestReviewComment,\n threadInfo: ThreadInfo | undefined\n): PRComment {\n const author = raw.user?.login ?? '';\n const anchor = extractAnchorFields(raw);\n return {\n id: String(raw.id),\n author,\n body: raw.body ?? '',\n createdAt: raw.created_at ? (parseTimestamp(raw.created_at) ?? 0) : 0,\n updatedAt: raw.updated_at ? parseTimestamp(raw.updated_at) : null,\n isReviewComment: true,\n diffHunk: raw.diff_hunk ?? null,\n inReplyToId: coerceIdString(raw.in_reply_to_id),\n pullRequestReviewId: coerceIdString(raw.pull_request_review_id),\n threadId: threadInfo?.threadId ?? null,\n htmlUrl: raw.html_url ?? null,\n isResolved: threadInfo?.isResolved ?? false,\n isOutdated: threadInfo?.isOutdated ?? false,\n authorIsBot: detectAuthorIsBot(author),\n ...anchor,\n };\n}\n\n/**\n * Fetch all review comments for a PR with full anchoring fields (commit_id,\n * line, in_reply_to_id, etc.) plus thread state (isResolved, isOutdated)\n * keyed by GraphQL thread id.\n *\n * Combines `gh api /repos/{owner}/{repo}/pulls/{n}/comments` (REST, gives\n * commit_id, position, in_reply_to_id, etc.) with a GraphQL query for\n * `pullRequestReviewThreads { id, isResolved, isOutdated, comments { databaseId } }`\n * to enrich each REST comment with thread metadata.\n *\n * Returns an empty array on any gh error so the caller can degrade\n * gracefully (e.g. unauthenticated, repo without PR, network blip).\n */\nexport async function getPRReviewComments(cwd: string, prNumber: number): Promise<PRComment[]> {\n const ownerRepo = await resolveOwnerRepo(cwd);\n if (!ownerRepo) return [];\n const { owner, repo } = ownerRepo;\n\n let restRaw: unknown;\n try {\n const stdout = await runWithTimeout(\n 'gh',\n ['api', '--paginate', `/repos/${owner}/${repo}/pulls/${prNumber}/comments?per_page=100`],\n cwd,\n 30_000\n );\n /**\n * `gh api --paginate` concatenates JSON arrays from successive pages\n * with no separator (e.g. `[...][...]`). Wrap in brackets and replace\n * `][` to merge into a single array. With per_page=100 most PRs fit\n * in one page so the single-page case is the common path.\n */\n const merged = stdout.replace(/\\]\\s*\\[/g, ',');\n restRaw = JSON.parse(merged);\n } catch {\n return [];\n }\n\n const restParsed = z.array(RestReviewCommentSchema).safeParse(restRaw);\n if (!restParsed.success) return [];\n\n const threadMap = await fetchReviewThreadMap(cwd, owner, repo, prNumber);\n return restParsed.data.map((raw) =>\n mapReviewCommentToPRComment(raw, threadMap.get(String(raw.id)))\n );\n}\n\nconst ReplyResponseSchema = z\n .object({\n id: z.union([z.number(), z.string()]),\n html_url: z.string().nullable().optional(),\n created_at: z.string().optional(),\n })\n .passthrough();\n\n/**\n * Post a reply to an existing review comment thread on a PR.\n *\n * `parentCommentId` is the GitHub numeric comment id (NOT the local\n * Shipyard commentId). Callers should look up `parent.external.commentId`\n * before invoking.\n *\n * Throws on gh error so the caller can surface the failure (e.g. via\n * `pr_action_result` with `success: false`).\n */\nexport async function replyToReviewComment(\n cwd: string,\n prNumber: number,\n parentCommentId: string,\n body: string\n): Promise<{ id: string; htmlUrl: string; createdAt: number }> {\n const ownerRepo = await resolveOwnerRepo(cwd);\n if (!ownerRepo) throw new Error('replyToReviewComment: failed to resolve owner/repo');\n const { owner, repo } = ownerRepo;\n const stdout = await runWithTimeout(\n 'gh',\n [\n 'api',\n '-X',\n 'POST',\n `/repos/${owner}/${repo}/pulls/${prNumber}/comments/${parentCommentId}/replies`,\n '-f',\n `body=${body}`,\n ],\n cwd,\n 30_000\n );\n const parsed = ReplyResponseSchema.safeParse(JSON.parse(stdout));\n if (!parsed.success) throw new Error('replyToReviewComment: unexpected gh response shape');\n return {\n id: String(parsed.data.id),\n htmlUrl: parsed.data.html_url ?? '',\n createdAt: parsed.data.created_at\n ? (parseTimestamp(parsed.data.created_at) ?? Date.now())\n : Date.now(),\n };\n}\n\n/**\n * Resolve a PR review thread via GraphQL. `threadId` is the GraphQL node id\n * (PullRequestReviewThread), NOT a comment id. Throws on gh error.\n */\nexport async function resolveReviewThread(cwd: string, threadId: string): Promise<void> {\n const mutation = `mutation($threadId: ID!) {\n resolveReviewThread(input: { threadId: $threadId }) {\n thread { isResolved }\n }\n }`;\n await runWithTimeout(\n 'gh',\n ['api', 'graphql', '-f', `query=${mutation}`, '-f', `threadId=${threadId}`],\n cwd,\n 15_000\n );\n}\n\n/**\n * Unresolve a previously resolved PR review thread. Mirror of resolveReviewThread.\n */\nexport async function unresolveReviewThread(cwd: string, threadId: string): Promise<void> {\n const mutation = `mutation($threadId: ID!) {\n unresolveReviewThread(input: { threadId: $threadId }) {\n thread { isResolved }\n }\n }`;\n await runWithTimeout(\n 'gh',\n ['api', 'graphql', '-f', `query=${mutation}`, '-f', `threadId=${threadId}`],\n cwd,\n 15_000\n );\n}\n\nexport const _testing = {\n checkPriority,\n deduplicateChecks,\n parseTimestamp,\n mapCheckStatus,\n buildThreadMap,\n mapReviewCommentToPRComment,\n detectAuthorIsBot,\n resetLabelCache(): void {\n ensuredLabels.clear();\n failedLabels.clear();\n },\n};\n","import {\n DEPLOYMENT_STATES,\n type EnvironmentDeployment,\n WORKFLOW_RUN_CONCLUSIONS,\n WORKFLOW_RUN_STATUSES,\n type WorkflowRun,\n} from '@shipyard/loro-schema';\nimport { z } from 'zod';\nimport { parseTimestamp } from './git-pr.js';\nimport { isAncestor } from './git-repo.js';\nimport { runWithTimeout } from './shell.js';\n\nconst DEPLOYMENT_STATE_SET: ReadonlySet<string> = new Set(DEPLOYMENT_STATES);\n\nfunction validateDeploymentState(raw: unknown): EnvironmentDeployment['state'] {\n if (typeof raw === 'string' && DEPLOYMENT_STATE_SET.has(raw)) {\n // eslint-disable-next-line no-restricted-syntax -- validated via Set lookup above\n return raw as EnvironmentDeployment['state'];\n }\n return 'pending';\n}\n\n// eslint-disable-next-line no-restricted-syntax -- gh API JSON output is untyped\nconst GhDeploymentSchema = z.object({\n id: z.number(),\n environment: z.string(),\n sha: z.string(),\n created_at: z.string(),\n});\n\n// eslint-disable-next-line no-restricted-syntax -- gh API JSON output is untyped\nconst GhDeploymentStatusSchema = z.object({\n state: z.string(),\n environment_url: z.string().nullable().optional(),\n log_url: z.string().nullable().optional(),\n created_at: z.string(),\n});\n\nexport async function getConfiguredEnvironments(\n owner: string,\n repo: string,\n cwd: string\n): Promise<string[]> {\n const json = await runWithTimeout(\n 'gh',\n ['api', `/repos/${owner}/${repo}/environments`],\n cwd,\n 15_000\n );\n const parsed = z\n .object({ environments: z.array(z.object({ name: z.string() }).passthrough()) })\n .safeParse(JSON.parse(json));\n if (!parsed.success) return [];\n return parsed.data.environments.map((e) => e.name);\n}\n\nexport async function getLatestDeployments(\n owner: string,\n repo: string,\n mergeCommitSha: string,\n cwd: string\n): Promise<EnvironmentDeployment[]> {\n const deploymentsJson = await runWithTimeout(\n 'gh',\n ['api', `/repos/${owner}/${repo}/deployments?per_page=30`],\n cwd,\n 15_000\n );\n\n const rawDeployments = z\n .array(GhDeploymentSchema.passthrough())\n .safeParse(JSON.parse(deploymentsJson));\n if (!rawDeployments.success) return [];\n\n /** Group by environment, keep latest (by created_at) per env */\n const latestByEnv = new Map<string, z.infer<typeof GhDeploymentSchema>>();\n for (const d of rawDeployments.data) {\n const existing = latestByEnv.get(d.environment);\n if (!existing || d.created_at > existing.created_at) {\n latestByEnv.set(d.environment, d);\n }\n }\n\n const envEntries = Array.from(latestByEnv.values()).slice(0, 10);\n\n await runWithTimeout('git', ['fetch', '--depth=100', 'origin'], cwd, 15_000).catch(() => {});\n\n const settled = await Promise.allSettled(\n envEntries.map(async (deployment) => {\n const statusJson = await runWithTimeout(\n 'gh',\n ['api', `/repos/${owner}/${repo}/deployments/${deployment.id}/statuses?per_page=1`],\n cwd,\n 15_000\n );\n const statusArr = z\n .array(GhDeploymentStatusSchema.passthrough())\n .safeParse(JSON.parse(statusJson));\n const latestStatus = statusArr.success ? statusArr.data[0] : undefined;\n\n const includesCommit = await isAncestor(mergeCommitSha, deployment.sha, cwd);\n\n return {\n environment: deployment.environment,\n state: validateDeploymentState(latestStatus?.state),\n environmentUrl: latestStatus?.environment_url ?? null,\n logUrl: latestStatus?.log_url ?? null,\n deployedAt: parseTimestamp(latestStatus?.created_at ?? deployment.created_at),\n sha: deployment.sha,\n includesCommit,\n } satisfies EnvironmentDeployment;\n })\n );\n\n return settled\n .filter((r): r is PromiseFulfilledResult<EnvironmentDeployment> => r.status === 'fulfilled')\n .map((r) => r.value)\n .filter((d) => d.state !== 'inactive');\n}\n\nconst WORKFLOW_STATUS_SET: ReadonlySet<string> = new Set(WORKFLOW_RUN_STATUSES);\nconst WORKFLOW_CONCLUSION_SET: ReadonlySet<string> = new Set(WORKFLOW_RUN_CONCLUSIONS);\n\nconst GhWorkflowRunSchema = z.object({\n name: z.string(),\n status: z.string(),\n conclusion: z.string().nullable(),\n html_url: z.string(),\n head_sha: z.string(),\n created_at: z.string(),\n event: z.string(),\n});\n\nexport async function getWorkflowRuns(\n owner: string,\n repo: string,\n branch: string,\n referenceCommit: string,\n cwd: string\n): Promise<WorkflowRun[]> {\n const runsJson = await runWithTimeout(\n 'gh',\n ['api', `/repos/${owner}/${repo}/actions/runs?event=push&branch=${branch}&per_page=20`],\n cwd,\n 15_000\n );\n\n const parsed = z\n .object({ workflow_runs: z.array(GhWorkflowRunSchema.passthrough()) })\n .safeParse(JSON.parse(runsJson));\n if (!parsed.success) return [];\n\n const latestByName = new Map<string, z.infer<typeof GhWorkflowRunSchema>>();\n for (const run of parsed.data.workflow_runs) {\n if (!latestByName.has(run.name)) {\n latestByName.set(run.name, run);\n }\n }\n\n const entries = Array.from(latestByName.values()).slice(0, 10);\n\n const settled = await Promise.allSettled(\n entries.map(async (run) => {\n const includesCommit = await isAncestor(referenceCommit, run.head_sha, cwd);\n const status = WORKFLOW_STATUS_SET.has(run.status) ? run.status : 'pending';\n const conclusion =\n run.conclusion && WORKFLOW_CONCLUSION_SET.has(run.conclusion) ? run.conclusion : null;\n\n return {\n name: run.name,\n // eslint-disable-next-line no-restricted-syntax -- validated via Set lookup above\n status: status as WorkflowRun['status'],\n // eslint-disable-next-line no-restricted-syntax -- validated via Set lookup above\n conclusion: conclusion as WorkflowRun['conclusion'],\n url: run.html_url,\n sha: run.head_sha,\n createdAt: parseTimestamp(run.created_at) ?? 0,\n includesCommit,\n } satisfies WorkflowRun;\n })\n );\n\n return settled\n .filter((r): r is PromiseFulfilledResult<WorkflowRun> => r.status === 'fulfilled')\n .map((r) => r.value);\n}\n\nexport async function getRequiredChecks(\n owner: string,\n repo: string,\n branch: string,\n cwd: string\n): Promise<string[]> {\n const json = await runWithTimeout(\n 'gh',\n ['api', `/repos/${owner}/${repo}/branches/${branch}/protection/required_status_checks`],\n cwd,\n 15_000\n );\n const parsed = z\n .object({ contexts: z.array(z.string()) })\n .passthrough()\n .safeParse(JSON.parse(json));\n if (!parsed.success) return [];\n return parsed.data.contexts;\n}\n\nexport async function rerunChecks(cwd: string, prNumber: number): Promise<void> {\n const output = await runWithTimeout(\n 'gh',\n [\n 'pr',\n 'checks',\n String(prNumber),\n '--json',\n 'name,state,link',\n '--jq',\n '.[] | .state + \"\\t\" + .link',\n ],\n cwd,\n 15_000\n );\n const lines = output.trim().split('\\n').filter(Boolean);\n const failedRunIds = new Set<string>();\n const inProgressRunIds = new Set<string>();\n for (const line of lines) {\n const [state, link] = line.split('\\t');\n const match = link?.match(/\\/actions\\/runs\\/(\\d+)/);\n if (!match?.[1]) continue;\n if (state === 'FAILURE') failedRunIds.add(match[1]);\n if (state === 'PENDING') inProgressRunIds.add(match[1]);\n }\n const toRerun = [...failedRunIds].filter((id) => !inProgressRunIds.has(id));\n if (toRerun.length === 0 && inProgressRunIds.size > 0) {\n throw new Error('Checks are already running');\n }\n if (toRerun.length === 0) throw new Error('No failed workflow runs to re-run');\n for (const runId of toRerun) {\n await runWithTimeout('gh', ['run', 'rerun', runId, '--failed'], cwd, 30_000);\n }\n}\n","import { isGitRepo } from './git-repo.js';\nimport {\n BUFFER_OVERFLOW_MSG,\n DIFF_TIMEOUT_MS,\n isMaxBufferError,\n runWithTimeout,\n TIMEOUT_MS,\n truncateDiff,\n} from './shell.js';\n\nasync function withIntentToAdd<T>(cwd: string, fn: () => Promise<T>): Promise<T> {\n let added = false;\n try {\n const untracked = await runWithTimeout(\n 'git',\n ['ls-files', '--others', '--exclude-standard'],\n cwd,\n TIMEOUT_MS\n );\n if (untracked) {\n await runWithTimeout('git', ['add', '-N', '.'], cwd, TIMEOUT_MS);\n added = true;\n }\n return await fn();\n } finally {\n if (added) {\n await runWithTimeout('git', ['reset'], cwd, TIMEOUT_MS).catch(() => {});\n }\n }\n}\n\nexport async function getUnstagedDiff(cwd: string): Promise<string> {\n if (!(await isGitRepo(cwd))) return '';\n try {\n const result = await withIntentToAdd(cwd, () =>\n runWithTimeout('git', ['diff', '-U99999', '--no-color'], cwd, DIFF_TIMEOUT_MS)\n );\n return truncateDiff(result);\n } catch (err: unknown) {\n if (isMaxBufferError(err)) return BUFFER_OVERFLOW_MSG;\n throw err;\n }\n}\n\nexport async function getStagedDiff(cwd: string): Promise<string> {\n if (!(await isGitRepo(cwd))) return '';\n try {\n const result = await runWithTimeout(\n 'git',\n ['diff', '--cached', '-U99999', '--no-color'],\n cwd,\n DIFF_TIMEOUT_MS\n );\n return truncateDiff(result);\n } catch (err: unknown) {\n if (isMaxBufferError(err)) return BUFFER_OVERFLOW_MSG;\n throw err;\n }\n}\n\nexport async function getChangedFiles(\n cwd: string\n): Promise<Array<{ path: string; status: string }>> {\n if (!(await isGitRepo(cwd))) return [];\n const out = await runWithTimeout('git', ['status', '--porcelain'], cwd, DIFF_TIMEOUT_MS);\n if (!out) return [];\n return out\n .split('\\n')\n .filter(Boolean)\n .map((line) => ({\n status: line.slice(0, 2).trim(),\n path: line.slice(3),\n }));\n}\n\n/**\n * Return the porcelain status for a single file, or `null` if the file is\n * clean (or the path is outside the repo). Used by `add_comment` to decide\n * whether a new diff comment should be authored against the working tree\n * or against the branch base.\n */\nexport async function getFileGitStatus(cwd: string, path: string): Promise<string | null> {\n if (!(await isGitRepo(cwd))) return null;\n try {\n const out = await runWithTimeout('git', ['status', '--porcelain', '--', path], cwd, TIMEOUT_MS);\n if (!out) return null;\n const firstLine = out.split('\\n')[0] ?? '';\n return firstLine.slice(0, 2).trim() || null;\n } catch {\n return null;\n }\n}\n\nconst BRANCH_DIFF_TIMEOUT_MS = 30_000;\n\nconst defaultBranchCache = new Map<string, string>();\n\nasync function resolveDefaultBranch(cwd: string): Promise<string | null> {\n try {\n const ref = await runWithTimeout(\n 'git',\n ['symbolic-ref', 'refs/remotes/origin/HEAD', '--short'],\n cwd,\n TIMEOUT_MS\n );\n if (ref) return ref;\n } catch {}\n\n for (const candidate of ['origin/main', 'origin/master']) {\n try {\n await runWithTimeout('git', ['rev-parse', '--verify', candidate], cwd, TIMEOUT_MS);\n return candidate;\n } catch {}\n }\n\n return null;\n}\n\nexport async function getDefaultBranch(cwd: string): Promise<string | null> {\n const cached = defaultBranchCache.get(cwd);\n if (cached !== undefined) return cached;\n const resolved = await resolveDefaultBranch(cwd);\n if (resolved !== null) defaultBranchCache.set(cwd, resolved);\n return resolved;\n}\n\nexport async function getGitRefExists(cwd: string, ref: string): Promise<boolean> {\n try {\n await runWithTimeout('git', ['rev-parse', '--verify', '--quiet', ref], cwd, 5_000);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function fetchRemoteBranch(cwd: string, branch: string): Promise<boolean> {\n try {\n await runWithTimeout('git', ['fetch', 'origin', branch], cwd, 30_000);\n return true;\n } catch {\n return false;\n }\n}\n\nexport const _testing = {\n clearDefaultBranchCache: () => defaultBranchCache.clear(),\n};\n\nexport async function getMergeBase(cwd: string, baseBranch: string): Promise<string | null> {\n try {\n return await runWithTimeout('git', ['merge-base', '--', baseBranch, 'HEAD'], cwd, TIMEOUT_MS);\n } catch {\n return null;\n }\n}\n\nexport async function getBranchDiff(cwd: string, baseBranch: string): Promise<string> {\n const mergeBase = await getMergeBase(cwd, baseBranch);\n if (!mergeBase) return '';\n\n try {\n const result = await runWithTimeout(\n 'git',\n ['diff', '-U99999', `${mergeBase}..HEAD`, '--no-color'],\n cwd,\n BRANCH_DIFF_TIMEOUT_MS\n );\n return truncateDiff(result);\n } catch (err: unknown) {\n if (isMaxBufferError(err)) return BUFFER_OVERFLOW_MSG;\n return '';\n }\n}\n\nexport async function getBranchFiles(\n cwd: string,\n baseBranch: string\n): Promise<Array<{ path: string; status: string }>> {\n const mergeBase = await getMergeBase(cwd, baseBranch);\n if (!mergeBase) return [];\n\n try {\n const out = await runWithTimeout(\n 'git',\n ['diff', '--name-status', `${mergeBase}..HEAD`],\n cwd,\n BRANCH_DIFF_TIMEOUT_MS\n );\n if (!out) return [];\n return out\n .split('\\n')\n .filter(Boolean)\n .map((line) => {\n const parts = line.split('\\t');\n return {\n status: parts[0] ?? '',\n path: parts[1] ?? '',\n };\n });\n } catch {\n return [];\n }\n}\n\nexport async function captureTreeSnapshot(cwd: string): Promise<string | null> {\n try {\n const stashRef = await runWithTimeout('git', ['stash', 'create'], cwd, DIFF_TIMEOUT_MS);\n if (stashRef) return stashRef;\n\n return await runWithTimeout('git', ['rev-parse', 'HEAD'], cwd, DIFF_TIMEOUT_MS);\n } catch {\n return null;\n }\n}\n\nexport async function getSnapshotDiff(\n cwd: string,\n fromRef: string,\n toRef: string\n): Promise<string> {\n try {\n const result = await runWithTimeout(\n 'git',\n ['diff', '-U99999', fromRef, toRef, '--no-color'],\n cwd,\n DIFF_TIMEOUT_MS\n );\n return truncateDiff(result);\n } catch (err: unknown) {\n if (isMaxBufferError(err)) return BUFFER_OVERFLOW_MSG;\n return '';\n }\n}\n\nexport async function getSnapshotFiles(\n cwd: string,\n fromRef: string,\n toRef: string\n): Promise<Array<{ path: string; status: string }>> {\n try {\n const out = await runWithTimeout(\n 'git',\n ['diff', '--name-status', fromRef, toRef],\n cwd,\n DIFF_TIMEOUT_MS\n );\n if (!out) return [];\n return out\n .split('\\n')\n .filter(Boolean)\n .map((line) => {\n const parts = line.split('\\t');\n return {\n status: parts[0] ?? '',\n path: parts[1] ?? '',\n };\n });\n } catch {\n return [];\n }\n}\n\nexport async function getStackDiff(cwd: string, fromRef: string, toRef: string): Promise<string> {\n try {\n const result = await runWithTimeout(\n 'git',\n ['diff', '-U99999', `${fromRef}...${toRef}`, '--no-color'],\n cwd,\n DIFF_TIMEOUT_MS\n );\n return truncateDiff(result);\n } catch (err: unknown) {\n if (isMaxBufferError(err)) return BUFFER_OVERFLOW_MSG;\n return '';\n }\n}\n\nexport async function getStackFiles(\n cwd: string,\n fromRef: string,\n toRef: string\n): Promise<Array<{ path: string; status: string }>> {\n try {\n const out = await runWithTimeout(\n 'git',\n ['diff', '--name-status', `${fromRef}...${toRef}`],\n cwd,\n DIFF_TIMEOUT_MS\n );\n if (!out) return [];\n return out\n .split('\\n')\n .filter(Boolean)\n .map((line) => {\n const parts = line.split('\\t');\n return {\n status: parts[0] ?? '',\n path: parts[1] ?? '',\n };\n });\n } catch {\n return [];\n }\n}\n\nexport type ChangeStatus = 'A' | 'D' | 'M' | 'R';\n\nexport type RenameInfo = {\n newPath: string;\n status: ChangeStatus;\n};\n\n/**\n * Read the contents of `path` at the given git ref via `git show <ref>:<path>`.\n *\n * Returns null if the path does not exist at that ref (e.g. the file was added\n * or deleted between refs). Returns null on any git failure — callers should\n * treat absence as \"no content available\" rather than error.\n */\nexport async function getFileAtRef(cwd: string, path: string, ref: string): Promise<string | null> {\n if (!(await isGitRepo(cwd))) return null;\n try {\n return await runWithTimeout('git', ['show', `${ref}:${path}`], cwd, DIFF_TIMEOUT_MS);\n } catch (err: unknown) {\n if (isMaxBufferError(err)) return null;\n return null;\n }\n}\n\n/**\n * Rename status from `git --name-status -M` arrives as `R<percent>` (e.g. `R100`).\n * Normalize to the leading status letter so callers can switch on a stable token.\n */\nfunction parseStatusLetter(raw: string): ChangeStatus | null {\n const letter = raw.charAt(0);\n if (letter === 'A' || letter === 'D' || letter === 'M' || letter === 'R') {\n return letter;\n }\n return null;\n}\n\nfunction parseRenameLine(line: string): { oldPath: string; info: RenameInfo } | null {\n if (!line) return null;\n const parts = line.split('\\t');\n const status = parseStatusLetter(parts[0] ?? '');\n if (status === null) return null;\n if (status === 'R') {\n const oldPath = parts[1];\n const newPath = parts[2];\n if (!oldPath || !newPath) return null;\n return { oldPath, info: { newPath, status: 'R' } };\n }\n const path = parts[1];\n if (!path) return null;\n return { oldPath: path, info: { newPath: path, status } };\n}\n\n/**\n * Detect file changes between two refs with rename detection enabled\n * (`--find-renames=50%`). Returns a map keyed by the OLD path with the new\n * path + status.\n *\n * - 'M' (modified), 'A' (added), 'D' (deleted): oldPath === newPath.\n * - 'R' (renamed): oldPath ≠ newPath; the map key is the old path.\n *\n * Returns an empty map if either ref is invalid or git fails.\n */\nexport async function findRenames(\n cwd: string,\n oldRef: string,\n newRef: string\n): Promise<Map<string, RenameInfo>> {\n const result = new Map<string, RenameInfo>();\n if (!(await isGitRepo(cwd))) return result;\n let out = '';\n try {\n out = await runWithTimeout(\n 'git',\n ['diff', '--name-status', '--find-renames=50%', `${oldRef}..${newRef}`],\n cwd,\n DIFF_TIMEOUT_MS\n );\n } catch {\n return result;\n }\n if (!out) return result;\n for (const line of out.split('\\n')) {\n const parsed = parseRenameLine(line);\n if (parsed) result.set(parsed.oldPath, parsed.info);\n }\n return result;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,YAAAA,iBAAgB;AACzB,SAAS,WAAAC,gBAAe;AACxB,SAAS,QAAAC,aAAY;;;AC2BrB,IAAI,eAA8B;AAClC,IAAI,qBAAoC;AACxC,IAAI,0BAA0B;AAgB9B,eAAe,eAAkB,MAAc,IAAkC;AAC/E,QAAM,aAAa;AACnB,QAAM,QAAQ,KAAK,IAAI;AACvB,iBAAe;AACf,MAAI;AACF,WAAO,MAAM,GAAG;AAAA,EAClB,UAAE;AACA,UAAM,WAAW,KAAK,IAAI,IAAI;AAC9B,yBAAqB;AACrB,8BAA0B;AAC1B,mBAAe;AAAA,EACjB;AACF;AAEA,SAAS,0BAAyC;AAChD,SAAO;AACT;AAEA,SAAS,2BAA0C;AACjD,SAAO;AACT;AAEA,SAAS,gCAAwC;AAC/C,SAAO;AACT;;;ACvEA,SAAS,OAAO,UAAU,QAAQ,MAAM,QAAQ,iBAAiB;AACjE,SAAS,SAAS,YAAY;AAM9B,IAAM,mBAAmB,iBAAE,OAAO;AAAA,EAChC,YAAY,iBAAE,OAAO;AAAA,EACrB,SAAS,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,eAAe,iBAAE,OAAO;AAAA,EACxB,UAAU,iBAAE,OAAO;AACrB,CAAC;AAED,IAAM,kBAAkB,iBAAE,OAAO;AAAA,EAC/B,SAAS,iBAAE,OAAO,iBAAE,OAAO,GAAG,gBAAgB;AAChD,CAAC;AAKM,IAAM,qBAAqB,KAAK,KAAK,KAAK;AAEjD,SAAS,gBAAwB;AAC/B,SAAO,KAAK,gBAAgB,GAAG,QAAQ,4BAA4B;AACrE;AAEA,eAAsB,YAAmD;AACvE,QAAM,WAAW,cAAc;AAC/B,MAAI;AACF,UAAM,MAAM,MAAM,SAAS,UAAU,MAAM;AAC3C,UAAM,SAAkB,KAAK,MAAM,GAAG;AACtC,UAAM,SAAS,gBAAgB,UAAU,MAAM;AAC/C,QAAI,CAAC,OAAO,SAAS;AACnB,aAAO,MAAM,EAAE,MAAM,SAAS,GAAG,qDAAqD;AACtF,aAAO,oBAAI,IAAI;AAAA,IACjB;AACA,WAAO,IAAI,IAAI,OAAO,QAAQ,OAAO,KAAK,OAAO,CAAC;AAAA,EACpD,SAAS,KAAK;AACZ,QAAI,SAAS,GAAG,GAAG;AACjB,aAAO,oBAAI,IAAI;AAAA,IACjB;AACA,WAAO,MAAM,EAAE,IAAI,GAAG,uDAAuD;AAC7E,WAAO,oBAAI,IAAI;AAAA,EACjB;AACF;AAEA,eAAsB,eAAe,YAA4C;AAC/E,MAAI;AACF,UAAM,IAAI,MAAM,KAAK,UAAU;AAC/B,WAAO,EAAE;AAAA,EACX,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,aAAa,OAAwB,gBAAiC;AACpF,MAAI,MAAM,kBAAkB,eAAgB,QAAO;AACnD,MAAI,KAAK,IAAI,IAAI,MAAM,YAAY,mBAAoB,QAAO;AAC9D,SAAO;AACT;AAEA,eAAsB,UAAU,SAAsD;AACpF,QAAM,WAAW,cAAc;AAC/B,QAAM,UAAU,GAAG,QAAQ;AAC3B,MAAI;AACF,UAAM,MAAM,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AAKlD,UAAM,UAAU,MAAM,UAAU;AAChC,eAAW,CAAC,MAAM,KAAK,KAAK,SAAS;AACnC,cAAQ,IAAI,MAAM,KAAK;AAAA,IACzB;AACA,UAAM,UAAqB,EAAE,SAAS,OAAO,YAAY,OAAO,EAAE;AAClE,UAAM,UAAU,SAAS,KAAK,UAAU,OAAO,GAAG,MAAM;AACxD,UAAM,OAAO,SAAS,QAAQ;AAAA,EAChC,SAAS,KAAK;AACZ,WAAO,MAAM,EAAE,KAAK,SAAS,GAAG,oCAAoC;AACpE,SAAK,OAAO,OAAO,EAAE,MAAM,MAAM;AAAA,IAAC,CAAC;AAAA,EACrC;AACF;;;ACvEA,SAAS,WAAW,SAA6C;AAC/D,SAAO,EAAE,IAAI,eAAe,MAAM,eAAe,QAAQ;AAC3D;AAaA,SAAS,wBAAwB,KAAuB;AACtD,MAAI,EAAE,eAAe,OAAQ,QAAO;AACpC,MAAI,YAAY,OAAO,IAAI,WAAW,KAAM,QAAO;AACnD,MAAI,YAAY,OAAO,OAAO,IAAI,WAAW,SAAU,QAAO;AAC9D,MAAI,EAAE,UAAU,KAAM,QAAO;AAC7B,QAAMC,QAAO,IAAI;AACjB,MAAI,OAAOA,UAAS,SAAU,QAAO;AACrC,SAAOA,UAAS;AAClB;AAEA,eAAsB,qBACpB,WAC2B;AAC3B,QAAM,WAAW,QAAQ,aAAa,UAAU,cAAc;AAC9D,MAAI;AACJ,MAAI;AAOF,kBAAc,MAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,MAAM,OAAO,EAAE,CAAC,GAAG,KAAK,KAAK;AAAA,EAC9E,SAAS,KAAK;AACZ,QAAI,wBAAwB,GAAG,GAAG;AAChC,aAAO,KAAK,EAAE,IAAI,GAAG,2BAA2B;AAChD,aAAO,CAAC;AAAA,IACV;AACA,WAAO;AAAA,MACL,EAAE,KAAK,gBAAgB,WAAW,UAAU,EAAE;AAAA,MAC9C;AAAA,IACF;AACA,WAAO,aAAa,CAAC;AAAA,EACvB;AACA,MAAI,CAAC,WAAY,QAAO,CAAC;AASzB,QAAM,iBAAiB,MAAM,eAAe,UAAU;AACtD,MAAI,kBAAkB,MAAM;AAE1B,WAAO,CAAC,MAAM,iBAAiB,YAAY,IAAI,CAAC;AAAA,EAClD;AAEA,QAAM,QAAQ,MAAM,UAAU;AAC9B,QAAMC,UAAS,MAAM,IAAI,UAAU;AACnC,MAAIA,WAAU,aAAaA,SAAQ,cAAc,GAAG;AAClD,WAAO,KAAK,EAAE,YAAY,SAASA,QAAO,QAAQ,GAAG,2BAA2B;AAChF,WAAO,CAAC,WAAWA,QAAO,OAAO,CAAC;AAAA,EACpC;AAEA,SAAO,CAAC,MAAM,iBAAiB,YAAY,cAAc,CAAC;AAC5D;AAEA,eAAe,iBACb,YACA,eACyB;AACzB,SAAO,KAAK,EAAE,WAAW,GAAG,2BAA2B;AACvD,MAAI;AACJ,MAAI;AACF,UAAM,MAAM,MAAM,IAAI,UAAU,CAAC,WAAW,CAAC;AAC7C,UAAMC,SAAQ,IAAI,MAAM,eAAe;AACvC,QAAIA,OAAO,WAAUA,OAAM,CAAC;AAAA,EAC9B,QAAQ;AAAA,EAER;AACA,QAAM,QAAQ,WAAW,OAAO;AAChC,SAAO,KAAK,EAAE,MAAM,GAAG,0BAA0B;AAEjD,MAAI,iBAAiB,QAAQ,SAAS;AACpC,UAAM,QAAyB;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU,KAAK,IAAI;AAAA,IACrB;AACA,UAAM,UAAU,oBAAI,IAAI,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC;AAAA,EAChD;AAEA,SAAO;AACT;;;ACpGO,SAAS,iBAAiB,KAAoD;AACnF,MAAI,IAAI,wBAAyB,QAAO,EAAE,QAAQ,WAAW,QAAQ,0BAA0B;AAC/F,MAAI,IAAI,uBAAwB,QAAO,EAAE,QAAQ,UAAU,QAAQ,yBAAyB;AAC5F,MAAI,IAAI,wBAAyB,QAAO,EAAE,QAAQ,WAAW,QAAQ,0BAA0B;AAC/F,MAAI,IAAI,qBAAsB,QAAO,EAAE,QAAQ,WAAW,QAAQ,uBAAuB;AACzF,MAAI,IAAI,kBAAmB,QAAO,EAAE,QAAQ,WAAW,QAAQ,oBAAoB;AACnF,SAAO;AACT;;;ACIA,eAAsB,oBACpB,YAC8B;AAC9B,QAAM,YAAY,kBAAkB;AACpC,MAAI,UAAW,QAAO,EAAE,MAAM,YAAY,MAAM,UAAU;AAE1D,MAAI;AACJ,MAAI;AACF,aAAS,MAAM,IAAI,UAAU,CAAC,QAAQ,UAAU,QAAQ,GAAG,QAAW,sBAAsB;AAAA,EAC9F,SAAS,KAAK;AACZ,UAAM,SAAS,iBAAiB,GAAG;AACnC,WAAO;AAAA,MACL,EAAE,KAAK,OAAO;AAAA,MACd;AAAA,IACF;AACA,WAAO,EAAE,MAAM,aAAa,OAAO;AAAA,EACrC;AAEA,MAAI;AACJ,MAAI;AACF,aAAS,KAAK,MAAM,MAAM;AAAA,EAC5B,SAAS,KAAK;AACZ,WAAO,KAAK,EAAE,IAAI,GAAG,8EAAyE;AAC9F,WAAO,EAAE,MAAM,aAAa,QAAQ,cAAc;AAAA,EACpD;AAEA,SAAO,oBAAoB,QAAQ,UAAU;AAC/C;AAQA,SAAS,gBAAgB,KAAoC;AAC3D,SAAO,eAAe;AACxB;AAEA,SAAS,iBAAiB,KAAyC;AACjE,MAAI,CAAC,gBAAgB,GAAG,EAAG,QAAO;AAClC,MAAI,IAAI,SAAS,YAAa,QAAO;AACrC,MAAI,IAAI,WAAW,QAAQ,IAAI,WAAW,UAAW,QAAO;AAC5D,SAAO;AACT;AAEA,SAAS,oBACP,QACA,YACqB;AACrB,MAAI,OAAO,WAAW,YAAY,WAAW,MAAM;AACjD,WAAO,EAAE,MAAM,gBAAgB,MAAM,EAAE,QAAQ,mBAAmB,QAAQ,OAAO,EAAE;AAAA,EACrF;AAEA,QAAM,SAAS,SAAS,MAAM;AAC9B,MAAI,CAAC,OAAO,UAAU;AACpB,WAAO,EAAE,MAAM,gBAAgB,MAAM,EAAE,QAAQ,mBAAmB,QAAQ,OAAO,EAAE;AAAA,EACrF;AAEA,QAAM,SAAS,cAAc,eAAe,SAAS,aAAa,qBAAqB,MAAM;AAC7F,QAAM,OAA4B;AAAA,IAChC,QAAQ;AAAA,IACR;AAAA,IACA,OAAO,OAAO,OAAO,UAAU,WAAW,OAAO,QAAQ;AAAA,IACzD,SAAS,OAAO,OAAO,YAAY,WAAW,OAAO,UAAU;AAAA,IAC/D,aAAa,OAAO,OAAO,gBAAgB,WAAW,OAAO,cAAc;AAAA,IAC3E,kBACE,OAAO,OAAO,qBAAqB,WAC/B,OAAO,mBACP,OAAO,qBAAqB,OAC1B,OACA;AAAA,EACV;AACA,SAAO,EAAE,MAAM,YAAY,KAAK;AAClC;AAEA,SAAS,oBAAgD;AACvD,QAAM,WAAW,iBAAiB,QAAQ,GAAG;AAC7C,SAAO,WAAW,EAAE,QAAQ,iBAAiB,QAAQ,SAAS,OAAO,IAAI;AAC3E;AAKA,SAAS,qBAAqB,QAAgE;AAC5F,QAAM,aAAa,OAAO,OAAO,eAAe,WAAW,OAAO,aAAa;AAC/E,QAAM,cAAc,OAAO,OAAO,gBAAgB,WAAW,OAAO,cAAc;AAElF,MAAI,eAAe,YAAa,QAAO;AACvC,MAAI,WAAW,SAAS,SAAS,KAAK,gBAAgB,UAAW,QAAO;AACxE,MAAI,WAAW,SAAS,KAAK,KAAK,gBAAgB,MAAO,QAAO;AAEhE,SAAO;AACT;AAEA,SAAS,SAAS,OAAyC;AACzD,MAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK,GAAG;AACxE,WAAO;AAAA,EACT;AACA,SAAO,CAAC;AACV;;;ACtGO,SAAS,oBACd,WACA,KACa;AACb,MAAI,cAAc,QAAQ,cAAc,OAAQ,QAAO,EAAE,MAAM,UAAU;AACzE,QAAM,WAAW,iBAAiB,GAAG;AACrC,MAAI,CAAC,SAAU,QAAO,EAAE,MAAM,UAAU;AACxC,MAAI,SAAS,WAAW,UAAW,QAAO,EAAE,MAAM,UAAU;AAC5D,SAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU;AAAA,IACV,WAAW,SAAS;AAAA,IACpB,QAAQ,SAAS;AAAA,EACnB;AACF;;;ACnCA,SAAS,SAAS,YAAAC,WAAU,QAAAC,aAAY;AACxC,SAAS,eAAe;AACxB,SAAS,QAAAC,aAAY;AAMrB,IAAM,mBAAmB,iBAAE,OAAO;AAAA,EAChC,MAAM,iBAAE,OAAO;AAAA,EACf,aAAa,iBAAE,OAAO,EAAE,SAAS;AAAA,EACjC,SAAS,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,QAAQ,iBAAE,MAAM,CAAC,iBAAE,OAAO,EAAE,MAAM,iBAAE,OAAO,EAAE,CAAC,GAAG,iBAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AACzE,CAAC;AAED,IAAM,yBAAyB,iBAAE,OAAO;AAAA,EACtC,SAAS,iBAAE,OAAO;AAAA,EAClB,SAAS,iBAAE;AAAA,IACT,iBAAE,OAAO;AAAA,IACT,iBAAE;AAAA,MACA,iBAAE,OAAO;AAAA,QACP,OAAO,iBAAE,OAAO;AAAA,QAChB,aAAa,iBAAE,OAAO;AAAA,QACtB,SAAS,iBAAE,OAAO;AAAA,QAClB,aAAa,iBAAE,OAAO;AAAA,QACtB,aAAa,iBAAE,OAAO;AAAA,MACxB,CAAC;AAAA,IACH;AAAA,EACF;AACF,CAAC;AAED,IAAM,sBAAsB,iBAAE,OAAO;AAAA,EACnC,QAAQ,iBAAE;AAAA,IACR,iBAAE,OAAO;AAAA,MACP,QAAQ,iBAAE,OAAO;AAAA,MACjB,iBAAiB,iBAAE,OAAO;AAAA,IAC5B,CAAC;AAAA,EACH;AACF,CAAC;AAED,IAAM,0BAA0B,iBAAE;AAAA,EAChC,iBAAE,OAAO;AAAA,EACT,iBACG,OAAO;AAAA,IACN,iBAAiB,iBAAE,OAAO;AAAA,EAC5B,CAAC,EACA,YAAY;AACjB;AAEA,eAAe,aAAgB,MAAcC,SAAyC;AACpF,MAAI;AACF,UAAM,MAAM,MAAMC,UAAS,MAAM,OAAO;AACxC,UAAM,SAASD,QAAO,UAAU,KAAK,MAAM,GAAG,CAAC;AAC/C,WAAO,OAAO,UAAU,OAAO,OAAO;AAAA,EACxC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAe,YAAY,KAAgC;AACzD,MAAI;AACF,UAAM,UAAU,MAAM,QAAQ,GAAG;AACjC,UAAM,UAAoB,CAAC;AAC3B,eAAW,SAAS,SAAS;AAC3B,UAAI,MAAM,WAAW,GAAG,EAAG;AAC3B,YAAM,OAAOE,MAAK,KAAK,KAAK;AAC5B,YAAM,IAAI,MAAMC,MAAK,IAAI,EAAE,MAAM,MAAM,IAAI;AAC3C,UAAI,GAAG,YAAY,EAAG,SAAQ,KAAK,KAAK;AAAA,IAC1C;AACA,WAAO;AAAA,EACT,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEA,SAAS,cAAc,QAA4D;AACjF,MAAI,CAAC,OAAQ,QAAO;AACpB,MAAI,OAAO,WAAW,SAAU,QAAO;AACvC,SAAO,OAAO;AAChB;AAMA,eAAe,gBACb,iBACA,iBACA,cACA,YACA,eACkC;AAClC,QAAM,UAAmC,CAAC;AAE1C,aAAW,UAAU,CAAC,WAAW,kBAAkB,GAAG;AACpD,UAAM,aAAa,WAAW;AAC9B,UAAM,MAAMD,MAAK,iBAAiB,MAAM;AACxC,UAAM,cAAc,MAAM,YAAY,GAAG;AAEzC,eAAW,cAAc,aAAa;AACpC,YAAM,iBAAiBA,MAAK,KAAK,YAAY,kBAAkB,aAAa;AAC5E,YAAM,aAAa,MAAM,aAAa,gBAAgB,gBAAgB;AACtE,UAAI,CAAC,WAAY;AAEjB,YAAM,SAAS,GAAG,UAAU,IAAI,eAAe;AAC/C,YAAM,YAAY,aAAa,IAAI,MAAM;AACzC,YAAM,UAAU,WAAW,MAAM,KAAK;AAEtC,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,aAAa,WAAW,eAAe;AAAA,QACvC,QAAQ,cAAc,WAAW,MAAM;AAAA,QACvC,aAAa;AAAA,QACb,cAAc,cAAc,IAAI,MAAM;AAAA,QACtC;AAAA,QACA,SAAS,aAAa;AAAA,QACtB,SAAS,WAAW;AAAA,QACpB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT;AAWA,eAAsB,yBACpB,WACkC;AAClC,MAAI;AACF,WAAO,MAAM,8BAA8B;AAAA,EAC7C,SAAS,KAAK;AAOZ,QAAI,aAAa,UAAU,SAAS,GAAG;AACrC,aAAO;AAAA,QACL,EAAE,KAAK,gBAAgB,UAAU,OAAO;AAAA,QACxC;AAAA,MACF;AACA,aAAO;AAAA,IACT;AACA,WAAO,MAAM,EAAE,IAAI,GAAG,sEAAiE;AACvF,WAAO,CAAC;AAAA,EACV;AACF;AAEA,eAAe,gCAAkE;AAC/E,QAAM,aAAaA,MAAK,QAAQ,GAAG,WAAW,SAAS;AAEvD,QAAM,CAAC,eAAe,mBAAmB,mBAAmB,cAAc,IAAI,MAAM,QAAQ,IAAI;AAAA,IAC9F,aAAaA,MAAK,YAAY,wBAAwB,GAAG,sBAAsB;AAAA,IAC/E,aAAaA,MAAK,YAAY,2BAA2B,GAAG,mBAAmB;AAAA,IAC/E,aAAaA,MAAK,YAAY,yBAAyB,GAAG,uBAAuB;AAAA,IACjF;AAAA,MACEA,MAAK,QAAQ,GAAG,WAAW,eAAe;AAAA,MAC1C,iBACG,OAAO;AAAA,QACN,gBAAgB,iBAAE,OAAO,iBAAE,OAAO,GAAG,iBAAE,QAAQ,CAAC,EAAE,SAAS;AAAA,MAC7D,CAAC,EACA,YAAY;AAAA,IACjB;AAAA,EACF,CAAC;AAED,QAAM,eAAe,IAAI,IAAY,gBAAgB,OAAO,KAAK,cAAc,OAAO,IAAI,CAAC,CAAC;AAE5F,QAAM,aAAa,gBAAgB,kBAAkB,CAAC;AAEtD,QAAM,gBAAgB,oBAAI,IAAoB;AAC9C,MAAI,mBAAmB;AACrB,eAAW,SAAS,kBAAkB,QAAQ;AAC5C,oBAAc,IAAI,MAAM,QAAQ,MAAM,eAAe;AAAA,IACvD;AAAA,EACF;AAEA,QAAM,aAAsC,CAAC;AAE7C,MAAI,mBAAmB;AACrB,UAAM,eAAe,OAAO,QAAQ,iBAAiB,EAAE,IAAI,OAAO,CAAC,MAAM,IAAI,MAAM;AACjF,UAAI,CAAC,QAAQ,OAAO,SAAS,SAAU,QAAO,CAAC;AAC/C,YAAM,WAAW,KAAK;AACtB,UAAI,OAAO,aAAa,SAAU,QAAO,CAAC;AAC1C,aAAO,gBAAgB,MAAM,UAAU,cAAc,YAAY,aAAa;AAAA,IAChF,CAAC;AAED,UAAM,UAAU,MAAM,QAAQ,IAAI,YAAY;AAC9C,eAAW,WAAW,SAAS;AAC7B,iBAAW,KAAK,GAAG,OAAO;AAAA,IAC5B;AAAA,EACF;AAEA,aAAW,KAAK,CAAC,GAAG,OAAO,EAAE,gBAAgB,MAAM,EAAE,gBAAgB,EAAE;AAEvE,SAAO,MAAM,EAAE,OAAO,WAAW,OAAO,GAAG,8BAA8B;AACzE,SAAO;AACT;;;AC9MA,SAAS,YAAY,oBAAoB;AACzC,SAAS,qBAAqB;;;AWD9B,SAAS,eAAwC;AWwBjD,SAAS,aAAa,qBAAqB;AEvB3C;EACE,eAAAE;EACA,YAAAC;EACA,WAAAC;EACA,mBAAAC;EACA,YAAAC;EACA;OACK;AGRP;EAEE;EACA;EACA;EACA;EACA;OAEK;A1B4BA,SAAS,uBACd,SACoB;AACpB,MAAI,YAAY,OAAW,QAAO;AAClC,MAAI,OAAO,YAAY,SAAU,QAAO;AACxC,MAAI;AACF,WAAO,KAAK,UAAU,OAAO;EAC/B,QAAQ;AAEN,WAAO;EACT;AACF;ACtCO,SAAS,kBACdC,SACyB;AACzB,QAAM,SAAkC,CAAC;AAEzC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQA,QAAO,MAAM,GAAG;AACxD,WAAO,GAAG,IAAI,uBAAuB,KAAK;EAC5C;AAEA,SAAO;AACT;AAQO,SAAS,uBAAuB,OAAuC;AAC5E,UAAQ,MAAM,OAAO;;IAEnB,KAAK;AACH,aAAO;;IAGT,KAAK;AACH,aAAO,MAAM;IACf,KAAK;AACH,aAAO,MAAM;;IAGf,KAAK;IACL,KAAK;IACL,KAAK;AACH,aAAO,CAAC;IACV,KAAK;AACH,aAAO,CAAC;;IAGV,KAAK,UAAU;AACb,YAAM,SAAkC,CAAC;AACzC,iBAAW,CAAC,KAAK,WAAW,KAAK,OAAO,QAAQ,MAAM,MAAM,GAAG;AAC7D,eAAO,GAAG,IAAI,uBAAuB,WAAW;MAClD;AACA,aAAO;IACT;IAEA,KAAK;AACH,aAAO,4BAA4B,KAAK;IAE1C;AACE,aAAO;EACX;AACF;AAEA,SAAS,4BAA4B,OAA4B;AAC/D,UAAQ,MAAM,WAAW;;IAEvB,KAAK;AACH,aAAO;;IAGT,KAAK;AACH,aAAO,MAAM;IACf,KAAK;AACH,aAAO,MAAM;IACf,KAAK;AACH,aAAO,MAAM;IACf,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO,MAAM;;IAGf,KAAK,UAAU;AACb,YAAM,SAAkC,CAAC;AACzC,iBAAW,CAAC,KAAK,WAAW,KAAK,OAAO,QAAQ,MAAM,KAAK,GAAG;AAC5D,eAAO,GAAG,IAAI,4BAA4B,WAAW;MACvD;AACA,aAAO;IACT;;IAGA,KAAK;AACH,aAAO,CAAC;IACV,KAAK;AACH,aAAO,CAAC;;IAGV,KAAK,SAAS;AAGZ,YAAM,cAAc,MAAM;AAC1B,UAAI,gBAAgB,QAAW;AAE7B,YAAI,gBAAgB,QAAQ,OAAO,gBAAgB,UAAU;AAC3D,iBAAO;QACT;AAEA,YAAI,OAAO,KAAK,WAAqB,EAAE,SAAS,GAAG;AACjD,iBAAO;QACT;MACF;AAEA,aAAO,4BAA4B,MAAM,OAAO,CAAC,CAAC;IACpD;IAEA,KAAK,sBAAsB;AAEzB,YAAM,cAAc,MAAM;AAC1B,UAAI,gBAAgB,QAAW;AAE7B,YAAI,gBAAgB,QAAQ,OAAO,gBAAgB,UAAU;AAC3D,iBAAO;QACT;AAEA,YAAI,OAAO,KAAK,WAAqB,EAAE,SAAS,GAAG;AACjD,iBAAO;QACT;MACF;AAEA,YAAM,WAAW,OAAO,KAAK,MAAM,QAAQ,EAAE,CAAC;AAC9C,aAAO,4BAA4B,MAAM,SAAS,QAAQ,CAAC;IAC7D;IAEA;AACE,aAAO;EACX;AACF;AE/HO,IAAM,oBAAN,cAAgC,MAAM;EAC3C,YACE,SACO,SACP;AACA,UAAM,OAAO;AAFN,SAAA,UAAA;AAGP,SAAK,OAAO;EACd;AACF;AAqCO,IAAM,sBAAN,cAAkC,kBAAkB;EACzD,YACS,MACA,eACP,SACA;AACA,UAAM,WAAW,oCAAoC,aAAa,IAAI;MACpE;MACA;IACF,CAAC;AAPM,SAAA,OAAA;AACA,SAAA,gBAAA;AAOP,SAAK,OAAO;EACd;AACF;AAYO,IAAM,uBAAN,cAAmC,kBAAkB;EAC1D,YACS,YACA,cACA,aACP;AACA;MACE,uBAAuB,UAAU,cAAc,YAAY,SAAS,OAAO,WAAW;MACtF,EAAE,YAAY,cAAc,YAAY;IAC1C;AAPO,SAAA,aAAA;AACA,SAAA,eAAA;AACA,SAAA,cAAA;AAMP,SAAK,OAAO;EACd;AACF;AClCO,IAAM,aAAa,uBAAO,IAAI,mBAAmB;AA4OjD,SAAS,IACd,UAO6B;AAE7B,QAAM,eAAgB,SAAiB,UAAU;AACjD,MAAI,CAAC,cAAc;AACjB,UAAM,IAAI;MACR;IACF;EACF;AACA,SAAO;AACT;AC1PO,IAAM,cAAc,uBAAO,IAAI,oBAAoB;AA+FnD,SAAS,KACd,UAOS;AAET,QAAM,YAAa,SAAiB,WAAW;AAC/C,MAAI,cAAc,QAAW;AAC3B,UAAM,IAAI;MACR;IACF;EACF;AACA,SAAO;AACT;ACpKA,SAAS,mBAAsB,UAA0C;AACvE,SAAO;IACL,cAAc;IACd,YAAY;EACd;AACF;AAEA,SAAS,eACP,OACA,UACS;AACT,QAAM,WAAW,mBAAmB,QAAQ;AAG5C,MAAI,MAAM,UAAU,UAAU,MAAM,UAAU,WAAW;AACvD,WAAO;EACT;AACA,MAAI,MAAM,UAAU,SAAS;AAC3B,WAAO;EACT;AAGA,MAAI,MAAM,UAAU,UAAU,MAAM,UAAU,eAAe;AAC3D,WAAO,OAAO,OAAO,UAAU;MAC7B,IAAI,QAAQ;AACV,eAAO,eAAe,MAAM,OAAO,CAAC,GAAG,UAAU,EAAE,MAAM,OAAO,CAAC,CAAC;MACpE;MACA,IAAI,OAAe;AACjB,eAAO,eAAe,MAAM,OAAO;UACjC,GAAG;UACH,EAAE,MAAM,SAAS,MAAM;QACzB,CAAC;MACH;MACA,IAAI,SAAS;AACX,eAAO,eAAe,MAAM,OAAO;UACjC,GAAG;UACH,EAAE,MAAM,SAAS,OAAO,EAAE;QAC5B,CAAC;MACH;MACA,IAAI,QAAQ;AACV,eAAO,eAAe,MAAM,OAAO;UACjC,GAAG;UACH,EAAE,MAAM,SAAS,OAAO,GAAG;QAC7B,CAAC;MACH;IACF,CAAC;EACH;AAGA,MAAI,MAAM,UAAU,UAAU;AAC5B,UAAM,QAAiC,CAAC;AACxC,eAAW,OAAO,MAAM,QAAQ;AAC9B,aAAO,eAAe,OAAO,KAAK;QAChC,MAAM;AACJ,iBAAO,eAAe,MAAM,OAAO,GAAG,GAAG;YACvC,GAAG;YACH,EAAE,MAAM,YAAY,IAAI;UAC1B,CAAC;QACH;QACA,YAAY;MACd,CAAC;IACH;AACA,WAAO,OAAO,OAAO,UAAU,KAAK;EACtC;AAGA,MAAI,MAAM,UAAU,UAAU;AAC5B,WAAO,OAAO,OAAO,UAAU;MAC7B,IAAI,QAAQ;AACV,eAAO,eAAe,MAAM,OAAO,CAAC,GAAG,UAAU,EAAE,MAAM,OAAO,CAAC,CAAC;MACpE;MACA,KAAK,KAAa;AAChB,eAAO,eAAe,MAAM,OAAO,CAAC,GAAG,UAAU,EAAE,MAAM,OAAO,IAAI,CAAC,CAAC;MACxE;IACF,CAAC;EACH;AAEA,SAAO;AACT;AA2BO,SAAS,kBACd,UACgB;AAChB,QAAM,UAAmC,CAAC;AAE1C,aAAW,OAAO,SAAS,QAAQ;AACjC,WAAO,eAAe,SAAS,KAAK;MAClC,MAAM;AACJ,eAAO,eAAe,SAAS,OAAO,GAAG,GAAG,CAAC,EAAE,MAAM,YAAY,IAAI,CAAC,CAAC;MACzE;MACA,YAAY;IACd,CAAC;EACH;AAEA,SAAO;AACT;AC5GO,SAAS,kBAAkB,UAAiC;AACjE,MAAI,OAAO;AAEX,aAAW,WAAW,UAAU;AAC9B,YAAQ,QAAQ,MAAM;MACpB,KAAK;AAEH,YAAI,2BAA2B,KAAK,QAAQ,GAAG,GAAG;AAChD,kBAAQ,IAAI,QAAQ,GAAG;QACzB,OAAO;AACL,kBAAQ,KAAK,kBAAkB,QAAQ,GAAG,CAAC;QAC7C;AACA;MACF,KAAK;AACH,gBAAQ;AACR;MACF,KAAK;AACH,gBAAQ,IAAI,QAAQ,KAAK;AACzB;MACF,KAAK;AACH,gBAAQ,KAAK,kBAAkB,QAAQ,GAAG,CAAC;AAC3C;IACJ;EACF;AAEA,SAAO;AACT;AAKA,SAAS,kBAAkB,KAAqB;AAC9C,SAAO,IAAI,QAAQ,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAK;AACvD;AC9BO,SAAS,aACdC,MACA,UACG;AACH,QAAM,OAAOA,KAAI,OAAO;AACxB,SAAO,oBAAoB,MAAM,SAAS,UAAU;AACtD;AAMO,SAAS,oBACdC,QACA,UACS;AACT,MAAI,SAAS,WAAW,GAAG;AACzB,WAAOA;EACT;AAEA,QAAM,CAAC,SAAS,GAAG,IAAI,IAAI;AAE3B,UAAQ,QAAQ,MAAM;IACpB,KAAK;IACL,KAAK;AACH,UAAIA,UAAS,KAAM,QAAO;AAC1B,UAAI,OAAOA,WAAU,SAAU,QAAO;AACtC,aAAO;QACJA,OAAkC,QAAQ,GAAG;QAC9C;MACF;IAEF,KAAK,SAAS;AACZ,UAAI,CAAC,MAAM,QAAQA,MAAK,EAAG,QAAO;AAElC,YAAM,QACJ,QAAQ,QAAQ,IAAIA,OAAM,SAAS,QAAQ,QAAQ,QAAQ;AAC7D,UAAI,QAAQ,KAAK,SAASA,OAAM,OAAQ,QAAO;AAC/C,aAAO,oBAAoBA,OAAM,KAAK,GAAG,IAAI;IAC/C;IAEA,KAAK;AACH,UAAI,MAAM,QAAQA,MAAK,GAAG;AACxB,eAAOA,OAAM,IAAI,CAAAC,UAAQ,oBAAoBA,OAAM,IAAI,CAAC;MAC1D;AACA,UAAI,OAAOD,WAAU,YAAYA,WAAU,MAAM;AAC/C,eAAO,OAAO,OAAOA,MAAK,EAAE,IAAI,CAAAC,UAAQ,oBAAoBA,OAAM,IAAI,CAAC;MACzE;AACA,aAAO,CAAC;EACZ;AACF;AC3CO,SAAS,2BACd,UACA,UACA,WACS;AAET,MAAI,CAAC,WAAW;AACd,WAAO;EACT;AAGA,MAAI;AAEJ,aAAW,WAAW,UAAU;AAC9B,QAAI,QAAQ,SAAS,YAAY;AAE/B,UAAI,iBAAiB,QAAW;AAC9B,uBAAe,SAAS,OAAO,QAAQ,GAAG;MAC5C,WAAW,aAAa,UAAU,UAAU;AAE1C,eAAO;MACT,WAAW,aAAa,UAAU,UAAU;AAE1C,eAAO;MACT,OAAO;AAEL,eAAO;MACT;IACF,WAAW,QAAQ,SAAS,UAAU,QAAQ,SAAS,SAAS;AAE9D,UACE,cAAc,UAAU,UACxB,cAAc,UAAU,eACxB;AACA,uBAAe,aAAa;MAC9B,WAAW,cAAc,UAAU,UAAU;AAE3C,eAAO;MACT,OAAO;AAEL,eAAO;MACT;IACF,WAAW,QAAQ,SAAS,OAAO;AAEjC,UAAI,cAAc,UAAU,UAAU;AACpC,eAAO;MACT;AAEA,aAAO;IACT;EACF;AAEA,SAAO;AACT;AA0BO,SAAS,gBACdF,MACA,UACA,UACY;AACZ,QAAM,QAASA,KAAY,UAAU;AACrC,MAAI,CAAC,SAAS,EAAE,cAAc,QAAQ;AACpC,UAAM,IAAI,MAAM,qCAAqC;EACvD;AAEA,QAAM,WAAW,IAAIA,IAAG,EAAE;AAC1B,QAAM,YAAY,IAAIA,IAAG,EAAE;AAC3B,QAAM,UAAU,KAAKA,IAAG;AAGxB,QAAM,cAAc,kBAAkB,QAAQ;AAC9C,QAAM,eAAe,SAAS,WAAW;AACzC,QAAM,WAAW,aAAa;AAG9B,MAAI;AAGJ,QAAM,oBAAoB,MAAsC;AAC9D,UAAMC,SAAQ,aAAaD,MAAK,YAAY;AAC5C,UAAM,aAAa,KAAK,UAAUC,MAAK;AACvC,UAAM,UAAU,eAAe;AAC/B,QAAI,SAAS;AACX,sBAAgB;IAClB;AACA,WAAO,EAAE,OAAAA,QAAO,QAAQ;EAC1B;AAGA,kBAAgB,KAAK,UAAU,aAAaD,MAAK,YAAY,CAAC;AAG9D,QAAM,0BAA0B;IAC9B;IACA;IACA;EACF;AAEA,MAAI;AAEJ,MAAI,yBAAyB;AAE3B,mBAAe,QAAQ,UAAU,MAAM;AACrC,YAAM,EAAE,OAAAC,QAAO,QAAQ,IAAI,kBAAkB;AAC7C,UAAI,SAAS;AACX,iBAASA,MAAK;MAChB;IACF,CAAC;EACH,OAAO;AAEL,UAAM,WAAW,kBAAkB,QAAQ;AAC3C,mBAAe,QAAQ,kBAAkB,UAAU,MAAM;AACvD,YAAM,EAAE,OAAAA,QAAO,QAAQ,IAAI,kBAAkB;AAC7C,UAAI,SAAS;AACX,iBAASA,MAAK;MAChB;IACF,CAAC;EACH;AAGA,SAAO,MAAM;AACX,iBAAa;EACf;AACF;AEvKO,IAAM,yBAAyB,uBAAO;EAC3C;AACF;AAMO,IAAM,0BAA0B,uBAAO;EAC5C;AACF;AAMO,IAAM,cAAc,uBAAO,IAAI,oBAAoB;AAMnD,IAAM,eAAe,uBAAO,IAAI,qBAAqB;ACdrD,SAAS,UAAU,KAAc,MAAyB;AAC/D,MAAI,UAAU;AACd,aAAW,OAAO,MAAM;AACtB,QAAI,WAAW,KAAM,QAAO;AAC5B,cAAW,QAAoC,GAAG;EACpD;AACA,SAAO;AACT;AAiBO,SAAS,UACd,KACA,MACAA,QACS;AACT,MAAI,KAAK,WAAW,EAAG,QAAOA;AAE9B,QAAM,SAAS,UAAU,GAAG,KAAK,CAAC;AAClC,MAAI,SAAS;AAEb,WAAS,IAAI,GAAG,IAAI,KAAK,SAAS,GAAG,KAAK;AACxC,UAAM,MAAM,KAAK,CAAC;AAClB,QAAI,OAAO,GAAG,KAAK,QAAQ,OAAO,OAAO,GAAG,MAAM,UAAU;AAC1D,aAAO,GAAG,IAAI,CAAC;IACjB;AACA,aAAS,OAAO,GAAG;EACrB;AAEA,SAAO,KAAK,KAAK,SAAS,CAAC,CAAC,IAAIA;AAChC,SAAO;AACT;AA0DO,SAAS,UAAa,KAAW;AACtC,MAAI,QAAQ,QAAQ,OAAO,QAAQ,SAAU,QAAO;AACpD,SAAO,KAAK,MAAM,KAAK,UAAU,GAAG,CAAC;AACvC;AC1GO,SAAS,gBACd,WACA,MACqB;AACrB,QAAM,UAAU,UAAU,WAAW;AACrC,MAAI,CAAC,QAAS,QAAO;AAErB,QAAM,YAAY,UAAU,aAAa;AACzC,QAAM,cAAe,UAAkB;AACvC,QAAME,QAAO,QAAQ,IAAI,WAAW;AAEpC,MAAIA,OAAM,SAAS,MAAO,QAAO;AACjC,QAAM,UAAUA;AAGhB,MAAI,EAAE,KAAK,CAAC,KAAK,QAAQ,SAAU,QAAO;AAG1C,SAAO,UAAU,QAAQ,QAAQ,KAAK,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;AAC1D;AASO,SAAS,kBACd,WACA,MACqB;AACrB,QAAM,YAAY,UAAU,aAAa;AACzC,QAAM,YAAY,UAAU,IAAI,KAAK,CAAC,CAAC;AACvC,MAAI,cAAc,OAAW,QAAO;AACpC,SAAO,UAAU,WAAW,KAAK,MAAM,CAAC,CAAC;AAC3C;AASO,SAAS,oBACd,WACA,MACqB;AACrB,QAAM,cAAc,UAAU,eAAe;AAG7C,MAAI,CAAC,YAAa,QAAO;AACzB,SAAO,UAAU,YAAY,KAAK,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;AACtD;AAUO,SAAS,aACd,WACA,MACe;AAIf,QAAM,UAAU,gBAAgB,WAAW,IAAI;AAC/C,MAAI,YAAY,OAAW,QAAO;AAClC,QAAM,YAAY,kBAAkB,WAAW,IAAI;AACnD,MAAI,cAAc,OAAW,QAAO;AACpC,SAAO,oBAAoB,WAAW,IAAI;AAC5C;AAiBO,SAAS,oBACd,WACA,OACqB;AACrB,QAAM,UAAU,UAAU,WAAW;AACrC,MAAI,CAAC,QAAS,QAAO;AAIrB,MACE,oBAAoB,aACpB,OAAQ,UAAkB,mBAAmB,YAC7C;AACA,UAAM,cAAe,UAAkB,eAAe;AAGtD,QAAI,aAAa;AACf,aAAO,YAAY,KAAK;IAC1B;EACF;AAGA,SAAO;AACT;AASO,SAAS,sBACd,WACA,OACqB;AACrB,QAAM,YAAY,UAAU,aAAa;AACzC,SAAO,UAAU,IAAI,KAAK;AAC5B;AAUO,SAAS,iBACd,WACA,OACe;AAIf,QAAM,UAAU,oBAAoB,WAAW,KAAK;AACpD,MAAI,YAAY,OAAW,QAAO;AAClC,SAAO,sBAAsB,WAAW,KAAK;AAC/C;AC9IO,SAAS,WACd,WACA,MACAF,QACM;AACN,QAAM,YAAY,UAAU,aAAa;AAEzC,MAAI,KAAK,WAAW,GAAG;AAErB,cAAU,IAAI,KAAK,CAAC,GAAGA,MAAK;EAC9B,OAAO;AAEL,UAAM,UAAU,KAAK,CAAC;AACtB,UAAM,UAAU,UAAU,IAAI,OAAO,KAAK,CAAC;AAC3C,UAAM,UAAU,UAAU,SAAS,KAAK,MAAM,CAAC,GAAGA,MAAK;AACvD,cAAU,IAAI,SAAS,OAAO;EAChC;AAEA,YAAU,aAAa;AACzB;AAiBO,SAAS,eACd,WACA,OACAA,QACM;AACN,QAAM,YAAY,UAAU,aAAa;AAGzC,MACE,SAAS,aACT,OAAQ,UAA8B,QAAQ,YAC9C;AAEA;AAAE,cAA8B,IAAI,OAAOA,MAAK;EAClD,OAAO;AAEL;AAAE,cAAuB,OAAO,OAAO,CAAC;AACtC,cAAuB,OAAO,OAAOA,MAAK;EAC9C;AAEA,YAAU,aAAa;AACzB;AAkBO,SAAS,qBACd,WACA,OACA,YACAA,QACM;AACN,QAAM,YAAY,UAAU,aAAa;AACzC,QAAM,UAAU,UAAU,IAAI,KAAK,KAAK,CAAC;AACzC,QAAM,UAAU,UAAU,SAAS,YAAYA,MAAK;AACpD,iBAAe,WAAW,OAAO,OAAO;AAC1C;AChFO,IAAM,oBAAoB,uBAAO,IAAI,0BAA0B;AAMtE,IAAM,sBAAsB;EAC1B,OAAO;EACP,WAAW;AACb;AAwBA,SAAS,iBACP,QACAG,OACA,UACgB;AAChB,MAAI,OAAOA,UAAS,YAAYA,SAAQ,QAAQ;AAC9C,WAAO,EAAE,SAAS,MAAM,OAAO,QAAQ,IAAI,QAAQA,OAAM,QAAQ,EAAE;EACrE;AACA,MAAI,OAAOA,UAAS,UAAU;AAC5B,WAAO,EAAE,SAAS,OAAO,MAAAA,MAAK;EAChC;AACA,SAAO,EAAE,SAAS,MAAM,OAAO,OAAU;AAC3C;AAUA,SAAS,sBAAsBH,QAAyB;AACtD,SAAOA,WAAU,QAAQ,OAAOA,WAAU;AAC5C;AAaA,SAAS,uBACP,UACA,WACA,MACA,OACA,WACA,gBACkB;AAGlB,QAAMI,QAAO;IACX,CAAC,sBAAsB,GAAG;IAC1B,CAAC,uBAAuB,GAAG;IAC3B,CAAC,WAAW,GAAG;IACf,CAAC,YAAY,GAAG;IAChB,SAAS;IACT,UAAU,MAAM,OAAO,SAAS,CAAC;IACjC,QAAQ;IACR,CAAC,OAAO,WAAW,EAAE,MAAmC;AACtD,YAAM,IAAI,SAAS;AACnB,UAAI,SAAS,SAAU,QAAO,OAAO,CAAC;AACtC,UAAI,SAAS,SAAU,QAAO,OAAO,CAAC;AACtC,aAAO;IACT;IACA,KAAK;IACL,IAAIJ,QAAgB;AAClB,UAAI,cAAc,QAAW;AAC3B,YAAI,kBAAkB,eAAe,SAAS,GAAG;AAE/C,+BAAqB,WAAW,WAAW,gBAAgBA,MAAK;QAClE,OAAO;AAEL,yBAAe,WAAW,WAAWA,MAAK;QAC5C;MACF,OAAO;AAEL,mBAAW,WAAW,MAAMA,MAAK;MACnC;IACF;EACF;AAGA,MAAI,cAAc,QAAW;AAC3B;AAAE,IAAAI,MAAa,iBAAiB,IAAI;EACtC;AAEA,SAAOA;AACT;AAaO,SAAS,oBACd,WACA,MACA,OACkB;AAClB,QAAM,WAAW,MAAS,aAAgB,WAAW,IAAI;AACzD,QAAMA,QAAO,uBAAuB,UAAU,WAAW,MAAM,KAAK;AAGpE,MAAI,MAAM,cAAc,YAAY,WAAW,OAAO;AACpD,WAAO,kBAAkBA,OAAM,WAAW,MAAM,KAAyB;EAC3E;AAGA,MAAI,MAAM,cAAc,YAAY,WAAW,OAAO;AACpD,WAAO,kBAAkBA,OAAM,WAAW,MAAM,KAAyB;EAC3E;AAIA,MAAI,MAAM,cAAc,WAAW,MAAM,cAAc,OAAO;AAC5D,UAAM,eAAe,SAAS;AAC9B,QAAI,iBAAiB,QAAQ,OAAO,iBAAiB,UAAU;AAC7D,aAAO,yBAAyBA,OAAM,WAAW,IAAI;IACvD;EACF;AAEA,SAAOA;AACT;AAgBA,SAAS,kBACPA,OACA,WACA,MACA,OACkB;AAClB,SAAO,IAAI,MAAMA,OAAM;IACrB,IAAI,QAAQD,OAAM,UAAU;AAC1B,YAAM,WAAW,iBAAiB,QAAQA,OAAM,QAAQ;AACxD,UAAI,SAAS,QAAS,QAAO,SAAS;AAEtC,UAAI,SAAS,QAAQ,MAAM,OAAO;AAChC,eAAO;UACL;UACA,CAAC,GAAG,MAAM,SAAS,IAAI;UACvB,MAAM,MAAM,SAAS,IAAI;QAC3B;MACF;AACA,aAAO;IACT;EACF,CAAC;AACH;AAcA,SAAS,yBACPC,OACA,WACA,MACkB;AAClB,SAAO,IAAI,MAAMA,OAAM;IACrB,IAAI,QAAQD,OAAM,UAAU;AAC1B,YAAM,WAAW,iBAAiB,QAAQA,OAAM,QAAQ;AACxD,UAAI,SAAS,QAAS,QAAO,SAAS;AAEtC,YAAM,eAAe,OAAO,QAAQ;AACpC,UACE,gBACA,OAAO,iBAAiB,YACxB,SAAS,QAAQ,cACjB;AAGA,YAAI,MAAM,QAAQ,YAAY,KAAK,SAAS,SAAS,UAAU;AAC7D,iBAAO,aAAa;QACtB;AAEA,cAAM,YAAY,aAAa,SAAS,IAAI;AAC5C,YAAI,cAAc,OAAW,QAAO;AACpC,eAAO;UACL;UACA;UACA,CAAC,SAAS,IAAI;UACd;QACF;MACF;AACA,aAAO;IACT;EACF,CAAC;AACH;AAKA,SAAS,+BACP,WACA,UACA,YACA,cACkB;AAClB,QAAM,WAAW,MAAS;AACxB,UAAM,YAAY,aAAsC,WAAW,QAAQ;AAC3E,QAAI,cAAc,QAAQ,OAAO,cAAc,UAAU;AACvD,aAAO;IACT;AAEA,QAAI,UAAmB;AACvB,eAAW,OAAO,YAAY;AAC5B,UAAI,YAAY,QAAQ,OAAO,YAAY,UAAU;AACnD,eAAO;MACT;AACA,gBAAW,QAAoC,GAAG;IACpD;AACA,WAAO;EACT;AAEA,QAAMC,QAAO;IACX;IACA;IACA,CAAC,GAAG,UAAU,GAAG,UAAU;IAC3B;EACF;AAGA,MAAI,CAAC,sBAAsB,YAAY,GAAG;AACxC,WAAO,IAAI,MAAMA,OAAM;MACrB,IAAI,QAAQD,OAAM,UAAU;AAC1B,cAAM,WAAW,iBAAiB,QAAQA,OAAM,QAAQ;AACxD,YAAI,SAAS,QAAS,QAAO,SAAS;AAEtC,cAAM,MAAM,OAAO,QAAQ;AAC3B,YAAI,OAAO,OAAO,QAAQ,YAAY,SAAS,QAAQ,KAAK;AAG1D,cAAI,MAAM,QAAQ,GAAG,KAAK,SAAS,SAAS,UAAU;AACpD,mBAAO,IAAI;UACb;AAEA,gBAAM,YAAY,IAAI,SAAS,IAAI;AACnC,cAAI,cAAc,OAAW,QAAO;AACpC,iBAAO;YACL;YACA;YACA,CAAC,GAAG,YAAY,SAAS,IAAI;YAC7B;UACF;QACF;AACA,eAAO;MACT;IACF,CAAC;EACH;AAEA,SAAOC;AACT;AAiBA,SAAS,kBACPA,OACA,WACA,MACA,OACkB;AAClB,SAAO,IAAI,MAAMA,OAAM;IACrB,IAAI,QAAQD,OAAM,UAAU;AAC1B,YAAM,WAAW,iBAAiB,QAAQA,OAAM,QAAQ;AACxD,UAAI,SAAS,QAAS,QAAO,SAAS;AAItC,UAAI,MAAM,OAAO;AACf,eAAO;UACL;UACA,CAAC,GAAG,MAAM,SAAS,IAAI;UACvB,MAAM;QACR;MACF;AAGA,YAAM,eAAe,OAAO,QAAQ;AACpC,UAAI,gBAAgB,OAAO,iBAAiB,UAAU;AACpD,eAAO,aAAa,SAAS,IAAI;MACnC;AACA,aAAO;IACT;EACF,CAAC;AACH;AAiBO,SAAS,4BACd,WACA,OACA,OACkB;AAClB,QAAM,WAAW,MAAS,iBAAoB,WAAW,KAAK;AAC9D,QAAMC,QAAO;IACX;IACA;IACA,CAAC,OAAO,KAAK,CAAC;;IACd;IACA;;EACF;AAGA,MAAI,MAAM,cAAc,YAAY,WAAW,OAAO;AACpD,WAAO;MACLA;MACA;MACA;MACA;IACF;EACF;AAGA,MAAI,MAAM,cAAc,YAAY,WAAW,OAAO;AACpD,WAAO;MACLA;MACA;MACA;MACA;IACF;EACF;AAEA,SAAOA;AACT;AAYA,SAAS,0BACPA,OACA,WACA,OACA,OACkB;AAClB,SAAO,IAAI,MAAMA,OAAM;IACrB,IAAI,QAAQD,OAAM,UAAU;AAC1B,YAAM,WAAW,iBAAiB,QAAQA,OAAM,QAAQ;AACxD,UAAI,SAAS,QAAS,QAAO,SAAS;AAEtC,UAAI,SAAS,QAAQ,MAAM,OAAO;AAChC,cAAM,cAAc,MAAM,MAAM,SAAS,IAAI;AAI7C,eAAO;UACL;UACA;UACA,CAAC,SAAS,IAAI;UACd;QACF;MACF;AACA,aAAO;IACT;EACF,CAAC;AACH;AAYA,SAAS,0BACPC,OACA,WACA,OACA,OACkB;AAClB,SAAO,IAAI,MAAMA,OAAM;IACrB,IAAI,QAAQD,OAAM,UAAU;AAC1B,YAAM,WAAW,iBAAiB,QAAQA,OAAM,QAAQ;AACxD,UAAI,SAAS,QAAS,QAAO,SAAS;AAEtC,YAAM,eAAe,OAAO,QAAQ;AACpC,UAAI,gBAAgB,OAAO,iBAAiB,UAAU;AACpD,cAAM,YAAY,aAAa,SAAS,IAAI;AAC5C,YAAI,cAAc,OAAW,QAAO;AAEpC,YAAI,MAAM,OAAO;AACf,iBAAO;YACL;YACA;YACA,CAAC,SAAS,IAAI;YACd,MAAM;UACR;QACF;AACA,YAAI,sBAAsB,SAAS,EAAG,QAAO;AAC7C,eAAO;MACT;AACA,aAAO;IACT;EACF,CAAC;AACH;AAYA,SAAS,kCACP,WACA,OACA,YACA,OACkB;AAClB,QAAM,WAAW,MAAS;AACxB,UAAM,YAAY;MAChB;MACA;IACF;AACA,QAAI,cAAc,QAAQ,OAAO,cAAc,UAAU;AACvD,aAAO;IACT;AAEA,QAAI,UAAmB;AACvB,eAAW,OAAO,YAAY;AAC5B,UAAI,YAAY,QAAQ,OAAO,YAAY,UAAU;AACnD,eAAO;MACT;AACA,gBAAW,QAAoC,GAAG;IACpD;AACA,WAAO;EACT;AAEA,QAAMC,QAAO;IACX;IACA;IACA,CAAC,OAAO,KAAK,GAAG,GAAG,UAAU;IAC7B;IACA;;IACA;;EACF;AAGA,MAAI,MAAM,cAAc,YAAY,WAAW,OAAO;AACpD,WAAO;MACLA;MACA;MACA;MACA;MACA;IACF;EACF;AAGA,MAAI,MAAM,cAAc,YAAY,WAAW,OAAO;AACpD,WAAO;MACLA;MACA;MACA;MACA;MACA;IACF;EACF;AAEA,SAAOA;AACT;AAKA,SAAS,gCACPA,OACA,WACA,OACA,YACA,OACkB;AAClB,SAAO,IAAI,MAAMA,OAAM;IACrB,IAAI,QAAQD,OAAM,UAAU;AAC1B,YAAM,WAAW,iBAAiB,QAAQA,OAAM,QAAQ;AACxD,UAAI,SAAS,QAAS,QAAO,SAAS;AAEtC,UAAI,SAAS,QAAQ,MAAM,OAAO;AAEhC,eAAO;UACL;UACA;UACA,CAAC,GAAG,YAAY,SAAS,IAAI;UAC7B,MAAM,MAAM,SAAS,IAAI;QAC3B;MACF;AACA,aAAO;IACT;EACF,CAAC;AACH;AAKA,SAAS,gCACPC,OACA,WACA,OACA,YACA,OACkB;AAClB,SAAO,IAAI,MAAMA,OAAM;IACrB,IAAI,QAAQD,OAAM,UAAU;AAC1B,YAAM,WAAW,iBAAiB,QAAQA,OAAM,QAAQ;AACxD,UAAI,SAAS,QAAS,QAAO,SAAS;AAEtC,YAAM,eAAe,OAAO,QAAQ;AACpC,UAAI,gBAAgB,OAAO,iBAAiB,UAAU;AACpD,cAAM,YAAY,aAAa,SAAS,IAAI;AAC5C,YAAI,cAAc,OAAW,QAAO;AAEpC,YAAI,MAAM,OAAO;AACf,iBAAO;YACL;YACA;YACA,CAAC,GAAG,YAAY,SAAS,IAAI;YAC7B,MAAM;UACR;QACF;AACA,YAAI,sBAAsB,SAAS,EAAG,QAAO;AAC7C,eAAO;MACT;AACA,aAAO;IACT;EACF,CAAC;AACH;ACjlBO,SAAS,gBACdH,QAC2B;AAC3B,SACEA,WAAU,QACV,OAAOA,WAAU,YACjB,0BAA0BA,UACzBA,OAAc,sBAAsB,MAAM;AAE/C;AClCO,SAAS,kBAAkB,SAAyB;AAEzD,SAAO,QAAQ,QAAQ,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAK;AAC3D;AAcO,SAAS,uBAAuB,UAA4B;AACjE,SAAO,SAAS,IAAI,iBAAiB,EAAE,KAAK,GAAG;AACjD;ACvCO,IAAM,kBAAkB,uBAAO,IAAI,wBAAwB;AAyD3D,IAAe,mBAAf,MAEP;EAKE,YAA+B,QAA+B;AAA/B,SAAA,SAAA;EAAgC;EAJrD;EACA;EACF,sBAAsB;;EAK9B,eAAwC;AACtC,QAAI,CAAC,KAAK,iBAAiB;AACzB,WAAK,kBAAkB,KAAK,OAAO,aAAa;IAClD;AACA,WAAO,KAAK;EACd;;EAGA,eAAqB;AACnB,QAAI,KAAK,OAAO,cAAc,CAAC,KAAK,qBAAqB;AACvD,WAAK,OAAO,OAAO,EAAE,OAAO;IAC9B;EACF;;;;;EAMA,sBAAsB,UAAyB;AAC7C,SAAK,sBAAsB;EAC7B;;EAGA,uBAAgC;AAC9B,WAAO,KAAK;EACd;;;;;;;;;EAUA,kBAAkB,IAAsB;AACtC,UAAM,gBAAgB,KAAK;AAC3B,QAAI,CAAC,eAAe;AAClB,WAAK,sBAAsB;IAC7B;AACA,QAAI;AACF,SAAG;IACL,UAAA;AACE,UAAI,CAAC,eAAe;AAClB,aAAK,sBAAsB;MAC7B;IACF;AACA,SAAK,aAAa;EACpB;;EAGA,WAAkB;AAChB,WAAO,KAAK,OAAO;EACrB;;EAGA,iBAA2C;AACzC,WAAO,KAAK,OAAO;EACrB;;EAGA,gBAAyB;AACvB,WAAO,CAAC,CAAC,KAAK,OAAO;EACvB;;EAGA,qBAA8B;AAC5B,WAAO,CAAC,CAAC,KAAK,OAAO;EACvB;;EAGA,SAAkB;AAChB,WAAO,KAAK,OAAO,OAAO;EAC5B;;EAGA,aAAsC;AACpC,WAAO,KAAK,OAAO;EACrB;;EAGA,gBAAsC;AACpC,WAAO,KAAK,OAAO;EACrB;;EAGA,cAAuB;AACrB,WAAO,CAAC,CAAC,KAAK,OAAO;EACvB;;;;;;;;EASA,8BAA8B,KAAqB;AACjD,UAAM,SAAS,KAAK,OAAO,cAAc,CAAC;AAC1C,WAAO,uBAAuB,CAAC,GAAG,QAAQ,GAAG,CAAC;EAChD;;;;;;;;EASA,oBAA2C;AACzC,WAAO;MACL,OAAO,KAAK,OAAO;MACnB,aAAa,KAAK,OAAO;MACzB,cAAc,KAAK,OAAO;MAC1B,YAAY,KAAK,OAAO;MACxB,iBAAiB,KAAK,OAAO;MAC7B,QAAQ,KAAK,OAAO;MACpB,SAAS,KAAK,OAAO;MACrB,YAAY,KAAK,OAAO;MACxB,WAAW,KAAK,OAAO;IACzB;EACF;;EAGA,kBAA8B;AAC5B,QAAI,CAAC,KAAK,cAAc;AACtB,WAAK,eAAe,KAAK,mBAAmB;IAC9C;AACA,WAAO,KAAK;EACd;;EAMA,cAAoB;AAClB,SAAK,aAAa;EACpB;;EAGU,qBAAiC;AACzC,UAAM,OAAO;AACb,WAAO;MACL,IAAI,MAAe;AACjB,eAAO,KAAK,OAAO,OAAO;MAC5B;IACF;EACF;AACF;AAYO,IAAe,WAAf,MAAiE;;;;;EAiBtE,KAAK,WAAW,IAA6B;AAC3C,WAAO,KAAK,eAAe,EAAE,aAAa;EAC5C;;;;;EAMA,KAAK,UAAU,IAAgB;AAC7B,WAAO,KAAK,eAAe,EAAE,gBAAgB;EAC/C;AACF;AChQA,SAAS,YAAYK,QAAiB;AACpC,MAAI,gBAAgBA,MAAK,GAAG;AAC1B,WAAOA,OAAM,IAAI;EACnB;AACA,SAAOA;AACT;AA2DO,SAAS,cACd,MACqB;AACrB,MAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,WAAO;EACT;AAGA,MAAI,KAAK,WAAW,GAAG,GAAG;AACxB,WAAO,KACJ,MAAM,CAAC,EACP,MAAM,GAAG,EACT,IAAI,CAAA,YAAW;AAEd,YAAM,YAAY,QAAQ,QAAQ,OAAO,GAAG,EAAE,QAAQ,OAAO,GAAG;AAEhE,YAAM,WAAW,OAAO,SAAS;AACjC,aAAO,OAAO,UAAU,QAAQ,KAAK,YAAY,IAC7C,WACA;IACN,CAAC;EACL;AAGA,SAAO,KAAK,MAAM,GAAG,EAAE,IAAI,CAAA,YAAW;AACpC,UAAM,WAAW,OAAO,OAAO;AAC/B,WAAO,OAAO,UAAU,QAAQ,KAAK,YAAY,IAAI,WAAW;EAClE,CAAC;AACH;AAMA,SAAS,eACP,OACA,MACuC;AACvC,MAAI,KAAK,WAAW,GAAG;AACrB,UAAM,IAAI,oBAAoB,CAAC,GAAG,IAAI,+BAA+B;EACvE;AAEA,MAAI,UAAU;AAGd,WAAS,IAAI,GAAG,IAAI,KAAK,SAAS,GAAG,KAAK;AACxC,UAAM,UAAU,KAAK,CAAC;AAEtB,QAAI,OAAO,YAAY,UAAU;AAE/B,gBAAU,QAAQ,OAAO;AACzB,UAAI,YAAY,QAAW;AACzB,cAAM,IAAI,oBAAoB,MAAM,OAAO;MAC7C;IACF,WAAW,OAAO,YAAY,UAAU;AAEtC,UAAI,QAAQ,OAAO,OAAO,QAAQ,QAAQ,YAAY;AACpD,kBAAU,QAAQ,IAAI,OAAO;AAC7B,YAAI,YAAY,QAAW;AACzB,gBAAM,IAAI;YACR;YACA;YACA,cAAc,OAAO;UACvB;QACF;MACF,OAAO;AACL,cAAM,IAAI;UACR;UACA;UACA,4BAA4B,OAAO;QACrC;MACF;IACF,OAAO;AACL,YAAM,IAAI;QACR;QACA;QACA,8BAA8B,OAAO,OAAO;MAC9C;IACF;EACF;AAEA,QAAM,YAAY,KAAK,KAAK,SAAS,CAAC;AACtC,SAAO,EAAE,QAAQ,SAAS,KAAK,UAAU;AAC3C;AAKA,SAAS,eACP,OACA,MACK;AACL,MAAI,KAAK,WAAW,GAAG;AACrB,WAAO;EACT;AAEA,QAAM,EAAE,QAAQ,IAAI,IAAI,eAAe,OAAO,IAAI;AAElD,MAAI,OAAO,QAAQ,UAAU;AAE3B,QAAI,OAAO,OAAO,OAAO,OAAO,QAAQ,YAAY;AAClD,aAAO,OAAO,IAAI,GAAG;IACvB;AACA,WAAO,OAAO,GAAG;EACnB,WAAW,OAAO,QAAQ,UAAU;AAElC,QAAI,OAAO,OAAO,OAAO,OAAO,QAAQ,YAAY;AAClD,aAAO,OAAO,IAAI,GAAG;IACvB;AACA,UAAM,IAAI,MAAM,4BAA4B,GAAG,cAAc;EAC/D;AAEA,QAAM,IAAI,MAAM,qBAAqB,OAAO,GAAG,EAAE;AACnD;AASA,SAAS,UACP,OACA,WACM;AACN,QAAM,OAAO,cAAc,UAAU,IAAI;AACzC,QAAM,EAAE,QAAQ,IAAI,IAAI,eAAe,OAAO,IAAI;AAElD,MAAI,OAAO,QAAQ,UAAU;AAI3B,QAAI,gBAAgB,MAAM,GAAG;AAE3B,YAAM,MAAO,OAAe,GAAG;AAC/B,UAAI,OAAO,OAAO,IAAI,QAAQ,YAAY;AACxC,YAAI,IAAI,UAAU,KAAK;MACzB,OAAO;AACL,cAAM,IAAI,MAAM,wBAAwB,GAAG,2BAA2B;MACxE;IACF,WAAW,OAAO,OAAO,OAAO,OAAO,QAAQ,YAAY;AAEzD,aAAO,IAAI,KAAK,UAAU,KAAK;IACjC,OAAO;AAEL,YAAM,MAAM,OAAO,GAAG;AACtB,UAAI,OAAO,OAAO,IAAI,QAAQ,YAAY;AACxC,YAAI,IAAI,UAAU,KAAK;MACzB,OAAO;AACL,cAAM,IAAI,MAAM,wBAAwB,GAAG,aAAa;MAC1D;IACF;EACF,WAAW,OAAO,QAAQ,UAAU;AAElC,QAAI,OAAO,UAAU,OAAO,OAAO,WAAW,YAAY;AACxD,aAAO,OAAO,KAAK,UAAU,KAAK;IACpC,OAAO;AACL,YAAM,IAAI,MAAM,kCAAkC,GAAG,cAAc;IACrE;EACF,OAAO;AACL,UAAM,IAAI,MAAM,qBAAqB,OAAO,GAAG,EAAE;EACnD;AACF;AAKA,SAAS,aACP,OACA,WACM;AACN,QAAM,OAAO,cAAc,UAAU,IAAI;AACzC,QAAM,EAAE,QAAQ,IAAI,IAAI,eAAe,OAAO,IAAI;AAElD,MAAI,OAAO,QAAQ,UAAU;AAG3B,QAAI,OAAO,UAAU,OAAO,OAAO,WAAW,YAAY;AACxD,aAAO,OAAO,GAAG;IACnB,OAAO;AAGL,YAAM,YAAa,OAAe,eAAe;AACjD,UAAI,aAAa,OAAO,UAAU,mBAAmB,YAAY;AAC/D,kBAAU,eAAe,GAAG;MAC9B,OAAO;AACL,cAAM,IAAI,MAAM,2BAA2B,GAAG,aAAa;MAC7D;IACF;EACF,WAAW,OAAO,QAAQ,UAAU;AAElC,QAAI,OAAO,UAAU,OAAO,OAAO,WAAW,YAAY;AACxD,aAAO,OAAO,KAAK,CAAC;IACtB,OAAO;AACL,YAAM,IAAI,MAAM,kCAAkC,GAAG,cAAc;IACrE;EACF,OAAO;AACL,UAAM,IAAI,MAAM,qBAAqB,OAAO,GAAG,EAAE;EACnD;AACF;AAKA,SAAS,cACP,OACA,WACM;AACN,QAAM,OAAO,cAAc,UAAU,IAAI;AACzC,QAAM,EAAE,QAAQ,IAAI,IAAI,eAAe,OAAO,IAAI;AAElD,MAAI,OAAO,QAAQ,UAAU;AAI3B,QAAI,gBAAgB,MAAM,GAAG;AAE3B,YAAM,MAAO,OAAe,GAAG;AAC/B,UAAI,OAAO,OAAO,IAAI,QAAQ,YAAY;AACxC,YAAI,IAAI,UAAU,KAAK;MACzB,OAAO;AACL,cAAM,IAAI;UACR,4BAA4B,GAAG;QACjC;MACF;IACF,WAAW,OAAO,OAAO,OAAO,OAAO,QAAQ,YAAY;AAEzD,aAAO,IAAI,KAAK,UAAU,KAAK;IACjC,OAAO;AAEL,YAAM,MAAM,OAAO,GAAG;AACtB,UAAI,OAAO,OAAO,IAAI,QAAQ,YAAY;AACxC,YAAI,IAAI,UAAU,KAAK;MACzB,OAAO;AACL,cAAM,IAAI,MAAM,4BAA4B,GAAG,aAAa;MAC9D;IACF;EACF,WAAW,OAAO,QAAQ,UAAU;AAElC,QACE,OAAO,UACP,OAAO,UACP,OAAO,OAAO,WAAW,cACzB,OAAO,OAAO,WAAW,YACzB;AACA,aAAO,OAAO,KAAK,CAAC;AACpB,aAAO,OAAO,KAAK,UAAU,KAAK;IACpC,OAAO;AACL,YAAM,IAAI,MAAM,mCAAmC,GAAG,cAAc;IACtE;EACF,OAAO;AACL,UAAM,IAAI,MAAM,qBAAqB,OAAO,GAAG,EAAE;EACnD;AACF;AAKA,SAAS,WACP,OACA,WACM;AACN,QAAM,WAAW,cAAc,UAAU,IAAI;AAC7C,QAAM,SAAS,cAAc,UAAU,IAAI;AAG3C,MACE,SAAS,WAAW,OAAO,UAC3B,SAAS,MAAM,GAAG,EAAE,EAAE,MAAM,CAAC,SAAS,MAAM,YAAY,OAAO,CAAC,CAAC,GACjE;AAEA,UAAM,YAAY,SAAS,SAAS,SAAS,CAAC;AAC9C,UAAM,UAAU,OAAO,OAAO,SAAS,CAAC;AAExC,QAAI,OAAO,cAAc,YAAY,OAAO,YAAY,UAAU;AAChE,YAAM,EAAE,OAAO,IAAI,eAAe,OAAO,SAAS,MAAM,GAAG,EAAE,CAAC;AAG9D,UAAI,OAAO,QAAQ,OAAO,OAAO,SAAS,YAAY;AACpD,eAAO,KAAK,WAAW,OAAO;AAC9B;MACF;AAMA,YAAMA,SAAQ,YAAY,eAAe,OAAO,QAAQ,CAAC;AACzD,mBAAa,OAAO,EAAE,IAAI,UAAU,MAAM,UAAU,KAAK,CAAC;AAK1D,gBAAU,OAAO,EAAE,IAAI,OAAO,MAAM,UAAU,MAAM,OAAAA,OAAM,CAAC;AAC3D;IACF;EACF;AAIA,QAAMA,SAAQ,YAAY,eAAe,OAAO,QAAQ,CAAC;AACzD,eAAa,OAAO,EAAE,IAAI,UAAU,MAAM,UAAU,KAAK,CAAC;AAC1D,YAAU,OAAO,EAAE,IAAI,OAAO,MAAM,UAAU,MAAM,OAAAA,OAAM,CAAC;AAC7D;AAKA,SAAS,WACP,OACA,WACM;AACN,QAAM,WAAW,cAAc,UAAU,IAAI;AAI7C,QAAMA,SAAQ,YAAY,eAAe,OAAO,QAAQ,CAAC;AAGzD,YAAU,OAAO,EAAE,IAAI,OAAO,MAAM,UAAU,MAAM,OAAAA,OAAM,CAAC;AAC7D;AAKA,SAAS,WACP,OACA,WACS;AACT,QAAM,OAAO,cAAc,UAAU,IAAI;AACzC,QAAM,cAAc,eAAe,OAAO,IAAI;AAG9C,SAAO,KAAK,UAAU,WAAW,MAAM,KAAK,UAAU,UAAU,KAAK;AACvE;AASO,IAAM,sBAAN,MAA8C;EACnD,YAAoB,WAAqB;AAArB,SAAA,YAAA;EAAsB;;;;EAK1C,eAAe,WAAqC;AAClD,YAAQ,UAAU,IAAI;MACpB,KAAK;AACH,kBAAU,KAAK,WAAW,SAAS;AACnC;MACF,KAAK;AACH,qBAAa,KAAK,WAAW,SAAS;AACtC;MACF,KAAK;AACH,sBAAc,KAAK,WAAW,SAAS;AACvC;MACF,KAAK;AACH,mBAAW,KAAK,WAAW,SAAS;AACpC;MACF,KAAK;AACH,mBAAW,KAAK,WAAW,SAAS;AACpC;MACF,KAAK;AACH,YAAI,CAAC,WAAW,KAAK,WAAW,SAAS,GAAG;AAC1C,gBAAM,IAAI,MAAM,mCAAmC,UAAU,IAAI,EAAE;QACrE;AACA;MACF;AAEE,cAAM,IAAI;UACR,qCAAsC,UAAkB,EAAE;QAC5D;IACJ;EACF;;;;EAKA,WAAW,OAAwB;AACjC,eAAW,aAAa,OAAO;AAC7B,WAAK,eAAe,SAAS;IAC/B;EACF;AACF;ACjcO,IAAM,uBAAuB;AAM7B,IAAM,sBAAsB;AAwB5B,SAAS,0BAA0B,KAAsB;AAC9D,SAAO,IAAI,WAAW,oBAAoB;AAC5C;AAQO,SAAS,YAAYC,MAAuB;AACjD,QAAMC,OAAMD,KAAI,OAAO,mBAAmB;AAC1C,MAAI,CAACC,KAAK,QAAO;AACjB,QAAM,OAAOA,KAAI,KAAK;AACtB,SAAO,KAAK,SAAS;AACvB;AAQO,SAAS,aAAaD,MAAgC;AAC3D,QAAMC,OAAMD,KAAI,OAAO,mBAAmB;AAC1C,MAAI,CAACC,KAAK,QAAO,CAAC;AAElB,QAAM,SAA2B,CAAC;AAElC,QAAM,YAAYA,KAAI,IAAI,WAAW;AACrC,MAAI,OAAO,cAAc,WAAW;AAClC,WAAO,YAAY;EACrB;AAEA,QAAM,gBAAgBA,KAAI,IAAI,eAAe;AAC7C,MAAI,OAAO,kBAAkB,UAAU;AACrC,WAAO,gBAAgB;EACzB;AAEA,SAAO;AACT;AASO,SAAS,cAAcD,MAAc,MAA8B;AACxE,QAAMC,OAAMD,KAAI,OAAO,mBAAmB;AAE1C,MAAI,KAAK,cAAc,QAAW;AAChC,IAAAC,KAAI,IAAI,aAAa,KAAK,SAAS;EACrC;AAEA,MAAI,KAAK,kBAAkB,QAAW;AACpC,IAAAA,KAAI,IAAI,iBAAiB,KAAK,aAAa;EAC7C;AAEA,EAAAD,KAAI,OAAO;AACb;ACmEO,SAAS,iBACdE,SAC0B;AAC1B,SAAOA,QAAO,SAASA,QAAO,UAAU;AAC1C;AAKO,SAAS,aACdA,SACsB;AACtB,SACEA,QAAO,UAAU,WACjB;IACE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;EACF,EAAE,SAASA,QAAO,SAAS;AAE/B;AAEO,SAAS,cAAcH,QAAiD;AAC7E,SACE,OAAOA,WAAU,YACjBA,WAAU,QACV,CAAC,MAAM,QAAQA,MAAK,KACpB,EAAEA,kBAAiB;AAEvB;ACpMO,SAAS,mBACd,OACA,WACA,kBAC0B;AAC1B,MAAI,OAAO,cAAc,UAAU;AACjC,UAAM,IAAI,MAAM,yBAAyB;EAC3C;AAEA,MAAI,OAAO,qBAAqB,UAAU;AACxC,UAAM,IAAI,MAAM,gCAAgC;EAClD;AAEA,QAAM,SAAS,EAAE,GAAG,iBAAiB;AAErC,aAAW,CAAC,KAAK,SAAS,KAAK,OAAO,QAAQ,MAAM,MAAM,GAAG;AAC3D,UAAM,gBAAgB,UAAU,GAAG;AAEnC,UAAM,uBACJ,iBAAiB,GAAoC;AAEvD,WAAO,GAA0B,IAAI;MACnC;MACA;MACA;IACF;EACF;AAEA,SAAO;AACT;AAKO,SAAS,WACd,OACA,WACA,kBACO;AAEP,MAAI,MAAM,UAAU,OAAO;AACzB,WAAO;EACT;AAGA,MAAI,MAAM,UAAU,WAAY,MAAc,cAAc,OAAO;AACjE,WAAO;EACT;AAEA,MAAI,cAAc,UAAa,qBAAqB,QAAW;AAC7D,UAAM,IAAI,MAAM,kDAAkD;EACpE;AAEA,UAAQ,MAAM,OAAO;IACnB,KAAK;AACH,aAAO,cAAc,SAAY,YAAa,oBAAoB;IACpE,KAAK;AACH,aAAO,cAAc,SAAY,YAAa,oBAAoB;IACpE,KAAK;IACL,KAAK,eAAe;AAClB,UAAI,cAAc,QAAW;AAC3B,eAAO,oBAAoB,CAAC;MAC9B;AAEA,YAAM,YAAY;AAClB,YAAM,YAAY,MAAM;AACxB,YAAM,kBAAkB,uBAAuB,SAAS;AAExD,aAAO,UAAU;QAAI,CAAAI,UACnB,WAAW,WAAWA,OAAM,eAAwB;MACtD;IACF;IACA,KAAK,UAAU;AACb,UAAI,CAAC,cAAc,SAAS,KAAK,cAAc,QAAW;AACxD,cAAM,IAAI,MAAM,4BAA4B;MAC9C;AAEA,YAAM,kBAAkB,aAAa,CAAC;AAEtC,UAAI,CAAC,cAAc,gBAAgB,KAAK,qBAAqB,QAAW;AACtE,cAAM,IAAI,MAAM,mCAAmC;MACrD;AAEA,YAAM,yBAAyB,oBAAoB,CAAC;AAEpD,YAAM,SAAS,EAAE,GAAG,uBAAuB;AAC3C,iBAAW,CAAC,KAAK,WAAW,KAAK,OAAO,QAAQ,MAAM,MAAM,GAAG;AAC7D,cAAM,kBAAkB,gBAAgB,GAAG;AAC3C,cAAM,yBAAyB,uBAAuB,GAAG;AAEzD,eAAO,GAA0B,IAAI;UACnC;UACA;UACA;QACF;MACF;AAEA,aAAO;IACT;IACA,KAAK,QAAQ;AACX,UAAI,cAAc,QAAW;AAC3B,eAAO,oBAAoB,CAAC;MAC9B;AAEA,YAAM,YAAY;AAClB,aAAO,mBAAmB,WAAoB,UAAU,KAAK;IAC/D;IACA,KAAK,UAAU;AACb,UAAI,CAAC,cAAc,SAAS,KAAK,cAAc,QAAW;AACxD,cAAM,IAAI,MAAM,4BAA4B;MAC9C;AAEA,YAAM,kBAAmB,aAAuC,CAAC;AACjE,YAAM,SAAgC,CAAC;AAIvC,iBAAW,OAAO,OAAO,KAAK,eAAe,GAAG;AAC9C,cAAM,kBAAkB,gBAAgB,GAAG;AAG3C,cAAM,yBAAyB,uBAAuB,MAAM,KAAK;AAEjE,eAAO,GAAG,IAAI;UACZ,MAAM;UACN;UACA;QACF;MACF;AAEA,aAAO;IACT;IACA;AACE,UAAI,MAAM,UAAU,WAAW,MAAM,cAAc,UAAU;AAC3D,cAAM,UAAW,aAAqB,CAAC;AACvC,cAAM,iBAAkB,oBAA4B,CAAC;AACrD,cAAM,SAAS,EAAE,GAAG,eAAe;AAEnC,YAAI,OAAO,YAAY,YAAY,YAAY,MAAM;AACnD,iBAAO,cAAc,SAAY,YAAY;QAC/C;AAEA,mBAAW,CAAC,KAAK,SAAS,KAAK,OAAO,QAAQ,MAAM,KAAK,GAAG;AAC1D,gBAAM,WAAW,QAAQ,GAAG;AAC5B,gBAAM,kBAAkB,eAAe,GAAG;AAC1C,iBAAO,GAAG,IAAI,WAAW,WAAW,UAAU,eAAe;QAC/D;AACA,eAAO;MACT;AAGA,UAAI,MAAM,UAAU,WAAW,MAAM,cAAc,sBAAsB;AACvE,eAAO;UACL;UACA;UACA;QACF;MACF;AAEA,aAAO,cAAc,SAAY,YAAY;EACjD;AACF;AAMA,SAAS,wBACP,OACA,WACA,kBACO;AACP,QAAM,UAAW,aAAuC,CAAC;AACzD,QAAM,iBAAkB,oBAA8C,CAAC;AAGvE,QAAM,oBACJ,QAAQ,MAAM,eAAe,KAAK,eAAe,MAAM,eAAe;AAExE,MAAI,OAAO,sBAAsB,UAAU;AAEzC,WAAO;EACT;AAGA,QAAM,eAAe,MAAM,SAAS,iBAAiB;AAErD,MAAI,CAAC,cAAc;AAEjB,WAAO,cAAc,SAAY,YAAY;EAC/C;AAKA,QAAM,0BAA0B,eAAe,MAAM,eAAe;AACpE,QAAM,4BACJ,4BAA4B,oBAAoB,mBAAmB;AAErE,SAAO,WAAW,cAAc,WAAW,yBAAkC;AAC/E;AAoBA,SAAS,mBACP,OACA,WAC2B;AAC3B,QAAM,kBAAkB,uBAAuB,SAAS;AAExD,SAAO,MAAM,IAAI,CAAA,SAAQ,kBAAkB,MAAM,WAAW,eAAe,CAAC;AAC9E;AAKA,SAAS,kBACP,MACA,WACA,iBACyB;AAEzB,QAAM,aAAa,WAAW,WAAW,KAAK,MAAM,eAAe;AAEnE,SAAO;IACL,IAAI,KAAK;IACT,QAAQ,KAAK;IACb,OAAO,KAAK;IACZ,iBAAiB,KAAK;IACtB,MAAM;IACN,UAAU,KAAK,SAAS;MAAI,CAAA,UAC1B,kBAAkB,OAAO,WAAW,eAAe;IACrD;EACF;AACF;AEjQO,IAAM,sBAAN,cAAkC,iBAAwC;EACvE,eAAe;;EAGvB,UAAUJ,SAAgB,GAAS;AACjC,SAAK,eAAe;AAClB,SAAK,aAAa,EAAkB,UAAUA,MAAK;AACrD,SAAK,aAAa;EACpB;;EAGA,UAAUA,SAAgB,GAAS;AACjC,SAAK,eAAe;AAClB,SAAK,aAAa,EAAkB,UAAUA,MAAK;AACrD,SAAK,aAAa;EACpB;;EAGA,WAAmB;AACjB,UAAM,YAAY,KAAK,aAAa;AACpC,UAAM,iBAAiB,UAAU;AACjC,UAAM,UAAU,KAAK,WAAW;AAChC,QAAI,SAAS;AACX,YAAMK,QAAO,QAAQ,IAAK,UAAkB,EAAE;AAC9C,UAAIA,SAAQA,MAAK,SAAS,WAAW;AACnC,cAAM,cAAcA;AACpB,eAAO,iBAAiB,YAAY;MACtC;IACF;AACA,QAAI,mBAAmB,KAAK,KAAK,cAAc;AAC7C,aAAO;IACT;AAEA,UAAM,cAAc,KAAK,eAAe;AACxC,QAAI,gBAAgB,QAAW;AAC7B,aAAO;IACT;AACA,WAAO;EACT;;EAGmB,qBAAiC;AAClD,UAAM,OAAO;AACb,WAAO;MACL,IAAI,MAAe;AACjB,eAAO,KAAK,OAAO;MACrB;IACF;EACF;AACF;ACnDO,IAAM,aAAN,cAAyB,SAAgC;EAC9D,CAAC,eAAe;EAEhB,YAAY,QAA+C;AACzD,UAAM;AACN,SAAK,eAAe,IAAI,IAAI,oBAAoB,MAAM;EACxD;;EAGA,UAAUL,QAAsB;AAC9B,SAAK,eAAe,EAAE,UAAUA,MAAK;EACvC;;EAGA,UAAUA,QAAsB;AAC9B,SAAK,eAAe,EAAE,UAAUA,MAAK;EACvC;;EAGA,MAAc;AACZ,WAAO,KAAK,eAAe,EAAE,SAAS;EACxC;EAEA,UAAkB;AAChB,WAAO,KAAK,IAAI;EAClB;EAEA,SAAiB;AACf,WAAO,KAAK,IAAI;EAClB;EAEA,CAAC,OAAO,WAAW,EAAE,MAA+B;AAClD,QAAI,SAAS,UAAU;AACrB,aAAO,OAAO,KAAK,IAAI,CAAC;IAC1B;AACA,WAAO,KAAK,IAAI;EAClB;AACF;ACfA,SAAS,iBAAiBA,QAAyB;AACjD,QAAMM,QAAO,IAAI,SAAS;AAE1B,EAAAA,MAAK,OAAO,GAAGN,MAAK;AAEpB,SAAOM;AACT;AAKA,SAAS,oBAAoBN,QAA4B;AACvD,QAAM,UAAU,IAAI,YAAY;AAChC,UAAQ,UAAUA,MAAK;AACvB,SAAO;AACT;AAKA,SAAS,iBACPA,QACA,OAEoB;AACpB,MAAI,CAAC,iBAAiB,KAAK,GAAG;AAC5B,WAAOA;EACT;AAEA,QAAMO,QAAO,IAAI,SAAS;AAE1B,aAAWH,SAAQJ,QAAO;AACxB,UAAM,gBAAgB,kBAAkBI,OAAM,MAAM,KAAK;AACzD,QAAI,YAAY,aAAa,GAAG;AAC9B,MAAAG,MAAK,cAAc,aAAa;IAClC,OAAO;AACL,MAAAA,MAAK,KAAK,aAAa;IACzB;EACF;AAEA,SAAOA;AACT;AAKA,SAAS,wBACPP,QACA,OAE2B;AAC3B,MAAI,CAAC,iBAAiB,KAAK,GAAG;AAC5B,WAAOA;EACT;AAEA,QAAMO,QAAO,IAAI,gBAAgB;AAEjC,aAAWH,SAAQJ,QAAO;AACxB,UAAM,gBAAgB,kBAAkBI,OAAM,MAAM,KAAK;AACzD,QAAI,YAAY,aAAa,GAAG;AAC9B,MAAAG,MAAK,cAAc,aAAa;IAClC,OAAO;AACL,MAAAA,MAAK,KAAK,aAAa;IACzB;EACF;AAEA,SAAOA;AACT;AAKA,SAAS,mBACPP,QACA,OACoC;AACpC,MAAI,CAAC,iBAAiB,KAAK,GAAG;AAC5B,WAAOA;EACT;AAEA,QAAME,OAAM,IAAI,QAAQ;AAGxB,aAAW,KAAK,OAAO,KAAK,MAAM,MAAM,GAAG;AACzC,UAAM,eAAe,MAAM,OAAO,CAAC;AACnC,UAAM,IAAIF,OAAM,CAAC;AAEjB,QAAI,MAAM,QAAW;AACnB,YAAM,iBAAiB,kBAAkB,GAAG,YAAY;AACxD,UAAI,YAAY,cAAc,GAAG;AAC/B,QAAAE,KAAI,aAAa,GAAG,cAAc;MACpC,OAAO;AACL,QAAAA,KAAI,IAAI,GAAG,cAAc;MAC3B;IACF,WAAW,iBAAiB,YAAY,GAAG;AAGzC,UAAI;AACJ,UAAI,aAAa,UAAU,YAAY,aAAa,UAAU,UAAU;AACtE,qBAAa,CAAC;MAChB,WACE,aAAa,UAAU,UACvB,aAAa,UAAU,eACvB;AACA,qBAAa,CAAC;MAChB,WAAW,aAAa,UAAU,QAAQ;AACxC,qBAAa;MACf,WAAW,aAAa,UAAU,WAAW;AAC3C,qBAAa;MACf;AAEA,UAAI,eAAe,QAAW;AAC5B,cAAM,iBAAiB,kBAAkB,YAAY,YAAY;AACjE,YAAI,YAAY,cAAc,GAAG;AAC/B,UAAAA,KAAI,aAAa,GAAG,cAAc;QACpC;MACF;IACF;EACF;AAOA,aAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQF,MAAK,GAAG;AAC1C,QAAI,CAAC,MAAM,OAAO,CAAC,GAAG;AACpB,cAAQ;QACN,4BAA4B,CAAC;MAC/B;AACA,MAAAE,KAAI,IAAI,GAAG,CAAC;IACd;EACF;AAEA,SAAOA;AACT;AAKA,SAAS,mBACPF,QACA,OACoC;AACpC,MAAI,CAAC,iBAAiB,KAAK,GAAG;AAC5B,WAAOA;EACT;AAEA,QAAME,OAAM,IAAI,QAAQ;AACxB,aAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQF,MAAK,GAAG;AAC1C,UAAM,iBAAiB,kBAAkB,GAAG,MAAM,KAAK;AACvD,QAAI,YAAY,cAAc,GAAG;AAC/B,MAAAE,KAAI,aAAa,GAAG,cAAc;IACpC,OAAO;AACL,MAAAA,KAAI,IAAI,GAAG,cAAc;IAC3B;EACF;AAEA,SAAOA;AACT;AAMO,SAAS,kBACdF,QACA,OACmB;AACnB,UAAQ,MAAM,OAAO;IACnB,KAAK,QAAQ;AACX,UAAI,OAAOA,WAAU,UAAU;AAC7B,cAAM,IAAI,MAAM,iBAAiB;MACnC;AAEA,aAAO,iBAAiBA,MAAK;IAC/B;IACA,KAAK,WAAW;AACd,UAAI,OAAOA,WAAU,UAAU;AAC7B,cAAM,IAAI,MAAM,iBAAiB;MACnC;AAEA,aAAO,oBAAoBA,MAAK;IAClC;IACA,KAAK,QAAQ;AACX,UAAI,CAAC,MAAM,QAAQA,MAAK,GAAG;AACzB,cAAM,IAAI,MAAM,gBAAgB;MAClC;AAEA,aAAO,iBAAiBA,QAAO,KAAK;IACtC;IACA,KAAK,eAAe;AAClB,UAAI,CAAC,MAAM,QAAQA,MAAK,GAAG;AACzB,cAAM,IAAI,MAAM,gBAAgB;MAClC;AAEA,aAAO,wBAAwBA,QAAO,KAAK;IAC7C;IACA,KAAK,UAAU;AACb,UAAI,CAAC,cAAcA,MAAK,GAAG;AACzB,cAAM,IAAI,MAAM,iBAAiB;MACnC;AAEA,aAAO,mBAAmBA,QAAO,KAAK;IACxC;IACA,KAAK,UAAU;AACb,UAAI,CAAC,cAAcA,MAAK,GAAG;AACzB,cAAM,IAAI,MAAM,iBAAiB;MACnC;AAEA,aAAO,mBAAmBA,QAAO,KAAK;IACxC;IACA,KAAK,SAAS;AACZ,UAAI,CAAC,aAAa,KAAK,GAAG;AACxB,cAAM,IAAI,MAAM,gBAAgB;MAClC;AAEA,aAAOA;IACT;IAEA,KAAK;AACH,YAAM,IAAI,MAAM,yBAAyB;IAE3C;AACE,YAAM,IAAI,MAAM,oBAAqB,MAAgB,KAAK,EAAE;EAChE;AACF;ACvOO,SAAS,+BACd,WACA,KACA,OACkB;AAClB,SAAO,oBAAuB,WAAW,CAAC,GAAG,GAAG,KAAK;AACvD;AAUO,SAAS,+BACd,WACA,OACA,OACkB;AAClB,SAAO,4BAA+B,WAAW,OAAO,KAAK;AAC/D;AAcO,SAAS,oBAAuBA,QAAgC;AACrE,MAAI,gBAAgBA,MAAK,GAAG;AAC1B,WAAOA,OAAM,QAAQ;EACvB;AACA,SAAOA;AACT;AAeO,SAAS,+BACd,WACA,KACA,OACkB;AAClB,SAAO,+BAAkC,WAAW,KAAK,KAAK;AAChE;AAaO,SAAS,mCACd,WACA,OACA,OACA,WACkB;AAClB,SAAO,+BAAkC,WAAW,OAAO,KAAK;AAClE;AC9DO,IAAM,uBAAN,cAIG,iBAAsB;;EAEtB,YAAY,oBAAI,IAAsC;EACtD;EAER,iBAAqC;AACnC,UAAM,UAAU,KAAK,WAAW;AAChC,QAAI,CAAC,SAAS;AACZ,aAAO;IACT;AAEA,UAAM,QAAQ,KAAK,SAAS;AAC5B,QAAI,CAAC,aAAa,MAAM,KAAK,GAAG;AAC9B,aAAO;IACT;AAEA,QAAI,CAAC,KAAK,kBAAkB;AAC1B,YAAM,YAAY,KAAK,aAAa;AACpC,YAAMK,QAAO,QAAQ,IAAI,UAAU,EAAE;AACrC,UAAI,CAACA,SAAQA,MAAK,SAAS,QAAQ;AACjC,eAAO;MACT;AAEA,YAAM,cAAsB,CAAC;AAC7B,eAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,oBAAY,KAAK,UAAU,IAAI,CAAC,CAAS;MAC3C;AAEA,WAAK,mBAAmB;QACtB;QACCA,MAAkB;MACrB;IACF;AAEA,WAAO,KAAK;EACd;;EAGA,uBACE,OACA,OACgC;AAChC,WAAO;MACL;MACA,aAAa;;MACb,cAAc,MAAM;AAClB,cAAM,YAAY,KAAK,aAAa;AACpC,cAAM,gBAAgB,UAAU,IAAI,KAAK;AACzC,YAAI,CAAC,iBAAiB,CAAC,YAAY,aAAa,GAAG;AACjD,gBAAM,IAAI,MAAM,+BAA+B,KAAK,EAAE;QACxD;AACA,eAAO;MACT;MACA,YAAY,KAAK,cAAc;MAC/B,iBAAiB,KAAK,mBAAmB;MACzC,QAAQ,MAAM,KAAK,OAAO;MAC1B,SAAS,KAAK,WAAW;IAC3B;EACF;;EAGA,iBAAiB,OAAiC;AAChD,UAAM,QAAQ,KAAK,SAAS;AAC5B,UAAM,YAAY,KAAK,aAAa;AACpC,UAAM,cAAc,KAAK,eAAe;AAGxC,QAAI,eAAe,aAAa,MAAM,KAAK,GAAG;AAC5C,aAAO,YAAY,KAAK;IAC1B;AAKA,UAAM,gBAAgB,UAAU,IAAI,KAAK;AACzC,QAAI,kBAAkB,QAAW;AAC/B,aAAO;IACT;AAEA,QAAI,aAAa,MAAM,KAAK,GAAG;AAE7B,aAAO;IACT,OAAO;AAGL,UAAI,YAAY,aAAa,GAAG;AAG9B,YACE,OAAO,kBAAkB,YACzB,kBAAkB,QAClB,YAAY,eACZ;AACA,iBAAQ,cAAsB,OAAO;QACvC,WACE,OAAO,kBAAkB,YACzB,kBAAkB,QAClB,qBAAqB,eACrB;AAEA,iBAAQ,cAAsB,gBAAgB;QAChD,OAAO;AAEL,iBAAO;QACT;MACF;AACA,aAAO;IACT;EACF;;EAGA,eAAe,OAAwC;AACrD,UAAM,QAAQ,KAAK,SAAS;AAC5B,UAAM,YAAY,KAAK,aAAa;AACpC,UAAM,cAAc,KAAK,eAAe;AAGxC,UAAM,gBAAgB,cACjB,YAAY,KAAK,IACjB,UAAU,IAAI,KAAK;AACxB,QAAI,kBAAkB,QAAW;AAC/B,aAAO;IACT;AAEA,QAAI,aAAa,MAAM,KAAK,GAAG;AAC7B,UAAI,KAAK,mBAAmB,GAAG;AAM7B,eAAO;UACL;UACA;UACA,MAAM;UACN;QACF;MACF;AAEA,aAAO;QACL;QACA;QACA,MAAM;MACR;IACF;AAKA,QAAI,CAAC,KAAK,mBAAmB,GAAG;AAC9B,aAAO;QACL,KAAK,uBAAuB,OAAO,MAAM,KAAuB;MAClE;IACF;AAKA,QAAI,aAAa,MAAM,KAAK,GAAG;AAC7B,YAAM,IAAI;QACR;MACF;IACF;AAEA,QAAI,aAAa,KAAK,UAAU,IAAI,KAAK;AACzC,QAAI,CAAC,YAAY;AACf,mBAAa;QACX,KAAK,uBAAuB,OAAO,MAAM,KAAuB;MAClE;AACA,WAAK,UAAU,IAAI,OAAO,UAAU;IACtC;AAEA,WAAO;EACT;;EAGA,qBAAqB,OAAeD,OAAqB;AACvD,UAAM,QAAQ,KAAK,SAAS;AAC5B,UAAM,YAAY,KAAK,aAAa;AACpC,UAAM,gBAAgB,kBAAkBA,OAAa,MAAM,KAAK;AAChE,QAAI,YAAY,aAAa,GAAG;AAC9B,gBAAU,gBAAgB,OAAO,aAAa;IAChD,OAAO;AACL,gBAAU,OAAO,OAAO,aAAa;IACvC;EACF;;EAGA,mBAAmBA,OAAqB;AACtC,UAAM,QAAQ,KAAK,SAAS;AAC5B,UAAM,YAAY,KAAK,aAAa;AACpC,UAAM,gBAAgB,kBAAkBA,OAAa,MAAM,KAAK;AAChE,QAAI,YAAY,aAAa,GAAG;AAC9B,gBAAU,cAAc,aAAa;IACvC,OAAO;AACL,gBAAU,KAAK,aAAa;IAC9B;EACF;;EAGA,qBAAqB,aAAqB,WAAyB;AACjE,UAAM,WAAW,oBAAI,IAAsC;AAE3D,eAAW,CAAC,aAAa,UAAU,KAAK,KAAK,UAAU,QAAQ,GAAG;AAChE,UAAI,cAAc,aAAa;AAE7B,iBAAS,IAAI,aAAa,UAAU;MACtC,WAAW,eAAe,cAAc,WAAW;AAEjD,iBAAS,IAAI,cAAc,WAAW,UAAU;MAClD;IAEF;AAEA,SAAK,YAAY;EACnB;;EAGA,qBAAqB,aAA2B;AAC9C,UAAM,WAAW,oBAAI,IAAsC;AAE3D,eAAW,CAAC,aAAa,UAAU,KAAK,KAAK,UAAU,QAAQ,GAAG;AAChE,UAAI,cAAc,aAAa;AAE7B,iBAAS,IAAI,aAAa,UAAU;MACtC,OAAO;AAEL,iBAAS,IAAI,cAAc,GAAG,UAAU;MAC1C;IACF;AAEA,SAAK,YAAY;EACnB;;EAGS,sBAA4B;AAEnC,eAAW,cAAc,KAAK,UAAU,OAAO,GAAG;AAChD,UAAI,cAAc,mBAAmB,YAAY;AAC/C,mBAAW,eAAe,EAAE,sBAAsB;MACpD;IACF;AAGA,SAAK,UAAU,MAAM;EACvB;;EAGmB,qBAAiC;AAClD,UAAM,OAAO;AACb,WAAO;MACL,IAAI,MAAe;AACjB,eAAO,KAAK,OAAO;MACrB;MACA,cAAc,WAAiC;AAC7C,cAAM,SACJ,KAAK,aAAa,EAClB,cAAc,SAAS;AACzB,aAAK,aAAa;AAClB,eAAO;MACT;MACA,gBAAgB,OAAe,WAAiC;AAC9D,cAAM,SACJ,KAAK,aAAa,EAClB,gBAAgB,OAAO,SAAS;AAClC,aAAK,aAAa;AAClB,eAAO;MACT;IACF;EACF;AACF;AASO,IAAe,cAAf,cAKG,SAAc;EACtB,CAAC,eAAe;EAEhB,YAAY,QAA6B;AACvC,UAAM;AACN,SAAK,eAAe,IAAI,KAAK,gBAAgB,MAAM;EACrD;;;EAUA,KACE,WACyB;AACzB,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,YAAM,gBAAgB,KAAK,eAAe,EAAE,iBAAiB,CAAC;AAC9D,UAAI,UAAU,eAAuB,CAAC,GAAG;AACvC,eAAO,KAAK,eAAe,EAAE,eAAe,CAAC;MAC/C;IACF;AACA,WAAO;EACT;EAEA,UAAU,WAA2D;AACnE,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,YAAM,gBAAgB,KAAK,eAAe,EAAE,iBAAiB,CAAC;AAC9D,UAAI,UAAU,eAAuB,CAAC,GAAG;AACvC,eAAO;MACT;IACF;AACA,WAAO;EACT;EAEA,IACE,UACc;AACd,UAAM,SAAuB,CAAC;AAC9B,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,YAAM,gBAAgB,KAAK,eAAe,EAAE,iBAAiB,CAAC;AAC9D,aAAO,KAAK,SAAS,eAAuB,CAAC,CAAC;IAChD;AACA,WAAO;EACT;EAEA,OAAO,WAAkE;AACvE,UAAM,SAAwB,CAAC;AAC/B,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,YAAM,gBAAgB,KAAK,eAAe,EAAE,iBAAiB,CAAC;AAC9D,UAAI,UAAU,eAAuB,CAAC,GAAG;AACvC,eAAO,KAAK,KAAK,eAAe,EAAE,eAAe,CAAC,CAAgB;MACpE;IACF;AACA,WAAO;EACT;EAEA,QAAQ,UAAqD;AAC3D,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,YAAM,gBAAgB,KAAK,eAAe,EAAE,iBAAiB,CAAC;AAC9D,eAAS,eAAuB,CAAC;IACnC;EACF;EAEA,KAAK,WAA4D;AAC/D,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,YAAM,gBAAgB,KAAK,eAAe,EAAE,iBAAiB,CAAC;AAC9D,UAAI,UAAU,eAAuB,CAAC,GAAG;AACvC,eAAO;MACT;IACF;AACA,WAAO;EACT;EAEA,MAAM,WAA4D;AAChE,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,YAAM,gBAAgB,KAAK,eAAe,EAAE,iBAAiB,CAAC;AAC9D,UAAI,CAAC,UAAU,eAAuB,CAAC,GAAG;AACxC,eAAO;MACT;IACF;AACA,WAAO;EACT;EAEA,MAAM,OAAgB,KAA6B;AACjD,UAAM,MAAM,KAAK;AAGjB,UAAM,aACJ,UAAU,SACN,IACA,QAAQ,IACN,KAAK,IAAI,MAAM,OAAO,CAAC,IACvB,KAAK,IAAI,OAAO,GAAG;AAG3B,UAAM,WACJ,QAAQ,SACJ,MACA,MAAM,IACJ,KAAK,IAAI,MAAM,KAAK,CAAC,IACrB,KAAK,IAAI,KAAK,GAAG;AAEzB,UAAM,SAAwB,CAAC;AAC/B,aAAS,IAAI,YAAY,IAAI,UAAU,KAAK;AAC1C,aAAO,KAAK,KAAK,eAAe,EAAE,eAAe,CAAC,CAAgB;IACpE;AACA,WAAO;EACT;EAEA,OAAO,OAAeA,OAAkB;AAEtC,SAAK,eAAe,EAAE,qBAAqB,KAAK;AAChD,SAAK,eAAe,EAAE,qBAAqB,OAAOA,KAAI;AACtD,SAAK,eAAe,EAAE,aAAa;EACrC;EAEA,OAAO,OAAe,KAAmB;AAEvC,SAAK,eAAe,EAAE,qBAAqB,OAAO,GAAG;AACrD,UAAM,YAAY,KAAK,eAAe,EAAE,aAAa;AAGrD,cAAU,OAAO,OAAO,GAAG;AAC3B,SAAK,eAAe,EAAE,aAAa;EACrC;EAEA,KAAKA,OAAkB;AACrB,SAAK,eAAe,EAAE,mBAAmBA,KAAI;AAC7C,SAAK,eAAe,EAAE,aAAa;EACrC;;;;;;;;EASA,IAAI,OAAeA,OAAkB;AACnC,UAAM,YAAY,KAAK,eAAe;AACtC,UAAM,QAAQ,UAAU,SAAS;AACjC,UAAM,YAAY,UAAU,aAAa;AAKzC,QAAI,iBAAiB,MAAM,KAAK,GAAG;AACjC,YAAM,cAAc,UAAU,eAAe,KAAK;AAClD,UAAI,eAAe,2BAA2B,aAAoBA,KAAI,GAAG;AACvE,kBAAU,aAAa;AACvB;MACF;IAEF;AAIA,QACE,SAAS,aACT,OAAQ,UAA8B,QAAQ,YAC9C;AAGA,YAAM,gBAAgB,kBAAkBA,OAAa,MAAM,KAAK;AAC9D,gBAA8B;QAC9B;QACA;MACF;IACF,OAAO;AAEL;AAAE,gBAAuB,OAAO,OAAO,CAAC;AACxC,gBAAU,qBAAqB,OAAOA,KAAI;IAC5C;AACA,cAAU,aAAa;EACzB;EAEA,cAAc,WAAiC;AAC7C,UAAM,gBAAgB,KAAK,eAAe,EAAE,aAAa;AAGzD,UAAM,SAAS,cAAc,cAAc,SAAS;AACpD,SAAK,eAAe,EAAE,aAAa;AACnC,WAAO;EACT;EAEA,gBAAgB,OAAe,WAAiC;AAC9D,UAAM,gBAAgB,KAAK,eAAe,EAAE,aAAa;AAGzD,UAAM,SAAS,cAAc,gBAAgB,OAAO,SAAS;AAC7D,SAAK,eAAe,EAAE,aAAa;AACnC,WAAO;EACT;EAEA,IAAI,OAAwC;AAC1C,WAAO,KAAK,eAAe,EAAE,eAAe,KAAK;EAGnD;EAEA,UAAkB;AAChB,UAAM,cAAc,KAAK,eAAe,EAAE,eAAe;AACzD,QAAI,aAAa;AACf,aAAO,CAAC,GAAG,WAAW;IACxB;AACA,UAAM,SAAiB,CAAC;AACxB,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,aAAO,KAAK,KAAK,eAAe,EAAE,iBAAiB,CAAC,CAAS;IAC/D;AACA,WAAO;EACT;EAEA,SAAiB;AACf,UAAM,QAAQ,KAAK,eAAe,EAAE,SAAS;AAC7C,UAAM,cAAc,KAAK,eAAe,EAAE,eAAe;AACzD,UAAM,YAAY,KAAK,eAAe,EAAE,aAAa;AAGrD,UAAM,aAAa,eAAgB,UAAU,OAAO;AAIpD,QACE,iBAAiB,MAAM,KAAK,KAC3B,aAAa,MAAM,KAAK,KAAK,MAAM,MAAM,cAAc,UACxD;AACA,YAAM,kBAAkB,uBAAuB,MAAM,KAAK;AAC1D,aAAO,WAAW;QAAI,CAAAA,UACpB,WAAW,MAAM,OAAOA,OAAM,eAAsB;MACtD;IACF;AAGA,WAAO,cAAc,CAAC;EACxB;EAEA,CAAC,OAAO,QAAQ,IAAmC;AACjD,QAAI,QAAQ;AACZ,WAAO;MACL,MAAM,MAAmC;AACvC,YAAI,QAAQ,KAAK,QAAQ;AACvB,iBAAO;YACL,OAAO,KAAK,eAAe,EAAE,eAAe,OAAO;YACnD,MAAM;UACR;QACF;AACA,eAAO,EAAE,OAAO,QAAW,MAAM,KAAK;MACxC;MACA,CAAC,OAAO,QAAQ,IAAI;AAClB,eAAO;MACT;IACF;EACF;EAEA,IAAI,SAAiB;AACnB,UAAM,cAAc,KAAK,eAAe,EAAE,eAAe;AACzD,QAAI,aAAa;AACf,aAAO,YAAY;IACrB;AACA,UAAM,YAAY,KAAK,eAAe,EAAE,aAAa;AAGrD,WAAO,UAAU;EACnB;AACF;AAEA,SAAS,eAAkB,OAAY,OAA0B;AAC/D,QAAM,SAAc,CAAC;AACrB,MAAI,QAAQ;AAEZ,aAAW,MAAM,OAAO;AACtB,QAAI,GAAG,WAAW,QAAW;AAC3B,aAAO,KAAK,GAAG,MAAM,MAAM,OAAO,QAAQ,GAAG,MAAM,CAAC;AACpD,eAAS,GAAG;IACd,WAAW,GAAG,WAAW,QAAW;AAClC,eAAS,GAAG;IACd,WAAW,GAAG,WAAW,QAAW;AAClC,aAAO,KAAK,GAAG,GAAG,MAAM;IAC1B;EACF;AAEA,MAAI,QAAQ,MAAM,QAAQ;AACxB,WAAO,KAAK,GAAG,MAAM,MAAM,KAAK,CAAC;EACnC;AAEA,SAAO;AACT;ACvmBO,IAAM,mBAAN,cAIG,qBAAqD;AAAC;ACAzD,IAAM,UAAN,cAGG,YAA+B;EACpB,gBACjB,QAC+B;AAC/B,WAAO,IAAI,iBAAiB,MAAM;EACpC;AACF;ACRO,IAAM,0BAAN,cAIG,qBAAqD;;EAE7D,KAAK,MAAc,IAAkB;AACnC,UAAM,YAAY,KAAK,aAAa;AACpC,cAAU,KAAK,MAAM,EAAE;AACvB,SAAK,aAAa;EACpB;;EAGA,IAAI,OAAeA,OAAqB;AACtC,UAAM,YAAY,KAAK,aAAa;AACpC,cAAU,IAAI,OAAOA,KAAI;AACzB,SAAK,aAAa;EACpB;AACF;ACnBO,IAAM,iBAAN,cAGG,YAA+B;EAGpB,gBACjB,QACsC;AACtC,WAAO,IAAI,wBAAwB,MAAM;EAC3C;EAEA,KAAK,MAAc,IAAkB;AACnC,SAAK,eAAe,EAAE,KAAK,MAAM,EAAE;EACrC;AACF;ACpBO,IAAM,qBAAmD;EAC9D,KAAK,CAAC,QAAQI,UAAS;AACrB,QAAI,OAAOA,UAAS,YAAY,EAAEA,SAAQ,SAAS;AAEjD,aAAQ,OAAO,eAAe,EAA8B,OAAOA,KAAI;IACzE;AACA,WAAO,QAAQ,IAAI,QAAQA,KAAI;EACjC;;;;;;EASA,KAAK,CAAC,QAAQA,UAAS;AACrB,QAAI,OAAOA,UAAS,UAAU;AAE5B,UAAIA,SAAQ,QAAQ;AAClB,eAAO;MACT;AAEA,aAAO,OAAO,IAAIA,KAAI;IACxB;AACA,WAAO,QAAQ,IAAI,QAAQA,KAAI;EACjC;EAEA,SAAS,CAAA,WAAU;AACjB,WAAO,OAAO,KAAK;EACrB;EAEA,0BAA0B,CAAC,QAAQA,UAAS;AAC1C,QAAI,OAAOA,UAAS,YAAY,OAAO,IAAIA,KAAI,GAAG;AAChD,aAAO;QACL,cAAc;QACd,YAAY;QACZ,OAAO,OAAO,IAAIA,KAAI;MACxB;IACF;AACA,WAAO,QAAQ,yBAAyB,QAAQA,KAAI;EACtD;AACF;AAEO,IAAM,mBAA+C;EAC1D,KAAK,CAAC,QAAQA,UAAS;AACrB,QAAI,OAAOA,UAAS,UAAU;AAC5B,YAAM,QAAQ,OAAOA,KAAI;AACzB,UAAI,CAAC,OAAO,MAAM,KAAK,GAAG;AACxB,eAAO,OAAO,IAAI,KAAK;MACzB;IACF;AACA,WAAO,QAAQ,IAAI,QAAQA,KAAI;EACjC;;;AAIF;AAEO,IAAM,0BAA6D;EACxE,KAAK,CAAC,QAAQA,UAAS;AACrB,QAAI,OAAOA,UAAS,UAAU;AAC5B,YAAM,QAAQ,OAAOA,KAAI;AACzB,UAAI,CAAC,OAAO,MAAM,KAAK,GAAG;AACxB,eAAO,OAAO,IAAI,KAAK;MACzB;IACF;AACA,WAAO,QAAQ,IAAI,QAAQA,KAAI;EACjC;;;AAIF;ACpCO,IAAe,uBAAf,cAA4C,iBAAsB;;;;;EAK7D,WAAW,oBAAI,IAAsC;;;;;EAsB/D,uBACE,KACA,OACgC;AAChC,UAAM,cAAc,KAAK,oBAAoB,GAAG;AAChD,WAAO,yBAAyB,MAAM,KAAK,OAAO,WAAW;EAC/D;;;;;;;;;;;EAYA,eAAe,KAAa,OAAwC;AAClE,UAAM,cAAc,SAAS,KAAK,eAAe,GAAG;AAEpD,QAAI,CAAC,aAAa;AAChB,aAAO;IACT;AAEA,QAAI,aAAa,WAAW,GAAG;AAC7B,UAAI,KAAK,mBAAmB,GAAG;AAE7B,eAAO;UACL;UACA;UACA;QACF;MACF;AAEA,aAAO;QACL;QACA;QACA;MACF;IACF;AAGA,QAAI,MAAM,KAAK,SAAS,IAAI,GAAG;AAC/B,QAAI,CAAC,KAAK;AACR,YAAM;QACJ,KAAK,uBAAuB,KAAK,WAA6B;MAChE;AACA,WAAK,SAAS,IAAI,KAAK,GAAG;IAC5B;AAEA,WAAO;EACT;;;;;;;EAQA,cACE,KACAR,QACA,OACM;AACN,UAAM,YAAY,KAAK,aAAa;AAEpC,QAAI,aAAa,KAAK,GAAG;AAEvB,YAAM,YAAY,oBAAoBA,MAAK;AAC3C,gBAAU,IAAI,KAAK,SAAS;AAC5B,WAAK,aAAa;IACpB,OAAO;AAGL,YAAM,MAAM,KAAK,eAAe,KAAK,KAAK;AAC1C,UAAI,2BAA2B,KAAiCA,MAAK,GAAG;AAEtE;MACF;AACA,YAAM,IAAI;QACR;MACF;IACF;EACF;;;;EAKA,UAAU,KAAmB;AAC3B,UAAM,YAAY,KAAK,aAAa;AACpC,cAAU,OAAO,GAAG;AACpB,SAAK,SAAS,OAAO,GAAG;AACxB,SAAK,aAAa;EACpB;;;;;EAMS,sBAA4B;AACnC,eAAW,OAAO,KAAK,SAAS,OAAO,GAAG;AACxC,UAAI,OAAO,mBAAmB,KAAK;AACjC,YAAI,eAAe,EAAE,sBAAsB;MAC7C;IACF;EACF;;;;;EAMmB,qBAAgC;AACjD,UAAM,OAAO;AACb,WAAO;MACL,IAAI,MAAe;AACjB,eAAO,KAAK,OAAO;MACrB;MACA,aAAa,KAAa,WAAiC;AACzD,cAAM,SAAU,KAAK,aAAa,EAAc;UAC9C;UACA;QACF;AACA,aAAK,aAAa;AAClB,eAAO;MACT;IACF;EACF;AACF;ACtLO,IAAM,qBAAN,cAEG,qBAAqB;;;;EAI7B,IAAY,cAAiD;AAC3D,WAAO,KAAK,SAAS;EACvB;;;;;EAMS,eAAe,MAAiD;AACvE,WAAO,KAAK,YAAY;EAC1B;;;;;;;EAQS,oBAAoB,KAAsB;AAEjD,QAAI,cACF,KAAK,eAAe,IAClB,GAAG;AAGP,QAAI,gBAAgB,UAAa,KAAK,YAAY,OAAO;AACvD,oBAAc,uBAAuB,KAAK,YAAY,KAAK;IAC7D;AAEA,WAAO;EACT;;;;;EAMA,OAAO,KAAsB;AAC3B,UAAM,YAAY,KAAK,aAAa;AAOpC,UAAM,WAAW,UAAU,IAAI,GAAG;AAClC,QAAI,aAAa,QAAW;AAC1B,aAAO;IACT;AAEA,WAAO,KAAK,eAAe,GAAG;EAChC;;;;;EAMA,IAAI,KAAaA,QAAsB;AACrC,UAAM,QAAQ,KAAK,YAAY;AAE/B,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,MAAM,2BAA2B;IAC7C;AAEA,SAAK,cAAc,KAAKA,QAAO,KAAK;EACtC;;;;;EAMA,OAAO,KAAmB;AACxB,SAAK,UAAU,GAAG;EACpB;;;;;EAMA,QAAQ,QAAuC;AAC7C,UAAM,YAAY,KAAK,aAAa;AACpC,UAAM,cAAc,IAAI,IAAI,UAAU,KAAK,CAAC;AAC5C,UAAM,UAAU,IAAI,IAAI,OAAO,KAAK,MAAM,CAAC;AAE3C,SAAK,kBAAkB,MAAM;AAE3B,iBAAW,OAAO,aAAa;AAC7B,YAAI,CAAC,QAAQ,IAAI,GAAG,GAAG;AACrB,eAAK,UAAU,GAAG;QACpB;MACF;AAGA,iBAAW,OAAO,SAAS;AACzB,aAAK,IAAI,KAAK,OAAO,GAAG,CAAC;MAC3B;IACF,CAAC;EACH;;;;;EAMA,MAAM,QAAuC;AAC3C,SAAK,kBAAkB,MAAM;AAC3B,iBAAW,OAAO,OAAO,KAAK,MAAM,GAAG;AACrC,aAAK,IAAI,KAAK,OAAO,GAAG,CAAC;MAC3B;IACF,CAAC;EACH;;;;EAKA,QAAc;AACZ,UAAM,YAAY,KAAK,aAAa;AACpC,UAAM,OAAO,UAAU,KAAK;AAE5B,QAAI,KAAK,WAAW,GAAG;AACrB;IACF;AAEA,SAAK,kBAAkB,MAAM;AAC3B,iBAAW,OAAO,MAAM;AACtB,aAAK,UAAU,GAAG;MACpB;IACF,CAAC;EACH;;;;;;EAOS,cAAoB;AAE3B,SAAK,aAAa;EAIpB;AACF;ACnJO,IAAM,YAAN,cAGG,SAAc;EACtB,CAAC,eAAe;EAEhB,YAAY,QAA6B;AACvC,UAAM;AACN,SAAK,eAAe,IAAI,IAAI,mBAAmB,MAAM;EACvD;;EAGA,IAAI,KAAaA,QAAiC;AAChD,SAAK,eAAe,EAAE,IAAI,KAAKA,MAAK;EACtC;;EAGA,OAAO,KAAmB;AACxB,SAAK,eAAe,EAAE,OAAO,GAAG;EAClC;EAEA,IAAI,KAA0D;AAG5D,QAAI,KAAK,eAAe,EAAE,mBAAmB,GAAG;AAC9C,aAAO,KAAK,eAAe,EAAE,eAAe,GAAG;IAGjD;AAEA,WAAO,KAAK,eAAe,EAAE,OAAO,GAAG;EAGzC;EAEA,aAAkC,KAAa,WAAiB;AAC9D,UAAM,gBAAgB,KAAK,eAAe,EAAE,aAAa;AACzD,UAAM,SAAS,cAAc,aAAa,KAAK,SAAS;AACxD,SAAK,eAAe,EAAE,aAAa;AACnC,WAAO;EACT;EAEA,IAAI,KAAsB;AACxB,UAAM,YAAY,KAAK,eAAe,EAAE,aAAa;AACrD,WAAO,UAAU,IAAI,GAAG,MAAM;EAChC;EAEA,OAAiB;AACf,UAAM,YAAY,KAAK,eAAe,EAAE,aAAa;AACrD,WAAO,UAAU,KAAK;EACxB;;;;;EAMA,SAA4C;AAE1C,WAAO,KAAK,KAAK,EAAE;MACjB,CAAA,QAAO,KAAK,IAAI,GAAG;IACrB;EACF;;;;;EAMA,UAAuD;AAErD,WAAO,KAAK,KAAK,EAAE,IAAI,CAAA,QAAO;MAC5B;MACA,KAAK,IAAI,GAAG;IACd,CAAC;EACH;EAEA,IAAI,OAAe;AACjB,UAAM,YAAY,KAAK,eAAe,EAAE,aAAa;AACrD,WAAO,UAAU;EACnB;;;;;;;;;;;;;;;EAgBA,QAAQ,QAAkD;AACxD,SAAK,eAAe,EAAE,QAAQ,MAAM;EACtC;;;;;;;;;;;;;;;;EAiBA,MAAM,QAAkD;AACtD,SAAK,eAAe,EAAE,MAAM,MAAM;EACpC;;;;;;;;;;;EAYA,QAAc;AACZ,SAAK,eAAe,EAAE,MAAM;EAC9B;EAEA,SAA6C;AAC3C,WAAO,mBAAmB,MAAM,KAAK,KAAK,CAAC;EAI7C;AACF;ACrIO,IAAM,qBAAN,cAEG,qBAAqB;;;;EAI7B,IAAY,cAAkD;AAC5D,WAAO,KAAK,SAAS;EACvB;;;;;EAMS,eAAe,KAAgD;AACtE,WAAO,KAAK,YAAY,OAAO,GAAG;EACpC;;;;;EAMS,oBAAoB,KAAsB;AACjD,WAAQ,KAAK,eAAe,IAA4C,GAAG;EAC7E;;;;;EAMA,iBAAiB,KAAaA,QAAsB;AAClD,UAAM,QAAQ,KAAK,YAAY,OAAO,GAAG;AAEzC,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,MAAM,qBAAqB,GAAG,EAAE;IAC5C;AAEA,SAAK,cAAc,KAAKA,QAAO,KAAK;EACtC;;;;;EAMA,eAAe,KAAmB;AAChC,SAAK,UAAU,GAAG;EACpB;;;;;;EAOS,cAAoB;AAE3B,SAAK,aAAa;AAGlB,eAAW,OAAO,KAAK,YAAY,QAAQ;AACzC,YAAM,QAAQ,KAAK,YAAY,OAAO,GAAG;AACzC,UAAI,CAAC,aAAa,KAAK,GAAG;AAExB,cAAM,MAAM,KAAK,eAAe,KAAK,KAAK;AAE1C,YAAI,eAAe,EAAE,YAAY;MACnC;IACF;EACF;AACF;AC/DA,IAAM,gBAAN,cAEU,SAAc;EACtB,CAAC,eAAe;EAEhB,YAAY,QAA6B;AACvC,UAAM;AACN,SAAK,eAAe,IAAI,IAAI,mBAAmB,MAAM;EACvD;EAEA,IAAI,cAAkD;AACpD,WAAO,KACL,eACF,EAAE,SAAS;EACb;EAEA,SAAoD;AAClD,WAAO;MACL;MACA,OAAO,KAAK,KAAK,YAAY,MAAM;IACrC;EACF;;;EAIA,IAAI,KAAkB;AACpB,UAAM,YAAY,KAAK,eAAe,EAAE,aAAa;AACrD,WAAO,UAAU,IAAI,GAAG;EAC1B;;EAGA,IAAI,KAAaA,QAAoB;AACnC,UAAM,YAAY,KAAK,eAAe,EAAE,aAAa;AACrD,cAAU,IAAI,KAAKA,MAAK;AACxB,SAAK,eAAe,EAAE,aAAa;EACrC;;EAGA,aAAkC,KAAa,WAAiB;AAC9D,UAAM,gBAAgB,KAAK,eAAe,EAAE,aAAa;AACzD,UAAM,SAAS,cAAc,aAAa,KAAK,SAAS;AACxD,SAAK,eAAe,EAAE,aAAa;AACnC,WAAO;EACT;;EAGA,OAAO,KAAmB;AACxB,UAAM,YAAY,KAAK,eAAe,EAAE,aAAa;AACrD,cAAU,OAAO,GAAG;AACpB,SAAK,eAAe,EAAE,aAAa;EACrC;;EAGA,IAAI,KAAsB;AACxB,UAAM,YAAY,KAAK,eAAe,EAAE,aAAa;AACrD,WAAO,UAAU,IAAI,GAAG,MAAM;EAChC;;EAGA,OAAiB;AACf,UAAM,YAAY,KAAK,eAAe,EAAE,aAAa;AACrD,WAAO,UAAU,KAAK;EACxB;;EAGA,SAAgB;AACd,UAAM,YAAY,KAAK,eAAe,EAAE,aAAa;AACrD,WAAO,UAAU,OAAO;EAC1B;;EAGA,IAAI,OAAe;AACjB,UAAM,YAAY,KAAK,eAAe,EAAE,aAAa;AACrD,WAAO,UAAU;EACnB;AACF;AAeO,SAAS,gBAGd,QACyB;AACzB,QAAM,OAAO,IAAI,cAA4B,MAAM;AAEnD,QAAM,QAAQ,IAAI,MAAM,MAAM;IAC5B,IAAI,QAAQQ,OAAM,UAAU;AAE1B,UAAIA,UAAS,aAAa;AACxB,eAAO,OAAO,eAAe,EAAE,aAAa;MAC9C;AAGA,UAAIA,UAAS,YAAY;AACvB,eAAO,OAAO,eAAe,EAAE,gBAAgB;MACjD;AAGA,UAAIA,UAAS,iBAAiB;AAC5B,eAAO,OAAO,eAAe;MAC/B;AAGA,UAAIA,UAAS,UAAU;AACrB,eAAO,MACL,mBAAmB,UAAU,OAAO,KAAK,OAAO,YAAY,MAAM,CAAC;MACvE;AAGA,UAAIA,UAAS,SAAS;AACpB,eAAO,OAAO;MAChB;AAGA,UAAI,OAAOA,UAAS,YAAYA,SAAQ,OAAO,YAAY,QAAQ;AACjE,cAAM,QAAQ,OAAO,YAAY,OAAOA,KAAI;AAC5C,eAAO,OAAO,eAAe,EAAE,eAAeA,OAAM,KAAK;MAC3D;AAEA,aAAO;IACT;IAEA,IAAI,QAAQA,OAAM;AAChB,UACEA,UAAS,eACTA,UAAS,cACTA,UAAS,mBACTA,UAAS,YACTA,UAAS,SACT;AACA,eAAO;MACT;AACA,UAAI,OAAOA,UAAS,UAAU;AAC5B,eAAOA,SAAQ,OAAO,YAAY;MACpC;AACA,aAAO;IACT;IAEA,QAAQ,QAAQ;AAEd,aAAO,OAAO,KAAK,OAAO,YAAY,MAAM;IAC9C;IAEA,yBAAyB,QAAQA,OAAM;AACrC,UAAI,OAAOA,UAAS,YAAYA,SAAQ,OAAO,YAAY,QAAQ;AACjE,cAAM,QAAQ,OAAO,YAAY,OAAOA,KAAI;AAC5C,eAAO;UACL,cAAc;UACd,YAAY;UACZ,OAAO,OAAO,eAAe,EAAE,eAAeA,OAAM,KAAK;QAC3D;MACF;AACA,aAAO;IACT;EACF,CAAC;AAED,SAAO;AACT;ACvLO,IAAM,mBAAN,cAA+B,iBAAqC;EACjE,eAAe;;EAGvB,OAAO,OAAe,SAAuB;AAC3C,SAAK,eAAe;AAClB,SAAK,aAAa,EAAe,OAAO,OAAO,OAAO;AACxD,SAAK,aAAa;EACpB;;EAGA,OAAO,OAAe,KAAmB;AACvC,SAAK,eAAe;AAClB,SAAK,aAAa,EAAe,OAAO,OAAO,GAAG;AACpD,SAAK,aAAa;EACpB;;EAGA,OAAOF,OAAoB;AACzB,SAAK,eAAe;AAClB,SAAK,aAAa,EAAe,OAAOA,KAAI;AAC9C,SAAK,aAAa;EACpB;;EAGA,KAAK,OAAuC,KAAaN,QAAkB;AACzE,SAAK,eAAe;AAClB,SAAK,aAAa,EAAe,KAAK,OAAO,KAAKA,MAAK;AACzD,SAAK,aAAa;EACpB;;EAGA,OAAO,OAAuC,KAAmB;AAC/D,SAAK,eAAe;AAClB,SAAK,aAAa,EAAe,OAAO,OAAO,GAAG;AACpD,SAAK,aAAa;EACpB;;EAGA,WAAW,OAAoB;AAC7B,SAAK,eAAe;AAClB,SAAK,aAAa,EAAe,WAAW,KAAK;AACnD,SAAK,aAAa;EACpB;;EAGA,iBAAyB;AACvB,UAAM,YAAY,KAAK,aAAa;AACpC,UAAM,UAAU,KAAK,WAAW;AAChC,QAAI,SAAS;AACX,YAAMK,QAAO,QAAQ,IAAI,UAAU,EAAE;AACrC,UAAIA,SAAQA,MAAK,SAAS,QAAQ;AAChC,cAAMI,kBAAiB,UAAU,SAAS;AAC1C,eAAO,eAAeA,iBAAiBJ,MAAkB,IAAI;MAC/D;IACF;AACA,UAAM,iBAAiB,UAAU,SAAS;AAC1C,QAAI,mBAAmB,MAAM,KAAK,cAAc;AAC9C,aAAO;IACT;AAEA,UAAM,cAAc,KAAK,eAAe;AACxC,QAAI,gBAAgB,QAAW;AAC7B,aAAO;IACT;AACA,WAAO;EACT;;EAGA,UAAiB;AACf,UAAM,YAAY,KAAK,aAAa;AACpC,UAAM,UAAU,KAAK,WAAW;AAChC,QAAI,SAAS;AACX,YAAMA,QAAO,QAAQ,IAAI,UAAU,EAAE;AACrC,UAAIA,SAAQA,MAAK,SAAS,QAAQ;AAChC,cAAMK,QAAO,UAAU,QAAQ;AAC/B,eAAO,kBAAkBA,OAAOL,MAAkB,IAAI;MACxD;IACF;AACA,WAAO,UAAU,QAAQ;EAC3B;;EAGA,YAAoB;AAClB,UAAM,YAAY,KAAK,aAAa;AACpC,UAAM,UAAU,KAAK,WAAW;AAChC,QAAI,SAAS;AACX,YAAMA,QAAO,QAAQ,IAAI,UAAU,EAAE;AACrC,UAAIA,SAAQA,MAAK,SAAS,QAAQ;AAChC,eAAO,eAAe,UAAU,SAAS,GAAIA,MAAkB,IAAI,EAChE;MACL;IACF;AACA,WAAO,UAAU;EACnB;;EAGmB,qBAAiC;AAClD,UAAM,OAAO;AACb,WAAO;MACL,IAAI,MAAe;AACjB,eAAO,KAAK,OAAO;MACrB;IACF;EACF;AACF;AAEA,SAAS,eAAeC,OAAc,OAAgC;AACpE,MAAI,SAAS;AACb,MAAI,QAAQ;AAEZ,aAAW,MAAM,OAAO;AACtB,QAAI,GAAG,WAAW,QAAW;AAC3B,gBAAUA,MAAK,MAAM,OAAO,QAAQ,GAAG,MAAM;AAC7C,eAAS,GAAG;IACd,WAAW,GAAG,WAAW,QAAW;AAClC,eAAS,GAAG;IACd,WAAW,GAAG,WAAW,QAAW;AAClC,gBAAU,GAAG;IACf;EACF;AAEA,MAAI,QAAQA,MAAK,QAAQ;AACvB,cAAUA,MAAK,MAAM,KAAK;EAC5B;AAEA,SAAO;AACT;AAEA,SAAS,kBACPI,OACAL,OACiB;AACjB,QAAM,WAAWK,MACd,IAAI,CAAA,OAAO,GAAG,WAAW,SAAY,GAAG,SAAS,EAAG,EACpD,KAAK,EAAE;AACV,QAAM,WAAW,eAAe,UAAUL,KAAI;AAC9C,SAAO,WAAW,CAAC,EAAE,QAAQ,SAAS,CAAC,IAAI,CAAC;AAC9C;AC5IO,IAAM,UAAN,cAAsB,SAA6B;EACxD,CAAC,eAAe;EAEhB,YAAY,QAA4C;AACtD,UAAM;AACN,SAAK,eAAe,IAAI,IAAI,iBAAiB,MAAM;EACrD;;EAGA,OAAO,OAAe,SAAuB;AAC3C,SAAK,eAAe,EAAE,OAAO,OAAO,OAAO;EAC7C;;EAGA,OAAO,OAAe,KAAmB;AACvC,SAAK,eAAe,EAAE,OAAO,OAAO,GAAG;EACzC;;EAGA,OAAOC,OAAoB;AACzB,SAAK,eAAe,EAAE,OAAOA,KAAI;EACnC;;EAGA,KAAK,OAAuC,KAAaN,QAAkB;AACzE,SAAK,eAAe,EAAE,KAAK,OAAO,KAAKA,MAAK;EAC9C;;EAGA,OAAO,OAAuC,KAAmB;AAC/D,SAAK,eAAe,EAAE,OAAO,OAAO,GAAG;EACzC;;EAGA,WAAW,OAAoB;AAC7B,SAAK,eAAe,EAAE,WAAW,KAAK;EACxC;;EAGA,WAAmB;AACjB,WAAO,KAAK,eAAe,EAAE,eAAe;EAC9C;EAEA,UAAkB;AAChB,WAAO,KAAK,SAAS;EACvB;EAEA,SAAiB;AACf,WAAO,KAAK,SAAS;EACvB;EAEA,CAAC,OAAO,WAAW,EAAE,OAAuB;AAC1C,WAAO,KAAK,SAAS;EACvB;;EAGA,UAAiB;AACf,WAAO,KAAK,eAAe,EAAE,QAAQ;EACvC;;EAGA,IAAI,SAAiB;AACnB,WAAO,KAAK,eAAe,EAAE,UAAU;EACzC;AACF;AChDO,IAAM,uBAAN,MAEP;EAIE,YAA6B,QAAsC;AAAtC,SAAA,SAAA;EAAuC;EAH5D;EACA;;EAKR,UAAwB;AACtB,WAAO,KAAK,OAAO;EACrB;;EAGA,eAA0B;AACxB,WAAO,KAAK,OAAO;EACrB;;EAGA,aAAqC;AACnC,WAAO,KAAK,OAAO;EACrB;;EAGA,gBAAyB;AACvB,WAAO,KAAK,OAAO,cAAc;EACnC;;EAGA,qBAA8B;AAC5B,WAAO,KAAK,OAAO,mBAAmB;EACxC;;EAGA,SAAkB;AAChB,WAAO,KAAK,OAAO,OAAO;EAC5B;;EAGA,eAAqB;AACnB,QAAI,KAAK,OAAO,YAAY;AAC1B,WAAK,OAAO,OAAO,EAAE,OAAO;IAC9B;EACF;;EAGA,qBAAqD;AACnD,QAAI,CAAC,KAAK,SAAS;AACjB,YAAM,OAAO,KAAK,QAAQ;AAC1B,YAAM,YAAY,KAAK,aAAa;AAGpC,YAAM,gBAAiB,KAAa;AAEpC,UAAI,CAAC,eAAe;AAClB,cAAM,IAAI,MAAM,QAAQ,KAAK,EAAE,wBAAwB;MACzD;AAGA,YAAM,cAAc,uBAAuB,SAAS;AAEpD,YAAM,YAEF;QACF,OAAO;UACL,OAAO;UACP,QAAQ,UAAU;UAClB,QAAQ,CAAC;UACT,UAAU,CAAC;UACX,QAAQ,CAAC;UACT,cAAc,CAAC;QACjB;QACA;QACA,cAAc,MAAM;QACpB,YAAY,KAAK,cAAc;QAC/B,iBAAiB,KAAK,mBAAmB;QACzC,QAAQ,KAAK,OAAO;MACtB;AAEA,WAAK,UAAU,gBAAgB,SAAS;IAC1C;AACA,WAAO,KAAK;EACd;;EAGA,sBAA4B;AAC1B,QAAI,KAAK,SAAS;AAChB,WAAK,QAAQ,eAAe,EAAE,sBAAsB;IACtD;EACF;;EAGA,cAAoB;AAElB,UAAM,UAAU,KAAK,mBAAmB;AACxC,YAAQ,eAAe,EAAE,YAAY;EACvC;;EAGA,eAA6B;AAC3B,WAAO,KAAK,OAAO;EACrB;;EAGA,kBAA8B;AAC5B,QAAI,CAAC,KAAK,cAAc;AACtB,WAAK,eAAe,KAAK,mBAAmB;IAC9C;AACA,WAAO,KAAK;EACd;;EAGU,qBAAiC;AACzC,UAAM,OAAO;AACb,WAAO;MACL,IAAI,MAAe;AACjB,eAAO,KAAK,OAAO;MACrB;IACF;EACF;AACF;ACzGO,IAAM,cAAN,MAA0D;EAC/D,CAAC,eAAe;EAEhB,YAAY,QAAsC;AAChD,SAAK,eAAe,IAAI,IAAI,qBAAqB,MAAM;EACzD;;;;EAKA,KAAK,WAAW,IAAkB;AAChC,WAAO,KAAK,eAAe,EAAE,aAAa;EAC5C;;;;EAKA,KAAK,UAAU,IAAgB;AAC7B,WAAO,KAAK,eAAe,EAAE,gBAAgB;EAC/C;;;;EAKA,IAAI,KAAa;AACf,WAAO,KAAK,eAAe,EAAE,QAAQ,EAAE;EACzC;;;;;EAMA,IAAI,OAEF;AACA,WAAO,KAAK,eAAe,EAAE,mBAAmB;EAKlD;;;;;;;;EASA,WACE,aACA,OACwB;AACxB,UAAM,OAAO,KAAK,eAAe,EAAE,QAAQ;AAC3C,UAAM,UAAU,KAAK,eAAe,EAAE,WAAW;AAGjD,UAAM,WAAY,KAAa,WAAW,KAAK;AAC/C,UAAM,UAAU,QAAQ,mBAAmB,QAAQ;AAGnD,QAAI,aAAa;AACf,iBAAW,CAAC,KAAKA,MAAK,KAAK,OAAO,QAAQ,WAAW,GAAG;AACtD,cAAM,UAAW,QAAQ,KAAa,GAAG;AAGzC,YAAI,WAAW,mBAAmB,SAAS;AACzC,qCAA2B,SAASA,MAAK;QAC3C,WAAW,WAAW,OAAO,QAAQ,QAAQ,YAAY;AAEvD,kBAAQ,IAAIA,MAAK;QACnB;MACF;IACF;AAEA,SAAK,eAAe,EAAE,aAAa;AACnC,WAAO;EACT;;;;EAKA,SAA6C;AAC3C,UAAM,OAAO,KAAK,eAAe,EAAE,QAAQ;AAC3C,UAAM,UAAU,KAAK,eAAe,EAAE,WAAW;AAEjD,UAAM,aAAc,KAAa,SAAS;AAC1C,QAAI,CAAC,WAAY,QAAO;AACxB,WAAO,QAAQ,mBAAmB,UAAU;EAC9C;;;;EAKA,WAAqC;AACnC,UAAM,OAAO,KAAK,eAAe,EAAE,QAAQ;AAC3C,UAAM,UAAU,KAAK,eAAe,EAAE,WAAW;AAEjD,UAAM,aAAc,KAAa,WAAW,KAAK,CAAC;AAClD,WAAO,WAAW,IAAI,CAAC,MAAoB,QAAQ,mBAAmB,CAAC,CAAC;EAC1E;;;;;;;EAQA,KAAK,WAAoC,OAAsB;AAC7D,UAAM,OAAO,KAAK,eAAe,EAAE,QAAQ;AAG3C,UAAM,aAAa,YACf,UAAU,eAAe,EAAE,QAAQ,IACnC;AACF,SAAa,OAAO,YAAY,KAAK;AACvC,SAAK,eAAe,EAAE,aAAa;EACrC;;;;EAKA,UAAU,SAAuC;AAC/C,UAAM,OAAO,KAAK,eAAe,EAAE,QAAQ;AAC3C,UAAM,cAAc,QAAQ,eAAe,EAAE,QAAQ;AAErD,SAAK,UAAU,WAAW;AAC1B,SAAK,eAAe,EAAE,aAAa;EACrC;;;;EAKA,WAAW,SAAuC;AAChD,UAAM,OAAO,KAAK,eAAe,EAAE,QAAQ;AAC3C,UAAM,cAAc,QAAQ,eAAe,EAAE,QAAQ;AAErD,SAAK,WAAW,WAAW;AAC3B,SAAK,eAAe,EAAE,aAAa;EACrC;;;;EAKA,QAA4B;AAC1B,UAAM,OAAO,KAAK,eAAe,EAAE,QAAQ;AAC3C,WAAO,KAAK,MAAM;EACpB;;;;EAKA,kBAAsC;AACpC,UAAM,OAAO,KAAK,eAAe,EAAE,QAAQ;AAC3C,WAAO,KAAK,gBAAgB;EAC9B;;;;EAKA,YAAqB;AACnB,UAAM,OAAO,KAAK,eAAe,EAAE,QAAQ;AAC3C,WAAO,KAAK,UAAU;EACxB;;;;EAKA,SAOE;AACA,UAAM,WAAW,KAAK,SAAS;AAC/B,WAAO;MACL,IAAI,KAAK;MACT,QAAQ,KAAK,OAAO,GAAG,MAAM;MAC7B,OAAO,KAAK,MAAM,KAAK;MACvB,iBAAiB,KAAK,gBAAgB,KAAK;MAC3C,MAAM,KAAK,KAAK,OAAO;MACvB,UAAU,SAAS,IAAI,CAAA,UAAS,MAAM,OAAO,CAAC;IAChD;EACF;AACF;ACrNO,IAAM,mBAAN,cAEG,iBAAgD;EAChD,YAAY,oBAAI,IAAoC;EACpD,UAAqC;;EAG7C,WAAW,SAAmC;AAC5C,SAAK,UAAU;EACjB;;EAGA,eAA0B;AACxB,UAAM,QAAQ,KAAK,SAAS;AAC5B,WAAO,MAAM;EACf;;EAGA,mBAAmB,MAA4C;AAC7D,UAAM,KAAK,KAAK;AAEhB,QAAI,CAAC,KAAK,SAAS;AACjB,YAAM,IAAI,MAAM,kBAAkB;IACpC;AAEA,QAAI,UAAU,KAAK,UAAU,IAAI,EAAE;AACnC,QAAI,CAAC,SAAS;AACZ,gBAAU,IAAI,YAAY;QACxB;QACA,WAAW,KAAK,aAAa;QAC7B,SAAS,KAAK;QACd,YAAY,KAAK,cAAc;QAC/B,iBAAiB,KAAK,mBAAmB;QACzC,QAAQ,MAAM,KAAK,OAAO;MAC5B,CAAC;AACD,WAAK,UAAU,IAAI,IAAI,OAAO;IAChC;AAEA,WAAO;EACT;;EAGA,YAAY,IAAgD;AAE1D,UAAMW,UAAS,KAAK,UAAU,IAAI,EAAE;AACpC,QAAIA,QAAQ,QAAOA;AAEnB,UAAM,YAAY,KAAK,aAAa;AAGpC,QAAI,CAAC,UAAU,IAAI,EAAE,EAAG,QAAO;AAG/B,UAAM,QAAQ,UAAU,MAAM;AAC9B,UAAM,OAAO,MAAM,KAAK,CAAA,MAAK,EAAE,OAAO,EAAE;AACxC,QAAI,CAAC,KAAM,QAAO;AAElB,WAAO,KAAK,mBAAmB,IAAI;EACrC;;EAGA,OAAO,QAA+C;AACpD,UAAM,KAAK,OAAO,WAAW,WAAW,SAAS,OAAO;AACxD,UAAM,YAAY,KAAK,aAAa;AACpC,cAAU,OAAO,EAAE;AAEnB,SAAK,UAAU,OAAO,EAAE;AACxB,SAAK,aAAa;EACpB;;EAGS,sBAA4B;AACnC,eAAW,WAAW,KAAK,UAAU,OAAO,GAAG;AAC7C,cAAQ,eAAe,EAAE,sBAAsB;IACjD;EACF;;EAGmB,qBAAiC;AAClD,UAAM,OAAO;AACb,WAAO;MACL,IAAI,MAAe;AACjB,eAAO,KAAK,OAAO;MACrB;IACF;EACF;AACF;ACnEO,IAAM,UAAN,cAA8D,SAEnE;EACA,CAAC,eAAe;EAEhB,YAAY,QAAuD;AACjE,UAAM;AACN,SAAK,eAAe,IAAI,IAAI,iBAAiB,MAAM;AACnD,SAAK,eAAe,EAAE,WAAW,IAAI;EACvC;;;;EAKA,IAAY,YAAuB;AACjC,WAAO,KAAK,eAAe,EAAE,aAAa;EAC5C;;;;EAKA,mBAAmB,MAA4C;AAC7D,WAAO,KAAK,eAAe,EAAE,mBAAmB,IAAI;EACtD;;;;EAKA,YAAY,IAAgD;AAC1D,WAAO,KAAK,eAAe,EAAE,YAAY,EAAE;EAC7C;;;;EAKA,OAAO,QAA+C;AACpD,SAAK,eAAe,EAAE,OAAO,MAAM;EACrC;;;;;EAMA,SAA+C;AAE7C,UAAM,YAAY,KAAK,eAAe,EAAE,aAAa;AACrD,UAAM,aAAa,UAAU,OAAO;AACpC,WAAO,KAAK,oBAAoB,UAAU;EAG5C;;;;;;;EAQA,WAAW,aAAiE;AAC1E,UAAM,YAAY,KAAK,eAAe,EAAE,aAAa;AACrD,UAAM,WAAW,UAAU,WAAW;AACtC,UAAM,UAAU,KAAK,mBAAmB,QAAQ;AAGhD,QAAI,aAAa;AACf,iBAAW,CAAC,KAAKX,MAAK,KAAK,OAAO,QAAQ,WAAW,GAAG;AACtD,cAAM,UAAW,QAAQ,KAAa,GAAG;AAGzC,YAAI,WAAW,mBAAmB,SAAS;AACzC,qCAA2B,SAASA,MAAK;QAC3C,WAAW,WAAW,OAAO,QAAQ,QAAQ,YAAY;AAEvD,kBAAQ,IAAIA,MAAK;QACnB;MACF;IACF;AAEA,SAAK,eAAe,EAAE,aAAa;AACnC,WAAO;EACT;;;;;EAMA,QAAkC;AAChC,UAAM,YAAY,KAAK,eAAe,EAAE,aAAa;AACrD,WAAO,UAAU,MAAM,EAAE,IAAI,CAAA,SAAQ,KAAK,mBAAmB,IAAI,CAAC;EACpE;;;;;;;;EASA,MAAM,SAAkE;AACtE,UAAM,YAAY,KAAK,eAAe,EAAE,aAAa;AACrD,UAAM,WAAW,UAAU,MAAM;AACjC,UAAM,WAAW,SAAS,iBACtB,WACA,SAAS,OAAO,CAAA,SAAQ,CAAC,KAAK,UAAU,CAAC;AAC7C,WAAO,SAAS,IAAI,CAAA,SAAQ,KAAK,mBAAmB,IAAI,CAAC;EAC3D;;;;EAKA,IAAI,IAAqB;AACvB,UAAM,YAAY,KAAK,eAAe,EAAE,aAAa;AACrD,WAAO,UAAU,IAAI,EAAE;EACzB;;;;;;EAOA,sBAAsB,SAAS,GAAS;AACtC,UAAM,YAAY,KAAK,eAAe,EAAE,aAAa;AACrD,cAAU,sBAAsB,MAAM;EACxC;;;;EAKQ,oBAAoB,OAAyC;AACnE,WAAO,MAAM,IAAI,CAAA,UAAS;MACxB,IAAI,KAAK;MACT,QAAQ,KAAK;MACb,OAAO,KAAK;MACZ,iBAAiB,KAAK;MACtB,MAAM,KAAK;MACX,UAAU,KAAK,oBAAoB,KAAK,YAAY,CAAC,CAAC;IACxD,EAAE;EACJ;;;;;EAMA,UAMG;AACD,UAAM,SAMD,CAAC;AAGN,UAAM,eAAe,CAAC,UAAiB;AACrC,iBAAW,QAAQ,OAAO;AACxB,eAAO,KAAK;UACV,IAAI,KAAK;UACT,QAAQ,KAAK;UACb,OAAO,KAAK;UACZ,iBAAiB,KAAK;UACtB,MAAM,KAAK;QACb,CAAC;AACD,YAAI,KAAK,YAAY,KAAK,SAAS,SAAS,GAAG;AAC7C,uBAAa,KAAK,QAAQ;QAC5B;MACF;IACF;AAEA,UAAM,YAAY,KAAK,eAAe,EAAE,aAAa;AACrD,UAAM,aAAa,UAAU,OAAO;AACpC,iBAAa,UAAU;AACvB,WAAO;EACT;AACF;ArBnKO,IAAM,uBAAuB;EAClC,SAASY;EACT,MAAMC;EACN,aAAaC;EACb,QAAQC;;EACR,QAAQA;;EACR,MAAMC;EACN,MAAM;AACR;AASO,IAAM,kBAAkB;EAC7B,SAAS;EACT,MAAM;EACN,aAAa;EACb,QAAQ;EACR,QAAQ;;EACR,MAAM;EACN,MAAM;AACR;AAMO,SAAS,wBACd,MAC2C;AAC3C,SAAO,QAAQ;AACjB;AAcO,SAAS,yBACd,WACA,KACA,OACA,aACgC;AAEhC,MAAI,CAAC,wBAAwB,MAAM,KAAK,GAAG;AACzC,UAAM,IAAI;MACR,2CAA2C,MAAM,KAAK;IAExD;EACF;AAGA,MAAI,UAAU,YAAY,GAAG;AAC3B,UAAMf,OAAM,UAAU,OAAO;AAC7B,UAAM,WAAW,UAAU,8BAA8B,GAAG;AAC5D,UAAM,aAAa,UAAU,cAAc,KAAK,CAAC;AACjD,UAAM,gBAAgB,CAAC,GAAG,YAAY,GAAG;AAGzC,UAAMgB,aAAY,UAAU,aAAa;AACzC,QAAIA,WAAU,IAAI,GAAG,MAAM,MAAM;AAC/BA,iBAAU,IAAI,KAAK,IAAI;IACzB;AAEA,UAAM,aACJ,gBAAgB,MAAM,KAAqC;AAC7D,UAAM,SAAUhB,KAAY,UAAU,EAAE,KAAKA,IAAG;AAEhD,WAAO;MACL;MACA;MACA,cAAc,MAAM,OAAO,QAAQ;MACnC,YAAY,UAAU,cAAc;MACpC,iBAAiB,UAAU,mBAAmB;MAC9C,QAAQ,MAAMA;MACd,SAAS,UAAU,WAAW;MAC9B,YAAY;MACZ,WAAW;IACb;EACF;AAGA,QAAM,gBAAgB,qBAAqB,MAAM,KAAK;AACtD,QAAM,YAAY,UAAU,aAAa;AAEzC,SAAO;IACL;IACA;IACA,cAAc,MACZ,UAAU,qBAAqB,KAAK,IAAK,cAAsB,CAAC;IAClE,YAAY,UAAU,cAAc;IACpC,iBAAiB,UAAU,mBAAmB;IAC9C,QAAQ,MAAM,UAAU,OAAO;IAC/B,SAAS,UAAU,WAAW;EAChC;AACF;AAyBO,SAAS,mBACd,KACA,MACqB;AACrB,QAAM,SAA8B,CAAC;AACrC,aAAW,OAAO,MAAM;AACtB,UAAMD,SAAQ,IAAI,GAAG;AACrB,QAAIA,UAAS,OAAOA,WAAU,YAAY,YAAYA,QAAO;AAC3D,aAAO,GAAG,IAAIA,OAAM,OAAO;IAC7B,OAAO;AACL,aAAO,GAAG,IAAIA;IAChB;EACF;AACA,SAAO;AACT;AAQO,SAAS,wBACd,QAC0D;AAC1D,UAAQ,OAAO,MAAM,OAAO;IAC1B,KAAK;AACH,aAAO,IAAI,WAAW,MAA+C;IACvE,KAAK;AACH,aAAO,IAAI;QACT,IAAI,QAAQ,MAA4C;QACxD;MACF;IACF,KAAK;AACH,aAAO;QACL;MACF;IACF,KAAK;AACH,aAAO,IAAI;QACT,IAAI,eAAe,MAAmD;QACtE;MACF;IACF,KAAK;AACH,aAAO,IAAI;QACT,IAAI,UAAU,MAA8C;QAC5D;MACF;IACF,KAAK;AACH,aAAO,IAAI,QAAQ,MAA4C;IACjE,KAAK,QAAQ;AACX,YAAM,YAAY,OAAO;AACzB,aAAO,IAAI,QAAQ;QACjB,OAAO;QACP,aAAa,OAAO;QACpB,cAAc,OAAO;QACrB,YAAY,OAAO;QACnB,iBAAiB,OAAO;QACxB,QAAQ,OAAO;QACf,SAAS,OAAO;MAClB,CAAC;IACH;IACA;AACE,YAAM,IAAI;QACR,2BAA4B,OAAO,MAAyB,KAAK;MACnE;EACJ;AACF;AAYO,SAAS,2BACd,KACAA,QACS;AAET,QAAM,YAAY,IAAI,eAAe;AAGrC,MAAI,WAAW;AACb,cAAU,YAAY;EACxB;AAEA,QAAM,QAAQ,WAAW,WAAW,KAAM,IAAY;AACtD,QAAM,YAAY,OAAO;AAEzB,MAAI,cAAc,UAAU;AAC1B,UAAM,eAAe,MAAM;AAE3B,cAAU,kBAAkB,MAAM;AAChC,iBAAW,KAAKA,QAAO;AACrB,cAAM,UAAW,IAAY,CAAC;AAC9B,cAAM,YAAY,eAAe,CAAC;AAGlC,YAAI,WAAW,UAAU,WAAW;AAClC,cAAI,OAAOA,OAAM,CAAC,MAAM,UAAU;AAChC,kBAAM,eAAe,QAAQ,IAAI;AACjC,kBAAMK,QAAOL,OAAM,CAAC,IAAI;AACxB,gBAAIK,QAAO,GAAG;AACZ,sBAAQ,UAAUA,KAAI;YACxB,WAAWA,QAAO,GAAG;AACnB,sBAAQ,UAAU,CAACA,KAAI;YACzB;UACF;QACF,WACE,WAAW,UAAU,YACrB,WAAW,UAAU,UACrB;AAEA,cAAI,WAAW,mBAAmB,SAAS;AACzC,uCAA2B,SAASL,OAAM,CAAC,CAAC;UAC9C;QACF,WACE,WAAW,UAAU,UACrB,WAAW,UAAU,eACrB;AAEA,cAAI,WAAW,mBAAmB,SAAS;AACzC,uCAA2B,SAASA,OAAM,CAAC,CAAC;UAC9C;QACF,WAAW,WAAW,UAAU,QAAQ;AAEtC,cAAI,WAAW,OAAO,QAAQ,WAAW,YAAY;AACnD,oBAAQ,OAAOA,OAAM,CAAC,CAAC;UACzB;QACF,WAAW,WAAW,OAAO,QAAQ,QAAQ,YAAY;AAEvD,kBAAQ,IAAIA,OAAM,CAAC,CAAC;QACtB;MACF;IACF,CAAC;AAED,WAAO;EACT;AAEA,MAAI,cAAc,UAAU;AAC1B,cAAU,kBAAkB,MAAM;AAChC,iBAAW,KAAKA,QAAO;AAErB;AAAE,YAAY,IAAI,GAAGA,OAAM,CAAC,CAAC;MAC/B;IACF,CAAC;AAED,WAAO;EACT;AAEA,MAAI,cAAc,UAAU,cAAc,eAAe;AACvD,QAAI,MAAM,QAAQA,MAAK,GAAG;AACxB,YAAM,UAAU;AAEhB,gBAAU,kBAAkB,MAAM;AAChC,YAAI,QAAQ,SAAS,GAAG;AACtB,kBAAQ,OAAO,GAAG,QAAQ,MAAM;QAClC;AACA,mBAAWI,SAAQJ,QAAO;AACxB,kBAAQ,KAAKI,KAAI;QACnB;MACF,CAAC;AAED,aAAO;IACT;EACF;AAEA,MAAI,cAAc,QAAQ;AACxB,QAAI,OAAOJ,WAAU,UAAU;AAC7B;AAAE,UAAY,OAAOA,MAAK;AAC1B,aAAO;IACT;AACA,WAAO;EACT;AAEA,MAAI,cAAc,WAAW;AAC3B,QAAI,OAAOA,WAAU,UAAU;AAC7B,YAAM,eAAgB,IAAY,IAAI;AACtC,YAAMK,QAAOL,SAAQ;AACrB,UAAIK,QAAO,GAAG;AACZ;AAAE,YAAY,UAAUA,KAAI;MAC9B,WAAWA,QAAO,GAAG;AACnB;AAAE,YAAY,UAAU,CAACA,KAAI;MAC/B;AACA,aAAO;IACT;AACA,WAAO;EACT;AAEA,SAAO;AACT;AsBrWO,IAAM,kBAAN,cAEG,iBAAwB;EACxB,gBAAgB,oBAAI,IAAsC;EAC1D;EACA;EACA;EAER,YACE,QAUA;AACA,UAAM;MACJ,GAAG;MACH,cAAc,MAAM;AAClB,cAAM,IAAI,MAAM,+BAA+B;MACjD;MACA,QAAQ,MAAM,OAAO;MACrB,WAAW,OAAO;IACpB,CAA0B;AAE1B,SAAK,MAAM,OAAO;AAClB,SAAK,sBAAsB,OAAO;AAClC,SAAK,aAAa,CAAC,CAAC,OAAO;EAC7B;;EAGA,uBACE,KACA,OACgC;AAEhC,QAAI,MAAM,UAAU,OAAO;AACzB,YAAM,IAAI;QACR;MAEF;IACF;AAEA,UAAM,aACJ,gBAAgB,MAAM,KAAqC;AAC7D,UAAM,SAAS,KAAK,IAAI,UAAU,EAAE,KAAK,KAAK,GAAG;AAIjD,QAAI,KAAK,YAAY;AACnB,aAAO;QACL;QACA,aAAa,KAAK,oBAAoB,GAAG;QACzC,cAAc,MAAM,OAAO,GAAG;;QAC9B,YAAY,KAAK,cAAc;QAC/B,iBAAiB,KAAK,mBAAmB;QACzC,QAAQ,MAAM,KAAK;QACnB,SAAS,KAAK,WAAW;QACzB,YAAY,CAAC,GAAG;;QAChB,WAAW;MACb;IACF;AAGA,WAAO;MACL;MACA,aAAa,KAAK,oBAAoB,GAAG;MACzC,cAAc,MAAM,OAAO,GAAG;MAC9B,YAAY,KAAK,cAAc;MAC/B,iBAAiB,KAAK,mBAAmB;MACzC,QAAQ,MAAM,KAAK;MACnB,SAAS,KAAK,WAAW;IAC3B;EACF;;EAGA,oBACE,KACA,OAC4C;AAC5C,QAAI,MAAM,KAAK,cAAc,IAAI,GAAG;AAEpC,QAAI,CAAC,KAAK;AACR,YAAM,wBAAwB,KAAK,uBAAuB,KAAK,KAAK,CAAC;AACrE,WAAK,cAAc,IAAI,KAAK,GAAG;IACjC;AAEA,WAAO;EACT;;EAGS,sBAA4B;AACnC,eAAW,OAAO,KAAK,cAAc,OAAO,GAAG;AAC7C,UAAI,eAAe,EAAE,sBAAsB;IAC7C;EACF;AACF;ACxGO,IAAM,SAAN,cAA6C,SAAgB;EAClE,CAAC,eAAe;EAEhB,YACE,QAUA;AACA,UAAM;AACN,SAAK,eAAe,IAAI,IAAI,gBAAgB,MAAM;AAClD,SAAK,qBAAqB;EAC5B;EAEQ,uBAA6B;AACnC,UAAM,QAAQ,KAAK,eAAe,EAAE,SAAS;AAC7C,eAAW,OAAO,MAAM,QAAQ;AAC9B,YAAM,iBAAiB,MAAM,OAAO,GAAG;AACvC,aAAO,eAAe,MAAM,KAAK;QAC/B,KAAK,MACH,KAAK,eAAe,EAAE,oBAAoB,KAAK,cAAc;QAC/D,YAAY;MACd,CAAC;IACH;EACF;EAEA,SAAuB;AACrB,UAAM,QAAQ,KAAK,eAAe,EAAE,SAAS;AAC7C,WAAO;MACL;MACA,OAAO,KAAK,MAAM,MAAM;IAC1B;EACF;AACF;AC7BO,SAAS,cACdL,QACAG,SACA,OAAe,IACN;AACT,QAAM,cAAc,QAAQ;AAE5B,MAAI,CAACA,WAAU,OAAOA,YAAW,YAAY,EAAE,WAAWA,UAAS;AACjE,UAAM,IAAI,qBAAqB,aAAa,gBAAgBA,OAAM;EACpE;AAGA,MAAIA,QAAO,UAAU,OAAO;AAC1B,WAAOH;EACT;AAGA,MAAIG,QAAO,UAAU,QAAQ;AAC3B,QAAI,OAAOH,WAAU,UAAU;AAC7B,YAAM,IAAI,qBAAqB,aAAa,UAAUA,MAAK;IAC7D;AACA,WAAOA;EACT;AAEA,MAAIG,QAAO,UAAU,WAAW;AAC9B,QAAI,OAAOH,WAAU,UAAU;AAC7B,YAAM,IAAI,qBAAqB,aAAa,UAAUA,MAAK;IAC7D;AACA,WAAOA;EACT;AAEA,MAAIG,QAAO,UAAU,UAAUA,QAAO,UAAU,eAAe;AAC7D,QAAI,CAAC,MAAM,QAAQH,MAAK,GAAG;AACzB,YAAM,IAAI,qBAAqB,aAAa,SAASA,MAAK;IAC5D;AACA,UAAM,aAAaG;AACnB,WAAOH,OAAM;MAAI,CAACI,OAAM,UACtB,cAAcA,OAAM,WAAW,OAAO,GAAG,WAAW,IAAI,KAAK,GAAG;IAClE;EACF;AAEA,MAAID,QAAO,UAAU,UAAU;AAC7B,QAAI,CAACH,UAAS,OAAOA,WAAU,YAAY,MAAM,QAAQA,MAAK,GAAG;AAC/D,YAAM,IAAI,qBAAqB,aAAa,UAAUA,MAAK;IAC7D;AACA,UAAM,eAAeG;AACrB,UAAM,SAAkC,CAAC;AAGzC,eAAW,CAAC,KAAK,YAAY,KAAK,OAAO,QAAQ,aAAa,MAAM,GAAG;AACrE,YAAM,aAAa,GAAG,WAAW,IAAI,GAAG;AACxC,YAAM,cAAeH,OAAkC,GAAG;AAC1D,aAAO,GAAG,IAAI,cAAc,aAAa,cAAc,UAAU;IACnE;AACA,WAAO;EACT;AAEA,MAAIG,QAAO,UAAU,UAAU;AAC7B,QAAI,CAACH,UAAS,OAAOA,WAAU,YAAY,MAAM,QAAQA,MAAK,GAAG;AAC/D,YAAM,IAAI,qBAAqB,aAAa,UAAUA,MAAK;IAC7D;AACA,UAAM,eAAeG;AACrB,UAAM,SAAkC,CAAC;AAGzC,eAAW,CAAC,KAAK,WAAW,KAAK,OAAO,QAAQH,MAAK,GAAG;AACtD,YAAM,aAAa,GAAG,WAAW,IAAI,GAAG;AACxC,aAAO,GAAG,IAAI,cAAc,aAAa,aAAa,OAAO,UAAU;IACzE;AACA,WAAO;EACT;AAEA,MAAIG,QAAO,UAAU,QAAQ;AAC3B,QAAI,CAAC,MAAM,QAAQH,MAAK,GAAG;AACzB,YAAM,IAAI,qBAAqB,aAAa,gBAAgBA,MAAK;IACnE;AAEA,WAAOA;EACT;AAGA,MAAIG,QAAO,UAAU,SAAS;AAC5B,UAAM,cAAcA;AAEpB,YAAQ,YAAY,WAAW;;MAE7B,KAAK;AACH,eAAOH;MAET,KAAK,UAAU;AACb,YAAI,OAAOA,WAAU,UAAU;AAC7B,gBAAM,IAAI,qBAAqB,aAAa,UAAUA,MAAK;QAC7D;AACA,cAAM,eAAe;AACrB,YAAI,aAAa,WAAW,CAAC,aAAa,QAAQ,SAASA,MAAK,GAAG;AACjE,gBAAM,IAAI;YACR;YACA,WAAW,aAAa,QAAQ,KAAK,IAAI,CAAC;YAC1CA;UACF;QACF;AACA,eAAOA;MACT;MAEA,KAAK;AACH,YAAI,OAAOA,WAAU,UAAU;AAC7B,gBAAM,IAAI,qBAAqB,aAAa,UAAUA,MAAK;QAC7D;AACA,eAAOA;MAET,KAAK;AACH,YAAI,OAAOA,WAAU,WAAW;AAC9B,gBAAM,IAAI,qBAAqB,aAAa,WAAWA,MAAK;QAC9D;AACA,eAAOA;MAET,KAAK;AACH,YAAIA,WAAU,MAAM;AAClB,gBAAM,IAAI,qBAAqB,aAAa,QAAQA,MAAK;QAC3D;AACA,eAAOA;MAET,KAAK;AACH,YAAIA,WAAU,QAAW;AACvB,gBAAM,IAAI,qBAAqB,aAAa,aAAaA,MAAK;QAChE;AACA,eAAOA;MAET,KAAK;AACH,YAAI,EAAEA,kBAAiB,aAAa;AAClC,gBAAM,IAAI,qBAAqB,aAAa,cAAcA,MAAK;QACjE;AACA,eAAOA;MAET,KAAK,UAAU;AACb,YAAI,CAACA,UAAS,OAAOA,WAAU,YAAY,MAAM,QAAQA,MAAK,GAAG;AAC/D,gBAAM,IAAI,qBAAqB,aAAa,UAAUA,MAAK;QAC7D;AACA,cAAM,eAAe;AACrB,cAAM,SAAkC,CAAC;AAGzC,mBAAW,CAAC,KAAK,YAAY,KAAK,OAAO,QAAQ,aAAa,KAAK,GAAG;AACpE,gBAAM,aAAa,GAAG,WAAW,IAAI,GAAG;AACxC,gBAAM,cAAeA,OAAkC,GAAG;AAC1D,iBAAO,GAAG,IAAI,cAAc,aAAa,cAAc,UAAU;QACnE;AACA,eAAO;MACT;MAEA,KAAK,UAAU;AACb,YAAI,CAACA,UAAS,OAAOA,WAAU,YAAY,MAAM,QAAQA,MAAK,GAAG;AAC/D,gBAAM,IAAI,qBAAqB,aAAa,UAAUA,MAAK;QAC7D;AACA,cAAM,eAAe;AACrB,cAAM,SAAkC,CAAC;AAGzC,mBAAW,CAAC,KAAK,WAAW,KAAK,OAAO,QAAQA,MAAK,GAAG;AACtD,gBAAM,aAAa,GAAG,WAAW,IAAI,GAAG;AACxC,iBAAO,GAAG,IAAI;YACZ;YACA,aAAa;YACb;UACF;QACF;AACA,eAAO;MACT;MAEA,KAAK,SAAS;AACZ,YAAI,CAAC,MAAM,QAAQA,MAAK,GAAG;AACzB,gBAAM,IAAI,qBAAqB,aAAa,SAASA,MAAK;QAC5D;AACA,cAAM,cAAc;AACpB,eAAOA,OAAM;UAAI,CAACI,OAAM,UACtB,cAAcA,OAAM,YAAY,OAAO,GAAG,WAAW,IAAI,KAAK,GAAG;QACnE;MACF;MAEA,KAAK,SAAS;AACZ,cAAM,cAAc;AAGpB,mBAAW,SAAS,YAAY,QAAQ;AACtC,cAAI;AACF,mBAAO,cAAcJ,QAAO,OAAO,WAAW;UAChD,QAAQ;UAER;QACF;AAEA,cAAM,IAAI,qBAAqB,aAAa,sBAAsBA,MAAK;MACzE;MAEA,KAAK,sBAAsB;AACzB,YAAI,CAACA,UAAS,OAAOA,WAAU,YAAY,MAAM,QAAQA,MAAK,GAAG;AAC/D,gBAAM,IAAI,qBAAqB,aAAa,UAAUA,MAAK;QAC7D;AAEA,cAAM,cAAc;AACpB,cAAM,kBAAkB,YAAY;AACpC,cAAM,oBAAqBA,OACzB,eACF;AAEA,YAAI,OAAO,sBAAsB,UAAU;AACzC,gBAAM,IAAI;YACR,GAAG,WAAW,IAAI,eAAe;YACjC;YACA;UACF;QACF;AAEA,cAAM,gBAAgB,YAAY,SAAS,iBAAiB;AAE5D,YAAI,CAAC,eAAe;AAClB,gBAAM,IAAI;YACR,GAAG,WAAW,IAAI,eAAe;YACjC,WAAW,OAAO,KAAK,YAAY,QAAQ,EAAE,KAAK,IAAI,CAAC;YACvD;UACF;QACF;AAEA,eAAO,cAAcA,QAAO,eAAe,WAAW;MACxD;MAEA;AACE,cAAM,IAAI;UACR;UACA;UACC,YAAoB;QACvB;IACJ;EACF;AAEA,QAAM,IAAI,qBAAqB,aAAa,qBAAqBG,OAAM;AACzE;AAMO,SAAS,oBACd,aACAA,SACU;AACV,MACE,CAAC,eACD,OAAO,gBAAgB,YACvB,MAAM,QAAQ,WAAW,GACzB;AACA,UAAM,IAAI,MAAM,+BAA+B;EACjD;AAEA,QAAM,SAAkC,CAAC;AAGzC,aAAW,CAAC,KAAK,WAAW,KAAK,OAAO,QAAQA,QAAO,MAAM,GAAG;AAC9D,UAAMH,SAAS,YAAwC,GAAG;AAC1D,WAAO,GAAG,IAAI,cAAcA,QAAO,aAAa,GAAG;EACrD;AAEA,SAAO;AACT;ArCjPA,SAAS,yBACP,WACA,OACA,YACO;AACP,UAAQ,MAAM,OAAO;IACnB,KAAK,UAAU;AACb,YAAM,cAAc;AACpB,YAAM,SAAgC,CAAC;AAEvC,iBAAW,CAAC,KAAK,WAAW,KAAK,OAAO,QAAQ,YAAY,MAAM,GAAG;AACnE,YAAI,aAAa,WAAW,GAAG;AAE7B,gBAAM,gBAAgB,uBAAuB,UAAU;AACvD,gBAAM,YAAY,UAAU,aAAa;AACzC,cAAI,aAAa,OAAO,WAAW;AACjC,mBAAO,GAAG,IAAI,UAAU,GAAG;UAC7B;QACF,OAAO;AAEL,gBAAM,YAAY,CAAC,GAAG,YAAY,GAAG;AACrC,iBAAO,GAAG,IAAI;YACZ;YACA;YACA;UACF;QACF;MACF;AAEA,aAAO;IACT;IAEA,KAAK,UAAU;AACb,YAAM,cAAc;AACpB,YAAM,gBAAgB,uBAAuB,UAAU;AACvD,YAAM,YAAY,UAAU,aAAa;AAEzC,UAAI,CAAC,WAAW;AACd,eAAO,CAAC;MACV;AAEA,YAAM,SAAgC,CAAC;AAEvC,iBAAW,OAAO,OAAO,KAAK,SAAS,GAAG;AACxC,cAAMA,SAAQ,UAAU,GAAG;AAE3B,YAAI,aAAa,YAAY,KAAK,GAAG;AAEnC,iBAAO,GAAG,IAAIA;QAChB,WAAWA,WAAU,MAAM;AAEzB,gBAAM,YAAY,CAAC,GAAG,YAAY,GAAG;AACrC,iBAAO,GAAG,IAAI;YACZ;YACA,YAAY;YACZ;UACF;QACF,OAAO;AAEL,iBAAO,GAAG,IAAIA;QAChB;MACF;AAEA,aAAO;IACT;IAEA,KAAK;IACL,KAAK,eAAe;AAGlB,YAAM,gBAAgB,uBAAuB,UAAU;AACvD,aAAO,UAAU,aAAa;IAChC;IAEA,KAAK,QAAQ;AAEX,YAAM,gBAAgB,uBAAuB,UAAU;AACvD,aAAO,UAAU,aAAa;IAChC;IAEA,KAAK,WAAW;AAEd,YAAM,gBAAgB,uBAAuB,UAAU;AACvD,aAAO,UAAU,aAAa;IAChC;IAEA,KAAK,QAAQ;AAEX,YAAM,gBAAgB,uBAAuB,UAAU;AACvD,aAAO,UAAU,aAAa;IAChC;IAEA;AACE,aAAO,CAAC;EACZ;AACF;AAMA,SAAS,4BACP,WACA,UACuB;AACvB,QAAM,SAAgC,CAAC;AAEvC,aAAW,CAAC,KAAK,cAAc,KAAK,OAAO,QAAQ,SAAS,MAAM,GAAG;AAEnE,QAAI,0BAA0B,GAAG,GAAG;AAClC;IACF;AACA,WAAO,GAAG,IAAI,yBAAyB,WAAW,gBAAgB,CAAC,GAAG,CAAC;EACzE;AAEA,SAAO;AACT;AAKA,SAAS,mBACP,WACuB;AACvB,QAAM,SAAgC,CAAC;AACvC,aAAW,CAAC,KAAKA,MAAK,KAAK,OAAO,QAAQ,SAAS,GAAG;AACpD,QAAI,CAAC,0BAA0B,GAAG,GAAG;AACnC,aAAO,GAAG,IAAIA;IAChB;EACF;AACA,SAAO;AACT;AAMA,IAAM,mBAAN,MAA+C;EACrC;EACA;EACA;EACA;EACA;EACA;EACA,WAAiC;;EAEzC,QAAgC;EAEhC,YACE,OACAC,OAAe,IAAI,QAAQ,GAC3B,SACA,kBAAkB,OAClB,iBAAiB,OACjB;AACA,SAAK,QAAQ;AACb,SAAK,cAAc,kBAAkB,KAAK;AAC1C,SAAK,MAAMA;AACX,SAAK,UAAU;AAIf,QAAI,YAAYA,IAAG,GAAG;AAEpB,YAAM,OAAO,aAAaA,IAAG;AAC7B,WAAK,aAAa,KAAK,aAAa;AACpC,WAAK,eAAe;IACtB,OAAO;AAEL,WAAK,aAAa;AAClB,WAAK,eAAe;AAGpB,UAAI,CAAC,gBAAgB;AACnB,aAAK,WAAW;MAClB;IACF;AAEA,wBAAoB,KAAK,aAAa,KAAK,KAAK;EAClD;;;;;;EAOA,aAAmB;AACjB,QAAI,KAAK,aAAc;AACvB,kBAAc,KAAK,KAAK,EAAE,WAAW,KAAK,WAAW,CAAC;AACtD,SAAK,eAAe;EACtB;EAEA,IAAI,cAAuB;AACzB,WAAO,KAAK;EACd;EAEA,IAAI,YAAqB;AACvB,WAAO,KAAK;EACd;EAEA,IAAI,QAAwB;AAC1B,QAAI,CAAC,KAAK,UAAU;AAClB,WAAK,WAAW,IAAI,OAAO;QACzB,OAAO,KAAK;QACZ,aAAa,KAAK;QAClB,KAAK,KAAK;QACV,YAAY;QACZ,SAAS,KAAK;QACd,WAAW,KAAK;MAClB,CAAC;IACH;AACA,WAAO,KAAK;EACd;EAEA,SAAuB;AACrB,QAAI,KAAK,SAAS;AAChB,YAAM,UAAU;QACd,KAAK;QACL,OAAO,KAAK,KAAK,MAAM,MAAM;MAC/B;AAEA,aAAO;QACL,KAAK;QACL;QACA,KAAK;MACP;IACF;AAEA,UAAM,YAAY,KAAK,IAAI,OAAO;AAIlC,UAAM,oBAAoB,KAAK,aAC3B,4BAA4B,WAAW,KAAK,KAAK,IACjD,mBAAmB,SAAS;AAEhC,WAAO;MACL,KAAK;MACL;MACA,KAAK;IACP;EACF;EAEA,OAAO,IAAmC,SAA+B;AACvE,UAAM,QAAQ,IAAI,OAAO;MACvB,OAAO,KAAK;MACZ,aAAa,KAAK;MAClB,KAAK,KAAK;MACV,YAAY;MACZ,iBAAiB;;MACjB,SAAS,KAAK;MACd,WAAW,KAAK;IAClB,CAAC;AACD,OAAG,KAAgC;AACnC,UAAM,eAAe,EAAE,sBAAsB;AAG7C,UAAM,oBAAoB,uBAAuB,SAAS,aAAa;AACvE,QAAI,mBAAmB;AACrB,WAAK,IAAI,qBAAqB,iBAAiB;IACjD;AAEA,SAAK,IAAI,OAAO;AAGhB,SAAK,WAAW;EAClB;EAEA,WAAW,OAAkB,YAAwC;AACnE,SAAK,OAAO,CAAA,UAAS;AACnB,YAAM,aAAa,IAAI,oBAAoB,KAAK;AAEhD,YAAM,gBAAgB,aAClB,MAAM,IAAI,CAAC,QAA4B;QACrC,GAAG;QACH,MAAM,CAAC,GAAG,YAAY,GAAG,cAAc,GAAG,IAAI,CAAC;MACjD,EAAE,IACF;AAEJ,iBAAW,WAAW,aAAa;IACrC,CAAC;EACH;EAEA,IAAI,UAAmB;AACrB,WAAO,KAAK;EACd;EAEA,IAAI,WAAkB;AACpB,WAAO,KAAK;EACd;EAEA,IAAI,WAAoB;AAEtB,WAAO,mBAAmB,KAAK,IAAI,OAAO,CAAC;EAC7C;AACF;AAuIO,SAAS,eACd,OACA,UAAiC,CAAC,GACjB;AAGjB,QAAM,qBAAqB,QAAQ,aAAa,MAAM,aAAa;AAEnE,QAAM,WAAW,IAAI;IACnB;IACA,QAAQ,OAAO,IAAI,QAAQ;IAC3B,QAAQ;IACR;IACA,QAAQ,kBAAkB;EAC5B;AAGA,QAAM,eAAiC;IACrC,KAAK,MAAsD;AACzD,YAAM,gBAAgB,SAAS,QAAQ,KAAK;AAC5C,UAAI,MAAM,gBAAgB;AACxB,sBAAc,UAAU,SAAS,QAAQ,MAAM;MACjD;AACA,aAAO,eAAe,SAAS,UAAU;QACvC,KAAK;QACL,WAAW,SAAS;MACtB,CAAC;IACH;IACA,OAAO,WAAuC;AAC5C,YAAM,gBAAgB,SAAS,QAAQ,OAAO,SAAS;AACvD,aAAO,eAAe,SAAS,UAAU;QACvC,KAAK;QACL,WAAW,SAAS;MACtB,CAAC;IACH;IACA,cACE,WACA,MACiB;AAEjB,YAAM,eAAe,SAAS,QAAQ,OAAO;QAC3C,MAAM;QACN;MACF,CAAC;AAED,YAAM,iBAAiB,QAAQ,aAAa,YAAY;AAExD,UAAI,MAAM,gBAAgB;AACxB,uBAAe,UAAU,SAAS,QAAQ,MAAM;MAClD;AACA,aAAO,eAAe,SAAS,UAAU;QACvC,KAAK;QACL,WAAW,SAAS;MACtB,CAAC;IACH;IACA,aAAmB;AACjB,eAAS,WAAW;IACtB;IACA,WAAW,OAAkB,YAAwC;AACnE,eAAS,WAAW,OAAO,UAAU;IACvC;IACA,IAAI,WAAkB;AACpB,aAAO,SAAS;IAClB;IACA,IAAI,WAAoB;AACtB,aAAO,SAAS;IAClB;IACA,IAAI,YAAqB;AACvB,aAAO,SAAS;IAClB;IACA,OACE,IACAiB,UACiB;AACjB,eAAS,OAAO,IAAIA,QAAO;AAC3B,aAAO;IACT;EACF;AAGA,QAAM,QAAQ,IAAI,MAAM,SAAS,OAAiB;IAChD,IAAI,QAAQV,OAAM,UAAU;AAE1B,UAAIA,UAAS,aAAa;AACxB,eAAO,SAAS;MAClB;AAGA,UAAIA,UAAS,YAAY;AACvB,eAAO;MACT;AAGA,UAAIA,UAAS,UAAU;AACrB,eAAO,MAAM,SAAS,OAAO;MAC/B;AAGA,aAAO,QAAQ,IAAI,QAAQA,OAAM,QAAQ;IAC3C;IAEA,IAAI,QAAQA,OAAMR,QAAO,UAAU;AAEjC,UAAIQ,UAAS,eAAeA,UAAS,YAAY;AAC/C,eAAO;MACT;AAGA,aAAO,QAAQ,IAAI,QAAQA,OAAMR,QAAO,QAAQ;IAClD;;IAGA,IAAI,QAAQQ,OAAM;AAChB,UAAIA,UAAS,eAAeA,UAAS,WAAY,QAAO;AACxD,aAAO,QAAQ,IAAI,QAAQA,KAAI;IACjC;;;IAIA,QAAQ,QAAQ;AACd,aAAO,QAAQ,QAAQ,MAAM,EAAE,OAAO,CAAA,QAAO,OAAO,QAAQ,QAAQ;IACtE;IAEA,yBAAyB,QAAQA,OAAM;AACrC,UAAIA,UAAS,aAAa;AACxB,eAAO;UACL,cAAc;UACd,YAAY;UACZ,OAAO,SAAS;QAClB;MACF;AACA,UAAIA,UAAS,YAAY;AACvB,eAAO;UACL,cAAc;UACd,YAAY;UACZ,OAAO;QACT;MACF;AACA,aAAO,QAAQ,yBAAyB,QAAQA,KAAI;IACtD;EACF,CAAC;AAGD,WAAS,QAAQ;AAEjB,SAAO;AACT;AsC/bO,SAAS,OACd,QAOA,IACA,SAMiB;AAGjB,QAAM,QAAS,OAAe,UAAU;AACxC,MAAI,SAAS,YAAY,OAAO;AAE9B,WAAO,MAAM,OAAO,IAAI,OAAO;EACjC;AAGA,SAAO,UAAU,QAAwC,IAAI,OAAO;AACtE;AAOA,SAAS,UACP,KACA,IACA,SACG;AAEH,QAAM,YAAa,IAAY,eAAe;AAC9C,MAAI,CAAC,WAAW;AACd,UAAM,IAAI;MACR;IAEF;EACF;AAGA,QAAM,SAAS,UAAU,kBAAkB;AAG3C,QAAM,cAAc;IAClB,GAAG;IACH,YAAY;IACZ,iBAAiB;EACnB;AAGA,QAAM,QAAQ,wBAAwB,WAAW;AAGjD,KAAG,KAAK;AAGR,QAAM,iBAAkB,MAAc,eAAe;AACrD,iBAAe,sBAAsB;AAGrC,QAAM,UAAU,UAAU,OAAO;AACjC,QAAM,oBAAoB,uBAAuB,SAAS,aAAa;AACvE,MAAI,mBAAmB;AACrB,YAAQ,qBAAqB,iBAAiB;EAChD;AAIA,UAAQ,OAAO;AAGf,SAAO;AACT;AAkFO,SAAS,UACd,QAMA,oBAIA,UACY;AAEZ,QAAM,eAAe,aAAa;AAElC,MAAI,cAAc;AAEhB,UAAMP,OAAM;AACZ,UAAM,WAAW;AAGjB,UAAM,KAAK;AACX,WAAO,gBAAgBA,MAAK,UAAU,EAAE;EAC1C;AAGA,QAAM,QAAS,OAAe,UAAU;AACxC,QAAM,QAAQ,SAAS,cAAc;AACrC,QAAM,QAAQ,eAAe,UAAU,CAAC;AAExC,MAAI,OAAO;AAGT,UAAM,UAAW,OAAe,WAAW;AAC3C,UAAM,KAAK;AACX,UAAM,eAA6B,QAAQ,UAAU,EAAE;AACvD,WAAO,MAAM,aAAa;EAC5B;AAEA,MAAI,OAAO;AAGT,UAAM,gBAAiB,OAAe,WAAW;AACjD,UAAM,KAAK;AAEX,UAAM,eAA6B,cAAc,UAAU,EAAE;AAC7D,WAAO,MAAM,aAAa;EAC5B;AAEA,QAAM,IAAI;IACR;EAEF;AACF;AGkHA,SAAS,aACP,OACuD;AACvD,QAAM,YAA4B;IAChC,OAAO;IACP,WAAW;IACX,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,cAAc;EAChB;AAEA,QAAMkB,QAA6C;IACjD,OAAO;IACP,WAAW;IACX,QAAQ,CAAC,WAAW,KAAK;IACzB,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,cAAc;;EAChB;AAEA,SAAO,OAAO,OAAOA,OAAM;IACzB,YACEC,QACsC;AACtC,aAAO,EAAE,GAAGD,OAAM,cAAcC,OAAM;IAGxC;EACF,CAAC;AACH;AASO,IAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;EAsBnB,KAAK,CACH,QACA,aACiB;IACjB,OAAO;IACP;IACA,QAAQ,CAAC;IACT,UAAU,CAAC;IACX,QAAQ,CAAC;IACT,cAAc,CAAC;IACf,WAAW,SAAS;EACtB;;;;;;;;;;;;;;;;EAiBA,KAAK,OAA0B;IAC7B,OAAO;IACP,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,cAAc;EAChB;;;EAIA,SAAS,MAA8C;AACrD,UAAMD,QAA8B;MAClC,OAAO;MACP,QAAQ;MACR,UAAU,CAAC;MACX,QAAQ,CAAC;MACT,cAAc;IAChB;AACA,WAAO,OAAO,OAAOA,OAAM;MACzB,YAAYC,QAAsC;AAChD,eAAO,EAAE,GAAGD,OAAM,cAAcC,OAAM;MACxC;IACF,CAAC;EACH;EAEA,MAAM,CAAkC,WAAqC;IAC3E,OAAO;IACP;IACA,QAAQ,CAAC;IACT,UAAU,CAAC;IACX,QAAQ,CAAC;IACT,cAAc,CAAC;EACjB;;;;;;;;;;;;;;;EAgBA,QAAQ,CACN,WAC6B;IAC7B,OAAO;IACP,QAAQ;IACR,QAAQ,CAAC;IACT,UAAU,CAAC;IACX,QAAQ,CAAC;IACT,cAAc,CAAC;EACjB;EAEA,QAAQ,CACN,WAC6B;IAC7B,OAAO;IACP;IACA,QAAQ,CAAC;IACT,UAAU,CAAC;IACX,QAAQ,CAAC;IACT,cAAc,CAAC;EACjB;EAEA,aAAa,CACX,WACkC;IAClC,OAAO;IACP;IACA,QAAQ,CAAC;IACT,UAAU,CAAC;IACX,QAAQ,CAAC;IACT,cAAc,CAAC;EACjB;EAEA,MAAM,MAA2C;AAC/C,UAAMD,QAA2B;MAC/B,OAAO;MACP,QAAQ;MACR,UAAU,CAAC;MACX,QAAQ,CAAC;MACT,cAAc;IAChB;AACA,WAAO,OAAO,OAAOA,OAAM;MACzB,YAAYC,QAAmC;AAC7C,eAAO,EAAE,GAAGD,OAAM,cAAcC,OAAM;MACxC;IACF,CAAC;EACH;;;;;;;;;;;;;;;;;;;;;;;EAwBA,MAAM,CAAiC,WAAqC;IAC1E,OAAO;IACP;IACA,QAAQ,CAAC;IACT,UAAU,CAAC;IACX,QAAQ,CAAC;IACT,cAAc,CAAC;EACjB;;;;;EAMA,OAAO;IACL,QAAQ,IACH,YAEkC;AACrC,YAAMD,QAA4B;QAChC,OAAO;QACP,WAAW;QACX,QAAS,QAAQ,CAAC,KAAK;QACvB,UAAU,CAAC;QACX,QAAQ,CAAC;QACT,cAAe,QAAQ,CAAC,KAAK;QAC7B,SAAS,QAAQ,SAAS,IAAI,UAAU;MAC1C;AACA,aAAO,OAAO,OAAOA,OAAM;QACzB,YAAYC,QAA+B;AACzC,iBAAO,EAAE,GAAGD,OAAM,cAAcC,OAAM;QACxC;QACA,WAEE;AACA,iBAAO,aAAaD,KAAI;QAC1B;MACF,CAAC;IACH;IAEA,QAAQ,MAC4B;AAClC,YAAMA,QAAyB;QAC7B,OAAO;QACP,WAAW;QACX,QAAQ;QACR,UAAU,CAAC;QACX,QAAQ,CAAC;QACT,cAAc;MAChB;AACA,aAAO,OAAO,OAAOA,OAAM;QACzB,YAAYC,QAAiC;AAC3C,iBAAO,EAAE,GAAGD,OAAM,cAAcC,OAAM;QACxC;QACA,WAEE;AACA,iBAAO,aAAaD,KAAI;QAC1B;MACF,CAAC;IACH;IAEA,SAAS,MAC4B;AACnC,YAAMA,QAA0B;QAC9B,OAAO;QACP,WAAW;QACX,QAAQ;QACR,UAAU,CAAC;QACX,QAAQ,CAAC;QACT,cAAc;MAChB;AACA,aAAO,OAAO,OAAOA,OAAM;QACzB,YAAYC,QAAmC;AAC7C,iBAAO,EAAE,GAAGD,OAAM,cAAcC,OAAM;QACxC;QACA,WAEE;AACA,iBAAO,aAAaD,KAAI;QAC1B;MACF,CAAC;IACH;IAEA,MAAM,OAAuB;MAC3B,OAAO;MACP,WAAW;MACX,QAAQ;MACR,UAAU,CAAC;MACX,QAAQ;MACR,cAAc;IAChB;IAEA,WAAW,OAA4B;MACrC,OAAO;MACP,WAAW;MACX,QAAQ;MACR,UAAU,CAAC;MACX,QAAQ;MACR,cAAc;IAChB;IAEA,YAAY,MAC4B;AACtC,YAAMA,QAA6B;QACjC,OAAO;QACP,WAAW;QACX,QAAQ,IAAI,WAAW;QACvB,UAAU,CAAC;QACX,QAAQ,CAAC;QACT,cAAc,IAAI,WAAW;MAC/B;AACA,aAAO,OAAO,OAAOA,OAAM;QACzB,WAEE;AACA,iBAAO,aAAaA,KAAI;QAC1B;MACF,CAAC;IACH;;;;;;;;;;;;;IAcA,OAAO,MAAiE;AACtE,YAAMA,QAA6B;QACjC,OAAO;QACP,WAAW;QACX,QAAQ,IAAI,WAAW;QACvB,UAAU,CAAC;QACX,QAAQ,CAAC;QACT,cAAc,IAAI,WAAW;MAC/B;AACA,aAAO,OAAO,OAAOA,OAAM;QACzB,WAEE;AACA,iBAAO,aAAaA,KAAI;QAC1B;MACF,CAAC;IACH;;;;;;;;;;;;IAaA,KAAK,OAAsB;MACzB,OAAO;MACP,WAAW;MACX,QAAQ;MACR,UAAU,CAAC;MACX,QAAQ,CAAC;MACT,cAAc;IAChB;;;;;;;;;;;;;IAcA,QAAQ,CACN,UAC4D;AAC5D,YAAMA,QAA4B;QAChC,OAAO;QACP,WAAW;QACX;QACA,QAAQ,CAAC;QACT,UAAU,CAAC;QACX,QAAQ,CAAC;QACT,cAAc,CAAC;MACjB;AACA,aAAO,OAAO,OAAOA,OAAM;QACzB,WAEE;AACA,iBAAO,aAAaA,KAAI;QAC1B;MACF,CAAC;IACH;IAEA,QAAQ,CACN,UAC4D;AAC5D,YAAMA,QAA4B;QAChC,OAAO;QACP,WAAW;QACX;QACA,QAAQ,CAAC;QACT,UAAU,CAAC;QACX,QAAQ,CAAC;QACT,cAAc,CAAC;MACjB;AACA,aAAO,OAAO,OAAOA,OAAM;QACzB,WAEE;AACA,iBAAO,aAAaA,KAAI;QAC1B;MACF,CAAC;IACH;IAEA,OAAO,CACL,UAC0D;AAC1D,YAAMA,QAA2B;QAC/B,OAAO;QACP,WAAW;QACX;QACA,QAAQ,CAAC;QACT,UAAU,CAAC;QACX,QAAQ,CAAC;QACT,cAAc,CAAC;MACjB;AACA,aAAO,OAAO,OAAOA,OAAM;QACzB,WAEE;AACA,iBAAO,aAAaA,KAAI;QAC1B;MACF,CAAC;IACH;;;IAIA,OAAO,CACL,WACwC;AACxC,YAAMA,QAA2B;QAC/B,OAAO;QACP,WAAW;QACX;QACA,QAAQ,CAAC;QACT,UAAU,CAAC;QACX,QAAQ,CAAC;QACT,cAAc,CAAC;MACjB;AACA,aAAO,OAAO,OAAOA,OAAM;QACzB,YAAYC,QAAsD;AAChE,iBAAO,EAAE,GAAGD,OAAM,cAAcC,OAAM;QACxC;MACF,CAAC;IACH;;;;;;;;;;;;;;;;;;;;;;;;;;;IA4BA,oBAAoB,CAIlB,iBACA,aACwD;AACxD,YAAMD,QAA2C;QAC/C,OAAO;QACP,WAAW;QACX;QACA;QACA,QAAQ,CAAC;QACT,UAAU,CAAC;QACX,QAAQ,CAAC;QACT,cAAc,CAAC;MACjB;AACA,aAAO,OAAO,OAAOA,OAAM;QACzB,YACEC,QACoC;AACpC,iBAAO,EAAE,GAAGD,OAAM,cAAcC,OAAM;QACxC;MACF,CAAC;IACH;EACF;AACF;;;AE+QA,SAAS,WAAAC,gBAAe;;;ACjxCxB,SAAS,WAAW,SAAS;AAC3B,OAAK,UAAU;AACjB;AAEA,WAAW,YAAY;AAAA,EACrB,aAAa;AAAA,EAEb,MAAM,SAAS,KAAK;AAClB,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,QAAQ,KAAK;AAC5C,UAAI,KAAK,QAAQ,CAAC,MAAM,IAAK,QAAO;AACtC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,SAAS,KAAK;AACjB,QAAIC,SAAQ,KAAK,KAAK,GAAG;AACzB,WAAOA,UAAS,KAAK,SAAY,KAAK,QAAQA,SAAQ,CAAC;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQ,SAAS,KAAK,OAAO,QAAQ;AACnC,QAAI,OAAO,UAAU,UAAU,MAAM,KAAK,OAAO,MAAM,IAAI;AAC3D,QAAIA,SAAQ,KAAK,KAAK,GAAG,GAAG,UAAU,KAAK,QAAQ,MAAM;AACzD,QAAIA,UAAS,IAAI;AACf,cAAQ,KAAK,UAAU,KAAK,KAAK;AAAA,IACnC,OAAO;AACL,cAAQA,SAAQ,CAAC,IAAI;AACrB,UAAI,OAAQ,SAAQA,MAAK,IAAI;AAAA,IAC/B;AACA,WAAO,IAAI,WAAW,OAAO;AAAA,EAC/B;AAAA;AAAA;AAAA,EAIA,QAAQ,SAAS,KAAK;AACpB,QAAIA,SAAQ,KAAK,KAAK,GAAG;AACzB,QAAIA,UAAS,GAAI,QAAO;AACxB,QAAI,UAAU,KAAK,QAAQ,MAAM;AACjC,YAAQ,OAAOA,QAAO,CAAC;AACvB,WAAO,IAAI,WAAW,OAAO;AAAA,EAC/B;AAAA;AAAA;AAAA,EAIA,YAAY,SAAS,KAAK,OAAO;AAC/B,WAAO,IAAI,WAAW,CAAC,KAAK,KAAK,EAAE,OAAO,KAAK,OAAO,GAAG,EAAE,OAAO,CAAC;AAAA,EACrE;AAAA;AAAA;AAAA,EAIA,UAAU,SAAS,KAAK,OAAO;AAC7B,QAAI,UAAU,KAAK,OAAO,GAAG,EAAE,QAAQ,MAAM;AAC7C,YAAQ,KAAK,KAAK,KAAK;AACvB,WAAO,IAAI,WAAW,OAAO;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,SAAS,OAAO,KAAK,OAAO;AACrC,QAAI,UAAU,KAAK,OAAO,GAAG,GAAG,UAAU,QAAQ,QAAQ,MAAM;AAChE,QAAIA,SAAQ,QAAQ,KAAK,KAAK;AAC9B,YAAQ,OAAOA,UAAS,KAAK,QAAQ,SAASA,QAAO,GAAG,KAAK,KAAK;AAClE,WAAO,IAAI,WAAW,OAAO;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,SAAS,GAAG;AACnB,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,QAAQ,KAAK;AAC5C,QAAE,KAAK,QAAQ,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,SAASC,MAAK;AACrB,IAAAA,OAAM,WAAW,KAAKA,IAAG;AACzB,QAAI,CAACA,KAAI,KAAM,QAAO;AACtB,WAAO,IAAI,WAAWA,KAAI,QAAQ,OAAO,KAAK,SAASA,IAAG,EAAE,OAAO,CAAC;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,SAASA,MAAK;AACpB,IAAAA,OAAM,WAAW,KAAKA,IAAG;AACzB,QAAI,CAACA,KAAI,KAAM,QAAO;AACtB,WAAO,IAAI,WAAW,KAAK,SAASA,IAAG,EAAE,QAAQ,OAAOA,KAAI,OAAO,CAAC;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,SAASA,MAAK;AACtB,QAAI,SAAS;AACb,IAAAA,OAAM,WAAW,KAAKA,IAAG;AACzB,aAAS,IAAI,GAAG,IAAIA,KAAI,QAAQ,QAAQ,KAAK;AAC3C,eAAS,OAAO,OAAOA,KAAI,QAAQ,CAAC,CAAC;AACvC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA,EAIA,UAAU,WAAW;AACnB,QAAI,SAAS,CAAC;AACd,SAAK,QAAQ,SAAS,KAAK,OAAO;AAAE,aAAO,GAAG,IAAI;AAAA,IAAO,CAAC;AAC1D,WAAO;AAAA,EACT;AAAA;AAAA;AAAA,EAIA,IAAI,OAAO;AACT,WAAO,KAAK,QAAQ,UAAU;AAAA,EAChC;AACF;AAMA,WAAW,OAAO,SAAS,OAAO;AAChC,MAAI,iBAAiB,WAAY,QAAO;AACxC,MAAI,UAAU,CAAC;AACf,MAAI,MAAO,UAASC,SAAQ,MAAO,SAAQ,KAAKA,OAAM,MAAMA,KAAI,CAAC;AACjE,SAAO,IAAI,WAAW,OAAO;AAC/B;AAEA,IAAO,eAAQ;;;ACtIf,SAAS,cAAc,GAAG,GAAG,KAAK;AAC9B,WAAS,IAAI,KAAI,KAAK;AAClB,QAAI,KAAK,EAAE,cAAc,KAAK,EAAE;AAC5B,aAAO,EAAE,cAAc,EAAE,aAAa,OAAO;AACjD,QAAI,SAAS,EAAE,MAAM,CAAC,GAAG,SAAS,EAAE,MAAM,CAAC;AAC3C,QAAI,UAAU,QAAQ;AAClB,aAAO,OAAO;AACd;AAAA,IACJ;AACA,QAAI,CAAC,OAAO,WAAW,MAAM;AACzB,aAAO;AACX,QAAI,OAAO,UAAU,OAAO,QAAQ,OAAO,MAAM;AAC7C,eAAS,IAAI,GAAG,OAAO,KAAK,CAAC,KAAK,OAAO,KAAK,CAAC,GAAG;AAC9C;AACJ,aAAO;AAAA,IACX;AACA,QAAI,OAAO,QAAQ,QAAQ,OAAO,QAAQ,MAAM;AAC5C,UAAI,QAAQ,cAAc,OAAO,SAAS,OAAO,SAAS,MAAM,CAAC;AACjE,UAAI,SAAS;AACT,eAAO;AAAA,IACf;AACA,WAAO,OAAO;AAAA,EAClB;AACJ;AACA,SAAS,YAAY,GAAG,GAAG,MAAM,MAAM;AACnC,WAAS,KAAK,EAAE,YAAY,KAAK,EAAE,gBAAc;AAC7C,QAAI,MAAM,KAAK,MAAM;AACjB,aAAO,MAAM,KAAK,OAAO,EAAE,GAAG,MAAM,GAAG,KAAK;AAChD,QAAI,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,OAAO,OAAO;AAClE,QAAI,UAAU,QAAQ;AAClB,cAAQ;AACR,cAAQ;AACR;AAAA,IACJ;AACA,QAAI,CAAC,OAAO,WAAW,MAAM;AACzB,aAAO,EAAE,GAAG,MAAM,GAAG,KAAK;AAC9B,QAAI,OAAO,UAAU,OAAO,QAAQ,OAAO,MAAM;AAC7C,UAAI,OAAO,GAAG,UAAU,KAAK,IAAI,OAAO,KAAK,QAAQ,OAAO,KAAK,MAAM;AACvE,aAAO,OAAO,WAAW,OAAO,KAAK,OAAO,KAAK,SAAS,OAAO,CAAC,KAAK,OAAO,KAAK,OAAO,KAAK,SAAS,OAAO,CAAC,GAAG;AAC/G;AACA;AACA;AAAA,MACJ;AACA,aAAO,EAAE,GAAG,MAAM,GAAG,KAAK;AAAA,IAC9B;AACA,QAAI,OAAO,QAAQ,QAAQ,OAAO,QAAQ,MAAM;AAC5C,UAAI,QAAQ,YAAY,OAAO,SAAS,OAAO,SAAS,OAAO,GAAG,OAAO,CAAC;AAC1E,UAAI;AACA,eAAO;AAAA,IACf;AACA,YAAQ;AACR,YAAQ;AAAA,EACZ;AACJ;AASA,IAAM,WAAN,MAAM,UAAS;AAAA;AAAA;AAAA;AAAA,EAIX,YAIA,SAAS,MAAM;AACX,SAAK,UAAU;AACf,SAAK,OAAO,QAAQ;AACpB,QAAI,QAAQ;AACR,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ;AAChC,aAAK,QAAQ,QAAQ,CAAC,EAAE;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa,MAAM,IAAI,GAAG,YAAY,GAAG,QAAQ;AAC7C,aAAS,IAAI,GAAG,MAAM,GAAG,MAAM,IAAI,KAAK;AACpC,UAAI,QAAQ,KAAK,QAAQ,CAAC,GAAG,MAAM,MAAM,MAAM;AAC/C,UAAI,MAAM,QAAQ,EAAE,OAAO,YAAY,KAAK,UAAU,MAAM,CAAC,MAAM,SAAS,MAAM,QAAQ,MAAM;AAC5F,YAAI,QAAQ,MAAM;AAClB,cAAM,aAAa,KAAK,IAAI,GAAG,OAAO,KAAK,GAAG,KAAK,IAAI,MAAM,QAAQ,MAAM,KAAK,KAAK,GAAG,GAAG,YAAY,KAAK;AAAA,MAChH;AACA,YAAM;AAAA,IACV;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAY,GAAG;AACX,SAAK,aAAa,GAAG,KAAK,MAAM,CAAC;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,MAAM,IAAI,gBAAgB,UAAU;AAC5C,QAAIC,QAAO,IAAI,QAAQ;AACvB,SAAK,aAAa,MAAM,IAAI,CAAC,MAAM,QAAQ;AACvC,UAAI,WAAW,KAAK,SAAS,KAAK,KAAK,MAAM,KAAK,IAAI,MAAM,GAAG,IAAI,KAAK,KAAK,GAAG,IAC1E,CAAC,KAAK,SAAS,KACX,WAAY,OAAO,aAAa,aAAa,SAAS,IAAI,IAAI,WAC1D,KAAK,KAAK,KAAK,WAAW,KAAK,KAAK,KAAK,SAAS,IAAI,IAClD;AAClB,UAAI,KAAK,YAAY,KAAK,UAAU,YAAY,KAAK,gBAAgB,gBAAgB;AACjF,YAAI;AACA,kBAAQ;AAAA;AAER,UAAAA,SAAQ;AAAA,MAChB;AACA,MAAAA,SAAQ;AAAA,IACZ,GAAG,CAAC;AACJ,WAAOA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAO;AACV,QAAI,CAAC,MAAM;AACP,aAAO;AACX,QAAI,CAAC,KAAK;AACN,aAAO;AACX,QAAI,OAAO,KAAK,WAAW,QAAQ,MAAM,YAAY,UAAU,KAAK,QAAQ,MAAM,GAAG,IAAI;AACzF,QAAI,KAAK,UAAU,KAAK,WAAW,KAAK,GAAG;AACvC,cAAQ,QAAQ,SAAS,CAAC,IAAI,KAAK,SAAS,KAAK,OAAO,MAAM,IAAI;AAClE,UAAI;AAAA,IACR;AACA,WAAO,IAAI,MAAM,QAAQ,QAAQ;AAC7B,cAAQ,KAAK,MAAM,QAAQ,CAAC,CAAC;AACjC,WAAO,IAAI,UAAS,SAAS,KAAK,OAAO,MAAM,IAAI;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA,EAIA,IAAI,MAAM,KAAK,KAAK,MAAM;AACtB,QAAI,QAAQ,KAAK,MAAM,KAAK;AACxB,aAAO;AACX,QAAI,SAAS,CAAC,GAAG,OAAO;AACxB,QAAI,KAAK;AACL,eAAS,IAAI,GAAG,MAAM,GAAG,MAAM,IAAI,KAAK;AACpC,YAAI,QAAQ,KAAK,QAAQ,CAAC,GAAG,MAAM,MAAM,MAAM;AAC/C,YAAI,MAAM,MAAM;AACZ,cAAI,MAAM,QAAQ,MAAM,IAAI;AACxB,gBAAI,MAAM;AACN,sBAAQ,MAAM,IAAI,KAAK,IAAI,GAAG,OAAO,GAAG,GAAG,KAAK,IAAI,MAAM,KAAK,QAAQ,KAAK,GAAG,CAAC;AAAA;AAEhF,sBAAQ,MAAM,IAAI,KAAK,IAAI,GAAG,OAAO,MAAM,CAAC,GAAG,KAAK,IAAI,MAAM,QAAQ,MAAM,KAAK,MAAM,CAAC,CAAC;AAAA,UACjG;AACA,iBAAO,KAAK,KAAK;AACjB,kBAAQ,MAAM;AAAA,QAClB;AACA,cAAM;AAAA,MACV;AACJ,WAAO,IAAI,UAAS,QAAQ,IAAI;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAIA,WAAW,MAAM,IAAI;AACjB,QAAI,QAAQ;AACR,aAAO,UAAS;AACpB,QAAI,QAAQ,KAAK,MAAM,KAAK,QAAQ;AAChC,aAAO;AACX,WAAO,IAAI,UAAS,KAAK,QAAQ,MAAM,MAAM,EAAE,CAAC;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,OAAO,MAAM;AACtB,QAAI,UAAU,KAAK,QAAQ,KAAK;AAChC,QAAI,WAAW;AACX,aAAO;AACX,QAAIC,QAAO,KAAK,QAAQ,MAAM;AAC9B,QAAI,OAAO,KAAK,OAAO,KAAK,WAAW,QAAQ;AAC/C,IAAAA,MAAK,KAAK,IAAI;AACd,WAAO,IAAI,UAASA,OAAM,IAAI;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,MAAM;AACb,WAAO,IAAI,UAAS,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,GAAG,KAAK,OAAO,KAAK,QAAQ;AAAA,EAC9E;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,MAAM;AACX,WAAO,IAAI,UAAS,KAAK,QAAQ,OAAO,IAAI,GAAG,KAAK,OAAO,KAAK,QAAQ;AAAA,EAC5E;AAAA;AAAA;AAAA;AAAA,EAIA,GAAG,OAAO;AACN,QAAI,KAAK,QAAQ,UAAU,MAAM,QAAQ;AACrC,aAAO;AACX,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,QAAQ;AACrC,UAAI,CAAC,KAAK,QAAQ,CAAC,EAAE,GAAG,MAAM,QAAQ,CAAC,CAAC;AACpC,eAAO;AACf,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,IAAI,aAAa;AAAE,WAAO,KAAK,QAAQ,SAAS,KAAK,QAAQ,CAAC,IAAI;AAAA,EAAM;AAAA;AAAA;AAAA;AAAA,EAIxE,IAAI,YAAY;AAAE,WAAO,KAAK,QAAQ,SAAS,KAAK,QAAQ,KAAK,QAAQ,SAAS,CAAC,IAAI;AAAA,EAAM;AAAA;AAAA;AAAA;AAAA,EAI7F,IAAI,aAAa;AAAE,WAAO,KAAK,QAAQ;AAAA,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,EAK/C,MAAM,OAAO;AACT,QAAIC,SAAQ,KAAK,QAAQ,KAAK;AAC9B,QAAI,CAACA;AACD,YAAM,IAAI,WAAW,WAAW,QAAQ,uBAAuB,IAAI;AACvE,WAAOA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,WAAW,OAAO;AACd,WAAO,KAAK,QAAQ,KAAK,KAAK;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,GAAG;AACP,aAAS,IAAI,GAAG,IAAI,GAAG,IAAI,KAAK,QAAQ,QAAQ,KAAK;AACjD,UAAI,QAAQ,KAAK,QAAQ,CAAC;AAC1B,QAAE,OAAO,GAAG,CAAC;AACb,WAAK,MAAM;AAAA,IACf;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,OAAO,MAAM,GAAG;AAC1B,WAAO,cAAc,MAAM,OAAO,GAAG;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,OAAO,MAAM,KAAK,MAAM,WAAW,MAAM,MAAM;AACvD,WAAO,YAAY,MAAM,OAAO,KAAK,QAAQ;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU,KAAK;AACX,QAAI,OAAO;AACP,aAAO,SAAS,GAAG,GAAG;AAC1B,QAAI,OAAO,KAAK;AACZ,aAAO,SAAS,KAAK,QAAQ,QAAQ,GAAG;AAC5C,QAAI,MAAM,KAAK,QAAQ,MAAM;AACzB,YAAM,IAAI,WAAW,YAAY,GAAG,yBAAyB,IAAI,GAAG;AACxE,aAAS,IAAI,GAAG,SAAS,KAAI,KAAK;AAC9B,UAAI,MAAM,KAAK,MAAM,CAAC,GAAG,MAAM,SAAS,IAAI;AAC5C,UAAI,OAAO,KAAK;AACZ,YAAI,OAAO;AACP,iBAAO,SAAS,IAAI,GAAG,GAAG;AAC9B,eAAO,SAAS,GAAG,MAAM;AAAA,MAC7B;AACA,eAAS;AAAA,IACb;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAIA,WAAW;AAAE,WAAO,MAAM,KAAK,cAAc,IAAI;AAAA,EAAK;AAAA;AAAA;AAAA;AAAA,EAItD,gBAAgB;AAAE,WAAO,KAAK,QAAQ,KAAK,IAAI;AAAA,EAAG;AAAA;AAAA;AAAA;AAAA,EAIlD,SAAS;AACL,WAAO,KAAK,QAAQ,SAAS,KAAK,QAAQ,IAAI,OAAK,EAAE,OAAO,CAAC,IAAI;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,SAASC,SAAQ,OAAO;AAC3B,QAAI,CAAC;AACD,aAAO,UAAS;AACpB,QAAI,CAAC,MAAM,QAAQ,KAAK;AACpB,YAAM,IAAI,WAAW,qCAAqC;AAC9D,WAAO,IAAI,UAAS,MAAM,IAAIA,QAAO,YAAY,CAAC;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,UAAU,OAAO;AACpB,QAAI,CAAC,MAAM;AACP,aAAO,UAAS;AACpB,QAAI,QAAQ,OAAO;AACnB,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,UAAI,OAAO,MAAM,CAAC;AAClB,cAAQ,KAAK;AACb,UAAI,KAAK,KAAK,UAAU,MAAM,IAAI,CAAC,EAAE,WAAW,IAAI,GAAG;AACnD,YAAI,CAAC;AACD,mBAAS,MAAM,MAAM,GAAG,CAAC;AAC7B,eAAO,OAAO,SAAS,CAAC,IAAI,KACvB,SAAS,OAAO,OAAO,SAAS,CAAC,EAAE,OAAO,KAAK,IAAI;AAAA,MAC5D,WACS,QAAQ;AACb,eAAO,KAAK,IAAI;AAAA,MACpB;AAAA,IACJ;AACA,WAAO,IAAI,UAAS,UAAU,OAAO,IAAI;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,KAAK,OAAO;AACf,QAAI,CAAC;AACD,aAAO,UAAS;AACpB,QAAI,iBAAiB;AACjB,aAAO;AACX,QAAI,MAAM,QAAQ,KAAK;AACnB,aAAO,KAAK,UAAU,KAAK;AAC/B,QAAI,MAAM;AACN,aAAO,IAAI,UAAS,CAAC,KAAK,GAAG,MAAM,QAAQ;AAC/C,UAAM,IAAI,WAAW,qBAAqB,QAAQ,oBAC7C,MAAM,eAAe,qEAAqE,GAAG;AAAA,EACtG;AACJ;AAMA,SAAS,QAAQ,IAAI,SAAS,CAAC,GAAG,CAAC;AACnC,IAAM,QAAQ,EAAE,OAAO,GAAG,QAAQ,EAAE;AACpC,SAAS,SAAS,OAAO,QAAQ;AAC7B,QAAM,QAAQ;AACd,QAAM,SAAS;AACf,SAAO;AACX;AAEA,SAAS,YAAY,GAAG,GAAG;AACvB,MAAI,MAAM;AACN,WAAO;AACX,MAAI,EAAE,KAAK,OAAO,KAAK,aACnB,EAAE,KAAK,OAAO,KAAK;AACnB,WAAO;AACX,MAAI,QAAQ,MAAM,QAAQ,CAAC;AAC3B,MAAI,MAAM,QAAQ,CAAC,KAAK;AACpB,WAAO;AACX,MAAI,OAAO;AACP,QAAI,EAAE,UAAU,EAAE;AACd,aAAO;AACX,aAAS,IAAI,GAAG,IAAI,EAAE,QAAQ;AAC1B,UAAI,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvB,eAAO;AAAA,EACnB,OACK;AACD,aAAS,KAAK;AACV,UAAI,EAAE,KAAK,MAAM,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACpC,eAAO;AACf,aAAS,KAAK;AACV,UAAI,EAAE,KAAK;AACP,eAAO;AAAA,EACnB;AACA,SAAO;AACX;AAUA,IAAM,OAAN,MAAM,MAAK;AAAA;AAAA;AAAA;AAAA,EAIP,YAIA,MAIAC,QAAO;AACH,SAAK,OAAO;AACZ,SAAK,QAAQA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SAASC,MAAK;AACV,QAAIJ,OAAM,SAAS;AACnB,aAAS,IAAI,GAAG,IAAII,KAAI,QAAQ,KAAK;AACjC,UAAI,QAAQA,KAAI,CAAC;AACjB,UAAI,KAAK,GAAG,KAAK;AACb,eAAOA;AACX,UAAI,KAAK,KAAK,SAAS,MAAM,IAAI,GAAG;AAChC,YAAI,CAACJ;AACD,UAAAA,QAAOI,KAAI,MAAM,GAAG,CAAC;AAAA,MAC7B,WACS,MAAM,KAAK,SAAS,KAAK,IAAI,GAAG;AACrC,eAAOA;AAAA,MACX,OACK;AACD,YAAI,CAAC,UAAU,MAAM,KAAK,OAAO,KAAK,KAAK,MAAM;AAC7C,cAAI,CAACJ;AACD,YAAAA,QAAOI,KAAI,MAAM,GAAG,CAAC;AACzB,UAAAJ,MAAK,KAAK,IAAI;AACd,mBAAS;AAAA,QACb;AACA,YAAIA;AACA,UAAAA,MAAK,KAAK,KAAK;AAAA,MACvB;AAAA,IACJ;AACA,QAAI,CAACA;AACD,MAAAA,QAAOI,KAAI,MAAM;AACrB,QAAI,CAAC;AACD,MAAAJ,MAAK,KAAK,IAAI;AAClB,WAAOA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,cAAcI,MAAK;AACf,aAAS,IAAI,GAAG,IAAIA,KAAI,QAAQ;AAC5B,UAAI,KAAK,GAAGA,KAAI,CAAC,CAAC;AACd,eAAOA,KAAI,MAAM,GAAG,CAAC,EAAE,OAAOA,KAAI,MAAM,IAAI,CAAC,CAAC;AACtD,WAAOA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,QAAQA,MAAK;AACT,aAAS,IAAI,GAAG,IAAIA,KAAI,QAAQ;AAC5B,UAAI,KAAK,GAAGA,KAAI,CAAC,CAAC;AACd,eAAO;AACf,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,GAAG,OAAO;AACN,WAAO,QAAQ,SACV,KAAK,QAAQ,MAAM,QAAQ,YAAY,KAAK,OAAO,MAAM,KAAK;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA,EAIA,SAAS;AACL,QAAI,MAAM,EAAE,MAAM,KAAK,KAAK,KAAK;AACjC,aAAS,KAAK,KAAK,OAAO;AACtB,UAAI,QAAQ,KAAK;AACjB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,SAASF,SAAQ,MAAM;AAC1B,QAAI,CAAC;AACD,YAAM,IAAI,WAAW,iCAAiC;AAC1D,QAAI,OAAOA,QAAO,MAAM,KAAK,IAAI;AACjC,QAAI,CAAC;AACD,YAAM,IAAI,WAAW,yBAAyB,KAAK,IAAI,iBAAiB;AAC5E,QAAI,OAAO,KAAK,OAAO,KAAK,KAAK;AACjC,SAAK,WAAW,KAAK,KAAK;AAC1B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,QAAQ,GAAG,GAAG;AACjB,QAAI,KAAK;AACL,aAAO;AACX,QAAI,EAAE,UAAU,EAAE;AACd,aAAO;AACX,aAAS,IAAI,GAAG,IAAI,EAAE,QAAQ;AAC1B,UAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;AACb,eAAO;AACf,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,QAAQ,OAAO;AAClB,QAAI,CAAC,SAAS,MAAM,QAAQ,KAAK,KAAK,MAAM,UAAU;AAClD,aAAO,MAAK;AAChB,QAAI,iBAAiB;AACjB,aAAO,CAAC,KAAK;AACjB,QAAIF,QAAO,MAAM,MAAM;AACvB,IAAAA,MAAK,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,OAAO,EAAE,KAAK,IAAI;AAC7C,WAAOA;AAAA,EACX;AACJ;AAIA,KAAK,OAAO,CAAC;AAMb,IAAM,eAAN,cAA2B,MAAM;AACjC;AAiBA,IAAM,QAAN,MAAM,OAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaR,YAIA,SAIA,WAIA,SAAS;AACL,SAAK,UAAU;AACf,SAAK,YAAY;AACjB,SAAK,UAAU;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAIA,IAAI,OAAO;AACP,WAAO,KAAK,QAAQ,OAAO,KAAK,YAAY,KAAK;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA,EAIA,SAAS,KAAK,UAAU;AACpB,QAAI,UAAU,WAAW,KAAK,SAAS,MAAM,KAAK,WAAW,QAAQ;AACrE,WAAO,WAAW,IAAI,OAAM,SAAS,KAAK,WAAW,KAAK,OAAO;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA,EAIA,cAAc,MAAM,IAAI;AACpB,WAAO,IAAI,OAAM,YAAY,KAAK,SAAS,OAAO,KAAK,WAAW,KAAK,KAAK,SAAS,GAAG,KAAK,WAAW,KAAK,OAAO;AAAA,EACxH;AAAA;AAAA;AAAA;AAAA,EAIA,GAAG,OAAO;AACN,WAAO,KAAK,QAAQ,GAAG,MAAM,OAAO,KAAK,KAAK,aAAa,MAAM,aAAa,KAAK,WAAW,MAAM;AAAA,EACxG;AAAA;AAAA;AAAA;AAAA,EAIA,WAAW;AACP,WAAO,KAAK,UAAU,MAAM,KAAK,YAAY,MAAM,KAAK,UAAU;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA,EAIA,SAAS;AACL,QAAI,CAAC,KAAK,QAAQ;AACd,aAAO;AACX,QAAI,OAAO,EAAE,SAAS,KAAK,QAAQ,OAAO,EAAE;AAC5C,QAAI,KAAK,YAAY;AACjB,WAAK,YAAY,KAAK;AAC1B,QAAI,KAAK,UAAU;AACf,WAAK,UAAU,KAAK;AACxB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,SAASE,SAAQ,MAAM;AAC1B,QAAI,CAAC;AACD,aAAO,OAAM;AACjB,QAAI,YAAY,KAAK,aAAa,GAAG,UAAU,KAAK,WAAW;AAC/D,QAAI,OAAO,aAAa,YAAY,OAAO,WAAW;AAClD,YAAM,IAAI,WAAW,kCAAkC;AAC3D,WAAO,IAAI,OAAM,SAAS,SAASA,SAAQ,KAAK,OAAO,GAAG,WAAW,OAAO;AAAA,EAChF;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,QAAQ,UAAU,gBAAgB,MAAM;AAC3C,QAAI,YAAY,GAAG,UAAU;AAC7B,aAAS,IAAI,SAAS,YAAY,KAAK,CAAC,EAAE,WAAW,iBAAiB,CAAC,EAAE,KAAK,KAAK,YAAY,IAAI,EAAE;AACjG;AACJ,aAAS,IAAI,SAAS,WAAW,KAAK,CAAC,EAAE,WAAW,iBAAiB,CAAC,EAAE,KAAK,KAAK,YAAY,IAAI,EAAE;AAChG;AACJ,WAAO,IAAI,OAAM,UAAU,WAAW,OAAO;AAAA,EACjD;AACJ;AAIA,MAAM,QAAQ,IAAI,MAAM,SAAS,OAAO,GAAG,CAAC;AAC5C,SAAS,YAAY,SAAS,MAAM,IAAI;AACpC,MAAI,EAAE,OAAO,OAAO,IAAI,QAAQ,UAAU,IAAI,GAAG,QAAQ,QAAQ,WAAW,KAAK;AACjF,MAAI,EAAE,OAAO,SAAS,QAAQ,SAAS,IAAI,QAAQ,UAAU,EAAE;AAC/D,MAAI,UAAU,QAAQ,MAAM,QAAQ;AAChC,QAAI,YAAY,MAAM,CAAC,QAAQ,MAAM,OAAO,EAAE;AAC1C,YAAM,IAAI,WAAW,yBAAyB;AAClD,WAAO,QAAQ,IAAI,GAAG,IAAI,EAAE,OAAO,QAAQ,IAAI,EAAE,CAAC;AAAA,EACtD;AACA,MAAI,SAAS;AACT,UAAM,IAAI,WAAW,yBAAyB;AAClD,SAAO,QAAQ,aAAa,OAAO,MAAM,KAAK,YAAY,MAAM,SAAS,OAAO,SAAS,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC;AACjH;AACA,SAAS,WAAW,SAAS,MAAM,QAAQ,QAAQ;AAC/C,MAAI,EAAE,OAAO,OAAO,IAAI,QAAQ,UAAU,IAAI,GAAG,QAAQ,QAAQ,WAAW,KAAK;AACjF,MAAI,UAAU,QAAQ,MAAM,QAAQ;AAChC,QAAI,UAAU,CAAC,OAAO,WAAW,OAAO,OAAO,MAAM;AACjD,aAAO;AACX,WAAO,QAAQ,IAAI,GAAG,IAAI,EAAE,OAAO,MAAM,EAAE,OAAO,QAAQ,IAAI,IAAI,CAAC;AAAA,EACvE;AACA,MAAI,QAAQ,WAAW,MAAM,SAAS,OAAO,SAAS,GAAG,QAAQ,KAAK;AACtE,SAAO,SAAS,QAAQ,aAAa,OAAO,MAAM,KAAK,KAAK,CAAC;AACjE;AACA,SAAS,QAAQ,OAAO,KAAK,OAAO;AAChC,MAAI,MAAM,YAAY,MAAM;AACxB,UAAM,IAAI,aAAa,iDAAiD;AAC5E,MAAI,MAAM,QAAQ,MAAM,aAAa,IAAI,QAAQ,MAAM;AACnD,UAAM,IAAI,aAAa,0BAA0B;AACrD,SAAO,aAAa,OAAO,KAAK,OAAO,CAAC;AAC5C;AACA,SAAS,aAAa,OAAO,KAAK,OAAO,OAAO;AAC5C,MAAI,QAAQ,MAAM,MAAM,KAAK,GAAG,OAAO,MAAM,KAAK,KAAK;AACvD,MAAI,SAAS,IAAI,MAAM,KAAK,KAAK,QAAQ,MAAM,QAAQ,MAAM,WAAW;AACpE,QAAI,QAAQ,aAAa,OAAO,KAAK,OAAO,QAAQ,CAAC;AACrD,WAAO,KAAK,KAAK,KAAK,QAAQ,aAAa,OAAO,KAAK,CAAC;AAAA,EAC5D,WACS,CAAC,MAAM,QAAQ,MAAM;AAC1B,WAAO,MAAM,MAAM,cAAc,OAAO,KAAK,KAAK,CAAC;AAAA,EACvD,WACS,CAAC,MAAM,aAAa,CAAC,MAAM,WAAW,MAAM,SAAS,SAAS,IAAI,SAAS,OAAO;AACvF,QAAI,SAAS,MAAM,QAAQ,UAAU,OAAO;AAC5C,WAAO,MAAM,QAAQ,QAAQ,IAAI,GAAG,MAAM,YAAY,EAAE,OAAO,MAAM,OAAO,EAAE,OAAO,QAAQ,IAAI,IAAI,YAAY,CAAC,CAAC;AAAA,EACvH,OACK;AACD,QAAI,EAAE,OAAO,IAAI,IAAI,uBAAuB,OAAO,KAAK;AACxD,WAAO,MAAM,MAAM,gBAAgB,OAAO,OAAO,KAAK,KAAK,KAAK,CAAC;AAAA,EACrE;AACJ;AACA,SAAS,UAAU,MAAM,KAAK;AAC1B,MAAI,CAAC,IAAI,KAAK,kBAAkB,KAAK,IAAI;AACrC,UAAM,IAAI,aAAa,iBAAiB,IAAI,KAAK,OAAO,WAAW,KAAK,KAAK,IAAI;AACzF;AACA,SAAS,SAAS,SAAS,QAAQ,OAAO;AACtC,MAAI,OAAO,QAAQ,KAAK,KAAK;AAC7B,YAAU,MAAM,OAAO,KAAK,KAAK,CAAC;AAClC,SAAO;AACX;AACA,SAAS,QAAQ,OAAO,QAAQ;AAC5B,MAAI,OAAO,OAAO,SAAS;AAC3B,MAAI,QAAQ,KAAK,MAAM,UAAU,MAAM,WAAW,OAAO,IAAI,CAAC;AAC1D,WAAO,IAAI,IAAI,MAAM,SAAS,OAAO,IAAI,EAAE,OAAO,MAAM,IAAI;AAAA;AAE5D,WAAO,KAAK,KAAK;AACzB;AACA,SAAS,SAAS,QAAQ,MAAM,OAAO,QAAQ;AAC3C,MAAI,QAAQ,QAAQ,QAAQ,KAAK,KAAK;AACtC,MAAI,aAAa,GAAG,WAAW,OAAO,KAAK,MAAM,KAAK,IAAI,KAAK;AAC/D,MAAI,QAAQ;AACR,iBAAa,OAAO,MAAM,KAAK;AAC/B,QAAI,OAAO,QAAQ,OAAO;AACtB;AAAA,IACJ,WACS,OAAO,YAAY;AACxB,cAAQ,OAAO,WAAW,MAAM;AAChC;AAAA,IACJ;AAAA,EACJ;AACA,WAAS,IAAI,YAAY,IAAI,UAAU;AACnC,YAAQ,KAAK,MAAM,CAAC,GAAG,MAAM;AACjC,MAAI,QAAQ,KAAK,SAAS,SAAS,KAAK;AACpC,YAAQ,KAAK,YAAY,MAAM;AACvC;AACA,SAAS,MAAM,MAAM,SAAS;AAC1B,OAAK,KAAK,aAAa,OAAO;AAC9B,SAAO,KAAK,KAAK,OAAO;AAC5B;AACA,SAAS,gBAAgB,OAAO,QAAQ,MAAM,KAAK,OAAO;AACtD,MAAI,YAAY,MAAM,QAAQ,SAAS,SAAS,OAAO,QAAQ,QAAQ,CAAC;AACxE,MAAI,UAAU,IAAI,QAAQ,SAAS,SAAS,MAAM,KAAK,QAAQ,CAAC;AAChE,MAAI,UAAU,CAAC;AACf,WAAS,MAAM,OAAO,OAAO,OAAO;AACpC,MAAI,aAAa,WAAW,OAAO,MAAM,KAAK,KAAK,KAAK,MAAM,KAAK,GAAG;AAClE,cAAU,WAAW,OAAO;AAC5B,YAAQ,MAAM,WAAW,gBAAgB,OAAO,QAAQ,MAAM,KAAK,QAAQ,CAAC,CAAC,GAAG,OAAO;AAAA,EAC3F,OACK;AACD,QAAI;AACA,cAAQ,MAAM,WAAW,cAAc,OAAO,QAAQ,QAAQ,CAAC,CAAC,GAAG,OAAO;AAC9E,aAAS,QAAQ,MAAM,OAAO,OAAO;AACrC,QAAI;AACA,cAAQ,MAAM,SAAS,cAAc,MAAM,KAAK,QAAQ,CAAC,CAAC,GAAG,OAAO;AAAA,EAC5E;AACA,WAAS,KAAK,MAAM,OAAO,OAAO;AAClC,SAAO,IAAI,SAAS,OAAO;AAC/B;AACA,SAAS,cAAc,OAAO,KAAK,OAAO;AACtC,MAAI,UAAU,CAAC;AACf,WAAS,MAAM,OAAO,OAAO,OAAO;AACpC,MAAI,MAAM,QAAQ,OAAO;AACrB,QAAI,OAAO,SAAS,OAAO,KAAK,QAAQ,CAAC;AACzC,YAAQ,MAAM,MAAM,cAAc,OAAO,KAAK,QAAQ,CAAC,CAAC,GAAG,OAAO;AAAA,EACtE;AACA,WAAS,KAAK,MAAM,OAAO,OAAO;AAClC,SAAO,IAAI,SAAS,OAAO;AAC/B;AACA,SAAS,uBAAuB,OAAO,QAAQ;AAC3C,MAAI,QAAQ,OAAO,QAAQ,MAAM,WAAW,SAAS,OAAO,KAAK,KAAK;AACtE,MAAI,OAAO,OAAO,KAAK,MAAM,OAAO;AACpC,WAAS,IAAI,QAAQ,GAAG,KAAK,GAAG;AAC5B,WAAO,OAAO,KAAK,CAAC,EAAE,KAAK,SAAS,KAAK,IAAI,CAAC;AAClD,SAAO;AAAA,IAAE,OAAO,KAAK,eAAe,MAAM,YAAY,KAAK;AAAA,IACvD,KAAK,KAAK,eAAe,KAAK,QAAQ,OAAO,MAAM,UAAU,KAAK;AAAA,EAAE;AAC5E;AAYA,IAAM,cAAN,MAAM,aAAY;AAAA;AAAA;AAAA;AAAA,EAId,YAIA,KAIA,MAIA,cAAc;AACV,SAAK,MAAM;AACX,SAAK,OAAO;AACZ,SAAK,eAAe;AACpB,SAAK,QAAQ,KAAK,SAAS,IAAI;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAIA,aAAa,KAAK;AACd,QAAI,OAAO;AACP,aAAO,KAAK;AAChB,QAAI,MAAM;AACN,aAAO,KAAK,QAAQ;AACxB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,SAAS;AAAE,WAAO,KAAK,KAAK,KAAK,KAAK;AAAA,EAAG;AAAA;AAAA;AAAA;AAAA,EAI7C,IAAI,MAAM;AAAE,WAAO,KAAK,KAAK,CAAC;AAAA,EAAG;AAAA;AAAA;AAAA;AAAA;AAAA,EAKjC,KAAK,OAAO;AAAE,WAAO,KAAK,KAAK,KAAK,aAAa,KAAK,IAAI,CAAC;AAAA,EAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM9D,MAAM,OAAO;AAAE,WAAO,KAAK,KAAK,KAAK,aAAa,KAAK,IAAI,IAAI,CAAC;AAAA,EAAG;AAAA;AAAA;AAAA;AAAA;AAAA,EAKnE,WAAW,OAAO;AACd,YAAQ,KAAK,aAAa,KAAK;AAC/B,WAAO,KAAK,MAAM,KAAK,KAAK,SAAS,KAAK,SAAS,CAAC,KAAK,aAAa,IAAI;AAAA,EAC9E;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO;AACT,YAAQ,KAAK,aAAa,KAAK;AAC/B,WAAO,SAAS,IAAI,IAAI,KAAK,KAAK,QAAQ,IAAI,CAAC,IAAI;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAAO;AACP,YAAQ,KAAK,aAAa,KAAK;AAC/B,WAAO,KAAK,MAAM,KAAK,IAAI,KAAK,KAAK,KAAK,EAAE,QAAQ;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,OAAO;AACV,YAAQ,KAAK,aAAa,KAAK;AAC/B,QAAI,CAAC;AACD,YAAM,IAAI,WAAW,gDAAgD;AACzE,WAAO,SAAS,KAAK,QAAQ,IAAI,KAAK,MAAM,KAAK,KAAK,QAAQ,IAAI,CAAC;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO;AACT,YAAQ,KAAK,aAAa,KAAK;AAC/B,QAAI,CAAC;AACD,YAAM,IAAI,WAAW,+CAA+C;AACxE,WAAO,SAAS,KAAK,QAAQ,IAAI,KAAK,MAAM,KAAK,KAAK,QAAQ,IAAI,CAAC,IAAI,KAAK,KAAK,QAAQ,CAAC,EAAE;AAAA,EAChG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,aAAa;AAAE,WAAO,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,SAAS,CAAC;AAAA,EAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMtE,IAAI,YAAY;AACZ,QAAI,SAAS,KAAK,QAAQ,QAAQ,KAAK,MAAM,KAAK,KAAK;AACvD,QAAI,SAAS,OAAO;AAChB,aAAO;AACX,QAAI,OAAO,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,SAAS,CAAC,GAAG,QAAQ,OAAO,MAAM,KAAK;AACjF,WAAO,OAAO,OAAO,MAAM,KAAK,EAAE,IAAI,IAAI,IAAI;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,aAAa;AACb,QAAI,QAAQ,KAAK,MAAM,KAAK,KAAK;AACjC,QAAI,OAAO,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,SAAS,CAAC;AACpD,QAAI;AACA,aAAO,KAAK,OAAO,MAAM,KAAK,EAAE,IAAI,GAAG,IAAI;AAC/C,WAAO,SAAS,IAAI,OAAO,KAAK,OAAO,MAAM,QAAQ,CAAC;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,OAAO,OAAO;AACrB,YAAQ,KAAK,aAAa,KAAK;AAC/B,QAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,GAAG,MAAM,SAAS,IAAI,IAAI,KAAK,KAAK,QAAQ,IAAI,CAAC,IAAI;AACnF,aAAS,IAAI,GAAG,IAAI,OAAO;AACvB,aAAO,KAAK,MAAM,CAAC,EAAE;AACzB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ;AACJ,QAAI,SAAS,KAAK,QAAQ,QAAQ,KAAK,MAAM;AAE7C,QAAI,OAAO,QAAQ,QAAQ;AACvB,aAAO,KAAK;AAEhB,QAAI,KAAK;AACL,aAAO,OAAO,MAAM,KAAK,EAAE;AAC/B,QAAI,OAAO,OAAO,WAAW,QAAQ,CAAC,GAAG,QAAQ,OAAO,WAAW,KAAK;AAGxE,QAAI,CAAC,MAAM;AACP,UAAI,MAAM;AACV,aAAO;AACP,cAAQ;AAAA,IACZ;AAGA,QAAI,QAAQ,KAAK;AACjB,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ;AAC9B,UAAI,MAAM,CAAC,EAAE,KAAK,KAAK,cAAc,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,QAAQ,MAAM,KAAK;AAClF,gBAAQ,MAAM,GAAG,EAAE,cAAc,KAAK;AAC9C,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,YAAY,MAAM;AACd,QAAI,QAAQ,KAAK,OAAO,WAAW,KAAK,MAAM,CAAC;AAC/C,QAAI,CAAC,SAAS,CAAC,MAAM;AACjB,aAAO;AACX,QAAI,QAAQ,MAAM,OAAO,OAAO,KAAK,OAAO,WAAW,KAAK,MAAM,CAAC;AACnE,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ;AAC9B,UAAI,MAAM,CAAC,EAAE,KAAK,KAAK,cAAc,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,KAAK,KAAK;AAChF,gBAAQ,MAAM,GAAG,EAAE,cAAc,KAAK;AAC9C,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,KAAK;AACb,aAAS,QAAQ,KAAK,OAAO,QAAQ,GAAG;AACpC,UAAI,KAAK,MAAM,KAAK,KAAK,OAAO,KAAK,IAAI,KAAK,KAAK;AAC/C,eAAO;AACf,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,WAAW,QAAQ,MAAM,MAAM;AAC3B,QAAI,MAAM,MAAM,KAAK;AACjB,aAAO,MAAM,WAAW,IAAI;AAChC,aAAS,IAAI,KAAK,SAAS,KAAK,OAAO,iBAAiB,KAAK,OAAO,MAAM,MAAM,IAAI,IAAI,KAAK,GAAG;AAC5F,UAAI,MAAM,OAAO,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK,KAAK,CAAC,CAAC;AACvD,eAAO,IAAI,UAAU,MAAM,OAAO,CAAC;AAC3C,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,WAAW,OAAO;AACd,WAAO,KAAK,MAAM,KAAK,gBAAgB,MAAM,MAAM,MAAM;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA,EAIA,IAAI,OAAO;AACP,WAAO,MAAM,MAAM,KAAK,MAAM,QAAQ;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAIA,IAAI,OAAO;AACP,WAAO,MAAM,MAAM,KAAK,MAAM,QAAQ;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAIA,WAAW;AACP,QAAI,MAAM;AACV,aAAS,IAAI,GAAG,KAAK,KAAK,OAAO;AAC7B,cAAQ,MAAM,MAAM,MAAM,KAAK,KAAK,CAAC,EAAE,KAAK,OAAO,MAAM,KAAK,MAAM,IAAI,CAAC;AAC7E,WAAO,MAAM,MAAM,KAAK;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,QAAQG,MAAK,KAAK;AACrB,QAAI,EAAE,OAAO,KAAK,OAAOA,KAAI,QAAQ;AACjC,YAAM,IAAI,WAAW,cAAc,MAAM,eAAe;AAC5D,QAAI,OAAO,CAAC;AACZ,QAAI,QAAQ,GAAG,eAAe;AAC9B,aAAS,OAAOA,UAAO;AACnB,UAAI,EAAE,OAAO,OAAO,IAAI,KAAK,QAAQ,UAAU,YAAY;AAC3D,UAAI,MAAM,eAAe;AACzB,WAAK,KAAK,MAAM,OAAO,QAAQ,MAAM;AACrC,UAAI,CAAC;AACD;AACJ,aAAO,KAAK,MAAM,KAAK;AACvB,UAAI,KAAK;AACL;AACJ,qBAAe,MAAM;AACrB,eAAS,SAAS;AAAA,IACtB;AACA,WAAO,IAAI,aAAY,KAAK,MAAM,YAAY;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,cAAcA,MAAK,KAAK;AAC3B,QAAI,QAAQ,aAAa,IAAIA,IAAG;AAChC,QAAI,OAAO;AACP,eAAS,IAAI,GAAG,IAAI,MAAM,KAAK,QAAQ,KAAK;AACxC,YAAI,MAAM,MAAM,KAAK,CAAC;AACtB,YAAI,IAAI,OAAO;AACX,iBAAO;AAAA,MACf;AAAA,IACJ,OACK;AACD,mBAAa,IAAIA,MAAK,QAAQ,IAAI,cAAY;AAAA,IAClD;AACA,QAAI,SAAS,MAAM,KAAK,MAAM,CAAC,IAAI,aAAY,QAAQA,MAAK,GAAG;AAC/D,UAAM,KAAK,MAAM,IAAI,KAAK;AAC1B,WAAO;AAAA,EACX;AACJ;AACA,IAAM,eAAN,MAAmB;AAAA,EACf,cAAc;AACV,SAAK,OAAO,CAAC;AACb,SAAK,IAAI;AAAA,EACb;AACJ;AACA,IAAM,mBAAmB;AAAzB,IAA6B,eAAe,oBAAI,QAAQ;AAKxD,IAAM,YAAN,MAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMZ,YAOA,OAKA,KAIA,OAAO;AACH,SAAK,QAAQ;AACb,SAAK,MAAM;AACX,SAAK,QAAQ;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAIA,IAAI,QAAQ;AAAE,WAAO,KAAK,MAAM,OAAO,KAAK,QAAQ,CAAC;AAAA,EAAG;AAAA;AAAA;AAAA;AAAA,EAIxD,IAAI,MAAM;AAAE,WAAO,KAAK,IAAI,MAAM,KAAK,QAAQ,CAAC;AAAA,EAAG;AAAA;AAAA;AAAA;AAAA,EAInD,IAAI,SAAS;AAAE,WAAO,KAAK,MAAM,KAAK,KAAK,KAAK;AAAA,EAAG;AAAA;AAAA;AAAA;AAAA,EAInD,IAAI,aAAa;AAAE,WAAO,KAAK,MAAM,MAAM,KAAK,KAAK;AAAA,EAAG;AAAA;AAAA;AAAA;AAAA,EAIxD,IAAI,WAAW;AAAE,WAAO,KAAK,IAAI,WAAW,KAAK,KAAK;AAAA,EAAG;AAC7D;AAEA,IAAM,aAAa,uBAAO,OAAO,IAAI;AAerC,IAAM,OAAN,MAAM,MAAK;AAAA;AAAA;AAAA;AAAA,EAIP,YAIA,MAMAF,QAEA,SAKA,QAAQ,KAAK,MAAM;AACf,SAAK,OAAO;AACZ,SAAK,QAAQA;AACb,SAAK,QAAQ;AACb,SAAK,UAAU,WAAW,SAAS;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAIA,IAAI,WAAW;AAAE,WAAO,KAAK,QAAQ;AAAA,EAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ9C,IAAI,WAAW;AAAE,WAAO,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ;AAAA,EAAM;AAAA;AAAA;AAAA;AAAA,EAIjE,IAAI,aAAa;AAAE,WAAO,KAAK,QAAQ;AAAA,EAAY;AAAA;AAAA;AAAA;AAAA;AAAA,EAKnD,MAAM,OAAO;AAAE,WAAO,KAAK,QAAQ,MAAM,KAAK;AAAA,EAAG;AAAA;AAAA;AAAA;AAAA,EAIjD,WAAW,OAAO;AAAE,WAAO,KAAK,QAAQ,WAAW,KAAK;AAAA,EAAG;AAAA;AAAA;AAAA;AAAA;AAAA,EAK3D,QAAQ,GAAG;AAAE,SAAK,QAAQ,QAAQ,CAAC;AAAA,EAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWtC,aAAa,MAAM,IAAI,GAAG,WAAW,GAAG;AACpC,SAAK,QAAQ,aAAa,MAAM,IAAI,GAAG,UAAU,IAAI;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,GAAG;AACX,SAAK,aAAa,GAAG,KAAK,QAAQ,MAAM,CAAC;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,cAAc;AACd,WAAQ,KAAK,UAAU,KAAK,KAAK,KAAK,WAChC,KAAK,KAAK,KAAK,SAAS,IAAI,IAC5B,KAAK,YAAY,GAAG,KAAK,QAAQ,MAAM,EAAE;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,MAAM,IAAI,gBAAgB,UAAU;AAC5C,WAAO,KAAK,QAAQ,YAAY,MAAM,IAAI,gBAAgB,QAAQ;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,aAAa;AAAE,WAAO,KAAK,QAAQ;AAAA,EAAY;AAAA;AAAA;AAAA;AAAA;AAAA,EAKnD,IAAI,YAAY;AAAE,WAAO,KAAK,QAAQ;AAAA,EAAW;AAAA;AAAA;AAAA;AAAA,EAIjD,GAAG,OAAO;AACN,WAAO,QAAQ,SAAU,KAAK,WAAW,KAAK,KAAK,KAAK,QAAQ,GAAG,MAAM,OAAO;AAAA,EACpF;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,OAAO;AACd,WAAO,KAAK,UAAU,MAAM,MAAM,MAAM,OAAO,MAAM,KAAK;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,MAAMA,QAAO,OAAO;AAC1B,WAAO,KAAK,QAAQ,QAChB,YAAY,KAAK,OAAOA,UAAS,KAAK,gBAAgB,UAAU,KAChE,KAAK,QAAQ,KAAK,OAAO,SAAS,KAAK,IAAI;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,UAAU,MAAM;AACjB,QAAI,WAAW,KAAK;AAChB,aAAO;AACX,WAAO,IAAI,MAAK,KAAK,MAAM,KAAK,OAAO,SAAS,KAAK,KAAK;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,OAAO;AACR,WAAO,SAAS,KAAK,QAAQ,OAAO,IAAI,MAAK,KAAK,MAAM,KAAK,OAAO,KAAK,SAAS,KAAK;AAAA,EAC3F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,MAAM,KAAK,KAAK,QAAQ,MAAM;AAC9B,QAAI,QAAQ,KAAK,MAAM,KAAK,QAAQ;AAChC,aAAO;AACX,WAAO,KAAK,KAAK,KAAK,QAAQ,IAAI,MAAM,EAAE,CAAC;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MAAM,KAAK,KAAK,QAAQ,MAAM,iBAAiB,OAAO;AACxD,QAAI,QAAQ;AACR,aAAO,MAAM;AACjB,QAAI,QAAQ,KAAK,QAAQ,IAAI,GAAG,MAAM,KAAK,QAAQ,EAAE;AACrD,QAAI,QAAQ,iBAAiB,IAAI,MAAM,YAAY,EAAE;AACrD,QAAI,QAAQ,MAAM,MAAM,KAAK,GAAG,OAAO,MAAM,KAAK,KAAK;AACvD,QAAI,UAAU,KAAK,QAAQ,IAAI,MAAM,MAAM,OAAO,IAAI,MAAM,KAAK;AACjE,WAAO,IAAI,MAAM,SAAS,MAAM,QAAQ,OAAO,IAAI,QAAQ,KAAK;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,QAAQ,MAAM,IAAI,OAAO;AACrB,WAAO,QAAQ,KAAK,QAAQ,IAAI,GAAG,KAAK,QAAQ,EAAE,GAAG,KAAK;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,KAAK;AACR,aAAS,OAAO,UAAQ;AACpB,UAAI,EAAE,OAAO,OAAO,IAAI,KAAK,QAAQ,UAAU,GAAG;AAClD,aAAO,KAAK,WAAW,KAAK;AAC5B,UAAI,CAAC;AACD,eAAO;AACX,UAAI,UAAU,OAAO,KAAK;AACtB,eAAO;AACX,aAAO,SAAS;AAAA,IACpB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,KAAK;AACZ,QAAI,EAAE,OAAO,OAAO,IAAI,KAAK,QAAQ,UAAU,GAAG;AAClD,WAAO,EAAE,MAAM,KAAK,QAAQ,WAAW,KAAK,GAAG,OAAO,OAAO;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAY,KAAK;AACb,QAAI,OAAO;AACP,aAAO,EAAE,MAAM,MAAM,OAAO,GAAG,QAAQ,EAAE;AAC7C,QAAI,EAAE,OAAO,OAAO,IAAI,KAAK,QAAQ,UAAU,GAAG;AAClD,QAAI,SAAS;AACT,aAAO,EAAE,MAAM,KAAK,QAAQ,MAAM,KAAK,GAAG,OAAO,OAAO;AAC5D,QAAI,OAAO,KAAK,QAAQ,MAAM,QAAQ,CAAC;AACvC,WAAO,EAAE,MAAM,OAAO,QAAQ,GAAG,QAAQ,SAAS,KAAK,SAAS;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,KAAK;AAAE,WAAO,YAAY,cAAc,MAAM,GAAG;AAAA,EAAG;AAAA;AAAA;AAAA;AAAA,EAI5D,eAAe,KAAK;AAAE,WAAO,YAAY,QAAQ,MAAM,GAAG;AAAA,EAAG;AAAA;AAAA;AAAA;AAAA;AAAA,EAK7D,aAAa,MAAM,IAAI,MAAM;AACzB,QAAIF,SAAQ;AACZ,QAAI,KAAK;AACL,WAAK,aAAa,MAAM,IAAI,UAAQ;AAChC,YAAI,KAAK,QAAQ,KAAK,KAAK;AACvB,UAAAA,SAAQ;AACZ,eAAO,CAACA;AAAA,MACZ,CAAC;AACL,WAAOA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,IAAI,UAAU;AAAE,WAAO,KAAK,KAAK;AAAA,EAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAK1C,IAAI,cAAc;AAAE,WAAO,KAAK,KAAK;AAAA,EAAa;AAAA;AAAA;AAAA;AAAA,EAIlD,IAAI,gBAAgB;AAAE,WAAO,KAAK,KAAK;AAAA,EAAe;AAAA;AAAA;AAAA;AAAA;AAAA,EAKtD,IAAI,WAAW;AAAE,WAAO,KAAK,KAAK;AAAA,EAAU;AAAA;AAAA;AAAA;AAAA,EAI5C,IAAI,SAAS;AAAE,WAAO,KAAK,KAAK;AAAA,EAAQ;AAAA;AAAA;AAAA;AAAA,EAIxC,IAAI,SAAS;AAAE,WAAO,KAAK,KAAK;AAAA,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQxC,IAAI,SAAS;AAAE,WAAO,KAAK,KAAK;AAAA,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKxC,WAAW;AACP,QAAI,KAAK,KAAK,KAAK;AACf,aAAO,KAAK,KAAK,KAAK,cAAc,IAAI;AAC5C,QAAI,OAAO,KAAK,KAAK;AACrB,QAAI,KAAK,QAAQ;AACb,cAAQ,MAAM,KAAK,QAAQ,cAAc,IAAI;AACjD,WAAO,UAAU,KAAK,OAAO,IAAI;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAIA,eAAe,OAAO;AAClB,QAAIK,SAAQ,KAAK,KAAK,aAAa,cAAc,KAAK,SAAS,GAAG,KAAK;AACvE,QAAI,CAACA;AACD,YAAM,IAAI,MAAM,sDAAsD;AAC1E,WAAOA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,WAAW,MAAM,IAAI,cAAc,SAAS,OAAO,QAAQ,GAAG,MAAM,YAAY,YAAY;AACxF,QAAI,MAAM,KAAK,eAAe,IAAI,EAAE,cAAc,aAAa,OAAO,GAAG;AACzE,QAAI,MAAM,OAAO,IAAI,cAAc,KAAK,SAAS,EAAE;AACnD,QAAI,CAAC,OAAO,CAAC,IAAI;AACb,aAAO;AACX,aAAS,IAAI,OAAO,IAAI,KAAK;AACzB,UAAI,CAAC,KAAK,KAAK,YAAY,YAAY,MAAM,CAAC,EAAE,KAAK;AACjD,eAAO;AACf,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,eAAe,MAAM,IAAI,MAAM,OAAO;AAClC,QAAI,SAAS,CAAC,KAAK,KAAK,YAAY,KAAK;AACrC,aAAO;AACX,QAAI,QAAQ,KAAK,eAAe,IAAI,EAAE,UAAU,IAAI;AACpD,QAAI,MAAM,SAAS,MAAM,cAAc,KAAK,SAAS,EAAE;AACvD,WAAO,MAAM,IAAI,WAAW;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,OAAO;AACb,QAAI,MAAM,QAAQ;AACd,aAAO,KAAK,WAAW,KAAK,YAAY,KAAK,YAAY,MAAM,OAAO;AAAA;AAEtE,aAAO,KAAK,KAAK,kBAAkB,MAAM,IAAI;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ;AACJ,SAAK,KAAK,aAAa,KAAK,OAAO;AACnC,SAAK,KAAK,WAAW,KAAK,KAAK;AAC/B,QAAIN,QAAO,KAAK;AAChB,aAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AACxC,UAAI,OAAO,KAAK,MAAM,CAAC;AACvB,WAAK,KAAK,WAAW,KAAK,KAAK;AAC/B,MAAAA,QAAO,KAAK,SAASA,KAAI;AAAA,IAC7B;AACA,QAAI,CAAC,KAAK,QAAQA,OAAM,KAAK,KAAK;AAC9B,YAAM,IAAI,WAAW,wCAAwC,KAAK,KAAK,IAAI,KAAK,KAAK,MAAM,IAAI,OAAK,EAAE,KAAK,IAAI,CAAC,EAAE;AACtH,SAAK,QAAQ,QAAQ,UAAQ,KAAK,MAAM,CAAC;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAIA,SAAS;AACL,QAAI,MAAM,EAAE,MAAM,KAAK,KAAK,KAAK;AACjC,aAAS,KAAK,KAAK,OAAO;AACtB,UAAI,QAAQ,KAAK;AACjB;AAAA,IACJ;AACA,QAAI,KAAK,QAAQ;AACb,UAAI,UAAU,KAAK,QAAQ,OAAO;AACtC,QAAI,KAAK,MAAM;AACX,UAAI,QAAQ,KAAK,MAAM,IAAI,OAAK,EAAE,OAAO,CAAC;AAC9C,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,SAASE,SAAQ,MAAM;AAC1B,QAAI,CAAC;AACD,YAAM,IAAI,WAAW,iCAAiC;AAC1D,QAAI,QAAQ;AACZ,QAAI,KAAK,OAAO;AACZ,UAAI,CAAC,MAAM,QAAQ,KAAK,KAAK;AACzB,cAAM,IAAI,WAAW,qCAAqC;AAC9D,cAAQ,KAAK,MAAM,IAAIA,QAAO,YAAY;AAAA,IAC9C;AACA,QAAI,KAAK,QAAQ,QAAQ;AACrB,UAAI,OAAO,KAAK,QAAQ;AACpB,cAAM,IAAI,WAAW,2BAA2B;AACpD,aAAOA,QAAO,KAAK,KAAK,MAAM,KAAK;AAAA,IACvC;AACA,QAAI,UAAU,SAAS,SAASA,SAAQ,KAAK,OAAO;AACpD,QAAI,OAAOA,QAAO,SAAS,KAAK,IAAI,EAAE,OAAO,KAAK,OAAO,SAAS,KAAK;AACvE,SAAK,KAAK,WAAW,KAAK,KAAK;AAC/B,WAAO;AAAA,EACX;AACJ;AACA,KAAK,UAAU,OAAO;AACtB,IAAM,WAAN,MAAM,kBAAiB,KAAK;AAAA;AAAA;AAAA;AAAA,EAIxB,YAAY,MAAMC,QAAO,SAAS,OAAO;AACrC,UAAM,MAAMA,QAAO,MAAM,KAAK;AAC9B,QAAI,CAAC;AACD,YAAM,IAAI,WAAW,kCAAkC;AAC3D,SAAK,OAAO;AAAA,EAChB;AAAA,EACA,WAAW;AACP,QAAI,KAAK,KAAK,KAAK;AACf,aAAO,KAAK,KAAK,KAAK,cAAc,IAAI;AAC5C,WAAO,UAAU,KAAK,OAAO,KAAK,UAAU,KAAK,IAAI,CAAC;AAAA,EAC1D;AAAA,EACA,IAAI,cAAc;AAAE,WAAO,KAAK;AAAA,EAAM;AAAA,EACtC,YAAY,MAAM,IAAI;AAAE,WAAO,KAAK,KAAK,MAAM,MAAM,EAAE;AAAA,EAAG;AAAA,EAC1D,IAAI,WAAW;AAAE,WAAO,KAAK,KAAK;AAAA,EAAQ;AAAA,EAC1C,KAAK,OAAO;AACR,WAAO,SAAS,KAAK,QAAQ,OAAO,IAAI,UAAS,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM,KAAK;AAAA,EAC5F;AAAA,EACA,SAASJ,OAAM;AACX,QAAIA,SAAQ,KAAK;AACb,aAAO;AACX,WAAO,IAAI,UAAS,KAAK,MAAM,KAAK,OAAOA,OAAM,KAAK,KAAK;AAAA,EAC/D;AAAA,EACA,IAAI,OAAO,GAAG,KAAK,KAAK,KAAK,QAAQ;AACjC,QAAI,QAAQ,KAAK,MAAM,KAAK,KAAK;AAC7B,aAAO;AACX,WAAO,KAAK,SAAS,KAAK,KAAK,MAAM,MAAM,EAAE,CAAC;AAAA,EAClD;AAAA,EACA,GAAG,OAAO;AACN,WAAO,KAAK,WAAW,KAAK,KAAK,KAAK,QAAQ,MAAM;AAAA,EACxD;AAAA,EACA,SAAS;AACL,QAAIQ,QAAO,MAAM,OAAO;AACxB,IAAAA,MAAK,OAAO,KAAK;AACjB,WAAOA;AAAA,EACX;AACJ;AACA,SAAS,UAAU,OAAO,KAAK;AAC3B,WAAS,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG;AACnC,UAAM,MAAM,CAAC,EAAE,KAAK,OAAO,MAAM,MAAM;AAC3C,SAAO;AACX;AAQA,IAAM,eAAN,MAAM,cAAa;AAAA;AAAA;AAAA;AAAA,EAIf,YAIA,UAAU;AACN,SAAK,WAAW;AAIhB,SAAK,OAAO,CAAC;AAIb,SAAK,YAAY,CAAC;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,MAAM,QAAQ,WAAW;AAC5B,QAAI,SAAS,IAAI,YAAY,QAAQ,SAAS;AAC9C,QAAI,OAAO,QAAQ;AACf,aAAO,cAAa;AACxB,QAAI,OAAO,UAAU,MAAM;AAC3B,QAAI,OAAO;AACP,aAAO,IAAI,0BAA0B;AACzC,QAAID,SAAQ,IAAI,IAAI,IAAI,CAAC;AACzB,qBAAiBA,QAAO,MAAM;AAC9B,WAAOA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,MAAM;AACZ,aAAS,IAAI,GAAG,IAAI,KAAK,KAAK,QAAQ;AAClC,UAAI,KAAK,KAAK,CAAC,EAAE,QAAQ;AACrB,eAAO,KAAK,KAAK,CAAC,EAAE;AAC5B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,MAAM,QAAQ,GAAG,MAAM,KAAK,YAAY;AAClD,QAAI,MAAM;AACV,aAAS,IAAI,OAAO,OAAO,IAAI,KAAK;AAChC,YAAM,IAAI,UAAU,KAAK,MAAM,CAAC,EAAE,IAAI;AAC1C,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,IAAI,gBAAgB;AAChB,WAAO,KAAK,KAAK,UAAU,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,cAAc;AACd,aAAS,IAAI,GAAG,IAAI,KAAK,KAAK,QAAQ,KAAK;AACvC,UAAI,EAAE,KAAK,IAAI,KAAK,KAAK,CAAC;AAC1B,UAAI,EAAE,KAAK,UAAU,KAAK,iBAAiB;AACvC,eAAO;AAAA,IACf;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,WAAW,OAAO;AACd,aAAS,IAAI,GAAG,IAAI,KAAK,KAAK,QAAQ;AAClC,eAAS,IAAI,GAAG,IAAI,MAAM,KAAK,QAAQ;AACnC,YAAI,KAAK,KAAK,CAAC,EAAE,QAAQ,MAAM,KAAK,CAAC,EAAE;AACnC,iBAAO;AACnB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,WAAW,OAAO,QAAQ,OAAO,aAAa,GAAG;AAC7C,QAAI,OAAO,CAAC,IAAI;AAChB,aAAS,OAAOA,QAAO,OAAO;AAC1B,UAAI,WAAWA,OAAM,cAAc,OAAO,UAAU;AACpD,UAAI,aAAa,CAAC,SAAS,SAAS;AAChC,eAAO,SAAS,KAAK,MAAM,IAAI,QAAM,GAAG,cAAc,CAAC,CAAC;AAC5D,eAAS,IAAI,GAAG,IAAIA,OAAM,KAAK,QAAQ,KAAK;AACxC,YAAI,EAAE,MAAM,KAAK,IAAIA,OAAM,KAAK,CAAC;AACjC,YAAI,EAAE,KAAK,UAAU,KAAK,iBAAiB,MAAM,KAAK,QAAQ,IAAI,KAAK,IAAI;AACvE,eAAK,KAAK,IAAI;AACd,cAAIL,SAAQ,OAAO,MAAM,MAAM,OAAO,IAAI,CAAC;AAC3C,cAAIA;AACA,mBAAOA;AAAA,QACf;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AACA,WAAO,OAAO,MAAM,CAAC,CAAC;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa,QAAQ;AACjB,aAAS,IAAI,GAAG,IAAI,KAAK,UAAU,QAAQ,KAAK;AAC5C,UAAI,KAAK,UAAU,CAAC,KAAK;AACrB,eAAO,KAAK,UAAU,IAAI,CAAC;AACnC,QAAI,WAAW,KAAK,gBAAgB,MAAM;AAC1C,SAAK,UAAU,KAAK,QAAQ,QAAQ;AACpC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,gBAAgB,QAAQ;AACpB,QAAI,OAAO,uBAAO,OAAO,IAAI,GAAG,SAAS,CAAC,EAAE,OAAO,MAAM,MAAM,MAAM,KAAK,KAAK,CAAC;AAChF,WAAO,OAAO,QAAQ;AAClB,UAAI,UAAU,OAAO,MAAM,GAAGK,SAAQ,QAAQ;AAC9C,UAAIA,OAAM,UAAU,MAAM,GAAG;AACzB,YAAI,SAAS,CAAC;AACd,iBAAS,MAAM,SAAS,IAAI,MAAM,MAAM,IAAI;AACxC,iBAAO,KAAK,IAAI,IAAI;AACxB,eAAO,OAAO,QAAQ;AAAA,MAC1B;AACA,eAAS,IAAI,GAAG,IAAIA,OAAM,KAAK,QAAQ,KAAK;AACxC,YAAI,EAAE,MAAM,KAAK,IAAIA,OAAM,KAAK,CAAC;AACjC,YAAI,CAAC,KAAK,UAAU,CAAC,KAAK,iBAAiB,KAAK,EAAE,KAAK,QAAQ,UAAU,CAAC,QAAQ,QAAQ,KAAK,WAAW;AACtG,iBAAO,KAAK,EAAE,OAAO,KAAK,cAAc,MAAM,KAAK,QAAQ,CAAC;AAC5D,eAAK,KAAK,IAAI,IAAI;AAAA,QACtB;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,YAAY;AACZ,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,GAAG;AACJ,QAAI,KAAK,KAAK,KAAK;AACf,YAAM,IAAI,WAAW,cAAc,CAAC,+BAA+B;AACvE,WAAO,KAAK,KAAK,CAAC;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAIA,WAAW;AACP,QAAI,OAAO,CAAC;AACZ,aAAS,KAAK,GAAG;AACb,WAAK,KAAK,CAAC;AACX,eAAS,IAAI,GAAG,IAAI,EAAE,KAAK,QAAQ;AAC/B,YAAI,KAAK,QAAQ,EAAE,KAAK,CAAC,EAAE,IAAI,KAAK;AAChC,eAAK,EAAE,KAAK,CAAC,EAAE,IAAI;AAAA,IAC/B;AACA,SAAK,IAAI;AACT,WAAO,KAAK,IAAI,CAAC,GAAG,MAAM;AACtB,UAAI,MAAM,KAAK,EAAE,WAAW,MAAM,OAAO;AACzC,eAASE,KAAI,GAAGA,KAAI,EAAE,KAAK,QAAQA;AAC/B,gBAAQA,KAAI,OAAO,MAAM,EAAE,KAAKA,EAAC,EAAE,KAAK,OAAO,OAAO,KAAK,QAAQ,EAAE,KAAKA,EAAC,EAAE,IAAI;AACrF,aAAO;AAAA,IACX,CAAC,EAAE,KAAK,IAAI;AAAA,EAChB;AACJ;AAIA,aAAa,QAAQ,IAAI,aAAa,IAAI;AAC1C,IAAM,cAAN,MAAkB;AAAA,EACd,YAAY,QAAQ,WAAW;AAC3B,SAAK,SAAS;AACd,SAAK,YAAY;AACjB,SAAK,SAAS;AACd,SAAK,MAAM;AACX,SAAK,SAAS,OAAO,MAAM,gBAAgB;AAC3C,QAAI,KAAK,OAAO,KAAK,OAAO,SAAS,CAAC,KAAK;AACvC,WAAK,OAAO,IAAI;AACpB,QAAI,KAAK,OAAO,CAAC,KAAK;AAClB,WAAK,OAAO,MAAM;AAAA,EAC1B;AAAA,EACA,IAAI,OAAO;AAAE,WAAO,KAAK,OAAO,KAAK,GAAG;AAAA,EAAG;AAAA,EAC3C,IAAI,KAAK;AAAE,WAAO,KAAK,QAAQ,QAAQ,KAAK,SAAS;AAAA,EAAO;AAAA,EAC5D,IAAI,KAAK;AAAE,UAAM,IAAI,YAAY,MAAM,8BAA8B,KAAK,SAAS,IAAI;AAAA,EAAG;AAC9F;AACA,SAAS,UAAU,QAAQ;AACvB,MAAI,QAAQ,CAAC;AACb,KAAG;AACC,UAAM,KAAK,aAAa,MAAM,CAAC;AAAA,EACnC,SAAS,OAAO,IAAI,GAAG;AACvB,SAAO,MAAM,UAAU,IAAI,MAAM,CAAC,IAAI,EAAE,MAAM,UAAU,MAAM;AAClE;AACA,SAAS,aAAa,QAAQ;AAC1B,MAAI,QAAQ,CAAC;AACb,KAAG;AACC,UAAM,KAAK,mBAAmB,MAAM,CAAC;AAAA,EACzC,SAAS,OAAO,QAAQ,OAAO,QAAQ,OAAO,OAAO,QAAQ;AAC7D,SAAO,MAAM,UAAU,IAAI,MAAM,CAAC,IAAI,EAAE,MAAM,OAAO,MAAM;AAC/D;AACA,SAAS,mBAAmB,QAAQ;AAChC,MAAI,OAAO,cAAc,MAAM;AAC/B,aAAS;AACL,QAAI,OAAO,IAAI,GAAG;AACd,aAAO,EAAE,MAAM,QAAQ,KAAK;AAAA,aACvB,OAAO,IAAI,GAAG;AACnB,aAAO,EAAE,MAAM,QAAQ,KAAK;AAAA,aACvB,OAAO,IAAI,GAAG;AACnB,aAAO,EAAE,MAAM,OAAO,KAAK;AAAA,aACtB,OAAO,IAAI,GAAG;AACnB,aAAO,eAAe,QAAQ,IAAI;AAAA;AAElC;AAAA,EACR;AACA,SAAO;AACX;AACA,SAAS,SAAS,QAAQ;AACtB,MAAI,KAAK,KAAK,OAAO,IAAI;AACrB,WAAO,IAAI,2BAA2B,OAAO,OAAO,GAAG;AAC3D,MAAI,SAAS,OAAO,OAAO,IAAI;AAC/B,SAAO;AACP,SAAO;AACX;AACA,SAAS,eAAe,QAAQ,MAAM;AAClC,MAAI,MAAM,SAAS,MAAM,GAAG,MAAM;AAClC,MAAI,OAAO,IAAI,GAAG,GAAG;AACjB,QAAI,OAAO,QAAQ;AACf,YAAM,SAAS,MAAM;AAAA;AAErB,YAAM;AAAA,EACd;AACA,MAAI,CAAC,OAAO,IAAI,GAAG;AACf,WAAO,IAAI,uBAAuB;AACtC,SAAO,EAAE,MAAM,SAAS,KAAK,KAAK,KAAK;AAC3C;AACA,SAAS,YAAY,QAAQ,MAAM;AAC/B,MAAI,QAAQ,OAAO,WAAW,OAAO,MAAM,IAAI;AAC/C,MAAI;AACA,WAAO,CAAC,IAAI;AAChB,MAAI,SAAS,CAAC;AACd,WAAS,YAAY,OAAO;AACxB,QAAIC,QAAO,MAAM,QAAQ;AACzB,QAAIA,MAAK,UAAU,IAAI;AACnB,aAAO,KAAKA,KAAI;AAAA,EACxB;AACA,MAAI,OAAO,UAAU;AACjB,WAAO,IAAI,4BAA4B,OAAO,SAAS;AAC3D,SAAO;AACX;AACA,SAAS,cAAc,QAAQ;AAC3B,MAAI,OAAO,IAAI,GAAG,GAAG;AACjB,QAAI,OAAO,UAAU,MAAM;AAC3B,QAAI,CAAC,OAAO,IAAI,GAAG;AACf,aAAO,IAAI,uBAAuB;AACtC,WAAO;AAAA,EACX,WACS,CAAC,KAAK,KAAK,OAAO,IAAI,GAAG;AAC9B,QAAI,QAAQ,YAAY,QAAQ,OAAO,IAAI,EAAE,IAAI,UAAQ;AACrD,UAAI,OAAO,UAAU;AACjB,eAAO,SAAS,KAAK;AAAA,eAChB,OAAO,UAAU,KAAK;AAC3B,eAAO,IAAI,iCAAiC;AAChD,aAAO,EAAE,MAAM,QAAQ,OAAO,KAAK;AAAA,IACvC,CAAC;AACD,WAAO;AACP,WAAO,MAAM,UAAU,IAAI,MAAM,CAAC,IAAI,EAAE,MAAM,UAAU,MAAM;AAAA,EAClE,OACK;AACD,WAAO,IAAI,uBAAuB,OAAO,OAAO,GAAG;AAAA,EACvD;AACJ;AASA,SAAS,IAAI,MAAM;AACf,MAAIC,OAAM,CAAC,CAAC,CAAC;AACb,UAAQC,SAAQ,MAAM,CAAC,GAAG,KAAK,CAAC;AAChC,SAAOD;AACP,WAAS,OAAO;AAAE,WAAOA,KAAI,KAAK,CAAC,CAAC,IAAI;AAAA,EAAG;AAC3C,WAAS,KAAK,MAAM,IAAI,MAAM;AAC1B,QAAIE,QAAO,EAAE,MAAM,GAAG;AACtB,IAAAF,KAAI,IAAI,EAAE,KAAKE,KAAI;AACnB,WAAOA;AAAA,EACX;AACA,WAAS,QAAQ,OAAO,IAAI;AACxB,UAAM,QAAQ,CAAAA,UAAQA,MAAK,KAAK,EAAE;AAAA,EACtC;AACA,WAASD,SAAQE,OAAM,MAAM;AACzB,QAAIA,MAAK,QAAQ,UAAU;AACvB,aAAOA,MAAK,MAAM,OAAO,CAAC,KAAKA,UAAS,IAAI,OAAOF,SAAQE,OAAM,IAAI,CAAC,GAAG,CAAC,CAAC;AAAA,IAC/E,WACSA,MAAK,QAAQ,OAAO;AACzB,eAAS,IAAI,KAAI,KAAK;AAClB,YAAI,OAAOF,SAAQE,MAAK,MAAM,CAAC,GAAG,IAAI;AACtC,YAAI,KAAKA,MAAK,MAAM,SAAS;AACzB,iBAAO;AACX,gBAAQ,MAAM,OAAO,KAAK,CAAC;AAAA,MAC/B;AAAA,IACJ,WACSA,MAAK,QAAQ,QAAQ;AAC1B,UAAI,OAAO,KAAK;AAChB,WAAK,MAAM,IAAI;AACf,cAAQF,SAAQE,MAAK,MAAM,IAAI,GAAG,IAAI;AACtC,aAAO,CAAC,KAAK,IAAI,CAAC;AAAA,IACtB,WACSA,MAAK,QAAQ,QAAQ;AAC1B,UAAI,OAAO,KAAK;AAChB,cAAQF,SAAQE,MAAK,MAAM,IAAI,GAAG,IAAI;AACtC,cAAQF,SAAQE,MAAK,MAAM,IAAI,GAAG,IAAI;AACtC,aAAO,CAAC,KAAK,IAAI,CAAC;AAAA,IACtB,WACSA,MAAK,QAAQ,OAAO;AACzB,aAAO,CAAC,KAAK,IAAI,CAAC,EAAE,OAAOF,SAAQE,MAAK,MAAM,IAAI,CAAC;AAAA,IACvD,WACSA,MAAK,QAAQ,SAAS;AAC3B,UAAI,MAAM;AACV,eAAS,IAAI,GAAG,IAAIA,MAAK,KAAK,KAAK;AAC/B,YAAI,OAAO,KAAK;AAChB,gBAAQF,SAAQE,MAAK,MAAM,GAAG,GAAG,IAAI;AACrC,cAAM;AAAA,MACV;AACA,UAAIA,MAAK,OAAO,IAAI;AAChB,gBAAQF,SAAQE,MAAK,MAAM,GAAG,GAAG,GAAG;AAAA,MACxC,OACK;AACD,iBAAS,IAAIA,MAAK,KAAK,IAAIA,MAAK,KAAK,KAAK;AACtC,cAAI,OAAO,KAAK;AAChB,eAAK,KAAK,IAAI;AACd,kBAAQF,SAAQE,MAAK,MAAM,GAAG,GAAG,IAAI;AACrC,gBAAM;AAAA,QACV;AAAA,MACJ;AACA,aAAO,CAAC,KAAK,GAAG,CAAC;AAAA,IACrB,WACSA,MAAK,QAAQ,QAAQ;AAC1B,aAAO,CAAC,KAAK,MAAM,QAAWA,MAAK,KAAK,CAAC;AAAA,IAC7C,OACK;AACD,YAAM,IAAI,MAAM,mBAAmB;AAAA,IACvC;AAAA,EACJ;AACJ;AACA,SAAS,IAAI,GAAG,GAAG;AAAE,SAAO,IAAI;AAAG;AAInC,SAAS,SAASH,MAAK,MAAM;AACzB,MAAI,SAAS,CAAC;AACd,OAAK,IAAI;AACT,SAAO,OAAO,KAAK,GAAG;AACtB,WAAS,KAAKI,OAAM;AAChB,QAAI,QAAQJ,KAAII,KAAI;AACpB,QAAI,MAAM,UAAU,KAAK,CAAC,MAAM,CAAC,EAAE;AAC/B,aAAO,KAAK,MAAM,CAAC,EAAE,EAAE;AAC3B,WAAO,KAAKA,KAAI;AAChB,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,UAAI,EAAE,MAAM,GAAG,IAAI,MAAM,CAAC;AAC1B,UAAI,CAAC,QAAQ,OAAO,QAAQ,EAAE,KAAK;AAC/B,aAAK,EAAE;AAAA,IACf;AAAA,EACJ;AACJ;AAIA,SAAS,IAAIJ,MAAK;AACd,MAAI,UAAU,uBAAO,OAAO,IAAI;AAChC,SAAO,QAAQ,SAASA,MAAK,CAAC,CAAC;AAC/B,WAAS,QAAQ,QAAQ;AACrB,QAAI,MAAM,CAAC;AACX,WAAO,QAAQ,UAAQ;AACnB,MAAAA,KAAI,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;AAChC,YAAI,CAAC;AACD;AACJ,YAAIN;AACJ,iBAAS,IAAI,GAAG,IAAI,IAAI,QAAQ;AAC5B,cAAI,IAAI,CAAC,EAAE,CAAC,KAAK;AACb,YAAAA,OAAM,IAAI,CAAC,EAAE,CAAC;AACtB,iBAASM,MAAK,EAAE,EAAE,QAAQ,CAAAI,UAAQ;AAC9B,cAAI,CAACV;AACD,gBAAI,KAAK,CAAC,MAAMA,OAAM,CAAC,CAAC,CAAC;AAC7B,cAAIA,KAAI,QAAQU,KAAI,KAAK;AACrB,YAAAV,KAAI,KAAKU,KAAI;AAAA,QACrB,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC;AACD,QAAI,QAAQ,QAAQ,OAAO,KAAK,GAAG,CAAC,IAAI,IAAI,aAAa,OAAO,QAAQJ,KAAI,SAAS,CAAC,IAAI,EAAE;AAC5F,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACjC,UAAIK,UAAS,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,GAAG;AAC/B,YAAM,KAAK,KAAK,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,MAAM,QAAQA,QAAO,KAAK,GAAG,CAAC,KAAK,QAAQA,OAAM,EAAE,CAAC;AAAA,IAC3F;AACA,WAAO;AAAA,EACX;AACJ;AACA,SAAS,iBAAiBT,QAAO,QAAQ;AACrC,WAAS,IAAI,GAAG,OAAO,CAACA,MAAK,GAAG,IAAI,KAAK,QAAQ,KAAK;AAClD,QAAI,QAAQ,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,UAAU,QAAQ,CAAC;AACtD,aAAS,IAAI,GAAG,IAAI,MAAM,KAAK,QAAQ,KAAK;AACxC,UAAI,EAAE,MAAM,KAAK,IAAI,MAAM,KAAK,CAAC;AACjC,YAAM,KAAK,KAAK,IAAI;AACpB,UAAI,QAAQ,EAAE,KAAK,UAAU,KAAK,iBAAiB;AAC/C,eAAO;AACX,UAAI,KAAK,QAAQ,IAAI,KAAK;AACtB,aAAK,KAAK,IAAI;AAAA,IACtB;AACA,QAAI;AACA,aAAO,IAAI,iCAAiC,MAAM,KAAK,IAAI,IAAI,gFAAgF;AAAA,EACvJ;AACJ;AAMA,SAAS,aAAaH,QAAO;AACzB,MAAI,WAAW,uBAAO,OAAO,IAAI;AACjC,WAAS,YAAYA,QAAO;AACxB,QAAI,OAAOA,OAAM,QAAQ;AACzB,QAAI,CAAC,KAAK;AACN,aAAO;AACX,aAAS,QAAQ,IAAI,KAAK;AAAA,EAC9B;AACA,SAAO;AACX;AACA,SAAS,aAAaA,QAAO,OAAO;AAChC,MAAI,QAAQ,uBAAO,OAAO,IAAI;AAC9B,WAAS,QAAQA,QAAO;AACpB,QAAI,QAAQ,SAAS,MAAM,IAAI;AAC/B,QAAI,UAAU,QAAW;AACrB,UAAI,OAAOA,OAAM,IAAI;AACrB,UAAI,KAAK;AACL,gBAAQ,KAAK;AAAA;AAEb,cAAM,IAAI,WAAW,qCAAqC,IAAI;AAAA,IACtE;AACA,UAAM,IAAI,IAAI;AAAA,EAClB;AACA,SAAO;AACX;AACA,SAAS,WAAWA,QAAO,QAAQ,MAAM,MAAM;AAC3C,WAASa,SAAQ;AACb,QAAI,EAAEA,SAAQb;AACV,YAAM,IAAI,WAAW,yBAAyBa,KAAI,QAAQ,IAAI,YAAYA,KAAI,EAAE;AACxF,WAASA,SAAQb,QAAO;AACpB,QAAI,OAAOA,OAAMa,KAAI;AACrB,QAAI,KAAK;AACL,WAAK,SAAS,OAAOA,KAAI,CAAC;AAAA,EAClC;AACJ;AACA,SAAS,UAAU,UAAUb,QAAO;AAChC,MAAI,SAAS,uBAAO,OAAO,IAAI;AAC/B,MAAIA;AACA,aAAS,QAAQA;AACb,aAAO,IAAI,IAAI,IAAI,UAAU,UAAU,MAAMA,OAAM,IAAI,CAAC;AAChE,SAAO;AACX;AAOA,IAAM,WAAN,MAAM,UAAS;AAAA;AAAA;AAAA;AAAA,EAIX,YAIA,MAIAD,SAIA,MAAM;AACF,SAAK,OAAO;AACZ,SAAK,SAASA;AACd,SAAK,OAAO;AAKZ,SAAK,UAAU;AACf,SAAK,SAAS,KAAK,QAAQ,KAAK,MAAM,MAAM,GAAG,IAAI,CAAC;AACpD,SAAK,QAAQ,UAAU,MAAM,KAAK,KAAK;AACvC,SAAK,eAAe,aAAa,KAAK,KAAK;AAC3C,SAAK,eAAe;AACpB,SAAK,gBAAgB;AACrB,SAAK,UAAU,EAAE,KAAK,UAAU,QAAQ;AACxC,SAAK,SAAS,QAAQ;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAIA,IAAI,WAAW;AAAE,WAAO,CAAC,KAAK;AAAA,EAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAKvC,IAAI,cAAc;AAAE,WAAO,KAAK,WAAW,KAAK;AAAA,EAAe;AAAA;AAAA;AAAA;AAAA,EAI/D,IAAI,SAAS;AAAE,WAAO,KAAK,gBAAgB,aAAa;AAAA,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAK/D,IAAI,SAAS;AAAE,WAAO,KAAK,UAAU,CAAC,CAAC,KAAK,KAAK;AAAA,EAAM;AAAA;AAAA;AAAA;AAAA;AAAA,EAKvD,UAAU,OAAO;AACb,WAAO,KAAK,OAAO,QAAQ,KAAK,IAAI;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAIA,IAAI,aAAa;AACb,WAAO,KAAK,KAAK,eAAe,KAAK,KAAK,OAAO,QAAQ;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA,EAIA,mBAAmB;AACf,aAAS,KAAK,KAAK;AACf,UAAI,KAAK,MAAM,CAAC,EAAE;AACd,eAAO;AACf,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,OAAO;AACrB,WAAO,QAAQ,SAAS,KAAK,aAAa,WAAW,MAAM,YAAY;AAAA,EAC3E;AAAA;AAAA;AAAA;AAAA,EAIA,aAAaC,QAAO;AAChB,QAAI,CAACA,UAAS,KAAK;AACf,aAAO,KAAK;AAAA;AAEZ,aAAO,aAAa,KAAK,OAAOA,MAAK;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAOA,SAAQ,MAAM,SAAS,OAAO;AACjC,QAAI,KAAK;AACL,YAAM,IAAI,MAAM,4CAA4C;AAChE,WAAO,IAAI,KAAK,MAAM,KAAK,aAAaA,MAAK,GAAG,SAAS,KAAK,OAAO,GAAG,KAAK,QAAQ,KAAK,CAAC;AAAA,EAC/F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cAAcA,SAAQ,MAAM,SAAS,OAAO;AACxC,cAAU,SAAS,KAAK,OAAO;AAC/B,SAAK,aAAa,OAAO;AACzB,WAAO,IAAI,KAAK,MAAM,KAAK,aAAaA,MAAK,GAAG,SAAS,KAAK,QAAQ,KAAK,CAAC;AAAA,EAChF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,cAAcA,SAAQ,MAAM,SAAS,OAAO;AACxC,IAAAA,SAAQ,KAAK,aAAaA,MAAK;AAC/B,cAAU,SAAS,KAAK,OAAO;AAC/B,QAAI,QAAQ,MAAM;AACd,UAAI,SAAS,KAAK,aAAa,WAAW,OAAO;AACjD,UAAI,CAAC;AACD,eAAO;AACX,gBAAU,OAAO,OAAO,OAAO;AAAA,IACnC;AACA,QAAI,UAAU,KAAK,aAAa,cAAc,OAAO;AACrD,QAAI,QAAQ,WAAW,QAAQ,WAAW,SAAS,OAAO,IAAI;AAC9D,QAAI,CAAC;AACD,aAAO;AACX,WAAO,IAAI,KAAK,MAAMA,QAAO,QAAQ,OAAO,KAAK,GAAG,KAAK,QAAQ,KAAK,CAAC;AAAA,EAC3E;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,SAAS;AAClB,QAAI,SAAS,KAAK,aAAa,cAAc,OAAO;AACpD,QAAI,CAAC,UAAU,CAAC,OAAO;AACnB,aAAO;AACX,aAAS,IAAI,GAAG,IAAI,QAAQ,YAAY;AACpC,UAAI,CAAC,KAAK,YAAY,QAAQ,MAAM,CAAC,EAAE,KAAK;AACxC,eAAO;AACf,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa,SAAS;AAClB,QAAI,CAAC,KAAK,aAAa,OAAO;AAC1B,YAAM,IAAI,WAAW,4BAA4B,KAAK,IAAI,KAAK,QAAQ,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE;AAAA,EACxG;AAAA;AAAA;AAAA;AAAA,EAIA,WAAWA,QAAO;AACd,eAAW,KAAK,OAAOA,QAAO,QAAQ,KAAK,IAAI;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA,EAIA,eAAe,UAAU;AACrB,WAAO,KAAK,WAAW,QAAQ,KAAK,QAAQ,QAAQ,QAAQ,IAAI;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA,EAIA,YAAY,OAAO;AACf,QAAI,KAAK,WAAW;AAChB,aAAO;AACX,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ;AAC9B,UAAI,CAAC,KAAK,eAAe,MAAM,CAAC,EAAE,IAAI;AAClC,eAAO;AACf,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,aAAa,OAAO;AAChB,QAAI,KAAK,WAAW;AAChB,aAAO;AACX,QAAIH;AACJ,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,UAAI,CAAC,KAAK,eAAe,MAAM,CAAC,EAAE,IAAI,GAAG;AACrC,YAAI,CAACA;AACD,UAAAA,QAAO,MAAM,MAAM,GAAG,CAAC;AAAA,MAC/B,WACSA,OAAM;AACX,QAAAA,MAAK,KAAK,MAAM,CAAC,CAAC;AAAA,MACtB;AAAA,IACJ;AACA,WAAO,CAACA,QAAO,QAAQA,MAAK,SAASA,QAAO,KAAK;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,QAAQ,OAAOE,SAAQ;AAC1B,QAAI,SAAS,uBAAO,OAAO,IAAI;AAC/B,UAAM,QAAQ,CAAC,MAAM,SAAS,OAAO,IAAI,IAAI,IAAI,UAAS,MAAMA,SAAQ,IAAI,CAAC;AAC7E,QAAI,UAAUA,QAAO,KAAK,WAAW;AACrC,QAAI,CAAC,OAAO,OAAO;AACf,YAAM,IAAI,WAAW,2CAA2C,UAAU,IAAI;AAClF,QAAI,CAAC,OAAO;AACR,YAAM,IAAI,WAAW,kCAAkC;AAC3D,aAAS,KAAK,OAAO,KAAK;AACtB,YAAM,IAAI,WAAW,+CAA+C;AACxE,WAAO;AAAA,EACX;AACJ;AACA,SAAS,aAAa,UAAU,UAAU,MAAM;AAC5C,MAAI,QAAQ,KAAK,MAAM,GAAG;AAC1B,SAAO,CAAC,UAAU;AACd,QAAI,OAAO,UAAU,OAAO,SAAS,OAAO;AAC5C,QAAI,MAAM,QAAQ,IAAI,IAAI;AACtB,YAAM,IAAI,WAAW,0BAA0B,KAAK,kBAAkB,QAAQ,YAAY,QAAQ,SAAS,IAAI,EAAE;AAAA,EACzH;AACJ;AAEA,IAAM,YAAN,MAAgB;AAAA,EACZ,YAAY,UAAU,UAAU,SAAS;AACrC,SAAK,aAAa,OAAO,UAAU,eAAe,KAAK,SAAS,SAAS;AACzE,SAAK,UAAU,QAAQ;AACvB,SAAK,WAAW,OAAO,QAAQ,YAAY,WAAW,aAAa,UAAU,UAAU,QAAQ,QAAQ,IAAI,QAAQ;AAAA,EACvH;AAAA,EACA,IAAI,aAAa;AACb,WAAO,CAAC,KAAK;AAAA,EACjB;AACJ;AAQA,IAAM,WAAN,MAAM,UAAS;AAAA;AAAA;AAAA;AAAA,EAIX,YAIA,MAIA,MAIAA,SAIA,MAAM;AACF,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,SAASA;AACd,SAAK,OAAO;AACZ,SAAK,QAAQ,UAAU,MAAM,KAAK,KAAK;AACvC,SAAK,WAAW;AAChB,QAAI,WAAW,aAAa,KAAK,KAAK;AACtC,SAAK,WAAW,WAAW,IAAI,KAAK,MAAM,QAAQ,IAAI;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAOC,SAAQ,MAAM;AACjB,QAAI,CAACA,UAAS,KAAK;AACf,aAAO,KAAK;AAChB,WAAO,IAAI,KAAK,MAAM,aAAa,KAAK,OAAOA,MAAK,CAAC;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,QAAQ,OAAOD,SAAQ;AAC1B,QAAI,SAAS,uBAAO,OAAO,IAAI,GAAG,OAAO;AACzC,UAAM,QAAQ,CAAC,MAAM,SAAS,OAAO,IAAI,IAAI,IAAI,UAAS,MAAM,QAAQA,SAAQ,IAAI,CAAC;AACrF,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,cAAcE,MAAK;AACf,aAAS,IAAI,GAAG,IAAIA,KAAI,QAAQ;AAC5B,UAAIA,KAAI,CAAC,EAAE,QAAQ,MAAM;AACrB,QAAAA,OAAMA,KAAI,MAAM,GAAG,CAAC,EAAE,OAAOA,KAAI,MAAM,IAAI,CAAC,CAAC;AAC7C;AAAA,MACJ;AACJ,WAAOA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,QAAQA,MAAK;AACT,aAAS,IAAI,GAAG,IAAIA,KAAI,QAAQ;AAC5B,UAAIA,KAAI,CAAC,EAAE,QAAQ;AACf,eAAOA,KAAI,CAAC;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAIA,WAAWD,QAAO;AACd,eAAW,KAAK,OAAOA,QAAO,QAAQ,KAAK,IAAI;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,OAAO;AACZ,WAAO,KAAK,SAAS,QAAQ,KAAK,IAAI;AAAA,EAC1C;AACJ;AAUA,IAAM,SAAN,MAAa;AAAA;AAAA;AAAA;AAAA,EAIT,YAAY,MAAM;AAMd,SAAK,uBAAuB;AAM5B,SAAK,SAAS,uBAAO,OAAO,IAAI;AAChC,QAAI,eAAe,KAAK,OAAO,CAAC;AAChC,aAASc,SAAQ;AACb,mBAAaA,KAAI,IAAI,KAAKA,KAAI;AAClC,iBAAa,QAAQ,aAAW,KAAK,KAAK,KAAK,GAC3C,aAAa,QAAQ,aAAW,KAAK,KAAK,SAAS,CAAC,CAAC,GACrD,KAAK,QAAQ,SAAS,QAAQ,KAAK,KAAK,OAAO,IAAI;AACvD,SAAK,QAAQ,SAAS,QAAQ,KAAK,KAAK,OAAO,IAAI;AACnD,QAAI,mBAAmB,uBAAO,OAAO,IAAI;AACzC,aAASA,SAAQ,KAAK,OAAO;AACzB,UAAIA,SAAQ,KAAK;AACb,cAAM,IAAI,WAAWA,QAAO,oCAAoC;AACpE,UAAI,OAAO,KAAK,MAAMA,KAAI,GAAG,cAAc,KAAK,KAAK,WAAW,IAAI,WAAW,KAAK,KAAK;AACzF,WAAK,eAAe,iBAAiB,WAAW,MAC3C,iBAAiB,WAAW,IAAI,aAAa,MAAM,aAAa,KAAK,KAAK;AAC/E,WAAK,gBAAgB,KAAK,aAAa;AACvC,UAAI,KAAK,KAAK,sBAAsB;AAChC,YAAI,KAAK;AACL,gBAAM,IAAI,WAAW,kCAAkC;AAC3D,YAAI,CAAC,KAAK,YAAY,CAAC,KAAK;AACxB,gBAAM,IAAI,WAAW,uDAAuD;AAChF,aAAK,uBAAuB;AAAA,MAChC;AACA,WAAK,UAAU,YAAY,MAAM,OAC7B,WAAW,YAAY,MAAM,SAAS,MAAM,GAAG,CAAC,IAC5C,YAAY,MAAM,CAAC,KAAK,gBAAgB,CAAC,IAAI;AAAA,IACzD;AACA,aAASA,SAAQ,KAAK,OAAO;AACzB,UAAI,OAAO,KAAK,MAAMA,KAAI,GAAG,OAAO,KAAK,KAAK;AAC9C,WAAK,WAAW,QAAQ,OAAO,CAAC,IAAI,IAAI,QAAQ,KAAK,CAAC,IAAI,YAAY,MAAM,KAAK,MAAM,GAAG,CAAC;AAAA,IAC/F;AACA,SAAK,eAAe,UAAQ,KAAK,SAAS,MAAM,IAAI;AACpD,SAAK,eAAe,UAAQ,KAAK,SAAS,MAAM,IAAI;AACpD,SAAK,cAAc,KAAK,MAAM,KAAK,KAAK,WAAW,KAAK;AACxD,SAAK,OAAO,YAAY,uBAAO,OAAO,IAAI;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,KAAK,MAAMd,SAAQ,MAAM,SAAS,OAAO;AACrC,QAAI,OAAO,QAAQ;AACf,aAAO,KAAK,SAAS,IAAI;AAAA,aACpB,EAAE,gBAAgB;AACvB,YAAM,IAAI,WAAW,wBAAwB,IAAI;AAAA,aAC5C,KAAK,UAAU;AACpB,YAAM,IAAI,WAAW,2CAA2C,KAAK,OAAO,GAAG;AACnF,WAAO,KAAK,cAAcA,QAAO,SAAS,KAAK;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,KAAKJ,OAAM,OAAO;AACd,QAAI,OAAO,KAAK,MAAM;AACtB,WAAO,IAAI,SAAS,MAAM,KAAK,cAAcA,OAAM,KAAK,QAAQ,KAAK,CAAC;AAAA,EAC1E;AAAA;AAAA;AAAA;AAAA,EAIA,KAAK,MAAMI,QAAO;AACd,QAAI,OAAO,QAAQ;AACf,aAAO,KAAK,MAAM,IAAI;AAC1B,WAAO,KAAK,OAAOA,MAAK;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAIA,SAAS,MAAM;AACX,QAAIF,SAAQ,KAAK,MAAM,IAAI;AAC3B,QAAI,CAACA;AACD,YAAM,IAAI,WAAW,wBAAwB,IAAI;AACrD,WAAOA;AAAA,EACX;AACJ;AACA,SAAS,YAAYC,SAAQ,OAAO;AAChC,MAAID,SAAQ,CAAC;AACb,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,QAAI,OAAO,MAAM,CAAC,GAAG,OAAOC,QAAO,MAAM,IAAI,GAAG,KAAK;AACrD,QAAI,MAAM;AACN,MAAAD,OAAM,KAAK,IAAI;AAAA,IACnB,OACK;AACD,eAASgB,SAAQf,QAAO,OAAO;AAC3B,YAAIgB,QAAOhB,QAAO,MAAMe,KAAI;AAC5B,YAAI,QAAQ,OAAQC,MAAK,KAAK,SAASA,MAAK,KAAK,MAAM,MAAM,GAAG,EAAE,QAAQ,IAAI,IAAI;AAC9E,UAAAjB,OAAM,KAAK,KAAKiB,KAAI;AAAA,MAC5B;AAAA,IACJ;AACA,QAAI,CAAC;AACD,YAAM,IAAI,YAAY,yBAAyB,MAAM,CAAC,IAAI,GAAG;AAAA,EACrE;AACA,SAAOjB;AACX;AAEA,SAAS,UAAU,MAAM;AAAE,SAAO,KAAK,OAAO;AAAM;AACpD,SAAS,YAAY,MAAM;AAAE,SAAO,KAAK,SAAS;AAAM;AAMxD,IAAM,YAAN,MAAM,WAAU;AAAA;AAAA;AAAA;AAAA;AAAA,EAKZ,YAIAC,SAKA,OAAO;AACH,SAAK,SAASA;AACd,SAAK,QAAQ;AAIb,SAAK,OAAO,CAAC;AAIb,SAAK,SAAS,CAAC;AACf,QAAI,gBAAgB,KAAK,gBAAgB,CAAC;AAC1C,UAAM,QAAQ,UAAQ;AAClB,UAAI,UAAU,IAAI,GAAG;AACjB,aAAK,KAAK,KAAK,IAAI;AAAA,MACvB,WACS,YAAY,IAAI,GAAG;AACxB,YAAIe,QAAO,QAAQ,KAAK,KAAK,KAAK,EAAE,CAAC;AACrC,YAAI,cAAc,QAAQA,KAAI,IAAI;AAC9B,wBAAc,KAAKA,KAAI;AAC3B,aAAK,OAAO,KAAK,IAAI;AAAA,MACzB;AAAA,IACJ,CAAC;AAED,SAAK,iBAAiB,CAAC,KAAK,KAAK,KAAK,OAAK;AACvC,UAAI,CAAC,aAAa,KAAK,EAAE,GAAG,KAAK,CAAC,EAAE;AAChC,eAAO;AACX,UAAI,OAAOf,QAAO,MAAM,EAAE,IAAI;AAC9B,aAAO,KAAK,aAAa,UAAU,IAAI;AAAA,IAC3C,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,KAAK,UAAU,CAAC,GAAG;AACrB,QAAI,UAAU,IAAI,aAAa,MAAM,SAAS,KAAK;AACnD,YAAQ,OAAO,KAAK,KAAK,MAAM,QAAQ,MAAM,QAAQ,EAAE;AACvD,WAAO,QAAQ,OAAO;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,WAAW,KAAK,UAAU,CAAC,GAAG;AAC1B,QAAI,UAAU,IAAI,aAAa,MAAM,SAAS,IAAI;AAClD,YAAQ,OAAO,KAAK,KAAK,MAAM,QAAQ,MAAM,QAAQ,EAAE;AACvD,WAAO,MAAM,QAAQ,QAAQ,OAAO,CAAC;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAIA,SAAS,KAAK,SAAS,OAAO;AAC1B,aAAS,IAAI,QAAQ,KAAK,KAAK,QAAQ,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK,QAAQ,KAAK;AAC9E,UAAI,OAAO,KAAK,KAAK,CAAC;AACtB,UAAI,QAAQ,KAAK,KAAK,GAAG,MACpB,KAAK,cAAc,UAAa,IAAI,gBAAgB,KAAK,eACzD,CAAC,KAAK,WAAW,QAAQ,eAAe,KAAK,OAAO,IAAI;AACzD,YAAI,KAAK,UAAU;AACf,cAAI,SAAS,KAAK,SAAS,GAAG;AAC9B,cAAI,WAAW;AACX;AACJ,eAAK,QAAQ,UAAU;AAAA,QAC3B;AACA,eAAO;AAAA,MACX;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAIA,WAAWe,OAAM,OAAO,SAAS,OAAO;AACpC,aAAS,IAAI,QAAQ,KAAK,OAAO,QAAQ,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,KAAK;AAClF,UAAI,OAAO,KAAK,OAAO,CAAC,GAAG,QAAQ,KAAK;AACxC,UAAI,MAAM,QAAQA,KAAI,KAAK,KACvB,KAAK,WAAW,CAAC,QAAQ,eAAe,KAAK,OAAO;AAAA;AAAA;AAAA,MAIpD,MAAM,SAASA,MAAK,WACf,MAAM,WAAWA,MAAK,MAAM,KAAK,MAAM,MAAM,MAAMA,MAAK,SAAS,CAAC,KAAK;AAC5E;AACJ,UAAI,KAAK,UAAU;AACf,YAAI,SAAS,KAAK,SAAS,KAAK;AAChC,YAAI,WAAW;AACX;AACJ,aAAK,QAAQ,UAAU;AAAA,MAC3B;AACA,aAAO;AAAA,IACX;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,YAAYf,SAAQ;AACvB,QAAI,SAAS,CAAC;AACd,aAAS,OAAO,MAAM;AAClB,UAAI,WAAW,KAAK,YAAY,OAAO,KAAK,KAAK,UAAU,IAAI;AAC/D,aAAO,IAAI,OAAO,QAAQ,KAAK;AAC3B,YAAI,OAAO,OAAO,CAAC,GAAG,eAAe,KAAK,YAAY,OAAO,KAAK,KAAK;AACvE,YAAI,eAAe;AACf;AAAA,MACR;AACA,aAAO,OAAO,GAAG,GAAG,IAAI;AAAA,IAC5B;AACA,aAAS,QAAQA,QAAO,OAAO;AAC3B,UAAI,QAAQA,QAAO,MAAM,IAAI,EAAE,KAAK;AACpC,UAAI;AACA,cAAM,QAAQ,UAAQ;AAClB,iBAAO,OAAO,KAAK,IAAI,CAAC;AACxB,cAAI,EAAE,KAAK,QAAQ,KAAK,UAAU,KAAK;AACnC,iBAAK,OAAO;AAAA,QACpB,CAAC;AAAA,IACT;AACA,aAAS,QAAQA,QAAO,OAAO;AAC3B,UAAI,QAAQA,QAAO,MAAM,IAAI,EAAE,KAAK;AACpC,UAAI;AACA,cAAM,QAAQ,UAAQ;AAClB,iBAAO,OAAO,KAAK,IAAI,CAAC;AACxB,cAAI,EAAE,KAAK,QAAQ,KAAK,UAAU,KAAK;AACnC,iBAAK,OAAO;AAAA,QACpB,CAAC;AAAA,IACT;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,WAAWA,SAAQ;AACtB,WAAOA,QAAO,OAAO,cAChBA,QAAO,OAAO,YAAY,IAAI,WAAUA,SAAQ,WAAU,YAAYA,OAAM,CAAC;AAAA,EACtF;AACJ;AACA,IAAM,YAAY;AAAA,EACd,SAAS;AAAA,EAAM,SAAS;AAAA,EAAM,OAAO;AAAA,EAAM,YAAY;AAAA,EAAM,QAAQ;AAAA,EACrE,IAAI;AAAA,EAAM,KAAK;AAAA,EAAM,IAAI;AAAA,EAAM,UAAU;AAAA,EAAM,YAAY;AAAA,EAAM,QAAQ;AAAA,EACzE,QAAQ;AAAA,EAAM,MAAM;AAAA,EAAM,IAAI;AAAA,EAAM,IAAI;AAAA,EAAM,IAAI;AAAA,EAAM,IAAI;AAAA,EAAM,IAAI;AAAA,EACtE,IAAI;AAAA,EAAM,QAAQ;AAAA,EAAM,QAAQ;AAAA,EAAM,IAAI;AAAA,EAAM,IAAI;AAAA,EAAM,UAAU;AAAA,EAAM,IAAI;AAAA,EAC9E,QAAQ;AAAA,EAAM,GAAG;AAAA,EAAM,KAAK;AAAA,EAAM,SAAS;AAAA,EAAM,OAAO;AAAA,EAAM,OAAO;AAAA,EAAM,IAAI;AACnF;AACA,IAAM,aAAa;AAAA,EACf,MAAM;AAAA,EAAM,UAAU;AAAA,EAAM,QAAQ;AAAA,EAAM,QAAQ;AAAA,EAAM,OAAO;AAAA,EAAM,OAAO;AAChF;AACA,IAAM,WAAW,EAAE,IAAI,MAAM,IAAI,KAAK;AAEtC,IAAM,kBAAkB;AAAxB,IAA2B,uBAAuB;AAAlD,IAAqD,gBAAgB;AACrE,SAAS,aAAa,MAAM,oBAAoBK,OAAM;AAClD,MAAI,sBAAsB;AACtB,YAAQ,qBAAqB,kBAAkB,MAC1C,uBAAuB,SAAS,uBAAuB;AAChE,SAAO,QAAQ,KAAK,cAAc,QAAQ,kBAAkB,uBAAuBA,QAAO,CAAC;AAC/F;AACA,IAAM,cAAN,MAAkB;AAAA,EACd,YAAY,MAAMJ,QAAO,OAAO,OAAOG,QAAO,SAAS;AACnD,SAAK,OAAO;AACZ,SAAK,QAAQH;AACb,SAAK,QAAQ;AACb,SAAK,QAAQ;AACb,SAAK,UAAU;AACf,SAAK,UAAU,CAAC;AAEhB,SAAK,cAAc,KAAK;AACxB,SAAK,QAAQG,WAAU,UAAU,gBAAgB,OAAO,KAAK;AAAA,EACjE;AAAA,EACA,aAAa,MAAM;AACf,QAAI,CAAC,KAAK,OAAO;AACb,UAAI,CAAC,KAAK;AACN,eAAO,CAAC;AACZ,UAAI,OAAO,KAAK,KAAK,aAAa,WAAW,SAAS,KAAK,IAAI,CAAC;AAChE,UAAI,MAAM;AACN,aAAK,QAAQ,KAAK,KAAK,aAAa,cAAc,IAAI;AAAA,MAC1D,OACK;AACD,YAAI,QAAQ,KAAK,KAAK,cAAc;AACpC,YAAI,OAAO,MAAM,aAAa,KAAK,IAAI,GAAG;AACtC,eAAK,QAAQ;AACb,iBAAO;AAAA,QACX,OACK;AACD,iBAAO;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AACA,WAAO,KAAK,MAAM,aAAa,KAAK,IAAI;AAAA,EAC5C;AAAA,EACA,OAAO,SAAS;AACZ,QAAI,EAAE,KAAK,UAAU,kBAAkB;AACnC,UAAI,OAAO,KAAK,QAAQ,KAAK,QAAQ,SAAS,CAAC,GAAG;AAClD,UAAI,QAAQ,KAAK,WAAW,IAAI,oBAAoB,KAAK,KAAK,IAAI,IAAI;AAClE,YAAIP,QAAO;AACX,YAAI,KAAK,KAAK,UAAU,EAAE,CAAC,EAAE;AACzB,eAAK,QAAQ,IAAI;AAAA;AAEjB,eAAK,QAAQ,KAAK,QAAQ,SAAS,CAAC,IAAIA,MAAK,SAASA,MAAK,KAAK,MAAM,GAAGA,MAAK,KAAK,SAAS,EAAE,CAAC,EAAE,MAAM,CAAC;AAAA,MAChH;AAAA,IACJ;AACA,QAAI,UAAU,SAAS,KAAK,KAAK,OAAO;AACxC,QAAI,CAAC,WAAW,KAAK;AACjB,gBAAU,QAAQ,OAAO,KAAK,MAAM,WAAW,SAAS,OAAO,IAAI,CAAC;AACxE,WAAO,KAAK,OAAO,KAAK,KAAK,OAAO,KAAK,OAAO,SAAS,KAAK,KAAK,IAAI;AAAA,EAC3E;AAAA,EACA,cAAc,MAAM;AAChB,QAAI,KAAK;AACL,aAAO,KAAK,KAAK;AACrB,QAAI,KAAK,QAAQ;AACb,aAAO,KAAK,QAAQ,CAAC,EAAE;AAC3B,WAAO,KAAK,cAAc,CAAC,UAAU,eAAe,KAAK,WAAW,SAAS,YAAY,CAAC;AAAA,EAC9F;AACJ;AACA,IAAM,eAAN,MAAmB;AAAA,EACf,YAEA,QAEA,SAAS,QAAQ;AACb,SAAK,SAAS;AACd,SAAK,UAAU;AACf,SAAK,SAAS;AACd,SAAK,OAAO;AACZ,SAAK,kBAAkB;AACvB,QAAI,UAAU,QAAQ,SAAS;AAC/B,QAAI,aAAa,aAAa,MAAM,QAAQ,oBAAoB,CAAC,KAAK,SAAS,gBAAgB;AAC/F,QAAI;AACA,mBAAa,IAAI,YAAY,QAAQ,MAAM,QAAQ,OAAO,KAAK,MAAM,MAAM,QAAQ,YAAY,QAAQ,KAAK,cAAc,UAAU;AAAA,aAC/H;AACL,mBAAa,IAAI,YAAY,MAAM,MAAM,KAAK,MAAM,MAAM,MAAM,UAAU;AAAA;AAE1E,mBAAa,IAAI,YAAY,OAAO,OAAO,aAAa,MAAM,KAAK,MAAM,MAAM,MAAM,UAAU;AACnG,SAAK,QAAQ,CAAC,UAAU;AACxB,SAAK,OAAO,QAAQ;AACpB,SAAK,aAAa;AAAA,EACtB;AAAA,EACA,IAAI,MAAM;AACN,WAAO,KAAK,MAAM,KAAK,IAAI;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,KAAK,OAAO;AACf,QAAI,IAAI,YAAY;AAChB,WAAK,YAAY,KAAK,KAAK;AAAA,aACtB,IAAI,YAAY;AACrB,WAAK,WAAW,KAAK,KAAK;AAAA,EAClC;AAAA,EACA,YAAY,KAAK,OAAO;AACpB,QAAI,QAAQ,IAAI;AAChB,QAAI,MAAM,KAAK,KAAK,aAAc,IAAI,UAAU,uBAAwB,SAClE,KAAK,oBAAoB,IAAI,UAAU,mBAAmB;AAChE,QAAI,EAAE,QAAAG,QAAO,IAAI,KAAK;AACtB,QAAI,eAAe,UACf,IAAI,cAAc,GAAG,KACrB,mBAAmB,KAAK,KAAK,GAAG;AAChC,UAAI,CAAC,YAAY;AACb,gBAAQ,MAAM,QAAQ,qBAAqB,GAAG;AAI9C,YAAI,mBAAmB,KAAK,KAAK,KAAK,KAAK,QAAQ,KAAK,MAAM,SAAS,GAAG;AACtE,cAAI,aAAa,IAAI,QAAQ,IAAI,QAAQ,SAAS,CAAC;AACnD,cAAI,gBAAgB,IAAI;AACxB,cAAI,CAAC,cACA,iBAAiB,cAAc,YAAY,QAC3C,WAAW,UAAU,mBAAmB,KAAK,WAAW,IAAI;AAC7D,oBAAQ,MAAM,MAAM,CAAC;AAAA,QAC7B;AAAA,MACJ,WACS,eAAe,QAAQ;AAC5B,gBAAQ,MAAM,QAAQ,UAAU,IAAI;AAAA,MACxC,WACSA,QAAO,wBAAwB,SAAS,KAAK,KAAK,KAAK,KAAK,IAAI,aAAaA,QAAO,qBAAqB,OAAO,CAAC,GAAG;AACzH,YAAI,QAAQ,MAAM,MAAM,UAAU;AAClC,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,cAAI;AACA,iBAAK,WAAWA,QAAO,qBAAqB,OAAO,GAAG,OAAO,IAAI;AACrE,cAAI,MAAM,CAAC;AACP,iBAAK,WAAWA,QAAO,KAAK,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC;AAAA,QAC1E;AACA,gBAAQ;AAAA,MACZ,OACK;AACD,gBAAQ,MAAM,QAAQ,aAAa,GAAG;AAAA,MAC1C;AACA,UAAI;AACA,aAAK,WAAWA,QAAO,KAAK,KAAK,GAAG,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC;AAChE,WAAK,WAAW,GAAG;AAAA,IACvB,OACK;AACD,WAAK,WAAW,GAAG;AAAA,IACvB;AAAA,EACJ;AAAA;AAAA;AAAA,EAGA,WAAW,KAAK,OAAO,YAAY;AAC/B,QAAI,UAAU,KAAK,iBAAiB,MAAM,KAAK;AAC/C,QAAI,IAAI,WAAW,SAAS,MAAM,KAAK,IAAI,SAAS,IAAI,MAAM,UAAU;AACpE,WAAK,kBAAkB;AAC3B,QAAI,OAAO,IAAI,SAAS,YAAY,GAAG;AACvC,QAAI,SAAS,eAAe,IAAI,KAAK,KAAK,OAAO;AAC7C,oBAAc,GAAG;AACrB,QAAI,OAAQ,KAAK,QAAQ,gBAAgB,KAAK,QAAQ,aAAa,GAAG,MACjE,SAAS,KAAK,OAAO,SAAS,KAAK,MAAM,UAAU;AACxD,QAAK,KAAI,OAAO,KAAK,SAAS,WAAW,eAAe,IAAI,GAAG;AAC3D,WAAK,WAAW,GAAG;AACnB,WAAK,eAAe,KAAK,KAAK;AAAA,IAClC,WACS,CAAC,QAAQ,KAAK,QAAQ,KAAK,aAAa;AAC7C,UAAI,QAAQ,KAAK;AACb,aAAK,OAAO,KAAK,IAAI,GAAG,KAAK,OAAO,CAAC;AAAA,eAChC,QAAQ,KAAK,KAAK;AACvB,cAAM,KAAK;AACf,UAAI,MAAM,gBAAgB,KAAK;AAC/B,UAAI,UAAU,eAAe,IAAI,GAAG;AAChC,YAAI,IAAI,QAAQ,UAAU,IAAI,QAAQ,CAAC,EAAE,YAAY,KAAK,MAAM;AAC5D,eAAK;AACL,gBAAM,KAAK;AAAA,QACf;AACA,eAAO;AACP,YAAI,CAAC,IAAI;AACL,eAAK,aAAa;AAAA,MAC1B,WACS,CAAC,IAAI,YAAY;AACtB,aAAK,aAAa,KAAK,KAAK;AAC5B,cAAM;AAAA,MACV;AACA,UAAI,aAAa,QAAQ,KAAK,OAAO,QAAQ,KAAK,WAAW,KAAK,KAAK;AACvE,UAAI;AACA,aAAK,OAAO,KAAK,UAAU;AAC/B,UAAI;AACA,aAAK,KAAK,GAAG;AACjB,WAAK,aAAa;AAAA,IACtB,OACK;AACD,UAAI,aAAa,KAAK,WAAW,KAAK,KAAK;AAC3C,UAAI;AACA,aAAK,iBAAiB,KAAK,MAAM,YAAY,KAAK,cAAc,QAAQ,SAAS,MAAS;AAAA,IAClG;AACA,SAAK,kBAAkB;AAAA,EAC3B;AAAA;AAAA,EAEA,aAAa,KAAK,OAAO;AACrB,QAAI,IAAI,YAAY,QAAQ,KAAK,IAAI,QAAQ,KAAK,IAAI,KAAK;AACvD,WAAK,YAAY,IAAI,cAAc,eAAe,IAAI,GAAG,KAAK;AAAA,EACtE;AAAA;AAAA,EAEA,eAAe,KAAK,OAAO;AAEvB,QAAI,IAAI,YAAY,SAAS,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,IAAI,KAAK;AAC1D,WAAK,UAAU,KAAK,OAAO,OAAO,KAAK,GAAG,GAAG,OAAO,IAAI;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA,EAIA,WAAW,KAAK,OAAO;AACnB,QAAI,SAAS,IAAI;AAMjB,QAAI,UAAU,OAAO;AACjB,eAAS,IAAI,GAAG,IAAI,KAAK,OAAO,cAAc,QAAQ,KAAK;AACvD,YAAI,OAAO,KAAK,OAAO,cAAc,CAAC,GAAG,QAAQ,OAAO,iBAAiB,IAAI;AAC7E,YAAI;AACA,mBAAS,QAAQ,YAAa;AAC1B,gBAAI,OAAO,KAAK,OAAO,WAAW,MAAM,OAAO,MAAM,KAAK;AAC1D,gBAAI,CAAC;AACD;AACJ,gBAAI,KAAK;AACL,qBAAO;AACX,gBAAI,KAAK;AACL,sBAAQ,MAAM,OAAO,OAAK,CAAC,KAAK,UAAU,CAAC,CAAC;AAAA;AAE5C,sBAAQ,MAAM,OAAO,KAAK,OAAO,OAAO,MAAM,KAAK,IAAI,EAAE,OAAO,KAAK,KAAK,CAAC;AAC/E,gBAAI,KAAK,cAAc;AACnB,sBAAQ;AAAA;AAER;AAAA,UACR;AAAA,MACR;AACJ,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,iBAAiB,KAAK,MAAM,OAAO,eAAe;AAC9C,QAAI,MAAM;AACV,QAAI,KAAK,MAAM;AACX,iBAAW,KAAK,OAAO,OAAO,MAAM,KAAK,IAAI;AAC7C,UAAI,CAAC,SAAS,QAAQ;AAClB,YAAI,QAAQ,KAAK,MAAM,UAAU,KAAK,SAAS,MAAM,OAAO,KAAK,kBAAkB;AACnF,YAAI,OAAO;AACP,iBAAO;AACP,kBAAQ;AAAA,QACZ;AAAA,MACJ,WACS,CAAC,KAAK,WAAW,SAAS,OAAO,KAAK,KAAK,GAAG,OAAO,IAAI,YAAY,IAAI,GAAG;AACjF,aAAK,aAAa,KAAK,KAAK;AAAA,MAChC;AAAA,IACJ,OACK;AACD,UAAI,WAAW,KAAK,OAAO,OAAO,MAAM,KAAK,IAAI;AACjD,cAAQ,MAAM,OAAO,SAAS,OAAO,KAAK,KAAK,CAAC;AAAA,IACpD;AACA,QAAI,UAAU,KAAK;AACnB,QAAI,YAAY,SAAS,QAAQ;AAC7B,WAAK,WAAW,GAAG;AAAA,IACvB,WACS,eAAe;AACpB,WAAK,WAAW,KAAK,OAAO,aAAa;AAAA,IAC7C,WACS,KAAK,YAAY;AACtB,WAAK,WAAW,GAAG;AACnB,WAAK,WAAW,KAAK,KAAK,OAAO,MAAM,EAAE,QAAQ,UAAQ,KAAK,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,IAChG,OACK;AACD,UAAI,aAAa;AACjB,UAAI,OAAO,KAAK,kBAAkB;AAC9B,qBAAa,IAAI,cAAc,KAAK,cAAc;AAAA,eAC7C,OAAO,KAAK,kBAAkB;AACnC,qBAAa,KAAK,eAAe,GAAG;AAAA,eAC/B,KAAK;AACV,qBAAa,KAAK;AACtB,WAAK,WAAW,KAAK,YAAY,IAAI;AACrC,WAAK,OAAO,YAAY,KAAK;AAC7B,WAAK,WAAW,KAAK,YAAY,KAAK;AAAA,IAC1C;AACA,QAAI,QAAQ,KAAK,KAAK,OAAO;AACzB,WAAK;AAAA,EACb;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,QAAQ,OAAO,YAAY,UAAU;AACxC,QAAI,QAAQ,cAAc;AAC1B,aAAS,MAAM,aAAa,OAAO,WAAW,UAAU,IAAI,OAAO,YAAY,MAAM,YAAY,OAAO,OAAO,OAAO,WAAW,QAAQ,GAAG,OAAO,KAAK,MAAM,IAAI,aAAa,EAAE,OAAO;AACpL,WAAK,YAAY,QAAQ,KAAK;AAC9B,WAAK,OAAO,KAAK,KAAK;AAAA,IAC1B;AACA,SAAK,YAAY,QAAQ,KAAK;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAIA,UAAU,MAAM,OAAO,UAAU;AAC7B,QAAI,OAAO;AACX,aAAS,QAAQ,KAAK,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS;AAC1D,UAAI,KAAK,KAAK,MAAM,KAAK;AACzB,UAAID,SAAQ,GAAG,aAAa,IAAI;AAChC,UAAIA,WAAU,CAAC,SAAS,MAAM,SAASA,OAAM,SAAS,UAAU;AAC5D,gBAAQA;AACR,eAAO;AACP,YAAI,CAACA,OAAM;AACP;AAAA,MACR;AACA,UAAI,GAAG,OAAO;AACV,YAAI;AACA;AACJ,mBAAW;AAAA,MACf;AAAA,IACJ;AACA,QAAI,CAAC;AACD,aAAO;AACX,SAAK,KAAK,IAAI;AACd,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ;AAC9B,cAAQ,KAAK,WAAW,MAAM,CAAC,GAAG,MAAM,OAAO,KAAK;AACxD,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,WAAW,MAAM,OAAO,UAAU;AAC9B,QAAI,KAAK,YAAY,KAAK,cAAc,CAAC,KAAK,IAAI,MAAM;AACpD,UAAIkB,SAAQ,KAAK,qBAAqB;AACtC,UAAIA;AACA,gBAAQ,KAAK,WAAWA,QAAO,MAAM,KAAK;AAAA,IAClD;AACA,QAAI,aAAa,KAAK,UAAU,MAAM,OAAO,QAAQ;AACrD,QAAI,YAAY;AACZ,WAAK,WAAW;AAChB,UAAI,MAAM,KAAK;AACf,UAAI,IAAI;AACJ,YAAI,QAAQ,IAAI,MAAM,UAAU,KAAK,IAAI;AAC7C,UAAI,YAAY,KAAK;AACrB,eAAS,KAAK,WAAW,OAAO,KAAK,KAAK;AACtC,YAAI,IAAI,OAAO,IAAI,KAAK,eAAe,EAAE,IAAI,IAAI,aAAa,EAAE,MAAM,KAAK,IAAI;AAC3E,sBAAY,EAAE,SAAS,SAAS;AACxC,UAAI,QAAQ,KAAK,KAAK,KAAK,SAAS,CAAC;AACrC,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA,EAGA,MAAM,MAAMhB,QAAO,OAAO,YAAY;AAClC,QAAI,aAAa,KAAK,UAAU,KAAK,OAAOA,MAAK,GAAG,OAAO,KAAK;AAChE,QAAI;AACA,mBAAa,KAAK,WAAW,MAAMA,QAAO,OAAO,MAAM,UAAU;AACrE,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,WAAW,MAAMA,QAAO,OAAO,QAAQ,OAAO,YAAY;AACtD,SAAK,WAAW;AAChB,QAAI,MAAM,KAAK;AACf,QAAI,QAAQ,IAAI,SAAS,IAAI,MAAM,UAAU,IAAI;AACjD,QAAI,UAAU,aAAa,MAAM,YAAY,IAAI,OAAO;AACxD,QAAK,IAAI,UAAU,iBAAkB,IAAI,QAAQ,UAAU;AACvD,iBAAW;AACf,QAAI,aAAa,KAAK;AACtB,YAAQ,MAAM,OAAO,OAAK;AACtB,UAAI,IAAI,OAAO,IAAI,KAAK,eAAe,EAAE,IAAI,IAAI,aAAa,EAAE,MAAM,IAAI,GAAG;AACzE,qBAAa,EAAE,SAAS,UAAU;AAClC,eAAO;AAAA,MACX;AACA,aAAO;AAAA,IACX,CAAC;AACD,SAAK,MAAM,KAAK,IAAI,YAAY,MAAMA,QAAO,YAAY,OAAO,MAAM,OAAO,CAAC;AAC9E,SAAK;AACL,WAAO;AAAA,EACX;AAAA;AAAA;AAAA,EAGA,WAAW,UAAU,OAAO;AACxB,QAAI,IAAI,KAAK,MAAM,SAAS;AAC5B,QAAI,IAAI,KAAK,MAAM;AACf,aAAO,IAAI,KAAK,MAAM;AAClB,aAAK,MAAM,IAAI,CAAC,EAAE,QAAQ,KAAK,KAAK,MAAM,CAAC,EAAE,OAAO,OAAO,CAAC;AAChE,WAAK,MAAM,SAAS,KAAK,OAAO;AAAA,IACpC;AAAA,EACJ;AAAA,EACA,SAAS;AACL,SAAK,OAAO;AACZ,SAAK,WAAW,KAAK,MAAM;AAC3B,WAAO,KAAK,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,KAAK,UAAU,KAAK,QAAQ,QAAQ;AAAA,EACvE;AAAA,EACA,KAAK,IAAI;AACL,aAAS,IAAI,KAAK,MAAM,KAAK,GAAG,KAAK;AACjC,UAAI,KAAK,MAAM,CAAC,KAAK,IAAI;AACrB,aAAK,OAAO;AACZ,eAAO;AAAA,MACX,WACS,KAAK,iBAAiB;AAC3B,aAAK,MAAM,CAAC,EAAE,WAAW;AAAA,MAC7B;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EACA,IAAI,aAAa;AACb,SAAK,WAAW;AAChB,QAAI,MAAM;AACV,aAAS,IAAI,KAAK,MAAM,KAAK,GAAG,KAAK;AACjC,UAAI,UAAU,KAAK,MAAM,CAAC,EAAE;AAC5B,eAAS,IAAI,QAAQ,SAAS,GAAG,KAAK,GAAG;AACrC,eAAO,QAAQ,CAAC,EAAE;AACtB,UAAI;AACA;AAAA,IACR;AACA,WAAO;AAAA,EACX;AAAA,EACA,YAAY,QAAQ,QAAQ;AACxB,QAAI,KAAK;AACL,eAAS,IAAI,GAAG,IAAI,KAAK,KAAK,QAAQ,KAAK;AACvC,YAAI,KAAK,KAAK,CAAC,EAAE,QAAQ,UAAU,KAAK,KAAK,CAAC,EAAE,UAAU;AACtD,eAAK,KAAK,CAAC,EAAE,MAAM,KAAK;AAAA,MAChC;AAAA,EACR;AAAA,EACA,WAAW,QAAQ;AACf,QAAI,KAAK;AACL,eAAS,IAAI,GAAG,IAAI,KAAK,KAAK,QAAQ,KAAK;AACvC,YAAI,KAAK,KAAK,CAAC,EAAE,OAAO,QAAQ,OAAO,YAAY,KAAK,OAAO,SAAS,KAAK,KAAK,CAAC,EAAE,IAAI;AACrF,eAAK,KAAK,CAAC,EAAE,MAAM,KAAK;AAAA,MAChC;AAAA,EACR;AAAA,EACA,WAAW,QAAQ,SAAS,QAAQ;AAChC,QAAI,UAAU,WAAW,KAAK;AAC1B,eAAS,IAAI,GAAG,IAAI,KAAK,KAAK,QAAQ,KAAK;AACvC,YAAI,KAAK,KAAK,CAAC,EAAE,OAAO,QAAQ,OAAO,YAAY,KAAK,OAAO,SAAS,KAAK,KAAK,CAAC,EAAE,IAAI,GAAG;AACxF,cAAI,MAAM,QAAQ,wBAAwB,KAAK,KAAK,CAAC,EAAE,IAAI;AAC3D,cAAI,OAAO,SAAS,IAAI;AACpB,iBAAK,KAAK,CAAC,EAAE,MAAM,KAAK;AAAA,QAChC;AAAA,MACJ;AAAA,EACR;AAAA,EACA,WAAW,UAAU;AACjB,QAAI,KAAK;AACL,eAAS,IAAI,GAAG,IAAI,KAAK,KAAK,QAAQ,KAAK;AACvC,YAAI,KAAK,KAAK,CAAC,EAAE,QAAQ;AACrB,eAAK,KAAK,CAAC,EAAE,MAAM,KAAK,cAAc,SAAS,UAAU,SAAS,KAAK,KAAK,CAAC,EAAE;AAAA,MACvF;AAAA,EACR;AAAA;AAAA,EAEA,eAAe,SAAS;AACpB,QAAI,QAAQ,QAAQ,GAAG,IAAI;AACvB,aAAO,QAAQ,MAAM,UAAU,EAAE,KAAK,KAAK,gBAAgB,IAAI;AACnE,QAAI,QAAQ,QAAQ,MAAM,GAAG;AAC7B,QAAI,SAAS,KAAK,QAAQ;AAC1B,QAAI,UAAU,CAAC,KAAK,WAAW,CAAC,UAAU,OAAO,OAAO,QAAQ,KAAK,MAAM,CAAC,EAAE;AAC9E,QAAI,WAAW,EAAE,SAAS,OAAO,QAAQ,IAAI,MAAM,UAAU,IAAI;AACjE,QAAIG,SAAQ,CAAC,GAAG,UAAU;AACtB,aAAO,KAAK,GAAG,KAAK;AAChB,YAAI,OAAO,MAAM,CAAC;AAClB,YAAI,QAAQ,IAAI;AACZ,cAAI,KAAK,MAAM,SAAS,KAAK,KAAK;AAC9B;AACJ,iBAAO,SAAS,UAAU;AACtB,gBAAIA,OAAM,IAAI,GAAG,KAAK;AAClB,qBAAO;AACf,iBAAO;AAAA,QACX,OACK;AACD,cAAI,OAAO,QAAQ,KAAM,SAAS,KAAK,UAAW,KAAK,MAAM,KAAK,EAAE,OAC9D,UAAU,SAAS,WAAW,OAAO,KAAK,QAAQ,QAAQ,EAAE,OACxD;AACV,cAAI,CAAC,QAAS,KAAK,QAAQ,QAAQ,CAAC,KAAK,UAAU,IAAI;AACnD,mBAAO;AACX;AAAA,QACJ;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AACA,WAAOA,OAAM,MAAM,SAAS,GAAG,KAAK,IAAI;AAAA,EAC5C;AAAA,EACA,uBAAuB;AACnB,QAAI,WAAW,KAAK,QAAQ;AAC5B,QAAI;AACA,eAAS,IAAI,SAAS,OAAO,KAAK,GAAG,KAAK;AACtC,YAAI,QAAQ,SAAS,KAAK,CAAC,EAAE,eAAe,SAAS,WAAW,CAAC,CAAC,EAAE;AACpE,YAAI,SAAS,MAAM,eAAe,MAAM;AACpC,iBAAO;AAAA,MACf;AACJ,aAAS,QAAQ,KAAK,OAAO,OAAO,OAAO;AACvC,UAAI,OAAO,KAAK,OAAO,OAAO,MAAM,IAAI;AACxC,UAAI,KAAK,eAAe,KAAK;AACzB,eAAO;AAAA,IACf;AAAA,EACJ;AACJ;AAIA,SAAS,cAAc,KAAK;AACxB,WAAS,QAAQ,IAAI,YAAY,WAAW,MAAM,OAAO,QAAQ,MAAM,aAAa;AAChF,QAAI,OAAO,MAAM,YAAY,IAAI,MAAM,SAAS,YAAY,IAAI;AAChE,QAAI,QAAQ,SAAS,eAAe,IAAI,KAAK,UAAU;AACnD,eAAS,YAAY,KAAK;AAC1B,cAAQ;AAAA,IACZ,WACS,QAAQ,MAAM;AACnB,iBAAW;AAAA,IACf,WACS,MAAM;AACX,iBAAW;AAAA,IACf;AAAA,EACJ;AACJ;AAEA,SAAS,QAAQ,KAAK,UAAU;AAC5B,UAAQ,IAAI,WAAW,IAAI,qBAAqB,IAAI,yBAAyB,IAAI,oBAAoB,KAAK,KAAK,QAAQ;AAC3H;AACA,SAAS,KAAK,KAAK;AACf,MAAIN,QAAO,CAAC;AACZ,WAASiB,SAAQ;AACb,IAAAjB,MAAKiB,KAAI,IAAI,IAAIA,KAAI;AACzB,SAAOjB;AACX;AAIA,SAAS,aAAa,UAAU,UAAU;AACtC,MAAI,QAAQ,SAAS,OAAO;AAC5B,WAAS,QAAQ,OAAO;AACpB,QAAI,SAAS,MAAM,IAAI;AACvB,QAAI,CAAC,OAAO,eAAe,QAAQ;AAC/B;AACJ,QAAI,OAAO,CAAC,GAAG,OAAO,CAACM,WAAU;AAC7B,WAAK,KAAKA,MAAK;AACf,eAAS,IAAI,GAAG,IAAIA,OAAM,WAAW,KAAK;AACtC,YAAI,EAAE,MAAM,KAAK,IAAIA,OAAM,KAAK,CAAC;AACjC,YAAI,QAAQ;AACR,iBAAO;AACX,YAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,KAAK,IAAI;AACnC,iBAAO;AAAA,MACf;AAAA,IACJ;AACA,QAAI,KAAK,OAAO,YAAY;AACxB,aAAO;AAAA,EACf;AACJ;AAMA,IAAM,gBAAN,MAAM,eAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUhB,YAIA,OAIA,OAAO;AACH,SAAK,QAAQ;AACb,SAAK,QAAQ;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,kBAAkB,UAAU,UAAU,CAAC,GAAG,QAAQ;AAC9C,QAAI,CAAC;AACD,eAAS,IAAI,OAAO,EAAE,uBAAuB;AACjD,QAAI,MAAM,QAAQ,SAAS,CAAC;AAC5B,aAAS,QAAQ,UAAQ;AACrB,UAAI,OAAO,UAAU,KAAK,MAAM,QAAQ;AACpC,YAAI,OAAO,GAAG,WAAW;AACzB,eAAO,OAAO,OAAO,UAAU,WAAW,KAAK,MAAM,QAAQ;AACzD,cAAI,OAAO,KAAK,MAAM,QAAQ;AAC9B,cAAI,CAAC,KAAK,MAAM,KAAK,KAAK,IAAI,GAAG;AAC7B;AACA;AAAA,UACJ;AACA,cAAI,CAAC,KAAK,GAAG,OAAO,IAAI,EAAE,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,aAAa;AACzD;AACJ;AACA;AAAA,QACJ;AACA,eAAO,OAAO,OAAO;AACjB,gBAAM,OAAO,IAAI,EAAE,CAAC;AACxB,eAAO,WAAW,KAAK,MAAM,QAAQ;AACjC,cAAIc,OAAM,KAAK,MAAM,UAAU;AAC/B,cAAI,UAAU,KAAK,cAAcA,MAAK,KAAK,UAAU,OAAO;AAC5D,cAAI,SAAS;AACT,mBAAO,KAAK,CAACA,MAAK,GAAG,CAAC;AACtB,gBAAI,YAAY,QAAQ,GAAG;AAC3B,kBAAM,QAAQ,cAAc,QAAQ;AAAA,UACxC;AAAA,QACJ;AAAA,MACJ;AACA,UAAI,YAAY,KAAK,mBAAmB,MAAM,OAAO,CAAC;AAAA,IAC1D,CAAC;AACD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,mBAAmB,MAAM,SAAS;AAC9B,QAAI,EAAE,KAAK,WAAW,IAAI,WAAW,IAAI,OAAO,GAAG,KAAK,MAAM,KAAK,KAAK,IAAI,EAAE,IAAI,GAAG,MAAM,KAAK,KAAK;AACrG,QAAI,YAAY;AACZ,UAAI,KAAK;AACL,cAAM,IAAI,WAAW,8CAA8C;AACvE,WAAK,kBAAkB,KAAK,SAAS,SAAS,UAAU;AAAA,IAC5D;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAc,MAAM,UAAU,CAAC,GAAG;AAC9B,QAAI,MAAM,KAAK,mBAAmB,MAAM,OAAO;AAC/C,aAAS,IAAI,KAAK,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AAC7C,UAAI,OAAO,KAAK,cAAc,KAAK,MAAM,CAAC,GAAG,KAAK,UAAU,OAAO;AACnE,UAAI,MAAM;AACN,SAAC,KAAK,cAAc,KAAK,KAAK,YAAY,GAAG;AAC7C,cAAM,KAAK;AAAA,MACf;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,cAAc,MAAMC,SAAQ,UAAU,CAAC,GAAG;AACtC,QAAI,QAAQ,KAAK,MAAM,KAAK,KAAK,IAAI;AACrC,WAAO,SAAS,WAAW,IAAI,OAAO,GAAG,MAAM,MAAMA,OAAM,GAAG,MAAM,KAAK,KAAK;AAAA,EAClF;AAAA,EACA,OAAO,WAAWhB,MAAK,WAAW,QAAQ,MAAM,eAAe;AAC3D,WAAO,WAAWA,MAAK,WAAW,OAAO,aAAa;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WAAWH,SAAQ;AACtB,WAAOA,QAAO,OAAO,kBAChBA,QAAO,OAAO,gBAAgB,IAAI,eAAc,KAAK,gBAAgBA,OAAM,GAAG,KAAK,gBAAgBA,OAAM,CAAC;AAAA,EACnH;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,gBAAgBA,SAAQ;AAC3B,QAAI,SAAS,YAAYA,QAAO,KAAK;AACrC,QAAI,CAAC,OAAO;AACR,aAAO,OAAO,UAAQ,KAAK;AAC/B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,gBAAgBA,SAAQ;AAC3B,WAAO,YAAYA,QAAO,KAAK;AAAA,EACnC;AACJ;AACA,SAAS,YAAY,KAAK;AACtB,MAAI,SAAS,CAAC;AACd,WAAS,QAAQ,KAAK;AAClB,QAAI,QAAQ,IAAI,IAAI,EAAE,KAAK;AAC3B,QAAI;AACA,aAAO,IAAI,IAAI;AAAA,EACvB;AACA,SAAO;AACX;AACA,SAAS,IAAI,SAAS;AAClB,SAAO,QAAQ,YAAY,OAAO;AACtC;AACA,IAAM,2BAA2B,oBAAI,QAAQ;AAC7C,SAAS,qBAAqBC,QAAO;AACjC,MAAI,QAAQ,yBAAyB,IAAIA,MAAK;AAC9C,MAAI,UAAU;AACV,6BAAyB,IAAIA,QAAO,QAAQ,0BAA0BA,MAAK,CAAC;AAChF,SAAO;AACX;AACA,SAAS,0BAA0BA,QAAO;AACtC,MAAI,SAAS;AACb,WAAS,KAAK,OAAO;AACjB,QAAI,SAAS,OAAO,SAAS,UAAU;AACnC,UAAI,MAAM,QAAQ,KAAK,GAAG;AACtB,YAAI,OAAO,MAAM,CAAC,KAAK,UAAU;AAC7B,cAAI,CAAC;AACD,qBAAS,CAAC;AACd,iBAAO,KAAK,KAAK;AAAA,QACrB,OACK;AACD,mBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ;AAC9B,iBAAK,MAAM,CAAC,CAAC;AAAA,QACrB;AAAA,MACJ,OACK;AACD,iBAASc,SAAQ;AACb,eAAK,MAAMA,KAAI,CAAC;AAAA,MACxB;AAAA,IACJ;AAAA,EACJ;AACA,OAAKd,MAAK;AACV,SAAO;AACX;AACA,SAAS,WAAWE,MAAK,WAAW,OAAO,eAAe;AACtD,MAAI,OAAO,aAAa;AACpB,WAAO,EAAE,KAAKA,KAAI,eAAe,SAAS,EAAE;AAChD,MAAI,UAAU,YAAY;AACtB,WAAO,EAAE,KAAK,UAAU;AAC5B,MAAI,UAAU,OAAO,UAAU,IAAI,YAAY;AAC3C,WAAO;AACX,MAAI,UAAU,UAAU,CAAC,GAAG;AAC5B,MAAI,OAAO,WAAW;AAClB,UAAM,IAAI,WAAW,oCAAoC;AAC7D,MAAI,kBAAkB,aAAa,qBAAqB,aAAa,MACjE,WAAW,QAAQ,SAAS,IAAI;AAChC,UAAM,IAAI,WAAW,8GAA8G;AACvI,MAAI,QAAQ,QAAQ,QAAQ,GAAG;AAC/B,MAAI,QAAQ,GAAG;AACX,YAAQ,QAAQ,MAAM,GAAG,KAAK;AAC9B,cAAU,QAAQ,MAAM,QAAQ,CAAC;AAAA,EACrC;AACA,MAAI;AACJ,MAAI,MAAO,QAAQA,KAAI,gBAAgB,OAAO,OAAO,IAAIA,KAAI,cAAc,OAAO;AAClF,MAAIF,SAAQ,UAAU,CAAC,GAAG,QAAQ;AAClC,MAAIA,UAAS,OAAOA,UAAS,YAAYA,OAAM,YAAY,QAAQ,CAAC,MAAM,QAAQA,MAAK,GAAG;AACtF,YAAQ;AACR,aAAS,QAAQA;AACb,UAAIA,OAAM,IAAI,KAAK,MAAM;AACrB,YAAImB,SAAQ,KAAK,QAAQ,GAAG;AAC5B,YAAIA,SAAQ;AACR,cAAI,eAAe,KAAK,MAAM,GAAGA,MAAK,GAAG,KAAK,MAAMA,SAAQ,CAAC,GAAGnB,OAAM,IAAI,CAAC;AAAA,iBACtE,QAAQ,WAAW,IAAI;AAC5B,cAAI,MAAM,UAAUA,OAAM,IAAI;AAAA;AAE9B,cAAI,aAAa,MAAMA,OAAM,IAAI,CAAC;AAAA,MAC1C;AAAA,EACR;AACA,WAAS,IAAI,OAAO,IAAI,UAAU,QAAQ,KAAK;AAC3C,QAAI,QAAQ,UAAU,CAAC;AACvB,QAAI,UAAU,GAAG;AACb,UAAI,IAAI,UAAU,SAAS,KAAK,IAAI;AAChC,cAAM,IAAI,WAAW,wDAAwD;AACjF,aAAO,EAAE,KAAK,YAAY,IAAI;AAAA,IAClC,OACK;AACD,UAAI,EAAE,KAAK,OAAO,YAAY,aAAa,IAAI,WAAWE,MAAK,OAAO,OAAO,aAAa;AAC1F,UAAI,YAAY,KAAK;AACrB,UAAI,cAAc;AACd,YAAI;AACA,gBAAM,IAAI,WAAW,wBAAwB;AACjD,qBAAa;AAAA,MACjB;AAAA,IACJ;AAAA,EACJ;AACA,SAAO,EAAE,KAAK,WAAW;AAC7B;;;ACr4GA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAAkB;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEA,IAAM,cAAc,CAAC;AAErB,SAAS,eAAgB,SAAS;AAChC,MAAI,QAAQ,YAAY,OAAO;AAC/B,MAAI,OAAO;AAAE,WAAO;AAAA,EAAM;AAE1B,UAAQ,YAAY,OAAO,IAAI,CAAC;AAEhC,WAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,UAAM,KAAK,OAAO,aAAa,CAAC;AAChC,UAAM,KAAK,EAAE;AAAA,EACf;AAEA,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAM,KAAK,QAAQ,WAAW,CAAC;AAC/B,UAAM,EAAE,IAAI,OAAO,MAAM,GAAG,SAAS,EAAE,EAAE,YAAY,GAAG,MAAM,EAAE;AAAA,EAClE;AAEA,SAAO;AACT;AAIA,SAAS,OAAQ,QAAQ,SAAS;AAChC,MAAI,OAAO,YAAY,UAAU;AAC/B,cAAU,OAAO;AAAA,EACnB;AAEA,QAAM,QAAQ,eAAe,OAAO;AAEpC,SAAO,OAAO,QAAQ,qBAAqB,SAAU,KAAK;AACxD,QAAI,SAAS;AAEb,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,IAAI,GAAG,KAAK,GAAG;AAC7C,YAAM,KAAK,SAAS,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE;AAE/C,UAAI,KAAK,KAAM;AACb,kBAAU,MAAM,EAAE;AAClB;AAAA,MACF;AAEA,WAAK,KAAK,SAAU,OAAS,IAAI,IAAI,GAAI;AAEvC,cAAM,KAAK,SAAS,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE;AAE/C,aAAK,KAAK,SAAU,KAAM;AACxB,gBAAM,MAAQ,MAAM,IAAK,OAAU,KAAK;AAExC,cAAI,MAAM,KAAM;AACd,sBAAU;AAAA,UACZ,OAAO;AACL,sBAAU,OAAO,aAAa,GAAG;AAAA,UACnC;AAEA,eAAK;AACL;AAAA,QACF;AAAA,MACF;AAEA,WAAK,KAAK,SAAU,OAAS,IAAI,IAAI,GAAI;AAEvC,cAAM,KAAK,SAAS,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE;AAC/C,cAAM,KAAK,SAAS,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE;AAE/C,aAAK,KAAK,SAAU,QAAS,KAAK,SAAU,KAAM;AAChD,gBAAM,MAAQ,MAAM,KAAM,QAAY,MAAM,IAAK,OAAU,KAAK;AAEhE,cAAI,MAAM,QAAU,OAAO,SAAU,OAAO,OAAS;AACnD,sBAAU;AAAA,UACZ,OAAO;AACL,sBAAU,OAAO,aAAa,GAAG;AAAA,UACnC;AAEA,eAAK;AACL;AAAA,QACF;AAAA,MACF;AAEA,WAAK,KAAK,SAAU,OAAS,IAAI,IAAI,GAAI;AAEvC,cAAM,KAAK,SAAS,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE;AAC/C,cAAM,KAAK,SAAS,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE;AAC/C,cAAM,KAAK,SAAS,IAAI,MAAM,IAAI,IAAI,IAAI,EAAE,GAAG,EAAE;AAEjD,aAAK,KAAK,SAAU,QAAS,KAAK,SAAU,QAAS,KAAK,SAAU,KAAM;AACxE,cAAI,MAAQ,MAAM,KAAM,UAAc,MAAM,KAAM,SAAa,MAAM,IAAK,OAAU,KAAK;AAEzF,cAAI,MAAM,SAAW,MAAM,SAAU;AACnC,sBAAU;AAAA,UACZ,OAAO;AACL,mBAAO;AACP,sBAAU,OAAO,aAAa,SAAU,OAAO,KAAK,SAAU,MAAM,KAAM;AAAA,UAC5E;AAEA,eAAK;AACL;AAAA,QACF;AAAA,MACF;AAEA,gBAAU;AAAA,IACZ;AAEA,WAAO;AAAA,EACT,CAAC;AACH;AAEA,OAAO,eAAe;AACtB,OAAO,iBAAiB;AAExB,IAAO,iBAAQ;;;AC/Gf,IAAM,cAAc,CAAC;AAKrB,SAAS,eAAgB,SAAS;AAChC,MAAI,QAAQ,YAAY,OAAO;AAC/B,MAAI,OAAO;AAAE,WAAO;AAAA,EAAM;AAE1B,UAAQ,YAAY,OAAO,IAAI,CAAC;AAEhC,WAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,UAAM,KAAK,OAAO,aAAa,CAAC;AAEhC,QAAI,cAAc,KAAK,EAAE,GAAG;AAE1B,YAAM,KAAK,EAAE;AAAA,IACf,OAAO;AACL,YAAM,KAAK,OAAO,MAAM,EAAE,SAAS,EAAE,EAAE,YAAY,GAAG,MAAM,EAAE,CAAC;AAAA,IACjE;AAAA,EACF;AAEA,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAM,QAAQ,WAAW,CAAC,CAAC,IAAI,QAAQ,CAAC;AAAA,EAC1C;AAEA,SAAO;AACT;AASA,SAAS,OAAQ,QAAQ,SAAS,aAAa;AAC7C,MAAI,OAAO,YAAY,UAAU;AAE/B,kBAAc;AACd,cAAU,OAAO;AAAA,EACnB;AAEA,MAAI,OAAO,gBAAgB,aAAa;AACtC,kBAAc;AAAA,EAChB;AAEA,QAAM,QAAQ,eAAe,OAAO;AACpC,MAAI,SAAS;AAEb,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,IAAI,GAAG,KAAK;AAC7C,UAAMC,QAAO,OAAO,WAAW,CAAC;AAEhC,QAAI,eAAeA,UAAS,MAAgB,IAAI,IAAI,GAAG;AACrD,UAAI,iBAAiB,KAAK,OAAO,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG;AACrD,kBAAU,OAAO,MAAM,GAAG,IAAI,CAAC;AAC/B,aAAK;AACL;AAAA,MACF;AAAA,IACF;AAEA,QAAIA,QAAO,KAAK;AACd,gBAAU,MAAMA,KAAI;AACpB;AAAA,IACF;AAEA,QAAIA,SAAQ,SAAUA,SAAQ,OAAQ;AACpC,UAAIA,SAAQ,SAAUA,SAAQ,SAAU,IAAI,IAAI,GAAG;AACjD,cAAM,WAAW,OAAO,WAAW,IAAI,CAAC;AACxC,YAAI,YAAY,SAAU,YAAY,OAAQ;AAC5C,oBAAU,mBAAmB,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC;AACtD;AACA;AAAA,QACF;AAAA,MACF;AACA,gBAAU;AACV;AAAA,IACF;AAEA,cAAU,mBAAmB,OAAO,CAAC,CAAC;AAAA,EACxC;AAEA,SAAO;AACT;AAEA,OAAO,eAAe;AACtB,OAAO,iBAAiB;AAExB,IAAO,iBAAQ;;;ACxFA,SAAR,OAAyB,KAAK;AACnC,MAAI,SAAS;AAEb,YAAU,IAAI,YAAY;AAC1B,YAAU,IAAI,UAAU,OAAO;AAC/B,YAAU,IAAI,OAAO,IAAI,OAAO,MAAM;AAEtC,MAAI,IAAI,YAAY,IAAI,SAAS,QAAQ,GAAG,MAAM,IAAI;AAEpD,cAAU,MAAM,IAAI,WAAW;AAAA,EACjC,OAAO;AACL,cAAU,IAAI,YAAY;AAAA,EAC5B;AAEA,YAAU,IAAI,OAAO,MAAM,IAAI,OAAO;AACtC,YAAU,IAAI,YAAY;AAC1B,YAAU,IAAI,UAAU;AACxB,YAAU,IAAI,QAAQ;AAEtB,SAAO;AACT;;;ACsBA,SAAS,MAAO;AACd,OAAK,WAAW;AAChB,OAAK,UAAU;AACf,OAAK,OAAO;AACZ,OAAK,OAAO;AACZ,OAAK,WAAW;AAChB,OAAK,OAAO;AACZ,OAAK,SAAS;AACd,OAAK,WAAW;AAClB;AAMA,IAAM,kBAAkB;AACxB,IAAM,cAAc;AAIpB,IAAM,oBAAoB;AAI1B,IAAM,SAAS,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,GAAI;AAGzD,IAAM,SAAS,CAAC,KAAK,KAAK,KAAK,MAAM,KAAK,GAAG,EAAE,OAAO,MAAM;AAG5D,IAAM,aAAa,CAAC,GAAI,EAAE,OAAO,MAAM;AAKvC,IAAM,eAAe,CAAC,KAAK,KAAK,KAAK,KAAK,GAAG,EAAE,OAAO,UAAU;AAChE,IAAM,kBAAkB,CAAC,KAAK,KAAK,GAAG;AACtC,IAAM,iBAAiB;AACvB,IAAM,sBAAsB;AAC5B,IAAM,oBAAoB;AAG1B,IAAM,mBAAmB;AAAA,EACvB,YAAY;AAAA,EACZ,eAAe;AACjB;AAEA,IAAM,kBAAkB;AAAA,EACtB,MAAM;AAAA,EACN,OAAO;AAAA,EACP,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,SAAS;AAAA,EACT,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,SAAS;AACX;AAEA,SAAS,SAAU,KAAK,mBAAmB;AACzC,MAAI,OAAO,eAAe,IAAK,QAAO;AAEtC,QAAM,IAAI,IAAI,IAAI;AAClB,IAAE,MAAM,KAAK,iBAAiB;AAC9B,SAAO;AACT;AAEA,IAAI,UAAU,QAAQ,SAAU,KAAK,mBAAmB;AACtD,MAAI,YAAY,KAAK;AACrB,MAAI,OAAO;AAIX,SAAO,KAAK,KAAK;AAEjB,MAAI,CAAC,qBAAqB,IAAI,MAAM,GAAG,EAAE,WAAW,GAAG;AAErD,UAAM,aAAa,kBAAkB,KAAK,IAAI;AAC9C,QAAI,YAAY;AACd,WAAK,WAAW,WAAW,CAAC;AAC5B,UAAI,WAAW,CAAC,GAAG;AACjB,aAAK,SAAS,WAAW,CAAC;AAAA,MAC5B;AACA,aAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,QAAQ,gBAAgB,KAAK,IAAI;AACrC,MAAI,OAAO;AACT,YAAQ,MAAM,CAAC;AACf,iBAAa,MAAM,YAAY;AAC/B,SAAK,WAAW;AAChB,WAAO,KAAK,OAAO,MAAM,MAAM;AAAA,EACjC;AAOA,MAAI,qBAAqB,SAAS,KAAK,MAAM,sBAAsB,GAAG;AACpE,cAAU,KAAK,OAAO,GAAG,CAAC,MAAM;AAChC,QAAI,WAAW,EAAE,SAAS,iBAAiB,KAAK,IAAI;AAClD,aAAO,KAAK,OAAO,CAAC;AACpB,WAAK,UAAU;AAAA,IACjB;AAAA,EACF;AAEA,MAAI,CAAC,iBAAiB,KAAK,MACtB,WAAY,SAAS,CAAC,gBAAgB,KAAK,IAAK;AAiBnD,QAAI,UAAU;AACd,aAAS,IAAI,GAAG,IAAI,gBAAgB,QAAQ,KAAK;AAC/C,YAAM,KAAK,QAAQ,gBAAgB,CAAC,CAAC;AACrC,UAAI,QAAQ,OAAO,YAAY,MAAM,MAAM,UAAU;AACnD,kBAAU;AAAA,MACZ;AAAA,IACF;AAIA,QAAI,MAAM;AACV,QAAI,YAAY,IAAI;AAElB,eAAS,KAAK,YAAY,GAAG;AAAA,IAC/B,OAAO;AAGL,eAAS,KAAK,YAAY,KAAK,OAAO;AAAA,IACxC;AAIA,QAAI,WAAW,IAAI;AACjB,aAAO,KAAK,MAAM,GAAG,MAAM;AAC3B,aAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,WAAK,OAAO;AAAA,IACd;AAGA,cAAU;AACV,aAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,YAAM,KAAK,QAAQ,aAAa,CAAC,CAAC;AAClC,UAAI,QAAQ,OAAO,YAAY,MAAM,MAAM,UAAU;AACnD,kBAAU;AAAA,MACZ;AAAA,IACF;AAEA,QAAI,YAAY,IAAI;AAClB,gBAAU,KAAK;AAAA,IACjB;AAEA,QAAI,KAAK,UAAU,CAAC,MAAM,KAAK;AAAE;AAAA,IAAU;AAC3C,UAAM,OAAO,KAAK,MAAM,GAAG,OAAO;AAClC,WAAO,KAAK,MAAM,OAAO;AAGzB,SAAK,UAAU,IAAI;AAInB,SAAK,WAAW,KAAK,YAAY;AAIjC,UAAM,eAAe,KAAK,SAAS,CAAC,MAAM,OACtC,KAAK,SAAS,KAAK,SAAS,SAAS,CAAC,MAAM;AAGhD,QAAI,CAAC,cAAc;AACjB,YAAM,YAAY,KAAK,SAAS,MAAM,IAAI;AAC1C,eAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,IAAI,GAAG,KAAK;AAChD,cAAM,OAAO,UAAU,CAAC;AACxB,YAAI,CAAC,MAAM;AAAE;AAAA,QAAS;AACtB,YAAI,CAAC,KAAK,MAAM,mBAAmB,GAAG;AACpC,cAAI,UAAU;AACd,mBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,IAAI,GAAG,KAAK;AAC3C,gBAAI,KAAK,WAAW,CAAC,IAAI,KAAK;AAI5B,yBAAW;AAAA,YACb,OAAO;AACL,yBAAW,KAAK,CAAC;AAAA,YACnB;AAAA,UACF;AAEA,cAAI,CAAC,QAAQ,MAAM,mBAAmB,GAAG;AACvC,kBAAM,aAAa,UAAU,MAAM,GAAG,CAAC;AACvC,kBAAM,UAAU,UAAU,MAAM,IAAI,CAAC;AACrC,kBAAM,MAAM,KAAK,MAAM,iBAAiB;AACxC,gBAAI,KAAK;AACP,yBAAW,KAAK,IAAI,CAAC,CAAC;AACtB,sBAAQ,QAAQ,IAAI,CAAC,CAAC;AAAA,YACxB;AACA,gBAAI,QAAQ,QAAQ;AAClB,qBAAO,QAAQ,KAAK,GAAG,IAAI;AAAA,YAC7B;AACA,iBAAK,WAAW,WAAW,KAAK,GAAG;AACnC;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,KAAK,SAAS,SAAS,gBAAgB;AACzC,WAAK,WAAW;AAAA,IAClB;AAIA,QAAI,cAAc;AAChB,WAAK,WAAW,KAAK,SAAS,OAAO,GAAG,KAAK,SAAS,SAAS,CAAC;AAAA,IAClE;AAAA,EACF;AAGA,QAAM,OAAO,KAAK,QAAQ,GAAG;AAC7B,MAAI,SAAS,IAAI;AAEf,SAAK,OAAO,KAAK,OAAO,IAAI;AAC5B,WAAO,KAAK,MAAM,GAAG,IAAI;AAAA,EAC3B;AACA,QAAM,KAAK,KAAK,QAAQ,GAAG;AAC3B,MAAI,OAAO,IAAI;AACb,SAAK,SAAS,KAAK,OAAO,EAAE;AAC5B,WAAO,KAAK,MAAM,GAAG,EAAE;AAAA,EACzB;AACA,MAAI,MAAM;AAAE,SAAK,WAAW;AAAA,EAAK;AACjC,MAAI,gBAAgB,UAAU,KAC1B,KAAK,YAAY,CAAC,KAAK,UAAU;AACnC,SAAK,WAAW;AAAA,EAClB;AAEA,SAAO;AACT;AAEA,IAAI,UAAU,YAAY,SAAU,MAAM;AACxC,MAAI,OAAO,YAAY,KAAK,IAAI;AAChC,MAAI,MAAM;AACR,WAAO,KAAK,CAAC;AACb,QAAI,SAAS,KAAK;AAChB,WAAK,OAAO,KAAK,OAAO,CAAC;AAAA,IAC3B;AACA,WAAO,KAAK,OAAO,GAAG,KAAK,SAAS,KAAK,MAAM;AAAA,EACjD;AACA,MAAI,MAAM;AAAE,SAAK,WAAW;AAAA,EAAK;AACnC;AAEA,IAAO,gBAAQ;;;ACnTf;AAAA;AAAA;AAAA,YAAAC;AAAA,EAAA,UAAAA;AAAA,EAAA,SAAAA;AAAA,EAAA,SAAAA;AAAA,EAAA,SAAAA;AAAA;;;ACAA,IAAO,gBAAQ;;;ACAf,IAAOC,iBAAQ;;;ACAf,IAAOC,iBAAQ;;;ACAf,IAAOC,iBAAQ;;;ACAf,IAAOC,iBAAQ;;;ACAf,IAAOC,iBAAQ;;;ACEf,IAAA,2BAAe,IAAI;;EAEf,4h8CACK,MAAM,EAAE,EACR,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAAC;;;ACJpC,IAAA,0BAAe,IAAI;;EAEf,2EACK,MAAM,EAAE,EACR,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAAC;;;;ACJpC,IAAM,YAAY,oBAAI,IAAI;EACtB,CAAC,GAAG,KAAK;;EAET,CAAC,KAAK,IAAI;EACV,CAAC,KAAK,IAAI;EACV,CAAC,KAAK,GAAG;EACT,CAAC,KAAK,IAAI;EACV,CAAC,KAAK,IAAI;EACV,CAAC,KAAK,IAAI;EACV,CAAC,KAAK,IAAI;EACV,CAAC,KAAK,GAAG;EACT,CAAC,KAAK,IAAI;EACV,CAAC,KAAK,GAAG;EACT,CAAC,KAAK,IAAI;EACV,CAAC,KAAK,GAAG;EACT,CAAC,KAAK,GAAG;EACT,CAAC,KAAK,IAAI;EACV,CAAC,KAAK,IAAI;EACV,CAAC,KAAK,IAAI;EACV,CAAC,KAAK,IAAI;EACV,CAAC,KAAK,IAAI;EACV,CAAC,KAAK,IAAI;EACV,CAAC,KAAK,IAAI;EACV,CAAC,KAAK,GAAG;EACT,CAAC,KAAK,IAAI;EACV,CAAC,KAAK,GAAG;EACT,CAAC,KAAK,IAAI;EACV,CAAC,KAAK,GAAG;EACT,CAAC,KAAK,GAAG;EACT,CAAC,KAAK,GAAG;CACZ;AAKM,IAAM;;GAET,KAAA,OAAO,mBAAa,QAAA,OAAA,SAAA,KACpB,SAAU,WAAiB;AACvB,QAAI,SAAS;AAEb,QAAI,YAAY,OAAQ;AACpB,mBAAa;AACb,gBAAU,OAAO,aACX,cAAc,KAAM,OAAS,KAAM;AAEzC,kBAAY,QAAU,YAAY;;AAGtC,cAAU,OAAO,aAAa,SAAS;AACvC,WAAO;EACX;;AAOE,SAAU,iBAAiB,WAAiB;;AAC9C,MAAK,aAAa,SAAU,aAAa,SAAW,YAAY,SAAU;AACtE,WAAO;;AAGX,UAAOC,MAAA,UAAU,IAAI,SAAS,OAAC,QAAAA,QAAA,SAAAA,MAAI;AACvC;;;ACvDA,IAAW;CAAX,SAAWC,YAAS;AAChB,EAAAA,WAAAA,WAAA,KAAA,IAAA,EAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,MAAA,IAAA,EAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,QAAA,IAAA,EAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,MAAA,IAAA,EAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,MAAA,IAAA,EAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,SAAA,IAAA,EAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,SAAA,IAAA,GAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,SAAA,IAAA,GAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,SAAA,IAAA,GAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,SAAA,IAAA,EAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,SAAA,IAAA,EAAA,IAAA;AACA,EAAAA,WAAAA,WAAA,SAAA,IAAA,EAAA,IAAA;AACJ,GAbW,cAAA,YAAS,CAAA,EAAA;AAgBpB,IAAM,eAAe;AAErB,IAAY;CAAZ,SAAYC,eAAY;AACpB,EAAAA,cAAAA,cAAA,cAAA,IAAA,KAAA,IAAA;AACA,EAAAA,cAAAA,cAAA,eAAA,IAAA,KAAA,IAAA;AACA,EAAAA,cAAAA,cAAA,YAAA,IAAA,GAAA,IAAA;AACJ,GAJY,iBAAA,eAAY,CAAA,EAAA;AAMxB,SAAS,SAASC,OAAY;AAC1B,SAAOA,SAAQ,UAAU,QAAQA,SAAQ,UAAU;AACvD;AAEA,SAAS,uBAAuBA,OAAY;AACxC,SACKA,SAAQ,UAAU,WAAWA,SAAQ,UAAU,WAC/CA,SAAQ,UAAU,WAAWA,SAAQ,UAAU;AAExD;AAEA,SAAS,oBAAoBA,OAAY;AACrC,SACKA,SAAQ,UAAU,WAAWA,SAAQ,UAAU,WAC/CA,SAAQ,UAAU,WAAWA,SAAQ,UAAU,WAChD,SAASA,KAAI;AAErB;AAQA,SAAS,8BAA8BA,OAAY;AAC/C,SAAOA,UAAS,UAAU,UAAU,oBAAoBA,KAAI;AAChE;AAEA,IAAW;CAAX,SAAWC,qBAAkB;AACzB,EAAAA,oBAAAA,oBAAA,aAAA,IAAA,CAAA,IAAA;AACA,EAAAA,oBAAAA,oBAAA,cAAA,IAAA,CAAA,IAAA;AACA,EAAAA,oBAAAA,oBAAA,gBAAA,IAAA,CAAA,IAAA;AACA,EAAAA,oBAAAA,oBAAA,YAAA,IAAA,CAAA,IAAA;AACA,EAAAA,oBAAAA,oBAAA,aAAA,IAAA,CAAA,IAAA;AACJ,GANW,uBAAA,qBAAkB,CAAA,EAAA;AAQ7B,IAAY;CAAZ,SAAYC,eAAY;AAEpB,EAAAA,cAAAA,cAAA,QAAA,IAAA,CAAA,IAAA;AAEA,EAAAA,cAAAA,cAAA,QAAA,IAAA,CAAA,IAAA;AAEA,EAAAA,cAAAA,cAAA,WAAA,IAAA,CAAA,IAAA;AACJ,GAPY,iBAAA,eAAY,CAAA,EAAA;AAuBlB,IAAO,gBAAP,MAAoB;EACtB,YAEqB,YAUA,eAEAC,SAA4B;AAZ5B,SAAA,aAAA;AAUA,SAAA,gBAAA;AAEA,SAAA,SAAAA;AAIb,SAAA,QAAQ,mBAAmB;AAE3B,SAAA,WAAW;AAOX,SAAA,SAAS;AAGT,SAAA,YAAY;AAEZ,SAAA,SAAS;AAET,SAAA,aAAa,aAAa;EAnB/B;;EAsBH,YAAY,YAAwB;AAChC,SAAK,aAAa;AAClB,SAAK,QAAQ,mBAAmB;AAChC,SAAK,SAAS;AACd,SAAK,YAAY;AACjB,SAAK,SAAS;AACd,SAAK,WAAW;EACpB;;;;;;;;;;;;EAaA,MAAM,KAAa,QAAc;AAC7B,YAAQ,KAAK,OAAO;MAChB,KAAK,mBAAmB,aAAa;AACjC,YAAI,IAAI,WAAW,MAAM,MAAM,UAAU,KAAK;AAC1C,eAAK,QAAQ,mBAAmB;AAChC,eAAK,YAAY;AACjB,iBAAO,KAAK,kBAAkB,KAAK,SAAS,CAAC;;AAEjD,aAAK,QAAQ,mBAAmB;AAChC,eAAO,KAAK,iBAAiB,KAAK,MAAM;;MAG5C,KAAK,mBAAmB,cAAc;AAClC,eAAO,KAAK,kBAAkB,KAAK,MAAM;;MAG7C,KAAK,mBAAmB,gBAAgB;AACpC,eAAO,KAAK,oBAAoB,KAAK,MAAM;;MAG/C,KAAK,mBAAmB,YAAY;AAChC,eAAO,KAAK,gBAAgB,KAAK,MAAM;;MAG3C,KAAK,mBAAmB,aAAa;AACjC,eAAO,KAAK,iBAAiB,KAAK,MAAM;;;EAGpD;;;;;;;;;;EAWQ,kBAAkB,KAAa,QAAc;AACjD,QAAI,UAAU,IAAI,QAAQ;AACtB,aAAO;;AAGX,SAAK,IAAI,WAAW,MAAM,IAAI,kBAAkB,UAAU,SAAS;AAC/D,WAAK,QAAQ,mBAAmB;AAChC,WAAK,YAAY;AACjB,aAAO,KAAK,gBAAgB,KAAK,SAAS,CAAC;;AAG/C,SAAK,QAAQ,mBAAmB;AAChC,WAAO,KAAK,oBAAoB,KAAK,MAAM;EAC/C;EAEQ,mBACJ,KACA,OACA,KACAC,OAAY;AAEZ,QAAI,UAAU,KAAK;AACf,YAAM,aAAa,MAAM;AACzB,WAAK,SACD,KAAK,SAAS,KAAK,IAAIA,OAAM,UAAU,IACvC,SAAS,IAAI,OAAO,OAAO,UAAU,GAAGA,KAAI;AAChD,WAAK,YAAY;;EAEzB;;;;;;;;;;EAWQ,gBAAgB,KAAa,QAAc;AAC/C,UAAM,WAAW;AAEjB,WAAO,SAAS,IAAI,QAAQ;AACxB,YAAM,OAAO,IAAI,WAAW,MAAM;AAClC,UAAI,SAAS,IAAI,KAAK,uBAAuB,IAAI,GAAG;AAChD,kBAAU;aACP;AACH,aAAK,mBAAmB,KAAK,UAAU,QAAQ,EAAE;AACjD,eAAO,KAAK,kBAAkB,MAAM,CAAC;;;AAI7C,SAAK,mBAAmB,KAAK,UAAU,QAAQ,EAAE;AAEjD,WAAO;EACX;;;;;;;;;;EAWQ,oBAAoB,KAAa,QAAc;AACnD,UAAM,WAAW;AAEjB,WAAO,SAAS,IAAI,QAAQ;AACxB,YAAM,OAAO,IAAI,WAAW,MAAM;AAClC,UAAI,SAAS,IAAI,GAAG;AAChB,kBAAU;aACP;AACH,aAAK,mBAAmB,KAAK,UAAU,QAAQ,EAAE;AACjD,eAAO,KAAK,kBAAkB,MAAM,CAAC;;;AAI7C,SAAK,mBAAmB,KAAK,UAAU,QAAQ,EAAE;AAEjD,WAAO;EACX;;;;;;;;;;;;;;EAeQ,kBAAkB,QAAgB,gBAAsB;;AAE5D,QAAI,KAAK,YAAY,gBAAgB;AACjC,OAAAC,MAAA,KAAK,YAAM,QAAAA,QAAA,SAAA,SAAAA,IAAE,2CACT,KAAK,QAAQ;AAEjB,aAAO;;AAIX,QAAI,WAAW,UAAU,MAAM;AAC3B,WAAK,YAAY;eACV,KAAK,eAAe,aAAa,QAAQ;AAChD,aAAO;;AAGX,SAAK,cAAc,iBAAiB,KAAK,MAAM,GAAG,KAAK,QAAQ;AAE/D,QAAI,KAAK,QAAQ;AACb,UAAI,WAAW,UAAU,MAAM;AAC3B,aAAK,OAAO,wCAAuC;;AAGvD,WAAK,OAAO,kCAAkC,KAAK,MAAM;;AAG7D,WAAO,KAAK;EAChB;;;;;;;;;;EAWQ,iBAAiB,KAAa,QAAc;AAChD,UAAM,EAAE,WAAU,IAAK;AACvB,QAAI,UAAU,WAAW,KAAK,SAAS;AAEvC,QAAI,eAAe,UAAU,aAAa,iBAAiB;AAE3D,WAAO,SAAS,IAAI,QAAQ,UAAU,KAAK,UAAU;AACjD,YAAM,OAAO,IAAI,WAAW,MAAM;AAElC,WAAK,YAAY,gBACb,YACA,SACA,KAAK,YAAY,KAAK,IAAI,GAAG,WAAW,GACxC,IAAI;AAGR,UAAI,KAAK,YAAY,GAAG;AACpB,eAAO,KAAK,WAAW;QAElB,KAAK,eAAe,aAAa;SAE7B,gBAAgB;QAEb,8BAA8B,IAAI,KACxC,IACA,KAAK,6BAA4B;;AAG3C,gBAAU,WAAW,KAAK,SAAS;AACnC,qBAAe,UAAU,aAAa,iBAAiB;AAGvD,UAAI,gBAAgB,GAAG;AAEnB,YAAI,SAAS,UAAU,MAAM;AACzB,iBAAO,KAAK,oBACR,KAAK,WACL,aACA,KAAK,WAAW,KAAK,MAAM;;AAKnC,YAAI,KAAK,eAAe,aAAa,QAAQ;AACzC,eAAK,SAAS,KAAK;AACnB,eAAK,YAAY,KAAK;AACtB,eAAK,SAAS;;;;AAK1B,WAAO;EACX;;;;;;EAOQ,+BAA4B;;AAChC,UAAM,EAAE,QAAQ,WAAU,IAAK;AAE/B,UAAM,eACD,WAAW,MAAM,IAAI,aAAa,iBAAiB;AAExD,SAAK,oBAAoB,QAAQ,aAAa,KAAK,QAAQ;AAC3D,KAAAA,MAAA,KAAK,YAAM,QAAAA,QAAA,SAAA,SAAAA,IAAE,wCAAuC;AAEpD,WAAO,KAAK;EAChB;;;;;;;;;;EAWQ,oBACJ,QACA,aACA,UAAgB;AAEhB,UAAM,EAAE,WAAU,IAAK;AAEvB,SAAK,cACD,gBAAgB,IACV,WAAW,MAAM,IAAI,CAAC,aAAa,eACnC,WAAW,SAAS,CAAC,GAC3B,QAAQ;AAEZ,QAAI,gBAAgB,GAAG;AAEnB,WAAK,cAAc,WAAW,SAAS,CAAC,GAAG,QAAQ;;AAGvD,WAAO;EACX;;;;;;;;EASA,MAAG;;AACC,YAAQ,KAAK,OAAO;MAChB,KAAK,mBAAmB,aAAa;AAEjC,eAAO,KAAK,WAAW,MAClB,KAAK,eAAe,aAAa,aAC9B,KAAK,WAAW,KAAK,aACvB,KAAK,6BAA4B,IACjC;;;MAGV,KAAK,mBAAmB,gBAAgB;AACpC,eAAO,KAAK,kBAAkB,GAAG,CAAC;;MAEtC,KAAK,mBAAmB,YAAY;AAChC,eAAO,KAAK,kBAAkB,GAAG,CAAC;;MAEtC,KAAK,mBAAmB,cAAc;AAClC,SAAAA,MAAA,KAAK,YAAM,QAAAA,QAAA,SAAA,SAAAA,IAAE,2CACT,KAAK,QAAQ;AAEjB,eAAO;;MAEX,KAAK,mBAAmB,aAAa;AAEjC,eAAO;;;EAGnB;;AASJ,SAAS,WAAW,YAAuB;AACvC,MAAI,MAAM;AACV,QAAM,UAAU,IAAI,cAChB,YACA,CAAC,QAAS,OAAO,cAAc,GAAG,CAAE;AAGxC,SAAO,SAAS,eACZ,KACA,YAAwB;AAExB,QAAI,YAAY;AAChB,QAAI,SAAS;AAEb,YAAQ,SAAS,IAAI,QAAQ,KAAK,MAAM,MAAM,GAAG;AAC7C,aAAO,IAAI,MAAM,WAAW,MAAM;AAElC,cAAQ,YAAY,UAAU;AAE9B,YAAM,MAAM,QAAQ;QAChB;;QAEA,SAAS;MAAC;AAGd,UAAI,MAAM,GAAG;AACT,oBAAY,SAAS,QAAQ,IAAG;AAChC;;AAGJ,kBAAY,SAAS;AAErB,eAAS,QAAQ,IAAI,YAAY,IAAI;;AAGzC,UAAM,SAAS,MAAM,IAAI,MAAM,SAAS;AAGxC,UAAM;AAEN,WAAO;EACX;AACJ;AAYM,SAAU,gBACZ,YACA,SACA,SACA,MAAY;AAEZ,QAAM,eAAe,UAAU,aAAa,kBAAkB;AAC9D,QAAM,aAAa,UAAU,aAAa;AAG1C,MAAI,gBAAgB,GAAG;AACnB,WAAO,eAAe,KAAK,SAAS,aAAa,UAAU;;AAI/D,MAAI,YAAY;AACZ,UAAM,QAAQ,OAAO;AAErB,WAAO,QAAQ,KAAK,SAAS,cACvB,KACA,WAAW,UAAU,KAAK,IAAI;;AAMxC,MAAI,KAAK;AACT,MAAI,KAAK,KAAK,cAAc;AAE5B,SAAO,MAAM,IAAI;AACb,UAAM,MAAO,KAAK,OAAQ;AAC1B,UAAM,SAAS,WAAW,GAAG;AAE7B,QAAI,SAAS,MAAM;AACf,WAAK,MAAM;eACJ,SAAS,MAAM;AACtB,WAAK,MAAM;WACR;AACH,aAAO,WAAW,MAAM,WAAW;;;AAI3C,SAAO;AACX;AAEA,IAAM,cAAc,WAAW,wBAAc;AAC7C,IAAM,aAAa,WAAW,uBAAa;AASrC,SAAU,WAAW,KAAa,OAAO,aAAa,QAAM;AAC9D,SAAO,YAAY,KAAK,IAAI;AAChC;;;ACjkBA,SAAS,YACL,KAAM;AAEN,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACjC,QAAI,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI;;AAEjC,SAAO;AACX;AAGA,IAAA,sBAAe,IAAI,IAA0C,4BAAY,CAAC,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,WAAW,GAAE,CAAC,IAAG,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,IAAG,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,EAAC,GAAE,QAAO,GAAE,MAAK,GAAE,SAAQ,CAAC,GAAE,CAAC,GAAE,EAAC,GAAE,YAAW,GAAE,MAAK,GAAE,QAAO,CAAC,GAAE,CAAC,GAAE,EAAC,GAAE,QAAO,GAAE,MAAK,GAAE,SAAQ,CAAC,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,IAAG,UAAU,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,oBAAoB,GAAE,CAAC,GAAE,EAAC,GAAE,KAAI,GAAE,UAAS,CAAC,GAAE,CAAC,IAAG,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,IAAG,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,YAAY,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,aAAa,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,aAAa,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,IAAG,QAAQ,GAAE,CAAC,IAAG,SAAS,GAAE,CAAC,IAAG,UAAU,GAAE,CAAC,IAAG,SAAS,GAAE,CAAC,KAAI,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,IAAG,SAAS,GAAE,CAAC,GAAE,kBAAkB,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,oBAAoB,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,IAAG,aAAa,GAAE,CAAC,KAAI,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,WAAW,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,MAAM,GAAE,CAAC,GAAE,MAAM,GAAE,CAAC,GAAE,MAAM,GAAE,CAAC,GAAE,WAAW,GAAE,CAAC,GAAE,MAAM,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,WAAW,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,MAAM,GAAE,CAAC,GAAE,MAAM,GAAE,CAAC,GAAE,MAAM,GAAE,CAAC,GAAE,WAAW,GAAE,CAAC,GAAE,MAAM,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,YAAY,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,WAAW,GAAE,CAAC,IAAG,UAAU,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,eAAe,GAAE,CAAC,IAAG,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAA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AC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,IAAG,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,OAAO,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,GAAE,CAAC,GAAE,QAAQ,CAAC,CAAC,CAAC,EAAC,CAAC,GAAE,CAAC,MAAK,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,SAAS,GAAE,CAAC,GAAE,UAAU,GAAE,CAAC,GAAE,UAAU,CAAC,CAAC,CAAC;;;ACdl+tB,IAAM,aAAa,oBAAI,IAAI;EACvB,CAAC,IAAI,QAAQ;EACb,CAAC,IAAI,OAAO;EACZ,CAAC,IAAI,QAAQ;EACb,CAAC,IAAI,MAAM;EACX,CAAC,IAAI,MAAM;CACd;AAGM,IAAM;;EAET,OAAO,UAAU,eAAe,OAC1B,CAAC,KAAa,UAA0B,IAAI,YAAY,KAAK;;IAE7D,CAAC,GAAW,WACP,EAAE,WAAW,KAAK,IAAI,WAAY,SAC5B,EAAE,WAAW,KAAK,IAAI,SAAU,OACjC,EAAE,WAAW,QAAQ,CAAC,IACtB,QACA,QACA,EAAE,WAAW,KAAK;;;AA0DtC,SAAS,WACL,OACAC,MAAwB;AAExB,SAAO,SAASC,QAAO,MAAY;AAC/B,QAAIC;AACJ,QAAI,UAAU;AACd,QAAI,SAAS;AAEb,WAAQA,SAAQ,MAAM,KAAK,IAAI,GAAI;AAC/B,UAAI,YAAYA,OAAM,OAAO;AACzB,kBAAU,KAAK,UAAU,SAASA,OAAM,KAAK;;AAIjD,gBAAUF,KAAI,IAAIE,OAAM,CAAC,EAAE,WAAW,CAAC,CAAC;AAGxC,gBAAUA,OAAM,QAAQ;;AAG5B,WAAO,SAAS,KAAK,UAAU,OAAO;EAC1C;AACJ;AASO,IAAM,aAAa,WAAW,YAAY,UAAU;AAQpD,IAAM,kBAAkB,WAC3B,eACA,oBAAI,IAAI;EACJ,CAAC,IAAI,QAAQ;EACb,CAAC,IAAI,OAAO;EACZ,CAAC,KAAK,QAAQ;CACjB,CAAC;AASC,IAAM,aAAa,WACtB,gBACA,oBAAI,IAAI;EACJ,CAAC,IAAI,OAAO;EACZ,CAAC,IAAI,MAAM;EACX,CAAC,IAAI,MAAM;EACX,CAAC,KAAK,QAAQ;CACjB,CAAC;;;ACpIN,IAAY;CAAZ,SAAYC,cAAW;AAEnB,EAAAA,aAAAA,aAAA,KAAA,IAAA,CAAA,IAAA;AAEA,EAAAA,aAAAA,aAAA,MAAA,IAAA,CAAA,IAAA;AACJ,GALY,gBAAA,cAAW,CAAA,EAAA;AAOvB,IAAY;CAAZ,SAAYC,eAAY;AAKpB,EAAAA,cAAAA,cAAA,MAAA,IAAA,CAAA,IAAA;AAMA,EAAAA,cAAAA,cAAA,OAAA,IAAA,CAAA,IAAA;AAKA,EAAAA,cAAAA,cAAA,WAAA,IAAA,CAAA,IAAA;AAKA,EAAAA,cAAAA,cAAA,WAAA,IAAA,CAAA,IAAA;AAKA,EAAAA,cAAAA,cAAA,MAAA,IAAA,CAAA,IAAA;AACJ,GA3BY,iBAAA,eAAY,CAAA,EAAA;;;AnBVxB,SAAS,OAAQ,KAAK;AAAE,SAAO,OAAO,UAAU,SAAS,KAAK,GAAG;AAAE;AAEnE,SAAS,SAAU,KAAK;AAAE,SAAO,OAAO,GAAG,MAAM;AAAkB;AAEnE,IAAM,kBAAkB,OAAO,UAAU;AAEzC,SAAS,IAAK,QAAQ,KAAK;AACzB,SAAO,gBAAgB,KAAK,QAAQ,GAAG;AACzC;AAIA,SAAS,OAAQ,KAAoC;AACnD,QAAM,UAAU,MAAM,UAAU,MAAM,KAAK,WAAW,CAAC;AAEvD,UAAQ,QAAQ,SAAU,QAAQ;AAChC,QAAI,CAAC,QAAQ;AAAE;AAAA,IAAO;AAEtB,QAAI,OAAO,WAAW,UAAU;AAC9B,YAAM,IAAI,UAAU,SAAS,gBAAgB;AAAA,IAC/C;AAEA,WAAO,KAAK,MAAM,EAAE,QAAQ,SAAU,KAAK;AACzC,UAAI,GAAG,IAAI,OAAO,GAAG;AAAA,IACvB,CAAC;AAAA,EACH,CAAC;AAED,SAAO;AACT;AAIA,SAAS,eAAgB,KAAK,KAAK,aAAa;AAC9C,SAAO,CAAC,EAAE,OAAO,IAAI,MAAM,GAAG,GAAG,GAAG,aAAa,IAAI,MAAM,MAAM,CAAC,CAAC;AACrE;AAEA,SAAS,kBAAmB,GAAG;AAG7B,MAAI,KAAK,SAAU,KAAK,OAAQ;AAAE,WAAO;AAAA,EAAM;AAE/C,MAAI,KAAK,SAAU,KAAK,OAAQ;AAAE,WAAO;AAAA,EAAM;AAC/C,OAAK,IAAI,WAAY,UAAW,IAAI,WAAY,OAAQ;AAAE,WAAO;AAAA,EAAM;AAEvE,MAAI,KAAK,KAAQ,KAAK,GAAM;AAAE,WAAO;AAAA,EAAM;AAC3C,MAAI,MAAM,IAAM;AAAE,WAAO;AAAA,EAAM;AAC/B,MAAI,KAAK,MAAQ,KAAK,IAAM;AAAE,WAAO;AAAA,EAAM;AAC3C,MAAI,KAAK,OAAQ,KAAK,KAAM;AAAE,WAAO;AAAA,EAAM;AAE3C,MAAI,IAAI,SAAU;AAAE,WAAO;AAAA,EAAM;AACjC,SAAO;AACT;AAEA,SAASC,eAAe,GAAG;AAEzB,MAAI,IAAI,OAAQ;AACd,SAAK;AACL,UAAM,aAAa,SAAU,KAAK;AAClC,UAAM,aAAa,SAAU,IAAI;AAEjC,WAAO,OAAO,aAAa,YAAY,UAAU;AAAA,EACnD;AACA,SAAO,OAAO,aAAa,CAAC;AAC9B;AAEA,IAAM,iBAAkB;AACxB,IAAM,YAAkB;AACxB,IAAM,kBAAkB,IAAI,OAAO,eAAe,SAAS,MAAM,UAAU,QAAQ,IAAI;AAEvF,IAAM,yBAAyB;AAE/B,SAAS,qBAAsBC,QAAO,MAAM;AAC1C,MAAI,KAAK,WAAW,CAAC,MAAM,MAAe,uBAAuB,KAAK,IAAI,GAAG;AAC3E,UAAMC,QAAO,KAAK,CAAC,EAAE,YAAY,MAAM,MACnC,SAAS,KAAK,MAAM,CAAC,GAAG,EAAE,IAC1B,SAAS,KAAK,MAAM,CAAC,GAAG,EAAE;AAE9B,QAAI,kBAAkBA,KAAI,GAAG;AAC3B,aAAOF,eAAcE,KAAI;AAAA,IAC3B;AAEA,WAAOD;AAAA,EACT;AAEA,QAAM,UAAU,WAAWA,MAAK;AAChC,MAAI,YAAYA,QAAO;AACrB,WAAO;AAAA,EACT;AAEA,SAAOA;AACT;AAQA,SAAS,WAAY,KAAK;AACxB,MAAI,IAAI,QAAQ,IAAI,IAAI,GAAG;AAAE,WAAO;AAAA,EAAI;AACxC,SAAO,IAAI,QAAQ,gBAAgB,IAAI;AACzC;AAEA,SAAS,YAAa,KAAK;AACzB,MAAI,IAAI,QAAQ,IAAI,IAAI,KAAK,IAAI,QAAQ,GAAG,IAAI,GAAG;AAAE,WAAO;AAAA,EAAI;AAEhE,SAAO,IAAI,QAAQ,iBAAiB,SAAUA,QAAO,SAASE,SAAQ;AACpE,QAAI,SAAS;AAAE,aAAO;AAAA,IAAQ;AAC9B,WAAO,qBAAqBF,QAAOE,OAAM;AAAA,EAC3C,CAAC;AACH;AAEA,IAAM,sBAAsB;AAC5B,IAAM,yBAAyB;AAC/B,IAAM,oBAAoB;AAAA,EACxB,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACP;AAEA,SAAS,kBAAmB,IAAI;AAC9B,SAAO,kBAAkB,EAAE;AAC7B;AAEA,SAAS,WAAY,KAAK;AACxB,MAAI,oBAAoB,KAAK,GAAG,GAAG;AACjC,WAAO,IAAI,QAAQ,wBAAwB,iBAAiB;AAAA,EAC9D;AACA,SAAO;AACT;AAEA,IAAM,mBAAmB;AAEzB,SAAS,SAAU,KAAK;AACtB,SAAO,IAAI,QAAQ,kBAAkB,MAAM;AAC7C;AAEA,SAAS,QAASD,OAAM;AACtB,UAAQA,OAAM;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,EACX;AACA,SAAO;AACT;AAGA,SAAS,aAAcA,OAAM;AAC3B,MAAIA,SAAQ,QAAUA,SAAQ,MAAQ;AAAE,WAAO;AAAA,EAAK;AACpD,UAAQA,OAAM;AAAA,IACZ,KAAK;AAAA;AAAA,IACL,KAAK;AAAA;AAAA,IACL,KAAK;AAAA;AAAA,IACL,KAAK;AAAA;AAAA,IACL,KAAK;AAAA;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,EACX;AACA,SAAO;AACT;AAKA,SAAS,YAAa,IAAI;AACxB,SAAeE,eAAE,KAAK,EAAE,KAAaA,eAAE,KAAK,EAAE;AAChD;AASA,SAAS,eAAgB,IAAI;AAC3B,UAAQ,IAAI;AAAA,IACV,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAIA,SAAS,mBAAoB,KAAK;AAGhC,QAAM,IAAI,KAAK,EAAE,QAAQ,QAAQ,GAAG;AAQpC,MAAI,SAAI,YAAY,MAAM,UAAK;AAC7B,UAAM,IAAI,QAAQ,MAAM,MAAG;AAAA,EAC7B;AAkCA,SAAO,IAAI,YAAY,EAAE,YAAY;AACvC;AAMA,IAAM,MAAM,EAAE,sBAAO,oBAAQ;;;AoB5R7B;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACMe,SAAR,eAAiC,OAAO,OAAO,eAAe;AACnE,MAAI,OAAOC,QAAO,QAAQ;AAE1B,QAAM,MAAM,MAAM;AAClB,QAAM,SAAS,MAAM;AAErB,QAAM,MAAM,QAAQ;AACpB,UAAQ;AAER,SAAO,MAAM,MAAM,KAAK;AACtB,aAAS,MAAM,IAAI,WAAW,MAAM,GAAG;AACvC,QAAI,WAAW,IAAc;AAC3B;AACA,UAAI,UAAU,GAAG;AACf,QAAAA,SAAQ;AACR;AAAA,MACF;AAAA,IACF;AAEA,cAAU,MAAM;AAChB,UAAM,GAAG,OAAO,UAAU,KAAK;AAC/B,QAAI,WAAW,IAAc;AAC3B,UAAI,YAAY,MAAM,MAAM,GAAG;AAE7B;AAAA,MACF,WAAW,eAAe;AACxB,cAAM,MAAM;AACZ,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,MAAI,WAAW;AAEf,MAAIA,QAAO;AACT,eAAW,MAAM;AAAA,EACnB;AAGA,QAAM,MAAM;AAEZ,SAAO;AACT;;;AC3Ce,SAAR,qBAAuC,KAAK,OAAO,KAAK;AAC7D,MAAIC;AACJ,MAAI,MAAM;AAEV,QAAM,SAAS;AAAA,IACb,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AAEA,MAAI,IAAI,WAAW,GAAG,MAAM,IAAc;AACxC;AACA,WAAO,MAAM,KAAK;AAChB,MAAAA,QAAO,IAAI,WAAW,GAAG;AACzB,UAAIA,UAAS,IAAe;AAAE,eAAO;AAAA,MAAO;AAC5C,UAAIA,UAAS,IAAc;AAAE,eAAO;AAAA,MAAO;AAC3C,UAAIA,UAAS,IAAc;AACzB,eAAO,MAAM,MAAM;AACnB,eAAO,MAAM,YAAY,IAAI,MAAM,QAAQ,GAAG,GAAG,CAAC;AAClD,eAAO,KAAK;AACZ,eAAO;AAAA,MACT;AACA,UAAIA,UAAS,MAAgB,MAAM,IAAI,KAAK;AAC1C,eAAO;AACP;AAAA,MACF;AAEA;AAAA,IACF;AAGA,WAAO;AAAA,EACT;AAIA,MAAI,QAAQ;AACZ,SAAO,MAAM,KAAK;AAChB,IAAAA,QAAO,IAAI,WAAW,GAAG;AAEzB,QAAIA,UAAS,IAAM;AAAE;AAAA,IAAM;AAG3B,QAAIA,QAAO,MAAQA,UAAS,KAAM;AAAE;AAAA,IAAM;AAE1C,QAAIA,UAAS,MAAgB,MAAM,IAAI,KAAK;AAC1C,UAAI,IAAI,WAAW,MAAM,CAAC,MAAM,IAAM;AAAE;AAAA,MAAM;AAC9C,aAAO;AACP;AAAA,IACF;AAEA,QAAIA,UAAS,IAAc;AACzB;AACA,UAAI,QAAQ,IAAI;AAAE,eAAO;AAAA,MAAO;AAAA,IAClC;AAEA,QAAIA,UAAS,IAAc;AACzB,UAAI,UAAU,GAAG;AAAE;AAAA,MAAM;AACzB;AAAA,IACF;AAEA;AAAA,EACF;AAEA,MAAI,UAAU,KAAK;AAAE,WAAO;AAAA,EAAO;AACnC,MAAI,UAAU,GAAG;AAAE,WAAO;AAAA,EAAO;AAEjC,SAAO,MAAM,YAAY,IAAI,MAAM,OAAO,GAAG,CAAC;AAC9C,SAAO,MAAM;AACb,SAAO,KAAK;AACZ,SAAO;AACT;;;ACpEe,SAAR,eAAiC,KAAK,OAAO,KAAK,YAAY;AACnE,MAAIC;AACJ,MAAI,MAAM;AAEV,QAAM,QAAQ;AAAA;AAAA,IAEZ,IAAI;AAAA;AAAA,IAEJ,cAAc;AAAA;AAAA,IAEd,KAAK;AAAA;AAAA,IAEL,KAAK;AAAA;AAAA,IAEL,QAAQ;AAAA,EACV;AAEA,MAAI,YAAY;AAGd,UAAM,MAAM,WAAW;AACvB,UAAM,SAAS,WAAW;AAAA,EAC5B,OAAO;AACL,QAAI,OAAO,KAAK;AAAE,aAAO;AAAA,IAAM;AAE/B,QAAI,SAAS,IAAI,WAAW,GAAG;AAC/B,QAAI,WAAW,MAAgB,WAAW,MAAgB,WAAW,IAAc;AAAE,aAAO;AAAA,IAAM;AAElG;AACA;AAGA,QAAI,WAAW,IAAM;AAAE,eAAS;AAAA,IAAK;AAErC,UAAM,SAAS;AAAA,EACjB;AAEA,SAAO,MAAM,KAAK;AAChB,IAAAA,QAAO,IAAI,WAAW,GAAG;AACzB,QAAIA,UAAS,MAAM,QAAQ;AACzB,YAAM,MAAM,MAAM;AAClB,YAAM,OAAO,YAAY,IAAI,MAAM,OAAO,GAAG,CAAC;AAC9C,YAAM,KAAK;AACX,aAAO;AAAA,IACT,WAAWA,UAAS,MAAgB,MAAM,WAAW,IAAc;AACjE,aAAO;AAAA,IACT,WAAWA,UAAS,MAAgB,MAAM,IAAI,KAAK;AACjD;AAAA,IACF;AAEA;AAAA,EACF;AAGA,QAAM,eAAe;AACrB,QAAM,OAAO,YAAY,IAAI,MAAM,OAAO,GAAG,CAAC;AAC9C,SAAO;AACT;;;ACvDA,IAAM,gBAAgB,CAAC;AAEvB,cAAc,cAAc,SAAU,QAAQ,KAAK,SAAS,KAAK,KAAK;AACpE,QAAM,QAAQ,OAAO,GAAG;AAExB,SAAQ,UAAU,IAAI,YAAY,KAAK,IAAI,MACnC,WAAW,MAAM,OAAO,IACxB;AACV;AAEA,cAAc,aAAa,SAAU,QAAQ,KAAK,SAAS,KAAK,KAAK;AACnE,QAAM,QAAQ,OAAO,GAAG;AAExB,SAAQ,SAAS,IAAI,YAAY,KAAK,IAAI,YAClC,WAAW,OAAO,GAAG,EAAE,OAAO,IAC9B;AACV;AAEA,cAAc,QAAQ,SAAU,QAAQ,KAAK,SAAS,KAAK,KAAK;AAC9D,QAAM,QAAQ,OAAO,GAAG;AACxB,QAAM,OAAO,MAAM,OAAO,YAAY,MAAM,IAAI,EAAE,KAAK,IAAI;AAC3D,MAAI,WAAW;AACf,MAAI,YAAY;AAEhB,MAAI,MAAM;AACR,UAAM,MAAM,KAAK,MAAM,QAAQ;AAC/B,eAAW,IAAI,CAAC;AAChB,gBAAY,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE;AAAA,EAClC;AAEA,MAAI;AACJ,MAAI,QAAQ,WAAW;AACrB,kBAAc,QAAQ,UAAU,MAAM,SAAS,UAAU,SAAS,KAAK,WAAW,MAAM,OAAO;AAAA,EACjG,OAAO;AACL,kBAAc,WAAW,MAAM,OAAO;AAAA,EACxC;AAEA,MAAI,YAAY,QAAQ,MAAM,MAAM,GAAG;AACrC,WAAO,cAAc;AAAA,EACvB;AAKA,MAAI,MAAM;AACR,UAAM,IAAI,MAAM,UAAU,OAAO;AACjC,UAAM,WAAW,MAAM,QAAQ,MAAM,MAAM,MAAM,IAAI,CAAC;AAEtD,QAAI,IAAI,GAAG;AACT,eAAS,KAAK,CAAC,SAAS,QAAQ,aAAa,QAAQ,CAAC;AAAA,IACxD,OAAO;AACL,eAAS,CAAC,IAAI,SAAS,CAAC,EAAE,MAAM;AAChC,eAAS,CAAC,EAAE,CAAC,KAAK,MAAM,QAAQ,aAAa;AAAA,IAC/C;AAGA,UAAM,WAAW;AAAA,MACf,OAAO;AAAA,IACT;AAEA,WAAO,aAAa,IAAI,YAAY,QAAQ,CAAC,IAAI,WAAW;AAAA;AAAA,EAC9D;AAEA,SAAO,aAAa,IAAI,YAAY,KAAK,CAAC,IAAI,WAAW;AAAA;AAC3D;AAEA,cAAc,QAAQ,SAAU,QAAQ,KAAK,SAAS,KAAK,KAAK;AAC9D,QAAM,QAAQ,OAAO,GAAG;AAOxB,QAAM,MAAM,MAAM,UAAU,KAAK,CAAC,EAAE,CAAC,IACnC,IAAI,mBAAmB,MAAM,UAAU,SAAS,GAAG;AAErD,SAAO,IAAI,YAAY,QAAQ,KAAK,OAAO;AAC7C;AAEA,cAAc,YAAY,SAAU,QAAQ,KAAK,SAAoB;AACnE,SAAO,QAAQ,WAAW,aAAa;AACzC;AACA,cAAc,YAAY,SAAU,QAAQ,KAAK,SAAoB;AACnE,SAAO,QAAQ,SAAU,QAAQ,WAAW,aAAa,WAAY;AACvE;AAEA,cAAc,OAAO,SAAU,QAAQ,KAAyB;AAC9D,SAAO,WAAW,OAAO,GAAG,EAAE,OAAO;AACvC;AAEA,cAAc,aAAa,SAAU,QAAQ,KAAyB;AACpE,SAAO,OAAO,GAAG,EAAE;AACrB;AACA,cAAc,cAAc,SAAU,QAAQ,KAAyB;AACrE,SAAO,OAAO,GAAG,EAAE;AACrB;AAOA,SAAS,WAAY;AA6BnB,OAAK,QAAQ,OAAO,CAAC,GAAG,aAAa;AACvC;AAOA,SAAS,UAAU,cAAc,SAAS,YAAa,OAAO;AAC5D,MAAI,GAAG,GAAG;AAEV,MAAI,CAAC,MAAM,OAAO;AAAE,WAAO;AAAA,EAAG;AAE9B,WAAS;AAET,OAAK,IAAI,GAAG,IAAI,MAAM,MAAM,QAAQ,IAAI,GAAG,KAAK;AAC9C,cAAU,MAAM,WAAW,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO,WAAW,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI;AAAA,EACzF;AAEA,SAAO;AACT;AAWA,SAAS,UAAU,cAAc,SAAS,YAAa,QAAQ,KAAK,SAAS;AAC3E,QAAM,QAAQ,OAAO,GAAG;AACxB,MAAI,SAAS;AAGb,MAAI,MAAM,QAAQ;AAChB,WAAO;AAAA,EACT;AASA,MAAI,MAAM,SAAS,MAAM,YAAY,MAAM,OAAO,OAAO,MAAM,CAAC,EAAE,QAAQ;AACxE,cAAU;AAAA,EACZ;AAGA,aAAW,MAAM,YAAY,KAAK,OAAO,OAAO,MAAM;AAGtD,YAAU,KAAK,YAAY,KAAK;AAGhC,MAAI,MAAM,YAAY,KAAK,QAAQ,UAAU;AAC3C,cAAU;AAAA,EACZ;AAGA,MAAI,SAAS;AACb,MAAI,MAAM,OAAO;AACf,aAAS;AAET,QAAI,MAAM,YAAY,GAAG;AACvB,UAAI,MAAM,IAAI,OAAO,QAAQ;AAC3B,cAAM,YAAY,OAAO,MAAM,CAAC;AAEhC,YAAI,UAAU,SAAS,YAAY,UAAU,QAAQ;AAGnD,mBAAS;AAAA,QACX,WAAW,UAAU,YAAY,MAAM,UAAU,QAAQ,MAAM,KAAK;AAGlE,mBAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,YAAU,SAAS,QAAQ;AAE3B,SAAO;AACT;AAUA,SAAS,UAAU,eAAe,SAAU,QAAQ,SAAS,KAAK;AAChE,MAAI,SAAS;AACb,QAAM,QAAQ,KAAK;AAEnB,WAAS,IAAI,GAAG,MAAM,OAAO,QAAQ,IAAI,KAAK,KAAK;AACjD,UAAM,OAAO,OAAO,CAAC,EAAE;AAEvB,QAAI,OAAO,MAAM,IAAI,MAAM,aAAa;AACtC,gBAAU,MAAM,IAAI,EAAE,QAAQ,GAAG,SAAS,KAAK,IAAI;AAAA,IACrD,OAAO;AACL,gBAAU,KAAK,YAAY,QAAQ,GAAG,OAAO;AAAA,IAC/C;AAAA,EACF;AAEA,SAAO;AACT;AAYA,SAAS,UAAU,qBAAqB,SAAU,QAAQ,SAAS,KAAK;AACtE,MAAI,SAAS;AAEb,WAAS,IAAI,GAAG,MAAM,OAAO,QAAQ,IAAI,KAAK,KAAK;AACjD,YAAQ,OAAO,CAAC,EAAE,MAAM;AAAA,MACtB,KAAK;AACH,kBAAU,OAAO,CAAC,EAAE;AACpB;AAAA,MACF,KAAK;AACH,kBAAU,KAAK,mBAAmB,OAAO,CAAC,EAAE,UAAU,SAAS,GAAG;AAClE;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AACH,kBAAU,OAAO,CAAC,EAAE;AACpB;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AACH,kBAAU;AACV;AAAA,MACF;AAAA,IAEF;AAAA,EACF;AAEA,SAAO;AACT;AAWA,SAAS,UAAU,SAAS,SAAU,QAAQ,SAAS,KAAK;AAC1D,MAAI,SAAS;AACb,QAAM,QAAQ,KAAK;AAEnB,WAAS,IAAI,GAAG,MAAM,OAAO,QAAQ,IAAI,KAAK,KAAK;AACjD,UAAM,OAAO,OAAO,CAAC,EAAE;AAEvB,QAAI,SAAS,UAAU;AACrB,gBAAU,KAAK,aAAa,OAAO,CAAC,EAAE,UAAU,SAAS,GAAG;AAAA,IAC9D,WAAW,OAAO,MAAM,IAAI,MAAM,aAAa;AAC7C,gBAAU,MAAM,IAAI,EAAE,QAAQ,GAAG,SAAS,KAAK,IAAI;AAAA,IACrD,OAAO;AACL,gBAAU,KAAK,YAAY,QAAQ,GAAG,SAAS,GAAG;AAAA,IACpD;AAAA,EACF;AAEA,SAAO;AACT;AAEA,IAAO,mBAAQ;;;AC5Sf,SAAS,QAAS;AAUhB,OAAK,YAAY,CAAC;AAOlB,OAAK,YAAY;AACnB;AAMA,MAAM,UAAU,WAAW,SAAU,MAAM;AACzC,WAAS,IAAI,GAAG,IAAI,KAAK,UAAU,QAAQ,KAAK;AAC9C,QAAI,KAAK,UAAU,CAAC,EAAE,SAAS,MAAM;AACnC,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAIA,MAAM,UAAU,cAAc,WAAY;AACxC,QAAM,OAAO;AACb,QAAM,SAAS,CAAC,EAAE;AAGlB,OAAK,UAAU,QAAQ,SAAU,MAAM;AACrC,QAAI,CAAC,KAAK,SAAS;AAAE;AAAA,IAAO;AAE5B,SAAK,IAAI,QAAQ,SAAU,SAAS;AAClC,UAAI,OAAO,QAAQ,OAAO,IAAI,GAAG;AAC/B,eAAO,KAAK,OAAO;AAAA,MACrB;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,OAAK,YAAY,CAAC;AAElB,SAAO,QAAQ,SAAU,OAAO;AAC9B,SAAK,UAAU,KAAK,IAAI,CAAC;AACzB,SAAK,UAAU,QAAQ,SAAU,MAAM;AACrC,UAAI,CAAC,KAAK,SAAS;AAAE;AAAA,MAAO;AAE5B,UAAI,SAAS,KAAK,IAAI,QAAQ,KAAK,IAAI,GAAG;AAAE;AAAA,MAAO;AAEnD,WAAK,UAAU,KAAK,EAAE,KAAK,KAAK,EAAE;AAAA,IACpC,CAAC;AAAA,EACH,CAAC;AACH;AA2BA,MAAM,UAAU,KAAK,SAAU,MAAM,IAAI,SAAS;AAChD,QAAM,QAAQ,KAAK,SAAS,IAAI;AAChC,QAAM,MAAM,WAAW,CAAC;AAExB,MAAI,UAAU,IAAI;AAAE,UAAM,IAAI,MAAM,4BAA4B,IAAI;AAAA,EAAE;AAEtE,OAAK,UAAU,KAAK,EAAE,KAAK;AAC3B,OAAK,UAAU,KAAK,EAAE,MAAM,IAAI,OAAO,CAAC;AACxC,OAAK,YAAY;AACnB;AA0BA,MAAM,UAAU,SAAS,SAAU,YAAY,UAAU,IAAI,SAAS;AACpE,QAAM,QAAQ,KAAK,SAAS,UAAU;AACtC,QAAM,MAAM,WAAW,CAAC;AAExB,MAAI,UAAU,IAAI;AAAE,UAAM,IAAI,MAAM,4BAA4B,UAAU;AAAA,EAAE;AAE5E,OAAK,UAAU,OAAO,OAAO,GAAG;AAAA,IAC9B,MAAM;AAAA,IACN,SAAS;AAAA,IACT;AAAA,IACA,KAAK,IAAI,OAAO,CAAC;AAAA,EACnB,CAAC;AAED,OAAK,YAAY;AACnB;AA0BA,MAAM,UAAU,QAAQ,SAAU,WAAW,UAAU,IAAI,SAAS;AAClE,QAAM,QAAQ,KAAK,SAAS,SAAS;AACrC,QAAM,MAAM,WAAW,CAAC;AAExB,MAAI,UAAU,IAAI;AAAE,UAAM,IAAI,MAAM,4BAA4B,SAAS;AAAA,EAAE;AAE3E,OAAK,UAAU,OAAO,QAAQ,GAAG,GAAG;AAAA,IAClC,MAAM;AAAA,IACN,SAAS;AAAA,IACT;AAAA,IACA,KAAK,IAAI,OAAO,CAAC;AAAA,EACnB,CAAC;AAED,OAAK,YAAY;AACnB;AAyBA,MAAM,UAAU,OAAO,SAAU,UAAU,IAAI,SAAS;AACtD,QAAM,MAAM,WAAW,CAAC;AAExB,OAAK,UAAU,KAAK;AAAA,IAClB,MAAM;AAAA,IACN,SAAS;AAAA,IACT;AAAA,IACA,KAAK,IAAI,OAAO,CAAC;AAAA,EACnB,CAAC;AAED,OAAK,YAAY;AACnB;AAcA,MAAM,UAAU,SAAS,SAAUC,OAAM,eAAe;AACtD,MAAI,CAAC,MAAM,QAAQA,KAAI,GAAG;AAAE,IAAAA,QAAO,CAACA,KAAI;AAAA,EAAE;AAE1C,QAAM,SAAS,CAAC;AAGhB,EAAAA,MAAK,QAAQ,SAAU,MAAM;AAC3B,UAAM,MAAM,KAAK,SAAS,IAAI;AAE9B,QAAI,MAAM,GAAG;AACX,UAAI,eAAe;AAAE;AAAA,MAAO;AAC5B,YAAM,IAAI,MAAM,sCAAsC,IAAI;AAAA,IAC5D;AACA,SAAK,UAAU,GAAG,EAAE,UAAU;AAC9B,WAAO,KAAK,IAAI;AAAA,EAClB,GAAG,IAAI;AAEP,OAAK,YAAY;AACjB,SAAO;AACT;AAYA,MAAM,UAAU,aAAa,SAAUA,OAAM,eAAe;AAC1D,MAAI,CAAC,MAAM,QAAQA,KAAI,GAAG;AAAE,IAAAA,QAAO,CAACA,KAAI;AAAA,EAAE;AAE1C,OAAK,UAAU,QAAQ,SAAU,MAAM;AAAE,SAAK,UAAU;AAAA,EAAM,CAAC;AAE/D,OAAK,OAAOA,OAAM,aAAa;AACjC;AAcA,MAAM,UAAU,UAAU,SAAUA,OAAM,eAAe;AACvD,MAAI,CAAC,MAAM,QAAQA,KAAI,GAAG;AAAE,IAAAA,QAAO,CAACA,KAAI;AAAA,EAAE;AAE1C,QAAM,SAAS,CAAC;AAGhB,EAAAA,MAAK,QAAQ,SAAU,MAAM;AAC3B,UAAM,MAAM,KAAK,SAAS,IAAI;AAE9B,QAAI,MAAM,GAAG;AACX,UAAI,eAAe;AAAE;AAAA,MAAO;AAC5B,YAAM,IAAI,MAAM,sCAAsC,IAAI;AAAA,IAC5D;AACA,SAAK,UAAU,GAAG,EAAE,UAAU;AAC9B,WAAO,KAAK,IAAI;AAAA,EAClB,GAAG,IAAI;AAEP,OAAK,YAAY;AACjB,SAAO;AACT;AAWA,MAAM,UAAU,WAAW,SAAU,WAAW;AAC9C,MAAI,KAAK,cAAc,MAAM;AAC3B,SAAK,YAAY;AAAA,EACnB;AAGA,SAAO,KAAK,UAAU,SAAS,KAAK,CAAC;AACvC;AAEA,IAAO,gBAAQ;;;ACxUf,SAAS,MAAO,MAAM,KAAK,SAAS;AAMlC,OAAK,OAAW;AAOhB,OAAK,MAAW;AAOhB,OAAK,QAAW;AAOhB,OAAK,MAAW;AAWhB,OAAK,UAAW;AAOhB,OAAK,QAAW;AAOhB,OAAK,WAAW;AAQhB,OAAK,UAAW;AAOhB,OAAK,SAAW;AAWhB,OAAK,OAAW;AAOhB,OAAK,OAAW;AAQhB,OAAK,QAAW;AAQhB,OAAK,SAAW;AAClB;AAOA,MAAM,UAAU,YAAY,SAAS,UAAW,MAAM;AACpD,MAAI,CAAC,KAAK,OAAO;AAAE,WAAO;AAAA,EAAG;AAE7B,QAAMC,SAAQ,KAAK;AAEnB,WAAS,IAAI,GAAG,MAAMA,OAAM,QAAQ,IAAI,KAAK,KAAK;AAChD,QAAIA,OAAM,CAAC,EAAE,CAAC,MAAM,MAAM;AAAE,aAAO;AAAA,IAAE;AAAA,EACvC;AACA,SAAO;AACT;AAOA,MAAM,UAAU,WAAW,SAAS,SAAU,UAAU;AACtD,MAAI,KAAK,OAAO;AACd,SAAK,MAAM,KAAK,QAAQ;AAAA,EAC1B,OAAO;AACL,SAAK,QAAQ,CAAC,QAAQ;AAAA,EACxB;AACF;AAOA,MAAM,UAAU,UAAU,SAAS,QAAS,MAAM,OAAO;AACvD,QAAM,MAAM,KAAK,UAAU,IAAI;AAC/B,QAAM,WAAW,CAAC,MAAM,KAAK;AAE7B,MAAI,MAAM,GAAG;AACX,SAAK,SAAS,QAAQ;AAAA,EACxB,OAAO;AACL,SAAK,MAAM,GAAG,IAAI;AAAA,EACpB;AACF;AAOA,MAAM,UAAU,UAAU,SAAS,QAAS,MAAM;AAChD,QAAM,MAAM,KAAK,UAAU,IAAI;AAC/B,MAAI,QAAQ;AACZ,MAAI,OAAO,GAAG;AACZ,YAAQ,KAAK,MAAM,GAAG,EAAE,CAAC;AAAA,EAC3B;AACA,SAAO;AACT;AAQA,MAAM,UAAU,WAAW,SAAS,SAAU,MAAM,OAAO;AACzD,QAAM,MAAM,KAAK,UAAU,IAAI;AAE/B,MAAI,MAAM,GAAG;AACX,SAAK,SAAS,CAAC,MAAM,KAAK,CAAC;AAAA,EAC7B,OAAO;AACL,SAAK,MAAM,GAAG,EAAE,CAAC,IAAI,KAAK,MAAM,GAAG,EAAE,CAAC,IAAI,MAAM;AAAA,EAClD;AACF;AAEA,IAAO,gBAAQ;;;ACzLf,SAAS,UAAW,KAAK,IAAI,KAAK;AAChC,OAAK,MAAM;AACX,OAAK,MAAM;AACX,OAAK,SAAS,CAAC;AACf,OAAK,aAAa;AAClB,OAAK,KAAK;AACZ;AAGA,UAAU,UAAU,QAAQ;AAE5B,IAAO,qBAAQ;;;ACbf,IAAM,cAAe;AACrB,IAAM,UAAe;AAEN,SAAR,UAA4B,OAAO;AACxC,MAAI;AAGJ,QAAM,MAAM,IAAI,QAAQ,aAAa,IAAI;AAGzC,QAAM,IAAI,QAAQ,SAAS,QAAQ;AAEnC,QAAM,MAAM;AACd;;;AChBe,SAAR,MAAwB,OAAO;AACpC,MAAI;AAEJ,MAAI,MAAM,YAAY;AACpB,YAAiB,IAAI,MAAM,MAAM,UAAU,IAAI,CAAC;AAChD,UAAM,UAAW,MAAM;AACvB,UAAM,MAAW,CAAC,GAAG,CAAC;AACtB,UAAM,WAAW,CAAC;AAClB,UAAM,OAAO,KAAK,KAAK;AAAA,EACzB,OAAO;AACL,UAAM,GAAG,MAAM,MAAM,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM,MAAM;AAAA,EACnE;AACF;;;ACZe,SAAR,OAAyB,OAAO;AACrC,QAAM,SAAS,MAAM;AAGrB,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,IAAI,GAAG,KAAK;AAC7C,UAAM,MAAM,OAAO,CAAC;AACpB,QAAI,IAAI,SAAS,UAAU;AACzB,YAAM,GAAG,OAAO,MAAM,IAAI,SAAS,MAAM,IAAI,MAAM,KAAK,IAAI,QAAQ;AAAA,IACtE;AAAA,EACF;AACF;;;ACHA,SAAS,WAAY,KAAK;AACxB,SAAO,YAAY,KAAK,GAAG;AAC7B;AACA,SAAS,YAAa,KAAK;AACzB,SAAO,aAAa,KAAK,GAAG;AAC9B;AAEe,SAAR,QAA0B,OAAO;AACtC,QAAM,cAAc,MAAM;AAE1B,MAAI,CAAC,MAAM,GAAG,QAAQ,SAAS;AAAE;AAAA,EAAO;AAExC,WAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,IAAI,GAAG,KAAK;AAClD,QAAI,YAAY,CAAC,EAAE,SAAS,YACxB,CAAC,MAAM,GAAG,QAAQ,QAAQ,YAAY,CAAC,EAAE,OAAO,GAAG;AACrD;AAAA,IACF;AAEA,QAAI,SAAS,YAAY,CAAC,EAAE;AAE5B,QAAI,gBAAgB;AAIpB,aAAS,IAAI,OAAO,SAAS,GAAG,KAAK,GAAG,KAAK;AAC3C,YAAM,eAAe,OAAO,CAAC;AAG7B,UAAI,aAAa,SAAS,cAAc;AACtC;AACA,eAAO,OAAO,CAAC,EAAE,UAAU,aAAa,SAAS,OAAO,CAAC,EAAE,SAAS,aAAa;AAC/E;AAAA,QACF;AACA;AAAA,MACF;AAGA,UAAI,aAAa,SAAS,eAAe;AACvC,YAAI,WAAW,aAAa,OAAO,KAAK,gBAAgB,GAAG;AACzD;AAAA,QACF;AACA,YAAI,YAAY,aAAa,OAAO,GAAG;AACrC;AAAA,QACF;AAAA,MACF;AACA,UAAI,gBAAgB,GAAG;AAAE;AAAA,MAAS;AAElC,UAAI,aAAa,SAAS,UAAU,MAAM,GAAG,QAAQ,KAAK,aAAa,OAAO,GAAG;AAC/E,cAAMC,QAAO,aAAa;AAC1B,YAAI,QAAQ,MAAM,GAAG,QAAQ,MAAMA,KAAI;AAGvC,cAAM,QAAQ,CAAC;AACf,YAAI,QAAQ,aAAa;AACzB,YAAI,UAAU;AAKd,YAAI,MAAM,SAAS,KACf,MAAM,CAAC,EAAE,UAAU,KACnB,IAAI,KACJ,OAAO,IAAI,CAAC,EAAE,SAAS,gBAAgB;AACzC,kBAAQ,MAAM,MAAM,CAAC;AAAA,QACvB;AAEA,iBAAS,KAAK,GAAG,KAAK,MAAM,QAAQ,MAAM;AACxC,gBAAM,MAAM,MAAM,EAAE,EAAE;AACtB,gBAAM,UAAU,MAAM,GAAG,cAAc,GAAG;AAC1C,cAAI,CAAC,MAAM,GAAG,aAAa,OAAO,GAAG;AAAE;AAAA,UAAS;AAEhD,cAAI,UAAU,MAAM,EAAE,EAAE;AAMxB,cAAI,CAAC,MAAM,EAAE,EAAE,QAAQ;AACrB,sBAAU,MAAM,GAAG,kBAAkB,YAAY,OAAO,EAAE,QAAQ,cAAc,EAAE;AAAA,UACpF,WAAW,MAAM,EAAE,EAAE,WAAW,aAAa,CAAC,YAAY,KAAK,OAAO,GAAG;AACvE,sBAAU,MAAM,GAAG,kBAAkB,YAAY,OAAO,EAAE,QAAQ,YAAY,EAAE;AAAA,UAClF,OAAO;AACL,sBAAU,MAAM,GAAG,kBAAkB,OAAO;AAAA,UAC9C;AAEA,gBAAM,MAAM,MAAM,EAAE,EAAE;AAEtB,cAAI,MAAM,SAAS;AACjB,kBAAM,QAAU,IAAI,MAAM,MAAM,QAAQ,IAAI,CAAC;AAC7C,kBAAM,UAAUA,MAAK,MAAM,SAAS,GAAG;AACvC,kBAAM,QAAU;AAChB,kBAAM,KAAK,KAAK;AAAA,UAClB;AAEA,gBAAM,UAAY,IAAI,MAAM,MAAM,aAAa,KAAK,CAAC;AACrD,kBAAQ,QAAU,CAAC,CAAC,QAAQ,OAAO,CAAC;AACpC,kBAAQ,QAAU;AAClB,kBAAQ,SAAU;AAClB,kBAAQ,OAAU;AAClB,gBAAM,KAAK,OAAO;AAElB,gBAAM,UAAY,IAAI,MAAM,MAAM,QAAQ,IAAI,CAAC;AAC/C,kBAAQ,UAAU;AAClB,kBAAQ,QAAU;AAClB,gBAAM,KAAK,OAAO;AAElB,gBAAM,UAAY,IAAI,MAAM,MAAM,cAAc,KAAK,EAAE;AACvD,kBAAQ,QAAU,EAAE;AACpB,kBAAQ,SAAU;AAClB,kBAAQ,OAAU;AAClB,gBAAM,KAAK,OAAO;AAElB,oBAAU,MAAM,EAAE,EAAE;AAAA,QACtB;AACA,YAAI,UAAUA,MAAK,QAAQ;AACzB,gBAAM,QAAU,IAAI,MAAM,MAAM,QAAQ,IAAI,CAAC;AAC7C,gBAAM,UAAUA,MAAK,MAAM,OAAO;AAClC,gBAAM,QAAU;AAChB,gBAAM,KAAK,KAAK;AAAA,QAClB;AAGA,oBAAY,CAAC,EAAE,WAAW,SAAS,eAAe,QAAQ,GAAG,KAAK;AAAA,MACpE;AAAA,IACF;AAAA,EACF;AACF;;;ACtHA,IAAM,UAAU;AAIhB,IAAM,sBAAsB;AAE5B,IAAM,iBAAiB;AACvB,IAAM,cAAc;AAAA,EAClB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,IAAI;AACN;AAEA,SAAS,UAAWC,QAAO,MAAM;AAC/B,SAAO,YAAY,KAAK,YAAY,CAAC;AACvC;AAEA,SAAS,eAAgB,cAAc;AACrC,MAAI,kBAAkB;AAEtB,WAAS,IAAI,aAAa,SAAS,GAAG,KAAK,GAAG,KAAK;AACjD,UAAM,QAAQ,aAAa,CAAC;AAE5B,QAAI,MAAM,SAAS,UAAU,CAAC,iBAAiB;AAC7C,YAAM,UAAU,MAAM,QAAQ,QAAQ,gBAAgB,SAAS;AAAA,IACjE;AAEA,QAAI,MAAM,SAAS,eAAe,MAAM,SAAS,QAAQ;AACvD;AAAA,IACF;AAEA,QAAI,MAAM,SAAS,gBAAgB,MAAM,SAAS,QAAQ;AACxD;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,aAAc,cAAc;AACnC,MAAI,kBAAkB;AAEtB,WAAS,IAAI,aAAa,SAAS,GAAG,KAAK,GAAG,KAAK;AACjD,UAAM,QAAQ,aAAa,CAAC;AAE5B,QAAI,MAAM,SAAS,UAAU,CAAC,iBAAiB;AAC7C,UAAI,QAAQ,KAAK,MAAM,OAAO,GAAG;AAC/B,cAAM,UAAU,MAAM,QACnB,QAAQ,QAAQ,MAAG,EAGnB,QAAQ,WAAW,QAAG,EAAE,QAAQ,YAAY,MAAM,EAClD,QAAQ,eAAe,QAAQ,EAAE,QAAQ,UAAU,GAAG,EAEtD,QAAQ,2BAA2B,UAAU,EAE7C,QAAQ,sBAAsB,UAAU,EACxC,QAAQ,8BAA8B,UAAU;AAAA,MACrD;AAAA,IACF;AAEA,QAAI,MAAM,SAAS,eAAe,MAAM,SAAS,QAAQ;AACvD;AAAA,IACF;AAEA,QAAI,MAAM,SAAS,gBAAgB,MAAM,SAAS,QAAQ;AACxD;AAAA,IACF;AAAA,EACF;AACF;AAEe,SAARC,SAA0B,OAAO;AACtC,MAAI;AAEJ,MAAI,CAAC,MAAM,GAAG,QAAQ,aAAa;AAAE;AAAA,EAAO;AAE5C,OAAK,SAAS,MAAM,OAAO,SAAS,GAAG,UAAU,GAAG,UAAU;AAC5D,QAAI,MAAM,OAAO,MAAM,EAAE,SAAS,UAAU;AAAE;AAAA,IAAS;AAEvD,QAAI,oBAAoB,KAAK,MAAM,OAAO,MAAM,EAAE,OAAO,GAAG;AAC1D,qBAAe,MAAM,OAAO,MAAM,EAAE,QAAQ;AAAA,IAC9C;AAEA,QAAI,QAAQ,KAAK,MAAM,OAAO,MAAM,EAAE,OAAO,GAAG;AAC9C,mBAAa,MAAM,OAAO,MAAM,EAAE,QAAQ;AAAA,IAC5C;AAAA,EACF;AACF;;;AC/FA,IAAM,gBAAgB;AACtB,IAAM,WAAW;AACjB,IAAM,aAAa;AAEnB,SAAS,UAAW,KAAK,OAAO,IAAI;AAClC,SAAO,IAAI,MAAM,GAAG,KAAK,IAAI,KAAK,IAAI,MAAM,QAAQ,CAAC;AACvD;AAEA,SAAS,gBAAiB,QAAQ,OAAO;AACvC,MAAI;AAEJ,QAAM,QAAQ,CAAC;AAEf,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,UAAM,QAAQ,OAAO,CAAC;AAEtB,UAAM,YAAY,OAAO,CAAC,EAAE;AAE5B,SAAK,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AACtC,UAAI,MAAM,CAAC,EAAE,SAAS,WAAW;AAAE;AAAA,MAAM;AAAA,IAC3C;AACA,UAAM,SAAS,IAAI;AAEnB,QAAI,MAAM,SAAS,QAAQ;AAAE;AAAA,IAAS;AAEtC,QAAIC,QAAO,MAAM;AACjB,QAAI,MAAM;AACV,QAAI,MAAMA,MAAK;AAGf;AACA,aAAO,MAAM,KAAK;AAChB,iBAAS,YAAY;AACrB,cAAM,IAAI,SAAS,KAAKA,KAAI;AAC5B,YAAI,CAAC,GAAG;AAAE;AAAA,QAAM;AAEhB,YAAI,UAAU;AACd,YAAI,WAAW;AACf,cAAM,EAAE,QAAQ;AAChB,cAAM,WAAY,EAAE,CAAC,MAAM;AAK3B,YAAI,WAAW;AAEf,YAAI,EAAE,QAAQ,KAAK,GAAG;AACpB,qBAAWA,MAAK,WAAW,EAAE,QAAQ,CAAC;AAAA,QACxC,OAAO;AACL,eAAK,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK;AAC3B,gBAAI,OAAO,CAAC,EAAE,SAAS,eAAe,OAAO,CAAC,EAAE,SAAS,YAAa;AACtE,gBAAI,CAAC,OAAO,CAAC,EAAE,QAAS;AAExB,uBAAW,OAAO,CAAC,EAAE,QAAQ,WAAW,OAAO,CAAC,EAAE,QAAQ,SAAS,CAAC;AACpE;AAAA,UACF;AAAA,QACF;AAKA,YAAI,WAAW;AAEf,YAAI,MAAM,KAAK;AACb,qBAAWA,MAAK,WAAW,GAAG;AAAA,QAChC,OAAO;AACL,eAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,gBAAI,OAAO,CAAC,EAAE,SAAS,eAAe,OAAO,CAAC,EAAE,SAAS,YAAa;AACtE,gBAAI,CAAC,OAAO,CAAC,EAAE,QAAS;AAExB,uBAAW,OAAO,CAAC,EAAE,QAAQ,WAAW,CAAC;AACzC;AAAA,UACF;AAAA,QACF;AAEA,cAAM,kBAAkB,eAAe,QAAQ,KAAK,YAAY,OAAO,aAAa,QAAQ,CAAC;AAC7F,cAAM,kBAAkB,eAAe,QAAQ,KAAK,YAAY,OAAO,aAAa,QAAQ,CAAC;AAE7F,cAAM,mBAAmB,aAAa,QAAQ;AAC9C,cAAM,mBAAmB,aAAa,QAAQ;AAE9C,YAAI,kBAAkB;AACpB,oBAAU;AAAA,QACZ,WAAW,iBAAiB;AAC1B,cAAI,EAAE,oBAAoB,kBAAkB;AAC1C,sBAAU;AAAA,UACZ;AAAA,QACF;AAEA,YAAI,kBAAkB;AACpB,qBAAW;AAAA,QACb,WAAW,iBAAiB;AAC1B,cAAI,EAAE,oBAAoB,kBAAkB;AAC1C,uBAAW;AAAA,UACb;AAAA,QACF;AAEA,YAAI,aAAa,MAAgB,EAAE,CAAC,MAAM,KAAK;AAC7C,cAAI,YAAY,MAAgB,YAAY,IAAc;AAExD,uBAAW,UAAU;AAAA,UACvB;AAAA,QACF;AAEA,YAAI,WAAW,UAAU;AAQvB,oBAAU;AACV,qBAAW;AAAA,QACb;AAEA,YAAI,CAAC,WAAW,CAAC,UAAU;AAEzB,cAAI,UAAU;AACZ,kBAAM,UAAU,UAAU,MAAM,SAAS,EAAE,OAAO,UAAU;AAAA,UAC9D;AACA;AAAA,QACF;AAEA,YAAI,UAAU;AAEZ,eAAK,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AACtC,gBAAIC,QAAO,MAAM,CAAC;AAClB,gBAAI,MAAM,CAAC,EAAE,QAAQ,WAAW;AAAE;AAAA,YAAM;AACxC,gBAAIA,MAAK,WAAW,YAAY,MAAM,CAAC,EAAE,UAAU,WAAW;AAC5D,cAAAA,QAAO,MAAM,CAAC;AAEd,kBAAI;AACJ,kBAAI;AACJ,kBAAI,UAAU;AACZ,4BAAY,MAAM,GAAG,QAAQ,OAAO,CAAC;AACrC,6BAAa,MAAM,GAAG,QAAQ,OAAO,CAAC;AAAA,cACxC,OAAO;AACL,4BAAY,MAAM,GAAG,QAAQ,OAAO,CAAC;AACrC,6BAAa,MAAM,GAAG,QAAQ,OAAO,CAAC;AAAA,cACxC;AAKA,oBAAM,UAAU,UAAU,MAAM,SAAS,EAAE,OAAO,UAAU;AAC5D,qBAAOA,MAAK,KAAK,EAAE,UAAU;AAAA,gBAC3B,OAAOA,MAAK,KAAK,EAAE;AAAA,gBAASA,MAAK;AAAA,gBAAK;AAAA,cAAS;AAEjD,qBAAO,WAAW,SAAS;AAC3B,kBAAIA,MAAK,UAAU,GAAG;AAAE,uBAAO,UAAU,SAAS;AAAA,cAAE;AAEpD,cAAAD,QAAO,MAAM;AACb,oBAAMA,MAAK;AAEX,oBAAM,SAAS;AACf,uBAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF;AAEA,YAAI,SAAS;AACX,gBAAM,KAAK;AAAA,YACT,OAAO;AAAA,YACP,KAAK,EAAE;AAAA,YACP,QAAQ;AAAA,YACR,OAAO;AAAA,UACT,CAAC;AAAA,QACH,WAAW,YAAY,UAAU;AAC/B,gBAAM,UAAU,UAAU,MAAM,SAAS,EAAE,OAAO,UAAU;AAAA,QAC9D;AAAA,MACF;AAAA,EACF;AACF;AAEe,SAAR,YAA8B,OAAO;AAE1C,MAAI,CAAC,MAAM,GAAG,QAAQ,aAAa;AAAE;AAAA,EAAO;AAE5C,WAAS,SAAS,MAAM,OAAO,SAAS,GAAG,UAAU,GAAG,UAAU;AAChE,QAAI,MAAM,OAAO,MAAM,EAAE,SAAS,YAC9B,CAAC,cAAc,KAAK,MAAM,OAAO,MAAM,EAAE,OAAO,GAAG;AACrD;AAAA,IACF;AAEA,oBAAgB,MAAM,OAAO,MAAM,EAAE,UAAU,KAAK;AAAA,EACtD;AACF;;;ACxLe,SAAR,UAA4B,OAAO;AACxC,MAAI,MAAM;AACV,QAAM,cAAc,MAAM;AAC1B,QAAM,IAAI,YAAY;AAEtB,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,QAAI,YAAY,CAAC,EAAE,SAAS,SAAU;AAEtC,UAAM,SAAS,YAAY,CAAC,EAAE;AAC9B,UAAM,MAAM,OAAO;AAEnB,SAAK,OAAO,GAAG,OAAO,KAAK,QAAQ;AACjC,UAAI,OAAO,IAAI,EAAE,SAAS,gBAAgB;AACxC,eAAO,IAAI,EAAE,OAAO;AAAA,MACtB;AAAA,IACF;AAEA,SAAK,OAAO,OAAO,GAAG,OAAO,KAAK,QAAQ;AACxC,UAAI,OAAO,IAAI,EAAE,SAAS,UACtB,OAAO,IAAI,OACX,OAAO,OAAO,CAAC,EAAE,SAAS,QAAQ;AAEpC,eAAO,OAAO,CAAC,EAAE,UAAU,OAAO,IAAI,EAAE,UAAU,OAAO,OAAO,CAAC,EAAE;AAAA,MACrE,OAAO;AACL,YAAI,SAAS,MAAM;AAAE,iBAAO,IAAI,IAAI,OAAO,IAAI;AAAA,QAAE;AAEjD;AAAA,MACF;AAAA,IACF;AAEA,QAAI,SAAS,MAAM;AACjB,aAAO,SAAS;AAAA,IAClB;AAAA,EACF;AACF;;;ACxBA,IAAM,SAAS;AAAA,EACb,CAAC,aAAkB,SAAW;AAAA,EAC9B,CAAC,SAAkB,KAAO;AAAA,EAC1B,CAAC,UAAkB,MAAQ;AAAA,EAC3B,CAAC,WAAkB,OAAS;AAAA,EAC5B,CAAC,gBAAkBE,QAAc;AAAA,EACjC,CAAC,eAAkB,WAAa;AAAA;AAAA;AAAA,EAGhC,CAAC,aAAkB,SAAW;AAChC;AAKA,SAAS,OAAQ;AAMf,OAAK,QAAQ,IAAI,cAAM;AAEvB,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,SAAK,MAAM,KAAK,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;AAAA,EAC5C;AACF;AAOA,KAAK,UAAU,UAAU,SAAU,OAAO;AACxC,QAAM,QAAQ,KAAK,MAAM,SAAS,EAAE;AAEpC,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK;AAC5C,UAAM,CAAC,EAAE,KAAK;AAAA,EAChB;AACF;AAEA,KAAK,UAAU,QAAQ;AAEvB,IAAO,sBAAQ;;;ACxDf,SAAS,WAAY,KAAK,IAAI,KAAK,QAAQ;AACzC,OAAK,MAAM;AAGX,OAAK,KAAS;AAEd,OAAK,MAAM;AAMX,OAAK,SAAS;AAEd,OAAK,SAAS,CAAC;AACf,OAAK,SAAS,CAAC;AACf,OAAK,SAAS,CAAC;AACf,OAAK,SAAS,CAAC;AAYf,OAAK,UAAU,CAAC;AAMhB,OAAK,YAAa;AAClB,OAAK,OAAa;AAClB,OAAK,UAAa;AAClB,OAAK,QAAa;AAClB,OAAK,WAAa;AAClB,OAAK,aAAa;AAIlB,OAAK,aAAa;AAElB,OAAK,QAAQ;AAIb,QAAM,IAAI,KAAK;AAEf,WAAS,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,EAAE,QAAQ,eAAe,OAAO,MAAM,KAAK,OAAO;AAC3G,UAAM,KAAK,EAAE,WAAW,GAAG;AAE3B,QAAI,CAAC,cAAc;AACjB,UAAI,QAAQ,EAAE,GAAG;AACf;AAEA,YAAI,OAAO,GAAM;AACf,oBAAU,IAAI,SAAS;AAAA,QACzB,OAAO;AACL;AAAA,QACF;AACA;AAAA,MACF,OAAO;AACL,uBAAe;AAAA,MACjB;AAAA,IACF;AAEA,QAAI,OAAO,MAAQ,QAAQ,MAAM,GAAG;AAClC,UAAI,OAAO,IAAM;AAAE;AAAA,MAAM;AACzB,WAAK,OAAO,KAAK,KAAK;AACtB,WAAK,OAAO,KAAK,GAAG;AACpB,WAAK,OAAO,KAAK,MAAM;AACvB,WAAK,OAAO,KAAK,MAAM;AACvB,WAAK,QAAQ,KAAK,CAAC;AAEnB,qBAAe;AACf,eAAS;AACT,eAAS;AACT,cAAQ,MAAM;AAAA,IAChB;AAAA,EACF;AAGA,OAAK,OAAO,KAAK,EAAE,MAAM;AACzB,OAAK,OAAO,KAAK,EAAE,MAAM;AACzB,OAAK,OAAO,KAAK,CAAC;AAClB,OAAK,OAAO,KAAK,CAAC;AAClB,OAAK,QAAQ,KAAK,CAAC;AAEnB,OAAK,UAAU,KAAK,OAAO,SAAS;AACtC;AAIA,WAAW,UAAU,OAAO,SAAU,MAAM,KAAK,SAAS;AACxD,QAAM,QAAQ,IAAI,cAAM,MAAM,KAAK,OAAO;AAC1C,QAAM,QAAQ;AAEd,MAAI,UAAU,EAAG,MAAK;AACtB,QAAM,QAAQ,KAAK;AACnB,MAAI,UAAU,EAAG,MAAK;AAEtB,OAAK,OAAO,KAAK,KAAK;AACtB,SAAO;AACT;AAEA,WAAW,UAAU,UAAU,SAAS,QAAS,MAAM;AACrD,SAAO,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,IAAI;AAClE;AAEA,WAAW,UAAU,iBAAiB,SAAS,eAAgB,MAAM;AACnE,WAAS,MAAM,KAAK,SAAS,OAAO,KAAK,QAAQ;AAC/C,QAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,IAAI,GAAG;AAC7D;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAGA,WAAW,UAAU,aAAa,SAAS,WAAY,KAAK;AAC1D,WAAS,MAAM,KAAK,IAAI,QAAQ,MAAM,KAAK,OAAO;AAChD,UAAM,KAAK,KAAK,IAAI,WAAW,GAAG;AAClC,QAAI,CAAC,QAAQ,EAAE,GAAG;AAAE;AAAA,IAAM;AAAA,EAC5B;AACA,SAAO;AACT;AAGA,WAAW,UAAU,iBAAiB,SAAS,eAAgB,KAAK,KAAK;AACvE,MAAI,OAAO,KAAK;AAAE,WAAO;AAAA,EAAI;AAE7B,SAAO,MAAM,KAAK;AAChB,QAAI,CAAC,QAAQ,KAAK,IAAI,WAAW,EAAE,GAAG,CAAC,GAAG;AAAE,aAAO,MAAM;AAAA,IAAE;AAAA,EAC7D;AACA,SAAO;AACT;AAGA,WAAW,UAAU,YAAY,SAAS,UAAW,KAAKC,OAAM;AAC9D,WAAS,MAAM,KAAK,IAAI,QAAQ,MAAM,KAAK,OAAO;AAChD,QAAI,KAAK,IAAI,WAAW,GAAG,MAAMA,OAAM;AAAE;AAAA,IAAM;AAAA,EACjD;AACA,SAAO;AACT;AAGA,WAAW,UAAU,gBAAgB,SAAS,cAAe,KAAKA,OAAM,KAAK;AAC3E,MAAI,OAAO,KAAK;AAAE,WAAO;AAAA,EAAI;AAE7B,SAAO,MAAM,KAAK;AAChB,QAAIA,UAAS,KAAK,IAAI,WAAW,EAAE,GAAG,GAAG;AAAE,aAAO,MAAM;AAAA,IAAE;AAAA,EAC5D;AACA,SAAO;AACT;AAGA,WAAW,UAAU,WAAW,SAAS,SAAU,OAAO,KAAK,QAAQ,YAAY;AACjF,MAAI,SAAS,KAAK;AAChB,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,IAAI,MAAM,MAAM,KAAK;AAEnC,WAAS,IAAI,GAAG,OAAO,OAAO,OAAO,KAAK,QAAQ,KAAK;AACrD,QAAI,aAAa;AACjB,UAAM,YAAY,KAAK,OAAO,IAAI;AAClC,QAAI,QAAQ;AACZ,QAAI;AAEJ,QAAI,OAAO,IAAI,OAAO,YAAY;AAEhC,aAAO,KAAK,OAAO,IAAI,IAAI;AAAA,IAC7B,OAAO;AACL,aAAO,KAAK,OAAO,IAAI;AAAA,IACzB;AAEA,WAAO,QAAQ,QAAQ,aAAa,QAAQ;AAC1C,YAAM,KAAK,KAAK,IAAI,WAAW,KAAK;AAEpC,UAAI,QAAQ,EAAE,GAAG;AACf,YAAI,OAAO,GAAM;AACf,wBAAc,KAAK,aAAa,KAAK,QAAQ,IAAI,KAAK;AAAA,QACxD,OAAO;AACL;AAAA,QACF;AAAA,MACF,WAAW,QAAQ,YAAY,KAAK,OAAO,IAAI,GAAG;AAEhD;AAAA,MACF,OAAO;AACL;AAAA,MACF;AAEA;AAAA,IACF;AAEA,QAAI,aAAa,QAAQ;AAGvB,YAAM,CAAC,IAAI,IAAI,MAAM,aAAa,SAAS,CAAC,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,MAAM,OAAO,IAAI;AAAA,IACtF,OAAO;AACL,YAAM,CAAC,IAAI,KAAK,IAAI,MAAM,OAAO,IAAI;AAAA,IACvC;AAAA,EACF;AAEA,SAAO,MAAM,KAAK,EAAE;AACtB;AAGA,WAAW,UAAU,QAAQ;AAE7B,IAAO,sBAAQ;;;ACjNf,IAAM,0BAA0B;AAEhC,SAAS,QAAS,OAAO,MAAM;AAC7B,QAAM,MAAM,MAAM,OAAO,IAAI,IAAI,MAAM,OAAO,IAAI;AAClD,QAAM,MAAM,MAAM,OAAO,IAAI;AAE7B,SAAO,MAAM,IAAI,MAAM,KAAK,GAAG;AACjC;AAEA,SAAS,aAAc,KAAK;AAC1B,QAAM,SAAS,CAAC;AAChB,QAAM,MAAM,IAAI;AAEhB,MAAI,MAAM;AACV,MAAI,KAAK,IAAI,WAAW,GAAG;AAC3B,MAAI,YAAY;AAChB,MAAI,UAAU;AACd,MAAI,UAAU;AAEd,SAAO,MAAM,KAAK;AAChB,QAAI,OAAO,KAAa;AACtB,UAAI,CAAC,WAAW;AAEd,eAAO,KAAK,UAAU,IAAI,UAAU,SAAS,GAAG,CAAC;AACjD,kBAAU;AACV,kBAAU,MAAM;AAAA,MAClB,OAAO;AAEL,mBAAW,IAAI,UAAU,SAAS,MAAM,CAAC;AACzC,kBAAU;AAAA,MACZ;AAAA,IACF;AAEA,gBAAa,OAAO;AACpB;AAEA,SAAK,IAAI,WAAW,GAAG;AAAA,EACzB;AAEA,SAAO,KAAK,UAAU,IAAI,UAAU,OAAO,CAAC;AAE5C,SAAO;AACT;AAEe,SAAR,MAAwB,OAAO,WAAW,SAAS,QAAQ;AAEhE,MAAI,YAAY,IAAI,SAAS;AAAE,WAAO;AAAA,EAAM;AAE5C,MAAI,WAAW,YAAY;AAE3B,MAAI,MAAM,OAAO,QAAQ,IAAI,MAAM,WAAW;AAAE,WAAO;AAAA,EAAM;AAG7D,MAAI,MAAM,OAAO,QAAQ,IAAI,MAAM,aAAa,GAAG;AAAE,WAAO;AAAA,EAAM;AAMlE,MAAI,MAAM,MAAM,OAAO,QAAQ,IAAI,MAAM,OAAO,QAAQ;AACxD,MAAI,OAAO,MAAM,OAAO,QAAQ,GAAG;AAAE,WAAO;AAAA,EAAM;AAElD,QAAM,UAAU,MAAM,IAAI,WAAW,KAAK;AAC1C,MAAI,YAAY,OAAe,YAAY,MAAe,YAAY,IAAa;AAAE,WAAO;AAAA,EAAM;AAElG,MAAI,OAAO,MAAM,OAAO,QAAQ,GAAG;AAAE,WAAO;AAAA,EAAM;AAElD,QAAM,WAAW,MAAM,IAAI,WAAW,KAAK;AAC3C,MAAI,aAAa,OAAe,aAAa,MAAe,aAAa,MAAe,CAAC,QAAQ,QAAQ,GAAG;AAC1G,WAAO;AAAA,EACT;AAIA,MAAI,YAAY,MAAe,QAAQ,QAAQ,GAAG;AAAE,WAAO;AAAA,EAAM;AAEjE,SAAO,MAAM,MAAM,OAAO,QAAQ,GAAG;AACnC,UAAM,KAAK,MAAM,IAAI,WAAW,GAAG;AAEnC,QAAI,OAAO,OAAe,OAAO,MAAe,OAAO,MAAe,CAAC,QAAQ,EAAE,GAAG;AAAE,aAAO;AAAA,IAAM;AAEnG;AAAA,EACF;AAEA,MAAI,WAAW,QAAQ,OAAO,YAAY,CAAC;AAC3C,MAAI,UAAU,SAAS,MAAM,GAAG;AAChC,QAAM,SAAS,CAAC;AAChB,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAM,IAAI,QAAQ,CAAC,EAAE,KAAK;AAC1B,QAAI,CAAC,GAAG;AAGN,UAAI,MAAM,KAAK,MAAM,QAAQ,SAAS,GAAG;AACvC;AAAA,MACF,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF;AAEA,QAAI,CAAC,WAAW,KAAK,CAAC,GAAG;AAAE,aAAO;AAAA,IAAM;AACxC,QAAI,EAAE,WAAW,EAAE,SAAS,CAAC,MAAM,IAAa;AAC9C,aAAO,KAAK,EAAE,WAAW,CAAC,MAAM,KAAc,WAAW,OAAO;AAAA,IAClE,WAAW,EAAE,WAAW,CAAC,MAAM,IAAa;AAC1C,aAAO,KAAK,MAAM;AAAA,IACpB,OAAO;AACL,aAAO,KAAK,EAAE;AAAA,IAChB;AAAA,EACF;AAEA,aAAW,QAAQ,OAAO,SAAS,EAAE,KAAK;AAC1C,MAAI,SAAS,QAAQ,GAAG,MAAM,IAAI;AAAE,WAAO;AAAA,EAAM;AACjD,MAAI,MAAM,OAAO,SAAS,IAAI,MAAM,aAAa,GAAG;AAAE,WAAO;AAAA,EAAM;AACnE,YAAU,aAAa,QAAQ;AAC/B,MAAI,QAAQ,UAAU,QAAQ,CAAC,MAAM,GAAI,SAAQ,MAAM;AACvD,MAAI,QAAQ,UAAU,QAAQ,QAAQ,SAAS,CAAC,MAAM,GAAI,SAAQ,IAAI;AAItE,QAAM,cAAc,QAAQ;AAC5B,MAAI,gBAAgB,KAAK,gBAAgB,OAAO,QAAQ;AAAE,WAAO;AAAA,EAAM;AAEvE,MAAI,QAAQ;AAAE,WAAO;AAAA,EAAK;AAE1B,QAAM,gBAAgB,MAAM;AAC5B,QAAM,aAAa;AAInB,QAAM,kBAAkB,MAAM,GAAG,MAAM,MAAM,SAAS,YAAY;AAElE,QAAM,WAAW,MAAM,KAAK,cAAc,SAAS,CAAC;AACpD,QAAM,aAAa,CAAC,WAAW,CAAC;AAChC,WAAS,MAAM;AAEf,QAAM,YAAY,MAAM,KAAK,cAAc,SAAS,CAAC;AACrD,YAAU,MAAM,CAAC,WAAW,YAAY,CAAC;AAEzC,QAAM,aAAa,MAAM,KAAK,WAAW,MAAM,CAAC;AAChD,aAAW,MAAM,CAAC,WAAW,YAAY,CAAC;AAE1C,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAM,WAAW,MAAM,KAAK,WAAW,MAAM,CAAC;AAC9C,QAAI,OAAO,CAAC,GAAG;AACb,eAAS,QAAS,CAAC,CAAC,SAAS,gBAAgB,OAAO,CAAC,CAAC,CAAC;AAAA,IACzD;AAEA,UAAM,WAAW,MAAM,KAAK,UAAU,IAAI,CAAC;AAC3C,aAAS,UAAW,QAAQ,CAAC,EAAE,KAAK;AACpC,aAAS,WAAW,CAAC;AAErB,UAAM,KAAK,YAAY,MAAM,EAAE;AAAA,EACjC;AAEA,QAAM,KAAK,YAAY,MAAM,EAAE;AAC/B,QAAM,KAAK,eAAe,SAAS,EAAE;AAErC,MAAI;AACJ,MAAI,qBAAqB;AAEzB,OAAK,WAAW,YAAY,GAAG,WAAW,SAAS,YAAY;AAC7D,QAAI,MAAM,OAAO,QAAQ,IAAI,MAAM,WAAW;AAAE;AAAA,IAAM;AAEtD,QAAI,YAAY;AAChB,aAAS,IAAI,GAAG,IAAI,gBAAgB,QAAQ,IAAI,GAAG,KAAK;AACtD,UAAI,gBAAgB,CAAC,EAAE,OAAO,UAAU,SAAS,IAAI,GAAG;AACtD,oBAAY;AACZ;AAAA,MACF;AAAA,IACF;AAEA,QAAI,WAAW;AAAE;AAAA,IAAM;AACvB,eAAW,QAAQ,OAAO,QAAQ,EAAE,KAAK;AACzC,QAAI,CAAC,UAAU;AAAE;AAAA,IAAM;AACvB,QAAI,MAAM,OAAO,QAAQ,IAAI,MAAM,aAAa,GAAG;AAAE;AAAA,IAAM;AAC3D,cAAU,aAAa,QAAQ;AAC/B,QAAI,QAAQ,UAAU,QAAQ,CAAC,MAAM,GAAI,SAAQ,MAAM;AACvD,QAAI,QAAQ,UAAU,QAAQ,QAAQ,SAAS,CAAC,MAAM,GAAI,SAAQ,IAAI;AAItE,0BAAsB,cAAc,QAAQ;AAC5C,QAAI,qBAAqB,yBAAyB;AAAE;AAAA,IAAM;AAE1D,QAAI,aAAa,YAAY,GAAG;AAC9B,YAAM,YAAY,MAAM,KAAK,cAAc,SAAS,CAAC;AACrD,gBAAU,MAAM,aAAa,CAAC,YAAY,GAAG,CAAC;AAAA,IAChD;AAEA,UAAM,YAAY,MAAM,KAAK,WAAW,MAAM,CAAC;AAC/C,cAAU,MAAM,CAAC,UAAU,WAAW,CAAC;AAEvC,aAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AACpC,YAAM,YAAY,MAAM,KAAK,WAAW,MAAM,CAAC;AAC/C,UAAI,OAAO,CAAC,GAAG;AACb,kBAAU,QAAS,CAAC,CAAC,SAAS,gBAAgB,OAAO,CAAC,CAAC,CAAC;AAAA,MAC1D;AAEA,YAAM,WAAW,MAAM,KAAK,UAAU,IAAI,CAAC;AAC3C,eAAS,UAAW,QAAQ,CAAC,IAAI,QAAQ,CAAC,EAAE,KAAK,IAAI;AACrD,eAAS,WAAW,CAAC;AAErB,YAAM,KAAK,YAAY,MAAM,EAAE;AAAA,IACjC;AACA,UAAM,KAAK,YAAY,MAAM,EAAE;AAAA,EACjC;AAEA,MAAI,YAAY;AACd,UAAM,KAAK,eAAe,SAAS,EAAE;AACrC,eAAW,CAAC,IAAI;AAAA,EAClB;AAEA,QAAM,KAAK,eAAe,SAAS,EAAE;AACrC,aAAW,CAAC,IAAI;AAEhB,QAAM,aAAa;AACnB,QAAM,OAAO;AACb,SAAO;AACT;;;ACjOe,SAAR,KAAuB,OAAO,WAAW,SAAsB;AACpE,MAAI,MAAM,OAAO,SAAS,IAAI,MAAM,YAAY,GAAG;AAAE,WAAO;AAAA,EAAM;AAElE,MAAI,WAAW,YAAY;AAC3B,MAAI,OAAO;AAEX,SAAO,WAAW,SAAS;AACzB,QAAI,MAAM,QAAQ,QAAQ,GAAG;AAC3B;AACA;AAAA,IACF;AAEA,QAAI,MAAM,OAAO,QAAQ,IAAI,MAAM,aAAa,GAAG;AACjD;AACA,aAAO;AACP;AAAA,IACF;AACA;AAAA,EACF;AAEA,QAAM,OAAO;AAEb,QAAM,QAAU,MAAM,KAAK,cAAc,QAAQ,CAAC;AAClD,QAAM,UAAU,MAAM,SAAS,WAAW,MAAM,IAAI,MAAM,WAAW,KAAK,IAAI;AAC9E,QAAM,MAAU,CAAC,WAAW,MAAM,IAAI;AAEtC,SAAO;AACT;;;AC3Be,SAAR,MAAwB,OAAO,WAAW,SAAS,QAAQ;AAChE,MAAI,MAAM,MAAM,OAAO,SAAS,IAAI,MAAM,OAAO,SAAS;AAC1D,MAAI,MAAM,MAAM,OAAO,SAAS;AAGhC,MAAI,MAAM,OAAO,SAAS,IAAI,MAAM,aAAa,GAAG;AAAE,WAAO;AAAA,EAAM;AAEnE,MAAI,MAAM,IAAI,KAAK;AAAE,WAAO;AAAA,EAAM;AAElC,QAAM,SAAS,MAAM,IAAI,WAAW,GAAG;AAEvC,MAAI,WAAW,OAAe,WAAW,IAAc;AACrD,WAAO;AAAA,EACT;AAGA,MAAI,MAAM;AACV,QAAM,MAAM,UAAU,KAAK,MAAM;AAEjC,MAAI,MAAM,MAAM;AAEhB,MAAI,MAAM,GAAG;AAAE,WAAO;AAAA,EAAM;AAE5B,QAAM,SAAS,MAAM,IAAI,MAAM,KAAK,GAAG;AACvC,QAAM,SAAS,MAAM,IAAI,MAAM,KAAK,GAAG;AAEvC,MAAI,WAAW,IAAc;AAC3B,QAAI,OAAO,QAAQ,OAAO,aAAa,MAAM,CAAC,KAAK,GAAG;AACpD,aAAO;AAAA,IACT;AAAA,EACF;AAGA,MAAI,QAAQ;AAAE,WAAO;AAAA,EAAK;AAG1B,MAAI,WAAW;AACf,MAAI,gBAAgB;AAEpB,aAAS;AACP;AACA,QAAI,YAAY,SAAS;AAGvB;AAAA,IACF;AAEA,UAAM,MAAM,MAAM,OAAO,QAAQ,IAAI,MAAM,OAAO,QAAQ;AAC1D,UAAM,MAAM,OAAO,QAAQ;AAE3B,QAAI,MAAM,OAAO,MAAM,OAAO,QAAQ,IAAI,MAAM,WAAW;AAIzD;AAAA,IACF;AAEA,QAAI,MAAM,IAAI,WAAW,GAAG,MAAM,QAAQ;AAAE;AAAA,IAAS;AAErD,QAAI,MAAM,OAAO,QAAQ,IAAI,MAAM,aAAa,GAAG;AAEjD;AAAA,IACF;AAEA,UAAM,MAAM,UAAU,KAAK,MAAM;AAGjC,QAAI,MAAM,MAAM,KAAK;AAAE;AAAA,IAAS;AAGhC,UAAM,MAAM,WAAW,GAAG;AAE1B,QAAI,MAAM,KAAK;AAAE;AAAA,IAAS;AAE1B,oBAAgB;AAEhB;AAAA,EACF;AAGA,QAAM,MAAM,OAAO,SAAS;AAE5B,QAAM,OAAO,YAAY,gBAAgB,IAAI;AAE7C,QAAM,QAAU,MAAM,KAAK,SAAS,QAAQ,CAAC;AAC7C,QAAM,OAAU;AAChB,QAAM,UAAU,MAAM,SAAS,YAAY,GAAG,UAAU,KAAK,IAAI;AACjE,QAAM,SAAU;AAChB,QAAM,MAAU,CAAC,WAAW,MAAM,IAAI;AAEtC,SAAO;AACT;;;ACzFe,SAAR,WAA6B,OAAO,WAAW,SAAS,QAAQ;AACrE,MAAI,MAAM,MAAM,OAAO,SAAS,IAAI,MAAM,OAAO,SAAS;AAC1D,MAAI,MAAM,MAAM,OAAO,SAAS;AAEhC,QAAM,aAAa,MAAM;AAGzB,MAAI,MAAM,OAAO,SAAS,IAAI,MAAM,aAAa,GAAG;AAAE,WAAO;AAAA,EAAM;AAGnE,MAAI,MAAM,IAAI,WAAW,GAAG,MAAM,IAAa;AAAE,WAAO;AAAA,EAAM;AAI9D,MAAI,QAAQ;AAAE,WAAO;AAAA,EAAK;AAE1B,QAAM,YAAa,CAAC;AACpB,QAAM,aAAa,CAAC;AACpB,QAAM,YAAa,CAAC;AACpB,QAAM,YAAa,CAAC;AAEpB,QAAM,kBAAkB,MAAM,GAAG,MAAM,MAAM,SAAS,YAAY;AAElE,QAAM,gBAAgB,MAAM;AAC5B,QAAM,aAAa;AACnB,MAAI,gBAAgB;AACpB,MAAI;AAoBJ,OAAK,WAAW,WAAW,WAAW,SAAS,YAAY;AASzD,UAAM,cAAc,MAAM,OAAO,QAAQ,IAAI,MAAM;AAEnD,UAAM,MAAM,OAAO,QAAQ,IAAI,MAAM,OAAO,QAAQ;AACpD,UAAM,MAAM,OAAO,QAAQ;AAE3B,QAAI,OAAO,KAAK;AAEd;AAAA,IACF;AAEA,QAAI,MAAM,IAAI,WAAW,KAAK,MAAM,MAAe,CAAC,aAAa;AAI/D,UAAI,UAAU,MAAM,OAAO,QAAQ,IAAI;AACvC,UAAI;AACJ,UAAI;AAGJ,UAAI,MAAM,IAAI,WAAW,GAAG,MAAM,IAAkB;AAGlD;AACA;AACA,oBAAY;AACZ,2BAAmB;AAAA,MACrB,WAAW,MAAM,IAAI,WAAW,GAAG,MAAM,GAAgB;AACvD,2BAAmB;AAEnB,aAAK,MAAM,QAAQ,QAAQ,IAAI,WAAW,MAAM,GAAG;AAGjD;AACA;AACA,sBAAY;AAAA,QACd,OAAO;AAIL,sBAAY;AAAA,QACd;AAAA,MACF,OAAO;AACL,2BAAmB;AAAA,MACrB;AAEA,UAAI,SAAS;AACb,gBAAU,KAAK,MAAM,OAAO,QAAQ,CAAC;AACrC,YAAM,OAAO,QAAQ,IAAI;AAEzB,aAAO,MAAM,KAAK;AAChB,cAAM,KAAK,MAAM,IAAI,WAAW,GAAG;AAEnC,YAAI,QAAQ,EAAE,GAAG;AACf,cAAI,OAAO,GAAM;AACf,sBAAU,KAAK,SAAS,MAAM,QAAQ,QAAQ,KAAK,YAAY,IAAI,MAAM;AAAA,UAC3E,OAAO;AACL;AAAA,UACF;AAAA,QACF,OAAO;AACL;AAAA,QACF;AAEA;AAAA,MACF;AAEA,sBAAgB,OAAO;AAEvB,iBAAW,KAAK,MAAM,QAAQ,QAAQ,CAAC;AACvC,YAAM,QAAQ,QAAQ,IAAI,MAAM,OAAO,QAAQ,IAAI,KAAK,mBAAmB,IAAI;AAE/E,gBAAU,KAAK,MAAM,OAAO,QAAQ,CAAC;AACrC,YAAM,OAAO,QAAQ,IAAI,SAAS;AAElC,gBAAU,KAAK,MAAM,OAAO,QAAQ,CAAC;AACrC,YAAM,OAAO,QAAQ,IAAI,MAAM,MAAM,OAAO,QAAQ;AACpD;AAAA,IACF;AAGA,QAAI,eAAe;AAAE;AAAA,IAAM;AAG3B,QAAI,YAAY;AAChB,aAAS,IAAI,GAAG,IAAI,gBAAgB,QAAQ,IAAI,GAAG,KAAK;AACtD,UAAI,gBAAgB,CAAC,EAAE,OAAO,UAAU,SAAS,IAAI,GAAG;AACtD,oBAAY;AACZ;AAAA,MACF;AAAA,IACF;AAEA,QAAI,WAAW;AAKb,YAAM,UAAU;AAEhB,UAAI,MAAM,cAAc,GAAG;AAIzB,kBAAU,KAAK,MAAM,OAAO,QAAQ,CAAC;AACrC,mBAAW,KAAK,MAAM,QAAQ,QAAQ,CAAC;AACvC,kBAAU,KAAK,MAAM,OAAO,QAAQ,CAAC;AACrC,kBAAU,KAAK,MAAM,OAAO,QAAQ,CAAC;AACrC,cAAM,OAAO,QAAQ,KAAK,MAAM;AAAA,MAClC;AAEA;AAAA,IACF;AAEA,cAAU,KAAK,MAAM,OAAO,QAAQ,CAAC;AACrC,eAAW,KAAK,MAAM,QAAQ,QAAQ,CAAC;AACvC,cAAU,KAAK,MAAM,OAAO,QAAQ,CAAC;AACrC,cAAU,KAAK,MAAM,OAAO,QAAQ,CAAC;AAIrC,UAAM,OAAO,QAAQ,IAAI;AAAA,EAC3B;AAEA,QAAM,YAAY,MAAM;AACxB,QAAM,YAAY;AAElB,QAAM,UAAW,MAAM,KAAK,mBAAmB,cAAc,CAAC;AAC9D,UAAQ,SAAS;AACjB,QAAM,QAAQ,CAAC,WAAW,CAAC;AAC3B,UAAQ,MAAS;AAEjB,QAAM,GAAG,MAAM,SAAS,OAAO,WAAW,QAAQ;AAElD,QAAM,UAAW,MAAM,KAAK,oBAAoB,cAAc,EAAE;AAChE,UAAQ,SAAS;AAEjB,QAAM,UAAU;AAChB,QAAM,aAAa;AACnB,QAAM,CAAC,IAAI,MAAM;AAIjB,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,UAAM,OAAO,IAAI,SAAS,IAAI,UAAU,CAAC;AACzC,UAAM,OAAO,IAAI,SAAS,IAAI,UAAU,CAAC;AACzC,UAAM,OAAO,IAAI,SAAS,IAAI,UAAU,CAAC;AACzC,UAAM,QAAQ,IAAI,SAAS,IAAI,WAAW,CAAC;AAAA,EAC7C;AACA,QAAM,YAAY;AAElB,SAAO;AACT;;;AC5Me,SAAR,GAAqB,OAAO,WAAW,SAAS,QAAQ;AAC7D,QAAM,MAAM,MAAM,OAAO,SAAS;AAElC,MAAI,MAAM,OAAO,SAAS,IAAI,MAAM,aAAa,GAAG;AAAE,WAAO;AAAA,EAAM;AAEnE,MAAI,MAAM,MAAM,OAAO,SAAS,IAAI,MAAM,OAAO,SAAS;AAC1D,QAAM,SAAS,MAAM,IAAI,WAAW,KAAK;AAGzC,MAAI,WAAW,MACX,WAAW,MACX,WAAW,IAAa;AAC1B,WAAO;AAAA,EACT;AAIA,MAAI,MAAM;AACV,SAAO,MAAM,KAAK;AAChB,UAAM,KAAK,MAAM,IAAI,WAAW,KAAK;AACrC,QAAI,OAAO,UAAU,CAAC,QAAQ,EAAE,GAAG;AAAE,aAAO;AAAA,IAAM;AAClD,QAAI,OAAO,QAAQ;AAAE;AAAA,IAAM;AAAA,EAC7B;AAEA,MAAI,MAAM,GAAG;AAAE,WAAO;AAAA,EAAM;AAE5B,MAAI,QAAQ;AAAE,WAAO;AAAA,EAAK;AAE1B,QAAM,OAAO,YAAY;AAEzB,QAAM,QAAS,MAAM,KAAK,MAAM,MAAM,CAAC;AACvC,QAAM,MAAS,CAAC,WAAW,MAAM,IAAI;AACrC,QAAM,SAAS,MAAM,MAAM,CAAC,EAAE,KAAK,OAAO,aAAa,MAAM,CAAC;AAE9D,SAAO;AACT;;;ACjCA,SAAS,qBAAsB,OAAO,WAAW;AAC/C,QAAM,MAAM,MAAM,OAAO,SAAS;AAClC,MAAI,MAAM,MAAM,OAAO,SAAS,IAAI,MAAM,OAAO,SAAS;AAE1D,QAAM,SAAS,MAAM,IAAI,WAAW,KAAK;AAEzC,MAAI,WAAW,MACX,WAAW,MACX,WAAW,IAAa;AAC1B,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,KAAK;AACb,UAAM,KAAK,MAAM,IAAI,WAAW,GAAG;AAEnC,QAAI,CAAC,QAAQ,EAAE,GAAG;AAEhB,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAIA,SAAS,sBAAuB,OAAO,WAAW;AAChD,QAAM,QAAQ,MAAM,OAAO,SAAS,IAAI,MAAM,OAAO,SAAS;AAC9D,QAAM,MAAM,MAAM,OAAO,SAAS;AAClC,MAAI,MAAM;AAGV,MAAI,MAAM,KAAK,KAAK;AAAE,WAAO;AAAA,EAAG;AAEhC,MAAI,KAAK,MAAM,IAAI,WAAW,KAAK;AAEnC,MAAI,KAAK,MAAe,KAAK,IAAa;AAAE,WAAO;AAAA,EAAG;AAEtD,aAAS;AAEP,QAAI,OAAO,KAAK;AAAE,aAAO;AAAA,IAAG;AAE5B,SAAK,MAAM,IAAI,WAAW,KAAK;AAE/B,QAAI,MAAM,MAAe,MAAM,IAAa;AAG1C,UAAI,MAAM,SAAS,IAAI;AAAE,eAAO;AAAA,MAAG;AAEnC;AAAA,IACF;AAGA,QAAI,OAAO,MAAe,OAAO,IAAa;AAC5C;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,KAAK;AACb,SAAK,MAAM,IAAI,WAAW,GAAG;AAE7B,QAAI,CAAC,QAAQ,EAAE,GAAG;AAEhB,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,oBAAqB,OAAO,KAAK;AACxC,QAAM,QAAQ,MAAM,QAAQ;AAE5B,WAAS,IAAI,MAAM,GAAG,IAAI,MAAM,OAAO,SAAS,GAAG,IAAI,GAAG,KAAK;AAC7D,QAAI,MAAM,OAAO,CAAC,EAAE,UAAU,SAAS,MAAM,OAAO,CAAC,EAAE,SAAS,kBAAkB;AAChF,YAAM,OAAO,IAAI,CAAC,EAAE,SAAS;AAC7B,YAAM,OAAO,CAAC,EAAE,SAAS;AACzB,WAAK;AAAA,IACP;AAAA,EACF;AACF;AAEe,SAAR,KAAuB,OAAO,WAAW,SAAS,QAAQ;AAC/D,MAAI,KAAK,KAAK,OAAO;AACrB,MAAI,WAAW;AACf,MAAI,QAAQ;AAGZ,MAAI,MAAM,OAAO,QAAQ,IAAI,MAAM,aAAa,GAAG;AAAE,WAAO;AAAA,EAAM;AAQlE,MAAI,MAAM,cAAc,KACpB,MAAM,OAAO,QAAQ,IAAI,MAAM,cAAc,KAC7C,MAAM,OAAO,QAAQ,IAAI,MAAM,WAAW;AAC5C,WAAO;AAAA,EACT;AAEA,MAAI,yBAAyB;AAI7B,MAAI,UAAU,MAAM,eAAe,aAAa;AAM9C,QAAI,MAAM,OAAO,QAAQ,KAAK,MAAM,WAAW;AAC7C,+BAAyB;AAAA,IAC3B;AAAA,EACF;AAGA,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,OAAK,iBAAiB,sBAAsB,OAAO,QAAQ,MAAM,GAAG;AAClE,gBAAY;AACZ,YAAQ,MAAM,OAAO,QAAQ,IAAI,MAAM,OAAO,QAAQ;AACtD,kBAAc,OAAO,MAAM,IAAI,MAAM,OAAO,iBAAiB,CAAC,CAAC;AAI/D,QAAI,0BAA0B,gBAAgB,EAAG,QAAO;AAAA,EAC1D,YAAY,iBAAiB,qBAAqB,OAAO,QAAQ,MAAM,GAAG;AACxE,gBAAY;AAAA,EACd,OAAO;AACL,WAAO;AAAA,EACT;AAIA,MAAI,wBAAwB;AAC1B,QAAI,MAAM,WAAW,cAAc,KAAK,MAAM,OAAO,QAAQ,EAAG,QAAO;AAAA,EACzE;AAGA,MAAI,QAAQ;AAAE,WAAO;AAAA,EAAK;AAG1B,QAAM,iBAAiB,MAAM,IAAI,WAAW,iBAAiB,CAAC;AAG9D,QAAM,aAAa,MAAM,OAAO;AAEhC,MAAI,WAAW;AACb,YAAc,MAAM,KAAK,qBAAqB,MAAM,CAAC;AACrD,QAAI,gBAAgB,GAAG;AACrB,YAAM,QAAQ,CAAC,CAAC,SAAS,WAAW,CAAC;AAAA,IACvC;AAAA,EACF,OAAO;AACL,YAAc,MAAM,KAAK,oBAAoB,MAAM,CAAC;AAAA,EACtD;AAEA,QAAM,YAAY,CAAC,UAAU,CAAC;AAC9B,QAAM,MAAS;AACf,QAAM,SAAS,OAAO,aAAa,cAAc;AAMjD,MAAI,eAAe;AACnB,QAAM,kBAAkB,MAAM,GAAG,MAAM,MAAM,SAAS,MAAM;AAE5D,QAAM,gBAAgB,MAAM;AAC5B,QAAM,aAAa;AAEnB,SAAO,WAAW,SAAS;AACzB,UAAM;AACN,UAAM,MAAM,OAAO,QAAQ;AAE3B,UAAM,UAAU,MAAM,OAAO,QAAQ,IAAI,kBAAkB,MAAM,OAAO,QAAQ,IAAI,MAAM,OAAO,QAAQ;AACzG,QAAI,SAAS;AAEb,WAAO,MAAM,KAAK;AAChB,YAAM,KAAK,MAAM,IAAI,WAAW,GAAG;AAEnC,UAAI,OAAO,GAAM;AACf,kBAAU,KAAK,SAAS,MAAM,QAAQ,QAAQ,KAAK;AAAA,MACrD,WAAW,OAAO,IAAM;AACtB;AAAA,MACF,OAAO;AACL;AAAA,MACF;AAEA;AAAA,IACF;AAEA,UAAM,eAAe;AACrB,QAAI;AAEJ,QAAI,gBAAgB,KAAK;AAEvB,0BAAoB;AAAA,IACtB,OAAO;AACL,0BAAoB,SAAS;AAAA,IAC/B;AAIA,QAAI,oBAAoB,GAAG;AAAE,0BAAoB;AAAA,IAAE;AAInD,UAAM,SAAS,UAAU;AAGzB,YAAe,MAAM,KAAK,kBAAkB,MAAM,CAAC;AACnD,UAAM,SAAS,OAAO,aAAa,cAAc;AACjD,UAAM,YAAY,CAAC,UAAU,CAAC;AAC9B,UAAM,MAAS;AACf,QAAI,WAAW;AACb,YAAM,OAAO,MAAM,IAAI,MAAM,OAAO,iBAAiB,CAAC;AAAA,IACxD;AAGA,UAAM,WAAW,MAAM;AACvB,UAAM,YAAY,MAAM,OAAO,QAAQ;AACvC,UAAM,YAAY,MAAM,OAAO,QAAQ;AAMvC,UAAM,gBAAgB,MAAM;AAC5B,UAAM,aAAa,MAAM;AACzB,UAAM,YAAY;AAElB,UAAM,QAAQ;AACd,UAAM,OAAO,QAAQ,IAAI,eAAe,MAAM,OAAO,QAAQ;AAC7D,UAAM,OAAO,QAAQ,IAAI;AAEzB,QAAI,gBAAgB,OAAO,MAAM,QAAQ,WAAW,CAAC,GAAG;AAQtD,YAAM,OAAO,KAAK,IAAI,MAAM,OAAO,GAAG,OAAO;AAAA,IAC/C,OAAO;AACL,YAAM,GAAG,MAAM,SAAS,OAAO,UAAU,SAAS,IAAI;AAAA,IACxD;AAGA,QAAI,CAAC,MAAM,SAAS,cAAc;AAChC,cAAQ;AAAA,IACV;AAGA,mBAAgB,MAAM,OAAO,WAAY,KAAK,MAAM,QAAQ,MAAM,OAAO,CAAC;AAE1E,UAAM,YAAY,MAAM;AACxB,UAAM,aAAa;AACnB,UAAM,OAAO,QAAQ,IAAI;AACzB,UAAM,OAAO,QAAQ,IAAI;AACzB,UAAM,QAAQ;AAEd,YAAe,MAAM,KAAK,mBAAmB,MAAM,EAAE;AACrD,UAAM,SAAS,OAAO,aAAa,cAAc;AAEjD,eAAW,MAAM;AACjB,cAAU,CAAC,IAAI;AAEf,QAAI,YAAY,SAAS;AAAE;AAAA,IAAM;AAKjC,QAAI,MAAM,OAAO,QAAQ,IAAI,MAAM,WAAW;AAAE;AAAA,IAAM;AAGtD,QAAI,MAAM,OAAO,QAAQ,IAAI,MAAM,aAAa,GAAG;AAAE;AAAA,IAAM;AAG3D,QAAI,YAAY;AAChB,aAAS,IAAI,GAAG,IAAI,gBAAgB,QAAQ,IAAI,GAAG,KAAK;AACtD,UAAI,gBAAgB,CAAC,EAAE,OAAO,UAAU,SAAS,IAAI,GAAG;AACtD,oBAAY;AACZ;AAAA,MACF;AAAA,IACF;AACA,QAAI,WAAW;AAAE;AAAA,IAAM;AAGvB,QAAI,WAAW;AACb,uBAAiB,sBAAsB,OAAO,QAAQ;AACtD,UAAI,iBAAiB,GAAG;AAAE;AAAA,MAAM;AAChC,cAAQ,MAAM,OAAO,QAAQ,IAAI,MAAM,OAAO,QAAQ;AAAA,IACxD,OAAO;AACL,uBAAiB,qBAAqB,OAAO,QAAQ;AACrD,UAAI,iBAAiB,GAAG;AAAE;AAAA,MAAM;AAAA,IAClC;AAEA,QAAI,mBAAmB,MAAM,IAAI,WAAW,iBAAiB,CAAC,GAAG;AAAE;AAAA,IAAM;AAAA,EAC3E;AAGA,MAAI,WAAW;AACb,YAAQ,MAAM,KAAK,sBAAsB,MAAM,EAAE;AAAA,EACnD,OAAO;AACL,YAAQ,MAAM,KAAK,qBAAqB,MAAM,EAAE;AAAA,EAClD;AACA,QAAM,SAAS,OAAO,aAAa,cAAc;AAEjD,YAAU,CAAC,IAAI;AACf,QAAM,OAAO;AAEb,QAAM,aAAa;AAGnB,MAAI,OAAO;AACT,wBAAoB,OAAO,UAAU;AAAA,EACvC;AAEA,SAAO;AACT;;;ACxUe,SAAR,UAA4B,OAAO,WAAW,UAAU,QAAQ;AACrE,MAAI,MAAM,MAAM,OAAO,SAAS,IAAI,MAAM,OAAO,SAAS;AAC1D,MAAI,MAAM,MAAM,OAAO,SAAS;AAChC,MAAI,WAAW,YAAY;AAG3B,MAAI,MAAM,OAAO,SAAS,IAAI,MAAM,aAAa,GAAG;AAAE,WAAO;AAAA,EAAM;AAEnE,MAAI,MAAM,IAAI,WAAW,GAAG,MAAM,IAAa;AAAE,WAAO;AAAA,EAAM;AAE9D,WAAS,YAAaC,WAAU;AAC9B,UAAM,UAAU,MAAM;AAEtB,QAAIA,aAAY,WAAW,MAAM,QAAQA,SAAQ,GAAG;AAElD,aAAO;AAAA,IACT;AAEA,QAAI,iBAAiB;AAIrB,QAAI,MAAM,OAAOA,SAAQ,IAAI,MAAM,YAAY,GAAG;AAAE,uBAAiB;AAAA,IAAK;AAG1E,QAAI,MAAM,OAAOA,SAAQ,IAAI,GAAG;AAAE,uBAAiB;AAAA,IAAK;AAExD,QAAI,CAAC,gBAAgB;AACnB,YAAM,kBAAkB,MAAM,GAAG,MAAM,MAAM,SAAS,WAAW;AACjE,YAAM,gBAAgB,MAAM;AAC5B,YAAM,aAAa;AAGnB,UAAI,YAAY;AAChB,eAAS,IAAI,GAAG,IAAI,gBAAgB,QAAQ,IAAI,GAAG,KAAK;AACtD,YAAI,gBAAgB,CAAC,EAAE,OAAOA,WAAU,SAAS,IAAI,GAAG;AACtD,sBAAY;AACZ;AAAA,QACF;AAAA,MACF;AAEA,YAAM,aAAa;AACnB,UAAI,WAAW;AAEb,eAAO;AAAA,MACT;AAAA,IACF;AAEA,UAAMC,OAAM,MAAM,OAAOD,SAAQ,IAAI,MAAM,OAAOA,SAAQ;AAC1D,UAAME,OAAM,MAAM,OAAOF,SAAQ;AAGjC,WAAO,MAAM,IAAI,MAAMC,MAAKC,OAAM,CAAC;AAAA,EACrC;AAEA,MAAI,MAAM,MAAM,IAAI,MAAM,KAAK,MAAM,CAAC;AAEtC,QAAM,IAAI;AACV,MAAI,WAAW;AAEf,OAAK,MAAM,GAAG,MAAM,KAAK,OAAO;AAC9B,UAAM,KAAK,IAAI,WAAW,GAAG;AAC7B,QAAI,OAAO,IAAc;AACvB,aAAO;AAAA,IACT,WAAW,OAAO,IAAc;AAC9B,iBAAW;AACX;AAAA,IACF,WAAW,OAAO,IAAe;AAC/B,YAAM,cAAc,YAAY,QAAQ;AACxC,UAAI,gBAAgB,MAAM;AACxB,eAAO;AACP,cAAM,IAAI;AACV;AAAA,MACF;AAAA,IACF,WAAW,OAAO,IAAc;AAC9B;AACA,UAAI,MAAM,OAAO,IAAI,WAAW,GAAG,MAAM,IAAM;AAC7C,cAAM,cAAc,YAAY,QAAQ;AACxC,YAAI,gBAAgB,MAAM;AACxB,iBAAO;AACP,gBAAM,IAAI;AACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,WAAW,KAAK,IAAI,WAAW,WAAW,CAAC,MAAM,IAAa;AAAE,WAAO;AAAA,EAAM;AAIjF,OAAK,MAAM,WAAW,GAAG,MAAM,KAAK,OAAO;AACzC,UAAM,KAAK,IAAI,WAAW,GAAG;AAC7B,QAAI,OAAO,IAAM;AACf,YAAM,cAAc,YAAY,QAAQ;AACxC,UAAI,gBAAgB,MAAM;AACxB,eAAO;AACP,cAAM,IAAI;AACV;AAAA,MACF;AAAA,IACF,WAAW,QAAQ,EAAE,GAAG;AAAA,IAExB,OAAO;AACL;AAAA,IACF;AAAA,EACF;AAIA,QAAM,UAAU,MAAM,GAAG,QAAQ,qBAAqB,KAAK,KAAK,GAAG;AACnE,MAAI,CAAC,QAAQ,IAAI;AAAE,WAAO;AAAA,EAAM;AAEhC,QAAM,OAAO,MAAM,GAAG,cAAc,QAAQ,GAAG;AAC/C,MAAI,CAAC,MAAM,GAAG,aAAa,IAAI,GAAG;AAAE,WAAO;AAAA,EAAM;AAEjD,QAAM,QAAQ;AAGd,QAAM,aAAa;AACnB,QAAM,gBAAgB;AAItB,QAAM,QAAQ;AACd,SAAO,MAAM,KAAK,OAAO;AACvB,UAAM,KAAK,IAAI,WAAW,GAAG;AAC7B,QAAI,OAAO,IAAM;AACf,YAAM,cAAc,YAAY,QAAQ;AACxC,UAAI,gBAAgB,MAAM;AACxB,eAAO;AACP,cAAM,IAAI;AACV;AAAA,MACF;AAAA,IACF,WAAW,QAAQ,EAAE,GAAG;AAAA,IAExB,OAAO;AACL;AAAA,IACF;AAAA,EACF;AAIA,MAAI,WAAW,MAAM,GAAG,QAAQ,eAAe,KAAK,KAAK,GAAG;AAC5D,SAAO,SAAS,cAAc;AAC5B,UAAM,cAAc,YAAY,QAAQ;AACxC,QAAI,gBAAgB,KAAM;AAC1B,WAAO;AACP,UAAM;AACN,UAAM,IAAI;AACV;AACA,eAAW,MAAM,GAAG,QAAQ,eAAe,KAAK,KAAK,KAAK,QAAQ;AAAA,EACpE;AACA,MAAI;AAEJ,MAAI,MAAM,OAAO,UAAU,OAAO,SAAS,IAAI;AAC7C,YAAQ,SAAS;AACjB,UAAM,SAAS;AAAA,EACjB,OAAO;AACL,YAAQ;AACR,UAAM;AACN,eAAW;AAAA,EACb;AAGA,SAAO,MAAM,KAAK;AAChB,UAAM,KAAK,IAAI,WAAW,GAAG;AAC7B,QAAI,CAAC,QAAQ,EAAE,GAAG;AAAE;AAAA,IAAM;AAC1B;AAAA,EACF;AAEA,MAAI,MAAM,OAAO,IAAI,WAAW,GAAG,MAAM,IAAM;AAC7C,QAAI,OAAO;AAGT,cAAQ;AACR,YAAM;AACN,iBAAW;AACX,aAAO,MAAM,KAAK;AAChB,cAAM,KAAK,IAAI,WAAW,GAAG;AAC7B,YAAI,CAAC,QAAQ,EAAE,GAAG;AAAE;AAAA,QAAM;AAC1B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,MAAM,OAAO,IAAI,WAAW,GAAG,MAAM,IAAM;AAE7C,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,mBAAmB,IAAI,MAAM,GAAG,QAAQ,CAAC;AACvD,MAAI,CAAC,OAAO;AAEV,WAAO;AAAA,EACT;AAIA,MAAI,QAAQ;AAAE,WAAO;AAAA,EAAK;AAE1B,MAAI,OAAO,MAAM,IAAI,eAAe,aAAa;AAC/C,UAAM,IAAI,aAAa,CAAC;AAAA,EAC1B;AACA,MAAI,OAAO,MAAM,IAAI,WAAW,KAAK,MAAM,aAAa;AACtD,UAAM,IAAI,WAAW,KAAK,IAAI,EAAE,OAAO,KAAK;AAAA,EAC9C;AAEA,QAAM,OAAO;AACb,SAAO;AACT;;;AChNA,IAAO,sBAAQ;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AChEA,IAAM,YAAgB;AAEtB,IAAM,WAAgB;AACtB,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AAEtB,IAAM,aAAc,QAAQ,WAAW,MAAM,gBAAgB,MAAM,gBAAgB;AAEnF,IAAM,YAAc,YAAY,YAAY,iBAAiB,aAAa;AAE1E,IAAM,WAAc,6BAA6B,YAAY;AAE7D,IAAM,YAAc;AACpB,IAAM,UAAc;AACpB,IAAM,aAAc;AACpB,IAAM,cAAc;AACpB,IAAM,QAAc;AAEpB,IAAM,cAAc,IAAI,OAAO,SAAS,WAAW,MAAM,YAAY,MAAM,UACnD,MAAM,aAAa,MAAM,cAAc,MAAM,QAAQ,GAAG;AAChF,IAAM,yBAAyB,IAAI,OAAO,SAAS,WAAW,MAAM,YAAY,GAAG;;;ACdnF,IAAM,iBAAiB;AAAA,EACrB,CAAC,8CAA8C,oCAAoC,IAAI;AAAA,EACvF,CAAC,SAAgB,OAAS,IAAI;AAAA,EAC9B,CAAC,QAAgB,OAAS,IAAI;AAAA,EAC9B,CAAC,YAAgB,KAAS,IAAI;AAAA,EAC9B,CAAC,gBAAgB,SAAS,IAAI;AAAA,EAC9B,CAAC,IAAI,OAAO,UAAU,oBAAY,KAAK,GAAG,IAAI,oBAAoB,GAAG,GAAG,MAAM,IAAI;AAAA,EAClF,CAAC,IAAI,OAAO,uBAAuB,SAAS,OAAO,GAAI,MAAM,KAAK;AACpE;AAEe,SAAR,WAA6B,OAAO,WAAW,SAAS,QAAQ;AACrE,MAAI,MAAM,MAAM,OAAO,SAAS,IAAI,MAAM,OAAO,SAAS;AAC1D,MAAI,MAAM,MAAM,OAAO,SAAS;AAGhC,MAAI,MAAM,OAAO,SAAS,IAAI,MAAM,aAAa,GAAG;AAAE,WAAO;AAAA,EAAM;AAEnE,MAAI,CAAC,MAAM,GAAG,QAAQ,MAAM;AAAE,WAAO;AAAA,EAAM;AAE3C,MAAI,MAAM,IAAI,WAAW,GAAG,MAAM,IAAa;AAAE,WAAO;AAAA,EAAM;AAE9D,MAAI,WAAW,MAAM,IAAI,MAAM,KAAK,GAAG;AAEvC,MAAI,IAAI;AACR,SAAO,IAAI,eAAe,QAAQ,KAAK;AACrC,QAAI,eAAe,CAAC,EAAE,CAAC,EAAE,KAAK,QAAQ,GAAG;AAAE;AAAA,IAAM;AAAA,EACnD;AACA,MAAI,MAAM,eAAe,QAAQ;AAAE,WAAO;AAAA,EAAM;AAEhD,MAAI,QAAQ;AAEV,WAAO,eAAe,CAAC,EAAE,CAAC;AAAA,EAC5B;AAEA,MAAI,WAAW,YAAY;AAI3B,MAAI,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,KAAK,QAAQ,GAAG;AACxC,WAAO,WAAW,SAAS,YAAY;AACrC,UAAI,MAAM,OAAO,QAAQ,IAAI,MAAM,WAAW;AAAE;AAAA,MAAM;AAEtD,YAAM,MAAM,OAAO,QAAQ,IAAI,MAAM,OAAO,QAAQ;AACpD,YAAM,MAAM,OAAO,QAAQ;AAC3B,iBAAW,MAAM,IAAI,MAAM,KAAK,GAAG;AAEnC,UAAI,eAAe,CAAC,EAAE,CAAC,EAAE,KAAK,QAAQ,GAAG;AACvC,YAAI,SAAS,WAAW,GAAG;AAAE;AAAA,QAAW;AACxC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,OAAO;AAEb,QAAM,QAAU,MAAM,KAAK,cAAc,IAAI,CAAC;AAC9C,QAAM,MAAU,CAAC,WAAW,QAAQ;AACpC,QAAM,UAAU,MAAM,SAAS,WAAW,UAAU,MAAM,WAAW,IAAI;AAEzE,SAAO;AACT;;;AChEe,SAAR,QAA0B,OAAO,WAAW,SAAS,QAAQ;AAClE,MAAI,MAAM,MAAM,OAAO,SAAS,IAAI,MAAM,OAAO,SAAS;AAC1D,MAAI,MAAM,MAAM,OAAO,SAAS;AAGhC,MAAI,MAAM,OAAO,SAAS,IAAI,MAAM,aAAa,GAAG;AAAE,WAAO;AAAA,EAAM;AAEnE,MAAI,KAAM,MAAM,IAAI,WAAW,GAAG;AAElC,MAAI,OAAO,MAAe,OAAO,KAAK;AAAE,WAAO;AAAA,EAAM;AAGrD,MAAI,QAAQ;AACZ,OAAK,MAAM,IAAI,WAAW,EAAE,GAAG;AAC/B,SAAO,OAAO,MAAe,MAAM,OAAO,SAAS,GAAG;AACpD;AACA,SAAK,MAAM,IAAI,WAAW,EAAE,GAAG;AAAA,EACjC;AAEA,MAAI,QAAQ,KAAM,MAAM,OAAO,CAAC,QAAQ,EAAE,GAAI;AAAE,WAAO;AAAA,EAAM;AAE7D,MAAI,QAAQ;AAAE,WAAO;AAAA,EAAK;AAI1B,QAAM,MAAM,eAAe,KAAK,GAAG;AACnC,QAAM,MAAM,MAAM,cAAc,KAAK,IAAM,GAAG;AAC9C,MAAI,MAAM,OAAO,QAAQ,MAAM,IAAI,WAAW,MAAM,CAAC,CAAC,GAAG;AACvD,UAAM;AAAA,EACR;AAEA,QAAM,OAAO,YAAY;AAEzB,QAAM,UAAW,MAAM,KAAK,gBAAgB,MAAM,OAAO,KAAK,GAAG,CAAC;AAClE,UAAQ,SAAS,WAAW,MAAM,GAAG,KAAK;AAC1C,UAAQ,MAAS,CAAC,WAAW,MAAM,IAAI;AAEvC,QAAM,UAAa,MAAM,KAAK,UAAU,IAAI,CAAC;AAC7C,UAAQ,UAAW,MAAM,IAAI,MAAM,KAAK,GAAG,EAAE,KAAK;AAClD,UAAQ,MAAW,CAAC,WAAW,MAAM,IAAI;AACzC,UAAQ,WAAW,CAAC;AAEpB,QAAM,UAAW,MAAM,KAAK,iBAAiB,MAAM,OAAO,KAAK,GAAG,EAAE;AACpE,UAAQ,SAAS,WAAW,MAAM,GAAG,KAAK;AAE1C,SAAO;AACT;;;AChDe,SAAR,SAA2B,OAAO,WAAW,SAAsB;AACxE,QAAM,kBAAkB,MAAM,GAAG,MAAM,MAAM,SAAS,WAAW;AAGjE,MAAI,MAAM,OAAO,SAAS,IAAI,MAAM,aAAa,GAAG;AAAE,WAAO;AAAA,EAAM;AAEnE,QAAM,gBAAgB,MAAM;AAC5B,QAAM,aAAa;AAGnB,MAAI,QAAQ;AACZ,MAAI;AACJ,MAAI,WAAW,YAAY;AAE3B,SAAO,WAAW,WAAW,CAAC,MAAM,QAAQ,QAAQ,GAAG,YAAY;AAGjE,QAAI,MAAM,OAAO,QAAQ,IAAI,MAAM,YAAY,GAAG;AAAE;AAAA,IAAS;AAK7D,QAAI,MAAM,OAAO,QAAQ,KAAK,MAAM,WAAW;AAC7C,UAAI,MAAM,MAAM,OAAO,QAAQ,IAAI,MAAM,OAAO,QAAQ;AACxD,YAAM,MAAM,MAAM,OAAO,QAAQ;AAEjC,UAAI,MAAM,KAAK;AACb,iBAAS,MAAM,IAAI,WAAW,GAAG;AAEjC,YAAI,WAAW,MAAe,WAAW,IAAa;AACpD,gBAAM,MAAM,UAAU,KAAK,MAAM;AACjC,gBAAM,MAAM,WAAW,GAAG;AAE1B,cAAI,OAAO,KAAK;AACd,oBAAS,WAAW,KAAc,IAAI;AACtC;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,QAAI,MAAM,OAAO,QAAQ,IAAI,GAAG;AAAE;AAAA,IAAS;AAG3C,QAAI,YAAY;AAChB,aAAS,IAAI,GAAG,IAAI,gBAAgB,QAAQ,IAAI,GAAG,KAAK;AACtD,UAAI,gBAAgB,CAAC,EAAE,OAAO,UAAU,SAAS,IAAI,GAAG;AACtD,oBAAY;AACZ;AAAA,MACF;AAAA,IACF;AACA,QAAI,WAAW;AAAE;AAAA,IAAM;AAAA,EACzB;AAEA,MAAI,CAAC,OAAO;AAEV,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,MAAM,SAAS,WAAW,UAAU,MAAM,WAAW,KAAK,EAAE,KAAK;AAEjF,QAAM,OAAO,WAAW;AAExB,QAAM,UAAa,MAAM,KAAK,gBAAgB,MAAM,OAAO,KAAK,GAAG,CAAC;AACpE,UAAQ,SAAW,OAAO,aAAa,MAAM;AAC7C,UAAQ,MAAW,CAAC,WAAW,MAAM,IAAI;AAEzC,QAAM,UAAa,MAAM,KAAK,UAAU,IAAI,CAAC;AAC7C,UAAQ,UAAW;AACnB,UAAQ,MAAW,CAAC,WAAW,MAAM,OAAO,CAAC;AAC7C,UAAQ,WAAW,CAAC;AAEpB,QAAM,UAAa,MAAM,KAAK,iBAAiB,MAAM,OAAO,KAAK,GAAG,EAAE;AACtE,UAAQ,SAAW,OAAO,aAAa,MAAM;AAE7C,QAAM,aAAa;AAEnB,SAAO;AACT;;;AC/Ee,SAAR,UAA4B,OAAO,WAAW,SAAS;AAC5D,QAAM,kBAAkB,MAAM,GAAG,MAAM,MAAM,SAAS,WAAW;AACjE,QAAM,gBAAgB,MAAM;AAC5B,MAAI,WAAW,YAAY;AAC3B,QAAM,aAAa;AAGnB,SAAO,WAAW,WAAW,CAAC,MAAM,QAAQ,QAAQ,GAAG,YAAY;AAGjE,QAAI,MAAM,OAAO,QAAQ,IAAI,MAAM,YAAY,GAAG;AAAE;AAAA,IAAS;AAG7D,QAAI,MAAM,OAAO,QAAQ,IAAI,GAAG;AAAE;AAAA,IAAS;AAG3C,QAAI,YAAY;AAChB,aAAS,IAAI,GAAG,IAAI,gBAAgB,QAAQ,IAAI,GAAG,KAAK;AACtD,UAAI,gBAAgB,CAAC,EAAE,OAAO,UAAU,SAAS,IAAI,GAAG;AACtD,oBAAY;AACZ;AAAA,MACF;AAAA,IACF;AACA,QAAI,WAAW;AAAE;AAAA,IAAM;AAAA,EACzB;AAEA,QAAM,UAAU,MAAM,SAAS,WAAW,UAAU,MAAM,WAAW,KAAK,EAAE,KAAK;AAEjF,QAAM,OAAO;AAEb,QAAM,UAAa,MAAM,KAAK,kBAAkB,KAAK,CAAC;AACtD,UAAQ,MAAW,CAAC,WAAW,MAAM,IAAI;AAEzC,QAAM,UAAa,MAAM,KAAK,UAAU,IAAI,CAAC;AAC7C,UAAQ,UAAW;AACnB,UAAQ,MAAW,CAAC,WAAW,MAAM,IAAI;AACzC,UAAQ,WAAW,CAAC;AAEpB,QAAM,KAAK,mBAAmB,KAAK,EAAE;AAErC,QAAM,aAAa;AAEnB,SAAO;AACT;;;ACxBA,IAAMC,UAAS;AAAA;AAAA;AAAA,EAGb,CAAC,SAAc,OAAc,CAAC,aAAa,WAAW,CAAC;AAAA,EACvD,CAAC,QAAc,IAAM;AAAA,EACrB,CAAC,SAAc,OAAc,CAAC,aAAa,aAAa,cAAc,MAAM,CAAC;AAAA,EAC7E,CAAC,cAAc,YAAc,CAAC,aAAa,aAAa,cAAc,MAAM,CAAC;AAAA,EAC7E,CAAC,MAAc,IAAc,CAAC,aAAa,aAAa,cAAc,MAAM,CAAC;AAAA,EAC7E,CAAC,QAAc,MAAc,CAAC,aAAa,aAAa,YAAY,CAAC;AAAA,EACrE,CAAC,aAAc,SAAW;AAAA,EAC1B,CAAC,cAAc,YAAc,CAAC,aAAa,aAAa,YAAY,CAAC;AAAA,EACrE,CAAC,WAAc,SAAc,CAAC,aAAa,aAAa,YAAY,CAAC;AAAA,EACrE,CAAC,YAAc,QAAU;AAAA,EACzB,CAAC,aAAc,SAAW;AAC5B;AAKA,SAAS,cAAe;AAMtB,OAAK,QAAQ,IAAI,cAAM;AAEvB,WAAS,IAAI,GAAG,IAAIA,QAAO,QAAQ,KAAK;AACtC,SAAK,MAAM,KAAKA,QAAO,CAAC,EAAE,CAAC,GAAGA,QAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAMA,QAAO,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC;AAAA,EACnF;AACF;AAIA,YAAY,UAAU,WAAW,SAAU,OAAO,WAAW,SAAS;AACpE,QAAM,QAAQ,KAAK,MAAM,SAAS,EAAE;AACpC,QAAM,MAAM,MAAM;AAClB,QAAM,aAAa,MAAM,GAAG,QAAQ;AACpC,MAAI,OAAO;AACX,MAAI,gBAAgB;AAEpB,SAAO,OAAO,SAAS;AACrB,UAAM,OAAO,OAAO,MAAM,eAAe,IAAI;AAC7C,QAAI,QAAQ,SAAS;AAAE;AAAA,IAAM;AAI7B,QAAI,MAAM,OAAO,IAAI,IAAI,MAAM,WAAW;AAAE;AAAA,IAAM;AAIlD,QAAI,MAAM,SAAS,YAAY;AAC7B,YAAM,OAAO;AACb;AAAA,IACF;AAQA,UAAM,WAAW,MAAM;AACvB,QAAI,KAAK;AAET,aAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,WAAK,MAAM,CAAC,EAAE,OAAO,MAAM,SAAS,KAAK;AACzC,UAAI,IAAI;AACN,YAAI,YAAY,MAAM,MAAM;AAC1B,gBAAM,IAAI,MAAM,wCAAwC;AAAA,QAC1D;AACA;AAAA,MACF;AAAA,IACF;AAGA,QAAI,CAAC,GAAI,OAAM,IAAI,MAAM,iCAAiC;AAI1D,UAAM,QAAQ,CAAC;AAGf,QAAI,MAAM,QAAQ,MAAM,OAAO,CAAC,GAAG;AACjC,sBAAgB;AAAA,IAClB;AAEA,WAAO,MAAM;AAEb,QAAI,OAAO,WAAW,MAAM,QAAQ,IAAI,GAAG;AACzC,sBAAgB;AAChB;AACA,YAAM,OAAO;AAAA,IACf;AAAA,EACF;AACF;AAOA,YAAY,UAAU,QAAQ,SAAU,KAAK,IAAI,KAAK,WAAW;AAC/D,MAAI,CAAC,KAAK;AAAE;AAAA,EAAO;AAEnB,QAAM,QAAQ,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK,SAAS;AAEpD,OAAK,SAAS,OAAO,MAAM,MAAM,MAAM,OAAO;AAChD;AAEA,YAAY,UAAU,QAAQ;AAE9B,IAAO,uBAAQ;;;AChIf,SAAS,YAAa,KAAK,IAAI,KAAK,WAAW;AAC7C,OAAK,MAAM;AACX,OAAK,MAAM;AACX,OAAK,KAAK;AACV,OAAK,SAAS;AACd,OAAK,cAAc,MAAM,UAAU,MAAM;AAEzC,OAAK,MAAM;AACX,OAAK,SAAS,KAAK,IAAI;AACvB,OAAK,QAAQ;AACb,OAAK,UAAU;AACf,OAAK,eAAe;AAIpB,OAAK,QAAQ,CAAC;AAGd,OAAK,aAAa,CAAC;AAGnB,OAAK,mBAAmB,CAAC;AAGzB,OAAK,YAAY,CAAC;AAClB,OAAK,mBAAmB;AAIxB,OAAK,YAAY;AACnB;AAIA,YAAY,UAAU,cAAc,WAAY;AAC9C,QAAM,QAAQ,IAAI,cAAM,QAAQ,IAAI,CAAC;AACrC,QAAM,UAAU,KAAK;AACrB,QAAM,QAAQ,KAAK;AACnB,OAAK,OAAO,KAAK,KAAK;AACtB,OAAK,UAAU;AACf,SAAO;AACT;AAKA,YAAY,UAAU,OAAO,SAAU,MAAM,KAAK,SAAS;AACzD,MAAI,KAAK,SAAS;AAChB,SAAK,YAAY;AAAA,EACnB;AAEA,QAAM,QAAQ,IAAI,cAAM,MAAM,KAAK,OAAO;AAC1C,MAAI,aAAa;AAEjB,MAAI,UAAU,GAAG;AAEf,SAAK;AACL,SAAK,aAAa,KAAK,iBAAiB,IAAI;AAAA,EAC9C;AAEA,QAAM,QAAQ,KAAK;AAEnB,MAAI,UAAU,GAAG;AAEf,SAAK;AACL,SAAK,iBAAiB,KAAK,KAAK,UAAU;AAC1C,SAAK,aAAa,CAAC;AACnB,iBAAa,EAAE,YAAY,KAAK,WAAW;AAAA,EAC7C;AAEA,OAAK,eAAe,KAAK;AACzB,OAAK,OAAO,KAAK,KAAK;AACtB,OAAK,YAAY,KAAK,UAAU;AAChC,SAAO;AACT;AAQA,YAAY,UAAU,aAAa,SAAU,OAAO,cAAc;AAChE,QAAM,MAAM,KAAK;AACjB,QAAM,SAAS,KAAK,IAAI,WAAW,KAAK;AAGxC,QAAM,WAAW,QAAQ,IAAI,KAAK,IAAI,WAAW,QAAQ,CAAC,IAAI;AAE9D,MAAI,MAAM;AACV,SAAO,MAAM,OAAO,KAAK,IAAI,WAAW,GAAG,MAAM,QAAQ;AAAE;AAAA,EAAM;AAEjE,QAAM,QAAQ,MAAM;AAGpB,QAAM,WAAW,MAAM,MAAM,KAAK,IAAI,WAAW,GAAG,IAAI;AAExD,QAAM,kBAAkB,eAAe,QAAQ,KAAK,YAAY,OAAO,aAAa,QAAQ,CAAC;AAC7F,QAAM,kBAAkB,eAAe,QAAQ,KAAK,YAAY,OAAO,aAAa,QAAQ,CAAC;AAE7F,QAAM,mBAAmB,aAAa,QAAQ;AAC9C,QAAM,mBAAmB,aAAa,QAAQ;AAE9C,QAAM,gBACJ,CAAC,qBAAqB,CAAC,mBAAmB,oBAAoB;AAChE,QAAM,iBACJ,CAAC,qBAAqB,CAAC,mBAAmB,oBAAoB;AAEhE,QAAM,WAAY,kBAAmB,gBAAgB,CAAC,kBAAkB;AACxE,QAAM,YAAY,mBAAmB,gBAAgB,CAAC,iBAAkB;AAExE,SAAO,EAAE,UAAU,WAAW,QAAQ,MAAM;AAC9C;AAGA,YAAY,UAAU,QAAQ;AAE9B,IAAO,uBAAQ;;;AChHf,SAAS,iBAAkB,IAAI;AAC7B,UAAQ,IAAI;AAAA,IACV,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEe,SAAR,KAAuB,OAAO,QAAQ;AAC3C,MAAI,MAAM,MAAM;AAEhB,SAAO,MAAM,MAAM,UAAU,CAAC,iBAAiB,MAAM,IAAI,WAAW,GAAG,CAAC,GAAG;AACzE;AAAA,EACF;AAEA,MAAI,QAAQ,MAAM,KAAK;AAAE,WAAO;AAAA,EAAM;AAEtC,MAAI,CAAC,QAAQ;AAAE,UAAM,WAAW,MAAM,IAAI,MAAM,MAAM,KAAK,GAAG;AAAA,EAAE;AAEhE,QAAM,MAAM;AAEZ,SAAO;AACT;;;ACpDA,IAAM,YAAY;AAEH,SAARC,SAA0B,OAAO,QAAQ;AAC9C,MAAI,CAAC,MAAM,GAAG,QAAQ,QAAS,QAAO;AACtC,MAAI,MAAM,YAAY,EAAG,QAAO;AAEhC,QAAM,MAAM,MAAM;AAClB,QAAM,MAAM,MAAM;AAElB,MAAI,MAAM,IAAI,IAAK,QAAO;AAC1B,MAAI,MAAM,IAAI,WAAW,GAAG,MAAM,GAAa,QAAO;AACtD,MAAI,MAAM,IAAI,WAAW,MAAM,CAAC,MAAM,GAAa,QAAO;AAC1D,MAAI,MAAM,IAAI,WAAW,MAAM,CAAC,MAAM,GAAa,QAAO;AAE1D,QAAMC,SAAQ,MAAM,QAAQ,MAAM,SAAS;AAC3C,MAAI,CAACA,OAAO,QAAO;AAEnB,QAAM,QAAQA,OAAM,CAAC;AAErB,QAAMC,QAAO,MAAM,GAAG,QAAQ,aAAa,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,CAAC;AAC9E,MAAI,CAACA,MAAM,QAAO;AAElB,MAAI,MAAMA,MAAK;AAIf,MAAI,IAAI,UAAU,MAAM,OAAQ,QAAO;AAIvC,MAAI,SAAS,IAAI;AACjB,SAAO,SAAS,KAAK,IAAI,WAAW,SAAS,CAAC,MAAM,IAAa;AAC/D;AAAA,EACF;AACA,MAAI,WAAW,IAAI,QAAQ;AACzB,UAAM,IAAI,MAAM,GAAG,MAAM;AAAA,EAC3B;AAEA,QAAM,UAAU,MAAM,GAAG,cAAc,GAAG;AAC1C,MAAI,CAAC,MAAM,GAAG,aAAa,OAAO,EAAG,QAAO;AAE5C,MAAI,CAAC,QAAQ;AACX,UAAM,UAAU,MAAM,QAAQ,MAAM,GAAG,CAAC,MAAM,MAAM;AAEpD,UAAM,UAAU,MAAM,KAAK,aAAa,KAAK,CAAC;AAC9C,YAAQ,QAAQ,CAAC,CAAC,QAAQ,OAAO,CAAC;AAClC,YAAQ,SAAS;AACjB,YAAQ,OAAO;AAEf,UAAM,UAAU,MAAM,KAAK,QAAQ,IAAI,CAAC;AACxC,YAAQ,UAAU,MAAM,GAAG,kBAAkB,GAAG;AAEhD,UAAM,UAAU,MAAM,KAAK,cAAc,KAAK,EAAE;AAChD,YAAQ,SAAS;AACjB,YAAQ,OAAO;AAAA,EACjB;AAEA,QAAM,OAAO,IAAI,SAAS,MAAM;AAChC,SAAO;AACT;;;AC1De,SAAR,QAA0B,OAAO,QAAQ;AAC9C,MAAI,MAAM,MAAM;AAEhB,MAAI,MAAM,IAAI,WAAW,GAAG,MAAM,IAAc;AAAE,WAAO;AAAA,EAAM;AAE/D,QAAM,OAAO,MAAM,QAAQ,SAAS;AACpC,QAAM,MAAM,MAAM;AAMlB,MAAI,CAAC,QAAQ;AACX,QAAI,QAAQ,KAAK,MAAM,QAAQ,WAAW,IAAI,MAAM,IAAM;AACxD,UAAI,QAAQ,KAAK,MAAM,QAAQ,WAAW,OAAO,CAAC,MAAM,IAAM;AAE5D,YAAI,KAAK,OAAO;AAChB,eAAO,MAAM,KAAK,MAAM,QAAQ,WAAW,KAAK,CAAC,MAAM,GAAM;AAE7D,cAAM,UAAU,MAAM,QAAQ,MAAM,GAAG,EAAE;AACzC,cAAM,KAAK,aAAa,MAAM,CAAC;AAAA,MACjC,OAAO;AACL,cAAM,UAAU,MAAM,QAAQ,MAAM,GAAG,EAAE;AACzC,cAAM,KAAK,aAAa,MAAM,CAAC;AAAA,MACjC;AAAA,IACF,OAAO;AACL,YAAM,KAAK,aAAa,MAAM,CAAC;AAAA,IACjC;AAAA,EACF;AAEA;AAGA,SAAO,MAAM,OAAO,QAAQ,MAAM,IAAI,WAAW,GAAG,CAAC,GAAG;AAAE;AAAA,EAAM;AAEhE,QAAM,MAAM;AACZ,SAAO;AACT;;;ACrCA,IAAM,UAAU,CAAC;AAEjB,SAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAAE,UAAQ,KAAK,CAAC;AAAE;AAEhD,qCACG,MAAM,EAAE,EAAE,QAAQ,SAAU,IAAI;AAAE,UAAQ,GAAG,WAAW,CAAC,CAAC,IAAI;AAAE,CAAC;AAErD,SAARC,QAAyB,OAAO,QAAQ;AAC7C,MAAI,MAAM,MAAM;AAChB,QAAM,MAAM,MAAM;AAElB,MAAI,MAAM,IAAI,WAAW,GAAG,MAAM,GAAa,QAAO;AACtD;AAGA,MAAI,OAAO,IAAK,QAAO;AAEvB,MAAI,MAAM,MAAM,IAAI,WAAW,GAAG;AAElC,MAAI,QAAQ,IAAM;AAChB,QAAI,CAAC,QAAQ;AACX,YAAM,KAAK,aAAa,MAAM,CAAC;AAAA,IACjC;AAEA;AAEA,WAAO,MAAM,KAAK;AAChB,YAAM,MAAM,IAAI,WAAW,GAAG;AAC9B,UAAI,CAAC,QAAQ,GAAG,EAAG;AACnB;AAAA,IACF;AAEA,UAAM,MAAM;AACZ,WAAO;AAAA,EACT;AAEA,MAAI,aAAa,MAAM,IAAI,GAAG;AAE9B,MAAI,OAAO,SAAU,OAAO,SAAU,MAAM,IAAI,KAAK;AACnD,UAAM,MAAM,MAAM,IAAI,WAAW,MAAM,CAAC;AAExC,QAAI,OAAO,SAAU,OAAO,OAAQ;AAClC,oBAAc,MAAM,IAAI,MAAM,CAAC;AAC/B;AAAA,IACF;AAAA,EACF;AAEA,QAAM,UAAU,OAAO;AAEvB,MAAI,CAAC,QAAQ;AACX,UAAM,QAAQ,MAAM,KAAK,gBAAgB,IAAI,CAAC;AAE9C,QAAI,MAAM,OAAO,QAAQ,GAAG,MAAM,GAAG;AACnC,YAAM,UAAU;AAAA,IAClB,OAAO;AACL,YAAM,UAAU;AAAA,IAClB;AAEA,UAAM,SAAS;AACf,UAAM,OAAS;AAAA,EACjB;AAEA,QAAM,MAAM,MAAM;AAClB,SAAO;AACT;;;AClEe,SAAR,SAA2B,OAAO,QAAQ;AAC/C,MAAI,MAAM,MAAM;AAChB,QAAM,KAAK,MAAM,IAAI,WAAW,GAAG;AAEnC,MAAI,OAAO,IAAa;AAAE,WAAO;AAAA,EAAM;AAEvC,QAAM,QAAQ;AACd;AACA,QAAM,MAAM,MAAM;AAGlB,SAAO,MAAM,OAAO,MAAM,IAAI,WAAW,GAAG,MAAM,IAAa;AAAE;AAAA,EAAM;AAEvE,QAAM,SAAS,MAAM,IAAI,MAAM,OAAO,GAAG;AACzC,QAAM,eAAe,OAAO;AAE5B,MAAI,MAAM,qBAAqB,MAAM,UAAU,YAAY,KAAK,MAAM,OAAO;AAC3E,QAAI,CAAC,OAAQ,OAAM,WAAW;AAC9B,UAAM,OAAO;AACb,WAAO;AAAA,EACT;AAEA,MAAI,WAAW;AACf,MAAI;AAGJ,UAAQ,aAAa,MAAM,IAAI,QAAQ,KAAK,QAAQ,OAAO,IAAI;AAC7D,eAAW,aAAa;AAGxB,WAAO,WAAW,OAAO,MAAM,IAAI,WAAW,QAAQ,MAAM,IAAa;AAAE;AAAA,IAAW;AAEtF,UAAM,eAAe,WAAW;AAEhC,QAAI,iBAAiB,cAAc;AAEjC,UAAI,CAAC,QAAQ;AACX,cAAM,QAAQ,MAAM,KAAK,eAAe,QAAQ,CAAC;AACjD,cAAM,SAAS;AACf,cAAM,UAAU,MAAM,IAAI,MAAM,KAAK,UAAU,EAC5C,QAAQ,OAAO,GAAG,EAClB,QAAQ,YAAY,IAAI;AAAA,MAC7B;AACA,YAAM,MAAM;AACZ,aAAO;AAAA,IACT;AAGA,UAAM,UAAU,YAAY,IAAI;AAAA,EAClC;AAGA,QAAM,mBAAmB;AAEzB,MAAI,CAAC,OAAQ,OAAM,WAAW;AAC9B,QAAM,OAAO;AACb,SAAO;AACT;;;ACtDA,SAAS,uBAAwB,OAAO,QAAQ;AAC9C,QAAM,QAAQ,MAAM;AACpB,QAAM,SAAS,MAAM,IAAI,WAAW,KAAK;AAEzC,MAAI,QAAQ;AAAE,WAAO;AAAA,EAAM;AAE3B,MAAI,WAAW,KAAa;AAAE,WAAO;AAAA,EAAM;AAE3C,QAAM,UAAU,MAAM,WAAW,MAAM,KAAK,IAAI;AAChD,MAAI,MAAM,QAAQ;AAClB,QAAM,KAAK,OAAO,aAAa,MAAM;AAErC,MAAI,MAAM,GAAG;AAAE,WAAO;AAAA,EAAM;AAE5B,MAAI;AAEJ,MAAI,MAAM,GAAG;AACX,YAAgB,MAAM,KAAK,QAAQ,IAAI,CAAC;AACxC,UAAM,UAAU;AAChB;AAAA,EACF;AAEA,WAAS,IAAI,GAAG,IAAI,KAAK,KAAK,GAAG;AAC/B,YAAgB,MAAM,KAAK,QAAQ,IAAI,CAAC;AACxC,UAAM,UAAU,KAAK;AAErB,UAAM,WAAW,KAAK;AAAA,MACpB;AAAA,MACA,QAAQ;AAAA;AAAA,MACR,OAAO,MAAM,OAAO,SAAS;AAAA,MAC7B,KAAK;AAAA,MACL,MAAM,QAAQ;AAAA,MACd,OAAO,QAAQ;AAAA,IACjB,CAAC;AAAA,EACH;AAEA,QAAM,OAAO,QAAQ;AAErB,SAAO;AACT;AAEA,SAAS,YAAa,OAAO,YAAY;AACvC,MAAI;AACJ,QAAM,cAAc,CAAC;AACrB,QAAM,MAAM,WAAW;AAEvB,WAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,UAAM,aAAa,WAAW,CAAC;AAE/B,QAAI,WAAW,WAAW,KAAa;AACrC;AAAA,IACF;AAEA,QAAI,WAAW,QAAQ,IAAI;AACzB;AAAA,IACF;AAEA,UAAM,WAAW,WAAW,WAAW,GAAG;AAE1C,YAAgB,MAAM,OAAO,WAAW,KAAK;AAC7C,UAAM,OAAU;AAChB,UAAM,MAAU;AAChB,UAAM,UAAU;AAChB,UAAM,SAAU;AAChB,UAAM,UAAU;AAEhB,YAAgB,MAAM,OAAO,SAAS,KAAK;AAC3C,UAAM,OAAU;AAChB,UAAM,MAAU;AAChB,UAAM,UAAU;AAChB,UAAM,SAAU;AAChB,UAAM,UAAU;AAEhB,QAAI,MAAM,OAAO,SAAS,QAAQ,CAAC,EAAE,SAAS,UAC1C,MAAM,OAAO,SAAS,QAAQ,CAAC,EAAE,YAAY,KAAK;AACpD,kBAAY,KAAK,SAAS,QAAQ,CAAC;AAAA,IACrC;AAAA,EACF;AAQA,SAAO,YAAY,QAAQ;AACzB,UAAM,IAAI,YAAY,IAAI;AAC1B,QAAI,IAAI,IAAI;AAEZ,WAAO,IAAI,MAAM,OAAO,UAAU,MAAM,OAAO,CAAC,EAAE,SAAS,WAAW;AACpE;AAAA,IACF;AAEA;AAEA,QAAI,MAAM,GAAG;AACX,cAAQ,MAAM,OAAO,CAAC;AACtB,YAAM,OAAO,CAAC,IAAI,MAAM,OAAO,CAAC;AAChC,YAAM,OAAO,CAAC,IAAI;AAAA,IACpB;AAAA,EACF;AACF;AAIA,SAAS,0BAA2B,OAAO;AACzC,QAAM,cAAc,MAAM;AAC1B,QAAM,MAAM,MAAM,YAAY;AAE9B,cAAY,OAAO,MAAM,UAAU;AAEnC,WAAS,OAAO,GAAG,OAAO,KAAK,QAAQ;AACrC,QAAI,YAAY,IAAI,KAAK,YAAY,IAAI,EAAE,YAAY;AACrD,kBAAY,OAAO,YAAY,IAAI,EAAE,UAAU;AAAA,IACjD;AAAA,EACF;AACF;AAEA,IAAO,wBAAQ;AAAA,EACb,UAAU;AAAA,EACV,aAAa;AACf;;;ACzHA,SAAS,kBAAmB,OAAO,QAAQ;AACzC,QAAM,QAAQ,MAAM;AACpB,QAAM,SAAS,MAAM,IAAI,WAAW,KAAK;AAEzC,MAAI,QAAQ;AAAE,WAAO;AAAA,EAAM;AAE3B,MAAI,WAAW,MAAgB,WAAW,IAAc;AAAE,WAAO;AAAA,EAAM;AAEvE,QAAM,UAAU,MAAM,WAAW,MAAM,KAAK,WAAW,EAAI;AAE3D,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAM,QAAQ,MAAM,KAAK,QAAQ,IAAI,CAAC;AACtC,UAAM,UAAU,OAAO,aAAa,MAAM;AAE1C,UAAM,WAAW,KAAK;AAAA;AAAA;AAAA,MAGpB;AAAA;AAAA;AAAA,MAIA,QAAQ,QAAQ;AAAA;AAAA;AAAA,MAIhB,OAAO,MAAM,OAAO,SAAS;AAAA;AAAA;AAAA;AAAA,MAK7B,KAAK;AAAA;AAAA;AAAA;AAAA,MAKL,MAAM,QAAQ;AAAA,MACd,OAAO,QAAQ;AAAA,IACjB,CAAC;AAAA,EACH;AAEA,QAAM,OAAO,QAAQ;AAErB,SAAO;AACT;AAEA,SAASC,aAAa,OAAO,YAAY;AACvC,QAAM,MAAM,WAAW;AAEvB,WAAS,IAAI,MAAM,GAAG,KAAK,GAAG,KAAK;AACjC,UAAM,aAAa,WAAW,CAAC;AAE/B,QAAI,WAAW,WAAW,MAAe,WAAW,WAAW,IAAa;AAC1E;AAAA,IACF;AAGA,QAAI,WAAW,QAAQ,IAAI;AACzB;AAAA,IACF;AAEA,UAAM,WAAW,WAAW,WAAW,GAAG;AAO1C,UAAM,WAAW,IAAI,KACV,WAAW,IAAI,CAAC,EAAE,QAAQ,WAAW,MAAM;AAAA,IAE3C,WAAW,IAAI,CAAC,EAAE,WAAW,WAAW,UACxC,WAAW,IAAI,CAAC,EAAE,UAAU,WAAW,QAAQ;AAAA,IAE/C,WAAW,WAAW,MAAM,CAAC,EAAE,UAAU,SAAS,QAAQ;AAErE,UAAM,KAAK,OAAO,aAAa,WAAW,MAAM;AAEhD,UAAM,UAAY,MAAM,OAAO,WAAW,KAAK;AAC/C,YAAQ,OAAU,WAAW,gBAAgB;AAC7C,YAAQ,MAAU,WAAW,WAAW;AACxC,YAAQ,UAAU;AAClB,YAAQ,SAAU,WAAW,KAAK,KAAK;AACvC,YAAQ,UAAU;AAElB,UAAM,UAAY,MAAM,OAAO,SAAS,KAAK;AAC7C,YAAQ,OAAU,WAAW,iBAAiB;AAC9C,YAAQ,MAAU,WAAW,WAAW;AACxC,YAAQ,UAAU;AAClB,YAAQ,SAAU,WAAW,KAAK,KAAK;AACvC,YAAQ,UAAU;AAElB,QAAI,UAAU;AACZ,YAAM,OAAO,WAAW,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU;AAChD,YAAM,OAAO,WAAW,WAAW,MAAM,CAAC,EAAE,KAAK,EAAE,UAAU;AAC7D;AAAA,IACF;AAAA,EACF;AACF;AAIA,SAAS,sBAAuB,OAAO;AACrC,QAAM,cAAc,MAAM;AAC1B,QAAM,MAAM,MAAM,YAAY;AAE9B,EAAAA,aAAY,OAAO,MAAM,UAAU;AAEnC,WAAS,OAAO,GAAG,OAAO,KAAK,QAAQ;AACrC,QAAI,YAAY,IAAI,KAAK,YAAY,IAAI,EAAE,YAAY;AACrD,MAAAA,aAAY,OAAO,YAAY,IAAI,EAAE,UAAU;AAAA,IACjD;AAAA,EACF;AACF;AAEA,IAAO,mBAAQ;AAAA,EACb,UAAU;AAAA,EACV,aAAa;AACf;;;ACtHe,SAAR,KAAuB,OAAO,QAAQ;AAC3C,MAAIC,OAAM,OAAO,KAAK;AACtB,MAAI,OAAO;AACX,MAAI,QAAQ;AACZ,MAAI,QAAQ,MAAM;AAClB,MAAI,iBAAiB;AAErB,MAAI,MAAM,IAAI,WAAW,MAAM,GAAG,MAAM,IAAa;AAAE,WAAO;AAAA,EAAM;AAEpE,QAAM,SAAS,MAAM;AACrB,QAAM,MAAM,MAAM;AAClB,QAAM,aAAa,MAAM,MAAM;AAC/B,QAAM,WAAW,MAAM,GAAG,QAAQ,eAAe,OAAO,MAAM,KAAK,IAAI;AAGvE,MAAI,WAAW,GAAG;AAAE,WAAO;AAAA,EAAM;AAEjC,MAAI,MAAM,WAAW;AACrB,MAAI,MAAM,OAAO,MAAM,IAAI,WAAW,GAAG,MAAM,IAAa;AAM1D,qBAAiB;AAIjB;AACA,WAAO,MAAM,KAAK,OAAO;AACvB,MAAAA,QAAO,MAAM,IAAI,WAAW,GAAG;AAC/B,UAAI,CAAC,QAAQA,KAAI,KAAKA,UAAS,IAAM;AAAE;AAAA,MAAM;AAAA,IAC/C;AACA,QAAI,OAAO,KAAK;AAAE,aAAO;AAAA,IAAM;AAI/B,YAAQ;AACR,UAAM,MAAM,GAAG,QAAQ,qBAAqB,MAAM,KAAK,KAAK,MAAM,MAAM;AACxE,QAAI,IAAI,IAAI;AACV,aAAO,MAAM,GAAG,cAAc,IAAI,GAAG;AACrC,UAAI,MAAM,GAAG,aAAa,IAAI,GAAG;AAC/B,cAAM,IAAI;AAAA,MACZ,OAAO;AACL,eAAO;AAAA,MACT;AAIA,cAAQ;AACR,aAAO,MAAM,KAAK,OAAO;AACvB,QAAAA,QAAO,MAAM,IAAI,WAAW,GAAG;AAC/B,YAAI,CAAC,QAAQA,KAAI,KAAKA,UAAS,IAAM;AAAE;AAAA,QAAM;AAAA,MAC/C;AAIA,YAAM,MAAM,GAAG,QAAQ,eAAe,MAAM,KAAK,KAAK,MAAM,MAAM;AAClE,UAAI,MAAM,OAAO,UAAU,OAAO,IAAI,IAAI;AACxC,gBAAQ,IAAI;AACZ,cAAM,IAAI;AAIV,eAAO,MAAM,KAAK,OAAO;AACvB,UAAAA,QAAO,MAAM,IAAI,WAAW,GAAG;AAC/B,cAAI,CAAC,QAAQA,KAAI,KAAKA,UAAS,IAAM;AAAE;AAAA,UAAM;AAAA,QAC/C;AAAA,MACF;AAAA,IACF;AAEA,QAAI,OAAO,OAAO,MAAM,IAAI,WAAW,GAAG,MAAM,IAAa;AAE3D,uBAAiB;AAAA,IACnB;AACA;AAAA,EACF;AAEA,MAAI,gBAAgB;AAIlB,QAAI,OAAO,MAAM,IAAI,eAAe,aAAa;AAAE,aAAO;AAAA,IAAM;AAEhE,QAAI,MAAM,OAAO,MAAM,IAAI,WAAW,GAAG,MAAM,IAAa;AAC1D,cAAQ,MAAM;AACd,YAAM,MAAM,GAAG,QAAQ,eAAe,OAAO,GAAG;AAChD,UAAI,OAAO,GAAG;AACZ,gBAAQ,MAAM,IAAI,MAAM,OAAO,KAAK;AAAA,MACtC,OAAO;AACL,cAAM,WAAW;AAAA,MACnB;AAAA,IACF,OAAO;AACL,YAAM,WAAW;AAAA,IACnB;AAIA,QAAI,CAAC,OAAO;AAAE,cAAQ,MAAM,IAAI,MAAM,YAAY,QAAQ;AAAA,IAAE;AAE5D,UAAM,MAAM,IAAI,WAAW,mBAAmB,KAAK,CAAC;AACpD,QAAI,CAAC,KAAK;AACR,YAAM,MAAM;AACZ,aAAO;AAAA,IACT;AACA,WAAO,IAAI;AACX,YAAQ,IAAI;AAAA,EACd;AAMA,MAAI,CAAC,QAAQ;AACX,UAAM,MAAM;AACZ,UAAM,SAAS;AAEf,UAAM,UAAU,MAAM,KAAK,aAAa,KAAK,CAAC;AAC9C,UAAMC,SAAQ,CAAC,CAAC,QAAQ,IAAI,CAAC;AAC7B,YAAQ,QAASA;AACjB,QAAI,OAAO;AACT,MAAAA,OAAM,KAAK,CAAC,SAAS,KAAK,CAAC;AAAA,IAC7B;AAEA,UAAM;AACN,UAAM,GAAG,OAAO,SAAS,KAAK;AAC9B,UAAM;AAEN,UAAM,KAAK,cAAc,KAAK,EAAE;AAAA,EAClC;AAEA,QAAM,MAAM;AACZ,QAAM,SAAS;AACf,SAAO;AACT;;;ACtIe,SAAR,MAAwB,OAAO,QAAQ;AAC5C,MAAIC,OAAM,SAAS,OAAO,KAAK,KAAK,KAAK,OAAO;AAChD,MAAI,OAAO;AACX,QAAM,SAAS,MAAM;AACrB,QAAM,MAAM,MAAM;AAElB,MAAI,MAAM,IAAI,WAAW,MAAM,GAAG,MAAM,IAAa;AAAE,WAAO;AAAA,EAAM;AACpE,MAAI,MAAM,IAAI,WAAW,MAAM,MAAM,CAAC,MAAM,IAAa;AAAE,WAAO;AAAA,EAAM;AAExE,QAAM,aAAa,MAAM,MAAM;AAC/B,QAAM,WAAW,MAAM,GAAG,QAAQ,eAAe,OAAO,MAAM,MAAM,GAAG,KAAK;AAG5E,MAAI,WAAW,GAAG;AAAE,WAAO;AAAA,EAAM;AAEjC,QAAM,WAAW;AACjB,MAAI,MAAM,OAAO,MAAM,IAAI,WAAW,GAAG,MAAM,IAAa;AAO1D;AACA,WAAO,MAAM,KAAK,OAAO;AACvB,MAAAA,QAAO,MAAM,IAAI,WAAW,GAAG;AAC/B,UAAI,CAAC,QAAQA,KAAI,KAAKA,UAAS,IAAM;AAAE;AAAA,MAAM;AAAA,IAC/C;AACA,QAAI,OAAO,KAAK;AAAE,aAAO;AAAA,IAAM;AAI/B,YAAQ;AACR,UAAM,MAAM,GAAG,QAAQ,qBAAqB,MAAM,KAAK,KAAK,MAAM,MAAM;AACxE,QAAI,IAAI,IAAI;AACV,aAAO,MAAM,GAAG,cAAc,IAAI,GAAG;AACrC,UAAI,MAAM,GAAG,aAAa,IAAI,GAAG;AAC/B,cAAM,IAAI;AAAA,MACZ,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF;AAIA,YAAQ;AACR,WAAO,MAAM,KAAK,OAAO;AACvB,MAAAA,QAAO,MAAM,IAAI,WAAW,GAAG;AAC/B,UAAI,CAAC,QAAQA,KAAI,KAAKA,UAAS,IAAM;AAAE;AAAA,MAAM;AAAA,IAC/C;AAIA,UAAM,MAAM,GAAG,QAAQ,eAAe,MAAM,KAAK,KAAK,MAAM,MAAM;AAClE,QAAI,MAAM,OAAO,UAAU,OAAO,IAAI,IAAI;AACxC,cAAQ,IAAI;AACZ,YAAM,IAAI;AAIV,aAAO,MAAM,KAAK,OAAO;AACvB,QAAAA,QAAO,MAAM,IAAI,WAAW,GAAG;AAC/B,YAAI,CAAC,QAAQA,KAAI,KAAKA,UAAS,IAAM;AAAE;AAAA,QAAM;AAAA,MAC/C;AAAA,IACF,OAAO;AACL,cAAQ;AAAA,IACV;AAEA,QAAI,OAAO,OAAO,MAAM,IAAI,WAAW,GAAG,MAAM,IAAa;AAC3D,YAAM,MAAM;AACZ,aAAO;AAAA,IACT;AACA;AAAA,EACF,OAAO;AAIL,QAAI,OAAO,MAAM,IAAI,eAAe,aAAa;AAAE,aAAO;AAAA,IAAM;AAEhE,QAAI,MAAM,OAAO,MAAM,IAAI,WAAW,GAAG,MAAM,IAAa;AAC1D,cAAQ,MAAM;AACd,YAAM,MAAM,GAAG,QAAQ,eAAe,OAAO,GAAG;AAChD,UAAI,OAAO,GAAG;AACZ,gBAAQ,MAAM,IAAI,MAAM,OAAO,KAAK;AAAA,MACtC,OAAO;AACL,cAAM,WAAW;AAAA,MACnB;AAAA,IACF,OAAO;AACL,YAAM,WAAW;AAAA,IACnB;AAIA,QAAI,CAAC,OAAO;AAAE,cAAQ,MAAM,IAAI,MAAM,YAAY,QAAQ;AAAA,IAAE;AAE5D,UAAM,MAAM,IAAI,WAAW,mBAAmB,KAAK,CAAC;AACpD,QAAI,CAAC,KAAK;AACR,YAAM,MAAM;AACZ,aAAO;AAAA,IACT;AACA,WAAO,IAAI;AACX,YAAQ,IAAI;AAAA,EACd;AAMA,MAAI,CAAC,QAAQ;AACX,cAAU,MAAM,IAAI,MAAM,YAAY,QAAQ;AAE9C,UAAM,SAAS,CAAC;AAChB,UAAM,GAAG,OAAO;AAAA,MACd;AAAA,MACA,MAAM;AAAA,MACN,MAAM;AAAA,MACN;AAAA,IACF;AAEA,UAAM,QAAQ,MAAM,KAAK,SAAS,OAAO,CAAC;AAC1C,UAAMC,SAAQ,CAAC,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;AACzC,UAAM,QAAQA;AACd,UAAM,WAAW;AACjB,UAAM,UAAU;AAEhB,QAAI,OAAO;AACT,MAAAA,OAAM,KAAK,CAAC,SAAS,KAAK,CAAC;AAAA,IAC7B;AAAA,EACF;AAEA,QAAM,MAAM;AACZ,QAAM,SAAS;AACf,SAAO;AACT;;;ACtIA,IAAM,WAAc;AAEpB,IAAM,cAAc;AAEL,SAAR,SAA2B,OAAO,QAAQ;AAC/C,MAAI,MAAM,MAAM;AAEhB,MAAI,MAAM,IAAI,WAAW,GAAG,MAAM,IAAa;AAAE,WAAO;AAAA,EAAM;AAE9D,QAAM,QAAQ,MAAM;AACpB,QAAM,MAAM,MAAM;AAElB,aAAS;AACP,QAAI,EAAE,OAAO,IAAK,QAAO;AAEzB,UAAM,KAAK,MAAM,IAAI,WAAW,GAAG;AAEnC,QAAI,OAAO,GAAc,QAAO;AAChC,QAAI,OAAO,GAAc;AAAA,EAC3B;AAEA,QAAM,MAAM,MAAM,IAAI,MAAM,QAAQ,GAAG,GAAG;AAE1C,MAAI,YAAY,KAAK,GAAG,GAAG;AACzB,UAAM,UAAU,MAAM,GAAG,cAAc,GAAG;AAC1C,QAAI,CAAC,MAAM,GAAG,aAAa,OAAO,GAAG;AAAE,aAAO;AAAA,IAAM;AAEpD,QAAI,CAAC,QAAQ;AACX,YAAM,UAAY,MAAM,KAAK,aAAa,KAAK,CAAC;AAChD,cAAQ,QAAU,CAAC,CAAC,QAAQ,OAAO,CAAC;AACpC,cAAQ,SAAU;AAClB,cAAQ,OAAU;AAElB,YAAM,UAAY,MAAM,KAAK,QAAQ,IAAI,CAAC;AAC1C,cAAQ,UAAU,MAAM,GAAG,kBAAkB,GAAG;AAEhD,YAAM,UAAY,MAAM,KAAK,cAAc,KAAK,EAAE;AAClD,cAAQ,SAAU;AAClB,cAAQ,OAAU;AAAA,IACpB;AAEA,UAAM,OAAO,IAAI,SAAS;AAC1B,WAAO;AAAA,EACT;AAEA,MAAI,SAAS,KAAK,GAAG,GAAG;AACtB,UAAM,UAAU,MAAM,GAAG,cAAc,YAAY,GAAG;AACtD,QAAI,CAAC,MAAM,GAAG,aAAa,OAAO,GAAG;AAAE,aAAO;AAAA,IAAM;AAEpD,QAAI,CAAC,QAAQ;AACX,YAAM,UAAY,MAAM,KAAK,aAAa,KAAK,CAAC;AAChD,cAAQ,QAAU,CAAC,CAAC,QAAQ,OAAO,CAAC;AACpC,cAAQ,SAAU;AAClB,cAAQ,OAAU;AAElB,YAAM,UAAY,MAAM,KAAK,QAAQ,IAAI,CAAC;AAC1C,cAAQ,UAAU,MAAM,GAAG,kBAAkB,GAAG;AAEhD,YAAM,UAAY,MAAM,KAAK,cAAc,KAAK,EAAE;AAClD,cAAQ,SAAU;AAClB,cAAQ,OAAU;AAAA,IACpB;AAEA,UAAM,OAAO,IAAI,SAAS;AAC1B,WAAO;AAAA,EACT;AAEA,SAAO;AACT;;;ACnEA,SAASC,YAAY,KAAK;AACxB,SAAO,YAAY,KAAK,GAAG;AAC7B;AACA,SAASC,aAAa,KAAK;AACzB,SAAO,aAAa,KAAK,GAAG;AAC9B;AAEA,SAAS,SAAU,IAAI;AAErB,QAAM,KAAK,KAAK;AAChB,SAAQ,MAAM,MAAiB,MAAM;AACvC;AAEe,SAAR,YAA8B,OAAO,QAAQ;AAClD,MAAI,CAAC,MAAM,GAAG,QAAQ,MAAM;AAAE,WAAO;AAAA,EAAM;AAG3C,QAAM,MAAM,MAAM;AAClB,QAAM,MAAM,MAAM;AAClB,MAAI,MAAM,IAAI,WAAW,GAAG,MAAM,MAC9B,MAAM,KAAK,KAAK;AAClB,WAAO;AAAA,EACT;AAGA,QAAM,KAAK,MAAM,IAAI,WAAW,MAAM,CAAC;AACvC,MAAI,OAAO,MACP,OAAO,MACP,OAAO,MACP,CAAC,SAAS,EAAE,GAAG;AACjB,WAAO;AAAA,EACT;AAEA,QAAMC,SAAQ,MAAM,IAAI,MAAM,GAAG,EAAE,MAAM,WAAW;AACpD,MAAI,CAACA,QAAO;AAAE,WAAO;AAAA,EAAM;AAE3B,MAAI,CAAC,QAAQ;AACX,UAAM,QAAQ,MAAM,KAAK,eAAe,IAAI,CAAC;AAC7C,UAAM,UAAUA,OAAM,CAAC;AAEvB,QAAIF,YAAW,MAAM,OAAO,EAAI,OAAM;AACtC,QAAIC,aAAY,MAAM,OAAO,EAAG,OAAM;AAAA,EACxC;AACA,QAAM,OAAOC,OAAM,CAAC,EAAE;AACtB,SAAO;AACT;;;AC5CA,IAAM,aAAa;AACnB,IAAM,WAAa;AAEJ,SAAR,OAAyB,OAAO,QAAQ;AAC7C,QAAM,MAAM,MAAM;AAClB,QAAM,MAAM,MAAM;AAElB,MAAI,MAAM,IAAI,WAAW,GAAG,MAAM,GAAa,QAAO;AAEtD,MAAI,MAAM,KAAK,IAAK,QAAO;AAE3B,QAAM,KAAK,MAAM,IAAI,WAAW,MAAM,CAAC;AAEvC,MAAI,OAAO,IAAc;AACvB,UAAMC,SAAQ,MAAM,IAAI,MAAM,GAAG,EAAE,MAAM,UAAU;AACnD,QAAIA,QAAO;AACT,UAAI,CAAC,QAAQ;AACX,cAAMC,QAAOD,OAAM,CAAC,EAAE,CAAC,EAAE,YAAY,MAAM,MAAM,SAASA,OAAM,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,SAASA,OAAM,CAAC,GAAG,EAAE;AAExG,cAAM,QAAU,MAAM,KAAK,gBAAgB,IAAI,CAAC;AAChD,cAAM,UAAU,kBAAkBC,KAAI,IAAIC,eAAcD,KAAI,IAAIC,eAAc,KAAM;AACpF,cAAM,SAAUF,OAAM,CAAC;AACvB,cAAM,OAAU;AAAA,MAClB;AACA,YAAM,OAAOA,OAAM,CAAC,EAAE;AACtB,aAAO;AAAA,IACT;AAAA,EACF,OAAO;AACL,UAAMA,SAAQ,MAAM,IAAI,MAAM,GAAG,EAAE,MAAM,QAAQ;AACjD,QAAIA,QAAO;AACT,YAAM,UAAU,WAAWA,OAAM,CAAC,CAAC;AACnC,UAAI,YAAYA,OAAM,CAAC,GAAG;AACxB,YAAI,CAAC,QAAQ;AACX,gBAAM,QAAU,MAAM,KAAK,gBAAgB,IAAI,CAAC;AAChD,gBAAM,UAAU;AAChB,gBAAM,SAAUA,OAAM,CAAC;AACvB,gBAAM,OAAU;AAAA,QAClB;AACA,cAAM,OAAOA,OAAM,CAAC,EAAE;AACtB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;;;AC/CA,SAAS,kBAAmB,YAAY;AACtC,QAAM,gBAAgB,CAAC;AACvB,QAAM,MAAM,WAAW;AAEvB,MAAI,CAAC,IAAK;AAGV,MAAI,YAAY;AAChB,MAAI,eAAe;AACnB,QAAM,QAAQ,CAAC;AAEf,WAAS,YAAY,GAAG,YAAY,KAAK,aAAa;AACpD,UAAM,SAAS,WAAW,SAAS;AAEnC,UAAM,KAAK,CAAC;AAMZ,QAAI,WAAW,SAAS,EAAE,WAAW,OAAO,UAAU,iBAAiB,OAAO,QAAQ,GAAG;AACvF,kBAAY;AAAA,IACd;AAEA,mBAAe,OAAO;AAMtB,WAAO,SAAS,OAAO,UAAU;AAEjC,QAAI,CAAC,OAAO,MAAO;AAOnB,QAAI,CAAC,cAAc,eAAe,OAAO,MAAM,GAAG;AAChD,oBAAc,OAAO,MAAM,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,IACxD;AAEA,UAAM,eAAe,cAAc,OAAO,MAAM,GAAG,OAAO,OAAO,IAAI,KAAM,OAAO,SAAS,CAAE;AAE7F,QAAI,YAAY,YAAY,MAAM,SAAS,IAAI;AAE/C,QAAI,kBAAkB;AAEtB,WAAO,YAAY,cAAc,aAAa,MAAM,SAAS,IAAI,GAAG;AAClE,YAAM,SAAS,WAAW,SAAS;AAEnC,UAAI,OAAO,WAAW,OAAO,OAAQ;AAErC,UAAI,OAAO,QAAQ,OAAO,MAAM,GAAG;AACjC,YAAI,aAAa;AASjB,YAAI,OAAO,SAAS,OAAO,MAAM;AAC/B,eAAK,OAAO,SAAS,OAAO,UAAU,MAAM,GAAG;AAC7C,gBAAI,OAAO,SAAS,MAAM,KAAK,OAAO,SAAS,MAAM,GAAG;AACtD,2BAAa;AAAA,YACf;AAAA,UACF;AAAA,QACF;AAEA,YAAI,CAAC,YAAY;AAKf,gBAAM,WAAW,YAAY,KAAK,CAAC,WAAW,YAAY,CAAC,EAAE,OACzD,MAAM,YAAY,CAAC,IAAI,IACvB;AAEJ,gBAAM,SAAS,IAAI,YAAY,YAAY;AAC3C,gBAAM,SAAS,IAAI;AAEnB,iBAAO,OAAQ;AACf,iBAAO,MAAQ;AACf,iBAAO,QAAQ;AACf,4BAAkB;AAGlB,yBAAe;AACf;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,oBAAoB,IAAI;AAQ1B,oBAAc,OAAO,MAAM,GAAG,OAAO,OAAO,IAAI,MAAO,OAAO,UAAU,KAAK,CAAE,IAAI;AAAA,IACrF;AAAA,EACF;AACF;AAEe,SAAR,WAA6B,OAAO;AACzC,QAAM,cAAc,MAAM;AAC1B,QAAM,MAAM,MAAM,YAAY;AAE9B,oBAAkB,MAAM,UAAU;AAElC,WAAS,OAAO,GAAG,OAAO,KAAK,QAAQ;AACrC,QAAI,YAAY,IAAI,KAAK,YAAY,IAAI,EAAE,YAAY;AACrD,wBAAkB,YAAY,IAAI,EAAE,UAAU;AAAA,IAChD;AAAA,EACF;AACF;;;AClHe,SAAR,eAAiC,OAAO;AAC7C,MAAI,MAAM;AACV,MAAI,QAAQ;AACZ,QAAM,SAAS,MAAM;AACrB,QAAM,MAAM,MAAM,OAAO;AAEzB,OAAK,OAAO,OAAO,GAAG,OAAO,KAAK,QAAQ;AAGxC,QAAI,OAAO,IAAI,EAAE,UAAU,EAAG;AAC9B,WAAO,IAAI,EAAE,QAAQ;AACrB,QAAI,OAAO,IAAI,EAAE,UAAU,EAAG;AAE9B,QAAI,OAAO,IAAI,EAAE,SAAS,UACtB,OAAO,IAAI,OACX,OAAO,OAAO,CAAC,EAAE,SAAS,QAAQ;AAEpC,aAAO,OAAO,CAAC,EAAE,UAAU,OAAO,IAAI,EAAE,UAAU,OAAO,OAAO,CAAC,EAAE;AAAA,IACrE,OAAO;AACL,UAAI,SAAS,MAAM;AAAE,eAAO,IAAI,IAAI,OAAO,IAAI;AAAA,MAAE;AAEjD;AAAA,IACF;AAAA,EACF;AAEA,MAAI,SAAS,MAAM;AACjB,WAAO,SAAS;AAAA,EAClB;AACF;;;ACVA,IAAMG,UAAS;AAAA,EACb,CAAC,QAAmB,IAAM;AAAA,EAC1B,CAAC,WAAmBC,QAAS;AAAA,EAC7B,CAAC,WAAmB,OAAS;AAAA,EAC7B,CAAC,UAAmBC,OAAQ;AAAA,EAC5B,CAAC,aAAmB,QAAW;AAAA,EAC/B,CAAC,iBAAmB,sBAAgB,QAAQ;AAAA,EAC5C,CAAC,YAAmB,iBAAW,QAAQ;AAAA,EACvC,CAAC,QAAmB,IAAM;AAAA,EAC1B,CAAC,SAAmB,KAAO;AAAA,EAC3B,CAAC,YAAmB,QAAU;AAAA,EAC9B,CAAC,eAAmB,WAAa;AAAA,EACjC,CAAC,UAAmB,MAAQ;AAC9B;AAOA,IAAMC,WAAU;AAAA,EACd,CAAC,iBAAmB,UAAe;AAAA,EACnC,CAAC,iBAAmB,sBAAgB,WAAW;AAAA,EAC/C,CAAC,YAAmB,iBAAW,WAAW;AAAA;AAAA;AAAA,EAG1C,CAAC,kBAAmB,cAAgB;AACtC;AAKA,SAAS,eAAgB;AAMvB,OAAK,QAAQ,IAAI,cAAM;AAEvB,WAAS,IAAI,GAAG,IAAIH,QAAO,QAAQ,KAAK;AACtC,SAAK,MAAM,KAAKA,QAAO,CAAC,EAAE,CAAC,GAAGA,QAAO,CAAC,EAAE,CAAC,CAAC;AAAA,EAC5C;AAQA,OAAK,SAAS,IAAI,cAAM;AAExB,WAAS,IAAI,GAAG,IAAIG,SAAQ,QAAQ,KAAK;AACvC,SAAK,OAAO,KAAKA,SAAQ,CAAC,EAAE,CAAC,GAAGA,SAAQ,CAAC,EAAE,CAAC,CAAC;AAAA,EAC/C;AACF;AAKA,aAAa,UAAU,YAAY,SAAU,OAAO;AAClD,QAAM,MAAM,MAAM;AAClB,QAAM,QAAQ,KAAK,MAAM,SAAS,EAAE;AACpC,QAAM,MAAM,MAAM;AAClB,QAAM,aAAa,MAAM,GAAG,QAAQ;AACpC,QAAM,QAAQ,MAAM;AAEpB,MAAI,OAAO,MAAM,GAAG,MAAM,aAAa;AACrC,UAAM,MAAM,MAAM,GAAG;AACrB;AAAA,EACF;AAEA,MAAI,KAAK;AAET,MAAI,MAAM,QAAQ,YAAY;AAC5B,aAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAK5B,YAAM;AACN,WAAK,MAAM,CAAC,EAAE,OAAO,IAAI;AACzB,YAAM;AAEN,UAAI,IAAI;AACN,YAAI,OAAO,MAAM,KAAK;AAAE,gBAAM,IAAI,MAAM,wCAAwC;AAAA,QAAE;AAClF;AAAA,MACF;AAAA,IACF;AAAA,EACF,OAAO;AAYL,UAAM,MAAM,MAAM;AAAA,EACpB;AAEA,MAAI,CAAC,IAAI;AAAE,UAAM;AAAA,EAAM;AACvB,QAAM,GAAG,IAAI,MAAM;AACrB;AAIA,aAAa,UAAU,WAAW,SAAU,OAAO;AACjD,QAAM,QAAQ,KAAK,MAAM,SAAS,EAAE;AACpC,QAAM,MAAM,MAAM;AAClB,QAAM,MAAM,MAAM;AAClB,QAAM,aAAa,MAAM,GAAG,QAAQ;AAEpC,SAAO,MAAM,MAAM,KAAK;AAOtB,UAAM,UAAU,MAAM;AACtB,QAAI,KAAK;AAET,QAAI,MAAM,QAAQ,YAAY;AAC5B,eAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,aAAK,MAAM,CAAC,EAAE,OAAO,KAAK;AAC1B,YAAI,IAAI;AACN,cAAI,WAAW,MAAM,KAAK;AAAE,kBAAM,IAAI,MAAM,wCAAwC;AAAA,UAAE;AACtF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,IAAI;AACN,UAAI,MAAM,OAAO,KAAK;AAAE;AAAA,MAAM;AAC9B;AAAA,IACF;AAEA,UAAM,WAAW,MAAM,IAAI,MAAM,KAAK;AAAA,EACxC;AAEA,MAAI,MAAM,SAAS;AACjB,UAAM,YAAY;AAAA,EACpB;AACF;AAOA,aAAa,UAAU,QAAQ,SAAU,KAAK,IAAI,KAAK,WAAW;AAChE,QAAM,QAAQ,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK,SAAS;AAEpD,OAAK,SAAS,KAAK;AAEnB,QAAM,QAAQ,KAAK,OAAO,SAAS,EAAE;AACrC,QAAM,MAAM,MAAM;AAElB,WAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,UAAM,CAAC,EAAE,KAAK;AAAA,EAChB;AACF;AAEA,aAAa,UAAU,QAAQ;AAE/B,IAAO,wBAAQ;;;AClMA,SAAR,WAAkB,MAAM;AAC7B,QAAM,KAAK,CAAC;AACZ,SAAO,QAAQ,CAAC;AAEhB,KAAG,UAAU,cAAI;AACjB,KAAG,SAASC,eAAG;AACf,KAAG,QAAQA,eAAE;AACb,KAAG,QAAQA,eAAE;AAGb,KAAG,WAAW,CAAC,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,EAAE,KAAK,GAAG;AAGtD,KAAG,UAAU,CAAC,GAAG,OAAO,GAAG,MAAM,EAAE,KAAK,GAAG;AAI3C,QAAM,kBAAkB;AAKxB,KAAG,oBAAoB,WAAW,kBAAkB,MAAM,GAAG,WAAW,MAAM,GAAG,UAAU;AAI3F,KAAG,UAED;AAGF,KAAG,WAAW,cAAc,GAAG,UAAU;AAEzC,KAAG,WAED;AAEF,KAAG,sBAED,UAAU,kBAAkB,MAAM,GAAG,WAAW,UACvC,KAAK,KAAK,IAAI,aAAa,QAAQ,yBAAyB,GAAG,WAAW;AAErF,KAAG,WAED,mBAGc,GAAG,UAAU,MAAM,kBAAkB,sCAC/B,GAAG,UAAU,0BACb,GAAG,UAAU,0BACb,GAAG,UAAU,0BACb,GAAG,UAAU,0BACb,GAAG,UAAU,uBAGhB,GAAG,oBAAoB,uCAYvB,GAAG,UAAU,cACvB,KAAK,KAAK,IACP,+BACA;AAAA,EAGJ,SAAS,GAAG,UAAU,aAGb,GAAG,UAAU,gBAGV,GAAG,UAAU,mBAEd,GAAG,UAAU;AAOhC,KAAG,iBAED;AAEF,KAAG,SAED;AAKF,KAAG;AAAA,EAGD,QACE,GAAG,SACH,MACA,GAAG,oBAAoB;AAG3B,KAAG,aAED,QACE,GAAG,SACH,SACQ,GAAG,oBAAoB,UAEvB,GAAG,oBAAoB,UAAU,GAAG,oBAAoB,YAAY,GAAG,oBAAoB;AAGvG,KAAG,WAED,iBAIgB,GAAG,aAAa,WAAW,GAAG,aAAwB;AAGxE,KAAG,iBAED,QACE,GAAG,UACL,eACgB,GAAG,aAAa;AAGlC,KAAG,uBAED,cAAc,GAAG,aAAa;AAEhC,KAAG,kBAED,GAAG,WAAW,GAAG;AAEnB,KAAG,wBAED,GAAG,iBAAiB,GAAG;AAEzB,KAAG,uBAED,GAAG,WAAW,GAAG,WAAW,GAAG;AAEjC,KAAG,6BAED,GAAG,iBAAiB,GAAG,WAAW,GAAG;AAEvC,KAAG,mCAED,GAAG,uBAAuB,GAAG,WAAW,GAAG;AAO7C,KAAG,sBAED,wDAAwD,GAAG,WAAW;AAExE,KAAG,kBAEC,QAAQ,kBAAkB,YAAY,GAAG,UAAU,OAC7C,GAAG,iBAAiB,MAAM,GAAG,wBAAwB;AAE/D,KAAG;AAAA;AAAA,EAGC,0CAA0C,GAAG,WAAW,4BAC9B,GAAG,6BAA6B,GAAG,WAAW;AAE5E,KAAG;AAAA;AAAA,EAGC,0CAA0C,GAAG,WAAW,4BAC9B,GAAG,mCAAmC,GAAG,WAAW;AAElF,SAAO;AACT;;;ACpLA,SAASC,QAAQ,KAAoC;AACnD,QAAM,UAAU,MAAM,UAAU,MAAM,KAAK,WAAW,CAAC;AAEvD,UAAQ,QAAQ,SAAU,QAAQ;AAChC,QAAI,CAAC,QAAQ;AAAE;AAAA,IAAO;AAEtB,WAAO,KAAK,MAAM,EAAE,QAAQ,SAAU,KAAK;AACzC,UAAI,GAAG,IAAI,OAAO,GAAG;AAAA,IACvB,CAAC;AAAA,EACH,CAAC;AAED,SAAO;AACT;AAEA,SAASC,QAAQ,KAAK;AAAE,SAAO,OAAO,UAAU,SAAS,KAAK,GAAG;AAAE;AACnE,SAASC,UAAU,KAAK;AAAE,SAAOD,QAAO,GAAG,MAAM;AAAkB;AACnE,SAAS,SAAU,KAAK;AAAE,SAAOA,QAAO,GAAG,MAAM;AAAkB;AACnE,SAAS,SAAU,KAAK;AAAE,SAAOA,QAAO,GAAG,MAAM;AAAkB;AACnE,SAAS,WAAY,KAAK;AAAE,SAAOA,QAAO,GAAG,MAAM;AAAoB;AAEvE,SAASE,UAAU,KAAK;AAAE,SAAO,IAAI,QAAQ,wBAAwB,MAAM;AAAE;AAI7E,IAAM,iBAAiB;AAAA,EACrB,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,SAAS;AACX;AAEA,SAAS,aAAc,KAAK;AAC1B,SAAO,OAAO,KAAK,OAAO,CAAC,CAAC,EAAE,OAAO,SAAU,KAAK,GAAG;AAErD,WAAO,OAAO,eAAe,eAAe,CAAC;AAAA,EAC/C,GAAG,KAAK;AACV;AAEA,IAAM,iBAAiB;AAAA,EACrB,SAAS;AAAA,IACP,UAAU,SAAUC,OAAM,KAAK,MAAM;AACnC,YAAM,OAAOA,MAAK,MAAM,GAAG;AAE3B,UAAI,CAAC,KAAK,GAAG,MAAM;AAEjB,aAAK,GAAG,OAAO,IAAI;AAAA,UACjB,YAAY,KAAK,GAAG,WAAW,KAAK,GAAG,uBAAuB,KAAK,GAAG;AAAA,UAAU;AAAA,QAClF;AAAA,MACF;AACA,UAAI,KAAK,GAAG,KAAK,KAAK,IAAI,GAAG;AAC3B,eAAO,KAAK,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC,EAAE;AAAA,MACrC;AACA,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,MAAM;AAAA,IACJ,UAAU,SAAUA,OAAM,KAAK,MAAM;AACnC,YAAM,OAAOA,MAAK,MAAM,GAAG;AAE3B,UAAI,CAAC,KAAK,GAAG,SAAS;AAEpB,aAAK,GAAG,UAAU,IAAI;AAAA,UACpB,MACA,KAAK,GAAG;AAAA;AAAA,UAGR,wBAAwB,KAAK,GAAG,aAAa,WAAW,KAAK,GAAG,kBAAkB,MAClF,KAAK,GAAG,WACR,KAAK,GAAG,sBACR,KAAK,GAAG;AAAA,UAER;AAAA,QACF;AAAA,MACF;AAEA,UAAI,KAAK,GAAG,QAAQ,KAAK,IAAI,GAAG;AAE9B,YAAI,OAAO,KAAKA,MAAK,MAAM,CAAC,MAAM,KAAK;AAAE,iBAAO;AAAA,QAAE;AAClD,YAAI,OAAO,KAAKA,MAAK,MAAM,CAAC,MAAM,KAAK;AAAE,iBAAO;AAAA,QAAE;AAClD,eAAO,KAAK,MAAM,KAAK,GAAG,OAAO,EAAE,CAAC,EAAE;AAAA,MACxC;AACA,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,UAAU,SAAUA,OAAM,KAAK,MAAM;AACnC,YAAM,OAAOA,MAAK,MAAM,GAAG;AAE3B,UAAI,CAAC,KAAK,GAAG,QAAQ;AACnB,aAAK,GAAG,SAAS,IAAI;AAAA,UACnB,MAAM,KAAK,GAAG,iBAAiB,MAAM,KAAK,GAAG;AAAA,UAAiB;AAAA,QAChE;AAAA,MACF;AACA,UAAI,KAAK,GAAG,OAAO,KAAK,IAAI,GAAG;AAC7B,eAAO,KAAK,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,EAAE;AAAA,MACvC;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAIA,IAAM,kBAAkB;AAGxB,IAAM,eAAe,wFAA8E,MAAM,GAAG;AAE5G,SAAS,eAAgB,MAAM;AAC7B,OAAK,YAAY;AACjB,OAAK,iBAAiB;AACxB;AAEA,SAAS,gBAAiB,IAAI;AAC5B,SAAO,SAAUA,OAAM,KAAK;AAC1B,UAAM,OAAOA,MAAK,MAAM,GAAG;AAE3B,QAAI,GAAG,KAAK,IAAI,GAAG;AACjB,aAAO,KAAK,MAAM,EAAE,EAAE,CAAC,EAAE;AAAA,IAC3B;AACA,WAAO;AAAA,EACT;AACF;AAEA,SAAS,mBAAoB;AAC3B,SAAO,SAAUC,QAAO,MAAM;AAC5B,SAAK,UAAUA,MAAK;AAAA,EACtB;AACF;AAIA,SAAS,QAAS,MAAM;AAEtB,QAAM,KAAK,KAAK,KAAK,WAAU,KAAK,QAAQ;AAG5C,QAAMC,QAAO,KAAK,SAAS,MAAM;AAEjC,OAAK,UAAU;AAEf,MAAI,CAAC,KAAK,mBAAmB;AAC3B,IAAAA,MAAK,KAAK,eAAe;AAAA,EAC3B;AACA,EAAAA,MAAK,KAAK,GAAG,MAAM;AAEnB,KAAG,WAAWA,MAAK,KAAK,GAAG;AAE3B,WAAS,MAAO,KAAK;AAAE,WAAO,IAAI,QAAQ,UAAU,GAAG,QAAQ;AAAA,EAAE;AAEjE,KAAG,cAAc,OAAO,MAAM,GAAG,eAAe,GAAG,GAAG;AACtD,KAAG,aAAa,OAAO,MAAM,GAAG,cAAc,GAAG,GAAG;AACpD,KAAG,mBAAmB,OAAO,MAAM,GAAG,oBAAoB,GAAG,GAAG;AAChE,KAAG,kBAAkB,OAAO,MAAM,GAAG,mBAAmB,GAAG,GAAG;AAM9D,QAAM,UAAU,CAAC;AAEjB,OAAK,eAAe,CAAC;AAErB,WAAS,YAAa,MAAM,KAAK;AAC/B,UAAM,IAAI,MAAM,iCAAiC,OAAO,QAAQ,GAAG;AAAA,EACrE;AAEA,SAAO,KAAK,KAAK,WAAW,EAAE,QAAQ,SAAU,MAAM;AACpD,UAAM,MAAM,KAAK,YAAY,IAAI;AAGjC,QAAI,QAAQ,MAAM;AAAE;AAAA,IAAO;AAE3B,UAAM,WAAW,EAAE,UAAU,MAAM,MAAM,KAAK;AAE9C,SAAK,aAAa,IAAI,IAAI;AAE1B,QAAI,SAAS,GAAG,GAAG;AACjB,UAAI,SAAS,IAAI,QAAQ,GAAG;AAC1B,iBAAS,WAAW,gBAAgB,IAAI,QAAQ;AAAA,MAClD,WAAW,WAAW,IAAI,QAAQ,GAAG;AACnC,iBAAS,WAAW,IAAI;AAAA,MAC1B,OAAO;AACL,oBAAY,MAAM,GAAG;AAAA,MACvB;AAEA,UAAI,WAAW,IAAI,SAAS,GAAG;AAC7B,iBAAS,YAAY,IAAI;AAAA,MAC3B,WAAW,CAAC,IAAI,WAAW;AACzB,iBAAS,YAAY,iBAAiB;AAAA,MACxC,OAAO;AACL,oBAAY,MAAM,GAAG;AAAA,MACvB;AAEA;AAAA,IACF;AAEA,QAAIJ,UAAS,GAAG,GAAG;AACjB,cAAQ,KAAK,IAAI;AACjB;AAAA,IACF;AAEA,gBAAY,MAAM,GAAG;AAAA,EACvB,CAAC;AAMD,UAAQ,QAAQ,SAAU,OAAO;AAC/B,QAAI,CAAC,KAAK,aAAa,KAAK,YAAY,KAAK,CAAC,GAAG;AAG/C;AAAA,IACF;AAEA,SAAK,aAAa,KAAK,EAAE,WACvB,KAAK,aAAa,KAAK,YAAY,KAAK,CAAC,EAAE;AAC7C,SAAK,aAAa,KAAK,EAAE,YACvB,KAAK,aAAa,KAAK,YAAY,KAAK,CAAC,EAAE;AAAA,EAC/C,CAAC;AAKD,OAAK,aAAa,EAAE,IAAI,EAAE,UAAU,MAAM,WAAW,iBAAiB,EAAE;AAKxE,QAAM,QAAQ,OAAO,KAAK,KAAK,YAAY,EACxC,OAAO,SAAU,MAAM;AAEtB,WAAO,KAAK,SAAS,KAAK,KAAK,aAAa,IAAI;AAAA,EAClD,CAAC,EACA,IAAIC,SAAQ,EACZ,KAAK,GAAG;AAEX,OAAK,GAAG,cAAc,OAAO,2BAA2B,GAAG,WAAW,QAAQ,QAAQ,KAAK,GAAG;AAC9F,OAAK,GAAG,gBAAgB,OAAO,2BAA2B,GAAG,WAAW,QAAQ,QAAQ,KAAK,IAAI;AACjG,OAAK,GAAG,kBAAkB,OAAO,MAAM,KAAK,GAAG,cAAc,QAAQ,GAAG;AAExE,OAAK,GAAG,UAAU;AAAA,IAChB,MAAM,KAAK,GAAG,YAAY,SAAS,QAAQ,KAAK,GAAG,gBAAgB,SAAS;AAAA,IAC5E;AAAA,EACF;AAMA,iBAAe,IAAI;AACrB;AAOA,SAAS,MAAO,MAAM,OAAO;AAC3B,QAAM,QAAQ,KAAK;AACnB,QAAM,MAAM,KAAK;AACjB,QAAMC,QAAO,KAAK,eAAe,MAAM,OAAO,GAAG;AAOjD,OAAK,SAAS,KAAK,WAAW,YAAY;AAM1C,OAAK,QAAQ,QAAQ;AAMrB,OAAK,YAAY,MAAM;AAMvB,OAAK,MAAMA;AAMX,OAAK,OAAOA;AAMZ,OAAK,MAAMA;AACb;AAEA,SAAS,YAAa,MAAM,OAAO;AACjC,QAAMC,SAAQ,IAAI,MAAM,MAAM,KAAK;AAEnC,OAAK,aAAaA,OAAM,MAAM,EAAE,UAAUA,QAAO,IAAI;AAErD,SAAOA;AACT;AAwCA,SAAS,UAAW,SAAS,SAAS;AACpC,MAAI,EAAE,gBAAgB,YAAY;AAChC,WAAO,IAAI,UAAU,SAAS,OAAO;AAAA,EACvC;AAEA,MAAI,CAAC,SAAS;AACZ,QAAI,aAAa,OAAO,GAAG;AACzB,gBAAU;AACV,gBAAU,CAAC;AAAA,IACb;AAAA,EACF;AAEA,OAAK,WAAWL,QAAO,CAAC,GAAG,gBAAgB,OAAO;AAGlD,OAAK,YAAY;AACjB,OAAK,iBAAiB;AACtB,OAAK,aAAa;AAClB,OAAK,iBAAiB;AAEtB,OAAK,cAAcA,QAAO,CAAC,GAAG,gBAAgB,OAAO;AACrD,OAAK,eAAe,CAAC;AAErB,OAAK,WAAW;AAChB,OAAK,oBAAoB;AAEzB,OAAK,KAAK,CAAC;AAEX,UAAQ,IAAI;AACd;AASA,UAAU,UAAU,MAAM,SAAS,IAAKO,SAAQ,YAAY;AAC1D,OAAK,YAAYA,OAAM,IAAI;AAC3B,UAAQ,IAAI;AACZ,SAAO;AACT;AAQA,UAAU,UAAU,MAAM,SAAS,IAAK,SAAS;AAC/C,OAAK,WAAWP,QAAO,KAAK,UAAU,OAAO;AAC7C,SAAO;AACT;AAOA,UAAU,UAAU,OAAO,SAAS,KAAMI,OAAM;AAE9C,OAAK,iBAAiBA;AACtB,OAAK,YAAY;AAEjB,MAAI,CAACA,MAAK,QAAQ;AAAE,WAAO;AAAA,EAAM;AAEjC,MAAI,GAAG,IAAI,IAAI,KAAK,OAAO,MAAM,IAAI,SAAS;AAG9C,MAAI,KAAK,GAAG,YAAY,KAAKA,KAAI,GAAG;AAClC,SAAK,KAAK,GAAG;AACb,OAAG,YAAY;AACf,YAAQ,IAAI,GAAG,KAAKA,KAAI,OAAO,MAAM;AACnC,YAAM,KAAK,aAAaA,OAAM,EAAE,CAAC,GAAG,GAAG,SAAS;AAChD,UAAI,KAAK;AACP,aAAK,aAAa,EAAE,CAAC;AACrB,aAAK,YAAY,EAAE,QAAQ,EAAE,CAAC,EAAE;AAChC,aAAK,iBAAiB,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS;AAC9C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,KAAK,SAAS,aAAa,KAAK,aAAa,OAAO,GAAG;AAEzD,cAAUA,MAAK,OAAO,KAAK,GAAG,eAAe;AAC7C,QAAI,WAAW,GAAG;AAEhB,UAAI,KAAK,YAAY,KAAK,UAAU,KAAK,WAAW;AAClD,aAAK,KAAKA,MAAK,MAAM,KAAK,SAAS,UAAU,KAAK,GAAG,aAAa,KAAK,GAAG,gBAAgB,OAAO,MAAM;AACrG,kBAAQ,GAAG,QAAQ,GAAG,CAAC,EAAE;AAEzB,cAAI,KAAK,YAAY,KAAK,QAAQ,KAAK,WAAW;AAChD,iBAAK,aAAa;AAClB,iBAAK,YAAY;AACjB,iBAAK,iBAAiB,GAAG,QAAQ,GAAG,CAAC,EAAE;AAAA,UACzC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,KAAK,SAAS,cAAc,KAAK,aAAa,SAAS,GAAG;AAE5D,aAASA,MAAK,QAAQ,GAAG;AACzB,QAAI,UAAU,GAAG;AAGf,WAAK,KAAKA,MAAK,MAAM,KAAK,GAAG,WAAW,OAAO,MAAM;AACnD,gBAAQ,GAAG,QAAQ,GAAG,CAAC,EAAE;AACzB,eAAO,GAAG,QAAQ,GAAG,CAAC,EAAE;AAExB,YAAI,KAAK,YAAY,KAAK,QAAQ,KAAK,aAClC,UAAU,KAAK,aAAa,OAAO,KAAK,gBAAiB;AAC5D,eAAK,aAAa;AAClB,eAAK,YAAY;AACjB,eAAK,iBAAiB;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO,KAAK,aAAa;AAC3B;AASA,UAAU,UAAU,UAAU,SAAS,QAASA,OAAM;AACpD,SAAO,KAAK,GAAG,QAAQ,KAAKA,KAAI;AAClC;AAWA,UAAU,UAAU,eAAe,SAAS,aAAcA,OAAMG,SAAQ,KAAK;AAE3E,MAAI,CAAC,KAAK,aAAaA,QAAO,YAAY,CAAC,GAAG;AAC5C,WAAO;AAAA,EACT;AACA,SAAO,KAAK,aAAaA,QAAO,YAAY,CAAC,EAAE,SAASH,OAAM,KAAK,IAAI;AACzE;AAkBA,UAAU,UAAU,QAAQ,SAAS,MAAOA,OAAM;AAChD,QAAM,SAAS,CAAC;AAChB,MAAI,QAAQ;AAGZ,MAAI,KAAK,aAAa,KAAK,KAAK,mBAAmBA,OAAM;AACvD,WAAO,KAAK,YAAY,MAAM,KAAK,CAAC;AACpC,YAAQ,KAAK;AAAA,EACf;AAGA,MAAI,OAAO,QAAQA,MAAK,MAAM,KAAK,IAAIA;AAGvC,SAAO,KAAK,KAAK,IAAI,GAAG;AACtB,WAAO,KAAK,YAAY,MAAM,KAAK,CAAC;AAEpC,WAAO,KAAK,MAAM,KAAK,cAAc;AACrC,aAAS,KAAK;AAAA,EAChB;AAEA,MAAI,OAAO,QAAQ;AACjB,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAQA,UAAU,UAAU,eAAe,SAAS,aAAcA,OAAM;AAE9D,OAAK,iBAAiBA;AACtB,OAAK,YAAY;AAEjB,MAAI,CAACA,MAAK,OAAQ,QAAO;AAEzB,QAAM,IAAI,KAAK,GAAG,gBAAgB,KAAKA,KAAI;AAC3C,MAAI,CAAC,EAAG,QAAO;AAEf,QAAM,MAAM,KAAK,aAAaA,OAAM,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM;AACrD,MAAI,CAAC,IAAK,QAAO;AAEjB,OAAK,aAAa,EAAE,CAAC;AACrB,OAAK,YAAY,EAAE,QAAQ,EAAE,CAAC,EAAE;AAChC,OAAK,iBAAiB,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS;AAE9C,SAAO,YAAY,MAAM,CAAC;AAC5B;AAiBA,UAAU,UAAU,OAAO,SAAS,KAAMI,OAAM,SAAS;AACvD,EAAAA,QAAO,MAAM,QAAQA,KAAI,IAAIA,QAAO,CAACA,KAAI;AAEzC,MAAI,CAAC,SAAS;AACZ,SAAK,WAAWA,MAAK,MAAM;AAC3B,SAAK,oBAAoB;AACzB,YAAQ,IAAI;AACZ,WAAO;AAAA,EACT;AAEA,OAAK,WAAW,KAAK,SAAS,OAAOA,KAAI,EACtC,KAAK,EACL,OAAO,SAAU,IAAI,KAAK,KAAK;AAC9B,WAAO,OAAO,IAAI,MAAM,CAAC;AAAA,EAC3B,CAAC,EACA,QAAQ;AAEX,UAAQ,IAAI;AACZ,SAAO;AACT;AAOA,UAAU,UAAU,YAAY,SAASC,WAAWJ,QAAO;AAIzD,MAAI,CAACA,OAAM,QAAQ;AAAE,IAAAA,OAAM,MAAM,YAAYA,OAAM;AAAA,EAAI;AAEvD,MAAIA,OAAM,WAAW,aAAa,CAAC,YAAY,KAAKA,OAAM,GAAG,GAAG;AAC9D,IAAAA,OAAM,MAAM,YAAYA,OAAM;AAAA,EAChC;AACF;AAOA,UAAU,UAAU,YAAY,SAAS,YAAa;AACtD;AAEA,IAAO,qBAAQ;;;AC9nBf,IAAM,SAAS;AAGf,IAAM,OAAO;AACb,IAAM,OAAO;AACb,IAAM,OAAO;AACb,IAAM,OAAO;AACb,IAAM,OAAO;AACb,IAAM,cAAc;AACpB,IAAM,WAAW;AACjB,IAAM,YAAY;AAGlB,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AACtB,IAAM,kBAAkB;AAGxB,IAAM,SAAS;AAAA,EACd,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,iBAAiB;AAClB;AAGA,IAAM,gBAAgB,OAAO;AAC7B,IAAM,QAAQ,KAAK;AACnB,IAAM,qBAAqB,OAAO;AAUlC,SAAS,MAAM,MAAM;AACpB,QAAM,IAAI,WAAW,OAAO,IAAI,CAAC;AAClC;AAUA,SAAS,IAAI,OAAO,UAAU;AAC7B,QAAM,SAAS,CAAC;AAChB,MAAI,SAAS,MAAM;AACnB,SAAO,UAAU;AAChB,WAAO,MAAM,IAAI,SAAS,MAAM,MAAM,CAAC;AAAA,EACxC;AACA,SAAO;AACR;AAYA,SAAS,UAAU,QAAQ,UAAU;AACpC,QAAM,QAAQ,OAAO,MAAM,GAAG;AAC9B,MAAI,SAAS;AACb,MAAI,MAAM,SAAS,GAAG;AAGrB,aAAS,MAAM,CAAC,IAAI;AACpB,aAAS,MAAM,CAAC;AAAA,EACjB;AAEA,WAAS,OAAO,QAAQ,iBAAiB,GAAM;AAC/C,QAAM,SAAS,OAAO,MAAM,GAAG;AAC/B,QAAM,UAAU,IAAI,QAAQ,QAAQ,EAAE,KAAK,GAAG;AAC9C,SAAO,SAAS;AACjB;AAeA,SAAS,WAAW,QAAQ;AAC3B,QAAM,SAAS,CAAC;AAChB,MAAI,UAAU;AACd,QAAM,SAAS,OAAO;AACtB,SAAO,UAAU,QAAQ;AACxB,UAAM,QAAQ,OAAO,WAAW,SAAS;AACzC,QAAI,SAAS,SAAU,SAAS,SAAU,UAAU,QAAQ;AAE3D,YAAM,QAAQ,OAAO,WAAW,SAAS;AACzC,WAAK,QAAQ,UAAW,OAAQ;AAC/B,eAAO,OAAO,QAAQ,SAAU,OAAO,QAAQ,QAAS,KAAO;AAAA,MAChE,OAAO;AAGN,eAAO,KAAK,KAAK;AACjB;AAAA,MACD;AAAA,IACD,OAAO;AACN,aAAO,KAAK,KAAK;AAAA,IAClB;AAAA,EACD;AACA,SAAO;AACR;AAUA,IAAM,aAAa,gBAAc,OAAO,cAAc,GAAG,UAAU;AAWnE,IAAM,eAAe,SAAS,WAAW;AACxC,MAAI,aAAa,MAAQ,YAAY,IAAM;AAC1C,WAAO,MAAM,YAAY;AAAA,EAC1B;AACA,MAAI,aAAa,MAAQ,YAAY,IAAM;AAC1C,WAAO,YAAY;AAAA,EACpB;AACA,MAAI,aAAa,MAAQ,YAAY,KAAM;AAC1C,WAAO,YAAY;AAAA,EACpB;AACA,SAAO;AACR;AAaA,IAAM,eAAe,SAAS,OAAO,MAAM;AAG1C,SAAO,QAAQ,KAAK,MAAM,QAAQ,QAAQ,QAAQ,MAAM;AACzD;AAOA,IAAM,QAAQ,SAAS,OAAO,WAAW,WAAW;AACnD,MAAI,IAAI;AACR,UAAQ,YAAY,MAAM,QAAQ,IAAI,IAAI,SAAS;AACnD,WAAS,MAAM,QAAQ,SAAS;AAChC,SAA8B,QAAQ,gBAAgB,QAAQ,GAAG,KAAK,MAAM;AAC3E,YAAQ,MAAM,QAAQ,aAAa;AAAA,EACpC;AACA,SAAO,MAAM,KAAK,gBAAgB,KAAK,SAAS,QAAQ,KAAK;AAC9D;AASA,IAAMK,UAAS,SAAS,OAAO;AAE9B,QAAM,SAAS,CAAC;AAChB,QAAM,cAAc,MAAM;AAC1B,MAAI,IAAI;AACR,MAAI,IAAI;AACR,MAAI,OAAO;AAMX,MAAI,QAAQ,MAAM,YAAY,SAAS;AACvC,MAAI,QAAQ,GAAG;AACd,YAAQ;AAAA,EACT;AAEA,WAAS,IAAI,GAAG,IAAI,OAAO,EAAE,GAAG;AAE/B,QAAI,MAAM,WAAW,CAAC,KAAK,KAAM;AAChC,YAAM,WAAW;AAAA,IAClB;AACA,WAAO,KAAK,MAAM,WAAW,CAAC,CAAC;AAAA,EAChC;AAKA,WAAS,QAAQ,QAAQ,IAAI,QAAQ,IAAI,GAAG,QAAQ,eAAwC;AAO3F,UAAM,OAAO;AACb,aAAS,IAAI,GAAG,IAAI,QAA0B,KAAK,MAAM;AAExD,UAAI,SAAS,aAAa;AACzB,cAAM,eAAe;AAAA,MACtB;AAEA,YAAM,QAAQ,aAAa,MAAM,WAAW,OAAO,CAAC;AAEpD,UAAI,SAAS,MAAM;AAClB,cAAM,eAAe;AAAA,MACtB;AACA,UAAI,QAAQ,OAAO,SAAS,KAAK,CAAC,GAAG;AACpC,cAAM,UAAU;AAAA,MACjB;AAEA,WAAK,QAAQ;AACb,YAAM,IAAI,KAAK,OAAO,OAAQ,KAAK,OAAO,OAAO,OAAO,IAAI;AAE5D,UAAI,QAAQ,GAAG;AACd;AAAA,MACD;AAEA,YAAM,aAAa,OAAO;AAC1B,UAAI,IAAI,MAAM,SAAS,UAAU,GAAG;AACnC,cAAM,UAAU;AAAA,MACjB;AAEA,WAAK;AAAA,IAEN;AAEA,UAAM,MAAM,OAAO,SAAS;AAC5B,WAAO,MAAM,IAAI,MAAM,KAAK,QAAQ,CAAC;AAIrC,QAAI,MAAM,IAAI,GAAG,IAAI,SAAS,GAAG;AAChC,YAAM,UAAU;AAAA,IACjB;AAEA,SAAK,MAAM,IAAI,GAAG;AAClB,SAAK;AAGL,WAAO,OAAO,KAAK,GAAG,CAAC;AAAA,EAExB;AAEA,SAAO,OAAO,cAAc,GAAG,MAAM;AACtC;AASA,IAAMC,UAAS,SAAS,OAAO;AAC9B,QAAM,SAAS,CAAC;AAGhB,UAAQ,WAAW,KAAK;AAGxB,QAAM,cAAc,MAAM;AAG1B,MAAI,IAAI;AACR,MAAI,QAAQ;AACZ,MAAI,OAAO;AAGX,aAAW,gBAAgB,OAAO;AACjC,QAAI,eAAe,KAAM;AACxB,aAAO,KAAK,mBAAmB,YAAY,CAAC;AAAA,IAC7C;AAAA,EACD;AAEA,QAAM,cAAc,OAAO;AAC3B,MAAI,iBAAiB;AAMrB,MAAI,aAAa;AAChB,WAAO,KAAK,SAAS;AAAA,EACtB;AAGA,SAAO,iBAAiB,aAAa;AAIpC,QAAI,IAAI;AACR,eAAW,gBAAgB,OAAO;AACjC,UAAI,gBAAgB,KAAK,eAAe,GAAG;AAC1C,YAAI;AAAA,MACL;AAAA,IACD;AAIA,UAAM,wBAAwB,iBAAiB;AAC/C,QAAI,IAAI,IAAI,OAAO,SAAS,SAAS,qBAAqB,GAAG;AAC5D,YAAM,UAAU;AAAA,IACjB;AAEA,cAAU,IAAI,KAAK;AACnB,QAAI;AAEJ,eAAW,gBAAgB,OAAO;AACjC,UAAI,eAAe,KAAK,EAAE,QAAQ,QAAQ;AACzC,cAAM,UAAU;AAAA,MACjB;AACA,UAAI,iBAAiB,GAAG;AAEvB,YAAI,IAAI;AACR,iBAAS,IAAI,QAA0B,KAAK,MAAM;AACjD,gBAAM,IAAI,KAAK,OAAO,OAAQ,KAAK,OAAO,OAAO,OAAO,IAAI;AAC5D,cAAI,IAAI,GAAG;AACV;AAAA,UACD;AACA,gBAAM,UAAU,IAAI;AACpB,gBAAM,aAAa,OAAO;AAC1B,iBAAO;AAAA,YACN,mBAAmB,aAAa,IAAI,UAAU,YAAY,CAAC,CAAC;AAAA,UAC7D;AACA,cAAI,MAAM,UAAU,UAAU;AAAA,QAC/B;AAEA,eAAO,KAAK,mBAAmB,aAAa,GAAG,CAAC,CAAC,CAAC;AAClD,eAAO,MAAM,OAAO,uBAAuB,mBAAmB,WAAW;AACzE,gBAAQ;AACR,UAAE;AAAA,MACH;AAAA,IACD;AAEA,MAAE;AACF,MAAE;AAAA,EAEH;AACA,SAAO,OAAO,KAAK,EAAE;AACtB;AAaA,IAAM,YAAY,SAAS,OAAO;AACjC,SAAO,UAAU,OAAO,SAAS,QAAQ;AACxC,WAAO,cAAc,KAAK,MAAM,IAC7BD,QAAO,OAAO,MAAM,CAAC,EAAE,YAAY,CAAC,IACpC;AAAA,EACJ,CAAC;AACF;AAaA,IAAM,UAAU,SAAS,OAAO;AAC/B,SAAO,UAAU,OAAO,SAAS,QAAQ;AACxC,WAAO,cAAc,KAAK,MAAM,IAC7B,SAASC,QAAO,MAAM,IACtB;AAAA,EACJ,CAAC;AACF;AAKA,IAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMhB,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQX,QAAQ;AAAA,IACP,UAAU;AAAA,IACV,UAAU;AAAA,EACX;AAAA,EACA,UAAUD;AAAA,EACV,UAAUC;AAAA,EACV,WAAW;AAAA,EACX,aAAa;AACd;AAGA,IAAO,uBAAQ;;;ACzbf,IAAO,kBAAQ;AAAA,EACb,SAAS;AAAA;AAAA,IAEP,MAAM;AAAA;AAAA,IAGN,UAAU;AAAA;AAAA,IAGV,QAAQ;AAAA;AAAA,IAGR,YAAY;AAAA;AAAA,IAGZ,SAAS;AAAA;AAAA,IAGT,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOb,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQR,WAAW;AAAA;AAAA,IAGX,YAAY;AAAA,EACd;AAAA,EAEA,YAAY;AAAA,IACV,MAAM,CAAC;AAAA,IACP,OAAO,CAAC;AAAA,IACR,QAAQ,CAAC;AAAA,EACX;AACF;;;AC3CA,IAAO,eAAQ;AAAA,EACb,SAAS;AAAA;AAAA,IAEP,MAAM;AAAA;AAAA,IAGN,UAAU;AAAA;AAAA,IAGV,QAAQ;AAAA;AAAA,IAGR,YAAY;AAAA;AAAA,IAGZ,SAAS;AAAA;AAAA,IAGT,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOb,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQR,WAAW;AAAA;AAAA,IAGX,YAAY;AAAA,EACd;AAAA,EAEA,YAAY;AAAA,IAEV,MAAM;AAAA,MACJ,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IAEA,OAAO;AAAA,MACL,OAAO;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAAA,IAEA,QAAQ;AAAA,MACN,OAAO;AAAA,QACL;AAAA,MACF;AAAA,MACA,QAAQ;AAAA,QACN;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACnEA,IAAO,qBAAQ;AAAA,EACb,SAAS;AAAA;AAAA,IAEP,MAAM;AAAA;AAAA,IAGN,UAAU;AAAA;AAAA,IAGV,QAAQ;AAAA;AAAA,IAGR,YAAY;AAAA;AAAA,IAGZ,SAAS;AAAA;AAAA,IAGT,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOb,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQR,WAAW;AAAA;AAAA,IAGX,YAAY;AAAA,EACd;AAAA,EAEA,YAAY;AAAA,IAEV,MAAM;AAAA,MACJ,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IAEA,OAAO;AAAA,MACL,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IAEA,QAAQ;AAAA,MACN,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,QAAQ;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACvEA,IAAM,SAAS;AAAA,EACb,SAAS;AAAA,EACT,MAAM;AAAA,EACN,YAAY;AACd;AAUA,IAAM,eAAe;AACrB,IAAM,eAAe;AAErB,SAAS,aAAc,KAAK;AAE1B,QAAM,MAAM,IAAI,KAAK,EAAE,YAAY;AAEnC,SAAO,aAAa,KAAK,GAAG,IAAI,aAAa,KAAK,GAAG,IAAI;AAC3D;AAEA,IAAM,sBAAsB,CAAC,SAAS,UAAU,SAAS;AAEzD,SAAS,cAAe,KAAK;AAC3B,QAAM,SAAe,cAAM,KAAK,IAAI;AAEpC,MAAI,OAAO,UAAU;AAOnB,QAAI,CAAC,OAAO,YAAY,oBAAoB,QAAQ,OAAO,QAAQ,KAAK,GAAG;AACzE,UAAI;AACF,eAAO,WAAW,qBAAS,QAAQ,OAAO,QAAQ;AAAA,MACpD,SAAS,IAAI;AAAA,MAAO;AAAA,IACtB;AAAA,EACF;AAEA,SAAa,eAAa,OAAO,MAAM,CAAC;AAC1C;AAEA,SAAS,kBAAmB,KAAK;AAC/B,QAAM,SAAe,cAAM,KAAK,IAAI;AAEpC,MAAI,OAAO,UAAU;AAOnB,QAAI,CAAC,OAAO,YAAY,oBAAoB,QAAQ,OAAO,QAAQ,KAAK,GAAG;AACzE,UAAI;AACF,eAAO,WAAW,qBAAS,UAAU,OAAO,QAAQ;AAAA,MACtD,SAAS,IAAI;AAAA,MAAO;AAAA,IACtB;AAAA,EACF;AAGA,SAAa,eAAa,OAAO,MAAM,GAAS,eAAO,eAAe,GAAG;AAC3E;AAuIA,SAAS,WAAY,YAAY,SAAS;AACxC,MAAI,EAAE,gBAAgB,aAAa;AACjC,WAAO,IAAI,WAAW,YAAY,OAAO;AAAA,EAC3C;AAEA,MAAI,CAAC,SAAS;AACZ,QAAI,CAAO,SAAS,UAAU,GAAG;AAC/B,gBAAU,cAAc,CAAC;AACzB,mBAAa;AAAA,IACf;AAAA,EACF;AASA,OAAK,SAAS,IAAI,sBAAa;AAS/B,OAAK,QAAQ,IAAI,qBAAY;AAS7B,OAAK,OAAO,IAAI,oBAAW;AAuB3B,OAAK,WAAW,IAAI,iBAAS;AAS7B,OAAK,UAAU,IAAI,mBAAU;AAiB7B,OAAK,eAAe;AAQpB,OAAK,gBAAgB;AAOrB,OAAK,oBAAoB;AAUzB,OAAK,QAAQ;AAQb,OAAK,UAAgB,OAAO,CAAC,GAAG,eAAO;AAEvC,OAAK,UAAU,CAAC;AAChB,OAAK,UAAU,UAAU;AAEzB,MAAI,SAAS;AAAE,SAAK,IAAI,OAAO;AAAA,EAAE;AACnC;AAqBA,WAAW,UAAU,MAAM,SAAU,SAAS;AAC5C,EAAM,OAAO,KAAK,SAAS,OAAO;AAClC,SAAO;AACT;AAYA,WAAW,UAAU,YAAY,SAAU,SAAS;AAClD,QAAM,OAAO;AAEb,MAAU,SAAS,OAAO,GAAG;AAC3B,UAAM,aAAa;AACnB,cAAU,OAAO,UAAU;AAC3B,QAAI,CAAC,SAAS;AAAE,YAAM,IAAI,MAAM,iCAAiC,aAAa,eAAe;AAAA,IAAE;AAAA,EACjG;AAEA,MAAI,CAAC,SAAS;AAAE,UAAM,IAAI,MAAM,4CAA6C;AAAA,EAAE;AAE/E,MAAI,QAAQ,SAAS;AAAE,SAAK,IAAI,QAAQ,OAAO;AAAA,EAAE;AAEjD,MAAI,QAAQ,YAAY;AACtB,WAAO,KAAK,QAAQ,UAAU,EAAE,QAAQ,SAAU,MAAM;AACtD,UAAI,QAAQ,WAAW,IAAI,EAAE,OAAO;AAClC,aAAK,IAAI,EAAE,MAAM,WAAW,QAAQ,WAAW,IAAI,EAAE,KAAK;AAAA,MAC5D;AACA,UAAI,QAAQ,WAAW,IAAI,EAAE,QAAQ;AACnC,aAAK,IAAI,EAAE,OAAO,WAAW,QAAQ,WAAW,IAAI,EAAE,MAAM;AAAA,MAC9D;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAmBA,WAAW,UAAU,SAAS,SAAUC,OAAM,eAAe;AAC3D,MAAI,SAAS,CAAC;AAEd,MAAI,CAAC,MAAM,QAAQA,KAAI,GAAG;AAAE,IAAAA,QAAO,CAACA,KAAI;AAAA,EAAE;AAE1C,GAAC,QAAQ,SAAS,QAAQ,EAAE,QAAQ,SAAU,OAAO;AACnD,aAAS,OAAO,OAAO,KAAK,KAAK,EAAE,MAAM,OAAOA,OAAM,IAAI,CAAC;AAAA,EAC7D,GAAG,IAAI;AAEP,WAAS,OAAO,OAAO,KAAK,OAAO,OAAO,OAAOA,OAAM,IAAI,CAAC;AAE5D,QAAM,SAASA,MAAK,OAAO,SAAU,MAAM;AAAE,WAAO,OAAO,QAAQ,IAAI,IAAI;AAAA,EAAE,CAAC;AAE9E,MAAI,OAAO,UAAU,CAAC,eAAe;AACnC,UAAM,IAAI,MAAM,mDAAmD,MAAM;AAAA,EAC3E;AAEA,SAAO;AACT;AASA,WAAW,UAAU,UAAU,SAAUA,OAAM,eAAe;AAC5D,MAAI,SAAS,CAAC;AAEd,MAAI,CAAC,MAAM,QAAQA,KAAI,GAAG;AAAE,IAAAA,QAAO,CAACA,KAAI;AAAA,EAAE;AAE1C,GAAC,QAAQ,SAAS,QAAQ,EAAE,QAAQ,SAAU,OAAO;AACnD,aAAS,OAAO,OAAO,KAAK,KAAK,EAAE,MAAM,QAAQA,OAAM,IAAI,CAAC;AAAA,EAC9D,GAAG,IAAI;AAEP,WAAS,OAAO,OAAO,KAAK,OAAO,OAAO,QAAQA,OAAM,IAAI,CAAC;AAE7D,QAAM,SAASA,MAAK,OAAO,SAAU,MAAM;AAAE,WAAO,OAAO,QAAQ,IAAI,IAAI;AAAA,EAAE,CAAC;AAE9E,MAAI,OAAO,UAAU,CAAC,eAAe;AACnC,UAAM,IAAI,MAAM,oDAAoD,MAAM;AAAA,EAC5E;AACA,SAAO;AACT;AAkBA,WAAW,UAAU,MAAM,SAAU,QAA2B;AAC9D,QAAM,OAAO,CAAC,IAAI,EAAE,OAAO,MAAM,UAAU,MAAM,KAAK,WAAW,CAAC,CAAC;AACnE,SAAO,MAAM,QAAQ,IAAI;AACzB,SAAO;AACT;AAiBA,WAAW,UAAU,QAAQ,SAAU,KAAK,KAAK;AAC/C,MAAI,OAAO,QAAQ,UAAU;AAC3B,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACjD;AAEA,QAAM,QAAQ,IAAI,KAAK,KAAK,MAAM,KAAK,MAAM,GAAG;AAEhD,OAAK,KAAK,QAAQ,KAAK;AAEvB,SAAO,MAAM;AACf;AAaA,WAAW,UAAU,SAAS,SAAU,KAAK,KAAK;AAChD,QAAM,OAAO,CAAC;AAEd,SAAO,KAAK,SAAS,OAAO,KAAK,MAAM,KAAK,GAAG,GAAG,KAAK,SAAS,GAAG;AACrE;AAWA,WAAW,UAAU,cAAc,SAAU,KAAK,KAAK;AACrD,QAAM,QAAQ,IAAI,KAAK,KAAK,MAAM,KAAK,MAAM,GAAG;AAEhD,QAAM,aAAa;AACnB,OAAK,KAAK,QAAQ,KAAK;AAEvB,SAAO,MAAM;AACf;AAUA,WAAW,UAAU,eAAe,SAAU,KAAK,KAAK;AACtD,QAAM,OAAO,CAAC;AAEd,SAAO,KAAK,SAAS,OAAO,KAAK,YAAY,KAAK,GAAG,GAAG,KAAK,SAAS,GAAG;AAC3E;AAEA,IAAO,cAAQ;;;AC9iBf,IAAM,SAAS,IAAI,OAAO;AAAA,EACtB,OAAO;AAAA,IACH,KAAK;AAAA,MACD,SAAS;AAAA,IACb;AAAA,IACA,WAAW;AAAA,MACP,SAAS;AAAA,MACT,OAAO;AAAA,MACP,UAAU,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,MACvB,QAAQ;AAAE,eAAO,CAAC,KAAK,CAAC;AAAA,MAAG;AAAA,IAC/B;AAAA,IACA,YAAY;AAAA,MACR,SAAS;AAAA,MACT,OAAO;AAAA,MACP,UAAU,CAAC,EAAE,KAAK,aAAa,CAAC;AAAA,MAChC,QAAQ;AAAE,eAAO,CAAC,cAAc,CAAC;AAAA,MAAG;AAAA,IACxC;AAAA,IACA,iBAAiB;AAAA,MACb,OAAO;AAAA,MACP,UAAU,CAAC,EAAE,KAAK,KAAK,CAAC;AAAA,MACxB,QAAQ;AAAE,eAAO,CAAC,OAAO,CAAC,IAAI,CAAC;AAAA,MAAG;AAAA,IACtC;AAAA,IACA,SAAS;AAAA,MACL,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE;AAAA,MAC/B,SAAS;AAAA,MACT,OAAO;AAAA,MACP,UAAU;AAAA,MACV,UAAU;AAAA,QAAC,EAAE,KAAK,MAAM,OAAO,EAAE,OAAO,EAAE,EAAE;AAAA,QACxC,EAAE,KAAK,MAAM,OAAO,EAAE,OAAO,EAAE,EAAE;AAAA,QACjC,EAAE,KAAK,MAAM,OAAO,EAAE,OAAO,EAAE,EAAE;AAAA,QACjC,EAAE,KAAK,MAAM,OAAO,EAAE,OAAO,EAAE,EAAE;AAAA,QACjC,EAAE,KAAK,MAAM,OAAO,EAAE,OAAO,EAAE,EAAE;AAAA,QACjC,EAAE,KAAK,MAAM,OAAO,EAAE,OAAO,EAAE,EAAE;AAAA,MAAC;AAAA,MACtC,MAAM,MAAM;AAAE,eAAO,CAAC,MAAM,KAAK,MAAM,OAAO,CAAC;AAAA,MAAG;AAAA,IACtD;AAAA,IACA,YAAY;AAAA,MACR,SAAS;AAAA,MACT,OAAO;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,OAAO;AAAA,MACP,OAAO,EAAE,QAAQ,EAAE,SAAS,GAAG,EAAE;AAAA,MACjC,UAAU,CAAC,EAAE,KAAK,OAAO,oBAAoB,QAAQ,UAAU,WAAS,EAAE,QAAQ,KAAK,aAAa,aAAa,KAAK,GAAG,GAAG,CAAC;AAAA,MAC7H,MAAM,MAAM;AAAE,eAAO,CAAC,OAAO,KAAK,MAAM,SAAS,EAAE,eAAe,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAAA,MAAG;AAAA,IAC9G;AAAA,IACA,cAAc;AAAA,MACV,SAAS;AAAA,MACT,OAAO;AAAA,MACP,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,SAAS,MAAM,EAAE;AAAA,MAC1D,UAAU,CAAC,EAAE,KAAK,MAAM,SAAS,KAAK;AAC1B,eAAO;AAAA,UAAE,OAAO,IAAI,aAAa,OAAO,IAAI,CAAC,IAAI,aAAa,OAAO,IAAI;AAAA,UACrE,OAAO,IAAI,aAAa,YAAY;AAAA,QAAE;AAAA,MAC9C,EAAE,CAAC;AAAA,MACX,MAAM,MAAM;AACR,eAAO,CAAC,MAAM;AAAA,UAAE,OAAO,KAAK,MAAM,SAAS,IAAI,OAAO,KAAK,MAAM;AAAA,UACzD,cAAc,KAAK,MAAM,QAAQ,SAAS;AAAA,QAAK,GAAG,CAAC;AAAA,MAC/D;AAAA,IACJ;AAAA,IACA,aAAa;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,MACP,OAAO,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE;AAAA,MACnC,UAAU,CAAC,EAAE,KAAK,MAAM,UAAU,UAAQ,EAAE,OAAO,IAAI,aAAa,YAAY,EAAE,GAAG,CAAC;AAAA,MACtF,MAAM,MAAM;AAAE,eAAO,CAAC,MAAM,EAAE,cAAc,KAAK,MAAM,QAAQ,SAAS,KAAK,GAAG,CAAC;AAAA,MAAG;AAAA,IACxF;AAAA,IACA,WAAW;AAAA,MACP,SAAS;AAAA,MACT,UAAU;AAAA,MACV,UAAU,CAAC,EAAE,KAAK,KAAK,CAAC;AAAA,MACxB,QAAQ;AAAE,eAAO,CAAC,MAAM,CAAC;AAAA,MAAG;AAAA,IAChC;AAAA,IACA,MAAM;AAAA,MACF,OAAO;AAAA,IACX;AAAA,IACA,OAAO;AAAA,MACH,QAAQ;AAAA,MACR,OAAO;AAAA,QACH,KAAK,CAAC;AAAA,QACN,KAAK,EAAE,SAAS,KAAK;AAAA,QACrB,OAAO,EAAE,SAAS,KAAK;AAAA,MAC3B;AAAA,MACA,OAAO;AAAA,MACP,WAAW;AAAA,MACX,UAAU,CAAC,EAAE,KAAK,YAAY,SAAS,KAAK;AAChC,eAAO;AAAA,UACH,KAAK,IAAI,aAAa,KAAK;AAAA,UAC3B,OAAO,IAAI,aAAa,OAAO;AAAA,UAC/B,KAAK,IAAI,aAAa,KAAK;AAAA,QAC/B;AAAA,MACJ,EAAE,CAAC;AAAA,MACX,MAAM,MAAM;AAAE,eAAO,CAAC,OAAO,KAAK,KAAK;AAAA,MAAG;AAAA,IAC9C;AAAA,IACA,YAAY;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,UAAU,CAAC,EAAE,KAAK,KAAK,CAAC;AAAA,MACxB,QAAQ;AAAE,eAAO,CAAC,IAAI;AAAA,MAAG;AAAA,IAC7B;AAAA,EACJ;AAAA,EACA,OAAO;AAAA,IACH,IAAI;AAAA,MACA,UAAU;AAAA,QACN,EAAE,KAAK,IAAI;AAAA,QAAG,EAAE,KAAK,KAAK;AAAA,QAC1B,EAAE,OAAO,oBAAoB;AAAA,QAC7B,EAAE,OAAO,qBAAqB,WAAW,OAAK,EAAE,KAAK,QAAQ,KAAK;AAAA,MACtE;AAAA,MACA,QAAQ;AAAE,eAAO,CAAC,IAAI;AAAA,MAAG;AAAA,IAC7B;AAAA,IACA,QAAQ;AAAA,MACJ,UAAU;AAAA,QACN,EAAE,KAAK,SAAS;AAAA,QAChB,EAAE,KAAK,KAAK,UAAU,UAAQ,KAAK,MAAM,cAAc,YAAY,KAAK;AAAA,QACxE,EAAE,OAAO,mBAAmB,WAAW,OAAK,EAAE,KAAK,QAAQ,SAAS;AAAA,QACpE,EAAE,OAAO,eAAe,UAAU,WAAS,4BAA4B,KAAK,KAAK,KAAK,KAAK;AAAA,MAC/F;AAAA,MACA,QAAQ;AAAE,eAAO,CAAC,QAAQ;AAAA,MAAG;AAAA,IACjC;AAAA,IACA,MAAM;AAAA,MACF,OAAO;AAAA,QACH,MAAM,CAAC;AAAA,QACP,OAAO,EAAE,SAAS,KAAK;AAAA,MAC3B;AAAA,MACA,WAAW;AAAA,MACX,UAAU,CAAC,EAAE,KAAK,WAAW,SAAS,KAAK;AAC/B,eAAO,EAAE,MAAM,IAAI,aAAa,MAAM,GAAG,OAAO,IAAI,aAAa,OAAO,EAAE;AAAA,MAC9E,EAAE,CAAC;AAAA,MACX,MAAM,MAAM;AAAE,eAAO,CAAC,KAAK,KAAK,KAAK;AAAA,MAAG;AAAA,IAC5C;AAAA,IACA,MAAM;AAAA,MACF,MAAM;AAAA,MACN,UAAU,CAAC,EAAE,KAAK,OAAO,CAAC;AAAA,MAC1B,QAAQ;AAAE,eAAO,CAAC,MAAM;AAAA,MAAG;AAAA,IAC/B;AAAA,EACJ;AACJ,CAAC;AAGD,SAAS,WAAW,GAAG,GAAG;AACtB,MAAI,EAAE,UAAU,EAAE,UAAU,KAAK,QAAQ,EAAE,OAAO,EAAE,KAAK;AACrD,WAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI;AACzC;AAEA,IAAM,qBAAN,MAAyB;AAAA,EACrB,YAAYC,SAAQC,gBAAe;AAC/B,SAAK,SAASD;AACd,SAAK,gBAAgBC;AACrB,SAAK,QAAQ,CAAC,EAAE,MAAMD,QAAO,aAAa,OAAO,MAAM,SAAS,CAAC,GAAG,OAAO,KAAK,KAAK,CAAC;AAAA,EAC1F;AAAA,EACA,MAAM;AACF,WAAO,KAAK,MAAM,KAAK,MAAM,SAAS,CAAC;AAAA,EAC3C;AAAA,EACA,KAAK,KAAK;AACN,QAAI,KAAK,MAAM;AACX,WAAK,IAAI,EAAE,QAAQ,KAAK,GAAG;AAAA,EACnC;AAAA;AAAA;AAAA,EAGA,QAAQE,OAAM;AACV,QAAI,CAACA;AACD;AACJ,QAAI,MAAM,KAAK,IAAI,GAAG,QAAQ,IAAI,SAAS,OAAO,MAAM,MAAM,SAAS,CAAC;AACxE,QAAI,OAAO,KAAK,OAAO,KAAKA,OAAM,IAAI,KAAK,GAAG;AAC9C,QAAI,SAAS,SAAS,WAAW,MAAM,IAAI;AACvC,YAAM,MAAM,SAAS,CAAC,IAAI;AAAA;AAE1B,YAAM,KAAK,IAAI;AAAA,EACvB;AAAA;AAAA,EAEA,SAAS,MAAM;AACX,QAAI,MAAM,KAAK,IAAI;AACnB,QAAI,QAAQ,KAAK,SAAS,IAAI,KAAK;AAAA,EACvC;AAAA;AAAA,EAEA,UAAU,MAAM;AACZ,QAAI,MAAM,KAAK,IAAI;AACnB,QAAI,QAAQ,KAAK,cAAc,IAAI,KAAK;AAAA,EAC5C;AAAA,EACA,YAAY,MAAM;AACd,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAClC,UAAI,MAAM,KAAK,CAAC;AAChB,UAAI,UAAU,KAAK,cAAc,IAAI,IAAI;AACzC,UAAI,CAAC;AACD,cAAM,IAAI,MAAM,iBAAiB,IAAI,OAAO,oCAAoC;AACpF,cAAQ,MAAM,KAAK,MAAM,CAAC;AAAA,IAC9B;AAAA,EACJ;AAAA;AAAA,EAEA,QAAQ,MAAMC,QAAO,SAAS;AAC1B,QAAI,MAAM,KAAK,IAAI;AACnB,QAAI,OAAO,KAAK,cAAcA,QAAO,SAAS,MAAM,IAAI,QAAQ,CAAC,CAAC;AAClE,QAAI,CAAC;AACD,aAAO;AACX,SAAK,KAAK,IAAI;AACd,WAAO;AAAA,EACX;AAAA;AAAA,EAEA,SAAS,MAAMA,QAAO;AAClB,SAAK,MAAM,KAAK,EAAE,MAAY,OAAOA,QAAO,SAAS,CAAC,GAAG,OAAO,KAAK,KAAK,CAAC;AAAA,EAC/E;AAAA;AAAA,EAEA,YAAY;AACR,QAAI,OAAO,KAAK,MAAM,IAAI;AAC1B,WAAO,KAAK,QAAQ,KAAK,MAAM,KAAK,OAAO,KAAK,OAAO;AAAA,EAC3D;AACJ;AACA,SAAS,MAAM,MAAM,OAAO,QAAQ,GAAG;AACnC,MAAI,KAAK;AACL,WAAO,KAAK,SAAS,OAAO,QAAQ,CAAC;AAAA,WAEhC,KAAK,iBAAiB;AAC3B,WAAO,KAAK,MAAM,KAAK;AAAA;AAEvB,WAAO,KAAK;AACpB;AAGA,SAAS,aAAa,MAAM,MAAM;AAC9B,SAAO,KAAK,gBAAgB,QAAQ,iBAAiB,QAAQ,gBAAgB,QAAQ;AACzF;AACA,SAAS,uBAAuB,KAAK;AACjC,SAAO,IAAI,IAAI,SAAS,CAAC,KAAK,OAAO,IAAI,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI;AACxE;AACA,SAAS,OAAO;AAAE;AAClB,SAAS,cAAcH,SAAQ,QAAQ;AACnC,MAAI,WAAW,uBAAO,OAAO,IAAI;AACjC,WAAS,QAAQ,QAAQ;AACrB,QAAI,OAAO,OAAO,IAAI;AACtB,QAAI,KAAK,OAAO;AACZ,UAAI,WAAWA,QAAO,SAAS,KAAK,KAAK;AACzC,UAAI,aAAa,MAAM,IAAI,GAAG;AAC1B,iBAAS,IAAI,IAAI,CAAC,OAAO,KAAKI,SAAQ,MAAM;AACxC,gBAAM,SAAS,UAAU,MAAM,MAAM,KAAKA,SAAQ,CAAC,CAAC;AACpD,gBAAM,QAAQ,uBAAuB,IAAI,OAAO,CAAC;AACjD,gBAAM,UAAU;AAAA,QACpB;AAAA,MACJ,OACK;AACD,iBAAS,OAAO,OAAO,IAAI,CAAC,OAAO,KAAKA,SAAQ,MAAM,MAAM,SAAS,UAAU,MAAM,MAAM,KAAKA,SAAQ,CAAC,CAAC;AAC1G,iBAAS,OAAO,QAAQ,IAAI,WAAS,MAAM,UAAU;AAAA,MACzD;AAAA,IACJ,WACS,KAAK,MAAM;AAChB,UAAI,WAAWJ,QAAO,SAAS,KAAK,IAAI;AACxC,eAAS,IAAI,IAAI,CAAC,OAAO,KAAKI,SAAQ,MAAM,MAAM,QAAQ,UAAU,MAAM,MAAM,KAAKA,SAAQ,CAAC,CAAC;AAAA,IACnG,WACS,KAAK,MAAM;AAChB,UAAI,WAAWJ,QAAO,MAAM,KAAK,IAAI;AACrC,UAAI,aAAa,MAAM,IAAI,GAAG;AAC1B,iBAAS,IAAI,IAAI,CAAC,OAAO,KAAKI,SAAQ,MAAM;AACxC,gBAAM,SAAS,SAAS,OAAO,MAAM,MAAM,KAAKA,SAAQ,CAAC,CAAC,CAAC;AAC3D,gBAAM,QAAQ,uBAAuB,IAAI,OAAO,CAAC;AACjD,gBAAM,UAAU,QAAQ;AAAA,QAC5B;AAAA,MACJ,OACK;AACD,iBAAS,OAAO,OAAO,IAAI,CAAC,OAAO,KAAKA,SAAQ,MAAM,MAAM,SAAS,SAAS,OAAO,MAAM,MAAM,KAAKA,SAAQ,CAAC,CAAC,CAAC;AACjH,iBAAS,OAAO,QAAQ,IAAI,WAAS,MAAM,UAAU,QAAQ;AAAA,MACjE;AAAA,IACJ,WACS,KAAK,QAAQ;AAClB,UAAI,aAAa,MAAM,IAAI,GAAG;AAC1B,iBAAS,IAAI,IAAI;AAAA,MACrB,OACK;AACD,iBAAS,OAAO,OAAO,IAAI;AAC3B,iBAAS,OAAO,QAAQ,IAAI;AAAA,MAChC;AAAA,IACJ,OACK;AACD,YAAM,IAAI,WAAW,+BAA+B,KAAK,UAAU,IAAI,CAAC;AAAA,IAC5E;AAAA,EACJ;AACA,WAAS,OAAO,CAAC,OAAO,QAAQ,MAAM,QAAQ,IAAI,OAAO;AACzD,WAAS,SAAS,CAAC,OAAO,QAAQ,MAAM,YAAY,IAAI,QAAQ;AAChE,WAAS,YAAY,SAAS,cAAc,WAAS,MAAM,QAAQ,GAAG;AACtE,SAAO;AACX;AAOA,IAAM,iBAAN,MAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASjB,YAIAJ,SAIA,WAMA,QAAQ;AACJ,SAAK,SAASA;AACd,SAAK,YAAY;AACjB,SAAK,SAAS;AACd,SAAK,gBAAgB,cAAcA,SAAQ,MAAM;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAME,OAAM,cAAc,CAAC,GAAG;AAC1B,QAAI,QAAQ,IAAI,mBAAmB,KAAK,QAAQ,KAAK,aAAa,GAAGG;AACrE,UAAM,YAAY,KAAK,UAAU,MAAMH,OAAM,WAAW,CAAC;AACzD,OAAG;AACC,MAAAG,OAAM,MAAM,UAAU;AAAA,IAC1B,SAAS,MAAM,MAAM;AACrB,WAAOA,QAAO,KAAK,OAAO,YAAY,cAAc;AAAA,EACxD;AACJ;AACA,SAAS,YAAY,QAAQ,GAAG;AAC5B,SAAO,EAAE,IAAI,OAAO;AAChB,QAAI,OAAO,CAAC,EAAE,QAAQ;AAClB,aAAO,OAAO,CAAC,EAAE;AACzB,SAAO;AACX;AAKA,IAAM,wBAAwB,IAAI,eAAe,QAAQ,YAAW,cAAc,EAAE,MAAM,MAAM,CAAC,GAAG;AAAA,EAChG,YAAY,EAAE,OAAO,aAAa;AAAA,EAClC,WAAW,EAAE,OAAO,YAAY;AAAA,EAChC,WAAW,EAAE,OAAO,YAAY;AAAA,EAChC,aAAa,EAAE,OAAO,eAAe,UAAU,CAAC,GAAG,QAAQ,OAAO,EAAE,OAAO,YAAY,QAAQ,CAAC,EAAE,GAAG;AAAA,EACrG,cAAc,EAAE,OAAO,gBAAgB,UAAU,CAAC,KAAK,QAAQ,OAAO;AAAA,IAC9D,OAAO,CAAC,IAAI,QAAQ,OAAO,KAAK;AAAA,IAChC,OAAO,YAAY,QAAQ,CAAC;AAAA,EAChC,GAAG;AAAA,EACP,SAAS,EAAE,OAAO,WAAW,UAAU,UAAQ,EAAE,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,GAAG;AAAA,EAC7E,YAAY,EAAE,OAAO,cAAc,cAAc,KAAK;AAAA,EACtD,OAAO,EAAE,OAAO,cAAc,UAAU,UAAQ,EAAE,QAAQ,IAAI,QAAQ,GAAG,IAAI,cAAc,KAAK;AAAA,EAChG,IAAI,EAAE,MAAM,kBAAkB;AAAA,EAC9B,OAAO,EAAE,MAAM,SAAS,UAAU,UAAQ;AAAA,IAClC,KAAK,IAAI,QAAQ,KAAK;AAAA,IACtB,OAAO,IAAI,QAAQ,OAAO,KAAK;AAAA,IAC/B,KAAK,IAAI,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,EAAE,WAAW;AAAA,EACvD,GAAG;AAAA,EACP,WAAW,EAAE,MAAM,aAAa;AAAA,EAChC,IAAI,EAAE,MAAM,KAAK;AAAA,EACjB,QAAQ,EAAE,MAAM,SAAS;AAAA,EACzB,MAAM,EAAE,MAAM,QAAQ,UAAU,UAAQ;AAAA,IAChC,MAAM,IAAI,QAAQ,MAAM;AAAA,IACxB,OAAO,IAAI,QAAQ,OAAO,KAAK;AAAA,EACnC,GAAG;AAAA,EACP,aAAa,EAAE,MAAM,QAAQ,cAAc,KAAK;AACpD,CAAC;AAED,IAAM,YAAY,EAAE,MAAM,IAAI,OAAO,IAAI,SAAS,KAAK;AAKvD,IAAM,qBAAN,MAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMrB,YAIA,OAIA,OAAO,UAAU,CAAC,GAAG;AACjB,SAAK,QAAQ;AACb,SAAK,QAAQ;AACb,SAAK,UAAU;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,SAAS,UAAU,CAAC,GAAG;AAC7B,cAAU,OAAO,OAAO,CAAC,GAAG,KAAK,SAAS,OAAO;AACjD,QAAI,QAAQ,IAAI,wBAAwB,KAAK,OAAO,KAAK,OAAO,OAAO;AACvE,UAAM,cAAc,OAAO;AAC3B,WAAO,MAAM;AAAA,EACjB;AACJ;AAIA,IAAM,4BAA4B,IAAI,mBAAmB;AAAA,EACrD,WAAW,OAAO,MAAM;AACpB,UAAM,UAAU,MAAM,MAAM,MAAM,MAAM,MAAM,cAAc,IAAI,CAAC;AAAA,EACrE;AAAA,EACA,WAAW,OAAO,MAAM;AAEpB,UAAM,YAAY,KAAK,YAAY,MAAM,SAAS;AAClD,UAAMC,SAAQ,YAAa,UAAU,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,MAAO;AAClE,UAAM,MAAMA,UAAS,KAAK,MAAM,UAAU,MAAM,IAAI;AACpD,UAAM,KAAK,KAAK,aAAa,KAAK;AAElC,UAAM,MAAM,IAAI;AAChB,UAAM,MAAMA,MAAK;AACjB,UAAM,WAAW,IAAI;AAAA,EACzB;AAAA,EACA,QAAQ,OAAO,MAAM;AACjB,UAAM,MAAM,MAAM,OAAO,KAAK,KAAK,MAAM,KAAK,IAAI,GAAG;AACrD,UAAM,aAAa,MAAM,KAAK;AAC9B,UAAM,WAAW,IAAI;AAAA,EACzB;AAAA,EACA,gBAAgB,OAAO,MAAM;AACzB,UAAM,MAAM,KAAK,MAAM,UAAU,KAAK;AACtC,UAAM,WAAW,IAAI;AAAA,EACzB;AAAA,EACA,YAAY,OAAO,MAAM;AACrB,UAAM,WAAW,MAAM,MAAM,OAAO,KAAK,MAAM,UAAU,OAAO,GAAG;AAAA,EACvE;AAAA,EACA,aAAa,OAAO,MAAM;AACtB,QAAI,QAAQ,KAAK,MAAM,SAAS;AAChC,QAAI,OAAO,OAAO,QAAQ,KAAK,aAAa,CAAC,EAAE;AAC/C,QAAI,QAAQ,MAAM,OAAO,KAAK,OAAO,CAAC;AACtC,UAAM,WAAW,MAAM,OAAO,OAAK;AAC/B,UAAI,OAAO,OAAO,QAAQ,CAAC;AAC3B,aAAO,MAAM,OAAO,KAAK,OAAO,KAAK,MAAM,IAAI,OAAO;AAAA,IAC1D,CAAC;AAAA,EACL;AAAA,EACA,UAAU,OAAO,MAAM;AACnB,UAAM,cAAc,IAAI;AAAA,EAC5B;AAAA,EACA,UAAU,OAAO,MAAM;AACnB,UAAM,aAAa,IAAI;AACvB,UAAM,WAAW,IAAI;AAAA,EACzB;AAAA,EACA,MAAM,OAAO,MAAM;AACf,UAAM,MAAM,OAAO,MAAM,IAAI,KAAK,MAAM,OAAO,EAAE,IAAI,OAAO,KAAK,MAAM,IAAI,QAAQ,WAAW,MAAM,KAC/F,KAAK,MAAM,QAAQ,OAAO,KAAK,MAAM,MAAM,QAAQ,MAAM,KAAK,IAAI,MAAM,MAAM,GAAG;AAAA,EAC1F;AAAA,EACA,WAAW,OAAO,MAAM,QAAQ,OAAO;AACnC,aAAS,IAAI,QAAQ,GAAG,IAAI,OAAO,YAAY;AAC3C,UAAI,OAAO,MAAM,CAAC,EAAE,QAAQ,KAAK,MAAM;AACnC,cAAM,MAAM,MAAM;AAClB;AAAA,MACJ;AAAA,EACR;AAAA,EACA,KAAK,OAAO,MAAM;AACd,UAAM,KAAK,KAAK,MAAM,CAAC,MAAM,UAAU;AAAA,EAC3C;AACJ,GAAG;AAAA,EACC,IAAI,EAAE,MAAM,KAAK,OAAO,KAAK,SAAS,MAAM,0BAA0B,KAAK;AAAA,EAC3E,QAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,SAAS,MAAM,0BAA0B,KAAK;AAAA,EACjF,MAAM;AAAA,IACF,KAAK,OAAO,MAAM,QAAQ,OAAO;AAC7B,YAAM,aAAa,WAAW,MAAM,QAAQ,KAAK;AACjD,aAAO,MAAM,aAAa,MAAM;AAAA,IACpC;AAAA,IACA,MAAM,OAAO,MAAM,QAAQ,OAAO;AAC9B,UAAI,EAAE,WAAW,IAAI;AACrB,YAAM,aAAa;AACnB,aAAO,aAAa,MACd,OAAO,KAAK,MAAM,KAAK,QAAQ,YAAY,MAAM,KAAK,KAAK,MAAM,QAAQ,KAAK,KAAK,MAAM,MAAM,QAAQ,MAAM,KAAK,CAAC,MAAM,MAAM;AAAA,IACzI;AAAA,IACA,SAAS;AAAA,EACb;AAAA,EACA,MAAM;AAAA,IAAE,KAAK,QAAQ,OAAO,QAAQ,OAAO;AAAE,aAAO,aAAa,OAAO,MAAM,KAAK,GAAG,EAAE;AAAA,IAAG;AAAA,IACvF,MAAM,QAAQ,OAAO,QAAQ,OAAO;AAAE,aAAO,aAAa,OAAO,MAAM,QAAQ,CAAC,GAAG,CAAC;AAAA,IAAG;AAAA,IACvF,QAAQ;AAAA,EAAM;AACtB,CAAC;AACD,SAAS,aAAa,MAAM,MAAM;AAC9B,MAAI,QAAQ,OAAO,GAAG,MAAM;AAC5B,MAAI,KAAK;AACL,WAAO,IAAI,MAAM,KAAK,KAAK,IAAI;AAC3B,YAAM,KAAK,IAAI,KAAK,EAAE,CAAC,EAAE,MAAM;AACvC,MAAI,SAAS,MAAM,KAAK,OAAO,IAAI,OAAO;AAC1C,WAAS,IAAI,GAAG,IAAI,KAAK;AACrB,cAAU;AACd,MAAI,MAAM,KAAK,OAAO;AAClB,cAAU;AACd,SAAO;AACX;AACA,SAAS,WAAWC,OAAM,QAAQ,OAAO;AACrC,MAAIA,MAAK,MAAM,SAAS,CAAC,QAAQ,KAAKA,MAAK,MAAM,IAAI;AACjD,WAAO;AACX,MAAI,UAAU,OAAO,MAAM,KAAK;AAChC,MAAI,CAAC,QAAQ,UAAU,QAAQ,QAAQA,MAAK,MAAM,QAAQ,QAAQ,MAAM,QAAQ,MAAM,SAAS,CAAC,KAAKA;AACjG,WAAO;AACX,SAAO,SAAS,OAAO,aAAa,KAAK,CAACA,MAAK,QAAQ,OAAO,MAAM,QAAQ,CAAC,EAAE,KAAK;AACxF;AAMA,IAAM,0BAAN,MAA8B;AAAA;AAAA;AAAA;AAAA,EAI1B,YAIA,OAIA,OAIA,SAAS;AACL,SAAK,QAAQ;AACb,SAAK,QAAQ;AACb,SAAK,UAAU;AAIf,SAAK,QAAQ;AAIb,SAAK,MAAM;AAIX,SAAK,SAAS;AAId,SAAK,aAAa;AAIlB,SAAK,eAAe;AAIpB,SAAK,cAAc;AACnB,QAAI,OAAO,KAAK,QAAQ,cAAc;AAClC,WAAK,QAAQ,aAAa;AAC9B,QAAI,OAAO,KAAK,QAAQ,qBAAqB;AACzC,WAAK,QAAQ,oBAAoB;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAIA,WAAW,OAAO,GAAG;AACjB,QAAI,KAAK,QAAQ;AACb,UAAI,CAAC,KAAK,QAAQ;AACd,aAAK,OAAO;AAChB,UAAI,OAAO,GAAG;AACV,YAAI,WAAW,KAAK;AACpB,YAAI,OAAO,OAAO,KAAK,QAAQ;AAC/B,YAAI;AACA,qBAAW,SAAS,MAAM,GAAG,SAAS,SAAS,KAAK,CAAC,EAAE,MAAM;AACjE,iBAAS,IAAI,GAAG,IAAI,MAAM;AACtB,eAAK,OAAO,WAAW;AAAA,MAC/B;AACA,WAAK,SAAS;AAAA,IAClB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAIA,QAAQ,MAAM;AACV,QAAI,OAAO,KAAK,MAAM,IAAI;AAC1B,QAAI,CAAC,MAAM;AACP,UAAI,KAAK,QAAQ,WAAW;AACxB,cAAM,IAAI,MAAM,eAAe,IAAI,uCAAuC;AAC9E,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,OAAO,YAAY,MAAM,GAAG;AAClC,QAAI,MAAM,KAAK;AACf,SAAK,MAAM,cAAc,OAAO,aAAa,KAAK;AAClD,SAAK,SAAS;AACd,MAAE;AACF,SAAK,QAAQ;AACb,SAAK,WAAW,IAAI;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAIA,UAAU;AACN,WAAO,UAAU,KAAK,KAAK,GAAG;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAIA,gBAAgB;AACZ,QAAI,CAAC,KAAK,QAAQ;AACd,WAAK,OAAO;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,SAAS;AACX,SAAK,WAAW;AAChB,QAAI,KAAK,SAAS,KAAK,QAAQ;AAC3B,WAAK,OAAO,KAAK;AACrB,QAAI;AACA,WAAK,OAAO;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAIA,WAAW,MAAM;AACb,SAAK,SAAS;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,KAAKL,OAAMM,UAAS,MAAM;AACtB,QAAI,QAAQN,MAAK,MAAM,IAAI;AAC3B,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,WAAK,MAAM;AAEX,UAAI,CAACM,WAAU,MAAM,CAAC,EAAE,CAAC,KAAK,OAAO,eAAe,KAAK,KAAK,GAAG;AAC7D,aAAK,MAAM,KAAK,IAAI,MAAM,GAAG,KAAK,IAAI,SAAS,CAAC,IAAI;AACxD,WAAK,OAAOA,UAAS,KAAK,IAAI,MAAM,CAAC,GAAG,KAAK,YAAY,IAAI,MAAM,CAAC;AACpE,UAAI,KAAK,MAAM,SAAS;AACpB,aAAK,OAAO;AAAA,IACpB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,MAAM,QAAQ,OAAO;AACxB,QAAI,KAAK,MAAM,KAAK,KAAK,IAAI,GAAG;AAC5B,WAAK,MAAM,KAAK,KAAK,IAAI,EAAE,MAAM,MAAM,QAAQ,KAAK;AAAA,IACxD,OACK;AACD,UAAI,KAAK,QAAQ,WAAW,OAAO;AAC/B,cAAM,IAAI,MAAM,iBAAiB,KAAK,KAAK,OAAO,sCAAsC;AAAA,MAC5F,WACS,CAAC,KAAK,KAAK,QAAQ;AACxB,YAAI,KAAK,KAAK;AACV,eAAK,aAAa,IAAI;AAAA;AAEtB,eAAK,cAAc,IAAI;AAC3B,YAAI,KAAK;AACL,eAAK,WAAW,IAAI;AAAA,MAC5B;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAIA,cAAc,QAAQ;AAClB,WAAO,QAAQ,CAAC,MAAM,GAAG,MAAM,KAAK,OAAO,MAAM,QAAQ,CAAC,CAAC;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA,EAIA,aAAa,QAAQ,iBAAiB,MAAM;AACxC,SAAK,eAAe;AACpB,QAAI,SAAS,CAAC,GAAG,WAAW;AAC5B,QAAI,WAAW,CAAC,MAAM,QAAQ,UAAU;AACpC,UAAI,QAAQ,OAAO,KAAK,QAAQ,CAAC;AAIjC,UAAI,QAAQ,KAAK,KAAK,SAAS,KAAK,QAAQ;AACxC,gBAAQ,MAAM,OAAO,OAAK;AACtB,cAAI,QAAQ,KAAK,OAAO;AACpB,mBAAO;AACX,cAAI,OAAO,OAAO,MAAM,QAAQ,CAAC;AACjC,iBAAO,EAAE,QAAQ,KAAK,KAAK,MAAM,CAAC,KAAK,UAAU,KAAK,KAAK,KAAK,IAAI;AAAA,QACxE,CAAC;AACL,UAAI,UAAU;AACd,iBAAW;AAGX,UAAI,QAAQ,KAAK,UAAU,MAAM,KAAK,UAAQ;AAC1C,YAAI,OAAO,KAAK,QAAQ,KAAK,KAAK,IAAI;AACtC,eAAO,QAAQ,KAAK,4BAA4B,CAAC,KAAK,QAAQ,MAAM;AAAA,MACxE,CAAC,GAAG;AACA,YAAI,CAAC,GAAG,MAAM,IAAI,IAAI,eAAe,KAAK,KAAK,IAAI;AACnD,YAAI,MAAM;AACN,qBAAW;AACX,iBAAO,OAAO,KAAK,SAAS,IAAI,IAAI;AACpC,cAAI,CAAC;AACD,oBAAQ;AAAA,QAChB;AAAA,MACJ;AACA,UAAI,QAAQ,KAAK,UAAU,MAAM,KAAK,UAAQ;AAC1C,YAAI,OAAO,KAAK,QAAQ,KAAK,KAAK,IAAI;AACtC,eAAO,QAAQ,KAAK,4BAA4B,CAAC,KAAK,YAAY,QAAQ,QAAQ,GAAG,IAAI;AAAA,MAC7F,CAAC,GAAG;AACA,YAAI,CAAC,GAAG,MAAM,KAAK,IAAI,gBAAgB,KAAK,KAAK,IAAI;AACrD,YAAI,OAAO;AACP,qBAAW;AACX,iBAAO,OAAO,KAAK,SAAS,IAAI,IAAI;AACpC,cAAI,CAAC;AACD,oBAAQ;AAAA,QAChB;AAAA,MACJ;AACA,UAAI,QAAQ,MAAM,SAAS,MAAM,MAAM,SAAS,CAAC,IAAI;AACrD,UAAI,QAAQ,SAAS,KAAK,QAAQ,MAAM,KAAK,IAAI,EAAE,WAAW;AAC9D,UAAI,MAAM,MAAM,UAAU,QAAQ,IAAI;AAKtC,YAAO,UAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AACjC,YAAI,OAAO,MAAM,CAAC;AAClB,YAAI,CAAC,KAAK,QAAQ,KAAK,KAAK,IAAI,EAAE;AAC9B;AACJ,iBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,cAAI,QAAQ,OAAO,CAAC;AACpB,cAAI,CAAC,KAAK,QAAQ,MAAM,KAAK,IAAI,EAAE;AAC/B;AACJ,cAAI,KAAK,GAAG,KAAK,GAAG;AAChB,gBAAI,IAAI;AACJ,sBAAQ,MAAM,MAAM,GAAG,CAAC,EAAE,OAAO,IAAI,EAAE,OAAO,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,OAAO,MAAM,MAAM,IAAI,GAAG,GAAG,CAAC;AAAA,qBAC1F,IAAI;AACT,sBAAQ,MAAM,MAAM,GAAG,CAAC,EAAE,OAAO,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE,OAAO,MAAM,MAAM,GAAG,GAAG,CAAC;AACnG,qBAAS;AAAA,UACb;AAAA,QACJ;AAAA,MACJ;AAEA,UAAI,OAAO;AACX,aAAO,OAAO,KAAK,IAAI,OAAO,QAAQ,GAAG,KAAK,MAAM,IAAI,EAAE,GAAG,OAAO,IAAI,CAAC;AACrE,UAAE;AAEN,aAAO,OAAO,OAAO;AACjB,aAAK,KAAK,KAAK,WAAW,OAAO,IAAI,GAAG,OAAO,QAAQ,KAAK,GAAG,KAAK;AAExE,UAAI;AACA,aAAK,KAAK,OAAO;AAErB,UAAI,MAAM;AACN,eAAO,OAAO,SAAS,KAAK;AACxB,cAAIC,OAAM,MAAM,OAAO,MAAM;AAC7B,iBAAO,KAAKA,IAAG;AACf,eAAK,KAAK,KAAK,WAAWA,MAAK,MAAM,QAAQ,KAAK,GAAG,KAAK;AAC1D,eAAK,eAAe;AAAA,QACxB;AAGA,YAAI,SAAS,KAAK;AACd,eAAK,KAAK,KAAK,WAAW,OAAO,MAAM,QAAQ,KAAK,IAAI,KAAK,OACzD,KAAK,WAAW,OAAO,OAAO,QAAQ,QAAQ,CAAC,GAAG,KAAK;AAAA;AAE3D,eAAK,OAAO,MAAM,QAAQ,KAAK;AACnC,aAAK,eAAe;AAAA,MACxB;AAOA,WAAK,SAAS,QAAQ,SAAS,SAAS,SAAS,KAAK,WAAW,KAAK,WAAW,GAAG;AAChF,aAAK,eAAe;AAAA,MACxB;AAAA,IACJ;AACA,WAAO,QAAQ,QAAQ;AACvB,aAAS,MAAM,GAAG,OAAO,UAAU;AACnC,SAAK,eAAe;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAW,MAAM,OAAO,YAAY;AAChC,QAAI,KAAK,UAAU,KAAK,OAAO,QAAQ,KAAK;AACxC,WAAK,WAAW,CAAC;AAAA,aACZ,KAAK;AACV,WAAK,WAAW,CAAC;AACrB,QAAI,UAAU,OAAO,KAAK,MAAM,SAAS,cAAc,KAAK,MAAM,QAAQ,KAAK,QAAQ;AACvF,QAAI,YAAY,KAAK;AACrB,SAAK,cAAc;AACnB,SAAK,QAAQ,CAAC,OAAO,GAAG,MAAM;AAC1B,UAAI,KAAK;AACL,aAAK,WAAW,CAAC;AACrB,WAAK,UAAU,OAAO,WAAW,CAAC,GAAG,MAAM,MAAM,KAAK,OAAO,OAAO,MAAM,CAAC,CAAC;AAAA,IAChF,CAAC;AACD,SAAK,cAAc;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,KAAK,cAAc,OAAO;AAC1B,UAAM,IAAI,QAAQ,iBAAiB,CAAC,GAAG,MAAM,KAAK,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,UAAU,IAAI,IAAI,CAAC,EAAE,MAAM,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE,MAAM,IAAI,IAAI,IAAI,OAAO,CAAC;AACvJ,QAAI;AACA,YAAM,IAAI,QAAQ,mBAAmB,MAAM,EAAE,QAAQ,wBAAwB,UAAU,EAAE,QAAQ,iBAAiB,QAAQ;AAC9H,QAAI,KAAK,QAAQ;AACb,YAAM,IAAI,QAAQ,KAAK,QAAQ,uBAAuB,MAAM;AAChE,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,KAAK;AACP,QAAI,OAAO,IAAI,QAAQ,GAAG,KAAK,KAAK,OAAO,IAAI,QAAQ,GAAG,KAAK,KAAK,OAAO;AAC3E,WAAO,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,KAAK,GAAG;AACX,QAAI,MAAM;AACV,aAAS,IAAI,GAAG,IAAI,GAAG;AACnB,aAAO;AACX,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,WAAW,MAAM,MAAM,QAAQ,OAAO;AAClC,QAAI,OAAO,KAAK,QAAQ,KAAK,KAAK,IAAI;AACtC,QAAI,QAAQ,OAAO,KAAK,OAAO,KAAK;AACpC,WAAO,OAAO,SAAS,WAAW,QAAQ,MAAM,MAAM,MAAM,QAAQ,KAAK;AAAA,EAC7E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,uBAAuBP,OAAM;AACzB,WAAO;AAAA,MACH,UAAUA,MAAK,MAAM,QAAQ,KAAK,CAAC,MAAS,GAAG,CAAC;AAAA,MAChD,WAAWA,MAAK,MAAM,QAAQ,KAAK,CAAC,MAAS,GAAG,CAAC;AAAA,IACrD;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAIA,YAAY,QAAQ,OAAO,MAAM;AAC7B,aAAQ,SAAS;AACb,UAAI,SAAS,OAAO;AAChB,eAAO;AACX,UAAI,OAAO,OAAO,MAAM,KAAK;AAC7B,UAAI,KAAK,KAAK,QAAQ,KAAK,QAAQ;AAC/B,eAAO,KAAK,QAAQ,KAAK,KAAK;AAClC;AAAA,IACJ;AAAA,EACJ;AACJ;;;AC32BA,SAAS,OAAO;AAAC;AACjB,KAAK,YAAY;AAAA,EACf,MAAM,SAAS,KAAK,WAAW,WAAW;AACxC,QAAI;AACJ,QAAI,UAAU,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAC;AACnF,QAAI,WAAW,QAAQ;AACvB,QAAI,OAAO,YAAY,YAAY;AACjC,iBAAW;AACX,gBAAU,CAAC;AAAA,IACb;AACA,QAAI,OAAO;AACX,aAAS,KAAK,OAAO;AACnB,cAAQ,KAAK,YAAY,OAAO,OAAO;AACvC,UAAI,UAAU;AACZ,mBAAW,WAAY;AACrB,mBAAS,KAAK;AAAA,QAChB,GAAG,CAAC;AACJ,eAAO;AAAA,MACT,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF;AAGA,gBAAY,KAAK,UAAU,WAAW,OAAO;AAC7C,gBAAY,KAAK,UAAU,WAAW,OAAO;AAC7C,gBAAY,KAAK,YAAY,KAAK,SAAS,WAAW,OAAO,CAAC;AAC9D,gBAAY,KAAK,YAAY,KAAK,SAAS,WAAW,OAAO,CAAC;AAC9D,QAAI,SAAS,UAAU,QACrB,SAAS,UAAU;AACrB,QAAI,aAAa;AACjB,QAAI,gBAAgB,SAAS;AAC7B,QAAI,QAAQ,iBAAiB,MAAM;AACjC,sBAAgB,KAAK,IAAI,eAAe,QAAQ,aAAa;AAAA,IAC/D;AACA,QAAI,oBAAoB,mBAAmB,QAAQ,aAAa,QAAQ,qBAAqB,SAAS,mBAAmB;AACzH,QAAI,sBAAsB,KAAK,IAAI,IAAI;AACvC,QAAI,WAAW,CAAC;AAAA,MACd,QAAQ;AAAA,MACR,eAAe;AAAA,IACjB,CAAC;AAGD,QAAI,SAAS,KAAK,cAAc,SAAS,CAAC,GAAG,WAAW,WAAW,GAAG,OAAO;AAC7E,QAAI,SAAS,CAAC,EAAE,SAAS,KAAK,UAAU,SAAS,KAAK,QAAQ;AAE5D,aAAO,KAAK,YAAY,MAAM,SAAS,CAAC,EAAE,eAAe,WAAW,WAAW,KAAK,eAAe,CAAC;AAAA,IACtG;AAmBA,QAAI,wBAAwB,WAC1B,wBAAwB;AAG1B,aAAS,iBAAiB;AACxB,eAAS,eAAe,KAAK,IAAI,uBAAuB,CAAC,UAAU,GAAG,gBAAgB,KAAK,IAAI,uBAAuB,UAAU,GAAG,gBAAgB,GAAG;AACpJ,YAAI,WAAW;AACf,YAAI,aAAa,SAAS,eAAe,CAAC,GACxC,UAAU,SAAS,eAAe,CAAC;AACrC,YAAI,YAAY;AAEd,mBAAS,eAAe,CAAC,IAAI;AAAA,QAC/B;AACA,YAAI,SAAS;AACb,YAAI,SAAS;AAEX,cAAI,gBAAgB,QAAQ,SAAS;AACrC,mBAAS,WAAW,KAAK,iBAAiB,gBAAgB;AAAA,QAC5D;AACA,YAAI,YAAY,cAAc,WAAW,SAAS,IAAI;AACtD,YAAI,CAAC,UAAU,CAAC,WAAW;AAEzB,mBAAS,YAAY,IAAI;AACzB;AAAA,QACF;AAKA,YAAI,CAAC,aAAa,UAAU,WAAW,SAAS,QAAQ,QAAQ;AAC9D,qBAAW,KAAK,UAAU,SAAS,MAAM,OAAO,GAAG,OAAO;AAAA,QAC5D,OAAO;AACL,qBAAW,KAAK,UAAU,YAAY,OAAO,MAAM,GAAG,OAAO;AAAA,QAC/D;AACA,iBAAS,KAAK,cAAc,UAAU,WAAW,WAAW,cAAc,OAAO;AACjF,YAAI,SAAS,SAAS,KAAK,UAAU,SAAS,KAAK,QAAQ;AAEzD,iBAAO,KAAK,YAAY,MAAM,SAAS,eAAe,WAAW,WAAW,KAAK,eAAe,CAAC;AAAA,QACnG,OAAO;AACL,mBAAS,YAAY,IAAI;AACzB,cAAI,SAAS,SAAS,KAAK,QAAQ;AACjC,oCAAwB,KAAK,IAAI,uBAAuB,eAAe,CAAC;AAAA,UAC1E;AACA,cAAI,SAAS,KAAK,QAAQ;AACxB,oCAAwB,KAAK,IAAI,uBAAuB,eAAe,CAAC;AAAA,UAC1E;AAAA,QACF;AAAA,MACF;AACA;AAAA,IACF;AAMA,QAAI,UAAU;AACZ,OAAC,SAAS,OAAO;AACf,mBAAW,WAAY;AACrB,cAAI,aAAa,iBAAiB,KAAK,IAAI,IAAI,qBAAqB;AAClE,mBAAO,SAAS;AAAA,UAClB;AACA,cAAI,CAAC,eAAe,GAAG;AACrB,iBAAK;AAAA,UACP;AAAA,QACF,GAAG,CAAC;AAAA,MACN,GAAG;AAAA,IACL,OAAO;AACL,aAAO,cAAc,iBAAiB,KAAK,IAAI,KAAK,qBAAqB;AACvE,YAAI,MAAM,eAAe;AACzB,YAAI,KAAK;AACP,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAW,SAAS,UAAU,MAAM,OAAO,SAAS,WAAW,SAAS;AACtE,QAAI,OAAO,KAAK;AAChB,QAAI,QAAQ,CAAC,QAAQ,qBAAqB,KAAK,UAAU,SAAS,KAAK,YAAY,SAAS;AAC1F,aAAO;AAAA,QACL,QAAQ,KAAK,SAAS;AAAA,QACtB,eAAe;AAAA,UACb,OAAO,KAAK,QAAQ;AAAA,UACpB;AAAA,UACA;AAAA,UACA,mBAAmB,KAAK;AAAA,QAC1B;AAAA,MACF;AAAA,IACF,OAAO;AACL,aAAO;AAAA,QACL,QAAQ,KAAK,SAAS;AAAA,QACtB,eAAe;AAAA,UACb,OAAO;AAAA,UACP;AAAA,UACA;AAAA,UACA,mBAAmB;AAAA,QACrB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,eAAe,SAAS,cAAc,UAAU,WAAW,WAAW,cAAc,SAAS;AAC3F,QAAI,SAAS,UAAU,QACrB,SAAS,UAAU,QACnB,SAAS,SAAS,QAClB,SAAS,SAAS,cAClB,cAAc;AAChB,WAAO,SAAS,IAAI,UAAU,SAAS,IAAI,UAAU,KAAK,OAAO,UAAU,SAAS,CAAC,GAAG,UAAU,SAAS,CAAC,GAAG,OAAO,GAAG;AACvH;AACA;AACA;AACA,UAAI,QAAQ,mBAAmB;AAC7B,iBAAS,gBAAgB;AAAA,UACvB,OAAO;AAAA,UACP,mBAAmB,SAAS;AAAA,UAC5B,OAAO;AAAA,UACP,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF;AACA,QAAI,eAAe,CAAC,QAAQ,mBAAmB;AAC7C,eAAS,gBAAgB;AAAA,QACvB,OAAO;AAAA,QACP,mBAAmB,SAAS;AAAA,QAC5B,OAAO;AAAA,QACP,SAAS;AAAA,MACX;AAAA,IACF;AACA,aAAS,SAAS;AAClB,WAAO;AAAA,EACT;AAAA,EACA,QAAQ,SAAS,OAAO,MAAM,OAAO,SAAS;AAC5C,QAAI,QAAQ,YAAY;AACtB,aAAO,QAAQ,WAAW,MAAM,KAAK;AAAA,IACvC,OAAO;AACL,aAAO,SAAS,SAAS,QAAQ,cAAc,KAAK,YAAY,MAAM,MAAM,YAAY;AAAA,IAC1F;AAAA,EACF;AAAA,EACA,aAAa,SAAS,YAAY,OAAO;AACvC,QAAI,MAAM,CAAC;AACX,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAI,MAAM,CAAC,GAAG;AACZ,YAAI,KAAK,MAAM,CAAC,CAAC;AAAA,MACnB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EACA,WAAW,SAAS,UAAU,OAAO;AACnC,WAAO;AAAA,EACT;AAAA,EACA,UAAU,SAAS,SAAS,OAAO;AACjC,WAAO,MAAM,KAAK,KAAK;AAAA,EACzB;AAAA,EACA,MAAM,SAASQ,MAAK,OAAO;AACzB,WAAO,MAAM,KAAK,EAAE;AAAA,EACtB;AAAA,EACA,aAAa,SAASC,aAAY,eAAe;AAC/C,WAAO;AAAA,EACT;AACF;AACA,SAAS,YAAYC,OAAM,eAAe,WAAW,WAAW,iBAAiB;AAG/E,MAAI,aAAa,CAAC;AAClB,MAAI;AACJ,SAAO,eAAe;AACpB,eAAW,KAAK,aAAa;AAC7B,oBAAgB,cAAc;AAC9B,WAAO,cAAc;AACrB,oBAAgB;AAAA,EAClB;AACA,aAAW,QAAQ;AACnB,MAAI,eAAe,GACjB,eAAe,WAAW,QAC1B,SAAS,GACT,SAAS;AACX,SAAO,eAAe,cAAc,gBAAgB;AAClD,QAAI,YAAY,WAAW,YAAY;AACvC,QAAI,CAAC,UAAU,SAAS;AACtB,UAAI,CAAC,UAAU,SAAS,iBAAiB;AACvC,YAAI,QAAQ,UAAU,MAAM,QAAQ,SAAS,UAAU,KAAK;AAC5D,gBAAQ,MAAM,IAAI,SAAUC,QAAO,GAAG;AACpC,cAAI,WAAW,UAAU,SAAS,CAAC;AACnC,iBAAO,SAAS,SAASA,OAAM,SAAS,WAAWA;AAAA,QACrD,CAAC;AACD,kBAAU,QAAQD,MAAK,KAAK,KAAK;AAAA,MACnC,OAAO;AACL,kBAAU,QAAQA,MAAK,KAAK,UAAU,MAAM,QAAQ,SAAS,UAAU,KAAK,CAAC;AAAA,MAC/E;AACA,gBAAU,UAAU;AAGpB,UAAI,CAAC,UAAU,OAAO;AACpB,kBAAU,UAAU;AAAA,MACtB;AAAA,IACF,OAAO;AACL,gBAAU,QAAQA,MAAK,KAAK,UAAU,MAAM,QAAQ,SAAS,UAAU,KAAK,CAAC;AAC7E,gBAAU,UAAU;AAAA,IACtB;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAI,gBAAgB,IAAI,KAAK;AAK7B,SAAS,oBAAoB,MAAM,MAAM;AACvC,MAAI;AACJ,OAAK,IAAI,GAAG,IAAI,KAAK,UAAU,IAAI,KAAK,QAAQ,KAAK;AACnD,QAAI,KAAK,CAAC,KAAK,KAAK,CAAC,GAAG;AACtB,aAAO,KAAK,MAAM,GAAG,CAAC;AAAA,IACxB;AAAA,EACF;AACA,SAAO,KAAK,MAAM,GAAG,CAAC;AACxB;AACA,SAAS,oBAAoB,MAAM,MAAM;AACvC,MAAI;AAKJ,MAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,KAAK,SAAS,CAAC,KAAK,KAAK,KAAK,SAAS,CAAC,GAAG;AACpE,WAAO;AAAA,EACT;AACA,OAAK,IAAI,GAAG,IAAI,KAAK,UAAU,IAAI,KAAK,QAAQ,KAAK;AACnD,QAAI,KAAK,KAAK,UAAU,IAAI,EAAE,KAAK,KAAK,KAAK,UAAU,IAAI,EAAE,GAAG;AAC9D,aAAO,KAAK,MAAM,CAAC,CAAC;AAAA,IACtB;AAAA,EACF;AACA,SAAO,KAAK,MAAM,CAAC,CAAC;AACtB;AACA,SAAS,cAAc,QAAQ,WAAW,WAAW;AACnD,MAAI,OAAO,MAAM,GAAG,UAAU,MAAM,KAAK,WAAW;AAClD,UAAM,MAAM,UAAU,OAAO,KAAK,UAAU,MAAM,GAAG,6BAA6B,EAAE,OAAO,KAAK,UAAU,SAAS,GAAG,iBAAiB,CAAC;AAAA,EAC1I;AACA,SAAO,YAAY,OAAO,MAAM,UAAU,MAAM;AAClD;AACA,SAAS,cAAc,QAAQ,WAAW,WAAW;AACnD,MAAI,CAAC,WAAW;AACd,WAAO,SAAS;AAAA,EAClB;AACA,MAAI,OAAO,MAAM,CAAC,UAAU,MAAM,KAAK,WAAW;AAChD,UAAM,MAAM,UAAU,OAAO,KAAK,UAAU,MAAM,GAAG,2BAA2B,EAAE,OAAO,KAAK,UAAU,SAAS,GAAG,iBAAiB,CAAC;AAAA,EACxI;AACA,SAAO,OAAO,MAAM,GAAG,CAAC,UAAU,MAAM,IAAI;AAC9C;AACA,SAAS,aAAa,QAAQ,WAAW;AACvC,SAAO,cAAc,QAAQ,WAAW,EAAE;AAC5C;AACA,SAAS,aAAa,QAAQ,WAAW;AACvC,SAAO,cAAc,QAAQ,WAAW,EAAE;AAC5C;AACA,SAAS,eAAe,SAAS,SAAS;AACxC,SAAO,QAAQ,MAAM,GAAG,aAAa,SAAS,OAAO,CAAC;AACxD;AAGA,SAAS,aAAa,GAAG,GAAG;AAE1B,MAAI,SAAS;AACb,MAAI,EAAE,SAAS,EAAE,QAAQ;AACvB,aAAS,EAAE,SAAS,EAAE;AAAA,EACxB;AACA,MAAI,OAAO,EAAE;AACb,MAAI,EAAE,SAAS,EAAE,QAAQ;AACvB,WAAO,EAAE;AAAA,EACX;AAIA,MAAIE,OAAM,MAAM,IAAI;AACpB,MAAI,IAAI;AACR,EAAAA,KAAI,CAAC,IAAI;AACT,WAAS,IAAI,GAAG,IAAI,MAAM,KAAK;AAC7B,QAAI,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG;AAChB,MAAAA,KAAI,CAAC,IAAIA,KAAI,CAAC;AAAA,IAChB,OAAO;AACL,MAAAA,KAAI,CAAC,IAAI;AAAA,IACX;AACA,WAAO,IAAI,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG;AAC5B,UAAIA,KAAI,CAAC;AAAA,IACX;AACA,QAAI,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG;AAChB;AAAA,IACF;AAAA,EACF;AAEA,MAAI;AACJ,WAAS,IAAI,QAAQ,IAAI,EAAE,QAAQ,KAAK;AACtC,WAAO,IAAI,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG;AAC5B,UAAIA,KAAI,CAAC;AAAA,IACX;AACA,QAAI,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG;AAChB;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAKA,SAAS,sBAAsB,QAAQ;AACrC,SAAO,OAAO,SAAS,MAAM,KAAK,CAAC,OAAO,WAAW,IAAI,KAAK,CAAC,OAAO,MAAM,SAAS;AACvF;AAKA,SAAS,uBAAuB,QAAQ;AACtC,SAAO,CAAC,OAAO,SAAS,MAAM,KAAK,OAAO,SAAS,IAAI;AACzD;AAoBA,IAAI,oBAAoB;AA2BxB,IAAI,8BAA8B,IAAI,OAAO,IAAI,OAAO,mBAAmB,YAAY,EAAE,OAAO,mBAAmB,GAAG,GAAG,IAAI;AAC7H,IAAI,WAAW,IAAI,KAAK;AACxB,SAAS,SAAS,SAAU,MAAM,OAAO,SAAS;AAChD,MAAI,QAAQ,YAAY;AACtB,WAAO,KAAK,YAAY;AACxB,YAAQ,MAAM,YAAY;AAAA,EAC5B;AACA,SAAO,KAAK,KAAK,MAAM,MAAM,KAAK;AACpC;AACA,SAAS,WAAW,SAAU,OAAO;AACnC,MAAI,UAAU,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAC;AACnF,MAAI;AACJ,MAAI,QAAQ,eAAe;AACzB,QAAI,QAAQ,cAAc,gBAAgB,EAAE,eAAe,QAAQ;AACjE,YAAM,IAAI,MAAM,wDAAwD;AAAA,IAC1E;AACA,YAAQ,MAAM,KAAK,QAAQ,cAAc,QAAQ,KAAK,GAAG,SAAU,SAAS;AAC1E,aAAO,QAAQ;AAAA,IACjB,CAAC;AAAA,EACH,OAAO;AACL,YAAQ,MAAM,MAAM,2BAA2B,KAAK,CAAC;AAAA,EACvD;AACA,MAAI,SAAS,CAAC;AACd,MAAI,WAAW;AACf,QAAM,QAAQ,SAAU,MAAM;AAC5B,QAAI,KAAK,KAAK,IAAI,GAAG;AACnB,UAAI,YAAY,MAAM;AACpB,eAAO,KAAK,IAAI;AAAA,MAClB,OAAO;AACL,eAAO,KAAK,OAAO,IAAI,IAAI,IAAI;AAAA,MACjC;AAAA,IACF,WAAW,KAAK,KAAK,QAAQ,GAAG;AAC9B,UAAI,OAAO,OAAO,SAAS,CAAC,KAAK,UAAU;AACzC,eAAO,KAAK,OAAO,IAAI,IAAI,IAAI;AAAA,MACjC,OAAO;AACL,eAAO,KAAK,WAAW,IAAI;AAAA,MAC7B;AAAA,IACF,OAAO;AACL,aAAO,KAAK,IAAI;AAAA,IAClB;AACA,eAAW;AAAA,EACb,CAAC;AACD,SAAO;AACT;AACA,SAAS,OAAO,SAAU,QAAQ;AAMhC,SAAO,OAAO,IAAI,SAAU,OAAO,GAAG;AACpC,QAAI,KAAK,GAAG;AACV,aAAO;AAAA,IACT,OAAO;AACL,aAAO,MAAM,QAAQ,QAAQ,EAAE;AAAA,IACjC;AAAA,EACF,CAAC,EAAE,KAAK,EAAE;AACZ;AACA,SAAS,cAAc,SAAU,SAAS,SAAS;AACjD,MAAI,CAAC,WAAW,QAAQ,mBAAmB;AACzC,WAAO;AAAA,EACT;AACA,MAAI,WAAW;AAGf,MAAI,YAAY;AAChB,MAAI,WAAW;AACf,UAAQ,QAAQ,SAAUC,SAAQ;AAChC,QAAIA,QAAO,OAAO;AAChB,kBAAYA;AAAA,IACd,WAAWA,QAAO,SAAS;AACzB,iBAAWA;AAAA,IACb,OAAO;AACL,UAAI,aAAa,UAAU;AAEzB,wCAAgC,UAAU,UAAU,WAAWA,OAAM;AAAA,MACvE;AACA,iBAAWA;AACX,kBAAY;AACZ,iBAAW;AAAA,IACb;AAAA,EACF,CAAC;AACD,MAAI,aAAa,UAAU;AACzB,oCAAgC,UAAU,UAAU,WAAW,IAAI;AAAA,EACrE;AACA,SAAO;AACT;AAWA,SAAS,gCAAgC,WAAW,UAAU,WAAW,SAAS;AA2ChF,MAAI,YAAY,WAAW;AACzB,QAAI,cAAc,SAAS,MAAM,MAAM,MAAM,EAAE,CAAC;AAChD,QAAI,cAAc,SAAS,MAAM,MAAM,MAAM,EAAE,CAAC;AAChD,QAAI,cAAc,UAAU,MAAM,MAAM,MAAM,EAAE,CAAC;AACjD,QAAI,cAAc,UAAU,MAAM,MAAM,MAAM,EAAE,CAAC;AACjD,QAAI,WAAW;AACb,UAAI,iBAAiB,oBAAoB,aAAa,WAAW;AACjE,gBAAU,QAAQ,cAAc,UAAU,OAAO,aAAa,cAAc;AAC5E,eAAS,QAAQ,aAAa,SAAS,OAAO,cAAc;AAC5D,gBAAU,QAAQ,aAAa,UAAU,OAAO,cAAc;AAAA,IAChE;AACA,QAAI,SAAS;AACX,UAAI,iBAAiB,oBAAoB,aAAa,WAAW;AACjE,cAAQ,QAAQ,cAAc,QAAQ,OAAO,aAAa,cAAc;AACxE,eAAS,QAAQ,aAAa,SAAS,OAAO,cAAc;AAC5D,gBAAU,QAAQ,aAAa,UAAU,OAAO,cAAc;AAAA,IAChE;AAAA,EACF,WAAW,WAAW;AAOpB,QAAI,WAAW;AACb,gBAAU,QAAQ,UAAU,MAAM,QAAQ,QAAQ,EAAE;AAAA,IACtD;AACA,QAAI,SAAS;AACX,cAAQ,QAAQ,QAAQ,MAAM,QAAQ,QAAQ,EAAE;AAAA,IAClD;AAAA,EAEF,WAAW,aAAa,SAAS;AAC/B,QAAI,YAAY,QAAQ,MAAM,MAAM,MAAM,EAAE,CAAC,GAC3C,aAAa,SAAS,MAAM,MAAM,MAAM,EAAE,CAAC,GAC3C,WAAW,SAAS,MAAM,MAAM,MAAM,EAAE,CAAC;AAI3C,QAAI,aAAa,oBAAoB,WAAW,UAAU;AAC1D,aAAS,QAAQ,aAAa,SAAS,OAAO,UAAU;AAKxD,QAAI,WAAW,oBAAoB,aAAa,WAAW,UAAU,GAAG,QAAQ;AAChF,aAAS,QAAQ,aAAa,SAAS,OAAO,QAAQ;AACtD,YAAQ,QAAQ,cAAc,QAAQ,OAAO,WAAW,QAAQ;AAIhE,cAAU,QAAQ,cAAc,UAAU,OAAO,WAAW,UAAU,MAAM,GAAG,UAAU,SAAS,SAAS,MAAM,CAAC;AAAA,EACpH,WAAW,SAAS;AAIlB,QAAI,kBAAkB,QAAQ,MAAM,MAAM,MAAM,EAAE,CAAC;AACnD,QAAI,mBAAmB,SAAS,MAAM,MAAM,MAAM,EAAE,CAAC;AACrD,QAAI,UAAU,eAAe,kBAAkB,eAAe;AAC9D,aAAS,QAAQ,aAAa,SAAS,OAAO,OAAO;AAAA,EACvD,WAAW,WAAW;AAIpB,QAAI,oBAAoB,UAAU,MAAM,MAAM,MAAM,EAAE,CAAC;AACvD,QAAI,mBAAmB,SAAS,MAAM,MAAM,MAAM,EAAE,CAAC;AACrD,QAAI,WAAW,eAAe,mBAAmB,gBAAgB;AACjE,aAAS,QAAQ,aAAa,SAAS,OAAO,QAAQ;AAAA,EACxD;AACF;AACA,IAAI,oBAAoB,IAAI,KAAK;AACjC,kBAAkB,WAAW,SAAU,OAAO;AAM5C,MAAI,QAAQ,IAAI,OAAO,cAAc,OAAO,mBAAmB,qBAAqB,EAAE,OAAO,mBAAmB,GAAG,GAAG,IAAI;AAC1H,SAAO,MAAM,MAAM,KAAK,KAAK,CAAC;AAChC;AAmBA,IAAI,WAAW,IAAI,KAAK;AACxB,SAAS,WAAW,SAAU,OAAO,SAAS;AAC5C,MAAI,QAAQ,iBAAiB;AAE3B,YAAQ,MAAM,QAAQ,SAAS,IAAI;AAAA,EACrC;AACA,MAAI,WAAW,CAAC,GACd,mBAAmB,MAAM,MAAM,WAAW;AAG5C,MAAI,CAAC,iBAAiB,iBAAiB,SAAS,CAAC,GAAG;AAClD,qBAAiB,IAAI;AAAA,EACvB;AAGA,WAAS,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;AAChD,QAAI,OAAO,iBAAiB,CAAC;AAC7B,QAAI,IAAI,KAAK,CAAC,QAAQ,gBAAgB;AACpC,eAAS,SAAS,SAAS,CAAC,KAAK;AAAA,IACnC,OAAO;AACL,eAAS,KAAK,IAAI;AAAA,IACpB;AAAA,EACF;AACA,SAAO;AACT;AACA,SAAS,SAAS,SAAU,MAAM,OAAO,SAAS;AAQhD,MAAI,QAAQ,kBAAkB;AAC5B,QAAI,CAAC,QAAQ,kBAAkB,CAAC,KAAK,SAAS,IAAI,GAAG;AACnD,aAAO,KAAK,KAAK;AAAA,IACnB;AACA,QAAI,CAAC,QAAQ,kBAAkB,CAAC,MAAM,SAAS,IAAI,GAAG;AACpD,cAAQ,MAAM,KAAK;AAAA,IACrB;AAAA,EACF,WAAW,QAAQ,sBAAsB,CAAC,QAAQ,gBAAgB;AAChE,QAAI,KAAK,SAAS,IAAI,GAAG;AACvB,aAAO,KAAK,MAAM,GAAG,EAAE;AAAA,IACzB;AACA,QAAI,MAAM,SAAS,IAAI,GAAG;AACxB,cAAQ,MAAM,MAAM,GAAG,EAAE;AAAA,IAC3B;AAAA,EACF;AACA,SAAO,KAAK,UAAU,OAAO,KAAK,MAAM,MAAM,OAAO,OAAO;AAC9D;AACA,SAAS,UAAU,QAAQ,QAAQ,UAAU;AAC3C,SAAO,SAAS,KAAK,QAAQ,QAAQ,QAAQ;AAC/C;AAeA,IAAI,eAAe,IAAI,KAAK;AAC5B,aAAa,WAAW,SAAU,OAAO;AACvC,SAAO,MAAM,MAAM,uBAAuB;AAC5C;AAKA,IAAI,UAAU,IAAI,KAAK;AACvB,QAAQ,WAAW,SAAU,OAAO;AAClC,SAAO,MAAM,MAAM,eAAe;AACpC;AAKA,SAAS,QAAQ,GAAG,GAAG;AACrB,MAAI,IAAI,OAAO,KAAK,CAAC;AACrB,MAAI,OAAO,uBAAuB;AAChC,QAAI,IAAI,OAAO,sBAAsB,CAAC;AACtC,UAAM,IAAI,EAAE,OAAO,SAAUC,IAAG;AAC9B,aAAO,OAAO,yBAAyB,GAAGA,EAAC,EAAE;AAAA,IAC/C,CAAC,IAAI,EAAE,KAAK,MAAM,GAAG,CAAC;AAAA,EACxB;AACA,SAAO;AACT;AACA,SAAS,eAAe,GAAG;AACzB,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,QAAI,IAAI,QAAQ,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC;AAC/C,QAAI,IAAI,QAAQ,OAAO,CAAC,GAAG,IAAE,EAAE,QAAQ,SAAUA,IAAG;AAClD,sBAAgB,GAAGA,IAAG,EAAEA,EAAC,CAAC;AAAA,IAC5B,CAAC,IAAI,OAAO,4BAA4B,OAAO,iBAAiB,GAAG,OAAO,0BAA0B,CAAC,CAAC,IAAI,QAAQ,OAAO,CAAC,CAAC,EAAE,QAAQ,SAAUA,IAAG;AAChJ,aAAO,eAAe,GAAGA,IAAG,OAAO,yBAAyB,GAAGA,EAAC,CAAC;AAAA,IACnE,CAAC;AAAA,EACH;AACA,SAAO;AACT;AACA,SAAS,aAAa,GAAG,GAAG;AAC1B,MAAI,YAAY,OAAO,KAAK,CAAC,EAAG,QAAO;AACvC,MAAI,IAAI,EAAE,OAAO,WAAW;AAC5B,MAAI,WAAW,GAAG;AAChB,QAAI,IAAI,EAAE,KAAK,GAAG,KAAK,SAAS;AAChC,QAAI,YAAY,OAAO,EAAG,QAAO;AACjC,UAAM,IAAI,UAAU,8CAA8C;AAAA,EACpE;AACA,UAAQ,aAAa,IAAI,SAAS,QAAQ,CAAC;AAC7C;AACA,SAAS,eAAe,GAAG;AACzB,MAAI,IAAI,aAAa,GAAG,QAAQ;AAChC,SAAO,YAAY,OAAO,IAAI,IAAI,IAAI;AACxC;AACA,SAAS,QAAQ,GAAG;AAClB;AAEA,SAAO,UAAU,cAAc,OAAO,UAAU,YAAY,OAAO,OAAO,WAAW,SAAUC,IAAG;AAChG,WAAO,OAAOA;AAAA,EAChB,IAAI,SAAUA,IAAG;AACf,WAAOA,MAAK,cAAc,OAAO,UAAUA,GAAE,gBAAgB,UAAUA,OAAM,OAAO,YAAY,WAAW,OAAOA;AAAA,EACpH,GAAG,QAAQ,CAAC;AACd;AACA,SAAS,gBAAgB,KAAK,KAAK,OAAO;AACxC,QAAM,eAAe,GAAG;AACxB,MAAI,OAAO,KAAK;AACd,WAAO,eAAe,KAAK,KAAK;AAAA,MAC9B;AAAA,MACA,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,UAAU;AAAA,IACZ,CAAC;AAAA,EACH,OAAO;AACL,QAAI,GAAG,IAAI;AAAA,EACb;AACA,SAAO;AACT;AACA,SAAS,mBAAmB,KAAK;AAC/B,SAAO,mBAAmB,GAAG,KAAK,iBAAiB,GAAG,KAAK,4BAA4B,GAAG,KAAK,mBAAmB;AACpH;AACA,SAAS,mBAAmB,KAAK;AAC/B,MAAI,MAAM,QAAQ,GAAG,EAAG,QAAO,kBAAkB,GAAG;AACtD;AACA,SAAS,iBAAiB,MAAM;AAC9B,MAAI,OAAO,WAAW,eAAe,KAAK,OAAO,QAAQ,KAAK,QAAQ,KAAK,YAAY,KAAK,KAAM,QAAO,MAAM,KAAK,IAAI;AAC1H;AACA,SAAS,4BAA4B,GAAG,QAAQ;AAC9C,MAAI,CAAC,EAAG;AACR,MAAI,OAAO,MAAM,SAAU,QAAO,kBAAkB,GAAG,MAAM;AAC7D,MAAI,IAAI,OAAO,UAAU,SAAS,KAAK,CAAC,EAAE,MAAM,GAAG,EAAE;AACrD,MAAI,MAAM,YAAY,EAAE,YAAa,KAAI,EAAE,YAAY;AACvD,MAAI,MAAM,SAAS,MAAM,MAAO,QAAO,MAAM,KAAK,CAAC;AACnD,MAAI,MAAM,eAAe,2CAA2C,KAAK,CAAC,EAAG,QAAO,kBAAkB,GAAG,MAAM;AACjH;AACA,SAAS,kBAAkB,KAAK,KAAK;AACnC,MAAI,OAAO,QAAQ,MAAM,IAAI,OAAQ,OAAM,IAAI;AAC/C,WAAS,IAAI,GAAG,OAAO,IAAI,MAAM,GAAG,GAAG,IAAI,KAAK,IAAK,MAAK,CAAC,IAAI,IAAI,CAAC;AACpE,SAAO;AACT;AACA,SAAS,qBAAqB;AAC5B,QAAM,IAAI,UAAU,sIAAsI;AAC5J;AAEA,IAAI,WAAW,IAAI,KAAK;AAGxB,SAAS,kBAAkB;AAC3B,SAAS,WAAW,SAAS;AAC7B,SAAS,YAAY,SAAU,OAAO,SAAS;AAC7C,MAAI,uBAAuB,QAAQ,sBACjC,wBAAwB,QAAQ,mBAChC,oBAAoB,0BAA0B,SAAS,SAAU,GAAG,GAAG;AACrE,WAAO,OAAO,MAAM,cAAc,uBAAuB;AAAA,EAC3D,IAAI;AACN,SAAO,OAAO,UAAU,WAAW,QAAQ,KAAK,UAAU,aAAa,OAAO,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,IAAI;AACvI;AACA,SAAS,SAAS,SAAU,MAAM,OAAO,SAAS;AAChD,SAAO,KAAK,UAAU,OAAO,KAAK,UAAU,KAAK,QAAQ,cAAc,IAAI,GAAG,MAAM,QAAQ,cAAc,IAAI,GAAG,OAAO;AAC1H;AAOA,SAAS,aAAa,KAAK,OAAO,kBAAkB,UAAU,KAAK;AACjE,UAAQ,SAAS,CAAC;AAClB,qBAAmB,oBAAoB,CAAC;AACxC,MAAI,UAAU;AACZ,UAAM,SAAS,KAAK,GAAG;AAAA,EACzB;AACA,MAAI;AACJ,OAAK,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AACpC,QAAI,MAAM,CAAC,MAAM,KAAK;AACpB,aAAO,iBAAiB,CAAC;AAAA,IAC3B;AAAA,EACF;AACA,MAAI;AACJ,MAAI,qBAAqB,OAAO,UAAU,SAAS,KAAK,GAAG,GAAG;AAC5D,UAAM,KAAK,GAAG;AACd,uBAAmB,IAAI,MAAM,IAAI,MAAM;AACvC,qBAAiB,KAAK,gBAAgB;AACtC,SAAK,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,GAAG;AAClC,uBAAiB,CAAC,IAAI,aAAa,IAAI,CAAC,GAAG,OAAO,kBAAkB,UAAU,GAAG;AAAA,IACnF;AACA,UAAM,IAAI;AACV,qBAAiB,IAAI;AACrB,WAAO;AAAA,EACT;AACA,MAAI,OAAO,IAAI,QAAQ;AACrB,UAAM,IAAI,OAAO;AAAA,EACnB;AACA,MAAI,QAAQ,GAAG,MAAM,YAAY,QAAQ,MAAM;AAC7C,UAAM,KAAK,GAAG;AACd,uBAAmB,CAAC;AACpB,qBAAiB,KAAK,gBAAgB;AACtC,QAAI,aAAa,CAAC,GAChB;AACF,SAAK,QAAQ,KAAK;AAEhB,UAAI,OAAO,UAAU,eAAe,KAAK,KAAK,IAAI,GAAG;AACnD,mBAAW,KAAK,IAAI;AAAA,MACtB;AAAA,IACF;AACA,eAAW,KAAK;AAChB,SAAK,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK,GAAG;AACzC,aAAO,WAAW,CAAC;AACnB,uBAAiB,IAAI,IAAI,aAAa,IAAI,IAAI,GAAG,OAAO,kBAAkB,UAAU,IAAI;AAAA,IAC1F;AACA,UAAM,IAAI;AACV,qBAAiB,IAAI;AAAA,EACvB,OAAO;AACL,uBAAmB;AAAA,EACrB;AACA,SAAO;AACT;AAEA,IAAI,YAAY,IAAI,KAAK;AACzB,UAAU,WAAW,SAAU,OAAO;AACpC,SAAO,MAAM,MAAM;AACrB;AACA,UAAU,OAAO,UAAU,cAAc,SAAU,OAAO;AACxD,SAAO;AACT;AAKA,SAAS,UAAU,OAAO;AACxB,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,IAAI,SAAS;AAAA,EAC5B;AACA,SAAO,eAAe,eAAe,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG;AAAA,IACnD,OAAO,MAAM,MAAM,IAAI,SAAU,MAAM;AACrC,aAAO,eAAe,eAAe,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG;AAAA,QAClD,OAAO,KAAK,MAAM,IAAI,SAAU,MAAM,GAAG;AACvC,cAAI;AACJ,iBAAO,KAAK,WAAW,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,cAAc,KAAK,MAAM,IAAI,CAAC,OAAO,QAAQ,gBAAgB,UAAU,YAAY,WAAW,IAAI,IAAI,OAAO,OAAO;AAAA,QAC9K,CAAC;AAAA,MACH,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH;AACA,SAAS,UAAU,OAAO;AACxB,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,IAAI,SAAS;AAAA,EAC5B;AACA,SAAO,eAAe,eAAe,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG;AAAA,IACnD,OAAO,MAAM,MAAM,IAAI,SAAU,MAAM;AACrC,aAAO,eAAe,eAAe,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG;AAAA,QAClD,OAAO,KAAK,MAAM,IAAI,SAAU,MAAM;AACpC,iBAAO,KAAK,SAAS,IAAI,IAAI,KAAK,UAAU,GAAG,KAAK,SAAS,CAAC,IAAI;AAAA,QACpE,CAAC;AAAA,MACH,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH;AAMA,SAAS,OAAO,OAAO;AACrB,MAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,YAAQ,CAAC,KAAK;AAAA,EAChB;AACA,SAAO,CAAC,MAAM,KAAK,SAAU,OAAO;AAClC,WAAO,MAAM,MAAM,KAAK,SAAU,MAAM;AACtC,aAAO,KAAK,MAAM,KAAK,SAAU,MAAM;AACrC,eAAO,CAAC,KAAK,WAAW,IAAI,KAAK,KAAK,SAAS,IAAI;AAAA,MACrD,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH;AAKA,SAAS,MAAM,OAAO;AACpB,MAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,YAAQ,CAAC,KAAK;AAAA,EAChB;AACA,SAAO,MAAM,KAAK,SAAU,OAAO;AACjC,WAAO,MAAM,MAAM,KAAK,SAAU,MAAM;AACtC,aAAO,KAAK,MAAM,KAAK,SAAU,MAAM;AACrC,eAAO,KAAK,SAAS,IAAI;AAAA,MAC3B,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC,KAAK,MAAM,MAAM,SAAU,OAAO;AACjC,WAAO,MAAM,MAAM,MAAM,SAAU,MAAM;AACvC,aAAO,KAAK,MAAM,MAAM,SAAU,MAAM,GAAG;AACzC,YAAI;AACJ,eAAO,KAAK,WAAW,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,eAAe,KAAK,MAAM,IAAI,CAAC,OAAO,QAAQ,iBAAiB,SAAS,SAAS,aAAa,WAAW,IAAI;AAAA,MACxK,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH;AAEA,SAAS,WAAW,SAAS;AAC3B,MAAI,UAAU,QAAQ,MAAM,IAAI,GAC9BC,QAAO,CAAC,GACR,IAAI;AACN,WAAS,aAAa;AACpB,QAAI,QAAQ,CAAC;AACb,IAAAA,MAAK,KAAK,KAAK;AAGf,WAAO,IAAI,QAAQ,QAAQ;AACzB,UAAI,OAAO,QAAQ,CAAC;AAGpB,UAAI,wBAAwB,KAAK,IAAI,GAAG;AACtC;AAAA,MACF;AAGA,UAAI,SAAS,2CAA2C,KAAK,IAAI;AACjE,UAAI,QAAQ;AACV,cAAM,QAAQ,OAAO,CAAC;AAAA,MACxB;AACA;AAAA,IACF;AAIA,oBAAgB,KAAK;AACrB,oBAAgB,KAAK;AAGrB,UAAM,QAAQ,CAAC;AACf,WAAO,IAAI,QAAQ,QAAQ;AACzB,UAAI,QAAQ,QAAQ,CAAC;AACrB,UAAI,2GAA2G,KAAK,KAAK,GAAG;AAC1H;AAAA,MACF,WAAW,MAAM,KAAK,KAAK,GAAG;AAC5B,cAAM,MAAM,KAAK,UAAU,CAAC;AAAA,MAC9B,WAAW,OAAO;AAChB,cAAM,IAAI,MAAM,mBAAmB,IAAI,KAAK,MAAM,KAAK,UAAU,KAAK,CAAC;AAAA,MACzE,OAAO;AACL;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAIA,WAAS,gBAAgB,OAAO;AAC9B,QAAI,aAAa,2BAA2B,KAAK,QAAQ,CAAC,CAAC;AAC3D,QAAI,YAAY;AACd,UAAI,YAAY,WAAW,CAAC,MAAM,QAAQ,QAAQ;AAClD,UAAI,OAAO,WAAW,CAAC,EAAE,MAAM,KAAM,CAAC;AACtC,UAAI,WAAW,KAAK,CAAC,EAAE,QAAQ,SAAS,IAAI;AAC5C,UAAI,SAAS,KAAK,QAAQ,GAAG;AAC3B,mBAAW,SAAS,OAAO,GAAG,SAAS,SAAS,CAAC;AAAA,MACnD;AACA,YAAM,YAAY,UAAU,IAAI;AAChC,YAAM,YAAY,QAAQ,KAAK,KAAK,CAAC,KAAK,IAAI,KAAK;AACnD;AAAA,IACF;AAAA,EACF;AAIA,WAAS,YAAY;AACnB,QAAI,mBAAmB,GACrB,kBAAkB,QAAQ,GAAG,GAC7B,cAAc,gBAAgB,MAAM,4CAA4C;AAClF,QAAI,OAAO;AAAA,MACT,UAAU,CAAC,YAAY,CAAC;AAAA,MACxB,UAAU,OAAO,YAAY,CAAC,MAAM,cAAc,IAAI,CAAC,YAAY,CAAC;AAAA,MACpE,UAAU,CAAC,YAAY,CAAC;AAAA,MACxB,UAAU,OAAO,YAAY,CAAC,MAAM,cAAc,IAAI,CAAC,YAAY,CAAC;AAAA,MACpE,OAAO,CAAC;AAAA,IACV;AAKA,QAAI,KAAK,aAAa,GAAG;AACvB,WAAK,YAAY;AAAA,IACnB;AACA,QAAI,KAAK,aAAa,GAAG;AACvB,WAAK,YAAY;AAAA,IACnB;AACA,QAAI,WAAW,GACb,cAAc;AAChB,WAAO,IAAI,QAAQ,WAAW,cAAc,KAAK,YAAY,WAAW,KAAK,aAAa,aAAa,QAAQ,CAAC,OAAO,QAAQ,eAAe,UAAU,WAAW,WAAW,IAAI,IAAI,KAAK;AACzL,UAAI;AACJ,UAAI,YAAY,QAAQ,CAAC,EAAE,UAAU,KAAK,KAAK,QAAQ,SAAS,IAAI,MAAM,QAAQ,CAAC,EAAE,CAAC;AACtF,UAAI,cAAc,OAAO,cAAc,OAAO,cAAc,OAAO,cAAc,MAAM;AACrF,aAAK,MAAM,KAAK,QAAQ,CAAC,CAAC;AAC1B,YAAI,cAAc,KAAK;AACrB;AAAA,QACF,WAAW,cAAc,KAAK;AAC5B;AAAA,QACF,WAAW,cAAc,KAAK;AAC5B;AACA;AAAA,QACF;AAAA,MACF,OAAO;AACL,cAAM,IAAI,MAAM,gBAAgB,OAAO,mBAAmB,GAAG,0BAA0B,EAAE,OAAO,QAAQ,CAAC,CAAC,CAAC;AAAA,MAC7G;AAAA,IACF;AAGA,QAAI,CAAC,YAAY,KAAK,aAAa,GAAG;AACpC,WAAK,WAAW;AAAA,IAClB;AACA,QAAI,CAAC,eAAe,KAAK,aAAa,GAAG;AACvC,WAAK,WAAW;AAAA,IAClB;AAGA,QAAI,aAAa,KAAK,UAAU;AAC9B,YAAM,IAAI,MAAM,sDAAsD,mBAAmB,EAAE;AAAA,IAC7F;AACA,QAAI,gBAAgB,KAAK,UAAU;AACjC,YAAM,IAAI,MAAM,wDAAwD,mBAAmB,EAAE;AAAA,IAC/F;AACA,WAAO;AAAA,EACT;AACA,SAAO,IAAI,QAAQ,QAAQ;AACzB,eAAW;AAAA,EACb;AACA,SAAOA;AACT;AAKA,SAAS,iBAAkB,OAAO,SAAS,SAAS;AAClD,MAAI,cAAc,MAChB,oBAAoB,OACpB,mBAAmB,OACnB,cAAc;AAChB,SAAO,SAAS,WAAW;AACzB,QAAI,eAAe,CAAC,kBAAkB;AACpC,UAAI,mBAAmB;AACrB;AAAA,MACF,OAAO;AACL,sBAAc;AAAA,MAChB;AAIA,UAAI,QAAQ,eAAe,SAAS;AAClC,eAAO,QAAQ;AAAA,MACjB;AACA,yBAAmB;AAAA,IACrB;AACA,QAAI,CAAC,mBAAmB;AACtB,UAAI,CAAC,kBAAkB;AACrB,sBAAc;AAAA,MAChB;AAIA,UAAI,WAAW,QAAQ,aAAa;AAClC,eAAO,QAAQ;AAAA,MACjB;AACA,0BAAoB;AACpB,aAAO,SAAS;AAAA,IAClB;AAAA,EAIF;AACF;AAEA,SAAS,WAAW,QAAQ,SAAS;AACnC,MAAI,UAAU,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAC;AACnF,MAAI,OAAO,YAAY,UAAU;AAC/B,cAAU,WAAW,OAAO;AAAA,EAC9B;AACA,MAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,QAAI,QAAQ,SAAS,GAAG;AACtB,YAAM,IAAI,MAAM,4CAA4C;AAAA,IAC9D;AACA,cAAU,QAAQ,CAAC;AAAA,EACrB;AACA,MAAI,QAAQ,0BAA0B,QAAQ,0BAA0B,MAAM;AAC5E,QAAI,sBAAsB,MAAM,KAAK,OAAO,OAAO,GAAG;AACpD,gBAAU,UAAU,OAAO;AAAA,IAC7B,WAAW,uBAAuB,MAAM,KAAK,MAAM,OAAO,GAAG;AAC3D,gBAAU,UAAU,OAAO;AAAA,IAC7B;AAAA,EACF;AAGA,MAAI,QAAQ,OAAO,MAAM,IAAI,GAC3B,QAAQ,QAAQ,OAChB,cAAc,QAAQ,eAAe,SAAU,YAAYC,OAAM,WAAW,cAAc;AACxF,WAAOA,UAAS;AAAA,EAClB,GACA,aAAa,QAAQ,cAAc,GACnC,UAAU;AACZ,MAAI,aAAa,KAAK,CAAC,OAAO,UAAU,UAAU,GAAG;AACnD,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AAGA,MAAI,CAAC,MAAM,QAAQ;AACjB,WAAO;AAAA,EACT;AAOA,MAAI,WAAW,IACb,cAAc,OACd,WAAW;AACb,WAAS,IAAI,GAAG,IAAI,MAAM,MAAM,SAAS,CAAC,EAAE,MAAM,QAAQ,KAAK;AAC7D,QAAI,OAAO,MAAM,MAAM,SAAS,CAAC,EAAE,MAAM,CAAC;AAC1C,QAAI,KAAK,CAAC,KAAK,MAAM;AACnB,UAAI,SAAS,CAAC,KAAK,KAAK;AACtB,sBAAc;AAAA,MAChB,WAAW,SAAS,CAAC,KAAK,KAAK;AAC7B,mBAAW;AAAA,MACb;AAAA,IACF;AACA,eAAW;AAAA,EACb;AACA,MAAI,aAAa;AACf,QAAI,UAAU;AAIZ,UAAI,CAAC,cAAc,MAAM,MAAM,SAAS,CAAC,KAAK,IAAI;AAChD,eAAO;AAAA,MACT;AAAA,IACF,WAAW,MAAM,MAAM,SAAS,CAAC,KAAK,IAAI;AACxC,YAAM,IAAI;AAAA,IACZ,WAAW,CAAC,YAAY;AACtB,aAAO;AAAA,IACT;AAAA,EACF,WAAW,UAAU;AACnB,QAAI,MAAM,MAAM,SAAS,CAAC,KAAK,IAAI;AACjC,YAAM,KAAK,EAAE;AAAA,IACf,WAAW,CAAC,YAAY;AACtB,aAAO;AAAA,IACT;AAAA,EACF;AAcA,WAAS,UAAU,WAAWC,QAAOC,YAAW;AAC9C,QAAI,aAAa,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI;AACrF,QAAI,yBAAyB,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI;AACjG,QAAI,eAAe,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAC;AACxF,QAAI,qBAAqB,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI;AAC7F,QAAI,8BAA8B;AAClC,QAAI,2BAA2B;AAC/B,WAAO,aAAa,UAAU,QAAQ,cAAc;AAClD,UAAI,WAAW,UAAU,UAAU,GACjC,YAAY,SAAS,SAAS,IAAI,SAAS,CAAC,IAAI,KAChD,UAAU,SAAS,SAAS,IAAI,SAAS,OAAO,CAAC,IAAI;AACvD,UAAI,cAAc,KAAK;AACrB,YAAI,YAAYD,SAAQ,GAAG,MAAMA,MAAK,GAAG,WAAW,OAAO,GAAG;AAC5D,UAAAA;AACA,wCAA8B;AAAA,QAChC,OAAO;AACL,cAAI,CAACC,cAAa,MAAMD,MAAK,KAAK,MAAM;AACtC,mBAAO;AAAA,UACT;AACA,uBAAa,kBAAkB,IAAI,MAAMA,MAAK;AAC9C,iBAAO,UAAU,WAAWA,SAAQ,GAAGC,aAAY,GAAG,YAAY,OAAO,cAAc,qBAAqB,CAAC;AAAA,QAC/G;AAAA,MACF;AACA,UAAI,cAAc,KAAK;AACrB,YAAI,CAAC,wBAAwB;AAC3B,iBAAO;AAAA,QACT;AACA,qBAAa,kBAAkB,IAAI;AACnC;AACA,sCAA8B;AAC9B,mCAA2B;AAAA,MAC7B;AACA,UAAI,cAAc,KAAK;AACrB;AACA,qBAAa,kBAAkB,IAAI,MAAMD,MAAK;AAC9C,YAAI,YAAYA,SAAQ,GAAG,MAAMA,MAAK,GAAG,WAAW,OAAO,GAAG;AAC5D;AACA,mCAAyB;AACzB,qCAA2B;AAC3B,UAAAA;AAAA,QACF,OAAO;AACL,cAAI,4BAA4B,CAACC,YAAW;AAC1C,mBAAO;AAAA,UACT;AAQA,iBAAO,MAAMD,MAAK,MAAM,UAAU,WAAWA,SAAQ,GAAGC,aAAY,GAAG,aAAa,GAAG,OAAO,cAAc,qBAAqB,CAAC,KAAK,UAAU,WAAWD,SAAQ,GAAGC,aAAY,GAAG,YAAY,OAAO,cAAc,qBAAqB,CAAC,MAAM,UAAU,WAAWD,QAAOC,aAAY,GAAG,aAAa,GAAG,OAAO,cAAc,kBAAkB;AAAA,QACvV;AAAA,MACF;AAAA,IACF;AAKA,0BAAsB;AACtB,IAAAD,UAAS;AACT,iBAAa,SAAS;AACtB,WAAO;AAAA,MACL;AAAA,MACA,cAAcA,SAAQ;AAAA,IACxB;AAAA,EACF;AACA,MAAI,cAAc,CAAC;AAGnB,MAAI,iBAAiB;AACrB,WAAS,KAAK,GAAG,KAAK,MAAM,QAAQ,MAAM;AACxC,QAAI,OAAO,MAAM,EAAE;AACnB,QAAI,aAAa;AACjB,QAAI,UAAU,MAAM,SAAS,KAAK,WAAW;AAC7C,QAAI,QAAQ;AACZ,aAAS,YAAY,GAAG,aAAa,YAAY,aAAa;AAC5D,cAAQ,KAAK,WAAW,iBAAiB;AACzC,UAAI,WAAW,iBAAiB,OAAO,SAAS,OAAO;AACvD,aAAO,UAAU,QAAW,QAAQ,SAAS,GAAG;AAC9C,qBAAa,UAAU,KAAK,OAAO,OAAO,SAAS;AACnD,YAAI,YAAY;AACd;AAAA,QACF;AAAA,MACF;AACA,UAAI,YAAY;AACd;AAAA,MACF;AAAA,IACF;AACA,QAAI,CAAC,YAAY;AACf,aAAO;AAAA,IACT;AAGA,aAAS,MAAM,SAAS,MAAM,OAAO,OAAO;AAC1C,kBAAY,KAAK,MAAM,GAAG,CAAC;AAAA,IAC7B;AAGA,aAAS,MAAM,GAAG,MAAM,WAAW,aAAa,QAAQ,OAAO;AAC7D,UAAI,QAAQ,WAAW,aAAa,GAAG;AACvC,kBAAY,KAAK,KAAK;AAAA,IACxB;AAIA,cAAU,WAAW,eAAe;AAIpC,qBAAiB,QAAQ,IAAI,KAAK;AAAA,EACpC;AAGA,WAAS,MAAM,SAAS,MAAM,MAAM,QAAQ,OAAO;AACjD,gBAAY,KAAK,MAAM,GAAG,CAAC;AAAA,EAC7B;AACA,SAAO,YAAY,KAAK,IAAI;AAC9B;AA6BA,SAAS,gBAAgB,aAAa,aAAa,QAAQ,QAAQ,WAAW,WAAW,SAAS;AAChG,MAAI,CAAC,SAAS;AACZ,cAAU,CAAC;AAAA,EACb;AACA,MAAI,OAAO,YAAY,YAAY;AACjC,cAAU;AAAA,MACR,UAAU;AAAA,IACZ;AAAA,EACF;AACA,MAAI,OAAO,QAAQ,YAAY,aAAa;AAC1C,YAAQ,UAAU;AAAA,EACpB;AACA,MAAI,QAAQ,gBAAgB;AAC1B,UAAM,IAAI,MAAM,6FAA6F;AAAA,EAC/G;AACA,MAAI,CAAC,QAAQ,UAAU;AACrB,WAAO,uBAAuB,UAAU,QAAQ,QAAQ,OAAO,CAAC;AAAA,EAClE,OAAO;AACL,QAAI,WAAW,SACb,YAAY,SAAS;AACvB,cAAU,QAAQ,QAAQ,eAAe,eAAe,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG;AAAA,MACxE,UAAU,SAAS,SAASE,OAAM;AAChC,YAAI,QAAQ,uBAAuBA,KAAI;AACvC,kBAAU,KAAK;AAAA,MACjB;AAAA,IACF,CAAC,CAAC;AAAA,EACJ;AACA,WAAS,uBAAuBA,OAAM;AAIpC,QAAI,CAACA,OAAM;AACT;AAAA,IACF;AACA,IAAAA,MAAK,KAAK;AAAA,MACR,OAAO;AAAA,MACP,OAAO,CAAC;AAAA,IACV,CAAC;AAED,aAAS,aAAa,OAAO;AAC3B,aAAO,MAAM,IAAI,SAAU,OAAO;AAChC,eAAO,MAAM;AAAA,MACf,CAAC;AAAA,IACH;AACA,QAAI,QAAQ,CAAC;AACb,QAAI,gBAAgB,GAClB,gBAAgB,GAChB,WAAW,CAAC,GACZ,UAAU,GACV,UAAU;AACZ,QAAI,QAAQ,SAASC,SAAQ;AAC3B,UAAI,UAAUD,MAAK,CAAC,GAClB,QAAQ,QAAQ,SAAS,WAAW,QAAQ,KAAK;AACnD,cAAQ,QAAQ;AAChB,UAAI,QAAQ,SAAS,QAAQ,SAAS;AACpC,YAAI;AAEJ,YAAI,CAAC,eAAe;AAClB,cAAI,OAAOA,MAAK,IAAI,CAAC;AACrB,0BAAgB;AAChB,0BAAgB;AAChB,cAAI,MAAM;AACR,uBAAW,QAAQ,UAAU,IAAI,aAAa,KAAK,MAAM,MAAM,CAAC,QAAQ,OAAO,CAAC,IAAI,CAAC;AACrF,6BAAiB,SAAS;AAC1B,6BAAiB,SAAS;AAAA,UAC5B;AAAA,QACF;AAGA,SAAC,YAAY,UAAU,KAAK,MAAM,WAAW,mBAAmB,MAAM,IAAI,SAAU,OAAO;AACzF,kBAAQ,QAAQ,QAAQ,MAAM,OAAO;AAAA,QACvC,CAAC,CAAC,CAAC;AAGH,YAAI,QAAQ,OAAO;AACjB,qBAAW,MAAM;AAAA,QACnB,OAAO;AACL,qBAAW,MAAM;AAAA,QACnB;AAAA,MACF,OAAO;AAEL,YAAI,eAAe;AAEjB,cAAI,MAAM,UAAU,QAAQ,UAAU,KAAK,IAAIA,MAAK,SAAS,GAAG;AAC9D,gBAAI;AAEJ,aAAC,aAAa,UAAU,KAAK,MAAM,YAAY,mBAAmB,aAAa,KAAK,CAAC,CAAC;AAAA,UACxF,OAAO;AACL,gBAAI;AAEJ,gBAAI,cAAc,KAAK,IAAI,MAAM,QAAQ,QAAQ,OAAO;AACxD,aAAC,aAAa,UAAU,KAAK,MAAM,YAAY,mBAAmB,aAAa,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC;AAC5G,gBAAI,QAAQ;AAAA,cACV,UAAU;AAAA,cACV,UAAU,UAAU,gBAAgB;AAAA,cACpC,UAAU;AAAA,cACV,UAAU,UAAU,gBAAgB;AAAA,cACpC,OAAO;AAAA,YACT;AACA,kBAAM,KAAK,KAAK;AAChB,4BAAgB;AAChB,4BAAgB;AAChB,uBAAW,CAAC;AAAA,UACd;AAAA,QACF;AACA,mBAAW,MAAM;AACjB,mBAAW,MAAM;AAAA,MACnB;AAAA,IACF;AACA,aAAS,IAAI,GAAG,IAAIA,MAAK,QAAQ,KAAK;AACpC,YAAM;AAAA,IACR;AAIA,aAAS,KAAK,GAAG,SAAS,OAAO,KAAK,OAAO,QAAQ,MAAM;AACzD,UAAI,OAAO,OAAO,EAAE;AACpB,eAAS,MAAM,GAAG,MAAM,KAAK,MAAM,QAAQ,OAAO;AAChD,YAAI,KAAK,MAAM,GAAG,EAAE,SAAS,IAAI,GAAG;AAClC,eAAK,MAAM,GAAG,IAAI,KAAK,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE;AAAA,QAC/C,OAAO;AACL,eAAK,MAAM,OAAO,MAAM,GAAG,GAAG,8BAA8B;AAC5D;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AACA,SAAS,YAAYA,OAAM;AACzB,MAAI,MAAM,QAAQA,KAAI,GAAG;AACvB,WAAOA,MAAK,IAAI,WAAW,EAAE,KAAK,IAAI;AAAA,EACxC;AACA,MAAI,MAAM,CAAC;AACX,MAAIA,MAAK,eAAeA,MAAK,aAAa;AACxC,QAAI,KAAK,YAAYA,MAAK,WAAW;AAAA,EACvC;AACA,MAAI,KAAK,qEAAqE;AAC9E,MAAI,KAAK,SAASA,MAAK,eAAe,OAAOA,MAAK,cAAc,cAAc,KAAK,MAAOA,MAAK,UAAU;AACzG,MAAI,KAAK,SAASA,MAAK,eAAe,OAAOA,MAAK,cAAc,cAAc,KAAK,MAAOA,MAAK,UAAU;AACzG,WAAS,IAAI,GAAG,IAAIA,MAAK,MAAM,QAAQ,KAAK;AAC1C,QAAI,OAAOA,MAAK,MAAM,CAAC;AAIvB,QAAI,KAAK,aAAa,GAAG;AACvB,WAAK,YAAY;AAAA,IACnB;AACA,QAAI,KAAK,aAAa,GAAG;AACvB,WAAK,YAAY;AAAA,IACnB;AACA,QAAI,KAAK,SAAS,KAAK,WAAW,MAAM,KAAK,WAAW,OAAO,KAAK,WAAW,MAAM,KAAK,WAAW,KAAK;AAC1G,QAAI,KAAK,MAAM,KAAK,KAAK,KAAK;AAAA,EAChC;AACA,SAAO,IAAI,KAAK,IAAI,IAAI;AAC1B;AACA,SAAS,oBAAoB,aAAa,aAAa,QAAQ,QAAQ,WAAW,WAAW,SAAS;AACpG,MAAI;AACJ,MAAI,OAAO,YAAY,YAAY;AACjC,cAAU;AAAA,MACR,UAAU;AAAA,IACZ;AAAA,EACF;AACA,MAAI,GAAG,YAAY,aAAa,QAAQ,cAAc,UAAU,UAAU,WAAW;AACnF,QAAI,WAAW,gBAAgB,aAAa,aAAa,QAAQ,QAAQ,WAAW,WAAW,OAAO;AACtG,QAAI,CAAC,UAAU;AACb;AAAA,IACF;AACA,WAAO,YAAY,QAAQ;AAAA,EAC7B,OAAO;AACL,QAAI,YAAY,SACd,aAAa,UAAU;AACzB,oBAAgB,aAAa,aAAa,QAAQ,QAAQ,WAAW,WAAW,eAAe,eAAe,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG;AAAA,MAC9H,UAAU,SAAS,SAASE,WAAU;AACpC,YAAI,CAACA,WAAU;AACb,qBAAW;AAAA,QACb,OAAO;AACL,qBAAW,YAAYA,SAAQ,CAAC;AAAA,QAClC;AAAA,MACF;AAAA,IACF,CAAC,CAAC;AAAA,EACJ;AACF;AACA,SAAS,YAAY,UAAU,QAAQ,QAAQ,WAAW,WAAW,SAAS;AAC5E,SAAO,oBAAoB,UAAU,UAAU,QAAQ,QAAQ,WAAW,WAAW,OAAO;AAC9F;AAKA,SAAS,WAAWC,OAAM;AACxB,MAAI,gBAAgBA,MAAK,SAAS,IAAI;AACtC,MAAI,SAASA,MAAK,MAAM,IAAI,EAAE,IAAI,SAAU,MAAM;AAChD,WAAO,OAAO;AAAA,EAChB,CAAC;AACD,MAAI,eAAe;AACjB,WAAO,IAAI;AAAA,EACb,OAAO;AACL,WAAO,KAAK,OAAO,IAAI,EAAE,MAAM,GAAG,EAAE,CAAC;AAAA,EACvC;AACA,SAAO;AACT;;;A9EjjDA,SAAS,KAAK,YAAY,OAAO,SAAS,aAAa,MAAM,cAAc;AACzE,SAAO;AAAA,IACL,IAAI,GAAG,UAAU,IAAI,KAAK;AAAA,IAC1B;AAAA,IACA;AAAA,IACA,MAAM,KAAK,IAAI,CAAC,MAAM,GAAG,UAAU,IAAI,CAAC,EAAE;AAAA,IAC1C,GAAG;AAAA,EACL;AACF;AACA,IAAI,kBAAkB;AACtB,IAAI,gBAAgB;AACpB,IAAI,iBAAiB;AACrB,IAAI,uBAAuB;AAC3B,IAAI,mBAAmB;AACvB,IAAI,oBAAoB;AACxB,IAAI,YAAY;AAChB,IAAI,kBAAkB;AACtB,IAAI,eAAe;AAYnB,IAAI,eAAe;AAAA,EACjB,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,aAAa;AAAA,EACb,OAAO;AAAA,IACL,KAAK,iBAAiB,GAAG,qBAAqB,wRAAwR,CAAC,GAAG,EAAE,OAAO,mBAAmB,iBAAiB,QAAQ,CAAC;AAAA,IAChY,KAAK,iBAAiB,GAAG,qBAAqB,sOAAsO,CAAC,CAAC,GAAG,EAAE,OAAO,mBAAmB,iBAAiB,OAAO,CAAC;AAAA,IAC9U,KAAK,iBAAiB,GAAG,2BAA2B,uOAAuO,CAAC,CAAC,GAAG,EAAE,OAAO,mBAAmB,iBAAiB,OAAO,CAAC;AAAA,IACrV,KAAK,iBAAiB,GAAG,kDAA6C,8XAAyX,CAAC,CAAC,CAAC;AAAA,IAClc,KAAK,iBAAiB,GAAG,MAAM,8RAA8R,CAAC,CAAC,GAAG,EAAE,OAAO,qBAAqB,iBAAiB,SAAS,CAAC;AAAA,IAC3X,KAAK,iBAAiB,GAAG,QAAQ,mNAAmN,CAAC,CAAC,GAAG,EAAE,OAAO,qBAAqB,iBAAiB,OAAO,CAAC;AAAA,IAChT,KAAK,iBAAiB,GAAG,WAAW,sKAAsK,CAAC,CAAC,GAAG,EAAE,OAAO,qBAAqB,iBAAiB,OAAO,CAAC;AAAA,EACxQ;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EACX,SAAS;AACX;AACA,IAAI,aAAa;AAAA,EACf,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,aAAa;AAAA,EACb,OAAO;AAAA,IACL,KAAK,eAAe,GAAG,qBAAqB,sKAAsK,CAAC,GAAG,EAAE,OAAO,mBAAmB,iBAAiB,QAAQ,CAAC;AAAA,IAC5Q,KAAK,eAAe,GAAG,2BAA2B,8JAA8J,CAAC,CAAC,GAAG,EAAE,OAAO,mBAAmB,iBAAiB,OAAO,CAAC;AAAA,IAC1Q,KAAK,eAAe,GAAG,kDAA6C,8PAA8P,CAAC,CAAC,CAAC;AAAA,IACrU,KAAK,eAAe,GAAG,MAAM,iLAAiL,CAAC,CAAC,GAAG,EAAE,OAAO,qBAAqB,iBAAiB,SAAS,CAAC;AAAA,IAC5Q,KAAK,eAAe,GAAG,QAAQ,6EAA6E,CAAC,CAAC,GAAG,EAAE,OAAO,qBAAqB,iBAAiB,OAAO,CAAC;AAAA,IACxK,KAAK,eAAe,GAAG,WAAW,iGAAiG,CAAC,CAAC,GAAG,EAAE,OAAO,qBAAqB,iBAAiB,OAAO,CAAC;AAAA,EACjM;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EACX,SAAS;AACX;AACA,IAAI,cAAc;AAAA,EAChB,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,aAAa;AAAA,EACb,OAAO;AAAA,IACL,KAAK,gBAAgB,GAAG,qBAAqB,qHAAqH,CAAC,CAAC;AAAA,IACpK,KAAK,gBAAgB,GAAG,MAAM,oFAAoF,CAAC,CAAC,GAAG,EAAE,OAAO,qBAAqB,iBAAiB,SAAS,CAAC;AAAA,IAChL,KAAK,gBAAgB,GAAG,QAAQ,0BAA0B,CAAC,CAAC,GAAG;AAAA,MAC7D,OAAO;AAAA,MACP,iBAAiB;AAAA,IACnB,CAAC;AAAA,IACD,KAAK,gBAAgB,GAAG,WAAW,qBAAqB,CAAC,CAAC,GAAG;AAAA,MAC3D,OAAO;AAAA,MACP,iBAAiB;AAAA,IACnB,CAAC;AAAA,EACH;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EACX,SAAS;AACX;AACA,IAAI,oBAAoB;AAAA,EACtB,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,aAAa;AAAA,EACb,OAAO;AAAA,IACL,KAAK,sBAAsB,GAAG,iBAAiB,uPAAkP,CAAC,GAAG,EAAE,OAAO,mBAAmB,iBAAiB,QAAQ,CAAC;AAAA,IAC3V,KAAK,sBAAsB,GAAG,wEAA8D,uPAAkP,CAAC,CAAC,CAAC;AAAA,IACjV,KAAK,sBAAsB,GAAG,oBAAoB,6LAA6L,CAAC,CAAC,GAAG,EAAE,OAAO,qBAAqB,iBAAiB,SAAS,CAAC;AAAA,IAC7S,KAAK,sBAAsB,GAAG,MAAM,yIAAyI,CAAC,CAAC,GAAG,EAAE,OAAO,qBAAqB,iBAAiB,SAAS,CAAC;AAAA,IAC3O,KAAK,sBAAsB,GAAG,QAAQ,2IAA2I,CAAC,CAAC,GAAG,EAAE,OAAO,qBAAqB,iBAAiB,OAAO,CAAC;AAAA,IAC7O,KAAK,sBAAsB,GAAG,WAAW,0DAA0D,CAAC,CAAC,GAAG,EAAE,OAAO,qBAAqB,iBAAiB,OAAO,CAAC;AAAA,EACjK;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EACX,SAAS;AACX;AACA,IAAI,gBAAgB;AAAA,EAClB,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,aAAa;AAAA,EACb,OAAO;AAAA,IACL,KAAK,kBAAkB,GAAG,wBAAwB,2FAA2F,CAAC,CAAC;AAAA,IAC/I,KAAK,kBAAkB,GAAG,mBAAmB,gGAAgG,CAAC,CAAC,CAAC;AAAA,IAChJ,KAAK,kBAAkB,GAAG,eAAe,4HAA4H,CAAC,CAAC,CAAC;AAAA,IACxK,KAAK,kBAAkB,GAAG,qBAAqB,wHAAwH,CAAC,CAAC,CAAC;AAAA,IAC1K,KAAK,kBAAkB,GAAG,UAAU,0FAA0F,CAAC,CAAC,CAAC;AAAA,IACjI,KAAK,kBAAkB,GAAG,UAAU,qEAAqE,CAAC,CAAC,CAAC;AAAA,EAC9G;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EACX,SAAS;AACX;AACA,IAAI,iBAAiB;AAAA,EACnB,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,aAAa;AAAA,EACb,OAAO;AAAA,IACL,KAAK,mBAAmB,GAAG,cAAc,2MAA2M,CAAC,GAAG,EAAE,OAAO,mBAAmB,iBAAiB,QAAQ,CAAC;AAAA,IAC9S,KAAK,mBAAmB,GAAG,aAAa,uMAAkM,CAAC,CAAC,GAAG,EAAE,OAAO,mBAAmB,iBAAiB,QAAQ,CAAC;AAAA,IACrS,KAAK,mBAAmB,GAAG,cAAc,iMAAiM,CAAC,CAAC,GAAG,EAAE,OAAO,mBAAmB,iBAAiB,OAAO,CAAC;AAAA,EACtS;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EACX,SAAS;AACX;AACA,IAAI,SAAS;AAAA,EACX,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,aAAa;AAAA,EACb,OAAO;AAAA,IACL,KAAK,WAAW,GAAG,eAAe,0IAA0I,CAAC,GAAG,EAAE,OAAO,mBAAmB,iBAAiB,QAAQ,CAAC;AAAA,IACtO,KAAK,WAAW,GAAG,WAAW,4NAA4N,CAAC,CAAC,GAAG,EAAE,OAAO,mBAAmB,iBAAiB,OAAO,CAAC;AAAA,IACpT,KAAK,WAAW,GAAG,oBAAoB,wMAAwM,CAAC,CAAC,GAAG,EAAE,OAAO,mBAAmB,iBAAiB,OAAO,CAAC;AAAA,EAC3S;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EACX,SAAS;AACX;AACA,IAAI,eAAe;AAAA,EACjB,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,aAAa;AAAA,EACb,OAAO;AAAA,IACL,KAAK,iBAAiB,GAAG,WAAW,kOAA6N,CAAC,GAAG,EAAE,OAAO,mBAAmB,iBAAiB,QAAQ,CAAC;AAAA,IAC3T,KAAK,iBAAiB,GAAG,WAAW,wKAAwK,CAAC,CAAC,GAAG,EAAE,OAAO,mBAAmB,iBAAiB,QAAQ,CAAC;AAAA,IACvQ,KAAK,iBAAiB,GAAG,UAAU,uLAAuL,CAAC,CAAC,GAAG,EAAE,OAAO,mBAAmB,iBAAiB,OAAO,CAAC;AAAA,EACtR;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EACX,SAAS;AACX;AACA,IAAI,YAAY;AAAA,EACd,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,aAAa;AAAA,EACb,OAAO;AAAA,IACL,KAAK,cAAc,GAAG,YAAY,oIAAoI,CAAC,CAAC;AAAA,IACxK,KAAK,cAAc,GAAG,qBAAqB,8KAA8K,CAAC,CAAC,GAAG,EAAE,OAAO,qBAAqB,iBAAiB,SAAS,CAAC;AAAA,IACvR,KAAK,cAAc,GAAG,mBAAmB,yLAAoL,CAAC,CAAC,GAAG,EAAE,OAAO,qBAAqB,iBAAiB,SAAS,CAAC;AAAA,IAC3R,KAAK,cAAc,GAAG,gBAAgB,4IAA4I,CAAC,CAAC,GAAG,EAAE,OAAO,qBAAqB,iBAAiB,SAAS,CAAC;AAAA,EAClP;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EACX,SAAS;AACX;AACA,IAAI,qBAAqB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAI,6BAA6B;AAAA,EAC/B,MAAM;AAAA,EACN,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,QAAQ;AAAA,IACN,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,IACrB,sBAAsB;AAAA,IACtB,2BAA2B;AAAA,IAC3B,uBAAuB;AAAA,IACvB,8BAA8B;AAAA,IAC9B,oBAAoB;AAAA,IACpB,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,qBAAqB;AAAA,IACrB,uBAAuB;AAAA,IACvB,sBAAsB;AAAA,IACtB,yCAAyC;AAAA,IACzC,4BAA4B;AAAA,IAC5B,iBAAiB;AAAA,IACjB,0BAA0B;AAAA,IAC1B,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,+BAA+B;AAAA,IAC/B,gBAAgB;AAAA,IAChB,8BAA8B;AAAA,IAC9B,+BAA+B;AAAA,IAC/B,qCAAqC;AAAA,IACrC,2BAA2B;AAAA,IAC3B,kCAAkC;AAAA,IAClC,8BAA8B;AAAA,IAC9B,8BAA8B;AAAA,IAC9B,sCAAsC;AAAA,IACtC,uCAAuC;AAAA,IACvC,8BAA8B;AAAA,IAC9B,uCAAuC;AAAA,IACvC,kCAAkC;AAAA,IAClC,wCAAwC;AAAA,IACxC,2BAA2B;AAAA,IAC3B,uBAAuB;AAAA,IACvB,oBAAoB;AAAA,IACpB,mCAAmC;AAAA,IACnC,oCAAoC;AAAA,IACpC,qCAAqC;AAAA,IACrC,oCAAoC;AAAA,IACpC,qCAAqC;AAAA,IACrC,oCAAoC;AAAA,IACpC,iCAAiC;AAAA,IACjC,gCAAgC;AAAA,IAChC,2BAA2B;AAAA,IAC3B,mCAAmC;AAAA,IACnC,gCAAgC;AAAA,IAChC,kCAAkC;AAAA,IAClC,iCAAiC;AAAA,IACjC,6BAA6B;AAAA,IAC7B,gCAAgC;AAAA,IAChC,sCAAsC;AAAA,IACtC,8BAA8B;AAAA,IAC9B,mBAAmB;AAAA,IACnB,6BAA6B;AAAA,IAC7B,6BAA6B;AAAA,IAC7B,4BAA4B;AAAA,IAC5B,sBAAsB;AAAA,IACtB,yBAAyB;AAAA,IACzB,yCAAyC;AAAA,IACzC,4BAA4B;AAAA,IAC5B,2BAA2B;AAAA,EAC7B;AAAA,EACA,aAAa;AAAA,IACX,EAAE,OAAO,IAAI,UAAU,EAAE,YAAY,WAAW,YAAY,UAAU,EAAE;AAAA,IACxE,EAAE,OAAO,WAAW,UAAU,EAAE,YAAY,WAAW,WAAW,SAAS,EAAE;AAAA,IAC7E,EAAE,OAAO,WAAW,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IACxD,EAAE,OAAO,mBAAmB,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IAChE,EAAE,OAAO,gBAAgB,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IAC7D,EAAE,OAAO,UAAU,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IACvD,EAAE,OAAO,mBAAmB,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IAChE,EAAE,OAAO,qBAAqB,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IAClE,EAAE,OAAO,UAAU,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IACvD,EAAE,OAAO,YAAY,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IACzD,EAAE,OAAO,QAAQ,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IACrD,EAAE,OAAO,mBAAmB,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IAChE,EAAE,OAAO,SAAS,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IACtD,EAAE,OAAO,YAAY,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IACzD,EAAE,OAAO,YAAY,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IACzD,EAAE,OAAO,uBAAuB,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IACpE,EAAE,OAAO,kBAAkB,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IAC/D,EAAE,OAAO,mBAAmB,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IAChE,EAAE,OAAO,OAAO,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IACpD,EAAE,OAAO,WAAW,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IACxD,EAAE,OAAO,cAAc,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IAC3D,EAAE,OAAO,UAAU,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IACvD,EAAE,OAAO,aAAa,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IAC1D,EAAE,OAAO,qBAAqB,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IAClE,EAAE,OAAO,YAAY,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,EAC3D;AACF;AACA,IAAI,8BAA8B;AAAA,EAChC,MAAM;AAAA,EACN,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,QAAQ;AAAA,IACN,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,IACrB,sBAAsB;AAAA,IACtB,2BAA2B;AAAA,IAC3B,uBAAuB;AAAA,IACvB,8BAA8B;AAAA,IAC9B,oBAAoB;AAAA,IACpB,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,qBAAqB;AAAA,IACrB,uBAAuB;AAAA,IACvB,sBAAsB;AAAA,IACtB,yCAAyC;AAAA,IACzC,4BAA4B;AAAA,IAC5B,iBAAiB;AAAA,IACjB,0BAA0B;AAAA,IAC1B,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,+BAA+B;AAAA,IAC/B,gBAAgB;AAAA,IAChB,8BAA8B;AAAA,IAC9B,+BAA+B;AAAA,IAC/B,qCAAqC;AAAA,IACrC,2BAA2B;AAAA,IAC3B,kCAAkC;AAAA,IAClC,8BAA8B;AAAA,IAC9B,8BAA8B;AAAA,IAC9B,sCAAsC;AAAA,IACtC,uCAAuC;AAAA,IACvC,8BAA8B;AAAA,IAC9B,uCAAuC;AAAA,IACvC,kCAAkC;AAAA,IAClC,wCAAwC;AAAA,IACxC,2BAA2B;AAAA,IAC3B,uBAAuB;AAAA,IACvB,oBAAoB;AAAA,IACpB,mCAAmC;AAAA,IACnC,oCAAoC;AAAA,IACpC,qCAAqC;AAAA,IACrC,oCAAoC;AAAA,IACpC,qCAAqC;AAAA,IACrC,oCAAoC;AAAA,IACpC,iCAAiC;AAAA,IACjC,gCAAgC;AAAA,IAChC,2BAA2B;AAAA,IAC3B,mCAAmC;AAAA,IACnC,gCAAgC;AAAA,IAChC,kCAAkC;AAAA,IAClC,iCAAiC;AAAA,IACjC,6BAA6B;AAAA,IAC7B,gCAAgC;AAAA,IAChC,sCAAsC;AAAA,IACtC,8BAA8B;AAAA,IAC9B,mBAAmB;AAAA,IACnB,6BAA6B;AAAA,IAC7B,6BAA6B;AAAA,IAC7B,4BAA4B;AAAA,IAC5B,sBAAsB;AAAA,IACtB,yBAAyB;AAAA,IACzB,yCAAyC;AAAA,IACzC,4BAA4B;AAAA,IAC5B,2BAA2B;AAAA,EAC7B;AAAA,EACA,aAAa;AAAA,IACX,EAAE,OAAO,IAAI,UAAU,EAAE,YAAY,WAAW,YAAY,UAAU,EAAE;AAAA,IACxE,EAAE,OAAO,WAAW,UAAU,EAAE,YAAY,WAAW,WAAW,SAAS,EAAE;AAAA,IAC7E,EAAE,OAAO,WAAW,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IACxD,EAAE,OAAO,mBAAmB,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IAChE,EAAE,OAAO,gBAAgB,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IAC7D,EAAE,OAAO,UAAU,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IACvD,EAAE,OAAO,mBAAmB,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IAChE,EAAE,OAAO,qBAAqB,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IAClE,EAAE,OAAO,UAAU,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IACvD,EAAE,OAAO,YAAY,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IACzD,EAAE,OAAO,QAAQ,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IACrD,EAAE,OAAO,mBAAmB,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IAChE,EAAE,OAAO,SAAS,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IACtD,EAAE,OAAO,YAAY,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IACzD,EAAE,OAAO,YAAY,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IACzD,EAAE,OAAO,uBAAuB,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IACpE,EAAE,OAAO,kBAAkB,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IAC/D,EAAE,OAAO,mBAAmB,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IAChE,EAAE,OAAO,OAAO,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IACpD,EAAE,OAAO,WAAW,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IACxD,EAAE,OAAO,cAAc,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IAC3D,EAAE,OAAO,UAAU,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IACvD,EAAE,OAAO,aAAa,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IAC1D,EAAE,OAAO,qBAAqB,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,IAClE,EAAE,OAAO,YAAY,UAAU,EAAE,YAAY,UAAU,EAAE;AAAA,EAC3D;AACF;AAMA,IAAI,uBAAuB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAI,yBAAyB,MAAM,OAAO;AAAA,EACxC,MAAM,MAAM,MAAM,OAAO,GAAG,oBAAoB;AAAA,EAChD,GAAG,MAAM,MAAM,OAAO;AAAA,EACtB,GAAG,MAAM,MAAM,OAAO;AAAA,EACtB,OAAO,MAAM,MAAM,OAAO;AAAA,EAC1B,QAAQ,MAAM,MAAM,OAAO;AAAA,EAC3B,QAAQ,MAAM,MAAM,OAAO;AAAA,EAC3B,MAAM,MAAM,MAAM,IAAI;AAAA,EACtB,UAAU,MAAM,MAAM,OAAO,EAAE,SAAS;AAAA,EACxC,UAAU,MAAM,MAAM,OAAO,EAAE,SAAS;AAC1C,CAAC;AACD,IAAI,uBAAuB,MAAM,IAAI;AAAA,EACnC,UAAU,MAAM,KAAK,sBAAsB;AAC7C,GAAG,EAAE,WAAW,KAAK,CAAC;AACtB,IAAI,sBAAsB,MAAM,MAAM,OAAO;AAAA,EAC3C,aAAa,MAAM,MAAM,OAAO;AAAA,EAChC,OAAO,MAAM,MAAM,OAAO;AAAA,EAC1B,GAAG,MAAM,MAAM,OAAO;AAAA,EACtB,GAAG,MAAM,MAAM,OAAO;AAAA,EACtB,MAAM,MAAM,MAAM,OAAO;AAAA,EACzB,WAAW,MAAM,MAAM,OAAO;AAChC,CAAC;AACD,IAAI,wBAAwB,MAAM,MAAM,OAAO;AAAA,EAC7C,WAAW,MAAM,MAAM,OAAO;AAAA,EAC9B,GAAG,MAAM,MAAM,OAAO;AAAA,EACtB,GAAG,MAAM,MAAM,OAAO;AAAA,EACtB,WAAW,MAAM,MAAM,OAAO;AAChC,CAAC;AACD,IAAI,gCAAgC;AAAA,EAClC,UAAU;AAAA,EACV,YAAY;AACd;AACA,SAAS,iBAAiB,QAAQ,OAAO;AACvC,MAAI,CAAC;AACH,UAAM,IAAI,MAAM,0BAA0B;AAC5C,MAAI,OAAO,SAAS,GAAG;AACrB,UAAM,IAAI,MAAM,oCAAoC,MAAM,GAAG;AAC/D,MAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,GAAG;AACzC,UAAM,IAAI,MAAM,qCAAqC,KAAK,EAAE;AAAA,EAC9D;AACA,SAAO,UAAU,MAAM,IAAI,KAAK;AAClC;AAGA,SAAS,kBAAkB,GAAG,OAAO;AACnC,MAAI,MAAM,MAAM;AACd,MAAE,EAAE,IAAI,MAAM,CAAC;AACjB,MAAI,MAAM,MAAM;AACd,MAAE,EAAE,IAAI,MAAM,CAAC;AACjB,MAAI,MAAM,UAAU;AAClB,MAAE,MAAM,IAAI,MAAM,KAAK;AACzB,MAAI,MAAM,WAAW;AACnB,MAAE,OAAO,IAAI,MAAM,MAAM;AAC3B,MAAI,MAAM,WAAW;AACnB,MAAE,OAAO,IAAI,MAAM,MAAM;AAC3B,MAAI,MAAM,SAAS;AACjB,MAAE,KAAK,IAAI,MAAM,IAAI;AACvB,MAAI,cAAc;AAChB,MAAE,SAAS,IAAI,MAAM,YAAY,IAAI;AACvC,MAAI,cAAc;AAChB,MAAE,SAAS,IAAI,MAAM,YAAY,IAAI;AACzC;AAEA,IAAM,mBAAN,MAAuB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc,oBAAI;AAAA,EAClB,YAAY,MAAM,OAAO,gBAAgB;AACvC,SAAK,QAAQ;AACb,SAAK,SAAS;AACd,SAAK,kBAAkB,kBAAkB;AAAA,EAC3C;AAAA,EACA,qBAAqB,QAAQ;AAC3B,QAAIC,OAAM,KAAK,YAAY,IAAI,MAAM;AACrC,QAAI,CAACA,MAAK;AACR,YAAM,QAAQ,iBAAiB,QAAQ,KAAK,MAAM;AAClD,MAAAA,OAAM,KAAK,MAAM,IAAI,OAAO,sBAAsB,6BAA6B;AAC/E,WAAK,YAAY,IAAI,QAAQA,IAAG;AAChC,WAAKA,IAAG,EAAE,QAAQ,UAAU,EAAE,sBAAsB,CAAC;AAAA,IACvD;AACA,WAAOA;AAAA,EACT;AAAA,EACA,MAAM,YAAY,QAAQ;AACxB,QAAI,CAAC,KAAK;AACR,aAAO;AACT,UAAM,QAAQ,iBAAiB,QAAQ,KAAK,MAAM;AAClD,WAAO,KAAK,gBAAgB,OAAO,KAAK;AAAA,EAC1C;AAAA,EACA,cAAc,QAAQ,aAAa;AACjC,UAAMA,OAAM,KAAK,qBAAqB,MAAM;AAC5C,QAAI;AACJ,WAAOA,MAAK,CAAC,UAAU;AACrB,YAAM,OAAO,MAAM,SAAS,WAAW;AAAA,QACrC,MAAM,YAAY;AAAA,QAClB,GAAG,YAAY;AAAA,QACf,GAAG,YAAY;AAAA,QACf,OAAO,YAAY;AAAA,QACnB,QAAQ,YAAY;AAAA,QACpB,QAAQ,YAAY;AAAA,QACpB,MAAM,YAAY;AAAA,MACpB,CAAC;AACD,eAAS,KAAK;AAAA,IAChB,CAAC;AACD,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,iCAAiC;AAAA,IACnD;AACA,WAAO;AAAA,EACT;AAAA,EACA,cAAc,QAAQ,QAAQ,OAAO;AACnC,UAAMA,OAAM,KAAK,qBAAqB,MAAM;AAC5C,WAAOA,MAAK,CAAC,UAAU;AACrB,YAAM,OAAO,MAAM,SAAS,YAAY,MAAM;AAC9C,UAAI,CAAC;AACH,cAAM,IAAI,MAAM,mBAAmB,MAAM,EAAE;AAC7C,wBAAkB,KAAK,MAAM,KAAK;AAAA,IACpC,CAAC;AAAA,EACH;AAAA,EACA,cAAc,QAAQ,QAAQ;AAC5B,UAAMA,OAAM,KAAK,qBAAqB,MAAM;AAC5C,WAAOA,MAAK,CAAC,UAAU;AACrB,YAAM,SAAS,OAAO,MAAM;AAAA,IAC9B,CAAC;AAAA,EACH;AAAA,EACA,YAAY,QAAQ;AAClB,UAAMA,OAAM,KAAK,qBAAqB,MAAM;AAC5C,UAAM,QAAQA,KAAI,OAAO,EAAE;AAC3B,WAAO,MAAM,IAAI,CAAC,SAAS;AACzB,YAAM,KAAK,KAAK;AAChB,YAAM,OAAO,KAAK;AAClB,aAAO,EAAE,IAAI,KAAK;AAAA,IACpB,CAAC;AAAA,EACH;AAAA,EACA,cAAc,QAAQ,SAAS;AAC7B,WAAO,KAAK,YAAY,MAAM,EAAE,OAAO,CAAC,OAAO,GAAG,KAAK,aAAa,OAAO;AAAA,EAC7E;AAAA,EACA,UAAU,QAAQ,UAAU;AAC1B,UAAMA,OAAM,KAAK,qBAAqB,MAAM;AAC5C,WAAO,UAAUA,MAAK,QAAQ;AAAA,EAChC;AAAA,EACA,WAAW,QAAQ;AACjB,SAAK,YAAY,OAAO,MAAM;AAAA,EAChC;AAAA,EACA,UAAU;AACR,SAAK,YAAY,MAAM;AAAA,EACzB;AACF;AAGA,IAAI,iBAAiB;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAI,wBAAwB,iBAAE,OAAO;AAAA,EACnC,SAAS,iBAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,EACjC,UAAU,iBAAE,KAAK,cAAc,EAAE,QAAQ,YAAY;AACvD,CAAC,EAAE,YAAY,EAAE,QAAQ;AAkBzB,IAAI,iBAAiB;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAI,uBAAuB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAI,0BAA0B;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAI,oBAAoB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAI,0BAA0B,iBAAG,mBAAmB,QAAQ;AAAA,EAC1D,iBAAG,OAAO;AAAA,IACR,MAAM,iBAAG,QAAQ,MAAM;AAAA,IACvB,GAAG,iBAAG,OAAO;AAAA,IACb,GAAG,iBAAG,OAAO;AAAA,EACf,CAAC;AAAA,EACD,iBAAG,OAAO;AAAA,IACR,MAAM,iBAAG,QAAQ,kBAAkB;AAAA,IACnC,QAAQ,iBAAG,OAAO;AAAA,IAClB,QAAQ,iBAAG,KAAK,iBAAiB;AAAA,EACnC,CAAC;AAAA,EACD,iBAAG,OAAO;AAAA,IACR,MAAM,iBAAG,QAAQ,qBAAqB;AAAA,IACtC,QAAQ,iBAAG,OAAO;AAAA,IAClB,SAAS,iBAAG,OAAO;AAAA,IACnB,SAAS,iBAAG,OAAO;AAAA,EACrB,CAAC;AAAA,EACD,iBAAG,OAAO;AAAA,IACR,MAAM,iBAAG,QAAQ,kBAAkB;AAAA,IACnC,QAAQ,iBAAG,OAAO;AAAA,IAClB,QAAQ,iBAAG,OAAO;AAAA,EACpB,CAAC;AACH,CAAC;AACD,IAAI,yBAAyB,iBAAG,OAAO;AAAA,EACrC,IAAI,iBAAG,OAAO;AAAA,EACd,MAAM,iBAAG,OAAO;AAAA,EAChB,UAAU,iBAAG,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AACpC,CAAC;AACD,IAAI,6BAA6B,iBAAG,OAAO;AAAA,EACzC,OAAO;AAAA,EACP,KAAK;AAAA,EACL,UAAU,iBAAG,KAAK,oBAAoB,EAAE,QAAQ,UAAU;AAAA,EAC1D,UAAU,iBAAG,KAAK,cAAc,EAAE,QAAQ,MAAM;AAAA,EAChD,QAAQ,iBAAG,KAAK,cAAc,EAAE,QAAQ,OAAO;AAAA,EAC/C,UAAU,iBAAG,MAAM,sBAAsB,EAAE,QAAQ,CAAC,CAAC;AAAA,EACrD,aAAa,iBAAG,OAAO,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,EACzC,aAAa,iBAAG,OAAO,EAAE,QAAQ,SAAS;AAAA,EAC1C,aAAa,iBAAG,KAAK,uBAAuB,EAAE,QAAQ,OAAO;AAC/D,CAAC,EAAE,YAAY,EAAE,QAAQ;AA4BzB,IAAI,2BAA2B,iBAAG,OAAO;AAAA,EACvC,MAAM,iBAAG,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,EACxC,SAAS,iBAAG,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,EAC3C,OAAO,iBAAG,OAAO,iBAAG,OAAO,GAAG,iBAAG,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EACrD,SAAS,iBAAG,MAAM,iBAAG,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EACzC,mBAAmB,iBAAG,QAAQ,EAAE,QAAQ,KAAK;AAAA,EAC7C,aAAa,iBAAG,OAAO,EAAE,QAAQ,SAAS;AAAA,EAC1C,eAAe,iBAAG,OAAO,EAAE,QAAQ,SAAS;AAAA,EAC5C,aAAa,iBAAG,OAAO,EAAE,QAAQ,SAAS;AAC5C,CAAC,EAAE,YAAY,EAAE,QAAQ;AA2BzB,IAAI,yBAAyB,iBAAG,OAAO;AAAA,EACrC,OAAO,iBAAG,OAAO,EAAE,SAAS;AAAA,EAC5B,cAAc,iBAAG,QAAQ,EAAE,QAAQ,IAAI;AACzC,CAAC,EAAE,YAAY,EAAE,QAAQ;AAkBzB,IAAI,kBAAkB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAI,uBAAuB,iBAAG,OAAO;AAAA,EACnC,WAAW,iBAAG,KAAK,eAAe,EAAE,QAAQ,WAAW;AAAA,EACvD,cAAc,iBAAG,OAAO,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,EAC1C,MAAM,iBAAG,OAAO,EAAE,QAAQ,SAAS;AAAA,EACnC,QAAQ,iBAAG,OAAO,EAAE,QAAQ,SAAS;AAAA,EACrC,aAAa,iBAAG,OAAO,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,EACzC,MAAM,iBAAG,OAAO,EAAE,QAAQ,EAAE;AAC9B,CAAC,EAAE,YAAY,EAAE,QAAQ;AAyBzB,IAAI,wBAAwB,iBAAG,OAAO;AAAA,EACpC,SAAS,iBAAG,OAAO,EAAE,SAAS;AAAA,EAC9B,MAAM,iBAAG,OAAO,EAAE,SAAS;AAC7B,CAAC,EAAE,YAAY,EAAE,QAAQ;AAkBzB,IAAI,yBAAyB,iBAAG,OAAO;AAAA,EACrC,KAAK,iBAAG,OAAO,EAAE,SAAS;AAAA,EAC1B,MAAM,iBAAG,OAAO,EAAE,SAAS;AAC7B,CAAC,EAAE,YAAY,EAAE,QAAQ;AAmBzB,IAAI,2BAA2B,iBAAG,OAAO;AAAA,EACvC,MAAM,iBAAG,OAAO,EAAE,SAAS;AAAA,EAC3B,QAAQ,iBAAG,OAAO,EAAE,SAAS;AAAA,EAC7B,MAAM,iBAAG,OAAO,EAAE,SAAS;AAC7B,CAAC,EAAE,YAAY,EAAE,QAAQ;AAmBzB,IAAI,2BAA2B,iBAAG,OAAO;AAAA,EACvC,aAAa,iBAAG,OAAO,EAAE,SAAS;AACpC,CAAC,EAAE,YAAY,EAAE,QAAQ;AAkBzB,IAAI,gBAAgB;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAI,0BAA0B,iBAAI,OAAO;AAAA,EACvC,OAAO,iBAAI,KAAK,aAAa,EAAE,QAAQ,QAAQ;AAAA,EAC/C,SAAS,iBAAI,QAAQ,EAAE,QAAQ,IAAI;AAAA,EACnC,UAAU,iBAAI,QAAQ,EAAE,QAAQ,IAAI;AACtC,CAAC,EAAE,YAAY,EAAE,QAAQ;AAkBzB,IAAI,+BAA+B,iBAAI,OAAO;AAAA,EAC5C,SAAS,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC/B,SAAS,iBAAI,OAAO,EAAE,SAAS;AACjC,CAAC,EAAE,YAAY,EAAE,QAAQ;AAmBzB,IAAI,uBAAuB,iBAAI,OAAO;AAAA,EACpC,SAAS,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC/B,MAAM,iBAAI,OAAO,EAAE,SAAS;AAC9B,CAAC,EAAE,YAAY,EAAE,QAAQ;AAkBzB,IAAI,0BAA0B,iBAAI,OAAO;AAAA,EACvC,eAAe,iBAAI,OAAO,EAAE,SAAS;AAAA,EACrC,SAAS,iBAAI,OAAO,EAAE,SAAS;AACjC,CAAC,EAAE,YAAY,EAAE,QAAQ;AAgHzB,SAAS,WAAW,SAAS;AAC3B,MAAI,CAAC;AACH,WAAO;AACT,QAAM,IAAI,QAAQ,MAAM;AAAA,CACzB,EAAE;AACD,SAAO,QAAQ,SAAS;AAAA,CACzB,IAAI,IAAI,IAAI;AACb;AACA,SAAS,KAAK,KAAK,KAAK;AACtB,SAAO,OAAO,OAAO,KAAK,GAAG,IAAI,IAAI,GAAG,IAAI;AAC9C;AAGA,IAAI,uBAAuB,iBAAI,OAAO;AAAA,EACpC,WAAW,iBAAI,OAAO;AAAA,EACtB,MAAM,iBAAI,OAAO;AAAA,EACjB,YAAY,iBAAI,OAAO;AAAA,EACvB,YAAY,iBAAI,OAAO;AAAA,EACvB,WAAW,iBAAI,OAAO;AAAA,EACtB,YAAY,iBAAI,OAAO,EAAE,SAAS;AAAA,EAClC,iBAAiB,iBAAI,OAAO,EAAE,SAAS;AAAA,EACvC,YAAY,iBAAI,OAAO,EAAE,SAAS;AACpC,CAAC;AAQD,IAAI,2BAA2B;AAAA,EAC7B,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,cAAc;AAChB;AACA,IAAI,qBAAqB,OAAO,KAAK,wBAAwB;AAC7D,SAAS,uBAAuB,OAAO;AACrC,SAAO,yBAAyB,KAAK;AACvC;AAQA,IAAI,2BAA2B,qBAAqB,OAAO;AAAA,EACzD,gBAAgB,iBAAI,QAAQ,WAAW;AAAA,EACvC,YAAY,iBAAI,OAAO;AAAA,EACvB,eAAe,iBAAI,OAAO,EAAE,SAAS;AACvC,CAAC;AACD,IAAI,wBAAwB,iBAAI,OAAO;AAAA,EACrC,WAAW,iBAAI,OAAO;AAAA,EACtB,UAAU,iBAAI,OAAO,EAAE,SAAS;AAAA,EAChC,UAAU,iBAAI,OAAO,EAAE,SAAS;AAAA,EAChC,UAAU,iBAAI,OAAO;AAAA,EACrB,MAAM,iBAAI,OAAO;AAAA,EACjB,UAAU,iBAAI,OAAO;AAAA,EACrB,KAAK,iBAAI,OAAO;AAAA,EAChB,YAAY,iBAAI,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACvC,aAAa,iBAAI,MAAM,CAAC,iBAAI,OAAO,GAAG,iBAAI,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,IAAI;AAC9E,CAAC;AACD,IAAI,2BAA2B,qBAAqB,OAAO;AAAA,EACzD,gBAAgB,iBAAI,QAAQ,WAAW;AAAA,EACvC,UAAU,iBAAI,OAAO;AAAA,EACrB,YAAY,iBAAI,OAAO;AAAA,EACvB,aAAa,iBAAI,OAAO;AAAA,EACxB,iBAAiB,iBAAI,OAAO;AAAA,EAC5B,MAAM,iBAAI,KAAK,CAAC,YAAY,UAAU,CAAC;AAAA,EACvC,WAAW,iBAAI,KAAK,CAAC,gBAAgB,UAAU,aAAa,IAAI,CAAC,EAAE,QAAQ,cAAc;AAAA,EACzF,SAAS,iBAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC7C,WAAW,iBAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC/C,UAAU,iBAAI,KAAK,CAAC,YAAY,QAAQ,CAAC,EAAE,QAAQ,UAAU;AAAA,EAC7D,UAAU,sBAAsB,SAAS,EAAE,QAAQ,IAAI;AAAA,EACvD,YAAY,iBAAI,KAAK,CAAC,SAAS,UAAU,iBAAiB,SAAS,CAAC,EAAE,QAAQ,OAAO;AACvF,CAAC;AACD,IAAI,iCAAiC,qBAAqB,OAAO;AAAA,EAC/D,gBAAgB,iBAAI,QAAQ,iBAAiB;AAAA,EAC7C,KAAK,iBAAI,OAAO;AAAA,EAChB,iBAAiB,iBAAI,OAAO;AAAA,EAC5B,aAAa,iBAAI,OAAO;AAAA,EACxB,cAAc,iBAAI,OAAO;AAAA,EACzB,aAAa,iBAAI,OAAO,EAAE,SAAS;AAAA,EACnC,SAAS,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC/B,eAAe,iBAAI,OAAO,EAAE,SAAS;AAAA,EACrC,YAAY,iBAAI,OAAO,EAAE,SAAS;AAAA,EAClC,YAAY,iBAAI,OAAO,EAAE,SAAS;AAAA,EAClC,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,EACjC,gBAAgB,iBAAI,OAAO,EAAE,SAAS;AAAA,EACtC,eAAe,iBAAI,OAAO,EAAE,SAAS;AAAA,EACrC,YAAY,iBAAI,OAAO,EAAE,SAAS;AAAA,EAClC,gBAAgB,iBAAI,OAAO,EAAE,SAAS;AACxC,CAAC;AACD,IAAI,gCAAgC,qBAAqB,OAAO;AAAA,EAC9D,gBAAgB,iBAAI,QAAQ,gBAAgB;AAAA,EAC5C,iBAAiB,iBAAI,OAAO;AAAA,EAC5B,aAAa,iBAAI,OAAO;AAAA,EACxB,SAAS,iBAAI,OAAO;AAAA,EACpB,SAAS,iBAAI,OAAO;AAAA,EACpB,aAAa,iBAAI,OAAO;AAAA,EACxB,cAAc,iBAAI,OAAO;AAAA,EACzB,YAAY,iBAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAChD,YAAY,iBAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAClD,CAAC;AACD,IAAI,mCAAmC,qBAAqB,OAAO;AAAA,EACjE,gBAAgB,iBAAI,QAAQ,oBAAoB;AAAA,EAChD,iBAAiB,iBAAI,OAAO;AAAA,EAC5B,aAAa,iBAAI,OAAO;AAAA,EACxB,SAAS,iBAAI,OAAO;AAAA,EACpB,SAAS,iBAAI,OAAO;AAAA,EACpB,aAAa,iBAAI,OAAO;AAAA,EACxB,cAAc,iBAAI,OAAO;AAAA,EACzB,iBAAiB,iBAAI,OAAO;AAAA,EAC5B,aAAa,iBAAI,OAAO;AAAA,EACxB,cAAc,iBAAI,OAAO;AAAA,EACzB,SAAS,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC/B,aAAa,iBAAI,OAAO,EAAE,SAAS;AAAA,EACnC,YAAY,iBAAI,OAAO,EAAE,SAAS;AAAA,EAClC,gBAAgB,iBAAI,OAAO,EAAE,SAAS;AAAA,EACtC,gBAAgB,iBAAI,OAAO,EAAE,SAAS;AAAA,EACtC,YAAY,iBAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAChD,YAAY,iBAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAClD,CAAC;AACD,IAAI,sBAAsB,iBAAI,mBAAmB,kBAAkB;AAAA,EACjE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAI,uBAAuB;AAC3B,IAAI,uBAAuB;AAC3B,IAAI,6BAA6B;AACjC,IAAI,uBAAuB,iBAAI,OAAO;AAAA,EACpC,UAAU,iBAAI,OAAO;AAAA,EACrB,WAAW,iBAAI,OAAO;AAAA,EACtB,QAAQ,iBAAI,OAAO;AAAA,EACnB,WAAW,iBAAI,OAAO;AACxB,CAAC;AACD,IAAI,2BAA2B;AAC/B,IAAI,wBAAwB,iBAAI,OAAO;AAAA,EACrC,eAAe,iBAAI,OAAO;AAAA,EAC1B,SAAS,iBAAI,OAAO,iBAAI,OAAO,GAAG,mBAAmB;AAAA,EACrD,cAAc,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAAA,EACpC,cAAc,iBAAI,MAAM,oBAAoB;AAC9C,CAAC;AACD,SAAS,uBAAuB,KAAK;AACnC,MAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC3C,WAAO;AAAA,MACL,eAAe;AAAA,MACf,SAAS,CAAC;AAAA,MACV,cAAc,CAAC;AAAA,MACf,cAAc,CAAC;AAAA,IACjB;AAAA,EACF;AACA,QAAM,gBAAgB,iBAAI,OAAO,iBAAI,OAAO,GAAG,mBAAmB,EAAE,UAAU,KAAK,KAAK,SAAS,KAAK,CAAC,CAAC;AACxG,QAAM,YAAY,iBAAI,MAAM,iBAAI,OAAO,CAAC,EAAE,UAAU,KAAK,KAAK,cAAc,KAAK,CAAC,CAAC;AACnF,QAAM,iBAAiB,iBAAI,MAAM,oBAAoB,EAAE,UAAU,KAAK,KAAK,cAAc,KAAK,CAAC,CAAC;AAChG,SAAO;AAAA,IACL,eAAe;AAAA,IACf,SAAS,cAAc,UAAU,cAAc,OAAO,CAAC;AAAA,IACvD,cAAc,UAAU,UAAU,UAAU,OAAO,CAAC;AAAA,IACpD,cAAc,eAAe,UAAU,eAAe,OAAO,CAAC;AAAA,EAChE;AACF;AACA,IAAI,6BAA6B;AACjC,IAAI,yBAAyB,iBAAI,OAAO;AAAA,EACtC,eAAe,iBAAI,OAAO;AAAA,EAC1B,SAAS,iBAAI,OAAO,iBAAI,OAAO,GAAG,oBAAoB;AAAA,EACtD,qBAAqB,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAC7C,CAAC;AACD,SAAS,wBAAwB,KAAK;AACpC,MAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC3C,WAAO,EAAE,eAAe,4BAA4B,SAAS,CAAC,GAAG,qBAAqB,CAAC,EAAE;AAAA,EAC3F;AACA,QAAM,gBAAgB,iBAAI,OAAO,iBAAI,OAAO,GAAG,oBAAoB,EAAE,UAAU,KAAK,KAAK,SAAS,KAAK,CAAC,CAAC;AACzG,QAAM,YAAY,iBAAI,MAAM,iBAAI,OAAO,CAAC,EAAE,UAAU,KAAK,KAAK,qBAAqB,KAAK,CAAC,CAAC;AAC1F,SAAO;AAAA,IACL,eAAe;AAAA,IACf,SAAS,cAAc,UAAU,cAAc,OAAO,CAAC;AAAA,IACvD,qBAAqB,UAAU,UAAU,UAAU,OAAO,CAAC;AAAA,EAC7D;AACF;AACA,IAAI,mCAAmC;AACvC,IAAI,+BAA+B,iBAAI,OAAO;AAAA,EAC5C,eAAe,iBAAI,OAAO;AAAA,EAC1B,SAAS,iBAAI,OAAO,iBAAI,OAAO,GAAG,0BAA0B;AAAA,EAC5D,wBAAwB,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAChD,CAAC;AACD,SAAS,8BAA8B,KAAK;AAC1C,MAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC3C,WAAO;AAAA,MACL,eAAe;AAAA,MACf,SAAS,CAAC;AAAA,MACV,wBAAwB,CAAC;AAAA,IAC3B;AAAA,EACF;AACA,QAAM,gBAAgB,iBAAI,OAAO,iBAAI,OAAO,GAAG,0BAA0B,EAAE,UAAU,KAAK,KAAK,SAAS,KAAK,CAAC,CAAC;AAC/G,QAAM,YAAY,iBAAI,MAAM,iBAAI,OAAO,CAAC,EAAE,UAAU,KAAK,KAAK,wBAAwB,KAAK,CAAC,CAAC;AAC7F,SAAO;AAAA,IACL,eAAe;AAAA,IACf,SAAS,cAAc,UAAU,cAAc,OAAO,CAAC;AAAA,IACvD,wBAAwB,UAAU,UAAU,UAAU,OAAO,CAAC;AAAA,EAChE;AACF;AACA,IAAI,6BAA6B;AACjC,IAAI,yBAAyB,iBAAI,OAAO;AAAA,EACtC,eAAe,iBAAI,OAAO;AAAA,EAC1B,SAAS,iBAAI,OAAO,iBAAI,OAAO,GAAG,oBAAoB;AAAA,EACtD,qBAAqB,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAAA,EAC3C,UAAU,iBAAI,MAAM,oBAAoB;AAC1C,CAAC;AACD,SAAS,wBAAwB,KAAK;AACpC,MAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC3C,WAAO;AAAA,MACL,eAAe;AAAA,MACf,SAAS,CAAC;AAAA,MACV,qBAAqB,CAAC;AAAA,MACtB,UAAU,CAAC;AAAA,IACb;AAAA,EACF;AACA,QAAM,gBAAgB,iBAAI,OAAO,iBAAI,OAAO,GAAG,oBAAoB,EAAE,UAAU,KAAK,KAAK,SAAS,KAAK,CAAC,CAAC;AACzG,QAAM,YAAY,iBAAI,MAAM,iBAAI,OAAO,CAAC,EAAE,UAAU,KAAK,KAAK,qBAAqB,KAAK,CAAC,CAAC;AAC1F,QAAM,iBAAiB,iBAAI,MAAM,oBAAoB,EAAE,UAAU,KAAK,KAAK,UAAU,KAAK,CAAC,CAAC;AAC5F,SAAO;AAAA,IACL,eAAe;AAAA,IACf,SAAS,cAAc,UAAU,cAAc,OAAO,CAAC;AAAA,IACvD,qBAAqB,UAAU,UAAU,UAAU,OAAO,CAAC;AAAA,IAC3D,UAAU,eAAe,UAAU,eAAe,OAAO,CAAC;AAAA,EAC5D;AACF;AAGA,IAAI,sBAAsB;AAC1B,IAAI,0BAA0B;AAC9B,SAAS,oBAAoB,WAAW,WAAW;AACjD,QAAM,QAAQ,oBAAI;AAClB,aAAW,SAAS,WAAW;AAC7B,UAAM,QAAQ,MAAM,IAAI,CAAC;AACzB,QAAI,CAAC;AACH;AACF,UAAMC,QAAO,MAAM,IAAI,KAAK;AAC5B,QAAIA,OAAM;AACR,MAAAA,MAAK,KAAK,KAAK;AAAA,IACjB,OAAO;AACL,YAAM,IAAI,OAAO,CAAC,KAAK,CAAC;AAAA,IAC1B;AAAA,EACF;AACA,QAAM,QAAQ,CAAC;AACf,aAAW,CAAC,OAAO,MAAM,KAAK,OAAO;AACnC,QAAI,OAAO,SAAS,WAAW;AAC7B,YAAM,KAAK,EAAE,OAAO,OAAO,CAAC;AAAA,IAC9B;AAAA,EACF;AACA,SAAO;AACT;AACA,SAAS,eAAe,QAAQ;AAC9B,QAAMC,OAAM,IAAIC;AAChB,QAAM,UAAU,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI;AACxC,MAAI;AACF,IAAAD,KAAI,YAAY,OAAO;AAAA,EACzB,QAAQ;AACN,WAAO;AAAA,EACT;AACA,SAAOA;AACT;AAEA,IAAM,gBAAN,MAAoB;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,YAAY,SAAS;AACnB,SAAK,WAAW,QAAQ;AACxB,SAAK,cAAc,QAAQ,cAAc;AACzC,SAAK,kBAAkB,QAAQ,kBAAkB;AAAA,EACnD;AAAA,EACA,QAAQ;AACN,QAAI,KAAK,aAAa,KAAK;AACzB;AACF,SAAK,SAAS,YAAY,MAAM;AAC9B,WAAK,WAAW,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IAClC,GAAG,KAAK,WAAW;AAAA,EACrB;AAAA,EACA,OAAO;AACL,QAAI,KAAK,QAAQ;AACf,oBAAc,KAAK,MAAM;AACzB,WAAK,SAAS;AAAA,IAChB;AAAA,EACF;AAAA,EACA,UAAU;AACR,SAAK,KAAK;AACV,SAAK,YAAY;AAAA,EACnB;AAAA,EACA,MAAM,aAAa;AACjB,QAAI,KAAK,aAAa,KAAK;AACzB;AACF,SAAK,WAAW;AAChB,QAAI;AACF,YAAM,YAAY,MAAM,KAAK,SAAS,UAAU,CAAC,CAAC;AAClD,YAAM,QAAQ,oBAAoB,WAAW,KAAK,eAAe;AACjE,iBAAW,QAAQ,OAAO;AACxB,cAAM,KAAK,YAAY,IAAI;AAAA,MAC7B;AAAA,IACF,UAAE;AACA,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AAAA,EACA,MAAK,YAAY,MAAM;AACrB,UAAM,EAAE,OAAO,OAAO,IAAI;AAC1B,UAAMA,OAAM,eAAe,MAAM;AACjC,QAAI,CAACA;AACH;AACF,UAAM,WAAWA,KAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAChD,UAAM,cAAc,CAAC,OAAO,YAAY,OAAO,KAAK,IAAI,CAAC,CAAC;AAC1D,UAAM,KAAK,SAAS,KAAK,aAAa,QAAQ;AAC9C,eAAW,SAAS,QAAQ;AAC1B,YAAM,KAAK,SAAS,OAAO,MAAM,GAAG;AAAA,IACtC;AAAA,EACF;AACF;AAEA,IAAI,aAAa;AACjB,IAAI,eAAe;AACnB,IAAI,oBAAoB,oBAAI,IAAI,CAAC,UAAU,WAAW,CAAC;AACvD,IAAI,oBAAoB,CAAC,QAAQ,QAAQ;AACzC,IAAI,aAAa,IAAI,IAAI,iBAAiB;AAC1C,SAAS,iBAAiB,OAAO;AAC/B,SAAO,WAAW,IAAI,KAAK;AAC7B;AACA,SAAS,gBAAgB,IAAI;AAC3B,QAAM,QAAQ,GAAG,MAAM,GAAG;AAC1B,MAAI,MAAM,WAAW;AACnB,WAAO;AACT,QAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI;AAChC,MAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AACtB,WAAO;AACT,MAAI,CAAC,iBAAiB,MAAM;AAC1B,WAAO;AACT,QAAM,QAAQ,OAAO,SAAS,UAAU,EAAE;AAC1C,MAAI,CAAC,OAAO,SAAS,KAAK,KAAK,QAAQ;AACrC,WAAO;AACT,MAAI,aAAa,OAAO,KAAK;AAC3B,WAAO;AACT,SAAO,EAAE,QAAQ,KAAK,MAAM;AAC9B;AAKA,IAAI,sBAAsB;AAG1B,IAAI,yBAAyB;AAC7B,IAAI,iBAAiB;AACrB,IAAI,eAAe;AACnB,IAAI,8BAA8B,QAAQ,mBAAmB,KAAK,sBAAsB;AACxF,IAAI,2BAA2B,QAAQ,mBAAmB,KAAK,cAAc;AAC7E,IAAI,yBAAyB,QAAQ,mBAAmB,KAAK,YAAY;AACzE,IAAI,mBAAmB;AACvB,IAAI,oBAAoB;AACxB,IAAI,2BAA2B;AAC/B,IAAI,wBAAwB,QAAQ,mBAAmB,KAAK,gBAAgB;AAC5E,IAAI,yBAAyB,QAAQ,mBAAmB,KAAK,iBAAiB;AAC9E,IAAI,gCAAgC,QAAQ,mBAAmB,KAAK,wBAAwB;AAC5F,IAAI,sBAAsB;AAC1B,IAAI,oBAAoB;AACxB,IAAI,2BAA2B,QAAQ,mBAAmB,KAAK,mBAAmB;AAClF,IAAI,8BAA8B,QAAQ,mBAAmB,KAAK,iBAAiB;AACnF,IAAI,0BAA0B;AAC9B,IAAI,+BAA+B,QAAQ,mBAAmB,KAAK,uBAAuB;AAC1F,IAAI,uBAAuB;AAC3B,IAAI,4BAA4B,QAAQ,mBAAmB,KAAK,oBAAoB;AACpF,IAAI,6BAA6B;AACjC,IAAI,kCAAkC,QAAQ,mBAAmB,KAAK,0BAA0B;AAChG,IAAI,eAAe;AACnB,IAAI,iBAAiB;AACrB,IAAI,yBAAyB,QAAQ,mBAAmB,KAAK,YAAY;AACzE,IAAI,2BAA2B,QAAQ,mBAAmB,KAAK,cAAc;AAC7E,IAAI,sBAAsB;AAC1B,IAAI,2BAA2B,QAAQ,mBAAmB,KAAK,mBAAmB;AAClF,IAAI,sBAAsB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAI,kBAAkB,IAAI,IAAI,mBAAmB;AAKjD,IAAI,2BAA2B;AAC/B,IAAI,+BAA+B,SAAS,wBAAwB;AAIpE,SAAS,wBAAwB,QAAQ;AACvC,SAAO,SAAS,MAAM;AACxB;AACA,SAAS,wBAAwB,WAAW,cAAc,0BAA0B;AAClF,SAAO,SAAS,WAAW,IAAI,SAAS;AAC1C;AAoBA,SAASE,cAAa,MAAM,MAAM;AAChC,QAAM,QAAQ;AACd,MAAI,MAAM;AACV,MAAI,KAAK,UAAU,KAAK,MAAM;AAC5B,eAAWC,UAAS,KAAK,KAAK,SAAS,KAAK,GAAG;AAC7C,YAAM,KAAK,IAAI,KAAKA,OAAM,CAAC,EAAE,MAAM;AAAA,IACrC;AAAA,EACF;AACA,MAAI,SAAS,MAAM,KAAK,OAAO,IAAI,OAAO;AAC1C,WAAS,IAAI,GAAE,IAAI,KAAK;AACtB,cAAU;AACZ,MAAI,MAAM,KAAK,OAAO;AACpB,cAAU;AACZ,SAAO;AACT;AACA,SAAS,oBAAoB,MAAM;AACjC,MAAIC,QAAO;AACX,OAAK,QAAQ,CAAC,UAAU;AACtB,QAAI,MAAM,QAAQ;AAChB,MAAAA,SAAQ,MAAM,QAAQ;AAAA,IACxB,WAAW,MAAM,KAAK,SAAS,aAAa;AAC1C,MAAAA,SAAQ;AAAA,IACV,OAAO;AACL,MAAAA,SAAQ,oBAAoB,KAAK;AAAA,IACnC;AAAA,EACF,CAAC;AACD,SAAOA;AACT;AACA,SAAS,SAAS,MAAM;AACtB,QAAM,QAAQ,CAAC;AACf,OAAK,QAAQ,CAACC,WAAU;AACtB,UAAM,KAAK,oBAAoBA,MAAK,CAAC;AAAA,EACvC,CAAC;AACD,SAAO,MAAM,KAAK,GAAG;AACvB;AACA,IAAI,uBAAuB,IAAI,mBAAmB;AAAA,EAChD,WAAW,OAAO,MAAM;AACtB,UAAM,UAAU,MAAM,MAAM,MAAM,MAAM,MAAM,cAAc,IAAI,CAAC;AAAA,EACnE;AAAA,EACA,UAAU,OAAO,MAAM;AACrB,UAAM,OAAO,OAAO,KAAK,MAAM,YAAY,EAAE;AAC7C,UAAM,MAAM,SAAS,IAAI;AAAA,CAC5B;AACG,UAAM,KAAK,KAAK,aAAa,KAAK;AAClC,UAAM,cAAc;AACpB,UAAM,MAAM,KAAK;AACjB,UAAM,WAAW,IAAI;AAAA,EACvB;AAAA,EACA,QAAQ,OAAO,MAAM;AACnB,UAAM,MAAM,GAAG,MAAM,OAAO,KAAK,OAAO,KAAK,MAAM,KAAK,CAAC,CAAC,GAAG;AAC7D,UAAM,aAAa,IAAI;AACvB,UAAM,WAAW,IAAI;AAAA,EACvB;AAAA,EACA,eAAe,OAAO,MAAM;AAC1B,UAAM,MAAM,KAAK;AACjB,UAAM,WAAW,IAAI;AAAA,EACvB;AAAA,EACA,WAAW,OAAO,MAAM;AACtB,UAAM,WAAW,MAAM,MAAM,MAAM,IAAI;AAAA,EACzC;AAAA,EACA,YAAY,OAAO,MAAM;AACvB,UAAM,QAAQ,OAAO,KAAK,MAAM,KAAK,KAAK;AAC1C,UAAM,OAAO,OAAO,QAAQ,KAAK,aAAa,CAAC,EAAE;AACjD,UAAM,QAAQ,MAAM,OAAO,KAAK,OAAO,CAAC;AACxC,UAAM,WAAW,MAAM,OAAO,CAAC,MAAM;AACnC,YAAM,OAAO,OAAO,QAAQ,CAAC;AAC7B,aAAO,GAAG,MAAM,OAAO,KAAK,OAAO,KAAK,MAAM,CAAC,GAAG,IAAI;AAAA,IACxD,CAAC;AAAA,EACH;AAAA,EACA,SAAS,OAAO,MAAM;AACpB,UAAM,cAAc,IAAI;AAAA,EAC1B;AAAA,EACA,UAAU,OAAO,MAAM;AACrB,UAAM,aAAa,IAAI;AACvB,UAAM,WAAW,IAAI;AAAA,EACvB;AAAA,EACA,UAAU,OAAO,MAAM,QAAQ,OAAO;AACpC,aAAS,IAAI,QAAQ,GAAE,IAAI,OAAO,YAAY,KAAK;AACjD,UAAI,OAAO,MAAM,CAAC,EAAE,SAAS,KAAK,MAAM;AACtC,cAAM,MAAM,MAAM;AAClB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,KAAK,OAAO,MAAM;AAChB,UAAM,KAAK,KAAK,QAAQ,EAAE;AAAA,EAC5B;AAAA,EACA,MAAM,OAAO,MAAM;AACjB,UAAM,MAAM,MAAM,IAAI,OAAO,KAAK,MAAM,OAAO,EAAE,CAAC;AAClD,UAAM,MAAM,OAAO,KAAK,MAAM,OAAO,EAAE;AACvC,UAAM,QAAQ,KAAK,MAAM,QAAQ,KAAK,MAAM,IAAI,OAAO,KAAK,MAAM,KAAK,CAAC,CAAC,MAAM;AAC/E,UAAM,MAAM,KAAK,GAAG,KAAK,GAAG,GAAG,KAAK,GAAG;AAAA,EACzC;AAAA,EACA,MAAM,OAAO,MAAM;AACjB,UAAM,OAAO,CAAC;AACd,SAAK,QAAQ,CAAC,QAAQ;AACpB,WAAK,KAAK,GAAG;AAAA,IACf,CAAC;AACD,QAAI,KAAK,WAAW;AAClB;AACF,UAAM,WAAW,KAAK,CAAC;AACvB,QAAI,cAAc;AAClB,QAAI,UAAU;AACZ,eAAS,QAAQ,CAAC,SAAS;AACzB,YAAI,KAAK,KAAK,SAAS;AACrB,wBAAc;AAAA,MAClB,CAAC;AAAA,IACH;AACA,UAAM,WAAW,WAAW,SAAS,aAAa;AAClD,UAAM,YAAY,IAAI,MAAM,QAAQ,EAAE,KAAK,CAAC;AAC5C,eAAW,OAAO,MAAM;AACtB,UAAI,MAAM;AACV,UAAI,QAAQ,CAAC,SAAS;AACpB,cAAMD,QAAO,SAAS,IAAI;AAC1B,YAAI,MAAM,UAAU,QAAQ;AAC1B,gBAAM,UAAU,UAAU,GAAG;AAC7B,cAAI,YAAY,QAAW;AACzB,sBAAU,GAAG,IAAI,KAAK,IAAI,SAASA,MAAK,MAAM;AAAA,UAChD;AAAA,QACF;AACA;AAAA,MACF,CAAC;AAAA,IACH;AACA,aAAS,UAAU,KAAK;AACtB,YAAM,QAAQ,CAAC;AACf,UAAI,MAAM;AACV,UAAI,QAAQ,CAAC,SAAS;AACpB,cAAMA,QAAO,SAAS,IAAI;AAC1B,cAAM,QAAQ,MAAM,UAAU,SAAS,UAAU,GAAG,KAAK,IAAI;AAC7D,cAAM,KAAK,IAAIA,MAAK,OAAO,KAAK,CAAC,GAAG;AACpC;AAAA,MACF,CAAC;AACD,aAAO,IAAI,MAAM,KAAK,GAAG,CAAC;AAAA,IAC5B;AACA,aAAS,kBAAkB;AACzB,YAAM,SAAS,UAAU,IAAI,CAAC,MAAM,IAAI,IAAI,OAAO,CAAC,CAAC,GAAG;AACxD,aAAO,IAAI,OAAO,KAAK,GAAG,CAAC;AAAA,IAC7B;AACA,QAAI,UAAU;AACZ,YAAM,MAAM,UAAU,QAAQ,CAAC;AAC/B,YAAM,cAAc;AACpB,YAAM,MAAM,gBAAgB,CAAC;AAC7B,YAAM,cAAc;AAAA,IACtB;AACA,UAAM,WAAW,cAAc,KAAK,MAAM,CAAC,IAAI;AAC/C,eAAW,OAAO,UAAU;AAC1B,YAAM,MAAM,UAAU,GAAG,CAAC;AAC1B,YAAM,cAAc;AAAA,IACtB;AACA,UAAM,WAAW,IAAI;AAAA,EACvB;AAAA,EACA,SAAS,QAAQ,OAAO;AAAA,EAAC;AAAA,EACzB,YAAY,QAAQ,OAAO;AAAA,EAAC;AAAA,EAC5B,UAAU,QAAQ,OAAO;AAAA,EAAC;AAAA,EAC1B,SAAS,OAAO,MAAM;AACpB,UAAM,WAAW,MAAM,MAAM,MAAM;AACjC,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EACA,SAAS,OAAO,MAAM;AACpB,UAAM,UAAU,KAAK,MAAM,YAAY;AACvC,UAAM,MAAM,GAAG,UAAU,WAAW,QAAQ,EAAE;AAC9C,QAAI,KAAK,aAAa,KAAK,KAAK,YAAY,KAAK,SAAS,aAAa;AACrE,YAAM,aAAa,KAAK,UAAU;AAClC,eAAS,IAAI,GAAE,IAAI,KAAK,YAAY,KAAK;AACvC,cAAM,OAAO,KAAK,MAAM,CAAC,GAAG,MAAM,CAAC;AAAA,MACrC;AAAA,IACF,OAAO;AACL,YAAM,cAAc,IAAI;AAAA,IAC1B;AACA,UAAM,cAAc;AAAA,EACtB;AACF,GAAG;AAAA,EACD,QAAQ,EAAE,MAAM,KAAK,OAAO,KAAK,SAAS,MAAM,0BAA0B,KAAK;AAAA,EAC/E,MAAM,EAAE,MAAM,MAAM,OAAO,MAAM,SAAS,MAAM,0BAA0B,KAAK;AAAA,EAC/E,QAAQ,EAAE,MAAM,MAAM,OAAO,MAAM,SAAS,MAAM,0BAA0B,KAAK;AAAA,EACjF,MAAM;AAAA,IACJ,KAAK,QAAQ,OAAO,QAAQ,OAAO;AACjC,aAAOF,cAAa,OAAO,MAAM,KAAK,GAAG,EAAE;AAAA,IAC7C;AAAA,IACA,MAAM,QAAQ,OAAO,QAAQ,OAAO;AAClC,aAAOA,cAAa,OAAO,MAAM,QAAQ,CAAC,GAAG,CAAC;AAAA,IAChD;AAAA,IACA,QAAQ;AAAA,EACV;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM,QAAQ,MAAM;AAClB,YAAM,OAAO,OAAO,KAAK,MAAM,QAAQ,EAAE;AACzC,YAAM,QAAQ,KAAK,MAAM,QAAQ,KAAK,OAAO,KAAK,MAAM,KAAK,CAAC,MAAM;AACpE,aAAO,KAAK,IAAI,GAAG,KAAK;AAAA,IAC1B;AAAA,EACF;AAAA,EACA,SAAS,EAAE,MAAM,IAAI,OAAO,GAAG;AACjC,GAAG,EAAE,mBAAmB,aAAa,QAAQ,MAAM,CAAC;AASpD,IAAI,qBAAqB,MAAO,IAAI;AAAA,EAClC,KAAK,MAAO,IAAI;AAAA,EAChB,UAAU,MAAO,OAAO;AAAA,IACtB,UAAU,MAAO,MAAM,OAAO;AAAA,IAC9B,QAAQ,MAAO,MAAM,OAAO;AAAA,EAC9B,CAAC;AACH,GAAG,EAAE,WAAW,KAAK,CAAC;AACtB,SAAS,eAAe,QAAQ,OAAO;AACrC,MAAI,CAAC;AACH,UAAM,IAAI,MAAM,0BAA0B;AAC5C,MAAI,OAAO,SAAS,GAAG;AACrB,UAAM,IAAI,MAAM,oCAAoC,MAAM,GAAG;AAC/D,MAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,GAAG;AACzC,UAAM,IAAI,MAAM,qCAAqC,KAAK,EAAE;AAAA,EAC9D;AACA,SAAO,QAAQ,MAAM,IAAI,KAAK;AAChC;AAGA,IAAM,iBAAN,MAAqB;AAAA,EACnB;AAAA,EACA;AAAA,EACA,YAAY,oBAAI;AAAA,EAChB;AAAA,EACA,YAAY,MAAM,OAAO,eAAe;AACtC,SAAK,QAAQ;AACb,SAAK,SAAS;AACd,SAAK,iBAAiB;AAAA,EACxB;AAAA,EACA,mBAAmB,QAAQ;AACzB,QAAII,OAAM,KAAK,UAAU,IAAI,MAAM;AACnC,QAAI,CAACA,MAAK;AACR,YAAM,QAAQ,eAAe,QAAQ,KAAK,MAAM;AAChD,MAAAA,OAAM,KAAK,MAAM,IAAI,OAAO,kBAAkB;AAC9C,WAAK,UAAU,IAAI,QAAQA,IAAG;AAAA,IAChC;AACA,WAAOA;AAAA,EACT;AAAA,EACA,cAAc,QAAQ,UAAU;AAC9B,UAAMA,OAAM,KAAK,mBAAmB,MAAM;AAC1C,SAAK,eAAe,cAAcA,MAAK,QAAQ;AAAA,EACjD;AAAA,EACA,YAAY,QAAQ,UAAU;AAC5B,UAAMA,OAAM,KAAK,mBAAmB,MAAM;AAC1C,WAAQA,MAAK,CAAC,UAAU;AACtB,YAAM,SAAS,SAAS,IAAI,QAAQ;AACpC,YAAM,SAAS,OAAO,IAAI,MAAM;AAAA,IAClC,CAAC;AAAA,EACH;AAAA,EACA,WAAW,QAAQ;AACjB,UAAMA,OAAM,KAAK,mBAAmB,MAAM;AAC1C,WAAO,KAAK,eAAe,aAAaA,IAAG;AAAA,EAC7C;AAAA,EACA,UAAU,QAAQ,UAAU;AAC1B,UAAMA,OAAM,KAAK,mBAAmB,MAAM;AAC1C,WAAO,UAAWA,MAAK,QAAQ;AAAA,EACjC;AAAA,EACA,WAAW,QAAQ;AACjB,SAAK,UAAU,OAAO,MAAM;AAAA,EAC9B;AAAA,EACA,UAAU;AACR,SAAK,UAAU,MAAM;AAAA,EACvB;AACF;AAGA,IAAI,YAAY,CAAC,QAAQ,UAAU,UAAU,OAAO;AACpD,IAAI,mBAAmB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAI,oBAAoB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAI,gBAAgB,iBAAI,OAAO;AAAA,EAC7B,MAAM,iBAAI,OAAO;AAAA,EACjB,QAAQ,iBAAI,KAAK,iBAAiB;AAAA,EAClC,YAAY,iBAAI,OAAO,EAAE,SAAS;AAAA,EAClC,KAAK,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC3B,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,EACjC,aAAa,iBAAI,OAAO,EAAE,SAAS;AACrC,CAAC;AACD,IAAI,mBAAmB,iBAAI,OAAO;AAAA,EAChC,OAAO,iBAAI,OAAO;AAAA,EAClB,OAAO,iBAAI,KAAK,gBAAgB;AAAA,EAChC,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,EACjC,aAAa,iBAAI,OAAO,EAAE,SAAS;AACrC,CAAC;AACD,IAAI,kBAAkB,iBAAI,OAAO;AAAA,EAC/B,IAAI,iBAAI,OAAO;AAAA,EACf,QAAQ,iBAAI,OAAO;AAAA,EACnB,MAAM,iBAAI,OAAO;AAAA,EACjB,WAAW,iBAAI,OAAO;AAAA,EACtB,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,EACjC,MAAM,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC5B,MAAM,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC5B,MAAM,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC5B,iBAAiB,iBAAI,QAAQ;AAAA,EAC7B,UAAU,iBAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC9C,UAAU,iBAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC9C,aAAa,iBAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EACjD,qBAAqB,iBAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EACzD,UAAU,iBAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC9C,SAAS,iBAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC7C,YAAY,iBAAI,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACvC,YAAY,iBAAI,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACvC,WAAW,iBAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC/C,WAAW,iBAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC/C,aAAa,iBAAI,QAAQ,EAAE,QAAQ,KAAK;AAC1C,CAAC;AACD,IAAI,oBAAoB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAI,8BAA8B,iBAAI,OAAO;AAAA,EAC3C,aAAa,iBAAI,OAAO;AAAA,EACxB,OAAO,iBAAI,KAAK,iBAAiB;AAAA,EACjC,gBAAgB,iBAAI,OAAO,EAAE,SAAS;AAAA,EACtC,QAAQ,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC9B,YAAY,iBAAI,OAAO,EAAE,SAAS;AAAA,EAClC,KAAK,iBAAI,OAAO;AAAA,EAChB,gBAAgB,iBAAI,QAAQ;AAC9B,CAAC;AACD,IAAI,eAAe,iBAAI,OAAO;AAAA,EAC5B,QAAQ,iBAAI,OAAO;AAAA,EACnB,OAAO,iBAAI,OAAO;AAAA,EAClB,OAAO,iBAAI,KAAK,SAAS;AAAA,EACzB,QAAQ,iBAAI,OAAO;AAAA,EACnB,KAAK,iBAAI,OAAO;AAAA,EAChB,SAAS,iBAAI,OAAO;AAAA,EACpB,SAAS,iBAAI,OAAO;AAAA,EACpB,MAAM,iBAAI,OAAO;AAAA,EACjB,SAAS,iBAAI,QAAQ;AAAA,EACrB,WAAW,iBAAI,OAAO;AAAA,EACtB,WAAW,iBAAI,OAAO;AAAA,EACtB,cAAc,iBAAI,OAAO;AAAA,EACzB,WAAW,iBAAI,OAAO;AAAA,EACtB,WAAW,iBAAI,OAAO;AAAA,EACtB,UAAU,iBAAI,OAAO,EAAE,SAAS;AAAA,EAChC,gBAAgB,iBAAI,OAAO,EAAE,SAAS;AAAA,EACtC,kBAAkB,iBAAI,OAAO,EAAE,SAAS;AAAA,EACxC,kBAAkB,iBAAI,QAAQ;AAAA,EAC9B,YAAY,iBAAI,OAAO,EAAE,SAAS;AAAA,EAClC,kBAAkB,iBAAI,QAAQ,EAAE,QAAQ,KAAK;AAAA,EAC7C,QAAQ,iBAAI,MAAM,iBAAI,OAAO,EAAE,MAAM,iBAAI,OAAO,GAAG,OAAO,iBAAI,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EACjG,WAAW,iBAAI,MAAM,iBAAI,OAAO,EAAE,OAAO,iBAAI,OAAO,GAAG,WAAW,iBAAI,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EACxG,gBAAgB,iBAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EACpD,WAAW,iBAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC/C,QAAQ,iBAAI,MAAM,aAAa;AAAA,EAC/B,WAAW,iBAAI,MAAM,gBAAgB;AAAA,EACrC,UAAU,iBAAI,MAAM,eAAe;AACrC,CAAC;AACD,IAAI,iBAAiB,iBAAI,mBAAmB,UAAU;AAAA,EACpD,iBAAI,OAAO,EAAE,QAAQ,iBAAI,QAAQ,SAAS,GAAG,UAAU,iBAAI,OAAO,GAAG,MAAM,iBAAI,OAAO,EAAE,SAAS,EAAE,CAAC;AAAA,EACpG,iBAAI,OAAO,EAAE,QAAQ,iBAAI,QAAQ,iBAAiB,GAAG,UAAU,iBAAI,OAAO,GAAG,MAAM,iBAAI,OAAO,EAAE,CAAC;AAAA,EACjG,iBAAI,OAAO,EAAE,QAAQ,iBAAI,QAAQ,SAAS,GAAG,UAAU,iBAAI,OAAO,GAAG,MAAM,iBAAI,OAAO,EAAE,CAAC;AAAA,EACzF,iBAAI,OAAO;AAAA,IACT,QAAQ,iBAAI,QAAQ,kBAAkB;AAAA,IACtC,UAAU,iBAAI,OAAO;AAAA,IACrB,WAAW,iBAAI,OAAO;AAAA,IACtB,MAAM,iBAAI,OAAO;AAAA,EACnB,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,QAAQ,iBAAI,QAAQ,gBAAgB,GAAG,UAAU,iBAAI,OAAO,GAAG,WAAW,iBAAI,OAAO,EAAE,CAAC;AAAA,EACrG,iBAAI,OAAO,EAAE,QAAQ,iBAAI,QAAQ,kBAAkB,GAAG,UAAU,iBAAI,OAAO,GAAG,WAAW,iBAAI,OAAO,EAAE,CAAC;AAAA,EACvG,iBAAI,OAAO;AAAA,IACT,QAAQ,iBAAI,QAAQ,OAAO;AAAA,IAC3B,UAAU,iBAAI,OAAO;AAAA,IACrB,UAAU,iBAAI,KAAK,CAAC,UAAU,SAAS,QAAQ,CAAC;AAAA,EAClD,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,QAAQ,iBAAI,QAAQ,OAAO,GAAG,UAAU,iBAAI,OAAO,EAAE,CAAC;AAAA,EACnE,iBAAI,OAAO,EAAE,QAAQ,iBAAI,QAAQ,QAAQ,GAAG,UAAU,iBAAI,OAAO,EAAE,CAAC;AAAA,EACpE,iBAAI,OAAO,EAAE,QAAQ,iBAAI,QAAQ,OAAO,GAAG,UAAU,iBAAI,OAAO,EAAE,CAAC;AAAA,EACnE,iBAAI,OAAO,EAAE,QAAQ,iBAAI,QAAQ,kBAAkB,GAAG,UAAU,iBAAI,OAAO,EAAE,CAAC;AAAA,EAC9E,iBAAI,OAAO,EAAE,QAAQ,iBAAI,QAAQ,cAAc,GAAG,UAAU,iBAAI,OAAO,EAAE,CAAC;AAAA,EAC1E,iBAAI,OAAO;AAAA,IACT,QAAQ,iBAAI,QAAQ,eAAe;AAAA,IACnC,UAAU,iBAAI,OAAO;AAAA,IACrB,WAAW,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAAA,EACnC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,QAAQ,iBAAI,QAAQ,YAAY;AAAA,IAChC,UAAU,iBAAI,OAAO;AAAA,IACrB,QAAQ,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAAA,EAChC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,QAAQ,iBAAI,QAAQ,eAAe;AAAA,IACnC,UAAU,iBAAI,OAAO;AAAA,IACrB,QAAQ,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAAA,EAChC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,QAAQ,iBAAI,QAAQ,eAAe;AAAA,IACnC,UAAU,iBAAI,OAAO;AAAA,IACrB,WAAW,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAAA,EACnC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,QAAQ,iBAAI,QAAQ,kBAAkB;AAAA,IACtC,UAAU,iBAAI,OAAO;AAAA,IACrB,WAAW,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAAA,EACnC,CAAC;AACH,CAAC;AACD,IAAI,wBAAwB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAI,2BAA2B;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAI,oBAAoB,iBAAI,OAAO;AAAA,EACjC,MAAM,iBAAI,OAAO;AAAA,EACjB,QAAQ,iBAAI,KAAK,qBAAqB;AAAA,EACtC,YAAY,iBAAI,KAAK,wBAAwB,EAAE,SAAS;AAAA,EACxD,KAAK,iBAAI,OAAO;AAAA,EAChB,KAAK,iBAAI,OAAO;AAAA,EAChB,WAAW,iBAAI,OAAO;AAAA,EACtB,gBAAgB,iBAAI,QAAQ;AAC9B,CAAC;AACD,IAAI,sBAAsB,iBAAI,KAAK,CAAC,YAAY,WAAW,YAAY,CAAC;AACxE,IAAI,kBAAkB,iBAAI,mBAAmB,QAAQ;AAAA,EACnD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,QAAQ,GAAG,cAAc,iBAAI,OAAO,EAAE,CAAC;AAAA,EACtE,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,QAAQ,GAAG,cAAc,iBAAI,OAAO,EAAE,CAAC;AAAA,EACtE,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,OAAO,GAAG,eAAe,iBAAI,OAAO,EAAE,CAAC;AAAA,EACtE,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,QAAQ;AAAA,IAC1B,eAAe,iBAAI,OAAO;AAAA,IAC1B,QAAQ,iBAAI,KAAK,CAAC,UAAU,aAAa,aAAa,CAAC;AAAA,EACzD,CAAC;AACH,CAAC;AACD,IAAI,kBAAkB,iBAAI,OAAO;AAAA,EAC/B,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,iBAAI,OAAO;AACpB,CAAC;AACD,IAAI,mBAAmB,iBAAI,OAAO;AAAA,EAChC,WAAW,iBAAI,MAAM,eAAe;AAAA,EACpC,SAAS;AAAA,EACT,aAAa,iBAAI,MAAM,eAAe;AAAA,EACtC,OAAO,iBAAI,OAAO,iBAAI,OAAO,GAAG,eAAe;AAAA,EAC/C,eAAe,iBAAI,OAAO;AAAA,EAC1B,WAAW,iBAAI,QAAQ,EAAE,QAAQ,KAAK;AACxC,CAAC;AACD,IAAI,uBAAuB,iBAAI,OAAO;AAAA,EACpC,QAAQ,iBAAI,OAAO;AAAA,EACnB,aAAa,iBAAI,QAAQ;AAAA,EACzB,iBAAiB,aAAa,SAAS;AAAA,EACvC,iBAAiB,iBAAI,MAAM,YAAY;AAAA,EACvC,SAAS,iBAAI,MAAM,YAAY;AAAA,EAC/B,aAAa,iBAAI,MAAM,2BAA2B,EAAE,QAAQ,CAAC,CAAC;AAAA,EAC9D,cAAc,iBAAI,MAAM,iBAAiB,EAAE,QAAQ,CAAC,CAAC;AAAA,EACrD,gBAAgB,iBAAI,MAAM,iBAAI,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EAClD,OAAO,iBAAiB,SAAS;AAAA,EACjC,WAAW,iBAAI,OAAO;AACxB,CAAC;AAED,SAAS,oBAAoB,MAAM,QAAQ,UAAU,OAAO;AAC1D,QAAM,WAAW,KAAK,MAAM;AAC5B,QAAM,cAAc;AAAA,IAClB,GAAG,UAAU;AAAA,IACb,GAAG;AAAA,EACL;AACA,MAAI,MAAM,WAAW,UAAa,YAAY,OAAO;AACnD,WAAO,YAAY;AAAA,EACrB;AACA,MAAI,MAAM,YAAY,UAAa,aAAa,OAAO;AACrD,WAAO,YAAY;AAAA,EACrB;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,CAAC,MAAM,GAAG;AAAA,MACR,QAAQ,SAAS;AAAA,MACjB,UAAU,SAAS;AAAA,MACnB,WAAW,SAAS;AAAA,MACpB,OAAO;AAAA,IACT;AAAA,EACF;AACF;AACA,SAAS,eAAe,MAAM,QAAQ;AACpC,QAAM,EAAE,CAAC,MAAM,GAAG,GAAG,GAAG,KAAK,IAAI;AACjC,SAAO;AACT;AAgEA,IAAI,uBAAuB,iBAAI,KAAK,CAAC,UAAU,QAAQ,cAAc,SAAS,CAAC;AAC/E,IAAI,0BAA0B,iBAAI,OAAO;AAAA,EACvC,QAAQ,iBAAI,OAAO;AAAA,IACjB,QAAQ,iBAAI,OAAO;AAAA,IACnB,SAAS,iBAAI,OAAO;AAAA,IACpB,SAAS,iBAAI,OAAO,EAAE,SAAS;AAAA,EACjC,CAAC,EAAE,SAAS;AAAA,EACZ,SAAS,iBAAI,OAAO;AAAA,IAClB,QAAQ,iBAAI,OAAO;AAAA,IACnB,SAAS,iBAAI,OAAO,EAAE,SAAS;AAAA,EACjC,CAAC,EAAE,SAAS;AAAA,EACZ,QAAQ,qBAAqB,SAAS;AACxC,CAAC;AACD,IAAI,yBAAyB,iBAAI,OAAO;AAAA,EACtC,QAAQ,iBAAI,OAAO;AAAA,EACnB,UAAU,iBAAI,OAAO;AAAA,EACrB,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,EACjC,OAAO;AAAA,EACP,MAAM,iBAAI,KAAK,CAAC,SAAS,qBAAqB,uBAAuB,QAAQ,CAAC,EAAE,SAAS;AAAA,EACzF,UAAU,iBAAI,OAAO,EAAE,SAAS;AAAA,EAChC,UAAU,iBAAI,OAAO,EAAE,SAAS;AAClC,CAAC;AAGD,IAAI,gBAAgB,iBAAI,OAAO;AAAA,EAC7B,IAAI,iBAAI,OAAO;AAAA,EACf,MAAM,iBAAI,OAAO;AAAA,EACjB,OAAO,iBAAI,OAAO;AAAA,EAClB,WAAW,iBAAI,OAAO;AAAA,EACtB,UAAU,iBAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAChD,CAAC;AACD,IAAI,yBAAyB;AAC7B,IAAI,sBAAsB,iBAAI,OAAO;AAAA,EACnC,eAAe,iBAAI,OAAO;AAAA,EAC1B,UAAU,iBAAI,MAAM,aAAa,EAAE,QAAQ,CAAC,CAAC;AAC/C,CAAC;AACD,SAAS,qBAAqB,KAAK;AACjC,MAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC3C,WAAO,EAAE,eAAe,wBAAwB,UAAU,CAAC,EAAE;AAAA,EAC/D;AACA,QAAM,gBAAgB,KAAK,KAAK,eAAe;AAC/C,QAAM,UAAU,OAAO,kBAAkB,WAAW,gBAAgB;AACpE,MAAI,WAAW,wBAAwB;AACrC,WAAO,oBAAoB,MAAM,GAAG;AAAA,EACtC;AACA,QAAM,cAAc,KAAK,KAAK,UAAU,KAAK;AAC7C,QAAM,SAAS,iBAAI,MAAM,aAAa,EAAE,UAAU,WAAW;AAC7D,QAAM,WAAW,OAAO,UAAU,OAAO,OAAO,CAAC;AACjD,SAAO;AAAA,IACL,eAAe;AAAA,IACf;AAAA,EACF;AACF;AAGA,IAAI,mBAAmB;AACvB,IAAI,uBAAuB;AAC3B,IAAI,mBAAmB,CAAC,aAAa,cAAc,aAAa,YAAY;AAC5E,IAAI,iBAAiB,IAAI,IAAI,gBAAgB;AAC7C,SAAS,gBAAgB,UAAU;AACjC,SAAO,eAAe,IAAI,QAAQ;AACpC;AACA,IAAI,wBAAwB,iBAAI,OAAO;AAAA,EACrC,MAAM,iBAAI,QAAQ,aAAa;AAAA,EAC/B,WAAW,iBAAI,OAAO;AAAA,EACtB,UAAU,iBAAI,OAAO;AAAA,EACrB,UAAU,iBAAI,OAAO;AAAA,EACrB,YAAY,iBAAI,OAAO,EAAE,IAAI,EAAE,YAAY;AAC7C,CAAC;AACD,IAAI,uBAAuB,iBAAI,OAAO;AAAA,EACpC,MAAM,iBAAI,QAAQ,YAAY;AAAA,EAC9B,WAAW,iBAAI,OAAO;AAAA,EACtB,SAAS,iBAAI,OAAO;AAAA,EACpB,KAAK,iBAAI,OAAO;AAClB,CAAC;AACD,IAAI,yBAAyB,iBAAI,OAAO;AAAA,EACtC,MAAM,iBAAI,QAAQ,cAAc;AAAA,EAChC,WAAW,iBAAI,OAAO;AAAA,EACtB,OAAO,iBAAI,OAAO;AACpB,CAAC;AACD,IAAI,6BAA6B,iBAAI,OAAO;AAAA,EAC1C,MAAM,iBAAI,QAAQ,kBAAkB;AAAA,EACpC,WAAW,iBAAI,OAAO;AAAA,EACtB,SAAS,iBAAI,OAAO;AACtB,CAAC;AACD,IAAI,0BAA0B,iBAAI,OAAO;AAAA,EACvC,MAAM,iBAAI,QAAQ,eAAe;AAAA,EACjC,WAAW,iBAAI,OAAO;AAAA,EACtB,UAAU,iBAAI,OAAO;AAAA,EACrB,YAAY,iBAAI,OAAO,EAAE,IAAI,EAAE,YAAY;AAC7C,CAAC;AACD,IAAI,0BAA0B,iBAAI,OAAO;AAAA,EACvC,MAAM,iBAAI,QAAQ,eAAe;AAAA,EACjC,WAAW,iBAAI,OAAO;AACxB,CAAC;AACD,IAAI,2BAA2B,iBAAI,OAAO;AAAA,EACxC,MAAM,iBAAI,QAAQ,gBAAgB;AAAA,EAClC,WAAW,iBAAI,OAAO;AAAA,EACtB,OAAO,iBAAI,OAAO;AACpB,CAAC;AACD,IAAI,6BAA6B,iBAAI,mBAAmB,QAAQ;AAAA,EAC9D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAI,0BAA0B,iBAAI,OAAO;AAAA,EACvC,MAAM,iBAAI,KAAK,CAAC,gBAAgB,gBAAgB,CAAC;AAAA,EACjD,WAAW,iBAAI,OAAO;AAAA,EACtB,YAAY,iBAAI,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EAC3C,MAAM,iBAAI,OAAO;AACnB,CAAC;AACD,IAAI,mBAAmB;AACvB,SAAS,cAAc,SAAS;AAC9B,SAAO,GAAG,gBAAgB,GAAG,OAAO;AACtC;AACA,SAAS,cAAc,KAAK;AAC1B,MAAI,CAAC,IAAI,WAAW,gBAAgB;AAClC,WAAO;AACT,QAAM,KAAK,IAAI,MAAM,iBAAiB,MAAM;AAC5C,SAAO,GAAG,SAAS,IAAI,KAAK;AAC9B;AAMA,IAAI,yBAAyB;AAC7B,IAAI,4BAA4B;AAChC,IAAI,mCAAmC;AAIvC,SAAS,yBAAyB,OAAO;AACvC,MAAI,CAAC,MAAM,WAAW,sBAAsB;AAC1C,WAAO;AACT,QAAM,OAAO,OAAO,MAAM,MAAM,uBAAuB,MAAM,CAAC;AAC9D,SAAO,OAAO,SAAS,IAAI,KAAK,OAAO,IAAI,OAAO;AACpD;AAIA,SAAS,kCAAkC,OAAO;AAChD,MAAI,CAAC,MAAM,WAAW,gCAAgC;AACpD,WAAO;AACT,QAAM,OAAO,OAAO,MAAM,MAAM,iCAAiC,MAAM,CAAC;AACxE,SAAO,OAAO,SAAS,IAAI,KAAK,OAAO,IAAI,OAAO;AACpD;AAeA,IAAI,qBAAqB,iBAAI,OAAO;AAAA,EAClC,MAAM,iBAAI,OAAO;AAAA,EACjB,KAAK,iBAAI,OAAO;AAAA,EAChB,SAAS,iBAAI,OAAO;AAAA,EACpB,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,EACjC,KAAK,iBAAI,OAAO;AAAA,EAChB,aAAa,iBAAI,OAAO,EAAE,SAAS;AAAA,EACnC,aAAa,iBAAI,OAAO,EAAE,SAAS;AACrC,CAAC;AACD,IAAI,uBAAuB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAI,mBAAmB,iBAAI,KAAK,oBAAoB;AACpD,IAAI,8BAA8B,iBAAI,OAAO;AAAA,EAC3C,MAAM,iBAAI,QAAQ,SAAS;AAAA,EAC3B,IAAI,iBAAI,OAAO;AAAA,EACf,QAAQ;AAAA,EACR,MAAM,iBAAI,OAAO;AAAA,EACjB,SAAS,iBAAI,OAAO,iBAAI,OAAO,GAAG,iBAAI,OAAO,CAAC;AAAA,EAC9C,MAAM,iBAAI,OAAO,EAAE,SAAS;AAC9B,CAAC;AACD,IAAI,mCAAmC,iBAAI,OAAO;AAAA,EAChD,MAAM,iBAAI,QAAQ,eAAe;AAAA,EACjC,IAAI,iBAAI,OAAO;AAAA,EACf,QAAQ,iBAAI,OAAO;AAAA,EACnB,SAAS,iBAAI,OAAO,iBAAI,OAAO,GAAG,iBAAI,OAAO,CAAC;AAAA,EAC9C,YAAY,iBAAI,OAAO;AACzB,CAAC;AACD,IAAI,oCAAoC,iBAAI,OAAO;AAAA,EACjD,MAAM,iBAAI,QAAQ,gBAAgB;AAAA,EAClC,IAAI,iBAAI,OAAO;AAAA,EACf,OAAO,iBAAI,OAAO;AAAA,EAClB,MAAM,iBAAI,QAAQ;AACpB,CAAC;AACD,IAAI,4BAA4B,iBAAI,OAAO;AAAA,EACzC,MAAM,iBAAI,QAAQ,OAAO;AAAA,EACzB,IAAI,iBAAI,OAAO;AAAA,EACf,OAAO,iBAAI,OAAO;AACpB,CAAC;AACD,IAAI,uCAAuC,iBAAI,mBAAmB,QAAQ;AAAA,EACxE;AACF,CAAC;AACD,IAAI,sCAAsC,iBAAI,mBAAmB,QAAQ;AAAA,EACvE;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAI,iCAAiC,iBAAI,OAAO;AAAA,EAC9C,MAAM,iBAAI,QAAQ,SAAS;AAAA,EAC3B,IAAI,iBAAI,OAAO;AAAA,EACf,QAAQ;AAAA,EACR,KAAK,iBAAI,OAAO;AAAA,EAChB,SAAS,iBAAI,OAAO,iBAAI,OAAO,GAAG,iBAAI,OAAO,CAAC;AAAA,EAC9C,MAAM,iBAAI,OAAO,EAAE,SAAS;AAC9B,CAAC;AAMD,IAAI,oBAAoB,iBAAI,OAAO;AAAA,EACjC,UAAU,iBAAI,MAAM,iBAAI,OAAO,CAAC,EAAE,SAAS;AAAA,EAC3C,UAAU,iBAAI,OAAO,EAAE,SAAS;AAAA,EAChC,cAAc,iBAAI,OAAO,EAAE,SAAS;AACtC,CAAC;AACD,IAAI,0BAA0B,iBAAI,OAAO;AAAA,EACvC,MAAM,iBAAI,QAAQ,eAAe;AAAA,EACjC,KAAK,iBAAI,OAAO;AAAA,EAChB,MAAM,iBAAI,OAAO;AAAA,EACjB,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC7B,aAAa,iBAAI,OAAO,EAAE,SAAS;AAAA,EACnC,UAAU,iBAAI,OAAO,EAAE,SAAS;AAAA,EAChC,MAAM,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC5B,aAAa,kBAAkB,SAAS;AAAA,EACxC,OAAO,iBAAI,OAAO,iBAAI,OAAO,GAAG,iBAAI,QAAQ,CAAC,EAAE,SAAS;AAC1D,CAAC;AACD,IAAI,6BAA6B,iBAAI,OAAO;AAAA,EAC1C,KAAK,iBAAI,OAAO;AAAA,EAChB,UAAU,iBAAI,OAAO,EAAE,SAAS;AAAA,EAChC,MAAM,iBAAI,OAAO;AAAA,EACjB,OAAO,iBAAI,OAAO,iBAAI,OAAO,GAAG,iBAAI,QAAQ,CAAC,EAAE,SAAS;AAC1D,CAAC;AACD,IAAI,6BAA6B,iBAAI,OAAO;AAAA,EAC1C,KAAK,iBAAI,OAAO;AAAA,EAChB,UAAU,iBAAI,OAAO,EAAE,SAAS;AAAA,EAChC,MAAM,iBAAI,OAAO;AAAA,EACjB,OAAO,iBAAI,OAAO,iBAAI,OAAO,GAAG,iBAAI,QAAQ,CAAC,EAAE,SAAS;AAC1D,CAAC;AACD,IAAI,yBAAyB,iBAAI,MAAM;AAAA,EACrC;AAAA,EACA;AACF,CAAC;AACD,IAAI,8BAA8B,iBAAI,OAAO;AAAA,EAC3C,MAAM,iBAAI,QAAQ,UAAU;AAAA,EAC5B,UAAU;AAAA,EACV,aAAa,kBAAkB,SAAS;AAAA,EACxC,OAAO,iBAAI,OAAO,iBAAI,OAAO,GAAG,iBAAI,QAAQ,CAAC,EAAE,SAAS;AAC1D,CAAC;AACD,IAAI,0BAA0B,iBAAI,OAAO;AAAA,EACvC,MAAM,iBAAI,QAAQ,oBAAoB;AAAA,EACtC,KAAK,iBAAI,OAAO;AAClB,CAAC;AACD,IAAI,4BAA4B,iBAAI,OAAO;AAAA,EACzC,MAAM,iBAAI,QAAQ,sBAAsB;AAAA,EACxC,KAAK,iBAAI,OAAO;AAClB,CAAC;AACD,IAAI,4BAA4B,iBAAI,OAAO;AAAA,EACzC,MAAM,iBAAI,QAAQ,uBAAuB;AAAA,EACzC,WAAW,iBAAI,OAAO;AAAA,EACtB,KAAK,iBAAI,OAAO;AAClB,CAAC;AACD,IAAI,sBAAsB,CAAC,QAAQ,SAAS,SAAS;AACrD,IAAI,wBAAwB,iBAAI,OAAO;AAAA,EACrC,MAAM,iBAAI,QAAQ,kBAAkB;AAAA,EACpC,KAAK,iBAAI,OAAO;AAAA,EAChB,YAAY,iBAAI,KAAK,mBAAmB;AAAA,EACxC,OAAO,iBAAI,OAAO,EAAE,SAAS;AAC/B,CAAC;AACD,IAAI,8BAA8B,sBAAsB,OAAO,CAAC,MAAM,EAAE,eAAe,WAAW,EAAE,UAAU,QAAW,EAAE,SAAS,+CAA+C,CAAC;AACpL,IAAI,6BAA6B,iBAAI,OAAO;AAAA,EAC1C,MAAM,iBAAI,QAAQ,wBAAwB;AAAA,EAC1C,WAAW,iBAAI,OAAO;AAAA,EACtB,UAAU,uBAAuB,SAAS;AAAA,EAC1C,OAAO,iBAAI,OAAO,EAAE,SAAS;AAC/B,CAAC;AACD,IAAI,mCAAmC,2BAA2B,OAAO,CAAC,MAAM,EAAE,aAAa,YAAe,EAAE,UAAU,SAAY,EAAE,SAAS,oDAAoD,CAAC;AAOtM,IAAI,wBAAwB,iBAAI,KAAK,CAAC,QAAQ,OAAO,UAAU,QAAQ,SAAS,KAAK,CAAC;AACtF,IAAIC,wBAAuB,iBAAI,KAAK,CAAC,WAAW,gBAAgB,QAAQ,UAAU,MAAM,CAAC;AACzF,IAAI,sBAAsB,iBAAI,KAAK,CAAC,eAAe,OAAO,CAAC;AAC3D,IAAI,sBAAsB,iBAAI,KAAK,CAAC,SAAS,QAAQ,KAAK,CAAC;AAC3D,IAAI,4BAA4B,iBAAI,KAAK;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAI,oBAAoB,sBAAsB;AAC9C,IAAI,mBAAmBA,sBAAqB;AAC5C,IAAI,yBAAyB,0BAA0B;AACvD,IAAI,uBAAuB,IAAI,IAAI,iBAAiB;AAIpD,IAAI,sBAAsB,IAAI,IAAI,gBAAgB;AAMlD,IAAI,sBAAsB,CAAC,aAAa,UAAU,UAAU;AAC5D,IAAI,uBAAuB,iBAAI,OAAO;AAAA,EACpC,IAAI,iBAAI,OAAO;AAAA,EACf,MAAM,iBAAI,OAAO;AAAA,EACjB,QAAQ,iBAAI,OAAO;AAAA,EACnB,MAAM,iBAAI,OAAO;AAAA,EACjB,SAAS,iBAAI,QAAQ;AAAA,EACrB,aAAa,iBAAI,OAAO;AAAA,IACtB,MAAM,iBAAI,OAAO;AAAA,IACjB,QAAQ,iBAAI,OAAO;AAAA,EACrB,CAAC;AAAA,EACD,OAAO,iBAAI,OAAO;AAAA,EAClB,iBAAiB;AAAA,EACjB,gBAAgBC;AAAA,EAChB,UAAU,iBAAI,QAAQ;AAAA,EACtB,oBAAoB,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAAA,EAC1C,WAAW,iBAAI,OAAO;AAAA,EACtB,WAAW,iBAAI,OAAO;AAAA,EACtB,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,EACjC,eAAe,iBAAI,OAAO,EAAE,SAAS;AAAA,EACrC,eAAe,iBAAI,KAAK,mBAAmB,EAAE,SAAS;AACxD,CAAC;AACD,IAAI,yBAAyB;AAC7B,IAAI,sBAAsB,iBAAI,OAAO;AAAA,EACnC,eAAe,iBAAI,OAAO;AAAA,EAC1B,WAAW,iBAAI,OAAO,iBAAI,OAAO,GAAG,oBAAoB;AAC1D,CAAC;AACD,SAAS,qBAAqB,KAAK;AACjC,MAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC3C,WAAO,EAAE,eAAe,wBAAwB,WAAW,CAAC,EAAE;AAAA,EAChE;AACA,QAAM,gBAAgB,KAAK,KAAK,eAAe;AAC/C,QAAM,UAAU,OAAO,kBAAkB,WAAW,gBAAgB;AACpE,MAAI,UAAU,wBAAwB;AACpC,WAAO,EAAE,eAAe,wBAAwB,WAAW,CAAC,EAAE;AAAA,EAChE;AACA,SAAO,oBAAoB,MAAM,GAAG;AACtC;AAIA,IAAI,mBAAmB,CAAC,SAAS,OAAO;AACxC,IAAI,wBAAwB,iBAAI,KAAK,gBAAgB;AACrD,IAAI,oBAAoB,iBAAI,OAAO;AAAA,EACjC,IAAI,iBAAI,OAAO;AAAA,EACf,MAAM;AAAA,EACN,MAAM,iBAAI,OAAO;AAAA,EACjB,aAAa,iBAAI,OAAO,EAAE,SAAS;AACrC,CAAC;AACD,IAAI,kBAAkB,iBAAI,OAAO;AAAA,EAC/B,MAAM,iBAAI,QAAQ,MAAM;AAAA,EACxB,MAAM,iBAAI,OAAO;AACnB,CAAC;AACD,IAAI,qBAAqB,iBAAI,OAAO;AAAA,EAClC,MAAM,iBAAI,QAAQ,UAAU;AAAA,EAC5B,WAAW,iBAAI,OAAO;AAAA,EACtB,UAAU,iBAAI,OAAO;AAAA,EACrB,OAAO,iBAAI,OAAO,iBAAI,OAAO,GAAG,iBAAI,QAAQ,CAAC;AAAA,EAC7C,iBAAiB,iBAAI,OAAO,EAAE,SAAS,EAAE,SAAS;AACpD,CAAC;AACD,IAAI,wBAAwB,iBAAI,OAAO;AAAA,EACrC,MAAM,iBAAI,QAAQ,aAAa;AAAA,EAC/B,WAAW,iBAAI,OAAO;AAAA,EACtB,SAAS,iBAAI,OAAO;AAAA,EACpB,SAAS,iBAAI,QAAQ;AAAA,EACrB,iBAAiB,iBAAI,OAAO,EAAE,SAAS,EAAE,SAAS;AACpD,CAAC;AACD,IAAI,sBAAsB,iBAAI,OAAO;AAAA,EACnC,MAAM,iBAAI,QAAQ,UAAU;AAAA,EAC5B,MAAM,iBAAI,OAAO;AACnB,CAAC;AACD,IAAI,mBAAmB,CAAC,YAAY,UAAU;AAC9C,IAAI,0BAA0B,iBAAI,OAAO;AAAA,EACvC,WAAW,iBAAI,OAAO;AAAA,EACtB,UAAU,iBAAI,OAAO;AAAA,EACrB,YAAY,iBAAI,OAAO;AAAA,EACvB,aAAa,iBAAI,OAAO;AAAA,EACxB,MAAM,iBAAI,KAAK,gBAAgB;AAAA,EAC/B,MAAM,iBAAI,OAAO;AAAA,EACjB,YAAY,iBAAI,OAAO;AACzB,CAAC;AACD,IAAI,gCAAgC,iBAAI,OAAO;AAAA,EAC7C,MAAM,iBAAI,QAAQ,sBAAsB;AAAA,EACxC,UAAU,iBAAI,MAAM,uBAAuB;AAC7C,CAAC;AACD,IAAI,iCAAiC,iBAAI,OAAO;AAAA,EAC9C,WAAW,iBAAI,OAAO;AAAA,EACtB,KAAK,iBAAI,OAAO;AAAA,EAChB,iBAAiB,iBAAI,OAAO;AAAA,EAC5B,aAAa,iBAAI,OAAO;AAAA,EACxB,MAAM,iBAAI,OAAO;AAAA,EACjB,YAAY,iBAAI,OAAO;AAAA,EACvB,eAAe,iBAAI,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAChD,YAAY,iBAAI,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC7C,YAAY,iBAAI,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC7C,eAAe,iBAAI,MAAM,iBAAI,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EAC3D,WAAW,iBAAI,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,gBAAgB,iBAAI,OAAO,iBAAI,OAAO,GAAG,iBAAI,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EAC3E,YAAY,iBAAI,MAAM,iBAAI,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EACxD,aAAa,iBAAI,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,gBAAgB,iBAAI,OAAO,EAAE,SAAS,EAAE,SAAS;AACnD,CAAC;AACD,IAAI,uCAAuC,iBAAI,OAAO;AAAA,EACpD,MAAM,iBAAI,QAAQ,6BAA6B;AAAA,EAC/C,UAAU,iBAAI,MAAM,8BAA8B;AACpD,CAAC;AACD,IAAI,gCAAgC,iBAAI,OAAO;AAAA,EAC7C,MAAM,iBAAI,QAAQ,qBAAqB;AAAA,EACvC,aAAa,iBAAI,MAAM,mBAAmB;AAC5C,CAAC;AACD,IAAI,0BAA0B;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAI,2BAA2B,iBAAI,OAAO;AAAA,EACxC,YAAY,iBAAI,KAAK,uBAAuB;AAAA,EAC5C,QAAQ,iBAAI,OAAO;AAAA,EACnB,SAAS,iBAAI,OAAO;AAAA,EACpB,WAAW,iBAAI,KAAK,CAAC,WAAW,eAAe,aAAa,WAAW,CAAC,EAAE,SAAS;AAAA,EACnF,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,EACjC,YAAY,iBAAI,OAAO,EAAE,SAAS;AACpC,CAAC;AACD,IAAI,0BAA0B,iBAAI,OAAO;AAAA,EACvC,MAAM,iBAAI,QAAQ,eAAe;AAAA,EACjC,SAAS,iBAAI,MAAM,wBAAwB;AAAA,EAC3C,YAAY,iBAAI,OAAO;AAAA,EACvB,WAAW,iBAAI,OAAO;AACxB,CAAC;AACD,IAAI,2BAA2B,iBAAI,OAAO;AAAA,EACxC,MAAM,iBAAI,QAAQ,gBAAgB;AAAA,EAClC,UAAU,iBAAI,OAAO;AAAA,EACrB,QAAQ,iBAAI,OAAO;AAAA,EACnB,QAAQ,iBAAI,OAAO;AAAA,EACnB,MAAM,iBAAI,OAAO;AAAA,EACjB,WAAW,iBAAI,OAAO;AACxB,CAAC;AACD,IAAI,4BAA4B,iBAAI,OAAO;AAAA,EACzC,MAAM,iBAAI,QAAQ,iBAAiB;AAAA,EACnC,UAAU,iBAAI,KAAK,CAAC,WAAW,QAAQ,iBAAiB,CAAC;AAAA,EACzD,UAAU,iBAAI,OAAO,EAAE,SAAS;AAAA,EAChC,UAAU,iBAAI,OAAO;AACvB,CAAC;AACD,IAAI,mCAAmC,iBAAI,OAAO;AAAA,EAChD,qBAAqB,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC3C,oBAAoB,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC1C,aAAa,iBAAI,OAAO,EAAE,SAAS;AAAA,EACnC,iBAAiB,iBAAI,OAAO,EAAE,SAAS;AAAA,EACvC,2BAA2B,iBAAI,OAAO,EAAE,SAAS;AAAA,EACjD,iBAAiB,iBAAI,OAAO,EAAE,SAAS;AAAA,EACvC,wBAAwB,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC9C,cAAc,iBAAI,QAAQ,EAAE,SAAS;AACvC,CAAC;AACD,IAAI,wBAAwB,iBAAI,OAAO;AAAA,EACrC,kBAAkB,iBAAI,OAAO;AAAA,EAC7B,iBAAiB,iBAAI,OAAO,EAAE,SAAS;AAAA,EACvC,oBAAoB,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC1C,iBAAiB,iBAAI,OAAO;AAAA,EAC5B,2BAA2B,iBAAI,OAAO,EAAE,SAAS;AACnD,CAAC;AACD,IAAI,gCAAgC,iBAAI,OAAO;AAAA,EAC7C,MAAM,iBAAI,QAAQ,qBAAqB;AAAA,EACvC,UAAU,iBAAI,OAAO;AAAA,EACrB,WAAW,iBAAI,OAAO;AAAA,EACtB,cAAc,iBAAI,OAAO;AAAA,EACzB,oBAAoB,iBAAI,OAAO;AAAA,EAC/B,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,EACjC,OAAO,sBAAsB,SAAS;AAAA,EACtC,gBAAgB,iBAAI,MAAM,CAAC,iBAAI,QAAQ,CAAC,GAAG,iBAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS;AAAA,EACrE,kBAAkB,iCAAiC,SAAS;AAC9D,CAAC;AACD,IAAI,qBAAqB,iBAAI,mBAAmB,QAAQ;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAI,gBAAgB,iBAAI,OAAO;AAAA,EAC7B,WAAW,iBAAI,OAAO;AAAA,EACtB,OAAO,iBAAI,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACtC,WAAW,iBAAI,OAAO;AAAA,EACtB,eAAe,iBAAI,OAAO;AAAA,EAC1B,YAAY;AAAA,EACZ,SAAS,iBAAI,MAAM,kBAAkB;AAAA,EACrC,WAAW,iBAAI,OAAO;AAAA,EACtB,OAAO,iBAAI,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,iBAAiB,sBAAsB,SAAS,EAAE,SAAS;AAAA,EAC3D,gBAAgBA,sBAAqB,SAAS,EAAE,SAAS;AAAA,EACzD,aAAa,iBAAI,QAAQ,EAAE,SAAS;AAAA,EACpC,iBAAiB,iBAAI,OAAO,EAAE,SAAS;AAAA,EACvC,eAAe,iBAAI,OAAO,EAAE,SAAS;AAAA,EACrC,qBAAqB,iBAAI,MAAM,iBAAI,OAAO,CAAC,EAAE,SAAS;AAAA,EACtD,SAAS,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC/B,mBAAmB,iBAAI,OAAO;AAAA,IAC5B,cAAc,iBAAI,OAAO;AAAA,IACzB,iBAAiB,iBAAI,OAAO;AAAA,IAC5B,gBAAgB,iBAAI,KAAK,CAAC,QAAQ,YAAY,MAAM,CAAC;AAAA,EACvD,CAAC,EAAE,SAAS;AACd,CAAC;AACD,IAAI,gBAAgB,iBAAI,OAAO;AAAA,EAC7B,IAAI,iBAAI,OAAO;AAAA,EACf,WAAW,iBAAI,OAAO;AAAA,EACtB,cAAc,iBAAI,MAAM,iBAAiB;AAC3C,CAAC;AAID,IAAI,eAAe,CAAC,QAAQ,eAAe,kBAAkB,aAAa,UAAU;AACpF,IAAI,yBAAyB,CAAC,WAAW,eAAe,aAAa,WAAW;AAChF,IAAI,uBAAuB,iBAAI,OAAO;AAAA,EACpC,IAAI,iBAAI,OAAO;AAAA,EACf,SAAS,iBAAI,OAAO;AAAA,EACpB,aAAa,iBAAI,OAAO,EAAE,SAAS;AAAA,EACnC,QAAQ,iBAAI,KAAK,sBAAsB;AAAA,EACvC,YAAY,iBAAI,OAAO,EAAE,SAAS;AAAA,EAClC,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC7B,QAAQ,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAAA,EAC9B,WAAW,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAAA,EACjC,WAAW,iBAAI,OAAO;AAAA,EACtB,WAAW,iBAAI,OAAO;AAAA,EACtB,OAAO,iBAAI,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,iBAAiB,sBAAsB,SAAS,EAAE,SAAS;AAC7D,CAAC;AACD,IAAI,gBAAgB,iBAAI,OAAO,EAAE,MAAM,iBAAI,OAAO,GAAG,IAAI,iBAAI,OAAO,EAAE,CAAC;AACvE,IAAI,mCAAmC,iBAAI,OAAO;AAAA,EAChD,OAAO,iBAAI,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,iBAAiB,sBAAsB,SAAS,EAAE,SAAS;AAC7D,CAAC;AACD,IAAI,oBAAoB,iBAAI,OAAO;AAAA,EACjC,WAAW,iBAAI,MAAM,oBAAoB,EAAE,QAAQ,CAAC,CAAC;AAAA,EACrD,iBAAiB,iBAAI,OAAO,iBAAI,OAAO,GAAG,iBAAI,KAAK,sBAAsB,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EACtF,UAAU,iBAAI,MAAM,aAAa,EAAE,QAAQ,CAAC,CAAC;AAAA,EAC7C,iBAAiB,iBAAI,MAAM,aAAa,EAAE,QAAQ,CAAC,CAAC;AAAA,EACpD,YAAY,iBAAI,MAAM,iBAAI,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EAC9C,uBAAuB,iBAAI,OAAO,iBAAI,OAAO,GAAG,gCAAgC,EAAE,QAAQ,CAAC,CAAC;AAC9F,CAAC;AACD,IAAI,uBAAuB;AAAA,EACzB,WAAW,CAAC;AAAA,EACZ,iBAAiB,CAAC;AAAA,EAClB,UAAU,CAAC;AAAA,EACX,iBAAiB,CAAC;AAAA,EAClB,YAAY,CAAC;AAAA,EACb,uBAAuB,CAAC;AAC1B;AACA,IAAI,YAAY,CAAC,QAAQ,cAAc;AACvC,IAAI,YAAY;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAI,yBAAyB,iBAAI,OAAO;AAAA,EACtC,OAAO,iBAAI,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,iBAAiB,sBAAsB,SAAS,EAAE,SAAS;AAAA,EAC3D,gBAAgBA,sBAAqB,SAAS,EAAE,SAAS;AAAA,EACzD,UAAU,iBAAI,QAAQ,EAAE,SAAS,EAAE,SAAS;AAC9C,CAAC;AACD,IAAI,gCAAgC;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAI,0BAA0B,iBAAI,OAAO;AAAA,EACvC,MAAM,iBAAI,OAAO;AAAA,EACjB,QAAQ,iBAAI,OAAO;AAAA,EACnB,QAAQ,iBAAI,OAAO,EAAE,SAAS;AAChC,CAAC;AACD,IAAI,2BAA2B,iBAAI,OAAO;AAAA,EACxC,MAAM,iBAAI,QAAQ,YAAY;AAAA,EAC9B,QAAQ,iBAAI,OAAO;AAAA,EACnB,cAAc,iBAAI,OAAO;AAAA,EACzB,YAAY,iBAAI,OAAO;AAAA,EACvB,eAAe,iBAAI,OAAO;AAAA,EAC1B,UAAU,iBAAI,OAAO;AAAA,EACrB,aAAa,iBAAI,OAAO;AAAA,EACxB,cAAc,iBAAI,OAAO;AAAA,EACzB,sBAAsB,iBAAI,OAAO;AAAA,EACjC,0BAA0B,iBAAI,OAAO;AAAA,EACrC,eAAe,iBAAI,OAAO;AAAA,EAC1B,iBAAiB,iBAAI,OAAO;AAAA,EAC5B,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC7B,oBAAoB,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC1C,kBAAkB,iBAAI,OAAO,EAAE,SAAS;AAAA,EACxC,iBAAiB,iBAAI,OAAO,EAAE,SAAS;AAAA,EACvC,mBAAmB,iBAAI,OAAO,EAAE,SAAS;AAAA,EACzC,kBAAkB,iBAAI,OAAO,EAAE,SAAS;AAAA,EACxC,aAAa,iBAAI,OAAO,EAAE,SAAS;AAAA,EACnC,eAAe,iBAAI,OAAO,EAAE,SAAS;AAAA,EACrC,4BAA4B,iBAAI,OAAO,EAAE,SAAS;AAAA,EAClD,wBAAwB,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC9C,uBAAuB,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC7C,0BAA0B,iBAAI,OAAO,EAAE,SAAS;AAAA,EAChD,yBAAyB,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC/C,iBAAiB,iBAAI,MAAM,iBAAI,OAAO,EAAE,MAAM,iBAAI,OAAO,GAAG,QAAQ,iBAAI,OAAO,EAAE,CAAC,CAAC,EAAE,SAAS;AAAA,EAC9F,YAAY,iBAAI,MAAM,iBAAI,OAAO,EAAE,MAAM,iBAAI,OAAO,GAAG,QAAQ,iBAAI,OAAO,EAAE,CAAC,CAAC,EAAE,SAAS;AAAA,EACzF,YAAY,iBAAI,MAAM,iBAAI,OAAO,EAAE,MAAM,iBAAI,OAAO,GAAG,QAAQ,iBAAI,OAAO,EAAE,CAAC,CAAC,EAAE,SAAS;AAAA,EACzF,cAAc,iBAAI,MAAM,uBAAuB,EAAE,SAAS;AAAA,EAC1D,eAAe,iBAAI,MAAM,iBAAI,OAAO,EAAE,QAAQ,iBAAI,OAAO,GAAG,WAAW,iBAAI,OAAO,EAAE,CAAC,CAAC,EAAE,SAAS;AAAA,EACjG,iBAAiB,iBAAI,KAAK,CAAC,WAAW,UAAU,CAAC,EAAE,SAAS;AAC9D,CAAC;AACD,IAAI,4BAA4B,iBAAI,OAAO;AAAA,EACzC,oBAAoB,iBAAI,OAAO;AAAA,EAC/B,kBAAkB,iBAAI,OAAO;AAAA,EAC7B,iBAAiB,iBAAI,OAAO;AAAA,EAC5B,4BAA4B,iBAAI,OAAO;AAAA,EACvC,wBAAwB,iBAAI,OAAO;AAAA,EACnC,uBAAuB,iBAAI,OAAO;AAAA,EAClC,0BAA0B,iBAAI,OAAO;AAAA,EACrC,yBAAyB,iBAAI,OAAO;AAAA,EACpC,mBAAmB,iBAAI,OAAO;AAAA,EAC9B,kBAAkB,iBAAI,OAAO;AAAA,EAC7B,aAAa,iBAAI,OAAO;AAAA,EACxB,mBAAmB,iBAAI,OAAO;AAAA,EAC9B,OAAO,iBAAI,OAAO;AAAA,IAChB,aAAa,iBAAI,MAAM,uBAAuB;AAAA,IAC9C,QAAQ,iBAAI,MAAM,uBAAuB;AAAA,IACzC,QAAQ,iBAAI,MAAM,uBAAuB;AAAA,IACzC,UAAU,iBAAI,MAAM,uBAAuB;AAAA,EAC7C,CAAC;AACH,CAAC;AACD,IAAI,sBAAsB,iBAAI,OAAO;AAAA,EACnC,MAAM,iBAAI,OAAO;AAAA,EACjB,QAAQ,iBAAI,OAAO;AACrB,CAAC;AACD,IAAI,sBAAsB,iBAAI,OAAO;AAAA,EACnC,WAAW,iBAAI,OAAO;AAAA,EACtB,UAAU,iBAAI,OAAO;AAAA,EACrB,WAAW,iBAAI,OAAO;AAAA,EACtB,gBAAgB,iBAAI,MAAM,mBAAmB,EAAE,SAAS;AAAA,EACxD,kBAAkB,iBAAI,OAAO,EAAE,SAAS;AAAA,EACxC,UAAU,iBAAI,QAAQ,EAAE,SAAS;AACnC,CAAC;AACD,IAAI,yBAAyB,iBAAI,KAAK;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAI,yBAAyB,iBAAI,KAAK,CAAC,MAAM,MAAM,MAAM,MAAM,IAAI,CAAC;AACpE,IAAI,iBAAiB,iBAAI,OAAO;AAAA,EAC9B,QAAQ,iBAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC5C,aAAa,iBAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EACjD,SAAS,iBAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAC/C,CAAC;AACD,IAAI,0BAA0B,iBAAI,OAAO;AAAA,EACvC,MAAM,iBAAI,QAAQ,YAAY;AAAA,EAC9B,cAAc,iBAAI,OAAO;AAAA,EACzB,UAAU,iBAAI,OAAO;AAAA,EACrB,WAAW,iBAAI,OAAO,iBAAI,OAAO,GAAG,iBAAI,QAAQ,CAAC,EAAE,SAAS;AAC9D,CAAC;AACD,IAAI,2BAA2B,iBAAI,OAAO;AAAA,EACxC,MAAM,iBAAI,QAAQ,cAAc;AAAA,EAChC,cAAc,iBAAI,OAAO;AAAA,EACzB,UAAU,iBAAI,OAAO;AACvB,CAAC;AACD,IAAI,0BAA0B,iBAAI,OAAO;AAAA,EACvC,MAAM,iBAAI,QAAQ,aAAa;AAAA,EAC/B,QAAQ,iBAAI,OAAO;AAAA,EACnB,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,EACjC,WAAW,iBAAI,OAAO,EAAE,SAAS;AACnC,CAAC;AACD,IAAI,6BAA6B,iBAAI,OAAO;AAAA,EAC1C,MAAM,iBAAI,QAAQ,gBAAgB;AACpC,CAAC;AACD,IAAI,iCAAiC,iBAAI,OAAO;AAAA,EAC9C,MAAM,iBAAI,QAAQ,sBAAsB;AAAA,EACxC,eAAe,iBAAI,OAAO;AAAA,EAC1B,WAAW,iBAAI,OAAO;AACxB,CAAC;AACD,IAAI,uBAAuB,iBAAI,OAAO;AAAA,EACpC,MAAM,iBAAI,QAAQ,SAAS;AAAA,EAC3B,WAAW,iBAAI,OAAO;AAAA,EACtB,eAAe,iBAAI,OAAO;AAAA,EAC1B,SAAS,iBAAI,KAAK,CAAC,QAAQ,QAAQ,UAAU,SAAS,CAAC;AAAA,EACvD,SAAS,iBAAI,OAAO,EAAE,SAAS;AACjC,CAAC;AACD,IAAI,qBAAqB,iBAAI,OAAO;AAAA,EAClC,MAAM,iBAAI,QAAQ,OAAO;AAAA,EACzB,WAAW,iBAAI,OAAO;AAAA,EACtB,eAAe,iBAAI,OAAO;AAAA,EAC1B,SAAS,iBAAI,KAAK,CAAC,QAAQ,QAAQ,UAAU,SAAS,CAAC;AAAA,EACvD,SAAS,iBAAI,OAAO,EAAE,SAAS;AACjC,CAAC;AACD,IAAI,yBAAyB,iBAAI,OAAO;AAAA,EACtC,MAAM,iBAAI,QAAQ,YAAY;AAAA,EAC9B,WAAW,iBAAI,OAAO;AAAA,EACtB,SAAS,iBAAI,OAAO,EAAE,SAAS;AACjC,CAAC;AACD,IAAI,4BAA4B,iBAAI,OAAO;AAAA,EACzC,MAAM,iBAAI,QAAQ,eAAe;AAAA,EACjC,YAAY,iBAAI,OAAO;AAAA,EACvB,SAAS,iBAAI,KAAK,CAAC,aAAa,UAAU,SAAS,CAAC,EAAE,SAAS;AACjE,CAAC;AACD,IAAI,6BAA6B,iBAAI,OAAO;AAAA,EAC1C,MAAM,iBAAI,QAAQ,gBAAgB;AAAA,EAClC,YAAY,iBAAI,OAAO;AAAA,EACvB,cAAc,iBAAI,OAAO,EAAE,SAAS;AACtC,CAAC;AACD,IAAI,4BAA4B,iBAAI,mBAAmB,QAAQ;AAAA,EAC7D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAI,qBAAqB,iBAAI,OAAO;AAAA,EAClC,IAAI,iBAAI,OAAO;AAAA,EACf,QAAQ,iBAAI,OAAO;AAAA,EACnB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,WAAW,iBAAI,OAAO;AAAA,EACtB,eAAe,iBAAI,MAAM,iBAAI,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EACjD,WAAW,iBAAI,OAAO,iBAAI,OAAO,GAAG,cAAc,EAAE,QAAQ,CAAC,CAAC;AAAA,EAC9D,SAAS;AAAA,EACT,YAAY,iBAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAChD,YAAY,iBAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAClD,CAAC;AACD,IAAI,mBAAmB,iBAAI,OAAO;AAAA,EAChC,QAAQ,iBAAI,OAAO;AAAA,EACnB,WAAW,iBAAI,OAAO;AAAA,EACtB,OAAO,iBAAI,OAAO;AAAA,EAClB,QAAQ,iBAAI,KAAK,YAAY;AAAA,EAC7B,MAAM,iBAAI,KAAK,SAAS,EAAE,QAAQ,MAAM;AAAA,EACxC,WAAW,iBAAI,OAAO;AAAA,EACtB,WAAW,iBAAI,OAAO;AAAA,EACtB,eAAe,iBAAI,OAAO,EAAE,SAAS;AAAA,EACrC,eAAe,iBAAI,OAAO;AAAA,EAC1B,WAAW,iBAAI,OAAO;AAAA,EACtB,iBAAiB,iBAAI,OAAO,EAAE,SAAS;AAAA,EACvC,KAAK,iBAAI,OAAO;AAAA,EAChB,gBAAgB,iBAAI,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACjD,aAAa,iBAAI,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,YAAY,iBAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAChD,eAAe,iBAAI,OAAO,iBAAI,OAAO,GAAG,kBAAkB,EAAE,SAAS;AAAA,EACrE,WAAW,iBAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC/C,YAAY,iBAAI,OAAO,EAAE,SAAS;AAAA,EAClC,cAAc,iBAAI,OAAO,EAAE,SAAS;AAAA,EACpC,iBAAiB,iBAAI,OAAO,iBAAI,OAAO,GAAG,oBAAoB,EAAE,SAAS;AAAA,EACzE,aAAa,kBAAkB,SAAS;AAAA,EACxC,cAAc,iBAAI,OAAO,iBAAI,OAAO,GAAG,iBAAiB,EAAE,SAAS;AAAA,EACnE,kBAAkB,uBAAuB,SAAS;AAAA,EAClD,cAAc,iBAAI,OAAO,EAAE,QAAQ,CAAC;AAAA,EACpC,mBAAmB,iBAAI,OAAO,EAAE,QAAQ,CAAC;AAAA,EACzC,eAAe,yBAAyB,SAAS;AAAA,EACjD,gBAAgB,0BAA0B,SAAS;AAAA,EACnD,UAAU,iBAAI,KAAK,SAAS,EAAE,SAAS;AAAA,EACvC,OAAO,iBAAI,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACnC,aAAa,iBAAI,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,mBAAmB,oBAAoB,SAAS;AAAA,EAChD,gBAAgB,iBAAI,OAAO,EAAE,QAAQ,CAAC;AAAA,EACtC,iBAAiB,iBAAI,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,SAAS;AAAA,EACtE,yBAAyB,iBAAI,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,SAAS;AAAA,EAC9E,mBAAmB,iBAAI,OAAO,EAAE,SAAS;AAAA,EACzC,mBAAmB,iBAAI,QAAQ,EAAE,QAAQ,KAAK;AAAA,EAC9C,gBAAgB,iBAAI,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC;AAAA,EAC1D,UAAU,iBAAI,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC/D,sBAAsB,iBAAI,MAAM,iBAAI,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS;AAAA,EAC/D,mBAAmB,iBAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EACvD,aAAa,iBAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EACjD,cAAc,iBAAI,KAAK,CAAC,QAAQ,sBAAsB,CAAC,EAAE,QAAQ,MAAM;AAAA,EACvE,eAAe,iBAAI,QAAQ,EAAE,QAAQ,KAAK;AAAA,EAC1C,mBAAmB,iBAAI,OAAO;AAAA,IAC5B,SAAS,iBAAI,OAAO;AAAA,IACpB,YAAY,iBAAI,OAAO;AAAA,IACvB,UAAU,iBAAI,OAAO;AAAA,IACrB,WAAW,iBAAI,OAAO;AAAA,EACxB,CAAC,EAAE,SAAS,EAAE,QAAQ,IAAI;AAC5B,CAAC;AACD,IAAI,qBAAqB;AACzB,IAAI,kBAAkB,iBAAI,OAAO;AAAA,EAC/B,eAAe,iBAAI,OAAO;AAAA,EAC1B,OAAO,iBAAI,OAAO,iBAAI,OAAO,GAAG,gBAAgB;AAClD,CAAC;AACD,SAAS,iBAAiB,KAAK;AAC7B,MAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC3C,WAAO,EAAE,eAAe,oBAAoB,OAAO,CAAC,EAAE;AAAA,EACxD;AACA,QAAM,gBAAgB,KAAK,KAAK,eAAe;AAC/C,QAAM,UAAU,OAAO,kBAAkB,WAAW,gBAAgB;AACpE,MAAI,UAAU,GAAG;AACf,WAAO,EAAE,eAAe,oBAAoB,OAAO,CAAC,EAAE;AAAA,EACxD;AACA,MAAI,UAAU,IAAI;AAChB,2BAAuB,KAAK,KAAK,OAAO,CAAC;AAAA,EAC3C;AACA,MAAI,UAAU,IAAI;AAChB,8BAA0B,KAAK,KAAK,OAAO,CAAC;AAAA,EAC9C;AACA,MAAI,UAAU,IAAI;AAChB,6BAAyB,KAAK,KAAK,OAAO,CAAC;AAAA,EAC7C;AACA,SAAO,gBAAgB,MAAM,EAAE,GAAG,KAAK,eAAe,mBAAmB,CAAC;AAC5E;AACA,SAAS,uBAAuB,UAAU;AACxC,MAAI,OAAO,aAAa,YAAY,aAAa;AAC/C;AACF,aAAW,UAAU,OAAO,OAAO,QAAQ,GAAG;AAC5C,QAAI,OAAO,WAAW,YAAY,WAAW;AAC3C;AACF,UAAM,WAAW,KAAK,QAAQ,gBAAgB;AAC9C,QAAI,OAAO,aAAa,YAAY,aAAa;AAC/C;AACF,UAAM,UAAU,KAAK,QAAQ,WAAW;AACxC,UAAM,UAAU,KAAK,QAAQ,WAAW;AACxC,UAAM,YAAY,OAAO,YAAY,WAAW,UAAU,OAAO,OAAO,YAAY,WAAW,UAAU,MAAM;AAC/G,WAAO,OAAO,QAAQ,EAAE,gBAAgB,SAAS,CAAC;AAAA,EACpD;AACF;AACA,SAAS,yBAAyB,UAAU;AAC1C,MAAI,OAAO,aAAa,YAAY,aAAa;AAC/C;AACF,aAAW,UAAU,OAAO,OAAO,QAAQ,GAAG;AAC5C,QAAI,OAAO,WAAW,YAAY,WAAW;AAC3C;AACF,UAAM,mBAAmB,KAAK,QAAQ,kBAAkB;AACxD,QAAI,OAAO,qBAAqB,YAAY,qBAAqB;AAC/D;AACF,QAAI,KAAK,kBAAkB,iBAAiB,MAAM,QAAQ;AACxD,aAAO,OAAO,kBAAkB,EAAE,iBAAiB,OAAU,CAAC;AAAA,IAChE;AAAA,EACF;AACF;AACA,SAAS,0BAA0B,UAAU;AAC3C,MAAI,OAAO,aAAa,YAAY,aAAa;AAC/C;AACF,QAAM,qBAAqB,oBAAI,IAAI,CAAC,eAAe,kBAAkB,aAAa,UAAU,CAAC;AAC7F,aAAW,UAAU,OAAO,OAAO,QAAQ,GAAG;AAC5C,QAAI,OAAO,WAAW,YAAY,WAAW;AAC3C;AACF,UAAM,WAAW,KAAK,QAAQ,mBAAmB;AACjD,QAAI,aAAa;AACf;AACF,UAAM,gBAAgB,KAAK,QAAQ,eAAe;AAClD,UAAM,SAAS,KAAK,QAAQ,QAAQ;AACpC,QAAI,iBAAiB,QAAQ,OAAO,WAAW,YAAY,mBAAmB,IAAI,MAAM,GAAG;AACzF,aAAO,OAAO,QAAQ,EAAE,mBAAmB,KAAK,CAAC;AAAA,IACnD;AAAA,EACF;AACF;AACA,IAAI,0BAA0B;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,SAAS,iBAAiB,QAAQ;AAChC,QAAM,OAAO,EAAE,GAAG,OAAO;AACzB,OAAK,kBAAkB,+BAA+B,OAAO,eAAe;AAC5E,OAAK,0BAA0B,6BAA6B,OAAO,aAAa;AAChF,aAAW,OAAO,yBAAyB;AACzC,WAAO,KAAK,GAAG;AAAA,EACjB;AACA,SAAO;AACT;AACA,SAAS,+BAA+B,YAAY;AAClD,MAAI,CAAC;AACH,WAAO;AACT,MAAI,QAAQ;AACZ,aAAW,SAAS,OAAO,OAAO,UAAU,GAAG;AAC7C,QAAI,OAAO,WAAW;AACpB;AAAA,EACJ;AACA,SAAO;AACT;AACA,SAAS,6BAA6B,eAAe;AACnD,MAAI,CAAC;AACH,WAAO;AACT,MAAI,QAAQ;AACZ,aAAW,KAAK,OAAO,OAAO,aAAa,GAAG;AAC5C,QAAI,EAAE,cAAc;AAClB;AAAA,EACJ;AACA,SAAO;AACT;AACA,SAAS,mBAAmB,QAAQ;AAClC,QAAM,SAAS,EAAE,QAAQ,OAAO,OAAO;AACvC,MAAI,OAAO,kBAAkB;AAC3B,WAAO,gBAAgB,OAAO;AAChC,MAAI,OAAO,mBAAmB;AAC5B,WAAO,iBAAiB,OAAO;AACjC,MAAI,OAAO,sBAAsB;AAC/B,WAAO,oBAAoB,OAAO;AACpC,MAAI,OAAO,kBAAkB;AAC3B,WAAO,gBAAgB,OAAO;AAChC,MAAI,OAAO,oBAAoB;AAC7B,WAAO,kBAAkB,OAAO;AAClC,MAAI,OAAO,gBAAgB;AACzB,WAAO,cAAc,OAAO;AAC9B,MAAI,OAAO,iBAAiB;AAC1B,WAAO,eAAe,OAAO;AAC/B,MAAI,OAAO,yBAAyB;AAClC,WAAO,uBAAuB,OAAO;AACvC,MAAI,OAAO,qBAAqB;AAC9B,WAAO,mBAAmB,OAAO;AACnC,SAAO;AACT;AAIA,IAAI,yBAAyB,iBAAI,OAAO;AAAA,EACtC,OAAO,iBAAI,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,iBAAiB,sBAAsB,SAAS,EAAE,SAAS;AAC7D,CAAC;AACD,IAAI,qBAAqB,iBAAI,OAAO;AAAA,EAClC,IAAI,iBAAI,OAAO;AAAA,EACf,SAAS,iBAAI,OAAO;AAAA,EACpB,aAAa,iBAAI,OAAO,EAAE,SAAS;AAAA,EACnC,MAAM,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAAA,EAC5B,OAAO,iBAAI,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,iBAAiB,sBAAsB,SAAS,EAAE,SAAS;AAC7D,CAAC;AACD,IAAI,2BAA2B,iBAAI,OAAO;AAAA,EACxC,IAAI,iBAAI,OAAO;AAAA,EACf,MAAM,iBAAI,OAAO;AAAA,EACjB,aAAa,iBAAI,OAAO;AAAA,EACxB,OAAO,iBAAI,MAAM,kBAAkB;AAAA,EACnC,WAAW,iBAAI,OAAO;AAAA,EACtB,WAAW,iBAAI,OAAO;AAAA,EACtB,SAAS,iBAAI,QAAQ,EAAE,QAAQ,KAAK;AACtC,CAAC;AACD,IAAI,yBAAyB;AAC7B,IAAI,sBAAsB,iBAAI,OAAO;AAAA,EACnC,eAAe,iBAAI,OAAO;AAAA,EAC1B,WAAW,iBAAI,OAAO,iBAAI,OAAO,GAAG,wBAAwB;AAC9D,CAAC;AACD,SAAS,qBAAqB,KAAK;AACjC,MAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC3C,WAAO,EAAE,eAAe,wBAAwB,WAAW,CAAC,EAAE;AAAA,EAChE;AACA,QAAM,gBAAgB,KAAK,KAAK,eAAe;AAC/C,QAAM,UAAU,OAAO,kBAAkB,WAAW,gBAAgB;AACpE,MAAI,UAAU,GAAG;AACf,WAAO,EAAE,eAAe,wBAAwB,WAAW,CAAC,EAAE;AAAA,EAChE;AACA,QAAM,SAAS,oBAAoB,MAAM,GAAG;AAC5C,SAAO,EAAE,GAAG,QAAQ,eAAe,uBAAuB;AAC5D;AAIA,IAAI,kBAAkB,iBAAI,KAAK,CAAC,QAAQ,SAAS,IAAI,CAAC;AACtD,IAAI,gBAAgB,CAAC,UAAU,UAAU,SAAS;AAClD,IAAI,oBAAoB,iBAAI,KAAK,aAAa;AAC9C,IAAI,mBAAmB,iBAAI,OAAO;AAAA,EAChC,OAAO,iBAAI,MAAM,CAAC,iBAAI,OAAO,GAAG,iBAAI,MAAM,iBAAI,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS;AAAA,EACnE,MAAM,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC5B,UAAU,iBAAI,OAAO;AAAA,IACnB,YAAY,iBAAI,OAAO,EAAE,SAAS;AAAA,IAClC,YAAY,iBAAI,OAAO,EAAE,SAAS;AAAA,IAClC,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,EACnC,CAAC;AACH,CAAC;AACD,IAAI,oBAAoB,iBAAI,OAAO;AAAA,EACjC,MAAM,iBAAI,OAAO;AAAA,EACjB,MAAM;AAAA,EACN,QAAQ,iBAAI,OAAO,iBAAI,OAAO,GAAG,iBAAI,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EACzD,aAAa,iBAAI,MAAM,gBAAgB,EAAE,QAAQ,CAAC,CAAC;AAAA,EACnD,qBAAqB,iBAAI,OAAO,iBAAI,OAAO,GAAG,iBAAI,QAAQ,CAAC,EAAE,SAAS;AAAA,EACtE,sBAAsB,iBAAI,QAAQ,EAAE,SAAS;AAAA,EAC7C,QAAQ;AAAA,EACR,aAAa,iBAAI,OAAO;AAC1B,CAAC,EAAE,YAAY;AACf,IAAI,aAAa,iBAAI,OAAO;AAAA,EAC1B,IAAI,iBAAI,OAAO;AAAA,EACf,MAAM,iBAAI,OAAO;AAAA,EACjB,aAAa,iBAAI,OAAO;AAAA,EACxB,cAAc,iBAAI,OAAO;AAAA,EACzB,WAAW,iBAAI,QAAQ;AAAA,EACvB,WAAW,iBAAI,OAAO;AACxB,CAAC;AACD,IAAI,aAAa,iBAAI,KAAK,CAAC,QAAQ,eAAe,cAAc,CAAC;AACjE,IAAI,oBAAoB,iBAAI,OAAO;AAAA,EACjC,OAAO,iBAAI,MAAM,UAAU;AAAA,EAC3B,cAAc,iBAAI,OAAO;AAAA,EACzB,MAAM;AACR,CAAC;AAID,IAAI,2BAA2B;AAC/B,IAAI,mBAAmB,iBAAI,KAAK,CAAC,QAAQ,YAAY,MAAM,CAAC;AAC5D,IAAI,uBAAuB,iBAAI,OAAO;AAAA,EACpC,UAAU,iBAAI,OAAO;AAAA,EACrB,QAAQ,iBAAI,OAAO;AAAA,EACnB,WAAW,iBAAI,OAAO;AAAA,EACtB,OAAO,iBAAI,OAAO;AAAA,EAClB,WAAW,iBAAI,OAAO;AAAA,EACtB,WAAW,iBAAI,OAAO;AAAA,EACtB,kBAAkB,iBAAI,OAAO,EAAE,SAAS;AAAA,EACxC,MAAM,iBAAiB,QAAQ,MAAM;AAAA,EACrC,QAAQ,iBAAI,KAAK,CAAC,QAAQ,WAAW,kBAAkB,WAAW,CAAC,EAAE,SAAS;AAAA,EAC9E,YAAY,iBAAI,OAAO,EAAE,SAAS;AAAA,EAClC,gBAAgB,iBAAI,OAAO,EAAE,SAAS;AAAA,EACtC,UAAU,iBAAI,QAAQ,EAAE,SAAS;AAAA,EACjC,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,EACjC,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,EACjC,cAAc,iBAAI,QAAQ,EAAE,SAAS;AACvC,CAAC;AACD,IAAI,0BAA0B,iBAAI,OAAO;AAAA,EACvC,cAAc,iBAAI,OAAO;AAAA,EACzB,iBAAiB,iBAAI,OAAO;AAAA,EAC5B,gBAAgB;AAClB,CAAC;AACD,SAAS,qBAAqB,QAAQ,UAAU;AAC9C,SAAO,GAAG,MAAM,GAAG,wBAAwB,GAAG,QAAQ;AACxD;AAUA,IAAI,qBAAqB;AAIzB,SAAS,yBAAyB,OAAO;AACvC,MAAI,CAAC,MAAM,WAAW,gBAAgB;AACpC,WAAO;AACT,QAAM,OAAO,MAAM,MAAM,iBAAiB,MAAM;AAChD,QAAM,MAAM,KAAK,QAAQ,kBAAkB;AAC3C,MAAI,MAAM;AACR,WAAO;AACT,SAAO;AAAA,IACL,QAAQ,KAAK,MAAM,GAAG,GAAG;AAAA,IACzB,UAAU,KAAK,MAAM,MAAM,mBAAmB,MAAM;AAAA,EACtD;AACF;AAIA,IAAI,qBAAqB,CAAC,SAAS,SAAS;AAC5C,IAAI,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAI,kBAAkB,iBAAI,KAAK,WAAW;AAC1C,IAAI,uBAAuB,iBAAI,OAAO;AAAA,EACpC,QAAQ,iBAAI,OAAO;AACrB,CAAC;AACD,IAAI,wBAAwB,iBAAI,KAAK;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAI,4BAA4B,iBAAI,KAAK,CAAC,OAAO,MAAM,CAAC;AACxD,IAAI,sBAAsB,iBAAI,KAAK;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAI,8BAA8B,iBAAI,OAAO;AAAA,EAC3C,SAAS,iBAAI,OAAO;AAAA,IAClB,QAAQ,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAAA,IAC9B,UAAU,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAAA,IAChC,QAAQ,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAAA,IAC9B,UAAU,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAAA,IAChC,MAAM,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAAA,IAC5B,SAAS,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAAA,IAC/B,aAAa,iBAAI,QAAQ,EAAE,SAAS;AAAA,IACpC,cAAc,iBAAI,OAAO,EAAE,SAAS;AAAA,IACpC,eAAe,iBAAI,OAAO,EAAE,SAAS;AAAA,EACvC,CAAC;AAAA,EACD,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,mBAAmB,iBAAI,OAAO;AAAA,IAC5B,YAAY,iBAAI,QAAQ;AAAA,IACxB,QAAQ,iBAAI,QAAQ;AAAA,IACpB,UAAU,iBAAI,QAAQ;AAAA,IACtB,UAAU,iBAAI,QAAQ;AAAA,IACtB,UAAU,iBAAI,QAAQ;AAAA,IACtB,QAAQ,iBAAI,QAAQ;AAAA,IACpB,SAAS,iBAAI,QAAQ;AAAA,IACrB,WAAW,iBAAI,QAAQ;AAAA,IACvB,MAAM,iBAAI,QAAQ;AAAA,IAClB,SAAS,iBAAI,QAAQ;AAAA,EACvB,CAAC;AAAA,EACD,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,eAAe,iBAAI,QAAQ;AAAA,EAC3B,iBAAiB,iBAAI,QAAQ;AAC/B,CAAC;AACD,IAAI,2BAA2B,iBAAI,OAAO;AAAA,EACxC,eAAe,iBAAI,OAAO,EAAE,SAAS;AAAA,EACrC,mBAAmB,sBAAsB,SAAS;AAAA,EAClD,oBAAoBC,sBAAqB,SAAS;AAAA,EAClD,kBAAkB,iBAAI,QAAQ;AAAA,EAC9B,mBAAmB,iBAAI,QAAQ,EAAE,SAAS;AAAA,EAC1C,+BAA+B,iBAAI,QAAQ;AAAA,EAC3C,iBAAiB,iBAAI,OAAO,iBAAI,OAAO,GAAG,oBAAoB;AAAA,EAC9D,wBAAwB,0BAA0B,SAAS;AAAA,EAC3D,6BAA6B,iBAAI,MAAM,iBAAI,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EAC/D,sBAAsB,iBAAI,MAAM,iBAAI,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EACxD,YAAY,iBAAI,OAAO,iBAAI,OAAO,GAAG,eAAe,EAAE,QAAQ,CAAC,CAAC;AAAA,EAChE,eAAe,iBAAI,MAAM,iBAAI,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EACjD,mBAAmB,iBAAI,MAAM,iBAAI,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EACrD,uBAAuB,4BAA4B,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC1E,aAAa,iBAAI,KAAK,CAAC,aAAa,aAAa,CAAC,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC3E,sBAAsB,iBAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAC5D,CAAC;AACD,IAAI,8BAA8B;AAClC,IAAI,0BAA0B,iBAAI,OAAO;AAAA,EACvC,eAAe,iBAAI,OAAO;AAAA,EAC1B,UAAU;AACZ,CAAC;AACD,IAAI,yBAAyB,iBAAI,OAAO;AAAA,EACtC,gBAAgB,iBAAI,OAAO;AAAA,EAC3B,IAAI,iBAAI,OAAO;AAAA,EACf,QAAQ,iBAAI,KAAK,kBAAkB;AAAA,EACnC,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC7B,UAAU,iBAAI,OAAO;AAAA,EACrB,UAAU,iBAAI,OAAO;AACvB,CAAC;AACD,IAAI,2BAA2B;AAC/B,IAAI,8BAA8B,iBAAI,OAAO;AAAA,EAC3C,eAAe,iBAAI,OAAO;AAAA,EAC1B,aAAa,iBAAI,OAAO,iBAAI,OAAO,GAAG,sBAAsB;AAC9D,CAAC;AACD,IAAI,wBAAwB;AAAA,EAC1B,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,+BAA+B;AAAA,EAC/B,iBAAiB,CAAC;AAAA,EAClB,wBAAwB;AAAA,EACxB,6BAA6B,CAAC;AAAA,EAC9B,sBAAsB,CAAC;AAAA,EACvB,YAAY,CAAC;AAAA,EACb,eAAe,CAAC;AAAA,EAChB,mBAAmB,CAAC;AAAA,EACpB,uBAAuB;AAAA,EACvB,aAAa;AAAA,EACb,sBAAsB;AACxB;AACA,SAAS,yBAAyB,KAAK;AACrC,MAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC3C,WAAO,EAAE,eAAe,6BAA6B,UAAU,EAAE,GAAG,sBAAsB,EAAE;AAAA,EAC9F;AACA,QAAM,gBAAgB,KAAK,KAAK,eAAe;AAC/C,QAAM,UAAU,OAAO,kBAAkB,WAAW,gBAAgB;AACpE,MAAI,UAAU,GAAG;AACf,+BAA2B,GAAG;AAAA,EAChC;AACA,MAAI,WAAW,6BAA6B;AAC1C,WAAO,wBAAwB,MAAM,GAAG;AAAA,EAC1C;AACA,QAAM,cAAc,KAAK,KAAK,UAAU,KAAK;AAC7C,QAAM,SAAS,yBAAyB,UAAU,WAAW;AAC7D,QAAM,WAAW,OAAO,UAAU,OAAO,OAAO,EAAE,GAAG,sBAAsB;AAC3E,MAAI,UAAU,KAAK,SAAS,eAAe,SAAS,MAAM,GAAG;AAC3D,aAAS,gBAAgB,SAAS,cAAc,MAAM,GAAG,EAAE;AAAA,EAC7D;AACA,SAAO;AAAA,IACL,eAAe;AAAA,IACf;AAAA,EACF;AACF;AACA,SAAS,2BAA2B,KAAK;AACvC,MAAI,OAAO,QAAQ,YAAY,QAAQ;AACrC;AACF,QAAM,WAAW,KAAK,KAAK,UAAU;AACrC,MAAI,OAAO,aAAa,YAAY,aAAa;AAC/C;AACF,MAAI,KAAK,UAAU,mBAAmB,MAAM,QAAQ;AAClD,WAAO,OAAO,UAAU,EAAE,mBAAmB,KAAK,CAAC;AAAA,EACrD;AACF;AACA,SAAS,6BAA6B,KAAK;AACzC,MAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC3C,WAAO,EAAE,eAAe,0BAA0B,aAAa,CAAC,EAAE;AAAA,EACpE;AACA,QAAM,gBAAgB,KAAK,KAAK,eAAe;AAC/C,QAAM,UAAU,OAAO,kBAAkB,WAAW,gBAAgB;AACpE,MAAI,WAAW,0BAA0B;AACvC,WAAO,4BAA4B,MAAM,GAAG;AAAA,EAC9C;AACA,QAAM,iBAAiB,KAAK,KAAK,aAAa;AAC9C,QAAM,cAAc,OAAO,mBAAmB,YAAY,mBAAmB,OAAO,iBAAI,OAAO,iBAAI,OAAO,GAAG,sBAAsB,EAAE,MAAM,cAAc,IAAI,CAAC;AAC9J,SAAO;AAAA,IACL,eAAe;AAAA,IACf;AAAA,EACF;AACF;AAIA,IAAI,YAAY,CAAC,QAAQ,SAAS;AAClC,IAAI,gBAAgB,iBAAI,KAAK,SAAS;AACtC,IAAI,6BAA6B,iBAAI,OAAO;AAAA,EAC1C,MAAM,iBAAI,OAAO;AAAA,EACjB,OAAO,iBAAI,OAAO;AAAA,EAClB,UAAU,iBAAI,OAAO;AAAA,EACrB,MAAM;AAAA,EACN,QAAQ,iBAAI,OAAO;AAAA,EACnB,aAAa,iBAAI,OAAO;AAAA,EACxB,iBAAiB,iBAAI,OAAO,EAAE,SAAS;AACzC,CAAC;AACD,IAAI,uCAAuC,iBAAI,OAAO;AAAA,EACpD,gBAAgB,iBAAI,MAAM,0BAA0B;AACtD,CAAC;AACD,SAAS,YAAY,OAAO;AAC1B,SAAO,MAAM,YAAY,EAAE,KAAK,EAAE,QAAQ,eAAe,GAAG,EAAE,QAAQ,YAAY,EAAE,EAAE,MAAM,GAAG,EAAE,KAAK;AACxG;AACA,SAAS,iBAAiB,MAAM;AAC9B,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,SAAS;AACP,YAAM,aAAa;AACnB,YAAM,IAAI,MAAM,uBAAuB,UAAU,EAAE;AAAA,IACrD;AAAA,EACF;AACF;AAIA,IAAI,6BAA6B,iBAAI,OAAO;AAAA,EAC1C,gBAAgB,iBAAI,OAAO;AAAA,EAC3B,YAAY,iBAAI,OAAO;AAAA,EACvB,SAAS,iBAAI,OAAO;AAAA,EACpB,aAAa,iBAAI,OAAO,EAAE,SAAS;AAAA,EACnC,gBAAgB,iBAAI,OAAO;AAAA,EAC3B,cAAc,iBAAI,OAAO;AAC3B,CAAC;AACD,IAAI,sBAAsB,iBAAI,OAAO;AAAA,EACnC,gBAAgB,iBAAI,OAAO;AAAA,EAC3B,YAAY,iBAAI,OAAO;AAAA,EACvB,SAAS,iBAAI,OAAO;AAAA,EACpB,aAAa,iBAAI,OAAO,EAAE,SAAS;AACrC,CAAC;AAUD,IAAI,uBAAuB,iBAAI,KAAK,CAAC,cAAc,YAAY,WAAW,SAAS,OAAO,CAAC;AAC3F,IAAI,sBAAsB,iBAAI,mBAAmB,SAAS;AAAA,EACxD,iBAAI,OAAO,EAAE,OAAO,iBAAI,QAAQ,MAAM,EAAE,CAAC;AAAA,EACzC,iBAAI,OAAO;AAAA,IACT,OAAO,iBAAI,QAAQ,YAAY;AAAA,IAC/B,WAAW,iBAAI,OAAO;AAAA,IACtB,OAAO;AAAA,EACT,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,OAAO,iBAAI,QAAQ,UAAU;AAAA,IAC7B,WAAW,iBAAI,OAAO;AAAA,IACtB,MAAM;AAAA,EACR,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,OAAO,iBAAI,QAAQ,SAAS;AAAA,IAC5B,WAAW,iBAAI,OAAO;AAAA,IACtB,MAAM;AAAA,IACN,cAAc,iBAAI,OAAO;AAAA,EAC3B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,OAAO,iBAAI,QAAQ,OAAO;AAAA,IAC1B,WAAW,iBAAI,OAAO;AAAA,IACtB,MAAM;AAAA,IACN,cAAc,iBAAI,OAAO;AAAA,IACzB,UAAU,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAAA,EAClC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,OAAO,iBAAI,QAAQ,OAAO;AAAA,IAC1B,WAAW,iBAAI,OAAO;AAAA,IACtB,MAAM;AAAA,IACN,cAAc,iBAAI,OAAO;AAAA,IACzB,UAAU,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAAA,IAChC,eAAe,iBAAI,OAAO,EAAE,SAAS;AAAA,EACvC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,OAAO,iBAAI,QAAQ,QAAQ;AAAA,IAC3B,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,IACjC,OAAO,iBAAI,OAAO;AAAA,IAClB,gBAAgB;AAAA,EAClB,CAAC;AACH,CAAC;AAID,IAAI,6BAA6B,iBAAI,OAAO;AAAA,EAC1C,MAAM,iBAAI,QAAQ,wBAAwB;AAAA,EAC1C,IAAI,iBAAI,OAAO;AAAA,EACf,YAAY,iBAAI,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACxC,SAAS,iBAAI,OAAO;AAAA,IAClB,WAAW,iBAAI,OAAO;AAAA,MACpB,OAAO,iBAAI,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,MACtC,SAAS,iBAAI,OAAO,EAAE,YAAY;AAAA,MAClC,OAAO,iBAAI,OAAO,EAAE,YAAY;AAAA,IAClC,CAAC,EAAE,SAAS;AAAA,IACZ,kBAAkB,iBAAI,OAAO;AAAA,MAC3B,KAAK,iBAAI,OAAO,EAAE,YAAY;AAAA,MAC9B,KAAK,iBAAI,OAAO,EAAE,YAAY;AAAA,MAC9B,aAAa,iBAAI,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,IAC9C,CAAC,EAAE,SAAS;AAAA,IACZ,MAAM,iBAAI,OAAO;AAAA,MACf,WAAW,iBAAI,OAAO,EAAE,YAAY;AAAA,MACpC,YAAY,iBAAI,OAAO,EAAE,YAAY;AAAA,MACrC,YAAY,iBAAI,OAAO,EAAE,YAAY;AAAA,IACvC,CAAC,EAAE,SAAS;AAAA,IACZ,UAAU,iBAAI,MAAM,iBAAI,OAAO;AAAA,MAC7B,OAAO,iBAAI,OAAO;AAAA,MAClB,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,MAC7B,UAAU,iBAAI,OAAO,EAAE,SAAS;AAAA,MAChC,aAAa,iBAAI,OAAO,EAAE,SAAS;AAAA,MACnC,WAAW,iBAAI,OAAO,EAAE,YAAY;AAAA,MACpC,eAAe,iBAAI,OAAO,EAAE,YAAY;AAAA,MACxC,gBAAgB,iBAAI,OAAO,EAAE,YAAY;AAAA,IAC3C,CAAC,CAAC,EAAE,SAAS;AAAA,IACb,WAAW,iBAAI,OAAO;AAAA,MACpB,OAAO,iBAAI,OAAO,EAAE,YAAY;AAAA,MAChC,OAAO,iBAAI,OAAO,EAAE,YAAY;AAAA,MAChC,OAAO,iBAAI,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,MACtC,QAAQ,iBAAI,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,IACzC,CAAC,EAAE,SAAS;AAAA,IACZ,SAAS,iBAAI,OAAO;AAAA,MAClB,eAAe,iBAAI,OAAO;AAAA,MAC1B,OAAO,iBAAI,OAAO,EAAE,YAAY;AAAA,MAChC,cAAc,iBAAI,OAAO,EAAE,YAAY;AAAA,MACvC,UAAU,iBAAI,QAAQ;AAAA,IACxB,CAAC,EAAE,SAAS;AAAA,IACZ,YAAY,iBAAI,KAAK,CAAC,WAAW,UAAU,YAAY,CAAC;AAAA,IACxD,UAAU,iBAAI,OAAO,EAAE,YAAY;AAAA,IACnC,eAAe,iBAAI,OAAO;AAAA,MACxB,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,MAC7B,KAAK,iBAAI,OAAO,EAAE,SAAS;AAAA,MAC3B,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,IAC/B,CAAC,EAAE,SAAS;AAAA,IACZ,gBAAgB,iBAAI,OAAO,EAAE,SAAS;AAAA,IACtC,cAAc,iBAAI,OAAO,iBAAI,OAAO,GAAG,iBAAI,OAAO;AAAA,MAChD,SAAS,iBAAI,OAAO,EAAE,YAAY;AAAA,MAClC,OAAO,iBAAI,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,MACtC,OAAO,iBAAI,OAAO,EAAE,YAAY;AAAA,IAClC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,IACxB,kBAAkB,iBAAI,OAAO,iBAAI,OAAO,GAAG,iBAAI,OAAO;AAAA,MACpD,OAAO,iBAAI,OAAO,EAAE,YAAY;AAAA,MAChC,OAAO,iBAAI,OAAO,EAAE,YAAY;AAAA,MAChC,OAAO,iBAAI,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,MACtC,QAAQ,iBAAI,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,IACzC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1B,CAAC;AAAA,EACD,aAAa,iBAAI,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AACtD,CAAC;AAGD,IAAI,yBAAyB,iBAAI,OAAO;AAAA,EACtC,aAAa,iBAAI,OAAO;AAAA,EACxB,MAAM,iBAAI,OAAO;AAAA,EACjB,WAAW;AAAA,EACX,MAAM,iBAAI,OAAO;AAAA,EACjB,WAAW,iBAAI,OAAO;AACxB,CAAC;AACD,IAAI,sBAAsB,iBAAI,KAAK,CAAC,OAAO,UAAU,MAAM,CAAC;AAC5D,IAAI,2BAA2B,iBAAI,KAAK,CAAC,YAAY,QAAQ,CAAC;AAC9D,IAAI,sBAAsB,iBAAI,OAAO;AAAA,EACnC,aAAa,iBAAI,OAAO;AAAA,EACxB,UAAU,iBAAI,OAAO;AAAA,EACrB,YAAY,iBAAI,OAAO;AACzB,CAAC;AACD,IAAI,8BAA8B,iBAAI,KAAK;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAI,qBAAqB,iBAAI,KAAK,CAAC,QAAQ,WAAW,kBAAkB,WAAW,CAAC;AACpF,IAAI,4BAA4B,iBAAI,KAAK,CAAC,aAAa,QAAQ,OAAO,CAAC;AACvE,IAAI,qBAAqB,iBAAI,KAAK,CAAC,WAAW,QAAQ,iBAAiB,CAAC;AACxE,IAAI,2BAA2B,iBAAI,KAAK,CAAC,WAAW,gBAAgB,UAAU,MAAM,CAAC;AACrF,IAAI,mBAAmB,iBAAI,KAAK;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAI,uBAAuB,iBAAI,OAAO;AAAA,EACpC,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC7B,iBAAiB,sBAAsB,SAAS;AAAA,EAChD,gBAAgBC,sBAAqB,SAAS;AAAA,EAC9C,UAAU,iBAAI,QAAQ,EAAE,SAAS;AAAA,EACjC,oBAAoB,iBAAI,MAAM,iBAAI,OAAO,CAAC,EAAE,SAAS;AACvD,CAAC;AACD,IAAI,sBAAsB,iBAAI,KAAK,CAAC,gBAAgB,aAAa,iBAAiB,CAAC;AACnF,IAAI,yBAAyB,iBAAI,KAAK,CAAC,iBAAiB,CAAC;AACzD,IAAI,mBAAmB,iBAAI,KAAK,CAAC,gBAAgB,yBAAyB,WAAW,CAAC;AACtF,IAAI,6BAA6B,iBAAI,KAAK,CAAC,SAAS,YAAY,SAAS,CAAC;AAC1E,IAAI,4BAA4B,iBAAI,OAAO;AAAA,EACzC,MAAM,iBAAI,OAAO;AAAA,EACjB,QAAQ;AAAA,EACR,YAAY,iBAAI,OAAO;AAAA,EACvB,WAAW,iBAAI,OAAO;AACxB,CAAC;AACD,IAAI,+BAA+B,iBAAI,mBAAmB,QAAQ;AAAA,EAChE,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,cAAc;AAAA,IAChC,eAAe,iBAAI,OAAO;AAAA,IAC1B,SAAS,iBAAI,MAAM,kBAAkB;AAAA,IACrC,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,IAC7B,iBAAiB,sBAAsB,SAAS;AAAA,IAChD,gBAAgBA,sBAAqB,SAAS;AAAA,IAC9C,KAAK,iBAAI,OAAO,EAAE,SAAS;AAAA,IAC3B,UAAU,iBAAI,QAAQ,EAAE,SAAS;AAAA,EACnC,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,MAAM,EAAE,CAAC;AAAA,EACxC,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,WAAW;AAAA,IAC7B,YAAY,iBAAI,OAAO;AAAA,IACvB,aAAa,iBAAI,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,IACpD,wBAAwB,iBAAI,MAAM,iBAAI,OAAO,CAAC,EAAE,SAAS;AAAA,EAC3D,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,eAAe,EAAE,CAAC;AAAA,EACjD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,gBAAgB;AAAA,IAClC,aAAa,iBAAI,OAAO;AAAA,IACxB,MAAM;AAAA,EACR,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,wBAAwB;AAAA,IAC1C,aAAa,iBAAI,OAAO;AAAA,EAC1B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,aAAa;AAAA,IAC/B,aAAa,iBAAI,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,IAC5C,OAAO,iBAAI,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACrC,CAAC;AACH,CAAC;AACD,IAAI,yBAAyB,iBAAI,KAAK;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAI,2BAA2B,iBAAI,OAAO;AAAA,EACxC,MAAM,iBAAI,QAAQ,cAAc;AAAA,EAChC,OAAO;AAAA,EACP,OAAO,iBAAI,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACtC,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,EACjC,UAAU,iBAAI,OAAO,EAAE,SAAS;AAAA,EAChC,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,EACjC,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,EACjC,gBAAgB,iBAAI,OAAO,EAAE,SAAS;AACxC,CAAC;AACD,IAAI,+BAA+B,iBAAI,mBAAmB,QAAQ;AAAA,EAChE,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,SAAS,GAAG,SAAS,cAAc,CAAC;AAAA,EACnE,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,UAAU,GAAG,UAAU,iBAAI,MAAM,aAAa,EAAE,CAAC;AAAA,EAChF,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,gBAAgB;AAAA,IAClC,UAAU,iBAAI,MAAM,aAAa;AAAA,IACjC,QAAQ,iBAAI,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AAAA,EACpD,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,OAAO,GAAG,OAAO,iBAAI,OAAO,EAAE,CAAC;AAAA,EAC9D,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,mBAAmB,GAAG,eAAe,iBAAI,OAAO,EAAE,CAAC;AAAA,EAClF,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,YAAY;AAAA,IAC9B,aAAa,iBAAI,OAAO;AAAA,IACxB,MAAM;AAAA,IACN,SAAS,iBAAI,QAAQ;AAAA,IACrB,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,IAC7B,cAAc,iBAAI,OAAO,EAAE,SAAS;AAAA,IACpC,YAAY,iBAAI,OAAO,EAAE,SAAS;AAAA,IAClC,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,IACjC,cAAc,iBAAI,QAAQ,EAAE,SAAS;AAAA,IACrC,gBAAgB,iBAAI,OAAO,EAAE,SAAS;AAAA,EACxC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,gBAAgB;AAAA,IAClC,aAAa,iBAAI,OAAO;AAAA,IACxB,QAAQ,iBAAI,OAAO;AAAA,IACnB,OAAO,iBAAI,MAAM,yBAAyB;AAAA,IAC1C,iBAAiB,iBAAI,OAAO;AAAA,EAC9B,CAAC;AAAA,EACD;AAAA,EACA,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,gBAAgB;AAAA,IAClC,UAAU,iBAAI,MAAM,aAAa;AAAA,IACjC,SAAS,iBAAI,QAAQ;AAAA,EACvB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,kBAAkB;AAAA,IACpC,eAAe,iBAAI,OAAO;AAAA,IAC1B,OAAO,iBAAI,KAAK,CAAC,YAAY,aAAa,aAAa,aAAa,UAAU,CAAC;AAAA,IAC/E,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC/B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,6BAA6B;AAAA,IAC/C,SAAS,iBAAI,MAAM,iBAAI,OAAO;AAAA,MAC5B,eAAe,iBAAI,OAAO;AAAA,MAC1B,QAAQ,iBAAI,KAAK,CAAC,WAAW,aAAa,aAAa,aAAa,UAAU,CAAC;AAAA,IACjF,CAAC,CAAC;AAAA,EACJ,CAAC;AACH,CAAC;AACD,IAAI,iCAAiC,iBAAI,OAAO;AAAA,EAC9C,QAAQ,iBAAI,OAAO;AAAA,EACnB,WAAW,iBAAI,OAAO;AAAA,EACtB,UAAU,iBAAI,OAAO;AAAA,EACrB,WAAW,iBAAI,OAAO;AAAA,EACtB,WAAW;AAAA,EACX,QAAQ,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC9B,aAAa,iBAAI,OAAO,EAAE,SAAS;AAAA,EACnC,SAAS,iBAAI,OAAO;AAAA,EACpB,kBAAkB,iBAAI,OAAO,EAAE,SAAS;AAAA,EACxC,UAAU,iBAAI,OAAO,EAAE,SAAS;AAAA,EAChC,qBAAqB,iBAAI,OAAO,EAAE,SAAS;AAC7C,CAAC;AACD,IAAI,4BAA4B,iBAAI,OAAO;AAAA,EACzC,QAAQ,iBAAI,MAAM,iBAAI,OAAO;AAAA,IAC3B,IAAI,iBAAI,OAAO;AAAA,IACf,MAAM,iBAAI,OAAO;AAAA,IACjB,aAAa,iBAAI,OAAO,EAAE,SAAS;AAAA,IACnC,UAAU,iBAAI,OAAO;AAAA,IACrB,WAAW,iBAAI,OAAO;AAAA,MACpB,SAAS,iBAAI,MAAM,qBAAqB;AAAA,MACxC,eAAe;AAAA,IACjB,CAAC,EAAE,SAAS;AAAA,IACZ,kBAAkB,iBAAI,QAAQ,EAAE,SAAS;AAAA,EAC3C,CAAC,CAAC;AAAA,EACF,cAAc,iBAAI,MAAM,iBAAI,OAAO;AAAA,IACjC,MAAM,iBAAI,OAAO;AAAA,IACjB,MAAM,iBAAI,OAAO;AAAA,IACjB,QAAQ,iBAAI,OAAO;AAAA,IACnB,QAAQ,iBAAI,OAAO,EAAE,SAAS;AAAA,EAChC,CAAC,CAAC;AAAA,EACF,iBAAiB,iBAAI,MAAMA,qBAAoB;AAAA,EAC/C,SAAS,iBAAI,OAAO;AAAA,EACpB,eAAe,iBAAI,OAAO;AAAA,IACxB,QAAQ,iBAAI,KAAK,CAAC,iBAAiB,mBAAmB,SAAS,CAAC;AAAA,IAChE,QAAQ,0BAA0B,SAAS;AAAA,IAC3C,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,IAC7B,SAAS,iBAAI,OAAO,EAAE,SAAS;AAAA,IAC/B,kBAAkB,iBAAI,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IACnD,aAAa,iBAAI,OAAO,EAAE,SAAS;AAAA,IACnC,cAAc,iBAAI,OAAO;AAAA,MACvB,UAAU;AAAA,MACV,WAAW;AAAA,MACX,QAAQ,iBAAI,OAAO;AAAA,IACrB,CAAC,EAAE,SAAS;AAAA,EACd,CAAC,EAAE,QAAQ;AAAA,EACX,YAAY,iBAAI,MAAM,iBAAI,OAAO;AAAA,IAC/B,MAAM,iBAAI,OAAO;AAAA,IACjB,MAAM;AAAA,IACN,SAAS,iBAAI,QAAQ;AAAA,IACrB,QAAQ,iBAAI,OAAO;AAAA,IACnB,YAAY,iBAAI,OAAO;AAAA,IACvB,SAAS,iBAAI,OAAO,EAAE,SAAS;AAAA,IAC/B,MAAM,iBAAI,MAAM,iBAAI,OAAO,CAAC,EAAE,SAAS;AAAA,IACvC,KAAK,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC7B,CAAC,CAAC;AAAA,EACF,QAAQ,iBAAI,MAAM,iBAAI,OAAO;AAAA,IAC3B,MAAM,iBAAI,OAAO;AAAA,IACjB,aAAa,iBAAI,OAAO;AAAA,EAC1B,CAAC,CAAC;AAAA,EACF,oBAAoB,iBAAI,MAAM,iBAAI,OAAO;AAAA,IACvC,MAAM,iBAAI,OAAO;AAAA,IACjB,aAAa,iBAAI,OAAO;AAAA,IACxB,QAAQ,iBAAI,OAAO;AAAA,IACnB,aAAa,iBAAI,OAAO;AAAA,IACxB,cAAc,iBAAI,OAAO,EAAE,SAAS;AAAA,IACpC,WAAW,iBAAI,QAAQ;AAAA,IACvB,SAAS,iBAAI,QAAQ;AAAA,IACrB,SAAS,iBAAI,OAAO,EAAE,SAAS;AAAA,IAC/B,YAAY,iBAAI,QAAQ;AAAA,EAC1B,CAAC,CAAC;AAAA,EACF,iBAAiB,iBAAI,MAAM,iBAAI,mBAAmB,MAAM;AAAA,IACtD,iBAAI,OAAO;AAAA,MACT,IAAI,iBAAI,QAAQ,aAAa;AAAA,MAC7B,MAAM,iBAAI,QAAQ,aAAa;AAAA,MAC/B,SAAS,iBAAI,OAAO,EAAE,SAAS;AAAA,IACjC,CAAC;AAAA,EACH,CAAC,CAAC;AAAA,EACF,mBAAmB,iBAAI,QAAQ,EAAE,QAAQ,KAAK;AAAA,EAC9C,0BAA0B,iBAAI,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS;AACjF,CAAC;AACD,IAAI,2BAA2B,iBAAI,KAAK,CAAC,cAAc,aAAa,QAAQ,CAAC;AAC7E,IAAI,6BAA6B,iBAAI,KAAK,CAAC,YAAY,WAAW,QAAQ,OAAO,CAAC;AAClF,IAAI,qBAAqB,iBAAI,KAAK;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAI,sBAAsB,iBAAI,OAAO;AAAA,EACnC,MAAM,iBAAI,QAAQ,iBAAiB;AAAA,EACnC,eAAe,iBAAI,OAAO;AAAA,EAC1B,QAAQ,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC9B,QAAQ,iBAAI,mBAAmB,QAAQ;AAAA,IACrC,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,MAAM,GAAG,MAAM,iBAAI,OAAO,EAAE,CAAC;AAAA,IAC5D,iBAAI,OAAO;AAAA,MACT,MAAM,iBAAI,QAAQ,aAAa;AAAA,MAC/B,aAAa,iBAAI,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,KAAK;AAAA,MACpD,iBAAiB,iBAAI,OAAO,EAAE,SAAS;AAAA,IACzC,CAAC;AAAA,EACH,CAAC;AAAA,EACD,KAAK,iBAAI,KAAK,CAAC,OAAO,MAAM,KAAK,CAAC;AAAA,EAClC,OAAO,iBAAI,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AACxC,CAAC;AACD,IAAI,uBAAuB,iBAAI,OAAO;AAAA,EACpC,MAAM,iBAAI,QAAQ,kBAAkB;AAAA,EACpC,eAAe,iBAAI,OAAO;AAAA,EAC1B,OAAO;AAAA,EACP,QAAQ,iBAAI,OAAO,EAAE,SAAS;AAChC,CAAC;AACD,IAAI,qBAAqB,iBAAI,mBAAmB,MAAM;AAAA,EACpD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,gBAAgB;AAAA,IAClC,eAAe,iBAAI,OAAO;AAAA,IAC1B,IAAI,iBAAI,QAAQ,IAAI;AAAA,IACpB,IAAI,iBAAI,OAAO,EAAE,IAAI,CAAC;AAAA,IACtB,KAAK,iBAAI,OAAO,EAAE,IAAI;AAAA,IACtB,WAAW,iBAAI,OAAO,EAAE,IAAI;AAAA,EAC9B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,gBAAgB;AAAA,IAClC,eAAe,iBAAI,OAAO;AAAA,IAC1B,IAAI,iBAAI,QAAQ,KAAK;AAAA,IACrB,OAAO,iBAAI,OAAO;AAAA,EACpB,CAAC;AACH,CAAC;AACD,IAAI,+BAA+B,iBAAI,OAAO;AAAA,EAC5C,UAAU,iBAAI,KAAK,CAAC,QAAQ,SAAS,CAAC;AAAA,EACtC,SAAS,iBAAI,OAAO,EAAE,IAAI,CAAC;AAAA,EAC3B,WAAW,iBAAI,OAAO,EAAE,IAAI,CAAC;AAAA,EAC7B,KAAK,iBAAI,OAAO,EAAE,IAAI;AAAA,EACtB,MAAM,iBAAI,KAAK,CAAC,QAAQ,WAAW,OAAO,SAAS,eAAe,cAAc,CAAC;AAAA,EACjF,OAAO,iBAAI,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,aAAa,iBAAI,OAAO,EAAE,IAAI;AAAA,EAC9B,gBAAgB,iBAAI,OAAO,EAAE,IAAI;AAAA,EACjC,WAAW,iBAAI,OAAO,EAAE,IAAI;AAAA,EAC5B,KAAK,iBAAI,KAAK,CAAC,OAAO,MAAM,KAAK,CAAC;AAAA,EAClC,UAAU,iBAAI,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACzC,aAAa,iBAAI,OAAO,EAAE,SAAS;AAAA,EACnC,aAAa,iBAAI,OAAO,EAAE,SAAS;AAAA,EACnC,iBAAiB,iBAAI,OAAO,EAAE,SAAS;AACzC,CAAC;AACD,IAAI,+BAA+B,iBAAI,OAAO;AAAA,EAC5C,MAAM,iBAAI,QAAQ,2BAA2B;AAAA,EAC7C,QAAQ,iBAAI,OAAO;AAAA,EACnB,SAAS,iBAAI,MAAM,4BAA4B;AACjD,CAAC;AACD,IAAI,2BAA2B,iBAAI,OAAO;AAAA,EACxC,WAAW,iBAAI,OAAO,EAAE,IAAI,CAAC;AAAA,EAC7B,aAAa,iBAAI,OAAO;AAAA,EACxB,MAAM,iBAAI,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC7C,KAAK,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC3B,WAAW,iBAAI,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAClD,aAAa,iBAAI,OAAO,EAAE,SAAS;AAAA,EACnC,aAAa,iBAAI,OAAO,EAAE,SAAS;AAAA,EACnC,YAAY,iBAAI,OAAO,EAAE,SAAS;AAAA,EAClC,UAAU,iBAAI,OAAO,EAAE,SAAS;AAAA,EAChC,QAAQ,iBAAI,OAAO,EAAE,SAAS;AAChC,CAAC;AACD,IAAI,4BAA4B,iBAAI,OAAO;AAAA,EACzC,MAAM,iBAAI,QAAQ,wBAAwB;AAAA,EAC1C,QAAQ,iBAAI,OAAO;AAAA,EACnB,SAAS,iBAAI,MAAM,wBAAwB;AAC7C,CAAC;AACD,IAAI,sCAAsC,iBAAI,mBAAmB,QAAQ;AAAA,EACvE,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,qBAAqB;AAAA,IACvC,QAAQ,iBAAI,OAAO;AAAA,IACnB,WAAW,iBAAI,OAAO;AAAA,IACtB,UAAU;AAAA,IACV,cAAc,iBAAI,OAAO,iBAAI,OAAO,GAAG,iBAAI,QAAQ,CAAC,EAAE,SAAS;AAAA,IAC/D,SAAS,iBAAI,OAAO,EAAE,SAAS;AAAA,IAC/B,UAAU,iBAAI,OAAO,EAAE,SAAS;AAAA,EAClC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,iBAAiB;AAAA,IACnC,UAAU;AAAA,IACV,eAAe,iBAAI,OAAO,EAAE,SAAS;AAAA,EACvC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,sBAAsB;AAAA,IACxC,QAAQ,iBAAI,OAAO;AAAA,IACnB,UAAU;AAAA,EACZ,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,sBAAsB;AAAA,IACxC,OAAO,iBAAI,QAAQ,EAAE,SAAS;AAAA,EAChC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,gBAAgB;AAAA,IAClC,WAAW,iBAAI,OAAO;AAAA,IACtB,QAAQ,iBAAI,OAAO;AAAA,EACrB,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,mBAAmB,GAAG,YAAY,iBAAI,OAAO,EAAE,CAAC;AAAA,EAC/E,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,2BAA2B;AAAA,IAC7C,YAAY,iBAAI,OAAO;AAAA,IACvB,aAAa,iBAAI,OAAO;AAAA,EAC1B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,oBAAoB;AAAA,IACtC,YAAY,iBAAI,OAAO;AAAA,IACvB,SAAS,iBAAI,QAAQ;AAAA,IACrB,eAAe,iBAAI,OAAO,EAAE,SAAS;AAAA,EACvC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,yBAAyB;AAAA,IAC3C,QAAQ,0BAA0B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS;AAAA,EAC/D,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,0BAA0B,EAAE,CAAC;AAAA,EAC5D,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,iBAAiB,GAAG,QAAQ,iBAAI,OAAO,GAAG,KAAK,iBAAI,OAAO,EAAE,SAAS,EAAE,CAAC;AAAA,EACvG,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,kBAAkB,GAAG,QAAQ,iBAAI,OAAO,EAAE,CAAC;AAAA,EAC1E,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,WAAW,GAAG,QAAQ,iBAAI,OAAO,GAAG,QAAQ,eAAe,CAAC;AAAA,EAC3F,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,eAAe;AAAA,IACjC,QAAQ,iBAAI,OAAO;AAAA,IACnB,WAAW,iBAAI,OAAO;AAAA,IACtB,UAAU;AAAA,IACV,UAAU,iBAAI,OAAO,EAAE,SAAS;AAAA,IAChC,gBAAgB,yBAAyB,SAAS;AAAA,IAClD,UAAU,iBAAI,MAAM,iBAAI,OAAO;AAAA,MAC7B,WAAW,iBAAI,OAAO;AAAA,MACtB,YAAY,iBAAI,OAAO;AAAA,MACvB,MAAM,iBAAI,OAAO;AAAA,MACjB,YAAY,iBAAI,OAAO;AAAA,IACzB,CAAC,CAAC,EAAE,SAAS;AAAA,EACf,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,qBAAqB;AAAA,IACvC,WAAW,iBAAI,OAAO;AAAA,IACtB,UAAU,iBAAI,OAAO;AAAA,IACrB,QAAQ,iBAAI,OAAO;AAAA,IACnB,QAAQ,iBAAI,OAAO,iBAAI,OAAO,GAAG,iBAAI,QAAQ,CAAC,EAAE,SAAS;AAAA,IACzD,QAAQ,iBAAI,OAAO,EAAE,SAAS;AAAA,EAChC,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,qBAAqB,GAAG,UAAU,iBAAI,OAAO,EAAE,CAAC;AAAA,EAC/E,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,mBAAmB;AAAA,IACrC,YAAY,iBAAI,OAAO;AAAA,IACvB,aAAa,iBAAI,OAAO;AAAA,EAC1B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,qBAAqB;AAAA,IACvC,YAAY,iBAAI,OAAO;AAAA,IACvB,aAAa,iBAAI,OAAO;AAAA,EAC1B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,kBAAkB;AAAA,IACpC,QAAQ,iBAAI,OAAO;AAAA,IACnB,QAAQ,iBAAI,OAAO;AAAA,IACnB,OAAO,iBAAI,OAAO;AAAA,IAClB,WAAW,iBAAI,OAAO;AAAA,EACxB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,mBAAmB;AAAA,IACrC,QAAQ,iBAAI,OAAO;AAAA,EACrB,CAAC;AAAA,EACD;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,iBAAiB;AAAA,IACnC,WAAW,iBAAI,OAAO;AAAA,IACtB,gBAAgB,iBAAI,OAAO;AAAA,IAC3B,YAAY,iBAAI,OAAO;AAAA,IACvB,SAAS,iBAAI,OAAO,EAAE,SAAS;AAAA,IAC/B,aAAa,iBAAI,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAChD,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,gBAAgB;AAAA,IAClC,UAAU,iBAAI,OAAO;AAAA,EACvB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,iBAAiB;AAAA,IACnC,cAAc,iBAAI,OAAO;AAAA,EAC3B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,kBAAkB;AAAA,IACpC,UAAU,iBAAI,OAAO;AAAA,EACvB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,aAAa;AAAA,IAC/B,QAAQ,iBAAI,OAAO;AAAA,IACnB,WAAW,iBAAI,OAAO;AAAA,IACtB,OAAO,iBAAI,OAAO;AAAA,IAClB,KAAK,iBAAI,OAAO;AAAA,IAChB,MAAM,iBAAI,KAAK,SAAS,EAAE,QAAQ,MAAM;AAAA,IACxC,YAAY,iBAAI,OAAO,EAAE,SAAS;AAAA,EACpC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,cAAc;AAAA,IAChC,QAAQ,iBAAI,OAAO;AAAA,EACrB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,mBAAmB;AAAA,IACrC,QAAQ,iBAAI,OAAO;AAAA,IACnB,OAAO,iBAAI,OAAO;AAAA,EACpB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,oBAAoB;AAAA,IACtC,YAAY,iBAAI,QAAQ,EAAE,SAAS;AAAA,IACnC,OAAO,iBAAI,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,IAC9C,qBAAqB,iBAAI,OAAO,EAAE,SAAS;AAAA,IAC3C,aAAa,iBAAI,OAAO,EAAE,SAAS;AAAA,EACrC,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,uBAAuB,UAAU,EAAE,eAAe,OAAO;AAAA,IAC1E,SAAS;AAAA,IACT,MAAM,CAAC,aAAa;AAAA,EACtB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,qBAAqB;AAAA,IACvC,KAAK,iBAAI,OAAO;AAAA,IAChB,OAAO,iBAAI,QAAQ;AAAA,EACrB,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,uBAAuB,EAAE,CAAC;AAAA,EACzD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,wBAAwB;AAAA,IAC1C,MAAM,iBAAI,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,IAC7C,KAAK,iBAAI,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACnC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,uBAAuB;AAAA,IACzC,QAAQ,iBAAI,OAAO;AAAA,IACnB,MAAM,iBAAI,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,IAClC,aAAa,iBAAI,OAAO,EAAE,SAAS;AAAA,EACrC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,gBAAgB;AAAA,IAClC,QAAQ,iBAAI,OAAO;AAAA,IACnB,YAAY;AAAA,EACd,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,oBAAoB,GAAG,QAAQ,iBAAI,OAAO,GAAG,WAAW,iBAAI,OAAO,EAAE,CAAC;AAAA,EACrG,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,mBAAmB,GAAG,QAAQ,iBAAI,OAAO,GAAG,WAAW,iBAAI,OAAO,EAAE,CAAC;AAAA,EACpG,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,2BAA2B;AAAA,IAC7C,QAAQ,iBAAI,OAAO;AAAA,IACnB,KAAK,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAAA,EAC7B,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,6BAA6B,GAAG,QAAQ,iBAAI,OAAO,EAAE,CAAC;AAAA,EACrF,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,oBAAoB,GAAG,QAAQ,iBAAI,OAAO,EAAE,CAAC;AAAA,EAC5E,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,qBAAqB,GAAG,QAAQ,iBAAI,OAAO,EAAE,CAAC;AAAA,EAC7E,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,4BAA4B,EAAE,CAAC;AAAA,EAC9D,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,eAAe;AAAA,IACjC,QAAQ,iBAAI,OAAO;AAAA,IACnB,UAAU,iBAAI,OAAO;AAAA,IACrB,WAAW,iBAAI,OAAO;AAAA,IACtB,OAAO,iBAAI,OAAO;AAAA,IAClB,kBAAkB,iBAAI,OAAO,EAAE,SAAS;AAAA,IACxC,MAAM,iBAAI,KAAK,CAAC,YAAY,MAAM,CAAC,EAAE,QAAQ,MAAM;AAAA,IACnD,WAAW,iBAAI,KAAK,CAAC,SAAS,iBAAiB,CAAC,EAAE,SAAS;AAAA,EAC7D,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,cAAc,GAAG,QAAQ,iBAAI,OAAO,EAAE,CAAC;AAAA,EACtE,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,eAAe,GAAG,SAAS,iBAAI,QAAQ,aAAa,EAAE,CAAC;AAAA,EACtF,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,yBAAyB,EAAE,CAAC;AAAA,EAC3D,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,iBAAiB;AAAA,IACnC,QAAQ,iBAAI,OAAO;AAAA,IACnB,cAAc,iBAAI,OAAO,EAAE,SAAS;AAAA,EACtC,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,eAAe,GAAG,QAAQ,iBAAI,OAAO,EAAE,CAAC;AAAA,EACvE,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,qBAAqB,GAAG,KAAK,iBAAI,OAAO,EAAE,CAAC;AAAA,EAC1E,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,kBAAkB,GAAG,QAAQ,iBAAI,OAAO,EAAE,CAAC;AAAA,EAC1E,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,gBAAgB;AAAA,IAClC,QAAQ,iBAAI,OAAO;AAAA,IACnB,OAAO;AAAA,EACT,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,sBAAsB,GAAG,QAAQ,iBAAI,OAAO,EAAE,CAAC;AAAA,EAC9E,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,kBAAkB;AAAA,IACpC,QAAQ,iBAAI,OAAO;AAAA,IACnB,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,EACnC,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,cAAc,GAAG,QAAQ,iBAAI,OAAO,EAAE,CAAC;AAAA,EACtE,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,gBAAgB,GAAG,QAAQ,iBAAI,OAAO,EAAE,CAAC;AAAA,EACxE,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,gBAAgB,GAAG,MAAM,iBAAI,OAAO,EAAE,CAAC;AAAA,EACtE,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,gBAAgB;AAAA,IAClC,WAAW,iBAAI,OAAO;AAAA,IACtB,MAAM,iBAAI,OAAO;AAAA,EACnB,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,gBAAgB,GAAG,WAAW,iBAAI,OAAO,EAAE,CAAC;AAAA,EAC3E,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,kBAAkB,GAAG,OAAO,iBAAI,MAAM,iBAAI,OAAO,CAAC,EAAE,CAAC;AAAA,EACpF,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,iBAAiB,GAAG,UAAU,qBAAqB,CAAC;AAAA,EACnF,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,iBAAiB;AAAA,IACnC,YAAY,iBAAI,OAAO;AAAA,IACvB,SAAS,qBAAqB,QAAQ;AAAA,EACxC,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,iBAAiB,GAAG,YAAY,iBAAI,OAAO,EAAE,CAAC;AAAA,EAC7E,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,gBAAgB,EAAE,CAAC;AAAA,EAClD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,kBAAkB,GAAG,YAAY,iBAAI,OAAO,EAAE,CAAC;AAAA,EAC9E,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,iBAAiB,GAAG,UAAU,yBAAyB,CAAC;AAAA,EACvF,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,iBAAiB;AAAA,IACnC,YAAY,iBAAI,OAAO;AAAA,IACvB,SAAS,yBAAyB,KAAK;AAAA,MACrC,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,IACT,CAAC,EAAE,QAAQ;AAAA,EACb,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,iBAAiB,GAAG,YAAY,iBAAI,OAAO,EAAE,CAAC;AAAA,EAC7E,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,gBAAgB,EAAE,CAAC;AAAA,EAClD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,2BAA2B,GAAG,YAAY,iBAAI,OAAO,EAAE,CAAC;AAAA,EACvF,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,2BAA2B,GAAG,YAAY,iBAAI,OAAO,EAAE,CAAC;AAAA,EACvF,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,4BAA4B,GAAG,YAAY,iBAAI,MAAM,iBAAI,OAAO,CAAC,EAAE,CAAC;AAAA,EACnG,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,yBAAyB;AAAA,IAC3C,QAAQ,iBAAI,OAAO;AAAA,IACnB,YAAY,iBAAI,OAAO;AAAA,EACzB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,wBAAwB;AAAA,IAC1C,QAAQ,iBAAI,OAAO;AAAA,IACnB,YAAY,iBAAI,OAAO;AAAA,EACzB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,uBAAuB;AAAA,IACzC,QAAQ,iBAAI,OAAO;AAAA,IACnB,QAAQ,iBAAI,OAAO;AAAA,IACnB,cAAc;AAAA,EAChB,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,WAAW,GAAG,QAAQ,iBAAI,OAAO,EAAE,CAAC;AAAA,EACnE,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,uBAAuB;AAAA,IACzC,QAAQ,iBAAI,OAAO;AAAA,IACnB,kBAAkB,iBAAI,OAAO;AAAA,EAC/B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,iBAAiB;AAAA,IACnC,QAAQ,iBAAI,OAAO;AAAA,IACnB,MAAM,iBAAI,OAAO;AAAA,MACf,IAAI,iBAAI,OAAO;AAAA,MACf,SAAS,iBAAI,OAAO;AAAA,MACpB,QAAQ,iBAAI,KAAK,CAAC,WAAW,eAAe,WAAW,CAAC;AAAA,MACxD,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,MACjC,aAAa,iBAAI,OAAO,EAAE,SAAS;AAAA,IACrC,CAAC;AAAA,EACH,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,mBAAmB;AAAA,IACrC,QAAQ,iBAAI,OAAO;AAAA,IACnB,QAAQ,iBAAI,OAAO;AAAA,IACnB,SAAS,iBAAI,OAAO;AAAA,EACtB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,mBAAmB;AAAA,IACrC,QAAQ,iBAAI,OAAO;AAAA,IACnB,QAAQ,iBAAI,OAAO;AAAA,IACnB,SAAS,iBAAI,OAAO;AAAA,IACpB,SAAS,iBAAI,OAAO;AAAA,MAClB,SAAS,iBAAI,OAAO,EAAE,SAAS;AAAA,MAC/B,QAAQ,iBAAI,KAAK,CAAC,WAAW,eAAe,WAAW,CAAC,EAAE,SAAS;AAAA,IACrE,CAAC;AAAA,EACH,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,kBAAkB;AAAA,IACpC,QAAQ,iBAAI,OAAO;AAAA,IACnB,QAAQ,iBAAI,OAAO;AAAA,IACnB,aAAa,iBAAI,OAAO;AAAA,IACxB,OAAO,iBAAI,OAAO;AAAA,IAClB,YAAY,iBAAI,OAAO;AAAA,IACvB,QAAQ,iBAAI,KAAK,CAAC,aAAa,cAAc,CAAC;AAAA,EAChD,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,qBAAqB;AAAA,IACvC,eAAe,iBAAI,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,QAAQ,EAAE;AAAA,EAClE,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,iBAAiB;AAAA,IACnC,OAAO;AAAA,EACT,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,aAAa,GAAG,WAAW,iBAAI,OAAO,EAAE,CAAC;AAAA,EACxE,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,YAAY,GAAG,IAAI,iBAAI,OAAO,GAAG,WAAW,iBAAI,OAAO,EAAE,CAAC;AAAA,EACzF,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,YAAY;AAAA,IAC9B,MAAM,iBAAI,OAAO;AAAA,IACjB,QAAQ;AAAA,IACR,WAAW,iBAAI,OAAO;AAAA,EACxB,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,cAAc,GAAG,IAAI,iBAAI,OAAO,GAAG,WAAW,iBAAI,OAAO,EAAE,CAAC;AAAA,EAC3F,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,kBAAkB,GAAG,WAAW,iBAAI,OAAO,EAAE,CAAC;AAAA,EAC7E,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,kBAAkB;AAAA,IACpC,QAAQ;AAAA,IACR,WAAW,iBAAI,OAAO;AAAA,EACxB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,oBAAoB;AAAA,IACtC,WAAW,iBAAI,OAAO;AAAA,IACtB,WAAW,iBAAI,MAAM,iBAAI,OAAO,CAAC,EAAE,SAAS;AAAA,EAC9C,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,sBAAsB;AAAA,IACxC,WAAW,iBAAI,OAAO;AAAA,IACtB,SAAS,iBAAI,MAAM,iBAAI,OAAO;AAAA,MAC5B,MAAM,iBAAI,OAAO;AAAA,MACjB,MAAM,iBAAI,OAAO;AAAA,MACjB,WAAW;AAAA,IACb,CAAC,CAAC;AAAA,EACJ,CAAC;AAAA,EACD;AAAA,EACA,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,cAAc;AAAA,IAChC,QAAQ,iBAAI,OAAO;AAAA,IACnB,KAAK,iBAAI,OAAO;AAAA,IAChB,YAAY,iBAAI,OAAO,EAAE,SAAS;AAAA,EACpC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,mBAAmB;AAAA,IACrC,WAAW,iBAAI,OAAO;AAAA,IACtB,SAAS,iBAAI,OAAO;AAAA,IACpB,YAAY,iBAAI,OAAO;AAAA,IACvB,kBAAkB,iBAAI,OAAO;AAAA,IAC7B,UAAU,iBAAI,OAAO;AAAA,IACrB,YAAY,iBAAI,OAAO;AAAA,IACvB,gBAAgB,iBAAI,OAAO;AAAA,IAC3B,SAAS,iBAAI,OAAO;AAAA,IACpB,aAAa,iBAAI,OAAO,EAAE,SAAS;AAAA,IACnC,iBAAiB,iBAAI,QAAQ;AAAA,IAC7B,WAAW,iBAAI,MAAM,iBAAI,OAAO;AAAA,MAC9B,IAAI,iBAAI,OAAO;AAAA,MACf,OAAO,iBAAI,OAAO;AAAA,MAClB,YAAY,iBAAI,OAAO;AAAA,IACzB,CAAC,CAAC,EAAE,SAAS;AAAA,IACb,QAAQ,iBAAI,MAAM,iBAAI,OAAO,CAAC,EAAE,SAAS;AAAA,EAC3C,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,kBAAkB;AAAA,IACpC,QAAQ,iBAAI,OAAO;AAAA,IACnB,gBAAgB,iBAAI,OAAO;AAAA,IAC3B,MAAM,iBAAI,KAAK,CAAC,QAAQ,WAAW,CAAC;AAAA,EACtC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,sBAAsB;AAAA,IACxC,KAAK,iBAAI,OAAO;AAAA,EAClB,CAAC;AAAA,EACD;AACF,CAAC;AACD,IAAI,wBAAwB,iBAAI,OAAO;AAAA,EACrC,aAAa,iBAAI,OAAO;AAAA,EACxB,UAAU,iBAAI,OAAO,EAAE,SAAS;AAAA,EAChC,WAAW,iBAAI,OAAO;AACxB,CAAC;AACD,IAAI,sBAAsB,iBAAI,OAAO;AAAA,EACnC,QAAQ,iBAAI,KAAK,CAAC,WAAW,mBAAmB,UAAU,CAAC;AAAA,EAC3D,UAAU,iBAAI,OAAO,EAAE,SAAS;AAAA,EAChC,eAAe,iBAAI,KAAK,CAAC,aAAa,aAAa,kBAAkB,oBAAoB,SAAS,CAAC,EAAE,SAAS;AAAA,EAC9G,aAAa,iBAAI,OAAO,EAAE,SAAS;AAAA,EACnC,eAAe,iBAAI,KAAK,CAAC,WAAW,mBAAmB,UAAU,CAAC,EAAE,SAAS;AAAA,EAC7E,iBAAiB,iBAAI,OAAO,EAAE,SAAS;AAAA,EACvC,uBAAuB,iBAAI,KAAK;AAAA,IAC9B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC,EAAE,SAAS;AAAA,EACZ,gBAAgB,iBAAI,QAAQ,EAAE,SAAS;AAAA,EACvC,oBAAoB,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC1C,UAAU,iBAAI,OAAO;AAAA,IACnB,WAAW,sBAAsB,SAAS;AAAA,IAC1C,WAAW,sBAAsB,SAAS;AAAA,IAC1C,gBAAgB,sBAAsB,SAAS;AAAA,IAC/C,kBAAkB,sBAAsB,SAAS;AAAA,EACnD,CAAC,EAAE,SAAS;AAAA,EACZ,kBAAkB,iBAAI,OAAO,EAAE,SAAS;AAAA,EACxC,uBAAuB,iBAAI,OAAO,EAAE,SAAS;AAC/C,CAAC;AACD,IAAI,sCAAsC,iBAAI,mBAAmB,QAAQ;AAAA,EACvE,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,oBAAoB,EAAE,CAAC,EAAE,MAAM,8BAA8B;AAAA,EAC5F,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,qBAAqB;AAAA,IACvC,QAAQ,iBAAI,OAAO;AAAA,IACnB,WAAW,iBAAI,OAAO;AAAA,IACtB,UAAU;AAAA,IACV,UAAU,iBAAI,OAAO,EAAE,SAAS;AAAA,EAClC,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,cAAc,GAAG,cAAc,0BAA0B,CAAC;AAAA,EACzF,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,iBAAiB;AAAA,IACnC,YAAY,iBAAI,OAAO;AAAA,IACvB,MAAM;AAAA,IACN,WAAW,iBAAI,OAAO;AAAA,EACxB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,cAAc;AAAA,IAChC,UAAU;AAAA,IACV,QAAQ,iBAAI,OAAO,EAAE,SAAS;AAAA,IAC9B,eAAe,iBAAI,OAAO,EAAE,SAAS;AAAA,EACvC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,sBAAsB;AAAA,IACxC,WAAW,iBAAI,OAAO;AAAA,IACtB,MAAM,iBAAI,OAAO;AAAA,IACjB,QAAQ;AAAA,EACV,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,yBAAyB;AAAA,IAC3C,QAAQ,iBAAI,OAAO;AAAA,IACnB,cAAc,iBAAI,OAAO,EAAE,SAAS;AAAA,IACpC,WAAW,iBAAI,OAAO;AAAA,IACtB,QAAQ;AAAA,IACR,aAAa,iBAAI,OAAO;AAAA,IACxB,SAAS,iBAAI,OAAO,EAAE,SAAS;AAAA,IAC/B,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,IACjC,QAAQ,iBAAI,OAAO,EAAE,SAAS;AAAA,IAC9B,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,IACjC,UAAU,iBAAI,OAAO,EAAE,SAAS;AAAA,IAChC,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,IACjC,OAAO,oBAAoB,SAAS;AAAA,IACpC,cAAc,iBAAI,OAAO,EAAE,SAAS;AAAA,EACtC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,OAAO;AAAA,IACzB,OAAO,iBAAI,OAAO;AAAA,IAClB,YAAY,iBAAI,OAAO,EAAE,SAAS;AAAA,EACpC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,qBAAqB;AAAA,IACvC,YAAY,iBAAI,OAAO;AAAA,IACvB,cAAc,iBAAI,OAAO;AAAA,IACzB,WAAW,iBAAI,OAAO;AAAA,EACxB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,mBAAmB;AAAA,IACrC,SAAS,iBAAI,MAAM,iBAAI,OAAO;AAAA,MAC5B,MAAM,iBAAI,OAAO;AAAA,MACjB,QAAQ,iBAAI,KAAK,CAAC,aAAa,UAAU,cAAc,cAAc,UAAU,CAAC;AAAA,MAChF,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,MAC7B,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,MACjC,YAAY,iBAAI,OAAO,EAAE,MAAM,iBAAI,OAAO,GAAG,SAAS,iBAAI,OAAO,EAAE,CAAC,EAAE,SAAS;AAAA,IACjF,CAAC,CAAC;AAAA,EACJ,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,wBAAwB;AAAA,IAC1C,WAAW,iBAAI,OAAO;AAAA,IACtB,QAAQ;AAAA,IACR,UAAU,iBAAI,OAAO,EAAE,SAAS;AAAA,IAChC,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC/B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,yBAAyB;AAAA,IAC3C,SAAS,iBAAI,QAAQ;AAAA,IACrB,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC/B,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,UAAU,GAAG,MAAM,qBAAqB,CAAC;AAAA,EACxE,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,kBAAkB;AAAA,IACpC,QAAQ,iBAAI,OAAO;AAAA,IACnB,QAAQ,iBAAI,OAAO;AAAA,IACnB,SAAS,iBAAI,QAAQ;AAAA,IACrB,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC/B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,eAAe;AAAA,IACjC,QAAQ,iBAAI,OAAO;AAAA,IACnB,WAAW,iBAAI,OAAO;AAAA,IACtB,UAAU,iBAAI,OAAO;AAAA,IACrB,WAAW,iBAAI,OAAO;AAAA,IACtB,UAAU,iBAAI,OAAO;AAAA,IACrB,gBAAgB,iBAAI,MAAM,iBAAI,OAAO;AAAA,MACnC,MAAM,iBAAI,OAAO;AAAA,MACjB,QAAQ,iBAAI,OAAO;AAAA,IACrB,CAAC,CAAC,EAAE,SAAS;AAAA,IACb,YAAY,iBAAI,QAAQ,EAAE,SAAS;AAAA,IACnC,UAAU,iBAAI,QAAQ,EAAE,SAAS;AAAA,EACnC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,2BAA2B;AAAA,IAC7C,QAAQ,iBAAI,OAAO;AAAA,IACnB,WAAW,iBAAI,OAAO;AAAA,EACxB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,gBAAgB;AAAA,IAClC,OAAO,iBAAI,MAAM,kBAAkB;AAAA,IACnC,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,EACnC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,oBAAoB;AAAA,IACtC,MAAM,iBAAI,OAAO,EAAE,SAAS;AAAA,IAC5B,KAAK,iBAAI,OAAO,EAAE,SAAS;AAAA,IAC3B,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,EACnC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,aAAa;AAAA,IAC/B,QAAQ,iBAAI,OAAO,EAAE,SAAS;AAAA,EAChC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,sBAAsB;AAAA,IACxC,WAAW,iBAAI,OAAO;AAAA,IACtB,MAAM,iBAAI,QAAQ,EAAE,SAAS;AAAA,IAC7B,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC/B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,oBAAoB;AAAA,IACtC,UAAU,iBAAI,OAAO;AAAA,IACrB,QAAQ,iBAAI,KAAK,CAAC,YAAY,QAAQ,OAAO,CAAC;AAAA,IAC9C,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC/B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,mBAAmB;AAAA,IACrC,QAAQ,iBAAI,OAAO;AAAA,IACnB,YAAY,iBAAI,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,IAC3C,MAAM,iBAAI,MAAM;AAAA,MACd,iBAAI,KAAK;AAAA,MACT,iBAAI,OAAO;AAAA,QACT,QAAQ,iBAAI,OAAO;AAAA,QACnB,SAAS,iBAAI,OAAO;AAAA,QACpB,MAAM;AAAA,QACN,cAAc,iBAAI,MAAM,iBAAI,OAAO;AAAA,UACjC,QAAQ,iBAAI,OAAO;AAAA,UACnB,UAAU,iBAAI,OAAO;AAAA,UACrB,WAAW,iBAAI,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,UAC5C,MAAM;AAAA,UACN,cAAc,iBAAI,OAAO;AAAA,UACzB,OAAO,iBAAI,QAAQ;AAAA,QACrB,CAAC,CAAC;AAAA,QACF,WAAW,iBAAI,OAAO;AAAA,MACxB,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AAAA,EACD;AAAA,EACA;AAAA,EACA,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,wBAAwB;AAAA,IAC1C,OAAO;AAAA,EACT,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,2BAA2B;AAAA,IAC7C,WAAW,iBAAI,OAAO;AAAA,IACtB,QAAQ,iBAAI,OAAO;AAAA,IACnB,SAAS,iBAAI,OAAO;AAAA,IACpB,YAAY,iBAAI,OAAO;AAAA,IACvB,UAAU,iBAAI,OAAO;AAAA,IACrB,YAAY,iBAAI,OAAO;AAAA,IACvB,cAAc,iBAAI,OAAO;AAAA,IACzB,aAAa,iBAAI,OAAO;AAAA,EAC1B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,eAAe;AAAA,IACjC,UAAU,iBAAI,OAAO;AAAA,IACrB,WAAW,iBAAI,MAAM,iBAAI,OAAO;AAAA,MAC9B,MAAM,iBAAI,OAAO;AAAA,MACjB,QAAQ,iBAAI,OAAO;AAAA,MACnB,gBAAgB,iBAAI,QAAQ;AAAA,IAC9B,CAAC,CAAC;AAAA,EACJ,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,kBAAkB;AAAA,IACpC,cAAc,iBAAI,OAAO;AAAA,EAC3B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,gBAAgB;AAAA,IAClC,UAAU,iBAAI,OAAO;AAAA,IACrB,aAAa,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAAA,EACrC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,qBAAqB;AAAA,IACvC,OAAO,iBAAI,OAAO,iBAAI,OAAO,GAAG,gBAAgB;AAAA,IAChD,SAAS,iBAAI,OAAO;AAAA,IACpB,SAAS,iBAAI,QAAQ,EAAE,SAAS;AAAA,IAChC,YAAY,iBAAI,OAAO,EAAE,SAAS;AAAA,IAClC,cAAc,iBAAI,OAAO,EAAE,SAAS;AAAA,IACpC,YAAY,iBAAI,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AAAA,EACxD,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,mBAAmB;AAAA,IACrC,QAAQ,iBAAI,OAAO;AAAA,IACnB,MAAM;AAAA,IACN,SAAS,iBAAI,OAAO;AAAA,EACtB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,sBAAsB;AAAA,IACxC,QAAQ,iBAAI,OAAO;AAAA,IACnB,QAAQ,iBAAI,OAAO;AAAA,MACjB,QAAQ,iBAAI,OAAO;AAAA,MACnB,eAAe,yBAAyB,SAAS;AAAA,MACjD,gBAAgB,0BAA0B,SAAS;AAAA,MACnD,mBAAmB,oBAAoB,SAAS;AAAA,MAChD,eAAe,iBAAI,OAAO,iBAAI,OAAO,GAAG,kBAAkB,EAAE,SAAS;AAAA,MACrE,iBAAiB,iBAAI,OAAO,iBAAI,OAAO,GAAG,oBAAoB,EAAE,SAAS;AAAA,MACzE,aAAa,kBAAkB,SAAS;AAAA,MACxC,cAAc,iBAAI,OAAO,iBAAI,OAAO,GAAG,iBAAiB,EAAE,SAAS;AAAA,MACnE,sBAAsB,iBAAI,MAAM,iBAAI,OAAO,CAAC,EAAE,SAAS;AAAA,MACvD,kBAAkB,uBAAuB,SAAS;AAAA,IACpD,CAAC;AAAA,EACH,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,cAAc;AAAA,IAChC,QAAQ,iBAAI,OAAO;AAAA,IACnB,SAAS,iBAAI,OAAO;AAAA,EACtB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,oBAAoB;AAAA,IACtC,SAAS,iBAAI,OAAO;AAAA,IACpB,YAAY,iBAAI,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EAC7C,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,eAAe;AAAA,IACjC,QAAQ,iBAAI,OAAO;AAAA,IACnB,QAAQ,iBAAI,OAAO;AAAA,EACrB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,wBAAwB;AAAA,IAC1C,UAAU;AAAA,EACZ,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,uBAAuB;AAAA,IACzC,UAAU;AAAA,EACZ,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,mBAAmB;AAAA,IACrC,UAAU,iBAAI,MAAM,aAAa;AAAA,EACnC,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,iBAAiB,GAAG,SAAS,cAAc,CAAC;AAAA,EAC3E,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,iBAAiB,GAAG,WAAW,iBAAI,OAAO,EAAE,CAAC;AAAA,EAC5E,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,qBAAqB;AAAA,IACvC,QAAQ,iBAAI,OAAO;AAAA,IACnB,aAAa,iBAAI,OAAO,iBAAI,OAAO,GAAG,mBAAmB;AAAA,IACzD,cAAc,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAAA,IACpC,cAAc,iBAAI,MAAM,oBAAoB;AAAA,EAC9C,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,kBAAkB;AAAA,IACpC,QAAQ,iBAAI,OAAO;AAAA,IACnB,YAAY;AAAA,EACd,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,oBAAoB;AAAA,IACtC,QAAQ,iBAAI,OAAO;AAAA,IACnB,WAAW,iBAAI,OAAO;AAAA,IACtB,YAAY;AAAA,EACd,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,qBAAqB;AAAA,IACvC,QAAQ,iBAAI,OAAO;AAAA,IACnB,WAAW,iBAAI,OAAO;AAAA,IACtB,YAAY,iBAAI,OAAO;AAAA,EACzB,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,oBAAoB,GAAG,QAAQ,iBAAI,OAAO,GAAG,WAAW,iBAAI,OAAO,EAAE,CAAC;AAAA,EACrG,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,sBAAsB;AAAA,IACxC,QAAQ,iBAAI,OAAO;AAAA,IACnB,KAAK,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAAA,EAC7B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,0BAA0B;AAAA,IAC5C,QAAQ,iBAAI,OAAO;AAAA,IACnB,SAAS;AAAA,EACX,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,uBAAuB;AAAA,IACzC,SAAS,iBAAI,MAAM,iBAAI,OAAO;AAAA,MAC5B,IAAI,iBAAI,OAAO;AAAA,MACf,OAAO,iBAAI,OAAO;AAAA,MAClB,MAAM,iBAAI,OAAO;AAAA,MACjB,UAAU,iBAAI,OAAO;AAAA,MACrB,wBAAwB,iBAAI,OAAO,EAAE,SAAS;AAAA,IAChD,CAAC,CAAC;AAAA,EACJ,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,qBAAqB;AAAA,IACvC,UAAU,iBAAI,OAAO;AAAA,IACrB,OAAO,iBAAI,OAAO;AAAA,IAClB,MAAM,iBAAI,OAAO,EAAE,SAAS;AAAA,IAC5B,OAAO,iBAAI,KAAK,CAAC,QAAQ,WAAW,OAAO,CAAC,EAAE,QAAQ,MAAM;AAAA,EAC9D,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,qBAAqB;AAAA,IACvC,UAAU,iBAAI,OAAO;AAAA,IACrB,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC/B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,aAAa;AAAA,IAC/B,UAAU,iBAAI,OAAO;AAAA,IACrB,QAAQ,iBAAI,OAAO,EAAE,SAAS;AAAA,IAC9B,MAAM,iBAAI,QAAQ;AAAA,EACpB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,gBAAgB;AAAA,IAClC,QAAQ,iBAAI,OAAO;AAAA,IACnB,QAAQ;AAAA,EACV,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,aAAa;AAAA,IAC/B,QAAQ,iBAAI,OAAO;AAAA,IACnB,SAAS,iBAAI,MAAM,oBAAoB;AAAA,EACzC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,qBAAqB;AAAA,IACvC,QAAQ,iBAAI,OAAO;AAAA,IACnB,UAAU,iBAAI,OAAO;AAAA,IACrB,QAAQ;AAAA,IACR,YAAY,iBAAI,OAAO,EAAE,SAAS;AAAA,EACpC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,0BAA0B;AAAA,IAC5C,YAAY,iBAAI,OAAO;AAAA,IACvB,aAAa,iBAAI,OAAO;AAAA,IACxB,QAAQ,iBAAI,KAAK,CAAC,cAAc,aAAa,OAAO,CAAC;AAAA,IACrD,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC/B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,4BAA4B;AAAA,IAC9C,YAAY,iBAAI,OAAO;AAAA,IACvB,aAAa,iBAAI,OAAO;AAAA,IACxB,QAAQ,iBAAI,KAAK,CAAC,gBAAgB,eAAe,OAAO,CAAC;AAAA,IACzD,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC/B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,sBAAsB;AAAA,IACxC,SAAS,iBAAI,QAAQ,aAAa;AAAA,IAClC,QAAQ;AAAA,IACR,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC/B,CAAC;AAAA,EACD;AAAA,EACA,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,mBAAmB;AAAA,IACrC,QAAQ,iBAAI,OAAO;AAAA,IACnB,QAAQ,iBAAI,KAAK,CAAC,WAAW,aAAa,OAAO,CAAC;AAAA,IAClD,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,IACjC,SAAS,iBAAI,OAAO,EAAE,SAAS;AAAA,IAC/B,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,IAC7B,OAAO,sBAAsB,SAAS;AAAA,EACxC,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,iBAAiB,GAAG,QAAQ,iBAAI,OAAO,EAAE,CAAC;AAAA,EACzE,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,eAAe,GAAG,WAAW,iBAAI,MAAM,oBAAoB,EAAE,CAAC;AAAA,EAC7F,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,kBAAkB,GAAG,UAAU,qBAAqB,CAAC;AAAA,EACpF,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,kBAAkB,GAAG,YAAY,iBAAI,OAAO,EAAE,CAAC;AAAA,EAC9E,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,gBAAgB;AAAA,IAClC,YAAY,iBAAI,OAAO;AAAA,IACvB,QAAQ,iBAAI,OAAO;AAAA,IACnB,SAAS,iBAAI,OAAO;AAAA,EACtB,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,eAAe,GAAG,WAAW,iBAAI,MAAM,wBAAwB,EAAE,CAAC;AAAA,EACjG,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,kBAAkB,GAAG,UAAU,yBAAyB,CAAC;AAAA,EACxF,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,kBAAkB,GAAG,YAAY,iBAAI,OAAO,EAAE,CAAC;AAAA,EAC9E,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,kBAAkB;AAAA,IACpC,QAAQ,iBAAI,OAAO;AAAA,IACnB,YAAY,iBAAI,OAAO,EAAE,SAAS;AAAA,IAClC,iBAAiB,iBAAI,OAAO;AAAA,MAC1B,YAAY,iBAAI,OAAO;AAAA,MACvB,OAAO,iBAAI,MAAM,iBAAI,OAAO,EAAE,IAAI,iBAAI,OAAO,GAAG,SAAS,iBAAI,OAAO,GAAG,MAAM,iBAAI,MAAM,iBAAI,OAAO,CAAC,EAAE,CAAC,CAAC;AAAA,IACzG,CAAC,EAAE,SAAS;AAAA,EACd,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,gBAAgB;AAAA,IAClC,QAAQ,iBAAI,OAAO;AAAA,IACnB,UAAU,iBAAI,OAAO;AAAA,IACrB,QAAQ,iBAAI,OAAO;AAAA,IACnB,QAAQ,iBAAI,OAAO;AAAA,IACnB,MAAM,iBAAI,OAAO;AAAA,IACjB,WAAW,iBAAI,OAAO;AAAA,EACxB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,aAAa;AAAA,IAC/B,QAAQ,iBAAI,OAAO;AAAA,IACnB,UAAU;AAAA,IACV,UAAU,iBAAI,OAAO,EAAE,SAAS;AAAA,IAChC,UAAU,iBAAI,OAAO;AAAA,EACvB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,YAAY;AAAA,IAC9B,QAAQ,iBAAI,OAAO;AAAA,IACnB,OAAO,iBAAI,OAAO;AAAA,IAClB,WAAW;AAAA,IACX,SAAS,uBAAuB,SAAS;AAAA,EAC3C,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,aAAa;AAAA,IAC/B,OAAO,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAAA,IAC7B,WAAW,iBAAI,QAAQ;AAAA,EACzB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,gBAAgB;AAAA,IAClC,OAAO,iBAAI,OAAO,iBAAI,OAAO,GAAG,sBAAsB;AAAA,EACxD,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,gBAAgB;AAAA,IAClC,QAAQ,iBAAI,OAAO;AAAA,IACnB,QAAQ,iBAAI,OAAO;AAAA,IACnB,UAAU,iBAAI,OAAO;AAAA,IACrB,UAAU,iBAAI,OAAO,EAAE,SAAS;AAAA,IAChC,WAAW,iBAAI,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IAC5C,MAAM,iBAAiB,SAAS;AAAA,IAChC,QAAQ,iBAAI,KAAK,CAAC,UAAU,QAAQ,cAAc,SAAS,CAAC,EAAE,SAAS;AAAA,IACvE,UAAU,iBAAI,OAAO,EAAE,QAAQ,iBAAI,OAAO,GAAG,SAAS,iBAAI,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,IAC1F,QAAQ,iBAAI,OAAO,EAAE,QAAQ,iBAAI,OAAO,GAAG,SAAS,iBAAI,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,IACxF,SAAS,iBAAI,QAAQ,EAAE,SAAS;AAAA,IAChC,UAAU,iBAAI,OAAO;AAAA,EACvB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,aAAa;AAAA,IAC/B,QAAQ,iBAAI,OAAO;AAAA,IACnB,MAAM,iBAAI,OAAO;AAAA,IACjB,SAAS;AAAA,IACT,OAAO,iBAAI,OAAO;AAAA,IAClB,SAAS,iBAAI,OAAO;AAAA,EACtB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,mBAAmB;AAAA,IACrC,QAAQ,iBAAI,OAAO;AAAA,IACnB,OAAO,iBAAI,MAAM,iBAAI,OAAO;AAAA,MAC1B,MAAM,iBAAI,OAAO;AAAA,MACjB,SAAS;AAAA,MACT,OAAO,iBAAI,OAAO;AAAA,MAClB,SAAS,iBAAI,OAAO;AAAA,IACtB,CAAC,CAAC;AAAA,EACJ,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,YAAY;AAAA,IAC9B,WAAW,iBAAI,OAAO;AAAA,IACtB,QAAQ,iBAAI,MAAM,iBAAI,OAAO;AAAA,MAC3B,IAAI,iBAAI,OAAO;AAAA,MACf,MAAM,iBAAI,OAAO;AAAA,MACjB,WAAW;AAAA,MACX,QAAQ,iBAAI,OAAO;AAAA,MACnB,WAAW,iBAAI,OAAO;AAAA,IACxB,CAAC,CAAC;AAAA,IACF,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC/B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,eAAe;AAAA,IACjC,WAAW,iBAAI,OAAO;AAAA,IACtB,IAAI,iBAAI,OAAO;AAAA,IACf,MAAM,iBAAI,OAAO;AAAA,IACjB,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC/B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,aAAa;AAAA,IAC/B,WAAW,iBAAI,OAAO;AAAA,IACtB,IAAI,iBAAI,OAAO;AAAA,IACf,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC/B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,eAAe;AAAA,IACjC,WAAW,iBAAI,OAAO;AAAA,IACtB,IAAI,iBAAI,OAAO;AAAA,IACf,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC/B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,cAAc;AAAA,IAChC,WAAW,iBAAI,OAAO;AAAA,IACtB,QAAQ;AAAA,IACR,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC/B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,sBAAsB;AAAA,IACxC,QAAQ;AAAA,EACV,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,qBAAqB;AAAA,IACvC,WAAW,iBAAI,OAAO;AAAA,IACtB,QAAQ,iBAAI,MAAM,sBAAsB;AAAA,IACxC,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC/B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,wBAAwB;AAAA,IAC1C,WAAW,iBAAI,OAAO;AAAA,IACtB,KAAK,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAAA,IAC3B,UAAU,iBAAI,MAAM,iBAAI,OAAO;AAAA,MAC7B,MAAM,iBAAI,OAAO;AAAA,MACjB,MAAM,iBAAI,OAAO;AAAA,MACjB,OAAO,iBAAI,OAAO;AAAA,IACpB,CAAC,CAAC;AAAA,IACF,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC/B,CAAC;AAAA,EACD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,uBAAuB;AAAA,IACzC,QAAQ,iBAAI,OAAO;AAAA,IACnB,eAAe,iBAAI,OAAO,iBAAI,OAAO,GAAG,kBAAkB;AAAA,EAC5D,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,oBAAoB;AAAA,IACtC,QAAQ,iBAAI,OAAO;AAAA,IACnB,cAAc;AAAA,EAChB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,sBAAsB;AAAA,IACxC,QAAQ,iBAAI,OAAO;AAAA,IACnB,cAAc;AAAA,EAChB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,uBAAuB;AAAA,IACzC,QAAQ,iBAAI,OAAO;AAAA,IACnB,gBAAgB,iBAAI,OAAO;AAAA,IAC3B,YAAY,iBAAI,OAAO;AAAA,IACvB,YAAY,iBAAI,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC/C,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,sBAAsB;AAAA,IACxC,KAAK,iBAAI,OAAO;AAAA,IAChB,SAAS,iBAAI,OAAO,EAAE,SAAS;AAAA,IAC/B,cAAc,iBAAI,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EAC/C,CAAC;AACH,CAAC;AACD,IAAI,sBAAsB;AAC1B,IAAI,uBAAuB;AAC3B,IAAI,uBAAuB;AAC3B,IAAI,kBAAkB;AACtB,IAAI,aAAa;AACjB,SAAS,mBAAmB,QAAQ;AAClC,SAAO,GAAG,mBAAmB,GAAG,MAAM;AACxC;AASA,SAAS,uBAAuB,OAAO;AACrC,MAAI,CAAC,MAAM,WAAW,oBAAoB;AACxC,WAAO;AACT,SAAO,MAAM,MAAM,qBAAqB,MAAM;AAChD;AAIA,SAAS,cAAc,OAAO;AAC5B,MAAI,CAAC,MAAM,WAAW,UAAU;AAC9B,WAAO;AACT,SAAO,MAAM,MAAM,WAAW,MAAM;AACtC;AASA,IAAI,iBAAiB;AAIrB,SAAS,iBAAiB,OAAO;AAC/B,MAAI,CAAC,MAAM,WAAW,cAAc;AAClC,WAAO;AACT,SAAO,MAAM,MAAM,eAAe,MAAM;AAC1C;AACA,IAAI,kBAAkB,iBAAI,OAAO;AAAA,EAC/B,MAAM,iBAAI,OAAO;AAAA,EACjB,MAAM,iBAAI,KAAK,CAAC,QAAQ,WAAW,CAAC;AACtC,CAAC;AACD,IAAI,iBAAiB,iBAAI,OAAO;AAAA,EAC9B,MAAM,iBAAI,KAAK,CAAC,QAAQ,WAAW,CAAC;AAAA,EACpC,MAAM,iBAAI,OAAO;AAAA,EACjB,OAAO,iBAAI,OAAO;AAAA,EAClB,OAAO,iBAAI,OAAO;AACpB,CAAC;AACD,IAAI,sBAAsB,iBAAI,KAAK;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAI,uBAAuB,iBAAI,OAAO;AAAA,EACpC,MAAM,iBAAI,OAAO;AAAA,EACjB,QAAQ;AAAA,EACR,QAAQ,iBAAI,QAAQ;AACtB,CAAC;AACD,IAAI,kBAAkB,iBAAI,OAAO;AAAA,EAC/B,eAAe,iBAAI,OAAO;AAAA,EAC1B,aAAa,iBAAI,OAAO;AAAA,EACxB,eAAe,iBAAI,OAAO;AAAA,EAC1B,aAAa,iBAAI,OAAO;AAC1B,CAAC;AACD,IAAI,+BAA+B,iBAAI,mBAAmB,QAAQ;AAAA,EAChE,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,WAAW;AAAA,IAC7B,WAAW,iBAAI,OAAO;AAAA,IACtB,MAAM,iBAAI,OAAO;AAAA,IACjB,UAAU,iBAAI,QAAQ,EAAE,SAAS;AAAA,EACnC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,YAAY;AAAA,IAC9B,WAAW,iBAAI,OAAO;AAAA,IACtB,MAAM,iBAAI,OAAO;AAAA,IACjB,SAAS,iBAAI,OAAO;AAAA,EACtB,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,SAAS,GAAG,WAAW,iBAAI,OAAO,GAAG,MAAM,iBAAI,OAAO,EAAE,CAAC;AAAA,EACxF,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,MAAM;AAAA,IACxB,WAAW,iBAAI,OAAO;AAAA,IACtB,MAAM,iBAAI,OAAO;AAAA,IACjB,UAAU,iBAAI,QAAQ,EAAE,SAAS;AAAA,EACnC,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,YAAY,GAAG,WAAW,iBAAI,OAAO,EAAE,CAAC;AAAA,EACvE,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,eAAe;AAAA,IACjC,WAAW,iBAAI,OAAO;AAAA,IACtB,MAAM,iBAAI,OAAO;AAAA,IACjB,QAAQ,iBAAI,QAAQ,EAAE,SAAS;AAAA,EACjC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,iBAAiB;AAAA,IACnC,WAAW,iBAAI,OAAO;AAAA,IACtB,MAAM,iBAAI,OAAO;AAAA,IACjB,MAAM;AAAA,IACN,iBAAiB,iBAAI,OAAO;AAAA,EAC9B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,mBAAmB;AAAA,IACrC,WAAW,iBAAI,OAAO;AAAA,IACtB,MAAM,iBAAI,OAAO;AAAA,IACjB,MAAM;AAAA,IACN,iBAAiB,iBAAI,OAAO;AAAA,EAC9B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,gBAAgB;AAAA,IAClC,WAAW,iBAAI,OAAO;AAAA,IACtB,MAAM,iBAAI,OAAO;AAAA,EACnB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,kBAAkB;AAAA,IACpC,WAAW,iBAAI,OAAO;AAAA,IACtB,MAAM,iBAAI,OAAO;AAAA,EACnB,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,SAAS,GAAG,WAAW,iBAAI,OAAO,GAAG,MAAM,iBAAI,OAAO,EAAE,CAAC;AAAA,EACxF,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,eAAe;AAAA,IACjC,WAAW,iBAAI,OAAO;AAAA,IACtB,QAAQ,iBAAI,OAAO;AAAA,IACnB,WAAW,iBAAI,OAAO;AAAA,EACxB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,oBAAoB;AAAA,IACtC,WAAW,iBAAI,OAAO;AAAA,IACtB,QAAQ,iBAAI,OAAO;AAAA,IACnB,WAAW,iBAAI,OAAO;AAAA,IACtB,MAAM,iBAAI,OAAO;AAAA,EACnB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,iBAAiB;AAAA,IACnC,WAAW,iBAAI,OAAO;AAAA,IACtB,QAAQ,iBAAI,OAAO;AAAA,IACnB,WAAW,iBAAI,OAAO;AAAA,IACtB,MAAM,iBAAI,KAAK,CAAC,UAAU,UAAU,CAAC,EAAE,QAAQ,QAAQ;AAAA,IACvD,UAAU,iBAAI,OAAO,EAAE,SAAS;AAAA,EAClC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,kBAAkB;AAAA,IACpC,WAAW,iBAAI,OAAO;AAAA,IACtB,MAAM,iBAAI,OAAO;AAAA,EACnB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,cAAc;AAAA,IAChC,WAAW,iBAAI,OAAO;AAAA,EACxB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,UAAU;AAAA,IAC5B,WAAW,iBAAI,OAAO;AAAA,IACtB,SAAS,iBAAI,OAAO;AAAA,IACpB,eAAe,iBAAI,QAAQ,EAAE,SAAS;AAAA,IACtC,OAAO,iBAAI,QAAQ,EAAE,SAAS;AAAA,IAC9B,YAAY,iBAAI,OAAO,EAAE,SAAS;AAAA,EACpC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,uBAAuB;AAAA,IACzC,WAAW,iBAAI,OAAO;AAAA,IACtB,SAAS,iBAAI,OAAO,EAAE,SAAS;AAAA,EACjC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,sBAAsB;AAAA,IACxC,WAAW,iBAAI,OAAO;AAAA,IACtB,MAAM,iBAAI,OAAO;AAAA,IACjB,WAAW,iBAAI,OAAO;AAAA,EACxB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,yBAAyB;AAAA,IAC3C,WAAW,iBAAI,OAAO;AAAA,IACtB,SAAS,iBAAI,OAAO;AAAA,IACpB,OAAO,iBAAI,OAAO;AAAA,IAClB,WAAW,iBAAI,QAAQ,EAAE,QAAQ,IAAI;AAAA,IACrC,gBAAgB,iBAAI,QAAQ,EAAE,QAAQ,KAAK;AAAA,EAC7C,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,wBAAwB;AAAA,IAC1C,WAAW,iBAAI,OAAO;AAAA,IACtB,MAAM,iBAAI,OAAO;AAAA,IACjB,SAAS,iBAAI,OAAO;AAAA,IACpB,OAAO,iBAAI,OAAO;AAAA,EACpB,CAAC;AACH,CAAC;AACD,IAAI,mBAAmB,iBAAI,OAAO;AAAA,EAChC,MAAM,iBAAI,OAAO;AAAA,EACjB,YAAY,iBAAI,KAAK,CAAC,UAAU,UAAU,QAAQ,CAAC;AACrD,CAAC;AACD,IAAI,8BAA8B,iBAAI,mBAAmB,QAAQ;AAAA,EAC/D,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,cAAc,GAAG,WAAW,iBAAI,OAAO,GAAG,SAAS,iBAAI,OAAO,EAAE,CAAC;AAAA,EAChG,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,eAAe,GAAG,WAAW,iBAAI,OAAO,EAAE,CAAC;AAAA,EAC1E,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,aAAa;AAAA,IAC/B,WAAW,iBAAI,OAAO;AAAA,IACtB,SAAS,iBAAI,MAAM,eAAe;AAAA,EACpC,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,WAAW,GAAG,WAAW,iBAAI,OAAO,GAAG,MAAM,eAAe,CAAC;AAAA,EAC5F,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,cAAc;AAAA,IAChC,WAAW,iBAAI,OAAO;AAAA,IACtB,SAAS,iBAAI,MAAM,gBAAgB;AAAA,EACrC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,mBAAmB;AAAA,IACrC,WAAW,iBAAI,OAAO;AAAA,IACtB,OAAO,iBAAI,MAAM,oBAAoB;AAAA,EACvC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,sBAAsB;AAAA,IACxC,WAAW,iBAAI,OAAO;AAAA,IACtB,iBAAiB,iBAAI,OAAO;AAAA,IAC5B,iBAAiB,iBAAI,OAAO;AAAA,EAC9B,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,kBAAkB,GAAG,WAAW,iBAAI,OAAO,EAAE,CAAC;AAAA,EAC7E,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,oBAAoB,GAAG,WAAW,iBAAI,OAAO,EAAE,CAAC;AAAA,EAC/E,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,aAAa;AAAA,IAC/B,WAAW,iBAAI,OAAO;AAAA,IACtB,WAAW,iBAAI,OAAO,EAAE,SAAS;AAAA,EACnC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,sBAAsB;AAAA,IACxC,WAAW,iBAAI,OAAO;AAAA,IACtB,OAAO,iBAAI,MAAM,yBAAyB;AAAA,IAC1C,WAAW,iBAAI,OAAO;AAAA,IACtB,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,IAC7B,QAAQ,iBAAI,QAAQ,EAAE,SAAS;AAAA,EACjC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,2BAA2B;AAAA,IAC7C,WAAW,iBAAI,OAAO;AAAA,IACtB,iBAAiB,iBAAI,OAAO;AAAA,IAC5B,iBAAiB,iBAAI,OAAO;AAAA,EAC9B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,wBAAwB;AAAA,IAC1C,WAAW,iBAAI,OAAO;AAAA,IACtB,SAAS,iBAAI,QAAQ;AAAA,IACrB,eAAe,iBAAI,OAAO;AAAA,IAC1B,OAAO,iBAAI,OAAO,EAAE,SAAS;AAAA,EAC/B,CAAC;AAAA,EACD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,yBAAyB,GAAG,WAAW,iBAAI,OAAO,EAAE,CAAC;AAAA,EACpF,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,qBAAqB;AAAA,IACvC,WAAW,iBAAI,OAAO;AAAA,IACtB,OAAO,iBAAI,MAAM,iBAAI,OAAO,CAAC;AAAA,EAC/B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,iBAAiB;AAAA,IACnC,WAAW,iBAAI,OAAO;AAAA,IACtB,SAAS,iBAAI,MAAM,iBAAI,OAAO;AAAA,MAC5B,MAAM,iBAAI,OAAO;AAAA,MACjB,MAAM,iBAAI,OAAO;AAAA,MACjB,QAAQ,iBAAI,OAAO;AAAA,MACnB,SAAS,iBAAI,OAAO;AAAA,IACtB,CAAC,CAAC;AAAA,IACF,WAAW,iBAAI,QAAQ;AAAA,EACzB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,8BAA8B;AAAA,IAChD,WAAW,iBAAI,OAAO;AAAA,IACtB,OAAO,iBAAI,MAAM,yBAAyB;AAAA,IAC1C,WAAW,iBAAI,OAAO;AAAA,IACtB,SAAS,iBAAI,OAAO;AAAA,EACtB,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,6BAA6B;AAAA,IAC/C,WAAW,iBAAI,OAAO;AAAA,IACtB,iBAAiB,iBAAI,OAAO;AAAA,IAC5B,iBAAiB,iBAAI,OAAO;AAAA,EAC9B,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,gCAAgC;AAAA,IAClD,WAAW,iBAAI,OAAO;AAAA,IACtB,QAAQ,iBAAI,mBAAmB,QAAQ;AAAA,MACrC,iBAAI,OAAO;AAAA,QACT,MAAM,iBAAI,QAAQ,IAAI;AAAA,QACtB,OAAO,iBAAI,MAAM,yBAAyB;AAAA,QAC1C,SAAS,iBAAI,OAAO;AAAA,QACpB,OAAO,iBAAI,OAAO;AAAA,MACpB,CAAC;AAAA,MACD,iBAAI,OAAO;AAAA,QACT,MAAM,iBAAI,QAAQ,aAAa;AAAA,QAC/B,OAAO,iBAAI,MAAM,yBAAyB;AAAA,QAC1C,SAAS,iBAAI,OAAO;AAAA,QACpB,OAAO,iBAAI,OAAO;AAAA,QAClB,YAAY,iBAAI,QAAQ,OAAO;AAAA,QAC/B,QAAQ,iBAAI,KAAK,CAAC,iBAAiB,oBAAoB,CAAC;AAAA,MAC1D,CAAC;AAAA,MACD,iBAAI,OAAO;AAAA,QACT,MAAM,iBAAI,QAAQ,OAAO;AAAA,QACzB,QAAQ,iBAAI,KAAK,CAAC,gBAAgB,iBAAiB,aAAa,CAAC;AAAA,QACjE,SAAS,iBAAI,OAAO;AAAA,MACtB,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,+BAA+B;AAAA,IACjD,WAAW,iBAAI,OAAO;AAAA,IACtB,QAAQ,iBAAI,mBAAmB,QAAQ;AAAA,MACrC,iBAAI,OAAO;AAAA,QACT,MAAM,iBAAI,QAAQ,IAAI;AAAA,QACtB,iBAAiB,iBAAI,OAAO;AAAA,QAC5B,iBAAiB,iBAAI,OAAO;AAAA,MAC9B,CAAC;AAAA,MACD,iBAAI,OAAO;AAAA,QACT,MAAM,iBAAI,QAAQ,OAAO;AAAA,QACzB,QAAQ,iBAAI,KAAK,CAAC,gBAAgB,iBAAiB,aAAa,CAAC;AAAA,QACjE,SAAS,iBAAI,OAAO;AAAA,MACtB,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,OAAO;AAAA,IACzB,WAAW,iBAAI,OAAO;AAAA,IACtB,OAAO,iBAAI,OAAO;AAAA,IAClB,SAAS,iBAAI,OAAO,EAAE,SAAS;AAAA,EACjC,CAAC;AAAA,EACD,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,kBAAkB;AAAA,IACpC,QAAQ,iBAAI,OAAO;AAAA,IACnB,WAAW,iBAAI,OAAO;AAAA,EACxB,CAAC;AACH,CAAC;AAED,IAAI,kBAAkB;AAMtB,SAAS,aAAa,KAAK;AACzB,MAAI,CAAC,IAAI,WAAW,eAAe;AACjC,WAAO;AACT,QAAM,OAAO,IAAI,MAAM,gBAAgB,MAAM;AAC7C,QAAM,aAAa,KAAK,QAAQ,GAAG;AACnC,MAAI,aAAa;AACf,WAAO;AACT,QAAM,SAAS,KAAK,MAAM,GAAG,UAAU;AACvC,QAAM,eAAe,KAAK,MAAM,aAAa,CAAC;AAC9C,MAAI,CAAC;AACH,WAAO;AACT,SAAO,EAAE,QAAQ,aAAa;AAChC;AAMA,IAAI,qBAAqB;AACzB,IAAI,0BAA0B;AAI9B,SAAS,mBAAmB,OAAO;AACjC,MAAI,CAAC,MAAM,WAAW,kBAAkB;AACtC,WAAO;AACT,QAAM,OAAO,MAAM,MAAM,mBAAmB,MAAM;AAClD,QAAM,aAAa,KAAK,QAAQ,GAAG;AACnC,MAAI,cAAc,KAAK,eAAe,KAAK,SAAS;AAClD,WAAO;AACT,SAAO,EAAE,QAAQ,KAAK,MAAM,GAAG,UAAU,GAAG,YAAY,KAAK,MAAM,aAAa,CAAC,EAAE;AACrF;AACA,IAAI,2BAA2B,iBAAI,OAAO;AAAA,EACxC,MAAM,iBAAI,QAAQ,KAAK;AAAA,EACvB,MAAM,iBAAI,OAAO;AACnB,CAAC;AACD,IAAI,8BAA8B,iBAAI,OAAO;AAAA,EAC3C,MAAM,iBAAI,QAAQ,QAAQ;AAAA,EAC1B,MAAM,iBAAI,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EAClC,MAAM,iBAAI,OAAO,EAAE,IAAI,EAAE,SAAS;AACpC,CAAC;AACD,IAAI,8BAA8B,iBAAI,OAAO;AAAA,EAC3C,MAAM,iBAAI,QAAQ,QAAQ;AAAA,EAC1B,UAAU,iBAAI,OAAO,EAAE,IAAI;AAC7B,CAAC;AACD,IAAI,6BAA6B,iBAAI,OAAO;AAAA,EAC1C,MAAM,iBAAI,QAAQ,OAAO;AAAA,EACzB,SAAS,iBAAI,OAAO;AACtB,CAAC;AACD,IAAI,+BAA+B,iBAAI,mBAAmB,QAAQ;AAAA,EAChE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAI,oBAAoB;AACxB,SAAS,eAAe,QAAQ,UAAU;AACxC,MAAI,OAAO,SAAS,GAAG;AACrB,UAAM,IAAI,MAAM,gCAAgC,MAAM,EAAE;AAC1D,MAAI,SAAS,SAAS,GAAG;AACvB,UAAM,IAAI,MAAM,kCAAkC,QAAQ,EAAE;AAC9D,SAAO,GAAG,iBAAiB,GAAG,MAAM,IAAI,QAAQ;AAClD;AACA,SAAS,eAAe,KAAK;AAC3B,MAAI,CAAC,IAAI,WAAW,iBAAiB;AACnC,WAAO;AACT,QAAM,OAAO,IAAI,MAAM,kBAAkB,MAAM;AAC/C,QAAMC,SAAQ,qBAAqB,KAAK,IAAI;AAC5C,MAAI,CAACA,SAAQ,CAAC,KAAK,CAACA,OAAM,CAAC;AACzB,WAAO;AACT,SAAO,EAAE,QAAQA,OAAM,CAAC,GAAG,UAAUA,OAAM,CAAC,EAAE;AAChD;AAkBA,IAAI,6BAA6B,iBAAI,KAAK,uBAAwB;AAClE,IAAI,mBAAmB,iBAAI,KAAK,mBAAoB,EAAE,QAAQ,KAAK;AACnE,IAAI,sBAAsB,iBAAI,mBAAmB,QAAQ;AAAA,EACvD,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,MAAM,GAAG,MAAM,iBAAI,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;AAAA,EACnE,iBAAI,OAAO,EAAE,MAAM,iBAAI,QAAQ,iBAAiB,GAAG,iBAAiB,iBAAI,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;AAAA,EACzF,iBAAI,OAAO;AAAA,IACT,MAAM,iBAAI,QAAQ,aAAa;AAAA,IAC/B,aAAa,iBAAI,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,KAAK;AAAA,IACpD,iBAAiB,iBAAI,OAAO,EAAE,SAAS;AAAA,EACzC,CAAC;AACH,CAAC;AACD,IAAI,qBAAqB,iBAAI,OAAO;AAAA,EAClC,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,OAAO,iBAAI,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AACxC,CAAC;AACD,IAAI,sBAAsB,iBAAI,OAAO;AAAA,EACnC,IAAI,iBAAI,OAAO;AAAA,EACf,KAAK,iBAAI,OAAO,EAAE,IAAI;AAAA,EACtB,WAAW,iBAAI,OAAO,EAAE,IAAI;AAC9B,CAAC;AACD,IAAI,uBAAuB,iBAAI,OAAO;AAAA,EACpC,WAAW,iBAAI,OAAO,EAAE,IAAI,CAAC;AAC/B,CAAC;AACD,IAAI,wBAAwB,iBAAI,OAAO;AAAA,EACrC,IAAI,iBAAI,QAAQ;AAClB,CAAC;AAGD,SAAS,yBAAyB,MAAM;AACtC,MAAI,OAAO,SAAS,YAAY,SAAS;AACvC,WAAO;AACT,SAAO,iBAAiB,QAAQ,OAAO,KAAK,gBAAgB,YAAY,KAAK,YAAY,SAAS,KAAK,kBAAkB,QAAQ,OAAO,KAAK,iBAAiB,YAAY,YAAY,QAAQ,OAAO,KAAK,WAAW,aAAa,aAAa,QAAQ,OAAO,KAAK,YAAY,aAAa,gBAAgB,QAAQ,OAAO,KAAK,eAAe;AACjV;AACA,SAAS,mBAAmB,MAAM,YAAY,YAAY;AACxD,SAAO,YAAY,MAAM,YAAY,YAAY,YAAY,SAAS;AACxE;AACA,SAAS,kBAAkB,SAAS,OAAO;AACzC,QAAM,SAAS,WAAW,SAAS,KAAK;AACxC,SAAO,WAAW,QAAQ,OAAO;AACnC;AACA,SAAS,YAAY,OAAO;AAC1B,QAAM,QAAQ,MAAM,MAAM;AAAA,CAC3B;AACC,aAAW,QAAQ,OAAO;AACxB,QAAI,KAAK,WAAW,QAAQ,KAAK,KAAK,WAAW,KAAK,KAAK,KAAK,WAAW,KAAK,KAAK,KAAK,WAAW,KAAK,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,WAAW,eAAe,KAAK,SAAS,IAAI;AACvL;AAAA,IACF;AACA,QAAI,KAAK,WAAW,GAAG,KAAK,KAAK,WAAW,GAAG,GAAG;AAChD,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AACA,SAAS,4BAA4B,aAAa;AAChD,MAAI,YAAY,WAAW;AACzB,WAAO;AACT,QAAM,iBAAiB,CAAC,GAAG,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM;AACtE,MAAI,CAAC;AACH,WAAO;AACT,MAAI,eAAe;AACjB,WAAO;AACT,MAAI,UAAU,eAAe;AAC7B,QAAM,YAAY,YAAY,QAAQ,cAAc;AACpD,WAAS,IAAI,YAAY,GAAE,IAAI,YAAY,QAAQ,KAAK;AACtD,UAAM,aAAa,YAAY,CAAC;AAChC,QAAI,YAAY;AACd,aAAO;AACT,QAAI,YAAY,OAAO;AACrB,YAAM,SAAS,kBAAkB,SAAS,WAAW,KAAK;AAC1D,UAAI,WAAW;AACb,eAAO;AACT,gBAAU;AAAA,IACZ;AAAA,EACF;AACA,SAAO;AACT;AACA,SAAS,aAAa,MAAM;AAC1B,SAAO,EAAE,GAAG,KAAK;AACnB;AAEA,SAAS,sBAAsB,QAAQ,SAAS;AAC9C,MAAI;AACF,WAAO;AACP,WAAO,EAAE,IAAI,KAAK;AAAA,EACpB,SAAS,KAAK;AACZ,UAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC3D,QAAI,IAAI,SAAS,mBAAmB,KAAK,IAAI,SAAS,SAAS,GAAG;AAChE,eAAS,MAAM,EAAE,OAAO,4BAA4B,OAAO,IAAI,CAAC;AAChE,eAAS,YAAY;AACrB,aAAO,EAAE,IAAI,OAAO,QAAQ,WAAW,OAAO,IAAI;AAAA,IACpD;AACA,WAAO,EAAE,IAAI,OAAO,QAAQ,SAAS,OAAO,IAAI;AAAA,EAClD;AACF;AAEA,SAAS,gBAAgBC,QAAO;AAC9B,QAAM,QAAQA,OAAM;AACpB,MAAI,CAAC,SAAS,OAAO,MAAM,YAAY;AACrC,WAAO;AACT,QAAM,QAAQ;AAAA,IACZ,MAAM;AAAA,IACN,WAAWA,OAAM,aAAa;AAAA,IAC9B,SAAS,MAAM;AAAA,EACjB;AACA,MAAI,OAAO,MAAM,gBAAgB;AAC/B,UAAM,cAAc,MAAM;AAC5B,MAAI,OAAO,MAAM,eAAe;AAC9B,UAAM,aAAa,MAAM;AAC3B,SAAO;AACT;AACA,SAAS,cAAc,KAAK;AAC1B,SAAO,IAAI,OAAO,CAAC,MAAM,OAAO,MAAM,QAAQ;AAChD;AACA,SAAS,gBAAgBA,QAAO;AAC9B,QAAM,QAAQA,OAAM;AACpB,MAAI,CAAC,SAAS,OAAO,MAAM,WAAW;AACpC,WAAO;AACT,QAAM,UAAU,CAAC;AACjB,MAAI,OAAO,MAAM,YAAY;AAC3B,YAAQ,UAAU,MAAM;AAC1B,MAAI,OAAO,MAAM,gBAAgB;AAC/B,YAAQ,cAAc,MAAM;AAC9B,MAAI,OAAO,MAAM,eAAe;AAC9B,YAAQ,aAAa,MAAM;AAC7B,MAAI,OAAO,MAAM,WAAW;AAC1B,YAAQ,SAAS,MAAM;AACzB,MAAI,MAAM,QAAQ,MAAM,SAAS;AAC/B,YAAQ,YAAY,cAAc,MAAM,SAAS;AACnD,MAAI,MAAM,QAAQ,MAAM,YAAY;AAClC,YAAQ,eAAe,cAAc,MAAM,YAAY;AACzD,SAAO,EAAE,MAAM,gBAAgB,QAAQ,MAAM,QAAQ,QAAQ;AAC/D;AACA,SAAS,4BAA4B,QAAQ;AAC3C,QAAM,SAAS,CAAC;AAChB,aAAWA,UAAS,QAAQ;AAC1B,QAAIA,OAAM,SAAS;AACjB;AACF,QAAI,QAAQ;AACZ,QAAIA,OAAM,aAAa,cAAc;AACnC,cAAQ,gBAAgBA,MAAK;AAAA,IAC/B,WAAWA,OAAM,aAAa,cAAc;AAC1C,cAAQ,gBAAgBA,MAAK;AAAA,IAC/B;AACA,QAAI;AACF,aAAO,KAAK,KAAK;AAAA,EACrB;AACA,SAAO;AACT;AACA,SAAS,wBAAwB,YAAY;AAC3C,QAAMC,SAAQ,WAAW,MAAM,yCAAyC;AACxE,SAAOA,SAAQ,CAAC,KAAK;AACvB;AAOA,SAAS,uBAAuB,MAAM;AACpC,QAAM,YAAY,KAAK,aAAa;AACpC,SAAO;AAAA,IACL,IAAI,KAAK;AAAA,IACT,SAAS,KAAK;AAAA,IACd,aAAa,KAAK,eAAe;AAAA,IACjC,QAAQ,KAAK,WAAW,cAAc,cAAc,KAAK,WAAW,gBAAgB,gBAAgB;AAAA,IACpG,YAAY,KAAK;AAAA,IACjB,OAAO,KAAK;AAAA,IACZ,QAAQ,KAAK;AAAA,IACb,WAAW,KAAK;AAAA,IAChB;AAAA,IACA,WAAW,KAAK,aAAa;AAAA,EAC/B;AACF;AACA,IAAI,gBAAgB;AAAA,EAClB,SAAS;AAAA,EACT,aAAa;AAAA,EACb,WAAW;AAAA,EACX,WAAW;AACb;AACA,SAAS,uBAAuB,MAAM;AACpC,SAAO;AAAA,IACL,IAAI,KAAK;AAAA,IACT,SAAS,KAAK;AAAA,IACd,aAAa,KAAK,eAAe;AAAA,IACjC,YAAY,KAAK;AAAA,IACjB,OAAO,KAAK;AAAA,IACZ,QAAQ,cAAc,KAAK,MAAM;AAAA,IACjC,QAAQ,KAAK;AAAA,IACb,WAAW,KAAK;AAAA,IAChB,WAAW,KAAK;AAAA,IAChB,WAAW,KAAK;AAAA,EAClB;AACF;AAoBA,IAAI,qBAAqB,CAAC,WAAW,eAAe,WAAW;AAC/D,SAAS,eAAe,SAAS;AAC/B,MAAI,OAAO;AACX,WAAS,IAAI,GAAE,IAAI,QAAQ,QAAQ,KAAK;AACtC,YAAQ,QAAQ,KAAK,OAAO,QAAQ,WAAW,CAAC,IAAI;AAAA,EACtD;AACA,SAAO,SAAS,SAAS,GAAG,SAAS,EAAE,CAAC;AAC1C;AACA,SAAS,UAAU,OAAO;AACxB,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AACA,SAAS,eAAe,OAAO;AAC7B,MAAI,CAAC,UAAU,KAAK;AAClB,WAAO;AACT,SAAO,OAAO,MAAM,YAAY,YAAY,OAAO,MAAM,WAAW,YAAY,eAAe,IAAI,MAAM,MAAM,KAAK,OAAO,MAAM,eAAe;AAClJ;AACA,IAAI,iBAAiB,IAAI,IAAI,kBAAkB;AAa/C,SAAS,2BAA2B,OAAO;AACzC,QAAM,QAAQ,MAAM;AACpB,MAAI,CAAC,MAAM,QAAQ,KAAK;AACtB,WAAO,CAAC;AACV,QAAM,OAAO,oBAAI;AACjB,SAAO,MAAM,OAAO,cAAc,EAAE,IAAI,CAAC,UAAU;AACjD,UAAM,SAAS,eAAe,MAAM,OAAO;AAC3C,UAAM,QAAQ,KAAK,IAAI,MAAM,KAAK;AAClC,SAAK,IAAI,QAAQ,QAAQ,CAAC;AAC1B,WAAO,EAAE,GAAG,OAAO,IAAI,UAAU,IAAI,SAAS,GAAG,MAAM,IAAI,KAAK,GAAG;AAAA,EACrE,CAAC;AACH;AACA,SAAS,oBAAoB,OAAO;AAClC,QAAM,QAAQ,2BAA2B,KAAK;AAC9C,MAAI,MAAM,WAAW;AACnB,WAAO;AACT,MAAI,YAAY;AAChB,MAAI,kBAAkB;AACtB,aAAW,SAAS,OAAO;AACzB,QAAI,MAAM,WAAW;AACnB;AACF,QAAI,MAAM,WAAW,iBAAiB,CAAC,iBAAiB;AACtD,wBAAkB,MAAM;AAAA,IAC1B;AAAA,EACF;AACA,SAAO,EAAE,eAAe,WAAW,WAAW,MAAM,QAAQ,gBAAgB;AAC9E;AACA,SAAS,+BAA+B,QAAQ;AAC9C,WAAS,IAAI,OAAO,SAAS,GAAE,KAAK,GAAG,KAAK;AAC1C,UAAMC,SAAQ,OAAO,CAAC;AACtB,QAAIA,UAASA,OAAM,SAAS,cAAcA,OAAM,aAAa,eAAeA,OAAM,OAAO;AACvF,aAAO,oBAAoBA,OAAM,KAAK;AAAA,IACxC;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAI,mBAAmB;AACvB,IAAI,iBAAiB,IAAI,KAAK;AAC9B,SAAS,uBAAuB,OAAO,CAAC,GAAG;AACzC,QAAM,UAAU,KAAK,WAAW;AAChC,QAAM,QAAQ,KAAK,SAAS;AAC5B,QAAM,OAAO,oBAAI;AACjB,WAAS,aAAa,KAAK;AACzB,eAAW,CAAC,IAAI,EAAE,KAAK,MAAM;AAC3B,UAAI,MAAM,MAAM;AACd;AACF,WAAK,OAAO,EAAE;AAAA,IAChB;AAAA,EACF;AACA,WAAS,WAAW;AAClB,WAAO,KAAK,OAAO,SAAS;AAC1B,YAAM,SAAS,KAAK,KAAK,EAAE,KAAK;AAChC,UAAI,OAAO;AACT;AACF,WAAK,OAAO,OAAO,KAAK;AAAA,IAC1B;AAAA,EACF;AACA,SAAO;AAAA,IACL,eAAe,OAAO,KAAK;AACzB,mBAAa,GAAG;AAChB,YAAM,WAAW,KAAK,IAAI,KAAK;AAC/B,UAAI,aAAa,UAAa,MAAM,YAAY,OAAO;AACrD,aAAK,OAAO,KAAK;AACjB,aAAK,IAAI,OAAO,QAAQ;AACxB,eAAO;AAAA,MACT;AACA,WAAK,IAAI,OAAO,GAAG;AACnB,eAAS;AACT,aAAO;AAAA,IACT;AAAA,IACA,OAAO;AACL,aAAO,KAAK;AAAA,IACd;AAAA,EACF;AACF;AAGA,IAAI,sBAAsB;AAC1B,SAAS,SAAS,OAAO;AACvB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM,sBAAsB;AAAA,EAC9B,EAAE,KAAK,GAAG;AACZ;AACA,SAAS,uBAAuB,OAAO,CAAC,GAAG;AACzC,QAAM,QAAQ,KAAK,oBAAoB,uBAAuB,EAAE,OAAO,KAAK,cAAc,IAAI,KAAK,IAAK,CAAC;AACzG,MAAI,oBAAoB;AACxB,MAAI,oBAAoB;AACxB,MAAI,uBAAuB;AAC3B,SAAO;AAAA,IACL,aAAa,OAAO,KAAK;AACvB,2BAAqB;AACrB,YAAM,OAAO,MAAM,eAAe,SAAS,KAAK,GAAG,GAAG;AACtD,UAAI,MAAM;AACR,gCAAwB;AACxB,eAAO;AAAA,MACT;AACA,2BAAqB;AACrB,aAAO;AAAA,IACT;AAAA,IACA,UAAU;AACR,aAAO;AAAA,QACL,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,uBAAuB,UAAU;AACxC,SAAO,WAAW,QAAQ;AAC5B;AACA,SAAS,4BAA4B,MAAM,UAAU;AACnD,SAAO,SAAS,WAAW,kBAAkB,QAAQ,KAAK,WAAW,QAAQ;AAC/E;AACA,IAAI,0BAA0B;AAC9B,SAAS,mBAAmB,QAAQ,kBAAkB;AACpD,SAAO,UAAU,MAAM,IAAI,gBAAgB;AAC7C;AAEA,IAAM,iBAAN,MAAqB;AAAA,EACnB,WAAW,CAAC;AAAA,EACZ,aAAa;AAAA,EACb,MAAM,IAAI,OAAO;AACf,SAAK,SAAS,KAAK,KAAK;AACxB,SAAK,SAAS,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAC9C,QAAI,KAAK,eAAe,QAAQ,MAAM,QAAQ,KAAK,YAAY;AAC7D,WAAK,aAAa,MAAM;AAAA,IAC1B;AAAA,EACF;AAAA,EACA,MAAM,UAAU,WAAW;AACzB,SAAK,WAAW,KAAK,SAAS,OAAO,CAAC,MAAM,EAAE,QAAQ,SAAS;AAAA,EACjE;AAAA,EACA,MAAM,cAAc,OAAO;AACzB,SAAK,WAAW,KAAK,SAAS,OAAO,CAAC,MAAM,EAAE,UAAU,KAAK;AAAA,EAC/D;AAAA,EACA,OAAO,WAAW,OAAO;AACvB,UAAM,WAAW,KAAK,SAAS,OAAO,CAAC,MAAM,EAAE,SAAS,KAAK;AAC7D,eAAW,KAAK;AACd,YAAM;AAAA,EACV;AAAA,EACA,MAAM,OAAO;AACX,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EACA,MAAM,gBAAgB;AACpB,WAAO,KAAK;AAAA,EACd;AACF;AA0BA,IAAI,oBAAoB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAI,cAAc;AAClB,IAAI,yBAAyB;AAC7B,SAAS,gBAAgB,SAAS,OAAO,YAAY,mBAAmB;AACtE,MAAI,UAAU,WAAW;AACvB,WAAO;AACT,QAAM,MAAM,KAAK,IAAI,KAAK,IAAI,UAAU,GAAG,CAAC,GAAG,UAAU,SAAS,CAAC;AACnE,QAAM,OAAO,UAAU,GAAG,GAAG,KAAK;AAClC,SAAO,QAAQ;AACjB;AACA,SAAS,cAAc,OAAO,OAAO;AACnC,UAAQ,MAAM,MAAM;AAAA,IAClB,KAAK;AACH,aAAO,SAAS,OAAO,MAAM,SAAS,MAAM,OAAO,MAAM,EAAE;AAAA,IAC7D,KAAK;AACH,aAAO,gBAAgB,OAAO,MAAM,SAAS;AAAA,IAC/C,KAAK;AACH,aAAO,cAAc,KAAK;AAAA,IAC5B,KAAK;AACH,aAAO,yBAAyB,OAAO,MAAM,SAAS;AAAA,IACxD,KAAK;AACH,aAAO,kBAAkB,OAAO,MAAM,SAAS;AAAA,IACjD,SAAS;AACP,YAAM,cAAc;AACpB,YAAM,IAAI,MAAM,wBAAwB,KAAK,UAAU,WAAW,CAAC,EAAE;AAAA,IACvE;AAAA,EACF;AACF;AACA,SAAS,SAAS,OAAO,SAAS,OAAO,IAAI;AAC3C,QAAM,QAAQ,EAAE,OAAO,MAAM,WAAW,OAAO,SAAS,GAAG;AAC3D,QAAM,OAAO,EAAE,GAAG,OAAO,WAAW,MAAM,YAAY,EAAE;AACxD,QAAM,UAAU,CAAC,EAAE,MAAM,kBAAkB,SAAS,CAAC,KAAK,EAAE,CAAC;AAC7D,MAAI,MAAM,WAAW;AACnB,YAAQ,KAAK,EAAE,MAAM,QAAQ,MAAM,CAAC;AAAA,EACtC;AACA,SAAO,EAAE,OAAO,MAAM,QAAQ;AAChC;AACA,SAAS,gBAAgB,OAAO,WAAW;AACzC,MAAI,YAAY,MAAM,kBAAkB;AACtC,WAAO,EAAE,OAAO,SAAS,CAAC,EAAE;AAAA,EAC9B;AACA,QAAM,UAAU,MAAM,YAAY;AAClC,QAAM,eAAe,KAAK,IAAI,WAAW,OAAO;AAChD,QAAM,OAAO,EAAE,GAAG,OAAO,kBAAkB,eAAe,EAAE;AAC5D,SAAO;AAAA,IACL,OAAO;AAAA,IACP,SAAS,CAAC,EAAE,MAAM,mBAAmB,WAAW,aAAa,CAAC;AAAA,EAChE;AACF;AACA,SAAS,cAAc,OAAO;AAC5B,MAAI,MAAM,oBAAoB,MAAM,WAAW;AAC7C,QAAI,MAAM;AACR,aAAO,EAAE,OAAO,SAAS,CAAC,EAAE;AAC9B,WAAO,EAAE,OAAO,EAAE,GAAG,OAAO,WAAW,KAAK,GAAG,SAAS,CAAC,EAAE;AAAA,EAC7D;AACA,QAAM,OAAO,EAAE,GAAG,OAAO,WAAW,KAAK;AACzC,SAAO;AAAA,IACL,OAAO;AAAA,IACP,SAAS,CAAC,EAAE,MAAM,iBAAiB,WAAW,MAAM,iBAAiB,CAAC;AAAA,EACxE;AACF;AACA,SAAS,yBAAyB,OAAO,WAAW;AAClD,MAAI,MAAM,cAAc;AACtB,WAAO,EAAE,OAAO,SAAS,CAAC,EAAE;AAC9B,MAAI,CAAC,WAAW;AACd,WAAO,EAAE,OAAO,EAAE,GAAG,OAAO,WAAW,MAAM,GAAG,SAAS,CAAC,EAAE;AAAA,EAC9D;AACA,SAAO,cAAc,EAAE,GAAG,OAAO,WAAW,MAAM,CAAC;AACrD;AACA,SAAS,kBAAkB,OAAO,WAAW;AAC3C,QAAM,UAAU,MAAM,YAAY;AAClC,QAAM,eAAe,KAAK,IAAI,MAAM,mBAAmB,GAAG,KAAK,IAAI,YAAY,GAAG,OAAO,CAAC;AAC1F,QAAM,OAAO,EAAE,GAAG,OAAO,kBAAkB,eAAe,EAAE;AAC5D,QAAM,UAAU,CAAC;AACjB,MAAI,gBAAgB,MAAM,kBAAkB;AAC1C,YAAQ,KAAK,EAAE,MAAM,mBAAmB,WAAW,aAAa,CAAC;AAAA,EACnE;AACA,MAAI,MAAM,aAAa,KAAK,mBAAmB,MAAM,WAAW;AAC9D,YAAQ,KAAK,EAAE,MAAM,iBAAiB,WAAW,KAAK,iBAAiB,CAAC;AAAA,EAC1E;AACA,SAAO,EAAE,OAAO,MAAM,QAAQ;AAChC;AACA,SAAS,iBAAiB,OAAO,OAAO;AACtC,UAAQ,MAAM,MAAM;AAAA,IAClB,KAAK;AACH,aAAO,iBAAiB,OAAO,MAAM,QAAQ;AAAA,IAC/C,KAAK;AACH,aAAO,4BAA4B,OAAO,MAAM,SAAS;AAAA,IAC3D,SAAS;AACP,YAAM,cAAc;AACpB,YAAM,IAAI,MAAM,2BAA2B,KAAK,UAAU,WAAW,CAAC,EAAE;AAAA,IAC1E;AAAA,EACF;AACF;AACA,IAAI,mBAAmB;AACvB,SAAS,iBAAiB,OAAO,UAAU;AACzC,MAAI,SAAS,SAAS,MAAM,qBAAqB;AAC/C,QAAI,SAAS,UAAU,KAAK,MAAM,sBAAsB,SAAS,SAAS,kBAAkB;AAC1F,YAAM,QAAQ;AAAA,QACZ,GAAG;AAAA,QACH,qBAAqB,SAAS;AAAA,QAC9B,YAAY;AAAA,MACd;AACA,aAAO;AAAA,QACL,OAAO;AAAA,QACP,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,UAAU,MAAM;AAAA,YAChB,eAAe,MAAM;AAAA,UACvB;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,KAAK,SAAS;AAAA,YACd,OAAO,SAAS;AAAA,YAChB,OAAO,SAAS;AAAA,UAClB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,WAAO,EAAE,OAAO,SAAS,CAAC,EAAE;AAAA,EAC9B;AACA,QAAM,OAAO;AAAA,IACX,GAAG;AAAA,IACH,qBAAqB,SAAS;AAAA,IAC9B,YAAY;AAAA,EACd;AACA,SAAO;AAAA,IACL,OAAO;AAAA,IACP,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,KAAK,SAAS;AAAA,QACd,OAAO,SAAS;AAAA,QAChB,OAAO,SAAS;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AACF;AACA,SAAS,4BAA4B,OAAO,WAAW;AACrD,MAAI,MAAM,cAAc;AACtB,WAAO,EAAE,OAAO,SAAS,CAAC,EAAE;AAC9B,QAAM,OAAO,EAAE,GAAG,OAAO,UAAU;AACnC,MAAI,CAAC;AACH,WAAO,EAAE,OAAO,MAAM,SAAS,CAAC,EAAE;AACpC,SAAO;AAAA,IACL,OAAO;AAAA,IACP,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,UAAU,MAAM;AAAA,QAChB,WAAW,MAAM;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AACF;AACA,SAAS,YAAY,OAAO,OAAO;AACjC,MAAI,CAAC,MAAM;AACT,WAAO;AACT,SAAO,EAAE,GAAG,OAAO,YAAY,OAAO,iBAAiB,MAAM;AAC/D;AACA,SAAS,iBAAiB,UAAU;AAClC,SAAO,EAAE,UAAU,WAAW,GAAG,kBAAkB,GAAG,WAAW,MAAM;AACzE;AACA,SAAS,oBAAoB,UAAU;AACrC,SAAO;AAAA,IACL;AAAA,IACA,qBAAqB;AAAA,IACrB,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,WAAW;AAAA,EACb;AACF;AAGA,IAAI,4BAA4B,iBAAI,OAAO;AAAA,EACzC,MAAM,iBAAI,QAAQ,cAAc;AAAA,EAChC,UAAU,iBAAI,OAAO;AAAA,EACrB,OAAO,iBAAI,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACtC,OAAO,iBAAI,OAAO;AAAA,EAClB,SAAS,iBAAI,QAAQ;AACvB,CAAC;AACD,IAAI,uBAAuB,iBAAI,OAAO;AAAA,EACpC,MAAM,iBAAI,QAAQ,SAAS;AAAA,EAC3B,UAAU,iBAAI,OAAO;AAAA,EACrB,WAAW,iBAAI,OAAO,EAAE,IAAI,EAAE,YAAY;AAC5C,CAAC;AACD,IAAI,iCAAiC,iBAAI,OAAO;AAAA,EAC9C,MAAM,iBAAI,QAAQ,qBAAqB;AAAA,EACvC,UAAU,iBAAI,OAAO;AAAA,EACrB,WAAW,iBAAI,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;AACtC,CAAC;AACD,IAAI,2BAA2B,iBAAI,mBAAmB,QAAQ;AAAA,EAC5D;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,mBAAN,MAAuB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,cAAc,oBAAI;AAAA,EAClB,mBAAmB,oBAAI;AAAA,EACvB,aAAa,QAAQ,QAAQ;AAAA,EAC7B,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY,MAAM;AAChB,SAAK,QAAQ;AACb,SAAK,aAAa,iBAAiB,KAAK,QAAQ;AAChD,SAAK,gBAAgB,oBAAoB,KAAK,QAAQ;AACtD,SAAK,kBAAkB,KAAK,kBAAkB;AAC9C,SAAK,aAAa,KAAK,aAAa;AACpC,SAAK,cAAc,KAAK,cAAc;AACtC,SAAK,eAAe,KAAK,gBAAgB,CAAC,IAAI,OAAO,YAAY,IAAI,EAAE;AACvE,SAAK,iBAAiB,KAAK,kBAAkB,CAAC,WAAW,cAAc,MAAM;AAC7E,SAAK,MAAM,EAAE,OAAO,qBAAqB,UAAU,KAAK,SAAS,CAAC;AAAA,EACpE;AAAA,EACA,UAAU;AACR,QAAI,KAAK;AACP;AACF,UAAM,iBAAiB,KAAK,YAAY;AACxC,UAAM,gBAAgB,KAAK,iBAAiB;AAC5C,SAAK,YAAY;AACjB,SAAK,eAAe;AACpB,SAAK,YAAY,MAAM;AACvB,SAAK,iBAAiB,MAAM;AAC5B,QAAI,KAAK,MAAM,eAAe,OAAO;AACnC,WAAK,MAAM,cAAc,MAAM,EAAE,MAAM,CAAC,QAAQ;AAC9C,aAAK,MAAM,MAAM;AAAA,UACf,OAAO;AAAA,UACP,UAAU,KAAK,MAAM;AAAA,UACrB,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,QACxD,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AACA,SAAK,MAAM,MAAM;AAAA,MACf,OAAO;AAAA,MACP,UAAU,KAAK,MAAM;AAAA,MACrB;AAAA,MACA;AAAA,MACA,WAAW,KAAK,WAAW;AAAA,IAC7B,CAAC;AAAA,EACH;AAAA,EACA,IAAI,aAAa;AACf,WAAO,KAAK;AAAA,EACd;AAAA,EACA,MAAM,aAAa;AACjB,QAAI,KAAK;AACP;AACF,QAAI,KAAK;AACP;AACF,UAAM,MAAM,MAAM,KAAK,MAAM,OAAO,cAAc;AAClD,QAAI,QAAQ,MAAM;AAChB,WAAK,aAAa,EAAE,GAAG,KAAK,YAAY,WAAW,MAAM,EAAE;AAAA,IAC7D;AACA,QAAI,KAAK,MAAM,eAAe;AAC5B,YAAM,SAAS,MAAM,KAAK,MAAM,cAAc,KAAK;AACnD,UAAI,WAAW,QAAQ,SAAS,KAAK,cAAc,qBAAqB;AACtE,aAAK,gBAAgB,EAAE,GAAG,KAAK,eAAe,qBAAqB,OAAO;AAAA,MAC5E;AAAA,IACF;AACA,QAAI,KAAK;AACP;AACF,SAAK,eAAe;AAAA,EACtB;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,MAAM,aAAa,WAAW;AAC5B,QAAI,KAAK;AACP;AACF,UAAM,WAAW,cAAc,KAAK,YAAY;AAAA,MAC9C,MAAM;AAAA,MACN;AAAA,IACF,CAAC;AACD,SAAK,aAAa,SAAS;AAC3B,UAAM,KAAK,kBAAkB,SAAS,OAAO;AAC7C,UAAM,WAAW,iBAAiB,KAAK,eAAe;AAAA,MACpD,MAAM;AAAA,MACN;AAAA,IACF,CAAC;AACD,SAAK,gBAAgB,SAAS;AAC9B,SAAK,qBAAqB,SAAS,OAAO;AAC1C,QAAI;AACF,WAAK,gBAAgB;AAAA;AAErB,WAAK,eAAe;AAAA,EACxB;AAAA,EACA,MAAM,KAAK,SAAS,MAAM;AACxB,QAAI,KAAK;AACP;AACF,QAAI,CAAC,KAAK,cAAc;AACtB,YAAM,IAAI,MAAM,kDAAkD;AAAA,IACpE;AACA,UAAM,OAAO,KAAK,WAAW,KAAK,MAAM,KAAK,WAAW,SAAS,IAAI,CAAC;AACtE,SAAK,aAAa,KAAK,MAAM,MAAM;AAAA,IAAC,CAAC;AACrC,WAAO;AAAA,EACT;AAAA,EACA,MAAK,WAAW,SAAS,MAAM;AAC7B,QAAI,KAAK;AACP;AACF,QAAI,MAAM,YAAY,MAAM;AAC1B,YAAM,WAAW,KAAK,iBAAiB,IAAI,KAAK,QAAQ;AACxD,UAAI,aAAa,QAAW;AAC1B,aAAK,YAAY,OAAO,QAAQ;AAChC,YAAI;AACF,gBAAM,KAAK,MAAM,OAAO,cAAc,QAAQ;AAAA,QAChD,QAAQ;AAAA,QAAC;AAAA,MACX;AAAA,IACF;AACA,UAAM,QAAQ,MAAM,SAAS,cAAc;AAC3C,UAAM,KAAK,KAAK,KAAK;AACrB,UAAM,OAAO,cAAc,KAAK,YAAY;AAAA,MAC1C,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AACD,SAAK,aAAa,KAAK;AACvB,QAAI,MAAM,YAAY,MAAM;AAC1B,YAAM,WAAW,KAAK,MAAM,YAAY;AACxC,WAAK,iBAAiB,IAAI,KAAK,UAAU,QAAQ;AAAA,IACnD;AACA,UAAM,KAAK,kBAAkB,KAAK,OAAO;AAAA,EAC3C;AAAA,EACA,MAAM,QAAQ,KAAK;AACjB,QAAI,KAAK;AACP,aAAO,EAAE,MAAM,eAAe,IAAI;AACpC,QAAI;AACJ,QAAI;AACF,mBAAa,KAAK,MAAM,GAAG;AAAA,IAC7B,QAAQ;AACN,aAAO,EAAE,MAAM,eAAe,IAAI;AAAA,IACpC;AACA,WAAO,KAAK,cAAc,YAAY,GAAG;AAAA,EAC3C;AAAA,EACA,MAAM,cAAc,QAAQ,KAAK;AAC/B,QAAI,KAAK;AACP,aAAO,EAAE,MAAM,eAAe,KAAK,OAAO,KAAK,UAAU,MAAM,EAAE;AACnE,UAAM,SAAS,yBAAyB,UAAU,MAAM;AACxD,QAAI,CAAC,OAAO,SAAS;AACnB,aAAO,EAAE,MAAM,eAAe,KAAK,OAAO,KAAK,UAAU,MAAM,EAAE;AAAA,IACnE;AACA,UAAM,MAAM,OAAO;AACnB,QAAI,IAAI,aAAa,KAAK,MAAM,UAAU;AACxC,aAAO,EAAE,MAAM,eAAe,KAAK,OAAO,KAAK,UAAU,MAAM,EAAE;AAAA,IACnE;AACA,YAAQ,IAAI,MAAM;AAAA,MAChB,KAAK;AACH,cAAM,KAAK,gBAAgB,GAAG;AAC9B,eAAO,EAAE,MAAM,WAAW;AAAA,MAC5B,KAAK;AACH,cAAM,KAAK,WAAW,GAAG;AACzB,eAAO,EAAE,MAAM,WAAW;AAAA,MAC5B,KAAK;AACH,cAAM,KAAK,qBAAqB,GAAG;AACnC,eAAO,EAAE,MAAM,WAAW;AAAA,MAC5B,SAAS;AACP,cAAM,cAAc;AACpB,eAAO,EAAE,MAAM,eAAe,KAAK,OAAO,KAAK,UAAU,MAAM,EAAE;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AAAA,EACA,IAAI,YAAY;AACd,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,eAAe;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,MAAK,gBAAgB,KAAK;AACxB,UAAM,EAAE,OAAO,OAAO,QAAQ,IAAI;AAClC,UAAM,OAAO,KAAK,MAAM,iBAAiB,eAAe,OAAO,KAAK,KAAK,CAAC;AAC1E,UAAM,cAAc,KAAK,cAAc;AACvC,UAAM,OAAO,iBAAiB,KAAK,eAAe;AAAA,MAChD,MAAM;AAAA,MACN,UAAU,EAAE,OAAO,OAAO,QAAQ;AAAA,IACpC,CAAC;AACD,SAAK,gBAAgB,KAAK;AAC1B,QAAI,CAAC,MAAM;AACT,WAAK,qBAAqB,KAAK,OAAO;AAAA,IACxC;AACA,QAAI,KAAK,MAAM,iBAAiB,KAAK,cAAc,sBAAsB,aAAa;AACpF,YAAM,WAAW,KAAK,cAAc;AACpC,WAAK,MAAM,cAAc,KAAK,QAAQ,EAAE,MAAM,CAAC,QAAQ;AACrD,aAAK,MAAM,MAAM;AAAA,UACf,OAAO;AAAA,UACP,UAAU,KAAK,MAAM;AAAA,UACrB,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,QACxD,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AACA,SAAK,gBAAgB;AAAA,EACvB;AAAA,EACA,MAAK,WAAW,KAAK;AACnB,UAAM,OAAO,cAAc,KAAK,YAAY;AAAA,MAC1C,MAAM;AAAA,MACN,WAAW,IAAI;AAAA,IACjB,CAAC;AACD,SAAK,aAAa,KAAK;AACvB,UAAM,KAAK,kBAAkB,KAAK,OAAO;AAAA,EAC3C;AAAA,EACA,MAAK,qBAAqB,KAAK;AAC7B,UAAM,OAAO,cAAc,KAAK,YAAY;AAAA,MAC1C,MAAM;AAAA,MACN,WAAW,IAAI,YAAY;AAAA,IAC7B,CAAC;AACD,SAAK,aAAa,KAAK;AACvB,UAAM,KAAK,kBAAkB,KAAK,OAAO;AAAA,EAC3C;AAAA,EACA,MAAK,kBAAkB,SAAS;AAC9B,eAAW,UAAU,SAAS;AAC5B,cAAQ,OAAO,MAAM;AAAA,QACnB,KAAK;AACH,qBAAW,SAAS,OAAO,SAAS;AAClC,kBAAM,KAAK,MAAM,OAAO,IAAI,KAAK;AAAA,UACnC;AACA;AAAA,QACF,KAAK;AACH,eAAK,cAAc,OAAO,KAAK;AAC/B,eAAK,kBAAkB,OAAO,KAAK;AACnC;AAAA,QACF,KAAK,mBAAmB;AACtB,gBAAM,KAAK,MAAM,OAAO,UAAU,OAAO,SAAS;AAClD,gBAAM,mBAAmB,KAAK,oBAAoB,OAAO,SAAS;AAClE,eAAK,MAAM,MAAM;AAAA,YACf,OAAO;AAAA,YACP,UAAU,KAAK,MAAM;AAAA,YACrB,WAAW,OAAO;AAAA,YAClB;AAAA,UACF,CAAC;AACD;AAAA,QACF;AAAA,QACA,KAAK,iBAAiB;AACpB,2BAAiB,SAAS,KAAK,MAAM,OAAO,WAAW,OAAO,SAAS,GAAG;AACxE,iBAAK,cAAc,KAAK;AACxB,iBAAK,iBAAiB,KAAK;AAAA,UAC7B;AACA;AAAA,QACF;AAAA,QACA,SAAS;AACP,gBAAM,cAAc;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,kBAAkB,OAAO;AACvB,UAAM,MAAM,KAAK,KAAK;AACtB,SAAK,YAAY,IAAI,MAAM,OAAO;AAAA,MAChC;AAAA,MACA,SAAS;AAAA,MACT,iBAAiB,gBAAgB,GAAG,KAAK,KAAK,UAAU;AAAA,IAC1D,CAAC;AAAA,EACH;AAAA,EACA,iBAAiB,OAAO;AACtB,UAAM,MAAM,KAAK,KAAK;AACtB,UAAM,WAAW,KAAK,YAAY,IAAI,MAAM,KAAK;AACjD,UAAM,UAAU,WAAW,SAAS,UAAU,IAAI;AAClD,SAAK,YAAY,IAAI,MAAM,OAAO;AAAA,MAChC;AAAA,MACA;AAAA,MACA,iBAAiB,gBAAgB,SAAS,KAAK,KAAK,UAAU;AAAA,IAChE,CAAC;AAAA,EACH;AAAA,EACA,oBAAoB,WAAW;AAC7B,UAAM,SAAS,KAAK,YAAY;AAChC,eAAW,SAAS,KAAK,YAAY,KAAK,GAAG;AAC3C,UAAI,SAAS;AACX,aAAK,YAAY,OAAO,KAAK;AAAA,IACjC;AACA,eAAW,CAAC,KAAK,KAAK,KAAK,KAAK,kBAAkB;AAChD,UAAI,SAAS;AACX,aAAK,iBAAiB,OAAO,GAAG;AAAA,IACpC;AACA,WAAO,SAAS,KAAK,YAAY;AAAA,EACnC;AAAA,EACA,qBAAqB,SAAS;AAC5B,eAAW,UAAU,SAAS;AAC5B,cAAQ,OAAO,MAAM;AAAA,QACnB,KAAK;AACH,eAAK,MAAM,SAAS,OAAO,GAAG;AAC9B;AAAA,QACF,KAAK;AACH,eAAK,SAAS,MAAM;AACpB;AAAA,QACF,KAAK;AACH,eAAK,mBAAmB,MAAM;AAC9B;AAAA,QACF,KAAK;AACH,eAAK,MAAM,MAAM;AAAA,YACf,OAAO;AAAA,YACP,UAAU,OAAO;AAAA,YACjB,eAAe,OAAO;AAAA,UACxB,CAAC;AACD,cAAI,KAAK,MAAM,eAAe;AAC5B,iBAAK,MAAM,cAAc,MAAM,EAAE,MAAM,CAAC,QAAQ;AAC9C,mBAAK,MAAM,MAAM;AAAA,gBACf,OAAO;AAAA,gBACP,UAAU,OAAO;AAAA,gBACjB,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,cACxD,CAAC;AAAA,YACH,CAAC;AAAA,UACH;AACA;AAAA,QACF,SAAS;AACP,gBAAM,cAAc;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,kBAAkB;AAChB,QAAI,CAAC,KAAK,cAAc;AACtB;AACF,QAAI,KAAK,cAAc,sBAAsB;AAC3C;AACF,UAAM,MAAM;AAAA,MACV,MAAM;AAAA,MACN,UAAU,KAAK,cAAc;AAAA,MAC7B,WAAW,KAAK,cAAc;AAAA,IAChC;AACA,SAAK,MAAM,QAAQ,KAAK,UAAU,GAAG,CAAC;AACtC,SAAK,gBAAgB,YAAY,KAAK,eAAe,KAAK,KAAK,CAAC;AAAA,EAClE;AAAA,EACA,cAAc,OAAO;AACnB,UAAM,MAAM;AAAA,MACV,MAAM;AAAA,MACN,UAAU,KAAK,MAAM;AAAA,MACrB,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,MACb,SAAS,MAAM;AAAA,IACjB;AACA,SAAK,MAAM,QAAQ,KAAK,UAAU,GAAG,CAAC;AAAA,EACxC;AAAA,EACA,SAAS,KAAK;AACZ,UAAM,MAAM;AAAA,MACV,MAAM;AAAA,MACN,UAAU,IAAI;AAAA,MACd,WAAW,IAAI;AAAA,IACjB;AACA,SAAK,MAAM,QAAQ,KAAK,UAAU,GAAG,CAAC;AACtC,SAAK,gBAAgB,YAAY,KAAK,eAAe,KAAK,KAAK,CAAC;AAAA,EAClE;AAAA,EACA,mBAAmB,KAAK;AACtB,UAAM,MAAM;AAAA,MACV,MAAM;AAAA,MACN,UAAU,IAAI;AAAA,MACd,WAAW,IAAI;AAAA,IACjB;AACA,SAAK,MAAM,QAAQ,KAAK,UAAU,GAAG,CAAC;AAAA,EACxC;AAAA,EACA,OAAO;AACL,WAAO,KAAK,MAAM,MAAM,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI;AAAA,EACtD;AAAA,EACA,kBAAkB;AAChB,QAAI,KAAK,gBAAgB;AACvB;AACF,QAAI,KAAK;AACP;AACF,SAAK,cAAc,KAAK,aAAa,MAAM;AACzC,WAAK,MAAM;AAAA,IACb,GAAG,KAAK,eAAe;AAAA,EACzB;AAAA,EACA,iBAAiB;AACf,QAAI,KAAK,gBAAgB;AACvB;AACF,SAAK,eAAe,KAAK,WAAW;AACpC,SAAK,cAAc;AAAA,EACrB;AAAA,EACA,MAAK,QAAQ;AACX,QAAI,KAAK;AACP;AACF,QAAI,CAAC,KAAK,WAAW;AACnB;AACF,UAAM,MAAM,KAAK,KAAK;AACtB,UAAM,EAAE,KAAK,aAAa,IAAI,KAAK,uBAAuB,GAAG;AAC7D,eAAW,MAAM,cAAc;AAC7B,YAAM,KAAK,mBAAmB,EAAE;AAAA,IAClC;AACA,eAAW,MAAM,KAAK;AACpB,WAAK,eAAe,IAAI,GAAG;AAAA,IAC7B;AAAA,EACF;AAAA,EACA,uBAAuB,KAAK;AAC1B,UAAM,MAAM,CAAC;AACb,UAAM,eAAe,CAAC;AACtB,eAAW,MAAM,KAAK,YAAY,OAAO,GAAG;AAC1C,UAAI,MAAM,GAAG;AACX;AACF,UAAI,GAAG,WAAW,KAAK;AACrB,qBAAa,KAAK,EAAE;AAAA;AAEpB,YAAI,KAAK,EAAE;AAAA,IACf;AACA,WAAO,EAAE,KAAK,aAAa;AAAA,EAC7B;AAAA,EACA,MAAK,mBAAmB,IAAI;AAC1B,SAAK,YAAY,OAAO,GAAG,MAAM,KAAK;AACtC,SAAK,MAAM,MAAM;AAAA,MACf,OAAO;AAAA,MACP,UAAU,KAAK,MAAM;AAAA,MACrB,OAAO,GAAG,MAAM;AAAA,MAChB,OAAO,GAAG,MAAM;AAAA,MAChB,UAAU,GAAG;AAAA,IACf,CAAC;AACD,QAAI,KAAK,MAAM,cAAc;AAC3B,UAAI;AACF,aAAK,MAAM,aAAa,GAAG,OAAO,GAAG,OAAO;AAAA,MAC9C,SAAS,KAAK;AACZ,aAAK,MAAM,MAAM;AAAA,UACf,OAAO;AAAA,UACP,UAAU,KAAK,MAAM;AAAA,UACrB,OAAO,GAAG,MAAM;AAAA,UAChB,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,QACxD,CAAC;AAAA,MACH;AAAA,IACF;AACA,QAAI;AACF,YAAM,KAAK,MAAM,OAAO,UAAU,GAAG,MAAM,KAAK;AAAA,IAClD,SAAS,KAAK;AACZ,WAAK,MAAM,MAAM;AAAA,QACf,OAAO;AAAA,QACP,UAAU,KAAK,MAAM;AAAA,QACrB,OAAO,GAAG,MAAM;AAAA,QAChB,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,MACxD,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EACA,eAAe,IAAI,KAAK;AACtB,OAAG,WAAW;AACd,OAAG,kBAAkB,gBAAgB,GAAG,SAAS,KAAK,KAAK,UAAU;AACrE,SAAK,cAAc,GAAG,KAAK;AAC3B,SAAK,MAAM,MAAM;AAAA,MACf,OAAO;AAAA,MACP,UAAU,KAAK,MAAM;AAAA,MACrB,OAAO,GAAG,MAAM;AAAA,MAChB,OAAO,GAAG,MAAM;AAAA,MAChB,SAAS,GAAG;AAAA,IACd,CAAC;AAAA,EACH;AAAA,EACA,IAAI,oBAAoB;AACtB,WAAO,MAAM,KAAK,KAAK,YAAY,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ;AAAA,MACxD,OAAO,GAAG,MAAM;AAAA,MAChB,SAAS,GAAG;AAAA,MACZ,iBAAiB,GAAG;AAAA,IACtB,EAAE;AAAA,EACJ;AACF;AACA,SAAS,gBAAgB;AACvB,QAAM,IAAI,OAAO,eAAe,eAAe,YAAY,aAAa,WAAW,SAAS;AAC5F,MAAI,GAAG;AACL,WAAO,EAAE,WAAW;AACtB,SAAO,KAAK,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,SAAS,EAAE,CAAC;AAC5E;AAEA,IAAM,mBAAN,MAAuB;AAAA,EACrB,WAAW,oBAAI;AAAA,EACf;AAAA,EACA,YAAY,KAAK;AACf,SAAK,OAAO;AAAA,EACd;AAAA,EACA,WAAW,OAAO;AAChB,QAAI,SAAS,KAAK,SAAS,IAAI,MAAM,EAAE;AACvC,QAAI,CAAC,QAAQ;AACX,eAAS,EAAE,OAAO,IAAI,MAAM,MAAM,KAAK,EAAE,KAAK,EAAE,GAAG,UAAU,GAAG,OAAO,MAAM,MAAM;AACnF,WAAK,SAAS,IAAI,MAAM,IAAI,MAAM;AAAA,IACpC;AACA,QAAI,CAAC,OAAO,MAAM,MAAM,KAAK;AAC3B,aAAO;AACT,WAAO,MAAM,MAAM,KAAK,IAAI,MAAM;AAClC,QAAI,OAAO,WAAW,OAAO;AAC3B,aAAO;AACT,UAAM,YAAY,OAAO,MAAM,KAAK,EAAE;AACtC,SAAK,SAAS,OAAO,MAAM,EAAE;AAC7B,SAAK,KAAK,wDAAwD,MAAM,EAAE,KAAK,UAAU,MAAM,SAAS;AACxG,WAAO;AAAA,EACT;AAAA,EACA,kBAAkB,MAAM;AACtB,QAAI;AACJ,QAAI;AACF,eAAS,KAAK,MAAM,IAAI;AAAA,IAC1B,QAAQ;AACN,WAAK,KAAK,kDAAkD;AAC5D,aAAO;AAAA,IACT;AACA,QAAI,OAAO,WAAW,YAAY,WAAW,QAAQ,aAAa,UAAU,QAAQ,UAAU,WAAW,UAAU,WAAW,UAAU,UAAU,QAAQ;AACxJ,YAAM,QAAQ;AAAA,QACZ,IAAI,OAAO,OAAO,EAAE;AAAA,QACpB,OAAO,OAAO,OAAO,KAAK;AAAA,QAC1B,OAAO,OAAO,OAAO,KAAK;AAAA,QAC1B,MAAM,OAAO,OAAO,IAAI;AAAA,MAC1B;AACA,YAAM,cAAc,KAAK,WAAW,KAAK;AACzC,UAAI,CAAC;AACH,eAAO;AACT,UAAI;AACF,eAAO,KAAK,MAAM,WAAW;AAAA,MAC/B,QAAQ;AACN,aAAK,KAAK,6DAA6D;AACvE,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EACA,QAAQ;AACN,SAAK,SAAS,MAAM;AAAA,EACtB;AACF;AAEA,IAAI,oBAAoB;AACxB,IAAI,qBAAqB;AACzB,IAAI,eAAe;AACnB,SAAS,uBAAuB,MAAM,MAAM;AAC1C,QAAM,YAAY,MAAM,aAAa;AACrC,QAAM,YAAY,MAAM,aAAa;AACrC,MAAI,KAAK,UAAU;AACjB,WAAO,CAAC,IAAI;AACd,QAAM,KAAK,SAAS,KAAK,IAAI,CAAC,IAAI,cAAc;AAChD,QAAM,QAAQ,KAAK,KAAK,KAAK,SAAS,SAAS;AAC/C,QAAM,SAAS,CAAC;AAChB,WAAS,IAAI,GAAE,IAAI,OAAO,KAAK;AAC7B,WAAO,KAAK,KAAK,UAAU;AAAA,MACzB,SAAS;AAAA,MACT;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA,MAAM,KAAK,MAAM,IAAI,YAAY,IAAI,KAAK,SAAS;AAAA,IACrD,CAAC,CAAC;AAAA,EACJ;AACA,SAAO;AACT;AAEA,IAAI,2BAA2B;AAC/B,IAAI,2BAA2B;AAC/B,SAAS,oBAAoB,aAAa,YAAY;AACpD,SAAO;AAAA,IACL;AAAA,IACA,aAAa;AAAA,IACb,gBAAgB,CAAC;AAAA,IACjB,gBAAgB;AAAA,IAChB,cAAc;AAAA,EAChB;AACF;AACA,SAAS,cAAc,MAAM;AAC3B,SAAO;AAAA,IACL,gBAAgB,KAAK,kBAAkB;AAAA,IACvC,gBAAgB,KAAK,kBAAkB;AAAA,EACzC;AACF;AACA,SAAS,QAAQ,GAAG;AAClB,SAAO,EAAE;AACX;AACA,SAAS,iBAAiB,QAAQ;AAChC,MAAI,QAAQ;AACZ,aAAW,KAAK;AACd,aAAS,QAAQ,CAAC;AACpB,SAAO;AACT;AACA,SAAS,WAAW,OAAO,OAAO;AAChC,SAAO,EAAE,GAAG,OAAO,cAAc,MAAM,eAAe,MAAM;AAC9D;AACA,SAAS,UAAU,OAAO,OAAOC,SAAQ;AACvC,UAAQ,MAAM,MAAM;AAAA,IAClB,KAAK;AACH,aAAO,SAAS,OAAOA,OAAM;AAAA,IAC/B,KAAK;AACH,aAAO,UAAU,OAAO,MAAM,MAAM;AAAA,IACtC,KAAK;AACH,aAAO,mBAAmB,OAAO,MAAM,gBAAgBA,OAAM;AAAA,IAC/D,KAAK;AACH,aAAO,gBAAgB,OAAO,MAAM,MAAM,MAAM,QAAQ,MAAM,QAAQA,OAAM;AAAA,IAC9E,SAAS;AACP,YAAM,cAAc;AACpB,YAAM,IAAI,MAAM,wBAAwB,KAAK,UAAU,WAAW,CAAC,EAAE;AAAA,IACvE;AAAA,EACF;AACF;AACA,SAAS,SAAS,OAAOA,SAAQ;AAC/B,MAAI,MAAM,eAAe,QAAQ;AAC/B,WAAO,EAAE,UAAU,OAAO,SAAS,CAAC,GAAG,QAAQ,OAAO;AAAA,EACxD;AACA,MAAI,MAAM,eAAe,YAAY,MAAM,eAAe,WAAW;AACnE,WAAO,EAAE,UAAU,OAAO,SAAS,CAAC,GAAG,QAAQ,UAAU;AAAA,EAC3D;AACA,QAAM,UAAU,CAAC,EAAE,MAAM,YAAY,CAAC;AACtC,QAAM,YAAY,CAAC;AACnB,MAAI,iBAAiB;AACrB,MAAI,kBAAkB,MAAM;AAC5B,MAAI,UAAU;AACd,aAAW,OAAO,MAAM,gBAAgB;AACtC,UAAM,WAAW,QAAQ,GAAG;AAC5B,QAAI,CAAC,WAAW,kBAAkB,YAAYA,QAAO,gBAAgB;AACnE,cAAQ,KAAK,EAAE,MAAM,WAAW,MAAM,IAAI,CAAC;AAC3C,yBAAmB;AACnB;AAAA,IACF;AACA,cAAU;AACV,cAAU,KAAK,GAAG;AAClB,sBAAkB;AAAA,EACpB;AACA,SAAO;AAAA,IACL,UAAU;AAAA,MACR,GAAG;AAAA,MACH,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,aAAa;AAAA,IACf;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,EACV;AACF;AACA,SAAS,UAAU,OAAO,QAAQ;AAChC,MAAI,MAAM,eAAe,UAAU;AACjC,WAAO,EAAE,UAAU,OAAO,SAAS,CAAC,GAAG,QAAQ,UAAU;AAAA,EAC3D;AACA,QAAM,OAAO,WAAW,UAAU,YAAY;AAC9C,QAAM,UAAU,MAAM;AACtB,QAAM,sBAAsB,MAAM,eAAe;AACjD,QAAM,iBAAiB,UAAU,IAAI,CAAC,EAAE,MAAM,YAAY,QAAQ,UAAU,OAAO,SAAS,cAAc,oBAAoB,CAAC,IAAI,CAAC;AACpI,QAAM,WAAW;AAAA,IACf,GAAG;AAAA,IACH,YAAY;AAAA,IACZ,gBAAgB,CAAC;AAAA,IACjB,aAAa;AAAA,IACb,cAAc,MAAM,eAAe;AAAA,EACrC;AACA,SAAO;AAAA,IACL;AAAA,IACA,SAAS;AAAA,MACP,GAAG;AAAA,MACH,EAAE,MAAM,aAAa,QAAQ,oBAAoB,oBAAoB;AAAA,IACvE;AAAA,IACA,QAAQ;AAAA,EACV;AACF;AACA,SAAS,mBAAmB,OAAO,gBAAgBA,SAAQ;AACzD,MAAI,MAAM,eAAe,YAAY,MAAM,eAAe,WAAW;AACnE,WAAO,EAAE,UAAU,OAAO,SAAS,CAAC,GAAG,QAAQ,OAAO;AAAA,EACxD;AACA,QAAM,UAAU,EAAE,GAAG,OAAO,eAAe;AAC3C,MAAI,MAAM,eAAe,UAAU,MAAM,eAAe,WAAW,GAAG;AACpE,WAAO,EAAE,UAAU,SAAS,SAAS,CAAC,GAAG,QAAQ,OAAO;AAAA,EAC1D;AACA,MAAI,iBAAiBA,QAAO,gBAAgB;AAC1C,WAAO,EAAE,UAAU,SAAS,SAAS,CAAC,GAAG,QAAQ,OAAO;AAAA,EAC1D;AACA,QAAM,UAAU,CAAC,EAAE,MAAM,YAAY,CAAC;AACtC,aAAW,OAAO,MAAM,gBAAgB;AACtC,YAAQ,KAAK,EAAE,MAAM,WAAW,MAAM,IAAI,CAAC;AAAA,EAC7C;AACA,SAAO;AAAA,IACL,UAAU,EAAE,GAAG,SAAS,gBAAgB,CAAC,GAAG,aAAa,EAAE;AAAA,IAC3D;AAAA,IACA,QAAQ;AAAA,EACV;AACF;AACA,SAAS,gBAAgB,OAAO,OAAO,QAAQ,QAAQA,SAAQ;AAC7D,QAAM,QAAQ,iBAAiB,MAAM;AACrC,MAAI,MAAM,eAAe,YAAY,MAAM,eAAe,WAAW;AACnE,WAAO;AAAA,MACL,UAAU,WAAW,OAAO,KAAK;AAAA,MACjC,SAAS,CAAC,EAAE,MAAM,YAAY,QAAQ,UAAU,OAAO,cAAc,EAAE,CAAC;AAAA,MACxE,QAAQ;AAAA,IACV;AAAA,EACF;AACA,MAAI,QAAQA,QAAO,gBAAgB;AACjC,WAAO;AAAA,MACL,UAAU,WAAW,OAAO,KAAK;AAAA,MACjC,SAAS,CAAC,EAAE,MAAM,YAAY,QAAQ,YAAY,OAAO,cAAc,EAAE,CAAC;AAAA,MAC1E,QAAQ;AAAA,IACV;AAAA,EACF;AACA,MAAI,MAAM,eAAe,YAAY;AACnC,WAAO,gBAAgB,OAAO,QAAQ,OAAO,QAAQA,OAAM;AAAA,EAC7D;AACA,SAAO,aAAa,OAAO,QAAQ,OAAO,QAAQA,OAAM;AAC1D;AACA,SAAS,gBAAgB,OAAO,QAAQ,OAAO,QAAQA,SAAQ;AAC7D,MAAI,WAAW,QAAQ;AACrB,WAAO;AAAA,MACL,UAAU,WAAW,OAAO,KAAK;AAAA,MACjC,SAAS,CAAC,EAAE,MAAM,YAAY,QAAQ,YAAY,OAAO,cAAc,EAAE,CAAC;AAAA,MAC1E,QAAQ;AAAA,IACV;AAAA,EACF;AACA,MAAI,MAAM,cAAc,QAAQA,QAAO,gBAAgB;AACrD,WAAO;AAAA,MACL,UAAU,WAAW,OAAO,KAAK;AAAA,MACjC,SAAS,CAAC,EAAE,MAAM,YAAY,QAAQ,cAAc,OAAO,cAAc,EAAE,CAAC;AAAA,MAC5E,QAAQ;AAAA,IACV;AAAA,EACF;AACA,SAAO;AAAA,IACL,UAAU;AAAA,MACR,GAAG;AAAA,MACH,gBAAgB,CAAC,GAAG,MAAM,gBAAgB,GAAG,MAAM;AAAA,MACnD,aAAa,MAAM,cAAc;AAAA,IACnC;AAAA,IACA,SAAS,CAAC;AAAA,IACV,QAAQ;AAAA,EACV;AACF;AACA,SAAS,aAAa,OAAO,QAAQ,OAAO,QAAQA,SAAQ;AAC1D,MAAI,WAAW,SAAS;AACtB,WAAO,oBAAoB,OAAO,QAAQ,OAAOA,OAAM;AAAA,EACzD;AACA,MAAI,WAAW,QAAQ;AACrB,WAAO,mBAAmB,OAAO,QAAQ,OAAOA,OAAM;AAAA,EACxD;AACA,SAAO,mBAAmB,OAAO,QAAQ,OAAOA,OAAM;AACxD;AACA,SAAS,oBAAoB,OAAO,QAAQ,OAAOA,SAAQ;AACzD,MAAI,MAAM,eAAe,SAAS,GAAG;AACnC,QAAI,MAAM,cAAc,QAAQA,QAAO,gBAAgB;AACrD,aAAO;AAAA,QACL,UAAU,WAAW,OAAO,KAAK;AAAA,QACjC,SAAS,CAAC,EAAE,MAAM,YAAY,QAAQ,cAAc,OAAO,cAAc,EAAE,CAAC;AAAA,QAC5E,QAAQ;AAAA,MACV;AAAA,IACF;AACA,WAAO;AAAA,MACL,UAAU;AAAA,QACR,GAAG;AAAA,QACH,gBAAgB,CAAC,GAAG,MAAM,gBAAgB,GAAG,MAAM;AAAA,QACnD,aAAa,MAAM,cAAc;AAAA,MACnC;AAAA,MACA,SAAS,CAAC;AAAA,MACV,QAAQ;AAAA,IACV;AAAA,EACF;AACA,QAAM,UAAU,CAAC;AACjB,aAAW,KAAK;AACd,YAAQ,KAAK,EAAE,MAAM,WAAW,MAAM,EAAE,CAAC;AAC3C,SAAO,EAAE,UAAU,OAAO,SAAS,QAAQ,OAAO;AACpD;AACA,SAAS,mBAAmB,OAAO,QAAQ,OAAOA,SAAQ;AACxD,MAAI,MAAM,iBAAiBA,QAAO,gBAAgB;AAChD,WAAO;AAAA,MACL,UAAU,WAAW,OAAO,KAAK;AAAA,MACjC,SAAS,CAAC,EAAE,MAAM,YAAY,QAAQ,gBAAgB,OAAO,cAAc,EAAE,CAAC;AAAA,MAC9E,QAAQ;AAAA,IACV;AAAA,EACF;AACA,QAAM,UAAU,CAAC;AACjB,aAAW,KAAK;AACd,YAAQ,KAAK,EAAE,MAAM,WAAW,MAAM,EAAE,CAAC;AAC3C,SAAO,EAAE,UAAU,OAAO,SAAS,QAAQ,OAAO;AACpD;AACA,SAAS,mBAAmB,OAAO,QAAQ,OAAOA,SAAQ;AACxD,QAAM,cAAc,MAAM,iBAAiBA,QAAO,kBAAkB,MAAM,eAAe,SAAS;AAClG,MAAI,aAAa;AACf,QAAI,MAAM,cAAc,QAAQA,QAAO,gBAAgB;AACrD,aAAO;AAAA,QACL,UAAU,WAAW,OAAO,KAAK;AAAA,QACjC,SAAS,CAAC,EAAE,MAAM,YAAY,QAAQ,cAAc,OAAO,cAAc,EAAE,CAAC;AAAA,QAC5E,QAAQ;AAAA,MACV;AAAA,IACF;AACA,WAAO;AAAA,MACL,UAAU;AAAA,QACR,GAAG;AAAA,QACH,gBAAgB,CAAC,GAAG,MAAM,gBAAgB,GAAG,MAAM;AAAA,QACnD,aAAa,MAAM,cAAc;AAAA,MACnC;AAAA,MACA,SAAS,CAAC;AAAA,MACV,QAAQ;AAAA,IACV;AAAA,EACF;AACA,QAAM,UAAU,CAAC;AACjB,aAAW,KAAK;AACd,YAAQ,KAAK,EAAE,MAAM,WAAW,MAAM,EAAE,CAAC;AAC3C,SAAO,EAAE,UAAU,OAAO,SAAS,QAAQ,OAAO;AACpD;AAEA,IAAM,iBAAN,MAAqB;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,kBAAkB,oBAAI;AAAA,EACtB,kBAAkB,oBAAI;AAAA,EACtB,iBAAiB,oBAAI;AAAA,EACrB,kBAAkB,oBAAI;AAAA,EACtB,qBAAqB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB,YAAY,IAAI,MAAM;AACpB,SAAK,MAAM;AACX,SAAK,QAAQ;AACb,SAAK,UAAU,cAAc,IAAI;AACjC,SAAK,kBAAkB,KAAK,kBAAkB;AAC9C,UAAM,UAAU,GAAG,eAAe,SAAS,SAAS,GAAG,eAAe,WAAW,WAAW;AAC5F,SAAK,SAAS,oBAAoB,OAAO;AACzC,SAAK,eAAe,MAAM,KAAK,UAAU,EAAE,MAAM,OAAO,CAAC;AACzD,SAAK,gBAAgB,MAAM,KAAK,UAAU,EAAE,MAAM,SAAS,QAAQ,QAAQ,CAAC;AAC5E,SAAK,gBAAgB,MAAM,KAAK,UAAU,EAAE,MAAM,SAAS,QAAQ,QAAQ,CAAC;AAC5E,SAAK,gBAAgB,MAAM;AACzB,WAAK,UAAU;AAAA,QACb,MAAM;AAAA,QACN,gBAAgB,KAAK,IAAI,kBAAkB;AAAA,MAC7C,CAAC;AAAA,IACH;AACA,SAAK,eAAe;AACpB,QAAI,YAAY,UAAU;AACxB,qBAAe,MAAM;AACnB,YAAI,KAAK;AACP;AACF,mBAAW,MAAM,KAAK,iBAAiB;AACrC,aAAG,EAAE,QAAQ,SAAS,oBAAoB,EAAE,CAAC;AAAA,QAC/C;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK,OAAO,eAAe;AAAA,EACpC;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK;AAAA,EACd;AAAA,EACA,KAAK,MAAM;AACT,QAAI,KAAK;AACP,aAAO;AACT,UAAM,eAAe,KAAK,IAAI;AAC9B,QAAI,OAAO,iBAAiB,YAAY,iBAAiB,KAAK,OAAO,gBAAgB;AACnF,WAAK,UAAU,EAAE,MAAM,wBAAwB,gBAAgB,aAAa,CAAC;AAAA,IAC/E;AACA,UAAM,SAAS,KAAK,MAAM,QAAQ,uBAAuB,IAAI,IAAI,CAAC,IAAI;AACtE,UAAM,SAAS,KAAK,UAAU;AAAA,MAC5B,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,QAAQ,KAAK,MAAM;AAAA,IACrB,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EACA,QAAQ,IAAI;AACV,SAAK,gBAAgB,IAAI,EAAE;AAC3B,WAAO,MAAM;AACX,WAAK,gBAAgB,OAAO,EAAE;AAAA,IAChC;AAAA,EACF;AAAA,EACA,QAAQ,IAAI;AACV,SAAK,gBAAgB,IAAI,EAAE;AAC3B,WAAO,MAAM;AACX,WAAK,gBAAgB,OAAO,EAAE;AAAA,IAChC;AAAA,EACF;AAAA,EACA,OAAO,IAAI;AACT,SAAK,eAAe,IAAI,EAAE;AAC1B,WAAO,MAAM;AACX,WAAK,eAAe,OAAO,EAAE;AAAA,IAC/B;AAAA,EACF;AAAA,EACA,QAAQ,IAAI;AACV,SAAK,gBAAgB,IAAI,EAAE;AAC3B,WAAO,MAAM;AACX,WAAK,gBAAgB,OAAO,EAAE;AAAA,IAChC;AAAA,EACF;AAAA,EACA,UAAU;AACR,QAAI,KAAK;AACP;AACF,SAAK,YAAY;AACjB,SAAK,iBAAiB;AACtB,QAAI,KAAK,OAAO,eAAe,YAAY,KAAK,OAAO,eAAe,WAAW;AAC/E,WAAK,UAAU,EAAE,MAAM,SAAS,QAAQ,UAAU,CAAC;AAAA,IACrD;AACA,SAAK,gBAAgB,MAAM;AAC3B,SAAK,gBAAgB,MAAM;AAC3B,SAAK,eAAe,MAAM;AAC1B,SAAK,gBAAgB,MAAM;AAAA,EAC7B;AAAA,EACA,UAAU,OAAO;AACf,UAAM,EAAE,UAAU,SAAS,OAAO,IAAI,UAAU,KAAK,QAAQ,OAAO,KAAK,OAAO;AAChF,SAAK,SAAS;AACd,eAAW,UAAU,SAAS;AAC5B,WAAK,WAAW,MAAM;AAAA,IACxB;AACA,WAAO;AAAA,EACT;AAAA,EACA,WAAW,QAAQ;AACjB,YAAQ,OAAO,MAAM;AAAA,MACnB,KAAK;AACH,aAAK,SAAS,OAAO,IAAI;AACzB;AAAA,MACF,KAAK;AACH,mBAAW,MAAM,KAAK,iBAAiB;AACrC,yBAAe,MAAM,GAAG,CAAC;AAAA,QAC3B;AACA;AAAA,MACF,KAAK;AACH,aAAK,UAAU,OAAO,QAAQ,OAAO,OAAO,OAAO,YAAY;AAC/D;AAAA,MACF,KAAK;AACH,mBAAW,MAAM,KAAK,iBAAiB;AACrC,yBAAe,MAAM,GAAG,CAAC;AAAA,QAC3B;AACA;AAAA,MACF,KAAK,aAAa;AAChB,cAAM,OAAO;AAAA,UACX,QAAQ,OAAO;AAAA,UACf,oBAAoB,OAAO;AAAA,QAC7B;AACA,mBAAW,MAAM,KAAK,iBAAiB;AACrC,yBAAe,MAAM,GAAG,IAAI,CAAC;AAAA,QAC/B;AACA;AAAA,MACF;AAAA,MACA,SAAS;AACP,cAAM,cAAc;AACpB,cAAM,IAAI,MAAM,qBAAqB,KAAK,UAAU,WAAW,CAAC,EAAE;AAAA,MACpE;AAAA,IACF;AAAA,EACF;AAAA,EACA,SAAS,MAAM;AACb,QAAI;AACF,WAAK,IAAI,KAAK,IAAI;AAAA,IACpB,QAAQ;AACN,WAAK,SAAS,WAAW,KAAK,QAAQ,QAAQ,IAAI,CAAC;AACnD,WAAK,UAAU,UAAU,QAAQ,IAAI,GAAG,CAAC;AAAA,IAC3C;AAAA,EACF;AAAA,EACA,UAAU,QAAQ,OAAO,cAAc;AACrC,UAAM,OAAO;AAAA,MACX,OAAO,KAAK,MAAM;AAAA,MAClB;AAAA,MACA;AAAA,MACA,cAAc,KAAK,OAAO;AAAA,MAC1B,qBAAqB;AAAA,MACrB,YAAY,KAAK,OAAO;AAAA,MACxB,gBAAgB,KAAK,IAAI,kBAAkB,KAAK,OAAO;AAAA,IACzD;AACA,eAAW,MAAM,KAAK,gBAAgB;AACpC,qBAAe,MAAM,GAAG,IAAI,CAAC;AAAA,IAC/B;AACA,SAAK,oBAAoB,IAAI;AAAA,EAC/B;AAAA,EACA,oBAAoB,MAAM;AACxB,SAAK,sBAAsB;AAC3B,QAAI,CAAC,KAAK,MAAM;AACd;AACF,UAAM,MAAM,KAAK,IAAI;AACrB,QAAI,MAAM,KAAK,aAAa,KAAK;AAC/B;AACF,SAAK,aAAa;AAClB,UAAM,gBAAgB,KAAK;AAC3B,SAAK,qBAAqB;AAC1B,SAAK,MAAM,WAAW;AAAA,MACpB,OAAO;AAAA,MACP,OAAO,KAAK;AAAA,MACZ,QAAQ,KAAK;AAAA,MACb,OAAO,KAAK;AAAA,MACZ,cAAc,KAAK;AAAA,MACnB,qBAAqB,KAAK;AAAA,MAC1B,YAAY,KAAK;AAAA,MACjB,gBAAgB,KAAK;AAAA,MACrB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EACA,iBAAiB;AACf,QAAI,KAAK;AACP;AACF,SAAK,kBAAkB;AACvB,UAAM,KAAK,KAAK;AAChB,QAAI,OAAO,GAAG,qBAAqB,YAAY;AAC7C,SAAG,iBAAiB,QAAQ,KAAK,YAAY;AAC7C,SAAG,iBAAiB,SAAS,KAAK,aAAa;AAC/C,SAAG,iBAAiB,SAAS,KAAK,aAAa;AAC/C,SAAG,iBAAiB,qBAAqB,KAAK,aAAa;AAAA,IAC7D;AAAA,EACF;AAAA,EACA,mBAAmB;AACjB,QAAI,CAAC,KAAK;AACR;AACF,SAAK,kBAAkB;AACvB,UAAM,KAAK,KAAK;AAChB,QAAI,OAAO,GAAG,wBAAwB,YAAY;AAChD,SAAG,oBAAoB,QAAQ,KAAK,YAAY;AAChD,SAAG,oBAAoB,SAAS,KAAK,aAAa;AAClD,SAAG,oBAAoB,SAAS,KAAK,aAAa;AAClD,SAAG,oBAAoB,qBAAqB,KAAK,aAAa;AAAA,IAChE;AAAA,EACF;AACF;AAEA,IAAI,kCAAkC;AACtC,IAAI,cAAc;AAClB,IAAI,kBAAkB;AACtB,IAAI,aAAa;AACjB,IAAI,iBAAiB;AACrB,IAAI,cAAc;AAClB,IAAI,kBAAkB;AACtB,IAAI,oBAAoB;AACxB,IAAI,aAAa;AACjB,IAAI,aAAa;AACjB,IAAI,cAAc;AAClB,IAAI,qBAAqB;AACzB,IAAI,gBAAgB;AACpB,IAAI,cAAc,IAAI;AACtB,IAAI,cAAc,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC;AAI1D,SAAS,eAAe,SAAS;AAC/B,SAAO,eAAe,iBAAiB,OAAO;AAChD;AAIA,SAAS,cAAc,OAAO;AAC5B,SAAO,gBAAgB,gBAAgB,KAAK;AAC9C;AACA,SAAS,YAAY,OAAO;AAC1B,SAAO,gBAAgB,aAAa,KAAK;AAC3C;AACA,SAAS,eAAe,OAAO,MAAM;AACnC,SAAO,uBAAuB,iBAAiB,OAAO,YAAY,OAAO,IAAI,CAAC;AAChF;AACA,SAAS,iBAAiB,OAAO,MAAM;AACrC,SAAO,uBAAuB,mBAAmB,OAAO,IAAI;AAC9D;AAIA,SAAS,aAAa;AACpB,SAAO,YAAY,UAAU;AAC/B;AACA,SAAS,YAAY,OAAO,cAAc;AACxC,QAAM,UAAU,IAAI,WAAW,CAAC;AAChC,QAAM,OAAO,IAAI,SAAS,QAAQ,MAAM;AACxC,OAAK,UAAU,GAAG,cAAc,IAAI;AACpC,SAAO,uBAAuB,aAAa,OAAO,OAAO;AAC3D;AACA,SAAS,YAAY,OAAO;AAC1B,MAAI,MAAM,aAAa;AACrB,WAAO;AACT,QAAM,OAAO,IAAI,SAAS,MAAM,QAAQ,MAAM,YAAY,MAAM,UAAU;AAC1E,QAAM,YAAY,KAAK,SAAS,CAAC;AACjC,QAAM,WAAW,KAAK,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,KAAK,IAAI,KAAK,SAAS,CAAC,KAAK;AAChF,QAAM,WAAW,qBAAqB;AACtC,MAAI,WAAW,MAAM;AACnB,WAAO;AACT,QAAM,QAAQ,WAAW,IAAI,WAAW,MAAM,SAAS,oBAAoB,QAAQ,CAAC,IAAI;AACxF,MAAI,UAAU;AACZ,WAAO;AACT,SAAO,EAAE,WAAW,OAAO,SAAS,MAAM,SAAS,QAAQ,EAAE;AAC/D;AACA,SAAS,YAAY,SAAS;AAC5B,QAAM,SAAS,iBAAiB,SAAS,cAAc;AACvD,MAAI,WAAW;AACb,WAAO,EAAE,IAAI,OAAO,OAAO,eAAe;AAC5C,MAAI,WAAW;AACb,WAAO,EAAE,IAAI,OAAO,OAAO,wBAAwB;AACrD,SAAO,EAAE,IAAI,MAAM,OAAO,EAAE,MAAM,aAAa,SAAS,OAAO,EAAE;AACnE;AACA,SAAS,eAAe,SAAS;AAC/B,QAAM,SAAS,iBAAiB,SAAS,iBAAiB;AAC1D,MAAI,WAAW;AACb,WAAO,EAAE,IAAI,OAAO,OAAO,eAAe;AAC5C,MAAI,WAAW;AACb,WAAO,EAAE,IAAI,OAAO,OAAO,4BAA4B;AACzD,SAAO,EAAE,IAAI,MAAM,OAAO,EAAE,MAAM,iBAAiB,SAAS,OAAO,EAAE;AACvE;AACA,SAAS,WAAW,OAAO,SAAS;AAClC,QAAM,UAAU,QAAQ,aAAa,IAAI,WAAW,OAAO,IAAI;AAC/D,MAAI,YAAY;AACd,WAAO,EAAE,IAAI,OAAO,OAAO,eAAe;AAC5C,MAAI;AACF,UAAM,MAAM,QAAQ,aAAa,IAAI,KAAK,MAAM,OAAO,IAAI,CAAC;AAC5D,UAAM,OAAO,EAAE,SAAS,OAAO,KAAK,YAAY,YAAY,IAAI,UAAU,KAAK;AAC/E,WAAO,EAAE,IAAI,MAAM,OAAO,EAAE,MAAM,YAAY,OAAO,KAAK,EAAE;AAAA,EAC9D,QAAQ;AACN,WAAO,EAAE,IAAI,OAAO,OAAO,eAAe;AAAA,EAC5C;AACF;AACA,SAAS,eAAe,OAAO,SAAS;AACtC,QAAM,OAAO,QAAQ,aAAa,IAAI,WAAW,OAAO,IAAI;AAC5D,MAAI,SAAS;AACX,WAAO,EAAE,IAAI,OAAO,OAAO,eAAe;AAC5C,SAAO,EAAE,IAAI,MAAM,OAAO,EAAE,MAAM,iBAAiB,OAAO,KAAK,EAAE;AACnE;AACA,SAAS,YAAY,OAAO,SAAS;AACnC,MAAI,QAAQ,eAAe;AACzB,WAAO,EAAE,IAAI,OAAO,OAAO,2BAA2B;AACxD,QAAM,OAAO,IAAI,SAAS,QAAQ,QAAQ,QAAQ,YAAY,QAAQ,UAAU;AAChF,SAAO,EAAE,IAAI,MAAM,OAAO,EAAE,MAAM,aAAa,OAAO,cAAc,KAAK,UAAU,GAAG,IAAI,EAAE,EAAE;AAChG;AACA,SAAS,YAAY,OAAO;AAC1B,QAAM,SAAS,YAAY,KAAK;AAChC,MAAI,OAAO,WAAW;AACpB,WAAO,EAAE,IAAI,OAAO,OAAO,OAAO;AACpC,QAAM,EAAE,WAAW,OAAO,QAAQ,IAAI;AACtC,UAAQ,WAAW;AAAA,IACjB,KAAK;AACH,aAAO,YAAY,OAAO;AAAA,IAC5B,KAAK;AACH,aAAO,eAAe,OAAO;AAAA,IAC/B,KAAK;AACH,aAAO,WAAW,OAAO,OAAO;AAAA,IAClC,KAAK;AACH,aAAO,EAAE,IAAI,MAAM,OAAO,EAAE,MAAM,gBAAgB,MAAM,EAAE;AAAA,IAC5D,KAAK;AACH,aAAO,EAAE,IAAI,MAAM,OAAO,EAAE,MAAM,aAAa,MAAM,EAAE;AAAA,IACzD,KAAK;AACH,aAAO,eAAe,OAAO,OAAO;AAAA,IACtC,KAAK;AACH,aAAO,EAAE,IAAI,MAAM,OAAO,EAAE,MAAM,mBAAmB,OAAO,MAAM,IAAI,WAAW,OAAO,EAAE,EAAE;AAAA,IAC9F,KAAK;AACH,aAAO,EAAE,IAAI,MAAM,OAAO,EAAE,MAAM,WAAW,EAAE;AAAA,IACjD,KAAK;AACH,aAAO,EAAE,IAAI,MAAM,OAAO,EAAE,MAAM,WAAW,EAAE;AAAA,IACjD,KAAK;AACH,aAAO,YAAY,OAAO,OAAO;AAAA,IACnC;AACE,aAAO,EAAE,IAAI,OAAO,OAAO,qBAAqB;AAAA,EACpD;AACF;AACA,SAAS,YAAY,WAAW;AAC9B,QAAM,MAAM,IAAI,WAAW,kBAAkB;AAC7C,MAAI,CAAC,IAAI;AACT,SAAO;AACT;AACA,SAAS,gBAAgB,WAAW,OAAO;AACzC,QAAM,aAAa,YAAY,OAAO,KAAK;AAC3C,iBAAe,WAAW,UAAU;AACpC,QAAM,MAAM,IAAI,WAAW,qBAAqB,WAAW,UAAU;AACrE,cAAY,KAAK,WAAW,WAAW,UAAU;AACjD,MAAI,IAAI,YAAY,kBAAkB;AACtC,SAAO;AACT;AACA,SAAS,uBAAuB,WAAW,OAAO,SAAS;AACzD,QAAM,aAAa,YAAY,OAAO,KAAK;AAC3C,iBAAe,WAAW,UAAU;AACpC,QAAM,MAAM,IAAI,WAAW,qBAAqB,WAAW,aAAa,QAAQ,UAAU;AAC1F,cAAY,KAAK,WAAW,WAAW,UAAU;AACjD,MAAI,IAAI,YAAY,kBAAkB;AACtC,MAAI,IAAI,SAAS,qBAAqB,WAAW,UAAU;AAC3D,SAAO;AACT;AACA,SAAS,eAAe,WAAW,SAAS;AAC1C,QAAM,eAAe,YAAY,OAAO,KAAK,UAAU,OAAO,CAAC;AAC/D,QAAM,MAAM,IAAI,WAAW,qBAAqB,aAAa,UAAU;AACvE,cAAY,KAAK,WAAW,CAAC;AAC7B,MAAI,IAAI,cAAc,kBAAkB;AACxC,SAAO;AACT;AACA,SAAS,YAAY,KAAK,WAAW,UAAU;AAC7C,MAAI,CAAC,IAAI;AACT,MAAI,CAAC,IAAI,WAAW;AACpB,MAAI,CAAC,IAAI,YAAY,IAAI;AACzB,MAAI,CAAC,IAAI,YAAY,KAAK;AAC5B;AACA,SAAS,eAAe,KAAK;AAC3B,MAAI,MAAM,eAAe;AACvB,UAAM,IAAI,WAAW,gBAAgB,GAAG,gBAAgB,aAAa,EAAE;AAAA,EACzE;AACF;AACA,IAAI,qBAAqB,uBAAO,aAAa;AAC7C,SAAS,WAAW,OAAO;AACzB,MAAI;AACF,WAAO,YAAY,OAAO,KAAK;AAAA,EACjC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AACA,IAAI,cAAc,uBAAO,aAAa;AACtC,IAAI,eAAe,uBAAO,cAAc;AACxC,SAAS,iBAAiB,SAAS,OAAO;AACxC,QAAMC,QAAO,WAAW,OAAO;AAC/B,MAAIA,UAAS;AACX,WAAO;AACT,MAAI;AACJ,MAAI;AACF,aAAS,KAAK,MAAMA,KAAI;AAAA,EAC1B,QAAQ;AACN,WAAO;AAAA,EACT;AACA,MAAI,CAAC,MAAM,MAAM;AACf,WAAO;AACT,SAAO;AACT;AACA,SAAS,eAAe,OAAO;AAC7B,MAAI,OAAO,UAAU,YAAY,UAAU;AACzC,WAAO;AACT,QAAM,IAAI;AACV,SAAO,OAAO,EAAE,oBAAoB,YAAY,OAAO,EAAE,UAAU,YAAY,OAAO,EAAE,qBAAqB;AAC/G;AACA,SAAS,kBAAkB,OAAO;AAChC,MAAI,OAAO,UAAU,YAAY,UAAU;AACzC,WAAO;AACT,QAAM,IAAI;AACV,MAAI,OAAO,EAAE,oBAAoB;AAC/B,WAAO;AACT,MAAI,OAAO,EAAE,aAAa;AACxB,WAAO;AACT,MAAI,EAAE,WAAW,UAAa,OAAO,EAAE,WAAW;AAChD,WAAO;AACT,SAAO;AACT;;;AtD/2NA,IAAM,wBAAsD,oBAAI,IAAI;AAAA,EAClE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAQD,IAAI,SAA8C;AAE3C,SAAS,sBAAoD;AAClE,MAAI,OAAQ,QAAO;AACnB,QAAM,EAAE,WAAW,OAAO,IAAI,SAAS;AACvC,WAAS;AACT,MAAI,WAAW,UAAU;AAOvB,UAAM,UAAU,kBAAkB,OAAO,CAAC,MAAM,MAAM,UAAU,CAAC,UAAU,IAAI,CAAC,CAAC;AACjF,QAAI,QAAQ,SAAS,GAAG;AACtB,aAAO;AAAA,QACL,EAAE,WAAW,CAAC,GAAG,SAAS,GAAG,QAAQ;AAAA,QACrC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAYO,SAAS,wBAAwB,WAAwD;AAC9F,QAAMC,SAAQ,UAAU,MAAM,kDAAkD;AAChF,MAAI,CAACA,SAAQ,CAAC,EAAG,QAAO;AACxB,QAAM,UAAU,oBAAI,IAAqB;AACzC,aAAW,SAASA,OAAM,CAAC,EAAE,MAAM,GAAG,GAAG;AACvC,UAAM,IAAI,MAAM,KAAK;AACrB,QAAI,kBAAkB,CAAC,EAAG,SAAQ,IAAI,CAAC;AAAA,EACzC;AACA,SAAO,QAAQ,OAAO,IAAI,UAAU;AACtC;AAWA,IAAM,aAAkC,IAAI,IAAI,iBAAiB;AACjE,SAAS,kBAAkB,OAAyC;AAClE,SAAO,WAAW,IAAI,KAAK;AAC7B;AAEA,SAAS,WAAwB;AAC/B,MAAI;AACF,UAAM,aAAa,2BAA2B;AAC9C,QAAI,CAAC,cAAc,CAAC,WAAW,UAAU,GAAG;AAC1C,aAAO;AAAA,QACL,EAAE,WAAW;AAAA,QACb;AAAA,MACF;AACA,aAAO,EAAE,WAAW,uBAAuB,QAAQ,WAAW;AAAA,IAChE;AACA,UAAM,QAAQ,gCAAgC,UAAU;AACxD,QAAI,UAAU,MAAM;AAClB,aAAO;AAAA,QACL,EAAE,WAAW;AAAA,QACb;AAAA,MACF;AACA,aAAO,EAAE,WAAW,uBAAuB,QAAQ,WAAW;AAAA,IAChE;AACA,UAAM,SAAS,wBAAwB,KAAK;AAC5C,QAAI,CAAC,QAAQ;AACX,aAAO;AAAA,QACL,EAAE,WAAW;AAAA,QACb;AAAA,MACF;AACA,aAAO,EAAE,WAAW,uBAAuB,QAAQ,WAAW;AAAA,IAChE;AACA,WAAO,EAAE,WAAW,QAAQ,QAAQ,SAAS;AAAA,EAC/C,SAAS,KAAK;AACZ,WAAO,KAAK,EAAE,IAAI,GAAG,oDAAoD;AACzE,WAAO,EAAE,WAAW,uBAAuB,QAAQ,WAAW;AAAA,EAChE;AACF;AAEA,SAAS,6BAA4C;AACnD,QAAM,MAAM,cAAc,YAAY,GAAG;AACzC,QAAM,UAAU,IAAI,QAAQ,gCAAgC;AAC5D,QAAM,SAAS,cAAc,OAAO;AACpC,QAAMC,OAAM,QAAQ,aAAa,UAAU,SAAS;AACpD,QAAM,aACJ,QAAQ,aAAa,UACjB;AAAA,IACE,wCAAwC,QAAQ,IAAI;AAAA,IACpD,wCAAwC,QAAQ,IAAI;AAAA,EACtD,IACA,CAAC,kCAAkC,QAAQ,QAAQ,IAAI,QAAQ,IAAI,EAAE;AAC3E,aAAW,OAAO,YAAY;AAC5B,QAAI;AACF,aAAO,OAAO,QAAQ,GAAG,GAAG,UAAUA,IAAG,EAAE;AAAA,IAC7C,SAAS,KAAK;AACZ,aAAO,MAAM,EAAE,KAAK,IAAI,GAAG,iDAAiD;AAAA,IAC9E;AAAA,EACF;AACA,SAAO;AACT;AASA,SAAS,gCAAgC,YAAmC;AAC1E,QAAM,MAAM,aAAa,UAAU;AACnC,QAAM,SAAS,OAAO,KAAK,sCAAsC;AACjE,QAAM,MAAM,IAAI,QAAQ,MAAM;AAC9B,MAAI,QAAQ,GAAI,QAAO;AACvB,QAAM,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI,MAAM;AAC1C,SAAO,IAAI,SAAS,SAAS,KAAK,GAAG;AACvC;;;AqInJA,eAAsB,aAAa,WAA+C;AAChF,QAAM,SAAsB,CAAC;AAE7B,MAAI;AACF,UAAM,IAAI,SAAS,CAAC,QAAQ,CAAC;AAC7B,UAAM,YAAY,oBAAoB;AAOtC,UAAM,SAAS,CAAC,YACd,QAAQ,OAAO,CAAC,MAAM,MAAM,UAAU,UAAU,IAAI,CAAC,CAAC;AAMxD,UAAM,cAAc,CAAC,SAA0B,YAAgD;AAC7F,UAAI,QAAQ,SAAS,OAAO,EAAG,QAAO;AACtC,YAAM,WAAW,QAAQ,OAAO,CAAC,MAAM,MAAM,MAAM;AACnD,aAAO,SAAS,SAAS,SAAS,CAAC,KAAK;AAAA,IAC1C;AAEA,UAAM,cAAc,OAAO,CAAC,QAAQ,OAAO,UAAU,QAAQ,SAAS,KAAK,CAAC;AAC5E,UAAM,gBAAgB,OAAO,CAAC,QAAQ,OAAO,UAAU,QAAQ,KAAK,CAAC;AAErE,WAAO;AAAA,MACL;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,WAAW,EAAE,SAAS,aAAa,eAAe,YAAY,QAAQ,WAAW,EAAE;AAAA,QACnF,kBAAkB;AAAA,MACpB;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,WAAW,EAAE,SAAS,eAAe,eAAe,YAAY,UAAU,aAAa,EAAE;AAAA,MAC3F;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF,SAAS,KAAK;AAWZ,QAAI,aAAa,UAAU,SAAS,GAAG;AACrC,aAAO;AAAA,QACL,EAAE,KAAK,gBAAgB,UAAU,OAAO;AAAA,QACxC;AAAA,MACF;AACA,aAAO;AAAA,IACT;AACA,WAAO,MAAM,EAAE,IAAI,GAAG,+CAA+C;AAAA,EACvE;AAEA,SAAO;AACT;;;ACpFA,IAAM,oBACJ;AAEF,IAAM,eAAwC;AAAA,EAC5C,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AACV;AAEA,IAAM,qBAAqB,iBACxB,OAAO;AAAA,EACN,QAAQ,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,OAAO,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,OAAO,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,QAAQ,iBAAE,OAAO,EAAE,OAAO,iBAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,SAAS;AAAA,EAC/D,KAAK,iBAAE,OAAO,EAAE,SAAS;AAAA,EACzB,aAAa,iBAAE,OAAO,EAAE,SAAS;AAAA,EACjC,aAAa,iBAAE,OAAO,EAAE,SAAS;AAAA,EACjC,MAAM,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,SAAS,iBAAE,QAAQ,EAAE,SAAS;AAAA,EAC9B,WAAW,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,WAAW,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,cAAc,iBAAE,OAAO,EAAE,SAAS;AAAA,EAClC,WAAW,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,WAAW,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,mBAAmB,iBAAE,MAAM,iBAAE,OAAO,iBAAE,OAAO,GAAG,iBAAE,QAAQ,CAAC,CAAC,EAAE,SAAS;AAAA,EACvE,SAAS,iBACN,MAAM;AAAA,IACL,iBAAE,MAAM,iBAAE,OAAO,iBAAE,OAAO,GAAG,iBAAE,QAAQ,CAAC,CAAC;AAAA,IACzC,iBAAE,OAAO,EAAE,OAAO,iBAAE,MAAM,iBAAE,OAAO,iBAAE,OAAO,GAAG,iBAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY;AAAA,EAC9E,CAAC,EACA,SAAS;AAAA,EACZ,UAAU,iBACP,MAAM;AAAA,IACL,iBAAE,MAAM,iBAAE,OAAO,iBAAE,OAAO,GAAG,iBAAE,QAAQ,CAAC,CAAC;AAAA,IACzC,iBAAE,OAAO,EAAE,OAAO,iBAAE,MAAM,iBAAE,OAAO,iBAAE,OAAO,GAAG,iBAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY;AAAA,EAC9E,CAAC,EACA,SAAS;AACd,CAAC,EACA,YAAY;AAEf,IAAM,yBAAyB,iBAAE,MAAM,kBAAkB;AAElD,SAAS,eAAe,OAA+B;AAC5D,MAAI,OAAO,UAAU,UAAU;AAC7B,QAAI,MAAM,WAAW,OAAO,EAAG,QAAO;AACtC,UAAM,SAAS,IAAI,KAAK,KAAK,EAAE,QAAQ;AACvC,QAAI,CAAC,OAAO,MAAM,MAAM,EAAG,QAAO;AAAA,EACpC;AACA,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,SAAO;AACT;AAGA,SAAS,MAAM,KAAc,KAAsB;AACjD,MAAI,OAAO,QAAQ,YAAY,QAAQ,QAAQ,OAAO,KAAK;AACzD,WAAQ,IAAc,GAAG;AAAA,EAC3B;AACA,SAAO;AACT;AAGA,SAASC,UAAS,OAAyC;AACzD,MAAI,OAAO,UAAU,YAAY,UAAU,KAAM,QAAO;AACxD,SAAO,CAAC;AACV;AAEA,SAAS,WAAW,OAA+B;AACjD,MAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,SAAS,OAAO;AACjE,UAAM,MAAMA,UAAS,KAAK;AAC1B,WAAO,OAAO,IAAI,QAAQ,WAAW,IAAI,MAAM;AAAA,EACjD;AACA,SAAO;AACT;AAEA,SAAS,aAAa,KAAsB;AAC1C,QAAM,QAAQ,MAAM,KAAK,OAAO;AAChC,SAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAAS,mBAAmB,KAAc,GAA0B;AAClE,QAAM,MAAM,MAAM,KAAK,CAAC;AACxB,SAAO,OAAO,QAAQ,WAAW,MAAM;AACzC;AAEA,SAAS,oBAAoB,OAA2B;AACtD,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO;AACjC,QAAM,QAAQ,MAAM,OAAO,OAAO;AAClC,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO;AACjC,SAAO,CAAC;AACV;AAEA,SAAS,eAAe,OAAmD;AACzE,QAAM,QAAQ,OAAO,MAAM,UAAU,WAAW,MAAM,MAAM,YAAY,IAAI;AAC5E,QAAM,aAAa,OAAO,MAAM,eAAe,WAAW,MAAM,WAAW,YAAY,IAAI;AAE3F,MAAI,eAAe,UAAW,QAAO;AACrC,MAAI,eAAe,aAAa,eAAe,eAAe,eAAe;AAC3E,WAAO;AACT,MAAI,eAAe,UAAW,QAAO;AACrC,MAAI,eAAe,UAAW,QAAO;AACrC,MAAI,eAAe,YAAa,QAAO;AAEvC,MAAI,UAAU,UAAW,QAAO;AAChC,MAAI,UAAU,aAAa,UAAU,QAAS,QAAO;AACrD,MAAI,UAAU,aAAa,UAAU,YAAY,UAAU,cAAe,QAAO;AAEjF,SAAO;AACT;AAEA,SAAS,eAAe,OAAqC;AAC3D,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAM,QAAQ,MAAM,YAAY;AAChC,MAAI,UAAU,WAAY,QAAO;AACjC,MAAI,UAAU,oBAAqB,QAAO;AAC1C,MAAI,UAAU,YAAa,QAAO;AAClC,MAAI,UAAU,YAAa,QAAO;AAClC,SAAO;AACT;AAGA,SAAS,WAAW,GAAqC;AACvD,QAAM,OAAO,OAAO,EAAE,SAAS,WAAW,EAAE,OAAO,OAAO,EAAE,YAAY,WAAW,EAAE,UAAU;AAC/F,QAAM,MACJ,OAAO,EAAE,cAAc,WACnB,EAAE,YACF,OAAO,EAAE,eAAe,WACtB,EAAE,aACF;AACR,SAAO;AAAA,IACL;AAAA,IACA,QAAQ,eAAe,CAAC;AAAA,IACxB,YAAY,OAAO,EAAE,eAAe,WAAW,EAAE,WAAW,YAAY,IAAI;AAAA,IAC5E;AAAA,IACA,WAAW,eAAe,EAAE,SAAS;AAAA,IACrC,aAAa,eAAe,EAAE,WAAW;AAAA,EAC3C;AACF;AAGA,SAAS,cAAc,GAAwC;AAC7D,SAAO;AAAA,IACL,OAAO,aAAa,EAAE,MAAM;AAAA,IAC5B,OAAO,eAAe,EAAE,KAAK;AAAA,IAC7B,WAAW,mBAAmB,EAAE,QAAQ,WAAW;AAAA,IACnD,aAAa,eAAe,EAAE,WAAW;AAAA,EAC3C;AACF;AAUA,SAAS,aAAa,GAAuC;AAC3D,QAAM,SAAS,aAAa,EAAE,MAAM;AACpC,SAAO;AAAA,IACL,IAAI,OAAO,EAAE,OAAO,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,EAAE;AAAA,IACvD;AAAA,IACA,MAAM,OAAO,EAAE,SAAS,WAAW,EAAE,OAAO;AAAA,IAC5C,WAAW,eAAe,EAAE,SAAS,KAAK;AAAA,IAC1C,WAAW,OAAO,EAAE,cAAc,WAAW,eAAe,EAAE,SAAS,IAAI;AAAA,IAC3E,MAAM,OAAO,EAAE,SAAS,WAAW,EAAE,OAAO;AAAA,IAC5C,MAAM,OAAO,EAAE,SAAS,WAAW,EAAE,OAAO;AAAA,IAC5C,MAAM,OAAO,EAAE,SAAS,WAAW,EAAE,OAAO;AAAA,IAC5C,iBAAiB,EAAE,sBAAsB,UAAa,EAAE,sBAAsB;AAAA,IAC9E,UAAU;AAAA,IACV,UAAU;AAAA,IACV,aAAa;AAAA,IACb,qBAAqB;AAAA,IACrB,UAAU;AAAA,IACV,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,WAAW;AAAA,IACX,aAAa,kBAAkB,MAAM;AAAA,EACvC;AACF;AAEA,SAAS,cAAc,QAAmC;AACxD,MAAI,WAAW,UAAW,QAAO;AACjC,MAAI,WAAW,YAAa,QAAO;AACnC,SAAO;AACT;AAEA,SAAS,kBAAkB,WAAiC;AAC1D,QAAM,SAAS,oBAAI,IAAqB;AACxC,aAAW,SAAS,WAAW;AAC7B,UAAM,WAAW,OAAO,IAAI,MAAM,IAAI;AACtC,QAAI,CAAC,UAAU;AACb,aAAO,IAAI,MAAM,MAAM,KAAK;AAC5B;AAAA,IACF;AACA,UAAM,KAAK,cAAc,SAAS,MAAM;AACxC,UAAM,KAAK,cAAc,MAAM,MAAM;AACrC,QAAI,KAAK,MAAO,OAAO,OAAO,MAAM,aAAa,MAAM,SAAS,aAAa,IAAK;AAChF,aAAO,IAAI,MAAM,MAAM,KAAK;AAAA,IAC9B;AAAA,EACF;AACA,SAAO,MAAM,KAAK,OAAO,OAAO,CAAC;AACnC;AAEA,SAAS,oBAAoB,KAA8B;AACzD,SAAO;AAAA,IACL,QAAQ,OAAO,IAAI,WAAW,WAAW,IAAI,SAAS;AAAA,IACtD,OAAO,OAAO,IAAI,UAAU,WAAW,IAAI,QAAQ;AAAA,IACnD,QAAQ,aAAa,IAAI,MAAM;AAAA,IAC/B,KAAK,OAAO,IAAI,QAAQ,WAAW,IAAI,MAAM;AAAA,IAC7C,SAAS,OAAO,IAAI,gBAAgB,WAAW,IAAI,cAAc;AAAA,IACjE,SAAS,OAAO,IAAI,gBAAgB,WAAW,IAAI,cAAc;AAAA,IACjE,MAAM,OAAO,IAAI,SAAS,WAAW,IAAI,OAAO;AAAA,IAChD,WAAW,OAAO,IAAI,cAAc,WAAW,IAAI,YAAY;AAAA,IAC/D,WAAW,OAAO,IAAI,cAAc,WAAW,IAAI,YAAY;AAAA,IAC/D,cAAc,OAAO,IAAI,iBAAiB,WAAW,IAAI,eAAe;AAAA,IACxE,WAAW,eAAe,IAAI,SAAS,KAAK;AAAA,IAC5C,WAAW,eAAe,IAAI,SAAS,KAAK;AAAA,IAC5C,UAAU,eAAe,IAAI,QAAQ;AAAA,IACrC,gBAAgB,WAAW,IAAI,WAAW;AAAA,IAC1C,kBAAkB,mBAAmB,KAAK,kBAAkB;AAAA,IAC5D,kBAAkB,IAAI,oBAAoB;AAAA,IAC1C,YAAY,OAAO,IAAI,eAAe,WAAW,IAAI,aAAa;AAAA,IAClE,kBAAkB;AAAA,EACpB;AACF;AAGO,SAAS,gBAAgB,KAAsC;AACpE,QAAM,UAAU,IAAI,YAAY;AAChC,QAAM,UAAU,OAAO,IAAI,UAAU,WAAW,IAAI,MAAM,YAAY,IAAI;AAC1E,QAAM,QAAiB,UAAU,UAAW,aAAa,OAAO,KAAK;AAErE,QAAM,YAAY,MAAM,QAAQ,IAAI,iBAAiB,IAAI,IAAI,oBAAoB,CAAC;AAClF,QAAM,SAAS,kBAAkB,UAAU,IAAI,UAAU,CAAC;AAC1D,QAAM,YAA0B,oBAAoB,IAAI,OAAO,EAAE;AAAA,IAAI,CAAC,MACpE,cAAcA,UAAS,CAAC,CAAC;AAAA,EAC3B;AACA,QAAM,WAAwB,oBAAoB,IAAI,QAAQ,EAAE;AAAA,IAAI,CAAC,MACnE,aAAaA,UAAS,CAAC,CAAC;AAAA,EAC1B;AAEA,QAAM,SAAS,oBAAoB,IAAI,MAAM,EAAE,IAAI,CAAC,MAAM;AACxD,UAAM,MAAMA,UAAS,CAAC;AACtB,WAAO;AAAA,MACL,MAAM,OAAO,IAAI,SAAS,WAAW,IAAI,OAAO;AAAA,MAChD,OAAO,OAAO,IAAI,UAAU,YAAY,IAAI,UAAU,KAAK,IAAI,IAAI,KAAK,KAAK;AAAA,IAC/E;AAAA,EACF,CAAC;AACD,QAAM,YAAY,oBAAoB,IAAI,SAAS,EAAE,IAAI,CAAC,MAAM;AAC9D,UAAM,MAAMA,UAAS,CAAC;AACtB,WAAO;AAAA,MACL,OAAO,aAAa,GAAG;AAAA,MACvB,WAAW,mBAAmB,KAAK,WAAW;AAAA,IAChD;AAAA,EACF,CAAC;AACD,QAAM,iBAAiB,OAAO,IAAI,mBAAmB,WAAW,IAAI,iBAAiB;AACrF,QAAM,YAAY,OAAO,IAAI,cAAc,WAAW,IAAI,YAAY;AAEtE,SAAO;AAAA,IACL,GAAG,oBAAoB,GAAG;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,eAAsB,sBAAsB,KAAqC;AAC/E,MAAI;AACF,UAAM,SAAS,MAAM;AAAA,MACnB;AAAA,MACA,CAAC,MAAM,QAAQ,UAAU,iBAAiB;AAAA,MAC1C;AAAA,MACA;AAAA,IACF;AACA,UAAM,cAAc,mBAAmB,UAAU,KAAK,MAAM,MAAM,CAAC;AACnE,QAAI,CAAC,YAAY,SAAS;AACxB,aAAO;AAAA,IACT;AACA,WAAO,gBAAgB,YAAY,IAAI;AAAA,EACzC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAsB,UAAU,KAAa,UAAmC;AAC9E,MAAI;AACF,UAAM,SAAS,MAAM;AAAA,MACnB;AAAA,MACA,CAAC,MAAM,QAAQ,OAAO,QAAQ,GAAG,eAAe;AAAA,MAChD;AAAA,MACA;AAAA,IACF;AACA,WAAO,aAAa,MAAM;AAAA,EAC5B,SAAS,KAAc;AACrB,QAAI,iBAAiB,GAAG,EAAG,QAAO;AAClC,WAAO;AAAA,EACT;AACF;AAEA,eAAsB,WACpB,KACA,UACkD;AAClD,MAAI;AACF,UAAM,SAAS,MAAM;AAAA,MACnB;AAAA,MACA,CAAC,MAAM,QAAQ,OAAO,QAAQ,GAAG,UAAU,OAAO;AAAA,MAClD;AAAA,MACA;AAAA,IACF;AAEA,UAAM,SAAS,KAAK,MAAM,MAAM;AAGhC,QAAI,CAAC,MAAM,QAAQ,OAAO,KAAK,EAAG,QAAO,CAAC;AAC1C,WAAO,OAAO,MAAM,IAAI,CAAC,OAAO;AAAA,MAC9B,MAAM,OAAO,EAAE,SAAS,WAAW,EAAE,OAAO;AAAA,MAC5C,QAAQ,EAAE,cAAc,UAAa,EAAE,cAAc,SAAY,MAAM;AAAA,IACzE,EAAE;AAAA,EACJ,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEA,eAAsB,mBAAmB,KAAgC;AACvE,MAAI;AACF,UAAM,SAAS,MAAM;AAAA,MACnB;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,UAAM,cAAc,uBAAuB,UAAU,KAAK,MAAM,MAAM,CAAC;AACvE,QAAI,CAAC,YAAY,QAAS,QAAO,CAAC;AAClC,WAAO,YAAY,KAAK,IAAI,eAAe;AAAA,EAC7C,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEA,SAAS,YAAY,IAAoB;AACvC,MAAI,GAAG,UAAU,UAAU,GAAG,UAAU,QAAS,QAAO;AACxD,MAAI,GAAG,UAAU,SAAU,QAAO;AAClC,MAAI,GAAG,UAAU,SAAU,QAAO;AAClC,SAAO;AACT;AAEA,eAAsB,cAAc,KAAa,QAAwC;AACvF,MAAI;AACF,UAAM,SAAS,MAAM;AAAA,MACnB;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,UAAM,cAAc,uBAAuB,UAAU,KAAK,MAAM,MAAM,CAAC;AACvE,QAAI,CAAC,YAAY,QAAS,QAAO;AACjC,UAAM,MAAM,YAAY,KAAK,IAAI,eAAe;AAChD,QAAI,IAAI,WAAW,EAAG,QAAO;AAC7B,QAAI,KAAK,CAAC,GAAG,MAAM;AACjB,YAAM,WAAW,YAAY,CAAC,IAAI,YAAY,CAAC;AAC/C,UAAI,aAAa,EAAG,QAAO;AAC3B,aAAO,EAAE,YAAY,EAAE;AAAA,IACzB,CAAC;AACD,WAAO,IAAI,CAAC,KAAK;AAAA,EACnB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAsB,WAAW,KAAgC;AAC/D,MAAI;AACF,UAAM,SAAS,MAAM;AAAA,MACnB;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,UAAM,cAAc,uBAAuB,UAAU,KAAK,MAAM,MAAM,CAAC;AACvE,QAAI,CAAC,YAAY,QAAS,QAAO,CAAC;AAClC,WAAO,YAAY,KAAK,IAAI,eAAe;AAAA,EAC7C,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEO,SAAS,eACd,WACA,iBACA,SACsD;AACtD,QAAM,SAAmB,CAAC;AAC1B,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,kBAAkB,UAAU,WAAW,cAAc,UAAU,QAAQ;AAC7E,MAAI,iBAAiB;AACnB,WAAO,KAAK,eAAe;AAC3B,SAAK,IAAI,gBAAgB,MAAM;AAAA,EACjC;AACA,aAAW,MAAM,gBAAgB,WAAW,cAAc,gBAAgB,QAAQ,CAAC,GAAG;AACpF,QAAI,CAAC,KAAK,IAAI,GAAG,MAAM,GAAG;AACxB,aAAO,KAAK,EAAE;AACd,WAAK,IAAI,GAAG,MAAM;AAAA,IACpB;AAAA,EACF;AACA,aAAW,MAAM,QAAQ,WAAW,cAAc,QAAQ,QAAQ,CAAC,GAAG;AACpE,QAAI,CAAC,KAAK,IAAI,GAAG,MAAM,GAAG;AACxB,aAAO,KAAK,EAAE;AACd,WAAK,IAAI,GAAG,MAAM;AAAA,IACpB;AAAA,EACF;AACA,SAAO,EAAE,QAAQ,gBAAgB;AACnC;AAEA,eAAsB,UAAU,KAAa,UAAkB,MAA8B;AAC3F,QAAM,OAAO,CAAC,MAAM,UAAU,OAAO,QAAQ,GAAG,WAAW;AAC3D,MAAI,KAAM,MAAK,KAAK,MAAM,IAAI;AAC9B,QAAM,eAAe,MAAM,MAAM,KAAK,IAAM;AAC9C;AAEA,eAAsB,QACpB,KACA,UACA,UACe;AACf,QAAM,eAAe,KAAK,QAAQ;AAClC,QAAM;AAAA,IACJ;AAAA,IACA,CAAC,MAAM,SAAS,OAAO,QAAQ,GAAG,cAAc,QAAQ;AAAA,IACxD;AAAA,IACA;AAAA,EACF;AACF;AAEA,eAAsB,QAAQ,KAAa,UAAiC;AAC1E,QAAM,eAAe,MAAM,CAAC,MAAM,SAAS,OAAO,QAAQ,CAAC,GAAG,KAAK,IAAM;AAC3E;AAEA,eAAsB,SAAS,KAAa,UAAiC;AAC3E,QAAM,eAAe,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,CAAC,GAAG,KAAK,IAAM;AAC5E;AAEA,eAAsB,YAAY,KAAa,UAAkB,MAA6B;AAC5F,QAAM,eAAe,MAAM,CAAC,MAAM,WAAW,OAAO,QAAQ,GAAG,MAAM,IAAI,GAAG,KAAK,IAAM;AACzF;AAEA,eAAsB,eAAe,KAAa,UAAkB,MAA6B;AAC/F,QAAM;AAAA,IACJ;AAAA,IACA,CAAC,MAAM,UAAU,OAAO,QAAQ,GAAG,qBAAqB,MAAM,IAAI;AAAA,IAClE;AAAA,IACA;AAAA,EACF;AACF;AAEA,eAAsB,aACpB,KACA,UACA,WACe;AACf,QAAM;AAAA,IACJ;AAAA,IACA,CAAC,MAAM,QAAQ,OAAO,QAAQ,GAAG,kBAAkB,UAAU,KAAK,GAAG,CAAC;AAAA,IACtE;AAAA,IACA;AAAA,EACF;AACF;AAOA,eAAsB,eAAe,KAAmC;AACtE,MAAI;AACF,UAAM,SAAS,MAAM;AAAA,MACnB;AAAA,MACA,CAAC,SAAS,QAAQ,WAAW,OAAO,UAAU,MAAM;AAAA,MACpD;AAAA,MACA;AAAA,IACF;AACA,UAAM,SAAS,iBAAE,MAAM,iBAAE,OAAO,EAAE,MAAM,iBAAE,OAAO,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,MAAM,MAAM,CAAC;AACnF,QAAI,CAAC,OAAO,QAAS,QAAO,oBAAI,IAAI;AACpC,WAAO,IAAI,IAAI,OAAO,KAAK,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;AAAA,EAC/C,QAAQ;AACN,WAAO,oBAAI,IAAI;AAAA,EACjB;AACF;AAEA,eAAsB,UAAU,KAAa,UAAkB,QAAiC;AAC9F,MAAI,OAAO,WAAW,EAAG;AACzB,QAAM,WAAW,MAAM,eAAe,GAAG;AACzC,QAAM,QAAQ,SAAS,SAAS,IAAI,CAAC,IAAI,OAAO,OAAO,CAAC,MAAM,SAAS,IAAI,CAAC,CAAC;AAC7E,MAAI,MAAM,WAAW,EAAG;AACxB,QAAM;AAAA,IACJ;AAAA,IACA,CAAC,MAAM,QAAQ,OAAO,QAAQ,GAAG,eAAe,MAAM,KAAK,GAAG,CAAC;AAAA,IAC/D;AAAA,IACA;AAAA,EACF;AACF;AAWA,IAAM,sBAAsB,KAAK;AACjC,IAAM,gBAAgB,oBAAI,IAAY;AACtC,IAAM,eAAe,oBAAI,IAAoB;AAQ7C,eAAsB,YACpB,KACA,MACA,QAAQ,UACR,cAAc,uBACI;AAClB,QAAM,WAAW,GAAG,GAAG,IAAI,IAAI;AAC/B,MAAI,cAAc,IAAI,QAAQ,EAAG,QAAO;AACxC,QAAM,WAAW,aAAa,IAAI,QAAQ;AAC1C,MAAI,aAAa,QAAW;AAC1B,QAAI,KAAK,IAAI,IAAI,YAAY,oBAAqB,QAAO;AACzD,iBAAa,OAAO,QAAQ;AAAA,EAC9B;AAEA,QAAM,WAAW,MAAM,eAAe,GAAG;AACzC,MAAI,SAAS,IAAI,IAAI,GAAG;AACtB,kBAAc,IAAI,QAAQ;AAC1B,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,UAAU,MAAM,WAAW,OAAO,iBAAiB,WAAW;AAAA,MACxE;AAAA,MACA;AAAA,IACF;AACA,kBAAc,IAAI,QAAQ;AAC1B,WAAO;AAAA,EACT,QAAQ;AACN,iBAAa,IAAI,UAAU,KAAK,IAAI,CAAC;AACrC,WAAO;AAAA,EACT;AACF;AAEA,eAAsB,aAAa,KAAa,UAAkB,QAAiC;AACjG,QAAM;AAAA,IACJ;AAAA,IACA,CAAC,MAAM,QAAQ,OAAO,QAAQ,GAAG,kBAAkB,OAAO,KAAK,GAAG,CAAC;AAAA,IACnE;AAAA,IACA;AAAA,EACF;AACF;AAEA,eAAsB,aACpB,KACA,UACA,WACe;AACf,QAAM;AAAA,IACJ;AAAA,IACA,CAAC,MAAM,QAAQ,OAAO,QAAQ,GAAG,kBAAkB,UAAU,KAAK,GAAG,CAAC;AAAA,IACtE;AAAA,IACA;AAAA,EACF;AACF;AAEA,eAAsB,gBACpB,KACA,UACA,WACe;AACf,QAAM;AAAA,IACJ;AAAA,IACA,CAAC,MAAM,QAAQ,OAAO,QAAQ,GAAG,qBAAqB,UAAU,KAAK,GAAG,CAAC;AAAA,IACzE;AAAA,IACA;AAAA,EACF;AACF;AAEA,eAAsB,YAAY,KAAa,UAAiC;AAC9E,QAAM,eAAe,MAAM,CAAC,MAAM,SAAS,OAAO,QAAQ,CAAC,GAAG,KAAK,IAAM;AAC3E;AAEA,eAAsB,eAAe,KAAa,UAAiC;AACjF,QAAM,eAAe,MAAM,CAAC,MAAM,SAAS,OAAO,QAAQ,GAAG,QAAQ,GAAG,KAAK,IAAM;AACrF;AAEO,SAAS,wBAAwB,QAAwB;AAC9D,SAAO,uBAAuB,MAAM;AACtC;AAMA,eAAsB,yBACpB,KACA,UACA,QACe;AACf,QAAM,WAAW,MAAM;AAAA,IACrB;AAAA,IACA,CAAC,MAAM,QAAQ,OAAO,QAAQ,GAAG,UAAU,MAAM;AAAA,IACjD;AAAA,IACA;AAAA,EACF;AACA,MAAI,cAAc;AAClB,MAAI;AAEF,UAAM,SAAS,KAAK,MAAM,QAAQ;AAClC,kBAAc,OAAO,OAAO,SAAS,WAAW,OAAO,OAAO;AAAA,EAChE,QAAQ;AACN,kBAAc;AAAA,EAChB;AACA,MAAI,YAAY,SAAS,iBAAiB,EAAG;AAC7C,QAAM,SAAS,wBAAwB,MAAM;AAC7C,QAAM,YAAY,YAAY,SAAS,IAAI,KAAK,YAAY,WAAW,IAAI,KAAK;AAChF,QAAM,WAAW,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM;AAAA;AACpD,QAAM,eAAe,MAAM,CAAC,MAAM,QAAQ,OAAO,QAAQ,GAAG,UAAU,QAAQ,GAAG,KAAK,IAAM;AAC9F;AAOA,eAAe,iBAAiB,KAA8D;AAC5F,MAAI;AACF,UAAM,SAAS,MAAM;AAAA,MACnB;AAAA,MACA,CAAC,QAAQ,QAAQ,UAAU,YAAY;AAAA,MACvC;AAAA,MACA;AAAA,IACF;AACA,UAAM,SAAS,iBACZ,OAAO,EAAE,OAAO,iBAAE,OAAO,EAAE,OAAO,iBAAE,OAAO,EAAE,CAAC,GAAG,MAAM,iBAAE,OAAO,EAAE,CAAC,EACnE,UAAU,KAAK,MAAM,MAAM,CAAC;AAC/B,QAAI,CAAC,OAAO,QAAS,QAAO;AAC5B,WAAO,EAAE,OAAO,OAAO,KAAK,MAAM,OAAO,MAAM,OAAO,KAAK,KAAK;AAAA,EAClE,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAKA,SAAS,kBAAkB,OAAwB;AACjD,SAAO,MAAM,SAAS,OAAO;AAC/B;AAEA,IAAM,0BAA0B,iBAC7B,OAAO;AAAA,EACN,IAAI,iBAAE,MAAM,CAAC,iBAAE,OAAO,GAAG,iBAAE,OAAO,CAAC,CAAC;AAAA,EACpC,MAAM,iBAAE,OAAO,EAAE,OAAO,iBAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS;AAAA,EACxE,MAAM,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,YAAY,iBAAE,OAAO,EAAE,SAAS;AAAA,EAChC,YAAY,iBAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC3C,MAAM,iBAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACrC,MAAM,iBAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACrC,eAAe,iBAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,MAAM,iBAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACrC,YAAY,iBAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC3C,YAAY,iBAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC3C,WAAW,iBAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1C,oBAAoB,iBAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACnD,gBAAgB,iBAAE,MAAM,CAAC,iBAAE,OAAO,GAAG,iBAAE,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EACtE,wBAAwB,iBAAE,MAAM,CAAC,iBAAE,OAAO,GAAG,iBAAE,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9E,WAAW,iBAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1C,UAAU,iBAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAC3C,CAAC,EACA,YAAY;AAIf,IAAM,+BAA+B,iBAClC,OAAO;AAAA,EACN,MAAM,iBACH,OAAO;AAAA,IACN,YAAY,iBACT,OAAO;AAAA,MACN,aAAa,iBACV,OAAO;AAAA,QACN,eAAe,iBAAE,OAAO;AAAA,UACtB,OAAO,iBAAE;AAAA,YACP,iBAAE,OAAO;AAAA,cACP,IAAI,iBAAE,OAAO;AAAA,cACb,YAAY,iBAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,KAAK;AAAA,cAChD,YAAY,iBAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,KAAK;AAAA,cAChD,UAAU,iBAAE,OAAO;AAAA,gBACjB,OAAO,iBAAE;AAAA,kBACP,iBAAE,OAAO,EAAE,YAAY,iBAAE,MAAM,CAAC,iBAAE,OAAO,GAAG,iBAAE,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;AAAA,gBACvE;AAAA,cACF,CAAC;AAAA,YACH,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH,CAAC,EACA,SAAS;AAAA,IACd,CAAC,EACA,SAAS;AAAA,EACd,CAAC,EACA,SAAS;AACd,CAAC,EACA,YAAY;AAYf,SAAS,eACP,QACyB;AACzB,QAAMC,OAAM,oBAAI,IAAwB;AACxC,QAAM,UAAU,OAAO,MAAM,YAAY,aAAa,cAAc,SAAS,CAAC;AAC9E,aAAW,UAAU,SAAS;AAC5B,UAAM,OAAmB;AAAA,MACvB,UAAU,OAAO;AAAA,MACjB,YAAY,OAAO;AAAA,MACnB,YAAY,OAAO;AAAA,IACrB;AACA,eAAW,KAAK,OAAO,SAAS,OAAO;AACrC,UAAI,EAAE,eAAe,QAAQ,EAAE,eAAe,OAAW;AACzD,MAAAA,KAAI,IAAI,OAAO,EAAE,UAAU,GAAG,IAAI;AAAA,IACpC;AAAA,EACF;AACA,SAAOA;AACT;AAEA,eAAe,qBACb,KACA,OACA,MACA,UACkC;AAClC,QAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBd,MAAI;AACF,UAAM,SAAS,MAAM;AAAA,MACnB;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS,KAAK;AAAA,QACd;AAAA,QACA,SAAS,KAAK;AAAA,QACd;AAAA,QACA,QAAQ,IAAI;AAAA,QACZ;AAAA,QACA,MAAM,QAAQ;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,UAAM,SAAS,6BAA6B,UAAU,KAAK,MAAM,MAAM,CAAC;AACxE,QAAI,CAAC,OAAO,QAAS,QAAO,oBAAI,IAAI;AACpC,WAAO,eAAe,OAAO,IAAI;AAAA,EACnC,QAAQ;AACN,WAAO,oBAAI,IAAI;AAAA,EACjB;AACF;AAGA,SAAS,eAAe,OAA0D;AAChF,MAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,SAAO,OAAO,KAAK;AACrB;AAGA,SAAS,oBAAoB,KAO3B;AACA,SAAO;AAAA,IACL,MAAM,IAAI,QAAQ;AAAA,IAClB,MAAM,IAAI,QAAQ,IAAI,iBAAiB;AAAA,IACvC,MAAM,IAAI,QAAQ;AAAA,IAClB,UAAU,IAAI,aAAa,IAAI,sBAAsB;AAAA,IACrD,WAAW,IAAI,cAAc;AAAA,IAC7B,WAAW,IAAI,cAAc;AAAA,EAC/B;AACF;AAEA,SAAS,4BACP,KACA,YACW;AACX,QAAM,SAAS,IAAI,MAAM,SAAS;AAClC,QAAM,SAAS,oBAAoB,GAAG;AACtC,SAAO;AAAA,IACL,IAAI,OAAO,IAAI,EAAE;AAAA,IACjB;AAAA,IACA,MAAM,IAAI,QAAQ;AAAA,IAClB,WAAW,IAAI,aAAc,eAAe,IAAI,UAAU,KAAK,IAAK;AAAA,IACpE,WAAW,IAAI,aAAa,eAAe,IAAI,UAAU,IAAI;AAAA,IAC7D,iBAAiB;AAAA,IACjB,UAAU,IAAI,aAAa;AAAA,IAC3B,aAAa,eAAe,IAAI,cAAc;AAAA,IAC9C,qBAAqB,eAAe,IAAI,sBAAsB;AAAA,IAC9D,UAAU,YAAY,YAAY;AAAA,IAClC,SAAS,IAAI,YAAY;AAAA,IACzB,YAAY,YAAY,cAAc;AAAA,IACtC,YAAY,YAAY,cAAc;AAAA,IACtC,aAAa,kBAAkB,MAAM;AAAA,IACrC,GAAG;AAAA,EACL;AACF;AAeA,eAAsB,oBAAoB,KAAa,UAAwC;AAC7F,QAAM,YAAY,MAAM,iBAAiB,GAAG;AAC5C,MAAI,CAAC,UAAW,QAAO,CAAC;AACxB,QAAM,EAAE,OAAO,KAAK,IAAI;AAExB,MAAI;AACJ,MAAI;AACF,UAAM,SAAS,MAAM;AAAA,MACnB;AAAA,MACA,CAAC,OAAO,cAAc,UAAU,KAAK,IAAI,IAAI,UAAU,QAAQ,wBAAwB;AAAA,MACvF;AAAA,MACA;AAAA,IACF;AAOA,UAAM,SAAS,OAAO,QAAQ,YAAY,GAAG;AAC7C,cAAU,KAAK,MAAM,MAAM;AAAA,EAC7B,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,aAAa,iBAAE,MAAM,uBAAuB,EAAE,UAAU,OAAO;AACrE,MAAI,CAAC,WAAW,QAAS,QAAO,CAAC;AAEjC,QAAM,YAAY,MAAM,qBAAqB,KAAK,OAAO,MAAM,QAAQ;AACvE,SAAO,WAAW,KAAK;AAAA,IAAI,CAAC,QAC1B,4BAA4B,KAAK,UAAU,IAAI,OAAO,IAAI,EAAE,CAAC,CAAC;AAAA,EAChE;AACF;AAEA,IAAM,sBAAsB,iBACzB,OAAO;AAAA,EACN,IAAI,iBAAE,MAAM,CAAC,iBAAE,OAAO,GAAG,iBAAE,OAAO,CAAC,CAAC;AAAA,EACpC,UAAU,iBAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACzC,YAAY,iBAAE,OAAO,EAAE,SAAS;AAClC,CAAC,EACA,YAAY;AAYf,eAAsB,qBACpB,KACA,UACA,iBACA,MAC6D;AAC7D,QAAM,YAAY,MAAM,iBAAiB,GAAG;AAC5C,MAAI,CAAC,UAAW,OAAM,IAAI,MAAM,oDAAoD;AACpF,QAAM,EAAE,OAAO,KAAK,IAAI;AACxB,QAAM,SAAS,MAAM;AAAA,IACnB;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU,KAAK,IAAI,IAAI,UAAU,QAAQ,aAAa,eAAe;AAAA,MACrE;AAAA,MACA,QAAQ,IAAI;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,SAAS,oBAAoB,UAAU,KAAK,MAAM,MAAM,CAAC;AAC/D,MAAI,CAAC,OAAO,QAAS,OAAM,IAAI,MAAM,oDAAoD;AACzF,SAAO;AAAA,IACL,IAAI,OAAO,OAAO,KAAK,EAAE;AAAA,IACzB,SAAS,OAAO,KAAK,YAAY;AAAA,IACjC,WAAW,OAAO,KAAK,aAClB,eAAe,OAAO,KAAK,UAAU,KAAK,KAAK,IAAI,IACpD,KAAK,IAAI;AAAA,EACf;AACF;AAMA,eAAsB,oBAAoB,KAAa,UAAiC;AACtF,QAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAKjB,QAAM;AAAA,IACJ;AAAA,IACA,CAAC,OAAO,WAAW,MAAM,SAAS,QAAQ,IAAI,MAAM,YAAY,QAAQ,EAAE;AAAA,IAC1E;AAAA,IACA;AAAA,EACF;AACF;AAKA,eAAsB,sBAAsB,KAAa,UAAiC;AACxF,QAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAKjB,QAAM;AAAA,IACJ;AAAA,IACA,CAAC,OAAO,WAAW,MAAM,SAAS,QAAQ,IAAI,MAAM,YAAY,QAAQ,EAAE;AAAA,IAC1E;AAAA,IACA;AAAA,EACF;AACF;;;AC/+BA,IAAM,uBAA4C,IAAI,IAAI,iBAAiB;AAE3E,SAAS,wBAAwB,KAA8C;AAC7E,MAAI,OAAO,QAAQ,YAAY,qBAAqB,IAAI,GAAG,GAAG;AAE5D,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAGA,IAAM,qBAAqB,iBAAE,OAAO;AAAA,EAClC,IAAI,iBAAE,OAAO;AAAA,EACb,aAAa,iBAAE,OAAO;AAAA,EACtB,KAAK,iBAAE,OAAO;AAAA,EACd,YAAY,iBAAE,OAAO;AACvB,CAAC;AAGD,IAAM,2BAA2B,iBAAE,OAAO;AAAA,EACxC,OAAO,iBAAE,OAAO;AAAA,EAChB,iBAAiB,iBAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAChD,SAAS,iBAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,YAAY,iBAAE,OAAO;AACvB,CAAC;AAED,eAAsB,0BACpB,OACA,MACA,KACmB;AACnB,QAAM,OAAO,MAAM;AAAA,IACjB;AAAA,IACA,CAAC,OAAO,UAAU,KAAK,IAAI,IAAI,eAAe;AAAA,IAC9C;AAAA,IACA;AAAA,EACF;AACA,QAAM,SAAS,iBACZ,OAAO,EAAE,cAAc,iBAAE,MAAM,iBAAE,OAAO,EAAE,MAAM,iBAAE,OAAO,EAAE,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,EAC9E,UAAU,KAAK,MAAM,IAAI,CAAC;AAC7B,MAAI,CAAC,OAAO,QAAS,QAAO,CAAC;AAC7B,SAAO,OAAO,KAAK,aAAa,IAAI,CAAC,MAAM,EAAE,IAAI;AACnD;AAEA,eAAsB,qBACpB,OACA,MACA,gBACA,KACkC;AAClC,QAAM,kBAAkB,MAAM;AAAA,IAC5B;AAAA,IACA,CAAC,OAAO,UAAU,KAAK,IAAI,IAAI,0BAA0B;AAAA,IACzD;AAAA,IACA;AAAA,EACF;AAEA,QAAM,iBAAiB,iBACpB,MAAM,mBAAmB,YAAY,CAAC,EACtC,UAAU,KAAK,MAAM,eAAe,CAAC;AACxC,MAAI,CAAC,eAAe,QAAS,QAAO,CAAC;AAGrC,QAAM,cAAc,oBAAI,IAAgD;AACxE,aAAW,KAAK,eAAe,MAAM;AACnC,UAAM,WAAW,YAAY,IAAI,EAAE,WAAW;AAC9C,QAAI,CAAC,YAAY,EAAE,aAAa,SAAS,YAAY;AACnD,kBAAY,IAAI,EAAE,aAAa,CAAC;AAAA,IAClC;AAAA,EACF;AAEA,QAAM,aAAa,MAAM,KAAK,YAAY,OAAO,CAAC,EAAE,MAAM,GAAG,EAAE;AAE/D,QAAM,eAAe,OAAO,CAAC,SAAS,eAAe,QAAQ,GAAG,KAAK,IAAM,EAAE,MAAM,MAAM;AAAA,EAAC,CAAC;AAE3F,QAAM,UAAU,MAAM,QAAQ;AAAA,IAC5B,WAAW,IAAI,OAAO,eAAe;AACnC,YAAM,aAAa,MAAM;AAAA,QACvB;AAAA,QACA,CAAC,OAAO,UAAU,KAAK,IAAI,IAAI,gBAAgB,WAAW,EAAE,sBAAsB;AAAA,QAClF;AAAA,QACA;AAAA,MACF;AACA,YAAM,YAAY,iBACf,MAAM,yBAAyB,YAAY,CAAC,EAC5C,UAAU,KAAK,MAAM,UAAU,CAAC;AACnC,YAAM,eAAe,UAAU,UAAU,UAAU,KAAK,CAAC,IAAI;AAE7D,YAAM,iBAAiB,MAAM,WAAW,gBAAgB,WAAW,KAAK,GAAG;AAE3E,aAAO;AAAA,QACL,aAAa,WAAW;AAAA,QACxB,OAAO,wBAAwB,cAAc,KAAK;AAAA,QAClD,gBAAgB,cAAc,mBAAmB;AAAA,QACjD,QAAQ,cAAc,WAAW;AAAA,QACjC,YAAY,eAAe,cAAc,cAAc,WAAW,UAAU;AAAA,QAC5E,KAAK,WAAW;AAAA,QAChB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO,QACJ,OAAO,CAAC,MAA0D,EAAE,WAAW,WAAW,EAC1F,IAAI,CAAC,MAAM,EAAE,KAAK,EAClB,OAAO,CAAC,MAAM,EAAE,UAAU,UAAU;AACzC;AAEA,IAAM,sBAA2C,IAAI,IAAI,qBAAqB;AAC9E,IAAM,0BAA+C,IAAI,IAAI,wBAAwB;AAErF,IAAM,sBAAsB,iBAAE,OAAO;AAAA,EACnC,MAAM,iBAAE,OAAO;AAAA,EACf,QAAQ,iBAAE,OAAO;AAAA,EACjB,YAAY,iBAAE,OAAO,EAAE,SAAS;AAAA,EAChC,UAAU,iBAAE,OAAO;AAAA,EACnB,UAAU,iBAAE,OAAO;AAAA,EACnB,YAAY,iBAAE,OAAO;AAAA,EACrB,OAAO,iBAAE,OAAO;AAClB,CAAC;AAED,eAAsB,gBACpB,OACA,MACA,QACA,iBACA,KACwB;AACxB,QAAM,WAAW,MAAM;AAAA,IACrB;AAAA,IACA,CAAC,OAAO,UAAU,KAAK,IAAI,IAAI,mCAAmC,MAAM,cAAc;AAAA,IACtF;AAAA,IACA;AAAA,EACF;AAEA,QAAM,SAAS,iBACZ,OAAO,EAAE,eAAe,iBAAE,MAAM,oBAAoB,YAAY,CAAC,EAAE,CAAC,EACpE,UAAU,KAAK,MAAM,QAAQ,CAAC;AACjC,MAAI,CAAC,OAAO,QAAS,QAAO,CAAC;AAE7B,QAAM,eAAe,oBAAI,IAAiD;AAC1E,aAAWC,QAAO,OAAO,KAAK,eAAe;AAC3C,QAAI,CAAC,aAAa,IAAIA,KAAI,IAAI,GAAG;AAC/B,mBAAa,IAAIA,KAAI,MAAMA,IAAG;AAAA,IAChC;AAAA,EACF;AAEA,QAAM,UAAU,MAAM,KAAK,aAAa,OAAO,CAAC,EAAE,MAAM,GAAG,EAAE;AAE7D,QAAM,UAAU,MAAM,QAAQ;AAAA,IAC5B,QAAQ,IAAI,OAAOA,SAAQ;AACzB,YAAM,iBAAiB,MAAM,WAAW,iBAAiBA,KAAI,UAAU,GAAG;AAC1E,YAAM,SAAS,oBAAoB,IAAIA,KAAI,MAAM,IAAIA,KAAI,SAAS;AAClE,YAAM,aACJA,KAAI,cAAc,wBAAwB,IAAIA,KAAI,UAAU,IAAIA,KAAI,aAAa;AAEnF,aAAO;AAAA,QACL,MAAMA,KAAI;AAAA;AAAA,QAEV;AAAA;AAAA,QAEA;AAAA,QACA,KAAKA,KAAI;AAAA,QACT,KAAKA,KAAI;AAAA,QACT,WAAW,eAAeA,KAAI,UAAU,KAAK;AAAA,QAC7C;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO,QACJ,OAAO,CAAC,MAAgD,EAAE,WAAW,WAAW,EAChF,IAAI,CAAC,MAAM,EAAE,KAAK;AACvB;AAEA,eAAsB,kBACpB,OACA,MACA,QACA,KACmB;AACnB,QAAM,OAAO,MAAM;AAAA,IACjB;AAAA,IACA,CAAC,OAAO,UAAU,KAAK,IAAI,IAAI,aAAa,MAAM,oCAAoC;AAAA,IACtF;AAAA,IACA;AAAA,EACF;AACA,QAAM,SAAS,iBACZ,OAAO,EAAE,UAAU,iBAAE,MAAM,iBAAE,OAAO,CAAC,EAAE,CAAC,EACxC,YAAY,EACZ,UAAU,KAAK,MAAM,IAAI,CAAC;AAC7B,MAAI,CAAC,OAAO,QAAS,QAAO,CAAC;AAC7B,SAAO,OAAO,KAAK;AACrB;AAEA,eAAsB,YAAY,KAAa,UAAiC;AAC9E,QAAM,SAAS,MAAM;AAAA,IACnB;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA,OAAO,QAAQ;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,QAAQ,OAAO,KAAK,EAAE,MAAM,IAAI,EAAE,OAAO,OAAO;AACtD,QAAM,eAAe,oBAAI,IAAY;AACrC,QAAM,mBAAmB,oBAAI,IAAY;AACzC,aAAW,QAAQ,OAAO;AACxB,UAAM,CAAC,OAAOC,KAAI,IAAI,KAAK,MAAM,GAAI;AACrC,UAAMC,SAAQD,OAAM,MAAM,wBAAwB;AAClD,QAAI,CAACC,SAAQ,CAAC,EAAG;AACjB,QAAI,UAAU,UAAW,cAAa,IAAIA,OAAM,CAAC,CAAC;AAClD,QAAI,UAAU,UAAW,kBAAiB,IAAIA,OAAM,CAAC,CAAC;AAAA,EACxD;AACA,QAAM,UAAU,CAAC,GAAG,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,iBAAiB,IAAI,EAAE,CAAC;AAC1E,MAAI,QAAQ,WAAW,KAAK,iBAAiB,OAAO,GAAG;AACrD,UAAM,IAAI,MAAM,4BAA4B;AAAA,EAC9C;AACA,MAAI,QAAQ,WAAW,EAAG,OAAM,IAAI,MAAM,mCAAmC;AAC7E,aAAW,SAAS,SAAS;AAC3B,UAAM,eAAe,MAAM,CAAC,OAAO,SAAS,OAAO,UAAU,GAAG,KAAK,GAAM;AAAA,EAC7E;AACF;;;ACtOA,eAAe,gBAAmB,KAAa,IAAkC;AAC/E,MAAI,QAAQ;AACZ,MAAI;AACF,UAAM,YAAY,MAAM;AAAA,MACtB;AAAA,MACA,CAAC,YAAY,YAAY,oBAAoB;AAAA,MAC7C;AAAA,MACA;AAAA,IACF;AACA,QAAI,WAAW;AACb,YAAM,eAAe,OAAO,CAAC,OAAO,MAAM,GAAG,GAAG,KAAK,UAAU;AAC/D,cAAQ;AAAA,IACV;AACA,WAAO,MAAM,GAAG;AAAA,EAClB,UAAE;AACA,QAAI,OAAO;AACT,YAAM,eAAe,OAAO,CAAC,OAAO,GAAG,KAAK,UAAU,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IACxE;AAAA,EACF;AACF;AAEA,eAAsB,gBAAgB,KAA8B;AAClE,MAAI,CAAE,MAAM,UAAU,GAAG,EAAI,QAAO;AACpC,MAAI;AACF,UAAM,SAAS,MAAM;AAAA,MAAgB;AAAA,MAAK,MACxC,eAAe,OAAO,CAAC,QAAQ,WAAW,YAAY,GAAG,KAAK,eAAe;AAAA,IAC/E;AACA,WAAO,aAAa,MAAM;AAAA,EAC5B,SAAS,KAAc;AACrB,QAAI,iBAAiB,GAAG,EAAG,QAAO;AAClC,UAAM;AAAA,EACR;AACF;AAEA,eAAsB,cAAc,KAA8B;AAChE,MAAI,CAAE,MAAM,UAAU,GAAG,EAAI,QAAO;AACpC,MAAI;AACF,UAAM,SAAS,MAAM;AAAA,MACnB;AAAA,MACA,CAAC,QAAQ,YAAY,WAAW,YAAY;AAAA,MAC5C;AAAA,MACA;AAAA,IACF;AACA,WAAO,aAAa,MAAM;AAAA,EAC5B,SAAS,KAAc;AACrB,QAAI,iBAAiB,GAAG,EAAG,QAAO;AAClC,UAAM;AAAA,EACR;AACF;AAEA,eAAsB,gBACpB,KACkD;AAClD,MAAI,CAAE,MAAM,UAAU,GAAG,EAAI,QAAO,CAAC;AACrC,QAAM,MAAM,MAAM,eAAe,OAAO,CAAC,UAAU,aAAa,GAAG,KAAK,eAAe;AACvF,MAAI,CAAC,IAAK,QAAO,CAAC;AAClB,SAAO,IACJ,MAAM,IAAI,EACV,OAAO,OAAO,EACd,IAAI,CAAC,UAAU;AAAA,IACd,QAAQ,KAAK,MAAM,GAAG,CAAC,EAAE,KAAK;AAAA,IAC9B,MAAM,KAAK,MAAM,CAAC;AAAA,EACpB,EAAE;AACN;AAQA,eAAsB,iBAAiB,KAAa,MAAsC;AACxF,MAAI,CAAE,MAAM,UAAU,GAAG,EAAI,QAAO;AACpC,MAAI;AACF,UAAM,MAAM,MAAM,eAAe,OAAO,CAAC,UAAU,eAAe,MAAM,IAAI,GAAG,KAAK,UAAU;AAC9F,QAAI,CAAC,IAAK,QAAO;AACjB,UAAM,YAAY,IAAI,MAAM,IAAI,EAAE,CAAC,KAAK;AACxC,WAAO,UAAU,MAAM,GAAG,CAAC,EAAE,KAAK,KAAK;AAAA,EACzC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,IAAM,yBAAyB;AAE/B,IAAM,qBAAqB,oBAAI,IAAoB;AAEnD,eAAe,qBAAqB,KAAqC;AACvE,MAAI;AACF,UAAM,MAAM,MAAM;AAAA,MAChB;AAAA,MACA,CAAC,gBAAgB,4BAA4B,SAAS;AAAA,MACtD;AAAA,MACA;AAAA,IACF;AACA,QAAI,IAAK,QAAO;AAAA,EAClB,QAAQ;AAAA,EAAC;AAET,aAAW,aAAa,CAAC,eAAe,eAAe,GAAG;AACxD,QAAI;AACF,YAAM,eAAe,OAAO,CAAC,aAAa,YAAY,SAAS,GAAG,KAAK,UAAU;AACjF,aAAO;AAAA,IACT,QAAQ;AAAA,IAAC;AAAA,EACX;AAEA,SAAO;AACT;AAEA,eAAsB,iBAAiB,KAAqC;AAC1E,QAAMC,UAAS,mBAAmB,IAAI,GAAG;AACzC,MAAIA,YAAW,OAAW,QAAOA;AACjC,QAAM,WAAW,MAAM,qBAAqB,GAAG;AAC/C,MAAI,aAAa,KAAM,oBAAmB,IAAI,KAAK,QAAQ;AAC3D,SAAO;AACT;AAEA,eAAsB,gBAAgB,KAAa,KAA+B;AAChF,MAAI;AACF,UAAM,eAAe,OAAO,CAAC,aAAa,YAAY,WAAW,GAAG,GAAG,KAAK,GAAK;AACjF,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAsB,kBAAkB,KAAa,QAAkC;AACrF,MAAI;AACF,UAAM,eAAe,OAAO,CAAC,SAAS,UAAU,MAAM,GAAG,KAAK,GAAM;AACpE,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAMA,eAAsB,aAAa,KAAa,YAA4C;AAC1F,MAAI;AACF,WAAO,MAAM,eAAe,OAAO,CAAC,cAAc,MAAM,YAAY,MAAM,GAAG,KAAK,UAAU;AAAA,EAC9F,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAsB,cAAc,KAAa,YAAqC;AACpF,QAAM,YAAY,MAAM,aAAa,KAAK,UAAU;AACpD,MAAI,CAAC,UAAW,QAAO;AAEvB,MAAI;AACF,UAAM,SAAS,MAAM;AAAA,MACnB;AAAA,MACA,CAAC,QAAQ,WAAW,GAAG,SAAS,UAAU,YAAY;AAAA,MACtD;AAAA,MACA;AAAA,IACF;AACA,WAAO,aAAa,MAAM;AAAA,EAC5B,SAAS,KAAc;AACrB,QAAI,iBAAiB,GAAG,EAAG,QAAO;AAClC,WAAO;AAAA,EACT;AACF;AAEA,eAAsB,eACpB,KACA,YACkD;AAClD,QAAM,YAAY,MAAM,aAAa,KAAK,UAAU;AACpD,MAAI,CAAC,UAAW,QAAO,CAAC;AAExB,MAAI;AACF,UAAM,MAAM,MAAM;AAAA,MAChB;AAAA,MACA,CAAC,QAAQ,iBAAiB,GAAG,SAAS,QAAQ;AAAA,MAC9C;AAAA,MACA;AAAA,IACF;AACA,QAAI,CAAC,IAAK,QAAO,CAAC;AAClB,WAAO,IACJ,MAAM,IAAI,EACV,OAAO,OAAO,EACd,IAAI,CAAC,SAAS;AACb,YAAM,QAAQ,KAAK,MAAM,GAAI;AAC7B,aAAO;AAAA,QACL,QAAQ,MAAM,CAAC,KAAK;AAAA,QACpB,MAAM,MAAM,CAAC,KAAK;AAAA,MACpB;AAAA,IACF,CAAC;AAAA,EACL,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEA,eAAsB,oBAAoB,KAAqC;AAC7E,MAAI;AACF,UAAM,WAAW,MAAM,eAAe,OAAO,CAAC,SAAS,QAAQ,GAAG,KAAK,eAAe;AACtF,QAAI,SAAU,QAAO;AAErB,WAAO,MAAM,eAAe,OAAO,CAAC,aAAa,MAAM,GAAG,KAAK,eAAe;AAAA,EAChF,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAsB,gBACpB,KACA,SACA,OACiB;AACjB,MAAI;AACF,UAAM,SAAS,MAAM;AAAA,MACnB;AAAA,MACA,CAAC,QAAQ,WAAW,SAAS,OAAO,YAAY;AAAA,MAChD;AAAA,MACA;AAAA,IACF;AACA,WAAO,aAAa,MAAM;AAAA,EAC5B,SAAS,KAAc;AACrB,QAAI,iBAAiB,GAAG,EAAG,QAAO;AAClC,WAAO;AAAA,EACT;AACF;AAEA,eAAsB,iBACpB,KACA,SACA,OACkD;AAClD,MAAI;AACF,UAAM,MAAM,MAAM;AAAA,MAChB;AAAA,MACA,CAAC,QAAQ,iBAAiB,SAAS,KAAK;AAAA,MACxC;AAAA,MACA;AAAA,IACF;AACA,QAAI,CAAC,IAAK,QAAO,CAAC;AAClB,WAAO,IACJ,MAAM,IAAI,EACV,OAAO,OAAO,EACd,IAAI,CAAC,SAAS;AACb,YAAM,QAAQ,KAAK,MAAM,GAAI;AAC7B,aAAO;AAAA,QACL,QAAQ,MAAM,CAAC,KAAK;AAAA,QACpB,MAAM,MAAM,CAAC,KAAK;AAAA,MACpB;AAAA,IACF,CAAC;AAAA,EACL,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEA,eAAsB,aAAa,KAAa,SAAiB,OAAgC;AAC/F,MAAI;AACF,UAAM,SAAS,MAAM;AAAA,MACnB;AAAA,MACA,CAAC,QAAQ,WAAW,GAAG,OAAO,MAAM,KAAK,IAAI,YAAY;AAAA,MACzD;AAAA,MACA;AAAA,IACF;AACA,WAAO,aAAa,MAAM;AAAA,EAC5B,SAAS,KAAc;AACrB,QAAI,iBAAiB,GAAG,EAAG,QAAO;AAClC,WAAO;AAAA,EACT;AACF;AAEA,eAAsB,cACpB,KACA,SACA,OACkD;AAClD,MAAI;AACF,UAAM,MAAM,MAAM;AAAA,MAChB;AAAA,MACA,CAAC,QAAQ,iBAAiB,GAAG,OAAO,MAAM,KAAK,EAAE;AAAA,MACjD;AAAA,MACA;AAAA,IACF;AACA,QAAI,CAAC,IAAK,QAAO,CAAC;AAClB,WAAO,IACJ,MAAM,IAAI,EACV,OAAO,OAAO,EACd,IAAI,CAAC,SAAS;AACb,YAAM,QAAQ,KAAK,MAAM,GAAI;AAC7B,aAAO;AAAA,QACL,QAAQ,MAAM,CAAC,KAAK;AAAA,QACpB,MAAM,MAAM,CAAC,KAAK;AAAA,MACpB;AAAA,IACF,CAAC;AAAA,EACL,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAgBA,eAAsB,aAAa,KAAa,MAAc,KAAqC;AACjG,MAAI,CAAE,MAAM,UAAU,GAAG,EAAI,QAAO;AACpC,MAAI;AACF,WAAO,MAAM,eAAe,OAAO,CAAC,QAAQ,GAAG,GAAG,IAAI,IAAI,EAAE,GAAG,KAAK,eAAe;AAAA,EACrF,SAAS,KAAc;AACrB,QAAI,iBAAiB,GAAG,EAAG,QAAO;AAClC,WAAO;AAAA,EACT;AACF;AAMA,SAAS,kBAAkB,KAAkC;AAC3D,QAAM,SAAS,IAAI,OAAO,CAAC;AAC3B,MAAI,WAAW,OAAO,WAAW,OAAO,WAAW,OAAO,WAAW,KAAK;AACxE,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,gBAAgB,MAA4D;AACnF,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,QAAQ,KAAK,MAAM,GAAI;AAC7B,QAAM,SAAS,kBAAkB,MAAM,CAAC,KAAK,EAAE;AAC/C,MAAI,WAAW,KAAM,QAAO;AAC5B,MAAI,WAAW,KAAK;AAClB,UAAM,UAAU,MAAM,CAAC;AACvB,UAAM,UAAU,MAAM,CAAC;AACvB,QAAI,CAAC,WAAW,CAAC,QAAS,QAAO;AACjC,WAAO,EAAE,SAAS,MAAM,EAAE,SAAS,QAAQ,IAAI,EAAE;AAAA,EACnD;AACA,QAAM,OAAO,MAAM,CAAC;AACpB,MAAI,CAAC,KAAM,QAAO;AAClB,SAAO,EAAE,SAAS,MAAM,MAAM,EAAE,SAAS,MAAM,OAAO,EAAE;AAC1D;AAYA,eAAsB,YACpB,KACA,QACA,QACkC;AAClC,QAAM,SAAS,oBAAI,IAAwB;AAC3C,MAAI,CAAE,MAAM,UAAU,GAAG,EAAI,QAAO;AACpC,MAAI,MAAM;AACV,MAAI;AACF,UAAM,MAAM;AAAA,MACV;AAAA,MACA,CAAC,QAAQ,iBAAiB,sBAAsB,GAAG,MAAM,KAAK,MAAM,EAAE;AAAA,MACtE;AAAA,MACA;AAAA,IACF;AAAA,EACF,QAAQ;AACN,WAAO;AAAA,EACT;AACA,MAAI,CAAC,IAAK,QAAO;AACjB,aAAW,QAAQ,IAAI,MAAM,IAAI,GAAG;AAClC,UAAM,SAAS,gBAAgB,IAAI;AACnC,QAAI,OAAQ,QAAO,IAAI,OAAO,SAAS,OAAO,IAAI;AAAA,EACpD;AACA,SAAO;AACT;;;AhJ1SA,IAAM,uBAAuB,iBAC1B,OAAO;AAAA,EACN,0BAA0B,iBACvB,OAAO,EAAE,wBAAwB,iBAAE,OAAO,EAAE,SAAS,iBAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EACpE,YAAY;AACjB,CAAC,EACA,YAAY;AAEf,eAAe,wBAA0C;AACvD,MAAI;AACF,UAAM,eAAe,MAAMC,UAASC,MAAKC,SAAQ,GAAG,cAAc,GAAG,OAAO;AAC5E,UAAM,SAAS,qBAAqB,UAAU,KAAK,MAAM,YAAY,CAAC;AACtE,WACE,OAAO,WACP,OAAO,KAAK,yBAAyB,uBAAuB,YAAY;AAAA,EAE5E,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,IAAM,eAAoC,EAAE,QAAQ,WAAW,QAAQ,OAAO;AAOvE,SAAS,0BACd,MAMY;AACZ,MAAI,CAAC,KAAM,QAAO;AAClB,SAAO;AAAA,IACL,QAAQ,KAAK;AAAA,IACb,cAAc,KAAK;AAAA,IACnB,YAAY,KAAK;AAAA,IACjB,QAAQ,KAAK;AAAA,IACb,oBAAoB,KAAK;AAAA,EAC3B;AACF;AAEA,eAAsB,mBACpB,YACA,YACA,eACA,iBAUA,uBAI8B;AAC9B,SAAO,eAAe,sBAAsB,YAAY;AACtD,UAAM,CAAC,QAAQ,cAAc,YAAY,eAAe,IAAI,MAAM,QAAQ,IAAI;AAAA,MAC5E,aAAa,uBAAuB,MAAM;AAAA,MAC1C,mBAAmB,uBAAuB,YAAY;AAAA,MACtD,oBAAoB,UAAU;AAAA,MAC9B,qBAAqB,eAAe;AAAA,IACtC,CAAC;AAED,UAAM,CAAC,YAAY,QAAQ,oBAAoB,eAAe,IAAI,MAAM,QAAQ,IAAI;AAAA,MAClF,iBAAiB,cAAc,YAAY,QAAW,uBAAuB,UAAU;AAAA,MACvF,aAAa,cAAc,uBAAuB,MAAM;AAAA,MACxD,yBAAyB,uBAAuB,kBAAkB;AAAA,MAClE,sBAAsB;AAAA,IACxB,CAAC;AACD,UAAM,kBAAkB,kBACpB,CAAC,GAAG,qBAAqB,OAAO,IAChC,qBAAqB,QAAQ,OAAO,CAAC,MAAM,MAAM,MAAM;AAE3D,QAAI;AACJ,YAAQ,WAAW,MAAM;AAAA,MACvB,KAAK;AAAA,MACL,KAAK;AACH,wBAAgB,WAAW;AAC3B;AAAA,MACF,KAAK;AACH,wBAAgB,iBAAiB;AACjC;AAAA,IACJ;AAEA,UAAM,YACJ,cAAc,eAAe,SAAS,aAAa;AACrD,UAAM,WAAW,oBAAoB,WAAW,QAAQ,GAAG;AAC3D,QAAI,SAAS,SAAS,YAAY;AAChC,sBAAgB;AAAA,QACd,GAAG;AAAA,QACH,cAAc;AAAA,UACZ,UAAU,SAAS;AAAA,UACnB,WAAW,SAAS;AAAA,UACpB,QAAQ,SAAS;AAAA,QACnB;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAASA,SAAQ;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,mBAAmB;AAAA,IACrB;AAAA,EACF,CAAC;AACH;AAQA,eAAsB,mCACpB,YACA,YACA,eACA,MACA,iBACA,uBAI8B;AAC9B,QAAM,QAAQ,MAAM;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,MAAI,CAAC,MAAM,eAAgB,QAAO;AAClC,MAAI,MAAM,eAAe,WAAW,UAAW,QAAO;AAEtD,QAAM,IAAI,QAAc,CAAC,YAAY;AACnC,eAAW,SAAS,GAAK;AAAA,EAC3B,CAAC;AACD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":["readFile","homedir","join","code","cached","match","readFile","stat","join","schema","readFile","join","stat","LoroCounter","LoroList","LoroMap","LoroMovableList","LoroText","schema","doc","value","item","diff","prop","base","value","doc","map","schema","item","diff","text","list","prop","containerValue","base","cached","LoroCounter","LoroList","LoroMovableList","LoroMap","LoroText","container","options","base","value","LoroDoc","found","map","prop","text","copy","found","schema","attrs","set","doc","match","base","i","type","nfa","compile","edge","expr","node","states","name","prop","mark","block","add","inline","space","fromCodePoint","code","regex_default","regex_default","regex_default","regex_default","regex_default","regex_default","_a","CharCodes","BinTrieFlags","code","EntityDecoderState","DecodingMode","errors","base","_a","map","escape","match","EntityLevel","EncodingMode","fromCodePoint","match","code","entity","regex_default","found","code","code","list","attrs","text","match","replace","text","item","replace","code","nextLine","pos","max","_rules","linkify","match","link","escape","postProcess","code","attrs","code","attrs","isLinkOpen","isLinkClose","match","match","code","fromCodePoint","_rules","linkify","escape","_rules2","regex_default","assign","_class","isString","escapeRE","text","match","tlds","schema","list","normalize","decode","encode","list","schema","tokenHandlers","text","attrs","tokens","doc","fence","link","escape","add","join","postProcess","diff","value","map","change","r","o","list","line","toPos","maxErrors","diff","_loop","patchObj","text","doc","list","doc","LoroDoc","backticksFor","match","text","block","doc","PermissionModeSchema","PermissionModeSchema","PermissionModeSchema","PermissionModeSchema","match","block","match","block","config","text","match","ext","toRecord","map","run","link","match","cached","readFile","join","homedir"]}
|